@openziti/ziti-console-lib 0.12.11 → 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/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 +6 -12
- 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 +5 -8
- 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 -24
- 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 +2 -3
- 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 +4 -4
- 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 +3512 -4317
- 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 +1 -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 -222
- 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
|
@@ -71,7 +71,7 @@ export class Children {
|
|
|
71
71
|
this.children = [];
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
|
-
class NetworkVisualizerHelper {
|
|
74
|
+
export class NetworkVisualizerHelper {
|
|
75
75
|
constructor() {
|
|
76
76
|
this.uniqIId = 0;
|
|
77
77
|
}
|
|
@@ -582,11 +582,10 @@ class NetworkVisualizerHelper {
|
|
|
582
582
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NetworkVisualizerHelper, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
583
583
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NetworkVisualizerHelper, providedIn: 'root' }); }
|
|
584
584
|
}
|
|
585
|
-
export { NetworkVisualizerHelper };
|
|
586
585
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NetworkVisualizerHelper, decorators: [{
|
|
587
586
|
type: Injectable,
|
|
588
587
|
args: [{
|
|
589
588
|
providedIn: 'root',
|
|
590
589
|
}]
|
|
591
590
|
}] });
|
|
592
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay12aXN1YWxpemVyLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy92aXN1YWxpemVyL25ldHdvcmstdmlzdWFsaXplci9uZXR3b3JrLXZpc3VhbGl6ZXIuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDLE1BQU0sT0FBTyxRQUFRO0lBb0JqQjtRQUNJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxPQUFPO0lBb0JoQjtRQUNJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7Q0FDSjtBQUNELE1BQU0sT0FBTyxNQUFNO0lBUWpCO1FBQ0ksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBQ0QsTUFBTSxPQUFPLEtBQUs7SUFPZCxZQUFZLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxH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QUFnQyxFQUNoQyx5QkFBeUIsRUFDekIsQ0FBQyxFQUNELHlCQUF5QixDQUFDLE1BQU0sQ0FDbkMsQ0FBQztRQUVGLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDL0MsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6QyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDM0MsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUNuRCxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3pELFFBQVEsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBRXpCLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7K0dBaG5CUSx1QkFBdUI7bUhBQXZCLHVCQUF1QixjQUZwQixNQUFNOztTQUVULHVCQUF1Qjs0RkFBdkIsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjbGFzcyBJZGVudGl0eSB7XG4gICAgaWQ7XG4gICAgdXVpZDtcbiAgICBuYW1lO1xuICAgIHN0YXR1cztcbiAgICB0eXBlO1xuICAgIHJvb3ROb2RlO1xuICAgIHNlcnZlckVncmVzc1Byb3RvY29sO1xuICAgIHNlcnZlckVncmVzc0hvc3Q7XG4gICAgc2VydmVyRWdyZXNzUG9ydDtcbiAgICBwb3N0dXJlQ2hlY2tzO1xuICAgIGV2ZW50cztcbiAgICBvcztcbiAgICB1dGlsaXphdGlvbjtcbiAgICBjaGlsZHJlbjtcbiAgICBjb250ZXh0TWVudTtcbiAgICBvbmxpbmU7XG4gICAgb3NWZXJzaW9uO1xuICAgIGNyZWF0ZWRBdDtcbiAgICB1cGRhdGVkQXQ7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucm9vdE5vZGUgPSAnTm8nO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnUgPSAnWWVzJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlIHtcbiAgICBpZDtcbiAgICB1dWlkO1xuICAgIG5hbWU7XG4gICAgaW50ZXJjZXB0X2hvc3Q7XG4gICAgaW50ZXJjZXB0X3BvcnQ7XG4gICAgZW5jcnlwdGVkO1xuICAgIHJvb3ROb2RlO1xuICAgIHNlcnZlckVncmVzc0hvc3Q7XG4gICAgc2VydmVyRWdyZXNzUG9ydDtcbiAgICBzdGF0dXM7XG4gICAgcHJvdG9jb2w7XG4gICAgdHlwZTtcbiAgICBjaGlsZHJlbjtcbiAgICBhdHRyaWJ1dGVzO1xuICAgIHV0aWxpemF0aW9uO1xuICAgIGNvbnRleHRNZW51O1xuICAgIGNyZWF0ZWRBdDtcbiAgICB1cGRhdGVkQXQ7XG4gICAgaW50ZXJjZXB0O1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnJvb3ROb2RlID0gJ05vJztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51ID0gJ1llcyc7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIENvbmZpZyB7XG4gIHV1aWQ7XG4gIGlkO1xuICBuYW1lO1xuICBkYXRhO1xuICBjaGlsZHJlbjtcbiAgY29udGV4dE1lbnU7XG4gIHJvb3ROb2RlO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHRoaXMucm9vdE5vZGUgPSAnTm8nO1xuICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgICAgdGhpcy5jb250ZXh0TWVudSA9ICdZZXMnO1xuICB9XG59XG5leHBvcnQgY2xhc3MgR3JvdXAge1xuICAgIGlkO1xuICAgIG5hbWU7XG4gICAgdHlwZTtcbiAgICBncm91cDtcbiAgICBjaGlsZHJlbjtcblxuICAgIGNvbnN0cnVjdG9yKGlkdiwgcywgZykge1xuICAgICAgICB0aGlzLmlkID0gaWR2O1xuICAgICAgICB0aGlzLm5hbWUgPSBzO1xuICAgICAgICB0aGlzLmdyb3VwID0gZztcbiAgICAgICAgdGhpcy50eXBlID0gJ0dyb3VwJztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlcnZpY2VQb2xpY3kge1xuICAgIGlkO1xuICAgIHV1aWQ7XG4gICAgbmFtZTtcbiAgICB0eXBlO1xuICAgIHJvb3ROb2RlO1xuICAgIGNoaWxkcmVuO1xuICAgIGNvbnRleHRNZW51O1xuICAgIGNyZWF0ZWRBdDtcbiAgICB1cGRhdGVkQXQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yb290Tm9kZSA9ICdObyc7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudSA9ICdZZXMnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZSB7XG4gICAgaWQ7XG4gICAgbmFtZTtcbiAgICB0eXBlO1xuICAgIGNoaWxkcmVuO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlBvbGljeSB7XG4gICAgaWQ7XG4gICAgdXVpZDtcbiAgICBuYW1lO1xuICAgIHN0YXR1cztcbiAgICBzaXplO1xuICAgIHR5cGU7XG4gICAgc2VtYW50aWM7XG4gICAgaXNTeXN0ZW07XG4gICAgcm9vdE5vZGU7XG4gICAgY2hpbGRyZW47XG4gICAgY29udGV4dE1lbnU7XG4gICAgY3JlYXRlZEF0O1xuICAgIHVwZGF0ZWRBdDtcbiAgICBkYXRhO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnJvb3ROb2RlID0gJ05vJztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51ID0gJ1llcyc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VydmljZUVSUG9saWN5IHtcbiAgICBpZDtcbiAgICB1dWlkO1xuICAgIG5hbWU7XG4gICAgc3RhdHVzO1xuICAgIHNpemU7XG4gICAgdHlwZTtcbiAgICByb290Tm9kZTtcbiAgICBjaGlsZHJlbjtcbiAgICBjb250ZXh0TWVudTtcbiAgICBjcmVhdGVkQXQ7XG4gICAgdXBkYXRlZEF0O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucm9vdE5vZGUgPSAnTm8nO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnUgPSAnWWVzJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUm91dGVyIHtcbiAgICBpZDtcbiAgICB1dWlkO1xuICAgIG5hbWU7XG4gICAgdmVyaWZpZWQ7XG4gICAgc2l6ZTtcbiAgICB0eXBlO1xuICAgIHByb3ZpZGVyO1xuICAgIHJvb3ROb2RlO1xuICAgIHNlcnZlckVncmVzc1Byb3RvY29sO1xuICAgIHNlcnZlckVncmVzc0hvc3Q7XG4gICAgc2VydmVyRWdyZXNzUG9ydDtcbiAgICBjaGlsZHJlbjtcbiAgICB1dGlsaXphdGlvbjtcbiAgICBjb250ZXh0TWVudTtcbiAgICBvbmxpbmU7XG4gICAgZGlzYWJsZWQ7XG4gICAgdmVyc2lvbjtcbiAgICB0dW5uZWxlckVuYWJsZWQ7XG4gICAgc3luY1N0YXR1cztcbiAgICBjcmVhdGVkQXQ7XG4gICAgdXBkYXRlZEF0O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucm9vdE5vZGUgPSAnTm8nO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnUgPSAnWWVzJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDaGlsZHJlbiB7XG4gICAgaWQ7XG4gICAgbmFtZTtcbiAgICBzdGF0dXM7XG4gICAgc2l6ZTtcbiAgICB0eXBlO1xuICAgIGNoaWxkcmVuO1xuICAgIGRhdGE6IENoaWxkcmVuO1xuICAgIHJvb3ROb2RlID0gJ05vJztcbiAgICBmaXJzdENoaWxkID0gJ05vJztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy50eXBlID0gJ0NoaWxkcmVuJztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmV0d29ya1Zpc3VhbGl6ZXJIZWxwZXIge1xuXG4gICB1bmlxSUlkOmFueSA9MDtcblxuIGNyZWF0ZVVuaXFJZCgpIHtcbiAgIHJldHVybiArK3RoaXMudW5pcUlJZDtcbiB9XG4gIHB1YmxpYyBjcmVhdGVFZGdlUm91dGVyTm9kZShlciwgaXNSb290Tm9kZSA9ICdZZXMnKSB7XG4gICAgICBjb25zdCBlck9iID0gbmV3IEVSb3V0ZXIoKTtcbiAgICAgIC8vIGVyT2IuaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICAgZXJPYi51dWlkID0gZXIuaWQ7XG4gICAgICAgICBlck9iLm5hbWUgPSBlci5uYW1lO1xuICAgICAgICAgZXJPYi52ZXJpZmllZCA9IGVyLmlzVmVyaWZpZWQ/ICdZZXMnOiAnTm8nO1xuICAgICAgICAgLy9lck9iLnZlcnNpb24gPSBlci5wcm9kdWN0VmVyc2lvbjtcbiAgICAgICAgIGVyT2Iub25saW5lID0gZXIuaXNPbmxpbmU/ICdZZXMnOiAnTm8nO1xuICAgICAgICAgZXJPYi5kaXNhYmxlZCA9IGVyLmRpc2FibGVkPyAnWWVzJzogJ05vJztcbiAgICAgICAgIGVyT2IudHlwZSA9ICdFZGdlIFJvdXRlcic7XG4gICAgICAgICBlck9iLnJvb3ROb2RlID0gaXNSb290Tm9kZTtcbiAgICAgICAgIGVyT2IudHVubmVsZXJFbmFibGVkID0gZXIudHVubmVsZXJFbmFibGVkPyBlci50dW5uZWxlckVuYWJsZWQ6ICdObyc7XG4gICAgICAgICBlck9iLnN5bmNTdGF0dXMgPSBlci5zeW5jU3RhdHVzPyBlci5zeW5jU3RhdHVzOidObyc7XG4gICAgICAgICBlck9iLmNyZWF0ZWRBdCA9IGVyLmNyZWF0ZWRBdDtcbiAgICAgICAgIGVyT2IudXBkYXRlZEF0ID0gZXIudXBkYXRlZEF0O1xuICAgcmV0dXJuIGVyT2I7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVNlcnZpY2VFZGdlUm91dGVyUG9saWN5Tm9kZShyYXdPYmosIGlzUm9vdE5vZGUgPSAnWWVzJykge1xuICAgICBjb25zdCBzZXJ2aWNlZXJwb2xpY3kgPSBuZXcgU2VydmljZUVSUG9saWN5KCk7XG4gICAgIC8vIHNlcnZpY2VlcnBvbGljeS5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgIHNlcnZpY2VlcnBvbGljeS51dWlkID0gcmF3T2JqLmlkO1xuICAgICBzZXJ2aWNlZXJwb2xpY3kubmFtZSA9IHJhd09iai5uYW1lO1xuICAgICBzZXJ2aWNlZXJwb2xpY3kudHlwZSA9ICdTZXJ2aWNlIFJvdXRlciBQb2xpY3knO1xuICAgICBzZXJ2aWNlZXJwb2xpY3kucm9vdE5vZGUgPSBpc1Jvb3ROb2RlO1xuICAgIHJldHVybiBzZXJ2aWNlZXJwb2xpY3k7XG4gIH1cbiAgcHVibGljIGNyZWF0ZUVkZ2VSb3V0ZXJQb2xpY3lOb2RlKHJhd09iaiwgaXNSb290Tm9kZSA9ICdZZXMnKSB7XG4gICAgY29uc3QgZXJwb2xpY3kgPSBuZXcgRVJQb2xpY3koKTtcbiAgICAgLy8gZXJwb2xpY3kuaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgZXJwb2xpY3kudXVpZCA9IHJhd09iai5pZDtcbiAgICAgIGVycG9saWN5Lm5hbWUgPSByYXdPYmoubmFtZTtcbiAgICAgIGVycG9saWN5LnR5cGUgPSAnRWRnZSBSb3V0ZXIgUG9saWN5JztcbiAgICAgIGVycG9saWN5LnJvb3ROb2RlID0gaXNSb290Tm9kZTtcbiAgICAgIGVycG9saWN5LmlzU3lzdGVtID0gcmF3T2JqLmlzU3lzdGVtO1xuICAgICAgZXJwb2xpY3kuc2VtYW50aWMgPSByYXdPYmouc2VtYW50aWM7XG4gICByZXR1cm4gZXJwb2xpY3k7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVNlcnZpY2VQb2xpY3lOb2RlKHJhd09iaiwgaXNSb290Tm9kZSA9ICdZZXMnKSB7XG4gICAgY29uc3QgYmluZEdycCA9IG5ldyBHcm91cCg0MzQyMywgJ0JpbmQtUG9saWNpZXMnLCAnQmluZCBTZXJ2aWNlIFBvbGljeScpO1xuICAgIGNvbnN0IGRpYWxHcnAgPSBuZXcgR3JvdXAoNDM1NDUsICdEaWFsLVBvbGljaWVzJywgJ0RpYWwgU2VydmljZSBQb2xpY3knKTtcblxuICAgIGNvbnN0IHNwb2xpY3k6YW55ID0gbmV3IFNlcnZpY2VQb2xpY3koKTtcbiAgICAgICAvLyBzcG9saWN5LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICBzcG9saWN5LmlkID0gODc5NTY7XG4gICAgICAgIHNwb2xpY3kudXVpZCA9IHJhd09iai5pZDtcbiAgICAgICAgc3BvbGljeS5uYW1lID0gcmF3T2JqLm5hbWU7XG4gICAgICAgIHNwb2xpY3kudHlwZSA9ICdTZXJ2aWNlIFBvbGljeSc7XG4gICAgICAgIHNwb2xpY3kucm9vdE5vZGUgPSBpc1Jvb3ROb2RlO1xuICAgICAgICBzcG9saWN5LmNsaWNrUHJvY2VzcyA9IFwiTm90IFlldFwiO1xuICAgICAgaWYocmF3T2JqLnR5cGU9PT0nQmluZCcpIHtcbiAgICAgICAgYmluZEdycC5jaGlsZHJlbi5wdXNoKHNwb2xpY3kpO1xuICAgICAgICByZXR1cm4gYmluZEdycDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpYWxHcnAuY2hpbGRyZW4ucHVzaChzcG9saWN5KTtcbiAgICAgICAgcmV0dXJuIGRpYWxHcnA7XG4gICAgICB9XG4gIH1cbiAgcHVibGljIGNyZWF0ZUlkZW50aXR5Tm9kZShyYXdPYmosIGlzUm9vdE5vZGUgPSAnWWVzJykge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gbmV3IElkZW50aXR5KCk7XG4gICAgICAgICAgICBlbmRwb2ludC5yb290Tm9kZSA9IGlzUm9vdE5vZGU7XG4gICAgICAgICAgIC8vIGVuZHBvaW50LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgIGVuZHBvaW50LmlkID0gNTQzMjtcbiAgICAgICAgICAgIGVuZHBvaW50LnV1aWQgPSByYXdPYmouaWQ7XG4gICAgICAgICAgICBlbmRwb2ludC5uYW1lID0gcmF3T2JqLm5hbWU7XG4gICAgICAgICAgICBlbmRwb2ludC5vbmxpbmUgPSByYXdPYmouaGFzQXBpU2Vzc2lvbiA9PT0gdHJ1ZSA/ICdZZXMnIDogJ05vJztcbiAgICAgICAgICAgIGVuZHBvaW50LnR5cGUgPSAnSWRlbnRpdHknO1xuICAgICAgICAgICAgZW5kcG9pbnQuY3JlYXRlZEF0ID0gcmF3T2JqLmNyZWF0ZWRBdDtcbiAgICAgICAgICAgIGVuZHBvaW50LnVwZGF0ZWRBdCA9IHJhd09iai51cGRhdGVkQXQ7XG4gICAgICAgICAgICBlbmRwb2ludC5zdGF0dXMgPSByYXdPYmouc2RrSW5mbyAhPT0gbnVsbCA/ICdSZWdpc3RlcmVkJyA6ICdOb3QgUmVnaXN0ZXJlZCc7XG4gICAgICAgICAgICAgIGlmIChyYXdPYmouc2RrSW5mbykge1xuICAgICAgICAgICAgICAgICAgZW5kcG9pbnQub3MgPSByYXdPYmouc2RrSW5mby50eXBlPyByYXdPYmouc2RrSW5mby50eXBlOiByYXdPYmouc2RrSW5mby5hcHBJZDtcbiAgICAgICAgICAgICAgICAgIGVuZHBvaW50Lm9zVmVyc2lvbiA9IHJhd09iai5zZGtJbmZvLnZlcnNpb247XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJhd09iai5hdXRoUG9saWN5ICYmIHJhd09iai5hdXRoUG9saWN5Lm5hbWUuaW5jbHVkZXMoXCJCcm93WmVyXCIpKSB7XG4gICAgICAgICAgICAgICAgIGVuZHBvaW50LnR5cGUgPSAnQnJvd1plciBJZGVudGl0eSc7XG4gICAgICAgICAgICAgIH1cbiAgICByZXR1cm4gICBlbmRwb2ludDtcbiAgfVxuICBwdWJsaWMgY3JlYXRlU2VydmljZU5vZGUocmF3T2JqLCBpc1Jvb3ROb2RlID0gJ1llcycpIHtcbiAgICAgIGNvbnN0IHNlcnZpY2VvYmogPSBuZXcgU2VydmljZSgpO1xuICAgICAgIC8vIHNlcnZpY2VvYmouaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICBzZXJ2aWNlb2JqLm5hbWUgPSByYXdPYmoubmFtZTtcbiAgICAgICAgc2VydmljZW9iai51dWlkID0gcmF3T2JqLmlkO1xuICAgICAgICBzZXJ2aWNlb2JqLnR5cGUgPSAnU2VydmljZSc7XG4gICAgICAgIHNlcnZpY2VvYmoucm9vdE5vZGUgPSBpc1Jvb3ROb2RlO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzd2l0aE5hbWUgPSBbXTtcbiAgICAgICAgcmF3T2JqICYmIHJhd09iai5yb2xlQXR0cmlidXRlcyAmJiByYXdPYmoucm9sZUF0dHJpYnV0ZXMuZmluZCgoc3JhdHRyKSA9PiB7XG4gICAgICAgICAgIGF0dHJpYnV0ZXN3aXRoTmFtZS5wdXNoKHNyYXR0cik7XG4gICAgICAgIH0pO1xuICAgIHJldHVybiBzZXJ2aWNlb2JqO1xuICB9XG5cbiAgICBwdWJsaWMgZ2V0UmVzb3VyY2VUcmVlT2JqKFxuICAgICAgICBuZXR3b3JrTmFtZSxcbiAgICAgICAgbmV0d29ya1N0YXR1cyxcbiAgICAgICAgc2VydmljZXMsXG4gICAgICAgIGlkZW50aXRpZXMsXG4gICAgICAgIHNlcnZpY2VQb2xpY2llcyxcbiAgICAgICAgZWRnZXJvdXRlcnMsXG4gICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgLy8gbmV0d29ya1Byb2R1Y3RWZXJzaW9uLFxuICAgICAgICBzZXJ2aWNlc190b3RhbENvdW50LCBpZGVudGl0aWVzX3RvdGFsQ291bnQsIGVkZ2Vyb3V0ZXJzX3RvdGFsQ291bnQsXG4gICAgICAgIHNlcnZpY2VfcG9saWNpZXNfdG90YWxDb3VudCwgZWRnZV9yb3V0ZXJfcG9saWNpZXNfdG90YWxDb3VudCxcbiAgICAgICAgc2VydmljZV9yb3V0ZXJfcG9saWNpZXNfdG90YWxDb3VudCxcbiAgICAgICAgdW5pcUlkLFxuICAgICAgICBsb2dnZXIsXG4gICAgICAgIC4uLmFyZ3M6IGFueVxuICAgICkge1xuICAgICAgIHRoaXMudW5pcUlJZCA9IHVuaXFJZDtcblxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVJZCgpIHtcbiAgICAgICAgICAgICsrdW5pcUlkO1xuICAgICAgICAgIC8vICArK3RoaXMudW5pcUlJZDtcbiAgICAgICAgICAgIHJldHVybiB1bmlxSWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjbGFzcyBSb290SnNvbiB7XG4gICAgICAgICAgICBpZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICAgICBuYW1lO1xuICAgICAgICAgICAgbGFzdElkID0gMDtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gW107XG4gICAgICAgICAgICBjb250ZXh0TWVudSA9ICdZZXMnO1xuICAgICAgICAgICAgdHlwZSA9ICdOZXR3b3JrJztcbiAgICAgICAgICAgIHJvb3ROb2RlID0gJ05vJztcbiAgICAgICAgICAgLy8gdmVyc2lvbiA9IG5ldHdvcmtQcm9kdWN0VmVyc2lvbjtcbiAgICAgICAgICAgIHN0YXR1cztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvb3RKc29uID0gbmV3IFJvb3RKc29uKCk7XG4gICAgICAgIHJvb3RKc29uLm5hbWUgPSAnTmV0d29yayc7XG4gICAgICAgIHJvb3RKc29uLnN0YXR1cyA9ICdQcm92aXNpb25lZCc7XG5cbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc0lkZW50aXRpZXNGb3JUcmVlKFxuICAgICAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLFxuICAgICAgICAgICAgaWRlbnRpdGllcyxcbiAgICAgICAgICAgIG54LFxuICAgICAgICAgICAgbnlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYoYXJnc1syXT09PWZhbHNlKSByZXR1cm4gaWRlbnRpdGllc0NoaWxkcmVuO1xuICAgICAgICAgICAgY29uc3Qgb2JqX2FycmF5ID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gbng7IGogPCBueTsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kcG9pbnQgPSBuZXcgSWRlbnRpdHkoKTtcbiAgICAgICAgICAgICAgICBlbmRwb2ludC5yb290Tm9kZSA9ICdZZXMnO1xuICAgICAgICAgICAgICAgIGVuZHBvaW50LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBlbmRwb2ludC51dWlkID0gaWRlbnRpdGllc1tqXS5pZDtcbiAgICAgICAgICAgICAgICBlbmRwb2ludC5uYW1lID0gaWRlbnRpdGllc1tqXS5uYW1lO1xuICAgICAgICAgICAgICAgIGVuZHBvaW50Lm9ubGluZSA9IGlkZW50aXRpZXNbal0uaGFzQXBpU2Vzc2lvbiA9PT0gdHJ1ZSA/ICdZZXMnIDogJ05vJztcbiAgICAgICAgICAgICAgICBlbmRwb2ludC50eXBlID0gJ0lkZW50aXR5JztcbiAgICAgICAgICAgICAgICBlbmRwb2ludC5jcmVhdGVkQXQgPSBpZGVudGl0aWVzW2pdLmNyZWF0ZWRBdDtcbiAgICAgICAgICAgICAgICBlbmRwb2ludC51cGRhdGVkQXQgPSBpZGVudGl0aWVzW2pdLnVwZGF0ZWRBdDtcbiAgICAgICAgICAgICAgICBlbmRwb2ludC5zdGF0dXMgPSBpZGVudGl0aWVzW2pdLnNka0luZm8gIT09IG51bGwgPyAnUmVnaXN0ZXJlZCcgOiAnTm90IFJlZ2lzdGVyZWQnO1xuICAgICAgICAgICAgICAgIGlmIChpZGVudGl0aWVzW2pdLnNka0luZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQub3MgPSBpZGVudGl0aWVzW2pdLnNka0luZm8udHlwZT8gaWRlbnRpdGllc1tqXS5zZGtJbmZvLnR5cGU6IGlkZW50aXRpZXNbal0uc2RrSW5mby5hcHBJZDtcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQub3NWZXJzaW9uID0gaWRlbnRpdGllc1tqXS5zZGtJbmZvLnZlcnNpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpZGVudGl0aWVzW2pdLmF1dGhQb2xpY3kgJiYgaWRlbnRpdGllc1tqXS5hdXRoUG9saWN5Lm5hbWUuaW5jbHVkZXMoXCJCcm93WmVyXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgZW5kcG9pbnQudHlwZSA9ICdCcm93WmVyIElkZW50aXR5JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2JqX2FycmF5LnB1c2goZW5kcG9pbnQpO1xuICAgICAgICAgICAgfSAvLyBlbmQgb2YgbWFpbiBmb3IgbG9vcFxuICAgICAgICAgIHJldHVybiBncm91cGluZygnSWRlbnRpdGllJywgaWRlbnRpdGllc0NoaWxkcmVuLCBvYmpfYXJyYXkpO1xuXG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc3ViR3JvdXBpbmcobmFtZSwgbWFpbkdyb3VwKSB7XG4gICAgICAgICAgIGNvbnN0IHBhZ2VTaXplID0gMjU7XG4gICAgICAgICAgIG1haW5Hcm91cC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKG1haW5Hcm91cC5jaGlsZHJlbi5sZW5ndGggPiBwYWdlU2l6ZSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW46YW55ID0gW107XG4gICAgICAgICAgICBsZXQgcGFnZU5vID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFpbkdyb3VwLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdEVsZW1lbnQgPSAoaSArIHBhZ2VTaXplKSA8IG1haW5Hcm91cC5jaGlsZHJlbi5sZW5ndGg/IChpICsgcGFnZVNpemUpIDogKG1haW5Hcm91cC5jaGlsZHJlbi5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVTID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgKyAncyBbJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWluR3JvdXAuY2hpbGRyZW5baV0ubmFtZS5zdWJzdHJpbmcoMCwgNCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFpbkdyb3VwLmNoaWxkcmVuW2xhc3RFbGVtZW50LTFdLm5hbWUuc3Vic3RyaW5nKDAsIDQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICddJztcbiAgICAgICAgICAgICAgICBjb25zdCBjaGxkID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlSWQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArICcgbmFtZSBzdGFydHMgd2l0aCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYWluR3JvdXAuY2hpbGRyZW5baV0ubmFtZS5zdWJzdHJpbmcoMCwgNCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICcgVG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgbWFpbkdyb3VwLmNoaWxkcmVuW2xhc3RFbGVtZW50LTFdLm5hbWUuc3Vic3RyaW5nKDAsIDQpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKGogPSBpOyBqIDwgbGFzdEVsZW1lbnQ7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgY2hsZC5jaGlsZHJlbi5wdXNoKG1haW5Hcm91cC5jaGlsZHJlbltqXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAtLWk7XG4gICAgICAgICAgICAgICAgICBjaGxkLm5hbWUgPSBjaGxkLm5hbWUgKyAnICgnICsgY2hsZC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNobGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWFpbkdyb3VwLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtYWluR3JvdXA7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBncm91cGluZyhuYW1lLCBjaGlsZHJlbiwgb2JqZWN0c0FycmF5KSB7XG4gICAgICAgICAgbGV0IHByb3RvY29sUkRQR3JwLCBwcm90b2NvbEhUVFBTR3JwLCBwcm90b2NvbEhUVFBHcnAsIHByb3RvY29sRlRQR3JwLCB1bnJlZ2lzdGVyZWRHcnA7XG5cbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ1NlcnZpY2UnKSB7XG4gICAgICAgICAgICAgcHJvdG9jb2xSRFBHcnAgPSBuZXcgR3JvdXAoXG4gICAgICAgICAgICAgICAgY3JlYXRlSWQoKSxcbiAgICAgICAgICAgICAgICAnU2VydmljZXMgW3Byb3RvY29sLVJEUF0nLFxuICAgICAgICAgICAgICAgICdTZXJ2aWNlcyBjcmVhdGVkIGZvciBSRFAgcHJvdG9jb2wnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgIHByb3RvY29sSFRUUFNHcnAgPSBuZXcgR3JvdXAoXG4gICAgICAgICAgICAgICAgY3JlYXRlSWQoKSxcbiAgICAgICAgICAgICAgICAnU2VydmljZXMgW3Byb3RvY29sLUhUVFBTXScsXG4gICAgICAgICAgICAgICAgJ1NlcnZpY2UgY3JlYXRlZCBmb3IgSFRUUFMgcHJvdG9jb2wnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgIHByb3RvY29sSFRUUEdycCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgICAgICBjcmVhdGVJZCgpLFxuICAgICAgICAgICAgICAgICdTZXJ2aWNlcyBbcHJvdG9jb2wtSFRUUF0nLFxuICAgICAgICAgICAgICAgICdTZXJ2aWNlIGNyZWF0ZWQgZm9yIEhUVFAgcHJvdG9jb2wnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgIHByb3RvY29sRlRQR3JwID0gbmV3IEdyb3VwKGNyZWF0ZUlkKCksICdTZXJ2aWNlcyBbcHJvdG9jb2wtRlRQXScsICdTZXJ2aWNlIGNyZWF0ZWQgZm9yIEZUUCBwcm90b2NvbCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAgaWYgKG5hbWUgPT09ICdJZGVudGl0aWUnKSB7XG4gICAgICAgICAgICAgdW5yZWdpc3RlcmVkR3JwID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVJZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnSWRlbnRpdGllc1tVbnJlZ2lzdGVyZWRdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lkZW50aXRpZXMgdGhhdCBhcmUgbm90IHJlZ2lzdGVyZWQnXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFiY2RHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgbmFtZSArICdzIFtBLURdJywgbmFtZSArJyBuYW1lIHN0YXJ0cyB3aXRoIEEgdG8gRCcpO1xuICAgICAgICAgICAgY29uc3QgZWZnaEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCBuYW1lICsgJ3MgW0UtSF0nLCBuYW1lICsnIG5hbWUgc3RhcnRzIHdpdGggRSB0byBIJyk7XG4gICAgICAgICAgICBjb25zdCBpamtsR3JwID0gbmV3IEdyb3VwKGNyZWF0ZUlkKCksIG5hbWUgKyAncyBbSS1MXScsIG5hbWUgKycgbmFtZSBzdGFydHMgd2l0aCBJIHRvIEwnKTtcbiAgICAgICAgICAgIGNvbnN0IG1ub3BHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgbmFtZSArICdzIFtNLVBdJywgbmFtZSArJyBuYW1lIHN0YXJ0cyB3aXRoIE0gdG8gUCcpO1xuICAgICAgICAgICAgY29uc3QgcXJzdEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCBuYW1lICsgJ3MgW1EtVF0nLCBuYW1lICsnIG5hbWUgc3RhcnRzIHdpdGggUSB0byBUJyk7XG4gICAgICAgICAgICBjb25zdCB1dnd4R3JwID0gbmV3IEdyb3VwKGNyZWF0ZUlkKCksIG5hbWUgKyAncyBbVS1YXScsIG5hbWUgKycgbmFtZSBzdGFydHMgd2l0aCBVIHRvIFgnKTtcbiAgICAgICAgICAgIGNvbnN0IHl6R3JwID0gbmV3IEdyb3VwKGNyZWF0ZUlkKCksICAgbmFtZSArICdzIFtZLVpdJywgbmFtZSArJyBuYW1lIHN0YXJ0cyB3aXRoIFkgYW5kIFonKTtcbiAgICAgICAgICAgIGNvbnN0IG9uZVRvOUdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCBuYW1lICsgJ3MgWzEtOV0nLCBuYW1lICsnIG5hbWUgc3RhcnRzIHdpdGggMCB0byA5Jyk7XG4gICAgICAgICAgICBjb25zdCBzcGVjaWFsQ2hhckdycCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgICAgICBjcmVhdGVJZCgpLFxuICAgICAgICAgICAgICAgIG5hbWUgKyAncyBbb3RoZXJzXScsXG4gICAgICAgICAgICAgICAgbmFtZSArICcgbmFtZSBzdGFydHMgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMnXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iamVjdHNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IG9iamVjdHNBcnJheVtpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGEgPSBvYmoubmFtZS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ0lkZW50aXRpZScgJiYgb2JqLnN0YXR1cyA9PT0gJ05vdCBSZWdpc3RlcmVkJykge1xuICAgICAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyZWRHcnAuY2hpbGRyZW4ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ1NlcnZpY2UnICYmIG9iai5wcm90b2NvbCA9PT0gJ3JkcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xSRFBHcnAuY2hpbGRyZW4ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ1NlcnZpY2UnICYmIG9iai5wcm90b2NvbCA9PT0gJ2h0dHBzJykge1xuICAgICAgICAgICAgICAgICAgICBwcm90b2NvbEhUVFBTR3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdTZXJ2aWNlJyAmJiBvYmoucHJvdG9jb2wgPT09ICdodHRwJykge1xuICAgICAgICAgICAgICAgICAgICBwcm90b2NvbEhUVFBHcnAuY2hpbGRyZW4ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ1NlcnZpY2UnICYmICBvYmoucHJvdG9jb2wgPT09ICdmdHAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3RvY29sRlRQR3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ2EnIHx8IGNoYSA9PT0gJ2InIHx8IGNoYSA9PT0gJ2MnIHx8IGNoYSA9PT0gJ2QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFiY2RHcnAuY2hpbGRyZW4ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAnZScgfHwgY2hhID09PSAnZicgfHwgY2hhID09PSAnZycgfHwgY2hhID09PSAnaCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZWZnaEdycC5jaGlsZHJlbi5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdpJyB8fCBjaGEgPT09ICdqJyB8fCBjaGEgPT09ICdrJyB8fCBjaGEgPT09ICdsJykge1xuICAgICAgICAgICAgICAgICAgICBpamtsR3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ20nIHx8IGNoYSA9PT0gJ24nIHx8IGNoYSA9PT0gJ28nIHx8IGNoYSA9PT0gJ3AnKSB7XG4gICAgICAgICAgICAgICAgICAgIG1ub3BHcnAuY2hpbGRyZW4ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAncScgfHwgY2hhID09PSAncicgfHwgY2hhID09PSAncycgfHwgY2hhID09PSAndCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcXJzdEdycC5jaGlsZHJlbi5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICd1JyB8fCBjaGEgPT09ICd2JyB8fCBjaGEgPT09ICd3JyB8fCBjaGEgPT09ICd4Jykge1xuICAgICAgICAgICAgICAgICAgICB1dnd4R3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ3knIHx8IGNoYSA9PT0gJ3onKSB7XG4gICAgICAgICAgICAgICAgICAgIHl6R3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICcwJyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICcxJyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICcyJyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICczJyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc0JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc1JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc2JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc3JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc4JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc5J1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBvbmVUbzlHcnAuY2hpbGRyZW4ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNwZWNpYWxDaGFyR3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IC8vIGVuZCBtYWluIGZvciBsb29wXG5cbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ1NlcnZpY2UnKSB7XG4gICAgICAgICAgICBpZiAocHJvdG9jb2xSRFBHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHByb3RvY29sUkRQR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xSRFBHcnAubmFtZSA9IHByb3RvY29sUkRQR3JwLm5hbWUgKyAnKCcgKyBwcm90b2NvbFJEUEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaChwcm90b2NvbFJEUEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvdG9jb2xIVFRQU0dycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xIVFRQU0dycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHByb3RvY29sSFRUUFNHcnAubmFtZSA9IHByb3RvY29sSFRUUFNHcnAubmFtZSArICcoJyArIHByb3RvY29sSFRUUFNHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2gocHJvdG9jb2xIVFRQU0dycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvdG9jb2xIVFRQR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwcm90b2NvbEhUVFBHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBwcm90b2NvbEhUVFBHcnAubmFtZSA9IHByb3RvY29sSFRUUEdycC5uYW1lICsgJygnICsgcHJvdG9jb2xIVFRQR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHByb3RvY29sSFRUUEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvdG9jb2xGVFBHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHByb3RvY29sRlRQR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xGVFBHcnAubmFtZSA9IHByb3RvY29sRlRQR3JwLm5hbWUgKyAnKCcgKyBwcm90b2NvbEZUUEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaChwcm90b2NvbEZUUEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdJZGVudGl0aWUnICYmIHVucmVnaXN0ZXJlZEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdW5yZWdpc3RlcmVkR3JwLm5hbWUgPSB1bnJlZ2lzdGVyZWRHcnAubmFtZSArICcoJyArIHVucmVnaXN0ZXJlZEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaCh1bnJlZ2lzdGVyZWRHcnApO1xuICAgICAgICAgICAgICAgIHN1Ykdyb3VwaW5nKG5hbWUsIHVucmVnaXN0ZXJlZEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3BlY2lhbENoYXJHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNwZWNpYWxDaGFyR3JwLm5hbWUgPSBzcGVjaWFsQ2hhckdycC5uYW1lICsgJygnICsgc3BlY2lhbENoYXJHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2goc3BlY2lhbENoYXJHcnApO1xuICAgICAgICAgICAgICAgIHN1Ykdyb3VwaW5nKG5hbWUsIHNwZWNpYWxDaGFyR3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhYmNkR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhYmNkR3JwLm5hbWUgPSBhYmNkR3JwLm5hbWUgKyAnKCcgKyBhYmNkR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGFiY2RHcnApO1xuICAgICAgICAgICAgICAgIHN1Ykdyb3VwaW5nKG5hbWUsIGFiY2RHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVmZ2hHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGVmZ2hHcnAubmFtZSA9IGVmZ2hHcnAubmFtZSArICcoJyArIGVmZ2hHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2goZWZnaEdycCk7XG4gICAgICAgICAgICAgICAgc3ViR3JvdXBpbmcobmFtZSwgZWZnaEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaWprbEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWprbEdycC5uYW1lID0gaWprbEdycC5uYW1lICsgJygnICsgaWprbEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaChpamtsR3JwKTtcbiAgICAgICAgICAgICAgICBzdWJHcm91cGluZyhuYW1lLCBpamtsR3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtbm9wR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBtbm9wR3JwLm5hbWUgPSBtbm9wR3JwLm5hbWUgKyAnKCcgKyBtbm9wR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5wdXNoKG1ub3BHcnApO1xuICAgICAgICAgICAgICAgIHN1Ykdyb3VwaW5nKG5hbWUsIG1ub3BHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHFyc3RHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHFyc3RHcnAubmFtZSA9IHFyc3RHcnAubmFtZSArICcoJyArIHFyc3RHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2gocXJzdEdycCk7XG4gICAgICAgICAgICAgICAgc3ViR3JvdXBpbmcobmFtZSwgcXJzdEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXZ3eEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdXZ3eEdycC5uYW1lID0gdXZ3eEdycC5uYW1lICsgJygnICsgdXZ3eEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaCh1dnd4R3JwKTtcbiAgICAgICAgICAgICAgICBzdWJHcm91cGluZyhuYW1lLCB1dnd4R3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh5ekdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgeXpHcnAubmFtZSA9IHl6R3JwLm5hbWUgKyAnKCcgKyB5ekdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaCh5ekdycCk7XG4gICAgICAgICAgICAgICAgc3ViR3JvdXBpbmcobmFtZSwgeXpHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9uZVRvOUdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgb25lVG85R3JwLm5hbWUgPSBvbmVUbzlHcnAubmFtZSArICcoJyArIG9uZVRvOUdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaChvbmVUbzlHcnApO1xuICAgICAgICAgICAgICAgIHN1Ykdyb3VwaW5nKG5hbWUsIG9uZVRvOUdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzU2VydmljZVBvbGljaWVzRm9yVHJlZShcbiAgICAgICAgICAgIHNlcnZpY2VQb2xpY3lDaGlsZHJlbixcbiAgICAgICAgICAgIHNlcnZpY2VQb2xpY2llcyxcbiAgICAgICAgICAgIG54LFxuICAgICAgICAgICAgbnlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYoYXJnc1swXT09PWZhbHNlKSByZXR1cm4gc2VydmljZVBvbGljeUNoaWxkcmVuO1xuXG4gICAgICAgICAgY29uc3QgYmluZEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCAnQmluZC1Qb2xpY2llcycsICdCaW5kIFNlcnZpY2UgUG9saWN5Jyk7XG4gICAgICAgICAgY29uc3QgZGlhbEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCAnRGlhbC1Qb2xpY2llcycsICdEaWFsIFNlcnZpY2UgUG9saWN5Jyk7XG5cbiAgICAgICAgICBzZXJ2aWNlUG9saWNpZXMuZm9yRWFjaCggKHNwKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcG9saWN5ID0gbmV3IFNlcnZpY2VQb2xpY3koKTtcbiAgICAgICAgICAgICAgICBzcG9saWN5LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBzcG9saWN5LnV1aWQgPSBzcC5pZDtcbiAgICAgICAgICAgICAgICBzcG9saWN5Lm5hbWUgPSBzcC5uYW1lO1xuICAgICAgICAgICAgICAgIHNwb2xpY3kudHlwZSA9ICdTZXJ2aWNlIFBvbGljeSc7XG4gICAgICAgICAgICAgICAgc3BvbGljeS5yb290Tm9kZSA9ICdZZXMnO1xuICAgICAgICAgICAgICAgIGlmKHNwLnR5cGU9PT0nQmluZCcpIHtcbiAgICAgICAgICAgICAgICAgIGJpbmRHcnAuY2hpbGRyZW4ucHVzaChzcG9saWN5KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZGlhbEdycC5jaGlsZHJlbi5wdXNoKHNwb2xpY3kpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICB9ICk7XG5cbiAgICAgICAgICAgYmluZEdycC5uYW1lID0gYmluZEdycC5uYW1lICsgJygnKyBiaW5kR3JwLmNoaWxkcmVuLmxlbmd0aCArJyknO1xuICAgICAgICAgICBzZXJ2aWNlUG9saWN5Q2hpbGRyZW4uY2hpbGRyZW4ucHVzaChiaW5kR3JwKTtcbiAgICAgICAgICAgc3ViR3JvdXBpbmcoJ0JpbmQtUG9saWNpZScsIGJpbmRHcnApO1xuICAgICAgICAgICBkaWFsR3JwLm5hbWUgPSBkaWFsR3JwLm5hbWUgKyAnKCcrIGRpYWxHcnAuY2hpbGRyZW4ubGVuZ3RoICsnKSc7XG4gICAgICAgICAgIHNlcnZpY2VQb2xpY3lDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGRpYWxHcnApO1xuICAgICAgICAgICBzdWJHcm91cGluZygnRGlhbC1Qb2xpY2llJywgZGlhbEdycCk7XG4gICAgICAgICAgcmV0dXJuIHNlcnZpY2VQb2xpY3lDaGlsZHJlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NTZXJ2aWNlc0ZvclRyZWUoXG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLFxuICAgICAgICAgICAgc2VydmljZXMsXG4gICAgICAgICAgICBueCxcbiAgICAgICAgICAgIG55XG4gICAgICAgICkge1xuICAgICAgICAgIGlmKGFyZ3NbMV09PT1mYWxzZSkgcmV0dXJuIHNlcnZpY2VzQ2hpbGRyZW47XG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlc3RyZWUgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBueDsgaSA8IG55OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlb2JqID0gbmV3IFNlcnZpY2UoKTtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLm5hbWUgPSBzZXJ2aWNlc1tpXS5uYW1lO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VvYmoudXVpZCA9IHNlcnZpY2VzW2ldLmlkO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VvYmoudHlwZSA9ICdTZXJ2aWNlJztcbiAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLnJvb3ROb2RlID0gJ1llcyc7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzd2l0aE5hbWUgPSBbXTtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzd2l0aE5hbWUucHVzaCgnQCcgKyBzZXJ2aWNlc1tpXS5uYW1lKTtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlc1tpXSAmJiBzZXJ2aWNlc1tpXS5yb2xlQXR0cmlidXRlcyAmJiBzZXJ2aWNlc1tpXS5yb2xlQXR0cmlidXRlcy5maW5kKChzcmF0dHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc3dpdGhOYW1lLnB1c2goc3JhdHRyKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGxldCBpc0l0UkRQUHJvdG9jb2xBdHRyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IGlzSXRIVFRQUHJvdG9jb2xBdHRyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IGlzSXRIVFRQU1Byb3RvY29sQXR0ciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCBpc0l0RlRQUHJvdG9jb2xBdHRyID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGF0dHJpYnV0ZXN3aXRoTmFtZS5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHRyT2IgPSBuZXcgQXR0cmlidXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJPYi5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJPYi5uYW1lID0gYXR0cmlidXRlc3dpdGhOYW1lW2tdO1xuICAgICAgICAgICAgICAgICAgICBhdHRyT2IudHlwZSA9ICdTZXJ2aWNlIEF0dHJpYnV0ZSc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dE5hbWUgPSBhdHRyaWJ1dGVzd2l0aE5hbWVba10udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSXRSRFBQcm90b2NvbEF0dHIgPT09IGZhbHNlICYmIGF0dE5hbWUuaW5jbHVkZXMoJ3JkcCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLnByb3RvY29sID0gJ3JkcCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0l0UkRQUHJvdG9jb2xBdHRyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNJdEhUVFBTUHJvdG9jb2xBdHRyID09PSBmYWxzZSAmJiBhdHROYW1lLmluY2x1ZGVzKCdodHRwcycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLnByb3RvY29sID0gJ2h0dHBzJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzSXRIVFRQU1Byb3RvY29sQXR0ciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSXRIVFRQU1Byb3RvY29sQXR0ciA9PT0gZmFsc2UgJiYgaXNJdEhUVFBQcm90b2NvbEF0dHIgPT09IGZhbHNlICYmIGF0dE5hbWUuaW5jbHVkZXMoJ2h0dHAnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZW9iai5wcm90b2NvbCA9ICdodHRwJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzSXRIVFRQUHJvdG9jb2xBdHRyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNJdEZUUFByb3RvY29sQXR0ciA9PT0gZmFsc2UgJiYgYXR0TmFtZS5pbmNsdWRlcygnZnRwJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VvYmoucHJvdG9jb2wgPSAnZnRwJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzSXRGVFBQcm90b2NvbEF0dHIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBlbmQgaW5uZXIgZm9yIGxvb3BcbiAgICAgICAgICAgICAgICBzZXJ2aWNlc3RyZWUucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH0gLy8gZW5kIGZvciBsb29wXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBpbmcoJ1NlcnZpY2UnLCBzZXJ2aWNlc0NoaWxkcmVuLCBzZXJ2aWNlc3RyZWUpO1xuICAgICAgICB9IC8vIGVuZCBvZiBwcm9jZXNzU2VydmljZXNGb3JUcmVlXG5cbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc0VkZ2VSb3V0ZXJQb2xpY2llc0ZvclRyZWUoXG4gICAgICAgICAgICBlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbixcbiAgICAgICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgICAgIG54LFxuICAgICAgICAgICAgbnlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYoYXJnc1s0XT09PWZhbHNlKSByZXR1cm4gZWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW47XG4gICAgICAgICAgY29uc3QgcG9saWNpZXNfQXJyYXkgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBueDsgaSA8IG55OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnBvbGljeSA9IG5ldyBFUlBvbGljeSgpO1xuICAgICAgICAgICAgICAgIGVycG9saWN5LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBlcnBvbGljeS51dWlkID0gZWRnZVJvdXRlclBvbGljaWVzW2ldLmlkO1xuICAgICAgICAgICAgICAgIGVycG9saWN5Lm5hbWUgPSBlZGdlUm91dGVyUG9saWNpZXNbaV0ubmFtZTtcbiAgICAgICAgICAgICAgICBlcnBvbGljeS50eXBlID0gJ0VkZ2UgUm91dGVyIFBvbGljeSc7XG4gICAgICAgICAgICAgICAgZXJwb2xpY3kucm9vdE5vZGUgPSAnWWVzJztcbiAgICAgICAgICAgICAgICBlcnBvbGljeS5pc1N5c3RlbSA9IGVkZ2VSb3V0ZXJQb2xpY2llc1tpXS5pc1N5c3RlbTtcbiAgICAgICAgICAgICAgICBlcnBvbGljeS5zZW1hbnRpYyA9IGVkZ2VSb3V0ZXJQb2xpY2llc1tpXS5zZW1hbnRpYztcbiAgICAgICAgICAgICAgICBwb2xpY2llc19BcnJheS5wdXNoKGVycG9saWN5KTtcbiAgICAgICAgICAgIH0gLy8gZW5kIG9mIG1haW4gZm9yIGxvb3BcbiAgICAgICAgICAgIHJldHVybiBncm91cGluZygnRWRnZSBSb3V0ZXIgUG9saWNpZXMnLGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuLHBvbGljaWVzX0FycmF5KTtcbiAgICAgICAgfSAvLyBlbmRcblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzU2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llc0ZvclRyZWUoXG4gICAgICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4sXG4gICAgICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzLFxuICAgICAgICAgICAgbngsXG4gICAgICAgICAgICBueVxuICAgICAgICApIHtcbiAgICAgICAgaWYoYXJnc1s1XT09PWZhbHNlKSByZXR1cm4gc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IG54OyBpIDwgbnk7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VlcnBvbGljeSA9IG5ldyBTZXJ2aWNlRVJQb2xpY3koKTtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlZXJwb2xpY3kuaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VlcnBvbGljeS51dWlkID0gc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llc1tpXS5pZDtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlZXJwb2xpY3kubmFtZSA9IHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNbaV0ubmFtZTtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlZXJwb2xpY3kudHlwZSA9ICdTZXJ2aWNlIFJvdXRlciBQb2xpY3knO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VlcnBvbGljeS5yb290Tm9kZSA9ICdZZXMnO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHNlcnZpY2VlcnBvbGljeSk7XG4gICAgICAgICAgICB9IC8vIGVuZCBvZiBtYWluIGZvciBsb29wXG4gICAgICAgICAgICByZXR1cm4gc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuO1xuICAgICAgICB9IC8vIGVuZFxuXG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NFZGdlUm91dGVyc0ZvclRyZWUoXG4gICAgICAgICAgICByb3V0ZXJzQ2hpbGRyZW4sXG4gICAgICAgICAgICBlZGdlcm91dGVycyxcbiAgICAgICAgICAgIG54LFxuICAgICAgICAgICAgbnlcbiAgICAgICAgKSB7XG4gICAgICAgIGlmKGFyZ3NbM109PT1mYWxzZSkgcmV0dXJuIHJvdXRlcnNDaGlsZHJlbjtcblxuICAgICAgICAgICAgY29uc3QgZXJfb2JqZWN0cyA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IG54OyBpIDwgbnk7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVyT2IgPSBuZXcgRVJvdXRlcigpO1xuICAgICAgICAgICAgICAgIGVyT2IuaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVyID0gZWRnZXJvdXRlcnNbaV07XG4gICAgICAgICAgICAgICAgaWYgKGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyT2IudXVpZCA9IGVyLmlkO1xuICAgICAgICAgICAgICAgICAgICBlck9iLm5hbWUgPSBlci5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBlck9iLnZlcmlmaWVkID0gZXIuaXNWZXJpZmllZD8gJ1llcyc6ICdObyc7XG4gICAgICAgICAgICAgICAgICAgIC8vZXJPYi52ZXJzaW9uID0gZXIucHJvZHVjdFZlcnNpb247XG4gICAgICAgICAgICAgICAgICAgIGVyT2Iub25saW5lID0gZXIuaXNPbmxpbmU/ICdZZXMnOiAnTm8nO1xuICAgICAgICAgICAgICAgICAgICBlck9iLmRpc2FibGVkID0gZXIuZGlzYWJsZWQ/ICdZZXMnOiAnTm8nO1xuICAgICAgICAgICAgICAgICAgICBlck9iLnR5cGUgPSAnRWRnZSBSb3V0ZXInO1xuICAgICAgICAgICAgICAgICAgICBlck9iLnJvb3ROb2RlID0gJ1llcyc7XG4gICAgICAgICAgICAgICAgICAgIGVyT2IudHVubmVsZXJFbmFibGVkID0gZXIudHVubmVsZXJFbmFibGVkPyBlci50dW5uZWxlckVuYWJsZWQ6ICdObyc7XG4gICAgICAgICAgICAgICAgICAgIGVyT2Iuc3luY1N0YXR1cyA9IGVyLnN5bmNTdGF0dXM/IGVyLnN5bmNTdGF0dXM6J05vJztcbiAgICAgICAgICAgICAgICAgICAgZXJPYi5jcmVhdGVkQXQgPSBlci5jcmVhdGVkQXQ7XG4gICAgICAgICAgICAgICAgICAgIGVyT2IudXBkYXRlZEF0ID0gZXIudXBkYXRlZEF0O1xuICAgICAgICAgICAgICAgICAgICBlcl9vYmplY3RzLnB1c2goZXJPYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBlbmQgbWFpbiBmb3IgbG9vcFxuICAgICAgICAgICAvLyByZXR1cm4gcm91dGVyc0NoaWxkcmVuO1xuICAgICAgICAgICByZXR1cm4gZ3JvdXBpbmcoJ0VkZ2UgUm91dGVyJywgcm91dGVyc0NoaWxkcmVuLCBlcl9vYmplY3RzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNyZWF0ZUlkKCkgZ2VuZXJhdGVzIG5vZGUgSWQgMSwyLDMsNCw1IGZvciB0aGUgZm9sbG93aW5nIGZpdmUgbm9kZXMuIHRoaXMgaWQgaXMgdXNlZCB0byBzZWFyY2ggY2FwYWJpbGl0eS5cbiAgICAgICAgbGV0IHNlcnZpY1BvbGljaWVzQ2hpbGRyZW4gPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgc2VydmljUG9saWNpZXNDaGlsZHJlbi5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgIHNlcnZpY1BvbGljaWVzQ2hpbGRyZW4uZmlyc3RDaGlsZCA9ICdZZXMnO1xuICAgICAgICBzZXJ2aWNQb2xpY2llc0NoaWxkcmVuLm5hbWUgPSAnU2VydmljZSBQb2xpY2llcygnKyBzZXJ2aWNlX3BvbGljaWVzX3RvdGFsQ291bnQgKycpJztcblxuICAgICAgICBsZXQgc2VydmljZXNDaGlsZHJlbiA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgc2VydmljZXNDaGlsZHJlbi5maXJzdENoaWxkID0gJ1llcyc7XG4gICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4ubmFtZSA9ICdTZXJ2aWNlcygnKyBzZXJ2aWNlc190b3RhbENvdW50ICsnKSc7XG5cbiAgICAgICAgbGV0IGlkZW50aXRpZXNDaGlsZHJlbiA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICBpZGVudGl0aWVzQ2hpbGRyZW4uaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICBpZGVudGl0aWVzQ2hpbGRyZW4uZmlyc3RDaGlsZCA9ICdZZXMnO1xuICAgICAgICBpZGVudGl0aWVzQ2hpbGRyZW4ubmFtZSA9ICdJZGVudGl0aWVzKCcrIGlkZW50aXRpZXNfdG90YWxDb3VudCArJyknO1xuXG4gICAgICAgIGxldCBlZGdlcm91dGVyQ2hpbGRyZW4gPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgZWRnZXJvdXRlckNoaWxkcmVuLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgZWRnZXJvdXRlckNoaWxkcmVuLmZpcnN0Q2hpbGQgPSAnWWVzJztcbiAgICAgICAgZWRnZXJvdXRlckNoaWxkcmVuLm5hbWUgPSAnRWRnZSBSb3V0ZXJzKCcrIGVkZ2Vyb3V0ZXJzX3RvdGFsQ291bnQgKycpJztcblxuICAgICAgICBsZXQgZWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4gPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgZWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4uaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICBlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbi5maXJzdENoaWxkID0gJ1llcyc7XG4gICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuLm5hbWUgPSAnRWRnZSBSb3V0ZXIgUG9saWNpZXMoJysgZWRnZV9yb3V0ZXJfcG9saWNpZXNfdG90YWxDb3VudCArJyknO1xuXG4gICAgICAgIGxldCBzZXJ2aWNlRWRnZVJvdXRlclBvbGljZXNDaGlsZHJlbiA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljZXNDaGlsZHJlbi5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNlc0NoaWxkcmVuLmZpcnN0Q2hpbGQgPSAnWWVzJztcbiAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2VzQ2hpbGRyZW4ubmFtZSA9ICdTZXJ2aWNlIEVkZ2UgUm91dGVyIFBvbGljaWVzKCcrIHNlcnZpY2Vfcm91dGVyX3BvbGljaWVzX3RvdGFsQ291bnQgKycpJztcblxuICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuID0gcHJvY2Vzc1NlcnZpY2VzRm9yVHJlZShcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4sXG4gICAgICAgICAgICBzZXJ2aWNlcyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBzZXJ2aWNlcy5sZW5ndGhcbiAgICAgICAgKTtcblxuICAgICAgICBlZGdlcm91dGVyQ2hpbGRyZW4gPSBwcm9jZXNzRWRnZVJvdXRlcnNGb3JUcmVlKFxuICAgICAgICAgICAgZWRnZXJvdXRlckNoaWxkcmVuLFxuICAgICAgICAgICAgZWRnZXJvdXRlcnMsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgZWRnZXJvdXRlcnMubGVuZ3RoXG4gICAgICAgICk7XG5cbiAgICAgICAgc2VydmljUG9saWNpZXNDaGlsZHJlbiA9IHByb2Nlc3NTZXJ2aWNlUG9saWNpZXNGb3JUcmVlKFxuICAgICAgICAgICAgc2VydmljUG9saWNpZXNDaGlsZHJlbixcbiAgICAgICAgICAgIHNlcnZpY2VQb2xpY2llcyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBzZXJ2aWNlUG9saWNpZXMubGVuZ3RoXG4gICAgICAgICk7XG5cbiAgICAgICAgZWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4gPSBwcm9jZXNzRWRnZVJvdXRlclBvbGljaWVzRm9yVHJlZShcbiAgICAgICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuLFxuICAgICAgICAgICAgZWRnZVJvdXRlclBvbGljaWVzLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llcy5sZW5ndGhcbiAgICAgICAgKTtcblxuICAgICAgICBpZGVudGl0aWVzQ2hpbGRyZW4gPSBwcm9jZXNzSWRlbnRpdGllc0ZvclRyZWUoXG4gICAgICAgICAgICBpZGVudGl0aWVzQ2hpbGRyZW4sXG4gICAgICAgICAgICBpZGVudGl0aWVzLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIGlkZW50aXRpZXMubGVuZ3RoXG4gICAgICAgICk7XG4gICAgICAgIC8vc2VydmljZVJvdXRlclBvbGljaWVzXG4gICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNlc0NoaWxkcmVuID0gcHJvY2Vzc1NlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNGb3JUcmVlKFxuICAgICAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2VzQ2hpbGRyZW4sXG4gICAgICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXMubGVuZ3RoXG4gICAgICAgICk7XG5cbiAgICAgICAgcm9vdEpzb24uY2hpbGRyZW4ucHVzaChzZXJ2aWNQb2xpY2llc0NoaWxkcmVuKTtcbiAgICAgICAgcm9vdEpzb24uY2hpbGRyZW4ucHVzaChzZXJ2aWNlc0NoaWxkcmVuKTtcbiAgICAgICAgcm9vdEpzb24uY2hpbGRyZW4ucHVzaChpZGVudGl0aWVzQ2hpbGRyZW4pO1xuICAgICAgICByb290SnNvbi5jaGlsZHJlbi5wdXNoKGVkZ2Vyb3V0ZXJDaGlsZHJlbik7XG4gICAgICAgIHJvb3RKc29uLmNoaWxkcmVuLnB1c2goZWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4pO1xuICAgICAgICByb290SnNvbi5jaGlsZHJlbi5wdXNoKHNlcnZpY2VFZGdlUm91dGVyUG9saWNlc0NoaWxkcmVuKTtcbiAgICAgICAgcm9vdEpzb24ubGFzdElkID0gdW5pcUlkO1xuXG4gICAgICAgIHJldHVybiByb290SnNvbjtcbiAgICB9XG5cbn1cbiJdfQ==
|
|
591
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay12aXN1YWxpemVyLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy92aXN1YWxpemVyL25ldHdvcmstdmlzdWFsaXplci9uZXR3b3JrLXZpc3VhbGl6ZXIuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDLE1BQU0sT0FBTyxRQUFRO0lBb0JqQjtRQUNJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxPQUFPO0lBb0JoQjtRQUNJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7Q0FDSjtBQUNELE1BQU0sT0FBTyxNQUFNO0lBUWpCO1FBQ0ksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBQ0QsTUFBTSxPQUFPLEtBQUs7SUFPZCxZQUFZLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxH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LEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtvQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzlCO3FCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtvQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzlCO3FCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtvQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzlCO3FCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtvQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzlCO3FCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtvQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzlCO3FCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFO29CQUNuQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDNUI7cUJBQU0sSUFDSCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztv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dEUsZ0NBQWdDLEVBQ2hDLHlCQUF5QixFQUN6QixDQUFDLEVBQ0QseUJBQXlCLENBQUMsTUFBTSxDQUNuQyxDQUFDO1FBRUYsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMvQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDM0MsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ25ELFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDekQsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFekIsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzsrR0FobkJRLHVCQUF1QjttSEFBdkIsdUJBQXVCLGNBRnBCLE1BQU07OzRGQUVULHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgY2xhc3MgSWRlbnRpdHkge1xuICAgIGlkO1xuICAgIHV1aWQ7XG4gICAgbmFtZTtcbiAgICBzdGF0dXM7XG4gICAgdHlwZTtcbiAgICByb290Tm9kZTtcbiAgICBzZXJ2ZXJFZ3Jlc3NQcm90b2NvbDtcbiAgICBzZXJ2ZXJFZ3Jlc3NIb3N0O1xuICAgIHNlcnZlckVncmVzc1BvcnQ7XG4gICAgcG9zdHVyZUNoZWNrcztcbiAgICBldmVudHM7XG4gICAgb3M7XG4gICAgdXRpbGl6YXRpb247XG4gICAgY2hpbGRyZW47XG4gICAgY29udGV4dE1lbnU7XG4gICAgb25saW5lO1xuICAgIG9zVmVyc2lvbjtcbiAgICBjcmVhdGVkQXQ7XG4gICAgdXBkYXRlZEF0O1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnJvb3ROb2RlID0gJ05vJztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51ID0gJ1llcyc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VydmljZSB7XG4gICAgaWQ7XG4gICAgdXVpZDtcbiAgICBuYW1lO1xuICAgIGludGVyY2VwdF9ob3N0O1xuICAgIGludGVyY2VwdF9wb3J0O1xuICAgIGVuY3J5cHRlZDtcbiAgICByb290Tm9kZTtcbiAgICBzZXJ2ZXJFZ3Jlc3NIb3N0O1xuICAgIHNlcnZlckVncmVzc1BvcnQ7XG4gICAgc3RhdHVzO1xuICAgIHByb3RvY29sO1xuICAgIHR5cGU7XG4gICAgY2hpbGRyZW47XG4gICAgYXR0cmlidXRlcztcbiAgICB1dGlsaXphdGlvbjtcbiAgICBjb250ZXh0TWVudTtcbiAgICBjcmVhdGVkQXQ7XG4gICAgdXBkYXRlZEF0O1xuICAgIGludGVyY2VwdDtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yb290Tm9kZSA9ICdObyc7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudSA9ICdZZXMnO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBDb25maWcge1xuICB1dWlkO1xuICBpZDtcbiAgbmFtZTtcbiAgZGF0YTtcbiAgY2hpbGRyZW47XG4gIGNvbnRleHRNZW51O1xuICByb290Tm9kZTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLnJvb3ROb2RlID0gJ05vJztcbiAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgIHRoaXMuY29udGV4dE1lbnUgPSAnWWVzJztcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEdyb3VwIHtcbiAgICBpZDtcbiAgICBuYW1lO1xuICAgIHR5cGU7XG4gICAgZ3JvdXA7XG4gICAgY2hpbGRyZW47XG5cbiAgICBjb25zdHJ1Y3RvcihpZHYsIHMsIGcpIHtcbiAgICAgICAgdGhpcy5pZCA9IGlkdjtcbiAgICAgICAgdGhpcy5uYW1lID0gcztcbiAgICAgICAgdGhpcy5ncm91cCA9IGc7XG4gICAgICAgIHRoaXMudHlwZSA9ICdHcm91cCc7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlUG9saWN5IHtcbiAgICBpZDtcbiAgICB1dWlkO1xuICAgIG5hbWU7XG4gICAgdHlwZTtcbiAgICByb290Tm9kZTtcbiAgICBjaGlsZHJlbjtcbiAgICBjb250ZXh0TWVudTtcbiAgICBjcmVhdGVkQXQ7XG4gICAgdXBkYXRlZEF0O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucm9vdE5vZGUgPSAnTm8nO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnUgPSAnWWVzJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBdHRyaWJ1dGUge1xuICAgIGlkO1xuICAgIG5hbWU7XG4gICAgdHlwZTtcbiAgICBjaGlsZHJlbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJQb2xpY3kge1xuICAgIGlkO1xuICAgIHV1aWQ7XG4gICAgbmFtZTtcbiAgICBzdGF0dXM7XG4gICAgc2l6ZTtcbiAgICB0eXBlO1xuICAgIHNlbWFudGljO1xuICAgIGlzU3lzdGVtO1xuICAgIHJvb3ROb2RlO1xuICAgIGNoaWxkcmVuO1xuICAgIGNvbnRleHRNZW51O1xuICAgIGNyZWF0ZWRBdDtcbiAgICB1cGRhdGVkQXQ7XG4gICAgZGF0YTtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yb290Tm9kZSA9ICdObyc7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudSA9ICdZZXMnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlcnZpY2VFUlBvbGljeSB7XG4gICAgaWQ7XG4gICAgdXVpZDtcbiAgICBuYW1lO1xuICAgIHN0YXR1cztcbiAgICBzaXplO1xuICAgIHR5cGU7XG4gICAgcm9vdE5vZGU7XG4gICAgY2hpbGRyZW47XG4gICAgY29udGV4dE1lbnU7XG4gICAgY3JlYXRlZEF0O1xuICAgIHVwZGF0ZWRBdDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnJvb3ROb2RlID0gJ05vJztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51ID0gJ1llcyc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJvdXRlciB7XG4gICAgaWQ7XG4gICAgdXVpZDtcbiAgICBuYW1lO1xuICAgIHZlcmlmaWVkO1xuICAgIHNpemU7XG4gICAgdHlwZTtcbiAgICBwcm92aWRlcjtcbiAgICByb290Tm9kZTtcbiAgICBzZXJ2ZXJFZ3Jlc3NQcm90b2NvbDtcbiAgICBzZXJ2ZXJFZ3Jlc3NIb3N0O1xuICAgIHNlcnZlckVncmVzc1BvcnQ7XG4gICAgY2hpbGRyZW47XG4gICAgdXRpbGl6YXRpb247XG4gICAgY29udGV4dE1lbnU7XG4gICAgb25saW5lO1xuICAgIGRpc2FibGVkO1xuICAgIHZlcnNpb247XG4gICAgdHVubmVsZXJFbmFibGVkO1xuICAgIHN5bmNTdGF0dXM7XG4gICAgY3JlYXRlZEF0O1xuICAgIHVwZGF0ZWRBdDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnJvb3ROb2RlID0gJ05vJztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51ID0gJ1llcyc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2hpbGRyZW4ge1xuICAgIGlkO1xuICAgIG5hbWU7XG4gICAgc3RhdHVzO1xuICAgIHNpemU7XG4gICAgdHlwZTtcbiAgICBjaGlsZHJlbjtcbiAgICBkYXRhOiBDaGlsZHJlbjtcbiAgICByb290Tm9kZSA9ICdObyc7XG4gICAgZmlyc3RDaGlsZCA9ICdObyc7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudHlwZSA9ICdDaGlsZHJlbic7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5ldHdvcmtWaXN1YWxpemVySGVscGVyIHtcblxuICAgdW5pcUlJZDphbnkgPTA7XG5cbiBjcmVhdGVVbmlxSWQoKSB7XG4gICByZXR1cm4gKyt0aGlzLnVuaXFJSWQ7XG4gfVxuICBwdWJsaWMgY3JlYXRlRWRnZVJvdXRlck5vZGUoZXIsIGlzUm9vdE5vZGUgPSAnWWVzJykge1xuICAgICAgY29uc3QgZXJPYiA9IG5ldyBFUm91dGVyKCk7XG4gICAgICAvLyBlck9iLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgIGVyT2IudXVpZCA9IGVyLmlkO1xuICAgICAgICAgZXJPYi5uYW1lID0gZXIubmFtZTtcbiAgICAgICAgIGVyT2IudmVyaWZpZWQgPSBlci5pc1ZlcmlmaWVkPyAnWWVzJzogJ05vJztcbiAgICAgICAgIC8vZXJPYi52ZXJzaW9uID0gZXIucHJvZHVjdFZlcnNpb247XG4gICAgICAgICBlck9iLm9ubGluZSA9IGVyLmlzT25saW5lPyAnWWVzJzogJ05vJztcbiAgICAgICAgIGVyT2IuZGlzYWJsZWQgPSBlci5kaXNhYmxlZD8gJ1llcyc6ICdObyc7XG4gICAgICAgICBlck9iLnR5cGUgPSAnRWRnZSBSb3V0ZXInO1xuICAgICAgICAgZXJPYi5yb290Tm9kZSA9IGlzUm9vdE5vZGU7XG4gICAgICAgICBlck9iLnR1bm5lbGVyRW5hYmxlZCA9IGVyLnR1bm5lbGVyRW5hYmxlZD8gZXIudHVubmVsZXJFbmFibGVkOiAnTm8nO1xuICAgICAgICAgZXJPYi5zeW5jU3RhdHVzID0gZXIuc3luY1N0YXR1cz8gZXIuc3luY1N0YXR1czonTm8nO1xuICAgICAgICAgZXJPYi5jcmVhdGVkQXQgPSBlci5jcmVhdGVkQXQ7XG4gICAgICAgICBlck9iLnVwZGF0ZWRBdCA9IGVyLnVwZGF0ZWRBdDtcbiAgIHJldHVybiBlck9iO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVTZXJ2aWNlRWRnZVJvdXRlclBvbGljeU5vZGUocmF3T2JqLCBpc1Jvb3ROb2RlID0gJ1llcycpIHtcbiAgICAgY29uc3Qgc2VydmljZWVycG9saWN5ID0gbmV3IFNlcnZpY2VFUlBvbGljeSgpO1xuICAgICAvLyBzZXJ2aWNlZXJwb2xpY3kuaWQgPSBjcmVhdGVJZCgpO1xuICAgICBzZXJ2aWNlZXJwb2xpY3kudXVpZCA9IHJhd09iai5pZDtcbiAgICAgc2VydmljZWVycG9saWN5Lm5hbWUgPSByYXdPYmoubmFtZTtcbiAgICAgc2VydmljZWVycG9saWN5LnR5cGUgPSAnU2VydmljZSBSb3V0ZXIgUG9saWN5JztcbiAgICAgc2VydmljZWVycG9saWN5LnJvb3ROb2RlID0gaXNSb290Tm9kZTtcbiAgICByZXR1cm4gc2VydmljZWVycG9saWN5O1xuICB9XG4gIHB1YmxpYyBjcmVhdGVFZGdlUm91dGVyUG9saWN5Tm9kZShyYXdPYmosIGlzUm9vdE5vZGUgPSAnWWVzJykge1xuICAgIGNvbnN0IGVycG9saWN5ID0gbmV3IEVSUG9saWN5KCk7XG4gICAgIC8vIGVycG9saWN5LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgIGVycG9saWN5LnV1aWQgPSByYXdPYmouaWQ7XG4gICAgICBlcnBvbGljeS5uYW1lID0gcmF3T2JqLm5hbWU7XG4gICAgICBlcnBvbGljeS50eXBlID0gJ0VkZ2UgUm91dGVyIFBvbGljeSc7XG4gICAgICBlcnBvbGljeS5yb290Tm9kZSA9IGlzUm9vdE5vZGU7XG4gICAgICBlcnBvbGljeS5pc1N5c3RlbSA9IHJhd09iai5pc1N5c3RlbTtcbiAgICAgIGVycG9saWN5LnNlbWFudGljID0gcmF3T2JqLnNlbWFudGljO1xuICAgcmV0dXJuIGVycG9saWN5O1xuICB9XG4gIHB1YmxpYyBjcmVhdGVTZXJ2aWNlUG9saWN5Tm9kZShyYXdPYmosIGlzUm9vdE5vZGUgPSAnWWVzJykge1xuICAgIGNvbnN0IGJpbmRHcnAgPSBuZXcgR3JvdXAoNDM0MjMsICdCaW5kLVBvbGljaWVzJywgJ0JpbmQgU2VydmljZSBQb2xpY3knKTtcbiAgICBjb25zdCBkaWFsR3JwID0gbmV3IEdyb3VwKDQzNTQ1LCAnRGlhbC1Qb2xpY2llcycsICdEaWFsIFNlcnZpY2UgUG9saWN5Jyk7XG5cbiAgICBjb25zdCBzcG9saWN5OmFueSA9IG5ldyBTZXJ2aWNlUG9saWN5KCk7XG4gICAgICAgLy8gc3BvbGljeS5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgc3BvbGljeS5pZCA9IDg3OTU2O1xuICAgICAgICBzcG9saWN5LnV1aWQgPSByYXdPYmouaWQ7XG4gICAgICAgIHNwb2xpY3kubmFtZSA9IHJhd09iai5uYW1lO1xuICAgICAgICBzcG9saWN5LnR5cGUgPSAnU2VydmljZSBQb2xpY3knO1xuICAgICAgICBzcG9saWN5LnJvb3ROb2RlID0gaXNSb290Tm9kZTtcbiAgICAgICAgc3BvbGljeS5jbGlja1Byb2Nlc3MgPSBcIk5vdCBZZXRcIjtcbiAgICAgIGlmKHJhd09iai50eXBlPT09J0JpbmQnKSB7XG4gICAgICAgIGJpbmRHcnAuY2hpbGRyZW4ucHVzaChzcG9saWN5KTtcbiAgICAgICAgcmV0dXJuIGJpbmRHcnA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaWFsR3JwLmNoaWxkcmVuLnB1c2goc3BvbGljeSk7XG4gICAgICAgIHJldHVybiBkaWFsR3JwO1xuICAgICAgfVxuICB9XG4gIHB1YmxpYyBjcmVhdGVJZGVudGl0eU5vZGUocmF3T2JqLCBpc1Jvb3ROb2RlID0gJ1llcycpIHtcbiAgICBjb25zdCBlbmRwb2ludCA9IG5ldyBJZGVudGl0eSgpO1xuICAgICAgICAgICAgZW5kcG9pbnQucm9vdE5vZGUgPSBpc1Jvb3ROb2RlO1xuICAgICAgICAgICAvLyBlbmRwb2ludC5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICAgICBlbmRwb2ludC5pZCA9IDU0MzI7XG4gICAgICAgICAgICBlbmRwb2ludC51dWlkID0gcmF3T2JqLmlkO1xuICAgICAgICAgICAgZW5kcG9pbnQubmFtZSA9IHJhd09iai5uYW1lO1xuICAgICAgICAgICAgZW5kcG9pbnQub25saW5lID0gcmF3T2JqLmhhc0FwaVNlc3Npb24gPT09IHRydWUgPyAnWWVzJyA6ICdObyc7XG4gICAgICAgICAgICBlbmRwb2ludC50eXBlID0gJ0lkZW50aXR5JztcbiAgICAgICAgICAgIGVuZHBvaW50LmNyZWF0ZWRBdCA9IHJhd09iai5jcmVhdGVkQXQ7XG4gICAgICAgICAgICBlbmRwb2ludC51cGRhdGVkQXQgPSByYXdPYmoudXBkYXRlZEF0O1xuICAgICAgICAgICAgZW5kcG9pbnQuc3RhdHVzID0gcmF3T2JqLnNka0luZm8gIT09IG51bGwgPyAnUmVnaXN0ZXJlZCcgOiAnTm90IFJlZ2lzdGVyZWQnO1xuICAgICAgICAgICAgICBpZiAocmF3T2JqLnNka0luZm8pIHtcbiAgICAgICAgICAgICAgICAgIGVuZHBvaW50Lm9zID0gcmF3T2JqLnNka0luZm8udHlwZT8gcmF3T2JqLnNka0luZm8udHlwZTogcmF3T2JqLnNka0luZm8uYXBwSWQ7XG4gICAgICAgICAgICAgICAgICBlbmRwb2ludC5vc1ZlcnNpb24gPSByYXdPYmouc2RrSW5mby52ZXJzaW9uO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyYXdPYmouYXV0aFBvbGljeSAmJiByYXdPYmouYXV0aFBvbGljeS5uYW1lLmluY2x1ZGVzKFwiQnJvd1plclwiKSkge1xuICAgICAgICAgICAgICAgICBlbmRwb2ludC50eXBlID0gJ0Jyb3daZXIgSWRlbnRpdHknO1xuICAgICAgICAgICAgICB9XG4gICAgcmV0dXJuICAgZW5kcG9pbnQ7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVNlcnZpY2VOb2RlKHJhd09iaiwgaXNSb290Tm9kZSA9ICdZZXMnKSB7XG4gICAgICBjb25zdCBzZXJ2aWNlb2JqID0gbmV3IFNlcnZpY2UoKTtcbiAgICAgICAvLyBzZXJ2aWNlb2JqLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgc2VydmljZW9iai5uYW1lID0gcmF3T2JqLm5hbWU7XG4gICAgICAgIHNlcnZpY2VvYmoudXVpZCA9IHJhd09iai5pZDtcbiAgICAgICAgc2VydmljZW9iai50eXBlID0gJ1NlcnZpY2UnO1xuICAgICAgICBzZXJ2aWNlb2JqLnJvb3ROb2RlID0gaXNSb290Tm9kZTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlc3dpdGhOYW1lID0gW107XG4gICAgICAgIHJhd09iaiAmJiByYXdPYmoucm9sZUF0dHJpYnV0ZXMgJiYgcmF3T2JqLnJvbGVBdHRyaWJ1dGVzLmZpbmQoKHNyYXR0cikgPT4ge1xuICAgICAgICAgICBhdHRyaWJ1dGVzd2l0aE5hbWUucHVzaChzcmF0dHIpO1xuICAgICAgICB9KTtcbiAgICByZXR1cm4gc2VydmljZW9iajtcbiAgfVxuXG4gICAgcHVibGljIGdldFJlc291cmNlVHJlZU9iaihcbiAgICAgICAgbmV0d29ya05hbWUsXG4gICAgICAgIG5ldHdvcmtTdGF0dXMsXG4gICAgICAgIHNlcnZpY2VzLFxuICAgICAgICBpZGVudGl0aWVzLFxuICAgICAgICBzZXJ2aWNlUG9saWNpZXMsXG4gICAgICAgIGVkZ2Vyb3V0ZXJzLFxuICAgICAgICBlZGdlUm91dGVyUG9saWNpZXMsXG4gICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXMsXG4gICAgICAgIC8vIG5ldHdvcmtQcm9kdWN0VmVyc2lvbixcbiAgICAgICAgc2VydmljZXNfdG90YWxDb3VudCwgaWRlbnRpdGllc190b3RhbENvdW50LCBlZGdlcm91dGVyc190b3RhbENvdW50LFxuICAgICAgICBzZXJ2aWNlX3BvbGljaWVzX3RvdGFsQ291bnQsIGVkZ2Vfcm91dGVyX3BvbGljaWVzX3RvdGFsQ291bnQsXG4gICAgICAgIHNlcnZpY2Vfcm91dGVyX3BvbGljaWVzX3RvdGFsQ291bnQsXG4gICAgICAgIHVuaXFJZCxcbiAgICAgICAgbG9nZ2VyLFxuICAgICAgICAuLi5hcmdzOiBhbnlcbiAgICApIHtcbiAgICAgICB0aGlzLnVuaXFJSWQgPSB1bmlxSWQ7XG5cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlSWQoKSB7XG4gICAgICAgICAgICArK3VuaXFJZDtcbiAgICAgICAgICAvLyAgKyt0aGlzLnVuaXFJSWQ7XG4gICAgICAgICAgICByZXR1cm4gdW5pcUlkO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xhc3MgUm9vdEpzb24ge1xuICAgICAgICAgICAgaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICAgICAgbmFtZTtcbiAgICAgICAgICAgIGxhc3RJZCA9IDA7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IFtdO1xuICAgICAgICAgICAgY29udGV4dE1lbnUgPSAnWWVzJztcbiAgICAgICAgICAgIHR5cGUgPSAnTmV0d29yayc7XG4gICAgICAgICAgICByb290Tm9kZSA9ICdObyc7XG4gICAgICAgICAgIC8vIHZlcnNpb24gPSBuZXR3b3JrUHJvZHVjdFZlcnNpb247XG4gICAgICAgICAgICBzdGF0dXM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb290SnNvbiA9IG5ldyBSb290SnNvbigpO1xuICAgICAgICByb290SnNvbi5uYW1lID0gJ05ldHdvcmsnO1xuICAgICAgICByb290SnNvbi5zdGF0dXMgPSAnUHJvdmlzaW9uZWQnO1xuXG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NJZGVudGl0aWVzRm9yVHJlZShcbiAgICAgICAgICAgIGlkZW50aXRpZXNDaGlsZHJlbixcbiAgICAgICAgICAgIGlkZW50aXRpZXMsXG4gICAgICAgICAgICBueCxcbiAgICAgICAgICAgIG55XG4gICAgICAgICkge1xuICAgICAgICAgIGlmKGFyZ3NbMl09PT1mYWxzZSkgcmV0dXJuIGlkZW50aXRpZXNDaGlsZHJlbjtcbiAgICAgICAgICAgIGNvbnN0IG9ial9hcnJheSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IG54OyBqIDwgbnk7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZHBvaW50ID0gbmV3IElkZW50aXR5KCk7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQucm9vdE5vZGUgPSAnWWVzJztcbiAgICAgICAgICAgICAgICBlbmRwb2ludC5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQudXVpZCA9IGlkZW50aXRpZXNbal0uaWQ7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQubmFtZSA9IGlkZW50aXRpZXNbal0ubmFtZTtcbiAgICAgICAgICAgICAgICBlbmRwb2ludC5vbmxpbmUgPSBpZGVudGl0aWVzW2pdLmhhc0FwaVNlc3Npb24gPT09IHRydWUgPyAnWWVzJyA6ICdObyc7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQudHlwZSA9ICdJZGVudGl0eSc7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQuY3JlYXRlZEF0ID0gaWRlbnRpdGllc1tqXS5jcmVhdGVkQXQ7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQudXBkYXRlZEF0ID0gaWRlbnRpdGllc1tqXS51cGRhdGVkQXQ7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQuc3RhdHVzID0gaWRlbnRpdGllc1tqXS5zZGtJbmZvICE9PSBudWxsID8gJ1JlZ2lzdGVyZWQnIDogJ05vdCBSZWdpc3RlcmVkJztcbiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdGllc1tqXS5zZGtJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50Lm9zID0gaWRlbnRpdGllc1tqXS5zZGtJbmZvLnR5cGU/IGlkZW50aXRpZXNbal0uc2RrSW5mby50eXBlOiBpZGVudGl0aWVzW2pdLnNka0luZm8uYXBwSWQ7XG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50Lm9zVmVyc2lvbiA9IGlkZW50aXRpZXNbal0uc2RrSW5mby52ZXJzaW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdGllc1tqXS5hdXRoUG9saWN5ICYmIGlkZW50aXRpZXNbal0uYXV0aFBvbGljeS5uYW1lLmluY2x1ZGVzKFwiQnJvd1plclwiKSkge1xuICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LnR5cGUgPSAnQnJvd1plciBJZGVudGl0eSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9ial9hcnJheS5wdXNoKGVuZHBvaW50KTtcbiAgICAgICAgICAgIH0gLy8gZW5kIG9mIG1haW4gZm9yIGxvb3BcbiAgICAgICAgICByZXR1cm4gZ3JvdXBpbmcoJ0lkZW50aXRpZScsIGlkZW50aXRpZXNDaGlsZHJlbiwgb2JqX2FycmF5KTtcblxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHN1Ykdyb3VwaW5nKG5hbWUsIG1haW5Hcm91cCkge1xuICAgICAgICAgICBjb25zdCBwYWdlU2l6ZSA9IDI1O1xuICAgICAgICAgICBtYWluR3JvdXAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChtYWluR3JvdXAuY2hpbGRyZW4ubGVuZ3RoID4gcGFnZVNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuOmFueSA9IFtdO1xuICAgICAgICAgICAgbGV0IHBhZ2VObyA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1haW5Hcm91cC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RFbGVtZW50ID0gKGkgKyBwYWdlU2l6ZSkgPCBtYWluR3JvdXAuY2hpbGRyZW4ubGVuZ3RoPyAoaSArIHBhZ2VTaXplKSA6IChtYWluR3JvdXAuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lUyA9XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lICsgJ3MgWycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFpbkdyb3VwLmNoaWxkcmVuW2ldLm5hbWUuc3Vic3RyaW5nKDAsIDQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcgLSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1haW5Hcm91cC5jaGlsZHJlbltsYXN0RWxlbWVudC0xXS5uYW1lLnN1YnN0cmluZygwLCA0KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXSc7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hsZCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUlkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgKyAnIG5hbWUgc3RhcnRzIHdpdGggJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgbWFpbkdyb3VwLmNoaWxkcmVuW2ldLm5hbWUuc3Vic3RyaW5nKDAsIDQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnIFRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5Hcm91cC5jaGlsZHJlbltsYXN0RWxlbWVudC0xXS5uYW1lLnN1YnN0cmluZygwLCA0KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChqID0gaTsgaiA8IGxhc3RFbGVtZW50OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgIGNobGQuY2hpbGRyZW4ucHVzaChtYWluR3JvdXAuY2hpbGRyZW5bal0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgLS1pO1xuICAgICAgICAgICAgICAgICAgY2hsZC5uYW1lID0gY2hsZC5uYW1lICsgJyAoJyArIGNobGQuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1haW5Hcm91cC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbWFpbkdyb3VwO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZ3JvdXBpbmcobmFtZSwgY2hpbGRyZW4sIG9iamVjdHNBcnJheSkge1xuICAgICAgICAgIGxldCBwcm90b2NvbFJEUEdycCwgcHJvdG9jb2xIVFRQU0dycCwgcHJvdG9jb2xIVFRQR3JwLCBwcm90b2NvbEZUUEdycCwgdW5yZWdpc3RlcmVkR3JwO1xuXG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdTZXJ2aWNlJykge1xuICAgICAgICAgICAgIHByb3RvY29sUkRQR3JwID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUlkKCksXG4gICAgICAgICAgICAgICAgJ1NlcnZpY2VzIFtwcm90b2NvbC1SRFBdJyxcbiAgICAgICAgICAgICAgICAnU2VydmljZXMgY3JlYXRlZCBmb3IgUkRQIHByb3RvY29sJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICBwcm90b2NvbEhUVFBTR3JwID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUlkKCksXG4gICAgICAgICAgICAgICAgJ1NlcnZpY2VzIFtwcm90b2NvbC1IVFRQU10nLFxuICAgICAgICAgICAgICAgICdTZXJ2aWNlIGNyZWF0ZWQgZm9yIEhUVFBTIHByb3RvY29sJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICBwcm90b2NvbEhUVFBHcnAgPSBuZXcgR3JvdXAoXG4gICAgICAgICAgICAgICAgY3JlYXRlSWQoKSxcbiAgICAgICAgICAgICAgICAnU2VydmljZXMgW3Byb3RvY29sLUhUVFBdJyxcbiAgICAgICAgICAgICAgICAnU2VydmljZSBjcmVhdGVkIGZvciBIVFRQIHByb3RvY29sJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICBwcm90b2NvbEZUUEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCAnU2VydmljZXMgW3Byb3RvY29sLUZUUF0nLCAnU2VydmljZSBjcmVhdGVkIGZvciBGVFAgcHJvdG9jb2wnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgIGlmIChuYW1lID09PSAnSWRlbnRpdGllJykge1xuICAgICAgICAgICAgIHVucmVnaXN0ZXJlZEdycCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlSWQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lkZW50aXRpZXNbVW5yZWdpc3RlcmVkXScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdJZGVudGl0aWVzIHRoYXQgYXJlIG5vdCByZWdpc3RlcmVkJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhYmNkR3JwID0gbmV3IEdyb3VwKGNyZWF0ZUlkKCksIG5hbWUgKyAncyBbQS1EXScsIG5hbWUgKycgbmFtZSBzdGFydHMgd2l0aCBBIHRvIEQnKTtcbiAgICAgICAgICAgIGNvbnN0IGVmZ2hHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgbmFtZSArICdzIFtFLUhdJywgbmFtZSArJyBuYW1lIHN0YXJ0cyB3aXRoIEUgdG8gSCcpO1xuICAgICAgICAgICAgY29uc3QgaWprbEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCBuYW1lICsgJ3MgW0ktTF0nLCBuYW1lICsnIG5hbWUgc3RhcnRzIHdpdGggSSB0byBMJyk7XG4gICAgICAgICAgICBjb25zdCBtbm9wR3JwID0gbmV3IEdyb3VwKGNyZWF0ZUlkKCksIG5hbWUgKyAncyBbTS1QXScsIG5hbWUgKycgbmFtZSBzdGFydHMgd2l0aCBNIHRvIFAnKTtcbiAgICAgICAgICAgIGNvbnN0IHFyc3RHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgbmFtZSArICdzIFtRLVRdJywgbmFtZSArJyBuYW1lIHN0YXJ0cyB3aXRoIFEgdG8gVCcpO1xuICAgICAgICAgICAgY29uc3QgdXZ3eEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCBuYW1lICsgJ3MgW1UtWF0nLCBuYW1lICsnIG5hbWUgc3RhcnRzIHdpdGggVSB0byBYJyk7XG4gICAgICAgICAgICBjb25zdCB5ekdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCAgIG5hbWUgKyAncyBbWS1aXScsIG5hbWUgKycgbmFtZSBzdGFydHMgd2l0aCBZIGFuZCBaJyk7XG4gICAgICAgICAgICBjb25zdCBvbmVUbzlHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgbmFtZSArICdzIFsxLTldJywgbmFtZSArJyBuYW1lIHN0YXJ0cyB3aXRoIDAgdG8gOScpO1xuICAgICAgICAgICAgY29uc3Qgc3BlY2lhbENoYXJHcnAgPSBuZXcgR3JvdXAoXG4gICAgICAgICAgICAgICAgY3JlYXRlSWQoKSxcbiAgICAgICAgICAgICAgICBuYW1lICsgJ3MgW290aGVyc10nLFxuICAgICAgICAgICAgICAgIG5hbWUgKyAnIG5hbWUgc3RhcnRzIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzJ1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3RzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmogPSBvYmplY3RzQXJyYXlbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgY2hhID0gb2JqLm5hbWUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdJZGVudGl0aWUnICYmIG9iai5zdGF0dXMgPT09ICdOb3QgUmVnaXN0ZXJlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5yZWdpc3RlcmVkR3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdTZXJ2aWNlJyAmJiBvYmoucHJvdG9jb2wgPT09ICdyZHAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3RvY29sUkRQR3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdTZXJ2aWNlJyAmJiBvYmoucHJvdG9jb2wgPT09ICdodHRwcycpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xIVFRQU0dycC5jaGlsZHJlbi5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnU2VydmljZScgJiYgb2JqLnByb3RvY29sID09PSAnaHR0cCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xIVFRQR3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdTZXJ2aWNlJyAmJiAgb2JqLnByb3RvY29sID09PSAnZnRwJykge1xuICAgICAgICAgICAgICAgICAgICBwcm90b2NvbEZUUEdycC5jaGlsZHJlbi5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdhJyB8fCBjaGEgPT09ICdiJyB8fCBjaGEgPT09ICdjJyB8fCBjaGEgPT09ICdkJykge1xuICAgICAgICAgICAgICAgICAgICBhYmNkR3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ2UnIHx8IGNoYSA9PT0gJ2YnIHx8IGNoYSA9PT0gJ2cnIHx8IGNoYSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICAgICAgICAgIGVmZ2hHcnAuY2hpbGRyZW4ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAnaScgfHwgY2hhID09PSAnaicgfHwgY2hhID09PSAnaycgfHwgY2hhID09PSAnbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWprbEdycC5jaGlsZHJlbi5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdtJyB8fCBjaGEgPT09ICduJyB8fCBjaGEgPT09ICdvJyB8fCBjaGEgPT09ICdwJykge1xuICAgICAgICAgICAgICAgICAgICBtbm9wR3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ3EnIHx8IGNoYSA9PT0gJ3InIHx8IGNoYSA9PT0gJ3MnIHx8IGNoYSA9PT0gJ3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHFyc3RHcnAuY2hpbGRyZW4ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAndScgfHwgY2hhID09PSAndicgfHwgY2hhID09PSAndycgfHwgY2hhID09PSAneCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdXZ3eEdycC5jaGlsZHJlbi5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICd5JyB8fCBjaGEgPT09ICd6Jykge1xuICAgICAgICAgICAgICAgICAgICB5ekdycC5jaGlsZHJlbi5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnMCcgfHxcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnMScgfHxcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnMicgfHxcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnMycgfHxcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnNCcgfHxcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnNScgfHxcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnNicgfHxcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnNycgfHxcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnOCcgfHxcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnOSdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgb25lVG85R3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzcGVjaWFsQ2hhckdycC5jaGlsZHJlbi5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBlbmQgbWFpbiBmb3IgbG9vcFxuXG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdTZXJ2aWNlJykge1xuICAgICAgICAgICAgaWYgKHByb3RvY29sUkRQR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwcm90b2NvbFJEUEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHByb3RvY29sUkRQR3JwLm5hbWUgPSBwcm90b2NvbFJEUEdycC5uYW1lICsgJygnICsgcHJvdG9jb2xSRFBHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2gocHJvdG9jb2xSRFBHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3RvY29sSFRUUFNHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHByb3RvY29sSFRUUFNHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBwcm90b2NvbEhUVFBTR3JwLm5hbWUgPSBwcm90b2NvbEhUVFBTR3JwLm5hbWUgKyAnKCcgKyBwcm90b2NvbEhUVFBTR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHByb3RvY29sSFRUUFNHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3RvY29sSFRUUEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xIVFRQR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xIVFRQR3JwLm5hbWUgPSBwcm90b2NvbEhUVFBHcnAubmFtZSArICcoJyArIHByb3RvY29sSFRUUEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaChwcm90b2NvbEhUVFBHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3RvY29sRlRQR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwcm90b2NvbEZUUEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHByb3RvY29sRlRQR3JwLm5hbWUgPSBwcm90b2NvbEZUUEdycC5uYW1lICsgJygnICsgcHJvdG9jb2xGVFBHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2gocHJvdG9jb2xGVFBHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuYW1lID09PSAnSWRlbnRpdGllJyAmJiB1bnJlZ2lzdGVyZWRHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJlZEdycC5uYW1lID0gdW5yZWdpc3RlcmVkR3JwLm5hbWUgKyAnKCcgKyB1bnJlZ2lzdGVyZWRHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2godW5yZWdpc3RlcmVkR3JwKTtcbiAgICAgICAgICAgICAgICBzdWJHcm91cGluZyhuYW1lLCB1bnJlZ2lzdGVyZWRHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNwZWNpYWxDaGFyR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBzcGVjaWFsQ2hhckdycC5uYW1lID0gc3BlY2lhbENoYXJHcnAubmFtZSArICcoJyArIHNwZWNpYWxDaGFyR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHNwZWNpYWxDaGFyR3JwKTtcbiAgICAgICAgICAgICAgICBzdWJHcm91cGluZyhuYW1lLCBzcGVjaWFsQ2hhckdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWJjZEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYWJjZEdycC5uYW1lID0gYWJjZEdycC5uYW1lICsgJygnICsgYWJjZEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaChhYmNkR3JwKTtcbiAgICAgICAgICAgICAgICBzdWJHcm91cGluZyhuYW1lLCBhYmNkR3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlZmdoR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBlZmdoR3JwLm5hbWUgPSBlZmdoR3JwLm5hbWUgKyAnKCcgKyBlZmdoR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGVmZ2hHcnApO1xuICAgICAgICAgICAgICAgIHN1Ykdyb3VwaW5nKG5hbWUsIGVmZ2hHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlqa2xHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlqa2xHcnAubmFtZSA9IGlqa2xHcnAubmFtZSArICcoJyArIGlqa2xHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2goaWprbEdycCk7XG4gICAgICAgICAgICAgICAgc3ViR3JvdXBpbmcobmFtZSwgaWprbEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobW5vcEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbW5vcEdycC5uYW1lID0gbW5vcEdycC5uYW1lICsgJygnICsgbW5vcEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaChtbm9wR3JwKTtcbiAgICAgICAgICAgICAgICBzdWJHcm91cGluZyhuYW1lLCBtbm9wR3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChxcnN0R3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBxcnN0R3JwLm5hbWUgPSBxcnN0R3JwLm5hbWUgKyAnKCcgKyBxcnN0R3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHFyc3RHcnApO1xuICAgICAgICAgICAgICAgIHN1Ykdyb3VwaW5nKG5hbWUsIHFyc3RHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHV2d3hHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHV2d3hHcnAubmFtZSA9IHV2d3hHcnAubmFtZSArICcoJyArIHV2d3hHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2godXZ3eEdycCk7XG4gICAgICAgICAgICAgICAgc3ViR3JvdXBpbmcobmFtZSwgdXZ3eEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeXpHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHl6R3JwLm5hbWUgPSB5ekdycC5uYW1lICsgJygnICsgeXpHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2goeXpHcnApO1xuICAgICAgICAgICAgICAgIHN1Ykdyb3VwaW5nKG5hbWUsIHl6R3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvbmVUbzlHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG9uZVRvOUdycC5uYW1lID0gb25lVG85R3JwLm5hbWUgKyAnKCcgKyBvbmVUbzlHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2gob25lVG85R3JwKTtcbiAgICAgICAgICAgICAgICBzdWJHcm91cGluZyhuYW1lLCBvbmVUbzlHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1NlcnZpY2VQb2xpY2llc0ZvclRyZWUoXG4gICAgICAgICAgICBzZXJ2aWNlUG9saWN5Q2hpbGRyZW4sXG4gICAgICAgICAgICBzZXJ2aWNlUG9saWNpZXMsXG4gICAgICAgICAgICBueCxcbiAgICAgICAgICAgIG55XG4gICAgICAgICkge1xuICAgICAgICAgIGlmKGFyZ3NbMF09PT1mYWxzZSkgcmV0dXJuIHNlcnZpY2VQb2xpY3lDaGlsZHJlbjtcblxuICAgICAgICAgIGNvbnN0IGJpbmRHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ0JpbmQtUG9saWNpZXMnLCAnQmluZCBTZXJ2aWNlIFBvbGljeScpO1xuICAgICAgICAgIGNvbnN0IGRpYWxHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ0RpYWwtUG9saWNpZXMnLCAnRGlhbCBTZXJ2aWNlIFBvbGljeScpO1xuXG4gICAgICAgICAgc2VydmljZVBvbGljaWVzLmZvckVhY2goIChzcCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3BvbGljeSA9IG5ldyBTZXJ2aWNlUG9saWN5KCk7XG4gICAgICAgICAgICAgICAgc3BvbGljeS5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgc3BvbGljeS51dWlkID0gc3AuaWQ7XG4gICAgICAgICAgICAgICAgc3BvbGljeS5uYW1lID0gc3AubmFtZTtcbiAgICAgICAgICAgICAgICBzcG9saWN5LnR5cGUgPSAnU2VydmljZSBQb2xpY3knO1xuICAgICAgICAgICAgICAgIHNwb2xpY3kucm9vdE5vZGUgPSAnWWVzJztcbiAgICAgICAgICAgICAgICBpZihzcC50eXBlPT09J0JpbmQnKSB7XG4gICAgICAgICAgICAgICAgICBiaW5kR3JwLmNoaWxkcmVuLnB1c2goc3BvbGljeSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGRpYWxHcnAuY2hpbGRyZW4ucHVzaChzcG9saWN5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSApO1xuXG4gICAgICAgICAgIGJpbmRHcnAubmFtZSA9IGJpbmRHcnAubmFtZSArICcoJysgYmluZEdycC5jaGlsZHJlbi5sZW5ndGggKycpJztcbiAgICAgICAgICAgc2VydmljZVBvbGljeUNoaWxkcmVuLmNoaWxkcmVuLnB1c2goYmluZEdycCk7XG4gICAgICAgICAgIHN1Ykdyb3VwaW5nKCdCaW5kLVBvbGljaWUnLCBiaW5kR3JwKTtcbiAgICAgICAgICAgZGlhbEdycC5uYW1lID0gZGlhbEdycC5uYW1lICsgJygnKyBkaWFsR3JwLmNoaWxkcmVuLmxlbmd0aCArJyknO1xuICAgICAgICAgICBzZXJ2aWNlUG9saWN5Q2hpbGRyZW4uY2hpbGRyZW4ucHVzaChkaWFsR3JwKTtcbiAgICAgICAgICAgc3ViR3JvdXBpbmcoJ0RpYWwtUG9saWNpZScsIGRpYWxHcnApO1xuICAgICAgICAgIHJldHVybiBzZXJ2aWNlUG9saWN5Q2hpbGRyZW47XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzU2VydmljZXNGb3JUcmVlKFxuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbixcbiAgICAgICAgICAgIHNlcnZpY2VzLFxuICAgICAgICAgICAgbngsXG4gICAgICAgICAgICBueVxuICAgICAgICApIHtcbiAgICAgICAgICBpZihhcmdzWzFdPT09ZmFsc2UpIHJldHVybiBzZXJ2aWNlc0NoaWxkcmVuO1xuICAgICAgICAgICAgY29uc3Qgc2VydmljZXN0cmVlID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbng7IGkgPCBueTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZW9iaiA9IG5ldyBTZXJ2aWNlKCk7XG4gICAgICAgICAgICAgICAgc2VydmljZW9iai5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgc2VydmljZW9iai5uYW1lID0gc2VydmljZXNbaV0ubmFtZTtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLnV1aWQgPSBzZXJ2aWNlc1tpXS5pZDtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLnR5cGUgPSAnU2VydmljZSc7XG4gICAgICAgICAgICAgICAgc2VydmljZW9iai5yb290Tm9kZSA9ICdZZXMnO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlc3dpdGhOYW1lID0gW107XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc3dpdGhOYW1lLnB1c2goJ0AnICsgc2VydmljZXNbaV0ubmFtZSk7XG4gICAgICAgICAgICAgICAgc2VydmljZXNbaV0gJiYgc2VydmljZXNbaV0ucm9sZUF0dHJpYnV0ZXMgJiYgc2VydmljZXNbaV0ucm9sZUF0dHJpYnV0ZXMuZmluZCgoc3JhdHRyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXN3aXRoTmFtZS5wdXNoKHNyYXR0cik7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgaXNJdFJEUFByb3RvY29sQXR0ciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCBpc0l0SFRUUFByb3RvY29sQXR0ciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCBpc0l0SFRUUFNQcm90b2NvbEF0dHIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsZXQgaXNJdEZUUFByb3RvY29sQXR0ciA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBhdHRyaWJ1dGVzd2l0aE5hbWUubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0ck9iID0gbmV3IEF0dHJpYnV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBhdHRyT2IuaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgICAgICBhdHRyT2IubmFtZSA9IGF0dHJpYnV0ZXN3aXRoTmFtZVtrXTtcbiAgICAgICAgICAgICAgICAgICAgYXR0ck9iLnR5cGUgPSAnU2VydmljZSBBdHRyaWJ1dGUnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHROYW1lID0gYXR0cmlidXRlc3dpdGhOYW1lW2tdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0l0UkRQUHJvdG9jb2xBdHRyID09PSBmYWxzZSAmJiBhdHROYW1lLmluY2x1ZGVzKCdyZHAnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZW9iai5wcm90b2NvbCA9ICdyZHAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNJdFJEUFByb3RvY29sQXR0ciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSXRIVFRQU1Byb3RvY29sQXR0ciA9PT0gZmFsc2UgJiYgYXR0TmFtZS5pbmNsdWRlcygnaHR0cHMnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZW9iai5wcm90b2NvbCA9ICdodHRwcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0l0SFRUUFNQcm90b2NvbEF0dHIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0l0SFRUUFNQcm90b2NvbEF0dHIgPT09IGZhbHNlICYmIGlzSXRIVFRQUHJvdG9jb2xBdHRyID09PSBmYWxzZSAmJiBhdHROYW1lLmluY2x1ZGVzKCdodHRwJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VvYmoucHJvdG9jb2wgPSAnaHR0cCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0l0SFRUUFByb3RvY29sQXR0ciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSXRGVFBQcm90b2NvbEF0dHIgPT09IGZhbHNlICYmIGF0dE5hbWUuaW5jbHVkZXMoJ2Z0cCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLnByb3RvY29sID0gJ2Z0cCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0l0RlRQUHJvdG9jb2xBdHRyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gZW5kIGlubmVyIGZvciBsb29wXG4gICAgICAgICAgICAgICAgc2VydmljZXN0cmVlLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICB9IC8vIGVuZCBmb3IgbG9vcFxuICAgICAgICAgICAgcmV0dXJuIGdyb3VwaW5nKCdTZXJ2aWNlJywgc2VydmljZXNDaGlsZHJlbiwgc2VydmljZXN0cmVlKTtcbiAgICAgICAgfSAvLyBlbmQgb2YgcHJvY2Vzc1NlcnZpY2VzRm9yVHJlZVxuXG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NFZGdlUm91dGVyUG9saWNpZXNGb3JUcmVlKFxuICAgICAgICAgICAgZWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4sXG4gICAgICAgICAgICBlZGdlUm91dGVyUG9saWNpZXMsXG4gICAgICAgICAgICBueCxcbiAgICAgICAgICAgIG55XG4gICAgICAgICkge1xuICAgICAgICAgIGlmKGFyZ3NbNF09PT1mYWxzZSkgcmV0dXJuIGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuO1xuICAgICAgICAgIGNvbnN0IHBvbGljaWVzX0FycmF5ID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbng7IGkgPCBueTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJwb2xpY3kgPSBuZXcgRVJQb2xpY3koKTtcbiAgICAgICAgICAgICAgICBlcnBvbGljeS5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgZXJwb2xpY3kudXVpZCA9IGVkZ2VSb3V0ZXJQb2xpY2llc1tpXS5pZDtcbiAgICAgICAgICAgICAgICBlcnBvbGljeS5uYW1lID0gZWRnZVJvdXRlclBvbGljaWVzW2ldLm5hbWU7XG4gICAgICAgICAgICAgICAgZXJwb2xpY3kudHlwZSA9ICdFZGdlIFJvdXRlciBQb2xpY3knO1xuICAgICAgICAgICAgICAgIGVycG9saWN5LnJvb3ROb2RlID0gJ1llcyc7XG4gICAgICAgICAgICAgICAgZXJwb2xpY3kuaXNTeXN0ZW0gPSBlZGdlUm91dGVyUG9saWNpZXNbaV0uaXNTeXN0ZW07XG4gICAgICAgICAgICAgICAgZXJwb2xpY3kuc2VtYW50aWMgPSBlZGdlUm91dGVyUG9saWNpZXNbaV0uc2VtYW50aWM7XG4gICAgICAgICAgICAgICAgcG9saWNpZXNfQXJyYXkucHVzaChlcnBvbGljeSk7XG4gICAgICAgICAgICB9IC8vIGVuZCBvZiBtYWluIGZvciBsb29wXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBpbmcoJ0VkZ2UgUm91dGVyIFBvbGljaWVzJyxlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbixwb2xpY2llc19BcnJheSk7XG4gICAgICAgIH0gLy8gZW5kXG5cbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1NlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNGb3JUcmVlKFxuICAgICAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuLFxuICAgICAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgICAgIG54LFxuICAgICAgICAgICAgbnlcbiAgICAgICAgKSB7XG4gICAgICAgIGlmKGFyZ3NbNV09PT1mYWxzZSkgcmV0dXJuIHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBueDsgaSA8IG55OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlZXJwb2xpY3kgPSBuZXcgU2VydmljZUVSUG9saWN5KCk7XG4gICAgICAgICAgICAgICAgc2VydmljZWVycG9saWN5LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlZXJwb2xpY3kudXVpZCA9IHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNbaV0uaWQ7XG4gICAgICAgICAgICAgICAgc2VydmljZWVycG9saWN5Lm5hbWUgPSBzZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzW2ldLm5hbWU7XG4gICAgICAgICAgICAgICAgc2VydmljZWVycG9saWN5LnR5cGUgPSAnU2VydmljZSBSb3V0ZXIgUG9saWN5JztcbiAgICAgICAgICAgICAgICBzZXJ2aWNlZXJwb2xpY3kucm9vdE5vZGUgPSAnWWVzJztcbiAgICAgICAgICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChzZXJ2aWNlZXJwb2xpY3kpO1xuICAgICAgICAgICAgfSAvLyBlbmQgb2YgbWFpbiBmb3IgbG9vcFxuICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbjtcbiAgICAgICAgfSAvLyBlbmRcblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzRWRnZVJvdXRlcnNGb3JUcmVlKFxuICAgICAgICAgICAgcm91dGVyc0NoaWxkcmVuLFxuICAgICAgICAgICAgZWRnZXJvdXRlcnMsXG4gICAgICAgICAgICBueCxcbiAgICAgICAgICAgIG55XG4gICAgICAgICkge1xuICAgICAgICBpZihhcmdzWzNdPT09ZmFsc2UpIHJldHVybiByb3V0ZXJzQ2hpbGRyZW47XG5cbiAgICAgICAgICAgIGNvbnN0IGVyX29iamVjdHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBueDsgaSA8IG55OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlck9iID0gbmV3IEVSb3V0ZXIoKTtcbiAgICAgICAgICAgICAgICBlck9iLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlciA9IGVkZ2Vyb3V0ZXJzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChlcikge1xuICAgICAgICAgICAgICAgICAgICBlck9iLnV1aWQgPSBlci5pZDtcbiAgICAgICAgICAgICAgICAgICAgZXJPYi5uYW1lID0gZXIubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgZXJPYi52ZXJpZmllZCA9IGVyLmlzVmVyaWZpZWQ/ICdZZXMnOiAnTm8nO1xuICAgICAgICAgICAgICAgICAgICAvL2VyT2IudmVyc2lvbiA9IGVyLnByb2R1Y3RWZXJzaW9uO1xuICAgICAgICAgICAgICAgICAgICBlck9iLm9ubGluZSA9IGVyLmlzT25saW5lPyAnWWVzJzogJ05vJztcbiAgICAgICAgICAgICAgICAgICAgZXJPYi5kaXNhYmxlZCA9IGVyLmRpc2FibGVkPyAnWWVzJzogJ05vJztcbiAgICAgICAgICAgICAgICAgICAgZXJPYi50eXBlID0gJ0VkZ2UgUm91dGVyJztcbiAgICAgICAgICAgICAgICAgICAgZXJPYi5yb290Tm9kZSA9ICdZZXMnO1xuICAgICAgICAgICAgICAgICAgICBlck9iLnR1bm5lbGVyRW5hYmxlZCA9IGVyLnR1bm5lbGVyRW5hYmxlZD8gZXIudHVubmVsZXJFbmFibGVkOiAnTm8nO1xuICAgICAgICAgICAgICAgICAgICBlck9iLnN5bmNTdGF0dXMgPSBlci5zeW5jU3RhdHVzPyBlci5zeW5jU3RhdHVzOidObyc7XG4gICAgICAgICAgICAgICAgICAgIGVyT2IuY3JlYXRlZEF0ID0gZXIuY3JlYXRlZEF0O1xuICAgICAgICAgICAgICAgICAgICBlck9iLnVwZGF0ZWRBdCA9IGVyLnVwZGF0ZWRBdDtcbiAgICAgICAgICAgICAgICAgICAgZXJfb2JqZWN0cy5wdXNoKGVyT2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gZW5kIG1haW4gZm9yIGxvb3BcbiAgICAgICAgICAgLy8gcmV0dXJuIHJvdXRlcnNDaGlsZHJlbjtcbiAgICAgICAgICAgcmV0dXJuIGdyb3VwaW5nKCdFZGdlIFJvdXRlcicsIHJvdXRlcnNDaGlsZHJlbiwgZXJfb2JqZWN0cyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjcmVhdGVJZCgpIGdlbmVyYXRlcyBub2RlIElkIDEsMiwzLDQsNSBmb3IgdGhlIGZvbGxvd2luZyBmaXZlIG5vZGVzLiB0aGlzIGlkIGlzIHVzZWQgdG8gc2VhcmNoIGNhcGFiaWxpdHkuXG4gICAgICAgIGxldCBzZXJ2aWNQb2xpY2llc0NoaWxkcmVuID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIHNlcnZpY1BvbGljaWVzQ2hpbGRyZW4uaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICBzZXJ2aWNQb2xpY2llc0NoaWxkcmVuLmZpcnN0Q2hpbGQgPSAnWWVzJztcbiAgICAgICAgc2VydmljUG9saWNpZXNDaGlsZHJlbi5uYW1lID0gJ1NlcnZpY2UgUG9saWNpZXMoJysgc2VydmljZV9wb2xpY2llc190b3RhbENvdW50ICsnKSc7XG5cbiAgICAgICAgbGV0IHNlcnZpY2VzQ2hpbGRyZW4gPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgc2VydmljZXNDaGlsZHJlbi5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uZmlyc3RDaGlsZCA9ICdZZXMnO1xuICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLm5hbWUgPSAnU2VydmljZXMoJysgc2VydmljZXNfdG90YWxDb3VudCArJyknO1xuXG4gICAgICAgIGxldCBpZGVudGl0aWVzQ2hpbGRyZW4gPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLmZpcnN0Q2hpbGQgPSAnWWVzJztcbiAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLm5hbWUgPSAnSWRlbnRpdGllcygnKyBpZGVudGl0aWVzX3RvdGFsQ291bnQgKycpJztcblxuICAgICAgICBsZXQgZWRnZXJvdXRlckNoaWxkcmVuID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIGVkZ2Vyb3V0ZXJDaGlsZHJlbi5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgIGVkZ2Vyb3V0ZXJDaGlsZHJlbi5maXJzdENoaWxkID0gJ1llcyc7XG4gICAgICAgIGVkZ2Vyb3V0ZXJDaGlsZHJlbi5uYW1lID0gJ0VkZ2UgUm91dGVycygnKyBlZGdlcm91dGVyc190b3RhbENvdW50ICsnKSc7XG5cbiAgICAgICAgbGV0IGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgZWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4uZmlyc3RDaGlsZCA9ICdZZXMnO1xuICAgICAgICBlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbi5uYW1lID0gJ0VkZ2UgUm91dGVyIFBvbGljaWVzKCcrIGVkZ2Vfcm91dGVyX3BvbGljaWVzX3RvdGFsQ291bnQgKycpJztcblxuICAgICAgICBsZXQgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2VzQ2hpbGRyZW4gPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2VzQ2hpbGRyZW4uaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljZXNDaGlsZHJlbi5maXJzdENoaWxkID0gJ1llcyc7XG4gICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNlc0NoaWxkcmVuLm5hbWUgPSAnU2VydmljZSBFZGdlIFJvdXRlciBQb2xpY2llcygnKyBzZXJ2aWNlX3JvdXRlcl9wb2xpY2llc190b3RhbENvdW50ICsnKSc7XG5cbiAgICAgICAgc2VydmljZXNDaGlsZHJlbiA9IHByb2Nlc3NTZXJ2aWNlc0ZvclRyZWUoXG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLFxuICAgICAgICAgICAgc2VydmljZXMsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgc2VydmljZXMubGVuZ3RoXG4gICAgICAgICk7XG5cbiAgICAgICAgZWRnZXJvdXRlckNoaWxkcmVuID0gcHJvY2Vzc0VkZ2VSb3V0ZXJzRm9yVHJlZShcbiAgICAgICAgICAgIGVkZ2Vyb3V0ZXJDaGlsZHJlbixcbiAgICAgICAgICAgIGVkZ2Vyb3V0ZXJzLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIGVkZ2Vyb3V0ZXJzLmxlbmd0aFxuICAgICAgICApO1xuXG4gICAgICAgIHNlcnZpY1BvbGljaWVzQ2hpbGRyZW4gPSBwcm9jZXNzU2VydmljZVBvbGljaWVzRm9yVHJlZShcbiAgICAgICAgICAgIHNlcnZpY1BvbGljaWVzQ2hpbGRyZW4sXG4gICAgICAgICAgICBzZXJ2aWNlUG9saWNpZXMsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgc2VydmljZVBvbGljaWVzLmxlbmd0aFxuICAgICAgICApO1xuXG4gICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuID0gcHJvY2Vzc0VkZ2VSb3V0ZXJQb2xpY2llc0ZvclRyZWUoXG4gICAgICAgICAgICBlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbixcbiAgICAgICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBlZGdlUm91dGVyUG9saWNpZXMubGVuZ3RoXG4gICAgICAgICk7XG5cbiAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuID0gcHJvY2Vzc0lkZW50aXRpZXNGb3JUcmVlKFxuICAgICAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLFxuICAgICAgICAgICAgaWRlbnRpdGllcyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBpZGVudGl0aWVzLmxlbmd0aFxuICAgICAgICApO1xuICAgICAgICAvL3NlcnZpY2VSb3V0ZXJQb2xpY2llc1xuICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljZXNDaGlsZHJlbiA9IHByb2Nlc3NTZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzRm9yVHJlZShcbiAgICAgICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNlc0NoaWxkcmVuLFxuICAgICAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzLmxlbmd0aFxuICAgICAgICApO1xuXG4gICAgICAgIHJvb3RKc29uLmNoaWxkcmVuLnB1c2goc2VydmljUG9saWNpZXNDaGlsZHJlbik7XG4gICAgICAgIHJvb3RKc29uLmNoaWxkcmVuLnB1c2goc2VydmljZXNDaGlsZHJlbik7XG4gICAgICAgIHJvb3RKc29uLmNoaWxkcmVuLnB1c2goaWRlbnRpdGllc0NoaWxkcmVuKTtcbiAgICAgICAgcm9vdEpzb24uY2hpbGRyZW4ucHVzaChlZGdlcm91dGVyQ2hpbGRyZW4pO1xuICAgICAgICByb290SnNvbi5jaGlsZHJlbi5wdXNoKGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuKTtcbiAgICAgICAgcm9vdEpzb24uY2hpbGRyZW4ucHVzaChzZXJ2aWNlRWRnZVJvdXRlclBvbGljZXNDaGlsZHJlbik7XG4gICAgICAgIHJvb3RKc29uLmxhc3RJZCA9IHVuaXFJZDtcblxuICAgICAgICByZXR1cm4gcm9vdEpzb247XG4gICAgfVxuXG59XG4iXX0=
|