@rabbitio/ui-kit 1.0.0-beta.11 → 1.0.0-beta.111
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/.env.example +1 -0
- package/.gitlab-ci.yml +29 -0
- package/.husky/commit-msg +19 -0
- package/.husky/pre-push +1 -0
- package/README.md +14 -4
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/clover.xml +17666 -0
- package/coverage/coverage-final.json +119 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +1001 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/rabbit-ui-kit/index.html +116 -0
- package/coverage/rabbit-ui-kit/index.js.html +88 -0
- package/coverage/rabbit-ui-kit/src/common-apis/adapters/analyticsAdapters/googleAnalyticsAdapter.js.html +151 -0
- package/coverage/rabbit-ui-kit/src/common-apis/adapters/analyticsAdapters/index.html +146 -0
- package/coverage/rabbit-ui-kit/src/common-apis/adapters/analyticsAdapters/metrikaAdapter.js.html +172 -0
- package/coverage/rabbit-ui-kit/src/common-apis/adapters/analyticsAdapters/mixpanelAdapter.js.html +199 -0
- package/coverage/rabbit-ui-kit/src/common-apis/adapters/axiosAdapter.js.html +190 -0
- package/coverage/rabbit-ui-kit/src/common-apis/adapters/index.html +131 -0
- package/coverage/rabbit-ui-kit/src/common-apis/adapters/qrUtils.js.html +139 -0
- package/coverage/rabbit-ui-kit/src/common-apis/external-apis/apiGroups.js.html +253 -0
- package/coverage/rabbit-ui-kit/src/common-apis/external-apis/emailAPI.js.html +133 -0
- package/coverage/rabbit-ui-kit/src/common-apis/external-apis/index.html +146 -0
- package/coverage/rabbit-ui-kit/src/common-apis/external-apis/ipAddressProviders.js.html +391 -0
- package/coverage/rabbit-ui-kit/src/common-apis/globalConstants.jsx.html +94 -0
- package/coverage/rabbit-ui-kit/src/common-apis/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/common-apis/models/blockchain.js.html +115 -0
- package/coverage/rabbit-ui-kit/src/common-apis/models/coin.js.html +829 -0
- package/coverage/rabbit-ui-kit/src/common-apis/models/index.html +146 -0
- package/coverage/rabbit-ui-kit/src/common-apis/models/protocol.js.html +100 -0
- package/coverage/rabbit-ui-kit/src/common-apis/services/fiatCurrenciesService.js.html +544 -0
- package/coverage/rabbit-ui-kit/src/common-apis/services/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/common-apis/utils/amountUtils.js.html +1234 -0
- package/coverage/rabbit-ui-kit/src/common-apis/utils/cache.js.html +811 -0
- package/coverage/rabbit-ui-kit/src/common-apis/utils/errorUtils.js.html +211 -0
- package/coverage/rabbit-ui-kit/src/common-apis/utils/index.html +191 -0
- package/coverage/rabbit-ui-kit/src/common-apis/utils/logging/index.html +131 -0
- package/coverage/rabbit-ui-kit/src/common-apis/utils/logging/logger.js.html +211 -0
- package/coverage/rabbit-ui-kit/src/common-apis/utils/logging/logsStorage.js.html +268 -0
- package/coverage/rabbit-ui-kit/src/common-apis/utils/postponeExecution.js.html +118 -0
- package/coverage/rabbit-ui-kit/src/common-apis/utils/rabbitTicker.js.html +157 -0
- package/coverage/rabbit-ui-kit/src/common-apis/utils/safeStringify.js.html +235 -0
- package/coverage/rabbit-ui-kit/src/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/index.js.html +382 -0
- package/coverage/rabbit-ui-kit/src/robust-api-caller/cacheAndConcurrentRequestsResolver.js.html +1660 -0
- package/coverage/rabbit-ui-kit/src/robust-api-caller/cachedRobustExternalApiCallerService.js.html +526 -0
- package/coverage/rabbit-ui-kit/src/robust-api-caller/cancelProcessing.js.html +172 -0
- package/coverage/rabbit-ui-kit/src/robust-api-caller/concurrentCalculationsMetadataHolder.js.html +310 -0
- package/coverage/rabbit-ui-kit/src/robust-api-caller/externalApiProvider.js.html +553 -0
- package/coverage/rabbit-ui-kit/src/robust-api-caller/externalServicesStatsCollector.js.html +319 -0
- package/coverage/rabbit-ui-kit/src/robust-api-caller/index.html +206 -0
- package/coverage/rabbit-ui-kit/src/robust-api-caller/robustExternalAPICallerService.js.html +997 -0
- package/coverage/rabbit-ui-kit/src/swaps-lib/external-apis/exolixSwapProvider.js.html +1891 -0
- package/coverage/rabbit-ui-kit/src/swaps-lib/external-apis/goexmeSwapProvider.js.html +2077 -0
- package/coverage/rabbit-ui-kit/src/swaps-lib/external-apis/index.html +191 -0
- package/coverage/rabbit-ui-kit/src/swaps-lib/external-apis/letsExchangeSwapProvider.js.html +1633 -0
- package/coverage/rabbit-ui-kit/src/swaps-lib/external-apis/swapProvider.js.html +1825 -0
- package/coverage/rabbit-ui-kit/src/swaps-lib/external-apis/swapspaceSwapProvider.js.html +1924 -0
- package/coverage/rabbit-ui-kit/src/swaps-lib/external-apis/utils.js.html +163 -0
- package/coverage/rabbit-ui-kit/src/swaps-lib/models/baseSwapCreationInfo.js.html +319 -0
- package/coverage/rabbit-ui-kit/src/swaps-lib/models/existingSwap.js.html +514 -0
- package/coverage/rabbit-ui-kit/src/swaps-lib/models/existingSwapWithFiatData.js.html +529 -0
- package/coverage/rabbit-ui-kit/src/swaps-lib/models/index.html +176 -0
- package/coverage/rabbit-ui-kit/src/swaps-lib/models/partner.js.html +166 -0
- package/coverage/rabbit-ui-kit/src/swaps-lib/models/swapProviderCoinInfo.js.html +331 -0
- package/coverage/rabbit-ui-kit/src/swaps-lib/services/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/swaps-lib/services/publicSwapService.js.html +1570 -0
- package/coverage/rabbit-ui-kit/src/swaps-lib/utils/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/swaps-lib/utils/swapUtils.js.html +706 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/assets/wrappedImages/arrowIcon.jsx.html +124 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/assets/wrappedImages/arrowTosca.jsx.html +127 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/assets/wrappedImages/arrowWhite.jsx.html +127 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/assets/wrappedImages/darkRectangle.jsx.html +106 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/assets/wrappedImages/determinedError.jsx.html +439 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/assets/wrappedImages/failedValidationIcon.jsx.html +202 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/assets/wrappedImages/index.html +281 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/assets/wrappedImages/infoIcon.jsx.html +133 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/assets/wrappedImages/messageIcon.jsx.html +346 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/assets/wrappedImages/noticeQuestionIcon.jsx.html +247 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/assets/wrappedImages/successfulValidationIcon.jsx.html +163 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/assets/wrappedImages/supportDialogImage.jsx.html +268 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/assets/wrappedImages/walletIcon.jsx.html +151 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/AssetIcon/AssetIcon.jsx.html +256 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/AssetIcon/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/AssetSelection/AssetSelection.jsx.html +289 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/AssetSelection/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/BackgroundTitle/BackgroundTitle.jsx.html +187 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/BackgroundTitle/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/InformationMessage/InformationMessage.jsx.html +238 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/InformationMessage/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/Input/Input.jsx.html +634 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/Input/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/LoadingDots/LoadingDots.jsx.html +196 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/LoadingDots/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/NoticeIcon/NoticeIcon.jsx.html +277 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/NoticeIcon/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/QrCode/QrCode.jsx.html +199 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/QrCode/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/RateSelector/RateSelector.jsx.html +175 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/RateSelector/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/SupportChat/SupportChat.jsx.html +217 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/SupportChat/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/Textarea/Textarea.jsx.html +529 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/Textarea/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/TitleBox/TitleBox.jsx.html +508 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/TitleBox/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/Tooltip/Tooltip.jsx.html +316 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/Tooltip/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/TwoLinesOfText/LinesOfText.jsx.html +313 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/TwoLinesOfText/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/Validation/Validation.jsx.html +202 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/Validation/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/buttons/Button/Button.jsx.html +733 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/buttons/Button/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/buttons/Close/Close.jsx.html +259 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/buttons/Close/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/buttons/LinkButton/LinkButton.jsx.html +433 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/buttons/LinkButton/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/buttons/RadioButtonWithText/RadioButtonWithText.jsx.html +415 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/atoms/buttons/RadioButtonWithText/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/molecules/AmountInput/AmountInput.jsx.html +1429 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/molecules/AmountInput/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/molecules/CoinPicker/CoinPicker.jsx.html +1474 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/molecules/CoinPicker/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/molecules/ColoredNotice/ColoredNotice.jsx.html +241 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/molecules/ColoredNotice/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/molecules/LineWithIconLink/LineWithIconLink.jsx.html +190 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/molecules/LineWithIconLink/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/molecules/LogoCarousel/LogoCarousel.jsx.html +307 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/molecules/LogoCarousel/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/molecules/SearchableCoinsList/SearchableCoinsList.jsx.html +427 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/molecules/SearchableCoinsList/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/molecules/TitledLineWithIconLink/TitledLineWithIconLink.jsx.html +181 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/molecules/TitledLineWithIconLink/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/organisms/CoinPickerDialogStep/CoinPickerDialogStep.jsx.html +283 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/organisms/CoinPickerDialogStep/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/organisms/Dialog/Dialog.jsx.html +1567 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/organisms/Dialog/DialogButtons/DialogButtons.jsx.html +481 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/organisms/Dialog/DialogButtons/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/organisms/Dialog/DialogStep/DialogStep.jsx.html +1747 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/organisms/Dialog/DialogStep/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/organisms/Dialog/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/organisms/SwapForm/SwapForm.jsx.html +4228 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/organisms/SwapForm/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/organisms/WaitlistSubscription/WaitlistSubscription.jsx.html +559 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/organisms/WaitlistSubscription/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/templates/DeterminedErrorDialogStep/DeterminedErrorDialogStep.jsx.html +316 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/components/templates/DeterminedErrorDialogStep/index.html +116 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/hooks/index.html +146 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/hooks/useCallHandlingErrors.js.html +166 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/hooks/useIsHydrated.js.html +121 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/hooks/useReferredState.js.html +157 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/utils/index.html +176 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/utils/inputValueProviders.js.html +235 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/utils/searchCoins.js.html +259 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/utils/textUtils.js.html +139 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/utils/uiUtils.js.html +121 -0
- package/coverage/rabbit-ui-kit/src/ui-kit/utils/urlQueryUtils.js.html +271 -0
- package/coverage/rabbit-ui-kit/stories/atoms/BackgroundTitle.stories.jsx.html +202 -0
- package/coverage/rabbit-ui-kit/stories/atoms/LinesOfText.stories.jsx.html +283 -0
- package/coverage/rabbit-ui-kit/stories/atoms/LoadingDots.stories.jsx.html +226 -0
- package/coverage/rabbit-ui-kit/stories/atoms/QrCode.stories.jsx.html +175 -0
- package/coverage/rabbit-ui-kit/stories/atoms/RateSelector.stories.jsx.html +136 -0
- package/coverage/rabbit-ui-kit/stories/atoms/Validation.stories.jsx.html +178 -0
- package/coverage/rabbit-ui-kit/stories/atoms/buttons/Button.stories.jsx.html +883 -0
- package/coverage/rabbit-ui-kit/stories/atoms/buttons/Close.stories.jsx.html +211 -0
- package/coverage/rabbit-ui-kit/stories/atoms/buttons/LinkButton.stories.jsx.html +301 -0
- package/coverage/rabbit-ui-kit/stories/atoms/buttons/index.html +146 -0
- package/coverage/rabbit-ui-kit/stories/atoms/index.html +191 -0
- package/coverage/rabbit-ui-kit/stories/molecules/AmountInput.stories.jsx.html +289 -0
- package/coverage/rabbit-ui-kit/stories/molecules/CoinPicker.stories.jsx.html +322 -0
- package/coverage/rabbit-ui-kit/stories/molecules/ColoredNotice.stories.jsx.html +178 -0
- package/coverage/rabbit-ui-kit/stories/molecules/LineWithIconLink.stories.jsx.html +154 -0
- package/coverage/rabbit-ui-kit/stories/molecules/LogoCarousel.stories.jsx.html +235 -0
- package/coverage/rabbit-ui-kit/stories/molecules/TitledLineWithIconLink.stories.jsx.html +160 -0
- package/coverage/rabbit-ui-kit/stories/molecules/index.html +191 -0
- package/coverage/rabbit-ui-kit/stories/organisms/Dialog/Dialog.stories.jsx.html +523 -0
- package/coverage/rabbit-ui-kit/stories/organisms/Dialog/DialogButtons/DialogButtons.stories.jsx.html +328 -0
- package/coverage/rabbit-ui-kit/stories/organisms/Dialog/DialogButtons/index.html +116 -0
- package/coverage/rabbit-ui-kit/stories/organisms/Dialog/DialogStep/DialogStep.stories.jsx.html +337 -0
- package/coverage/rabbit-ui-kit/stories/organisms/Dialog/DialogStep/index.html +116 -0
- package/coverage/rabbit-ui-kit/stories/organisms/Dialog/index.html +116 -0
- package/coverage/rabbit-ui-kit/stories/organisms/WaitlistSubscription.stories.jsx.html +151 -0
- package/coverage/rabbit-ui-kit/stories/organisms/index.html +116 -0
- package/coverage/rabbit-ui-kit/stories/stubs/coins.jsx.html +6880 -0
- package/coverage/rabbit-ui-kit/stories/stubs/exampleContent.jsx.html +145 -0
- package/coverage/rabbit-ui-kit/stories/stubs/index.html +131 -0
- package/coverage/rabbit-ui-kit/stories/templates/DeterminedErrorDialogStep.stories.jsx.html +190 -0
- package/coverage/rabbit-ui-kit/stories/templates/index.html +116 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +196 -0
- package/dist/global.css +197 -0
- package/dist/global.css.map +1 -0
- package/dist/index.cjs +13003 -1052
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +2350 -8491
- package/dist/index.css.map +1 -1
- package/dist/index.modern.js +9951 -847
- package/dist/index.modern.js.map +1 -1
- package/dist/index.module.js +12930 -1066
- package/dist/index.module.js.map +1 -1
- package/dist/index.umd.js +12994 -1055
- package/dist/index.umd.js.map +1 -1
- package/package.json +35 -9
- package/raw +1000 -0
- package/src/common-apis/adapters/analyticsAdapters/googleAnalyticsAdapter.js +22 -0
- package/src/common-apis/adapters/analyticsAdapters/metrikaAdapter.js +29 -0
- package/src/common-apis/adapters/analyticsAdapters/mixpanelAdapter.js +38 -0
- package/src/common-apis/adapters/axiosAdapter.js +35 -0
- package/src/common-apis/adapters/qrUtils.js +18 -0
- package/src/common-apis/external-apis/apiGroups.js +56 -0
- package/src/common-apis/external-apis/emailAPI.js +16 -0
- package/src/common-apis/external-apis/ipAddressProviders.js +102 -0
- package/src/common-apis/globalConstants.jsx +3 -0
- package/src/{common → common-apis}/models/coin.js +98 -7
- package/src/{common → common-apis/services}/fiatCurrenciesService.js +4 -12
- package/src/common-apis/tests/integration/external-apis/ipAddressProviders/getClientIpAddress.test.js +18 -0
- package/src/common-apis/tests/units/utils/amountUtils/composeRateText.test.js +152 -0
- package/src/{common → common-apis/utils}/amountUtils.js +100 -140
- package/src/{common → common-apis}/utils/cache.js +15 -41
- package/src/{common → common-apis/utils}/errorUtils.js +15 -0
- package/src/{common → common-apis}/utils/logging/logger.js +7 -13
- package/src/common-apis/utils/postponeExecution.js +11 -0
- package/src/common-apis/utils/rabbitTicker.js +24 -0
- package/src/index.js +90 -14
- package/src/robust-api-caller/cacheAndConcurrentRequestsResolver.js +525 -0
- package/src/robust-api-caller/cachedRobustExternalApiCallerService.js +147 -0
- package/src/robust-api-caller/cancelProcessing.js +29 -0
- package/src/robust-api-caller/concurrentCalculationsMetadataHolder.js +75 -0
- package/src/robust-api-caller/externalApiProvider.js +156 -0
- package/src/robust-api-caller/externalServicesStatsCollector.js +78 -0
- package/src/robust-api-caller/robustExternalAPICallerService.js +304 -0
- package/src/robust-api-caller/tests/robustExternalAPICallerService/robustExternalAPICallerService/callExternalAPI/_performCallAttempt.test.js +533 -0
- package/src/robust-api-caller/tests/robustExternalAPICallerService/robustExternalAPICallerService/callExternalAPI/callExternalAPI.test.js +532 -0
- package/src/robust-api-caller/tests/robustExternalAPICallerService/robustExternalAPICallerService/constructor.test.js +19 -0
- package/src/swaps-lib/external-apis/exolixSwapProvider.js +602 -0
- package/src/swaps-lib/external-apis/goexmeSwapProvider.js +664 -0
- package/src/swaps-lib/external-apis/letsExchangeSwapProvider.js +516 -0
- package/src/swaps-lib/external-apis/swapProvider.js +435 -24
- package/src/swaps-lib/external-apis/swapspaceSwapProvider.js +613 -0
- package/src/swaps-lib/external-apis/utils.js +26 -0
- package/src/swaps-lib/models/baseSwapCreationInfo.js +78 -0
- package/src/swaps-lib/models/existingSwap.js +101 -16
- package/src/swaps-lib/models/existingSwapWithFiatData.js +148 -0
- package/src/swaps-lib/models/partner.js +27 -0
- package/src/swaps-lib/models/swapProviderCoinInfo.js +82 -0
- package/src/swaps-lib/services/publicSwapService.js +495 -0
- package/src/swaps-lib/test/external-apis/exolixSwapProvider/_fetchSupportedCurrenciesIfNeeded.test.js +34 -0
- package/src/swaps-lib/test/external-apis/exolixSwapProvider/createSwap.test.js +1043 -0
- package/src/swaps-lib/test/external-apis/exolixSwapProvider/getSwapInfo.test.js +611 -0
- package/src/swaps-lib/test/external-apis/goexmeSwapProvider/_fetchSupportedCurrenciesIfNeeded.test.js +148 -0
- package/src/swaps-lib/test/external-apis/goexmeSwapProvider/createSwap.test.js +115 -0
- package/src/swaps-lib/test/external-apis/goexmeSwapProvider/getSwapInfo.test.js +149 -0
- package/src/swaps-lib/test/external-apis/goexmeSwapProvider/integration/PairSupport.int.test.js +97 -0
- package/src/swaps-lib/test/external-apis/goexmeSwapProvider/integration/_fetchSupportedCurrenciesIfNeeded.int.test.js +171 -0
- package/src/swaps-lib/test/external-apis/goexmeSwapProvider/integration/createSwap.int.test.js +239 -0
- package/src/swaps-lib/test/external-apis/goexmeSwapProvider/integration/getSwapInfo.int.test.js +141 -0
- package/src/swaps-lib/test/external-apis/swapProvider/getAllSupportedCurrencies.test.js +63 -0
- package/src/swaps-lib/test/external-apis/swapProvider/getDepositCurrencies.test.js +73 -0
- package/src/swaps-lib/test/external-apis/swapProvider/getWithdrawalCurrencies.test.js +102 -0
- package/src/swaps-lib/test/external-apis/swapProvider/removeProtocolNameFromCoinName.test.js +152 -0
- package/src/swaps-lib/test/external-apis/swapspaceSwapProvider/_fetchSupportedCurrenciesIfNeeded.test.js +536 -0
- package/src/swaps-lib/test/external-apis/swapspaceSwapProvider/createSwap.test.js +1214 -0
- package/src/swaps-lib/test/external-apis/swapspaceSwapProvider/getSwapInfo.test.js +1743 -0
- package/src/swaps-lib/test/utils/swapUtils/safeHandleRequestsLimitExceeding.test.js +80 -0
- package/src/swaps-lib/utils/swapUtils.js +207 -0
- package/{styles → src/ui-kit/assets/styles}/_functions.scss +5 -0
- package/{styles → src/ui-kit/assets/styles}/_mixins.scss +2 -2
- package/{styles → src/ui-kit/assets/styles}/_placeholder.scss +3 -3
- package/{styles → src/ui-kit/assets/styles}/_variables.scss +17 -15
- package/src/ui-kit/assets/styles/fonts/NunitoSans-Bold.ttf +0 -0
- package/src/ui-kit/assets/styles/fonts/NunitoSans-ExtraBold.ttf +0 -0
- package/src/ui-kit/assets/styles/fonts/NunitoSans-Light.ttf +0 -0
- package/src/ui-kit/assets/styles/fonts/NunitoSans-Regular.ttf +0 -0
- package/src/ui-kit/assets/styles/fonts/NunitoSans-SemiBold.ttf +0 -0
- package/src/ui-kit/assets/styles/global.scss +171 -0
- package/src/ui-kit/assets/styles/index.scss +10 -0
- package/src/ui-kit/assets/wrappedImages/arrowIcon.jsx +13 -0
- package/src/ui-kit/assets/wrappedImages/arrowTosca.jsx +14 -0
- package/src/ui-kit/assets/wrappedImages/arrowWhite.jsx +14 -0
- package/src/ui-kit/assets/wrappedImages/darkRectangle.jsx +7 -0
- package/src/ui-kit/assets/wrappedImages/determinedError.jsx +118 -0
- package/src/ui-kit/assets/wrappedImages/failedValidationIcon.jsx +39 -0
- package/src/ui-kit/assets/wrappedImages/infoIcon.jsx +16 -0
- package/src/ui-kit/assets/wrappedImages/messageIcon.jsx +87 -0
- package/src/ui-kit/assets/wrappedImages/noticeQuestionIcon.jsx +54 -0
- package/src/ui-kit/assets/wrappedImages/successfulValidationIcon.jsx +26 -0
- package/src/ui-kit/assets/wrappedImages/supportDialogImage.jsx +61 -0
- package/src/ui-kit/assets/wrappedImages/walletIcon.jsx +22 -0
- package/src/{components → ui-kit/components}/atoms/AssetIcon/AssetIcon.jsx +16 -14
- package/src/{components → ui-kit/components}/atoms/AssetIcon/asset-icon.module.scss +1 -1
- package/src/ui-kit/components/atoms/AssetSelection/AssetSelection.jsx +68 -0
- package/src/ui-kit/components/atoms/AssetSelection/asset-selection.module.scss +56 -0
- package/src/ui-kit/components/atoms/BackgroundTitle/BackgroundTitle.jsx +34 -0
- package/src/ui-kit/components/atoms/BackgroundTitle/background-title.module.scss +52 -0
- package/src/ui-kit/components/atoms/InformationMessage/InformationMessage.jsx +51 -0
- package/src/ui-kit/components/atoms/InformationMessage/information-message.module.scss +38 -0
- package/src/ui-kit/components/atoms/Input/Input.jsx +183 -0
- package/src/ui-kit/components/atoms/Input/input.module.scss +107 -0
- package/src/{components → ui-kit/components}/atoms/LoadingDots/LoadingDots.jsx +8 -28
- package/src/{components → ui-kit/components}/atoms/LoadingDots/LoadingDots.module.scss +3 -2
- package/src/ui-kit/components/atoms/NoticeIcon/NoticeIcon.jsx +64 -0
- package/src/ui-kit/components/atoms/NoticeIcon/notice-icon.module.scss +14 -0
- package/src/ui-kit/components/atoms/QrCode/QrCode.jsx +38 -0
- package/src/ui-kit/components/atoms/QrCode/qr-code.module.scss +8 -0
- package/src/ui-kit/components/atoms/RateSelector/RateSelector.jsx +30 -0
- package/src/ui-kit/components/atoms/RateSelector/rate-selector.module.scss +47 -0
- package/src/{components → ui-kit/components}/atoms/SupportChat/SupportChat.jsx +5 -1
- package/src/ui-kit/components/atoms/Textarea/Textarea.jsx +148 -0
- package/src/ui-kit/components/atoms/Textarea/textarea.module.scss +71 -0
- package/src/ui-kit/components/atoms/TitleBox/TitleBox.jsx +141 -0
- package/src/ui-kit/components/atoms/TitleBox/title-box.module.scss +32 -0
- package/src/ui-kit/components/atoms/Tooltip/Tooltip.jsx +77 -0
- package/src/ui-kit/components/atoms/Tooltip/tooltip.module.scss +237 -0
- package/src/ui-kit/components/atoms/TwoLinesOfText/LinesOfText.jsx +76 -0
- package/src/ui-kit/components/atoms/TwoLinesOfText/lines-of-text.module.scss +65 -0
- package/src/ui-kit/components/atoms/Validation/Validation.jsx +39 -0
- package/src/ui-kit/components/atoms/Validation/validation.module.scss +19 -0
- package/src/{components → ui-kit/components}/atoms/buttons/Button/Button.jsx +26 -45
- package/src/{components → ui-kit/components}/atoms/buttons/Button/Button.module.scss +1 -1
- package/src/ui-kit/components/atoms/buttons/Close/Close.jsx +58 -0
- package/src/ui-kit/components/atoms/buttons/Close/close.module.scss +75 -0
- package/src/ui-kit/components/atoms/buttons/LinkButton/LinkButton.jsx +116 -0
- package/src/ui-kit/components/atoms/buttons/LinkButton/link-button.module.scss +53 -0
- package/src/ui-kit/components/atoms/buttons/RadioButtonWithText/RadioButtonWithText.jsx +110 -0
- package/src/ui-kit/components/atoms/buttons/RadioButtonWithText/radio-button-with-text.module.scss +86 -0
- package/src/ui-kit/components/molecules/AmountInput/AmountInput.jsx +448 -0
- package/src/ui-kit/components/molecules/AmountInput/amount-input.module.scss +233 -0
- package/src/ui-kit/components/molecules/CoinPicker/CoinPicker.jsx +463 -0
- package/src/ui-kit/components/molecules/CoinPicker/coin-picker.module.scss +207 -0
- package/src/ui-kit/components/molecules/ColoredNotice/ColoredNotice.jsx +52 -0
- package/src/ui-kit/components/molecules/ColoredNotice/colored-notice.module.scss +36 -0
- package/src/ui-kit/components/molecules/LineWithIconLink/LineWithIconLink.jsx +35 -0
- package/src/ui-kit/components/molecules/LineWithIconLink/line-with-icon-link.module.scss +25 -0
- package/src/ui-kit/components/molecules/LogoCarousel/LogoCarousel.jsx +74 -0
- package/src/ui-kit/components/molecules/LogoCarousel/logo-carousel.module.scss +106 -0
- package/src/ui-kit/components/molecules/SearchableCoinsList/SearchableCoinsList.jsx +114 -0
- package/src/ui-kit/components/molecules/TitledLineWithIconLink/TitledLineWithIconLink.jsx +32 -0
- package/src/ui-kit/components/organisms/CoinPickerDialogStep/CoinPickerDialogStep.jsx +66 -0
- package/src/ui-kit/components/organisms/Dialog/Dialog.jsx +494 -0
- package/src/ui-kit/components/organisms/Dialog/DialogButtons/DialogButtons.jsx +132 -0
- package/src/ui-kit/components/organisms/Dialog/DialogButtons/dialog-buttons.module.scss +25 -0
- package/src/ui-kit/components/organisms/Dialog/DialogStep/DialogStep.jsx +554 -0
- package/src/ui-kit/components/organisms/Dialog/DialogStep/dialog-step.module.scss +382 -0
- package/src/ui-kit/components/organisms/Dialog/dialog.module.scss +226 -0
- package/src/ui-kit/components/organisms/SwapForm/SwapForm.jsx +1381 -0
- package/src/ui-kit/components/organisms/SwapForm/swap-form.module.scss +134 -0
- package/src/ui-kit/components/organisms/WaitlistSubscription/WaitlistSubscription.jsx +158 -0
- package/src/ui-kit/components/templates/DeterminedErrorDialogStep/DeterminedErrorDialogStep.jsx +77 -0
- package/src/ui-kit/hooks/useCallHandlingErrors.js +27 -0
- package/src/ui-kit/hooks/useIsHydrated.js +12 -0
- package/src/ui-kit/hooks/useReferredState.js +24 -0
- package/src/ui-kit/tests/utils/inputValueProviders/provideFormatOfFloatValueByInputString.test.js +146 -0
- package/src/ui-kit/tests/utils/urlQueryUtils/getQueryParameterValues.test.js +65 -0
- package/src/ui-kit/tests/utils/urlQueryUtils/saveQueryParameterAndValues.test.js +104 -0
- package/src/ui-kit/utils/inputValueProviders.js +50 -0
- package/src/ui-kit/utils/searchCoins.js +58 -0
- package/src/ui-kit/utils/textUtils.js +18 -0
- package/src/ui-kit/utils/uiUtils.js +12 -0
- package/src/ui-kit/utils/urlQueryUtils.js +62 -0
- package/stories/font.scss +40 -0
- package/stories/stubs/coins.jsx +2266 -0
- package/stories/stubs/exampleContent.jsx +20 -0
- package/styles/_global-classes.scss +0 -433
- package/styles/fonts/NunitoSans-Bold.ttf +0 -0
- package/styles/fonts/NunitoSans-ExtraBold.ttf +0 -0
- package/styles/fonts/NunitoSans-Light.ttf +0 -0
- package/styles/fonts/NunitoSans-Regular.ttf +0 -0
- package/styles/fonts/NunitoSans-SemiBold.ttf +0 -0
- package/styles/global-styles-index.scss +0 -74
- package/styles/index.scss +0 -33
- /package/src/{common → common-apis}/models/blockchain.js +0 -0
- /package/src/{common → common-apis}/models/protocol.js +0 -0
- /package/src/{common → common-apis}/utils/logging/logsStorage.js +0 -0
- /package/src/{common → common-apis}/utils/safeStringify.js +0 -0
- /package/{styles → src/ui-kit/assets/styles}/colors/_light-colors.scss +0 -0
- /package/{styles → src/ui-kit/assets/styles}/colors/_solid-colors.scss +0 -0
- /package/{styles → src/ui-kit/assets/styles}/size/_margin-size.scss +0 -0
- /package/{styles → src/ui-kit/assets/styles}/size/_padding-size.scss +0 -0
|
@@ -0,0 +1,2077 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for rabbit-ui-kit/src/swaps-lib/external-apis/goexmeSwapProvider.js</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../../../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../../../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../../../../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../../../../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../../../../index.html">All files</a> / <a href="index.html">rabbit-ui-kit/src/swaps-lib/external-apis</a> goexmeSwapProvider.js</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">96.08% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>638/664</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">80.7% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>138/171</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">89.47% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>17/19</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">96.08% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>638/664</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input oninput="onInput()" type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
+
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
+
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
+
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
+
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
+
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
+
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
+
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
+
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
+
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
+
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
+
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
+
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
+
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
+
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
+
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
+
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
+
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
+
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
+
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
+
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
+
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
+
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
+
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
+
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
+
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
+
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
+
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
+
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
+
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
+
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
+
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
+
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
+
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
+
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
+
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
+
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
+
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
+
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
+
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
+
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
+
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
+
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
+
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
+
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
+
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
+
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
+
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
+
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
+
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
+
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
+
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
+
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
+
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
+
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
+
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
+
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
+
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
+
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
+
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
+
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
+
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
+
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
+
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
+
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
+
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
+
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
+
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
+
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
+
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
+
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
+
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
+
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
+
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
+
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
+
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
+
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
+
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
+
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
+
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
+
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
+
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
+
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
+
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
+
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
+
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
+
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
+
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
+
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
+
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
+
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
+
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
+
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
+
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
+
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
+
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
+
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
+
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
+
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
+
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
+
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
+
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
+
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
+
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
+
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
+
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
+
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
+
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
+
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
+
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
+
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
+
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
+
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
+
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
+
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
+
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
+
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
+
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
+
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
+
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
+
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
+
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
+
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
+
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
+
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
+
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
+
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
+
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
+
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
+
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
+
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
+
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
+
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
+
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
+
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
+
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
+
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
+
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
+
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
+
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
+
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
+
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
+
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
+
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
+
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
+
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
+
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
+
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
+
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
+
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
+
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
+
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
+
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
+
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
+
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
+
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
+
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
+
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
+
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
+
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
+
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
+
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
+
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
+
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
+
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
+
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
+
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
+
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
+
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
+
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
+
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
+
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
+
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
+
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
+
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
+
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
+
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
+
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
+
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
+
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
+
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
+
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
+
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
+
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
+
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
+
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
+
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
+
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
+
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
+
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
+
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
+
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
+
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
+
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
+
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
+
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
+
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
+
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
+
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
+
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
+
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
+
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
+
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
+
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
+
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
+
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
+
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
+
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
+
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
+
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
+
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
+
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
+
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
+
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
+
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
+
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
+
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
+
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
+
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
+
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
+
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
+
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
+
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
+
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
+
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
+
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
+
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
+
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
+
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
+
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
+
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
+
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
+
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
+
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
+
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
+
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
+
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
+
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
+
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
+
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
+
<a name='L316'></a><a href='#L316'>316</a>
|
|
382
|
+
<a name='L317'></a><a href='#L317'>317</a>
|
|
383
|
+
<a name='L318'></a><a href='#L318'>318</a>
|
|
384
|
+
<a name='L319'></a><a href='#L319'>319</a>
|
|
385
|
+
<a name='L320'></a><a href='#L320'>320</a>
|
|
386
|
+
<a name='L321'></a><a href='#L321'>321</a>
|
|
387
|
+
<a name='L322'></a><a href='#L322'>322</a>
|
|
388
|
+
<a name='L323'></a><a href='#L323'>323</a>
|
|
389
|
+
<a name='L324'></a><a href='#L324'>324</a>
|
|
390
|
+
<a name='L325'></a><a href='#L325'>325</a>
|
|
391
|
+
<a name='L326'></a><a href='#L326'>326</a>
|
|
392
|
+
<a name='L327'></a><a href='#L327'>327</a>
|
|
393
|
+
<a name='L328'></a><a href='#L328'>328</a>
|
|
394
|
+
<a name='L329'></a><a href='#L329'>329</a>
|
|
395
|
+
<a name='L330'></a><a href='#L330'>330</a>
|
|
396
|
+
<a name='L331'></a><a href='#L331'>331</a>
|
|
397
|
+
<a name='L332'></a><a href='#L332'>332</a>
|
|
398
|
+
<a name='L333'></a><a href='#L333'>333</a>
|
|
399
|
+
<a name='L334'></a><a href='#L334'>334</a>
|
|
400
|
+
<a name='L335'></a><a href='#L335'>335</a>
|
|
401
|
+
<a name='L336'></a><a href='#L336'>336</a>
|
|
402
|
+
<a name='L337'></a><a href='#L337'>337</a>
|
|
403
|
+
<a name='L338'></a><a href='#L338'>338</a>
|
|
404
|
+
<a name='L339'></a><a href='#L339'>339</a>
|
|
405
|
+
<a name='L340'></a><a href='#L340'>340</a>
|
|
406
|
+
<a name='L341'></a><a href='#L341'>341</a>
|
|
407
|
+
<a name='L342'></a><a href='#L342'>342</a>
|
|
408
|
+
<a name='L343'></a><a href='#L343'>343</a>
|
|
409
|
+
<a name='L344'></a><a href='#L344'>344</a>
|
|
410
|
+
<a name='L345'></a><a href='#L345'>345</a>
|
|
411
|
+
<a name='L346'></a><a href='#L346'>346</a>
|
|
412
|
+
<a name='L347'></a><a href='#L347'>347</a>
|
|
413
|
+
<a name='L348'></a><a href='#L348'>348</a>
|
|
414
|
+
<a name='L349'></a><a href='#L349'>349</a>
|
|
415
|
+
<a name='L350'></a><a href='#L350'>350</a>
|
|
416
|
+
<a name='L351'></a><a href='#L351'>351</a>
|
|
417
|
+
<a name='L352'></a><a href='#L352'>352</a>
|
|
418
|
+
<a name='L353'></a><a href='#L353'>353</a>
|
|
419
|
+
<a name='L354'></a><a href='#L354'>354</a>
|
|
420
|
+
<a name='L355'></a><a href='#L355'>355</a>
|
|
421
|
+
<a name='L356'></a><a href='#L356'>356</a>
|
|
422
|
+
<a name='L357'></a><a href='#L357'>357</a>
|
|
423
|
+
<a name='L358'></a><a href='#L358'>358</a>
|
|
424
|
+
<a name='L359'></a><a href='#L359'>359</a>
|
|
425
|
+
<a name='L360'></a><a href='#L360'>360</a>
|
|
426
|
+
<a name='L361'></a><a href='#L361'>361</a>
|
|
427
|
+
<a name='L362'></a><a href='#L362'>362</a>
|
|
428
|
+
<a name='L363'></a><a href='#L363'>363</a>
|
|
429
|
+
<a name='L364'></a><a href='#L364'>364</a>
|
|
430
|
+
<a name='L365'></a><a href='#L365'>365</a>
|
|
431
|
+
<a name='L366'></a><a href='#L366'>366</a>
|
|
432
|
+
<a name='L367'></a><a href='#L367'>367</a>
|
|
433
|
+
<a name='L368'></a><a href='#L368'>368</a>
|
|
434
|
+
<a name='L369'></a><a href='#L369'>369</a>
|
|
435
|
+
<a name='L370'></a><a href='#L370'>370</a>
|
|
436
|
+
<a name='L371'></a><a href='#L371'>371</a>
|
|
437
|
+
<a name='L372'></a><a href='#L372'>372</a>
|
|
438
|
+
<a name='L373'></a><a href='#L373'>373</a>
|
|
439
|
+
<a name='L374'></a><a href='#L374'>374</a>
|
|
440
|
+
<a name='L375'></a><a href='#L375'>375</a>
|
|
441
|
+
<a name='L376'></a><a href='#L376'>376</a>
|
|
442
|
+
<a name='L377'></a><a href='#L377'>377</a>
|
|
443
|
+
<a name='L378'></a><a href='#L378'>378</a>
|
|
444
|
+
<a name='L379'></a><a href='#L379'>379</a>
|
|
445
|
+
<a name='L380'></a><a href='#L380'>380</a>
|
|
446
|
+
<a name='L381'></a><a href='#L381'>381</a>
|
|
447
|
+
<a name='L382'></a><a href='#L382'>382</a>
|
|
448
|
+
<a name='L383'></a><a href='#L383'>383</a>
|
|
449
|
+
<a name='L384'></a><a href='#L384'>384</a>
|
|
450
|
+
<a name='L385'></a><a href='#L385'>385</a>
|
|
451
|
+
<a name='L386'></a><a href='#L386'>386</a>
|
|
452
|
+
<a name='L387'></a><a href='#L387'>387</a>
|
|
453
|
+
<a name='L388'></a><a href='#L388'>388</a>
|
|
454
|
+
<a name='L389'></a><a href='#L389'>389</a>
|
|
455
|
+
<a name='L390'></a><a href='#L390'>390</a>
|
|
456
|
+
<a name='L391'></a><a href='#L391'>391</a>
|
|
457
|
+
<a name='L392'></a><a href='#L392'>392</a>
|
|
458
|
+
<a name='L393'></a><a href='#L393'>393</a>
|
|
459
|
+
<a name='L394'></a><a href='#L394'>394</a>
|
|
460
|
+
<a name='L395'></a><a href='#L395'>395</a>
|
|
461
|
+
<a name='L396'></a><a href='#L396'>396</a>
|
|
462
|
+
<a name='L397'></a><a href='#L397'>397</a>
|
|
463
|
+
<a name='L398'></a><a href='#L398'>398</a>
|
|
464
|
+
<a name='L399'></a><a href='#L399'>399</a>
|
|
465
|
+
<a name='L400'></a><a href='#L400'>400</a>
|
|
466
|
+
<a name='L401'></a><a href='#L401'>401</a>
|
|
467
|
+
<a name='L402'></a><a href='#L402'>402</a>
|
|
468
|
+
<a name='L403'></a><a href='#L403'>403</a>
|
|
469
|
+
<a name='L404'></a><a href='#L404'>404</a>
|
|
470
|
+
<a name='L405'></a><a href='#L405'>405</a>
|
|
471
|
+
<a name='L406'></a><a href='#L406'>406</a>
|
|
472
|
+
<a name='L407'></a><a href='#L407'>407</a>
|
|
473
|
+
<a name='L408'></a><a href='#L408'>408</a>
|
|
474
|
+
<a name='L409'></a><a href='#L409'>409</a>
|
|
475
|
+
<a name='L410'></a><a href='#L410'>410</a>
|
|
476
|
+
<a name='L411'></a><a href='#L411'>411</a>
|
|
477
|
+
<a name='L412'></a><a href='#L412'>412</a>
|
|
478
|
+
<a name='L413'></a><a href='#L413'>413</a>
|
|
479
|
+
<a name='L414'></a><a href='#L414'>414</a>
|
|
480
|
+
<a name='L415'></a><a href='#L415'>415</a>
|
|
481
|
+
<a name='L416'></a><a href='#L416'>416</a>
|
|
482
|
+
<a name='L417'></a><a href='#L417'>417</a>
|
|
483
|
+
<a name='L418'></a><a href='#L418'>418</a>
|
|
484
|
+
<a name='L419'></a><a href='#L419'>419</a>
|
|
485
|
+
<a name='L420'></a><a href='#L420'>420</a>
|
|
486
|
+
<a name='L421'></a><a href='#L421'>421</a>
|
|
487
|
+
<a name='L422'></a><a href='#L422'>422</a>
|
|
488
|
+
<a name='L423'></a><a href='#L423'>423</a>
|
|
489
|
+
<a name='L424'></a><a href='#L424'>424</a>
|
|
490
|
+
<a name='L425'></a><a href='#L425'>425</a>
|
|
491
|
+
<a name='L426'></a><a href='#L426'>426</a>
|
|
492
|
+
<a name='L427'></a><a href='#L427'>427</a>
|
|
493
|
+
<a name='L428'></a><a href='#L428'>428</a>
|
|
494
|
+
<a name='L429'></a><a href='#L429'>429</a>
|
|
495
|
+
<a name='L430'></a><a href='#L430'>430</a>
|
|
496
|
+
<a name='L431'></a><a href='#L431'>431</a>
|
|
497
|
+
<a name='L432'></a><a href='#L432'>432</a>
|
|
498
|
+
<a name='L433'></a><a href='#L433'>433</a>
|
|
499
|
+
<a name='L434'></a><a href='#L434'>434</a>
|
|
500
|
+
<a name='L435'></a><a href='#L435'>435</a>
|
|
501
|
+
<a name='L436'></a><a href='#L436'>436</a>
|
|
502
|
+
<a name='L437'></a><a href='#L437'>437</a>
|
|
503
|
+
<a name='L438'></a><a href='#L438'>438</a>
|
|
504
|
+
<a name='L439'></a><a href='#L439'>439</a>
|
|
505
|
+
<a name='L440'></a><a href='#L440'>440</a>
|
|
506
|
+
<a name='L441'></a><a href='#L441'>441</a>
|
|
507
|
+
<a name='L442'></a><a href='#L442'>442</a>
|
|
508
|
+
<a name='L443'></a><a href='#L443'>443</a>
|
|
509
|
+
<a name='L444'></a><a href='#L444'>444</a>
|
|
510
|
+
<a name='L445'></a><a href='#L445'>445</a>
|
|
511
|
+
<a name='L446'></a><a href='#L446'>446</a>
|
|
512
|
+
<a name='L447'></a><a href='#L447'>447</a>
|
|
513
|
+
<a name='L448'></a><a href='#L448'>448</a>
|
|
514
|
+
<a name='L449'></a><a href='#L449'>449</a>
|
|
515
|
+
<a name='L450'></a><a href='#L450'>450</a>
|
|
516
|
+
<a name='L451'></a><a href='#L451'>451</a>
|
|
517
|
+
<a name='L452'></a><a href='#L452'>452</a>
|
|
518
|
+
<a name='L453'></a><a href='#L453'>453</a>
|
|
519
|
+
<a name='L454'></a><a href='#L454'>454</a>
|
|
520
|
+
<a name='L455'></a><a href='#L455'>455</a>
|
|
521
|
+
<a name='L456'></a><a href='#L456'>456</a>
|
|
522
|
+
<a name='L457'></a><a href='#L457'>457</a>
|
|
523
|
+
<a name='L458'></a><a href='#L458'>458</a>
|
|
524
|
+
<a name='L459'></a><a href='#L459'>459</a>
|
|
525
|
+
<a name='L460'></a><a href='#L460'>460</a>
|
|
526
|
+
<a name='L461'></a><a href='#L461'>461</a>
|
|
527
|
+
<a name='L462'></a><a href='#L462'>462</a>
|
|
528
|
+
<a name='L463'></a><a href='#L463'>463</a>
|
|
529
|
+
<a name='L464'></a><a href='#L464'>464</a>
|
|
530
|
+
<a name='L465'></a><a href='#L465'>465</a>
|
|
531
|
+
<a name='L466'></a><a href='#L466'>466</a>
|
|
532
|
+
<a name='L467'></a><a href='#L467'>467</a>
|
|
533
|
+
<a name='L468'></a><a href='#L468'>468</a>
|
|
534
|
+
<a name='L469'></a><a href='#L469'>469</a>
|
|
535
|
+
<a name='L470'></a><a href='#L470'>470</a>
|
|
536
|
+
<a name='L471'></a><a href='#L471'>471</a>
|
|
537
|
+
<a name='L472'></a><a href='#L472'>472</a>
|
|
538
|
+
<a name='L473'></a><a href='#L473'>473</a>
|
|
539
|
+
<a name='L474'></a><a href='#L474'>474</a>
|
|
540
|
+
<a name='L475'></a><a href='#L475'>475</a>
|
|
541
|
+
<a name='L476'></a><a href='#L476'>476</a>
|
|
542
|
+
<a name='L477'></a><a href='#L477'>477</a>
|
|
543
|
+
<a name='L478'></a><a href='#L478'>478</a>
|
|
544
|
+
<a name='L479'></a><a href='#L479'>479</a>
|
|
545
|
+
<a name='L480'></a><a href='#L480'>480</a>
|
|
546
|
+
<a name='L481'></a><a href='#L481'>481</a>
|
|
547
|
+
<a name='L482'></a><a href='#L482'>482</a>
|
|
548
|
+
<a name='L483'></a><a href='#L483'>483</a>
|
|
549
|
+
<a name='L484'></a><a href='#L484'>484</a>
|
|
550
|
+
<a name='L485'></a><a href='#L485'>485</a>
|
|
551
|
+
<a name='L486'></a><a href='#L486'>486</a>
|
|
552
|
+
<a name='L487'></a><a href='#L487'>487</a>
|
|
553
|
+
<a name='L488'></a><a href='#L488'>488</a>
|
|
554
|
+
<a name='L489'></a><a href='#L489'>489</a>
|
|
555
|
+
<a name='L490'></a><a href='#L490'>490</a>
|
|
556
|
+
<a name='L491'></a><a href='#L491'>491</a>
|
|
557
|
+
<a name='L492'></a><a href='#L492'>492</a>
|
|
558
|
+
<a name='L493'></a><a href='#L493'>493</a>
|
|
559
|
+
<a name='L494'></a><a href='#L494'>494</a>
|
|
560
|
+
<a name='L495'></a><a href='#L495'>495</a>
|
|
561
|
+
<a name='L496'></a><a href='#L496'>496</a>
|
|
562
|
+
<a name='L497'></a><a href='#L497'>497</a>
|
|
563
|
+
<a name='L498'></a><a href='#L498'>498</a>
|
|
564
|
+
<a name='L499'></a><a href='#L499'>499</a>
|
|
565
|
+
<a name='L500'></a><a href='#L500'>500</a>
|
|
566
|
+
<a name='L501'></a><a href='#L501'>501</a>
|
|
567
|
+
<a name='L502'></a><a href='#L502'>502</a>
|
|
568
|
+
<a name='L503'></a><a href='#L503'>503</a>
|
|
569
|
+
<a name='L504'></a><a href='#L504'>504</a>
|
|
570
|
+
<a name='L505'></a><a href='#L505'>505</a>
|
|
571
|
+
<a name='L506'></a><a href='#L506'>506</a>
|
|
572
|
+
<a name='L507'></a><a href='#L507'>507</a>
|
|
573
|
+
<a name='L508'></a><a href='#L508'>508</a>
|
|
574
|
+
<a name='L509'></a><a href='#L509'>509</a>
|
|
575
|
+
<a name='L510'></a><a href='#L510'>510</a>
|
|
576
|
+
<a name='L511'></a><a href='#L511'>511</a>
|
|
577
|
+
<a name='L512'></a><a href='#L512'>512</a>
|
|
578
|
+
<a name='L513'></a><a href='#L513'>513</a>
|
|
579
|
+
<a name='L514'></a><a href='#L514'>514</a>
|
|
580
|
+
<a name='L515'></a><a href='#L515'>515</a>
|
|
581
|
+
<a name='L516'></a><a href='#L516'>516</a>
|
|
582
|
+
<a name='L517'></a><a href='#L517'>517</a>
|
|
583
|
+
<a name='L518'></a><a href='#L518'>518</a>
|
|
584
|
+
<a name='L519'></a><a href='#L519'>519</a>
|
|
585
|
+
<a name='L520'></a><a href='#L520'>520</a>
|
|
586
|
+
<a name='L521'></a><a href='#L521'>521</a>
|
|
587
|
+
<a name='L522'></a><a href='#L522'>522</a>
|
|
588
|
+
<a name='L523'></a><a href='#L523'>523</a>
|
|
589
|
+
<a name='L524'></a><a href='#L524'>524</a>
|
|
590
|
+
<a name='L525'></a><a href='#L525'>525</a>
|
|
591
|
+
<a name='L526'></a><a href='#L526'>526</a>
|
|
592
|
+
<a name='L527'></a><a href='#L527'>527</a>
|
|
593
|
+
<a name='L528'></a><a href='#L528'>528</a>
|
|
594
|
+
<a name='L529'></a><a href='#L529'>529</a>
|
|
595
|
+
<a name='L530'></a><a href='#L530'>530</a>
|
|
596
|
+
<a name='L531'></a><a href='#L531'>531</a>
|
|
597
|
+
<a name='L532'></a><a href='#L532'>532</a>
|
|
598
|
+
<a name='L533'></a><a href='#L533'>533</a>
|
|
599
|
+
<a name='L534'></a><a href='#L534'>534</a>
|
|
600
|
+
<a name='L535'></a><a href='#L535'>535</a>
|
|
601
|
+
<a name='L536'></a><a href='#L536'>536</a>
|
|
602
|
+
<a name='L537'></a><a href='#L537'>537</a>
|
|
603
|
+
<a name='L538'></a><a href='#L538'>538</a>
|
|
604
|
+
<a name='L539'></a><a href='#L539'>539</a>
|
|
605
|
+
<a name='L540'></a><a href='#L540'>540</a>
|
|
606
|
+
<a name='L541'></a><a href='#L541'>541</a>
|
|
607
|
+
<a name='L542'></a><a href='#L542'>542</a>
|
|
608
|
+
<a name='L543'></a><a href='#L543'>543</a>
|
|
609
|
+
<a name='L544'></a><a href='#L544'>544</a>
|
|
610
|
+
<a name='L545'></a><a href='#L545'>545</a>
|
|
611
|
+
<a name='L546'></a><a href='#L546'>546</a>
|
|
612
|
+
<a name='L547'></a><a href='#L547'>547</a>
|
|
613
|
+
<a name='L548'></a><a href='#L548'>548</a>
|
|
614
|
+
<a name='L549'></a><a href='#L549'>549</a>
|
|
615
|
+
<a name='L550'></a><a href='#L550'>550</a>
|
|
616
|
+
<a name='L551'></a><a href='#L551'>551</a>
|
|
617
|
+
<a name='L552'></a><a href='#L552'>552</a>
|
|
618
|
+
<a name='L553'></a><a href='#L553'>553</a>
|
|
619
|
+
<a name='L554'></a><a href='#L554'>554</a>
|
|
620
|
+
<a name='L555'></a><a href='#L555'>555</a>
|
|
621
|
+
<a name='L556'></a><a href='#L556'>556</a>
|
|
622
|
+
<a name='L557'></a><a href='#L557'>557</a>
|
|
623
|
+
<a name='L558'></a><a href='#L558'>558</a>
|
|
624
|
+
<a name='L559'></a><a href='#L559'>559</a>
|
|
625
|
+
<a name='L560'></a><a href='#L560'>560</a>
|
|
626
|
+
<a name='L561'></a><a href='#L561'>561</a>
|
|
627
|
+
<a name='L562'></a><a href='#L562'>562</a>
|
|
628
|
+
<a name='L563'></a><a href='#L563'>563</a>
|
|
629
|
+
<a name='L564'></a><a href='#L564'>564</a>
|
|
630
|
+
<a name='L565'></a><a href='#L565'>565</a>
|
|
631
|
+
<a name='L566'></a><a href='#L566'>566</a>
|
|
632
|
+
<a name='L567'></a><a href='#L567'>567</a>
|
|
633
|
+
<a name='L568'></a><a href='#L568'>568</a>
|
|
634
|
+
<a name='L569'></a><a href='#L569'>569</a>
|
|
635
|
+
<a name='L570'></a><a href='#L570'>570</a>
|
|
636
|
+
<a name='L571'></a><a href='#L571'>571</a>
|
|
637
|
+
<a name='L572'></a><a href='#L572'>572</a>
|
|
638
|
+
<a name='L573'></a><a href='#L573'>573</a>
|
|
639
|
+
<a name='L574'></a><a href='#L574'>574</a>
|
|
640
|
+
<a name='L575'></a><a href='#L575'>575</a>
|
|
641
|
+
<a name='L576'></a><a href='#L576'>576</a>
|
|
642
|
+
<a name='L577'></a><a href='#L577'>577</a>
|
|
643
|
+
<a name='L578'></a><a href='#L578'>578</a>
|
|
644
|
+
<a name='L579'></a><a href='#L579'>579</a>
|
|
645
|
+
<a name='L580'></a><a href='#L580'>580</a>
|
|
646
|
+
<a name='L581'></a><a href='#L581'>581</a>
|
|
647
|
+
<a name='L582'></a><a href='#L582'>582</a>
|
|
648
|
+
<a name='L583'></a><a href='#L583'>583</a>
|
|
649
|
+
<a name='L584'></a><a href='#L584'>584</a>
|
|
650
|
+
<a name='L585'></a><a href='#L585'>585</a>
|
|
651
|
+
<a name='L586'></a><a href='#L586'>586</a>
|
|
652
|
+
<a name='L587'></a><a href='#L587'>587</a>
|
|
653
|
+
<a name='L588'></a><a href='#L588'>588</a>
|
|
654
|
+
<a name='L589'></a><a href='#L589'>589</a>
|
|
655
|
+
<a name='L590'></a><a href='#L590'>590</a>
|
|
656
|
+
<a name='L591'></a><a href='#L591'>591</a>
|
|
657
|
+
<a name='L592'></a><a href='#L592'>592</a>
|
|
658
|
+
<a name='L593'></a><a href='#L593'>593</a>
|
|
659
|
+
<a name='L594'></a><a href='#L594'>594</a>
|
|
660
|
+
<a name='L595'></a><a href='#L595'>595</a>
|
|
661
|
+
<a name='L596'></a><a href='#L596'>596</a>
|
|
662
|
+
<a name='L597'></a><a href='#L597'>597</a>
|
|
663
|
+
<a name='L598'></a><a href='#L598'>598</a>
|
|
664
|
+
<a name='L599'></a><a href='#L599'>599</a>
|
|
665
|
+
<a name='L600'></a><a href='#L600'>600</a>
|
|
666
|
+
<a name='L601'></a><a href='#L601'>601</a>
|
|
667
|
+
<a name='L602'></a><a href='#L602'>602</a>
|
|
668
|
+
<a name='L603'></a><a href='#L603'>603</a>
|
|
669
|
+
<a name='L604'></a><a href='#L604'>604</a>
|
|
670
|
+
<a name='L605'></a><a href='#L605'>605</a>
|
|
671
|
+
<a name='L606'></a><a href='#L606'>606</a>
|
|
672
|
+
<a name='L607'></a><a href='#L607'>607</a>
|
|
673
|
+
<a name='L608'></a><a href='#L608'>608</a>
|
|
674
|
+
<a name='L609'></a><a href='#L609'>609</a>
|
|
675
|
+
<a name='L610'></a><a href='#L610'>610</a>
|
|
676
|
+
<a name='L611'></a><a href='#L611'>611</a>
|
|
677
|
+
<a name='L612'></a><a href='#L612'>612</a>
|
|
678
|
+
<a name='L613'></a><a href='#L613'>613</a>
|
|
679
|
+
<a name='L614'></a><a href='#L614'>614</a>
|
|
680
|
+
<a name='L615'></a><a href='#L615'>615</a>
|
|
681
|
+
<a name='L616'></a><a href='#L616'>616</a>
|
|
682
|
+
<a name='L617'></a><a href='#L617'>617</a>
|
|
683
|
+
<a name='L618'></a><a href='#L618'>618</a>
|
|
684
|
+
<a name='L619'></a><a href='#L619'>619</a>
|
|
685
|
+
<a name='L620'></a><a href='#L620'>620</a>
|
|
686
|
+
<a name='L621'></a><a href='#L621'>621</a>
|
|
687
|
+
<a name='L622'></a><a href='#L622'>622</a>
|
|
688
|
+
<a name='L623'></a><a href='#L623'>623</a>
|
|
689
|
+
<a name='L624'></a><a href='#L624'>624</a>
|
|
690
|
+
<a name='L625'></a><a href='#L625'>625</a>
|
|
691
|
+
<a name='L626'></a><a href='#L626'>626</a>
|
|
692
|
+
<a name='L627'></a><a href='#L627'>627</a>
|
|
693
|
+
<a name='L628'></a><a href='#L628'>628</a>
|
|
694
|
+
<a name='L629'></a><a href='#L629'>629</a>
|
|
695
|
+
<a name='L630'></a><a href='#L630'>630</a>
|
|
696
|
+
<a name='L631'></a><a href='#L631'>631</a>
|
|
697
|
+
<a name='L632'></a><a href='#L632'>632</a>
|
|
698
|
+
<a name='L633'></a><a href='#L633'>633</a>
|
|
699
|
+
<a name='L634'></a><a href='#L634'>634</a>
|
|
700
|
+
<a name='L635'></a><a href='#L635'>635</a>
|
|
701
|
+
<a name='L636'></a><a href='#L636'>636</a>
|
|
702
|
+
<a name='L637'></a><a href='#L637'>637</a>
|
|
703
|
+
<a name='L638'></a><a href='#L638'>638</a>
|
|
704
|
+
<a name='L639'></a><a href='#L639'>639</a>
|
|
705
|
+
<a name='L640'></a><a href='#L640'>640</a>
|
|
706
|
+
<a name='L641'></a><a href='#L641'>641</a>
|
|
707
|
+
<a name='L642'></a><a href='#L642'>642</a>
|
|
708
|
+
<a name='L643'></a><a href='#L643'>643</a>
|
|
709
|
+
<a name='L644'></a><a href='#L644'>644</a>
|
|
710
|
+
<a name='L645'></a><a href='#L645'>645</a>
|
|
711
|
+
<a name='L646'></a><a href='#L646'>646</a>
|
|
712
|
+
<a name='L647'></a><a href='#L647'>647</a>
|
|
713
|
+
<a name='L648'></a><a href='#L648'>648</a>
|
|
714
|
+
<a name='L649'></a><a href='#L649'>649</a>
|
|
715
|
+
<a name='L650'></a><a href='#L650'>650</a>
|
|
716
|
+
<a name='L651'></a><a href='#L651'>651</a>
|
|
717
|
+
<a name='L652'></a><a href='#L652'>652</a>
|
|
718
|
+
<a name='L653'></a><a href='#L653'>653</a>
|
|
719
|
+
<a name='L654'></a><a href='#L654'>654</a>
|
|
720
|
+
<a name='L655'></a><a href='#L655'>655</a>
|
|
721
|
+
<a name='L656'></a><a href='#L656'>656</a>
|
|
722
|
+
<a name='L657'></a><a href='#L657'>657</a>
|
|
723
|
+
<a name='L658'></a><a href='#L658'>658</a>
|
|
724
|
+
<a name='L659'></a><a href='#L659'>659</a>
|
|
725
|
+
<a name='L660'></a><a href='#L660'>660</a>
|
|
726
|
+
<a name='L661'></a><a href='#L661'>661</a>
|
|
727
|
+
<a name='L662'></a><a href='#L662'>662</a>
|
|
728
|
+
<a name='L663'></a><a href='#L663'>663</a>
|
|
729
|
+
<a name='L664'></a><a href='#L664'>664</a>
|
|
730
|
+
<a name='L665'></a><a href='#L665'>665</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
731
|
+
<span class="cline-any cline-yes">1x</span>
|
|
732
|
+
<span class="cline-any cline-yes">1x</span>
|
|
733
|
+
<span class="cline-any cline-yes">1x</span>
|
|
734
|
+
<span class="cline-any cline-yes">1x</span>
|
|
735
|
+
<span class="cline-any cline-yes">1x</span>
|
|
736
|
+
<span class="cline-any cline-yes">1x</span>
|
|
737
|
+
<span class="cline-any cline-yes">1x</span>
|
|
738
|
+
<span class="cline-any cline-yes">1x</span>
|
|
739
|
+
<span class="cline-any cline-yes">1x</span>
|
|
740
|
+
<span class="cline-any cline-yes">1x</span>
|
|
741
|
+
<span class="cline-any cline-yes">1x</span>
|
|
742
|
+
<span class="cline-any cline-yes">1x</span>
|
|
743
|
+
<span class="cline-any cline-yes">1x</span>
|
|
744
|
+
<span class="cline-any cline-yes">1x</span>
|
|
745
|
+
<span class="cline-any cline-yes">1x</span>
|
|
746
|
+
<span class="cline-any cline-yes">1x</span>
|
|
747
|
+
<span class="cline-any cline-yes">1x</span>
|
|
748
|
+
<span class="cline-any cline-yes">1x</span>
|
|
749
|
+
<span class="cline-any cline-yes">1x</span>
|
|
750
|
+
<span class="cline-any cline-yes">1x</span>
|
|
751
|
+
<span class="cline-any cline-yes">1x</span>
|
|
752
|
+
<span class="cline-any cline-yes">1x</span>
|
|
753
|
+
<span class="cline-any cline-yes">1x</span>
|
|
754
|
+
<span class="cline-any cline-yes">1x</span>
|
|
755
|
+
<span class="cline-any cline-yes">1x</span>
|
|
756
|
+
<span class="cline-any cline-yes">1x</span>
|
|
757
|
+
<span class="cline-any cline-yes">1x</span>
|
|
758
|
+
<span class="cline-any cline-yes">1x</span>
|
|
759
|
+
<span class="cline-any cline-yes">1x</span>
|
|
760
|
+
<span class="cline-any cline-yes">1x</span>
|
|
761
|
+
<span class="cline-any cline-yes">1x</span>
|
|
762
|
+
<span class="cline-any cline-yes">1x</span>
|
|
763
|
+
<span class="cline-any cline-yes">1x</span>
|
|
764
|
+
<span class="cline-any cline-yes">1x</span>
|
|
765
|
+
<span class="cline-any cline-yes">1x</span>
|
|
766
|
+
<span class="cline-any cline-yes">1x</span>
|
|
767
|
+
<span class="cline-any cline-yes">1x</span>
|
|
768
|
+
<span class="cline-any cline-yes">1x</span>
|
|
769
|
+
<span class="cline-any cline-yes">1x</span>
|
|
770
|
+
<span class="cline-any cline-yes">1x</span>
|
|
771
|
+
<span class="cline-any cline-yes">1x</span>
|
|
772
|
+
<span class="cline-any cline-yes">1x</span>
|
|
773
|
+
<span class="cline-any cline-yes">1x</span>
|
|
774
|
+
<span class="cline-any cline-yes">1x</span>
|
|
775
|
+
<span class="cline-any cline-yes">1x</span>
|
|
776
|
+
<span class="cline-any cline-yes">1x</span>
|
|
777
|
+
<span class="cline-any cline-yes">1x</span>
|
|
778
|
+
<span class="cline-any cline-yes">1x</span>
|
|
779
|
+
<span class="cline-any cline-yes">1x</span>
|
|
780
|
+
<span class="cline-any cline-yes">1x</span>
|
|
781
|
+
<span class="cline-any cline-yes">1x</span>
|
|
782
|
+
<span class="cline-any cline-yes">1x</span>
|
|
783
|
+
<span class="cline-any cline-yes">1x</span>
|
|
784
|
+
<span class="cline-any cline-yes">1x</span>
|
|
785
|
+
<span class="cline-any cline-yes">1x</span>
|
|
786
|
+
<span class="cline-any cline-yes">1x</span>
|
|
787
|
+
<span class="cline-any cline-yes">1x</span>
|
|
788
|
+
<span class="cline-any cline-yes">1x</span>
|
|
789
|
+
<span class="cline-any cline-yes">1x</span>
|
|
790
|
+
<span class="cline-any cline-yes">1x</span>
|
|
791
|
+
<span class="cline-any cline-yes">1x</span>
|
|
792
|
+
<span class="cline-any cline-yes">1x</span>
|
|
793
|
+
<span class="cline-any cline-yes">1x</span>
|
|
794
|
+
<span class="cline-any cline-yes">1x</span>
|
|
795
|
+
<span class="cline-any cline-yes">1x</span>
|
|
796
|
+
<span class="cline-any cline-yes">1x</span>
|
|
797
|
+
<span class="cline-any cline-yes">1x</span>
|
|
798
|
+
<span class="cline-any cline-yes">1x</span>
|
|
799
|
+
<span class="cline-any cline-yes">1x</span>
|
|
800
|
+
<span class="cline-any cline-yes">1x</span>
|
|
801
|
+
<span class="cline-any cline-yes">1x</span>
|
|
802
|
+
<span class="cline-any cline-yes">1x</span>
|
|
803
|
+
<span class="cline-any cline-yes">1x</span>
|
|
804
|
+
<span class="cline-any cline-yes">38x</span>
|
|
805
|
+
<span class="cline-any cline-yes">38x</span>
|
|
806
|
+
<span class="cline-any cline-yes">38x</span>
|
|
807
|
+
<span class="cline-any cline-yes">38x</span>
|
|
808
|
+
<span class="cline-any cline-yes">38x</span>
|
|
809
|
+
<span class="cline-any cline-yes">38x</span>
|
|
810
|
+
<span class="cline-any cline-yes">38x</span>
|
|
811
|
+
<span class="cline-any cline-yes">38x</span>
|
|
812
|
+
<span class="cline-any cline-yes">38x</span>
|
|
813
|
+
<span class="cline-any cline-yes">38x</span>
|
|
814
|
+
<span class="cline-any cline-yes">38x</span>
|
|
815
|
+
<span class="cline-any cline-yes">38x</span>
|
|
816
|
+
<span class="cline-any cline-yes">38x</span>
|
|
817
|
+
<span class="cline-any cline-yes">38x</span>
|
|
818
|
+
<span class="cline-any cline-yes">38x</span>
|
|
819
|
+
<span class="cline-any cline-yes">38x</span>
|
|
820
|
+
<span class="cline-any cline-yes">38x</span>
|
|
821
|
+
<span class="cline-any cline-yes">38x</span>
|
|
822
|
+
<span class="cline-any cline-yes">38x</span>
|
|
823
|
+
<span class="cline-any cline-yes">38x</span>
|
|
824
|
+
<span class="cline-any cline-yes">38x</span>
|
|
825
|
+
<span class="cline-any cline-yes">38x</span>
|
|
826
|
+
<span class="cline-any cline-yes">38x</span>
|
|
827
|
+
<span class="cline-any cline-yes">1x</span>
|
|
828
|
+
<span class="cline-any cline-yes">1x</span>
|
|
829
|
+
<span class="cline-any cline-yes">1x</span>
|
|
830
|
+
<span class="cline-any cline-yes">1x</span>
|
|
831
|
+
<span class="cline-any cline-yes">1x</span>
|
|
832
|
+
<span class="cline-any cline-yes">1x</span>
|
|
833
|
+
<span class="cline-any cline-yes">16x</span>
|
|
834
|
+
<span class="cline-any cline-yes">15x</span>
|
|
835
|
+
<span class="cline-any cline-yes">15x</span>
|
|
836
|
+
<span class="cline-any cline-yes">15x</span>
|
|
837
|
+
<span class="cline-any cline-yes">16x</span>
|
|
838
|
+
<span class="cline-any cline-yes">16x</span>
|
|
839
|
+
<span class="cline-any cline-yes">1x</span>
|
|
840
|
+
<span class="cline-any cline-yes">1x</span>
|
|
841
|
+
<span class="cline-any cline-yes">36x</span>
|
|
842
|
+
<span class="cline-any cline-yes">36x</span>
|
|
843
|
+
<span class="cline-any cline-yes">1x</span>
|
|
844
|
+
<span class="cline-any cline-yes">1x</span>
|
|
845
|
+
<span class="cline-any cline-yes">4x</span>
|
|
846
|
+
<span class="cline-any cline-yes">4x</span>
|
|
847
|
+
<span class="cline-any cline-yes">4x</span>
|
|
848
|
+
<span class="cline-any cline-yes">1x</span>
|
|
849
|
+
<span class="cline-any cline-yes">1x</span>
|
|
850
|
+
<span class="cline-any cline-yes">7x</span>
|
|
851
|
+
<span class="cline-any cline-yes">7x</span>
|
|
852
|
+
<span class="cline-any cline-yes">7x</span>
|
|
853
|
+
<span class="cline-any cline-yes">6x</span>
|
|
854
|
+
<span class="cline-any cline-yes">6x</span>
|
|
855
|
+
<span class="cline-any cline-yes">6x</span>
|
|
856
|
+
<span class="cline-any cline-yes">6x</span>
|
|
857
|
+
<span class="cline-any cline-yes">6x</span>
|
|
858
|
+
<span class="cline-any cline-yes">6x</span>
|
|
859
|
+
<span class="cline-any cline-yes">5x</span>
|
|
860
|
+
<span class="cline-any cline-yes">7x</span>
|
|
861
|
+
<span class="cline-any cline-yes">1x</span>
|
|
862
|
+
<span class="cline-any cline-yes">1x</span>
|
|
863
|
+
<span class="cline-any cline-yes">4x</span>
|
|
864
|
+
<span class="cline-any cline-yes">4x</span>
|
|
865
|
+
<span class="cline-any cline-yes">4x</span>
|
|
866
|
+
<span class="cline-any cline-yes">4x</span>
|
|
867
|
+
<span class="cline-any cline-yes">4x</span>
|
|
868
|
+
<span class="cline-any cline-yes">4x</span>
|
|
869
|
+
<span class="cline-any cline-yes">4x</span>
|
|
870
|
+
<span class="cline-any cline-yes">4x</span>
|
|
871
|
+
<span class="cline-any cline-yes">4x</span>
|
|
872
|
+
<span class="cline-any cline-yes">4x</span>
|
|
873
|
+
<span class="cline-any cline-yes">7x</span>
|
|
874
|
+
<span class="cline-any cline-yes">2x</span>
|
|
875
|
+
<span class="cline-any cline-yes">2x</span>
|
|
876
|
+
<span class="cline-any cline-yes">7x</span>
|
|
877
|
+
<span class="cline-any cline-yes">1x</span>
|
|
878
|
+
<span class="cline-any cline-yes">1x</span>
|
|
879
|
+
<span class="cline-any cline-yes">8x</span>
|
|
880
|
+
<span class="cline-any cline-yes">8x</span>
|
|
881
|
+
<span class="cline-any cline-yes">8x</span>
|
|
882
|
+
<span class="cline-any cline-yes">8x</span>
|
|
883
|
+
<span class="cline-any cline-yes">8x</span>
|
|
884
|
+
<span class="cline-any cline-yes">8x</span>
|
|
885
|
+
<span class="cline-any cline-yes">7x</span>
|
|
886
|
+
<span class="cline-any cline-yes">8x</span>
|
|
887
|
+
<span class="cline-any cline-yes">8x</span>
|
|
888
|
+
<span class="cline-any cline-yes">8x</span>
|
|
889
|
+
<span class="cline-any cline-yes">7x</span>
|
|
890
|
+
<span class="cline-any cline-yes">7x</span>
|
|
891
|
+
<span class="cline-any cline-yes">7x</span>
|
|
892
|
+
<span class="cline-any cline-yes">7x</span>
|
|
893
|
+
<span class="cline-any cline-yes">7x</span>
|
|
894
|
+
<span class="cline-any cline-yes">7x</span>
|
|
895
|
+
<span class="cline-any cline-yes">7x</span>
|
|
896
|
+
<span class="cline-any cline-yes">7x</span>
|
|
897
|
+
<span class="cline-any cline-yes">7x</span>
|
|
898
|
+
<span class="cline-any cline-yes">7x</span>
|
|
899
|
+
<span class="cline-any cline-yes">7x</span>
|
|
900
|
+
<span class="cline-any cline-yes">7x</span>
|
|
901
|
+
<span class="cline-any cline-yes">7x</span>
|
|
902
|
+
<span class="cline-any cline-yes">7x</span>
|
|
903
|
+
<span class="cline-any cline-yes">7x</span>
|
|
904
|
+
<span class="cline-any cline-yes">7x</span>
|
|
905
|
+
<span class="cline-any cline-yes">7x</span>
|
|
906
|
+
<span class="cline-any cline-yes">7x</span>
|
|
907
|
+
<span class="cline-any cline-yes">7x</span>
|
|
908
|
+
<span class="cline-any cline-yes">8x</span>
|
|
909
|
+
<span class="cline-any cline-yes">7x</span>
|
|
910
|
+
<span class="cline-any cline-yes">8x</span>
|
|
911
|
+
<span class="cline-any cline-yes">8x</span>
|
|
912
|
+
<span class="cline-any cline-yes">8x</span>
|
|
913
|
+
<span class="cline-any cline-yes">8x</span>
|
|
914
|
+
<span class="cline-any cline-yes">8x</span>
|
|
915
|
+
<span class="cline-any cline-yes">8x</span>
|
|
916
|
+
<span class="cline-any cline-yes">8x</span>
|
|
917
|
+
<span class="cline-any cline-yes">8x</span>
|
|
918
|
+
<span class="cline-any cline-yes">8x</span>
|
|
919
|
+
<span class="cline-any cline-yes">8x</span>
|
|
920
|
+
<span class="cline-any cline-yes">8x</span>
|
|
921
|
+
<span class="cline-any cline-yes">8x</span>
|
|
922
|
+
<span class="cline-any cline-yes">8x</span>
|
|
923
|
+
<span class="cline-any cline-yes">8x</span>
|
|
924
|
+
<span class="cline-any cline-yes">8x</span>
|
|
925
|
+
<span class="cline-any cline-yes">8x</span>
|
|
926
|
+
<span class="cline-any cline-yes">8x</span>
|
|
927
|
+
<span class="cline-any cline-yes">1x</span>
|
|
928
|
+
<span class="cline-any cline-yes">1x</span>
|
|
929
|
+
<span class="cline-any cline-yes">13x</span>
|
|
930
|
+
<span class="cline-any cline-yes">13x</span>
|
|
931
|
+
<span class="cline-any cline-yes">13x</span>
|
|
932
|
+
<span class="cline-any cline-yes">11x</span>
|
|
933
|
+
<span class="cline-any cline-yes">11x</span>
|
|
934
|
+
<span class="cline-any cline-yes">11x</span>
|
|
935
|
+
<span class="cline-any cline-yes">11x</span>
|
|
936
|
+
<span class="cline-any cline-yes">11x</span>
|
|
937
|
+
<span class="cline-any cline-yes">11x</span>
|
|
938
|
+
<span class="cline-any cline-yes">11x</span>
|
|
939
|
+
<span class="cline-any cline-yes">13x</span>
|
|
940
|
+
<span class="cline-any cline-yes">1x</span>
|
|
941
|
+
<span class="cline-any cline-yes">1x</span>
|
|
942
|
+
<span class="cline-any cline-yes">10x</span>
|
|
943
|
+
<span class="cline-any cline-yes">10x</span>
|
|
944
|
+
<span class="cline-any cline-yes">10x</span>
|
|
945
|
+
<span class="cline-any cline-yes">10x</span>
|
|
946
|
+
<span class="cline-any cline-yes">10x</span>
|
|
947
|
+
<span class="cline-any cline-yes">10x</span>
|
|
948
|
+
<span class="cline-any cline-yes">10x</span>
|
|
949
|
+
<span class="cline-any cline-yes">10x</span>
|
|
950
|
+
<span class="cline-any cline-yes">13x</span>
|
|
951
|
+
<span class="cline-any cline-yes">1x</span>
|
|
952
|
+
<span class="cline-any cline-yes">1x</span>
|
|
953
|
+
<span class="cline-any cline-yes">13x</span>
|
|
954
|
+
<span class="cline-any cline-yes">1x</span>
|
|
955
|
+
<span class="cline-any cline-yes">1x</span>
|
|
956
|
+
<span class="cline-any cline-yes">7x</span>
|
|
957
|
+
<span class="cline-any cline-yes">7x</span>
|
|
958
|
+
<span class="cline-any cline-no"> </span>
|
|
959
|
+
<span class="cline-any cline-yes">7x</span>
|
|
960
|
+
<span class="cline-any cline-no"> </span>
|
|
961
|
+
<span class="cline-any cline-yes">7x</span>
|
|
962
|
+
<span class="cline-any cline-yes">1x</span>
|
|
963
|
+
<span class="cline-any cline-yes">7x</span>
|
|
964
|
+
<span class="cline-any cline-yes">7x</span>
|
|
965
|
+
<span class="cline-any cline-yes">1x</span>
|
|
966
|
+
<span class="cline-any cline-yes">7x</span>
|
|
967
|
+
<span class="cline-any cline-yes">1x</span>
|
|
968
|
+
<span class="cline-any cline-yes">7x</span>
|
|
969
|
+
<span class="cline-any cline-yes">1x</span>
|
|
970
|
+
<span class="cline-any cline-yes">7x</span>
|
|
971
|
+
<span class="cline-any cline-yes">7x</span>
|
|
972
|
+
<span class="cline-any cline-yes">1x</span>
|
|
973
|
+
<span class="cline-any cline-yes">7x</span>
|
|
974
|
+
<span class="cline-any cline-yes">1x</span>
|
|
975
|
+
<span class="cline-any cline-yes">7x</span>
|
|
976
|
+
<span class="cline-any cline-yes">1x</span>
|
|
977
|
+
<span class="cline-any cline-yes">7x</span>
|
|
978
|
+
<span class="cline-any cline-yes">7x</span>
|
|
979
|
+
<span class="cline-any cline-yes">1x</span>
|
|
980
|
+
<span class="cline-any cline-yes">1x</span>
|
|
981
|
+
<span class="cline-any cline-yes">8x</span>
|
|
982
|
+
<span class="cline-any cline-yes">8x</span>
|
|
983
|
+
<span class="cline-any cline-yes">8x</span>
|
|
984
|
+
<span class="cline-any cline-yes">8x</span>
|
|
985
|
+
<span class="cline-any cline-yes">8x</span>
|
|
986
|
+
<span class="cline-any cline-yes">8x</span>
|
|
987
|
+
<span class="cline-any cline-yes">8x</span>
|
|
988
|
+
<span class="cline-any cline-yes">8x</span>
|
|
989
|
+
<span class="cline-any cline-yes">8x</span>
|
|
990
|
+
<span class="cline-any cline-yes">8x</span>
|
|
991
|
+
<span class="cline-any cline-yes">8x</span>
|
|
992
|
+
<span class="cline-any cline-yes">8x</span>
|
|
993
|
+
<span class="cline-any cline-yes">8x</span>
|
|
994
|
+
<span class="cline-any cline-yes">8x</span>
|
|
995
|
+
<span class="cline-any cline-yes">8x</span>
|
|
996
|
+
<span class="cline-any cline-yes">8x</span>
|
|
997
|
+
<span class="cline-any cline-yes">8x</span>
|
|
998
|
+
<span class="cline-any cline-yes">8x</span>
|
|
999
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1000
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1001
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1002
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1003
|
+
<span class="cline-any cline-no"> </span>
|
|
1004
|
+
<span class="cline-any cline-no"> </span>
|
|
1005
|
+
<span class="cline-any cline-no"> </span>
|
|
1006
|
+
<span class="cline-any cline-no"> </span>
|
|
1007
|
+
<span class="cline-any cline-no"> </span>
|
|
1008
|
+
<span class="cline-any cline-no"> </span>
|
|
1009
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1010
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1011
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1012
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1013
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1014
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1015
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1016
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1017
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1018
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1019
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1020
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1021
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1022
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1023
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1024
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1025
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1026
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1027
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1028
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1029
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1030
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1031
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1032
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1033
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1034
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1035
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1036
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1037
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1038
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1039
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1040
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1041
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1042
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1043
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1044
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1045
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1046
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1047
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1048
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1049
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1050
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1051
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1052
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1053
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1054
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1055
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1056
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1057
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1058
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1059
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1060
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1061
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1062
|
+
<span class="cline-any cline-no"> </span>
|
|
1063
|
+
<span class="cline-any cline-no"> </span>
|
|
1064
|
+
<span class="cline-any cline-no"> </span>
|
|
1065
|
+
<span class="cline-any cline-no"> </span>
|
|
1066
|
+
<span class="cline-any cline-no"> </span>
|
|
1067
|
+
<span class="cline-any cline-no"> </span>
|
|
1068
|
+
<span class="cline-any cline-no"> </span>
|
|
1069
|
+
<span class="cline-any cline-no"> </span>
|
|
1070
|
+
<span class="cline-any cline-no"> </span>
|
|
1071
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1072
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1073
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1074
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1075
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1076
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1077
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1078
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1079
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1080
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1081
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1082
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1083
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1084
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1085
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1086
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1087
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1088
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1089
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1090
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1091
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1092
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1093
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1094
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1095
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1096
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1097
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1098
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1099
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1100
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1101
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1102
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1103
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1104
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1105
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1106
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1107
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1108
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1109
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1110
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1111
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1112
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1113
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1114
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1115
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1116
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1117
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1118
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1119
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1120
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1121
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1122
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1123
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1124
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1125
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1126
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1127
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1128
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1129
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1130
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1131
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1132
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1133
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1134
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1135
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1136
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1137
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1138
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1139
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1140
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1141
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1142
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1143
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1144
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1145
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1146
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1147
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1148
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1149
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1150
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1151
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1152
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1153
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1154
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1155
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1156
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1157
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1158
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1159
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1160
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1161
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1162
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1163
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1164
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1165
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1166
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1167
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1168
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1169
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1170
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1171
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1172
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1173
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1174
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1175
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1176
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1177
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1178
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1179
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1180
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1181
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1182
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1183
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1184
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1185
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1186
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1187
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1188
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1189
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1190
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1191
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1192
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1193
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1194
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1195
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1196
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1197
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1198
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1199
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1200
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1201
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1202
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1203
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1204
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1205
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1206
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1207
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1208
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1209
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1210
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1211
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1212
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1213
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1214
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1215
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1216
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1217
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1218
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1219
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1220
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1221
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1222
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1223
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1224
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1225
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1226
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1227
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1228
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1229
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1230
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1231
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1232
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1233
|
+
<span class="cline-any cline-no"> </span>
|
|
1234
|
+
<span class="cline-any cline-no"> </span>
|
|
1235
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1236
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1237
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1238
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1239
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1240
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1241
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1242
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1243
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1244
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1245
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1246
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1247
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1248
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1249
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1250
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1251
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1252
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1253
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1254
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1255
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1256
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1257
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1258
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1259
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1260
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1261
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1262
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1263
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1264
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1265
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1266
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1267
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1268
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1269
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1270
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1271
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1272
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1273
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1274
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1275
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1276
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1277
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1278
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1279
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1280
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1281
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1282
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1283
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1284
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1285
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1286
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1287
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1288
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1289
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1290
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1291
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1292
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1293
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1294
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1295
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1296
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1297
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1298
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1299
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1300
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1301
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1302
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1303
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1304
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1305
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1306
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1307
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1308
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1309
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1310
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1311
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1312
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1313
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1314
|
+
<span class="cline-any cline-no"> </span>
|
|
1315
|
+
<span class="cline-any cline-no"> </span>
|
|
1316
|
+
<span class="cline-any cline-no"> </span>
|
|
1317
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1318
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1319
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1320
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1321
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1322
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1323
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1324
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1325
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1326
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1327
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1328
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1329
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1330
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1331
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1332
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1333
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1334
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1335
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1336
|
+
<span class="cline-any cline-no"> </span>
|
|
1337
|
+
<span class="cline-any cline-no"> </span>
|
|
1338
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1339
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1340
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1341
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1342
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1343
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1344
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1345
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1346
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1347
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1348
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1349
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1350
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1351
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1352
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1353
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1354
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1355
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1356
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1357
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1358
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1359
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1360
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1361
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1362
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1363
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1364
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1365
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1366
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1367
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1368
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1369
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1370
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1371
|
+
<span class="cline-any cline-no"> </span>
|
|
1372
|
+
<span class="cline-any cline-no"> </span>
|
|
1373
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1374
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1375
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1376
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1377
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1378
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1379
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1380
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1381
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1382
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1383
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1384
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1385
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1386
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1387
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1388
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1389
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1390
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1391
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1392
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1393
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1394
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import axios from "axios";
|
|
1395
|
+
import BigNumber from "bignumber.js";
|
|
1396
|
+
|
|
1397
|
+
import { improveAndRethrow } from "../../common-apis/utils/errorUtils";
|
|
1398
|
+
import { DEFAULT_CRYPTO_DECIMAL_COUNT, FALLBACK_ASSET_ICON_URL } from "../../common-apis/globalConstants";
|
|
1399
|
+
import { Logger } from "../../common-apis/utils/logging/logger";
|
|
1400
|
+
import { Coin } from "../../common-apis/models/coin";
|
|
1401
|
+
import { Protocol } from "../../common-apis/models/protocol";
|
|
1402
|
+
import { safeStringify } from "../../common-apis/utils/safeStringify";
|
|
1403
|
+
import { AmountUtils } from "../../common-apis/utils/amountUtils";
|
|
1404
|
+
import { toRabbitTicker } from "../../common-apis/utils/rabbitTicker";
|
|
1405
|
+
|
|
1406
|
+
import { SwapProvider } from "./swapProvider";
|
|
1407
|
+
import { SwapProviderCoinInfo } from "../models/swapProviderCoinInfo";
|
|
1408
|
+
import { ExistingSwap } from "../models/existingSwap";
|
|
1409
|
+
import { KYC_LEVELS, Partner } from "../models/partner";
|
|
1410
|
+
import { createRobustTimeoutSetupForAxios } from "./utils";
|
|
1411
|
+
|
|
1412
|
+
/**
|
|
1413
|
+
* ==============================
|
|
1414
|
+
* Hard‑coded token allow‑list
|
|
1415
|
+
* ==============================
|
|
1416
|
+
* GoExme exposes many assets but Rabbit supports swaps only for a curated
|
|
1417
|
+
* subset. To avoid presenting pairs that will inevitably fail with
|
|
1418
|
+
* `pairNotSupported`, the adapter keeps a strict allow‑list of Rabbit tickers
|
|
1419
|
+
* (`ALLOWED_RABBIT_TICKERS`). Any coin whose Rabbit ticker is not in this
|
|
1420
|
+
* set is skipped during `_fetchSupportedCurrenciesIfNeeded`.
|
|
1421
|
+
*/
|
|
1422
|
+
|
|
1423
|
+
const ALLOWED_RABBIT_TICKERS = new Set([
|
|
1424
|
+
"BNBBEP20",
|
|
1425
|
+
"BTC",
|
|
1426
|
+
"DOGE",
|
|
1427
|
+
"DOT",
|
|
1428
|
+
"ETH",
|
|
1429
|
+
// "GMTSOL", goexme `/rate` answer is "This pair is disabled for ExMe"
|
|
1430
|
+
"LTC",
|
|
1431
|
+
"SOL",
|
|
1432
|
+
"TRX",
|
|
1433
|
+
"USDCERC20",
|
|
1434
|
+
"USDTERC20",
|
|
1435
|
+
// "USDTBEP20", goexme `/rate` answer is "This pair is disabled for ExMe"
|
|
1436
|
+
"USDTSOL",
|
|
1437
|
+
"USDTTRC20",
|
|
1438
|
+
"XMR",
|
|
1439
|
+
"XRP",
|
|
1440
|
+
]);
|
|
1441
|
+
|
|
1442
|
+
/**
|
|
1443
|
+
* =========================================
|
|
1444
|
+
* Code → Rabbit‑ticker translation overrides
|
|
1445
|
+
* =========================================
|
|
1446
|
+
* GoExme sometimes returns codes that do not follow the Rabbit convention
|
|
1447
|
+
* for suffixes (e.g., `USDTSOLANA` instead of `USDTSOL`).
|
|
1448
|
+
*
|
|
1449
|
+
* `CODE_TRANSLATIONS` fixes such discrepancies: if a code exists in this map,
|
|
1450
|
+
* it is replaced with the specified value; otherwise, the ticker is
|
|
1451
|
+
* automatically constructed using `toRabbitTicker`.
|
|
1452
|
+
*
|
|
1453
|
+
* This handling is performed at the very beginning of `_convertCurrencyMeta`,
|
|
1454
|
+
* so that all further adapter logic operates on the "correct" Rabbit tickers.
|
|
1455
|
+
*/
|
|
1456
|
+
|
|
1457
|
+
const CODE_TRANSLATIONS = {
|
|
1458
|
+
USDTSOLANA: "USDTSOL",
|
|
1459
|
+
USDTBSC: "USDTBEP20",
|
|
1460
|
+
USDT: "USDTERC20",
|
|
1461
|
+
USDC: "USDCERC20",
|
|
1462
|
+
BNB: "BNBBEP20",
|
|
1463
|
+
GMT: "GMTSOL",
|
|
1464
|
+
};
|
|
1465
|
+
|
|
1466
|
+
export class GoexmeSwapProvider extends SwapProvider {
|
|
1467
|
+
constructor(
|
|
1468
|
+
apiKeysProxyUrl,
|
|
1469
|
+
cache,
|
|
1470
|
+
customCoinBuilder = <span class="fstat-no" title="function not covered" >(coin, network) => null,</span>
|
|
1471
|
+
useRestrictedCoinsSet = true,
|
|
1472
|
+
apiKey = ""
|
|
1473
|
+
) {
|
|
1474
|
+
super("goexme", cache, customCoinBuilder, useRestrictedCoinsSet, false, false);
|
|
1475
|
+
|
|
1476
|
+
this._apiKey = apiKey;
|
|
1477
|
+
this._URL = apiKey ? "https://goexme.io/v1/api" : `${apiKeysProxyUrl}/${this.id}`;
|
|
1478
|
+
this.headers = {};
|
|
1479
|
+
this.axiosPreset = {
|
|
1480
|
+
headers: this.headers,
|
|
1481
|
+
validateStatus: <span class="fstat-no" title="function not covered" >s => [200, 400, 404].includes(s),</span>
|
|
1482
|
+
};
|
|
1483
|
+
|
|
1484
|
+
this.COINS_EXPIRATION_TIME_MS = 5 * 60 * 1000;
|
|
1485
|
+
this.PAIRS_EXPIRATION_TIME_MS = 5 * 60 * 1000;
|
|
1486
|
+
this.SWAP_EXPIRATION_TIME_MS = 4 * 60 * 60 * 1000;
|
|
1487
|
+
|
|
1488
|
+
this._pairsCache = null;
|
|
1489
|
+
this._pairsCacheTimestamp = 0;
|
|
1490
|
+
}
|
|
1491
|
+
|
|
1492
|
+
getSwapCreationInfoTtlMs() {
|
|
1493
|
+
return 30000;
|
|
1494
|
+
}
|
|
1495
|
+
|
|
1496
|
+
_isPairSupported(fromInfo, toInfo) {
|
|
1497
|
+
if (!this._pairsCache || !this._pairsCache[fromInfo.code]) return false;
|
|
1498
|
+
const toSet = this._pairsCache[fromInfo.code];
|
|
1499
|
+
/* GoExme may list either the raw provider code **or**
|
|
1500
|
+
* the “pretty” Rabbit ticker in `/pairs`, so we test both. */
|
|
1501
|
+
return toSet.has(toInfo.code) || toSet.has(toInfo.coin.ticker);
|
|
1502
|
+
}
|
|
1503
|
+
|
|
1504
|
+
_findInfoByTicker(ticker) {
|
|
1505
|
+
return this._supportedCoins.find(i => i.coin.ticker === ticker) || null;
|
|
1506
|
+
}
|
|
1507
|
+
|
|
1508
|
+
getCoinByTickerIfPresent(ticker) {
|
|
1509
|
+
const info = this._findInfoByTicker(ticker);
|
|
1510
|
+
return info ? info.coin : null;
|
|
1511
|
+
}
|
|
1512
|
+
|
|
1513
|
+
async _fetchSupportedCurrenciesIfNeeded() {
|
|
1514
|
+
const loggerSource = "Goexme._fetchSupportedCurrenciesIfNeeded";
|
|
1515
|
+
try {
|
|
1516
|
+
if (!this._shouldCoinsListBeLoaded()) return;
|
|
1517
|
+
|
|
1518
|
+
const response = await axios.get(`${this._URL}/currencies`, {
|
|
1519
|
+
...this.axiosPreset,
|
|
1520
|
+
...createRobustTimeoutSetupForAxios(),
|
|
1521
|
+
params: { key: this._apiKey },
|
|
1522
|
+
});
|
|
1523
|
+
|
|
1524
|
+
if (response.status !== 200 || typeof response.data !== "object") {
|
|
1525
|
+
throw new Error(`Unexpected /currencies response: ${response.status}`);
|
|
1526
|
+
}
|
|
1527
|
+
|
|
1528
|
+
const availableEntries = Object.entries(response.data).filter(([, meta]) => meta?.available === true);
|
|
1529
|
+
|
|
1530
|
+
this._supportedCoins = availableEntries
|
|
1531
|
+
.map(([code, meta]) => this._convertCurrencyMeta(code, meta))
|
|
1532
|
+
.filter(i => i);
|
|
1533
|
+
|
|
1534
|
+
this._supportedCoinsLastUpdateTimestamp = Date.now();
|
|
1535
|
+
this._putPopularCoinsFirst();
|
|
1536
|
+
await super._fetchSupportedCurrenciesIfNeeded();
|
|
1537
|
+
} catch (e) {
|
|
1538
|
+
improveAndRethrow(e, loggerSource);
|
|
1539
|
+
}
|
|
1540
|
+
}
|
|
1541
|
+
|
|
1542
|
+
_convertCurrencyMeta(codeRaw, meta) {
|
|
1543
|
+
const code = codeRaw.toUpperCase();
|
|
1544
|
+
const network = (meta.network || "").toUpperCase();
|
|
1545
|
+
|
|
1546
|
+
const ticker = CODE_TRANSLATIONS[code] ?? toRabbitTicker(code, "");
|
|
1547
|
+
|
|
1548
|
+
if (!ALLOWED_RABBIT_TICKERS.has(ticker)) return null;
|
|
1549
|
+
|
|
1550
|
+
let coin = this._customCoinBuilder != null ? this._customCoinBuilder(code, network) : null;
|
|
1551
|
+
|
|
1552
|
+
if (!coin && !this.useRestrictedCoinsSet) {
|
|
1553
|
+
coin = new Coin(
|
|
1554
|
+
meta.coinName,
|
|
1555
|
+
ticker,
|
|
1556
|
+
code,
|
|
1557
|
+
DEFAULT_CRYPTO_DECIMAL_COUNT,
|
|
1558
|
+
null,
|
|
1559
|
+
"",
|
|
1560
|
+
null,
|
|
1561
|
+
null,
|
|
1562
|
+
1,
|
|
1563
|
+
null,
|
|
1564
|
+
[],
|
|
1565
|
+
60000,
|
|
1566
|
+
null,
|
|
1567
|
+
network && network !== code ? new Protocol(network) : null,
|
|
1568
|
+
null,
|
|
1569
|
+
false
|
|
1570
|
+
);
|
|
1571
|
+
}
|
|
1572
|
+
if (!coin) <span class="branch-0 cbranch-no" title="branch not covered" >return null;</span>
|
|
1573
|
+
|
|
1574
|
+
const tagRaw = (meta.tagname ?? "").trim();
|
|
1575
|
+
const needsExtraId = tagRaw.length > 0;
|
|
1576
|
+
|
|
1577
|
+
return new SwapProviderCoinInfo(
|
|
1578
|
+
coin,
|
|
1579
|
+
code,
|
|
1580
|
+
network || null,
|
|
1581
|
+
needsExtraId, // hasExtraId
|
|
1582
|
+
needsExtraId <span class="branch-0 cbranch-no" title="branch not covered" >? meta.tagname </span>: null, // extraIdName (only if needed)
|
|
1583
|
+
0,
|
|
1584
|
+
FALLBACK_ASSET_ICON_URL,
|
|
1585
|
+
true,
|
|
1586
|
+
true,
|
|
1587
|
+
null,
|
|
1588
|
+
true
|
|
1589
|
+
);
|
|
1590
|
+
}
|
|
1591
|
+
|
|
1592
|
+
async _ensurePairsLoaded() {
|
|
1593
|
+
const loggerSource = "Goexme._ensurePairsLoaded";
|
|
1594
|
+
try {
|
|
1595
|
+
if (this._pairsCache && Date.now() - this._pairsCacheTimestamp < this.PAIRS_EXPIRATION_TIME_MS) return;
|
|
1596
|
+
|
|
1597
|
+
const response = await axios.get(`${this._URL}/pairs`, {
|
|
1598
|
+
...this.axiosPreset,
|
|
1599
|
+
...createRobustTimeoutSetupForAxios(),
|
|
1600
|
+
params: { key: this._apiKey },
|
|
1601
|
+
});
|
|
1602
|
+
|
|
1603
|
+
if (response.status !== 200 || typeof response.data !== "object") {
|
|
1604
|
+
throw new Error("Failed to load /pairs");
|
|
1605
|
+
}
|
|
1606
|
+
|
|
1607
|
+
this._pairsCache = Object.fromEntries(
|
|
1608
|
+
Object.entries(response.data).map(([from, arr]) => [
|
|
1609
|
+
from.toUpperCase(),
|
|
1610
|
+
new Set(arr.map(v => v.toUpperCase())),
|
|
1611
|
+
])
|
|
1612
|
+
);
|
|
1613
|
+
this._pairsCacheTimestamp = Date.now();
|
|
1614
|
+
} catch (e) {
|
|
1615
|
+
improveAndRethrow(e, loggerSource);
|
|
1616
|
+
}
|
|
1617
|
+
}
|
|
1618
|
+
|
|
1619
|
+
_mapGoexmeStatus(status) {
|
|
1620
|
+
switch (status) {
|
|
1621
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > case "new":</span>
|
|
1622
|
+
<span class="cstat-no" title="statement not covered" > return SwapProvider.SWAP_STATUSES.WAITING_FOR_PAYMENT;</span>
|
|
1623
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > case "waiting_deposit":</span>
|
|
1624
|
+
<span class="cstat-no" title="statement not covered" > return SwapProvider.SWAP_STATUSES.CONFIRMING;</span>
|
|
1625
|
+
case "deposit_received":
|
|
1626
|
+
return SwapProvider.SWAP_STATUSES.PAYMENT_RECEIVED;
|
|
1627
|
+
case "exchanging":
|
|
1628
|
+
case "sending":
|
|
1629
|
+
return SwapProvider.SWAP_STATUSES.EXCHANGING;
|
|
1630
|
+
case "success":
|
|
1631
|
+
return SwapProvider.SWAP_STATUSES.COMPLETED;
|
|
1632
|
+
case "time_expired":
|
|
1633
|
+
return SwapProvider.SWAP_STATUSES.EXPIRED;
|
|
1634
|
+
case "failed":
|
|
1635
|
+
case "sending_failed":
|
|
1636
|
+
return SwapProvider.SWAP_STATUSES.FAILED;
|
|
1637
|
+
case "reverted":
|
|
1638
|
+
return SwapProvider.SWAP_STATUSES.REFUNDED;
|
|
1639
|
+
default:
|
|
1640
|
+
throw new Error(`Unknown Goexme status: ${status}`);
|
|
1641
|
+
}
|
|
1642
|
+
}
|
|
1643
|
+
|
|
1644
|
+
_validateCreateSwapParams(
|
|
1645
|
+
fromCoin,
|
|
1646
|
+
toCoin,
|
|
1647
|
+
amount,
|
|
1648
|
+
toAddress,
|
|
1649
|
+
refundAddress,
|
|
1650
|
+
fixed,
|
|
1651
|
+
toCurrencyExtraId,
|
|
1652
|
+
refundExtraId,
|
|
1653
|
+
amountIsToReceive,
|
|
1654
|
+
fromCoinInfo,
|
|
1655
|
+
toCoinInfo
|
|
1656
|
+
) {
|
|
1657
|
+
const loggerSource = "Goexme._validateCreateSwapParams";
|
|
1658
|
+
|
|
1659
|
+
if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin))
|
|
1660
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > throw new Error("fromCoin / toCoin are not Coin instances");</span>
|
|
1661
|
+
if (typeof amount !== "string" || BigNumber(amount).lte(0)) <span class="branch-0 cbranch-no" title="branch not covered" >throw new Error("Amount must be positive string");</span>
|
|
1662
|
+
if (typeof toAddress !== "string" || toAddress.trim() === "") <span class="branch-0 cbranch-no" title="branch not covered" >throw new Error("toAddress is empty");</span>
|
|
1663
|
+
if (typeof refundAddress !== "string") <span class="branch-0 cbranch-no" title="branch not covered" >throw new Error("refundAddress must be string (can be empty)");</span>
|
|
1664
|
+
if (typeof fixed !== "boolean") <span class="branch-0 cbranch-no" title="branch not covered" >throw new Error("fixed must be boolean");</span>
|
|
1665
|
+
if (typeof amountIsToReceive !== "boolean") <span class="branch-0 cbranch-no" title="branch not covered" >throw new Error("amountIsToReceive must be boolean");</span>
|
|
1666
|
+
if (toCoinInfo.hasExtraId && !toCurrencyExtraId) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1667
|
+
<span class="cstat-no" title="statement not covered" > Logger.log(</span>
|
|
1668
|
+
<span class="cstat-no" title="statement not covered" > `optional extraId skipped | pair=${fromCoin.ticker}->${toCoin.ticker}` +</span>
|
|
1669
|
+
<span class="cstat-no" title="statement not covered" > (toCoinInfo.extraIdName ? ` | expectedTag=${toCoinInfo.extraIdName}` : ""),</span>
|
|
1670
|
+
<span class="cstat-no" title="statement not covered" > loggerSource</span>
|
|
1671
|
+
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1672
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1673
|
+
}
|
|
1674
|
+
|
|
1675
|
+
/**
|
|
1676
|
+
* Loads limits + quote from GoExme.
|
|
1677
|
+
*
|
|
1678
|
+
* NOTE: GoExme returns in field `rate` already-calculated amountTo while the rest
|
|
1679
|
+
* of RabbitSwap ecosystem expects `rate` to be a “per-1-coin” ratio
|
|
1680
|
+
* (ETH / TRX). We therefore convert amountTo → ratio right here.
|
|
1681
|
+
*/
|
|
1682
|
+
async getSwapInfo(
|
|
1683
|
+
fromCoin,
|
|
1684
|
+
toCoin,
|
|
1685
|
+
amountCoins,
|
|
1686
|
+
fixed = false,
|
|
1687
|
+
fromCoinToUsdRate = null,
|
|
1688
|
+
amountIsToReceive = false,
|
|
1689
|
+
bannedPartners = [],
|
|
1690
|
+
whitelistedPartners = null
|
|
1691
|
+
) {
|
|
1692
|
+
const loggerSource = "Goexme.getSwapInfo";
|
|
1693
|
+
try {
|
|
1694
|
+
if (amountIsToReceive) <span class="branch-0 cbranch-no" title="branch not covered" >throw new Error("amountIsToReceive is not supported by GoExme");</span>
|
|
1695
|
+
if (!(fromCoin instanceof Coin) || !(toCoin instanceof Coin) || BigNumber(amountCoins).lte(0))
|
|
1696
|
+
throw new Error("Invalid params for getSwapInfo");
|
|
1697
|
+
|
|
1698
|
+
await this._fetchSupportedCurrenciesIfNeeded();
|
|
1699
|
+
await this._ensurePairsLoaded();
|
|
1700
|
+
|
|
1701
|
+
const fromCoinInfo = this._findInfoByTicker(fromCoin.ticker);
|
|
1702
|
+
const toCoinInfo = this._findInfoByTicker(toCoin.ticker);
|
|
1703
|
+
|
|
1704
|
+
if (!fromCoinInfo || !toCoinInfo || !this._isPairSupported(fromCoinInfo, toCoinInfo)) {
|
|
1705
|
+
return {
|
|
1706
|
+
result: false,
|
|
1707
|
+
reason: SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED,
|
|
1708
|
+
};
|
|
1709
|
+
}
|
|
1710
|
+
|
|
1711
|
+
const params = {
|
|
1712
|
+
key: this._apiKey,
|
|
1713
|
+
from: fromCoinInfo.code,
|
|
1714
|
+
to: toCoinInfo.code,
|
|
1715
|
+
amount: amountCoins,
|
|
1716
|
+
...(fixed <span class="branch-0 cbranch-no" title="branch not covered" >? { fix: true } </span>: {}),
|
|
1717
|
+
};
|
|
1718
|
+
|
|
1719
|
+
const response = await axios.get(`${this._URL}/rate`, {
|
|
1720
|
+
...this.axiosPreset,
|
|
1721
|
+
...createRobustTimeoutSetupForAxios(),
|
|
1722
|
+
params,
|
|
1723
|
+
});
|
|
1724
|
+
|
|
1725
|
+
if (response.status !== 200 || response.data?.result !== true || !response.data) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1726
|
+
<span class="cstat-no" title="statement not covered" > Logger.log(</span>
|
|
1727
|
+
<span class="cstat-no" title="statement not covered" > `Unexpected response from /rate: ${response.status}: ${safeStringify(response.data)}`,</span>
|
|
1728
|
+
<span class="cstat-no" title="statement not covered" > loggerSource</span>
|
|
1729
|
+
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1730
|
+
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
1731
|
+
<span class="cstat-no" title="statement not covered" > result: false,</span>
|
|
1732
|
+
<span class="cstat-no" title="statement not covered" > reason: SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED,</span>
|
|
1733
|
+
<span class="cstat-no" title="statement not covered" > };</span>
|
|
1734
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1735
|
+
|
|
1736
|
+
const pairMinRaw = response.data.minamount ?? null;
|
|
1737
|
+
const pairMaxRaw = response.data.maxamount ?? null;
|
|
1738
|
+
|
|
1739
|
+
const pairMin = pairMinRaw ? AmountUtils.trim(pairMinRaw, fromCoin.digits) : null;
|
|
1740
|
+
const pairMax = pairMaxRaw ? AmountUtils.trim(pairMaxRaw, fromCoin.digits) : null;
|
|
1741
|
+
|
|
1742
|
+
if (pairMin && BigNumber(amountCoins).lt(pairMin)) {
|
|
1743
|
+
return {
|
|
1744
|
+
result: false,
|
|
1745
|
+
reason: SwapProvider.NO_SWAPS_REASONS.TOO_LOW,
|
|
1746
|
+
smallestMin: pairMin,
|
|
1747
|
+
};
|
|
1748
|
+
}
|
|
1749
|
+
if (pairMax && BigNumber(amountCoins).gt(pairMax)) {
|
|
1750
|
+
return {
|
|
1751
|
+
result: false,
|
|
1752
|
+
reason: SwapProvider.NO_SWAPS_REASONS.TOO_HIGH,
|
|
1753
|
+
greatestMax: pairMax,
|
|
1754
|
+
};
|
|
1755
|
+
}
|
|
1756
|
+
|
|
1757
|
+
/* --------------------------------------------------------
|
|
1758
|
+
* Convert amountTo → ratio so that downstream code can do
|
|
1759
|
+
* amountFrom * rate === amountTo
|
|
1760
|
+
* -------------------------------------------------------- */
|
|
1761
|
+
let rateRatio = null;
|
|
1762
|
+
if (response.data.rate != null && BigNumber(amountCoins).gt(0)) {
|
|
1763
|
+
rateRatio = AmountUtils.trim(
|
|
1764
|
+
BigNumber(response.data.rate).div(amountCoins).toString(),
|
|
1765
|
+
this._maxRateDigits
|
|
1766
|
+
);
|
|
1767
|
+
}
|
|
1768
|
+
|
|
1769
|
+
return {
|
|
1770
|
+
result: true,
|
|
1771
|
+
min: pairMin,
|
|
1772
|
+
max: pairMax,
|
|
1773
|
+
smallestMin: pairMin,
|
|
1774
|
+
greatestMax: pairMax,
|
|
1775
|
+
rate: rateRatio,
|
|
1776
|
+
durationMinutesRange: null,
|
|
1777
|
+
fixed: !!response.data.fix,
|
|
1778
|
+
rawSwapData: response.data,
|
|
1779
|
+
/**
|
|
1780
|
+
* GoExme never requires a refund address.
|
|
1781
|
+
*
|
|
1782
|
+
* The official API documentation marks `destinationTag` / `refundTag` as **optional**.
|
|
1783
|
+
* Support chat confirmation (2025‑06‑27): "Yes, it's optional and can be omitted even for small amounts."
|
|
1784
|
+
*
|
|
1785
|
+
*/
|
|
1786
|
+
isRefundAddressRequired: false,
|
|
1787
|
+
};
|
|
1788
|
+
} catch (e) {
|
|
1789
|
+
if (e?.response?.status === 429)
|
|
1790
|
+
return {
|
|
1791
|
+
result: false,
|
|
1792
|
+
reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED,
|
|
1793
|
+
};
|
|
1794
|
+
|
|
1795
|
+
Logger.logError(e, loggerSource, "Internal error on getSwapInfo");
|
|
1796
|
+
improveAndRethrow(e, loggerSource);
|
|
1797
|
+
}
|
|
1798
|
+
}
|
|
1799
|
+
|
|
1800
|
+
/**
|
|
1801
|
+
* Creates a swap on GoExme.
|
|
1802
|
+
*
|
|
1803
|
+
* We cannot rely on what upper layers put into
|
|
1804
|
+
* `proprietarySwapEstimationData.rate`:
|
|
1805
|
+
* • sometimes it is the **amountTo** (GoExme original value);
|
|
1806
|
+
* • sometimes it is already a **ratio** – but we cannot know.
|
|
1807
|
+
*
|
|
1808
|
+
* The only safe approach: treat any numeric value we get from
|
|
1809
|
+
* estimation as amountTo, then derive the ratio ourselves.
|
|
1810
|
+
*
|
|
1811
|
+
* Steps:
|
|
1812
|
+
* 1. Pick the first non-null of
|
|
1813
|
+
* – estimation.rawSwapData.rate
|
|
1814
|
+
* – estimation.rate
|
|
1815
|
+
* (both are amountTo for GoExme).
|
|
1816
|
+
* 2. Store it as `toAmountCalculated`.
|
|
1817
|
+
* 3. Compute `rateRatio = toAmount / amountFrom`.
|
|
1818
|
+
* → both mandatory fields (`rate`, `withdrawal.amount`)
|
|
1819
|
+
* are always present, avoiding schema validation errors.
|
|
1820
|
+
*/
|
|
1821
|
+
async createSwap(
|
|
1822
|
+
fromCoin,
|
|
1823
|
+
toCoin,
|
|
1824
|
+
amount,
|
|
1825
|
+
toAddress,
|
|
1826
|
+
refundAddress,
|
|
1827
|
+
proprietarySwapEstimationData,
|
|
1828
|
+
clientIpAddress,
|
|
1829
|
+
fixed,
|
|
1830
|
+
toCurrencyExtraId = "",
|
|
1831
|
+
refundExtraId = "",
|
|
1832
|
+
amountIsToReceive = false
|
|
1833
|
+
) {
|
|
1834
|
+
const loggerSource = "Goexme.createSwap";
|
|
1835
|
+
try {
|
|
1836
|
+
if (amountIsToReceive) <span class="branch-0 cbranch-no" title="branch not covered" >throw new Error("amountIsToReceive is not supported by GoExme");</span>
|
|
1837
|
+
|
|
1838
|
+
await this._fetchSupportedCurrenciesIfNeeded();
|
|
1839
|
+
|
|
1840
|
+
const fromCoinInfo = this._findInfoByTicker(fromCoin.ticker);
|
|
1841
|
+
const toCoinInfo = this._findInfoByTicker(toCoin.ticker);
|
|
1842
|
+
|
|
1843
|
+
if (!fromCoinInfo || !toCoinInfo || !this._isPairSupported(fromCoinInfo, toCoinInfo)) {
|
|
1844
|
+
throw new Error(`Unsupported pair ${fromCoin.ticker} -> ${toCoin.ticker}`);
|
|
1845
|
+
}
|
|
1846
|
+
|
|
1847
|
+
this._validateCreateSwapParams(
|
|
1848
|
+
fromCoin,
|
|
1849
|
+
toCoin,
|
|
1850
|
+
amount,
|
|
1851
|
+
toAddress,
|
|
1852
|
+
refundAddress,
|
|
1853
|
+
fixed,
|
|
1854
|
+
toCurrencyExtraId,
|
|
1855
|
+
refundExtraId,
|
|
1856
|
+
amountIsToReceive,
|
|
1857
|
+
fromCoinInfo,
|
|
1858
|
+
toCoinInfo
|
|
1859
|
+
);
|
|
1860
|
+
|
|
1861
|
+
const params = {
|
|
1862
|
+
key: this._apiKey,
|
|
1863
|
+
from: fromCoinInfo.code,
|
|
1864
|
+
to: toCoinInfo.code,
|
|
1865
|
+
destinationAddress: toAddress,
|
|
1866
|
+
...(fixed ? { fix: true } : {}),
|
|
1867
|
+
};
|
|
1868
|
+
|
|
1869
|
+
params.amount = amount;
|
|
1870
|
+
if (toCoinInfo.hasExtraId && toCurrencyExtraId) params.destinationTag = toCurrencyExtraId;
|
|
1871
|
+
if (refundAddress) {
|
|
1872
|
+
params.refundAddress = refundAddress;
|
|
1873
|
+
if (fromCoinInfo.hasExtraId && refundExtraId) params.refundTag = refundExtraId;
|
|
1874
|
+
}
|
|
1875
|
+
|
|
1876
|
+
const response = await axios.get(`${this._URL}/exchange-create`, {
|
|
1877
|
+
...this.axiosPreset,
|
|
1878
|
+
...createRobustTimeoutSetupForAxios(),
|
|
1879
|
+
params,
|
|
1880
|
+
});
|
|
1881
|
+
|
|
1882
|
+
const data = response.data;
|
|
1883
|
+
|
|
1884
|
+
if (data?.result !== true || !data?.id || !data?.depositAddress) {
|
|
1885
|
+
const errMsg = `Goexme createSwap failed: ${safeStringify(data <span class="branch-0 cbranch-no" title="branch not covered" >?? {})</span>}`;
|
|
1886
|
+
Logger.log(errMsg, loggerSource);
|
|
1887
|
+
throw new Error(errMsg);
|
|
1888
|
+
}
|
|
1889
|
+
|
|
1890
|
+
/*------------------------------------------------------------
|
|
1891
|
+
* Extract amountTo from estimation (first non-null source).
|
|
1892
|
+
*-----------------------------------------------------------*/
|
|
1893
|
+
const amountToCandidate =
|
|
1894
|
+
proprietarySwapEstimationData?.rawSwapData?.rate <span class="branch-0 cbranch-no" title="branch not covered" >?? proprietarySwapEstimationData?.rate <span class="branch-0 cbranch-no" title="branch not covered" ></span>?? null;</span>
|
|
1895
|
+
|
|
1896
|
+
if (amountToCandidate == null) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1897
|
+
<span class="cstat-no" title="statement not covered" > throw new Error("Estimation does not contain amountTo/rate");</span>
|
|
1898
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1899
|
+
|
|
1900
|
+
const toAmountCalculated = AmountUtils.trim(amountToCandidate, toCoin.digits);
|
|
1901
|
+
|
|
1902
|
+
/*------------------------------------------------------------
|
|
1903
|
+
* Derive ratio so that amountFrom * ratio = amountTo.
|
|
1904
|
+
*-----------------------------------------------------------*/
|
|
1905
|
+
const rateRatio = AmountUtils.trim(
|
|
1906
|
+
BigNumber(toAmountCalculated).div(amount).toString(),
|
|
1907
|
+
this._maxRateDigits
|
|
1908
|
+
);
|
|
1909
|
+
|
|
1910
|
+
return {
|
|
1911
|
+
result: true,
|
|
1912
|
+
swapId: data.id,
|
|
1913
|
+
fromCoin,
|
|
1914
|
+
fromAmount: AmountUtils.trim(amount, fromCoin.digits),
|
|
1915
|
+
fromAddress: data.depositAddress,
|
|
1916
|
+
toCoin,
|
|
1917
|
+
toAmount: toAmountCalculated,
|
|
1918
|
+
toAddress,
|
|
1919
|
+
fromCurrencyExtraId: data.depositTag ?? "",
|
|
1920
|
+
rate: rateRatio,
|
|
1921
|
+
/*
|
|
1922
|
+
* TODO: once GoExme starts returning the rate type (`fix` / `float`) in
|
|
1923
|
+
* `/exchange-status`, replace the boolean below with the provider value.
|
|
1924
|
+
* Until then we return the same flag that was used for creation so that
|
|
1925
|
+
* the back‑end can persist it in the first swap version.
|
|
1926
|
+
*/
|
|
1927
|
+
fixed: fixed,
|
|
1928
|
+
};
|
|
1929
|
+
} catch (e) {
|
|
1930
|
+
if (e?.response?.status === 429)
|
|
1931
|
+
return {
|
|
1932
|
+
result: false,
|
|
1933
|
+
reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED,
|
|
1934
|
+
};
|
|
1935
|
+
|
|
1936
|
+
Logger.logError(e, loggerSource, "Internal error on createSwap");
|
|
1937
|
+
improveAndRethrow(e, loggerSource);
|
|
1938
|
+
}
|
|
1939
|
+
}
|
|
1940
|
+
|
|
1941
|
+
async getExistingSwapsDetailsAndStatus(swapIds) {
|
|
1942
|
+
const loggerSource = "Goexme.getExistingSwapsDetailsAndStatus";
|
|
1943
|
+
try {
|
|
1944
|
+
if (swapIds.some(id => typeof id !== "string")) <span class="branch-0 cbranch-no" title="branch not covered" >throw new Error("swapIds must be strings");</span>
|
|
1945
|
+
|
|
1946
|
+
const fetchOne = async id => {
|
|
1947
|
+
const response = await axios.get(`${this._URL}/exchange-status`, {
|
|
1948
|
+
...this.axiosPreset,
|
|
1949
|
+
...createRobustTimeoutSetupForAxios(),
|
|
1950
|
+
params: { key: this._apiKey, id },
|
|
1951
|
+
});
|
|
1952
|
+
return response.status === 404 ? null : response.data;
|
|
1953
|
+
};
|
|
1954
|
+
|
|
1955
|
+
const statusResponses = await Promise.all(swapIds.map(fetchOne));
|
|
1956
|
+
|
|
1957
|
+
/* helper: normalize coin code using CODE_TRANSLATIONS */
|
|
1958
|
+
const normalize = code => CODE_TRANSLATIONS[code.toUpperCase()] ?? code.toUpperCase();
|
|
1959
|
+
|
|
1960
|
+
const swaps = statusResponses
|
|
1961
|
+
.map((statusData, swapIndex) => {
|
|
1962
|
+
if (!statusData) return null;
|
|
1963
|
+
|
|
1964
|
+
/* ------------------ coins ------------------ */
|
|
1965
|
+
const fromCoinTicker = toRabbitTicker(normalize(statusData.from), "");
|
|
1966
|
+
const toCoinTicker = toRabbitTicker(normalize(statusData.to), "");
|
|
1967
|
+
|
|
1968
|
+
let fromCoin = this.getCoinByTickerIfPresent(fromCoinTicker);
|
|
1969
|
+
let toCoin = this.getCoinByTickerIfPresent(toCoinTicker);
|
|
1970
|
+
|
|
1971
|
+
/* fallback: look up by raw provider code if ticker lookup failed */
|
|
1972
|
+
if (!fromCoin) {
|
|
1973
|
+
const byCode = this._supportedCoins.find(c => c.code === statusData.from);
|
|
1974
|
+
fromCoin = byCode<span class="branch-0 cbranch-no" title="branch not covered" >?.coin </span>?? null;
|
|
1975
|
+
}
|
|
1976
|
+
/* fallback: look up by raw provider code if ticker lookup failed */
|
|
1977
|
+
if (!toCoin) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1978
|
+
<span class="cstat-no" title="statement not covered" > const byCode = this._supportedCoins.find(c => c.code === statusData.to);</span>
|
|
1979
|
+
<span class="cstat-no" title="statement not covered" > toCoin = byCode?.coin ?? null;</span>
|
|
1980
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1981
|
+
|
|
1982
|
+
if (!fromCoin || !toCoin) return null;
|
|
1983
|
+
|
|
1984
|
+
/* timestamps */
|
|
1985
|
+
const createdAt = GoexmeSwapProvider._parseGoexmeDate(statusData.date);
|
|
1986
|
+
const expiresAt = createdAt + this.SWAP_EXPIRATION_TIME_MS;
|
|
1987
|
+
|
|
1988
|
+
/* amounts & rate */
|
|
1989
|
+
const amountFromEffective = statusData.amountFrom <span class="branch-0 cbranch-no" title="branch not covered" >?? statusData.expectedAmountFrom <span class="branch-0 cbranch-no" title="branch not covered" ></span>?? "0";</span>
|
|
1990
|
+
const amountToEffective = statusData.amountTo <span class="branch-0 cbranch-no" title="branch not covered" >?? statusData.expectedAmountTo <span class="branch-0 cbranch-no" title="branch not covered" ></span>?? null;</span>
|
|
1991
|
+
let rateVal = statusData.rate;
|
|
1992
|
+
|
|
1993
|
+
if (rateVal == null && amountFromEffective && amountToEffective) {
|
|
1994
|
+
rateVal = BigNumber(amountToEffective).div(amountFromEffective).toString();
|
|
1995
|
+
}
|
|
1996
|
+
if (rateVal == null) <span class="branch-0 cbranch-no" title="branch not covered" >rateVal = "0";</span>
|
|
1997
|
+
const rateTrimmed = AmountUtils.trim(rateVal, this._maxRateDigits);
|
|
1998
|
+
let toAmountCalculated = amountToEffective;
|
|
1999
|
+
if (toAmountCalculated == null <span class="branch-0 cbranch-no" title="branch not covered" >&& rateVal <span class="branch-0 cbranch-no" title="branch not covered" ></span>&& amountFromEffective)</span> <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2000
|
+
<span class="cstat-no" title="statement not covered" > toAmountCalculated = BigNumber(amountFromEffective).times(rateVal).toString();</span>
|
|
2001
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2002
|
+
if (toAmountCalculated == null) <span class="branch-0 cbranch-no" title="branch not covered" >toAmountCalculated = "0";</span>
|
|
2003
|
+
const toAmountTrimmed = AmountUtils.trim(toAmountCalculated, toCoin.digits);
|
|
2004
|
+
return new ExistingSwap(
|
|
2005
|
+
swapIds[swapIndex],
|
|
2006
|
+
this._mapGoexmeStatus(statusData.status),
|
|
2007
|
+
createdAt,
|
|
2008
|
+
expiresAt,
|
|
2009
|
+
-1,
|
|
2010
|
+
rateTrimmed,
|
|
2011
|
+
null,
|
|
2012
|
+
statusData.refundAddress ?? "",
|
|
2013
|
+
statusData.depositAddress,
|
|
2014
|
+
fromCoin,
|
|
2015
|
+
AmountUtils.trim(amountFromEffective, fromCoin.digits),
|
|
2016
|
+
statusData.depositHash,
|
|
2017
|
+
null,
|
|
2018
|
+
toCoin,
|
|
2019
|
+
toAmountTrimmed,
|
|
2020
|
+
statusData.txId,
|
|
2021
|
+
null,
|
|
2022
|
+
statusData.destinationAddress,
|
|
2023
|
+
this.id,
|
|
2024
|
+
statusData.depositTag || null,
|
|
2025
|
+
statusData.destinationTag || null,
|
|
2026
|
+
statusData.refundTag || null
|
|
2027
|
+
);
|
|
2028
|
+
})
|
|
2029
|
+
.filter(Boolean);
|
|
2030
|
+
|
|
2031
|
+
return { result: true, swaps };
|
|
2032
|
+
} catch (e) {
|
|
2033
|
+
if (e?.response?.status === 429)
|
|
2034
|
+
return { result: false, reason: SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED };
|
|
2035
|
+
<span class="cstat-no" title="statement not covered" ><span class="branch-0 cbranch-no" title="branch not covered" > improveAndRethrow(e, loggerSource);</span></span>
|
|
2036
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2037
|
+
}
|
|
2038
|
+
|
|
2039
|
+
async getPartnersList() {
|
|
2040
|
+
return [
|
|
2041
|
+
new Partner(
|
|
2042
|
+
this.id,
|
|
2043
|
+
"GoExme",
|
|
2044
|
+
"https://storage.swapspace.co/static/c9c19112c41a4caebf08196766eaead480e33bce2d4201c572a39c1800cb95e2.svg",
|
|
2045
|
+
KYC_LEVELS.LOW
|
|
2046
|
+
),
|
|
2047
|
+
];
|
|
2048
|
+
}
|
|
2049
|
+
|
|
2050
|
+
static _parseGoexmeDate(str = "") {
|
|
2051
|
+
const m = str.match(/^(\d{2})[.\-](\d{2})[.\-](\d{4}) (\d{2}):(\d{2}):(\d{2})$/);
|
|
2052
|
+
if (!m) <span class="branch-0 cbranch-no" title="branch not covered" >return Date.now();</span>
|
|
2053
|
+
|
|
2054
|
+
const [, dd, MM, yyyy, hh, mm, ss] = m;
|
|
2055
|
+
return Date.UTC(+yyyy, +MM - 1, +dd, +hh, +mm, +ss);
|
|
2056
|
+
}
|
|
2057
|
+
}
|
|
2058
|
+
</pre></td></tr></table></pre>
|
|
2059
|
+
|
|
2060
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
2061
|
+
</div><!-- /wrapper -->
|
|
2062
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
2063
|
+
Code coverage generated by
|
|
2064
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
2065
|
+
at 2025-07-14T10:50:38.498Z
|
|
2066
|
+
</div>
|
|
2067
|
+
<script src="../../../../prettify.js"></script>
|
|
2068
|
+
<script>
|
|
2069
|
+
window.onload = function () {
|
|
2070
|
+
prettyPrint();
|
|
2071
|
+
};
|
|
2072
|
+
</script>
|
|
2073
|
+
<script src="../../../../sorter.js"></script>
|
|
2074
|
+
<script src="../../../../block-navigation.js"></script>
|
|
2075
|
+
</body>
|
|
2076
|
+
</html>
|
|
2077
|
+
|