oxygen-cli 1.40.2-beta.1 → 1.41.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/CHANGELOG.md +1755 -1742
- package/LICENSE +672 -672
- package/README.md +37 -37
- package/build/core/OxygenCore.js +1 -1
- package/build/core/OxygenEvents.js +1 -1
- package/build/core/OxygenModule.js +1 -1
- package/build/core/OxygenService.js +1 -1
- package/build/core/OxygenSubModule.js +1 -1
- package/build/core/WebDriverModule.js +1 -1
- package/build/core/utils.js +1 -1
- package/build/errors/HookError.js +1 -1
- package/build/errors/ModuleError.js +1 -1
- package/build/errors/ModuleUnavailableError.js +1 -1
- package/build/errors/OxygenError.js +1 -1
- package/build/errors/ScriptNotFound.js +1 -1
- package/build/errors/helper.js +1 -1
- package/build/index.js +1 -1
- package/build/lib/cli-util.js +1 -1
- package/build/lib/cli.js +1 -1
- package/build/lib/debugger.js +1 -1
- package/build/lib/img-merge.js +1 -1
- package/build/lib/launcher.js +1 -1
- package/build/lib/logger.js +43 -43
- package/build/lib/moduleRequire.js +1 -1
- package/build/lib/parallel-launcher.js +1 -1
- package/build/lib/param-manager.js +1 -1
- package/build/lib/param-reader-csv.js +1 -1
- package/build/lib/param-reader-excel.js +1 -1
- package/build/lib/param-reader-json.js +1 -1
- package/build/lib/text-to-image.js +1 -1
- package/build/lib/util.js +1 -1
- package/build/model/case-result.js +1 -1
- package/build/model/failure.js +1 -1
- package/build/model/status.js +1 -1
- package/build/model/step-result.js +1 -1
- package/build/model/suite-result.js +1 -1
- package/build/model/test-result.js +1 -1
- package/build/model/testcase.js +1 -1
- package/build/model/testsuite.js +1 -1
- package/build/ox_modules/index.js +1 -1
- package/build/ox_modules/module-assert.js +37 -37
- package/build/ox_modules/module-date.js +24 -24
- package/build/ox_modules/module-db.js +52 -52
- package/build/ox_modules/module-email.js +59 -59
- package/build/ox_modules/module-eyes.js +34 -34
- package/build/ox_modules/module-http/ntlm-util.js +10 -10
- package/build/ox_modules/module-http/ntlm.js +15 -15
- package/build/ox_modules/module-http.js +132 -132
- package/build/ox_modules/module-log.js +27 -27
- package/build/ox_modules/module-mailinator.js +87 -87
- package/build/ox_modules/module-mob/commands/alertAccept.js +17 -17
- package/build/ox_modules/module-mob/commands/alertDismiss.js +17 -17
- package/build/ox_modules/module-mob/commands/assertAlert.js +20 -20
- package/build/ox_modules/module-mob/commands/assertText.js +21 -21
- package/build/ox_modules/module-mob/commands/assertTitle.js +19 -19
- package/build/ox_modules/module-mob/commands/assertValue.js +18 -18
- package/build/ox_modules/module-mob/commands/back.js +16 -16
- package/build/ox_modules/module-mob/commands/clear.js +19 -19
- package/build/ox_modules/module-mob/commands/click.js +17 -17
- package/build/ox_modules/module-mob/commands/clickHidden.js +17 -17
- package/build/ox_modules/module-mob/commands/clickLong.js +18 -18
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +18 -18
- package/build/ox_modules/module-mob/commands/closeApp.js +16 -16
- package/build/ox_modules/module-mob/commands/debug.js +16 -16
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +19 -19
- package/build/ox_modules/module-mob/commands/enableNetwork.js +27 -27
- package/build/ox_modules/module-mob/commands/execute.js +21 -21
- package/build/ox_modules/module-mob/commands/findElement.js +20 -20
- package/build/ox_modules/module-mob/commands/findElements.js +23 -23
- package/build/ox_modules/module-mob/commands/getAlertText.js +17 -17
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +15 -15
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +15 -15
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +16 -16
- package/build/ox_modules/module-mob/commands/getLocation.js +20 -20
- package/build/ox_modules/module-mob/commands/getSource.js +16 -16
- package/build/ox_modules/module-mob/commands/getText.js +18 -18
- package/build/ox_modules/module-mob/commands/getTitle.js +13 -13
- package/build/ox_modules/module-mob/commands/getUrl.js +17 -17
- package/build/ox_modules/module-mob/commands/getValue.js +18 -18
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +17 -17
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +21 -21
- package/build/ox_modules/module-mob/commands/index.js +1 -1
- package/build/ox_modules/module-mob/commands/installApp.js +16 -16
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +16 -16
- package/build/ox_modules/module-mob/commands/isCheckable.js +18 -18
- package/build/ox_modules/module-mob/commands/isChecked.js +18 -18
- package/build/ox_modules/module-mob/commands/isClickable.js +18 -18
- package/build/ox_modules/module-mob/commands/isExist.js +19 -19
- package/build/ox_modules/module-mob/commands/isSelected.js +23 -23
- package/build/ox_modules/module-mob/commands/isVisible.js +19 -19
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +16 -16
- package/build/ox_modules/module-mob/commands/launchApp.js +15 -15
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +18 -18
- package/build/ox_modules/module-mob/commands/open.js +17 -17
- package/build/ox_modules/module-mob/commands/pause.js +16 -16
- package/build/ox_modules/module-mob/commands/removeApp.js +16 -16
- package/build/ox_modules/module-mob/commands/resetApp.js +15 -15
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +22 -22
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +27 -27
- package/build/ox_modules/module-mob/commands/select.js +24 -24
- package/build/ox_modules/module-mob/commands/selectFrame.js +23 -23
- package/build/ox_modules/module-mob/commands/selectWindow.js +28 -28
- package/build/ox_modules/module-mob/commands/sendKeys.js +29 -29
- package/build/ox_modules/module-mob/commands/setContext.js +16 -16
- package/build/ox_modules/module-mob/commands/setNativeContext.js +15 -15
- package/build/ox_modules/module-mob/commands/setTimeout.js +21 -21
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +16 -16
- package/build/ox_modules/module-mob/commands/shake.js +16 -16
- package/build/ox_modules/module-mob/commands/smsClickLink.js +19 -19
- package/build/ox_modules/module-mob/commands/smsGetText.js +20 -20
- package/build/ox_modules/module-mob/commands/swipe.js +20 -20
- package/build/ox_modules/module-mob/commands/swipeElement.js +20 -20
- package/build/ox_modules/module-mob/commands/swipeScreen.js +20 -20
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +17 -17
- package/build/ox_modules/module-mob/commands/tap.js +17 -17
- package/build/ox_modules/module-mob/commands/type.js +20 -20
- package/build/ox_modules/module-mob/commands/unlockPattern.js +22 -22
- package/build/ox_modules/module-mob/commands/waitForExist.js +18 -18
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +17 -17
- package/build/ox_modules/module-mob/commands/waitForVisible.js +17 -17
- package/build/ox_modules/module-mob.js +74 -74
- package/build/ox_modules/module-mongo.js +82 -82
- package/build/ox_modules/module-pdf.js +35 -35
- package/build/ox_modules/module-proxy.js +77 -77
- package/build/ox_modules/module-serial.js +55 -55
- package/build/ox_modules/module-shell.js +52 -33
- package/build/ox_modules/module-soap.js +72 -72
- package/build/ox_modules/module-twilio.js +41 -41
- package/build/ox_modules/module-utils.js +91 -91
- package/build/ox_modules/module-web/commands/alertAccept.js +17 -17
- package/build/ox_modules/module-web/commands/alertDismiss.js +17 -17
- package/build/ox_modules/module-web/commands/assertAlert.js +20 -20
- package/build/ox_modules/module-web/commands/assertExist.js +17 -17
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +21 -21
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +21 -21
- package/build/ox_modules/module-web/commands/assertText.js +21 -21
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +18 -18
- package/build/ox_modules/module-web/commands/assertTextPresent.js +18 -18
- package/build/ox_modules/module-web/commands/assertTitle.js +19 -19
- package/build/ox_modules/module-web/commands/assertValue.js +20 -20
- package/build/ox_modules/module-web/commands/back.js +16 -16
- package/build/ox_modules/module-web/commands/clear.js +18 -18
- package/build/ox_modules/module-web/commands/click.js +25 -25
- package/build/ox_modules/module-web/commands/clickHidden.js +23 -23
- package/build/ox_modules/module-web/commands/closeWindow.js +15 -15
- package/build/ox_modules/module-web/commands/debug.js +15 -15
- package/build/ox_modules/module-web/commands/deleteCookies.js +12 -12
- package/build/ox_modules/module-web/commands/deselect.js +22 -22
- package/build/ox_modules/module-web/commands/doubleClick.js +17 -17
- package/build/ox_modules/module-web/commands/dragAndDrop.js +20 -20
- package/build/ox_modules/module-web/commands/execute.js +24 -24
- package/build/ox_modules/module-web/commands/fileBrowse.js +18 -18
- package/build/ox_modules/module-web/commands/findElement.js +19 -19
- package/build/ox_modules/module-web/commands/findElements.js +22 -22
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +14 -14
- package/build/ox_modules/module-web/commands/getAlertText.js +16 -16
- package/build/ox_modules/module-web/commands/getAttribute.js +19 -19
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +17 -17
- package/build/ox_modules/module-web/commands/getCookies.js +13 -13
- package/build/ox_modules/module-web/commands/getCssValue.js +19 -19
- package/build/ox_modules/module-web/commands/getElementCount.js +17 -17
- package/build/ox_modules/module-web/commands/getHTML.js +17 -17
- package/build/ox_modules/module-web/commands/getSource.js +16 -16
- package/build/ox_modules/module-web/commands/getText.js +18 -18
- package/build/ox_modules/module-web/commands/getTitle.js +12 -12
- package/build/ox_modules/module-web/commands/getUrl.js +16 -16
- package/build/ox_modules/module-web/commands/getValue.js +18 -18
- package/build/ox_modules/module-web/commands/getWindowHandles.js +16 -16
- package/build/ox_modules/module-web/commands/getWindowSize.js +16 -16
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +16 -16
- package/build/ox_modules/module-web/commands/index.js +1 -1
- package/build/ox_modules/module-web/commands/isAlertPresent.js +16 -16
- package/build/ox_modules/module-web/commands/isChecked.js +18 -18
- package/build/ox_modules/module-web/commands/isExist.js +19 -19
- package/build/ox_modules/module-web/commands/isInteractable.js +22 -22
- package/build/ox_modules/module-web/commands/isSelected.js +23 -23
- package/build/ox_modules/module-web/commands/isVisible.js +19 -19
- package/build/ox_modules/module-web/commands/makeVisible.js +25 -25
- package/build/ox_modules/module-web/commands/maximizeWindow.js +14 -14
- package/build/ox_modules/module-web/commands/minimizeWindow.js +14 -14
- package/build/ox_modules/module-web/commands/mock.js +20 -20
- package/build/ox_modules/module-web/commands/mockClearAll.js +12 -12
- package/build/ox_modules/module-web/commands/mockRestoreAll.js +12 -12
- package/build/ox_modules/module-web/commands/newWindow.js +16 -16
- package/build/ox_modules/module-web/commands/open.js +16 -16
- package/build/ox_modules/module-web/commands/pause.js +15 -15
- package/build/ox_modules/module-web/commands/point.js +21 -21
- package/build/ox_modules/module-web/commands/pointJS.js +15 -15
- package/build/ox_modules/module-web/commands/refresh.js +15 -15
- package/build/ox_modules/module-web/commands/rightClick.js +17 -17
- package/build/ox_modules/module-web/commands/rightClickActions.js +19 -19
- package/build/ox_modules/module-web/commands/scrollToElement.js +21 -21
- package/build/ox_modules/module-web/commands/select.js +23 -23
- package/build/ox_modules/module-web/commands/selectFrame.js +24 -24
- package/build/ox_modules/module-web/commands/selectWindow.js +27 -27
- package/build/ox_modules/module-web/commands/sendKeys.js +22 -22
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +20 -20
- package/build/ox_modules/module-web/commands/setTimeout.js +21 -21
- package/build/ox_modules/module-web/commands/setWindowSize.js +17 -17
- package/build/ox_modules/module-web/commands/takeScreenshot.js +17 -17
- package/build/ox_modules/module-web/commands/type.js +20 -20
- package/build/ox_modules/module-web/commands/verifyAlert.js +20 -20
- package/build/ox_modules/module-web/commands/verifyExist.js +17 -17
- package/build/ox_modules/module-web/commands/verifySelectedLabel.js +21 -21
- package/build/ox_modules/module-web/commands/verifySelectedValue.js +21 -21
- package/build/ox_modules/module-web/commands/verifyText.js +21 -21
- package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +18 -18
- package/build/ox_modules/module-web/commands/verifyTextPresent.js +18 -18
- package/build/ox_modules/module-web/commands/verifyTitle.js +19 -19
- package/build/ox_modules/module-web/commands/verifyValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForAngular.js +19 -19
- package/build/ox_modules/module-web/commands/waitForExist.js +17 -17
- package/build/ox_modules/module-web/commands/waitForInteractable.js +17 -17
- package/build/ox_modules/module-web/commands/waitForNotExist.js +17 -17
- package/build/ox_modules/module-web/commands/waitForNotText.js +20 -20
- package/build/ox_modules/module-web/commands/waitForNotValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForText.js +20 -20
- package/build/ox_modules/module-web/commands/waitForValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForVisible.js +17 -17
- package/build/ox_modules/module-web/commands/waitForWindow.js +22 -22
- package/build/ox_modules/module-web.js +94 -94
- package/build/ox_modules/module-win/commands/assertText.js +17 -17
- package/build/ox_modules/module-win/commands/assertTitle.js +15 -15
- package/build/ox_modules/module-win/commands/assertValue.js +14 -14
- package/build/ox_modules/module-win/commands/back.js +11 -11
- package/build/ox_modules/module-win/commands/clear.js +13 -13
- package/build/ox_modules/module-win/commands/click.js +13 -13
- package/build/ox_modules/module-win/commands/clickLong.js +14 -14
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +14 -14
- package/build/ox_modules/module-win/commands/findElement.js +15 -15
- package/build/ox_modules/module-win/commands/findElements.js +15 -15
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +12 -12
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +15 -15
- package/build/ox_modules/module-win/commands/getLocation.js +14 -14
- package/build/ox_modules/module-win/commands/getSource.js +12 -12
- package/build/ox_modules/module-win/commands/getText.js +14 -14
- package/build/ox_modules/module-win/commands/getValue.js +14 -14
- package/build/ox_modules/module-win/commands/getWindowHandles.js +15 -15
- package/build/ox_modules/module-win/commands/index.js +1 -1
- package/build/ox_modules/module-win/commands/isCheckable.js +14 -14
- package/build/ox_modules/module-win/commands/isChecked.js +14 -14
- package/build/ox_modules/module-win/commands/isClickable.js +14 -14
- package/build/ox_modules/module-win/commands/isExist.js +15 -15
- package/build/ox_modules/module-win/commands/isSelected.js +14 -14
- package/build/ox_modules/module-win/commands/isVisible.js +15 -15
- package/build/ox_modules/module-win/commands/open.js +13 -13
- package/build/ox_modules/module-win/commands/pause.js +12 -12
- package/build/ox_modules/module-win/commands/rightClick.js +13 -13
- package/build/ox_modules/module-win/commands/selectWindow.js +23 -23
- package/build/ox_modules/module-win/commands/sendKeys.js +22 -22
- package/build/ox_modules/module-win/commands/setTimeout.js +17 -17
- package/build/ox_modules/module-win/commands/takeScreenshot.js +16 -16
- package/build/ox_modules/module-win/commands/tap.js +13 -13
- package/build/ox_modules/module-win/commands/type.js +16 -16
- package/build/ox_modules/module-win/commands/waitForExist.js +14 -14
- package/build/ox_modules/module-win/commands/waitForInteractable.js +16 -16
- package/build/ox_modules/module-win/commands/waitForVisible.js +13 -13
- package/build/ox_modules/module-win.js +47 -47
- package/build/ox_modules/utils.js +8 -8
- package/build/ox_reporters/excel/template.json +48 -48
- package/build/ox_reporters/html/index.ejs +163 -163
- package/build/ox_reporters/html/summary.ejs +77 -77
- package/build/ox_reporters/html/tests-details.ejs +134 -134
- package/build/ox_reporters/html/tests-devices-browsers.ejs +83 -83
- package/build/ox_reporters/reporter-excel.js +1 -1
- package/build/ox_reporters/reporter-html.js +1 -1
- package/build/ox_reporters/reporter-json.js +1 -1
- package/build/ox_reporters/reporter-junit.js +1 -1
- package/build/ox_reporters/reporter-pdf.js +1 -1
- package/build/ox_reporters/reporter-rp.js +73 -42
- package/build/ox_reporters/reporter-xml.js +1 -1
- package/build/ox_services/service-devtools/submodule-network.js +1 -1
- package/build/ox_services/service-devtools.js +1 -1
- package/build/reporter/FileReporterBase.js +1 -1
- package/build/reporter/ReportAggregator.js +1 -1
- package/build/reporter/ReporterBase.js +1 -1
- package/build/reporter/WebSocketReporter.js +1 -1
- package/build/runners/WorkerProcess.js +1 -1
- package/build/runners/cucumber/CucumberEventListener.js +1 -1
- package/build/runners/cucumber/CucumberReporter.js +1 -1
- package/build/runners/cucumber/CucumberWorker.js +1 -1
- package/build/runners/cucumber/index.js +1 -1
- package/build/runners/cucumber/worker.js +1 -1
- package/build/runners/index.js +1 -1
- package/build/runners/oxygen/OxygenWorker.js +1 -1
- package/build/runners/oxygen/index.js +1 -1
- package/build/runners/oxygen/worker.js +1 -1
- package/config/default.json +6 -6
- package/package.json +139 -139
- package/types/index.d.ts +70 -70
- package/types/module-eyes.d.ts +39 -39
- package/types/module-http.d.ts +163 -163
- package/types/module-log.d.ts +34 -34
- package/types/module-mob.d.ts +966 -966
- package/types/module-pdf.d.ts +40 -40
- package/types/module-proxy.d.ts +100 -100
- package/types/module-shell.d.ts +24 -24
- package/types/module-utils.d.ts +99 -99
- package/types/module-web.d.ts +1053 -1053
- package/types/module-win.d.ts +352 -352
- package/types/oxygen.d.ts +53 -53
- package/log.txt +0 -1614
- package/reports/2025-06-08_231627/report.html +0 -440
- package/reports/2025-06-09_223615/report.html +0 -440
- package/transpiled/mongodb/etc/prepare.js +0 -18
- package/transpiled/mongodb/lib/admin.js +0 -182
- package/transpiled/mongodb/lib/beta.js +0 -26
- package/transpiled/mongodb/lib/bson.js +0 -220
- package/transpiled/mongodb/lib/bulk/common.js +0 -1041
- package/transpiled/mongodb/lib/bulk/ordered.js +0 -76
- package/transpiled/mongodb/lib/bulk/unordered.js +0 -102
- package/transpiled/mongodb/lib/change_stream.js +0 -517
- package/transpiled/mongodb/lib/client-side-encryption/auto_encrypter.js +0 -329
- package/transpiled/mongodb/lib/client-side-encryption/client_encryption.js +0 -779
- package/transpiled/mongodb/lib/client-side-encryption/crypto_callbacks.js +0 -95
- package/transpiled/mongodb/lib/client-side-encryption/errors.js +0 -171
- package/transpiled/mongodb/lib/client-side-encryption/mongocryptd_manager.js +0 -98
- package/transpiled/mongodb/lib/client-side-encryption/providers/aws.js +0 -34
- package/transpiled/mongodb/lib/client-side-encryption/providers/azure.js +0 -186
- package/transpiled/mongodb/lib/client-side-encryption/providers/gcp.js +0 -29
- package/transpiled/mongodb/lib/client-side-encryption/providers/index.js +0 -58
- package/transpiled/mongodb/lib/client-side-encryption/state_machine.js +0 -505
- package/transpiled/mongodb/lib/cmap/auth/auth_provider.js +0 -63
- package/transpiled/mongodb/lib/cmap/auth/aws_temporary_credentials.js +0 -167
- package/transpiled/mongodb/lib/cmap/auth/gssapi.js +0 -207
- package/transpiled/mongodb/lib/cmap/auth/mongo_credentials.js +0 -193
- package/transpiled/mongodb/lib/cmap/auth/mongodb_aws.js +0 -181
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/automated_callback_workflow.js +0 -101
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/azure_machine_workflow.js +0 -81
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/callback_workflow.js +0 -174
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/command_builders.js +0 -59
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/gcp_machine_workflow.js +0 -58
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/human_callback_workflow.js +0 -138
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/k8s_machine_workflow.js +0 -42
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_cache.js +0 -71
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_machine_workflow.js +0 -34
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc.js +0 -111
- package/transpiled/mongodb/lib/cmap/auth/plain.js +0 -43
- package/transpiled/mongodb/lib/cmap/auth/providers.js +0 -22
- package/transpiled/mongodb/lib/cmap/auth/scram.js +0 -318
- package/transpiled/mongodb/lib/cmap/auth/x509.js +0 -61
- package/transpiled/mongodb/lib/cmap/command_monitoring_events.js +0 -266
- package/transpiled/mongodb/lib/cmap/commands.js +0 -605
- package/transpiled/mongodb/lib/cmap/connect.js +0 -418
- package/transpiled/mongodb/lib/cmap/connection.js +0 -673
- package/transpiled/mongodb/lib/cmap/connection_pool.js +0 -688
- package/transpiled/mongodb/lib/cmap/connection_pool_events.js +0 -254
- package/transpiled/mongodb/lib/cmap/errors.js +0 -128
- package/transpiled/mongodb/lib/cmap/handshake/client_metadata.js +0 -278
- package/transpiled/mongodb/lib/cmap/metrics.js +0 -67
- package/transpiled/mongodb/lib/cmap/stream_description.js +0 -74
- package/transpiled/mongodb/lib/cmap/wire_protocol/compression.js +0 -196
- package/transpiled/mongodb/lib/cmap/wire_protocol/constants.js +0 -19
- package/transpiled/mongodb/lib/cmap/wire_protocol/on_data.js +0 -144
- package/transpiled/mongodb/lib/cmap/wire_protocol/on_demand/document.js +0 -278
- package/transpiled/mongodb/lib/cmap/wire_protocol/responses.js +0 -376
- package/transpiled/mongodb/lib/cmap/wire_protocol/shared.js +0 -49
- package/transpiled/mongodb/lib/collection.js +0 -852
- package/transpiled/mongodb/lib/connection_string.js +0 -1452
- package/transpiled/mongodb/lib/constants.js +0 -162
- package/transpiled/mongodb/lib/cursor/abstract_cursor.js +0 -1082
- package/transpiled/mongodb/lib/cursor/aggregation_cursor.js +0 -227
- package/transpiled/mongodb/lib/cursor/change_stream_cursor.js +0 -136
- package/transpiled/mongodb/lib/cursor/client_bulk_write_cursor.js +0 -69
- package/transpiled/mongodb/lib/cursor/find_cursor.js +0 -476
- package/transpiled/mongodb/lib/cursor/list_collections_cursor.js +0 -48
- package/transpiled/mongodb/lib/cursor/list_indexes_cursor.js +0 -46
- package/transpiled/mongodb/lib/cursor/list_search_indexes_cursor.js +0 -30
- package/transpiled/mongodb/lib/cursor/run_command_cursor.js +0 -125
- package/transpiled/mongodb/lib/db.js +0 -467
- package/transpiled/mongodb/lib/deps.js +0 -174
- package/transpiled/mongodb/lib/encrypter.js +0 -129
- package/transpiled/mongodb/lib/error.js +0 -1550
- package/transpiled/mongodb/lib/explain.js +0 -122
- package/transpiled/mongodb/lib/gridfs/download.js +0 -369
- package/transpiled/mongodb/lib/gridfs/index.js +0 -240
- package/transpiled/mongodb/lib/gridfs/upload.js +0 -446
- package/transpiled/mongodb/lib/index.js +0 -975
- package/transpiled/mongodb/lib/mongo_client.js +0 -626
- package/transpiled/mongodb/lib/mongo_client_auth_providers.js +0 -98
- package/transpiled/mongodb/lib/mongo_logger.js +0 -812
- package/transpiled/mongodb/lib/mongo_types.js +0 -71
- package/transpiled/mongodb/lib/operations/aggregate.js +0 -129
- package/transpiled/mongodb/lib/operations/bulk_write.js +0 -48
- package/transpiled/mongodb/lib/operations/client_bulk_write/client_bulk_write.js +0 -96
- package/transpiled/mongodb/lib/operations/client_bulk_write/command_builder.js +0 -409
- package/transpiled/mongodb/lib/operations/client_bulk_write/common.js +0 -5
- package/transpiled/mongodb/lib/operations/client_bulk_write/executor.js +0 -144
- package/transpiled/mongodb/lib/operations/client_bulk_write/results_merger.js +0 -228
- package/transpiled/mongodb/lib/operations/collections.js +0 -49
- package/transpiled/mongodb/lib/operations/command.js +0 -102
- package/transpiled/mongodb/lib/operations/count.js +0 -60
- package/transpiled/mongodb/lib/operations/create_collection.js +0 -109
- package/transpiled/mongodb/lib/operations/delete.js +0 -134
- package/transpiled/mongodb/lib/operations/distinct.js +0 -77
- package/transpiled/mongodb/lib/operations/drop.js +0 -102
- package/transpiled/mongodb/lib/operations/estimated_document_count.js +0 -47
- package/transpiled/mongodb/lib/operations/execute_operation.js +0 -251
- package/transpiled/mongodb/lib/operations/find.js +0 -197
- package/transpiled/mongodb/lib/operations/find_and_modify.js +0 -191
- package/transpiled/mongodb/lib/operations/get_more.js +0 -84
- package/transpiled/mongodb/lib/operations/indexes.js +0 -197
- package/transpiled/mongodb/lib/operations/insert.js +0 -138
- package/transpiled/mongodb/lib/operations/is_capped.js +0 -44
- package/transpiled/mongodb/lib/operations/kill_cursors.js +0 -58
- package/transpiled/mongodb/lib/operations/list_collections.js +0 -66
- package/transpiled/mongodb/lib/operations/list_databases.js +0 -56
- package/transpiled/mongodb/lib/operations/operation.js +0 -88
- package/transpiled/mongodb/lib/operations/options_operation.js +0 -44
- package/transpiled/mongodb/lib/operations/profiling_level.js +0 -42
- package/transpiled/mongodb/lib/operations/remove_user.js +0 -35
- package/transpiled/mongodb/lib/operations/rename.js +0 -48
- package/transpiled/mongodb/lib/operations/run_command.js +0 -64
- package/transpiled/mongodb/lib/operations/search_indexes/create.js +0 -41
- package/transpiled/mongodb/lib/operations/search_indexes/drop.js +0 -51
- package/transpiled/mongodb/lib/operations/search_indexes/update.js +0 -40
- package/transpiled/mongodb/lib/operations/set_profiling_level.js +0 -70
- package/transpiled/mongodb/lib/operations/stats.js +0 -39
- package/transpiled/mongodb/lib/operations/update.js +0 -218
- package/transpiled/mongodb/lib/operations/validate_collection.js +0 -49
- package/transpiled/mongodb/lib/read_concern.js +0 -92
- package/transpiled/mongodb/lib/read_preference.js +0 -215
- package/transpiled/mongodb/lib/resource_management.js +0 -74
- package/transpiled/mongodb/lib/sdam/common.js +0 -53
- package/transpiled/mongodb/lib/sdam/events.js +0 -177
- package/transpiled/mongodb/lib/sdam/monitor.js +0 -656
- package/transpiled/mongodb/lib/sdam/server.js +0 -463
- package/transpiled/mongodb/lib/sdam/server_description.js +0 -196
- package/transpiled/mongodb/lib/sdam/server_selection.js +0 -283
- package/transpiled/mongodb/lib/sdam/server_selection_events.js +0 -112
- package/transpiled/mongodb/lib/sdam/srv_polling.js +0 -139
- package/transpiled/mongodb/lib/sdam/topology.js +0 -833
- package/transpiled/mongodb/lib/sdam/topology_description.js +0 -447
- package/transpiled/mongodb/lib/sessions.js +0 -988
- package/transpiled/mongodb/lib/sort.js +0 -123
- package/transpiled/mongodb/lib/timeout.js +0 -349
- package/transpiled/mongodb/lib/transactions.js +0 -149
- package/transpiled/mongodb/lib/utils.js +0 -1502
- package/transpiled/mongodb/lib/write_concern.js +0 -115
|
@@ -15,22 +15,22 @@ var _helper = _interopRequireDefault(require("../errors/helper"));
|
|
|
15
15
|
|
|
16
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
17
|
|
|
18
|
-
/*
|
|
19
|
-
* Copyright (C) 2015-current CloudBeat Limited
|
|
20
|
-
*
|
|
21
|
-
* This program is free software: you can redistribute it and/or modify
|
|
22
|
-
* it under the terms of the GNU General Public License as published by
|
|
23
|
-
* the Free Software Foundation, either version 3 of the License, or
|
|
24
|
-
* (at your option) any later version.
|
|
18
|
+
/*
|
|
19
|
+
* Copyright (C) 2015-current CloudBeat Limited
|
|
20
|
+
*
|
|
21
|
+
* This program is free software: you can redistribute it and/or modify
|
|
22
|
+
* it under the terms of the GNU General Public License as published by
|
|
23
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
24
|
+
* (at your option) any later version.
|
|
25
25
|
*/
|
|
26
26
|
const {
|
|
27
27
|
MongoClient
|
|
28
28
|
} = require('mongodb');
|
|
29
29
|
|
|
30
30
|
const MODULE_NAME = 'mongo';
|
|
31
|
-
/**
|
|
32
|
-
* @name shell
|
|
33
|
-
* @description Provides methods for working with operating system shell.
|
|
31
|
+
/**
|
|
32
|
+
* @name shell
|
|
33
|
+
* @description Provides methods for working with operating system shell.
|
|
34
34
|
*/
|
|
35
35
|
|
|
36
36
|
class MongoDbModule extends _OxygenModule.default {
|
|
@@ -42,15 +42,15 @@ class MongoDbModule extends _OxygenModule.default {
|
|
|
42
42
|
this.db;
|
|
43
43
|
this.collection;
|
|
44
44
|
}
|
|
45
|
-
/**
|
|
46
|
-
* @summary Initializes MongoDB session.
|
|
47
|
-
* @function init
|
|
48
|
-
* @param {string} hostOrUrl - Host name or full URL of the target MongoDB server.
|
|
49
|
-
* @param {string} dbName - Database name. You can change it later using "setDatabase" method.
|
|
50
|
-
* @param {string} [username] - Optional username for authentication.
|
|
51
|
-
* @param {string} [password] - Optional password for authentication.
|
|
52
|
-
* @param {string} [authSource=admin] - Optional authentication source. Default value is "admin".
|
|
53
|
-
* @param {number} [port=27017] - Optional MongoDB server port. Default value is 27017.
|
|
45
|
+
/**
|
|
46
|
+
* @summary Initializes MongoDB session.
|
|
47
|
+
* @function init
|
|
48
|
+
* @param {string} hostOrUrl - Host name or full URL of the target MongoDB server.
|
|
49
|
+
* @param {string} dbName - Database name. You can change it later using "setDatabase" method.
|
|
50
|
+
* @param {string} [username] - Optional username for authentication.
|
|
51
|
+
* @param {string} [password] - Optional password for authentication.
|
|
52
|
+
* @param {string} [authSource=admin] - Optional authentication source. Default value is "admin".
|
|
53
|
+
* @param {number} [port=27017] - Optional MongoDB server port. Default value is 27017.
|
|
54
54
|
*/
|
|
55
55
|
|
|
56
56
|
|
|
@@ -84,20 +84,20 @@ class MongoDbModule extends _OxygenModule.default {
|
|
|
84
84
|
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
|
-
/**
|
|
88
|
-
* @summary Sets the current database to perform further actions.
|
|
89
|
-
* @function setDatabase
|
|
90
|
-
* @param {string} dbName - Database name.
|
|
87
|
+
/**
|
|
88
|
+
* @summary Sets the current database to perform further actions.
|
|
89
|
+
* @function setDatabase
|
|
90
|
+
* @param {string} dbName - Database name.
|
|
91
91
|
*/
|
|
92
92
|
|
|
93
93
|
|
|
94
94
|
setDatabase(dbName) {
|
|
95
95
|
this.db = this.client.db(dbName);
|
|
96
96
|
}
|
|
97
|
-
/**
|
|
98
|
-
* @summary Sets the current collection to perform further actions.
|
|
99
|
-
* @function setCollection
|
|
100
|
-
* @param {string} collectionName - Collection name.
|
|
97
|
+
/**
|
|
98
|
+
* @summary Sets the current collection to perform further actions.
|
|
99
|
+
* @function setCollection
|
|
100
|
+
* @param {string} collectionName - Collection name.
|
|
101
101
|
*/
|
|
102
102
|
|
|
103
103
|
|
|
@@ -109,12 +109,12 @@ class MongoDbModule extends _OxygenModule.default {
|
|
|
109
109
|
this.collection = this.db.collection(collectionName);
|
|
110
110
|
return true;
|
|
111
111
|
}
|
|
112
|
-
/**
|
|
113
|
-
* @summary Finds documents in the current collection.
|
|
114
|
-
* @function find
|
|
115
|
-
* @param {object} filter - The filter predicate.
|
|
116
|
-
* @param {object} options - Optional settings for the command.
|
|
117
|
-
* @return {object} A list of documents.
|
|
112
|
+
/**
|
|
113
|
+
* @summary Finds documents in the current collection.
|
|
114
|
+
* @function find
|
|
115
|
+
* @param {object} filter - The filter predicate.
|
|
116
|
+
* @param {object} options - Optional settings for the command.
|
|
117
|
+
* @return {object} A list of documents.
|
|
118
118
|
*/
|
|
119
119
|
|
|
120
120
|
|
|
@@ -129,12 +129,12 @@ class MongoDbModule extends _OxygenModule.default {
|
|
|
129
129
|
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
|
-
/**
|
|
133
|
-
* @summary Gets the number of documents matching the filter.
|
|
134
|
-
* @function countDocuments
|
|
135
|
-
* @param {object} filter - The filter for the count.
|
|
136
|
-
* @param {object} options - Optional settings for the command.
|
|
137
|
-
* @return {number} Number of documents matching the filter.
|
|
132
|
+
/**
|
|
133
|
+
* @summary Gets the number of documents matching the filter.
|
|
134
|
+
* @function countDocuments
|
|
135
|
+
* @param {object} filter - The filter for the count.
|
|
136
|
+
* @param {object} options - Optional settings for the command.
|
|
137
|
+
* @return {number} Number of documents matching the filter.
|
|
138
138
|
*/
|
|
139
139
|
|
|
140
140
|
|
|
@@ -149,11 +149,11 @@ class MongoDbModule extends _OxygenModule.default {
|
|
|
149
149
|
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
|
-
/**
|
|
153
|
-
* @summary Inserts a single document into a collection.
|
|
154
|
-
* @function insertOne
|
|
155
|
-
* @param {object} doc - The document to insert.
|
|
156
|
-
* @param {object} options - Optional settings for the command.
|
|
152
|
+
/**
|
|
153
|
+
* @summary Inserts a single document into a collection.
|
|
154
|
+
* @function insertOne
|
|
155
|
+
* @param {object} doc - The document to insert.
|
|
156
|
+
* @param {object} options - Optional settings for the command.
|
|
157
157
|
*/
|
|
158
158
|
|
|
159
159
|
|
|
@@ -168,11 +168,11 @@ class MongoDbModule extends _OxygenModule.default {
|
|
|
168
168
|
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
|
-
/**
|
|
172
|
-
* @summary Inserts an array of documents into a collection.
|
|
173
|
-
* @function insertMany
|
|
174
|
-
* @param {object} docs - The documents to insert.
|
|
175
|
-
* @param {object} options - Optional settings for the command.
|
|
171
|
+
/**
|
|
172
|
+
* @summary Inserts an array of documents into a collection.
|
|
173
|
+
* @function insertMany
|
|
174
|
+
* @param {object} docs - The documents to insert.
|
|
175
|
+
* @param {object} options - Optional settings for the command.
|
|
176
176
|
*/
|
|
177
177
|
|
|
178
178
|
|
|
@@ -187,12 +187,12 @@ class MongoDbModule extends _OxygenModule.default {
|
|
|
187
187
|
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
188
188
|
}
|
|
189
189
|
}
|
|
190
|
-
/**
|
|
191
|
-
* @summary Update a single document in a collection.
|
|
192
|
-
* @function updateOne
|
|
193
|
-
* @param {object} filter - The filter used to select the document to replace.
|
|
194
|
-
* @param {UpdateFilter<TSchema>|Document[]} update - The modifications to apply.
|
|
195
|
-
* @param {object} options - Optional settings for the command.
|
|
190
|
+
/**
|
|
191
|
+
* @summary Update a single document in a collection.
|
|
192
|
+
* @function updateOne
|
|
193
|
+
* @param {object} filter - The filter used to select the document to replace.
|
|
194
|
+
* @param {UpdateFilter<TSchema>|Document[]} update - The modifications to apply.
|
|
195
|
+
* @param {object} options - Optional settings for the command.
|
|
196
196
|
*/
|
|
197
197
|
|
|
198
198
|
|
|
@@ -207,12 +207,12 @@ class MongoDbModule extends _OxygenModule.default {
|
|
|
207
207
|
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
208
208
|
}
|
|
209
209
|
}
|
|
210
|
-
/**
|
|
211
|
-
* @summary Update multiple documents in a collection.
|
|
212
|
-
* @function updateMany
|
|
213
|
-
* @param {object} filter - The filter used to select the document to update.
|
|
214
|
-
* @param {UpdateFilter<TSchema>|Document[]} update - The modifications to apply.
|
|
215
|
-
* @param {object} options - Optional settings for the command.
|
|
210
|
+
/**
|
|
211
|
+
* @summary Update multiple documents in a collection.
|
|
212
|
+
* @function updateMany
|
|
213
|
+
* @param {object} filter - The filter used to select the document to update.
|
|
214
|
+
* @param {UpdateFilter<TSchema>|Document[]} update - The modifications to apply.
|
|
215
|
+
* @param {object} options - Optional settings for the command.
|
|
216
216
|
*/
|
|
217
217
|
|
|
218
218
|
|
|
@@ -227,12 +227,12 @@ class MongoDbModule extends _OxygenModule.default {
|
|
|
227
227
|
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
228
228
|
}
|
|
229
229
|
}
|
|
230
|
-
/**
|
|
231
|
-
* @summary Replace a document in a collection with another document.
|
|
232
|
-
* @function replaceOne
|
|
233
|
-
* @param {object} filter - The filter used to select the document to replace.
|
|
234
|
-
* @param {object} doc - The Document that replaces the matching document.
|
|
235
|
-
* @param {object} options - Optional settings for the command.
|
|
230
|
+
/**
|
|
231
|
+
* @summary Replace a document in a collection with another document.
|
|
232
|
+
* @function replaceOne
|
|
233
|
+
* @param {object} filter - The filter used to select the document to replace.
|
|
234
|
+
* @param {object} doc - The Document that replaces the matching document.
|
|
235
|
+
* @param {object} options - Optional settings for the command.
|
|
236
236
|
*/
|
|
237
237
|
|
|
238
238
|
|
|
@@ -247,11 +247,11 @@ class MongoDbModule extends _OxygenModule.default {
|
|
|
247
247
|
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
248
248
|
}
|
|
249
249
|
}
|
|
250
|
-
/**
|
|
251
|
-
* @summary Delete a document from a collection.
|
|
252
|
-
* @function deleteOne
|
|
253
|
-
* @param {object} filter - The filter used to select the document to remove.
|
|
254
|
-
* @param {object} options - Optional settings for the command.
|
|
250
|
+
/**
|
|
251
|
+
* @summary Delete a document from a collection.
|
|
252
|
+
* @function deleteOne
|
|
253
|
+
* @param {object} filter - The filter used to select the document to remove.
|
|
254
|
+
* @param {object} options - Optional settings for the command.
|
|
255
255
|
*/
|
|
256
256
|
|
|
257
257
|
|
|
@@ -266,11 +266,11 @@ class MongoDbModule extends _OxygenModule.default {
|
|
|
266
266
|
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
267
267
|
}
|
|
268
268
|
}
|
|
269
|
-
/**
|
|
270
|
-
* @summary Delete multiple documents from a collection.
|
|
271
|
-
* @function deleteMany
|
|
272
|
-
* @param {object} filter - The filter used to select the documents to remove.
|
|
273
|
-
* @param {object} options - Optional settings for the command.
|
|
269
|
+
/**
|
|
270
|
+
* @summary Delete multiple documents from a collection.
|
|
271
|
+
* @function deleteMany
|
|
272
|
+
* @param {object} filter - The filter used to select the documents to remove.
|
|
273
|
+
* @param {object} options - Optional settings for the command.
|
|
274
274
|
*/
|
|
275
275
|
|
|
276
276
|
|
|
@@ -285,10 +285,10 @@ class MongoDbModule extends _OxygenModule.default {
|
|
|
285
285
|
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
286
286
|
}
|
|
287
287
|
}
|
|
288
|
-
/**
|
|
289
|
-
* @summary Gets module name
|
|
290
|
-
* @function name
|
|
291
|
-
* @return {String} Constant value "shell".
|
|
288
|
+
/**
|
|
289
|
+
* @summary Gets module name
|
|
290
|
+
* @function name
|
|
291
|
+
* @return {String} Constant value "shell".
|
|
292
292
|
*/
|
|
293
293
|
|
|
294
294
|
|
|
@@ -299,4 +299,4 @@ class MongoDbModule extends _OxygenModule.default {
|
|
|
299
299
|
}
|
|
300
300
|
|
|
301
301
|
exports.default = MongoDbModule;
|
|
302
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1tb25nby5qcyJdLCJuYW1lcyI6WyJNb25nb0NsaWVudCIsInJlcXVpcmUiLCJNT0RVTEVfTkFNRSIsIk1vbmdvRGJNb2R1bGUiLCJPeHlnZW5Nb2R1bGUiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJjb250ZXh0IiwicnMiLCJsb2dnZXIiLCJtb2R1bGVzIiwic2VydmljZXMiLCJfYWx3YXlzSW5pdGlhbGl6ZWQiLCJfaXNJbml0aWFsaXplZCIsImNsaWVudCIsImRiIiwiY29sbGVjdGlvbiIsImluaXQiLCJob3N0T3JVcmwiLCJkYk5hbWUiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiYXV0aFNvdXJjZSIsInBvcnQiLCJFcnJvciIsImlzRnVsbFVybCIsInRlc3QiLCJ1cmkiLCJlbmNVc2VybmFtZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImVuY1Bhc3N3b3JkIiwidW5kZWZpbmVkIiwidXNlTmV3VXJsUGFyc2VyIiwidXNlVW5pZmllZFRvcG9sb2d5IiwiY29ubmVjdCIsImUiLCJPeEVycm9yIiwiZXJySGVscGVyIiwiZXJyb3JDb2RlIiwiTU9OR09EQl9FUlJPUiIsIm1lc3NhZ2UiLCJzZXREYXRhYmFzZSIsInNldENvbGxlY3Rpb24iLCJjb2xsZWN0aW9uTmFtZSIsImZpbmQiLCJmaWx0ZXIiLCJ0b0FycmF5IiwiY291bnREb2N1bWVudHMiLCJpbnNlcnRPbmUiLCJkb2MiLCJpbnNlcnRNYW55IiwiZG9jcyIsInVwZGF0ZU9uZSIsInVwZGF0ZSIsInVwZGF0ZU1hbnkiLCJyZXBsYWNlT25lIiwiZGVsZXRlT25lIiwiZGVsZXRlTWFueSIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVNBOztBQUNBOztBQUNBOzs7O0FBWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUFrQkMsT0FBTyxDQUFDLFNBQUQsQ0FBL0I7O0FB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Q2xvdWRCZWF0IExpbWl0ZWRcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICovXG5jb25zdCB7IE1vbmdvQ2xpZW50IH0gPSByZXF1aXJlKCdtb25nb2RiJyk7XG5pbXBvcnQgT3h5Z2VuTW9kdWxlIGZyb20gJy4uL2NvcmUvT3h5Z2VuTW9kdWxlJztcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xuXG5jb25zdCBNT0RVTEVfTkFNRSA9ICdtb25nbyc7XG5cbi8qKlxuICogQG5hbWUgc2hlbGxcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggb3BlcmF0aW5nIHN5c3RlbSBzaGVsbC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9uZ29EYk1vZHVsZSBleHRlbmRzIE94eWdlbk1vZHVsZSB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xuICAgICAgICB0aGlzLl9hbHdheXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2xpZW50O1xuICAgICAgICB0aGlzLmRiO1xuICAgICAgICB0aGlzLmNvbGxlY3Rpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIE1vbmdvREIgc2Vzc2lvbi5cbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBob3N0T3JVcmwgLSBIb3N0IG5hbWUgb3IgZnVsbCBVUkwgb2YgdGhlIHRhcmdldCBNb25nb0RCIHNlcnZlci5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGJOYW1lIC0gRGF0YWJhc2UgbmFtZS4gWW91IGNhbiBjaGFuZ2UgaXQgbGF0ZXIgdXNpbmcgXCJzZXREYXRhYmFzZVwiIG1ldGhvZC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3VzZXJuYW1lXSAtIE9wdGlvbmFsIHVzZXJuYW1lIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3Bhc3N3b3JkXSAtIE9wdGlvbmFsIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2F1dGhTb3VyY2U9YWRtaW5dIC0gT3B0aW9uYWwgYXV0aGVudGljYXRpb24gc291cmNlLiBEZWZhdWx0IHZhbHVlIGlzIFwiYWRtaW5cIi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3BvcnQ9MjcwMTddIC0gT3B0aW9uYWwgTW9uZ29EQiBzZXJ2ZXIgcG9ydC4gRGVmYXVsdCB2YWx1ZSBpcyAyNzAxNy5cbiAgICAgKi9cbiAgICBhc3luYyBpbml0KFxuICAgICAgICBob3N0T3JVcmwsXG4gICAgICAgIGRiTmFtZSxcbiAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgIHBhc3N3b3JkLFxuICAgICAgICBhdXRoU291cmNlID0gJ2FkbWluJyxcbiAgICAgICAgcG9ydCA9IDI3MDE3LFxuICAgICkge1xuICAgICAgICBpZiAoIWhvc3RPclVybCB8fCB0eXBlb2YgaG9zdE9yVXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNb25nb0RCIGhvc3QgbmFtZSBvciBmdWxsIFVSTCBpcyBub3Qgc3BlY2lmaWVkIScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFkYk5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTW9uZ29EQiBkYXRhYmFzZSBuYW1lIGlzIG5vdCBzcGVjaWZpZWQhJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNGdWxsVXJsID0gL15tb25nb2RiKFxcK3Nydik/OlxcL1xcLy9pLnRlc3QoaG9zdE9yVXJsKTtcbiAgICAgICAgY29uc3QgdXJpID0gaXNGdWxsVXJsXG4gICAgICAgICAgICA/IGhvc3RPclVybFxuICAgICAgICAgICAgOiAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh1c2VybmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmNVc2VybmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudCh1c2VybmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuY1Bhc3N3b3JkID0gcGFzc3dvcmQgPyBlbmNvZGVVUklDb21wb25lbnQocGFzc3dvcmQpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYG1vbmdvZGI6Ly8ke2VuY1VzZXJuYW1lfToke2VuY1Bhc3N3b3JkIHx8ICcnfUAke2hvc3RPclVybH06JHtwb3J0fS8ke2RiTmFtZX0/YXV0aFNvdXJjZT0ke2F1dGhTb3VyY2V9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBtb25nb2RiOi8vJHtob3N0T3JVcmx9OiR7cG9ydH0vJHtkYk5hbWV9P2F1dGhTb3VyY2U9JHthdXRoU291cmNlfWA7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB0aGlzLmNsaWVudCA9IG5ldyBNb25nb0NsaWVudCh1cmksIHsgdXNlTmV3VXJsUGFyc2VyOiB0cnVlLCB1c2VVbmlmaWVkVG9wb2xvZ3k6IHRydWUgfSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNsaWVudC5jb25uZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmRiID0gdGhpcy5jbGllbnQuZGIoZGJOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PTkdPREJfRVJST1IsIGUubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBTZXRzIHRoZSBjdXJyZW50IGRhdGFiYXNlIHRvIHBlcmZvcm0gZnVydGhlciBhY3Rpb25zLlxuICAgICAqIEBmdW5jdGlvbiBzZXREYXRhYmFzZSBcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGJOYW1lIC0gRGF0YWJhc2UgbmFtZS5cbiAgICAgKi9cbiAgICBzZXREYXRhYmFzZShkYk5hbWUpIHtcbiAgICAgICAgdGhpcy5kYiA9IHRoaXMuY2xpZW50LmRiKGRiTmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgU2V0cyB0aGUgY3VycmVudCBjb2xsZWN0aW9uIHRvIHBlcmZvcm0gZnVydGhlciBhY3Rpb25zLlxuICAgICAqIEBmdW5jdGlvbiBzZXRDb2xsZWN0aW9uIFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xsZWN0aW9uTmFtZSAtIENvbGxlY3Rpb24gbmFtZS5cbiAgICAgKi9cbiAgICBzZXRDb2xsZWN0aW9uKGNvbGxlY3Rpb25OYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5kYikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29sbGVjdGlvbiA9IHRoaXMuZGIuY29sbGVjdGlvbihjb2xsZWN0aW9uTmFtZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IEZpbmRzIGRvY3VtZW50cyBpbiB0aGUgY3VycmVudCBjb2xsZWN0aW9uLlxuICAgICAqIEBmdW5jdGlvbiBmaW5kIFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBmaWx0ZXIgLSBUaGUgZmlsdGVyIHByZWRpY2F0ZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzIGZvciB0aGUgY29tbWFuZC5cbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IEEgbGlzdCBvZiBkb2N1bWVudHMuXG4gICAgICovXG4gICAgYXN5bmMgZmluZChmaWx0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uZmluZChmaWx0ZXIsIG9wdGlvbnMpLnRvQXJyYXkoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT05HT0RCX0VSUk9SLCBlLm1lc3NhZ2UsIG51bGwsIHRydWUsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgR2V0cyB0aGUgbnVtYmVyIG9mIGRvY3VtZW50cyBtYXRjaGluZyB0aGUgZmlsdGVyLlxuICAgICAqIEBmdW5jdGlvbiBjb3VudERvY3VtZW50cyBcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZmlsdGVyIC0gVGhlIGZpbHRlciBmb3IgdGhlIGNvdW50LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHRoZSBjb21tYW5kLlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gTnVtYmVyIG9mIGRvY3VtZW50cyBtYXRjaGluZyB0aGUgZmlsdGVyLlxuICAgICAqL1xuICAgIGFzeW5jIGNvdW50RG9jdW1lbnRzKGZpbHRlciwgb3B0aW9ucykge1xuICAgICAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5jb3VudERvY3VtZW50cyhmaWx0ZXIsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PTkdPREJfRVJST1IsIGUubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBJbnNlcnRzIGEgc2luZ2xlIGRvY3VtZW50IGludG8gYSBjb2xsZWN0aW9uLlxuICAgICAqIEBmdW5jdGlvbiBpbnNlcnRPbmUgXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRvYyAtIFRoZSBkb2N1bWVudCB0byBpbnNlcnQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25hbCBzZXR0aW5ncyBmb3IgdGhlIGNvbW1hbmQuXG4gICAgICovXG4gICAgYXN5bmMgaW5zZXJ0T25lKGRvYywgb3B0aW9ucykge1xuICAgICAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5pbnNlcnRPbmUoZG9jLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT05HT0RCX0VSUk9SLCBlLm1lc3NhZ2UsIG51bGwsIHRydWUsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgSW5zZXJ0cyBhbiBhcnJheSBvZiBkb2N1bWVudHMgaW50byBhIGNvbGxlY3Rpb24uXG4gICAgICogQGZ1bmN0aW9uIGluc2VydE1hbnkgXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRvY3MgLSBUaGUgZG9jdW1lbnRzIHRvIGluc2VydC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzIGZvciB0aGUgY29tbWFuZC5cbiAgICAgKi9cbiAgICBhc3luYyBpbnNlcnRNYW55KGRvY3MsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uaW5zZXJ0TWFueShkb2NzLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT05HT0RCX0VSUk9SLCBlLm1lc3NhZ2UsIG51bGwsIHRydWUsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgVXBkYXRlIGEgc2luZ2xlIGRvY3VtZW50IGluIGEgY29sbGVjdGlvbi5cbiAgICAgKiBAZnVuY3Rpb24gdXBkYXRlT25lIFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBmaWx0ZXIgLSBUaGUgZmlsdGVyIHVzZWQgdG8gc2VsZWN0IHRoZSBkb2N1bWVudCB0byByZXBsYWNlLlxuICAgICAqIEBwYXJhbSB7VXBkYXRlRmlsdGVyPFRTY2hlbWE+fERvY3VtZW50W119IHVwZGF0ZSAtIFRoZSBtb2RpZmljYXRpb25zIHRvIGFwcGx5LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHRoZSBjb21tYW5kLlxuICAgICAqL1xuICAgIGFzeW5jIHVwZGF0ZU9uZShmaWx0ZXIsIHVwZGF0ZSkge1xuICAgICAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29sbGVjdGlvbi51cGRhdGVPbmUoZmlsdGVyLCB1cGRhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PTkdPREJfRVJST1IsIGUubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBVcGRhdGUgbXVsdGlwbGUgZG9jdW1lbnRzIGluIGEgY29sbGVjdGlvbi5cbiAgICAgKiBAZnVuY3Rpb24gdXBkYXRlTWFueSBcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZmlsdGVyIC0gVGhlIGZpbHRlciB1c2VkIHRvIHNlbGVjdCB0aGUgZG9jdW1lbnQgdG8gdXBkYXRlLlxuICAgICAqIEBwYXJhbSB7VXBkYXRlRmlsdGVyPFRTY2hlbWE+fERvY3VtZW50W119IHVwZGF0ZSAtIFRoZSBtb2RpZmljYXRpb25zIHRvIGFwcGx5LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHRoZSBjb21tYW5kLlxuICAgICAqL1xuICAgIGFzeW5jIHVwZGF0ZU1hbnkoZmlsdGVyLCB1cGRhdGUsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbGxlY3Rpb24udXBkYXRlTWFueShmaWx0ZXIsIHVwZGF0ZSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9OR09EQl9FUlJPUiwgZS5tZXNzYWdlLCBudWxsLCB0cnVlLCBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IFJlcGxhY2UgYSBkb2N1bWVudCBpbiBhIGNvbGxlY3Rpb24gd2l0aCBhbm90aGVyIGRvY3VtZW50LlxuICAgICAqIEBmdW5jdGlvbiByZXBsYWNlT25lIFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBmaWx0ZXIgLSBUaGUgZmlsdGVyIHVzZWQgdG8gc2VsZWN0IHRoZSBkb2N1bWVudCB0byByZXBsYWNlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkb2MgLSBUaGUgRG9jdW1lbnQgdGhhdCByZXBsYWNlcyB0aGUgbWF0Y2hpbmcgZG9jdW1lbnQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25hbCBzZXR0aW5ncyBmb3IgdGhlIGNvbW1hbmQuXG4gICAgICovXG4gICAgYXN5bmMgcmVwbGFjZU9uZShmaWx0ZXIsIGRvYykge1xuICAgICAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5yZXBsYWNlT25lKGZpbHRlciwgZG9jKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT05HT0RCX0VSUk9SLCBlLm1lc3NhZ2UsIG51bGwsIHRydWUsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgRGVsZXRlIGEgZG9jdW1lbnQgZnJvbSBhIGNvbGxlY3Rpb24uXG4gICAgICogQGZ1bmN0aW9uIGRlbGV0ZU9uZSBcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZmlsdGVyIC0gVGhlIGZpbHRlciB1c2VkIHRvIHNlbGVjdCB0aGUgZG9jdW1lbnQgdG8gcmVtb3ZlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHRoZSBjb21tYW5kLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZU9uZShmaWx0ZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uZGVsZXRlT25lKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9OR09EQl9FUlJPUiwgZS5tZXNzYWdlLCBudWxsLCB0cnVlLCBlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBEZWxldGUgbXVsdGlwbGUgZG9jdW1lbnRzIGZyb20gYSBjb2xsZWN0aW9uLlxuICAgICAqIEBmdW5jdGlvbiBkZWxldGVNYW55IFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBmaWx0ZXIgLSBUaGUgZmlsdGVyIHVzZWQgdG8gc2VsZWN0IHRoZSBkb2N1bWVudHMgdG8gcmVtb3ZlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHRoZSBjb21tYW5kLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZU1hbnkoZmlsdGVyKSB7XG4gICAgICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmRlbGV0ZU1hbnkoZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT05HT0RCX0VSUk9SLCBlLm1lc3NhZ2UsIG51bGwsIHRydWUsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgR2V0cyBtb2R1bGUgbmFtZVxuICAgICAqIEBmdW5jdGlvbiBuYW1lXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBDb25zdGFudCB2YWx1ZSBcInNoZWxsXCIuXG4gICAgICovXG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcbiAgICB9XG59Il19
|
|
302
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1tb25nby5qcyJdLCJuYW1lcyI6WyJNb25nb0NsaWVudCIsInJlcXVpcmUiLCJNT0RVTEVfTkFNRSIsIk1vbmdvRGJNb2R1bGUiLCJPeHlnZW5Nb2R1bGUiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJjb250ZXh0IiwicnMiLCJsb2dnZXIiLCJtb2R1bGVzIiwic2VydmljZXMiLCJfYWx3YXlzSW5pdGlhbGl6ZWQiLCJfaXNJbml0aWFsaXplZCIsImNsaWVudCIsImRiIiwiY29sbGVjdGlvbiIsImluaXQiLCJob3N0T3JVcmwiLCJkYk5hbWUiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiYXV0aFNvdXJjZSIsInBvcnQiLCJFcnJvciIsImlzRnVsbFVybCIsInRlc3QiLCJ1cmkiLCJlbmNVc2VybmFtZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImVuY1Bhc3N3b3JkIiwidW5kZWZpbmVkIiwidXNlTmV3VXJsUGFyc2VyIiwidXNlVW5pZmllZFRvcG9sb2d5IiwiY29ubmVjdCIsImUiLCJPeEVycm9yIiwiZXJySGVscGVyIiwiZXJyb3JDb2RlIiwiTU9OR09EQl9FUlJPUiIsIm1lc3NhZ2UiLCJzZXREYXRhYmFzZSIsInNldENvbGxlY3Rpb24iLCJjb2xsZWN0aW9uTmFtZSIsImZpbmQiLCJmaWx0ZXIiLCJ0b0FycmF5IiwiY291bnREb2N1bWVudHMiLCJpbnNlcnRPbmUiLCJkb2MiLCJpbnNlcnRNYW55IiwiZG9jcyIsInVwZGF0ZU9uZSIsInVwZGF0ZSIsInVwZGF0ZU1hbnkiLCJyZXBsYWNlT25lIiwiZGVsZXRlT25lIiwiZGVsZXRlTWFueSIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVNBOztBQUNBOztBQUNBOzs7O0FBWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUFrQkMsT0FBTyxDQUFDLFNBQUQsQ0FBL0I7O0FB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dCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuY29uc3QgeyBNb25nb0NsaWVudCB9ID0gcmVxdWlyZSgnbW9uZ29kYicpO1xyXG5pbXBvcnQgT3h5Z2VuTW9kdWxlIGZyb20gJy4uL2NvcmUvT3h5Z2VuTW9kdWxlJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVyckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuXHJcbmNvbnN0IE1PRFVMRV9OQU1FID0gJ21vbmdvJztcclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBzaGVsbFxyXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIG9wZXJhdGluZyBzeXN0ZW0gc2hlbGwuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb25nb0RiTW9kdWxlIGV4dGVuZHMgT3h5Z2VuTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xyXG4gICAgICAgIHRoaXMuX2Fsd2F5c0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2xpZW50O1xyXG4gICAgICAgIHRoaXMuZGI7XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBNb25nb0RCIHNlc3Npb24uXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGhvc3RPclVybCAtIEhvc3QgbmFtZSBvciBmdWxsIFVSTCBvZiB0aGUgdGFyZ2V0IE1vbmdvREIgc2VydmVyLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRiTmFtZSAtIERhdGFiYXNlIG5hbWUuIFlvdSBjYW4gY2hhbmdlIGl0IGxhdGVyIHVzaW5nIFwic2V0RGF0YWJhc2VcIiBtZXRob2QuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3VzZXJuYW1lXSAtIE9wdGlvbmFsIHVzZXJuYW1lIGZvciBhdXRoZW50aWNhdGlvbi5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFzc3dvcmRdIC0gT3B0aW9uYWwgcGFzc3dvcmQgZm9yIGF1dGhlbnRpY2F0aW9uLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFthdXRoU291cmNlPWFkbWluXSAtIE9wdGlvbmFsIGF1dGhlbnRpY2F0aW9uIHNvdXJjZS4gRGVmYXVsdCB2YWx1ZSBpcyBcImFkbWluXCIuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3BvcnQ9MjcwMTddIC0gT3B0aW9uYWwgTW9uZ29EQiBzZXJ2ZXIgcG9ydC4gRGVmYXVsdCB2YWx1ZSBpcyAyNzAxNy5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgaW5pdChcclxuICAgICAgICBob3N0T3JVcmwsXHJcbiAgICAgICAgZGJOYW1lLFxyXG4gICAgICAgIHVzZXJuYW1lLFxyXG4gICAgICAgIHBhc3N3b3JkLFxyXG4gICAgICAgIGF1dGhTb3VyY2UgPSAnYWRtaW4nLFxyXG4gICAgICAgIHBvcnQgPSAyNzAxNyxcclxuICAgICkge1xyXG4gICAgICAgIGlmICghaG9zdE9yVXJsIHx8IHR5cGVvZiBob3N0T3JVcmwgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTW9uZ29EQiBob3N0IG5hbWUgb3IgZnVsbCBVUkwgaXMgbm90IHNwZWNpZmllZCEnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIWRiTmFtZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01vbmdvREIgZGF0YWJhc2UgbmFtZSBpcyBub3Qgc3BlY2lmaWVkIScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpc0Z1bGxVcmwgPSAvXm1vbmdvZGIoXFwrc3J2KT86XFwvXFwvL2kudGVzdChob3N0T3JVcmwpO1xyXG4gICAgICAgIGNvbnN0IHVyaSA9IGlzRnVsbFVybFxyXG4gICAgICAgICAgICA/IGhvc3RPclVybFxyXG4gICAgICAgICAgICA6ICgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlcm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmNVc2VybmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudCh1c2VybmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5jUGFzc3dvcmQgPSBwYXNzd29yZCA/IGVuY29kZVVSSUNvbXBvbmVudChwYXNzd29yZCkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBtb25nb2RiOi8vJHtlbmNVc2VybmFtZX06JHtlbmNQYXNzd29yZCB8fCAnJ31AJHtob3N0T3JVcmx9OiR7cG9ydH0vJHtkYk5hbWV9P2F1dGhTb3VyY2U9JHthdXRoU291cmNlfWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYG1vbmdvZGI6Ly8ke2hvc3RPclVybH06JHtwb3J0fS8ke2RiTmFtZX0/YXV0aFNvdXJjZT0ke2F1dGhTb3VyY2V9YDtcclxuICAgICAgICAgICAgfSkoKTtcclxuICAgICAgICB0aGlzLmNsaWVudCA9IG5ldyBNb25nb0NsaWVudCh1cmksIHsgdXNlTmV3VXJsUGFyc2VyOiB0cnVlLCB1c2VVbmlmaWVkVG9wb2xvZ3k6IHRydWUgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGllbnQuY29ubmVjdCgpO1xyXG4gICAgICAgICAgICB0aGlzLmRiID0gdGhpcy5jbGllbnQuZGIoZGJOYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9OR09EQl9FUlJPUiwgZS5tZXNzYWdlLCBudWxsLCB0cnVlLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZXRzIHRoZSBjdXJyZW50IGRhdGFiYXNlIHRvIHBlcmZvcm0gZnVydGhlciBhY3Rpb25zLlxyXG4gICAgICogQGZ1bmN0aW9uIHNldERhdGFiYXNlIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRiTmFtZSAtIERhdGFiYXNlIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIHNldERhdGFiYXNlKGRiTmFtZSkge1xyXG4gICAgICAgIHRoaXMuZGIgPSB0aGlzLmNsaWVudC5kYihkYk5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0cyB0aGUgY3VycmVudCBjb2xsZWN0aW9uIHRvIHBlcmZvcm0gZnVydGhlciBhY3Rpb25zLlxyXG4gICAgICogQGZ1bmN0aW9uIHNldENvbGxlY3Rpb24gXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29sbGVjdGlvbk5hbWUgLSBDb2xsZWN0aW9uIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIHNldENvbGxlY3Rpb24oY29sbGVjdGlvbk5hbWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbGxlY3Rpb24gPSB0aGlzLmRiLmNvbGxlY3Rpb24oY29sbGVjdGlvbk5hbWUpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRmluZHMgZG9jdW1lbnRzIGluIHRoZSBjdXJyZW50IGNvbGxlY3Rpb24uXHJcbiAgICAgKiBAZnVuY3Rpb24gZmluZCBcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBmaWx0ZXIgLSBUaGUgZmlsdGVyIHByZWRpY2F0ZS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHRoZSBjb21tYW5kLlxyXG4gICAgICogQHJldHVybiB7b2JqZWN0fSBBIGxpc3Qgb2YgZG9jdW1lbnRzLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBmaW5kKGZpbHRlciwgb3B0aW9ucykge1xyXG4gICAgICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uZmluZChmaWx0ZXIsIG9wdGlvbnMpLnRvQXJyYXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT05HT0RCX0VSUk9SLCBlLm1lc3NhZ2UsIG51bGwsIHRydWUsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEdldHMgdGhlIG51bWJlciBvZiBkb2N1bWVudHMgbWF0Y2hpbmcgdGhlIGZpbHRlci5cclxuICAgICAqIEBmdW5jdGlvbiBjb3VudERvY3VtZW50cyBcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBmaWx0ZXIgLSBUaGUgZmlsdGVyIGZvciB0aGUgY291bnQuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzIGZvciB0aGUgY29tbWFuZC5cclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gTnVtYmVyIG9mIGRvY3VtZW50cyBtYXRjaGluZyB0aGUgZmlsdGVyLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBjb3VudERvY3VtZW50cyhmaWx0ZXIsIG9wdGlvbnMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmNvdW50RG9jdW1lbnRzKGZpbHRlciwgb3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9OR09EQl9FUlJPUiwgZS5tZXNzYWdlLCBudWxsLCB0cnVlLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBJbnNlcnRzIGEgc2luZ2xlIGRvY3VtZW50IGludG8gYSBjb2xsZWN0aW9uLlxyXG4gICAgICogQGZ1bmN0aW9uIGluc2VydE9uZSBcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkb2MgLSBUaGUgZG9jdW1lbnQgdG8gaW5zZXJ0LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25hbCBzZXR0aW5ncyBmb3IgdGhlIGNvbW1hbmQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluc2VydE9uZShkb2MsIG9wdGlvbnMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmluc2VydE9uZShkb2MsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PTkdPREJfRVJST1IsIGUubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgSW5zZXJ0cyBhbiBhcnJheSBvZiBkb2N1bWVudHMgaW50byBhIGNvbGxlY3Rpb24uXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5zZXJ0TWFueSBcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkb2NzIC0gVGhlIGRvY3VtZW50cyB0byBpbnNlcnQuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzIGZvciB0aGUgY29tbWFuZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgaW5zZXJ0TWFueShkb2NzLCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5pbnNlcnRNYW55KGRvY3MsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PTkdPREJfRVJST1IsIGUubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgVXBkYXRlIGEgc2luZ2xlIGRvY3VtZW50IGluIGEgY29sbGVjdGlvbi5cclxuICAgICAqIEBmdW5jdGlvbiB1cGRhdGVPbmUgXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZmlsdGVyIC0gVGhlIGZpbHRlciB1c2VkIHRvIHNlbGVjdCB0aGUgZG9jdW1lbnQgdG8gcmVwbGFjZS5cclxuICAgICAqIEBwYXJhbSB7VXBkYXRlRmlsdGVyPFRTY2hlbWE+fERvY3VtZW50W119IHVwZGF0ZSAtIFRoZSBtb2RpZmljYXRpb25zIHRvIGFwcGx5LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25hbCBzZXR0aW5ncyBmb3IgdGhlIGNvbW1hbmQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHVwZGF0ZU9uZShmaWx0ZXIsIHVwZGF0ZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbGxlY3Rpb24udXBkYXRlT25lKGZpbHRlciwgdXBkYXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT05HT0RCX0VSUk9SLCBlLm1lc3NhZ2UsIG51bGwsIHRydWUsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFVwZGF0ZSBtdWx0aXBsZSBkb2N1bWVudHMgaW4gYSBjb2xsZWN0aW9uLlxyXG4gICAgICogQGZ1bmN0aW9uIHVwZGF0ZU1hbnkgXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZmlsdGVyIC0gVGhlIGZpbHRlciB1c2VkIHRvIHNlbGVjdCB0aGUgZG9jdW1lbnQgdG8gdXBkYXRlLlxyXG4gICAgICogQHBhcmFtIHtVcGRhdGVGaWx0ZXI8VFNjaGVtYT58RG9jdW1lbnRbXX0gdXBkYXRlIC0gVGhlIG1vZGlmaWNhdGlvbnMgdG8gYXBwbHkuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzIGZvciB0aGUgY29tbWFuZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgdXBkYXRlTWFueShmaWx0ZXIsIHVwZGF0ZSwgb3B0aW9ucykge1xyXG4gICAgICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbGxlY3Rpb24udXBkYXRlTWFueShmaWx0ZXIsIHVwZGF0ZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9OR09EQl9FUlJPUiwgZS5tZXNzYWdlLCBudWxsLCB0cnVlLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZXBsYWNlIGEgZG9jdW1lbnQgaW4gYSBjb2xsZWN0aW9uIHdpdGggYW5vdGhlciBkb2N1bWVudC5cclxuICAgICAqIEBmdW5jdGlvbiByZXBsYWNlT25lIFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGZpbHRlciAtIFRoZSBmaWx0ZXIgdXNlZCB0byBzZWxlY3QgdGhlIGRvY3VtZW50IHRvIHJlcGxhY2UuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZG9jIC0gVGhlIERvY3VtZW50IHRoYXQgcmVwbGFjZXMgdGhlIG1hdGNoaW5nIGRvY3VtZW50LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25hbCBzZXR0aW5ncyBmb3IgdGhlIGNvbW1hbmQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHJlcGxhY2VPbmUoZmlsdGVyLCBkb2MpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLnJlcGxhY2VPbmUoZmlsdGVyLCBkb2MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PTkdPREJfRVJST1IsIGUubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRGVsZXRlIGEgZG9jdW1lbnQgZnJvbSBhIGNvbGxlY3Rpb24uXHJcbiAgICAgKiBAZnVuY3Rpb24gZGVsZXRlT25lIFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGZpbHRlciAtIFRoZSBmaWx0ZXIgdXNlZCB0byBzZWxlY3QgdGhlIGRvY3VtZW50IHRvIHJlbW92ZS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHRoZSBjb21tYW5kLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBkZWxldGVPbmUoZmlsdGVyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5kZWxldGVPbmUoZmlsdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT05HT0RCX0VSUk9SLCBlLm1lc3NhZ2UsIG51bGwsIHRydWUsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRGVsZXRlIG11bHRpcGxlIGRvY3VtZW50cyBmcm9tIGEgY29sbGVjdGlvbi5cclxuICAgICAqIEBmdW5jdGlvbiBkZWxldGVNYW55IFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGZpbHRlciAtIFRoZSBmaWx0ZXIgdXNlZCB0byBzZWxlY3QgdGhlIGRvY3VtZW50cyB0byByZW1vdmUuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzIGZvciB0aGUgY29tbWFuZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGVsZXRlTWFueShmaWx0ZXIpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmRlbGV0ZU1hbnkoZmlsdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT05HT0RCX0VSUk9SLCBlLm1lc3NhZ2UsIG51bGwsIHRydWUsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEdldHMgbW9kdWxlIG5hbWVcclxuICAgICAqIEBmdW5jdGlvbiBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IENvbnN0YW50IHZhbHVlIFwic2hlbGxcIi5cclxuICAgICAqL1xyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG59Il19
|
|
@@ -6,18 +6,18 @@ var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
|
|
|
6
6
|
|
|
7
7
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
8
8
|
|
|
9
|
-
/*
|
|
10
|
-
* Copyright (C) 2019-present CloudBeat Limited
|
|
11
|
-
*
|
|
12
|
-
* This program is free software: you can redistribute it and/or modify
|
|
13
|
-
* it under the terms of the GNU General Public License as published by
|
|
14
|
-
* the Free Software Foundation, either version 3 of the License, or
|
|
15
|
-
* (at your option) any later version.
|
|
9
|
+
/*
|
|
10
|
+
* Copyright (C) 2019-present CloudBeat Limited
|
|
11
|
+
*
|
|
12
|
+
* This program is free software: you can redistribute it and/or modify
|
|
13
|
+
* it under the terms of the GNU General Public License as published by
|
|
14
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
15
|
+
* (at your option) any later version.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
/**
|
|
19
|
-
* @name pdf
|
|
20
|
-
* @description Provides generic methods for working with PDF files.
|
|
18
|
+
/**
|
|
19
|
+
* @name pdf
|
|
20
|
+
* @description Provides generic methods for working with PDF files.
|
|
21
21
|
*/
|
|
22
22
|
const errHelper = require('../errors/helper');
|
|
23
23
|
|
|
@@ -220,14 +220,14 @@ module.exports = function (options, context, rs, logger, modules, services) {
|
|
|
220
220
|
module.isInitialized = function () {
|
|
221
221
|
return true;
|
|
222
222
|
};
|
|
223
|
-
/**
|
|
224
|
-
* @summary Asserts that text is present in a PDF file
|
|
225
|
-
* @function assert
|
|
226
|
-
* @param {String} pdfFilePath - Relative or absolute path to the PDF file.
|
|
227
|
-
* @param {String} text - Text to assert.
|
|
228
|
-
* @param {Number=} pageNum - Page number.
|
|
229
|
-
* @param {String=} message - Message to throw if assertion fails.
|
|
230
|
-
* @param {Boolean=} reverse - Check also reverse variant of string.
|
|
223
|
+
/**
|
|
224
|
+
* @summary Asserts that text is present in a PDF file
|
|
225
|
+
* @function assert
|
|
226
|
+
* @param {String} pdfFilePath - Relative or absolute path to the PDF file.
|
|
227
|
+
* @param {String} text - Text to assert.
|
|
228
|
+
* @param {Number=} pageNum - Page number.
|
|
229
|
+
* @param {String=} message - Message to throw if assertion fails.
|
|
230
|
+
* @param {Boolean=} reverse - Check also reverse variant of string.
|
|
231
231
|
*/
|
|
232
232
|
|
|
233
233
|
|
|
@@ -259,14 +259,14 @@ module.exports = function (options, context, rs, logger, modules, services) {
|
|
|
259
259
|
throw error;
|
|
260
260
|
}
|
|
261
261
|
};
|
|
262
|
-
/**
|
|
263
|
-
* @summary Asserts that text is not present in a PDF file
|
|
264
|
-
* @function assertNot
|
|
265
|
-
* @param {String} pdfFilePath - Relative or absolute path to the pdf file.
|
|
266
|
-
* @param {String} text - Text to assert.
|
|
267
|
-
* @param {Number=} pageNum - Page number.
|
|
268
|
-
* @param {String=} message - Message to throw if assertion fails.
|
|
269
|
-
* @param {Boolean=} reverse - Check also reverse variant of string.
|
|
262
|
+
/**
|
|
263
|
+
* @summary Asserts that text is not present in a PDF file
|
|
264
|
+
* @function assertNot
|
|
265
|
+
* @param {String} pdfFilePath - Relative or absolute path to the pdf file.
|
|
266
|
+
* @param {String} text - Text to assert.
|
|
267
|
+
* @param {Number=} pageNum - Page number.
|
|
268
|
+
* @param {String=} message - Message to throw if assertion fails.
|
|
269
|
+
* @param {Boolean=} reverse - Check also reverse variant of string.
|
|
270
270
|
*/
|
|
271
271
|
|
|
272
272
|
|
|
@@ -298,14 +298,14 @@ module.exports = function (options, context, rs, logger, modules, services) {
|
|
|
298
298
|
throw error;
|
|
299
299
|
}
|
|
300
300
|
};
|
|
301
|
-
/**
|
|
302
|
-
* @summary Count the number of times specified text is present in a PDF file.
|
|
303
|
-
* @function count
|
|
304
|
-
* @param {String} pdfFilePath - Relative or absolute path to the pdf file.
|
|
305
|
-
* @param {String} text - Text to count.
|
|
306
|
-
* @param {Number=} pageNum - Page number.
|
|
307
|
-
* @param {Boolean=} reverse - Check also reverse variant of string.
|
|
308
|
-
* @return {Number} Number of times the specified text was found.
|
|
301
|
+
/**
|
|
302
|
+
* @summary Count the number of times specified text is present in a PDF file.
|
|
303
|
+
* @function count
|
|
304
|
+
* @param {String} pdfFilePath - Relative or absolute path to the pdf file.
|
|
305
|
+
* @param {String} text - Text to count.
|
|
306
|
+
* @param {Number=} pageNum - Page number.
|
|
307
|
+
* @param {Boolean=} reverse - Check also reverse variant of string.
|
|
308
|
+
* @return {Number} Number of times the specified text was found.
|
|
309
309
|
*/
|
|
310
310
|
|
|
311
311
|
|
|
@@ -325,4 +325,4 @@ module.exports = function (options, context, rs, logger, modules, services) {
|
|
|
325
325
|
|
|
326
326
|
return module;
|
|
327
327
|
};
|
|
328
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1wZGYuanMiXSwibmFtZXMiOlsiZXJySGVscGVyIiwicmVxdWlyZSIsInBhdGgiLCJQREZQYXJzZXIiLCJjb3VudFJvd3MiLCJzZWFyY2hTdHIiLCJyb3dzIiwicmV2ZXJzZSIsInJlc3VsdCIsInN0clJlZ2V4IiwiUmVnRXhwIiwicmV2ZXJzZVN0clJlZ2V4Iiwic3BsaXQiLCJqb2luIiwiT2JqZWN0Iiwia2V5cyIsInNvcnQiLCJ5MSIsInkyIiwicGFyc2VGbG9hdCIsInNvbWUiLCJ5IiwibGluZSIsInJlcGxhY2UiLCJjb3VudCIsIm1hdGNoIiwibGVuZ3RoIiwiY2hlY2tSb3dzIiwiaW5sdWRlcyIsInJldmVyc2VTZWFyY2hTdHIiLCJpbmNsdWRlcyIsImFzc2VydGlvbiIsInBkZkZpbGVQYXRoIiwidGV4dCIsInBhZ2VOdW0iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInBkZlBhcnNlciIsIm9uIiwiZXJyIiwiZXJyb3JNZXNzYWdlIiwicGFyc2VyRXJyb3IiLCJPeEVycm9yIiwiZXJyb3JDb2RlIiwiQVNTRVJUX0VSUk9SIiwicGRmRGF0YSIsInRvdGFsUGFnZXMiLCJmb3JtSW1hZ2UiLCJQYWdlcyIsIlNDUklQVF9FUlJPUiIsInByb2Nlc3NUZXh0IiwiVGV4dHMiLCJpc0ZvdW5kIiwicCIsImxvYWRQREYiLCJ0ZXh0cyIsInQiLCJpdGVtIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiUiIsIlQiLCJwdXNoIiwidG90YWxDb3VudCIsInZhbGlkYXRlU3RyaW5nIiwiYXJnIiwibmFtZSIsInRyaW0iLCJ2YWxpZGF0ZVBhZ2VOdW0iLCJ2YWxpZGF0ZU1lc3NhZ2UiLCJ2YWxpZGF0ZVJldmVyc2UiLCJyZXNvbHZlUGF0aCIsIm9wdGlvbnMiLCJtYXAiLCJpZHgiLCJjaGFyQ29kZUF0IiwicHJvY2VzcyIsImVudiIsIkhPTUUiLCJzbGljZSIsImN3ZCIsInJvb3RQYXRoIiwibW9kdWxlIiwiZXhwb3J0cyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsImlzSW5pdGlhbGl6ZWQiLCJhc3NlcnQiLCJtZXNzYWdlIiwiZXJyb3IiLCJyZXQiLCJtc2ciLCJlIiwiYXNzZXJ0Tm90IiwiUERGX0VSUk9SIl0sIm1hcHBpbmdzIjoiOzs7O0FBY0E7Ozs7QUFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0EsTUFBTUEsU0FBUyxHQUFHQyxPQUFPLENBQUMsa0JBQUQsQ0FBekI7O0FBQ0EsTUFBTUMsSUFBSSxHQUFHRCxPQUFPLENBQUMsTUFBRCxDQUFwQjs7QUFDQSxJQUFJRSxTQUFTLEdBQUdGLE9BQU8sQ0FBQyxvQkFBRCxDQUF2Qjs7QUFFQSxTQUFTRyxTQUFULENBQW1CQyxTQUFuQixFQUE4QkMsSUFBOUIsRUFBb0NDLE9BQXBDLEVBQTZDO0FBQ3pDLE1BQUlDLE1BQU0sR0FBRyxDQUFiO0FBQ0EsTUFBSUMsUUFBUSxHQUFHLElBQUlDLE1BQUosQ0FBV0wsU0FBWCxFQUFzQixHQUF0QixDQUFmO0FBQ0EsTUFBSU0sZUFBZSxHQUFHSixPQUFPLEdBQUcsSUFBSUcsTUFBSixDQUFXTCxTQUFTLENBQUNPLEtBQVYsQ0FBZ0IsRUFBaEIsRUFBb0JMLE9BQXBCLEdBQThCTSxJQUE5QixDQUFtQyxFQUFuQyxDQUFYLEVBQW1ELEdBQW5ELENBQUgsR0FBNkQsSUFBMUY7QUFFQUMsRUFBQUEsTUFBTSxDQUFDQyxJQUFQLENBQVlULElBQVosRUFBa0I7QUFBbEIsR0FDS1UsSUFETCxDQUNVLENBQUNDLEVBQUQsRUFBS0MsRUFBTCxLQUFZQyxVQUFVLENBQUNGLEVBQUQsQ0FBVixHQUFpQkUsVUFBVSxDQUFDRCxFQUFELENBRGpELEVBQ3VEO0FBRHZELEdBRUtFLElBRkwsQ0FFVUMsQ0FBQyxJQUFJO0FBQ1AsUUFBSUMsSUFBSSxHQUFHLENBQUNoQixJQUFJLENBQUNlLENBQUQsQ0FBSixJQUFXLEVBQVosRUFBZ0JS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QUEsTUFBTSxDQUFDMUQsS0FBUCxHQUFlLGdCQUFlUSxXQUFmLEVBQTRCQyxJQUE1QixFQUFrQ0MsT0FBTyxHQUFHLElBQTVDLEVBQWtEM0IsT0FBTyxHQUFHLEtBQTVELEVBQW1FO0FBQzlFeUQsSUFBQUEsY0FBYyxDQUFDaEMsV0FBRCxFQUFjLGFBQWQsQ0FBZDtBQUNBZ0MsSUFBQUEsY0FBYyxDQUFDL0IsSUFBRCxFQUFPLE1BQVAsQ0FBZDtBQUNBbUMsSUFBQUEsZUFBZSxDQUFDbEMsT0FBRCxFQUFVLFNBQVYsQ0FBZjtBQUNBb0MsSUFBQUEsZUFBZSxDQUFDL0QsT0FBRCxFQUFVLFNBQVYsQ0FBZjtBQUVBeUIsSUFBQUEsV0FBVyxHQUFHdUMsV0FBVyxDQUFDdkMsV0FBRCxFQUFjd0MsT0FBZCxDQUF6Qjs7QUFFQSxRQUFJO0FBQ0EsYUFBTyxNQUFNaEQsS0FBSyxDQUFDUSxXQUFELEVBQWNDLElBQWQsRUFBb0JDLE9BQXBCLEVBQTZCM0IsT0FBN0IsQ0FBbEI7QUFDSCxLQUZELENBR0EsT0FBT3dGLENBQVAsRUFBVTtBQUNOLFlBQU0sSUFBSXBELG9CQUFKLENBQVkzQyxTQUFTLENBQUM0QyxTQUFWLENBQW9CcUQsU0FBaEMsRUFBMkNGLENBQUMsQ0FBQ0osT0FBRixJQUFhSSxDQUF4RCxDQUFOO0FBQ0g7QUFDSixHQWREOztBQWdCQSxTQUFPYixNQUFQO0FBQ0gsQ0FqSEQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE5LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICovXG5cbi8qKlxuICogQG5hbWUgcGRmXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgZ2VuZXJpYyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggUERGIGZpbGVzLlxuICovXG5cbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XG5jb25zdCBlcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIFBERlBhcnNlciA9IHJlcXVpcmUoJ3BkZjJqc29uL3BkZnBhcnNlcicpO1xuXG5mdW5jdGlvbiBjb3VudFJvd3Moc2VhcmNoU3RyLCByb3dzLCByZXZlcnNlKSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgdmFyIHN0clJlZ2V4ID0gbmV3IFJlZ0V4cChzZWFyY2hTdHIsICdnJyk7XG4gICAgdmFyIHJldmVyc2VTdHJSZWdleCA9IHJldmVyc2UgPyBuZXcgUmVnRXhwKHNlYXJjaFN0ci5zcGxpdCgnJykucmV2ZXJzZSgpLmpvaW4oJycpLCAnZycpIDogbnVsbDtcblxuICAgIE9iamVjdC5rZXlzKHJvd3MpIC8vID0+IGFycmF5IG9mIHktcG9zaXRpb25zICh0eXBlOiBmbG9hdClcbiAgICAgICAgLnNvcnQoKHkxLCB5MikgPT4gcGFyc2VGbG9hdCh5MSkgLSBwYXJzZUZsb2F0KHkyKSkgLy8gc29ydCBmbG9hdCBwb3NpdGlvbnNcbiAgICAgICAgLnNvbWUoeSA9PiB7XG4gICAgICAgICAgICB2YXIgbGluZSA9IChyb3dzW3ldIHx8IFtdKS5qb2luKCcnKS5yZXBsYWNlKC9cXHMvZywgJycpO1xuXG4gICAgICAgICAgICB2YXIgY291bnQgPSAobGluZS5tYXRjaChzdHJSZWdleCkgfHwgW10pLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMCAmJiByZXZlcnNlU3RyUmVnZXgpIHtcbiAgICAgICAgICAgICAgICBjb3VudCA9IChsaW5lLm1hdGNoKHJldmVyc2VTdHJSZWdleCkgfHwgW10pLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCArPSBjb3VudDtcbiAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBjaGVja1Jvd3Moc2VhcmNoU3RyLCByb3dzLCByZXZlcnNlKSB7XG4gICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xuXG4gICAgT2JqZWN0LmtleXMocm93cykgLy8gPT4gYXJyYXkgb2YgeS1wb3NpdGlvbnMgKHR5cGU6IGZsb2F0KVxuICAgICAgICAuc29ydCgoeTEsIHkyKSA9PiBwYXJzZUZsb2F0KHkxKSAtIHBhcnNlRmxvYXQoeTIpKSAvLyBzb3J0IGZsb2F0IHBvc2l0aW9uc1xuICAgICAgICAuc29tZSh5ID0+IHtcblxuICAgICAgICAgICAgdmFyIGxpbmUgPSAocm93c1t5XSB8fCBbXSkuam9pbignJykucmVwbGFjZSgvXFxzL2csICcnKTtcblxuICAgICAgICAgICAgbGV0IGlubHVkZXM7XG5cbiAgICAgICAgICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZVNlYXJjaFN0ciA9IHNlYXJjaFN0ci5zcGxpdCgnJykucmV2ZXJzZSgpLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgIGlubHVkZXMgPSBsaW5lLmluY2x1ZGVzKHNlYXJjaFN0cikgfHwgbGluZS5pbmNsdWRlcyhyZXZlcnNlU2VhcmNoU3RyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5sdWRlcyA9IGxpbmUuaW5jbHVkZXMoc2VhcmNoU3RyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlubHVkZXMpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGFzc2VydGlvbihwZGZGaWxlUGF0aCwgdGV4dCwgcGFnZU51bSA9IDAsIHJldmVyc2UgPSBmYWxzZSkge1xuICAgIGxldCByb3dzID0ge307IC8vIGluZGV4ZWQgYnkgeS1wb3NpdGlvblxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBjb25zdCBzZWFyY2hTdHIgPSB0ZXh0LnJlcGxhY2UoL1xccy9nLCAnJyk7XG5cbiAgICAgICAgbGV0IHBkZlBhcnNlciA9IG5ldyBQREZQYXJzZXIoKTtcbiAgICAgICAgcGRmUGFyc2VyLm9uKCdwZGZQYXJzZXJfZGF0YUVycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gZXJyLnBhcnNlckVycm9yID8gZXJyLnBhcnNlckVycm9yIDogJ0Vycm9yIHBhcnNpbmcgdGhlIFBERi4nO1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHBkZlBhcnNlci5vbigncGRmUGFyc2VyX2RhdGFSZWFkeScsIGZ1bmN0aW9uIChwZGZEYXRhKSB7XG4gICAgICAgICAgICB2YXIgdG90YWxQYWdlcyA9IHBkZkRhdGEuZm9ybUltYWdlLlBhZ2VzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChwYWdlTnVtICYmIHRvdGFsUGFnZXMgPCBwYWdlTnVtIC0gMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBgSW52YWxpZCBhcmd1bWVudCAtICdwYWdlTnVtJyBpcyAke3BhZ2VOdW19LCBidXQgUERGIGNvbnRhaW5zIG9ubHkgJHt0b3RhbFBhZ2VzfSBwYWdlc2ApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBsb2NhdGUgb24gYSBzcGVjaWZpYyBwYWdlXG4gICAgICAgICAgICBpZiAocGFnZU51bSkge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NUZXh0KHJvd3MsIHBkZkRhdGEuZm9ybUltYWdlLlBhZ2VzW3BhZ2VOdW0tMV0uVGV4dHMpO1xuICAgICAgICAgICAgICAgIGxldCBpc0ZvdW5kID0gY2hlY2tSb3dzKHNlYXJjaFN0ciwgcm93cywgcmV2ZXJzZSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSghIWlzRm91bmQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbG9jYXRlIG9uIGFueSBwYWdlXG4gICAgICAgICAgICBmb3IgKGxldCBwIGluIHBkZkRhdGEuZm9ybUltYWdlLlBhZ2VzKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc1RleHQocm93cywgcGRmRGF0YS5mb3JtSW1hZ2UuUGFnZXNbcF0uVGV4dHMpO1xuICAgICAgICAgICAgICAgIGxldCBpc0ZvdW5kID0gY2hlY2tSb3dzKHNlYXJjaFN0ciwgcm93cywgcmV2ZXJzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzRm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJvd3MgPSB7fTsgLy8gY2xlYXIgcm93cyBmb3IgbmV4dCBwYWdlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgcGRmUGFyc2VyLmxvYWRQREYocGRmRmlsZVBhdGgsIDApO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzVGV4dChyb3dzLCB0ZXh0cykge1xuICAgIGZvciAodmFyIHQgaW4gdGV4dHMpIHtcbiAgICAgICAgdmFyIGl0ZW0gPSB0ZXh0c1t0XTtcbiAgICAgICAgdmFyIHRleHQgPSBkZWNvZGVVUklDb21wb25lbnQoaXRlbS5SWzBdLlQpO1xuICAgICAgICAvLyBhY2N1bXVsYXRlIHRleHQgaXRlbXMgaW50byByb3dzIG9iamVjdCwgcGVyIGxpbmVcbiAgICAgICAgKHJvd3NbaXRlbS55XSA9IHJvd3NbaXRlbS55XSB8fCBbXSkucHVzaCh0ZXh0KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvdW50KHBkZkZpbGVQYXRoLCB0ZXh0LCBwYWdlTnVtID0gMCwgcmV2ZXJzZSA9IGZhbHNlKSB7XG4gICAgbGV0IHJvd3MgPSB7fTsgLy8gaW5kZXhlZCBieSB5LXBvc2l0aW9uXG4gICAgbGV0IHRvdGFsQ291bnQgPSAwO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBjb25zdCBzZWFyY2hTdHIgPSB0ZXh0LnJlcGxhY2UoL1xccy9nLCAnJyk7XG5cbiAgICAgICAgbGV0IHBkZlBhcnNlciA9IG5ldyBQREZQYXJzZXIoKTtcbiAgICAgICAgcGRmUGFyc2VyLm9uKCdwZGZQYXJzZXJfZGF0YUVycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gZXJyLnBhcnNlckVycm9yID8gZXJyLnBhcnNlckVycm9yIDogJ0Vycm9yIHBhcnNpbmcgdGhlIFBERi4nO1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHBkZlBhcnNlci5vbigncGRmUGFyc2VyX2RhdGFSZWFkeScsIGZ1bmN0aW9uIChwZGZEYXRhKSB7XG4gICAgICAgICAgICBsZXQgdG90YWxQYWdlcyA9IHBkZkRhdGEuZm9ybUltYWdlLlBhZ2VzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChwYWdlTnVtICYmIHRvdGFsUGFnZXMgPCBwYWdlTnVtIC0gMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBgSW52YWxpZCBhcmd1bWVudCAtICdwYWdlTnVtJyBpcyAke3BhZ2VOdW19LCBidXQgUERGIGNvbnRhaW5zIG9ubHkgJHt0b3RhbFBhZ2VzfSBwYWdlc2ApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjb3VudCBvbiBhIHNwZWNpZmljIHBhZ2VcbiAgICAgICAgICAgIGlmIChwYWdlTnVtKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc1RleHQocm93cywgcGRmRGF0YS5mb3JtSW1hZ2UuUGFnZXNbcGFnZU51bS0xXS5UZXh0cyk7XG4gICAgICAgICAgICAgICAgbGV0IGNvdW50ID0gY291bnRSb3dzKHNlYXJjaFN0ciwgcm93cywgcmV2ZXJzZSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShjb3VudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjb3VudCBvbiBhbGwgcGFnZXNcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcGRmRGF0YS5mb3JtSW1hZ2UuUGFnZXMpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzVGV4dChyb3dzLCBwZGZEYXRhLmZvcm1JbWFnZS5QYWdlc1twXS5UZXh0cyk7XG4gICAgICAgICAgICAgICAgbGV0IGNvdW50ID0gY291bnRSb3dzKHNlYXJjaFN0ciwgcm93cywgcmV2ZXJzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0b3RhbENvdW50ICs9IGNvdW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByb3dzID0ge307IC8vIGNsZWFyIHJvd3MgZm9yIG5leHQgcGFnZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXNvbHZlKHRvdGFsQ291bnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgcGRmUGFyc2VyLmxvYWRQREYocGRmRmlsZVBhdGgsIDApO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0cmluZyhhcmcsIG5hbWUpIHtcbiAgICBpZiAoYXJnICYmIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnICYmIGFyZy50cmltKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyB0ZXh0IGlzIGNvcnJlY3RcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBzaG91bGQgYmUgYSBub24tZW1wdHkgc3RyaW5nLlwiKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUGFnZU51bShhcmcsIG5hbWUpIHtcbiAgICBpZiAoYXJnID09PSBudWxsIHx8IChhcmcgJiYgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicgJiYgYXJnID4gMCkpIHtcbiAgICAgICAgLy8gcGFnZU51bSBpcyBjb3JyZWN0XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci5cIik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU1lc3NhZ2UoYXJnLCBuYW1lKSB7XG4gICAgaWYgKGFyZyA9PT0gbnVsbCB8fCAoYXJnICYmIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnICYmIGFyZy50cmltKCkubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgLy8gcGFnZU51bSBpcyBjb3JyZWN0XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgbm9uLWVtcHR5IHN0cmluZy5cIik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVJldmVyc2UoYXJnLCBuYW1lKSB7XG4gICAgaWYgKGFyZyA9PT0gbnVsbCB8fCAodHlwZW9mIGFyZyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nKSkge1xuICAgICAgICAvLyBwYWdlTnVtIGlzIGNvcnJlY3RcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBzaG91bGQgYmUgYSBib29sZWFuXCIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVBhdGgocGRmRmlsZVBhdGgsIG9wdGlvbnMpIHtcblxuICAgIHBkZkZpbGVQYXRoID0gcGRmRmlsZVBhdGgudHJpbSgpLnNwbGl0KCcnKS5tYXAoKGl0ZW0sIGlkeCkgPT4ge1xuICAgICAgICByZXR1cm4gIVs4MjA2LCA4Mjk2XS5pbmNsdWRlcyhwZGZGaWxlUGF0aC5jaGFyQ29kZUF0KGlkeCkpID8gaXRlbSA6IG51bGw7XG4gICAgfSkuam9pbignJyk7XG5cbiAgICBpZiAocGRmRmlsZVBhdGhbMF0gPT09ICd+Jykge1xuICAgICAgICAvLyByZXNvbHZlIHBhdGggcmVsYXRpdmUgdG8gaG9tZSBkaXJlY3RvcnlcbiAgICAgICAgcmV0dXJuIHBhdGguam9pbihwcm9jZXNzLmVudi5IT01FLCBwZGZGaWxlUGF0aC5zbGljZSgxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jd2QpIHtcbiAgICAgICAgICAgIGN3ZCA9IG9wdGlvbnMuY3dkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yb290UGF0aCkge1xuICAgICAgICAgICAgY3dkID0gb3B0aW9ucy5yb290UGF0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGN3ZCA9IGN3ZC50cmltKCk7XG5cbiAgICAgICAgcmV0dXJuIHBhdGgucmVzb2x2ZShjd2QsIHBkZkZpbGVQYXRoKTtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcblxuICAgIG1vZHVsZS5pc0luaXRpYWxpemVkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBBc3NlcnRzIHRoYXQgdGV4dCBpcyBwcmVzZW50IGluIGEgUERGIGZpbGVcbiAgICAgKiBAZnVuY3Rpb24gYXNzZXJ0XG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHBkZkZpbGVQYXRoIC0gUmVsYXRpdmUgb3IgYWJzb2x1dGUgcGF0aCB0byB0aGUgUERGIGZpbGUuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgLSBUZXh0IHRvIGFzc2VydC5cbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHBhZ2VOdW0gLSBQYWdlIG51bWJlci5cbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIHRocm93IGlmIGFzc2VydGlvbiBmYWlscy5cbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW49fSByZXZlcnNlIC0gQ2hlY2sgYWxzbyByZXZlcnNlIHZhcmlhbnQgb2Ygc3RyaW5nLlxuICAgICAqL1xuICAgIG1vZHVsZS5hc3NlcnQgPSBhc3luYyBmdW5jdGlvbihwZGZGaWxlUGF0aCwgdGV4dCwgcGFnZU51bSA9IG51bGwsIG1lc3NhZ2UgPSBudWxsLCByZXZlcnNlID0gZmFsc2UpIHtcbiAgICAgICAgdmFsaWRhdGVTdHJpbmcocGRmRmlsZVBhdGgsICdwZGZGaWxlUGF0aCcpO1xuICAgICAgICB2YWxpZGF0ZVN0cmluZyh0ZXh0LCAndGV4dCcpO1xuICAgICAgICB2YWxpZGF0ZVBhZ2VOdW0ocGFnZU51bSwgJ3BhZ2VOdW0nKTtcbiAgICAgICAgdmFsaWRhdGVNZXNzYWdlKG1lc3NhZ2UsICdtZXNzYWdlJyk7XG4gICAgICAgIHZhbGlkYXRlUmV2ZXJzZShyZXZlcnNlLCAncmV2ZXJzZScpO1xuXG4gICAgICAgIHBkZkZpbGVQYXRoID0gcmVzb2x2ZVBhdGgocGRmRmlsZVBhdGgsIG9wdGlvbnMpO1xuXG4gICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IGF3YWl0IGFzc2VydGlvbihwZGZGaWxlUGF0aCwgdGV4dCwgcGFnZU51bSwgcmV2ZXJzZSk7XG5cbiAgICAgICAgICAgIGlmICghcmV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBtc2cgPSBgXCIke3RleHR9XCIgaXMgbm90IGZvdW5kIGluIHRoZSBQREYgJHtwYWdlTnVtID8gJ29uIHBhZ2UgJyArIHBhZ2VOdW0gOiAnJ31gO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBtc2cpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGVycm9yID0gbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIGUubWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgQXNzZXJ0cyB0aGF0IHRleHQgaXMgbm90IHByZXNlbnQgaW4gYSBQREYgZmlsZVxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnROb3RcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGRmRmlsZVBhdGggLSBSZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBwZGYgZmlsZS5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCAtIFRleHQgdG8gYXNzZXJ0LlxuICAgICAqIEBwYXJhbSB7TnVtYmVyPX0gcGFnZU51bSAtIFBhZ2UgbnVtYmVyLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gbWVzc2FnZSAtIE1lc3NhZ2UgdG8gdGhyb3cgaWYgYXNzZXJ0aW9uIGZhaWxzLlxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbj19IHJldmVyc2UgLSBDaGVjayBhbHNvIHJldmVyc2UgdmFyaWFudCBvZiBzdHJpbmcuXG4gICAgICovXG4gICAgbW9kdWxlLmFzc2VydE5vdCA9IGFzeW5jIGZ1bmN0aW9uKHBkZkZpbGVQYXRoLCB0ZXh0LCBwYWdlTnVtID0gbnVsbCwgbWVzc2FnZSA9IG51bGwsIHJldmVyc2UgPSBmYWxzZSkge1xuICAgICAgICB2YWxpZGF0ZVN0cmluZyhwZGZGaWxlUGF0aCwgJ3BkZkZpbGVQYXRoJyk7XG4gICAgICAgIHZhbGlkYXRlU3RyaW5nKHRleHQsICd0ZXh0Jyk7XG4gICAgICAgIHZhbGlkYXRlUGFnZU51bShwYWdlTnVtLCAncGFnZU51bScpO1xuICAgICAgICB2YWxpZGF0ZU1lc3NhZ2UobWVzc2FnZSwgJ21lc3NhZ2UnKTtcbiAgICAgICAgdmFsaWRhdGVSZXZlcnNlKHJldmVyc2UsICdyZXZlcnNlJyk7XG5cbiAgICAgICAgcGRmRmlsZVBhdGggPSByZXNvbHZlUGF0aChwZGZGaWxlUGF0aCwgb3B0aW9ucyk7XG5cbiAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gYXdhaXQgYXNzZXJ0aW9uKHBkZkZpbGVQYXRoLCB0ZXh0LCBwYWdlTnVtLCByZXZlcnNlKTtcblxuICAgICAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgbXNnID0gYFwiJHt0ZXh0fVwiIGlzIGZvdW5kIGluIHRoZSBQREYgJHtwYWdlTnVtID8gJ29uIHBhZ2UgJyArIHBhZ2VOdW0gOiAnJ31gO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9FUlJPUiwgZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgQ291bnQgdGhlIG51bWJlciBvZiB0aW1lcyBzcGVjaWZpZWQgdGV4dCBpcyBwcmVzZW50IGluIGEgUERGIGZpbGUuXG4gICAgICogQGZ1bmN0aW9uIGNvdW50XG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHBkZkZpbGVQYXRoIC0gUmVsYXRpdmUgb3IgYWJzb2x1dGUgcGF0aCB0byB0aGUgcGRmIGZpbGUuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgLSBUZXh0IHRvIGNvdW50LlxuICAgICAqIEBwYXJhbSB7TnVtYmVyPX0gcGFnZU51bSAtIFBhZ2UgbnVtYmVyLlxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbj19IHJldmVyc2UgLSBDaGVjayBhbHNvIHJldmVyc2UgdmFyaWFudCBvZiBzdHJpbmcuXG4gICAgICogQHJldHVybiB7TnVtYmVyfSBOdW1iZXIgb2YgdGltZXMgdGhlIHNwZWNpZmllZCB0ZXh0IHdhcyBmb3VuZC5cbiAgICAgKi9cbiAgICBtb2R1bGUuY291bnQgPSBhc3luYyBmdW5jdGlvbihwZGZGaWxlUGF0aCwgdGV4dCwgcGFnZU51bSA9IG51bGwsIHJldmVyc2UgPSBmYWxzZSkge1xuICAgICAgICB2YWxpZGF0ZVN0cmluZyhwZGZGaWxlUGF0aCwgJ3BkZkZpbGVQYXRoJyk7XG4gICAgICAgIHZhbGlkYXRlU3RyaW5nKHRleHQsICd0ZXh0Jyk7XG4gICAgICAgIHZhbGlkYXRlUGFnZU51bShwYWdlTnVtLCAncGFnZU51bScpO1xuICAgICAgICB2YWxpZGF0ZVJldmVyc2UocmV2ZXJzZSwgJ3JldmVyc2UnKTtcblxuICAgICAgICBwZGZGaWxlUGF0aCA9IHJlc29sdmVQYXRoKHBkZkZpbGVQYXRoLCBvcHRpb25zKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGNvdW50KHBkZkZpbGVQYXRoLCB0ZXh0LCBwYWdlTnVtLCByZXZlcnNlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5QREZfRVJST1IsIGUubWVzc2FnZSB8fCBlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gbW9kdWxlO1xufTtcbiJdfQ==
|
|
328
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1wZGYuanMiXSwibmFtZXMiOlsiZXJySGVscGVyIiwicmVxdWlyZSIsInBhdGgiLCJQREZQYXJzZXIiLCJjb3VudFJvd3MiLCJzZWFyY2hTdHIiLCJyb3dzIiwicmV2ZXJzZSIsInJlc3VsdCIsInN0clJlZ2V4IiwiUmVnRXhwIiwicmV2ZXJzZVN0clJlZ2V4Iiwic3BsaXQiLCJqb2luIiwiT2JqZWN0Iiwia2V5cyIsInNvcnQiLCJ5MSIsInkyIiwicGFyc2VGbG9hdCIsInNvbWUiLCJ5IiwibGluZSIsInJlcGxhY2UiLCJjb3VudCIsIm1hdGNoIiwibGVuZ3RoIiwiY2hlY2tSb3dzIiwiaW5sdWRlcyIsInJldmVyc2VTZWFyY2hTdHIiLCJpbmNsdWRlcyIsImFzc2VydGlvbiIsInBkZkZpbGVQYXRoIiwidGV4dCIsInBhZ2VOdW0iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInBkZlBhcnNlciIsIm9uIiwiZXJyIiwiZXJyb3JNZXNzYWdlIiwicGFyc2VyRXJyb3IiLCJPeEVycm9yIiwiZXJyb3JDb2RlIiwiQVNTRVJUX0VSUk9SIiwicGRmRGF0YSIsInRvdGFsUGFnZXMiLCJmb3JtSW1hZ2UiLCJQYWdlcyIsIlNDUklQVF9FUlJPUiIsInByb2Nlc3NUZXh0IiwiVGV4dHMiLCJpc0ZvdW5kIiwicCIsImxvYWRQREYiLCJ0ZXh0cyIsInQiLCJpdGVtIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiUiIsIlQiLCJwdXNoIiwidG90YWxDb3VudCIsInZhbGlkYXRlU3RyaW5nIiwiYXJnIiwibmFtZSIsInRyaW0iLCJ2YWxpZGF0ZVBhZ2VOdW0iLCJ2YWxpZGF0ZU1lc3NhZ2UiLCJ2YWxpZGF0ZVJldmVyc2UiLCJyZXNvbHZlUGF0aCIsIm9wdGlvbnMiLCJtYXAiLCJpZHgiLCJjaGFyQ29kZUF0IiwicHJvY2VzcyIsImVudiIsIkhPTUUiLCJzbGljZSIsImN3ZCIsInJvb3RQYXRoIiwibW9kdWxlIiwiZXhwb3J0cyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsImlzSW5pdGlhbGl6ZWQiLCJhc3NlcnQiLCJtZXNzYWdlIiwiZXJyb3IiLCJyZXQiLCJtc2ciLCJlIiwiYXNzZXJ0Tm90IiwiUERGX0VSUk9SIl0sIm1hcHBpbmdzIjoiOzs7O0FBY0E7Ozs7QUFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0EsTUFBTUEsU0FBUyxHQUFHQyxPQUFPLENBQUMsa0JBQUQsQ0FBekI7O0FBQ0EsTUFBTUMsSUFBSSxHQUFHRCxPQUFPLENBQUMsTUFBRCxDQUFwQjs7QUFDQSxJQUFJRSxTQUFTLEdBQUdGLE9BQU8sQ0FBQyxvQkFBRCxDQUF2Qjs7QUFFQSxTQUFTRyxTQUFULENBQW1CQyxTQUFuQixFQUE4QkMsSUFBOUIsRUFBb0NDLE9BQXBDLEVBQTZDO0FBQ3pDLE1BQUlDLE1BQU0sR0FBRyxDQUFiO0FBQ0EsTUFBSUMsUUFBUSxHQUFHLElBQUlDLE1BQUosQ0FBV0wsU0FBWCxFQUFzQixHQUF0QixDQUFmO0FBQ0EsTUFBSU0sZUFBZSxHQUFHSixPQUFPLEdBQUcsSUFBSUcsTUFBSixDQUFXTCxTQUFTLENBQUNPLEtBQVYsQ0FBZ0IsRUFBaEIsRUFBb0JMLE9BQXBCLEdBQThCTSxJQUE5QixDQUFtQyxFQUFuQyxDQUFYLEVBQW1ELEdBQW5ELENBQUgsR0FBNkQsSUFBMUY7QUFFQUMsRUFBQUEsTUFBTSxDQUFDQyxJQUFQLENBQVlULElBQVosRUFBa0I7QUFBbEIsR0FDS1UsSUFETCxDQUNVLENBQUNDLEVBQUQsRUFBS0MsRUFBTCxLQUFZQyxVQUFVLENBQUNGLEVBQUQsQ0FBVixHQUFpQkUsVUFBVSxDQUFDRCxFQUFELENBRGpELEVBQ3VEO0FBRHZELEdBRUtFLElBRkwsQ0FFVUMsQ0FBQyxJQUFJO0FBQ1AsUUFBSUMsSUFBSSxHQUFHLENBQUNoQixJQUFJLENBQUNlLENBQUQsQ0FBSixJQUFXLEVBQVosRUFBZ0JS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QUEsTUFBTSxDQUFDMUQsS0FBUCxHQUFlLGdCQUFlUSxXQUFmLEVBQTRCQyxJQUE1QixFQUFrQ0MsT0FBTyxHQUFHLElBQTVDLEVBQWtEM0IsT0FBTyxHQUFHLEtBQTVELEVBQW1FO0FBQzlFeUQsSUFBQUEsY0FBYyxDQUFDaEMsV0FBRCxFQUFjLGFBQWQsQ0FBZDtBQUNBZ0MsSUFBQUEsY0FBYyxDQUFDL0IsSUFBRCxFQUFPLE1BQVAsQ0FBZDtBQUNBbUMsSUFBQUEsZUFBZSxDQUFDbEMsT0FBRCxFQUFVLFNBQVYsQ0FBZjtBQUNBb0MsSUFBQUEsZUFBZSxDQUFDL0QsT0FBRCxFQUFVLFNBQVYsQ0FBZjtBQUVBeUIsSUFBQUEsV0FBVyxHQUFHdUMsV0FBVyxDQUFDdkMsV0FBRCxFQUFjd0MsT0FBZCxDQUF6Qjs7QUFFQSxRQUFJO0FBQ0EsYUFBTyxNQUFNaEQsS0FBSyxDQUFDUSxXQUFELEVBQWNDLElBQWQsRUFBb0JDLE9BQXBCLEVBQTZCM0IsT0FBN0IsQ0FBbEI7QUFDSCxLQUZELENBR0EsT0FBT3dGLENBQVAsRUFBVTtBQUNOLFlBQU0sSUFBSXBELG9CQUFKLENBQVkzQyxTQUFTLENBQUM0QyxTQUFWLENBQW9CcUQsU0FBaEMsRUFBMkNGLENBQUMsQ0FBQ0osT0FBRixJQUFhSSxDQUF4RCxDQUFOO0FBQ0g7QUFDSixHQWREOztBQWdCQSxTQUFPYixNQUFQO0FBQ0gsQ0FqSEQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTktcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBwZGZcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIGdlbmVyaWMgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIFBERiBmaWxlcy5cclxuICovXHJcblxyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5jb25zdCBlcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XHJcbnZhciBQREZQYXJzZXIgPSByZXF1aXJlKCdwZGYyanNvbi9wZGZwYXJzZXInKTtcclxuXHJcbmZ1bmN0aW9uIGNvdW50Um93cyhzZWFyY2hTdHIsIHJvd3MsIHJldmVyc2UpIHtcclxuICAgIGxldCByZXN1bHQgPSAwO1xyXG4gICAgdmFyIHN0clJlZ2V4ID0gbmV3IFJlZ0V4cChzZWFyY2hTdHIsICdnJyk7XHJcbiAgICB2YXIgcmV2ZXJzZVN0clJlZ2V4ID0gcmV2ZXJzZSA/IG5ldyBSZWdFeHAoc2VhcmNoU3RyLnNwbGl0KCcnKS5yZXZlcnNlKCkuam9pbignJyksICdnJykgOiBudWxsO1xyXG5cclxuICAgIE9iamVjdC5rZXlzKHJvd3MpIC8vID0+IGFycmF5IG9mIHktcG9zaXRpb25zICh0eXBlOiBmbG9hdClcclxuICAgICAgICAuc29ydCgoeTEsIHkyKSA9PiBwYXJzZUZsb2F0KHkxKSAtIHBhcnNlRmxvYXQoeTIpKSAvLyBzb3J0IGZsb2F0IHBvc2l0aW9uc1xyXG4gICAgICAgIC5zb21lKHkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgbGluZSA9IChyb3dzW3ldIHx8IFtdKS5qb2luKCcnKS5yZXBsYWNlKC9cXHMvZywgJycpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGNvdW50ID0gKGxpbmUubWF0Y2goc3RyUmVnZXgpIHx8IFtdKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMCAmJiByZXZlcnNlU3RyUmVnZXgpIHtcclxuICAgICAgICAgICAgICAgIGNvdW50ID0gKGxpbmUubWF0Y2gocmV2ZXJzZVN0clJlZ2V4KSB8fCBbXSkubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBjb3VudDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjaGVja1Jvd3Moc2VhcmNoU3RyLCByb3dzLCByZXZlcnNlKSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcblxyXG4gICAgT2JqZWN0LmtleXMocm93cykgLy8gPT4gYXJyYXkgb2YgeS1wb3NpdGlvbnMgKHR5cGU6IGZsb2F0KVxyXG4gICAgICAgIC5zb3J0KCh5MSwgeTIpID0+IHBhcnNlRmxvYXQoeTEpIC0gcGFyc2VGbG9hdCh5MikpIC8vIHNvcnQgZmxvYXQgcG9zaXRpb25zXHJcbiAgICAgICAgLnNvbWUoeSA9PiB7XHJcblxyXG4gICAgICAgICAgICB2YXIgbGluZSA9IChyb3dzW3ldIHx8IFtdKS5qb2luKCcnKS5yZXBsYWNlKC9cXHMvZywgJycpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGlubHVkZXM7XHJcblxyXG4gICAgICAgICAgICBpZiAocmV2ZXJzZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZVNlYXJjaFN0ciA9IHNlYXJjaFN0ci5zcGxpdCgnJykucmV2ZXJzZSgpLmpvaW4oJycpO1xyXG4gICAgICAgICAgICAgICAgaW5sdWRlcyA9IGxpbmUuaW5jbHVkZXMoc2VhcmNoU3RyKSB8fCBsaW5lLmluY2x1ZGVzKHJldmVyc2VTZWFyY2hTdHIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaW5sdWRlcyA9IGxpbmUuaW5jbHVkZXMoc2VhcmNoU3RyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGlubHVkZXMpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFzc2VydGlvbihwZGZGaWxlUGF0aCwgdGV4dCwgcGFnZU51bSA9IDAsIHJldmVyc2UgPSBmYWxzZSkge1xyXG4gICAgbGV0IHJvd3MgPSB7fTsgLy8gaW5kZXhlZCBieSB5LXBvc2l0aW9uXHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGNvbnN0IHNlYXJjaFN0ciA9IHRleHQucmVwbGFjZSgvXFxzL2csICcnKTtcclxuXHJcbiAgICAgICAgbGV0IHBkZlBhcnNlciA9IG5ldyBQREZQYXJzZXIoKTtcclxuICAgICAgICBwZGZQYXJzZXIub24oJ3BkZlBhcnNlcl9kYXRhRXJyb3InLCBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGVyci5wYXJzZXJFcnJvciA/IGVyci5wYXJzZXJFcnJvciA6ICdFcnJvciBwYXJzaW5nIHRoZSBQREYuJztcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHBkZlBhcnNlci5vbigncGRmUGFyc2VyX2RhdGFSZWFkeScsIGZ1bmN0aW9uIChwZGZEYXRhKSB7XHJcbiAgICAgICAgICAgIHZhciB0b3RhbFBhZ2VzID0gcGRmRGF0YS5mb3JtSW1hZ2UuUGFnZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAocGFnZU51bSAmJiB0b3RhbFBhZ2VzIDwgcGFnZU51bSAtIDEpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBgSW52YWxpZCBhcmd1bWVudCAtICdwYWdlTnVtJyBpcyAke3BhZ2VOdW19LCBidXQgUERGIGNvbnRhaW5zIG9ubHkgJHt0b3RhbFBhZ2VzfSBwYWdlc2ApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBsb2NhdGUgb24gYSBzcGVjaWZpYyBwYWdlXHJcbiAgICAgICAgICAgIGlmIChwYWdlTnVtKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzVGV4dChyb3dzLCBwZGZEYXRhLmZvcm1JbWFnZS5QYWdlc1twYWdlTnVtLTFdLlRleHRzKTtcclxuICAgICAgICAgICAgICAgIGxldCBpc0ZvdW5kID0gY2hlY2tSb3dzKHNlYXJjaFN0ciwgcm93cywgcmV2ZXJzZSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCEhaXNGb3VuZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGxvY2F0ZSBvbiBhbnkgcGFnZVxyXG4gICAgICAgICAgICBmb3IgKGxldCBwIGluIHBkZkRhdGEuZm9ybUltYWdlLlBhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzVGV4dChyb3dzLCBwZGZEYXRhLmZvcm1JbWFnZS5QYWdlc1twXS5UZXh0cyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXNGb3VuZCA9IGNoZWNrUm93cyhzZWFyY2hTdHIsIHJvd3MsIHJldmVyc2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcm93cyA9IHt9OyAvLyBjbGVhciByb3dzIGZvciBuZXh0IHBhZ2VcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcGRmUGFyc2VyLmxvYWRQREYocGRmRmlsZVBhdGgsIDApO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByb2Nlc3NUZXh0KHJvd3MsIHRleHRzKSB7XHJcbiAgICBmb3IgKHZhciB0IGluIHRleHRzKSB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSB0ZXh0c1t0XTtcclxuICAgICAgICB2YXIgdGV4dCA9IGRlY29kZVVSSUNvbXBvbmVudChpdGVtLlJbMF0uVCk7XHJcbiAgICAgICAgLy8gYWNjdW11bGF0ZSB0ZXh0IGl0ZW1zIGludG8gcm93cyBvYmplY3QsIHBlciBsaW5lXHJcbiAgICAgICAgKHJvd3NbaXRlbS55XSA9IHJvd3NbaXRlbS55XSB8fCBbXSkucHVzaCh0ZXh0KTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY291bnQocGRmRmlsZVBhdGgsIHRleHQsIHBhZ2VOdW0gPSAwLCByZXZlcnNlID0gZmFsc2UpIHtcclxuICAgIGxldCByb3dzID0ge307IC8vIGluZGV4ZWQgYnkgeS1wb3NpdGlvblxyXG4gICAgbGV0IHRvdGFsQ291bnQgPSAwO1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBjb25zdCBzZWFyY2hTdHIgPSB0ZXh0LnJlcGxhY2UoL1xccy9nLCAnJyk7XHJcblxyXG4gICAgICAgIGxldCBwZGZQYXJzZXIgPSBuZXcgUERGUGFyc2VyKCk7XHJcbiAgICAgICAgcGRmUGFyc2VyLm9uKCdwZGZQYXJzZXJfZGF0YUVycm9yJywgZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBlcnIucGFyc2VyRXJyb3IgPyBlcnIucGFyc2VyRXJyb3IgOiAnRXJyb3IgcGFyc2luZyB0aGUgUERGLic7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBwZGZQYXJzZXIub24oJ3BkZlBhcnNlcl9kYXRhUmVhZHknLCBmdW5jdGlvbiAocGRmRGF0YSkge1xyXG4gICAgICAgICAgICBsZXQgdG90YWxQYWdlcyA9IHBkZkRhdGEuZm9ybUltYWdlLlBhZ2VzLmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKHBhZ2VOdW0gJiYgdG90YWxQYWdlcyA8IHBhZ2VOdW0gLSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgYEludmFsaWQgYXJndW1lbnQgLSAncGFnZU51bScgaXMgJHtwYWdlTnVtfSwgYnV0IFBERiBjb250YWlucyBvbmx5ICR7dG90YWxQYWdlc30gcGFnZXNgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gY291bnQgb24gYSBzcGVjaWZpYyBwYWdlXHJcbiAgICAgICAgICAgIGlmIChwYWdlTnVtKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzVGV4dChyb3dzLCBwZGZEYXRhLmZvcm1JbWFnZS5QYWdlc1twYWdlTnVtLTFdLlRleHRzKTtcclxuICAgICAgICAgICAgICAgIGxldCBjb3VudCA9IGNvdW50Um93cyhzZWFyY2hTdHIsIHJvd3MsIHJldmVyc2UpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShjb3VudCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGNvdW50IG9uIGFsbCBwYWdlc1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHBkZkRhdGEuZm9ybUltYWdlLlBhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzVGV4dChyb3dzLCBwZGZEYXRhLmZvcm1JbWFnZS5QYWdlc1twXS5UZXh0cyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgY291bnQgPSBjb3VudFJvd3Moc2VhcmNoU3RyLCByb3dzLCByZXZlcnNlKTtcclxuICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbENvdW50ICs9IGNvdW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcm93cyA9IHt9OyAvLyBjbGVhciByb3dzIGZvciBuZXh0IHBhZ2VcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZSh0b3RhbENvdW50KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBwZGZQYXJzZXIubG9hZFBERihwZGZGaWxlUGF0aCwgMCk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gdmFsaWRhdGVTdHJpbmcoYXJnLCBuYW1lKSB7XHJcbiAgICBpZiAoYXJnICYmIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnICYmIGFyZy50cmltKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIC8vIHRleHQgaXMgY29ycmVjdFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBzaG91bGQgYmUgYSBub24tZW1wdHkgc3RyaW5nLlwiKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdmFsaWRhdGVQYWdlTnVtKGFyZywgbmFtZSkge1xyXG4gICAgaWYgKGFyZyA9PT0gbnVsbCB8fCAoYXJnICYmIHR5cGVvZiBhcmcgPT09ICdudW1iZXInICYmIGFyZyA+IDApKSB7XHJcbiAgICAgICAgLy8gcGFnZU51bSBpcyBjb3JyZWN0XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIHNob3VsZCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuXCIpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB2YWxpZGF0ZU1lc3NhZ2UoYXJnLCBuYW1lKSB7XHJcbiAgICBpZiAoYXJnID09PSBudWxsIHx8IChhcmcgJiYgdHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgJiYgYXJnLnRyaW0oKS5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgIC8vIHBhZ2VOdW0gaXMgY29ycmVjdFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBzaG91bGQgYmUgYSBub24tZW1wdHkgc3RyaW5nLlwiKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdmFsaWRhdGVSZXZlcnNlKGFyZywgbmFtZSkge1xyXG4gICAgaWYgKGFyZyA9PT0gbnVsbCB8fCAodHlwZW9mIGFyZyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nKSkge1xyXG4gICAgICAgIC8vIHBhZ2VOdW0gaXMgY29ycmVjdFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBzaG91bGQgYmUgYSBib29sZWFuXCIpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZXNvbHZlUGF0aChwZGZGaWxlUGF0aCwgb3B0aW9ucykge1xyXG5cclxuICAgIHBkZkZpbGVQYXRoID0gcGRmRmlsZVBhdGgudHJpbSgpLnNwbGl0KCcnKS5tYXAoKGl0ZW0sIGlkeCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAhWzgyMDYsIDgyOTZdLmluY2x1ZGVzKHBkZkZpbGVQYXRoLmNoYXJDb2RlQXQoaWR4KSkgPyBpdGVtIDogbnVsbDtcclxuICAgIH0pLmpvaW4oJycpO1xyXG5cclxuICAgIGlmIChwZGZGaWxlUGF0aFswXSA9PT0gJ34nKSB7XHJcbiAgICAgICAgLy8gcmVzb2x2ZSBwYXRoIHJlbGF0aXZlIHRvIGhvbWUgZGlyZWN0b3J5XHJcbiAgICAgICAgcmV0dXJuIHBhdGguam9pbihwcm9jZXNzLmVudi5IT01FLCBwZGZGaWxlUGF0aC5zbGljZSgxKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xyXG5cclxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmN3ZCkge1xyXG4gICAgICAgICAgICBjd2QgPSBvcHRpb25zLmN3ZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucm9vdFBhdGgpIHtcclxuICAgICAgICAgICAgY3dkID0gb3B0aW9ucy5yb290UGF0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGN3ZCA9IGN3ZC50cmltKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUoY3dkLCBwZGZGaWxlUGF0aCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuXHJcbiAgICBtb2R1bGUuaXNJbml0aWFsaXplZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEFzc2VydHMgdGhhdCB0ZXh0IGlzIHByZXNlbnQgaW4gYSBQREYgZmlsZVxyXG4gICAgICogQGZ1bmN0aW9uIGFzc2VydFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHBkZkZpbGVQYXRoIC0gUmVsYXRpdmUgb3IgYWJzb2x1dGUgcGF0aCB0byB0aGUgUERGIGZpbGUuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCAtIFRleHQgdG8gYXNzZXJ0LlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSBwYWdlTnVtIC0gUGFnZSBudW1iZXIuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIHRocm93IGlmIGFzc2VydGlvbiBmYWlscy5cclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbj19IHJldmVyc2UgLSBDaGVjayBhbHNvIHJldmVyc2UgdmFyaWFudCBvZiBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5hc3NlcnQgPSBhc3luYyBmdW5jdGlvbihwZGZGaWxlUGF0aCwgdGV4dCwgcGFnZU51bSA9IG51bGwsIG1lc3NhZ2UgPSBudWxsLCByZXZlcnNlID0gZmFsc2UpIHtcclxuICAgICAgICB2YWxpZGF0ZVN0cmluZyhwZGZGaWxlUGF0aCwgJ3BkZkZpbGVQYXRoJyk7XHJcbiAgICAgICAgdmFsaWRhdGVTdHJpbmcodGV4dCwgJ3RleHQnKTtcclxuICAgICAgICB2YWxpZGF0ZVBhZ2VOdW0ocGFnZU51bSwgJ3BhZ2VOdW0nKTtcclxuICAgICAgICB2YWxpZGF0ZU1lc3NhZ2UobWVzc2FnZSwgJ21lc3NhZ2UnKTtcclxuICAgICAgICB2YWxpZGF0ZVJldmVyc2UocmV2ZXJzZSwgJ3JldmVyc2UnKTtcclxuXHJcbiAgICAgICAgcGRmRmlsZVBhdGggPSByZXNvbHZlUGF0aChwZGZGaWxlUGF0aCwgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIGxldCBlcnJvcjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXQgPSBhd2FpdCBhc3NlcnRpb24ocGRmRmlsZVBhdGgsIHRleHQsIHBhZ2VOdW0sIHJldmVyc2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFyZXQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBtc2cgPSBgXCIke3RleHR9XCIgaXMgbm90IGZvdW5kIGluIHRoZSBQREYgJHtwYWdlTnVtID8gJ29uIHBhZ2UgJyArIHBhZ2VOdW0gOiAnJ31gO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIG1zZyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBlcnJvciA9IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQXNzZXJ0cyB0aGF0IHRleHQgaXMgbm90IHByZXNlbnQgaW4gYSBQREYgZmlsZVxyXG4gICAgICogQGZ1bmN0aW9uIGFzc2VydE5vdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHBkZkZpbGVQYXRoIC0gUmVsYXRpdmUgb3IgYWJzb2x1dGUgcGF0aCB0byB0aGUgcGRmIGZpbGUuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCAtIFRleHQgdG8gYXNzZXJ0LlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSBwYWdlTnVtIC0gUGFnZSBudW1iZXIuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIHRocm93IGlmIGFzc2VydGlvbiBmYWlscy5cclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbj19IHJldmVyc2UgLSBDaGVjayBhbHNvIHJldmVyc2UgdmFyaWFudCBvZiBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5hc3NlcnROb3QgPSBhc3luYyBmdW5jdGlvbihwZGZGaWxlUGF0aCwgdGV4dCwgcGFnZU51bSA9IG51bGwsIG1lc3NhZ2UgPSBudWxsLCByZXZlcnNlID0gZmFsc2UpIHtcclxuICAgICAgICB2YWxpZGF0ZVN0cmluZyhwZGZGaWxlUGF0aCwgJ3BkZkZpbGVQYXRoJyk7XHJcbiAgICAgICAgdmFsaWRhdGVTdHJpbmcodGV4dCwgJ3RleHQnKTtcclxuICAgICAgICB2YWxpZGF0ZVBhZ2VOdW0ocGFnZU51bSwgJ3BhZ2VOdW0nKTtcclxuICAgICAgICB2YWxpZGF0ZU1lc3NhZ2UobWVzc2FnZSwgJ21lc3NhZ2UnKTtcclxuICAgICAgICB2YWxpZGF0ZVJldmVyc2UocmV2ZXJzZSwgJ3JldmVyc2UnKTtcclxuXHJcbiAgICAgICAgcGRmRmlsZVBhdGggPSByZXNvbHZlUGF0aChwZGZGaWxlUGF0aCwgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIGxldCBlcnJvcjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXQgPSBhd2FpdCBhc3NlcnRpb24ocGRmRmlsZVBhdGgsIHRleHQsIHBhZ2VOdW0sIHJldmVyc2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJldCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9FUlJPUiwgbWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG1zZyA9IGBcIiR7dGV4dH1cIiBpcyBmb3VuZCBpbiB0aGUgUERGICR7cGFnZU51bSA/ICdvbiBwYWdlICcgKyBwYWdlTnVtIDogJyd9YDtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBtc2cpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBDb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHNwZWNpZmllZCB0ZXh0IGlzIHByZXNlbnQgaW4gYSBQREYgZmlsZS5cclxuICAgICAqIEBmdW5jdGlvbiBjb3VudFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHBkZkZpbGVQYXRoIC0gUmVsYXRpdmUgb3IgYWJzb2x1dGUgcGF0aCB0byB0aGUgcGRmIGZpbGUuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCAtIFRleHQgdG8gY291bnQuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHBhZ2VOdW0gLSBQYWdlIG51bWJlci5cclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbj19IHJldmVyc2UgLSBDaGVjayBhbHNvIHJldmVyc2UgdmFyaWFudCBvZiBzdHJpbmcuXHJcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IE51bWJlciBvZiB0aW1lcyB0aGUgc3BlY2lmaWVkIHRleHQgd2FzIGZvdW5kLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuY291bnQgPSBhc3luYyBmdW5jdGlvbihwZGZGaWxlUGF0aCwgdGV4dCwgcGFnZU51bSA9IG51bGwsIHJldmVyc2UgPSBmYWxzZSkge1xyXG4gICAgICAgIHZhbGlkYXRlU3RyaW5nKHBkZkZpbGVQYXRoLCAncGRmRmlsZVBhdGgnKTtcclxuICAgICAgICB2YWxpZGF0ZVN0cmluZyh0ZXh0LCAndGV4dCcpO1xyXG4gICAgICAgIHZhbGlkYXRlUGFnZU51bShwYWdlTnVtLCAncGFnZU51bScpO1xyXG4gICAgICAgIHZhbGlkYXRlUmV2ZXJzZShyZXZlcnNlLCAncmV2ZXJzZScpO1xyXG5cclxuICAgICAgICBwZGZGaWxlUGF0aCA9IHJlc29sdmVQYXRoKHBkZkZpbGVQYXRoLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGNvdW50KHBkZkZpbGVQYXRoLCB0ZXh0LCBwYWdlTnVtLCByZXZlcnNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5QREZfRVJST1IsIGUubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBtb2R1bGU7XHJcbn07XHJcbiJdfQ==
|