gitextract_79p3qz5m/ ├── .github/ │ ├── dependabot.yml │ └── workflows/ │ ├── android_test.yml │ ├── lint.yml │ ├── release.yml │ └── unit_test.yml ├── .github_changelog_generator ├── .gitignore ├── CHANGELOG.md ├── CODEOWNERS ├── Contributor License Agreement ├── HISTORY.md ├── LICENSE ├── README.md ├── build.gradle ├── cardscan-demo/ │ ├── .gitignore │ ├── README.md │ ├── build.gradle │ ├── proguard-rules.pro │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── com/ │ │ └── getbouncer/ │ │ └── cardscan/ │ │ └── demo/ │ │ └── ExampleInstrumentedTest.kt │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── getbouncer/ │ │ │ └── cardscan/ │ │ │ └── demo/ │ │ │ ├── LaunchActivity.java │ │ │ └── SingleActivityDemo.java │ │ └── res/ │ │ ├── drawable/ │ │ │ └── ic_launcher_background.xml │ │ ├── drawable-v24/ │ │ │ └── ic_launcher_foreground.xml │ │ ├── layout/ │ │ │ ├── activity_launch.xml │ │ │ └── activity_single_demo.xml │ │ ├── mipmap-anydpi-v26/ │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ └── values/ │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test/ │ └── java/ │ └── com/ │ └── getbouncer/ │ └── cardscan/ │ └── demo/ │ └── ExampleUnitTest.kt ├── cardscan-ui/ │ ├── .gitignore │ ├── README.md │ ├── build.gradle │ ├── consumer-rules.pro │ ├── deploy.gradle │ ├── proguard-rules.pro │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── com/ │ │ └── getbouncer/ │ │ └── cardscan/ │ │ └── ui/ │ │ └── ExampleInstrumentedTest.kt │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── getbouncer/ │ │ │ └── cardscan/ │ │ │ └── ui/ │ │ │ ├── CardScanActivity.kt │ │ │ ├── CardScanBaseActivity.kt │ │ │ ├── CardScanFlow.kt │ │ │ ├── CardScanSheet.kt │ │ │ ├── analyzer/ │ │ │ │ ├── CompletionLoopAnalyzer.kt │ │ │ │ └── MainLoopAnalyzer.kt │ │ │ ├── exception/ │ │ │ │ ├── StripeNetworkException.kt │ │ │ │ └── UnknownScanException.kt │ │ │ └── result/ │ │ │ ├── CompletionLoopAggregator.kt │ │ │ ├── MainLoopAggregator.kt │ │ │ └── MainLoopStateMachine.kt │ │ └── res/ │ │ └── values/ │ │ ├── colors.xml │ │ ├── dimensions.xml │ │ └── strings.xml │ └── test/ │ └── java/ │ └── com/ │ └── getbouncer/ │ └── cardscan/ │ └── ui/ │ └── result/ │ └── MainLoopStateMachineTest.kt ├── gradle/ │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── scan-camera/ │ ├── .gitignore │ ├── README.md │ ├── build.gradle │ ├── consumer-rules.pro │ ├── deploy.gradle │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ └── java/ │ └── com/ │ └── getbouncer/ │ └── scan/ │ └── camera/ │ ├── Camera1Adapter.kt │ ├── CameraAdapter.kt │ └── CameraSelector.kt ├── scan-camera2/ │ ├── .gitignore │ ├── build.gradle │ ├── deploy.gradle │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── com/ │ │ └── getbouncer/ │ │ └── scan/ │ │ └── camera/ │ │ └── extension/ │ │ └── UtilInstrumentationTest.kt │ ├── main/ │ │ ├── AndroidManifest.xml │ │ └── java/ │ │ └── com/ │ │ └── getbouncer/ │ │ └── scan/ │ │ └── camera/ │ │ └── extension/ │ │ ├── CameraAdapterImpl.kt │ │ ├── CameraDetails.kt │ │ └── Util.kt │ └── test/ │ └── java/ │ └── com/ │ └── getbouncer/ │ └── scan/ │ └── camera/ │ └── extension/ │ └── UtilTest.kt ├── scan-camerax/ │ ├── .gitignore │ ├── build.gradle │ ├── deploy.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ └── java/ │ └── com/ │ └── getbouncer/ │ └── scan/ │ └── camera/ │ └── extension/ │ ├── CameraAdapterImpl.kt │ ├── Image.kt │ └── Util.kt ├── scan-framework/ │ ├── .gitignore │ ├── README.md │ ├── build.gradle │ ├── consumer-rules.pro │ ├── deploy.gradle │ ├── proguard-rules.pro │ └── src/ │ ├── androidTest/ │ │ ├── assets/ │ │ │ └── sample_resource.tflite │ │ └── java/ │ │ └── com/ │ │ └── getbouncer/ │ │ └── scan/ │ │ └── framework/ │ │ ├── FetcherTest.kt │ │ ├── LoaderTest.kt │ │ ├── StorageTest.kt │ │ ├── api/ │ │ │ └── BouncerApiTest.kt │ │ ├── image/ │ │ │ └── BitmapExtensionsTest.kt │ │ ├── layout/ │ │ │ └── LayoutTest.kt │ │ └── util/ │ │ └── AppDetailsTest.kt │ ├── main/ │ │ ├── AndroidManifest.xml │ │ └── java/ │ │ └── com/ │ │ └── getbouncer/ │ │ └── scan/ │ │ └── framework/ │ │ ├── Analyzer.kt │ │ ├── Config.kt │ │ ├── Fetcher.kt │ │ ├── Loader.kt │ │ ├── Loop.kt │ │ ├── MachineState.kt │ │ ├── Result.kt │ │ ├── Scan.kt │ │ ├── Stat.kt │ │ ├── Storage.kt │ │ ├── TrackedImage.kt │ │ ├── api/ │ │ │ ├── BouncerApi.kt │ │ │ ├── Network.kt │ │ │ ├── NetworkResult.kt │ │ │ └── dto/ │ │ │ ├── AppInfo.kt │ │ │ ├── BouncerErrorResponse.kt │ │ │ ├── ClientDevice.kt │ │ │ ├── ClientStats.kt │ │ │ ├── ModelDetails.kt │ │ │ ├── ModelSignedUrlResponse.kt │ │ │ └── ValidateApiKeyResponse.kt │ │ ├── exception/ │ │ │ ├── ImageTypeNotSupportedException.kt │ │ │ └── InvalidBouncerApiKeyException.kt │ │ ├── image/ │ │ │ ├── BitmapExtensions.kt │ │ │ ├── ImageExtensions.kt │ │ │ ├── MLImage.kt │ │ │ ├── NV21Image.kt │ │ │ └── YuvImageExtensions.kt │ │ ├── interop/ │ │ │ ├── BlockingAnalyzer.kt │ │ │ ├── BlockingResult.kt │ │ │ └── JavaContinuation.kt │ │ ├── ml/ │ │ │ ├── ModelVersionTracker.kt │ │ │ ├── NonMaximumSuppression.kt │ │ │ ├── TensorFlowLiteAnalyzer.kt │ │ │ └── ssd/ │ │ │ ├── ClassifierScores.kt │ │ │ ├── RectForm.kt │ │ │ └── SizeAndCenter.kt │ │ ├── time/ │ │ │ ├── Clock.kt │ │ │ ├── Coroutine.kt │ │ │ ├── Duration.kt │ │ │ ├── Rate.kt │ │ │ └── Timer.kt │ │ └── util/ │ │ ├── AppDetails.kt │ │ ├── ArrayExtensions.kt │ │ ├── Device.kt │ │ ├── File.kt │ │ ├── FrameRateTracker.kt │ │ ├── FrameSaver.kt │ │ ├── ItemCounter.kt │ │ ├── Layout.kt │ │ ├── Memoize.kt │ │ └── Retry.kt │ └── test/ │ └── java/ │ └── com/ │ └── getbouncer/ │ └── scan/ │ └── framework/ │ ├── AnalyzerTest.kt │ ├── LoopTest.kt │ ├── interop/ │ │ ├── BlockingAnalyzerTest.java │ │ └── BlockingResultTest.java │ ├── time/ │ │ └── DurationTest.kt │ └── util/ │ ├── ArrayExtensionsTest.kt │ ├── FrameSaverTest.kt │ ├── ItemCounterTest.kt │ ├── MemoizeTest.kt │ └── RetryTest.kt ├── scan-payment/ │ ├── .gitignore │ ├── README.md │ ├── build.gradle │ ├── consumer-rules.pro │ ├── deploy.gradle │ ├── proguard-rules.pro │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── com/ │ │ └── getbouncer/ │ │ └── scan/ │ │ └── payment/ │ │ ├── ImageTest.kt │ │ ├── PaymentCardAndroidTest.kt │ │ └── ml/ │ │ ├── CardDetectTest.kt │ │ ├── ExpiryDetectTest.kt │ │ ├── SSDOcrTest.kt │ │ ├── TextDetectTest.kt │ │ └── ssd/ │ │ └── SSDTest.kt │ ├── main/ │ │ ├── AndroidManifest.xml │ │ └── java/ │ │ └── com/ │ │ └── getbouncer/ │ │ └── scan/ │ │ └── payment/ │ │ ├── FrameDetails.kt │ │ ├── Image.kt │ │ ├── ModelManager.kt │ │ ├── TextDetectModelManager.kt │ │ ├── analyzer/ │ │ │ └── NameAndExpiryAnalyzer.kt │ │ ├── card/ │ │ │ ├── CardExpiry.kt │ │ │ ├── CardIssuer.kt │ │ │ ├── CardType.kt │ │ │ ├── PanFormatter.kt │ │ │ ├── PanValidator.kt │ │ │ ├── PaymentCard.kt │ │ │ ├── PaymentCardUtils.kt │ │ │ └── RequiresMatchingCard.kt │ │ └── ml/ │ │ ├── AlphabetDetect.kt │ │ ├── AlphabetDetectModelManager.kt │ │ ├── CardDetect.kt │ │ ├── CardDetectModelManager.kt │ │ ├── ExpiryDetect.kt │ │ ├── ExpiryDetectModelManager.kt │ │ ├── SSDOcr.kt │ │ ├── SSDOcrModelManager.kt │ │ ├── TextDetect.kt │ │ ├── ssd/ │ │ │ ├── DetectionBox.kt │ │ │ ├── OcrPriorsGenerator.kt │ │ │ └── SSD.kt │ │ └── yolo/ │ │ └── Yolo.kt │ └── test/ │ └── java/ │ └── com/ │ └── getbouncer/ │ └── scan/ │ └── payment/ │ └── card/ │ └── PaymentCardTest.kt ├── scan-payment-full/ │ ├── .gitignore │ ├── build.gradle │ ├── deploy.gradle │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── com/ │ │ └── getbouncer/ │ │ └── scan/ │ │ └── payment/ │ │ └── ml/ │ │ ├── CardDetectTest.kt │ │ └── SSDOcrTest.kt │ └── main/ │ ├── AndroidManifest.xml │ └── assets/ │ ├── darknite_1_1_1_16.tflite │ └── ux_0_5_23_16.tflite ├── scan-payment-minimal/ │ ├── .gitignore │ ├── build.gradle │ ├── deploy.gradle │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── com/ │ │ └── getbouncer/ │ │ └── scan/ │ │ └── payment/ │ │ └── ml/ │ │ ├── CardDetectTest.kt │ │ └── SSDOcrTest.kt │ └── main/ │ ├── AndroidManifest.xml │ └── assets/ │ ├── UX.0.25.106.8.tflite │ └── mb2_brex_metal_synthetic_svhnextra_epoch_3_5_98_8.tflite ├── scan-ui/ │ ├── .gitignore │ ├── README.md │ ├── build.gradle │ ├── consumer-rules.pro │ ├── deploy.gradle │ ├── proguard-rules.pro │ └── src/ │ ├── androidTest/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── getbouncer/ │ │ │ └── scan/ │ │ │ └── ui/ │ │ │ ├── DebugOverlayTest.kt │ │ │ └── util/ │ │ │ └── ViewExtensionsTest.kt │ │ └── res/ │ │ └── values/ │ │ └── colors.xml │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── getbouncer/ │ │ │ └── scan/ │ │ │ └── ui/ │ │ │ ├── DebugOverlay.kt │ │ │ ├── ScanActivity.kt │ │ │ ├── ScanFlow.kt │ │ │ ├── SimpleScanActivity.kt │ │ │ ├── ViewFinderBackground.kt │ │ │ └── util/ │ │ │ └── ViewExtensions.kt │ │ └── res/ │ │ ├── drawable/ │ │ │ ├── bouncer_camera_swap_dark.xml │ │ │ ├── bouncer_camera_swap_light.xml │ │ │ ├── bouncer_card_background_correct.xml │ │ │ ├── bouncer_card_background_found.xml │ │ │ ├── bouncer_card_background_not_found.xml │ │ │ ├── bouncer_card_background_wrong.xml │ │ │ ├── bouncer_card_border_correct.xml │ │ │ ├── bouncer_card_border_found.xml │ │ │ ├── bouncer_card_border_found_long.xml │ │ │ ├── bouncer_card_border_not_found.xml │ │ │ ├── bouncer_card_border_wrong.xml │ │ │ ├── bouncer_close_button_dark.xml │ │ │ ├── bouncer_close_button_light.xml │ │ │ ├── bouncer_flash_off_dark.xml │ │ │ ├── bouncer_flash_off_light.xml │ │ │ ├── bouncer_flash_on_dark.xml │ │ │ ├── bouncer_flash_on_light.xml │ │ │ ├── bouncer_lock_dark.xml │ │ │ ├── bouncer_lock_light.xml │ │ │ ├── bouncer_logo_dark_background.xml │ │ │ └── bouncer_logo_light_background.xml │ │ └── values/ │ │ ├── colors.xml │ │ ├── dimensions.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test/ │ └── java/ │ └── com/ │ └── getbouncer/ │ └── scan/ │ └── ui/ │ └── ExampleUnitTest.kt ├── settings/ │ └── checkstyle.xml ├── settings.gradle ├── tensorflow-lite/ │ ├── .gitignore │ ├── build.gradle │ ├── deploy.gradle │ └── tensorflow-lite-all-models.aar └── tensorflow-lite-arm-only/ ├── .gitignore ├── build.gradle ├── deploy.gradle └── tensorflow-lite-all-models-arm-only.aar