monkey-front-core 0.0.603 → 21.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/README.md +3 -4
- package/fesm2022/monkey-front-core.mjs +5727 -0
- package/fesm2022/monkey-front-core.mjs.map +1 -0
- package/monkey-front-core-21.0.0.tgz +0 -0
- package/package.json +26 -39
- package/types/monkey-front-core.d.ts +1763 -0
- package/esm2020/lib/components/alerts/alerts.component.mjs +0 -45
- package/esm2020/lib/components/alerts/alerts.module.mjs +0 -21
- package/esm2020/lib/components/alerts/index.mjs +0 -3
- package/esm2020/lib/components/closed-to-maintenance/closed-to-maintenance.component.mjs +0 -29
- package/esm2020/lib/components/closed-to-maintenance/closed-to-maintenance.module.mjs +0 -43
- package/esm2020/lib/components/closed-to-maintenance/index.mjs +0 -3
- package/esm2020/lib/components/currency-config/currency-config.component.mjs +0 -39
- package/esm2020/lib/components/currency-config/currency-config.module.mjs +0 -39
- package/esm2020/lib/components/currency-config/index.mjs +0 -3
- package/esm2020/lib/components/index.mjs +0 -6
- package/esm2020/lib/components/progress-bar/index.mjs +0 -4
- package/esm2020/lib/components/progress-bar/progress-bar.component.mjs +0 -23
- package/esm2020/lib/components/progress-bar/progress-bar.module.mjs +0 -18
- package/esm2020/lib/components/progress-bar/progress-bar.service.mjs +0 -50
- package/esm2020/lib/components/version-changed/index.mjs +0 -3
- package/esm2020/lib/components/version-changed/version-changed.component.mjs +0 -24
- package/esm2020/lib/components/version-changed/version-changed.module.mjs +0 -39
- package/esm2020/lib/core/decorators/index.mjs +0 -5
- package/esm2020/lib/core/decorators/monkeyecx-charts-decorators.mjs +0 -40
- package/esm2020/lib/core/decorators/monkeyecx-decorators.mjs +0 -111
- package/esm2020/lib/core/decorators/monkeyecx-download-decorators.mjs +0 -26
- package/esm2020/lib/core/decorators/monkeyecx-upload-decorators.mjs +0 -26
- package/esm2020/lib/core/directives/index.mjs +0 -14
- package/esm2020/lib/core/directives/monkeyecx-directives-module.mjs +0 -78
- package/esm2020/lib/core/directives/monkeyecx-drag-drop.mjs +0 -57
- package/esm2020/lib/core/directives/monkeyecx-feature-by-program-directive.mjs +0 -54
- package/esm2020/lib/core/directives/monkeyecx-feature-directive.mjs +0 -68
- package/esm2020/lib/core/directives/monkeyecx-format-currency.mjs +0 -44
- package/esm2020/lib/core/directives/monkeyecx-format-upper.mjs +0 -67
- package/esm2020/lib/core/directives/monkeyecx-loading.mjs +0 -48
- package/esm2020/lib/core/directives/monkeyecx-only-alpha-numeric-directive.mjs +0 -28
- package/esm2020/lib/core/directives/monkeyecx-only-number-directive.mjs +0 -28
- package/esm2020/lib/core/directives/monkeyecx-popover-options.directive.mjs +0 -39
- package/esm2020/lib/core/directives/monkeyecx-popover.directive.mjs +0 -212
- package/esm2020/lib/core/directives/monkeyecx-security-directive.mjs +0 -75
- package/esm2020/lib/core/directives/monkeyecx-tooltip-directive.mjs +0 -123
- package/esm2020/lib/core/index.mjs +0 -11
- package/esm2020/lib/core/injectors/index.mjs +0 -8
- package/esm2020/lib/core/interceptors/index.mjs +0 -6
- package/esm2020/lib/core/interceptors/monkeyecx-http-config-error.interceptor.mjs +0 -49
- package/esm2020/lib/core/interceptors/monkeyecx-http-config-header.interceptor.mjs +0 -59
- package/esm2020/lib/core/interceptors/monkeyecx-http-config-interceptor.module.mjs +0 -47
- package/esm2020/lib/core/interceptors/monkeyecx-http-config-loading-in-progress.interceptor.mjs +0 -43
- package/esm2020/lib/core/interceptors/monkeyecx-http-config-queue.interceptor.mjs +0 -37
- package/esm2020/lib/core/interfaces/index.mjs +0 -37
- package/esm2020/lib/core/interfaces/monkeyecx-auth-credentials.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-company-pendencies.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-company.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-config-bootstrap.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-config.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-country-security.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-embedded.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-error-response.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-filter.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-group.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-handled-error-response.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-header-credentials.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-intercom-options.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-interface.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-me-credentials.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-navigation.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-pagination.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-program.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-releases.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-request-in-progress.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-request-paged.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-resolver.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-response-links.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-response-paged.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-saved-state.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-scroll-options.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-service-credentials.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-storage.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-store.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-support-options.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-token-credentials.mjs +0 -2
- package/esm2020/lib/core/interfaces/monkeyecx-translate-options.mjs +0 -2
- package/esm2020/lib/core/interfaces/request-download/index.mjs +0 -4
- package/esm2020/lib/core/interfaces/request-download/monkeyecx-request-download.mjs +0 -2
- package/esm2020/lib/core/interfaces/request-download/monkeyecx-request-downloaded.mjs +0 -2
- package/esm2020/lib/core/interfaces/request-download/monkeyecx-request-item-download.mjs +0 -2
- package/esm2020/lib/core/interfaces/request-queue/index.mjs +0 -4
- package/esm2020/lib/core/interfaces/request-queue/monkeyecx-request-item-queue.mjs +0 -2
- package/esm2020/lib/core/interfaces/request-queue/monkeyecx-request-progress-queue.mjs +0 -2
- package/esm2020/lib/core/interfaces/request-queue/monkeyecx-request-queue.mjs +0 -2
- package/esm2020/lib/core/interfaces/request-upload/index.mjs +0 -3
- package/esm2020/lib/core/interfaces/request-upload/monkeyecx-request-item-upload.mjs +0 -2
- package/esm2020/lib/core/interfaces/request-upload/monkeyecx-request-upload.mjs +0 -2
- package/esm2020/lib/core/interfaces/schedules/index.mjs +0 -2
- package/esm2020/lib/core/interfaces/schedules/monkeyecx-request-schedule.mjs +0 -2
- package/esm2020/lib/core/model/index.mjs +0 -3
- package/esm2020/lib/core/model/monkeyecx-links.model.mjs +0 -8
- package/esm2020/lib/core/model/monkeyecx-model.mjs +0 -26
- package/esm2020/lib/core/pipes/index.mjs +0 -24
- package/esm2020/lib/core/pipes/monkeyecx-blob-secure.mjs +0 -26
- package/esm2020/lib/core/pipes/monkeyecx-currency-code.mjs +0 -30
- package/esm2020/lib/core/pipes/monkeyecx-display-first-name.mjs +0 -19
- package/esm2020/lib/core/pipes/monkeyecx-display-initials.mjs +0 -21
- package/esm2020/lib/core/pipes/monkeyecx-display-support-phone.mjs +0 -33
- package/esm2020/lib/core/pipes/monkeyecx-format-address.mjs +0 -20
- package/esm2020/lib/core/pipes/monkeyecx-format-beautify-json.mjs +0 -38
- package/esm2020/lib/core/pipes/monkeyecx-format-currency.mjs +0 -48
- package/esm2020/lib/core/pipes/monkeyecx-format-date-group.mjs +0 -45
- package/esm2020/lib/core/pipes/monkeyecx-format-date-timelapse.mjs +0 -32
- package/esm2020/lib/core/pipes/monkeyecx-format-date-unix-timelapse.mjs +0 -36
- package/esm2020/lib/core/pipes/monkeyecx-format-date.mjs +0 -30
- package/esm2020/lib/core/pipes/monkeyecx-format-document.mjs +0 -20
- package/esm2020/lib/core/pipes/monkeyecx-format-number.mjs +0 -20
- package/esm2020/lib/core/pipes/monkeyecx-format-phone.mjs +0 -42
- package/esm2020/lib/core/pipes/monkeyecx-format-size.mjs +0 -20
- package/esm2020/lib/core/pipes/monkeyecx-format-tax.mjs +0 -23
- package/esm2020/lib/core/pipes/monkeyecx-format-type-document.mjs +0 -19
- package/esm2020/lib/core/pipes/monkeyecx-format-value.mjs +0 -19
- package/esm2020/lib/core/pipes/monkeyecx-format-zipcode.mjs +0 -19
- package/esm2020/lib/core/pipes/monkeyecx-pipes.module.mjs +0 -127
- package/esm2020/lib/core/pipes/monkeyecx-text-truncate.mjs +0 -23
- package/esm2020/lib/core/pipes/monkeyecx-truncate-qtd.mjs +0 -16
- package/esm2020/lib/core/services/alerts/index.mjs +0 -2
- package/esm2020/lib/core/services/alerts/monkeyecx-alerts.service.mjs +0 -88
- package/esm2020/lib/core/services/auth/index.mjs +0 -6
- package/esm2020/lib/core/services/auth/monkeyecx-auth-guard-company.service.mjs +0 -28
- package/esm2020/lib/core/services/auth/monkeyecx-auth-guard-login.service.mjs +0 -27
- package/esm2020/lib/core/services/auth/monkeyecx-auth-guard-role.service.mjs +0 -77
- package/esm2020/lib/core/services/auth/monkeyecx-auth-guard.service.mjs +0 -26
- package/esm2020/lib/core/services/auth/monkeyecx-authentication.service.mjs +0 -79
- package/esm2020/lib/core/services/commons/index.mjs +0 -4
- package/esm2020/lib/core/services/commons/monkeyecx-commons-resolve-base.service.mjs +0 -109
- package/esm2020/lib/core/services/commons/monkeyecx-commons-resolve.service.mjs +0 -127
- package/esm2020/lib/core/services/commons/monkeyecx-commons.service.mjs +0 -362
- package/esm2020/lib/core/services/config/monkeyecx-alerts-config.service.mjs +0 -43
- package/esm2020/lib/core/services/config/monkeyecx-config.module.mjs +0 -28
- package/esm2020/lib/core/services/config/monkeyecx-config.service.mjs +0 -107
- package/esm2020/lib/core/services/config/monkeyecx-currency-config.service.mjs +0 -84
- package/esm2020/lib/core/services/config/monkeyecx-error-config.service.mjs +0 -85
- package/esm2020/lib/core/services/config/monkeyecx-feature-toggle.service.mjs +0 -77
- package/esm2020/lib/core/services/config/monkeyecx-gtm-config.service.mjs +0 -47
- package/esm2020/lib/core/services/config/monkeyecx-i18n-config.service.mjs +0 -162
- package/esm2020/lib/core/services/config/monkeyecx-logs-config.service.mjs +0 -84
- package/esm2020/lib/core/services/config/monkeyecx-maintenance-config.service.mjs +0 -37
- package/esm2020/lib/core/services/config/monkeyecx-security-console-config.service.mjs +0 -48
- package/esm2020/lib/core/services/config/monkeyecx-service-worker-config.service.mjs +0 -55
- package/esm2020/lib/core/services/error/index.mjs +0 -5
- package/esm2020/lib/core/services/error/monkeyecx-error-handling.module.mjs +0 -27
- package/esm2020/lib/core/services/error/monkeyecx-error-handling.service.mjs +0 -37
- package/esm2020/lib/core/services/error/monkeyecx-http-error-handling.service.mjs +0 -149
- package/esm2020/lib/core/services/error/monkeyecx-others-errors-handling.service.mjs +0 -49
- package/esm2020/lib/core/services/index.mjs +0 -27
- package/esm2020/lib/core/services/l/index.mjs +0 -2
- package/esm2020/lib/core/services/l/l.service.mjs +0 -45
- package/esm2020/lib/core/services/logged/index.mjs +0 -2
- package/esm2020/lib/core/services/logged/monkeyecx-logged-handling.service.mjs +0 -40
- package/esm2020/lib/core/services/monkeyecx-handling.service.mjs +0 -50
- package/esm2020/lib/core/services/monkeyecx-service.service.mjs +0 -109
- package/esm2020/lib/core/services/pagination/index.mjs +0 -2
- package/esm2020/lib/core/services/pagination/monkeyecx-pagination.service.mjs +0 -29
- package/esm2020/lib/core/services/request-download/index.mjs +0 -3
- package/esm2020/lib/core/services/request-download/monkeyecx-request-download-handling.service.mjs +0 -93
- package/esm2020/lib/core/services/request-download/monkeyecx-request-downloaded-handling.service.mjs +0 -61
- package/esm2020/lib/core/services/request-paged/index.mjs +0 -2
- package/esm2020/lib/core/services/request-paged/monkeyecx-request-request-paged-handling.mjs +0 -42
- package/esm2020/lib/core/services/request-queue/index.mjs +0 -3
- package/esm2020/lib/core/services/request-queue/monkeyecx-request-queue-handling.service.mjs +0 -114
- package/esm2020/lib/core/services/request-queue/monkeyecx-request-queue-modal-handling.service.mjs +0 -119
- package/esm2020/lib/core/services/routes/index.mjs +0 -2
- package/esm2020/lib/core/services/routes/monkeyecx-dicovery-params.service.mjs +0 -54
- package/esm2020/lib/core/services/schedules/index.mjs +0 -2
- package/esm2020/lib/core/services/schedules/monkeyecx-request-schedule.service.mjs +0 -188
- package/esm2020/lib/core/services/storage/index.mjs +0 -3
- package/esm2020/lib/core/services/storage/monkeyecx-cookie-storage.service.mjs +0 -32
- package/esm2020/lib/core/services/storage/monkeyecx-token-storage.service.mjs +0 -237
- package/esm2020/lib/core/services/store/index.mjs +0 -5
- package/esm2020/lib/core/services/store/monkeyecx-store-base.service.mjs +0 -174
- package/esm2020/lib/core/services/store/monkeyecx-store.actions.mjs +0 -26
- package/esm2020/lib/core/services/store/monkeyecx-store.selector.mjs +0 -87
- package/esm2020/lib/core/services/store/monkeyecx-store.service.mjs +0 -195
- package/esm2020/lib/core/specification-search/index.mjs +0 -2
- package/esm2020/lib/core/specification-search/monkeyecx-specification-search.mjs +0 -108
- package/esm2020/lib/core/utils/decorators-utils.mjs +0 -40
- package/esm2020/lib/core/utils/index.mjs +0 -8
- package/esm2020/lib/core/utils/statics.mjs +0 -47
- package/esm2020/lib/core/utils/utils.mjs +0 -469
- package/esm2020/lib/core/utils/validate-utils.mjs +0 -219
- package/esm2020/lib/core/utils/validators.mjs +0 -327
- package/esm2020/lib/monkey-front-core.module.mjs +0 -71
- package/esm2020/lib/store/actions/index.mjs +0 -2
- package/esm2020/lib/store/actions/monkeyecx-storage.actions.mjs +0 -8
- package/esm2020/lib/store/index.mjs +0 -4
- package/esm2020/lib/store/reducers/index.mjs +0 -3
- package/esm2020/lib/store/reducers/monkeyecx-seeder.reducer.mjs +0 -53
- package/esm2020/lib/store/reducers/monkeyecx-storage.reducer.mjs +0 -40
- package/esm2020/lib/store/selectors/index.mjs +0 -2
- package/esm2020/lib/store/selectors/monkeyecx-storage.selector.mjs +0 -17
- package/esm2020/monkey-front-core.mjs +0 -5
- package/esm2020/public-api.mjs +0 -8
- package/fesm2015/monkey-front-core.mjs +0 -7239
- package/fesm2015/monkey-front-core.mjs.map +0 -1
- package/fesm2020/monkey-front-core.mjs +0 -7249
- package/fesm2020/monkey-front-core.mjs.map +0 -1
- package/lib/components/alerts/alerts.component.d.ts +0 -22
- package/lib/components/alerts/alerts.module.d.ts +0 -10
- package/lib/components/alerts/index.d.ts +0 -2
- package/lib/components/closed-to-maintenance/closed-to-maintenance.component.d.ts +0 -13
- package/lib/components/closed-to-maintenance/closed-to-maintenance.module.d.ts +0 -11
- package/lib/components/closed-to-maintenance/index.d.ts +0 -2
- package/lib/components/currency-config/currency-config.component.d.ts +0 -17
- package/lib/components/currency-config/currency-config.module.d.ts +0 -10
- package/lib/components/currency-config/index.d.ts +0 -2
- package/lib/components/index.d.ts +0 -5
- package/lib/components/progress-bar/index.d.ts +0 -3
- package/lib/components/progress-bar/progress-bar.component.d.ts +0 -11
- package/lib/components/progress-bar/progress-bar.module.d.ts +0 -8
- package/lib/components/progress-bar/progress-bar.service.d.ts +0 -14
- package/lib/components/version-changed/index.d.ts +0 -2
- package/lib/components/version-changed/version-changed.component.d.ts +0 -9
- package/lib/components/version-changed/version-changed.module.d.ts +0 -10
- package/lib/core/decorators/index.d.ts +0 -4
- package/lib/core/decorators/monkeyecx-charts-decorators.d.ts +0 -1
- package/lib/core/decorators/monkeyecx-decorators.d.ts +0 -7
- package/lib/core/decorators/monkeyecx-download-decorators.d.ts +0 -2
- package/lib/core/decorators/monkeyecx-upload-decorators.d.ts +0 -2
- package/lib/core/directives/index.d.ts +0 -13
- package/lib/core/directives/monkeyecx-directives-module.d.ts +0 -20
- package/lib/core/directives/monkeyecx-drag-drop.d.ts +0 -12
- package/lib/core/directives/monkeyecx-feature-by-program-directive.d.ts +0 -16
- package/lib/core/directives/monkeyecx-feature-directive.d.ts +0 -17
- package/lib/core/directives/monkeyecx-format-currency.d.ts +0 -16
- package/lib/core/directives/monkeyecx-format-upper.d.ts +0 -18
- package/lib/core/directives/monkeyecx-loading.d.ts +0 -16
- package/lib/core/directives/monkeyecx-only-alpha-numeric-directive.d.ts +0 -9
- package/lib/core/directives/monkeyecx-only-number-directive.d.ts +0 -9
- package/lib/core/directives/monkeyecx-popover-options.directive.d.ts +0 -19
- package/lib/core/directives/monkeyecx-popover.directive.d.ts +0 -43
- package/lib/core/directives/monkeyecx-security-directive.d.ts +0 -18
- package/lib/core/directives/monkeyecx-tooltip-directive.d.ts +0 -23
- package/lib/core/index.d.ts +0 -10
- package/lib/core/injectors/index.d.ts +0 -7
- package/lib/core/interceptors/index.d.ts +0 -5
- package/lib/core/interceptors/monkeyecx-http-config-error.interceptor.d.ts +0 -18
- package/lib/core/interceptors/monkeyecx-http-config-header.interceptor.d.ts +0 -16
- package/lib/core/interceptors/monkeyecx-http-config-interceptor.module.d.ts +0 -9
- package/lib/core/interceptors/monkeyecx-http-config-loading-in-progress.interceptor.d.ts +0 -12
- package/lib/core/interceptors/monkeyecx-http-config-queue.interceptor.d.ts +0 -14
- package/lib/core/interfaces/index.d.ts +0 -36
- package/lib/core/interfaces/monkeyecx-auth-credentials.d.ts +0 -15
- package/lib/core/interfaces/monkeyecx-company-pendencies.d.ts +0 -14
- package/lib/core/interfaces/monkeyecx-company.d.ts +0 -10
- package/lib/core/interfaces/monkeyecx-config-bootstrap.d.ts +0 -14
- package/lib/core/interfaces/monkeyecx-config.d.ts +0 -132
- package/lib/core/interfaces/monkeyecx-country-security.d.ts +0 -4
- package/lib/core/interfaces/monkeyecx-embedded.d.ts +0 -7
- package/lib/core/interfaces/monkeyecx-error-response.d.ts +0 -5
- package/lib/core/interfaces/monkeyecx-filter.d.ts +0 -42
- package/lib/core/interfaces/monkeyecx-group.d.ts +0 -13
- package/lib/core/interfaces/monkeyecx-handled-error-response.d.ts +0 -10
- package/lib/core/interfaces/monkeyecx-header-credentials.d.ts +0 -4
- package/lib/core/interfaces/monkeyecx-intercom-options.d.ts +0 -4
- package/lib/core/interfaces/monkeyecx-interface.d.ts +0 -11
- package/lib/core/interfaces/monkeyecx-me-credentials.d.ts +0 -20
- package/lib/core/interfaces/monkeyecx-navigation.d.ts +0 -30
- package/lib/core/interfaces/monkeyecx-pagination.d.ts +0 -26
- package/lib/core/interfaces/monkeyecx-program.d.ts +0 -10
- package/lib/core/interfaces/monkeyecx-releases.d.ts +0 -9
- package/lib/core/interfaces/monkeyecx-request-in-progress.d.ts +0 -3
- package/lib/core/interfaces/monkeyecx-request-paged.d.ts +0 -23
- package/lib/core/interfaces/monkeyecx-resolver.d.ts +0 -39
- package/lib/core/interfaces/monkeyecx-response-links.d.ts +0 -11
- package/lib/core/interfaces/monkeyecx-response-paged.d.ts +0 -6
- package/lib/core/interfaces/monkeyecx-saved-state.d.ts +0 -5
- package/lib/core/interfaces/monkeyecx-scroll-options.d.ts +0 -5
- package/lib/core/interfaces/monkeyecx-service-credentials.d.ts +0 -12
- package/lib/core/interfaces/monkeyecx-storage.d.ts +0 -35
- package/lib/core/interfaces/monkeyecx-store.d.ts +0 -45
- package/lib/core/interfaces/monkeyecx-support-options.d.ts +0 -4
- package/lib/core/interfaces/monkeyecx-token-credentials.d.ts +0 -30
- package/lib/core/interfaces/monkeyecx-translate-options.d.ts +0 -4
- package/lib/core/interfaces/request-download/index.d.ts +0 -3
- package/lib/core/interfaces/request-download/monkeyecx-request-download.d.ts +0 -10
- package/lib/core/interfaces/request-download/monkeyecx-request-downloaded.d.ts +0 -7
- package/lib/core/interfaces/request-download/monkeyecx-request-item-download.d.ts +0 -7
- package/lib/core/interfaces/request-queue/index.d.ts +0 -3
- package/lib/core/interfaces/request-queue/monkeyecx-request-item-queue.d.ts +0 -7
- package/lib/core/interfaces/request-queue/monkeyecx-request-progress-queue.d.ts +0 -6
- package/lib/core/interfaces/request-queue/monkeyecx-request-queue.d.ts +0 -8
- package/lib/core/interfaces/request-upload/index.d.ts +0 -2
- package/lib/core/interfaces/request-upload/monkeyecx-request-item-upload.d.ts +0 -5
- package/lib/core/interfaces/request-upload/monkeyecx-request-upload.d.ts +0 -10
- package/lib/core/interfaces/schedules/index.d.ts +0 -1
- package/lib/core/interfaces/schedules/monkeyecx-request-schedule.d.ts +0 -13
- package/lib/core/model/index.d.ts +0 -2
- package/lib/core/model/monkeyecx-links.model.d.ts +0 -4
- package/lib/core/model/monkeyecx-model.d.ts +0 -14
- package/lib/core/pipes/index.d.ts +0 -23
- package/lib/core/pipes/monkeyecx-blob-secure.d.ts +0 -13
- package/lib/core/pipes/monkeyecx-currency-code.d.ts +0 -9
- package/lib/core/pipes/monkeyecx-display-first-name.d.ts +0 -7
- package/lib/core/pipes/monkeyecx-display-initials.d.ts +0 -7
- package/lib/core/pipes/monkeyecx-display-support-phone.d.ts +0 -18
- package/lib/core/pipes/monkeyecx-format-address.d.ts +0 -14
- package/lib/core/pipes/monkeyecx-format-beautify-json.d.ts +0 -8
- package/lib/core/pipes/monkeyecx-format-currency.d.ts +0 -12
- package/lib/core/pipes/monkeyecx-format-date-group.d.ts +0 -11
- package/lib/core/pipes/monkeyecx-format-date-timelapse.d.ts +0 -7
- package/lib/core/pipes/monkeyecx-format-date-unix-timelapse.d.ts +0 -7
- package/lib/core/pipes/monkeyecx-format-date.d.ts +0 -12
- package/lib/core/pipes/monkeyecx-format-document.d.ts +0 -7
- package/lib/core/pipes/monkeyecx-format-number.d.ts +0 -7
- package/lib/core/pipes/monkeyecx-format-phone.d.ts +0 -7
- package/lib/core/pipes/monkeyecx-format-size.d.ts +0 -7
- package/lib/core/pipes/monkeyecx-format-tax.d.ts +0 -7
- package/lib/core/pipes/monkeyecx-format-type-document.d.ts +0 -7
- package/lib/core/pipes/monkeyecx-format-value.d.ts +0 -7
- package/lib/core/pipes/monkeyecx-format-zipcode.d.ts +0 -7
- package/lib/core/pipes/monkeyecx-pipes.module.d.ts +0 -28
- package/lib/core/pipes/monkeyecx-text-truncate.d.ts +0 -7
- package/lib/core/pipes/monkeyecx-truncate-qtd.d.ts +0 -7
- package/lib/core/services/alerts/index.d.ts +0 -1
- package/lib/core/services/alerts/monkeyecx-alerts.service.d.ts +0 -49
- package/lib/core/services/auth/index.d.ts +0 -5
- package/lib/core/services/auth/monkeyecx-auth-guard-company.service.d.ts +0 -10
- package/lib/core/services/auth/monkeyecx-auth-guard-login.service.d.ts +0 -10
- package/lib/core/services/auth/monkeyecx-auth-guard-role.service.d.ts +0 -16
- package/lib/core/services/auth/monkeyecx-auth-guard.service.d.ts +0 -10
- package/lib/core/services/auth/monkeyecx-authentication.service.d.ts +0 -35
- package/lib/core/services/commons/index.d.ts +0 -3
- package/lib/core/services/commons/monkeyecx-commons-resolve-base.service.d.ts +0 -46
- package/lib/core/services/commons/monkeyecx-commons-resolve.service.d.ts +0 -60
- package/lib/core/services/commons/monkeyecx-commons.service.d.ts +0 -120
- package/lib/core/services/config/monkeyecx-alerts-config.service.d.ts +0 -11
- package/lib/core/services/config/monkeyecx-config.module.d.ts +0 -9
- package/lib/core/services/config/monkeyecx-config.service.d.ts +0 -36
- package/lib/core/services/config/monkeyecx-currency-config.service.d.ts +0 -15
- package/lib/core/services/config/monkeyecx-error-config.service.d.ts +0 -8
- package/lib/core/services/config/monkeyecx-feature-toggle.service.d.ts +0 -17
- package/lib/core/services/config/monkeyecx-gtm-config.service.d.ts +0 -8
- package/lib/core/services/config/monkeyecx-i18n-config.service.d.ts +0 -24
- package/lib/core/services/config/monkeyecx-logs-config.service.d.ts +0 -14
- package/lib/core/services/config/monkeyecx-maintenance-config.service.d.ts +0 -13
- package/lib/core/services/config/monkeyecx-security-console-config.service.d.ts +0 -12
- package/lib/core/services/config/monkeyecx-service-worker-config.service.d.ts +0 -16
- package/lib/core/services/error/index.d.ts +0 -4
- package/lib/core/services/error/monkeyecx-error-handling.module.d.ts +0 -9
- package/lib/core/services/error/monkeyecx-error-handling.service.d.ts +0 -9
- package/lib/core/services/error/monkeyecx-http-error-handling.service.d.ts +0 -26
- package/lib/core/services/error/monkeyecx-others-errors-handling.service.d.ts +0 -11
- package/lib/core/services/index.d.ts +0 -26
- package/lib/core/services/l/index.d.ts +0 -1
- package/lib/core/services/l/l.service.d.ts +0 -11
- package/lib/core/services/logged/index.d.ts +0 -1
- package/lib/core/services/logged/monkeyecx-logged-handling.service.d.ts +0 -14
- package/lib/core/services/monkeyecx-handling.service.d.ts +0 -22
- package/lib/core/services/monkeyecx-service.service.d.ts +0 -19
- package/lib/core/services/pagination/index.d.ts +0 -1
- package/lib/core/services/pagination/monkeyecx-pagination.service.d.ts +0 -9
- package/lib/core/services/request-download/index.d.ts +0 -2
- package/lib/core/services/request-download/monkeyecx-request-download-handling.service.d.ts +0 -18
- package/lib/core/services/request-download/monkeyecx-request-downloaded-handling.service.d.ts +0 -16
- package/lib/core/services/request-paged/index.d.ts +0 -1
- package/lib/core/services/request-paged/monkeyecx-request-request-paged-handling.d.ts +0 -11
- package/lib/core/services/request-queue/index.d.ts +0 -2
- package/lib/core/services/request-queue/monkeyecx-request-queue-handling.service.d.ts +0 -21
- package/lib/core/services/request-queue/monkeyecx-request-queue-modal-handling.service.d.ts +0 -23
- package/lib/core/services/routes/index.d.ts +0 -1
- package/lib/core/services/routes/monkeyecx-dicovery-params.service.d.ts +0 -13
- package/lib/core/services/schedules/index.d.ts +0 -1
- package/lib/core/services/schedules/monkeyecx-request-schedule.service.d.ts +0 -47
- package/lib/core/services/storage/index.d.ts +0 -2
- package/lib/core/services/storage/monkeyecx-cookie-storage.service.d.ts +0 -11
- package/lib/core/services/storage/monkeyecx-token-storage.service.d.ts +0 -30
- package/lib/core/services/store/index.d.ts +0 -4
- package/lib/core/services/store/monkeyecx-store-base.service.d.ts +0 -47
- package/lib/core/services/store/monkeyecx-store.actions.d.ts +0 -42
- package/lib/core/services/store/monkeyecx-store.selector.d.ts +0 -32
- package/lib/core/services/store/monkeyecx-store.service.d.ts +0 -50
- package/lib/core/specification-search/index.d.ts +0 -1
- package/lib/core/specification-search/monkeyecx-specification-search.d.ts +0 -20
- package/lib/core/utils/decorators-utils.d.ts +0 -5
- package/lib/core/utils/index.d.ts +0 -6
- package/lib/core/utils/statics.d.ts +0 -36
- package/lib/core/utils/utils.d.ts +0 -39
- package/lib/core/utils/validate-utils.d.ts +0 -71
- package/lib/core/utils/validators.d.ts +0 -43
- package/lib/monkey-front-core.module.d.ts +0 -19
- package/lib/store/actions/index.d.ts +0 -1
- package/lib/store/actions/monkeyecx-storage.actions.d.ts +0 -23
- package/lib/store/index.d.ts +0 -3
- package/lib/store/reducers/index.d.ts +0 -2
- package/lib/store/reducers/monkeyecx-seeder.reducer.d.ts +0 -2
- package/lib/store/reducers/monkeyecx-storage.reducer.d.ts +0 -13
- package/lib/store/selectors/index.d.ts +0 -1
- package/lib/store/selectors/monkeyecx-storage.selector.d.ts +0 -8
- package/monkey-front-core-0.0.603.tgz +0 -0
- package/monkey-front-core.d.ts +0 -5
- package/public-api.d.ts +0 -4
|
@@ -1,469 +0,0 @@
|
|
|
1
|
-
/* eslint-disable comma-dangle */
|
|
2
|
-
/* eslint-disable max-len */
|
|
3
|
-
/* eslint-disable no-useless-escape */
|
|
4
|
-
/* eslint-disable no-plusplus */
|
|
5
|
-
/* eslint-disable no-cond-assign */
|
|
6
|
-
/* eslint-disable eqeqeq */
|
|
7
|
-
/* eslint-disable no-redeclare */
|
|
8
|
-
/* eslint-disable vars-on-top */
|
|
9
|
-
/* eslint-disable no-var */
|
|
10
|
-
import { datadogLogs } from '@datadog/browser-logs';
|
|
11
|
-
import { CountryMasks } from './statics';
|
|
12
|
-
/* eslint-disable block-scoped-var */
|
|
13
|
-
export class MonkeyEcxUtils {
|
|
14
|
-
static persistNullEmptyUndefined(tp) {
|
|
15
|
-
return tp !== null && tp !== undefined && tp !== '';
|
|
16
|
-
}
|
|
17
|
-
static getDocumentType(doc, country) {
|
|
18
|
-
if (!doc)
|
|
19
|
-
return '';
|
|
20
|
-
if (country === 'cl')
|
|
21
|
-
return 'RUT';
|
|
22
|
-
if (country === 'mx')
|
|
23
|
-
return 'RFC';
|
|
24
|
-
if (country === 'us')
|
|
25
|
-
return 'EIN';
|
|
26
|
-
return doc.length <= 11 ? 'CPF' : 'CNPJ';
|
|
27
|
-
}
|
|
28
|
-
static getDocumentMask(type, country = '') {
|
|
29
|
-
return {
|
|
30
|
-
BR: {
|
|
31
|
-
CPF: CountryMasks.CPF,
|
|
32
|
-
CNPJ: CountryMasks.CNPJ,
|
|
33
|
-
'': `${CountryMasks.CPF}||${CountryMasks.CNPJ}`
|
|
34
|
-
},
|
|
35
|
-
CL: {
|
|
36
|
-
CPF: CountryMasks.RUT1,
|
|
37
|
-
CNPJ: CountryMasks.RUT2,
|
|
38
|
-
'': `${CountryMasks.RUT1}||${CountryMasks.RUT2}`
|
|
39
|
-
},
|
|
40
|
-
MX: {
|
|
41
|
-
CPF: CountryMasks.RFC1,
|
|
42
|
-
CNPJ: CountryMasks.RFC2,
|
|
43
|
-
'': `${CountryMasks.RFC1}||${CountryMasks.RFC2}`
|
|
44
|
-
}
|
|
45
|
-
}[country.toUpperCase()]?.[type];
|
|
46
|
-
}
|
|
47
|
-
static getDocumentPlaceholder(type, country = '') {
|
|
48
|
-
return {
|
|
49
|
-
BR: {
|
|
50
|
-
CPF: '000.000.000-XX',
|
|
51
|
-
CNPJ: '00.000.000/0000-00'
|
|
52
|
-
},
|
|
53
|
-
CL: {
|
|
54
|
-
CPF: '0000000-A',
|
|
55
|
-
CNPJ: '0000000-A'
|
|
56
|
-
},
|
|
57
|
-
MX: {
|
|
58
|
-
CPF: CountryMasks.RFC1,
|
|
59
|
-
CNPJ: CountryMasks.RFC2
|
|
60
|
-
}
|
|
61
|
-
}[country.toUpperCase()]?.[type];
|
|
62
|
-
}
|
|
63
|
-
static formatDocumentWithMask(doc, withType, country) {
|
|
64
|
-
if (!doc)
|
|
65
|
-
return doc;
|
|
66
|
-
let formated = '';
|
|
67
|
-
if (country === 'cl') {
|
|
68
|
-
formated = doc.replace(/^(\d{1,2})(\d{3})(\d{3})(\w{1})$/, '$1.$2.$3-$4');
|
|
69
|
-
return `${formated}`;
|
|
70
|
-
}
|
|
71
|
-
if (country === 'us') {
|
|
72
|
-
return doc;
|
|
73
|
-
}
|
|
74
|
-
if (doc.length === 14) {
|
|
75
|
-
formated = doc
|
|
76
|
-
.replace(/^(\d{2})(\d)/, '$1.$2')
|
|
77
|
-
.replace(/^(\d{2})\.(\d{3})(\d)/, '$1.$2.$3')
|
|
78
|
-
.replace(/\.(\d{3})(\d)/, '.$1/$2')
|
|
79
|
-
.replace(/(\d{4})(\d)/, '$1-$2');
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
formated = doc
|
|
83
|
-
.replace(/^(\d{3})(\d)/, '$1.$2')
|
|
84
|
-
.replace(/^(\d{3})\.(\d{3})(\d)/, '$1.$2.$3')
|
|
85
|
-
.replace(/\.(\d{3})(\d)/, '.$1-$2');
|
|
86
|
-
}
|
|
87
|
-
return `${withType ? `${this.getDocumentType(doc)}:` : ''} ${formated}`;
|
|
88
|
-
}
|
|
89
|
-
static cutFirstLastName(value, tp = 'first') {
|
|
90
|
-
const split = value?.trim()?.split(' ');
|
|
91
|
-
if (tp === 'first')
|
|
92
|
-
return split[0];
|
|
93
|
-
return split?.splice(1, split.length)?.join(' ');
|
|
94
|
-
}
|
|
95
|
-
static isCPFCNPJValid(document) {
|
|
96
|
-
document = document.replace(/[^\d]/g, '');
|
|
97
|
-
const handled = document.replace(new RegExp(document.charAt(0), 'g'), '');
|
|
98
|
-
if (!handled)
|
|
99
|
-
return false;
|
|
100
|
-
if (document.length === 11) {
|
|
101
|
-
let base = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
|
|
102
|
-
for (var i = 0, n = 0; i < 9; n += document[i] * base[i++])
|
|
103
|
-
;
|
|
104
|
-
if (document[9] != ((n %= 11) <= 1 ? 0 : 11 - n)) {
|
|
105
|
-
return false;
|
|
106
|
-
}
|
|
107
|
-
base = [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
|
|
108
|
-
for (var i = 0, n = 0; i <= 9; n += document[i] * base[i++])
|
|
109
|
-
;
|
|
110
|
-
if (document[10] != ((n %= 11) <= 1 ? 0 : 11 - n)) {
|
|
111
|
-
return false;
|
|
112
|
-
}
|
|
113
|
-
return true;
|
|
114
|
-
}
|
|
115
|
-
if (document.length === 14 || /0{14}/.test(document)) {
|
|
116
|
-
const base = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
|
|
117
|
-
for (var i = 0, n = 0; i < 12; n += document[i] * base[++i])
|
|
118
|
-
;
|
|
119
|
-
if (document[12] != ((n %= 11) < 2 ? 0 : 11 - n)) {
|
|
120
|
-
return false;
|
|
121
|
-
}
|
|
122
|
-
for (var i = 0, n = 0; i <= 12; n += document[i] * base[i++])
|
|
123
|
-
;
|
|
124
|
-
if (document[13] != ((n %= 11) < 2 ? 0 : 11 - n)) {
|
|
125
|
-
return false;
|
|
126
|
-
}
|
|
127
|
-
return true;
|
|
128
|
-
}
|
|
129
|
-
return false;
|
|
130
|
-
}
|
|
131
|
-
static isValidRUT(document) {
|
|
132
|
-
if (!document || document.trim().length < 3)
|
|
133
|
-
return false;
|
|
134
|
-
const documentHandled = document.replace(/[^0-9kK]/g, '');
|
|
135
|
-
if (documentHandled.length < 3)
|
|
136
|
-
return false;
|
|
137
|
-
const calcDv = (rut) => {
|
|
138
|
-
const value = `${rut}`;
|
|
139
|
-
let sum = 0;
|
|
140
|
-
let mult = 2;
|
|
141
|
-
for (let i = 1; i <= value.length; i++) {
|
|
142
|
-
const index = mult * Number(value.charAt(value.length - i));
|
|
143
|
-
sum += index;
|
|
144
|
-
if (mult < 7) {
|
|
145
|
-
mult += 1;
|
|
146
|
-
}
|
|
147
|
-
else {
|
|
148
|
-
mult = 2;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
const dvEsperado = 11 - (sum % 11);
|
|
152
|
-
if (dvEsperado === 10)
|
|
153
|
-
return 'K';
|
|
154
|
-
if (dvEsperado === 11)
|
|
155
|
-
return '0';
|
|
156
|
-
return `${dvEsperado}`;
|
|
157
|
-
};
|
|
158
|
-
const num = documentHandled.slice(0, -1);
|
|
159
|
-
const dgv = documentHandled.slice(-1).toUpperCase();
|
|
160
|
-
const dvCalc = calcDv(num);
|
|
161
|
-
return dvCalc === dgv;
|
|
162
|
-
}
|
|
163
|
-
static isValidRFC(document) {
|
|
164
|
-
const RFC_REGEXP = /^([A-ZÑ\x26]{3,4})([0-9]{6})([A-Z0-9]{3})$/;
|
|
165
|
-
const SPECIAL_CASES = {
|
|
166
|
-
XEXX010101000: 'foreign',
|
|
167
|
-
XAXX010101000: 'generic'
|
|
168
|
-
};
|
|
169
|
-
const FORBIDDEN_WORDS = [
|
|
170
|
-
'BUEI',
|
|
171
|
-
'BUEY',
|
|
172
|
-
'CACA',
|
|
173
|
-
'CACO',
|
|
174
|
-
'CAGA',
|
|
175
|
-
'CAGO',
|
|
176
|
-
'CAKA',
|
|
177
|
-
'CAKO',
|
|
178
|
-
'COGE',
|
|
179
|
-
'COJA',
|
|
180
|
-
'COJE',
|
|
181
|
-
'COJI',
|
|
182
|
-
'COJO',
|
|
183
|
-
'CULO',
|
|
184
|
-
'FETO',
|
|
185
|
-
'GUEY',
|
|
186
|
-
'JOTO',
|
|
187
|
-
'KACA',
|
|
188
|
-
'KACO',
|
|
189
|
-
'KAGA',
|
|
190
|
-
'KAGO',
|
|
191
|
-
'KOGE',
|
|
192
|
-
'KOJO',
|
|
193
|
-
'KAKA',
|
|
194
|
-
'KULO',
|
|
195
|
-
'MAME',
|
|
196
|
-
'MAMO',
|
|
197
|
-
'MEAR',
|
|
198
|
-
'MEAS',
|
|
199
|
-
'MEON',
|
|
200
|
-
'MION',
|
|
201
|
-
'MOCO',
|
|
202
|
-
'MULA',
|
|
203
|
-
'PEDA',
|
|
204
|
-
'PEDO',
|
|
205
|
-
'PENE',
|
|
206
|
-
'PUTA',
|
|
207
|
-
'PUTO',
|
|
208
|
-
'QULO',
|
|
209
|
-
'RATA',
|
|
210
|
-
'RUIN'
|
|
211
|
-
];
|
|
212
|
-
const VALUES_MAP = {
|
|
213
|
-
0: 0,
|
|
214
|
-
1: 1,
|
|
215
|
-
2: 2,
|
|
216
|
-
3: 3,
|
|
217
|
-
4: 4,
|
|
218
|
-
5: 5,
|
|
219
|
-
6: 6,
|
|
220
|
-
7: 7,
|
|
221
|
-
8: 8,
|
|
222
|
-
9: 9,
|
|
223
|
-
A: 10,
|
|
224
|
-
B: 11,
|
|
225
|
-
C: 12,
|
|
226
|
-
D: 13,
|
|
227
|
-
E: 14,
|
|
228
|
-
F: 15,
|
|
229
|
-
G: 16,
|
|
230
|
-
H: 17,
|
|
231
|
-
I: 18,
|
|
232
|
-
J: 19,
|
|
233
|
-
K: 20,
|
|
234
|
-
L: 21,
|
|
235
|
-
M: 22,
|
|
236
|
-
N: 23,
|
|
237
|
-
'&': 24,
|
|
238
|
-
O: 25,
|
|
239
|
-
P: 26,
|
|
240
|
-
Q: 27,
|
|
241
|
-
R: 28,
|
|
242
|
-
S: 29,
|
|
243
|
-
T: 30,
|
|
244
|
-
U: 31,
|
|
245
|
-
V: 32,
|
|
246
|
-
W: 33,
|
|
247
|
-
X: 34,
|
|
248
|
-
Y: 35,
|
|
249
|
-
Z: 36,
|
|
250
|
-
' ': 37,
|
|
251
|
-
Ñ: 38
|
|
252
|
-
};
|
|
253
|
-
const getScore = (doc) => {
|
|
254
|
-
return doc.split('').reverse().reduce((sum, char, i) => {
|
|
255
|
-
const index = i + 2;
|
|
256
|
-
const value = VALUES_MAP[char] || 0;
|
|
257
|
-
return sum + value * index;
|
|
258
|
-
}, 0);
|
|
259
|
-
};
|
|
260
|
-
const parseInput = (doc) => {
|
|
261
|
-
return String(doc)
|
|
262
|
-
.trim()
|
|
263
|
-
.toUpperCase()
|
|
264
|
-
.replace(/[^0-9A-ZÑ\x26]/g, '');
|
|
265
|
-
};
|
|
266
|
-
const validateDate = (doc) => {
|
|
267
|
-
const dateStr = doc.slice(0, -3).slice(-6);
|
|
268
|
-
const year = dateStr.slice(0, 2);
|
|
269
|
-
const month = dateStr.slice(2, 4);
|
|
270
|
-
const day = dateStr.slice(4, 6);
|
|
271
|
-
const date = new Date(`20${year}-${month}-${day}`);
|
|
272
|
-
// eslint-disable-next-line no-restricted-globals
|
|
273
|
-
return !isNaN(date.getTime());
|
|
274
|
-
};
|
|
275
|
-
const validateVerificationDigit = (doc) => {
|
|
276
|
-
const digit = doc.slice(-1);
|
|
277
|
-
const rfc = doc.length === 12 ? ` ${doc}` : doc;
|
|
278
|
-
const base = rfc.slice(0, -1);
|
|
279
|
-
const score = getScore(base);
|
|
280
|
-
const mod = (11000 - score) % 11;
|
|
281
|
-
if (mod === 11)
|
|
282
|
-
return digit === '0';
|
|
283
|
-
if (mod === 10)
|
|
284
|
-
return digit === 'A';
|
|
285
|
-
return String(mod) === digit;
|
|
286
|
-
};
|
|
287
|
-
const isSpecialCase = (doc) => { return doc in SPECIAL_CASES; };
|
|
288
|
-
const hasForbiddenWords = (doc) => {
|
|
289
|
-
const prefix = (doc || '').slice(0, 4);
|
|
290
|
-
return FORBIDDEN_WORDS.includes(prefix);
|
|
291
|
-
};
|
|
292
|
-
try {
|
|
293
|
-
const input = parseInput(document);
|
|
294
|
-
if (isSpecialCase(input))
|
|
295
|
-
return false;
|
|
296
|
-
const hasValidFormat = RFC_REGEXP.test(input);
|
|
297
|
-
if (!hasValidFormat)
|
|
298
|
-
return false;
|
|
299
|
-
const hasValidDate = validateDate(input);
|
|
300
|
-
if (!hasValidDate)
|
|
301
|
-
return false;
|
|
302
|
-
const hasValidDigit = validateVerificationDigit(input);
|
|
303
|
-
if (!hasValidDigit)
|
|
304
|
-
return false;
|
|
305
|
-
if (hasForbiddenWords(input))
|
|
306
|
-
return false;
|
|
307
|
-
return true;
|
|
308
|
-
}
|
|
309
|
-
catch (e) {
|
|
310
|
-
// not to do
|
|
311
|
-
}
|
|
312
|
-
return false;
|
|
313
|
-
}
|
|
314
|
-
static isValidUrl(txt) {
|
|
315
|
-
const regex = /(https?:\/\/(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9])(:?\d*)\/?([a-z_\\/0-9\-#.]*)\??([a-z_\\/0-9\-#=&]*)/g;
|
|
316
|
-
return regex.test(txt);
|
|
317
|
-
}
|
|
318
|
-
static isValidZipCode(zipCode, country) {
|
|
319
|
-
const length = {
|
|
320
|
-
br: 8,
|
|
321
|
-
cl: 7,
|
|
322
|
-
mx: 5
|
|
323
|
-
}[country || 'br'];
|
|
324
|
-
return `${this.handleOnlyNumbers(zipCode)}`.length === length;
|
|
325
|
-
}
|
|
326
|
-
static isValidEmail(email) {
|
|
327
|
-
return /^[\w-.]+@([\w-]+\.)+[\w-]{1,64}$/.test(email || '');
|
|
328
|
-
}
|
|
329
|
-
static getRandomString(len, charSet) {
|
|
330
|
-
charSet = charSet || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
331
|
-
const randomString = new Array(len)
|
|
332
|
-
.fill('1')
|
|
333
|
-
.map(() => {
|
|
334
|
-
return charSet?.charAt(Math.floor(Math.random() * charSet?.length));
|
|
335
|
-
})
|
|
336
|
-
.join('');
|
|
337
|
-
return randomString;
|
|
338
|
-
}
|
|
339
|
-
static handleOnlyNumbers(value) {
|
|
340
|
-
if (!value)
|
|
341
|
-
return null;
|
|
342
|
-
return value.replace(new RegExp(/[^0-9]/g), '');
|
|
343
|
-
}
|
|
344
|
-
static handleOnlyAlphaNumeric(value) {
|
|
345
|
-
if (!value)
|
|
346
|
-
return '';
|
|
347
|
-
return value.replace(new RegExp(/[^0-9A-Za-z]/, 'g'), '');
|
|
348
|
-
}
|
|
349
|
-
static capitalize(value) {
|
|
350
|
-
return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;
|
|
351
|
-
}
|
|
352
|
-
static formatZipCode(zipCode) {
|
|
353
|
-
if (!zipCode)
|
|
354
|
-
return zipCode;
|
|
355
|
-
const formated = zipCode
|
|
356
|
-
.replace(/^(\d{5})(\d)/, '$1-$2')
|
|
357
|
-
.replace(/\.(\d{3})(\d)/, '.$1-$2');
|
|
358
|
-
return `${formated}`;
|
|
359
|
-
}
|
|
360
|
-
static formatFileSize(size) {
|
|
361
|
-
const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
|
362
|
-
let l = 0;
|
|
363
|
-
while (size >= 1024 && ++l) {
|
|
364
|
-
size /= 1024;
|
|
365
|
-
}
|
|
366
|
-
return `${size.toFixed(size < 10 && l > 0 ? 1 : 0)} ${units[l]}`;
|
|
367
|
-
}
|
|
368
|
-
static sufflue(data) {
|
|
369
|
-
for (let i = data.length - 1; i > 0; i--) {
|
|
370
|
-
const j = Math.floor(Math.random() * i);
|
|
371
|
-
const temp = data[i];
|
|
372
|
-
data[i] = data[j];
|
|
373
|
-
data[j] = temp;
|
|
374
|
-
}
|
|
375
|
-
return data;
|
|
376
|
-
}
|
|
377
|
-
static handleBlobFile(theBlob, fileName, fileType) {
|
|
378
|
-
function blobToFile(theBlob, fileName) {
|
|
379
|
-
const b = theBlob;
|
|
380
|
-
b.lastModifiedDate = new Date();
|
|
381
|
-
b.name = fileName;
|
|
382
|
-
return b;
|
|
383
|
-
}
|
|
384
|
-
let file;
|
|
385
|
-
if (!navigator.msSaveBlob) {
|
|
386
|
-
file = new File([theBlob], fileName, {
|
|
387
|
-
type: fileType,
|
|
388
|
-
});
|
|
389
|
-
}
|
|
390
|
-
else {
|
|
391
|
-
file = new Blob([theBlob], {
|
|
392
|
-
type: fileType,
|
|
393
|
-
});
|
|
394
|
-
file = blobToFile(file, fileName);
|
|
395
|
-
}
|
|
396
|
-
return file;
|
|
397
|
-
}
|
|
398
|
-
static truncate(text, maxLength = 25) {
|
|
399
|
-
const midChar = '...';
|
|
400
|
-
if (!text)
|
|
401
|
-
return midChar;
|
|
402
|
-
if (text && text.length <= maxLength)
|
|
403
|
-
return text;
|
|
404
|
-
const left = Math.ceil(maxLength / 2);
|
|
405
|
-
const right = text.length - left + 1;
|
|
406
|
-
return `${text.substr(0, left)} ${midChar} ${text.substring(right)}`;
|
|
407
|
-
}
|
|
408
|
-
static isLocalhost() {
|
|
409
|
-
const { href } = window?.location;
|
|
410
|
-
if (!href)
|
|
411
|
-
return false;
|
|
412
|
-
return href?.search('localhost') >= 0;
|
|
413
|
-
}
|
|
414
|
-
static isSameOrigin(frontend) {
|
|
415
|
-
const initialPath = window.location.origin;
|
|
416
|
-
return (initialPath || '') === frontend;
|
|
417
|
-
}
|
|
418
|
-
static replaceVariables(data, obj) {
|
|
419
|
-
let handled = data;
|
|
420
|
-
Object.entries(obj).forEach(([key, value]) => {
|
|
421
|
-
handled = handled.replace(new RegExp(`{${key}}`, 'g'), `${value}`);
|
|
422
|
-
});
|
|
423
|
-
return handled;
|
|
424
|
-
}
|
|
425
|
-
static trimValuesToSave(obj, fields) {
|
|
426
|
-
let ret = obj;
|
|
427
|
-
const grouped = fields.join('#');
|
|
428
|
-
Object.entries(obj).map(([key, value]) => {
|
|
429
|
-
if (grouped.includes(key)) {
|
|
430
|
-
ret = {
|
|
431
|
-
...ret,
|
|
432
|
-
[key]: `${value}`.trim()
|
|
433
|
-
};
|
|
434
|
-
}
|
|
435
|
-
return null;
|
|
436
|
-
});
|
|
437
|
-
return ret;
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
export class MonkeyEcxLogs {
|
|
441
|
-
static log(params) {
|
|
442
|
-
try {
|
|
443
|
-
const { type, message, context, error } = params;
|
|
444
|
-
datadogLogs.logger[type || 'error'](message, context, error);
|
|
445
|
-
}
|
|
446
|
-
catch (e) {
|
|
447
|
-
// not to do
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
export function bufferToBase64(buffer) {
|
|
452
|
-
let binary = '';
|
|
453
|
-
const bytes = new Uint8Array(buffer);
|
|
454
|
-
const len = bytes.byteLength;
|
|
455
|
-
for (let i = 0; i < len; i++) {
|
|
456
|
-
binary += String.fromCharCode(bytes[i]);
|
|
457
|
-
}
|
|
458
|
-
return window.btoa(binary);
|
|
459
|
-
}
|
|
460
|
-
export function base64ToBuffer(base64) {
|
|
461
|
-
const binaryString = window.atob(base64);
|
|
462
|
-
const len = binaryString.length;
|
|
463
|
-
const bytes = new Uint8Array(len);
|
|
464
|
-
for (let i = 0; i < len; i++) {
|
|
465
|
-
bytes[i] = binaryString.charCodeAt(i);
|
|
466
|
-
}
|
|
467
|
-
return bytes.buffer;
|
|
468
|
-
}
|
|
469
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tb25rZXktZnJvbnQtY29yZS9zcmMvbGliL2NvcmUvdXRpbHMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUNBQWlDO0FBQ2pDLDRCQUE0QjtBQUM1QixzQ0FBc0M7QUFDdEMsZ0NBQWdDO0FBQ2hDLG1DQUFtQztBQUNuQywyQkFBMkI7QUFDM0IsaUNBQWlDO0FBQ2pDLGdDQUFnQztBQUNoQywyQkFBMkI7QUFFM0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFekMscUNBQXFDO0FBQ3JDLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxFQUFPO1FBQ3RDLE9BQU8sRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssU0FBUyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBVyxFQUFFLE9BQWdCO1FBQ2xELElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDcEIsSUFBSSxPQUFPLEtBQUssSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ25DLElBQUksT0FBTyxLQUFLLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNuQyxJQUFJLE9BQU8sS0FBSyxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDbkMsT0FBTyxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDM0MsQ0FBQztJQUVELE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBWSxFQUFFLE9BQU8sR0FBRyxFQUFFO1FBQy9DLE9BQU87WUFDTCxFQUFFLEVBQUU7Z0JBQ0Ys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QU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07U0FDUCxDQUFDO1FBRUYsTUFBTSxVQUFVLEdBQUc7WUFDakIsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsRUFBRTtZQUNMLENBQUMsRUFBRSxFQUFFO1lBQ0wsQ0FBQyxFQUFFLEVBQUU7WUFDTCxDQUFDLEVBQUUsRUFBRTtZQUNMLENBQUMsRUFBRSxFQUFFO1lBQ0wsQ0FBQyxFQUFFLEVBQUU7WUFDTCxDQUFDLEVBQUUsRUFBRTtZQUNMLENBQUMsRUFBRSxFQUFFO1lBQ0wsQ0FBQyxFQUFFLEVBQUU7WUFDTCxDQUFDLEVBQUUsRUFBRTtZQUNMLENBQUMsRUFBRSxFQUFFO1lBQ0wsQ0FBQyxFQUFFLEVBQUU7WUFDTCxDQUFDLEVBQUUsRUFBRTtZQUNMLENBQUMsRUFBRSxFQUFFO1lBQ0wsR0FBRyxFQUFFLEVBQUU7WUFDUCxD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bW1hLWRhbmdsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlbGVzcy1lc2NhcGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXBsdXNwbHVzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuLyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZWRlY2xhcmUgKi9cbi8qIGVzbGludC1kaXNhYmxlIHZhcnMtb24tdG9wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12YXIgKi9cblxuaW1wb3J0IHsgZGF0YWRvZ0xvZ3MgfSBmcm9tICdAZGF0YWRvZy9icm93c2VyLWxvZ3MnO1xuaW1wb3J0IHsgQ291bnRyeU1hc2tzIH0gZnJvbSAnLi9zdGF0aWNzJztcblxuLyogZXNsaW50LWRpc2FibGUgYmxvY2stc2NvcGVkLXZhciAqL1xuZXhwb3J0IGNsYXNzIE1vbmtleUVjeFV0aWxzIHtcbiAgc3RhdGljIHBlcnNpc3ROdWxsRW1wdHlVbmRlZmluZWQodHA6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cCAhPT0gbnVsbCAmJiB0cCAhPT0gdW5kZWZpbmVkICYmIHRwICE9PSAnJztcbiAgfVxuXG4gIHN0YXRpYyBnZXREb2N1bWVudFR5cGUoZG9jOiBzdHJpbmcsIGNvdW50cnk/OiBzdHJpbmcpIHtcbiAgICBpZiAoIWRvYykgcmV0dXJuICcnO1xuICAgIGlmIChjb3VudHJ5ID09PSAnY2wnKSByZXR1cm4gJ1JVVCc7XG4gICAgaWYgKGNvdW50cnkgPT09ICdteCcpIHJldHVybiAnUkZDJztcbiAgICBpZiAoY291bnRyeSA9PT0gJ3VzJykgcmV0dXJuICdFSU4nO1xuICAgIHJldHVybiBkb2MubGVuZ3RoIDw9IDExID8gJ0NQRicgOiAnQ05QSic7XG4gIH1cblxuICBzdGF0aWMgZ2V0RG9jdW1lbnRNYXNrKHR5cGU6IHN0cmluZywgY291bnRyeSA9ICcnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIEJSOiB7XG4gICAgICAgIENQRjogQ291bnRyeU1hc2tzLkNQRixcbiAgICAgICAgQ05QSjogQ291bnRyeU1hc2tzLkNOUEosXG4gICAgICAgICcnOiBgJHtDb3VudHJ5TWFza3MuQ1BGfXx8JHtDb3VudHJ5TWFza3MuQ05QSn1gXG4gICAgICB9LFxuICAgICAgQ0w6IHtcbiAgICAgICAgQ1BGOiBDb3VudHJ5TWFza3MuUlVUMSxcbiAgICAgICAgQ05QSjogQ291bnRyeU1hc2tzLlJVVDIsXG4gICAgICAgICcnOiBgJHtDb3VudHJ5TWFza3MuUlVUMX18fCR7Q291bnRyeU1hc2tzLlJVVDJ9YFxuICAgICAgfSxcbiAgICAgIE1YOiB7XG4gICAgICAgIENQRjogQ291bnRyeU1hc2tzLlJGQzEsXG4gICAgICAgIENOUEo6IENvdW50cnlNYXNrcy5SRkMyLFxuICAgICAgICAnJzogYCR7Q291bnRyeU1hc2tzLlJGQzF9fHwke0NvdW50cnlNYXNrcy5SRkMyfWBcbiAgICAgIH1cbiAgICB9W2NvdW50cnkudG9VcHBlckNhc2UoKV0/Llt0eXBlXTtcbiAgfVxuXG4gIHN0YXRpYyBnZXREb2N1bWVudFBsYWNlaG9sZGVyKHR5cGU6IHN0cmluZywgY291bnRyeSA9ICcnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIEJSOiB7XG4gICAgICAgIENQRjogJzAwMC4wMDAuMDAwLVhYJyxcbiAgICAgICAgQ05QSjogJzAwLjAwMC4wMDAvMDAwMC0wMCdcbiAgICAgIH0sXG4gICAgICBDTDoge1xuICAgICAgICBDUEY6ICcwMDAwMDAwLUEnLFxuICAgICAgICBDTlBKOiAnMDAwMDAwMC1BJ1xuICAgICAgfSxcbiAgICAgIE1YOiB7XG4gICAgICAgIENQRjogQ291bnRyeU1hc2tzLlJGQzEsXG4gICAgICAgIENOUEo6IENvdW50cnlNYXNrcy5SRkMyXG4gICAgICB9XG4gICAgfVtjb3VudHJ5LnRvVXBwZXJDYXNlKCldPy5bdHlwZV07XG4gIH1cblxuICBzdGF0aWMgZm9ybWF0RG9jdW1lbnRXaXRoTWFzayhkb2M6IHN0cmluZywgd2l0aFR5cGU/OiBib29sZWFuLCBjb3VudHJ5Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWRvYykgcmV0dXJuIGRvYztcbiAgICBsZXQgZm9ybWF0ZWQ6IHN0cmluZyA9ICcnO1xuICAgIGlmIChjb3VudHJ5ID09PSAnY2wnKSB7XG4gICAgICBmb3JtYXRlZCA9IGRvYy5yZXBsYWNlKC9eKFxcZHsxLDJ9KShcXGR7M30pKFxcZHszfSkoXFx3ezF9KSQvLCAnJDEuJDIuJDMtJDQnKTtcbiAgICAgIHJldHVybiBgJHtmb3JtYXRlZH1gO1xuICAgIH1cbiAgICBpZiAoY291bnRyeSA9PT0gJ3VzJykge1xuICAgICAgcmV0dXJuIGRvYztcbiAgICB9XG4gICAgaWYgKGRvYy5sZW5ndGggPT09IDE0KSB7XG4gICAgICBmb3JtYXRlZCA9IGRvY1xuICAgICAgICAucmVwbGFjZSgvXihcXGR7Mn0pKFxcZCkvLCAnJDEuJDInKVxuICAgICAgICAucmVwbGFjZSgvXihcXGR7Mn0pXFwuKFxcZHszfSkoXFxkKS8sICckMS4kMi4kMycpXG4gICAgICAgIC5yZXBsYWNlKC9cXC4oXFxkezN9KShcXGQpLywgJy4kMS8kMicpXG4gICAgICAgIC5yZXBsYWNlKC8oXFxkezR9KShcXGQpLywgJyQxLSQyJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1hdGVkID0gZG9jXG4gICAgICAgIC5yZXBsYWNlKC9eKFxcZHszfSkoXFxkKS8sICckMS4kMicpXG4gICAgICAgIC5yZXBsYWNlKC9eKFxcZHszfSlcXC4oXFxkezN9KShcXGQpLywgJyQxLiQyLiQzJylcbiAgICAgICAgLnJlcGxhY2UoL1xcLihcXGR7M30pKFxcZCkvLCAnLiQxLSQyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke3dpdGhUeXBlID8gYCR7dGhpcy5nZXREb2N1bWVudFR5cGUoZG9jKX06YCA6ICcnfSAke2Zvcm1hdGVkfWA7XG4gIH1cblxuICBzdGF0aWMgY3V0Rmlyc3RMYXN0TmFtZSh2YWx1ZTogc3RyaW5nLCB0cDogc3RyaW5nID0gJ2ZpcnN0Jykge1xuICAgIGNvbnN0IHNwbGl0ID0gdmFsdWU/LnRyaW0oKT8uc3BsaXQoJyAnKTtcblxuICAgIGlmICh0cCA9PT0gJ2ZpcnN0JykgcmV0dXJuIHNwbGl0WzBdO1xuICAgIHJldHVybiBzcGxpdD8uc3BsaWNlKDEsIHNwbGl0Lmxlbmd0aCk/LmpvaW4oJyAnKTtcbiAgfVxuXG4gIHN0YXRpYyBpc0NQRkNOUEpWYWxpZChkb2N1bWVudDogYW55KTogYm9vbGVhbiB7XG4gICAgZG9jdW1lbnQgPSBkb2N1bWVudC5yZXBsYWNlKC9bXlxcZF0vZywgJycpO1xuXG4gICAgY29uc3QgaGFuZGxlZCA9IGRvY3VtZW50LnJlcGxhY2UobmV3IFJlZ0V4cChkb2N1bWVudC5jaGFyQXQoMCksICdnJyksICcnKTtcbiAgICBpZiAoIWhhbmRsZWQpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChkb2N1bWVudC5sZW5ndGggPT09IDExKSB7XG4gICAgICBsZXQgYmFzZSA9IFsxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMF07XG4gICAgICBmb3IgKHZhciBpID0gMCwgbiA9IDA7IGkgPCA5OyBuICs9IGRvY3VtZW50W2ldICogYmFzZVtpKytdKSA7XG4gICAgICBpZiAoZG9jdW1lbnRbOV0gIT0gKChuICU9IDExKSA8PSAxID8gMCA6IDExIC0gbikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgYmFzZSA9IFsxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDBdO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSAwOyBpIDw9IDk7IG4gKz0gZG9jdW1lbnRbaV0gKiBiYXNlW2krK10pIDtcbiAgICAgIGlmIChkb2N1bWVudFsxMF0gIT0gKChuICU9IDExKSA8PSAxID8gMCA6IDExIC0gbikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChkb2N1bWVudC5sZW5ndGggPT09IDE0IHx8IC8wezE0fS8udGVzdChkb2N1bWVudCkpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSBbNiwgNSwgNCwgMywgMiwgOSwgOCwgNywgNiwgNSwgNCwgMywgMl07XG4gICAgICBmb3IgKHZhciBpID0gMCwgbiA9IDA7IGkgPCAxMjsgbiArPSBkb2N1bWVudFtpXSAqIGJhc2VbKytpXSkgO1xuICAgICAgaWYgKGRvY3VtZW50WzEyXSAhPSAoKG4gJT0gMTEpIDwgMiA/IDAgOiAxMSAtIG4pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSAwOyBpIDw9IDEyOyBuICs9IGRvY3VtZW50W2ldICogYmFzZVtpKytdKSA7XG4gICAgICBpZiAoZG9jdW1lbnRbMTNdICE9ICgobiAlPSAxMSkgPCAyID8gMCA6IDExIC0gbikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc1ZhbGlkUlVUKGRvY3VtZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIWRvY3VtZW50IHx8IGRvY3VtZW50LnRyaW0oKS5sZW5ndGggPCAzKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZG9jdW1lbnRIYW5kbGVkID0gZG9jdW1lbnQucmVwbGFjZSgvW14wLTlrS10vZywgJycpO1xuXG4gICAgaWYgKGRvY3VtZW50SGFuZGxlZC5sZW5ndGggPCAzKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBjYWxjRHYgPSAocnV0OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlOiBzdHJpbmcgPSBgJHtydXR9YDtcbiAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgbGV0IG11bHQgPSAyO1xuXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpbmRleCA9IG11bHQgKiBOdW1iZXIodmFsdWUuY2hhckF0KHZhbHVlLmxlbmd0aCAtIGkpKTtcblxuICAgICAgICBzdW0gKz0gaW5kZXg7XG5cbiAgICAgICAgaWYgKG11bHQgPCA3KSB7XG4gICAgICAgICAgbXVsdCArPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG11bHQgPSAyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGR2RXNwZXJhZG8gPSAxMSAtIChzdW0gJSAxMSk7XG4gICAgICBpZiAoZHZFc3BlcmFkbyA9PT0gMTApIHJldHVybiAnSyc7XG4gICAgICBpZiAoZHZFc3BlcmFkbyA9PT0gMTEpIHJldHVybiAnMCc7XG4gICAgICByZXR1cm4gYCR7ZHZFc3BlcmFkb31gO1xuICAgIH07XG5cbiAgICBjb25zdCBudW0gPSBkb2N1bWVudEhhbmRsZWQuc2xpY2UoMCwgLTEpO1xuICAgIGNvbnN0IGRndiA9IGRvY3VtZW50SGFuZGxlZC5zbGljZSgtMSkudG9VcHBlckNhc2UoKTtcblxuICAgIGNvbnN0IGR2Q2FsYyA9IGNhbGNEdihudW0pO1xuICAgIHJldHVybiBkdkNhbGMgPT09IGRndjtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWxpZFJGQyhkb2N1bWVudDogc3RyaW5nKSB7XG4gICAgY29uc3QgUkZDX1JFR0VYUCA9IC9eKFtBLVrDkVxceDI2XXszLDR9KShbMC05XXs2fSkoW0EtWjAtOV17M30pJC87XG4gICAgY29uc3QgU1BFQ0lBTF9DQVNFUyA9IHtcbiAgICAgIFhFWFgwMTAxMDEwMDA6ICdmb3JlaWduJyxcbiAgICAgIFhBWFgwMTAxMDEwMDA6ICdnZW5lcmljJ1xuICAgIH07XG4gICAgY29uc3QgRk9SQklEREVOX1dPUkRTID0gW1xuICAgICAgJ0JVRUknLFxuICAgICAgJ0JVRVknLFxuICAgICAgJ0NBQ0EnLFxuICAgICAgJ0NBQ08nLFxuICAgICAgJ0NBR0EnLFxuICAgICAgJ0NBR08nLFxuICAgICAgJ0NBS0EnLFxuICAgICAgJ0NBS08nLFxuICAgICAgJ0NPR0UnLFxuICAgICAgJ0NPSkEnLFxuICAgICAgJ0NPSkUnLFxuICAgICAgJ0NPSkknLFxuICAgICAgJ0NPSk8nLFxuICAgICAgJ0NVTE8nLFxuICAgICAgJ0ZFVE8nLFxuICAgICAgJ0dVRVknLFxuICAgICAgJ0pPVE8nLFxuICAgICAgJ0tBQ0EnLFxuICAgICAgJ0tBQ08nLFxuICAgICAgJ0tBR0EnLFxuICAgICAgJ0tBR08nLFxuICAgICAgJ0tPR0UnLFxuICAgICAgJ0tPSk8nLFxuICAgICAgJ0tBS0EnLFxuICAgICAgJ0tVTE8nLFxuICAgICAgJ01BTUUnLFxuICAgICAgJ01BTU8nLFxuICAgICAgJ01FQVInLFxuICAgICAgJ01FQVMnLFxuICAgICAgJ01FT04nLFxuICAgICAgJ01JT04nLFxuICAgICAgJ01PQ08nLFxuICAgICAgJ01VTEEnLFxuICAgICAgJ1BFREEnLFxuICAgICAgJ1BFRE8nLFxuICAgICAgJ1BFTkUnLFxuICAgICAgJ1BVVEEnLFxuICAgICAgJ1BVVE8nLFxuICAgICAgJ1FVTE8nLFxuICAgICAgJ1JBVEEnLFxuICAgICAgJ1JVSU4nXG4gICAgXTtcblxuICAgIGNvbnN0IFZBTFVFU19NQVAgPSB7XG4gICAgICAwOiAwLFxuICAgICAgMTogMSxcbiAgICAgIDI6IDIsXG4gICAgICAzOiAzLFxuICAgICAgNDogNCxcbiAgICAgIDU6IDUsXG4gICAgICA2OiA2LFxuICAgICAgNzogNyxcbiAgICAgIDg6IDgsXG4gICAgICA5OiA5LFxuICAgICAgQTogMTAsXG4gICAgICBCOiAxMSxcbiAgICAgIEM6IDEyLFxuICAgICAgRDogMTMsXG4gICAgICBFOiAxNCxcbiAgICAgIEY6IDE1LFxuICAgICAgRzogMTYsXG4gICAgICBIOiAxNyxcbiAgICAgIEk6IDE4LFxuICAgICAgSjogMTksXG4gICAgICBLOiAyMCxcbiAgICAgIEw6IDIxLFxuICAgICAgTTogMjIsXG4gICAgICBOOiAyMyxcbiAgICAgICcmJzogMjQsXG4gICAgICBPOiAyNSxcbiAgICAgIFA6IDI2LFxuICAgICAgUTogMjcsXG4gICAgICBSOiAyOCxcbiAgICAgIFM6IDI5LFxuICAgICAgVDogMzAsXG4gICAgICBVOiAzMSxcbiAgICAgIFY6IDMyLFxuICAgICAgVzogMzMsXG4gICAgICBYOiAzNCxcbiAgICAgIFk6IDM1LFxuICAgICAgWjogMzYsXG4gICAgICAnICc6IDM3LFxuICAgICAgw5E6IDM4XG4gICAgfTtcblxuICAgIGNvbnN0IGdldFNjb3JlID0gKGRvYzogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gZG9jLnNwbGl0KCcnKS5yZXZlcnNlKCkucmVkdWNlKChzdW0sIGNoYXIsIGkpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBpICsgMjtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBWQUxVRVNfTUFQW2NoYXJdIHx8IDA7XG4gICAgICAgIHJldHVybiBzdW0gKyB2YWx1ZSAqIGluZGV4O1xuICAgICAgfSwgMCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHBhcnNlSW5wdXQgPSAoZG9jOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBTdHJpbmcoZG9jKVxuICAgICAgICAudHJpbSgpXG4gICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgIC5yZXBsYWNlKC9bXjAtOUEtWsORXFx4MjZdL2csICcnKTtcbiAgICB9O1xuXG4gICAgY29uc3QgdmFsaWRhdGVEYXRlID0gKGRvYzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBkYXRlU3RyID0gZG9jLnNsaWNlKDAsIC0zKS5zbGljZSgtNik7XG4gICAgICBjb25zdCB5ZWFyID0gZGF0ZVN0ci5zbGljZSgwLCAyKTtcbiAgICAgIGNvbnN0IG1vbnRoID0gZGF0ZVN0ci5zbGljZSgyLCA0KTtcbiAgICAgIGNvbnN0IGRheSA9IGRhdGVTdHIuc2xpY2UoNCwgNik7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoYDIwJHt5ZWFyfS0ke21vbnRofS0ke2RheX1gKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbiAgICAgIHJldHVybiAhaXNOYU4oZGF0ZS5nZXRUaW1lKCkpO1xuICAgIH07XG5cbiAgICBjb25zdCB2YWxpZGF0ZVZlcmlmaWNhdGlvbkRpZ2l0ID0gKGRvYzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBkaWdpdCA9IGRvYy5zbGljZSgtMSk7XG4gICAgICBjb25zdCByZmMgPSBkb2MubGVuZ3RoID09PSAxMiA/IGAgJHtkb2N9YCA6IGRvYztcbiAgICAgIGNvbnN0IGJhc2UgPSByZmMuc2xpY2UoMCwgLTEpO1xuICAgICAgY29uc3Qgc2NvcmUgPSBnZXRTY29yZShiYXNlKTtcbiAgICAgIGNvbnN0IG1vZCA9ICgxMTAwMCAtIHNjb3JlKSAlIDExO1xuICAgICAgaWYgKG1vZCA9PT0gMTEpIHJldHVybiBkaWdpdCA9PT0gJzAnO1xuICAgICAgaWYgKG1vZCA9PT0gMTApIHJldHVybiBkaWdpdCA9PT0gJ0EnO1xuICAgICAgcmV0dXJuIFN0cmluZyhtb2QpID09PSBkaWdpdDtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNTcGVjaWFsQ2FzZSA9IChkb2M6IHN0cmluZykgPT4geyByZXR1cm4gZG9jIGluIFNQRUNJQUxfQ0FTRVM7IH07XG5cbiAgICBjb25zdCBoYXNGb3JiaWRkZW5Xb3JkcyA9IChkb2M6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgcHJlZml4ID0gKGRvYyB8fCAnJykuc2xpY2UoMCwgNCk7XG4gICAgICByZXR1cm4gRk9SQklEREVOX1dPUkRTLmluY2x1ZGVzKHByZWZpeCk7XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbnB1dCA9IHBhcnNlSW5wdXQoZG9jdW1lbnQpO1xuXG4gICAgICBpZiAoaXNTcGVjaWFsQ2FzZShpbnB1dCkpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGhhc1ZhbGlkRm9ybWF0ID0gUkZDX1JFR0VYUC50ZXN0KGlucHV0KTtcbiAgICAgIGlmICghaGFzVmFsaWRGb3JtYXQpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGhhc1ZhbGlkRGF0ZSA9IHZhbGlkYXRlRGF0ZShpbnB1dCk7XG4gICAgICBpZiAoIWhhc1ZhbGlkRGF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgaGFzVmFsaWREaWdpdCA9IHZhbGlkYXRlVmVyaWZpY2F0aW9uRGlnaXQoaW5wdXQpO1xuICAgICAgaWYgKCFoYXNWYWxpZERpZ2l0KSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoaGFzRm9yYmlkZGVuV29yZHMoaW5wdXQpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIG5vdCB0byBkb1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRpYyBpc1ZhbGlkVXJsKHR4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVnZXggPSAvKGh0dHBzPzpcXC9cXC8oPzpbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT9cXC4pK1thLXowLTldW2EtejAtOS1dezAsNjF9W2EtejAtOV0pKDo/XFxkKilcXC8/KFthLXpfXFxcXC8wLTlcXC0jLl0qKVxcPz8oW2Etel9cXFxcLzAtOVxcLSM9Jl0qKS9nO1xuICAgIHJldHVybiByZWdleC50ZXN0KHR4dCk7XG4gIH1cblxuICBzdGF0aWMgaXNWYWxpZFppcENvZGUoemlwQ29kZTogc3RyaW5nLCBjb3VudHJ5Pzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbGVuZ3RoID0ge1xuICAgICAgYnI6IDgsXG4gICAgICBjbDogNyxcbiAgICAgIG14OiA1XG4gICAgfVtjb3VudHJ5IHx8ICdiciddO1xuXG4gICAgcmV0dXJuIGAke3RoaXMuaGFuZGxlT25seU51bWJlcnMoemlwQ29kZSl9YC5sZW5ndGggPT09IGxlbmd0aDtcbiAgfVxuXG4gIHN0YXRpYyBpc1ZhbGlkRW1haWwoZW1haWw6IHN0cmluZykge1xuICAgIHJldHVybiAvXltcXHctLl0rQChbXFx3LV0rXFwuKStbXFx3LV17MSw2NH0kLy50ZXN0KGVtYWlsIHx8ICcnKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRSYW5kb21TdHJpbmcobGVuOiBudW1iZXIsIGNoYXJTZXQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNoYXJTZXQgPSBjaGFyU2V0IHx8ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSc7XG5cbiAgICBjb25zdCByYW5kb21TdHJpbmc6IHN0cmluZyA9IG5ldyBBcnJheShsZW4pXG4gICAgICAuZmlsbCgnMScpXG4gICAgICAubWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGNoYXJTZXQ/LmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyU2V0Py5sZW5ndGgpKTtcbiAgICAgIH0pXG4gICAgICAuam9pbignJyk7XG4gICAgcmV0dXJuIHJhbmRvbVN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBoYW5kbGVPbmx5TnVtYmVycyh2YWx1ZTogYW55KSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCgvW14wLTldL2cpLCAnJyk7XG4gIH1cblxuICBzdGF0aWMgaGFuZGxlT25seUFscGhhTnVtZXJpYyh2YWx1ZTogYW55KSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoL1teMC05QS1aYS16XS8sICdnJyksICcnKTtcbiAgfVxuXG4gIHN0YXRpYyBjYXBpdGFsaXplKHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCR7dmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHt2YWx1ZS5zbGljZSgxKX1gO1xuICB9XG5cbiAgc3RhdGljIGZvcm1hdFppcENvZGUoemlwQ29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXppcENvZGUpIHJldHVybiB6aXBDb2RlO1xuICAgIGNvbnN0IGZvcm1hdGVkOiBzdHJpbmcgPSB6aXBDb2RlXG4gICAgICAucmVwbGFjZSgvXihcXGR7NX0pKFxcZCkvLCAnJDEtJDInKVxuICAgICAgLnJlcGxhY2UoL1xcLihcXGR7M30pKFxcZCkvLCAnLiQxLSQyJyk7XG5cbiAgICByZXR1cm4gYCR7Zm9ybWF0ZWR9YDtcbiAgfVxuXG4gIHN0YXRpYyBmb3JtYXRGaWxlU2l6ZShzaXplOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVuaXRzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XG4gICAgbGV0IGwgPSAwO1xuICAgIHdoaWxlIChzaXplID49IDEwMjQgJiYgKytsKSB7XG4gICAgICBzaXplIC89IDEwMjQ7XG4gICAgfVxuICAgIHJldHVybiBgJHtzaXplLnRvRml4ZWQoc2l6ZSA8IDEwICYmIGwgPiAwID8gMSA6IDApfSAke3VuaXRzW2xdfWA7XG4gIH1cblxuICBzdGF0aWMgc3VmZmx1ZShkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICBmb3IgKGxldCBpID0gZGF0YS5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgICBjb25zdCBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogaSk7XG4gICAgICBjb25zdCB0ZW1wID0gZGF0YVtpXTtcbiAgICAgIGRhdGFbaV0gPSBkYXRhW2pdO1xuICAgICAgZGF0YVtqXSA9IHRlbXA7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgc3RhdGljIGhhbmRsZUJsb2JGaWxlKHRoZUJsb2I6IGFueSwgZmlsZU5hbWU6IHN0cmluZywgZmlsZVR5cGU6IHN0cmluZykge1xuICAgIGZ1bmN0aW9uIGJsb2JUb0ZpbGUodGhlQmxvYjogYW55LCBmaWxlTmFtZTogc3RyaW5nKSB7XG4gICAgICBjb25zdCBiID0gdGhlQmxvYjtcbiAgICAgIGIubGFzdE1vZGlmaWVkRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICBiLm5hbWUgPSBmaWxlTmFtZTtcbiAgICAgIHJldHVybiBiO1xuICAgIH1cblxuICAgIGxldCBmaWxlOiBhbnk7XG4gICAgaWYgKCEobmF2aWdhdG9yIGFzIGFueSkubXNTYXZlQmxvYikge1xuICAgICAgZmlsZSA9IG5ldyBGaWxlKFt0aGVCbG9iXSwgZmlsZU5hbWUsIHtcbiAgICAgICAgdHlwZTogZmlsZVR5cGUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZSA9IG5ldyBCbG9iKFt0aGVCbG9iXSwge1xuICAgICAgICB0eXBlOiBmaWxlVHlwZSxcbiAgICAgIH0pO1xuICAgICAgZmlsZSA9IGJsb2JUb0ZpbGUoZmlsZSwgZmlsZU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsZTtcbiAgfVxuXG4gIHN0YXRpYyB0cnVuY2F0ZSh0ZXh0OiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyID0gMjUpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1pZENoYXIgPSAnLi4uJztcbiAgICBpZiAoIXRleHQpIHJldHVybiBtaWRDaGFyO1xuICAgIGlmICh0ZXh0ICYmIHRleHQubGVuZ3RoIDw9IG1heExlbmd0aCkgcmV0dXJuIHRleHQ7XG5cbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5jZWlsKG1heExlbmd0aCAvIDIpO1xuICAgIGNvbnN0IHJpZ2h0ID0gdGV4dC5sZW5ndGggLSBsZWZ0ICsgMTtcblxuICAgIHJldHVybiBgJHt0ZXh0LnN1YnN0cigwLCBsZWZ0KX0gJHttaWRDaGFyfSAke3RleHQuc3Vic3RyaW5nKHJpZ2h0KX1gO1xuICB9XG5cbiAgc3RhdGljIGlzTG9jYWxob3N0KCkge1xuICAgIGNvbnN0IHsgaHJlZiB9ID0gd2luZG93Py5sb2NhdGlvbjtcbiAgICBpZiAoIWhyZWYpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gaHJlZj8uc2VhcmNoKCdsb2NhbGhvc3QnKSA+PSAwO1xuICB9XG5cbiAgc3RhdGljIGlzU2FtZU9yaWdpbihmcm9udGVuZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaW5pdGlhbFBhdGg6IHN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgcmV0dXJuIChpbml0aWFsUGF0aCB8fCAnJykgPT09IGZyb250ZW5kO1xuICB9XG5cbiAgc3RhdGljIHJlcGxhY2VWYXJpYWJsZXMoZGF0YTogc3RyaW5nLCBvYmo6IGFueSkge1xuICAgIGxldCBoYW5kbGVkID0gZGF0YTtcbiAgICBPYmplY3QuZW50cmllcyhvYmopLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgaGFuZGxlZCA9IGhhbmRsZWQucmVwbGFjZShuZXcgUmVnRXhwKGB7JHtrZXl9fWAsICdnJyksIGAke3ZhbHVlfWApO1xuICAgIH0pO1xuICAgIHJldHVybiBoYW5kbGVkO1xuICB9XG5cbiAgc3RhdGljIHRyaW1WYWx1ZXNUb1NhdmUob2JqOiBhbnksIGZpZWxkczogc3RyaW5nW10pIHtcbiAgICBsZXQgcmV0ID0gb2JqO1xuICAgIGNvbnN0IGdyb3VwZWQgPSBmaWVsZHMuam9pbignIycpO1xuICAgIE9iamVjdC5lbnRyaWVzKG9iaikubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmIChncm91cGVkLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgcmV0ID0ge1xuICAgICAgICAgIC4uLnJldCxcbiAgICAgICAgICBba2V5XTogYCR7dmFsdWV9YC50cmltKClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBNb25rZXlFY3hMb2dzRXJyb3JUeXBlcyA9ICdvaycgfFxuICAnZGVidWcnIHxcbiAgJ2luZm8nIHxcbiAgJ25vdGljZScgfFxuICAnd2FybicgfFxuICAnZXJyb3InIHxcbiAgJ2NyaXRpY2FsJyB8XG4gICdhbGVydCcgfFxuICAnZW1lcmcnO1xuXG5leHBvcnQgdHlwZSBNb25rZXlFY3hMb2dQYXJhbXMgPSB7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgY29udGV4dD86IGFueTtcbiAgZXJyb3I/OiBFcnJvcjtcbiAgdHlwZT86IE1vbmtleUVjeExvZ3NFcnJvclR5cGVzO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ua2V5RWN4TG9ncyB7XG4gIHN0YXRpYyBsb2cocGFyYW1zOiBNb25rZXlFY3hMb2dQYXJhbXMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyB0eXBlLCBtZXNzYWdlLCBjb250ZXh0LCBlcnJvciB9ID0gcGFyYW1zO1xuICAgICAgZGF0YWRvZ0xvZ3MubG9nZ2VyW3R5cGUgfHwgJ2Vycm9yJ10obWVzc2FnZSwgY29udGV4dCwgZXJyb3IpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIG5vdCB0byBkb1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyVG9CYXNlNjQoYnVmZmVyOiBBcnJheUJ1ZmZlcik6IHN0cmluZyB7XG4gIGxldCBiaW5hcnkgPSAnJztcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICBjb25zdCBsZW4gPSBieXRlcy5ieXRlTGVuZ3RoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xuICB9XG4gIHJldHVybiB3aW5kb3cuYnRvYShiaW5hcnkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0VG9CdWZmZXIoYmFzZTY0OiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB7XG4gIGNvbnN0IGJpbmFyeVN0cmluZyA9IHdpbmRvdy5hdG9iKGJhc2U2NCk7XG4gIGNvbnN0IGxlbiA9IGJpbmFyeVN0cmluZy5sZW5ndGg7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGJ5dGVzW2ldID0gYmluYXJ5U3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gIH1cbiAgcmV0dXJuIGJ5dGVzLmJ1ZmZlcjtcbn1cbiJdfQ==
|