@openziti/ziti-console-lib 0.12.10 → 1.0.0
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.
- package/assets/fonts/icomoon.eot +0 -0
- package/assets/fonts/icomoon.svg +6 -1
- package/assets/fonts/icomoon.ttf +0 -0
- package/assets/fonts/icomoon.woff +0 -0
- package/assets/fonts/icomoon.woff2 +0 -0
- package/assets/styles/global.scss +431 -24
- package/assets/styles/icons.scss +644 -0
- package/assets/svgs/Icon_Log_Logout.svg +43 -0
- package/assets/svgs/clients.svg +6 -0
- package/assets/svgs/identity-marker.svg +8 -0
- package/assets/svgs/router-marker.svg +7 -0
- package/assets/svgs/ziti-logo.svg +23 -0
- package/esm2022/lib/ZAC_VERSION.mjs +4 -0
- package/esm2022/lib/default-app-config.mjs +5 -0
- package/esm2022/lib/features/card/card.component.mjs +4 -5
- package/esm2022/lib/features/card-list/card-list.component.mjs +2 -4
- package/esm2022/lib/features/config-editor/config-editor.component.mjs +2 -3
- package/esm2022/lib/features/confirm/confirm.component.mjs +4 -5
- package/esm2022/lib/features/creation-summary-dialog/creation-summary-dialog.component.mjs +2 -3
- package/esm2022/lib/features/custom-tags/custom-tags.component.mjs +4 -5
- package/esm2022/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.mjs +2 -3
- package/esm2022/lib/features/data-table/cells/table-cell-name/table-cell-name.component.mjs +2 -3
- package/esm2022/lib/features/data-table/cells/table-cell-select/table-cell-select.component.mjs +4 -5
- package/esm2022/lib/features/data-table/cells/table-cell-token/table-cell-token.component.mjs +2 -3
- package/esm2022/lib/features/data-table/column-headers/table-column-default/table-column-default.component.mjs +2 -3
- package/esm2022/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.mjs +2 -3
- package/esm2022/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.mjs +2 -3
- package/esm2022/lib/features/data-table/column-headers/table-column-select/table-column-select.component.mjs +4 -5
- package/esm2022/lib/features/data-table/data-table-filter.service.mjs +2 -3
- package/esm2022/lib/features/data-table/data-table.component.mjs +4 -5
- package/esm2022/lib/features/data-table/data-table.service.mjs +2 -3
- package/esm2022/lib/features/data-table/table-filter-bar/filter-bar.component.mjs +4 -5
- package/esm2022/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.mjs +2 -3
- package/esm2022/lib/features/data-table/tooltips/os-tooltip.component.mjs +2 -3
- package/esm2022/lib/features/data-table/tooltips/sdk-tooltip.component.mjs +2 -3
- package/esm2022/lib/features/dynamic-widgets/boolean/boolean-toggle-input.component.mjs +2 -3
- package/esm2022/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.mjs +2 -3
- package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.mjs +2 -3
- package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.mjs +2 -3
- package/esm2022/lib/features/dynamic-widgets/number/number-input.component.mjs +2 -3
- package/esm2022/lib/features/dynamic-widgets/object/object.component.mjs +4 -5
- package/esm2022/lib/features/dynamic-widgets/password/password-input.component.mjs +2 -3
- package/esm2022/lib/features/dynamic-widgets/port-ranges/port-ranges.component.mjs +2 -3
- package/esm2022/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.mjs +2 -3
- package/esm2022/lib/features/dynamic-widgets/selector/selector-input.component.mjs +2 -3
- package/esm2022/lib/features/dynamic-widgets/string/string-input.component.mjs +2 -3
- package/esm2022/lib/features/dynamic-widgets/text-list/text-list-input.component.mjs +2 -3
- package/esm2022/lib/features/extendable/extendable.component.mjs +2 -3
- package/esm2022/lib/features/extendable/extensions-noop.service.mjs +3 -3
- package/esm2022/lib/features/header-bar/header-bar.component.mjs +105 -0
- package/esm2022/lib/features/json-view/json-view.component.mjs +4 -5
- package/esm2022/lib/features/list-page-features/list-page-form/list-page-form.component.mjs +2 -3
- package/esm2022/lib/features/list-page-features/list-page-header/list-page-header.component.mjs +4 -5
- package/esm2022/lib/features/loading-indicator/loading-indicator.component.mjs +2 -3
- package/esm2022/lib/features/login/login-dialog.component.mjs +10 -12
- package/esm2022/lib/features/messaging/growler.component.mjs +4 -5
- package/esm2022/lib/features/messaging/growler.module.mjs +2 -3
- package/esm2022/lib/features/messaging/growler.service.mjs +2 -3
- package/esm2022/lib/features/messaging/logger.service.mjs +2 -3
- package/esm2022/lib/features/multi-action-button/multi-action-button.component.mjs +2 -3
- package/esm2022/lib/features/no-items/no-items.component.mjs +2 -3
- package/esm2022/lib/features/overrides/overrides.component.mjs +2 -3
- package/esm2022/lib/features/overrides/overrides.service.mjs +2 -3
- package/esm2022/lib/features/preview-list/preview-list.component.mjs +4 -5
- package/esm2022/lib/features/preview-selections/preview-selections.component.mjs +2 -3
- package/esm2022/lib/features/progress-meter/progress-meter.component.mjs +2 -3
- package/esm2022/lib/features/progress-wizard/progress-wizard.component.mjs +2 -3
- package/esm2022/lib/features/projectable-forms/api-session/api-session-form.component.mjs +5 -9
- package/esm2022/lib/features/projectable-forms/api-session/api-session-form.service.mjs +2 -3
- package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.component.mjs +5 -9
- package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.service.mjs +2 -3
- package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.mjs +5 -9
- package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.mjs +2 -3
- package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.mjs +4 -8
- package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.mjs +2 -3
- package/esm2022/lib/features/projectable-forms/config-type/config-type-form.component.mjs +5 -9
- package/esm2022/lib/features/projectable-forms/config-type/config-type-form.service.mjs +2 -3
- package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +5 -9
- package/esm2022/lib/features/projectable-forms/configuration/configuration.service.mjs +2 -3
- package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +34 -26
- package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.service.mjs +2 -3
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +8 -12
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.mjs +2 -3
- package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +4 -5
- package/esm2022/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.mjs +4 -5
- package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +4 -5
- package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +25 -21
- package/esm2022/lib/features/projectable-forms/identity/identity-form.service.mjs +2 -3
- package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.mjs +5 -12
- package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.mjs +2 -3
- package/esm2022/lib/features/projectable-forms/posture-check/posture-check-form.component.mjs +5 -9
- package/esm2022/lib/features/projectable-forms/posture-check/posture-check-form.service.mjs +2 -3
- package/esm2022/lib/features/projectable-forms/projectable-form.class.mjs +36 -74
- package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +6 -9
- package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +2 -3
- package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +57 -19
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +8 -12
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.mjs +2 -3
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +8 -12
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +3 -4
- package/esm2022/lib/features/projectable-forms/session/session-form.component.mjs +5 -9
- package/esm2022/lib/features/projectable-forms/session/session-form.service.mjs +2 -3
- package/esm2022/lib/features/projectable-forms/terminator/terminator-form.component.mjs +4 -8
- package/esm2022/lib/features/projectable-forms/terminator/terminator-form.service.mjs +2 -3
- package/esm2022/lib/features/projectable-forms/transit-router/transit-router-form.component.mjs +7 -11
- package/esm2022/lib/features/projectable-forms/transit-router/transit-router-form.service.mjs +2 -3
- package/esm2022/lib/features/qr-code/qr-code.component.mjs +4 -5
- package/esm2022/lib/features/quick-add/quick-add.component.mjs +50 -0
- package/esm2022/lib/features/reset-enrollment/reset-enrollment.component.mjs +4 -5
- package/esm2022/lib/features/reset-enrollment/reset-enrollment.service.mjs +2 -3
- package/esm2022/lib/features/side-modal/side-modal.component.mjs +2 -3
- package/esm2022/lib/features/side-navigator/side-navigator.component.mjs +127 -0
- package/esm2022/lib/features/sidebars/side-navbar/side-navbar.component.mjs +4 -5
- package/esm2022/lib/features/tag-selector/tag-selector.component.mjs +2 -3
- package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.component.mjs +2 -3
- package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.helper.mjs +2 -3
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.component.mjs +2 -3
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.helper.mjs +2 -3
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.mjs +2 -3
- package/esm2022/lib/features/visualizer/visualizer-service.class.mjs +2 -3
- package/esm2022/lib/pages/api-sessions/api-sessions-page.component.mjs +2 -3
- package/esm2022/lib/pages/api-sessions/api-sessions-page.service.mjs +2 -3
- package/esm2022/lib/pages/attributes/attributes.component.mjs +104 -0
- package/esm2022/lib/pages/auth-policies/auth-policies-page.component.mjs +2 -3
- package/esm2022/lib/pages/auth-policies/auth-policies-page.service.mjs +6 -6
- package/esm2022/lib/pages/callback/callback.component.mjs +2 -3
- package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.component.mjs +2 -3
- package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.service.mjs +2 -3
- package/esm2022/lib/pages/config-types/config-types-page.component.mjs +2 -3
- package/esm2022/lib/pages/config-types/config-types-page.service.mjs +2 -3
- package/esm2022/lib/pages/configurations/configurations-page.component.mjs +2 -3
- package/esm2022/lib/pages/configurations/configurations-page.service.mjs +2 -3
- package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.component.mjs +6 -13
- package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.service.mjs +2 -3
- package/esm2022/lib/pages/edge-routers/edge-routers-page.component.mjs +5 -16
- package/esm2022/lib/pages/edge-routers/edge-routers-page.service.mjs +2 -4
- package/esm2022/lib/pages/geolocate/geolocate.component.mjs +130 -0
- package/esm2022/lib/pages/identities/identities-page.component.mjs +5 -16
- package/esm2022/lib/pages/identities/identities-page.service.mjs +2 -3
- package/esm2022/lib/pages/jwt-signers/jwt-signers-page.component.mjs +2 -3
- package/esm2022/lib/pages/jwt-signers/jwt-signers-page.service.mjs +2 -3
- package/esm2022/lib/pages/posture-checks/posture-checks-page.component.mjs +3 -4
- package/esm2022/lib/pages/posture-checks/posture-checks-page.service.mjs +2 -3
- package/esm2022/lib/pages/profile/profile.component.mjs +58 -0
- package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.mjs +6 -13
- package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.mjs +2 -3
- package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +6 -13
- package/esm2022/lib/pages/service-policies/service-policies-page.service.mjs +2 -3
- package/esm2022/lib/pages/services/services-page.component.mjs +6 -13
- package/esm2022/lib/pages/services/services-page.service.mjs +2 -3
- package/esm2022/lib/pages/sessions/sessions-page.component.mjs +2 -3
- package/esm2022/lib/pages/sessions/sessions-page.service.mjs +2 -3
- package/esm2022/lib/pages/settings/settings.component.mjs +61 -0
- package/esm2022/lib/pages/terminators/terminators-page.component.mjs +3 -4
- package/esm2022/lib/pages/terminators/terminators-page.service.mjs +2 -3
- package/esm2022/lib/pages/transit-routers/transit-routers-page.component.mjs +5 -16
- package/esm2022/lib/pages/transit-routers/transit-routers-page.service.mjs +2 -3
- package/esm2022/lib/safe.pipe.mjs +2 -3
- package/esm2022/lib/services/auth.service.mjs +2 -3
- package/esm2022/lib/services/console-events.service.mjs +2 -14
- package/esm2022/lib/services/csv-download.service.mjs +2 -3
- package/esm2022/lib/services/deactivate-guard.service.mjs +2 -3
- package/esm2022/lib/services/login-service.class.mjs +2 -3
- package/esm2022/lib/services/node-data.service.mjs +24 -3
- package/esm2022/lib/services/noop-login.service.mjs +2 -3
- package/esm2022/lib/services/schema.service.mjs +2 -3
- package/esm2022/lib/services/settings-service.class.mjs +5 -18
- package/esm2022/lib/services/settings.service.mjs +14 -11
- package/esm2022/lib/services/tab-name.service.mjs +9 -6
- package/esm2022/lib/services/validation.service.mjs +2 -3
- package/esm2022/lib/services/ziti-controller-data.service.mjs +18 -3
- package/esm2022/lib/services/ziti-data.service.mjs +2 -3
- package/esm2022/lib/shared/list-page-component.class.mjs +6 -3
- package/esm2022/lib/shared/list-page-service.class.mjs +2 -3
- package/esm2022/lib/zac-routing.module.mjs +3 -10
- package/esm2022/lib/ziti-console-lib.module.mjs +43 -24
- package/esm2022/lib/ziti-console.constants.mjs +2 -1
- package/esm2022/public-api.mjs +9 -8
- package/fesm2022/openziti-ziti-console-lib.mjs +3535 -4325
- package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
- package/lib/ZAC_VERSION.d.ts +4 -0
- package/lib/ZAC_VERSION.d.ts.map +1 -0
- package/lib/default-app-config.d.ts +9 -0
- package/lib/default-app-config.d.ts.map +1 -0
- package/lib/features/card-list/card-list.component.d.ts +0 -1
- package/lib/features/card-list/card-list.component.d.ts.map +1 -1
- package/lib/features/extendable/extensions-noop.service.d.ts +2 -0
- package/lib/features/extendable/extensions-noop.service.d.ts.map +1 -1
- package/lib/features/header-bar/header-bar.component.d.ts +29 -0
- package/lib/features/header-bar/header-bar.component.d.ts.map +1 -0
- package/lib/features/login/login-dialog.component.d.ts +2 -1
- package/lib/features/login/login-dialog.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/api-session/api-session-form.component.d.ts +1 -2
- package/lib/features/projectable-forms/api-session/api-session-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts +1 -2
- package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts +1 -2
- package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts +1 -2
- package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/config-type/config-type-form.component.d.ts +1 -2
- package/lib/features/projectable-forms/config-type/config-type-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +1 -2
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts +6 -3
- package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +1 -2
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts +2 -2
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts +1 -2
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/posture-check/posture-check-form.component.d.ts +1 -2
- package/lib/features/projectable-forms/posture-check/posture-check-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/projectable-form.class.d.ts +11 -7
- package/lib/features/projectable-forms/projectable-form.class.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/service-form.component.d.ts +0 -1
- package/lib/features/projectable-forms/service/service-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts +9 -2
- package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +1 -2
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +1 -2
- package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/session/session-form.component.d.ts +1 -2
- package/lib/features/projectable-forms/session/session-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts +1 -2
- package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/transit-router/transit-router-form.component.d.ts +1 -2
- package/lib/features/projectable-forms/transit-router/transit-router-form.component.d.ts.map +1 -1
- package/lib/features/quick-add/quick-add.component.d.ts +15 -0
- package/lib/features/quick-add/quick-add.component.d.ts.map +1 -0
- package/lib/features/side-navigator/side-navigator.component.d.ts +33 -0
- package/lib/features/side-navigator/side-navigator.component.d.ts.map +1 -0
- package/lib/pages/attributes/attributes.component.d.ts +31 -0
- package/lib/pages/attributes/attributes.component.d.ts.map +1 -0
- package/lib/pages/auth-policies/auth-policies-page.service.d.ts.map +1 -1
- package/lib/pages/edge-router-policies/edge-router-policies-page.component.d.ts +1 -3
- package/lib/pages/edge-router-policies/edge-router-policies-page.component.d.ts.map +1 -1
- package/lib/pages/edge-routers/edge-routers-page.component.d.ts +1 -3
- package/lib/pages/edge-routers/edge-routers-page.component.d.ts.map +1 -1
- package/lib/pages/edge-routers/edge-routers-page.service.d.ts.map +1 -1
- package/lib/pages/geolocate/geolocate.component.d.ts +32 -0
- package/lib/pages/geolocate/geolocate.component.d.ts.map +1 -0
- package/lib/pages/identities/identities-page.component.d.ts +1 -3
- package/lib/pages/identities/identities-page.component.d.ts.map +1 -1
- package/lib/pages/profile/profile.component.d.ts +17 -0
- package/lib/pages/profile/profile.component.d.ts.map +1 -0
- package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.d.ts +1 -3
- package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.d.ts.map +1 -1
- package/lib/pages/service-policies/service-policies-page.component.d.ts +1 -3
- package/lib/pages/service-policies/service-policies-page.component.d.ts.map +1 -1
- package/lib/pages/services/services-page.component.d.ts +1 -3
- package/lib/pages/services/services-page.component.d.ts.map +1 -1
- package/lib/pages/settings/settings.component.d.ts +23 -0
- package/lib/pages/settings/settings.component.d.ts.map +1 -0
- package/lib/pages/transit-routers/transit-routers-page.component.d.ts +1 -3
- package/lib/pages/transit-routers/transit-routers-page.component.d.ts.map +1 -1
- package/lib/services/console-events.service.d.ts.map +1 -1
- package/lib/services/node-data.service.d.ts +1 -0
- package/lib/services/node-data.service.d.ts.map +1 -1
- package/lib/services/settings-service.class.d.ts +0 -2
- package/lib/services/settings-service.class.d.ts.map +1 -1
- package/lib/services/settings.service.d.ts.map +1 -1
- package/lib/services/tab-name.service.d.ts.map +1 -1
- package/lib/services/ziti-controller-data.service.d.ts +1 -0
- package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
- package/lib/services/ziti-data.service.d.ts +1 -0
- package/lib/services/ziti-data.service.d.ts.map +1 -1
- package/lib/shared/list-page-component.class.d.ts.map +1 -1
- package/lib/zac-routing.module.d.ts.map +1 -1
- package/lib/ziti-console-lib.module.d.ts +114 -110
- package/lib/ziti-console-lib.module.d.ts.map +1 -1
- package/lib/ziti-console.constants.d.ts +1 -0
- package/lib/ziti-console.constants.d.ts.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +8 -7
- package/public-api.d.ts.map +1 -1
- package/assets/components/add.html +0 -1
- package/assets/components/api.html +0 -12
- package/assets/components/customtags.html +0 -4
- package/assets/components/line.html +0 -1
- package/assets/components/noitems.html +0 -1
- package/assets/components/save.html +0 -4
- package/assets/components/search.html +0 -8
- package/assets/components/tabIdentities.html +0 -5
- package/assets/components/tabPolicies.html +0 -7
- package/assets/components/tabRouters.html +0 -5
- package/assets/components/tabServers.html +0 -4
- package/assets/components/tabServices.html +0 -6
- package/assets/components/tabSessions.html +0 -4
- package/assets/data/mail.json +0 -0
- package/assets/data/services.json +0 -6
- package/assets/data/site.json +0 -31
- package/assets/data/tags.json +0 -7
- package/assets/data/templates.json +0 -1
- package/assets/fonts/zac.eot +0 -0
- package/assets/fonts/zac.svg +0 -57
- package/assets/fonts/zac.ttf +0 -0
- package/assets/fonts/zac.woff +0 -0
- package/assets/fonts/zac.woff2 +0 -0
- package/assets/html/api-sessions.htm +0 -152
- package/assets/html/attributes.htm +0 -260
- package/assets/html/auth-policies.htm +0 -410
- package/assets/html/cas.htm +0 -439
- package/assets/html/config-types.htm +0 -167
- package/assets/html/configs.htm +0 -238
- package/assets/html/deprecated/fabric-links.htm +0 -336
- package/assets/html/deprecated/fabric-routers.htm +0 -72
- package/assets/html/deprecated/fabric-services.htm +0 -494
- package/assets/html/identities.htm +0 -934
- package/assets/html/index.htm +0 -179
- package/assets/html/jwt-signers.htm +0 -260
- package/assets/html/known.htm +0 -115
- package/assets/html/login.htm +0 -131
- package/assets/html/organization.htm +0 -223
- package/assets/html/posture-checks.htm +0 -393
- package/assets/html/profile.htm +0 -52
- package/assets/html/recipes.htm +0 -455
- package/assets/html/router-policies.htm +0 -168
- package/assets/html/routers.htm +0 -323
- package/assets/html/servers.htm +0 -236
- package/assets/html/service-policies.htm +0 -197
- package/assets/html/service-router-policies.htm +0 -170
- package/assets/html/services.htm +0 -634
- package/assets/html/sessions.htm +0 -157
- package/assets/html/settings.htm +0 -146
- package/assets/html/terminators.htm +0 -244
- package/assets/html/transit-routers.htm +0 -173
- package/assets/resources/avatar/man.svg +0 -78
- package/assets/resources/avatar/woman.svg +0 -96
- package/assets/resources/icon/analysis.svg +0 -104
- package/assets/resources/icon/appwans.svg +0 -20
- package/assets/resources/icon/architecture.svg +0 -1
- package/assets/resources/icon/bike.svg +0 -94
- package/assets/resources/icon/bus.svg +0 -64
- package/assets/resources/icon/cas.svg +0 -46
- package/assets/resources/icon/clusters.svg +0 -28
- package/assets/resources/icon/computer.svg +0 -1
- package/assets/resources/icon/data.svg +0 -1
- package/assets/resources/icon/delivery-truck.svg +0 -1
- package/assets/resources/icon/explosion.svg +0 -81
- package/assets/resources/icon/fabricServices.svg +0 -31
- package/assets/resources/icon/fabrics.svg +0 -136
- package/assets/resources/icon/front.svg +0 -83
- package/assets/resources/icon/gateway.svg +0 -49
- package/assets/resources/icon/gear.svg +0 -122
- package/assets/resources/icon/house.svg +0 -72
- package/assets/resources/icon/language.svg +0 -1
- package/assets/resources/icon/objective.svg +0 -55
- package/assets/resources/icon/route.svg +0 -97
- package/assets/resources/icon/routers.svg +0 -27
- package/assets/resources/icon/startup.svg +0 -112
- package/assets/resources/icon/switch.svg +0 -101
- package/assets/scripts/chart.min.js +0 -7
- package/assets/scripts/commands.js +0 -112
- package/assets/scripts/components/codemirror/codemirror.css +0 -356
- package/assets/scripts/components/codemirror/codemirror.js +0 -9741
- package/assets/scripts/components/codemirror/modes/addons/closetags.js +0 -200
- package/assets/scripts/components/codemirror/modes/addons/colorize.js +0 -40
- package/assets/scripts/components/codemirror/modes/addons/css-hint.js +0 -66
- package/assets/scripts/components/codemirror/modes/addons/formatting.js +0 -124
- package/assets/scripts/components/codemirror/modes/addons/html-hint.js +0 -366
- package/assets/scripts/components/codemirror/modes/addons/javascript-hint.js +0 -159
- package/assets/scripts/components/codemirror/modes/addons/show-hint.css +0 -36
- package/assets/scripts/components/codemirror/modes/addons/show-hint.js +0 -482
- package/assets/scripts/components/codemirror/modes/css.js +0 -831
- package/assets/scripts/components/codemirror/modes/htmlmixed.js +0 -152
- package/assets/scripts/components/codemirror/modes/javascript.js +0 -930
- package/assets/scripts/components/codemirror/modes/xml.js +0 -413
- package/assets/scripts/components/column.css +0 -184
- package/assets/scripts/components/column.js +0 -165
- package/assets/scripts/components/flows.css +0 -0
- package/assets/scripts/components/flows.js +0 -48
- package/assets/scripts/components/moment.js +0 -4602
- package/assets/scripts/components/multiselect.js +0 -333
- package/assets/scripts/components/resources.js +0 -26
- package/assets/scripts/components/selector-new.js +0 -300
- package/assets/scripts/components/selector.js +0 -300
- package/assets/scripts/components/spectrum.js +0 -2323
- package/assets/scripts/components/timezone.js +0 -1545
- package/assets/scripts/context.js +0 -177
- package/assets/scripts/dragging.js +0 -58
- package/assets/scripts/forms/forms.js +0 -74
- package/assets/scripts/forms/host.v1.htm +0 -43
- package/assets/scripts/forms/intercept.v1.htm +0 -0
- package/assets/scripts/forms/schema.js +0 -693
- package/assets/scripts/growler.js +0 -137
- package/assets/scripts/header.js +0 -163
- package/assets/scripts/jquery-3.6.3.min.js +0 -2
- package/assets/scripts/jquery.datetimepicker.js +0 -2930
- package/assets/scripts/locale.js +0 -47
- package/assets/scripts/modal.js +0 -65
- package/assets/scripts/model/data.js +0 -558
- package/assets/scripts/model/fabric.js +0 -55
- package/assets/scripts/model/fabricServices.js +0 -45
- package/assets/scripts/model/known.js +0 -43
- package/assets/scripts/model/links.js +0 -44
- package/assets/scripts/model/routers.js +0 -51
- package/assets/scripts/model/series.js +0 -70
- package/assets/scripts/model/sessions.js +0 -61
- package/assets/scripts/model/settings.js +0 -60
- package/assets/scripts/model/summary.js +0 -49
- package/assets/scripts/model/tags.js +0 -310
- package/assets/scripts/model/templates.js +0 -42
- package/assets/scripts/model/user.js +0 -40
- package/assets/scripts/restrictions.js +0 -34
- package/assets/scripts/service.js +0 -76
- package/assets/scripts/validation-tools.js +0 -5119
- package/assets/scripts/ziti.js +0 -372
- package/assets/styles/chart.min.css +0 -1
- package/assets/styles/datetimepicker.css +0 -1
- package/assets/styles/forms.css +0 -521
- package/assets/styles/growler.css +0 -190
- package/assets/styles/header.css +0 -232
- package/assets/styles/icons.css +0 -182
- package/assets/styles/navigation.css +0 -183
- package/assets/styles/select2.css +0 -481
- package/assets/styles/spectrum.css +0 -507
- package/assets/styles/tables.css +0 -449
- package/assets/styles/tooltip.css +0 -134
- package/assets/styles/ziti.css +0 -3271
- package/assets/templates/footer.htm +0 -183
- package/assets/templates/header.htm +0 -297
- package/esm2022/lib/features/sidebars/side-banner/side-banner.component.mjs +0 -17
- package/esm2022/lib/features/sidebars/side-toolbar/side-toolbar.component.mjs +0 -129
- package/esm2022/lib/features/wrappers/node-wrapper.service.mjs +0 -51
- package/esm2022/lib/features/wrappers/zac-wrapper-service.class.mjs +0 -95
- package/esm2022/lib/features/wrappers/zac-wrapper.component.mjs +0 -148
- package/esm2022/lib/features/wrappers/zac-wrapper.service.mjs +0 -981
- package/esm2022/lib/version.mjs +0 -4
- package/lib/features/sidebars/side-banner/side-banner.component.d.ts +0 -7
- package/lib/features/sidebars/side-banner/side-banner.component.d.ts.map +0 -1
- package/lib/features/sidebars/side-toolbar/side-toolbar.component.d.ts +0 -34
- package/lib/features/sidebars/side-toolbar/side-toolbar.component.d.ts.map +0 -1
- package/lib/features/wrappers/node-wrapper.service.d.ts +0 -24
- package/lib/features/wrappers/node-wrapper.service.d.ts.map +0 -1
- package/lib/features/wrappers/zac-wrapper-service.class.d.ts +0 -38
- package/lib/features/wrappers/zac-wrapper-service.class.d.ts.map +0 -1
- package/lib/features/wrappers/zac-wrapper.component.d.ts +0 -31
- package/lib/features/wrappers/zac-wrapper.component.d.ts.map +0 -1
- package/lib/features/wrappers/zac-wrapper.service.d.ts +0 -58
- package/lib/features/wrappers/zac-wrapper.service.d.ts.map +0 -1
- package/lib/version.d.ts +0 -4
- package/lib/version.d.ts.map +0 -1
package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import * as d3 from 'd3';
|
|
|
3
3
|
import _ from 'lodash';
|
|
4
4
|
import { ServicePolicy, Attribute, Children, Identity, ERouter, ERPolicy, Group, Service, Config } from './network-visualizer.helper';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
|
-
class TreeNodeProcessor {
|
|
6
|
+
export class TreeNodeProcessor {
|
|
7
7
|
constructor() {
|
|
8
8
|
this.uniqId = 0;
|
|
9
9
|
}
|
|
@@ -874,11 +874,10 @@ class TreeNodeProcessor {
|
|
|
874
874
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeNodeProcessor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
875
875
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeNodeProcessor, providedIn: 'root' }); }
|
|
876
876
|
} // end of class
|
|
877
|
-
export { TreeNodeProcessor };
|
|
878
877
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeNodeProcessor, decorators: [{
|
|
879
878
|
type: Injectable,
|
|
880
879
|
args: [{
|
|
881
880
|
providedIn: 'root',
|
|
882
881
|
}]
|
|
883
882
|
}] });
|
|
884
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay12aXN1YWxpemVyLnRyZWVub2RlcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Zpc3VhbGl6ZXIvbmV0d29yay12aXN1YWxpemVyL25ldHdvcmstdmlzdWFsaXplci50cmVlbm9kZXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFFdEksTUFHYSxpQkFBaUI7SUFIOUI7UUFJSSxXQUFNLEdBQUcsQ0FBQyxDQUFDO0tBeTlCZDtJQXg5QkcsZUFBZSxDQUFDLFFBQVE7UUFDdEIsTUFBTSxNQUFNLEdBQUc7WUFDYixRQUFRLEVBQUUsTUFBTTtZQUNoQixRQUFRLEVBQUUsS0FBSztZQUNmLE1BQU0sRUFBRSxFQUFFO1lBQ1YsS0FBSyxFQUFFLFFBQVE7WUFDZixJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDO1FBQ0YsT0FBUSxNQUFNLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyw2QkFBNkIsQ0FDL0IsWUFBWSxFQUNaLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLFdBQVcsRUFDWCxPQUFPO1FBRVgsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLE9BQU8sQ0FBRSxLQUFLLEVBQUUsT0FBTyxF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QyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxDQUFDLElB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QUFFLFVBQVUsRUFBRTtZQUN2RCxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDLENBQUMsTUFBTTsrR0F6OUJDLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRmQsTUFBTTtFQTQ5QnBCLGVBQWU7U0ExOUJKLGlCQUFpQjs0RkFBakIsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBTZXJ2aWNlUG9saWN5LCBBdHRyaWJ1dGUsIENoaWxkcmVuLCBJZGVudGl0eSwgRVJvdXRlciwgRVJQb2xpY3ksIEdyb3VwLCBTZXJ2aWNlLCBDb25maWcgfSBmcm9tICcuL25ldHdvcmstdmlzdWFsaXplci5oZWxwZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBUcmVlTm9kZVByb2Nlc3NvciB7XG4gICAgdW5pcUlkID0gMDtcbiAgICBnZXRQYWdpbmdPYmplY3QocGFnZXNpemUpIHtcbiAgICAgIGNvbnN0IHBhZ2luZyA9IHtcbiAgICAgICAgc2VhcmNoT246ICduYW1lJyxcbiAgICAgICAgbm9TZWFyY2g6IGZhbHNlLFxuICAgICAgICBmaWx0ZXI6ICcnLFxuICAgICAgICB0b3RhbDogcGFnZXNpemUsXG4gICAgICAgIHBhZ2U6IDEsXG4gICAgICAgIHNvcnQ6ICduYW1lJyxcbiAgICAgICAgb3JkZXI6ICdhc2MnLFxuICAgICAgfTtcbiAgICAgIHJldHVybiAgcGFnaW5nO1xuICAgIH1cblxuICAgIGFzeW5jIHByb2Nlc3NJZGVudGl0aWVzRm9yTm9kZUNsaWNrKFxuICAgICAgICBpZGVudGl0eU5vZGUsXG4gICAgICAgIG5ldHdvcmtHcmFwaCxcbiAgICAgICAgcmF3RW5kcG9pbnRzLFxuICAgICAgICB1bmlxSWQsXG4gICAgICAgIHppdGlTZXJ2aWNlLFxuICAgICAgICBjb25maWdzXG4gICAgKSB7XG4gICAgY29uc3QgbXlQcm9taXNlID0gYXdhaXQgbmV3IFByb21pc2UoIGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICBjb25zdCB3YWl0X3Byb21pc2VzID0gW107XG4gICAgICAgIHRoaXMudW5pcUlkID0gdW5pcUlkO1xuICAgICAgICBjb25zdCByYXdFcCA9IHRoaXMuZmluZFJhd0VuZHBvaW50KGlkZW50aXR5Tm9kZS5kYXRhLm5hbWUsIHJhd0VuZHBvaW50cyk7XG4gICAgICAgIGxldCByYXdFcEF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgaWYgKHJhd0VwLnJvbGVBdHRyaWJ1dGVzKSB7cmF3RXBBdHRyaWJ1dGVzID0gcmF3RXAucm9sZUF0dHJpYnV0ZXN9O1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmF3RXBBdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gbmV3IEF0dHJpYnV0ZSgpO1xuICAgICAgICAgICAgICBhdHRyaWJ1dGUuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgIGF0dHJpYnV0ZS5uYW1lID0gcmF3RXBBdHRyaWJ1dGVzW2ldO1xuICAgICAgICAgICAgICBhdHRyaWJ1dGUudHlwZSA9ICdJZGVudGl0eSBBdHRyaWJ1dGUnO1xuICAgICAgICAgICAgICBpZGVudGl0eU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKGF0dHJpYnV0ZSk7XG4gICAgICAgIH1cblxuICAgICAgY29uc3QgYmluZFNlcnZpY2VzID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICBjb25zdCBkaWFsU2VydmljZXMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgIGJpbmRTZXJ2aWNlcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgIGRpYWxTZXJ2aWNlcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgIGxldCBpZGVudGl0eVNlcnZpY2VQb2xpY2llcyA9IFtdO1xuICAgICAgY29uc3QgcGFnZXNpemUgPSA1MDA7XG4gICAgLy8gZmV0Y2ggYXNzb2NpYXRlZCByb3V0ZXJzXG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShyYXdFcCwgJ2VkZ2Utcm91dGVycycpLnJlcGxhY2UoJy4vJywgJycpO1xuICAgICAgbGV0IGFzc29jaWF0ZWRSb3V0ZXJzID0gW107XG4gICAgICBjb25zdCBwYWdpbmcgPSB0aGlzLmdldFBhZ2luZ09iamVjdChwYWdlc2l6ZSk7XG4gICAgICBjb25zdCBlckNoYWlsZHMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgZXJDaGFpbGRzLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICBlckNoYWlsZHMubmFtZT0gJ0Fzc29jaWF0ZWQgRWRnZSBSb3V0ZXJzJztcbiAgICAgICAgZXJDaGFpbGRzLnR5cGU9ICdFZGdlIFJvdXRlcnMnO1xuICAgICAgY29uc3QgYXNzb2NpYXRlZFJvdXRlcnNQcm9taXNlID0gIGF3YWl0IHppdGlTZXJ2aWNlLmdldCh1cmwsIHBhZ2luZywgW10pXG4gICAgICAgICAgIC50aGVuKCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgcmVzdWx0LmRhdGEuZm9yRWFjaCggKHJlKSA9PiB7XG4gICAgICAgICAgICAgICBjb25zdCB0bXAgPSBuZXcgRVJvdXRlcigpO1xuICAgICAgICAgICAgICAgICAgIHRtcC5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICAgICB0bXAubmFtZSA9IHJlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgdG1wLnR5cGUgPSAnRWRnZSBSb3V0ZXInO1xuICAgICAgICAgICAgICAgICAgIGVyQ2hhaWxkcy5jaGlsZHJlbi5wdXNoKHRtcCk7XG4gICAgICAgICAgICAgfSApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHBvbGljaWVzX3VybCA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKHJhd0VwLCAnc2VydmljZS1wb2xpY2llcycpLnJlcGxhY2UoJy4vJywgJycpO1xuICAgICAgY29uc3QgcG9saWNpZXNfcGFnaW5nID0gdGhpcy5nZXRQYWdpbmdPYmplY3QocGFnZXNpemUpO1xuICAgICAgY29uc3QgZmlyc3RQcm9taXNlID0gIGF3YWl0IHppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgIC5nZXQocG9saWNpZXNfdXJsLCBwb2xpY2llc19wYWdpbmcsIFtdKVxuICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWRlbnRpdHlTZXJ2aWNlUG9saWNpZXMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgIGlkZW50aXR5U2VydmljZVBvbGljaWVzLmZvckVhY2goIChzcCkgPT4ge1xuICAgICAgICAgICAgIGNvbnN0IG5vZGVBcnJheSA9ICB0aGlzLmdldFNlcnZpY2VzRm9yQVNlcnZpY2VQb2xpY3koc3AsIHppdGlTZXJ2aWNlLCA1MDApO1xuICAgICAgICAgICAgIHByb21pc2VzLnB1c2gobm9kZUFycmF5KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oIChub2RlQXJyYXkpID0+IHtcbiAgICAgICAgICAgICBub2RlQXJyYXkuZm9yRWFjaCggKGFyT2IpID0+IHtcbiAgICAgICAgICAgICAgaWYoYXJPYlswXSA9PT0gJ0JpbmQnICkge1xuICAgICAgICAgICAgICAgICBiaW5kU2VydmljZXMuY2hpbGRyZW4gPSB0aGlzLmFycmF5T2JqZWN0Q29weVJpZ2h0VG9MZWZ0KGJpbmRTZXJ2aWNlcy5jaGlsZHJlbiwgYXJPYlsxXSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgIGRpYWxTZXJ2aWNlcy5jaGlsZHJlbiA9IHRoaXMuYXJyYXlPYmplY3RDb3B5UmlnaHRUb0xlZnQoZGlhbFNlcnZpY2VzLmNoaWxkcmVuLCBhck9iWzFdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0gKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIFByb21pc2UuYWxsKHdhaXRfcHJvbWlzZXMpLnRoZW4oICgpID0+IHtcbiAgICAgICAgaWYgKGVyQ2hhaWxkcy5jaGlsZHJlbi5sZW5ndGggPjAgKSB7XG4gICAgICAgICAgICAgZXJDaGFpbGRzLm5hbWUgPSBlckNoYWlsZHMubmFtZSsnKCcrZXJDaGFpbGRzLmNoaWxkcmVuLmxlbmd0aCsnKSc7XG4gICAgICAgICAgICAgaWRlbnRpdHlOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaChlckNoYWlsZHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmKGJpbmRTZXJ2aWNlcy5jaGlsZHJlbi5sZW5ndGg+MCkge1xuICAgICAgICAgICAgICBiaW5kU2VydmljZXMubmFtZSA9ICdCaW5kLVNlcnZpY2VzKCcrYmluZFNlcnZpY2VzLmNoaWxkcmVuLmxlbmd0aCsnKSc7XG4gICAgICAgICAgICAgIGlkZW50aXR5Tm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goYmluZFNlcnZpY2VzKTtcbiAgICAgICAgfVxuICAgICAgICBpZihkaWFsU2VydmljZXMuY2hpbGRyZW4ubGVuZ3RoPjApIHtcbiAgICAgICAgICAgICAgZGlhbFNlcnZpY2VzLm5hbWUgPSAnRGlhbC1TZXJ2aWNlcygnK2RpYWxTZXJ2aWNlcy5jaGlsZHJlbi5sZW5ndGgrJyknO1xuICAgICAgICAgICAgICBpZGVudGl0eU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKGRpYWxTZXJ2aWNlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgndGhpcyBpcyBhIHByb21pc2UnKTtcbiAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICAgbmV0d29ya0dyYXBoID0gZDMuaGllcmFyY2h5KG5ldHdvcmtHcmFwaC5kYXRhLCBmdW5jdGlvbiAobmQpIHtcbiAgICAgICAgICByZXR1cm4gbmQuY2hpbGRyZW47XG4gICAgIH0pO1xuICAgICAgICAgcmV0dXJuIFtuZXR3b3JrR3JhcGgsIHRoaXMudW5pcUlkXTtcbiAgICB9IC8vIGVuZCBvZiBmdW5jdGlvblxuXG4gICAgY3JlYXRlSWQoKSB7XG4gICAgICAgICsrdGhpcy51bmlxSWQ7XG4gICAgICAgIHJldHVybiB0aGlzLnVuaXFJZDtcbiAgICB9XG5cbiAgIGNyZWF0ZVNlcnZpY2VOb2RlKCBzcikge1xuICAgICAgICBjb25zdCBzZXJ2aWNlT2IgPSBuZXcgU2VydmljZSgpO1xuICAgICAgICAgc2VydmljZU9iLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgc2VydmljZU9iLnV1aWQgPSBzci5pZDtcbiAgICAgICAgIHNlcnZpY2VPYi5uYW1lID0gc3IubmFtZTtcbiAgICAgICAgIHNlcnZpY2VPYi50eXBlID0gJ1NlcnZpY2UnO1xuICAgICAgIHJldHVybiBzZXJ2aWNlT2I7XG4gICB9XG5cbiAgIGFycmF5T2JqZWN0Q29weVJpZ2h0VG9MZWZ0KGxlZnRBcnIscmlnaHRBcnIpIHtcbiAgICAgY29uc3QgbGVmdEFycklkcyA9IFtdO1xuICAgICBsZWZ0QXJyLmZvckVhY2goIChvYikgPT4ge1xuICAgICAgIGxlZnRBcnJJZHMucHVzaChvYi5pZCk7XG4gICAgIH0gKTtcblxuICAgICByaWdodEFyci5mb3JFYWNoKCAob2IpID0+IHtcbiAgICAgIGlmICghbGVmdEFyci5pbmNsdWRlcyhvYi5pZCkpIHtcbiAgICAgICAgICAgbGVmdEFyci5wdXNoKG9iKTtcbiAgICAgIH1cbiAgICAgfSApO1xuXG4gICAgcmV0dXJuIGxlZnRBcnI7XG4gICB9XG5cbiAgYWRkSXRlbVRvQXJyYXkoSWRuZXRpdGllcywgb2IpIHtcbiAgICBpZiAoIG9iLm5hbWUgJiYgIUlkbmV0aXRpZXMuZmluZCgoaXRlbSkgPT4gaXRlbS51dWlkID09PSBvYi5pZCkpIHtcbiAgICAgIElkbmV0aXRpZXMucHVzaCh0aGlzLmNyZWF0ZUlkZW50aXR5KG9iKSk7XG4gICAgfVxuICAgIHJldHVybiBJZG5ldGl0aWVzO1xuICB9XG4gIGNyZWF0ZUlkZW50aXR5KG9iKSB7XG4gICAgICBjb25zdCBlbmRwb2ludCA9IG5ldyBJZGVudGl0eSgpO1xuICAgICAgIGVuZHBvaW50LmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgIGVuZHBvaW50LnV1aWQgPSBvYi5pZDtcbiAgICAgICBlbmRwb2ludC5uYW1lID0gb2IubmFtZTtcbiAgICAgICBlbmRwb2ludC5vbmxpbmUgPSBvYi5oYXNBcGlTZXNzaW9uID09PSB0cnVlID8gJ1llcyc6ICdObyc7XG4gICAgICAgZW5kcG9pbnQudHlwZSA9ICdJZGVudGl0eSc7XG4gICAgICAgZW5kcG9pbnQuc3RhdHVzID0gb2Iuc2RrSW5mbyAhPT0gbnVsbCA/ICdSZWdpc3RlcmVkJzogJ05vdCBSZWdpc3RlcmVkJztcbiAgICAgICBpZiAob2Iuc2RrSW5mbykge1xuICAgICAgICAgICBlbmRwb2ludC5vcyA9IG9iLnNka0luZm8udHlwZT8gb2Iuc2RrSW5mby50eXBlOiBvYi5zZGtJbmZvLmFwcElkO1xuICAgICAgICAgICBlbmRwb2ludC5vc1ZlcnNpb24gPSBvYi5zZGtJbmZvLnZlcnNpb247XG4gICAgICAgfVxuICAgICAgIGlmIChvYi5hdXRoUG9saWN5ICYmIG9iLmF1dGhQb2xpY3kubmFtZS5pbmNsdWRlcyhcIkJyb3daZXJcIikpIHtcbiAgICAgICAgICAgZW5kcG9pbnQudHlwZSA9ICdCcm93WmVyIElkZW50aXR5JztcbiAgICAgICB9XG4gICAgICAgZW5kcG9pbnQuY3JlYXRlZEF0ID0gb2IuY3JlYXRlZEF0O1xuICAgICAgIGVuZHBvaW50LnVwZGF0ZWRBdCA9IG9iLnVwZGF0ZWRBdDtcblxuICAgICByZXR1cm4gZW5kcG9pbnQ7XG4gIH1cbiAgZ2V0TGlua0ZvclJlc291cmNlKG9iLCByZXNvdXJjZSkge1xuICAgIHJldHVybiBvYlsnX2xpbmtzJ11bcmVzb3VyY2VdWydocmVmJ107XG4gIH1cblxuICAgIGZpbmRTZXJ2aWNlc0hvc3RlZE9uRW5kcG9pbnQocmF3RXAsIHNlcnZpY2VzLCBzZXJ2aWNlUG9saWNpZXMsIHppdGlTZXJ2aWNlKSB7XG4gICAgICAgY29uc3Qgc2VydmljZXNBcnIgPSBbXTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5Ob0dyb3VwcyA9IFtdO1xuICAgICAgICBjb25zdCBlbmRwb2ludEF0dHIgPSByYXdFcC5yb2xlQXR0cmlidXRlcz8gcmF3RXAucm9sZUF0dHJpYnV0ZXM6IFtdO1xuICAgICAgICBlbmRwb2ludEF0dHIucHVzaCgnQCcrcmF3RXAuaWQpO1xuXG4gICAgICAgIGxldCBkaWFsU2VydmljZUF0dHJzID0gW107XG4gICAgICAgIGxldCBiaW5kU2VydmljZUF0dHJzID0gW107XG5cbiAgICAgICAgY29uc3QgYmluZFBvbGljaWVzID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgICAgIGJpbmRQb2xpY2llcy5uYW1lID0gJ0JpbmQtUG9saWNpZXMnO1xuICAgICAgICBjb25zdCBkaWFsUG9saWNpZXMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgICAgIGRpYWxQb2xpY2llcy5uYW1lID0gJ0RpYWwtUG9saWNpZXMnO1xuXG4gICAgICAgIGJpbmRQb2xpY2llcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgZGlhbFBvbGljaWVzLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuXG4gICAgICAgIHNlcnZpY2VQb2xpY2llcy5maW5kKCAoc3ApID0+IHtcbiAgICAgICAgICBzcC5pZGVudGl0eVJvbGVzLmZpbmQoIChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChlbmRwb2ludEF0dHIuaW5jbHVkZXMoYXR0cikgKSB7XG4gICAgICAgICAgICAgICBpZiAoc3AudHlwZSA9PT0gJ0JpbmQnKSB7XG4gICAgICAgICAgICAgICAgICAgY29uc3Qgc1BvbGljeSA9IG5ldyBTZXJ2aWNlUG9saWN5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgc1BvbGljeS5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICBzUG9saWN5Lm5hbWUgPSBzcC5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgIHNQb2xpY3kudHlwZSA9IHNwLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgc1BvbGljeS5jaGlsZHJlbiA9IHRoaXMuZ2V0U2VydmljZXNGb3JQb2xpY3koc2VydmljZXMsIHNwKTtcbiAgICAgICAgICAgICAgICAgICBiaW5kUG9saWNpZXMuY2hpbGRyZW4ucHVzaChzcCk7XG4gICAgICAgICAgICAgICAgICAgYmluZFNlcnZpY2VBdHRycyA9IGZpbGxBcnJheShiaW5kU2VydmljZUF0dHJzLCBzcC5zZXJ2aWNlUm9sZXMpO1xuICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgY29uc3Qgc1BvbGljeSA9IG5ldyBTZXJ2aWNlUG9saWN5KCk7XG4gICAgICAgICAgICAgICAgICAgICBzUG9saWN5LmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgICAgICAgc1BvbGljeS5uYW1lID0gc3AubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgIHNQb2xpY3kudHlwZSA9IHNwLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgICBzUG9saWN5LmNoaWxkcmVuID0gdGhpcy5nZXRTZXJ2aWNlc0ZvclBvbGljeShzZXJ2aWNlcywgc3ApIDtcbiAgICAgICAgICAgICAgICAgZGlhbFBvbGljaWVzLmNoaWxkcmVuLnB1c2goc1BvbGljeSk7XG4gICAgICAgICAgICAgICAgZGlhbFNlcnZpY2VBdHRycyA9IGZpbGxBcnJheShkaWFsU2VydmljZUF0dHJzLCBzcC5zZXJ2aWNlUm9sZXMpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gKTtcblxuICAgICAgICBmdW5jdGlvbiBmaWxsQXJyYXkoYXJyMSwgYXJyMikge1xuICAgICAgICAgIGFycjIuZm9yRWFjaCggKGl0ZW0pID0+IHtcbiAgICAgICAgICAgYXJyMS5wdXNoKGl0ZW0pO1xuICAgICAgICAgIH0gKTtcbiAgICAgICAgICByZXR1cm4gYXJyMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJpbmRTZXJ2aWNlcyA9IFtdO1xuICAgICAgICBjb25zdCBkaWFsU2VydmljZXMgPSBbXTtcblxuICAgICAgICBzZXJ2aWNlcyAmJiBzZXJ2aWNlcy5mb3JFYWNoKCAoc3IpID0+IHtcbiAgICAgICAgICBzci5yb2xlQXR0cmlidXRlcyAmJiBzci5yb2xlQXR0cmlidXRlcy5mb3JFYWNoKCAoYXR0cikgPT4ge1xuICAgICAgICAgICAgIGlmIChkaWFsU2VydmljZUF0dHJzLmluY2x1ZGVzKGF0dHIpICkge1xuICAgICAgICAgICAgICAgZGlhbFNlcnZpY2VzLnB1c2godGhpcy5jcmVhdGVTZXJ2aWNlTm9kZShzcikgKTtcbiAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgaWYgKGJpbmRTZXJ2aWNlQXR0cnMuaW5jbHVkZXMoYXR0cikgKSB7XG4gICAgICAgICAgICAgICAgYmluZFNlcnZpY2VzLnB1c2goIHRoaXMuY3JlYXRlU2VydmljZU5vZGUoc3IpICk7XG4gICAgICAgICAgICAgfVxuICAgICAgICAgIH0gKTtcbiAgICAgICAgfSk7XG4gICAgICAgaWYgKGRpYWxTZXJ2aWNlcy5sZW5ndGggPjAgKSB7XG4gICAgICAgICAgY29uc3QgZGlhbEdyb3VwID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgICAgZGlhbEdyb3VwLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgIGRpYWxHcm91cC5uYW1lID0gJ1NlcnZpY2VzLURpYWwnO1xuICAgICAgICAgIGRpYWxHcm91cC5jaGlsZHJlbiA9IGRpYWxTZXJ2aWNlcztcbiAgICAgICAgICBzZXJ2aWNlc0Fyci5wdXNoKGRpYWxHcm91cCk7XG4gICAgICAgfVxuICAgICAgIGlmIChiaW5kU2VydmljZXMubGVuZ3RoID4wICkge1xuICAgICAgICAgICAgY29uc3QgYmluZEdyb3VwID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgICAgICBiaW5kR3JvdXAuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICBiaW5kR3JvdXAubmFtZSA9ICdTZXJ2aWNlcy1CaW5kJztcbiAgICAgICAgICAgIGJpbmRHcm91cC5jaGlsZHJlbiA9IGJpbmRTZXJ2aWNlcztcbiAgICAgICAgICAgIHNlcnZpY2VzQXJyLnB1c2goYmluZEdyb3VwKTtcbiAgICAgICB9XG4gICAgIHJldHVybiBzZXJ2aWNlc0FycjtcblxuXG4gICAgfSAvLyBlbmQgb2YgZmluZCBzZXJ2aWNlc0hvc3RlZE9uRW5kcG9pbnRcblxuICAgZ2V0U2VydmljZXNGb3JQb2xpY3koc2VydmljZXMsIHNwT2IpIHtcbiAgICAgY29uc3Qgc2VydmljZXNGb3RQb2xpY3kgPSBbXTtcbiAgICAgc2VydmljZXMgJiYgc2VydmljZXMuZm9yRWFjaCggKHNyKSA9PiB7XG4gICAgICAgICBjb25zdCBhdHRycyA9IHNyLnJvbGVBdHRyaWJ1dGVzID8gc3Iucm9sZUF0dHJpYnV0ZXM6IFtdO1xuICAgICAgICAgYXR0cnMucHVzaCgnQCcrc3BPYi5pZCk7XG4gICAgICAgICBhdHRycy5maW5kKCAoYXRyKSA9PiB7XG4gICAgICAgICAgICBpZihzcE9iLnNlcnZpY2VSb2xlcy5pbmNsdWRlcyhhdHIpICl7XG4gICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlTm9kZSA9IG5ldyBTZXJ2aWNlKCk7XG4gICAgICAgICAgICAgICBzZXJ2aWNlTm9kZS5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgIHNlcnZpY2VOb2RlLm5hbWUgPSBzci5uYW1lO1xuICAgICAgICAgICAgICAgc2VydmljZU5vZGUudHlwZSA9ICdTZXJ2aWNlJztcbiAgICAgICAgICAgICBzZXJ2aWNlc0ZvdFBvbGljeS5wdXNoKHNlcnZpY2VOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgIH0pO1xuICAgICB9KTtcbiAgICByZXR1cm4gc2VydmljZXNGb3RQb2xpY3k7XG4gICB9XG5cbiAgICBmaW5kUmF3RW5kcG9pbnQoZXBOYW1lLCBlbmRwb2ludHMpIHtcbiAgICAgICByZXR1cm4gZW5kcG9pbnRzLmZpbmQoKGVwKSA9PiBlcC5uYW1lID09PSBlcE5hbWUpO1xuICAgIH1cblxuICBzZXJ2aWNlQ29uZmlnQWxpYXMoY29uZmlncykge1xuICAgICBsZXQgaW50ZXJjZXB0ID0gW107XG4gICAgIF8uaXNBcnJheShjb25maWdzKSAmJiBjb25maWdzLmZvckVhY2goIChjb25mKSA9PiB7XG4gICAgICAgICAgIGxldCBhZGRyZXNzZXMgPSAnJztcbiAgICAgICAgICAgbGV0IHBvcnRzID0gJyc7XG4gICAgICAgICAgaWYgKGNvbmYuZGF0YS5hZGRyZXNzZXMpIHtcbiAgICAgICAgICAgICBhZGRyZXNzZXMgPSBjb25mLmRhdGEuYWRkcmVzc2VzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICBhZGRyZXNzZXMgPSBjb25mLmRhdGEuYWRkcmVzcztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXy5pc0FycmF5KGNvbmYuZGF0YS5wb3J0UmFuZ2VzKSApIHtcbiAgICAgICAgICAgICAgY29uZi5kYXRhLnBvcnRSYW5nZXMuZm9yRWFjaCggKHBvcnRzSnNvbikgPT4ge1xuICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcG9ydHNKc29uKSB7XG4gICAgICAgICAgICAgICAgICBwb3J0cyA9IHBvcnRzICsga2V5ICsnOicrcG9ydHNKc29uW2tleV0gKycgJyA7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgIHBvcnRzID0gcG9ydHMgKyAnOyc7XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcG9ydHMgPSAgY29uZi5kYXRhLnBvcnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGludGVyY2VwdC5wdXNoKGFkZHJlc3Nlcyk7XG4gICAgICAgICAgaW50ZXJjZXB0LnB1c2gocG9ydHMpO1xuICAgICB9KTtcbiAgICAgcmV0dXJuIGludGVyY2VwdDtcbiAgfVxuXG4gIGFzeW5jIHByb2Nlc3NTZXJ2aWNlc0Zvck5vZGVDbGljayhzZXJ2aWNlTm9kZSwgbmV0d29ya0dyYXBoLCBzZXJ2aWNlcywgdW5pcUlkLCB6aXRpU2VydmljZSkge1xuICAgICBjb25zdCBteVByb21pc2UgPSBhd2FpdCBuZXcgUHJvbWlzZSggYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB3YWl0X3Byb21pc2VzID0gW107XG4gICAgICAgIHRoaXMudW5pcUlkID0gdW5pcUlkO1xuICAgICAgICBjb25zdCByYXdTZXJ2aWNlT2JqID0gc2VydmljZXMuZmluZCgocykgPT4gcy5uYW1lID09PSBzZXJ2aWNlTm9kZS5kYXRhLm5hbWUpO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzd2l0aE5hbWUgPSBbXTtcblxuICAgICAgICByYXdTZXJ2aWNlT2JqLnJvbGVBdHRyaWJ1dGVzICYmIHJhd1NlcnZpY2VPYmoucm9sZUF0dHJpYnV0ZXMuZmluZCgoc3JhdHRyKSA9PiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzd2l0aE5hbWUucHVzaChzcmF0dHIpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2VydmljZUF0dHJpYnV0ZXMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgc2VydmljZUF0dHJpYnV0ZXMubmFtZSA9ICdBdHRyaWJ1dGVzJztcbiAgICAgICAgc2VydmljZUF0dHJpYnV0ZXMudHlwZSA9ICdBdHRyaWJ1dGVzJztcbiAgICAgICAgc2VydmljZUF0dHJpYnV0ZXMuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgYXR0cmlidXRlc3dpdGhOYW1lLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRyT2IgPSBuZXcgQXR0cmlidXRlKCk7XG4gICAgICAgICAgICBhdHRyT2IuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICBhdHRyT2IubmFtZSA9IGF0dHJpYnV0ZXN3aXRoTmFtZVtrXTtcbiAgICAgICAgICAgIGF0dHJPYi50eXBlID0gJ0F0dHJpYnV0ZSc7XG5cbiAgICAgICAgICAgIHNlcnZpY2VBdHRyaWJ1dGVzLmNoaWxkcmVuLnB1c2goYXR0ck9iKTtcbiAgICAgICAgfSAvLyBlbmQgaW5uZXIgZm9yIGxvb3BcbiAgICAgICAgaWYgKHNlcnZpY2VBdHRyaWJ1dGVzLmNoaWxkcmVuLmxlbmd0aCA+MCApIHtcbiAgICAgICAgICAgc2VydmljZUF0dHJpYnV0ZXMubmFtZSA9IHNlcnZpY2VBdHRyaWJ1dGVzLm5hbWUrJygnKyBzZXJ2aWNlQXR0cmlidXRlcy5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgIHNlcnZpY2VOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaChzZXJ2aWNlQXR0cmlidXRlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2VydmljZV9jb25maWdzID0gW107XG4gICAgICAgIGNvbnN0IGNvbmZpZ3NfdXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2UocmF3U2VydmljZU9iaiwgJ2NvbmZpZ3MnKTtcbiAgICAgICAgY29uc3QgcGFnZXNpemUgPSA1MDA7XG4gICAgICAgIGNvbnN0IHBhZ2luZ09iID0gdGhpcy5nZXRQYWdpbmdPYmplY3QocGFnZXNpemUpO1xuICAgICAgICBjb25zdCBjb25maWdQcm9taXNlID0gYXdhaXQgeml0aVNlcnZpY2VcbiAgICAgICAgIC5nZXQoY29uZmlnc191cmwsIHBhZ2luZ09iLCBbXSlcbiAgICAgICAgIC50aGVuKChjb25maWdzKSA9PiB7XG4gICAgICAgICAgIHNlcnZpY2VfY29uZmlncyA9IGNvbmZpZ3MgJiYgY29uZmlncy5kYXRhID8gY29uZmlncy5kYXRhIDogW107XG4gICAgICAgICAgIGNvbnN0IGNoaWxkcyA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgICBjaGlsZHMuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgIGNoaWxkcy5uYW1lID0gJ1NlcnZpY2UgQ29uZmlncyc7XG4gICAgICAgICAgIGNoaWxkcy50eXBlID0gJ1NlcnZpY2UgQ29uZmlncyc7XG4gICAgICAgICAgIGNvbnN0IHNlcnZpY2VfY29uZmlnc19BcnIgPSBbXTtcbiAgICAgICAgICAgc2VydmljZV9jb25maWdzLmZvckVhY2goIChjZmcpID0+IHtcbiAgICAgICAgICAgICBjb25zdCBvYmogPSBuZXcgQ29uZmlnKCk7XG4gICAgICAgICAgICAgb2JqLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgIG9iai5uYW1lID0gY2ZnLm5hbWU7XG4gICAgICAgICAgICAgb2JqLnV1aWQgPSBjZmcudXVpZDtcbiAgICAgICAgICAgICBvYmouZGF0YSA9IEpTT04uc3RyaW5naWZ5KGNmZy5kYXRhKTtcbiAgICAgICAgICAgICBzZXJ2aWNlX2NvbmZpZ3NfQXJyLnB1c2gob2JqKTtcbiAgICAgICAgICAgfSApO1xuXG4gICAgICAgICAgIGlmIChzZXJ2aWNlX2NvbmZpZ3NfQXJyLmxlbmd0aCA+MCApIHtcbiAgICAgICAgICAgICAgY2hpbGRzLmNoaWxkcmVuID0gc2VydmljZV9jb25maWdzX0FycjtcbiAgICAgICAgICAgICAgY2hpbGRzLm5hbWUgPSBjaGlsZHMubmFtZSArJygnK2NoaWxkcy5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgIHNlcnZpY2VOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaChjaGlsZHMpO1xuICAgICAgICAgICAgICBzZXJ2aWNlTm9kZS5kYXRhLmludGVyY2VwdCA9IHRoaXMuc2VydmljZUNvbmZpZ0FsaWFzKHNlcnZpY2VfY29uZmlncyk7XG4gICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICB3YWl0X3Byb21pc2VzLnB1c2goY29uZmlnUHJvbWlzZSk7XG4gICAgICAgY29uc3Qgc2VydmljZV9lZGdlX3JvdXRlcl9wb2xpY2llc191cmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShcbiAgICAgICAgIHJhd1NlcnZpY2VPYmosXG4gICAgICAgICdzZXJ2aWNlLWVkZ2Utcm91dGVyLXBvbGljaWVzJ1xuICAgICAgICk7XG4gICAgICAgbGV0IHNlcnZpY2Vfcm91dGVyc191cmxzID0gW107XG4gICAgICAgY29uc3Qgc2VyX3Byb21zZSA9ICBhd2FpdCB6aXRpU2VydmljZVxuICAgICAgICAgICAgIC5nZXQoc2VydmljZV9lZGdlX3JvdXRlcl9wb2xpY2llc191cmwucmVwbGFjZSgnLi8nLCAnJyksIHBhZ2luZ09iLCBbXSlcbiAgICAgICAgICAgICAudGhlbiggKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0LmRhdGEuZm9yRWFjaCggKHNlcnApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZV9yb3V0ZXJzX3VybHMucHVzaCggdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2Uoc2VycCwnZWRnZS1yb3V0ZXJzJykgKTtcbiAgICAgICAgICAgICAgICAgIH0gKTs7XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKHNlcl9wcm9tc2UpO1xuICAgICAgIGxldCBzZXJwX3BhZ2VfUHJvbWlzZXMgPSBbXTtcbiAgICAgICBzZXJ2aWNlX3JvdXRlcnNfdXJscy5mb3JFYWNoKChlcl91cmwpID0+IHtcbiAgICAgICAgICBjb25zdCBwcm9tc2UgPSAgeml0aVNlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0KGVyX3VybC5yZXBsYWNlKCcuLycsICcnKSwgcGFnaW5nT2IsIFtdKTtcbiAgICAgICAgICAgICAgICAvLyAudGhlbihyZXN1bHQgPT4gW3BvbGljeS50eXBlLCByZXN1bHRdKTtcbiAgICAgICAgICBzZXJwX3BhZ2VfUHJvbWlzZXMucHVzaChwcm9tc2UpO1xuICAgICAgIH0pO1xuICAgICAgIGxldCBhc3NvY2lhdGVkUm91dGVycyA9IFtdO1xuICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHNlcnBfcGFnZV9Qcm9taXNlcykudGhlbiggKHZhbHVlczphbnkpID0+IHtcbiAgICAgICAgIHZhbHVlcyAmJiB2YWx1ZXMuZm9yRWFjaCgocmVzOmFueSkgPT4ge1xuICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJlcy5kYXRhLmZvckVhY2goIChlcik9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBlck9iID0gbmV3IEVSb3V0ZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVyT2IuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlck9iLm5hbWUgPSAgIGVyLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBlci50eXBlID0gJ0VkZ2UgUm91dGVyJztcbiAgICAgICAgICAgICAgICAgIGFzc29jaWF0ZWRSb3V0ZXJzLnB1c2goZXJPYik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgfVxuICAgICAgICAgfSlcbiAgICAgICAgIGNvbnN0IHRtcCA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgICAgIHRtcC5uYW1lID0gXCJBc3NvY2lhdGVkIEVkZ2UgUm91dGVycyhcIiArIGFzc29jaWF0ZWRSb3V0ZXJzLmxlbmd0aCArJyknO1xuICAgICAgICAgICAgIHRtcC50eXBlID0gXCJFZGdlIFJvdXRlcnNcIjtcbiAgICAgICAgICAgICB0bXAuY2hpbGRyZW4gPSBhc3NvY2lhdGVkUm91dGVycztcbiAgICAgICAgICAgICB0bXAuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgc2VydmljZU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKHRtcCk7XG4gICAgICAgfSk7XG5cbiAgICAgICBjb25zdCBzZXJ2aWNlX3BvbGljaWVzX3VybCA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKFxuICAgICAgICByYXdTZXJ2aWNlT2JqLFxuICAgICAgICAnc2VydmljZS1wb2xpY2llcydcbiAgICAgICApLnJlcGxhY2UoJy4vJywgJycpOyAvLyBkaWFsLCBCaW5kIGluZm9cblxuICAgICAgIGxldCBiaW5kUG9saWNpZXMgPSBbXTtcbiAgICAgICBsZXQgYmluZElkbmV0aXRpZXMgPSBbXTtcbiAgICAgICBsZXQgZGlhbElkbmV0aXRpZXMgPSBbXTtcblxuICAgICAgIGNvbnN0IHByb21pc2UyID0gYXdhaXQgeml0aVNlcnZpY2VcbiAgICAgICAuZ2V0KHNlcnZpY2VfcG9saWNpZXNfdXJsLCBwYWdpbmdPYiwgW10pXG4gICAgICAgLnRoZW4oKHBvbGljaWVzKSA9PiB7XG4gICAgICAgICBiaW5kUG9saWNpZXMgPSBwb2xpY2llcy5kYXRhO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHBhZ2VQcm9taXNlcyA9IFtdO1xuICAgICAgYmluZFBvbGljaWVzLmZvckVhY2goICAocG9saWN5KSA9PiB7XG4gICAgICAgICBjb25zdCBiaW5kSWRlbnRpdGllc1VybCA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKFxuICAgICAgICAgICAgcG9saWN5LFxuICAgICAgICAgICAgJ2lkZW50aXRpZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBwcm9tc2UgPSAgeml0aVNlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0KGJpbmRJZGVudGl0aWVzVXJsLnJlcGxhY2UoJy4vJywgJycpLCBwYWdpbmdPYiwgW10pXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IFtwb2xpY3kudHlwZSwgcmVzdWx0XSk7XG4gICAgICAgICAgcGFnZVByb21pc2VzLnB1c2gocHJvbXNlKTtcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocGFnZVByb21pc2VzKS50aGVuKCAodmFsdWVzOmFueSkgPT4ge1xuICAgICAgICAgIHZhbHVlcyAmJiB2YWx1ZXMuZm9yRWFjaCgocmVzOmFueSkgPT4ge1xuICAgICAgICAgICBpZiAocmVzICYmIHJlc1sxXS5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcmVzWzFdLmRhdGEuZm9yRWFjaCgocnMpID0+IHtcbiAgICAgICAgICAgICAgICBpZihyZXNbMF0gPT09ICdCaW5kJykge1xuICAgICAgICAgICAgICAgICBiaW5kSWRuZXRpdGllcyA9IHRoaXMuYWRkSXRlbVRvQXJyYXkoYmluZElkbmV0aXRpZXMsIHJzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYocmVzWzBdID09PSAnRGlhbCcpe1xuICAgICAgICAgICAgICAgICBkaWFsSWRuZXRpdGllcyA9IHRoaXMuYWRkSXRlbVRvQXJyYXkoZGlhbElkbmV0aXRpZXMsIHJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgaWYocmVzWzBdID09PSAnQmluZCcpIHtcbiAgICAgICAgICAgICAgICAgYmluZElkbmV0aXRpZXMgPSB0aGlzLmFkZEl0ZW1Ub0FycmF5KGJpbmRJZG5ldGl0aWVzLCByZXNbMV0uZGF0YSk7XG4gICAgICAgICAgICAgICB9IGVsc2UgaWYocmVzWzBdID09PSAnRGlhbCcpe1xuICAgICAgICAgICAgICAgICBkaWFsSWRuZXRpdGllcyA9IHRoaXMuYWRkSXRlbVRvQXJyYXkoZGlhbElkbmV0aXRpZXMsIHJlc1sxXS5kYXRhKTtcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgY29uc3QgdG1wID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgICAgICAgdG1wLm5hbWUgPSBcIkJpbmQgSWRlbnRpdGllcyhcIiArIGJpbmRJZG5ldGl0aWVzLmxlbmd0aCArJyknO1xuICAgICAgICAgICAgIHRtcC50eXBlID0gXCJJZGVudGl0aWVzXCI7XG4gICAgICAgICAgICAgdG1wLmNoaWxkcmVuID0gYmluZElkbmV0aXRpZXM7XG4gICAgICAgICAgICAgdG1wLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgIHNlcnZpY2VOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaCh0bXApO1xuICAgICAgICAgICBjb25zdCB0bXBEaWFsID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgICAgICAgdG1wRGlhbC5uYW1lID0gXCJEaWFsIElkZW50aXRpZXMoXCIgKyBkaWFsSWRuZXRpdGllcy5sZW5ndGggKycpJztcbiAgICAgICAgICAgICB0bXBEaWFsLnR5cGUgPSBcIklkZW50aXRpZXNcIjtcbiAgICAgICAgICAgICB0bXBEaWFsLmNoaWxkcmVuID0gZGlhbElkbmV0aXRpZXM7XG4gICAgICAgICAgICAgdG1wRGlhbC5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICBzZXJ2aWNlTm9kZS5kYXRhLmNoaWxkcmVuLnB1c2godG1wRGlhbCk7XG4gICAgICAgICByZXNvbHZlKCd0aGlzIGlzIGEgcHJvbWlzZScpO1xuICAgICAgfSk7XG4gICAgICAgUHJvbWlzZS5hbGwod2FpdF9wcm9taXNlcykudGhlbiggKCkgPT4geyB9KTtcbiAgICB9KTsgLy8gZW5kIG9mIG15cHJvbWlzZVxuXG4gICAgIG5ldHdvcmtHcmFwaCA9IGQzLmhpZXJhcmNoeShuZXR3b3JrR3JhcGguZGF0YSwgZnVuY3Rpb24gKG5kKSB7XG4gICAgICAgIHJldHVybiBuZC5jaGlsZHJlbjtcbiAgICAgfSk7XG4gICAgICByZXR1cm4gW25ldHdvcmtHcmFwaCwgdGhpcy51bmlxSWRdO1xuICB9IC8vIGVuZCBvZiBwcm9jZXNzU2VydmljZXNGb3JOb2RlQ2xpY2tcblxuXG4gIGFzeW5jIHByb2Nlc3NTZXJ2aWNlUG9saWNpZXNGb3JOb2RlQ2xpY2socG9saWN5Tm9kZSwgbmV0d29ya0dyYXBoLCAgc2VydmljZVBvbGljaWVzLCB1bmlxSWQsIHppdGlTZXJ2aWNlKSB7XG4gICAgIGNvbnN0IG15UHJvbWlzZSA9IGF3YWl0IG5ldyBQcm9taXNlKCBhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHdhaXRfcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgdGhpcy51bmlxSWQgPSB1bmlxSWQ7XG4gICAgICAgIGNvbnN0IHJhd1NQb2xpY3kgPSBzZXJ2aWNlUG9saWNpZXMuZmluZCgocykgPT4gcy5uYW1lID09PSBwb2xpY3lOb2RlLmRhdGEubmFtZSk7XG4gICAgICAgIGNvbnN0IGNoaWxkcyA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgY2hpbGRzLm5hbWUgPSBcIkF0dHJpYnV0ZXNcIjtcbiAgICAgICAgIGNoaWxkcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcblxuICAgICAgICByYXdTUG9saWN5LnNlcnZpY2VSb2xlcyAmJiByYXdTUG9saWN5LnNlcnZpY2VSb2xlcy5mb3JFYWNoKCAob2IpID0+IHtcbiAgICAgICAgICBjb25zdCBhdHRyID0gbmV3IEF0dHJpYnV0ZSgpO1xuICAgICAgICAgICAgYXR0ci5uYW1lID0gb2I7XG4gICAgICAgICAgICBhdHRyLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgYXR0ci50eXBlID0gXCJTZXJ2aWNlIEF0dHJpYnV0ZVwiO1xuICAgICAgICAgIGNoaWxkcy5jaGlsZHJlbi5wdXNoKGF0dHIpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmF3U1BvbGljeS5pZGVudGl0eVJvbGVzICYmIHJhd1NQb2xpY3kuaWRlbnRpdHlSb2xlcy5mb3JFYWNoKCAob2IpID0+IHtcbiAgICAgICAgICBjb25zdCBhdHRyID0gbmV3IEF0dHJpYnV0ZSgpO1xuICAgICAgICAgICBhdHRyLm5hbWUgPSBvYjtcbiAgICAgICAgICAgYXR0ci5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgYXR0ci50eXBlID0gXCJJZGVudGl0eSBBdHRyaWJ1dGVcIjtcbiAgICAgICAgICBjaGlsZHMuY2hpbGRyZW4ucHVzaChhdHRyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNoaWxkcy5uYW1lID0gY2hpbGRzLm5hbWUgKyAnKCcrIGNoaWxkcy5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICBwb2xpY3lOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaChjaGlsZHMpO1xuXG4gICAgICAgIGNvbnN0IHBhZ2VzaXplID0gNTAwO1xuICAgICAgICBjb25zdCBpZGVudGl0aWVzX3BhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgICAgY29uc3QgYmluZElkZW50aXRpZXNVcmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZSggcmF3U1BvbGljeSwgJ2lkZW50aXRpZXMnICk7XG4gICAgICAgIC8vIHRoaXMubG9nZ2VyLmluZm8oJ2JpbmRJZGVudGl0aWVzVXJsJyxiaW5kSWRlbnRpdGllc1VybCk7XG4gICAgICAgIGNvbnN0IHNwX3Byb21pc2UgPSBhd2FpdCB6aXRpU2VydmljZS5nZXQoYmluZElkZW50aXRpZXNVcmwsIGlkZW50aXRpZXNfcGFnaW5nLCBbXSlcbiAgICAgICAudGhlbigoaWRzKSA9PiB7XG4gICAgICAgICBjb25zdCBjaGlsZHMgPW5ldyBDaGlsZHJlbigpXG4gICAgICAgICBjaGlsZHMubmFtZSA9IHJhd1NQb2xpY3kudHlwZSsgJy1JZGVudGl0aWVzJztcbiAgICAgICAgIGNoaWxkcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgIGlkcy5kYXRhLmZvckVhY2goIChpZE9iKSA9PiB7XG4gICAgICAgICAgIGNoaWxkcy5jaGlsZHJlbi5wdXNoKHRoaXMuY3JlYXRlSWRlbnRpdHkoaWRPYikgKTtcbiAgICAgICAgIH0pO1xuICAgICAgICAgY2hpbGRzLm5hbWUgPSBjaGlsZHMubmFtZSArICcoJyArIGNoaWxkcy5jaGlsZHJlbi5sZW5ndGgrJyknO1xuICAgICAgICAgcG9saWN5Tm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goY2hpbGRzKTtcbiAgICAgICB9KTtcbiAgICAgICB3YWl0X3Byb21pc2VzLnB1c2goc3BfcHJvbWlzZSk7XG5cbiAgICAgICBjb25zdCBzZXJ2aWNlc19wYWdpbmcgPSB0aGlzLmdldFBhZ2luZ09iamVjdChwYWdlc2l6ZSk7XG4gICAgICAgY29uc3QgYmluZFNlcnZpY2VzVXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2UoIHJhd1NQb2xpY3ksICdzZXJ2aWNlcycgKTsgIC8vIHB1bGwgc2VydmljZXNcbiAgICAgICBjb25zdCBfcHJvbWlzZSA9IGF3YWl0IHppdGlTZXJ2aWNlLmdldChiaW5kU2VydmljZXNVcmwsIHNlcnZpY2VzX3BhZ2luZywgW10pXG4gICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgY29uc3QgY2hpbGRzID1uZXcgQ2hpbGRyZW4oKVxuICAgICAgICAgY2hpbGRzLm5hbWUgPSByYXdTUG9saWN5LnR5cGUrICctU2VydmljZXMnO1xuICAgICAgICAgY2hpbGRzLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgcmVzdWx0LmRhdGEuZm9yRWFjaCggKGlkT2IpID0+IHtcbiAgICAgICAgICAgY29uc3Qgc3AgPSBuZXcgU2VydmljZSgpO1xuICAgICAgICAgICAgc3AuaWQgPSBpZE9iLmlkO1xuICAgICAgICAgICAgc3AubmFtZSA9IGlkT2IubmFtZTtcbiAgICAgICAgICAgIHNwLnR5cGUgPSAnU2VydmljZSc7XG4gICAgICAgICAgICBjaGlsZHMuY2hpbGRyZW4ucHVzaChzcCk7XG4gICAgICAgICB9KTtcbiAgICAgICAgIGNoaWxkcy5uYW1lID0gY2hpbGRzLm5hbWUgKyAnKCcgKyBjaGlsZHMuY2hpbGRyZW4ubGVuZ3RoKycpJztcbiAgICAgICAgIHBvbGljeU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKGNoaWxkcyk7XG4gICAgICAgfSk7XG5cbiAgICAgICB3YWl0X3Byb21pc2VzLnB1c2goX3Byb21pc2UpO1xuXG4gICAgICAgIFByb21pc2UuYWxsKHdhaXRfcHJvbWlzZXMpLnRoZW4oICgpID0+IHtcbiAgICAgICAgICAgcmVzb2x2ZSgncmVzb2x2ZS4nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgfSk7IC8vIGVuZCBteXByb21pc2VcbiAgICAgICAgbmV0d29ya0dyYXBoID0gZDMuaGllcmFyY2h5KG5ldHdvcmtHcmFwaC5kYXRhLCBmdW5jdGlvbiAobmQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZC5jaGlsZHJlbjtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBbbmV0d29ya0dyYXBoLCB0aGlzLnVuaXFJZF07XG4gICAgfVxuXG4gICBhc3luYyBnZXRTZXJ2aWNlc0ZvckFTZXJ2aWNlUG9saWN5KHBvbGljeU9iamVjdCwgeml0aVNlcnZpY2UsIHBhZ2VzaXplPTUwMCkge1xuICAgICAgIGNvbnN0IGNoaWxkcyA9IFtdO1xuICAgICAgIGNvbnN0IHNlcnZpY2VzX3BhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgICBjb25zdCBiaW5kU2VydmljZXNVcmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZSggcG9saWN5T2JqZWN0LCAnc2VydmljZXMnICk7XG4gICAgICAgY29uc3QgX3Byb21pc2UgPSBhd2FpdCB6aXRpU2VydmljZS5nZXQoYmluZFNlcnZpY2VzVXJsLCBzZXJ2aWNlc19wYWdpbmcsIFtdKVxuICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgIHJlc3VsdC5kYXRhLmZvckVhY2goIChpZE9iKSA9PiB7XG4gICAgICAgICAgIGNvbnN0IHNwID0gbmV3IFNlcnZpY2UoKTtcbiAgICAgICAgICAgIHNwLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgc3AudXVpZCA9IGlkT2IuaWQ7XG4gICAgICAgICAgICBzcC5uYW1lID0gaWRPYi5uYW1lO1xuICAgICAgICAgICAgc3AudHlwZSA9ICdTZXJ2aWNlJztcbiAgICAgICAgICAgIGNoaWxkcy5wdXNoKHNwKTtcbiAgICAgICAgIH0pO1xuICAgICAgIH0pO1xuICAgICAgIHJldHVybiBbcG9saWN5T2JqZWN0LnR5cGUsIGNoaWxkc107XG4gICB9XG5cbiAgIGFzeW5jIHByb2Nlc3NFZGdlcm91dGVyc0Zvck5vZGVDbGljayhcbiAgICAgICAgZWRnZXJvdXRlck5vZGUsXG4gICAgICAgIG5ldHdvcmtHcmFwaCxcbiAgICAgICAgZWRnZXJvdXRlcnMsXG4gICAgICAgIHVuaXFJZCxcbiAgICAgICAgeml0aVNlcnZpY2VcbiAgICApXG4gICAge1xuICAgICBjb25zdCBtYWluUHJvbWlzZSA9IGF3YWl0IG5ldyBQcm9taXNlKCBhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHdhaXRfcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgdGhpcy51bmlxSWQgPSB1bmlxSWQ7XG4gICAgICAgIGNvbnN0IGVyID0gZWRnZXJvdXRlcnMuZmluZCgocykgPT4gcy5uYW1lID09PSBlZGdlcm91dGVyTm9kZS5kYXRhLm5hbWUpO1xuICAgICAgICBjb25zdCBlckF0dHJpYnV0ZXMgPSBlci5yb2xlQXR0cmlidXRlcz8gZXIucm9sZUF0dHJpYnV0ZXM6IFtdO1xuXG4gICAgICAgICBlckF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXR0ID0gbmV3IEF0dHJpYnV0ZSgpO1xuICAgICAgICAgICAgYXR0LmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgYXR0Lm5hbWUgPSBhdHRyO1xuICAgICAgICAgICAgYXR0LnR5cGUgPSAnRWRnZSBSb3V0ZXIgQXR0cmlidXRlJztcbiAgICAgICAgICAgIGVkZ2Vyb3V0ZXJOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaChhdHQpO1xuICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgcGFnZXNpemUgPSA1MDA7XG4gICAgICAgICAgY29uc3Qgc2VydmljZXNfcGFnaW5nID0gdGhpcy5nZXRQYWdpbmdPYmplY3QocGFnZXNpemUpO1xuICAgICAgIGNvbnN0IGVycG9saWNpZXNVcmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShlciwgJ2VkZ2Utcm91dGVyLXBvbGljaWVzJyk7XG4gICAgICAgbGV0IGVycG9saWNpZXNGb3JFUiA9IFtdO1xuICAgICAgIGNvbnN0IGVycG9saWNpZXNwcm9taXNlID0gYXdhaXQgeml0aVNlcnZpY2UuZ2V0KGVycG9saWNpZXNVcmwsIHNlcnZpY2VzX3BhZ2luZywgW10pXG4gICAgICAgLnRoZW4oIGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICBlcnBvbGljaWVzRm9yRVIgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICBjb25zdCBwYWdlcyA9IE1hdGguY2VpbChyZXN1bHQubWV0YS5wYWdpbmF0aW9uLnRvdGFsQ291bnQgLyBwYWdlc2l6ZSk7XG4gICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgZm9yIChsZXQgcGFnZSA9IDI7IHBhZ2UgPD0gcGFnZXM7IHBhZ2UrKykge1xuICAgICAgICAgICAgICBzZXJ2aWNlc19wYWdpbmcucGFnZSA9IHBhZ2U7XG4gICAgICAgICAgICAgIGNvbnN0IHRtcF9wcm9taXNlID0gYXdhaXQgeml0aVNlcnZpY2UuZ2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycG9saWNpZXNVcmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZXNfcGFnaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdXG4gICAgICAgICAgICAgICAgKSAudGhlbigocGFnZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcGFnZVJlc3VsdC5kYXRhLmZvckVhY2goKHNlcnYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXJwb2xpY2llc0ZvckVSLnB1c2goc2Vydik7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0bXBfcHJvbWlzZSk7XG4gICAgICAgICAgICAgIHdhaXRfcHJvbWlzZXMucHVzaCh0bXBfcHJvbWlzZSk7XG4gICAgICAgICAgIH0gLy8gZW5kIGZvciBsb29wXG4gICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICBjb25zdCBlcnBvbENoaWxkcyA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgICAgIGVycG9sQ2hpbGRzLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgIGVycG9saWNpZXNGb3JFUi5mb3JFYWNoKCAocG9sKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9saWN5ID0gbmV3IEVSUG9saWN5KCk7XG4gICAgICAgICAgICAgICAgcG9saWN5LmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgIHBvbGljeS51dWlkID0gcG9sLmlkO1xuICAgICAgICAgICAgICAgIHBvbGljeS5uYW1lID0gcG9sLm5hbWU7XG4gICAgICAgICAgICAgICAgcG9saWN5LnR5cGUgPSAnRWRnZSBSb3V0ZXIgUG9saWN5JztcbiAgICAgICAgICAgICAgICBwb2xpY3kuaXNTeXN0ZW0gPSBwb2wuaXNTeXN0ZW07XG4gICAgICAgICAgICAgICAgcG9saWN5LnNlbWFudGljID0gcG9sLnNlbWFudGljO1xuICAgICAgICAgICAgICAgIHBvbGljeS5yb290Tm9kZSA9ICdObyc7XG4gICAgICAgICAgICAgICAgZXJwb2xDaGlsZHMuY2hpbGRyZW4ucHVzaChwb2xpY3kpO1xuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgZXJwb2xDaGlsZHMubmFtZSA9IFwiRWRnZSBSb3V0ZXIgUG9saWNpZXMoXCIrIGVycG9sQ2hpbGRzLmNoaWxkcmVuLmxlbmd0aCArJyknO1xuICAgICAgICAgICAgICAgZWRnZXJvdXRlck5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKGVycG9sQ2hpbGRzKTtcbiAgICAgICAgICAgfSk7XG4gICAgICAgfSk7XG4gICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKGVycG9saWNpZXNwcm9taXNlKTtcblxuICAgICAgIFByb21pc2UuYWxsKHdhaXRfcHJvbWlzZXMpLnRoZW4oICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCd0aGlzIGlzIGEgcHJvbWlzZScpO1xuICAgICAgIH0pO1xuICAgICB9KTtcbiAgICAgICAgbmV0d29ya0dyYXBoID0gZDMuaGllcmFyY2h5KG5ldHdvcmtHcmFwaC5kYXRhLCBmdW5jdGlvbiAobmQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZC5jaGlsZHJlbjtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBbbmV0d29ya0dyYXBoLCB0aGlzLnVuaXFJZF07XG4gICB9XG5cbiAgICBzZXJ2aWNlR3JvdXBpbmcoc2VydmljZXNDaGlsZHJlbiwgc2VydmljZXN0cmVlKSB7XG4gICAgICAgIGNvbnN0IHByb3RvY29sUkRQR3JwID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgdGhpcy5jcmVhdGVJZCgpLFxuICAgICAgICAgICAgJ1NlcnZpY2VzIFtwcm90b2NvbC1SRFBdJyxcbiAgICAgICAgICAgICdTZXJ2aWNlcyBjcmVhdGVkIGZvciBSRFAgcHJvdG9jb2wnXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHByb3RvY29sSFRUUFNHcnAgPSBuZXcgR3JvdXAoXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUlkKCksXG4gICAgICAgICAgICAnU2VydmljZXMgW3Byb3RvY29sLUhUVFBTXScsXG4gICAgICAgICAgICAnU2VydmljZSBjcmVhdGVkIGZvciBIVFRQUyBwcm90b2NvbCdcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcHJvdG9jb2xIVFRQR3JwID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgdGhpcy5jcmVhdGVJZCgpLFxuICAgICAgICAgICAgJ1NlcnZpY2VzIFtwcm90b2NvbC1IVFRQXScsXG4gICAgICAgICAgICAnU2VydmljZSBjcmVhdGVkIGZvciBIVFRQIHByb3RvY29sJ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBwcm90b2NvbEZUUEdycCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlSWQoKSxcbiAgICAgICAgICAgICdTZXJ2aWNlcyBbcHJvdG9jb2wtRlRQXScsXG4gICAgICAgICAgICAnU2VydmljZSBjcmVhdGVkIGZvciBGVFAgcHJvdG9jb2wnXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgYWJjZEdycCA9IG5ldyBHcm91cCh0aGlzLmNyZWF0ZUlkKCksICdTZXJ2aWNlcyBbQS1EXScsICdTZXJ2aWNlIG5hbWUgc3RhcnRzIHdpdGggQSB0byBEJyk7XG4gICAgICAgIGNvbnN0IGVmZ2hHcnAgPSBuZXcgR3JvdXAodGhpcy5jcmVhdGVJZCgpLCAnU2VydmljZXMgW0UtSF0nLCAnU2VydmljZSBuYW1lIHN0YXJ0cyB3aXRoIEUgdG8gSCcpO1xuICAgICAgICBjb25zdCBpamtsR3JwID0gbmV3IEdyb3VwKHRoaXMuY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtJLUxdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBJIHRvIEwnKTtcbiAgICAgICAgY29uc3QgbW5vcEdycCA9IG5ldyBHcm91cCh0aGlzLmNyZWF0ZUlkKCksICdTZXJ2aWNlcyBbTS1QXScsICdTZXJ2aWNlIG5hbWUgc3RhcnRzIHdpdGggTSB0byBQJyk7XG4gICAgICAgIGNvbnN0IHFyc3RHcnAgPSBuZXcgR3JvdXAodGhpcy5jcmVhdGVJZCgpLCAnU2VydmljZXMgW0ctVF0nLCAnU2VydmljZSBuYW1lIHN0YXJ0cyB3aXRoIFEgdG8gVCcpO1xuICAgICAgICBjb25zdCB1dnd4R3JwID0gbmV3IEdyb3VwKHRoaXMuY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtVLVhdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBVIHRvIFgnKTtcbiAgICAgICAgY29uc3QgeXpHcnAgPSBuZXcgR3JvdXAodGhpcy5jcmVhdGVJZCgpLCAnU2VydmljZXMgW1ktWl0nLCAnU2VydmljZSBuYW1lIHN0YXJ0cyB3aXRoIFkgYW5kIFonKTtcbiAgICAgICAgY29uc3Qgb25lVG85R3JwID0gbmV3IEdyb3VwKHRoaXMuY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFsxLTldJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCAwIHRvIDknKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcnZpY2VzdHJlZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc2VydmljZW9iaiA9IHNlcnZpY2VzdHJlZVtpXTtcbiAgICAgICAgICAgIGNvbnN0IGNoYSA9IHNlcnZpY2VvYmoubmFtZS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgaWYgKHNlcnZpY2VvYmoucHJvdG9jb2wgPT09ICdyZHAnKSB7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xSRFBHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VydmljZW9iai5wcm90b2NvbCA9PT0gJ2h0dHBzJykge1xuICAgICAgICAgICAgICAgIHByb3RvY29sSFRUUFNHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VydmljZW9iai5wcm90b2NvbCA9PT0gJ2h0dHAnKSB7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xIVFRQR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlcnZpY2VvYmoucHJvdG9jb2wgPT09ICdmdHAnKSB7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xGVFBHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAnYScgfHwgY2hhID09PSAnYicgfHwgY2hhID09PSAnYycgfHwgY2hhID09PSAnZCcpIHtcbiAgICAgICAgICAgICAgICBhYmNkR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ2UnIHx8IGNoYSA9PT0gJ2YnIHx8IGNoYSA9PT0gJ2cnIHx8IGNoYSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICAgICAgZWZnaEdycC5jaGlsZHJlbi5wdXNoKHNlcnZpY2VvYmopO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdpJyB8fCBjaGEgPT09ICdqJyB8fCBjaGEgPT09ICdrJyB8fCBjaGEgPT09ICdsJykge1xuICAgICAgICAgICAgICAgIGlqa2xHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAnbScgfHwgY2hhID09PSAnbicgfHwgY2hhID09PSAnbycgfHwgY2hhID09PSAncCcpIHtcbiAgICAgICAgICAgICAgICBtbm9wR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ3EnIHx8IGNoYSA9PT0gJ3InIHx8IGNoYSA9PT0gJ3MnIHx8IGNoYSA9PT0gJ3QnKSB7XG4gICAgICAgICAgICAgICAgcXJzdEdycC5jaGlsZHJlbi5wdXNoKHNlcnZpY2VvYmopO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICd1JyB8fCBjaGEgPT09ICd2JyB8fCBjaGEgPT09ICd3JyB8fCBjaGEgPT09ICd4Jykge1xuICAgICAgICAgICAgICAgIHV2d3hHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAneScgfHwgY2hhID09PSAneicpIHtcbiAgICAgICAgICAgICAgICB5ekdycC5jaGlsZHJlbi5wdXNoKHNlcnZpY2VvYmopO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBjaGEgPT09ICcwJyB8fFxuICAgICAgICAgICAgICAgIGNoYSA9PT0gJzEnIHx8XG4gICAgICAgICAgICAgICAgY2hhID09PSAnMicgfHxcbiAgICAgICAgICAgICAgICBjaGEgPT09ICczJyB8fFxuICAgICAgICAgICAgICAgIGNoYSA9PT0gJzQnIHx8XG4gICAgICAgICAgICAgICAgY2hhID09PSAnNScgfHxcbiAgICAgICAgICAgICAgICBjaGEgPT09ICc2JyB8fFxuICAgICAgICAgICAgICAgIGNoYSA9PT0gJzcnIHx8XG4gICAgICAgICAgICAgICAgY2hhID09PSAnOCcgfHxcbiAgICAgICAgICAgICAgICBjaGEgPT09ICc5J1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb25lVG85R3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gLy8gZW5kIG1haW4gZm9yIGxvb3BcblxuICAgICAgICBpZiAocHJvdG9jb2xSRFBHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcHJvdG9jb2xSRFBHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcm90b2NvbFJEUEdycC5uYW1lID0gcHJvdG9jb2xSRFBHcnAubmFtZSArICcoJyArIHByb3RvY29sUkRQR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChwcm90b2NvbFJEUEdycCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvdG9jb2xIVFRQU0dycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwcm90b2NvbEhUVFBTR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHJvdG9jb2xIVFRQU0dycC5uYW1lID0gcHJvdG9jb2xIVFRQU0dycC5uYW1lICsgJygnICsgcHJvdG9jb2xIVFRQU0dycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2gocHJvdG9jb2xIVFRQU0dycCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3RvY29sSFRUUEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwcm90b2NvbEhUVFBHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcm90b2NvbEhUVFBHcnAubmFtZSA9IHByb3RvY29sSFRUUEdycC5uYW1lICsgJygnICsgcHJvdG9jb2xIVFRQR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChwcm90b2NvbEhUVFBHcnApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm90b2NvbEZUUEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwcm90b2NvbEZUUEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByb3RvY29sRlRQR3JwLm5hbWUgPSBwcm90b2NvbEZUUEdycC5uYW1lICsgJygnICsgcHJvdG9jb2xGVFBHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHByb3RvY29sRlRQR3JwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWJjZEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhYmNkR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYWJjZEdycC5uYW1lID0gYWJjZEdycC5uYW1lICsgJygnICsgYWJjZEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2goYWJjZEdycCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVmZ2hHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZWZnaEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVmZ2hHcnAubmFtZSA9IGVmZ2hHcnAubmFtZSArICcoJyArIGVmZ2hHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGVmZ2hHcnApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpamtsR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlqa2xHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpamtsR3JwLm5hbWUgPSBpamtsR3JwLm5hbWUgKyAnKCcgKyBpamtsR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChpamtsR3JwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW5vcEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBtbm9wR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbW5vcEdycC5uYW1lID0gbW5vcEdycC5uYW1lICsgJygnICsgbW5vcEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2gobW5vcEdycCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHFyc3RHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcXJzdEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHFyc3RHcnAubmFtZSA9IHFyc3RHcnAubmFtZSArICcoJyArIHFyc3RHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHFyc3RHcnApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1dnd4R3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHV2d3hHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB1dnd4R3JwLm5hbWUgPSB1dnd4R3JwLm5hbWUgKyAnKCcgKyB1dnd4R3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaCh1dnd4R3JwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeXpHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgeXpHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB5ekdycC5uYW1lID0geXpHcnAubmFtZSArICcoJyArIHl6R3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaCh5ekdycCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9uZVRvOUdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBvbmVUbzlHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvbmVUbzlHcnAubmFtZSA9IG9uZVRvOUdycC5uYW1lICsgJygnICsgb25lVG85R3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChvbmVUbzlHcnApO1xuICAgICAgICB9XG4gICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4ubmFtZSA9IHNlcnZpY2VzQ2hpbGRyZW4ubmFtZSArICcoJyArIHNlcnZpY2VzdHJlZS5sZW5ndGggKyAnKSc7XG4gICAgICAgIHJldHVybiBzZXJ2aWNlc0NoaWxkcmVuO1xuICAgIH1cblxuICAgIGFzeW5jIHByb2Nlc3NFZGdlUm91dGVyUG9saWNpZXNGb3JOb2RlQ2xpY2soXG4gICAgICAgIGVyUG9saWN5Tm9kZSxcbiAgICAgICAgbmV0d29ya0dyYXBoLFxuICAgICAgICBlZGdlUm91dGVyUG9saWNpZXMsXG4gICAgICAgIHVuaXFJZCxcbiAgICAgICAgeml0aVNlcnZpY2VcbiAgICApIHtcbiAgICAgICBjb25zdCBteVByb21pc2UgPSBhd2FpdCBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgY29uc3Qgd2FpdF9wcm9taXNlcyA9IFtdO1xuICAgICAgICAgIHRoaXMudW5pcUlkID0gdW5pcUlkO1xuICAgICAgICAgIGNvbnN0IHJhd0VSUG9saWN5ID0gZWRnZVJvdXRlclBvbGljaWVzLmZpbmQoKHMpID0+IHMubmFtZSA9PT0gZXJQb2xpY3lOb2RlLmRhdGEubmFtZSk7XG4gICAgICAgICAgY29uc3QgcGFnZXNpemUgPSA1MDA7XG5cbiAgICAgIGNvbnN0IGVyX3VybCA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKHJhd0VSUG9saWN5LCAnZWRnZS1yb3V0ZXJzJykucmVwbGFjZSgnLi8nLCAnJyk7XG4gICAgICBsZXQgYXNzb2NpYXRlZFJvdXRlcnMgPSBbXTtcbiAgICAgIGNvbnN0IHBhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgIGNvbnN0IGVyQ2hhaWxkcyA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICBlckNoYWlsZHMubmFtZT0gJ0Fzc29jaWF0ZWQgRWRnZSBSb3V0ZXJzJztcbiAgICAgICAgZXJDaGFpbGRzLnR5cGU9ICdFZGdlIFJvdXRlcnMnO1xuICAgICAgICBlckNoYWlsZHMuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICBjb25zdCBhc3NvY2lhdGVkUm91dGVyc1Byb21pc2UgPSAgYXdhaXQgeml0aVNlcnZpY2UuZ2V0KGVyX3VybCwgcGFnaW5nLCBbXSlcbiAgICAgICAgICAgLnRoZW4oIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICByZXN1bHQuZGF0YS5mb3JFYWNoKCAoZXIpID0+IHtcbiAgICAgICAgICAgICAgIGNvbnN0IHRtcCA9IG5ldyBFUm91dGVyKCk7XG4gICAgICAgICAgICAgICAgICAgdG1wLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgICAgIHRtcC5uYW1lID0gZXIubmFtZTtcbiAgICAgICAgICAgICAgICAgICB0bXAudHlwZSA9ICdFZGdlIFJvdXRlcic7XG4gICAgICAgICAgICAgICAgICAgdG1wLnZlcmlmaWVkID0gZXIuaXNWZXJpZmllZD8gJ1llcyc6ICdObyc7XG4gICAgICAgICAgICAgICAgICAgdG1wLm9ubGluZSA9IGVyLmlzT25saW5lPyAnWWVzJzogJ05vJztcbiAgICAgICAgICAgICAgICAgICB0bXAuZGlzYWJsZWQgPSBlci5kaXNhYmxlZD8gJ1llcyc6ICdObyc7XG4gICAgICAgICAgICAgICAgICAgdG1wLnJvb3ROb2RlID0gJ1llcyc7XG4gICAgICAgICAgICAgICAgICAgdG1wLnR1bm5lbGVyRW5hYmxlZCA9IGVyLnR1bm5lbGVyRW5hYmxlZD8gZXIudHVubmVsZXJFbmFibGVkOidObyc7XG4gICAgICAgICAgICAgICAgICAgdG1wLnN5bmNTdGF0dXMgPSBlci5zeW5jU3RhdHVzPyBlci5zeW5jU3RhdHVzOiAnTm8nO1xuICAgICAgICAgICAgICAgICAgIHRtcC5jcmVhdGVkQXQgPSBlci5jcmVhdGVkQXQ7XG4gICAgICAgICAgICAgICAgICAgdG1wLnVwZGF0ZWRBdCA9IGVyLnVwZGF0ZWRBdDtcbiAgICAgICAgICAgICAgICAgICBlckNoYWlsZHMuY2hpbGRyZW4ucHVzaCh0bXApO1xuICAgICAgICAgICAgIH0gKTtcbiAgICAgICAgICAgZXJDaGFpbGRzLm5hbWUgPSBlckNoYWlsZHMubmFtZSArJygnKyBlckNoYWlsZHMuY2hpbGRyZW4ubGVuZ3RoICsnKSc7XG4gICAgICAgICAgIGVyUG9saWN5Tm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goZXJDaGFpbGRzKTtcbiAgICAgIH0pO1xuICAgICAgICAgIHdhaXRfcHJvbWlzZXMucHVzaChhc3NvY2lhdGVkUm91dGVyc1Byb21pc2UpO1xuXG4gICAgICAgICAgY29uc3Qgc2VydmljZXNfcGFnaW5nID0gdGhpcy5nZXRQYWdpbmdPYmplY3QocGFnZXNpemUpO1xuICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKHJhd0VSUG9saWN5LCAnaWRlbnRpdGllcycpO1xuICAgICAgICAgIGxldCBpZHMgPSBbXTtcbiAgICAgICAgICBjb25zdCBpZHByb21pc2UgPSB6aXRpU2VydmljZS5nZXQodXJsLCBzZXJ2aWNlc19wYWdpbmcsIFtdKVxuICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlkcyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgY29uc3QgcGFnZXMgPSBNYXRoLmNlaWwocmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IC8gcGFnZXNpemUpO1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IHBhZ2UgPSAyOyBwYWdlIDw9IHBhZ2VzOyBwYWdlKyspIHtcbiAgICAgICAgICAgICAgc2VydmljZXNfcGFnaW5nLnBhZ2UgPSBwYWdlO1xuICAgICAgICAgICAgICBjb25zdCB0bXBfcHJvbWlzZSA9IHppdGlTZXJ2aWNlLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZXNfcGFnaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdXG4gICAgICAgICAgICAgICAgKSAudGhlbigocGFnZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcGFnZVJlc3VsdC5kYXRhLmZvckVhY2goKHNlcnYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWRzLnB1c2goc2Vydik7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0bXBfcHJvbWlzZSk7XG4gICAgICAgICAgICAgIHdhaXRfcHJvbWlzZXMucHVzaCh0bXBfcHJvbWlzZSk7XG4gICAgICAgICAgICB9IC8vIGVuZCBmb3IgbG9vcFxuICAgICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgIGNvbnN0IGlkQ2hpbGRzID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgICAgICAgaWRDaGlsZHMuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgaWRzLmZvckVhY2goIChpZE9iKSA9PiB7XG4gICAgICAgICAgICAgICAgaWRDaGlsZHMuY2hpbGRyZW4ucHVzaCh0aGlzLmNyZWF0ZUlkZW50aXR5KGlkT2IpKTtcbiAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWRDaGlsZHMubmFtZSA9IFwiQWNjZXNzaWJsZSBJZGVudGl0aWVzKFwiKyBpZENoaWxkcy5jaGlsZHJlbi5sZW5ndGggKycpJztcbiAgICAgICAgICAgICAgIGVyUG9saWN5Tm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goaWRDaGlsZHMpO1xuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKGlkcHJvbWlzZSk7XG4gICAgICAgICBQcm9taXNlLmFsbCh3YWl0X3Byb21pc2VzKS50aGVuKCAoKSA9PiB7XG4gICAgICAgICAgICAgcmVzb2x2ZSgndGhpcyBpcyBhIHByb21pc2UnKTtcbiAgICAgICAgIH0gKTtcblxuICAgICAgIH0pO1xuXG4gICAgICAgIG5ldHdvcmtHcmFwaCA9IGQzLmhpZXJhcmNoeShuZXR3b3JrR3JhcGguZGF0YSwgZnVuY3Rpb24gKG5kKSB7XG4gICAgICAgICAgICByZXR1cm4gbmQuY2hpbGRyZW47XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBbbmV0d29ya0dyYXBoLCB0aGlzLnVuaXFJZF07XG4gICAgfSAvLyBlbmRcblxuICBhc3luYyBwcm9jZXNzU2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llc0Zvck5vZGVDbGljayhcbiAgICAgICAgc2VydmljZUVyUG9saWN5Tm9kZSxcbiAgICAgICAgbmV0d29ya0dyYXBoLFxuICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzLFxuICAgICAgICB1bmlxSWQsXG4gICAgICAgIHppdGlTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgY29uc3QgbXlQcm9taXNlID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHRoaXMudW5pcUlkID0gdW5pcUlkO1xuICAgICAgICAgIGNvbnN0IHdhaXRfcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICBjb25zdCByYXdTZXJ2aWNlRVJQb2xpY3kgPSBzZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzLmZpbmQoKHMpID0+IHMubmFtZSA9PT0gc2VydmljZUVyUG9saWN5Tm9kZS5kYXRhLm5hbWUpO1xuICAgICAgICAgIGNvbnN0IHBhZ2VzaXplID0gNTAwO1xuICAgICAgICAgIGNvbnN0IHNlcnZpY2VzX3BhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShyYXdTZXJ2aWNlRVJQb2xpY3ksICdlZGdlLXJvdXRlcnMnKTtcbiAgICAgICAgICBsZXQgcm91dGVycyA9IFtdO1xuICAgICAgICAgIGNvbnN0IGVycHJvbWlzZSA9IHppdGlTZXJ2aWNlLmdldCh1cmwsIHNlcnZpY2VzX3BhZ2luZywgW10pXG4gICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgcm91dGVycyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgY29uc3QgcGFnZXMgPSBNYXRoLmNlaWwocmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IC8gcGFnZXNpemUpO1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IHBhZ2UgPSAyOyBwYWdlIDw9IHBhZ2VzOyBwYWdlKyspIHtcbiAgICAgICAgICAgICAgc2VydmljZXNfcGFnaW5nLnBhZ2UgPSBwYWdlO1xuICAgICAgICAgICAgICBjb25zdCB0bXBfcHJvbWlzZSA9IHppdGlTZXJ2aWNlLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZXNfcGFnaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdXG4gICAgICAgICAgICAgICAgKSAudGhlbigocGFnZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcGFnZVJlc3VsdC5kYXRhLmZvckVhY2goKHNlcnYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcm91dGVycy5wdXNoKHNlcnYpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHByb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICAgICB3YWl0X3Byb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICAgfSAvLyBlbmQgZm9yIGxvb3BcbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICBjb25zdCBlckNoaWxkcyA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgICAgIGVyQ2hpbGRzLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgIHJvdXRlcnMuZm9yRWFjaCggKGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWRPYiA9IG5ldyBFUm91dGVyKCk7XG4gICAgICAgICAgICAgICAgaWRPYi5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBpZE9iLnV1aWQgPSBlci5pZDtcbiAgICAgICAgICAgICAgICBpZE9iLm5hbWUgPSBlci5uYW1lO1xuICAgICAgICAgICAgICAgIGlkT2IudHlwZSA9ICdFZGdlIFJvdXRlcic7XG4gICAgICAgICAgICAgICAgZXJDaGlsZHMuY2hpbGRyZW4ucHVzaChpZE9iKTtcbiAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgIGVyQ2hpbGRzLm5hbWUgPSBcIkVkZ2UgUm91dGVycyhcIisgZXJDaGlsZHMuY2hpbGRyZW4ubGVuZ3RoICsnKSc7XG4gICAgICAgICAgICAgICBzZXJ2aWNlRXJQb2xpY3lOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaChlckNoaWxkcyk7XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKGVycHJvbWlzZSk7XG5cbiAgICAgICAgICBjb25zdCBzZXJ2aWNlc19wYWdpbmdCID0gdGhpcy5nZXRQYWdpbmdPYmplY3QocGFnZXNpemUpO1xuXG4gICAgICAgICAgY29uc3QgdXJsQiA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKHJhd1NlcnZpY2VFUlBvbGljeSwgJ3NlcnZpY2VzJyk7XG4gICAgICAgICAgbGV0IHNlckFycmF5ID0gW107XG4gICAgICAgICAgY29uc3Qgc2VycHJvbWlzZSA9IHppdGlTZXJ2aWNlLmdldCh1cmxCLCBzZXJ2aWNlc19wYWdpbmdCLCBbXSlcbiAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBzZXJBcnJheSA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgY29uc3QgcGFnZXMgPSBNYXRoLmNlaWwocmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IC8gcGFnZXNpemUpO1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZXNCID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMjsgcGFnZSA8PSBwYWdlczsgcGFnZSsrKSB7XG4gICAgICAgICAgICAgIHNlcnZpY2VzX3BhZ2luZ0IucGFnZSA9IHBhZ2U7XG4gICAgICAgICAgICAgIGNvbnN0IHRtcF9wcm9taXNlQiA9IHppdGlTZXJ2aWNlLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxCLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzX3BhZ2luZ0IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW11cbiAgICAgICAgICAgICAgICApIC50aGVuKChwYWdlUmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICBwYWdlUmVzdWx0LmRhdGEuZm9yRWFjaCgoc2VydikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXJBcnJheS5wdXNoKHNlcnYpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHByb21pc2VzQi5wdXNoKHRtcF9wcm9taXNlQik7XG4gICAgICAgICAgICAgIHdhaXRfcHJvbWlzZXMucHVzaCh0bXBfcHJvbWlzZUIpO1xuICAgICAgICAgICAgfSAvLyBlbmQgZm9yIGxvb3BcbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzQikudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgY29uc3Qgc3JDaGlsZHMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgICAgICBzckNoaWxkcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICBzZXJBcnJheS5mb3JFYWNoKCAoc3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzck9iID0gbmV3IFNlcnZpY2UoKTtcbiAgICAgICAgICAgICAgICBzck9iLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgIHNyT2IudXVpZCA9IHNyLmlkO1xuICAgICAgICAgICAgICAgIHNyT2IubmFtZSA9IHNyLm5hbWU7XG4gICAgICAgICAgICAgICAgc3JPYi50eXBlID0gJ1NlcnZpY2UnO1xuICAgICAgICAgICAgICAgIHNyQ2hpbGRzLmNoaWxkcmVuLnB1c2goc3JPYik7XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHNyQ2hpbGRzLm5hbWUgPSBcIlNlcnZpY2VzKFwiKyBzckNoaWxkcy5jaGlsZHJlbi5sZW5ndGggKycpJztcbiAgICAgICAgICAgICAgc2VydmljZUVyUG9saWN5Tm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goc3JDaGlsZHMpO1xuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKHNlcnByb21pc2UpO1xuXG4gICAgICAgICBQcm9taXNlLmFsbCh3YWl0X3Byb21pc2VzKS50aGVuKCAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKCdEb25lJyk7XG4gICAgICAgICB9ICk7XG5cbiAgICAgICB9KTtcblxuICAgICAgICBuZXR3b3JrR3JhcGggPSBkMy5oaWVyYXJjaHkobmV0d29ya0dyYXBoLmRhdGEsIGZ1bmN0aW9uIChuZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5kLmNoaWxkcmVuO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFtuZXR3b3JrR3JhcGgsIHRoaXMudW5pcUlkXTtcbiAgICB9IC8vIGVuZFxufSAvLyBlbmQgb2YgY2xhc3NcbiJdfQ==
|
|
883
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay12aXN1YWxpemVyLnRyZWVub2RlcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Zpc3VhbGl6ZXIvbmV0d29yay12aXN1YWxpemVyL25ldHdvcmstdmlzdWFsaXplci50cmVlbm9kZXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFLdEksTUFBTSxPQUFPLGlCQUFpQjtJQUg5QjtRQUlJLFdBQU0sR0FBRyxDQUFDLENBQUM7S0F5OUJkO0lBeDlCRyxlQUFlLENBQUMsUUFBUTtRQUN0QixNQUFNLE1BQU0sR0FBRztZQUNiLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsTUFBTSxFQUFFLEVBQUU7WUFDVixLQUFLLEVBQUUsUUFBUTtZQUNmLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxFQUFFLE1BQU07WUFDWixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUM7UUFDRixPQUFRLE1BQU0sQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSyxDQUFDLDZCQUE2QixDQUMvQixZQUFZLEVBQ1osWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sV0FBVyxFQUNYLE9BQU87UUFFWCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksT0FBTyxDQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDNUQsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDekUsSUFBSSxlQUFlLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRTtnQkFBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQTthQUFDO1lBQUEsQ0FBQztZQUVuRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDOUIsU0FBUyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQy9CLFNBQVMsQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxTQUFTLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDO2dCQUN0QyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDaEQ7WUFFSCxNQUFNLFlBQVksR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sWUFBWSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7WUFDcEMsWUFBWSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEMsWUFBWSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEMsSUFBSSx1QkFBdUIsR0FBRyxFQUFFLENBQUM7WUFDakMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO1lBQ3ZCLDJCQUEyQjtZQUN6QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0UsSUFBSSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7WUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QyxNQUFNLFNBQVMsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQy9CLFNBQVMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQy9CLFNBQVMsQ0FBQyxJQUFJLEdBQUUseUJBQXlCLENBQUM7WUFDMUMsU0FBUyxDQUFDLElBQUksR0FBRSxjQUFjLENBQUM7WUFDakMsTUFBTSx3QkFBd0IsR0FBSSxNQUFNLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUM7aUJBQ2xFLElBQUksQ0FBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO29CQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUN0QixHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDekIsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO29CQUNuQixHQUFHLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztvQkFDekIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25DLENBQUMsQ0FBRSxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMxRixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sWUFBWSxHQUFJLE1BQU0sV0FBVztpQkFDOUIsR0FBRyxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsRUFBRSxDQUFDO2lCQUN0QyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDZix1QkFBdUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxDQUFDO1lBRVYsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLHVCQUF1QixDQUFDLE9BQU8sQ0FBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO2dCQUNuQyxNQUFNLFNBQVMsR0FBSSxJQUFJLENBQUMsNEJBQTRCLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDM0UsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDM0MsU0FBUyxDQUFDLE9BQU8sQ0FBRSxDQUFDLElBQUksRUFBRSxFQUFFO29CQUMzQixJQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUc7d0JBQ3JCLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFGO3lCQUFNO3dCQUNKLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFGO2dCQUNGLENBQUMsQ0FBRSxDQUFDO1lBQ1QsQ0FBQyxDQUFDLENBQUM7WUFFTCxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBRSxHQUFHLEVBQUU7Z0JBQ3BDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUUsQ0FBQyxFQUFHO29CQUM5QixTQUFTLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEdBQUMsR0FBRyxHQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFDLEdBQUcsQ0FBQztvQkFDbEUsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUMvQztnQkFDRCxJQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBRTtvQkFDN0IsWUFBWSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsR0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBQyxHQUFHLENBQUM7b0JBQ3RFLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDbkQ7Z0JBQ0QsSUFBRyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUU7b0JBQzdCLFlBQVksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLEdBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUMsR0FBRyxDQUFDO29CQUN0RSxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ25EO2dCQUNELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDO1FBRUwsQ0FBQyxDQUFDLENBQUM7UUFFRixZQUFZLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUN0RCxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDQyxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QyxDQUFDLENBQUMsa0JBQWtCO0lBRXBCLFFBQVE7UUFDSixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVGLGlCQUFpQixDQUFFLEVBQUU7UUFDaEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUMvQixTQUFTLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMvQixTQUFTLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDdkIsU0FBUyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ3pCLFNBQVMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1FBQzdCLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxPQUFPLEVBQUMsUUFBUTtRQUN6QyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDdEIsT0FBTyxDQUFDLE9BQU8sQ0FBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ3RCLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBRSxDQUFDO1FBRUosUUFBUSxDQUFDLE9BQU8sQ0FBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNyQjtRQUNGLENBQUMsQ0FBRSxDQUFDO1FBRUwsT0FBTyxPQUFPLENBQUM7SUFDaEIsQ0FBQztJQUVGLGNBQWMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtRQUMzQixJQUFLLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUMvRCxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMxQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFDRCxjQUFjLENBQUMsRUFBRTtRQUNiLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsUUFBUSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsUUFBUSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3RCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztRQUN4QixRQUFRLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMxRCxRQUFRLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztRQUMzQixRQUFRLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUEsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO1FBQ3ZFLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRTtZQUNaLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNqRSxRQUFRLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1NBQzNDO1FBQ0QsSUFBSSxFQUFFLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN6RCxRQUFRLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO1NBQ3RDO1FBQ0QsUUFBUSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ2xDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUVwQyxPQUFPLFFBQVEsQ0FBQztJQUNuQixDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsRUFBRSxFQUFFLFFBQVE7UUFDN0IsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVDLDRCQUE0QixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFdBQVc7UUFDdkUsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFaEMsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFFMUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNqQyxZQUFZLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztRQUN2QyxNQUFNLFlBQVksR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLFlBQVksQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO1FBRXhDLFlBQVksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLFlBQVksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWxDLGVBQWUsQ0FBQyxJQUFJLENBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUMzQixFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUM1QixJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUc7b0JBQ2pDLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7d0JBQ3BCLE1BQU0sT0FBTyxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7d0JBQzlCLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUM3QixPQUFPLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7d0JBQ3ZCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQzt3QkFDdkIsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUNqRSxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDL0IsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztxQkFDbkU7eUJBQU07d0JBQ0wsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQzt3QkFDaEMsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQzdCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQzt3QkFDdkIsT0FBTyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO3dCQUN2QixPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUU7d0JBQ2hFLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUNyQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO3FCQUNoRTtpQkFDRDtZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFFLENBQUM7UUFFSixTQUFTLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSTtZQUMzQixJQUFJLENBQUMsT0FBTyxDQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakIsQ0FBQyxDQUFFLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDeEIsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBRXhCLFFBQVEsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDbkMsRUFBRSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUN0RCxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRztvQkFDcEMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUUsQ0FBQztpQkFDaEQ7Z0JBQ0QsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUc7b0JBQ25DLFlBQVksQ0FBQyxJQUFJLENBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFFLENBQUM7aUJBQ2xEO1lBQ0osQ0FBQyxDQUFFLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUNKLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRSxDQUFDLEVBQUc7WUFDMUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNqQyxTQUFTLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMvQixTQUFTLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztZQUNqQyxTQUFTLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQztZQUNsQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzlCO1FBQ0QsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFFLENBQUMsRUFBRztZQUN4QixNQUFNLFNBQVMsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQy9CLFNBQVMsQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO1lBQ2pDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDO1lBQ2xDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDaEM7UUFDSCxPQUFPLFdBQVcsQ0FBQztJQUdwQixDQUFDLENBQUMsdUNBQXVDO0lBRTFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxJQUFJO1FBQ2pDLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLFFBQVEsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDakMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4QixLQUFLLENBQUMsSUFBSSxDQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2pCLElBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ2pDLE1BQU0sV0FBVyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ2xDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNqQyxXQUFXLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7b0JBQzNCLFdBQVcsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO29CQUMvQixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ3BDO1lBQ0osQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUNKLE9BQU8saUJBQWlCLENBQUM7SUFDMUIsQ0FBQztJQUVBLGVBQWUsQ0FBQyxNQUFNLEVBQUUsU0FBUztRQUM5QixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVILGtCQUFrQixDQUFDLE9BQU87UUFDdkIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBRSxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzFDLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDaEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDdEIsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQzdDO2lCQUFNO2dCQUNKLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUNoQztZQUVELElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFHO2dCQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRTtvQkFDM0MsS0FBSyxNQUFNLEdBQUcsSUFBSSxTQUFTLEVBQUU7d0JBQzFCLEtBQUssR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFFLEdBQUcsR0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsR0FBRyxDQUFFO3FCQUNoRDtvQkFDQyxLQUFLLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztnQkFDeEIsQ0FBQyxDQUFDLENBQUM7YUFDTDtpQkFBTTtnQkFDSCxLQUFLLEdBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7YUFDM0I7WUFDRCxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFCLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFNBQVMsQ0FBQztJQUNwQixDQUFDO0lBRUQsS0FBSyxDQUFDLDJCQUEyQixDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXO1FBQ3ZGLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxPQUFPLENBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUM1RCxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDckIsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdFLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1lBRTlCLGFBQWEsQ0FBQyxjQUFjLElBQUksYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDekUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLGlCQUFpQixDQUFDLElBQUksR0FBRyxZQUFZLENBQUM7WUFDdEMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztZQUN0QyxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM1QixNQUFNLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxNQUFNLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztnQkFFMUIsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMzQyxDQUFDLHFCQUFxQjtZQUN2QixJQUFJLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUUsQ0FBQyxFQUFHO2dCQUN4QyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxHQUFDLEdBQUcsR0FBRSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztnQkFDN0YsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7YUFDcEQ7WUFFRCxJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7WUFDekIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN0RSxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7WUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRCxNQUFNLGFBQWEsR0FBRyxNQUFNLFdBQVc7aUJBQ3JDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQztpQkFDOUIsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ2hCLGVBQWUsR0FBRyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM5RCxNQUFNLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUM5QixNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztnQkFDaEMsTUFBTSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztnQkFDaEMsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7Z0JBQy9CLGVBQWUsQ0FBQyxPQUFPLENBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDL0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDekIsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3pCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztvQkFDcEIsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO29CQUNwQixHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNwQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hDLENBQUMsQ0FBRSxDQUFDO2dCQUVKLElBQUksbUJBQW1CLENBQUMsTUFBTSxHQUFFLENBQUMsRUFBRztvQkFDakMsTUFBTSxDQUFDLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQztvQkFDdEMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFFLEdBQUcsR0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7b0JBQzVELFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdkMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO2lCQUN4RTtZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUosYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNsQyxNQUFNLGdDQUFnQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FDOUQsYUFBYSxFQUNkLDhCQUE4QixDQUM5QixDQUFDO1lBQ0YsSUFBSSxvQkFBb0IsR0FBRyxFQUFFLENBQUM7WUFDOUIsTUFBTSxVQUFVLEdBQUksTUFBTSxXQUFXO2lCQUM5QixHQUFHLENBQUMsZ0NBQWdDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDO2lCQUNyRSxJQUFJLENBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDYixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBRSxDQUFDLElBQUksRUFBRSxFQUFFO29CQUM1QixvQkFBb0IsQ0FBQyxJQUFJLENBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBQyxjQUFjLENBQUMsQ0FBRSxDQUFDO2dCQUM1RSxDQUFDLENBQUUsQ0FBQztnQkFBQSxDQUFDO1lBQ1YsQ0FBQyxDQUFDLENBQUM7WUFDVCxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQy9CLElBQUksa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1lBQzVCLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNyQyxNQUFNLE1BQU0sR0FBSSxXQUFXO3FCQUNwQixHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QywwQ0FBMEM7Z0JBQ2hELGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1lBQzNCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBRSxDQUFDLE1BQVUsRUFBRSxFQUFFO2dCQUN6RCxNQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQU8sRUFBRSxFQUFFO29CQUNqQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQzdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFFLENBQUMsRUFBRSxFQUFDLEVBQUU7NEJBQ3RCLE1BQU0sSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7NEJBQ3JCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUMxQixJQUFJLENBQUMsSUFBSSxHQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUM7NEJBQ3RCLEVBQUUsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDOzRCQUM5QixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQy9CLENBQUMsQ0FBQyxDQUFDO3FCQUNMO2dCQUNMLENBQUMsQ0FBQyxDQUFBO2dCQUNGLE1BQU0sR0FBRyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ3ZCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsMEJBQTBCLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxHQUFFLEdBQUcsQ0FBQztnQkFDdEUsR0FBRyxDQUFDLElBQUksR0FBRyxjQUFjLENBQUM7Z0JBQzFCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ2pDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN6QixXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FDbkQsYUFBYSxFQUNiLGtCQUFrQixDQUNsQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBa0I7WUFFdkMsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUM7WUFFeEIsTUFBTSxRQUFRLEdBQUcsTUFBTSxXQUFXO2lCQUNqQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQztpQkFDdkMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLFlBQVksQ0FBQyxPQUFPLENBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDL0IsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQzlDLE1BQU0sRUFDTixZQUFZLENBQ2IsQ0FBQztnQkFDRixNQUFNLE1BQU0sR0FBSSxXQUFXO3FCQUNwQixHQUFHLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDO3FCQUN0RCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDN0MsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUUsQ0FBQyxNQUFVLEVBQUUsRUFBRTtnQkFDakQsTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFPLEVBQUUsRUFBRTtvQkFDcEMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFOzRCQUN6QixJQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUU7Z0NBQ3JCLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQzs2QkFDekQ7aUNBQU0sSUFBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFDO2dDQUMzQixjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7NkJBQ3pEO3dCQUNILENBQUMsQ0FBQyxDQUFDO3FCQUNMO3lCQUFNO3dCQUNILElBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBRTs0QkFDcEIsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDbkU7NkJBQU0sSUFBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFDOzRCQUMxQixjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUNuRTtxQkFDSjtnQkFFRixDQUFDLENBQUMsQ0FBQztnQkFFRixNQUFNLEdBQUcsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUN6QixHQUFHLENBQUMsSUFBSSxHQUFHLGtCQUFrQixHQUFHLGNBQWMsQ0FBQyxNQUFNLEdBQUUsR0FBRyxDQUFDO2dCQUMzRCxHQUFHLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztnQkFDeEIsR0FBRyxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUM7Z0JBQzlCLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN6QixXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzdCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLEdBQUcsY0FBYyxDQUFDLE1BQU0sR0FBRSxHQUFHLENBQUM7Z0JBQy9ELE9BQU8sQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO2dCQUM1QixPQUFPLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQztnQkFDbEMsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzdCLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDNUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7WUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtRQUV0QixZQUFZLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUN4RCxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFDRixPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDLENBQUMscUNBQXFDO0lBR3ZDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFHLGVBQWUsRUFBRSxNQUFNLEVBQUUsV0FBVztRQUNyRyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksT0FBTyxDQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDNUQsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3JCLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoRixNQUFNLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRTdCLFVBQVUsQ0FBQyxZQUFZLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtnQkFDakUsTUFBTSxJQUFJLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7Z0JBQ2xDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsVUFBVSxDQUFDLGFBQWEsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO2dCQUNuRSxNQUFNLElBQUksR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQztnQkFDbEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUM3RCxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFdkMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO1lBQ3JCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6RCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBRSxVQUFVLEVBQUUsWUFBWSxDQUFFLENBQUM7WUFDOUUsMkRBQTJEO1lBQzNELE1BQU0sVUFBVSxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLENBQUM7aUJBQ2xGLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNaLE1BQU0sTUFBTSxHQUFFLElBQUksUUFBUSxFQUFFLENBQUE7Z0JBQzVCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksR0FBRSxhQUFhLENBQUM7Z0JBQzdDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBRSxDQUFDLElBQUksRUFBRSxFQUFFO29CQUN6QixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFFLENBQUM7Z0JBQ25ELENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUMsR0FBRyxDQUFDO2dCQUM3RCxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRS9CLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFFLFVBQVUsRUFBRSxVQUFVLENBQUUsQ0FBQyxDQUFFLGdCQUFnQjtZQUM1RixNQUFNLFFBQVEsR0FBRyxNQUFNLFdBQVcsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxFQUFFLENBQUM7aUJBQzNFLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNmLE1BQU0sTUFBTSxHQUFFLElBQUksUUFBUSxFQUFFLENBQUE7Z0JBQzVCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksR0FBRSxXQUFXLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBRSxDQUFDLElBQUksRUFBRSxFQUFFO29CQUM1QixNQUFNLEVBQUUsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUN4QixFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ2hCLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDcEIsRUFBRSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7b0JBQ3BCLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QixDQUFDLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFDLEdBQUcsQ0FBQztnQkFDN0QsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBRUgsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUU1QixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBRSxHQUFHLEVBQUU7Z0JBQ25DLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN2QixDQUFDLENBQUMsQ0FBQztRQUVOLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO1FBQ2pCLFlBQVksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3ZELE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRixLQUFLLENBQUMsNEJBQTRCLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxRQUFRLEdBQUMsR0FBRztRQUN0RSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBRSxDQUFDO1FBQzVFLE1BQU0sUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQzthQUMzRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzVCLE1BQU0sRUFBRSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ3hCLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN4QixFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2xCLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDcEIsRUFBRSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7Z0JBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxLQUFLLENBQUMsOEJBQThCLENBQy9CLGNBQWMsRUFDZCxZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixXQUFXO1FBR2QsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLE9BQU8sQ0FBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzlELE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUNyQixNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEUsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRTdELFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDeEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDNUIsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3pCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNoQixHQUFHLENBQUMsSUFBSSxHQUFHLHVCQUF1QixDQUFDO2dCQUNuQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7WUFDckIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLHNCQUFzQixDQUFDLENBQUM7WUFDMUUsSUFBSSxlQUFlLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxXQUFXLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsRUFBRSxDQUFDO2lCQUNsRixJQUFJLENBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUNyQixlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDOUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUM7Z0JBQ3RFLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztnQkFDbkIsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxJQUFJLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtvQkFDdkMsZUFBZSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7b0JBQzVCLE1BQU0sV0FBVyxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsQ0FDeEIsYUFBYSxFQUNiLGVBQWUsRUFDZixFQUFFLENBQ2hCLENBQUUsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7d0JBQ3JCLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7NEJBQy9CLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQzdCLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO29CQUNMLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzNCLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ2xDLENBQUMsZUFBZTtnQkFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUM5QixNQUFNLFdBQVcsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUNuQyxXQUFXLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDakMsZUFBZSxDQUFDLE9BQU8sQ0FBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUM5QixNQUFNLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO3dCQUM5QixNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDNUIsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUNyQixNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7d0JBQ3ZCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsb0JBQW9CLENBQUM7d0JBQ25DLE1BQU0sQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQzt3QkFDL0IsTUFBTSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO3dCQUMvQixNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzt3QkFDdkIsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3JDLENBQUMsQ0FBQyxDQUFDO29CQUNELFdBQVcsQ0FBQyxJQUFJLEdBQUcsdUJBQXVCLEdBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUUsR0FBRyxDQUFDO29CQUM3RSxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ25ELENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7WUFDSCxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFFdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUUsR0FBRyxFQUFFO2dCQUNuQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0EsWUFBWSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDdkQsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVBLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZO1FBQzFDLE1BQU0sY0FBYyxHQUFHLElBQUksS0FBSyxDQUM1QixJQUFJLENBQUMsUUFBUSxFQUFFLEVBQ2YseUJBQXlCLEVBQ3pCLG1DQUFtQyxDQUN0QyxDQUFDO1FBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEtBQUssQ0FDOUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUNmLDJCQUEyQixFQUMzQixvQ0FBb0MsQ0FDdkMsQ0FBQztRQUNGLE1BQU0sZUFBZSxHQUFHLElBQUksS0FBSyxDQUM3QixJQUFJLENBQUMsUUFBUSxFQUFFLEVBQ2YsMEJBQTBCLEVBQzFCLG1DQUFtQyxDQUN0QyxDQUFDO1FBQ0YsTUFBTSxjQUFjLEdBQUcsSUFBSSxLQUFLLENBQzVCLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFDZix5QkFBeUIsRUFDekIsa0NBQWtDLENBQ3JDLENBQUM7UUFFRixNQUFNLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUNoRyxNQUFNLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUNoRyxNQUFNLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUNoRyxNQUFNLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUNoRyxNQUFNLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUNoRyxNQUFNLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUNoRyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsa0NBQWtDLENBQUMsQ0FBQztRQUMvRixNQUFNLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUVsRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQyxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkMsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFF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QyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUNsRSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUNsRSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUNsRSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUNsRSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUNsRSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0IsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUM1RCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0IsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxTQUFTLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUN4RSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsWUFBWSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDaEYsT0FBTyxnQkFBZ0IsQ0FBQztJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFDLHFDQUFxQyxDQUN2QyxZQUFZLEVBQ1osWUFBWSxFQUNaLGtCQUFrQixFQUNsQixNQUFNLEVBQ04sV0FBVztRQUVaLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMzRCxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDckIsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEYsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO1lBRXpCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0RixJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztZQUMzQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sU0FBUyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7WUFDL0IsU0FBUyxDQUFDLElBQUksR0FBRSx5QkFBeUIsQ0FBQztZQUMxQyxTQUFTLENBQUMsSUFBSSxHQUFFLGNBQWMsQ0FBQztZQUMvQixTQUFTLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQyxNQUFNLHdCQUF3QixHQUFJLE1BQU0sV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQztpQkFDckUsSUFBSSxDQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7b0JBQzFCLE1BQU0sR0FBRyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ3RCLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUN6QixHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7b0JBQ25CLEdBQUcsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO29CQUN6QixHQUFHLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUEsQ0FBQyxDQUFDLEtBQUssQ0FBQSxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUMxQyxHQUFHLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUEsQ0FBQyxDQUFDLEtBQUssQ0FBQSxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUN0QyxHQUFHLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUEsQ0FBQyxDQUFDLEtBQUssQ0FBQSxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUN4QyxHQUFHLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztvQkFDckIsR0FBRyxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFBLENBQUMsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUM7b0JBQ2xFLEdBQUcsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQSxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUNwRCxHQUFHLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7b0JBQzdCLEdBQUcsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztvQkFDN0IsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25DLENBQUMsQ0FBRSxDQUFDO2dCQUNOLFNBQVMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksR0FBRSxHQUFHLEdBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUUsR0FBRyxDQUFDO2dCQUNyRSxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDLENBQUM7WUFDQyxhQUFhLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFFN0MsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQy9ELElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNiLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRSxFQUFFLENBQUM7aUJBQzFELElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNmLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsQ0FBQztnQkFDdEUsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO2dCQUNwQixLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO29CQUN4QyxlQUFlLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDNUIsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxFQUNILGVBQWUsRUFDZixFQUFFLENBQ2hCLENBQUUsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7d0JBQ3JCLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7NEJBQy9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ2pCLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO29CQUNMLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzNCLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ2pDLENBQUMsZUFBZTtnQkFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUNoQyxRQUFRLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDOUIsR0FBRyxDQUFDLE9BQU8sQ0FBRSxDQUFDLElBQUksRUFBRSxFQUFFO3dCQUNuQixRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ3JELENBQUMsQ0FBQyxDQUFDO29CQUNGLFFBQVEsQ0FBQyxJQUFJLEdBQUcsd0JBQXdCLEdBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUUsR0FBRyxDQUFDO29CQUN2RSxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxDQUFDO1lBQ04sQ0FBQyxDQUFDLENBQUM7WUFDSixhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFFLEdBQUcsRUFBRTtnQkFDbEMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFFLENBQUM7UUFFTixDQUFDLENBQUMsQ0FBQztRQUVGLFlBQVksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3ZELE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxNQUFNO0lBRVYsS0FBSyxDQUFDLDRDQUE0QyxDQUM1QyxtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLHlCQUF5QixFQUN6QixNQUFNLEVBQ04sV0FBVztRQUVaLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDckIsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sa0JBQWtCLEdBQUcseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzRyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7WUFDckIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDeEUsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRSxFQUFFLENBQUM7aUJBQzFELElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNmLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsQ0FBQztnQkFDdEUsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO2dCQUNwQixLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO29CQUN4QyxlQUFlLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDNUIsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxFQUNILGVBQWUsRUFDZixFQUFFLENBQ2hCLENBQUUsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7d0JBQ3JCLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7NEJBQy9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3JCLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO29CQUNMLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzNCLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ2pDLENBQUMsZUFBZTtnQkFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUNoQyxRQUFRLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDOUIsT0FBTyxDQUFDLE9BQU8sQ0FBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO3dCQUNyQixNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO3dCQUMzQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO3dCQUNsQixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7d0JBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO3dCQUMxQixRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDaEMsQ0FBQyxDQUFDLENBQUM7b0JBQ0QsUUFBUSxDQUFDLElBQUksR0FBRyxlQUFlLEdBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUUsR0FBRyxDQUFDO29CQUMvRCxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQztZQUNILGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFOUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRXhELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNyRSxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbEIsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO2lCQUM3RCxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDZixRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDdkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUM7Z0JBQ3RFLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztnQkFDckIsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxJQUFJLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtvQkFDeEMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDN0IsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FDbkIsSUFBSSxFQUNKLGdCQUFnQixFQUNoQixFQUFFLENBQ2hCLENBQUUsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7d0JBQ3JCLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7NEJBQy9CLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3RCLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO29CQUNMLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQzdCLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ2xDLENBQUMsZUFBZTtnQkFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUNoQyxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUNoQyxRQUFRLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDOUIsUUFBUSxDQUFDLE9BQU8sQ0FBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO3dCQUN0QixNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO3dCQUMzQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO3dCQUNsQixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7d0JBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO3dCQUN0QixRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDaEMsQ0FBQyxDQUFDLENBQUM7b0JBQ0YsUUFBUSxDQUFDLElBQUksR0FBRyxXQUFXLEdBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUUsR0FBRyxDQUFDO29CQUMzRCxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbEQsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQztZQUNKLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUUsR0FBRyxFQUFFO2dCQUNuQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkIsQ0FBQyxDQUFFLENBQUM7UUFFTixDQUFDLENBQUMsQ0FBQztRQUVGLFlBQVksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3ZELE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxNQUFNOytHQXo5QkMsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGZCxNQUFNO0VBNDlCcEIsZUFBZTs0RkExOUJKLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgU2VydmljZVBvbGljeSwgQXR0cmlidXRlLCBDaGlsZHJlbiwgSWRlbnRpdHksIEVSb3V0ZXIsIEVSUG9saWN5LCBHcm91cCwgU2VydmljZSwgQ29uZmlnIH0gZnJvbSAnLi9uZXR3b3JrLXZpc3VhbGl6ZXIuaGVscGVyJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVHJlZU5vZGVQcm9jZXNzb3Ige1xuICAgIHVuaXFJZCA9IDA7XG4gICAgZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKSB7XG4gICAgICBjb25zdCBwYWdpbmcgPSB7XG4gICAgICAgIHNlYXJjaE9uOiAnbmFtZScsXG4gICAgICAgIG5vU2VhcmNoOiBmYWxzZSxcbiAgICAgICAgZmlsdGVyOiAnJyxcbiAgICAgICAgdG90YWw6IHBhZ2VzaXplLFxuICAgICAgICBwYWdlOiAxLFxuICAgICAgICBzb3J0OiAnbmFtZScsXG4gICAgICAgIG9yZGVyOiAnYXNjJyxcbiAgICAgIH07XG4gICAgICByZXR1cm4gIHBhZ2luZztcbiAgICB9XG5cbiAgICBhc3luYyBwcm9jZXNzSWRlbnRpdGllc0Zvck5vZGVDbGljayhcbiAgICAgICAgaWRlbnRpdHlOb2RlLFxuICAgICAgICBuZXR3b3JrR3JhcGgsXG4gICAgICAgIHJhd0VuZHBvaW50cyxcbiAgICAgICAgdW5pcUlkLFxuICAgICAgICB6aXRpU2VydmljZSxcbiAgICAgICAgY29uZmlnc1xuICAgICkge1xuICAgIGNvbnN0IG15UHJvbWlzZSA9IGF3YWl0IG5ldyBQcm9taXNlKCBhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgY29uc3Qgd2FpdF9wcm9taXNlcyA9IFtdO1xuICAgICAgICB0aGlzLnVuaXFJZCA9IHVuaXFJZDtcbiAgICAgICAgY29uc3QgcmF3RXAgPSB0aGlzLmZpbmRSYXdFbmRwb2ludChpZGVudGl0eU5vZGUuZGF0YS5uYW1lLCByYXdFbmRwb2ludHMpO1xuICAgICAgICBsZXQgcmF3RXBBdHRyaWJ1dGVzID0gW107XG4gICAgICAgIGlmIChyYXdFcC5yb2xlQXR0cmlidXRlcykge3Jhd0VwQXR0cmlidXRlcyA9IHJhd0VwLnJvbGVBdHRyaWJ1dGVzfTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhd0VwQXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IG5ldyBBdHRyaWJ1dGUoKTtcbiAgICAgICAgICAgICAgYXR0cmlidXRlLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgICBhdHRyaWJ1dGUubmFtZSA9IHJhd0VwQXR0cmlidXRlc1tpXTtcbiAgICAgICAgICAgICAgYXR0cmlidXRlLnR5cGUgPSAnSWRlbnRpdHkgQXR0cmlidXRlJztcbiAgICAgICAgICAgICAgaWRlbnRpdHlOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaChhdHRyaWJ1dGUpO1xuICAgICAgICB9XG5cbiAgICAgIGNvbnN0IGJpbmRTZXJ2aWNlcyA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgY29uc3QgZGlhbFNlcnZpY2VzID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICBiaW5kU2VydmljZXMuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICBkaWFsU2VydmljZXMuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICBsZXQgaWRlbnRpdHlTZXJ2aWNlUG9saWNpZXMgPSBbXTtcbiAgICAgIGNvbnN0IHBhZ2VzaXplID0gNTAwO1xuICAgIC8vIGZldGNoIGFzc29jaWF0ZWQgcm91dGVyc1xuICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2UocmF3RXAsICdlZGdlLXJvdXRlcnMnKS5yZXBsYWNlKCcuLycsICcnKTtcbiAgICAgIGxldCBhc3NvY2lhdGVkUm91dGVycyA9IFtdO1xuICAgICAgY29uc3QgcGFnaW5nID0gdGhpcy5nZXRQYWdpbmdPYmplY3QocGFnZXNpemUpO1xuICAgICAgY29uc3QgZXJDaGFpbGRzID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIGVyQ2hhaWxkcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgZXJDaGFpbGRzLm5hbWU9ICdBc3NvY2lhdGVkIEVkZ2UgUm91dGVycyc7XG4gICAgICAgIGVyQ2hhaWxkcy50eXBlPSAnRWRnZSBSb3V0ZXJzJztcbiAgICAgIGNvbnN0IGFzc29jaWF0ZWRSb3V0ZXJzUHJvbWlzZSA9ICBhd2FpdCB6aXRpU2VydmljZS5nZXQodXJsLCBwYWdpbmcsIFtdKVxuICAgICAgICAgICAudGhlbiggKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgIHJlc3VsdC5kYXRhLmZvckVhY2goIChyZSkgPT4ge1xuICAgICAgICAgICAgICAgY29uc3QgdG1wID0gbmV3IEVSb3V0ZXIoKTtcbiAgICAgICAgICAgICAgICAgICB0bXAuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgICAgdG1wLm5hbWUgPSByZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgIHRtcC50eXBlID0gJ0VkZ2UgUm91dGVyJztcbiAgICAgICAgICAgICAgICAgICBlckNoYWlsZHMuY2hpbGRyZW4ucHVzaCh0bXApO1xuICAgICAgICAgICAgIH0gKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwb2xpY2llc191cmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShyYXdFcCwgJ3NlcnZpY2UtcG9saWNpZXMnKS5yZXBsYWNlKCcuLycsICcnKTtcbiAgICAgIGNvbnN0IHBvbGljaWVzX3BhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgIGNvbnN0IGZpcnN0UHJvbWlzZSA9ICBhd2FpdCB6aXRpU2VydmljZVxuICAgICAgICAgICAgICAuZ2V0KHBvbGljaWVzX3VybCwgcG9saWNpZXNfcGFnaW5nLCBbXSlcbiAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlkZW50aXR5U2VydmljZVBvbGljaWVzID0gcmVzdWx0LmRhdGE7XG4gICAgICAgICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICBpZGVudGl0eVNlcnZpY2VQb2xpY2llcy5mb3JFYWNoKCAoc3ApID0+IHtcbiAgICAgICAgICAgICBjb25zdCBub2RlQXJyYXkgPSAgdGhpcy5nZXRTZXJ2aWNlc0ZvckFTZXJ2aWNlUG9saWN5KHNwLCB6aXRpU2VydmljZSwgNTAwKTtcbiAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKG5vZGVBcnJheSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCAobm9kZUFycmF5KSA9PiB7XG4gICAgICAgICAgICAgbm9kZUFycmF5LmZvckVhY2goIChhck9iKSA9PiB7XG4gICAgICAgICAgICAgIGlmKGFyT2JbMF0gPT09ICdCaW5kJyApIHtcbiAgICAgICAgICAgICAgICAgYmluZFNlcnZpY2VzLmNoaWxkcmVuID0gdGhpcy5hcnJheU9iamVjdENvcHlSaWdodFRvTGVmdChiaW5kU2VydmljZXMuY2hpbGRyZW4sIGFyT2JbMV0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICBkaWFsU2VydmljZXMuY2hpbGRyZW4gPSB0aGlzLmFycmF5T2JqZWN0Q29weVJpZ2h0VG9MZWZ0KGRpYWxTZXJ2aWNlcy5jaGlsZHJlbiwgYXJPYlsxXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICB9ICk7XG4gICAgICAgIH0pO1xuXG4gICAgICBQcm9taXNlLmFsbCh3YWl0X3Byb21pc2VzKS50aGVuKCAoKSA9PiB7XG4gICAgICAgIGlmIChlckNoYWlsZHMuY2hpbGRyZW4ubGVuZ3RoID4wICkge1xuICAgICAgICAgICAgIGVyQ2hhaWxkcy5uYW1lID0gZXJDaGFpbGRzLm5hbWUrJygnK2VyQ2hhaWxkcy5jaGlsZHJlbi5sZW5ndGgrJyknO1xuICAgICAgICAgICAgIGlkZW50aXR5Tm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goZXJDaGFpbGRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZihiaW5kU2VydmljZXMuY2hpbGRyZW4ubGVuZ3RoPjApIHtcbiAgICAgICAgICAgICAgYmluZFNlcnZpY2VzLm5hbWUgPSAnQmluZC1TZXJ2aWNlcygnK2JpbmRTZXJ2aWNlcy5jaGlsZHJlbi5sZW5ndGgrJyknO1xuICAgICAgICAgICAgICBpZGVudGl0eU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKGJpbmRTZXJ2aWNlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoZGlhbFNlcnZpY2VzLmNoaWxkcmVuLmxlbmd0aD4wKSB7XG4gICAgICAgICAgICAgIGRpYWxTZXJ2aWNlcy5uYW1lID0gJ0RpYWwtU2VydmljZXMoJytkaWFsU2VydmljZXMuY2hpbGRyZW4ubGVuZ3RoKycpJztcbiAgICAgICAgICAgICAgaWRlbnRpdHlOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaChkaWFsU2VydmljZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoJ3RoaXMgaXMgYSBwcm9taXNlJyk7XG4gICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgIG5ldHdvcmtHcmFwaCA9IGQzLmhpZXJhcmNoeShuZXR3b3JrR3JhcGguZGF0YSwgZnVuY3Rpb24gKG5kKSB7XG4gICAgICAgICAgcmV0dXJuIG5kLmNoaWxkcmVuO1xuICAgICB9KTtcbiAgICAgICAgIHJldHVybiBbbmV0d29ya0dyYXBoLCB0aGlzLnVuaXFJZF07XG4gICAgfSAvLyBlbmQgb2YgZnVuY3Rpb25cblxuICAgIGNyZWF0ZUlkKCkge1xuICAgICAgICArK3RoaXMudW5pcUlkO1xuICAgICAgICByZXR1cm4gdGhpcy51bmlxSWQ7XG4gICAgfVxuXG4gICBjcmVhdGVTZXJ2aWNlTm9kZSggc3IpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZU9iID0gbmV3IFNlcnZpY2UoKTtcbiAgICAgICAgIHNlcnZpY2VPYi5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgIHNlcnZpY2VPYi51dWlkID0gc3IuaWQ7XG4gICAgICAgICBzZXJ2aWNlT2IubmFtZSA9IHNyLm5hbWU7XG4gICAgICAgICBzZXJ2aWNlT2IudHlwZSA9ICdTZXJ2aWNlJztcbiAgICAgICByZXR1cm4gc2VydmljZU9iO1xuICAgfVxuXG4gICBhcnJheU9iamVjdENvcHlSaWdodFRvTGVmdChsZWZ0QXJyLHJpZ2h0QXJyKSB7XG4gICAgIGNvbnN0IGxlZnRBcnJJZHMgPSBbXTtcbiAgICAgbGVmdEFyci5mb3JFYWNoKCAob2IpID0+IHtcbiAgICAgICBsZWZ0QXJySWRzLnB1c2gob2IuaWQpO1xuICAgICB9ICk7XG5cbiAgICAgcmlnaHRBcnIuZm9yRWFjaCggKG9iKSA9PiB7XG4gICAgICBpZiAoIWxlZnRBcnIuaW5jbHVkZXMob2IuaWQpKSB7XG4gICAgICAgICAgIGxlZnRBcnIucHVzaChvYik7XG4gICAgICB9XG4gICAgIH0gKTtcblxuICAgIHJldHVybiBsZWZ0QXJyO1xuICAgfVxuXG4gIGFkZEl0ZW1Ub0FycmF5KElkbmV0aXRpZXMsIG9iKSB7XG4gICAgaWYgKCBvYi5uYW1lICYmICFJZG5ldGl0aWVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0udXVpZCA9PT0gb2IuaWQpKSB7XG4gICAgICBJZG5ldGl0aWVzLnB1c2godGhpcy5jcmVhdGVJZGVudGl0eShvYikpO1xuICAgIH1cbiAgICByZXR1cm4gSWRuZXRpdGllcztcbiAgfVxuICBjcmVhdGVJZGVudGl0eShvYikge1xuICAgICAgY29uc3QgZW5kcG9pbnQgPSBuZXcgSWRlbnRpdHkoKTtcbiAgICAgICBlbmRwb2ludC5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICBlbmRwb2ludC51dWlkID0gb2IuaWQ7XG4gICAgICAgZW5kcG9pbnQubmFtZSA9IG9iLm5hbWU7XG4gICAgICAgZW5kcG9pbnQub25saW5lID0gb2IuaGFzQXBpU2Vzc2lvbiA9PT0gdHJ1ZSA/ICdZZXMnOiAnTm8nO1xuICAgICAgIGVuZHBvaW50LnR5cGUgPSAnSWRlbnRpdHknO1xuICAgICAgIGVuZHBvaW50LnN0YXR1cyA9IG9iLnNka0luZm8gIT09IG51bGwgPyAnUmVnaXN0ZXJlZCc6ICdOb3QgUmVnaXN0ZXJlZCc7XG4gICAgICAgaWYgKG9iLnNka0luZm8pIHtcbiAgICAgICAgICAgZW5kcG9pbnQub3MgPSBvYi5zZGtJbmZvLnR5cGU/IG9iLnNka0luZm8udHlwZTogb2Iuc2RrSW5mby5hcHBJZDtcbiAgICAgICAgICAgZW5kcG9pbnQub3NWZXJzaW9uID0gb2Iuc2RrSW5mby52ZXJzaW9uO1xuICAgICAgIH1cbiAgICAgICBpZiAob2IuYXV0aFBvbGljeSAmJiBvYi5hdXRoUG9saWN5Lm5hbWUuaW5jbHVkZXMoXCJCcm93WmVyXCIpKSB7XG4gICAgICAgICAgIGVuZHBvaW50LnR5cGUgPSAnQnJvd1plciBJZGVudGl0eSc7XG4gICAgICAgfVxuICAgICAgIGVuZHBvaW50LmNyZWF0ZWRBdCA9IG9iLmNyZWF0ZWRBdDtcbiAgICAgICBlbmRwb2ludC51cGRhdGVkQXQgPSBvYi51cGRhdGVkQXQ7XG5cbiAgICAgcmV0dXJuIGVuZHBvaW50O1xuICB9XG4gIGdldExpbmtGb3JSZXNvdXJjZShvYiwgcmVzb3VyY2UpIHtcbiAgICByZXR1cm4gb2JbJ19saW5rcyddW3Jlc291cmNlXVsnaHJlZiddO1xuICB9XG5cbiAgICBmaW5kU2VydmljZXNIb3N0ZWRPbkVuZHBvaW50KHJhd0VwLCBzZXJ2aWNlcywgc2VydmljZVBvbGljaWVzLCB6aXRpU2VydmljZSkge1xuICAgICAgIGNvbnN0IHNlcnZpY2VzQXJyID0gW107XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuTm9Hcm91cHMgPSBbXTtcbiAgICAgICAgY29uc3QgZW5kcG9pbnRBdHRyID0gcmF3RXAucm9sZUF0dHJpYnV0ZXM/IHJhd0VwLnJvbGVBdHRyaWJ1dGVzOiBbXTtcbiAgICAgICAgZW5kcG9pbnRBdHRyLnB1c2goJ0AnK3Jhd0VwLmlkKTtcblxuICAgICAgICBsZXQgZGlhbFNlcnZpY2VBdHRycyA9IFtdO1xuICAgICAgICBsZXQgYmluZFNlcnZpY2VBdHRycyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGJpbmRQb2xpY2llcyA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgICBiaW5kUG9saWNpZXMubmFtZSA9ICdCaW5kLVBvbGljaWVzJztcbiAgICAgICAgY29uc3QgZGlhbFBvbGljaWVzID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgICAgICBkaWFsUG9saWNpZXMubmFtZSA9ICdEaWFsLVBvbGljaWVzJztcblxuICAgICAgICBiaW5kUG9saWNpZXMuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgIGRpYWxQb2xpY2llcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcblxuICAgICAgICBzZXJ2aWNlUG9saWNpZXMuZmluZCggKHNwKSA9PiB7XG4gICAgICAgICAgc3AuaWRlbnRpdHlSb2xlcy5maW5kKCAoYXR0cikgPT4ge1xuICAgICAgICAgICAgICBpZiAoZW5kcG9pbnRBdHRyLmluY2x1ZGVzKGF0dHIpICkge1xuICAgICAgICAgICAgICAgaWYgKHNwLnR5cGUgPT09ICdCaW5kJykge1xuICAgICAgICAgICAgICAgICAgIGNvbnN0IHNQb2xpY3kgPSBuZXcgU2VydmljZVBvbGljeSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgIHNQb2xpY3kuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgc1BvbGljeS5uYW1lID0gc3AubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICBzUG9saWN5LnR5cGUgPSBzcC50eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgIHNQb2xpY3kuY2hpbGRyZW4gPSB0aGlzLmdldFNlcnZpY2VzRm9yUG9saWN5KHNlcnZpY2VzLCBzcCk7XG4gICAgICAgICAgICAgICAgICAgYmluZFBvbGljaWVzLmNoaWxkcmVuLnB1c2goc3ApO1xuICAgICAgICAgICAgICAgICAgIGJpbmRTZXJ2aWNlQXR0cnMgPSBmaWxsQXJyYXkoYmluZFNlcnZpY2VBdHRycywgc3Auc2VydmljZVJvbGVzKTtcbiAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgIGNvbnN0IHNQb2xpY3kgPSBuZXcgU2VydmljZVBvbGljeSgpO1xuICAgICAgICAgICAgICAgICAgICAgc1BvbGljeS5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICAgICAgIHNQb2xpY3kubmFtZSA9IHNwLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICBzUG9saWN5LnR5cGUgPSBzcC50eXBlO1xuICAgICAgICAgICAgICAgICAgICAgc1BvbGljeS5jaGlsZHJlbiA9IHRoaXMuZ2V0U2VydmljZXNGb3JQb2xpY3koc2VydmljZXMsIHNwKSA7XG4gICAgICAgICAgICAgICAgIGRpYWxQb2xpY2llcy5jaGlsZHJlbi5wdXNoKHNQb2xpY3kpO1xuICAgICAgICAgICAgICAgIGRpYWxTZXJ2aWNlQXR0cnMgPSBmaWxsQXJyYXkoZGlhbFNlcnZpY2VBdHRycywgc3Auc2VydmljZVJvbGVzKTtcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9ICk7XG5cbiAgICAgICAgZnVuY3Rpb24gZmlsbEFycmF5KGFycjEsIGFycjIpIHtcbiAgICAgICAgICBhcnIyLmZvckVhY2goIChpdGVtKSA9PiB7XG4gICAgICAgICAgIGFycjEucHVzaChpdGVtKTtcbiAgICAgICAgICB9ICk7XG4gICAgICAgICAgcmV0dXJuIGFycjE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiaW5kU2VydmljZXMgPSBbXTtcbiAgICAgICAgY29uc3QgZGlhbFNlcnZpY2VzID0gW107XG5cbiAgICAgICAgc2VydmljZXMgJiYgc2VydmljZXMuZm9yRWFjaCggKHNyKSA9PiB7XG4gICAgICAgICAgc3Iucm9sZUF0dHJpYnV0ZXMgJiYgc3Iucm9sZUF0dHJpYnV0ZXMuZm9yRWFjaCggKGF0dHIpID0+IHtcbiAgICAgICAgICAgICBpZiAoZGlhbFNlcnZpY2VBdHRycy5pbmNsdWRlcyhhdHRyKSApIHtcbiAgICAgICAgICAgICAgIGRpYWxTZXJ2aWNlcy5wdXNoKHRoaXMuY3JlYXRlU2VydmljZU5vZGUoc3IpICk7XG4gICAgICAgICAgICAgfVxuICAgICAgICAgICAgIGlmIChiaW5kU2VydmljZUF0dHJzLmluY2x1ZGVzKGF0dHIpICkge1xuICAgICAgICAgICAgICAgIGJpbmRTZXJ2aWNlcy5wdXNoKCB0aGlzLmNyZWF0ZVNlcnZpY2VOb2RlKHNyKSApO1xuICAgICAgICAgICAgIH1cbiAgICAgICAgICB9ICk7XG4gICAgICAgIH0pO1xuICAgICAgIGlmIChkaWFsU2VydmljZXMubGVuZ3RoID4wICkge1xuICAgICAgICAgIGNvbnN0IGRpYWxHcm91cCA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgIGRpYWxHcm91cC5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICBkaWFsR3JvdXAubmFtZSA9ICdTZXJ2aWNlcy1EaWFsJztcbiAgICAgICAgICBkaWFsR3JvdXAuY2hpbGRyZW4gPSBkaWFsU2VydmljZXM7XG4gICAgICAgICAgc2VydmljZXNBcnIucHVzaChkaWFsR3JvdXApO1xuICAgICAgIH1cbiAgICAgICBpZiAoYmluZFNlcnZpY2VzLmxlbmd0aCA+MCApIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRHcm91cCA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgICAgYmluZEdyb3VwLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgYmluZEdyb3VwLm5hbWUgPSAnU2VydmljZXMtQmluZCc7XG4gICAgICAgICAgICBiaW5kR3JvdXAuY2hpbGRyZW4gPSBiaW5kU2VydmljZXM7XG4gICAgICAgICAgICBzZXJ2aWNlc0Fyci5wdXNoKGJpbmRHcm91cCk7XG4gICAgICAgfVxuICAgICByZXR1cm4gc2VydmljZXNBcnI7XG5cblxuICAgIH0gLy8gZW5kIG9mIGZpbmQgc2VydmljZXNIb3N0ZWRPbkVuZHBvaW50XG5cbiAgIGdldFNlcnZpY2VzRm9yUG9saWN5KHNlcnZpY2VzLCBzcE9iKSB7XG4gICAgIGNvbnN0IHNlcnZpY2VzRm90UG9saWN5ID0gW107XG4gICAgIHNlcnZpY2VzICYmIHNlcnZpY2VzLmZvckVhY2goIChzcikgPT4ge1xuICAgICAgICAgY29uc3QgYXR0cnMgPSBzci5yb2xlQXR0cmlidXRlcyA/IHNyLnJvbGVBdHRyaWJ1dGVzOiBbXTtcbiAgICAgICAgIGF0dHJzLnB1c2goJ0AnK3NwT2IuaWQpO1xuICAgICAgICAgYXR0cnMuZmluZCggKGF0cikgPT4ge1xuICAgICAgICAgICAgaWYoc3BPYi5zZXJ2aWNlUm9sZXMuaW5jbHVkZXMoYXRyKSApe1xuICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZU5vZGUgPSBuZXcgU2VydmljZSgpO1xuICAgICAgICAgICAgICAgc2VydmljZU5vZGUuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICBzZXJ2aWNlTm9kZS5uYW1lID0gc3IubmFtZTtcbiAgICAgICAgICAgICAgIHNlcnZpY2VOb2RlLnR5cGUgPSAnU2VydmljZSc7XG4gICAgICAgICAgICAgc2VydmljZXNGb3RQb2xpY3kucHVzaChzZXJ2aWNlTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICB9KTtcbiAgICAgfSk7XG4gICAgcmV0dXJuIHNlcnZpY2VzRm90UG9saWN5O1xuICAgfVxuXG4gICAgZmluZFJhd0VuZHBvaW50KGVwTmFtZSwgZW5kcG9pbnRzKSB7XG4gICAgICAgcmV0dXJuIGVuZHBvaW50cy5maW5kKChlcCkgPT4gZXAubmFtZSA9PT0gZXBOYW1lKTtcbiAgICB9XG5cbiAgc2VydmljZUNvbmZpZ0FsaWFzKGNvbmZpZ3MpIHtcbiAgICAgbGV0IGludGVyY2VwdCA9IFtdO1xuICAgICBfLmlzQXJyYXkoY29uZmlncykgJiYgY29uZmlncy5mb3JFYWNoKCAoY29uZikgPT4ge1xuICAgICAgICAgICBsZXQgYWRkcmVzc2VzID0gJyc7XG4gICAgICAgICAgIGxldCBwb3J0cyA9ICcnO1xuICAgICAgICAgIGlmIChjb25mLmRhdGEuYWRkcmVzc2VzKSB7XG4gICAgICAgICAgICAgYWRkcmVzc2VzID0gY29uZi5kYXRhLmFkZHJlc3Nlcy50b1N0cmluZygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgYWRkcmVzc2VzID0gY29uZi5kYXRhLmFkZHJlc3M7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF8uaXNBcnJheShjb25mLmRhdGEucG9ydFJhbmdlcykgKSB7XG4gICAgICAgICAgICAgIGNvbmYuZGF0YS5wb3J0UmFuZ2VzLmZvckVhY2goIChwb3J0c0pzb24pID0+IHtcbiAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHBvcnRzSnNvbikge1xuICAgICAgICAgICAgICAgICAgcG9ydHMgPSBwb3J0cyArIGtleSArJzonK3BvcnRzSnNvbltrZXldICsnICcgO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICBwb3J0cyA9IHBvcnRzICsgJzsnO1xuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBvcnRzID0gIGNvbmYuZGF0YS5wb3J0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnRlcmNlcHQucHVzaChhZGRyZXNzZXMpO1xuICAgICAgICAgIGludGVyY2VwdC5wdXNoKHBvcnRzKTtcbiAgICAgfSk7XG4gICAgIHJldHVybiBpbnRlcmNlcHQ7XG4gIH1cblxuICBhc3luYyBwcm9jZXNzU2VydmljZXNGb3JOb2RlQ2xpY2soc2VydmljZU5vZGUsIG5ldHdvcmtHcmFwaCwgc2VydmljZXMsIHVuaXFJZCwgeml0aVNlcnZpY2UpIHtcbiAgICAgY29uc3QgbXlQcm9taXNlID0gYXdhaXQgbmV3IFByb21pc2UoIGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qgd2FpdF9wcm9taXNlcyA9IFtdO1xuICAgICAgICB0aGlzLnVuaXFJZCA9IHVuaXFJZDtcbiAgICAgICAgY29uc3QgcmF3U2VydmljZU9iaiA9IHNlcnZpY2VzLmZpbmQoKHMpID0+IHMubmFtZSA9PT0gc2VydmljZU5vZGUuZGF0YS5uYW1lKTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlc3dpdGhOYW1lID0gW107XG5cbiAgICAgICAgcmF3U2VydmljZU9iai5yb2xlQXR0cmlidXRlcyAmJiByYXdTZXJ2aWNlT2JqLnJvbGVBdHRyaWJ1dGVzLmZpbmQoKHNyYXR0cikgPT4ge1xuICAgICAgICAgICAgYXR0cmlidXRlc3dpdGhOYW1lLnB1c2goc3JhdHRyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VBdHRyaWJ1dGVzID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIHNlcnZpY2VBdHRyaWJ1dGVzLm5hbWUgPSAnQXR0cmlidXRlcyc7XG4gICAgICAgIHNlcnZpY2VBdHRyaWJ1dGVzLnR5cGUgPSAnQXR0cmlidXRlcyc7XG4gICAgICAgIHNlcnZpY2VBdHRyaWJ1dGVzLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGF0dHJpYnV0ZXN3aXRoTmFtZS5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgY29uc3QgYXR0ck9iID0gbmV3IEF0dHJpYnV0ZSgpO1xuICAgICAgICAgICAgYXR0ck9iLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgYXR0ck9iLm5hbWUgPSBhdHRyaWJ1dGVzd2l0aE5hbWVba107XG4gICAgICAgICAgICBhdHRyT2IudHlwZSA9ICdBdHRyaWJ1dGUnO1xuXG4gICAgICAgICAgICBzZXJ2aWNlQXR0cmlidXRlcy5jaGlsZHJlbi5wdXNoKGF0dHJPYik7XG4gICAgICAgIH0gLy8gZW5kIGlubmVyIGZvciBsb29wXG4gICAgICAgIGlmIChzZXJ2aWNlQXR0cmlidXRlcy5jaGlsZHJlbi5sZW5ndGggPjAgKSB7XG4gICAgICAgICAgIHNlcnZpY2VBdHRyaWJ1dGVzLm5hbWUgPSBzZXJ2aWNlQXR0cmlidXRlcy5uYW1lKycoJysgc2VydmljZUF0dHJpYnV0ZXMuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICBzZXJ2aWNlTm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goc2VydmljZUF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlcnZpY2VfY29uZmlncyA9IFtdO1xuICAgICAgICBjb25zdCBjb25maWdzX3VybCA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKHJhd1NlcnZpY2VPYmosICdjb25maWdzJyk7XG4gICAgICAgIGNvbnN0IHBhZ2VzaXplID0gNTAwO1xuICAgICAgICBjb25zdCBwYWdpbmdPYiA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgICAgY29uc3QgY29uZmlnUHJvbWlzZSA9IGF3YWl0IHppdGlTZXJ2aWNlXG4gICAgICAgICAuZ2V0KGNvbmZpZ3NfdXJsLCBwYWdpbmdPYiwgW10pXG4gICAgICAgICAudGhlbigoY29uZmlncykgPT4ge1xuICAgICAgICAgICBzZXJ2aWNlX2NvbmZpZ3MgPSBjb25maWdzICYmIGNvbmZpZ3MuZGF0YSA/IGNvbmZpZ3MuZGF0YSA6IFtdO1xuICAgICAgICAgICBjb25zdCBjaGlsZHMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgICAgY2hpbGRzLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICBjaGlsZHMubmFtZSA9ICdTZXJ2aWNlIENvbmZpZ3MnO1xuICAgICAgICAgICBjaGlsZHMudHlwZSA9ICdTZXJ2aWNlIENvbmZpZ3MnO1xuICAgICAgICAgICBjb25zdCBzZXJ2aWNlX2NvbmZpZ3NfQXJyID0gW107XG4gICAgICAgICAgIHNlcnZpY2VfY29uZmlncy5mb3JFYWNoKCAoY2ZnKSA9PiB7XG4gICAgICAgICAgICAgY29uc3Qgb2JqID0gbmV3IENvbmZpZygpO1xuICAgICAgICAgICAgIG9iai5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICBvYmoubmFtZSA9IGNmZy5uYW1lO1xuICAgICAgICAgICAgIG9iai51dWlkID0gY2ZnLnV1aWQ7XG4gICAgICAgICAgICAgb2JqLmRhdGEgPSBKU09OLnN0cmluZ2lmeShjZmcuZGF0YSk7XG4gICAgICAgICAgICAgc2VydmljZV9jb25maWdzX0Fyci5wdXNoKG9iaik7XG4gICAgICAgICAgIH0gKTtcblxuICAgICAgICAgICBpZiAoc2VydmljZV9jb25maWdzX0Fyci5sZW5ndGggPjAgKSB7XG4gICAgICAgICAgICAgIGNoaWxkcy5jaGlsZHJlbiA9IHNlcnZpY2VfY29uZmlnc19BcnI7XG4gICAgICAgICAgICAgIGNoaWxkcy5uYW1lID0gY2hpbGRzLm5hbWUgKycoJytjaGlsZHMuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICBzZXJ2aWNlTm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goY2hpbGRzKTtcbiAgICAgICAgICAgICAgc2VydmljZU5vZGUuZGF0YS5pbnRlcmNlcHQgPSB0aGlzLnNlcnZpY2VDb25maWdBbGlhcyhzZXJ2aWNlX2NvbmZpZ3MpO1xuICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKGNvbmZpZ1Byb21pc2UpO1xuICAgICAgIGNvbnN0IHNlcnZpY2VfZWRnZV9yb3V0ZXJfcG9saWNpZXNfdXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2UoXG4gICAgICAgICByYXdTZXJ2aWNlT2JqLFxuICAgICAgICAnc2VydmljZS1lZGdlLXJvdXRlci1wb2xpY2llcydcbiAgICAgICApO1xuICAgICAgIGxldCBzZXJ2aWNlX3JvdXRlcnNfdXJscyA9IFtdO1xuICAgICAgIGNvbnN0IHNlcl9wcm9tc2UgPSAgYXdhaXQgeml0aVNlcnZpY2VcbiAgICAgICAgICAgICAuZ2V0KHNlcnZpY2VfZWRnZV9yb3V0ZXJfcG9saWNpZXNfdXJsLnJlcGxhY2UoJy4vJywgJycpLCBwYWdpbmdPYiwgW10pXG4gICAgICAgICAgICAgLnRoZW4oIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdC5kYXRhLmZvckVhY2goIChzZXJwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2Vfcm91dGVyc191cmxzLnB1c2goIHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKHNlcnAsJ2VkZ2Utcm91dGVycycpICk7XG4gICAgICAgICAgICAgICAgICB9ICk7O1xuICAgICAgICAgICAgIH0pO1xuICAgICAgIHdhaXRfcHJvbWlzZXMucHVzaChzZXJfcHJvbXNlKTtcbiAgICAgICBsZXQgc2VycF9wYWdlX1Byb21pc2VzID0gW107XG4gICAgICAgc2VydmljZV9yb3V0ZXJzX3VybHMuZm9yRWFjaCgoZXJfdXJsKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJvbXNlID0gIHppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldChlcl91cmwucmVwbGFjZSgnLi8nLCAnJyksIHBhZ2luZ09iLCBbXSk7XG4gICAgICAgICAgICAgICAgLy8gLnRoZW4ocmVzdWx0ID0+IFtwb2xpY3kudHlwZSwgcmVzdWx0XSk7XG4gICAgICAgICAgc2VycF9wYWdlX1Byb21pc2VzLnB1c2gocHJvbXNlKTtcbiAgICAgICB9KTtcbiAgICAgICBsZXQgYXNzb2NpYXRlZFJvdXRlcnMgPSBbXTtcbiAgICAgICBhd2FpdCBQcm9taXNlLmFsbChzZXJwX3BhZ2VfUHJvbWlzZXMpLnRoZW4oICh2YWx1ZXM6YW55KSA9PiB7XG4gICAgICAgICB2YWx1ZXMgJiYgdmFsdWVzLmZvckVhY2goKHJlczphbnkpID0+IHtcbiAgICAgICAgICAgICBpZiAocmVzICYmIHJlcy5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXMuZGF0YS5mb3JFYWNoKCAoZXIpPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZXJPYiA9IG5ldyBFUm91dGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlck9iLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJPYi5uYW1lID0gICBlci5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXIudHlwZSA9ICdFZGdlIFJvdXRlcic7XG4gICAgICAgICAgICAgICAgICBhc3NvY2lhdGVkUm91dGVycy5wdXNoKGVyT2IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgIH1cbiAgICAgICAgIH0pXG4gICAgICAgICBjb25zdCB0bXAgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgICAgICB0bXAubmFtZSA9IFwiQXNzb2NpYXRlZCBFZGdlIFJvdXRlcnMoXCIgKyBhc3NvY2lhdGVkUm91dGVycy5sZW5ndGggKycpJztcbiAgICAgICAgICAgICB0bXAudHlwZSA9IFwiRWRnZSBSb3V0ZXJzXCI7XG4gICAgICAgICAgICAgdG1wLmNoaWxkcmVuID0gYXNzb2NpYXRlZFJvdXRlcnM7XG4gICAgICAgICAgICAgdG1wLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgIHNlcnZpY2VOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaCh0bXApO1xuICAgICAgIH0pO1xuXG4gICAgICAgY29uc3Qgc2VydmljZV9wb2xpY2llc191cmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShcbiAgICAgICAgcmF3U2VydmljZU9iaixcbiAgICAgICAgJ3NlcnZpY2UtcG9saWNpZXMnXG4gICAgICAgKS5yZXBsYWNlKCcuLycsICcnKTsgLy8gZGlhbCwgQmluZCBpbmZvXG5cbiAgICAgICBsZXQgYmluZFBvbGljaWVzID0gW107XG4gICAgICAgbGV0IGJpbmRJZG5ldGl0aWVzID0gW107XG4gICAgICAgbGV0IGRpYWxJZG5ldGl0aWVzID0gW107XG5cbiAgICAgICBjb25zdCBwcm9taXNlMiA9IGF3YWl0IHppdGlTZXJ2aWNlXG4gICAgICAgLmdldChzZXJ2aWNlX3BvbGljaWVzX3VybCwgcGFnaW5nT2IsIFtdKVxuICAgICAgIC50aGVuKChwb2xpY2llcykgPT4ge1xuICAgICAgICAgYmluZFBvbGljaWVzID0gcG9saWNpZXMuZGF0YTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwYWdlUHJvbWlzZXMgPSBbXTtcbiAgICAgIGJpbmRQb2xpY2llcy5mb3JFYWNoKCAgKHBvbGljeSkgPT4ge1xuICAgICAgICAgY29uc3QgYmluZElkZW50aXRpZXNVcmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShcbiAgICAgICAgICAgIHBvbGljeSxcbiAgICAgICAgICAgICdpZGVudGl0aWVzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgcHJvbXNlID0gIHppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldChiaW5kSWRlbnRpdGllc1VybC5yZXBsYWNlKCcuLycsICcnKSwgcGFnaW5nT2IsIFtdKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiBbcG9saWN5LnR5cGUsIHJlc3VsdF0pO1xuICAgICAgICAgIHBhZ2VQcm9taXNlcy5wdXNoKHByb21zZSk7XG4gICAgICB9KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHBhZ2VQcm9taXNlcykudGhlbiggKHZhbHVlczphbnkpID0+IHtcbiAgICAgICAgICB2YWx1ZXMgJiYgdmFsdWVzLmZvckVhY2goKHJlczphbnkpID0+IHtcbiAgICAgICAgICAgaWYgKHJlcyAmJiByZXNbMV0uZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJlc1sxXS5kYXRhLmZvckVhY2goKHJzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYocmVzWzBdID09PSAnQmluZCcpIHtcbiAgICAgICAgICAgICAgICAgYmluZElkbmV0aXRpZXMgPSB0aGlzLmFkZEl0ZW1Ub0FycmF5KGJpbmRJZG5ldGl0aWVzLCBycyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKHJlc1swXSA9PT0gJ0RpYWwnKXtcbiAgICAgICAgICAgICAgICAgZGlhbElkbmV0aXRpZXMgPSB0aGlzLmFkZEl0ZW1Ub0FycmF5KGRpYWxJZG5ldGl0aWVzLCBycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgIGlmKHJlc1swXSA9PT0gJ0JpbmQnKSB7XG4gICAgICAgICAgICAgICAgIGJpbmRJZG5ldGl0aWVzID0gdGhpcy5hZGRJdGVtVG9BcnJheShiaW5kSWRuZXRpdGllcywgcmVzWzFdLmRhdGEpO1xuICAgICAgICAgICAgICAgfSBlbHNlIGlmKHJlc1swXSA9PT0gJ0RpYWwnKXtcbiAgICAgICAgICAgICAgICAgZGlhbElkbmV0aXRpZXMgPSB0aGlzLmFkZEl0ZW1Ub0FycmF5KGRpYWxJZG5ldGl0aWVzLCByZXNbMV0uZGF0YSk7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgIH1cblxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgIGNvbnN0IHRtcCA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgICAgIHRtcC5uYW1lID0gXCJCaW5kIElkZW50aXRpZXMoXCIgKyBiaW5kSWRuZXRpdGllcy5sZW5ndGggKycpJztcbiAgICAgICAgICAgICB0bXAudHlwZSA9IFwiSWRlbnRpdGllc1wiO1xuICAgICAgICAgICAgIHRtcC5jaGlsZHJlbiA9IGJpbmRJZG5ldGl0aWVzO1xuICAgICAgICAgICAgIHRtcC5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICBzZXJ2aWNlTm9kZS5kYXRhLmNoaWxkcmVuLnB1c2godG1wKTtcbiAgICAgICAgICAgY29uc3QgdG1wRGlhbCA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgICAgIHRtcERpYWwubmFtZSA9IFwiRGlhbCBJZGVudGl0aWVzKFwiICsgZGlhbElkbmV0aXRpZXMubGVuZ3RoICsnKSc7XG4gICAgICAgICAgICAgdG1wRGlhbC50eXBlID0gXCJJZGVudGl0aWVzXCI7XG4gICAgICAgICAgICAgdG1wRGlhbC5jaGlsZHJlbiA9IGRpYWxJZG5ldGl0aWVzO1xuICAgICAgICAgICAgIHRtcERpYWwuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgc2VydmljZU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKHRtcERpYWwpO1xuICAgICAgICAgcmVzb2x2ZSgndGhpcyBpcyBhIHByb21pc2UnKTtcbiAgICAgIH0pO1xuICAgICAgIFByb21pc2UuYWxsKHdhaXRfcHJvbWlzZXMpLnRoZW4oICgpID0+IHsgfSk7XG4gICAgfSk7IC8vIGVuZCBvZiBteXByb21pc2VcblxuICAgICBuZXR3b3JrR3JhcGggPSBkMy5oaWVyYXJjaHkobmV0d29ya0dyYXBoLmRhdGEsIGZ1bmN0aW9uIChuZCkge1xuICAgICAgICByZXR1cm4gbmQuY2hpbGRyZW47XG4gICAgIH0pO1xuICAgICAgcmV0dXJuIFtuZXR3b3JrR3JhcGgsIHRoaXMudW5pcUlkXTtcbiAgfSAvLyBlbmQgb2YgcHJvY2Vzc1NlcnZpY2VzRm9yTm9kZUNsaWNrXG5cblxuICBhc3luYyBwcm9jZXNzU2VydmljZVBvbGljaWVzRm9yTm9kZUNsaWNrKHBvbGljeU5vZGUsIG5ldHdvcmtHcmFwaCwgIHNlcnZpY2VQb2xpY2llcywgdW5pcUlkLCB6aXRpU2VydmljZSkge1xuICAgICBjb25zdCBteVByb21pc2UgPSBhd2FpdCBuZXcgUHJvbWlzZSggYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB3YWl0X3Byb21pc2VzID0gW107XG4gICAgICAgIHRoaXMudW5pcUlkID0gdW5pcUlkO1xuICAgICAgICBjb25zdCByYXdTUG9saWN5ID0gc2VydmljZVBvbGljaWVzLmZpbmQoKHMpID0+IHMubmFtZSA9PT0gcG9saWN5Tm9kZS5kYXRhLm5hbWUpO1xuICAgICAgICBjb25zdCBjaGlsZHMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgIGNoaWxkcy5uYW1lID0gXCJBdHRyaWJ1dGVzXCI7XG4gICAgICAgICBjaGlsZHMuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG5cbiAgICAgICAgcmF3U1BvbGljeS5zZXJ2aWNlUm9sZXMgJiYgcmF3U1BvbGljeS5zZXJ2aWNlUm9sZXMuZm9yRWFjaCggKG9iKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXR0ciA9IG5ldyBBdHRyaWJ1dGUoKTtcbiAgICAgICAgICAgIGF0dHIubmFtZSA9IG9iO1xuICAgICAgICAgICAgYXR0ci5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgIGF0dHIudHlwZSA9IFwiU2VydmljZSBBdHRyaWJ1dGVcIjtcbiAgICAgICAgICBjaGlsZHMuY2hpbGRyZW4ucHVzaChhdHRyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJhd1NQb2xpY3kuaWRlbnRpdHlSb2xlcyAmJiByYXdTUG9saWN5LmlkZW50aXR5Um9sZXMuZm9yRWFjaCggKG9iKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXR0ciA9IG5ldyBBdHRyaWJ1dGUoKTtcbiAgICAgICAgICAgYXR0ci5uYW1lID0gb2I7XG4gICAgICAgICAgIGF0dHIuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgIGF0dHIudHlwZSA9IFwiSWRlbnRpdHkgQXR0cmlidXRlXCI7XG4gICAgICAgICAgY2hpbGRzLmNoaWxkcmVuLnB1c2goYXR0cik7XG4gICAgICAgIH0pO1xuICAgICAgICBjaGlsZHMubmFtZSA9IGNoaWxkcy5uYW1lICsgJygnKyBjaGlsZHMuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgcG9saWN5Tm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goY2hpbGRzKTtcblxuICAgICAgICBjb25zdCBwYWdlc2l6ZSA9IDUwMDtcbiAgICAgICAgY29uc3QgaWRlbnRpdGllc19wYWdpbmcgPSB0aGlzLmdldFBhZ2luZ09iamVjdChwYWdlc2l6ZSk7XG4gICAgICAgIGNvbnN0IGJpbmRJZGVudGl0aWVzVXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2UoIHJhd1NQb2xpY3ksICdpZGVudGl0aWVzJyApO1xuICAgICAgICAvLyB0aGlzLmxvZ2dlci5pbmZvKCdiaW5kSWRlbnRpdGllc1VybCcsYmluZElkZW50aXRpZXNVcmwpO1xuICAgICAgICBjb25zdCBzcF9wcm9taXNlID0gYXdhaXQgeml0aVNlcnZpY2UuZ2V0KGJpbmRJZGVudGl0aWVzVXJsLCBpZGVudGl0aWVzX3BhZ2luZywgW10pXG4gICAgICAgLnRoZW4oKGlkcykgPT4ge1xuICAgICAgICAgY29uc3QgY2hpbGRzID1uZXcgQ2hpbGRyZW4oKVxuICAgICAgICAgY2hpbGRzLm5hbWUgPSByYXdTUG9saWN5LnR5cGUrICctSWRlbnRpdGllcyc7XG4gICAgICAgICBjaGlsZHMuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICBpZHMuZGF0YS5mb3JFYWNoKCAoaWRPYikgPT4ge1xuICAgICAgICAgICBjaGlsZHMuY2hpbGRyZW4ucHVzaCh0aGlzLmNyZWF0ZUlkZW50aXR5KGlkT2IpICk7XG4gICAgICAgICB9KTtcbiAgICAgICAgIGNoaWxkcy5uYW1lID0gY2hpbGRzLm5hbWUgKyAnKCcgKyBjaGlsZHMuY2hpbGRyZW4ubGVuZ3RoKycpJztcbiAgICAgICAgIHBvbGljeU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKGNoaWxkcyk7XG4gICAgICAgfSk7XG4gICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKHNwX3Byb21pc2UpO1xuXG4gICAgICAgY29uc3Qgc2VydmljZXNfcGFnaW5nID0gdGhpcy5nZXRQYWdpbmdPYmplY3QocGFnZXNpemUpO1xuICAgICAgIGNvbnN0IGJpbmRTZXJ2aWNlc1VybCA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKCByYXdTUG9saWN5LCAnc2VydmljZXMnICk7ICAvLyBwdWxsIHNlcnZpY2VzXG4gICAgICAgY29uc3QgX3Byb21pc2UgPSBhd2FpdCB6aXRpU2VydmljZS5nZXQoYmluZFNlcnZpY2VzVXJsLCBzZXJ2aWNlc19wYWdpbmcsIFtdKVxuICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgIGNvbnN0IGNoaWxkcyA9bmV3IENoaWxkcmVuKClcbiAgICAgICAgIGNoaWxkcy5uYW1lID0gcmF3U1BvbGljeS50eXBlKyAnLVNlcnZpY2VzJztcbiAgICAgICAgIGNoaWxkcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgIHJlc3VsdC5kYXRhLmZvckVhY2goIChpZE9iKSA9PiB7XG4gICAgICAgICAgIGNvbnN0IHNwID0gbmV3IFNlcnZpY2UoKTtcbiAgICAgICAgICAgIHNwLmlkID0gaWRPYi5pZDtcbiAgICAgICAgICAgIHNwLm5hbWUgPSBpZE9iLm5hbWU7XG4gICAgICAgICAgICBzcC50eXBlID0gJ1NlcnZpY2UnO1xuICAgICAgICAgICAgY2hpbGRzLmNoaWxkcmVuLnB1c2goc3ApO1xuICAgICAgICAgfSk7XG4gICAgICAgICBjaGlsZHMubmFtZSA9IGNoaWxkcy5uYW1lICsgJygnICsgY2hpbGRzLmNoaWxkcmVuLmxlbmd0aCsnKSc7XG4gICAgICAgICBwb2xpY3lOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaChjaGlsZHMpO1xuICAgICAgIH0pO1xuXG4gICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKF9wcm9taXNlKTtcblxuICAgICAgICBQcm9taXNlLmFsbCh3YWl0X3Byb21pc2VzKS50aGVuKCAoKSA9PiB7XG4gICAgICAgICAgIHJlc29sdmUoJ3Jlc29sdmUuJyk7XG4gICAgICAgIH0pO1xuXG4gICAgIH0pOyAvLyBlbmQgbXlwcm9taXNlXG4gICAgICAgIG5ldHdvcmtHcmFwaCA9IGQzLmhpZXJhcmNoeShuZXR3b3JrR3JhcGguZGF0YSwgZnVuY3Rpb24gKG5kKSB7XG4gICAgICAgICAgICByZXR1cm4gbmQuY2hpbGRyZW47XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gW25ldHdvcmtHcmFwaCwgdGhpcy51bmlxSWRdO1xuICAgIH1cblxuICAgYXN5bmMgZ2V0U2VydmljZXNGb3JBU2VydmljZVBvbGljeShwb2xpY3lPYmplY3QsIHppdGlTZXJ2aWNlLCBwYWdlc2l6ZT01MDApIHtcbiAgICAgICBjb25zdCBjaGlsZHMgPSBbXTtcbiAgICAgICBjb25zdCBzZXJ2aWNlc19wYWdpbmcgPSB0aGlzLmdldFBhZ2luZ09iamVjdChwYWdlc2l6ZSk7XG4gICAgICAgY29uc3QgYmluZFNlcnZpY2VzVXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2UoIHBvbGljeU9iamVjdCwgJ3NlcnZpY2VzJyApO1xuICAgICAgIGNvbnN0IF9wcm9taXNlID0gYXdhaXQgeml0aVNlcnZpY2UuZ2V0KGJpbmRTZXJ2aWNlc1VybCwgc2VydmljZXNfcGFnaW5nLCBbXSlcbiAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICByZXN1bHQuZGF0YS5mb3JFYWNoKCAoaWRPYikgPT4ge1xuICAgICAgICAgICBjb25zdCBzcCA9IG5ldyBTZXJ2aWNlKCk7XG4gICAgICAgICAgICBzcC5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgIHNwLnV1aWQgPSBpZE9iLmlkO1xuICAgICAgICAgICAgc3AubmFtZSA9IGlkT2IubmFtZTtcbiAgICAgICAgICAgIHNwLnR5cGUgPSAnU2VydmljZSc7XG4gICAgICAgICAgICBjaGlsZHMucHVzaChzcCk7XG4gICAgICAgICB9KTtcbiAgICAgICB9KTtcbiAgICAgICByZXR1cm4gW3BvbGljeU9iamVjdC50eXBlLCBjaGlsZHNdO1xuICAgfVxuXG4gICBhc3luYyBwcm9jZXNzRWRnZXJvdXRlcnNGb3JOb2RlQ2xpY2soXG4gICAgICAgIGVkZ2Vyb3V0ZXJOb2RlLFxuICAgICAgICBuZXR3b3JrR3JhcGgsXG4gICAgICAgIGVkZ2Vyb3V0ZXJzLFxuICAgICAgICB1bmlxSWQsXG4gICAgICAgIHppdGlTZXJ2aWNlXG4gICAgKVxuICAgIHtcbiAgICAgY29uc3QgbWFpblByb21pc2UgPSBhd2FpdCBuZXcgUHJvbWlzZSggYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB3YWl0X3Byb21pc2VzID0gW107XG4gICAgICAgIHRoaXMudW5pcUlkID0gdW5pcUlkO1xuICAgICAgICBjb25zdCBlciA9IGVkZ2Vyb3V0ZXJzLmZpbmQoKHMpID0+IHMubmFtZSA9PT0gZWRnZXJvdXRlck5vZGUuZGF0YS5uYW1lKTtcbiAgICAgICAgY29uc3QgZXJBdHRyaWJ1dGVzID0gZXIucm9sZUF0dHJpYnV0ZXM/IGVyLnJvbGVBdHRyaWJ1dGVzOiBbXTtcblxuICAgICAgICAgZXJBdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGF0dCA9IG5ldyBBdHRyaWJ1dGUoKTtcbiAgICAgICAgICAgIGF0dC5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgIGF0dC5uYW1lID0gYXR0cjtcbiAgICAgICAgICAgIGF0dC50eXBlID0gJ0VkZ2UgUm91dGVyIEF0dHJpYnV0ZSc7XG4gICAgICAgICAgICBlZGdlcm91dGVyTm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goYXR0KTtcbiAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHBhZ2VzaXplID0gNTAwO1xuICAgICAgICAgIGNvbnN0IHNlcnZpY2VzX3BhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgICBjb25zdCBlcnBvbGljaWVzVXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2UoZXIsICdlZGdlLXJvdXRlci1wb2xpY2llcycpO1xuICAgICAgIGxldCBlcnBvbGljaWVzRm9yRVIgPSBbXTtcbiAgICAgICBjb25zdCBlcnBvbGljaWVzcHJvbWlzZSA9IGF3YWl0IHppdGlTZXJ2aWNlLmdldChlcnBvbGljaWVzVXJsLCBzZXJ2aWNlc19wYWdpbmcsIFtdKVxuICAgICAgIC50aGVuKCBhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgZXJwb2xpY2llc0ZvckVSID0gcmVzdWx0LmRhdGE7XG4gICAgICAgICAgY29uc3QgcGFnZXMgPSBNYXRoLmNlaWwocmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IC8gcGFnZXNpemUpO1xuICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgICAgIGZvciAobGV0IHBhZ2UgPSAyOyBwYWdlIDw9IHBhZ2VzOyBwYWdlKyspIHtcbiAgICAgICAgICAgICAgc2VydmljZXNfcGFnaW5nLnBhZ2UgPSBwYWdlO1xuICAgICAgICAgICAgICBjb25zdCB0bXBfcHJvbWlzZSA9IGF3YWl0IHppdGlTZXJ2aWNlLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnBvbGljaWVzVXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzX3BhZ2luZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICAgICkgLnRoZW4oKHBhZ2VSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgIHBhZ2VSZXN1bHQuZGF0YS5mb3JFYWNoKChzZXJ2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycG9saWNpZXNGb3JFUi5wdXNoKHNlcnYpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHByb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICAgICB3YWl0X3Byb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICB9IC8vIGVuZCBmb3IgbG9vcFxuICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgY29uc3QgZXJwb2xDaGlsZHMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgICAgICBlcnBvbENoaWxkcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICBlcnBvbGljaWVzRm9yRVIuZm9yRWFjaCggKHBvbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvbGljeSA9IG5ldyBFUlBvbGljeSgpO1xuICAgICAgICAgICAgICAgIHBvbGljeS5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBwb2xpY3kudXVpZCA9IHBvbC5pZDtcbiAgICAgICAgICAgICAgICBwb2xpY3kubmFtZSA9IHBvbC5uYW1lO1xuICAgICAgICAgICAgICAgIHBvbGljeS50eXBlID0gJ0VkZ2UgUm91dGVyIFBvbGljeSc7XG4gICAgICAgICAgICAgICAgcG9saWN5LmlzU3lzdGVtID0gcG9sLmlzU3lzdGVtO1xuICAgICAgICAgICAgICAgIHBvbGljeS5zZW1hbnRpYyA9IHBvbC5zZW1hbnRpYztcbiAgICAgICAgICAgICAgICBwb2xpY3kucm9vdE5vZGUgPSAnTm8nO1xuICAgICAgICAgICAgICAgIGVycG9sQ2hpbGRzLmNoaWxkcmVuLnB1c2gocG9saWN5KTtcbiAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgIGVycG9sQ2hpbGRzLm5hbWUgPSBcIkVkZ2UgUm91dGVyIFBvbGljaWVzKFwiKyBlcnBvbENoaWxkcy5jaGlsZHJlbi5sZW5ndGggKycpJztcbiAgICAgICAgICAgICAgIGVkZ2Vyb3V0ZXJOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaChlcnBvbENoaWxkcyk7XG4gICAgICAgICAgIH0pO1xuICAgICAgIH0pO1xuICAgICAgIHdhaXRfcHJvbWlzZXMucHVzaChlcnBvbGljaWVzcHJvbWlzZSk7XG5cbiAgICAgICBQcm9taXNlLmFsbCh3YWl0X3Byb21pc2VzKS50aGVuKCAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSgndGhpcyBpcyBhIHByb21pc2UnKTtcbiAgICAgICB9KTtcbiAgICAgfSk7XG4gICAgICAgIG5ldHdvcmtHcmFwaCA9IGQzLmhpZXJhcmNoeShuZXR3b3JrR3JhcGguZGF0YSwgZnVuY3Rpb24gKG5kKSB7XG4gICAgICAgICAgICByZXR1cm4gbmQuY2hpbGRyZW47XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gW25ldHdvcmtHcmFwaCwgdGhpcy51bmlxSWRdO1xuICAgfVxuXG4gICAgc2VydmljZUdyb3VwaW5nKHNlcnZpY2VzQ2hpbGRyZW4sIHNlcnZpY2VzdHJlZSkge1xuICAgICAgICBjb25zdCBwcm90b2NvbFJEUEdycCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlSWQoKSxcbiAgICAgICAgICAgICdTZXJ2aWNlcyBbcHJvdG9jb2wtUkRQXScsXG4gICAgICAgICAgICAnU2VydmljZXMgY3JlYXRlZCBmb3IgUkRQIHByb3RvY29sJ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBwcm90b2NvbEhUVFBTR3JwID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgdGhpcy5jcmVhdGVJZCgpLFxuICAgICAgICAgICAgJ1NlcnZpY2VzIFtwcm90b2NvbC1IVFRQU10nLFxuICAgICAgICAgICAgJ1NlcnZpY2UgY3JlYXRlZCBmb3IgSFRUUFMgcHJvdG9jb2wnXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHByb3RvY29sSFRUUEdycCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlSWQoKSxcbiAgICAgICAgICAgICdTZXJ2aWNlcyBbcHJvdG9jb2wtSFRUUF0nLFxuICAgICAgICAgICAgJ1NlcnZpY2UgY3JlYXRlZCBmb3IgSFRUUCBwcm90b2NvbCdcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcHJvdG9jb2xGVFBHcnAgPSBuZXcgR3JvdXAoXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUlkKCksXG4gICAgICAgICAgICAnU2VydmljZXMgW3Byb3RvY29sLUZUUF0nLFxuICAgICAgICAgICAgJ1NlcnZpY2UgY3JlYXRlZCBmb3IgRlRQIHByb3RvY29sJ1xuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGFiY2RHcnAgPSBuZXcgR3JvdXAodGhpcy5jcmVhdGVJZCgpLCAnU2VydmljZXMgW0EtRF0nLCAnU2VydmljZSBuYW1lIHN0YXJ0cyB3aXRoIEEgdG8gRCcpO1xuICAgICAgICBjb25zdCBlZmdoR3JwID0gbmV3IEdyb3VwKHRoaXMuY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtFLUhdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBFIHRvIEgnKTtcbiAgICAgICAgY29uc3QgaWprbEdycCA9IG5ldyBHcm91cCh0aGlzLmNyZWF0ZUlkKCksICdTZXJ2aWNlcyBbSS1MXScsICdTZXJ2aWNlIG5hbWUgc3RhcnRzIHdpdGggSSB0byBMJyk7XG4gICAgICAgIGNvbnN0IG1ub3BHcnAgPSBuZXcgR3JvdXAodGhpcy5jcmVhdGVJZCgpLCAnU2VydmljZXMgW00tUF0nLCAnU2VydmljZSBuYW1lIHN0YXJ0cyB3aXRoIE0gdG8gUCcpO1xuICAgICAgICBjb25zdCBxcnN0R3JwID0gbmV3IEdyb3VwKHRoaXMuY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtHLVRdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBRIHRvIFQnKTtcbiAgICAgICAgY29uc3QgdXZ3eEdycCA9IG5ldyBHcm91cCh0aGlzLmNyZWF0ZUlkKCksICdTZXJ2aWNlcyBbVS1YXScsICdTZXJ2aWNlIG5hbWUgc3RhcnRzIHdpdGggVSB0byBYJyk7XG4gICAgICAgIGNvbnN0IHl6R3JwID0gbmV3IEdyb3VwKHRoaXMuY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtZLVpdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBZIGFuZCBaJyk7XG4gICAgICAgIGNvbnN0IG9uZVRvOUdycCA9IG5ldyBHcm91cCh0aGlzLmNyZWF0ZUlkKCksICdTZXJ2aWNlcyBbMS05XScsICdTZXJ2aWNlIG5hbWUgc3RhcnRzIHdpdGggMCB0byA5Jyk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXJ2aWNlc3RyZWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VvYmogPSBzZXJ2aWNlc3RyZWVbaV07XG4gICAgICAgICAgICBjb25zdCBjaGEgPSBzZXJ2aWNlb2JqLm5hbWUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmIChzZXJ2aWNlb2JqLnByb3RvY29sID09PSAncmRwJykge1xuICAgICAgICAgICAgICAgIHByb3RvY29sUkRQR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlcnZpY2VvYmoucHJvdG9jb2wgPT09ICdodHRwcycpIHtcbiAgICAgICAgICAgICAgICBwcm90b2NvbEhUVFBTR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlcnZpY2VvYmoucHJvdG9jb2wgPT09ICdodHRwJykge1xuICAgICAgICAgICAgICAgIHByb3RvY29sSFRUUEdycC5jaGlsZHJlbi5wdXNoKHNlcnZpY2VvYmopO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzZXJ2aWNlb2JqLnByb3RvY29sID09PSAnZnRwJykge1xuICAgICAgICAgICAgICAgIHByb3RvY29sRlRQR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ2EnIHx8IGNoYSA9PT0gJ2InIHx8IGNoYSA9PT0gJ2MnIHx8IGNoYSA9PT0gJ2QnKSB7XG4gICAgICAgICAgICAgICAgYWJjZEdycC5jaGlsZHJlbi5wdXNoKHNlcnZpY2VvYmopO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdlJyB8fCBjaGEgPT09ICdmJyB8fCBjaGEgPT09ICdnJyB8fCBjaGEgPT09ICdoJykge1xuICAgICAgICAgICAgICAgIGVmZ2hHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAnaScgfHwgY2hhID09PSAnaicgfHwgY2hhID09PSAnaycgfHwgY2hhID09PSAnbCcpIHtcbiAgICAgICAgICAgICAgICBpamtsR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ20nIHx8IGNoYSA9PT0gJ24nIHx8IGNoYSA9PT0gJ28nIHx8IGNoYSA9PT0gJ3AnKSB7XG4gICAgICAgICAgICAgICAgbW5vcEdycC5jaGlsZHJlbi5wdXNoKHNlcnZpY2VvYmopO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdxJyB8fCBjaGEgPT09ICdyJyB8fCBjaGEgPT09ICdzJyB8fCBjaGEgPT09ICd0Jykge1xuICAgICAgICAgICAgICAgIHFyc3RHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAndScgfHwgY2hhID09PSAndicgfHwgY2hhID09PSAndycgfHwgY2hhID09PSAneCcpIHtcbiAgICAgICAgICAgICAgICB1dnd4R3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ3knIHx8IGNoYSA9PT0gJ3onKSB7XG4gICAgICAgICAgICAgICAgeXpHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgY2hhID09PSAnMCcgfHxcbiAgICAgICAgICAgICAgICBjaGEgPT09ICcxJyB8fFxuICAgICAgICAgICAgICAgIGNoYSA9PT0gJzInIHx8XG4gICAgICAgICAgICAgICAgY2hhID09PSAnMycgfHxcbiAgICAgICAgICAgICAgICBjaGEgPT09ICc0JyB8fFxuICAgICAgICAgICAgICAgIGNoYSA9PT0gJzUnIHx8XG4gICAgICAgICAgICAgICAgY2hhID09PSAnNicgfHxcbiAgICAgICAgICAgICAgICBjaGEgPT09ICc3JyB8fFxuICAgICAgICAgICAgICAgIGNoYSA9PT0gJzgnIHx8XG4gICAgICAgICAgICAgICAgY2hhID09PSAnOSdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG9uZVRvOUdycC5jaGlsZHJlbi5wdXNoKHNlcnZpY2VvYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IC8vIGVuZCBtYWluIGZvciBsb29wXG5cbiAgICAgICAgaWYgKHByb3RvY29sUkRQR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHByb3RvY29sUkRQR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHJvdG9jb2xSRFBHcnAubmFtZSA9IHByb3RvY29sUkRQR3JwLm5hbWUgKyAnKCcgKyBwcm90b2NvbFJEUEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2gocHJvdG9jb2xSRFBHcnApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3RvY29sSFRUUFNHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcHJvdG9jb2xIVFRQU0dycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByb3RvY29sSFRUUFNHcnAubmFtZSA9IHByb3RvY29sSFRUUFNHcnAubmFtZSArICcoJyArIHByb3RvY29sSFRUUFNHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHByb3RvY29sSFRUUFNHcnApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm90b2NvbEhUVFBHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcHJvdG9jb2xIVFRQR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHJvdG9jb2xIVFRQR3JwLm5hbWUgPSBwcm90b2NvbEhUVFBHcnAubmFtZSArICcoJyArIHByb3RvY29sSFRUUEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2gocHJvdG9jb2xIVFRQR3JwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvdG9jb2xGVFBHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcHJvdG9jb2xGVFBHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcm90b2NvbEZUUEdycC5uYW1lID0gcHJvdG9jb2xGVFBHcnAubmFtZSArICcoJyArIHByb3RvY29sRlRQR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChwcm90b2NvbEZUUEdycCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFiY2RHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYWJjZEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFiY2RHcnAubmFtZSA9IGFiY2RHcnAubmFtZSArICcoJyArIGFiY2RHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGFiY2RHcnApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlZmdoR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVmZ2hHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlZmdoR3JwLm5hbWUgPSBlZmdoR3JwLm5hbWUgKyAnKCcgKyBlZmdoR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChlZmdoR3JwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWprbEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpamtsR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWprbEdycC5uYW1lID0gaWprbEdycC5uYW1lICsgJygnICsgaWprbEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2goaWprbEdycCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ub3BHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbW5vcEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG1ub3BHcnAubmFtZSA9IG1ub3BHcnAubmFtZSArICcoJyArIG1ub3BHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKG1ub3BHcnApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxcnN0R3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHFyc3RHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBxcnN0R3JwLm5hbWUgPSBxcnN0R3JwLm5hbWUgKyAnKCcgKyBxcnN0R3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChxcnN0R3JwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXZ3eEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB1dnd4R3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdXZ3eEdycC5uYW1lID0gdXZ3eEdycC5uYW1lICsgJygnICsgdXZ3eEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2godXZ3eEdycCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHl6R3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHl6R3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgeXpHcnAubmFtZSA9IHl6R3JwLm5hbWUgKyAnKCcgKyB5ekdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2goeXpHcnApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvbmVUbzlHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgb25lVG85R3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb25lVG85R3JwLm5hbWUgPSBvbmVUbzlHcnAubmFtZSArICcoJyArIG9uZVRvOUdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2gob25lVG85R3JwKTtcbiAgICAgICAgfVxuICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLm5hbWUgPSBzZXJ2aWNlc0NoaWxkcmVuLm5hbWUgKyAnKCcgKyBzZXJ2aWNlc3RyZWUubGVuZ3RoICsgJyknO1xuICAgICAgICByZXR1cm4gc2VydmljZXNDaGlsZHJlbjtcbiAgICB9XG5cbiAgICBhc3luYyBwcm9jZXNzRWRnZVJvdXRlclBvbGljaWVzRm9yTm9kZUNsaWNrKFxuICAgICAgICBlclBvbGljeU5vZGUsXG4gICAgICAgIG5ldHdvcmtHcmFwaCxcbiAgICAgICAgZWRnZVJvdXRlclBvbGljaWVzLFxuICAgICAgICB1bmlxSWQsXG4gICAgICAgIHppdGlTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgY29uc3QgbXlQcm9taXNlID0gYXdhaXQgbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHdhaXRfcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICB0aGlzLnVuaXFJZCA9IHVuaXFJZDtcbiAgICAgICAgICBjb25zdCByYXdFUlBvbGljeSA9IGVkZ2VSb3V0ZXJQb2xpY2llcy5maW5kKChzKSA9PiBzLm5hbWUgPT09IGVyUG9saWN5Tm9kZS5kYXRhLm5hbWUpO1xuICAgICAgICAgIGNvbnN0IHBhZ2VzaXplID0gNTAwO1xuXG4gICAgICBjb25zdCBlcl91cmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShyYXdFUlBvbGljeSwgJ2VkZ2Utcm91dGVycycpLnJlcGxhY2UoJy4vJywgJycpO1xuICAgICAgbGV0IGFzc29jaWF0ZWRSb3V0ZXJzID0gW107XG4gICAgICBjb25zdCBwYWdpbmcgPSB0aGlzLmdldFBhZ2luZ09iamVjdChwYWdlc2l6ZSk7XG4gICAgICBjb25zdCBlckNoYWlsZHMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgZXJDaGFpbGRzLm5hbWU9ICdBc3NvY2lhdGVkIEVkZ2UgUm91dGVycyc7XG4gICAgICAgIGVyQ2hhaWxkcy50eXBlPSAnRWRnZSBSb3V0ZXJzJztcbiAgICAgICAgZXJDaGFpbGRzLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgY29uc3QgYXNzb2NpYXRlZFJvdXRlcnNQcm9taXNlID0gIGF3YWl0IHppdGlTZXJ2aWNlLmdldChlcl91cmwsIHBhZ2luZywgW10pXG4gICAgICAgICAgIC50aGVuKCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgcmVzdWx0LmRhdGEuZm9yRWFjaCggKGVyKSA9PiB7XG4gICAgICAgICAgICAgICBjb25zdCB0bXAgPSBuZXcgRVJvdXRlcigpO1xuICAgICAgICAgICAgICAgICAgIHRtcC5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICAgICB0bXAubmFtZSA9IGVyLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgdG1wLnR5cGUgPSAnRWRnZSBSb3V0ZXInO1xuICAgICAgICAgICAgICAgICAgIHRtcC52ZXJpZmllZCA9IGVyLmlzVmVyaWZpZWQ/ICdZZXMnOiAnTm8nO1xuICAgICAgICAgICAgICAgICAgIHRtcC5vbmxpbmUgPSBlci5pc09ubGluZT8gJ1llcyc6ICdObyc7XG4gICAgICAgICAgICAgICAgICAgdG1wLmRpc2FibGVkID0gZXIuZGlzYWJsZWQ/ICdZZXMnOiAnTm8nO1xuICAgICAgICAgICAgICAgICAgIHRtcC5yb290Tm9kZSA9ICdZZXMnO1xuICAgICAgICAgICAgICAgICAgIHRtcC50dW5uZWxlckVuYWJsZWQgPSBlci50dW5uZWxlckVuYWJsZWQ/IGVyLnR1bm5lbGVyRW5hYmxlZDonTm8nO1xuICAgICAgICAgICAgICAgICAgIHRtcC5zeW5jU3RhdHVzID0gZXIuc3luY1N0YXR1cz8gZXIuc3luY1N0YXR1czogJ05vJztcbiAgICAgICAgICAgICAgICAgICB0bXAuY3JlYXRlZEF0ID0gZXIuY3JlYXRlZEF0O1xuICAgICAgICAgICAgICAgICAgIHRtcC51cGRhdGVkQXQgPSBlci51cGRhdGVkQXQ7XG4gICAgICAgICAgICAgICAgICAgZXJDaGFpbGRzLmNoaWxkcmVuLnB1c2godG1wKTtcbiAgICAgICAgICAgICB9ICk7XG4gICAgICAgICAgIGVyQ2hhaWxkcy5uYW1lID0gZXJDaGFpbGRzLm5hbWUgKycoJysgZXJDaGFpbGRzLmNoaWxkcmVuLmxlbmd0aCArJyknO1xuICAgICAgICAgICBlclBvbGljeU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKGVyQ2hhaWxkcyk7XG4gICAgICB9KTtcbiAgICAgICAgICB3YWl0X3Byb21pc2VzLnB1c2goYXNzb2NpYXRlZFJvdXRlcnNQcm9taXNlKTtcblxuICAgICAgICAgIGNvbnN0IHNlcnZpY2VzX3BhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShyYXdFUlBvbGljeSwgJ2lkZW50aXRpZXMnKTtcbiAgICAgICAgICBsZXQgaWRzID0gW107XG4gICAgICAgICAgY29uc3QgaWRwcm9taXNlID0geml0aVNlcnZpY2UuZ2V0KHVybCwgc2VydmljZXNfcGFnaW5nLCBbXSlcbiAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZHMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VzID0gTWF0aC5jZWlsKHJlc3VsdC5tZXRhLnBhZ2luYXRpb24udG90YWxDb3VudCAvIHBhZ2VzaXplKTtcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMjsgcGFnZSA8PSBwYWdlczsgcGFnZSsrKSB7XG4gICAgICAgICAgICAgIHNlcnZpY2VzX3BhZ2luZy5wYWdlID0gcGFnZTtcbiAgICAgICAgICAgICAgY29uc3QgdG1wX3Byb21pc2UgPSB6aXRpU2VydmljZS5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzX3BhZ2luZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICAgICkgLnRoZW4oKHBhZ2VSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgIHBhZ2VSZXN1bHQuZGF0YS5mb3JFYWNoKChzZXJ2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlkcy5wdXNoKHNlcnYpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHByb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICAgICB3YWl0X3Byb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICAgfSAvLyBlbmQgZm9yIGxvb3BcbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICBjb25zdCBpZENoaWxkcyA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgICAgIGlkQ2hpbGRzLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgIGlkcy5mb3JFYWNoKCAoaWRPYikgPT4ge1xuICAgICAgICAgICAgICAgIGlkQ2hpbGRzLmNoaWxkcmVuLnB1c2godGhpcy5jcmVhdGVJZGVudGl0eShpZE9iKSk7XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlkQ2hpbGRzLm5hbWUgPSBcIkFjY2Vzc2libGUgSWRlbnRpdGllcyhcIisgaWRDaGlsZHMuY2hpbGRyZW4ubGVuZ3RoICsnKSc7XG4gICAgICAgICAgICAgICBlclBvbGljeU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKGlkQ2hpbGRzKTtcbiAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgIHdhaXRfcHJvbWlzZXMucHVzaChpZHByb21pc2UpO1xuICAgICAgICAgUHJvbWlzZS5hbGwod2FpdF9wcm9taXNlcykudGhlbiggKCkgPT4ge1xuICAgICAgICAgICAgIHJlc29sdmUoJ3RoaXMgaXMgYSBwcm9taXNlJyk7XG4gICAgICAgICB9ICk7XG5cbiAgICAgICB9KTtcblxuICAgICAgICBuZXR3b3JrR3JhcGggPSBkMy5oaWVyYXJjaHkobmV0d29ya0dyYXBoLmRhdGEsIGZ1bmN0aW9uIChuZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5kLmNoaWxkcmVuO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gW25ldHdvcmtHcmFwaCwgdGhpcy51bmlxSWRdO1xuICAgIH0gLy8gZW5kXG5cbiAgYXN5bmMgcHJvY2Vzc1NlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNGb3JOb2RlQ2xpY2soXG4gICAgICAgIHNlcnZpY2VFclBvbGljeU5vZGUsXG4gICAgICAgIG5ldHdvcmtHcmFwaCxcbiAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgdW5pcUlkLFxuICAgICAgICB6aXRpU2VydmljZVxuICAgICkge1xuICAgICAgIGNvbnN0IG15UHJvbWlzZSA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICB0aGlzLnVuaXFJZCA9IHVuaXFJZDtcbiAgICAgICAgICBjb25zdCB3YWl0X3Byb21pc2VzID0gW107XG4gICAgICAgICAgY29uc3QgcmF3U2VydmljZUVSUG9saWN5ID0gc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llcy5maW5kKChzKSA9PiBzLm5hbWUgPT09IHNlcnZpY2VFclBvbGljeU5vZGUuZGF0YS5uYW1lKTtcbiAgICAgICAgICBjb25zdCBwYWdlc2l6ZSA9IDUwMDtcbiAgICAgICAgICBjb25zdCBzZXJ2aWNlc19wYWdpbmcgPSB0aGlzLmdldFBhZ2luZ09iamVjdChwYWdlc2l6ZSk7XG4gICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2UocmF3U2VydmljZUVSUG9saWN5LCAnZWRnZS1yb3V0ZXJzJyk7XG4gICAgICAgICAgbGV0IHJvdXRlcnMgPSBbXTtcbiAgICAgICAgICBjb25zdCBlcnByb21pc2UgPSB6aXRpU2VydmljZS5nZXQodXJsLCBzZXJ2aWNlc19wYWdpbmcsIFtdKVxuICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHJvdXRlcnMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VzID0gTWF0aC5jZWlsKHJlc3VsdC5tZXRhLnBhZ2luYXRpb24udG90YWxDb3VudCAvIHBhZ2VzaXplKTtcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMjsgcGFnZSA8PSBwYWdlczsgcGFnZSsrKSB7XG4gICAgICAgICAgICAgIHNlcnZpY2VzX3BhZ2luZy5wYWdlID0gcGFnZTtcbiAgICAgICAgICAgICAgY29uc3QgdG1wX3Byb21pc2UgPSB6aXRpU2VydmljZS5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzX3BhZ2luZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICAgICkgLnRoZW4oKHBhZ2VSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgIHBhZ2VSZXN1bHQuZGF0YS5mb3JFYWNoKChzZXJ2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJvdXRlcnMucHVzaChzZXJ2KTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRtcF9wcm9taXNlKTtcbiAgICAgICAgICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKHRtcF9wcm9taXNlKTtcbiAgICAgICAgICAgIH0gLy8gZW5kIGZvciBsb29wXG4gICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgY29uc3QgZXJDaGlsZHMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgICAgICBlckNoaWxkcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICByb3V0ZXJzLmZvckVhY2goIChlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkT2IgPSBuZXcgRVJvdXRlcigpO1xuICAgICAgICAgICAgICAgIGlkT2IuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgaWRPYi51dWlkID0gZXIuaWQ7XG4gICAgICAgICAgICAgICAgaWRPYi5uYW1lID0gZXIubmFtZTtcbiAgICAgICAgICAgICAgICBpZE9iLnR5cGUgPSAnRWRnZSBSb3V0ZXInO1xuICAgICAgICAgICAgICAgIGVyQ2hpbGRzLmNoaWxkcmVuLnB1c2goaWRPYik7XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICBlckNoaWxkcy5uYW1lID0gXCJFZGdlIFJvdXRlcnMoXCIrIGVyQ2hpbGRzLmNoaWxkcmVuLmxlbmd0aCArJyknO1xuICAgICAgICAgICAgICAgc2VydmljZUVyUG9saWN5Tm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goZXJDaGlsZHMpO1xuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHdhaXRfcHJvbWlzZXMucHVzaChlcnByb21pc2UpO1xuXG4gICAgICAgICAgY29uc3Qgc2VydmljZXNfcGFnaW5nQiA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcblxuICAgICAgICAgIGNvbnN0IHVybEIgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShyYXdTZXJ2aWNlRVJQb2xpY3ksICdzZXJ2aWNlcycpO1xuICAgICAgICAgIGxldCBzZXJBcnJheSA9IFtdO1xuICAgICAgICAgIGNvbnN0IHNlcnByb21pc2UgPSB6aXRpU2VydmljZS5nZXQodXJsQiwgc2VydmljZXNfcGFnaW5nQiwgW10pXG4gICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgc2VyQXJyYXkgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VzID0gTWF0aC5jZWlsKHJlc3VsdC5tZXRhLnBhZ2luYXRpb24udG90YWxDb3VudCAvIHBhZ2VzaXplKTtcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VzQiA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgcGFnZSA9IDI7IHBhZ2UgPD0gcGFnZXM7IHBhZ2UrKykge1xuICAgICAgICAgICAgICBzZXJ2aWNlc19wYWdpbmdCLnBhZ2UgPSBwYWdlO1xuICAgICAgICAgICAgICBjb25zdCB0bXBfcHJvbWlzZUIgPSB6aXRpU2VydmljZS5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsQixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlc19wYWdpbmdCLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdXG4gICAgICAgICAgICAgICAgKSAudGhlbigocGFnZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcGFnZVJlc3VsdC5kYXRhLmZvckVhY2goKHNlcnYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2VyQXJyYXkucHVzaChzZXJ2KTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBwcm9taXNlc0IucHVzaCh0bXBfcHJvbWlzZUIpO1xuICAgICAgICAgICAgICB3YWl0X3Byb21pc2VzLnB1c2godG1wX3Byb21pc2VCKTtcbiAgICAgICAgICAgIH0gLy8gZW5kIGZvciBsb29wXG4gICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlc0IpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgIGNvbnN0IHNyQ2hpbGRzID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgICAgICAgc3JDaGlsZHMuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgc2VyQXJyYXkuZm9yRWFjaCggKHNyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3JPYiA9IG5ldyBTZXJ2aWNlKCk7XG4gICAgICAgICAgICAgICAgc3JPYi5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBzck9iLnV1aWQgPSBzci5pZDtcbiAgICAgICAgICAgICAgICBzck9iLm5hbWUgPSBzci5uYW1lO1xuICAgICAgICAgICAgICAgIHNyT2IudHlwZSA9ICdTZXJ2aWNlJztcbiAgICAgICAgICAgICAgICBzckNoaWxkcy5jaGlsZHJlbi5wdXNoKHNyT2IpO1xuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBzckNoaWxkcy5uYW1lID0gXCJTZXJ2aWNlcyhcIisgc3JDaGlsZHMuY2hpbGRyZW4ubGVuZ3RoICsnKSc7XG4gICAgICAgICAgICAgIHNlcnZpY2VFclBvbGljeU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKHNyQ2hpbGRzKTtcbiAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgIHdhaXRfcHJvbWlzZXMucHVzaChzZXJwcm9taXNlKTtcblxuICAgICAgICAgUHJvbWlzZS5hbGwod2FpdF9wcm9taXNlcykudGhlbiggKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSgnRG9uZScpO1xuICAgICAgICAgfSApO1xuXG4gICAgICAgfSk7XG5cbiAgICAgICAgbmV0d29ya0dyYXBoID0gZDMuaGllcmFyY2h5KG5ldHdvcmtHcmFwaC5kYXRhLCBmdW5jdGlvbiAobmQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZC5jaGlsZHJlbjtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBbbmV0d29ya0dyYXBoLCB0aGlzLnVuaXFJZF07XG4gICAgfSAvLyBlbmRcbn0gLy8gZW5kIG9mIGNsYXNzXG4iXX0=
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { Injectable } from "@angular/core";
|
|
17
17
|
import * as i0 from "@angular/core";
|
|
18
|
-
class VisualizerServiceClass {
|
|
18
|
+
export class VisualizerServiceClass {
|
|
19
19
|
// subscription: Subscription = new Subscription();
|
|
20
20
|
constructor() { }
|
|
21
21
|
ngOnInit() {
|
|
@@ -26,8 +26,7 @@ class VisualizerServiceClass {
|
|
|
26
26
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: VisualizerServiceClass, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
27
27
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: VisualizerServiceClass }); }
|
|
28
28
|
}
|
|
29
|
-
export { VisualizerServiceClass };
|
|
30
29
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: VisualizerServiceClass, decorators: [{
|
|
31
30
|
type: Injectable
|
|
32
31
|
}], ctorParameters: function () { return []; } });
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzdWFsaXplci1zZXJ2aWNlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Zpc3VhbGl6ZXIvdmlzdWFsaXplci1zZXJ2aWNlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBQ0YsT0FBTyxFQUFTLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFTakQsTUFBTSxPQUFnQixzQkFBc0I7SUFFeEMsbURBQW1EO0lBRWpELGdCQUVHLENBQUM7SUFFSixRQUFRO0lBRVIsQ0FBQztJQUVELFdBQVc7UUFDVCxvQ0FBb0M7SUFDdEMsQ0FBQzsrR0FkZSxzQkFBc0I7bUhBQXRCLHNCQUFzQjs7NEZBQXRCLHNCQUFzQjtrQkFEM0MsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQ29weXJpZ2h0IE5ldEZvdW5kcnkgSW5jLlxuXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtNYXREaWFsb2d9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcbmltcG9ydCB7ZGVmZXJ9IGZyb20gXCJsb2Rhc2hcIjtcbi8vIGltcG9ydCB7U0VUVElOR1NfU0VSVklDRSwgU2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vc2VydmljZXMvc2V0dGluZ3Muc2VydmljZVwiO1xuaW1wb3J0IHtFeHRlbnNpb25TZXJ2aWNlLCBTSEFSRURaX0VYVEVOU0lPTn0gZnJvbSBcIi4uL2V4dGVuZGFibGUvZXh0ZW5zaW9ucy1ub29wLnNlcnZpY2VcIjtcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVmlzdWFsaXplclNlcnZpY2VDbGFzcyB7XG4gICAgYWJzdHJhY3QgdGl0bGU7XG4gICAgLy8gc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAgIGNvbnN0cnVjdG9yKFxuICAgICAgIC8vIEBJbmplY3QoU0hBUkVEWl9FWFRFTlNJT04pIHByb3RlY3RlZCBleHRlbnNpb25TZXJ2aWNlOiBFeHRlbnNpb25TZXJ2aWNlXG4gICAgICApIHt9XG5cbiAgICAgIG5nT25Jbml0KCkge1xuXG4gICAgICB9XG5cbiAgICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICAvLyAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cblxuXG4gIH1cbiJdfQ==
|