From e1d1b6c1500460f51ce8cb3fa4133a16a558ad8e Mon Sep 17 00:00:00 2001 From: Mansour Date: Sun, 18 Jul 2021 16:44:30 +0430 Subject: [PATCH 01/32] Move all unity assets to dedicated folder --- .gitignore => unity/.gitignore | 0 .../ExternalDependencyManager/Editor/CHANGELOG.md | 0 .../Editor/Google.IOSResolver_v1.2.165.dll | Bin .../Editor/Google.JarResolver_v1.2.165.dll | Bin .../Google.PackageManagerResolver_v1.2.165.dll | Bin .../Editor/Google.VersionHandler.dll | Bin .../Editor/Google.VersionHandlerImpl_v1.2.165.dll | Bin .../ExternalDependencyManager/Editor/LICENSE | 0 .../ExternalDependencyManager/Editor/README.md | 0 ...-dependency-manager_version-1.2.165_manifest.txt | 0 {Assets => unity/Assets}/PluginVersion.cs | 0 .../Assets}/Poolakey/Demo/DemoScene.unity | 0 .../Poolakey/Demo/DemoSceneSettings.lighting | 0 .../Assets}/Poolakey/Demo/PoolakeyExample.cs | 0 .../Poolakey/Plugins/poolakeyunitybridge.aar | Bin .../Scripts/Callbacks/ConnectionCallbackProxy.cs | 0 .../Scripts/Callbacks/PaymentCallbackProxy.cs | 0 .../Editor/CafeBazaarPlugin_Dependencies.xml | 0 .../Assets}/Poolakey/Scripts/Payment.cs | 0 .../Poolakey/Scripts/PaymentConfiguration.cs | 0 .../Assets}/Poolakey/Scripts/SecurityCheck.cs | 0 .../Assets}/Poolakey/Textures/Circle.png | Bin .../Assets}/Poolakey/Textures/Login9Path.png | Bin .../Assets}/Poolakey/Textures/bazaar-logo.png | Bin {Packages => unity/Packages}/manifest.json | 0 {Packages => unity/Packages}/packages-lock.json | 0 .../AndroidResolverDependencies.xml | 0 .../ProjectSettings}/AudioManager.asset | 0 .../ProjectSettings}/ClusterInputManager.asset | 0 .../ProjectSettings}/DynamicsManager.asset | 0 .../ProjectSettings}/EditorBuildSettings.asset | 0 .../ProjectSettings}/EditorSettings.asset | 0 .../ProjectSettings}/GraphicsSettings.asset | 0 .../ProjectSettings}/GvhProjectSettings.xml | 0 .../ProjectSettings}/InputManager.asset | 0 .../ProjectSettings}/NavMeshAreas.asset | 0 .../ProjectSettings}/PackageManagerSettings.asset | 0 .../ProjectSettings}/Physics2DSettings.asset | 0 .../ProjectSettings}/PresetManager.asset | 0 .../ProjectSettings}/ProjectSettings.asset | 0 .../ProjectSettings}/ProjectVersion.txt | 0 .../ProjectSettings}/QualitySettings.asset | 0 .../ProjectSettings}/TagManager.asset | 0 .../ProjectSettings}/TimeManager.asset | 0 .../ProjectSettings}/UnityConnectSettings.asset | 0 .../ProjectSettings}/VFXManager.asset | 0 .../ProjectSettings}/VersionControlSettings.asset | 0 .../ProjectSettings}/XRSettings.asset | 0 unity/README.md | 1 + 49 files changed, 1 insertion(+) rename .gitignore => unity/.gitignore (100%) rename {Assets => unity/Assets}/ExternalDependencyManager/Editor/CHANGELOG.md (100%) mode change 100755 => 100644 rename {Assets => unity/Assets}/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.165.dll (100%) mode change 100755 => 100644 rename {Assets => unity/Assets}/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.165.dll (100%) mode change 100755 => 100644 rename {Assets => unity/Assets}/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.165.dll (100%) mode change 100755 => 100644 rename {Assets => unity/Assets}/ExternalDependencyManager/Editor/Google.VersionHandler.dll (100%) mode change 100755 => 100644 rename {Assets => unity/Assets}/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.165.dll (100%) mode change 100755 => 100644 rename {Assets => unity/Assets}/ExternalDependencyManager/Editor/LICENSE (100%) mode change 100755 => 100644 rename {Assets => unity/Assets}/ExternalDependencyManager/Editor/README.md (100%) mode change 100755 => 100644 rename {Assets => unity/Assets}/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.165_manifest.txt (100%) mode change 100755 => 100644 rename {Assets => unity/Assets}/PluginVersion.cs (100%) rename {Assets => unity/Assets}/Poolakey/Demo/DemoScene.unity (100%) rename {Assets => unity/Assets}/Poolakey/Demo/DemoSceneSettings.lighting (100%) rename {Assets => unity/Assets}/Poolakey/Demo/PoolakeyExample.cs (100%) rename {Assets => unity/Assets}/Poolakey/Plugins/poolakeyunitybridge.aar (100%) rename {Assets => unity/Assets}/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs (100%) rename {Assets => unity/Assets}/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs (100%) rename {Assets => unity/Assets}/Poolakey/Scripts/Editor/CafeBazaarPlugin_Dependencies.xml (100%) rename {Assets => unity/Assets}/Poolakey/Scripts/Payment.cs (100%) rename {Assets => unity/Assets}/Poolakey/Scripts/PaymentConfiguration.cs (100%) rename {Assets => unity/Assets}/Poolakey/Scripts/SecurityCheck.cs (100%) rename {Assets => unity/Assets}/Poolakey/Textures/Circle.png (100%) rename {Assets => unity/Assets}/Poolakey/Textures/Login9Path.png (100%) rename {Assets => unity/Assets}/Poolakey/Textures/bazaar-logo.png (100%) rename {Packages => unity/Packages}/manifest.json (100%) rename {Packages => unity/Packages}/packages-lock.json (100%) rename {ProjectSettings => unity/ProjectSettings}/AndroidResolverDependencies.xml (100%) rename {ProjectSettings => unity/ProjectSettings}/AudioManager.asset (100%) rename {ProjectSettings => unity/ProjectSettings}/ClusterInputManager.asset (100%) rename {ProjectSettings => unity/ProjectSettings}/DynamicsManager.asset (100%) rename {ProjectSettings => unity/ProjectSettings}/EditorBuildSettings.asset (100%) rename {ProjectSettings => unity/ProjectSettings}/EditorSettings.asset (100%) rename {ProjectSettings => unity/ProjectSettings}/GraphicsSettings.asset (100%) rename {ProjectSettings => unity/ProjectSettings}/GvhProjectSettings.xml (100%) rename {ProjectSettings => unity/ProjectSettings}/InputManager.asset (100%) rename {ProjectSettings => unity/ProjectSettings}/NavMeshAreas.asset (100%) rename {ProjectSettings => unity/ProjectSettings}/PackageManagerSettings.asset (100%) rename {ProjectSettings => unity/ProjectSettings}/Physics2DSettings.asset (100%) rename {ProjectSettings => unity/ProjectSettings}/PresetManager.asset (100%) rename {ProjectSettings => unity/ProjectSettings}/ProjectSettings.asset (100%) rename {ProjectSettings => unity/ProjectSettings}/ProjectVersion.txt (100%) rename {ProjectSettings => unity/ProjectSettings}/QualitySettings.asset (100%) rename {ProjectSettings => unity/ProjectSettings}/TagManager.asset (100%) rename {ProjectSettings => unity/ProjectSettings}/TimeManager.asset (100%) rename {ProjectSettings => unity/ProjectSettings}/UnityConnectSettings.asset (100%) rename {ProjectSettings => unity/ProjectSettings}/VFXManager.asset (100%) rename {ProjectSettings => unity/ProjectSettings}/VersionControlSettings.asset (100%) rename {ProjectSettings => unity/ProjectSettings}/XRSettings.asset (100%) create mode 100644 unity/README.md diff --git a/.gitignore b/unity/.gitignore similarity index 100% rename from .gitignore rename to unity/.gitignore diff --git a/Assets/ExternalDependencyManager/Editor/CHANGELOG.md b/unity/Assets/ExternalDependencyManager/Editor/CHANGELOG.md old mode 100755 new mode 100644 similarity index 100% rename from Assets/ExternalDependencyManager/Editor/CHANGELOG.md rename to unity/Assets/ExternalDependencyManager/Editor/CHANGELOG.md diff --git a/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.165.dll b/unity/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.165.dll old mode 100755 new mode 100644 similarity index 100% rename from Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.165.dll rename to unity/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.165.dll diff --git a/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.165.dll b/unity/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.165.dll old mode 100755 new mode 100644 similarity index 100% rename from Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.165.dll rename to unity/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.165.dll diff --git a/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.165.dll b/unity/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.165.dll old mode 100755 new mode 100644 similarity index 100% rename from Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.165.dll rename to unity/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.165.dll diff --git a/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll b/unity/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll old mode 100755 new mode 100644 similarity index 100% rename from Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll rename to unity/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll diff --git a/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.165.dll b/unity/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.165.dll old mode 100755 new mode 100644 similarity index 100% rename from Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.165.dll rename to unity/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.165.dll diff --git a/Assets/ExternalDependencyManager/Editor/LICENSE b/unity/Assets/ExternalDependencyManager/Editor/LICENSE old mode 100755 new mode 100644 similarity index 100% rename from Assets/ExternalDependencyManager/Editor/LICENSE rename to unity/Assets/ExternalDependencyManager/Editor/LICENSE diff --git a/Assets/ExternalDependencyManager/Editor/README.md b/unity/Assets/ExternalDependencyManager/Editor/README.md old mode 100755 new mode 100644 similarity index 100% rename from Assets/ExternalDependencyManager/Editor/README.md rename to unity/Assets/ExternalDependencyManager/Editor/README.md diff --git a/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.165_manifest.txt b/unity/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.165_manifest.txt old mode 100755 new mode 100644 similarity index 100% rename from Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.165_manifest.txt rename to unity/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.165_manifest.txt diff --git a/Assets/PluginVersion.cs b/unity/Assets/PluginVersion.cs similarity index 100% rename from Assets/PluginVersion.cs rename to unity/Assets/PluginVersion.cs diff --git a/Assets/Poolakey/Demo/DemoScene.unity b/unity/Assets/Poolakey/Demo/DemoScene.unity similarity index 100% rename from Assets/Poolakey/Demo/DemoScene.unity rename to unity/Assets/Poolakey/Demo/DemoScene.unity diff --git a/Assets/Poolakey/Demo/DemoSceneSettings.lighting b/unity/Assets/Poolakey/Demo/DemoSceneSettings.lighting similarity index 100% rename from Assets/Poolakey/Demo/DemoSceneSettings.lighting rename to unity/Assets/Poolakey/Demo/DemoSceneSettings.lighting diff --git a/Assets/Poolakey/Demo/PoolakeyExample.cs b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs similarity index 100% rename from Assets/Poolakey/Demo/PoolakeyExample.cs rename to unity/Assets/Poolakey/Demo/PoolakeyExample.cs diff --git a/Assets/Poolakey/Plugins/poolakeyunitybridge.aar b/unity/Assets/Poolakey/Plugins/poolakeyunitybridge.aar similarity index 100% rename from Assets/Poolakey/Plugins/poolakeyunitybridge.aar rename to unity/Assets/Poolakey/Plugins/poolakeyunitybridge.aar diff --git a/Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs similarity index 100% rename from Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs rename to unity/Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs diff --git a/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs similarity index 100% rename from Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs rename to unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs diff --git a/Assets/Poolakey/Scripts/Editor/CafeBazaarPlugin_Dependencies.xml b/unity/Assets/Poolakey/Scripts/Editor/CafeBazaarPlugin_Dependencies.xml similarity index 100% rename from Assets/Poolakey/Scripts/Editor/CafeBazaarPlugin_Dependencies.xml rename to unity/Assets/Poolakey/Scripts/Editor/CafeBazaarPlugin_Dependencies.xml diff --git a/Assets/Poolakey/Scripts/Payment.cs b/unity/Assets/Poolakey/Scripts/Payment.cs similarity index 100% rename from Assets/Poolakey/Scripts/Payment.cs rename to unity/Assets/Poolakey/Scripts/Payment.cs diff --git a/Assets/Poolakey/Scripts/PaymentConfiguration.cs b/unity/Assets/Poolakey/Scripts/PaymentConfiguration.cs similarity index 100% rename from Assets/Poolakey/Scripts/PaymentConfiguration.cs rename to unity/Assets/Poolakey/Scripts/PaymentConfiguration.cs diff --git a/Assets/Poolakey/Scripts/SecurityCheck.cs b/unity/Assets/Poolakey/Scripts/SecurityCheck.cs similarity index 100% rename from Assets/Poolakey/Scripts/SecurityCheck.cs rename to unity/Assets/Poolakey/Scripts/SecurityCheck.cs diff --git a/Assets/Poolakey/Textures/Circle.png b/unity/Assets/Poolakey/Textures/Circle.png similarity index 100% rename from Assets/Poolakey/Textures/Circle.png rename to unity/Assets/Poolakey/Textures/Circle.png diff --git a/Assets/Poolakey/Textures/Login9Path.png b/unity/Assets/Poolakey/Textures/Login9Path.png similarity index 100% rename from Assets/Poolakey/Textures/Login9Path.png rename to unity/Assets/Poolakey/Textures/Login9Path.png diff --git a/Assets/Poolakey/Textures/bazaar-logo.png b/unity/Assets/Poolakey/Textures/bazaar-logo.png similarity index 100% rename from Assets/Poolakey/Textures/bazaar-logo.png rename to unity/Assets/Poolakey/Textures/bazaar-logo.png diff --git a/Packages/manifest.json b/unity/Packages/manifest.json similarity index 100% rename from Packages/manifest.json rename to unity/Packages/manifest.json diff --git a/Packages/packages-lock.json b/unity/Packages/packages-lock.json similarity index 100% rename from Packages/packages-lock.json rename to unity/Packages/packages-lock.json diff --git a/ProjectSettings/AndroidResolverDependencies.xml b/unity/ProjectSettings/AndroidResolverDependencies.xml similarity index 100% rename from ProjectSettings/AndroidResolverDependencies.xml rename to unity/ProjectSettings/AndroidResolverDependencies.xml diff --git a/ProjectSettings/AudioManager.asset b/unity/ProjectSettings/AudioManager.asset similarity index 100% rename from ProjectSettings/AudioManager.asset rename to unity/ProjectSettings/AudioManager.asset diff --git a/ProjectSettings/ClusterInputManager.asset b/unity/ProjectSettings/ClusterInputManager.asset similarity index 100% rename from ProjectSettings/ClusterInputManager.asset rename to unity/ProjectSettings/ClusterInputManager.asset diff --git a/ProjectSettings/DynamicsManager.asset b/unity/ProjectSettings/DynamicsManager.asset similarity index 100% rename from ProjectSettings/DynamicsManager.asset rename to unity/ProjectSettings/DynamicsManager.asset diff --git a/ProjectSettings/EditorBuildSettings.asset b/unity/ProjectSettings/EditorBuildSettings.asset similarity index 100% rename from ProjectSettings/EditorBuildSettings.asset rename to unity/ProjectSettings/EditorBuildSettings.asset diff --git a/ProjectSettings/EditorSettings.asset b/unity/ProjectSettings/EditorSettings.asset similarity index 100% rename from ProjectSettings/EditorSettings.asset rename to unity/ProjectSettings/EditorSettings.asset diff --git a/ProjectSettings/GraphicsSettings.asset b/unity/ProjectSettings/GraphicsSettings.asset similarity index 100% rename from ProjectSettings/GraphicsSettings.asset rename to unity/ProjectSettings/GraphicsSettings.asset diff --git a/ProjectSettings/GvhProjectSettings.xml b/unity/ProjectSettings/GvhProjectSettings.xml similarity index 100% rename from ProjectSettings/GvhProjectSettings.xml rename to unity/ProjectSettings/GvhProjectSettings.xml diff --git a/ProjectSettings/InputManager.asset b/unity/ProjectSettings/InputManager.asset similarity index 100% rename from ProjectSettings/InputManager.asset rename to unity/ProjectSettings/InputManager.asset diff --git a/ProjectSettings/NavMeshAreas.asset b/unity/ProjectSettings/NavMeshAreas.asset similarity index 100% rename from ProjectSettings/NavMeshAreas.asset rename to unity/ProjectSettings/NavMeshAreas.asset diff --git a/ProjectSettings/PackageManagerSettings.asset b/unity/ProjectSettings/PackageManagerSettings.asset similarity index 100% rename from ProjectSettings/PackageManagerSettings.asset rename to unity/ProjectSettings/PackageManagerSettings.asset diff --git a/ProjectSettings/Physics2DSettings.asset b/unity/ProjectSettings/Physics2DSettings.asset similarity index 100% rename from ProjectSettings/Physics2DSettings.asset rename to unity/ProjectSettings/Physics2DSettings.asset diff --git a/ProjectSettings/PresetManager.asset b/unity/ProjectSettings/PresetManager.asset similarity index 100% rename from ProjectSettings/PresetManager.asset rename to unity/ProjectSettings/PresetManager.asset diff --git a/ProjectSettings/ProjectSettings.asset b/unity/ProjectSettings/ProjectSettings.asset similarity index 100% rename from ProjectSettings/ProjectSettings.asset rename to unity/ProjectSettings/ProjectSettings.asset diff --git a/ProjectSettings/ProjectVersion.txt b/unity/ProjectSettings/ProjectVersion.txt similarity index 100% rename from ProjectSettings/ProjectVersion.txt rename to unity/ProjectSettings/ProjectVersion.txt diff --git a/ProjectSettings/QualitySettings.asset b/unity/ProjectSettings/QualitySettings.asset similarity index 100% rename from ProjectSettings/QualitySettings.asset rename to unity/ProjectSettings/QualitySettings.asset diff --git a/ProjectSettings/TagManager.asset b/unity/ProjectSettings/TagManager.asset similarity index 100% rename from ProjectSettings/TagManager.asset rename to unity/ProjectSettings/TagManager.asset diff --git a/ProjectSettings/TimeManager.asset b/unity/ProjectSettings/TimeManager.asset similarity index 100% rename from ProjectSettings/TimeManager.asset rename to unity/ProjectSettings/TimeManager.asset diff --git a/ProjectSettings/UnityConnectSettings.asset b/unity/ProjectSettings/UnityConnectSettings.asset similarity index 100% rename from ProjectSettings/UnityConnectSettings.asset rename to unity/ProjectSettings/UnityConnectSettings.asset diff --git a/ProjectSettings/VFXManager.asset b/unity/ProjectSettings/VFXManager.asset similarity index 100% rename from ProjectSettings/VFXManager.asset rename to unity/ProjectSettings/VFXManager.asset diff --git a/ProjectSettings/VersionControlSettings.asset b/unity/ProjectSettings/VersionControlSettings.asset similarity index 100% rename from ProjectSettings/VersionControlSettings.asset rename to unity/ProjectSettings/VersionControlSettings.asset diff --git a/ProjectSettings/XRSettings.asset b/unity/ProjectSettings/XRSettings.asset similarity index 100% rename from ProjectSettings/XRSettings.asset rename to unity/ProjectSettings/XRSettings.asset diff --git a/unity/README.md b/unity/README.md new file mode 100644 index 0000000..b5d3f0b --- /dev/null +++ b/unity/README.md @@ -0,0 +1 @@ +# PoolakeyUnitySdk From 329260beb4e661705b709b1d886914499f064128 Mon Sep 17 00:00:00 2001 From: Mansour Date: Sun, 18 Jul 2021 16:52:49 +0430 Subject: [PATCH 02/32] Move java interface into public repo --- android/.gitignore | 10 + android/build.gradle | 60 ++++++ android/gradle.properties | 21 +++ android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54329 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + android/gradlew | 172 ++++++++++++++++++ android/gradlew.bat | 84 +++++++++ android/settings.gradle | 1 + .../bazaar/ExampleInstrumentedTest.kt | 24 +++ android/src/main/AndroidManifest.xml | 12 ++ .../com/farsitel/bazaar/CallbackHolder.kt | 9 + .../com/farsitel/bazaar/PaymentActivity.kt | 158 ++++++++++++++++ .../com/farsitel/bazaar/PoolakeyBridge.java | 53 ++++++ .../com/farsitel/bazaar/PoolakeyJavaBridge.kt | 31 ++++ .../bazaar/callback/ConnectionCallback.java | 10 + .../bazaar/callback/ConsumeCallback.java | 4 + .../bazaar/callback/PaymentCallback.java | 22 +++ .../com/farsitel/bazaar/ExampleUnitTest.kt | 17 ++ 18 files changed, 694 insertions(+) create mode 100644 android/.gitignore create mode 100644 android/build.gradle create mode 100644 android/gradle.properties create mode 100644 android/gradle/wrapper/gradle-wrapper.jar create mode 100644 android/gradle/wrapper/gradle-wrapper.properties create mode 100644 android/gradlew create mode 100644 android/gradlew.bat create mode 100644 android/settings.gradle create mode 100644 android/src/androidTest/java/com/farsitel/bazaar/ExampleInstrumentedTest.kt create mode 100644 android/src/main/AndroidManifest.xml create mode 100644 android/src/main/java/com/farsitel/bazaar/CallbackHolder.kt create mode 100644 android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt create mode 100644 android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java create mode 100644 android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt create mode 100644 android/src/main/java/com/farsitel/bazaar/callback/ConnectionCallback.java create mode 100644 android/src/main/java/com/farsitel/bazaar/callback/ConsumeCallback.java create mode 100644 android/src/main/java/com/farsitel/bazaar/callback/PaymentCallback.java create mode 100644 android/src/test/java/com/farsitel/bazaar/ExampleUnitTest.kt diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..fba0afc --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,10 @@ +*.iml +/app/production +.gradle +/local.properties +.idea +.DS_Store +/build +/captures +.externalNativeBuild +*.ks \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..bfdcd76 --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,60 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + ext.kotlin_version = '1.3.72' + repositories { + google() + jcenter() + } + dependencies { + classpath "com.android.tools.build:gradle:4.1.2" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + google() + jcenter() + maven { url 'https://jitpack.io' } + } +} + +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' + +android { + compileSdkVersion 29 + buildToolsVersion '29.0.2' + + defaultConfig { + minSdkVersion 9 + targetSdkVersion 29 + versionCode 1 + versionName "1.0" + } + + compileOptions + { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + + +dependencies { + implementation "com.github.cafebazaar.Poolakey:poolakey:1.1.0-beta02" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} + +task deleteJar(type: Delete) { + delete 'Poolakey.jar' +} +task createJar(type: Copy) { + from('build/intermediates/packaged-classes/release/') + into('build') + include('classes.jar') + rename('classes.jar', 'Poolakey.jar') +} \ No newline at end of file diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..98bed16 --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,21 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app"s APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Automatically convert third-party libraries to use AndroidX +android.enableJetifier=true +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official \ No newline at end of file diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..f6b961fd5a86aa5fbfe90f707c3138408be7c718 GIT binary patch literal 54329 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

<5G2M1WZP5 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 F{|7XC?P&l2 literal 0 HcmV?d00001 diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..4f80cc6 --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Tue Jun 29 12:14:03 IRDT 2021 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip diff --git a/android/gradlew b/android/gradlew new file mode 100644 index 0000000..cccdd3d --- /dev/null +++ b/android/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat new file mode 100644 index 0000000..f955316 --- /dev/null +++ b/android/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..983dec7 --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1 @@ +rootProject.name = "poolakeyunitybridge" \ No newline at end of file diff --git a/android/src/androidTest/java/com/farsitel/bazaar/ExampleInstrumentedTest.kt b/android/src/androidTest/java/com/farsitel/bazaar/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..3207e5f --- /dev/null +++ b/android/src/androidTest/java/com/farsitel/bazaar/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.farsitel.bazaar + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.farsitel.bazaar", appContext.packageName) + } +} \ No newline at end of file diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml new file mode 100644 index 0000000..115a21e --- /dev/null +++ b/android/src/main/AndroidManifest.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/android/src/main/java/com/farsitel/bazaar/CallbackHolder.kt b/android/src/main/java/com/farsitel/bazaar/CallbackHolder.kt new file mode 100644 index 0000000..b739ab0 --- /dev/null +++ b/android/src/main/java/com/farsitel/bazaar/CallbackHolder.kt @@ -0,0 +1,9 @@ +package com.farsitel.bazaar + +import com.farsitel.bazaar.callback.ConsumeCallback +import com.farsitel.bazaar.callback.PaymentCallback + +object CallbackHolder { + var paymentCallback: PaymentCallback? = null + var consumeCallback: ConsumeCallback? = null +} \ No newline at end of file diff --git a/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt b/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt new file mode 100644 index 0000000..22e0ca6 --- /dev/null +++ b/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt @@ -0,0 +1,158 @@ +package com.farsitel.bazaar + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import androidx.fragment.app.FragmentActivity +import ir.cafebazaar.poolakey.Connection +import ir.cafebazaar.poolakey.Payment +import ir.cafebazaar.poolakey.config.PaymentConfiguration +import ir.cafebazaar.poolakey.config.SecurityCheck +import ir.cafebazaar.poolakey.request.PurchaseRequest +import java.security.InvalidParameterException + +class PaymentActivity : FragmentActivity() { + + private lateinit var connection: Connection + private lateinit var payment: Payment + + private var rsaPublicKey: String? = null + private var productId: String? = null + private var payload: String? = null + private var command: Command? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + initArgs() + when (command) { + Command.PurchaseProduct -> purchaseProduct() + Command.Subscribe -> subscribeProduct() + else -> throw InvalidParameterException("Undefined command: $command") + } + } + + private fun purchaseProduct() { + val securityCheck = rsaPublicKey?.let { + SecurityCheck.Enable(it) + } ?: SecurityCheck.Disable + val paymentConfig = PaymentConfiguration(localSecurityCheck = securityCheck) + payment = Payment(context = this, config = paymentConfig) + connection = payment.connect { + connectionFailed { + CallbackHolder.paymentCallback?.onFailure(it) + finish() + } + connectionSucceed { + payment.purchaseProduct( + this@PaymentActivity, + PurchaseRequest(productId!!, REQUEST_CODE, payload) + ) { + purchaseFlowBegan { + // Bazaar's billing screen has opened successfully + } + failedToBeginFlow { throwable -> + // Failed to open Bazaar's billing screen + CallbackHolder.paymentCallback?.onFailure(throwable) + finish() + } + } + } + disconnected { + finish() + } + } + } + + private fun subscribeProduct() { + val securityCheck = rsaPublicKey?.let { + SecurityCheck.Enable(it) + } ?: SecurityCheck.Disable + val paymentConfig = PaymentConfiguration(localSecurityCheck = securityCheck) + payment = Payment(context = this, config = paymentConfig) + connection = payment.connect { + connectionFailed { + CallbackHolder.paymentCallback?.onFailure(it) + finish() + } + connectionSucceed { + payment.subscribeProduct( + this@PaymentActivity, + PurchaseRequest(productId!!, REQUEST_CODE, payload) + ) { + purchaseFlowBegan { + // Bazaar's billing screen has opened successfully + } + failedToBeginFlow { throwable -> + // Failed to open Bazaar's billing screen + CallbackHolder.paymentCallback?.onFailure(throwable) + finish() + } + } + } + disconnected { finish() } + } + } + + private fun initArgs() { + rsaPublicKey = intent.extras?.getString(KEY_RSA_PUBLIC_KEY) + productId = intent.extras?.getString(KEY_PRODUCT_ID) + payload = intent.extras?.getString(KEY_PAYLOAD) + command = Command.valueOf(requireNotNull(intent.extras?.getString(KEY_COMMAND))) + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + payment.onActivityResult(requestCode, resultCode, data) { + purchaseSucceed { purchaseEntity -> + // User purchased the product + CallbackHolder.paymentCallback?.onSuccess(purchaseEntity) + finish() + } + purchaseCanceled { + // User canceled the purchase + CallbackHolder.paymentCallback?.onCancel() + finish() + } + purchaseFailed { throwable -> + CallbackHolder.paymentCallback?.onFailure(throwable) + finish() + } + } + } + + override fun onDestroy() { + connection.disconnect() + super.onDestroy() + } + + companion object { + + private const val REQUEST_CODE: Int = 1000 + private const val KEY_RSA_PUBLIC_KEY = "rsaPublicKey" + private const val KEY_PRODUCT_ID = "productId" + private const val KEY_PAYLOAD = "payload" + private const val KEY_COMMAND = "command" + + @JvmStatic + fun start( + activity: Activity, + command: Command, + rsaPublicKey: String?, + productId: String, + payload: String? + ) { + val intent = Intent(activity, PaymentActivity::class.java) + intent.putExtra(KEY_RSA_PUBLIC_KEY, rsaPublicKey) + intent.putExtra(KEY_PRODUCT_ID, productId) + intent.putExtra(KEY_PAYLOAD, payload) + intent.putExtra(KEY_COMMAND, command.name) + activity.startActivity(intent) + } + } + + enum class Command { + PurchaseProduct, + Subscribe, + Consume + } +} \ No newline at end of file diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java new file mode 100644 index 0000000..e2a552e --- /dev/null +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java @@ -0,0 +1,53 @@ +package com.farsitel.bazaar; + +import android.app.Activity; + +import com.farsitel.bazaar.callback.ConnectionCallback; +import com.farsitel.bazaar.callback.PaymentCallback; + +import ir.cafebazaar.poolakey.Payment; + +public class PoolakeyBridge { + + public static Payment connect( + Activity activity, + String rsaPublicKey, + ConnectionCallback callback + ) { + return PoolakeyJavaBridge.INSTANCE.connect(activity, rsaPublicKey, callback); + } + + public static void purchaseProduct( + Activity activity, + String rsaPublicKey, + String productId, + String payload, + PaymentCallback paymentCallback + ) { + CallbackHolder.INSTANCE.setPaymentCallback(paymentCallback); + PaymentActivity.start( + activity, + PaymentActivity.Command.PurchaseProduct, + rsaPublicKey, + productId, + payload + ); + } + + public static void subscribeProduct( + Activity activity, + String rsaPublicKey, + String productId, + String payload, + PaymentCallback paymentCallback + ) { + CallbackHolder.INSTANCE.setPaymentCallback(paymentCallback); + PaymentActivity.start( + activity, + PaymentActivity.Command.Subscribe, + rsaPublicKey, + productId, + payload + ); + } +} diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt b/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt new file mode 100644 index 0000000..2a5d3b0 --- /dev/null +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt @@ -0,0 +1,31 @@ +package com.farsitel.bazaar + +import android.content.Context +import com.farsitel.bazaar.callback.ConnectionCallback +import ir.cafebazaar.poolakey.Payment +import ir.cafebazaar.poolakey.config.PaymentConfiguration +import ir.cafebazaar.poolakey.config.SecurityCheck + +object PoolakeyJavaBridge { + fun connect(context: Context, rsaPublicKey: String?, callback: ConnectionCallback): Payment { + val securityCheck = if (rsaPublicKey != null) { + SecurityCheck.Enable(rsaPublicKey) + } else { + SecurityCheck.Disable + } + val paymentConfig = PaymentConfiguration(localSecurityCheck = securityCheck) + val payment = Payment(context = context, config = paymentConfig) + payment.connect { + connectionFailed { + callback.onFailure() + } + connectionSucceed { + callback.onConnect() + } + disconnected { + callback.onDisconnect() + } + } + return payment + } +} \ No newline at end of file diff --git a/android/src/main/java/com/farsitel/bazaar/callback/ConnectionCallback.java b/android/src/main/java/com/farsitel/bazaar/callback/ConnectionCallback.java new file mode 100644 index 0000000..91aa211 --- /dev/null +++ b/android/src/main/java/com/farsitel/bazaar/callback/ConnectionCallback.java @@ -0,0 +1,10 @@ +package com.farsitel.bazaar.callback; + +public interface ConnectionCallback { + + void onConnect(); + + void onDisconnect(); + + void onFailure(); +} \ No newline at end of file diff --git a/android/src/main/java/com/farsitel/bazaar/callback/ConsumeCallback.java b/android/src/main/java/com/farsitel/bazaar/callback/ConsumeCallback.java new file mode 100644 index 0000000..c5eb527 --- /dev/null +++ b/android/src/main/java/com/farsitel/bazaar/callback/ConsumeCallback.java @@ -0,0 +1,4 @@ +package com.farsitel.bazaar.callback; + +public interface ConsumeCallback { +} diff --git a/android/src/main/java/com/farsitel/bazaar/callback/PaymentCallback.java b/android/src/main/java/com/farsitel/bazaar/callback/PaymentCallback.java new file mode 100644 index 0000000..45ac7c2 --- /dev/null +++ b/android/src/main/java/com/farsitel/bazaar/callback/PaymentCallback.java @@ -0,0 +1,22 @@ +package com.farsitel.bazaar.callback; + +import com.farsitel.bazaar.CallbackHolder; + +import org.jetbrains.annotations.NotNull; + +import ir.cafebazaar.poolakey.entity.PurchaseInfo; + +public interface PaymentCallback { + + default void onSuccess(PurchaseInfo purchaseEntity) { + CallbackHolder.INSTANCE.setPaymentCallback(null); + } + + default void onCancel() { + CallbackHolder.INSTANCE.setPaymentCallback(null); + } + + default void onFailure(@NotNull Throwable throwable) { + CallbackHolder.INSTANCE.setPaymentCallback(null); + } +} diff --git a/android/src/test/java/com/farsitel/bazaar/ExampleUnitTest.kt b/android/src/test/java/com/farsitel/bazaar/ExampleUnitTest.kt new file mode 100644 index 0000000..fb9c9e5 --- /dev/null +++ b/android/src/test/java/com/farsitel/bazaar/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package com.farsitel.bazaar + +import org.junit.Test + +import org.junit.Assert.* + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} \ No newline at end of file From 5e83317a07ed8d10876692c4993cd8d19f761d85 Mon Sep 17 00:00:00 2001 From: Mansour Date: Sun, 18 Jul 2021 16:53:38 +0430 Subject: [PATCH 03/32] Use instance of bridge --- .../com/farsitel/bazaar/PoolakeyBridge.java | 42 +++++++++++++++++- .../Plugins/poolakeyunitybridge-release.aar | Bin 0 -> 36816 bytes unity/Assets/Poolakey/Scripts/Payment.cs | 18 ++++---- 3 files changed, 50 insertions(+), 10 deletions(-) create mode 100644 unity/Assets/Poolakey/Plugins/poolakeyunitybridge-release.aar diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java index e2a552e..29363b8 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java @@ -1,13 +1,53 @@ package com.farsitel.bazaar; import android.app.Activity; +import android.util.Log; import com.farsitel.bazaar.callback.ConnectionCallback; import com.farsitel.bazaar.callback.PaymentCallback; -import ir.cafebazaar.poolakey.Payment; +import java.lang.reflect.Field; public class PoolakeyBridge { + private static final String TAG = "PoolakeyBridge"; + private static PoolakeyBridge instance; + + private Class mUnityPlayerClass; + private Field mUnityPlayerActivityField; + + private PoolakeyBridge() { + try { + // Using reflection to remove reference to Unity library. + mUnityPlayerClass = Class.forName("com.unity3d.player.UnityPlayer"); + mUnityPlayerActivityField = mUnityPlayerClass.getField("currentActivity"); + } catch (ClassNotFoundException e) { + Log.i(TAG, "Could not find UnityPlayer class: " + e.getMessage()); + } catch (NoSuchFieldException e) { + Log.i(TAG, "Could not find currentActivity field: " + e.getMessage()); + } catch (Exception e) { + Log.i(TAG, "Unknown exception occurred locating UnitySendMessage(): " + e.getMessage()); + } + } + + public static PoolakeyBridge getInstance() { + if (instance == null) { + instance = new PoolakeyBridge(); + } + return instance; + } + + private Activity getCurrentActivity() { + if (mUnityPlayerActivityField != null) + try { + Activity activity = (Activity) mUnityPlayerActivityField.get(mUnityPlayerClass); + if (activity == null) + Log.e(TAG, "The Unity Activity does not exist. This could be due to a low memory situation"); + return activity; + } catch (Exception e) { + Log.i(TAG, "Error getting currentActivity: " + e.getMessage()); + } + return null; + } public static Payment connect( Activity activity, diff --git a/unity/Assets/Poolakey/Plugins/poolakeyunitybridge-release.aar b/unity/Assets/Poolakey/Plugins/poolakeyunitybridge-release.aar new file mode 100644 index 0000000000000000000000000000000000000000..6e3e6bd32b14e9c8226d14ff0271c5695fb5c57e GIT binary patch literal 36816 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 a(tlC7`vzBN|3yV}DIAxHm0pqo0RIC(b%IL( literal 0 HcmV?d00001 diff --git a/unity/Assets/Poolakey/Scripts/Payment.cs b/unity/Assets/Poolakey/Scripts/Payment.cs index e10a5a2..f736ab6 100644 --- a/unity/Assets/Poolakey/Scripts/Payment.cs +++ b/unity/Assets/Poolakey/Scripts/Payment.cs @@ -1,5 +1,6 @@ using UnityEngine; using Poolakey.Scripts.Callbacks; + namespace Poolakey.Scripts { public class Payment @@ -9,9 +10,15 @@ public class Payment public Payment(PaymentConfiguration paymentConfiguration) { this.paymentConfiguration = paymentConfiguration; - poolakeyBridge = new AndroidJavaObject("com.farsitel.bazaar.PoolakeyBridge"); + using (var pluginClass = new AndroidJavaClass("com.farsitel.bazaar.PoolakeyBridge")) + { + if (pluginClass != null) + { + poolakeyBridge = pluginClass.CallStatic("getInstance"); + } + } } - public void connect() + { poolakeyBridge.CallStatic( "connect", @@ -45,11 +52,4 @@ public void subscribeProduct(string productId, string payload = null) ); } - private AndroidJavaObject getActivity() - { - AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); - AndroidJavaObject currentActivity = unityPlayer.GetStatic("currentActivity"); - return currentActivity; - } - } } \ No newline at end of file From c4898a967c554353cc5ee33397a7e4b1a6732502 Mon Sep 17 00:00:00 2001 From: Mansour Date: Sun, 18 Jul 2021 16:54:11 +0430 Subject: [PATCH 04/32] Add Connect API --- .../com/farsitel/bazaar/PoolakeyBridge.java | 8 +- .../com/farsitel/bazaar/PoolakeyJavaBridge.kt | 13 +- unity/Assets/Poolakey/Demo/DemoScene.unity | 1980 +++++++++-------- unity/Assets/Poolakey/Demo/PoolakeyExample.cs | 6 +- unity/Assets/Poolakey/Scripts/Payment.cs | 7 +- 5 files changed, 1010 insertions(+), 1004 deletions(-) diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java index 29363b8..d6d0a5a 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java @@ -49,12 +49,8 @@ private Activity getCurrentActivity() { return null; } - public static Payment connect( - Activity activity, - String rsaPublicKey, - ConnectionCallback callback - ) { - return PoolakeyJavaBridge.INSTANCE.connect(activity, rsaPublicKey, callback); + public void connect(String rsaPublicKey, ConnectionCallback callback) { + PoolakeyJavaBridge.INSTANCE.connect(getCurrentActivity(), rsaPublicKey, callback); } public static void purchaseProduct( diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt b/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt index 2a5d3b0..1b3d8c0 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt @@ -2,20 +2,25 @@ package com.farsitel.bazaar import android.content.Context import com.farsitel.bazaar.callback.ConnectionCallback +import ir.cafebazaar.poolakey.Connection +import ir.cafebazaar.poolakey.ConnectionState import ir.cafebazaar.poolakey.Payment import ir.cafebazaar.poolakey.config.PaymentConfiguration import ir.cafebazaar.poolakey.config.SecurityCheck object PoolakeyJavaBridge { - fun connect(context: Context, rsaPublicKey: String?, callback: ConnectionCallback): Payment { + lateinit var payment: Payment + lateinit var connection: Connection + + fun connect(context: Context, rsaPublicKey: String?, callback: ConnectionCallback) { val securityCheck = if (rsaPublicKey != null) { SecurityCheck.Enable(rsaPublicKey) } else { SecurityCheck.Disable } val paymentConfig = PaymentConfiguration(localSecurityCheck = securityCheck) - val payment = Payment(context = context, config = paymentConfig) - payment.connect { + payment = Payment(context = context, config = paymentConfig) + connection = payment.connect { connectionFailed { callback.onFailure() } @@ -26,6 +31,6 @@ object PoolakeyJavaBridge { callback.onDisconnect() } } - return payment + } } } \ No newline at end of file diff --git a/unity/Assets/Poolakey/Demo/DemoScene.unity b/unity/Assets/Poolakey/Demo/DemoScene.unity index 5a6663c..ef6b75b 100644 --- a/unity/Assets/Poolakey/Demo/DemoScene.unity +++ b/unity/Assets/Poolakey/Demo/DemoScene.unity @@ -332,85 +332,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 46620564} m_CullTransparentMesh: 0 ---- !u!1 &54525781 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 54525782} - - component: {fileID: 54525784} - - component: {fileID: 54525783} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &54525782 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 54525781} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 942527682} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &54525783 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 54525781} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.26415092, g: 0.26415092, b: 0.26415092, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 30 - m_FontStyle: 1 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 41 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Gem 1 Purchase ---- !u!222 &54525784 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 54525781} - m_CullTransparentMesh: 0 --- !u!1 &65512612 GameObject: m_ObjectHideFlags: 0 @@ -544,82 +465,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 65512612} m_CullTransparentMesh: 0 ---- !u!1 &402571137 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 402571138} - - component: {fileID: 402571140} - - component: {fileID: 402571139} - m_Layer: 5 - m_Name: Poolakey - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &402571138 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 402571137} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 659579307} - - {fileID: 942527682} - - {fileID: 1831972368} - - {fileID: 1551777331} - - {fileID: 562756172} - m_Father: {fileID: 1478282524} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -10.999878, y: -217} - m_SizeDelta: {x: -56.2, y: 93} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &402571139 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 402571137} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 0 - m_Spacing: 5 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 1 - m_ChildControlHeight: 1 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 ---- !u!222 &402571140 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 402571137} - m_CullTransparentMesh: 0 --- !u!1 &488007352 GameObject: m_ObjectHideFlags: 0 @@ -632,7 +477,7 @@ GameObject: - component: {fileID: 488007355} - component: {fileID: 488007354} m_Layer: 5 - m_Name: Text (1) + m_Name: ConsolText m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -699,7 +544,7 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 488007352} m_CullTransparentMesh: 0 ---- !u!1 &526519379 +--- !u!1 &797998921 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -707,78 +552,89 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 526519380} - - component: {fileID: 526519382} - - component: {fileID: 526519381} + - component: {fileID: 797998922} + - component: {fileID: 797998925} + - component: {fileID: 797998924} + - component: {fileID: 797998923} m_Layer: 5 - m_Name: Text + m_Name: Viewport m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &526519380 +--- !u!224 &797998922 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 526519379} + m_GameObject: {fileID: 797998921} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1831972368} + m_Children: + - {fileID: 1222095547} + m_Father: {fileID: 962587538} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} + m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &526519381 + m_Pivot: {x: 0, y: 1} +--- !u!114 &797998923 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 526519379} + m_GameObject: {fileID: 797998921} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.26415092, g: 0.26415092, b: 0.26415092, a: 1} + m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 30 - m_FontStyle: 1 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 41 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Gem 1 Consume ---- !u!222 &526519382 + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &797998924 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 526519379} + m_GameObject: {fileID: 797998921} m_CullTransparentMesh: 0 ---- !u!1 &562756171 +--- !u!114 &797998925 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 797998921} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!1 &814206080 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -786,103 +642,129 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 562756172} - - component: {fileID: 562756175} - - component: {fileID: 562756174} - - component: {fileID: 562756173} + - component: {fileID: 814206081} m_Layer: 5 - m_Name: PurchaseList + m_Name: Sliding Area m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &562756172 +--- !u!224 &814206081 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 562756171} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_GameObject: {fileID: 814206080} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 2124225835} - m_Father: {fileID: 402571138} - m_RootOrder: 4 + - {fileID: 1475558599} + m_Father: {fileID: 46620565} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &562756173 +--- !u!1 &901594886 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 901594889} + - component: {fileID: 901594888} + - component: {fileID: 901594887} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &901594887 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 562756171} + m_GameObject: {fileID: 901594886} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} m_Name: m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 562756174} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 1478282520} - m_TargetAssemblyTypeName: - m_MethodName: GetPurchases - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &562756174 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &901594888 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 562756171} + m_GameObject: {fileID: 901594886} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &901594889 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 901594886} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &948878754 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 948878758} + - component: {fileID: 948878757} + - component: {fileID: 948878755} + - component: {fileID: 948878756} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &948878755 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 948878754} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} @@ -893,25 +775,62 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &562756175 + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: +--- !u!114 &948878756 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 948878754} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!222 &948878757 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 562756171} + m_GameObject: {fileID: 948878754} m_CullTransparentMesh: 0 ---- !u!1 &659579306 +--- !u!224 &948878758 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 948878754} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1222095547} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1856.4832, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!1 &962587537 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -919,58 +838,59 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 659579307} - - component: {fileID: 659579309} - - component: {fileID: 659579308} - - component: {fileID: 659579310} + - component: {fileID: 962587538} + - component: {fileID: 962587541} + - component: {fileID: 962587540} + - component: {fileID: 962587539} m_Layer: 5 - m_Name: InitSDK + m_Name: Scroll View m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &659579307 +--- !u!224 &962587538 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 659579306} + m_GameObject: {fileID: 962587537} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 1274805729} - m_Father: {fileID: 402571138} - m_RootOrder: 0 + - {fileID: 797998922} + - {fileID: 46620565} + m_Father: {fileID: 1478282524} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -261.1} + m_SizeDelta: {x: 0, y: -522} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &659579308 +--- !u!114 &962587539 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 659579306} + m_GameObject: {fileID: 962587537} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Color: {r: 0, g: 0, b: 0, a: 0.392} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 @@ -980,71 +900,45 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!222 &659579309 +--- !u!222 &962587540 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 659579306} + m_GameObject: {fileID: 962587537} m_CullTransparentMesh: 0 ---- !u!114 &659579310 +--- !u!114 &962587541 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 659579306} + m_GameObject: {fileID: 962587537} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} m_Name: m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 659579308} - m_OnClick: + m_Content: {fileID: 1222095547} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 797998922} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 46620566} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 1478282520} - m_TargetAssemblyTypeName: PoolakeyExample, Assembly-CSharp - m_MethodName: Connect - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!1 &735449358 + m_Calls: [] +--- !u!1 &1222095546 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1052,78 +946,152 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 735449359} - - component: {fileID: 735449361} - - component: {fileID: 735449360} + - component: {fileID: 1222095547} + - component: {fileID: 1222095549} + - component: {fileID: 1222095548} m_Layer: 5 - m_Name: Text + m_Name: Content m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &735449359 +--- !u!224 &1222095547 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 735449358} + m_GameObject: {fileID: 1222095546} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1551777331} + m_Children: + - {fileID: 948878758} + m_Father: {fileID: 797998922} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} + m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} + m_AnchoredPosition: {x: -0.000004615777, y: 0.000035887217} m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1222095548 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1222095546} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &1222095549 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1222095546} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &1369244106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1369244107} + - component: {fileID: 1369244109} + - component: {fileID: 1369244108} + m_Layer: 5 + m_Name: CafebazaarLogo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1369244107 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1369244106} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1478282524} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: -0.5, y: -44} + m_SizeDelta: {x: 119.3, y: 57.599976} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &735449360 +--- !u!114 &1369244108 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 735449358} + m_GameObject: {fileID: 1369244106} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.26415092, g: 0.26415092, b: 0.26415092, a: 1} - m_RaycastTarget: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 30 - m_FontStyle: 1 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 41 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Subscibe ---- !u!222 &735449361 + m_Sprite: {fileID: 21300000, guid: 587bece7f5947f2429793afe0202a271, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1369244109 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 735449358} + m_GameObject: {fileID: 1369244106} m_CullTransparentMesh: 0 ---- !u!1 &797998921 +--- !u!1 &1475558598 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1131,44 +1099,42 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 797998922} - - component: {fileID: 797998925} - - component: {fileID: 797998924} - - component: {fileID: 797998923} + - component: {fileID: 1475558599} + - component: {fileID: 1475558601} + - component: {fileID: 1475558600} m_Layer: 5 - m_Name: Viewport + m_Name: Handle m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &797998922 +--- !u!224 &1475558599 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 797998921} + m_GameObject: {fileID: 1475558598} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1222095547} - m_Father: {fileID: 962587538} + m_Children: [] + m_Father: {fileID: 814206081} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 1} ---- !u!114 &797998923 + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1475558600 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 797998921} + m_GameObject: {fileID: 1475558598} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} @@ -1182,7 +1148,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 @@ -1192,28 +1158,15 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!222 &797998924 +--- !u!222 &1475558601 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 797998921} + m_GameObject: {fileID: 1475558598} m_CullTransparentMesh: 0 ---- !u!114 &797998925 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 797998921} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} - m_Name: - m_EditorClassIdentifier: - m_ShowMaskGraphic: 0 ---- !u!1 &814206080 +--- !u!1 &1478282519 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1221,35 +1174,116 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 814206081} + - component: {fileID: 1478282524} + - component: {fileID: 1478282523} + - component: {fileID: 1478282522} + - component: {fileID: 1478282521} + - component: {fileID: 1478282520} m_Layer: 5 - m_Name: Sliding Area + m_Name: MainPanel m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &814206081 +--- !u!114 &1478282520 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1478282519} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ef68ec4d8afa84b8f924191f02ef19f0, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1478282521 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1478282519} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1478282522 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1478282519} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1024, y: 1024} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1478282523 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1478282519} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1478282524 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 814206080} + m_GameObject: {fileID: 1478282519} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalScale: {x: 0, y: 0, z: 0} m_Children: - - {fileID: 1475558599} - m_Father: {fileID: 46620565} - m_RootOrder: 0 + - {fileID: 1587869380155104686} + - {fileID: 1369244107} + - {fileID: 962587538} + - {fileID: 488007353} + - {fileID: 65512613} + m_Father: {fileID: 0} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} + m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -20, y: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &901594886 + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1858509431 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1257,65 +1291,78 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 901594889} - - component: {fileID: 901594888} - - component: {fileID: 901594887} - m_Layer: 0 - m_Name: EventSystem + - component: {fileID: 1858509432} + - component: {fileID: 1858509434} + - component: {fileID: 1858509433} + m_Layer: 5 + m_Name: Text m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &901594887 -MonoBehaviour: +--- !u!224 &1858509432 +RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 901594886} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalAxis: Horizontal - m_VerticalAxis: Vertical - m_SubmitButton: Submit - m_CancelButton: Cancel - m_InputActionsPerSecond: 10 - m_RepeatDelay: 0.5 - m_ForceModuleActive: 0 ---- !u!114 &901594888 + m_GameObject: {fileID: 1858509431} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 65512613} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1858509433 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 901594886} + m_GameObject: {fileID: 1858509431} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} m_Name: m_EditorClassIdentifier: - m_FirstSelected: {fileID: 0} - m_sendNavigationEvents: 1 - m_DragThreshold: 10 ---- !u!4 &901594889 -Transform: + m_Material: {fileID: 0} + m_Color: {r: 0.26415092, g: 0.26415092, b: 0.26415092, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 28 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 41 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Clear +--- !u!222 &1858509434 +CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 901594886} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &942527681 + m_GameObject: {fileID: 1858509431} + m_CullTransparentMesh: 0 +--- !u!1 &1587869379013910476 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1323,82 +1370,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 942527682} - - component: {fileID: 942527684} - - component: {fileID: 942527683} - - component: {fileID: 942527685} + - component: {fileID: 1587869379013910477} + - component: {fileID: 1587869379013910479} + - component: {fileID: 1587869379013910478} m_Layer: 5 - m_Name: Gem1 + m_Name: Text m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &942527682 +--- !u!224 &1587869379013910477 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 942527681} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_GameObject: {fileID: 1587869379013910476} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 54525782} - m_Father: {fileID: 402571138} - m_RootOrder: 1 + m_Children: [] + m_Father: {fileID: 1587869380416603015} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &942527683 +--- !u!114 &1587869379013910478 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 942527681} + m_GameObject: {fileID: 1587869379013910476} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Color: {r: 0.26415092, g: 0.26415092, b: 0.26415092, a: 1} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &942527684 + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 30 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 41 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Connect +--- !u!222 &1587869379013910479 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 942527681} + m_GameObject: {fileID: 1587869379013910476} m_CullTransparentMesh: 0 ---- !u!114 &942527685 +--- !u!1 &1587869379224001539 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1587869379224001567} + - component: {fileID: 1587869379224001566} + - component: {fileID: 1587869379224001565} + - component: {fileID: 1587869379224001564} + m_Layer: 5 + m_Name: Subscribe + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1587869379224001564 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 942527681} + m_GameObject: {fileID: 1587869379224001539} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} @@ -1432,13 +1500,13 @@ MonoBehaviour: m_SelectedTrigger: Highlighted m_DisabledTrigger: Disabled m_Interactable: 1 - m_TargetGraphic: {fileID: 942527683} + m_TargetGraphic: {fileID: 1587869379224001565} m_OnClick: m_PersistentCalls: m_Calls: - - m_Target: {fileID: 1478282520} + - m_Target: {fileID: 0} m_TargetAssemblyTypeName: PoolakeyExample, Assembly-CSharp - m_MethodName: PurchaseProduct + m_MethodName: SubscribeProduct m_Mode: 1 m_Arguments: m_ObjectArgument: {fileID: 0} @@ -1448,35 +1516,16 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 ---- !u!1 &948878754 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 948878758} - - component: {fileID: 948878757} - - component: {fileID: 948878755} - - component: {fileID: 948878756} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &948878755 +--- !u!114 &1587869379224001565 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 948878754} + m_GameObject: {fileID: 1587869379224001539} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} @@ -1487,62 +1536,45 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 20 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 2 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 1 - m_VerticalOverflow: 1 - m_LineSpacing: 1 - m_Text: ---- !u!114 &948878756 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 948878754} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 0 - m_VerticalFit: 2 ---- !u!222 &948878757 + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1587869379224001566 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 948878754} + m_GameObject: {fileID: 1587869379224001539} m_CullTransparentMesh: 0 ---- !u!224 &948878758 +--- !u!224 &1587869379224001567 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 948878754} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_GameObject: {fileID: 1587869379224001539} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1222095547} - m_RootOrder: 0 + m_Children: + - {fileID: 1587869380626477859} + m_Father: {fileID: 1587869380155104686} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1441.0088, y: 0} - m_Pivot: {x: 0, y: 1} ---- !u!1 &962587537 + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1587869379504262179 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1550,59 +1582,58 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 962587538} - - component: {fileID: 962587541} - - component: {fileID: 962587540} - - component: {fileID: 962587539} + - component: {fileID: 1587869379504262204} + - component: {fileID: 1587869379504262206} + - component: {fileID: 1587869379504262205} + - component: {fileID: 1587869379504262207} m_Layer: 5 - m_Name: Scroll View + m_Name: Consume m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &962587538 +--- !u!224 &1587869379504262204 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 962587537} + m_GameObject: {fileID: 1587869379504262179} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 797998922} - - {fileID: 46620565} - m_Father: {fileID: 1478282524} - m_RootOrder: 1 + - {fileID: 1587869380279135864} + m_Father: {fileID: 1587869380155104686} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -261.1} - m_SizeDelta: {x: 0, y: -522} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &962587539 +--- !u!114 &1587869379504262205 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 962587537} + m_GameObject: {fileID: 1587869379504262179} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 0.392} + m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 @@ -1612,45 +1643,113 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!222 &962587540 +--- !u!222 &1587869379504262206 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 962587537} + m_GameObject: {fileID: 1587869379504262179} m_CullTransparentMesh: 0 ---- !u!114 &962587541 +--- !u!114 &1587869379504262207 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 962587537} + m_GameObject: {fileID: 1587869379504262179} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} m_Name: m_EditorClassIdentifier: - m_Content: {fileID: 1222095547} - m_Horizontal: 0 - m_Vertical: 1 - m_MovementType: 1 - m_Elasticity: 0.1 - m_Inertia: 1 - m_DecelerationRate: 0.135 - m_ScrollSensitivity: 1 - m_Viewport: {fileID: 797998922} - m_HorizontalScrollbar: {fileID: 0} - m_VerticalScrollbar: {fileID: 46620566} - m_HorizontalScrollbarVisibility: 2 - m_VerticalScrollbarVisibility: 2 - m_HorizontalScrollbarSpacing: -3 - m_VerticalScrollbarSpacing: -3 - m_OnValueChanged: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1587869379504262205} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1587869380155104681} + m_TargetAssemblyTypeName: PoolakeyExample, Assembly-CSharp + m_MethodName: Consume + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1587869379733683968 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1587869379733683974} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.26415092, g: 0.26415092, b: 0.26415092, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] ---- !u!1 &1222095546 + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 30 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 41 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: purchase List +--- !u!222 &1587869379733683969 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1587869379733683974} + m_CullTransparentMesh: 0 +--- !u!1 &1587869379733683974 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1658,77 +1757,44 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1222095547} - - component: {fileID: 1222095549} - - component: {fileID: 1222095548} + - component: {fileID: 1587869379733683975} + - component: {fileID: 1587869379733683969} + - component: {fileID: 1587869379733683968} m_Layer: 5 - m_Name: Content + m_Name: Text m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &1222095547 +--- !u!224 &1587869379733683975 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1222095546} + m_GameObject: {fileID: 1587869379733683974} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 948878758} - m_Father: {fileID: 797998922} + m_Children: [] + m_Father: {fileID: 1587869380520777824} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -0.000004615777, y: 0.000035887217} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 1} ---- !u!114 &1222095548 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1222095546} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 0 - m_VerticalFit: 2 ---- !u!114 &1222095549 -MonoBehaviour: + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1587869379941113204 +CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1222095546} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 0 - m_Spacing: 0 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 1 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 ---- !u!1 &1274805728 + m_GameObject: {fileID: 1587869379941113209} + m_CullTransparentMesh: 0 +--- !u!1 &1587869379941113209 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1736,9 +1802,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1274805729} - - component: {fileID: 1274805731} - - component: {fileID: 1274805730} + - component: {fileID: 1587869379941113210} + - component: {fileID: 1587869379941113204} + - component: {fileID: 1587869379941113211} m_Layer: 5 m_Name: Text m_TagString: Untagged @@ -1746,18 +1812,18 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &1274805729 +--- !u!224 &1587869379941113210 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1274805728} + m_GameObject: {fileID: 1587869379941113209} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] - m_Father: {fileID: 659579307} + m_Father: {fileID: 1587869380896503534} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -1765,13 +1831,13 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1274805730 +--- !u!114 &1587869379941113211 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1274805728} + m_GameObject: {fileID: 1587869379941113209} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} @@ -1790,7 +1856,7 @@ MonoBehaviour: m_FontSize: 30 m_FontStyle: 1 m_BestFit: 0 - m_MinSize: 3 + m_MinSize: 10 m_MaxSize: 41 m_Alignment: 4 m_AlignByGeometry: 0 @@ -1798,16 +1864,29 @@ MonoBehaviour: m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: Connect ---- !u!222 &1274805731 + m_Text: Gem 1 Purchase +--- !u!222 &1587869380155104680 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1274805728} + m_GameObject: {fileID: 1587869380155104685} m_CullTransparentMesh: 0 ---- !u!1 &1369244106 +--- !u!114 &1587869380155104681 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1587869380155104685} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1a53fa97845622047a65db02032e1a69, type: 3} + m_Name: + m_EditorClassIdentifier: + ConsoleText: {fileID: 488007354} +--- !u!1 &1587869380155104685 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1815,149 +1894,129 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1369244107} - - component: {fileID: 1369244109} - - component: {fileID: 1369244108} + - component: {fileID: 1587869380155104686} + - component: {fileID: 1587869380155104680} + - component: {fileID: 1587869380155104687} + - component: {fileID: 1587869380155104681} m_Layer: 5 - m_Name: CafebazaarLogo + m_Name: Poolakey m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &1369244107 +--- !u!224 &1587869380155104686 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1369244106} + m_GameObject: {fileID: 1587869380155104685} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] + m_Children: + - {fileID: 1587869380416603015} + - {fileID: 1587869380896503534} + - {fileID: 1587869379504262204} + - {fileID: 1587869379224001567} + - {fileID: 1587869380520777824} m_Father: {fileID: 1478282524} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: -0.5, y: -44} - m_SizeDelta: {x: 119.3, y: 57.599976} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1369244108 + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -177.58} + m_SizeDelta: {x: 0, y: 93} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1587869380155104687 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1369244106} + m_GameObject: {fileID: 1587869380155104685} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} m_Name: m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 0 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 587bece7f5947f2429793afe0202a271, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &1369244109 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1369244106} - m_CullTransparentMesh: 0 ---- !u!1 &1475558598 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1475558599} - - component: {fileID: 1475558601} - - component: {fileID: 1475558600} - m_Layer: 5 - m_Name: Handle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1475558599 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!224 &1587869380279135864 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1475558598} + m_GameObject: {fileID: 1587869380279135871} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] - m_Father: {fileID: 814206081} + m_Father: {fileID: 1587869379504262204} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1475558600 +--- !u!114 &1587869380279135865 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1475558598} + m_GameObject: {fileID: 1587869380279135871} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Color: {r: 0.26415092, g: 0.26415092, b: 0.26415092, a: 1} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &1475558601 + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 30 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 41 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Gem 1 Consume +--- !u!222 &1587869380279135866 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1475558598} + m_GameObject: {fileID: 1587869380279135871} m_CullTransparentMesh: 0 ---- !u!1 &1478282519 +--- !u!1 &1587869380279135871 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1965,147 +2024,176 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1478282524} - - component: {fileID: 1478282523} - - component: {fileID: 1478282522} - - component: {fileID: 1478282521} - - component: {fileID: 1478282520} + - component: {fileID: 1587869380279135864} + - component: {fileID: 1587869380279135866} + - component: {fileID: 1587869380279135865} m_Layer: 5 - m_Name: MainPanel + m_Name: Text m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &1478282520 +--- !u!114 &1587869380416603008 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1478282519} + m_GameObject: {fileID: 1587869380416603014} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ef68ec4d8afa84b8f924191f02ef19f0, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: - ConsoleText: {fileID: 948878755} - Btn_InitIAB: {fileID: 659579310} - Btn_StartPurchase: {fileID: 942527685} - Btn_ConsumePurchase: {fileID: 1831972371} - Btn_subscribe: {fileID: 1551777328} - Btn_purchaseList: {fileID: 562756173} ---- !u!114 &1478282521 -MonoBehaviour: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1587869380416603009 +CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1478282519} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &1478282522 + m_GameObject: {fileID: 1587869380416603014} + m_CullTransparentMesh: 0 +--- !u!114 &1587869380416603010 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1478282519} + m_GameObject: {fileID: 1587869380416603014} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} m_Name: m_EditorClassIdentifier: - m_UiScaleMode: 1 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 1024, y: 1024} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0.5 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 - m_PresetInfoIsWorld: 0 ---- !u!223 &1478282523 -Canvas: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1587869380416603008} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1587869380155104681} + m_TargetAssemblyTypeName: PoolakeyExample, Assembly-CSharp + m_MethodName: Connect + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &1587869380416603014 +GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1478282519} - m_Enabled: 1 - serializedVersion: 3 - m_RenderMode: 0 - m_Camera: {fileID: 0} - m_PlaneDistance: 100 - m_PixelPerfect: 0 - m_ReceivesEvents: 1 - m_OverrideSorting: 0 - m_OverridePixelPerfect: 0 - m_SortingBucketNormalizedSize: 0 - m_AdditionalShaderChannelsFlag: 0 - m_SortingLayerID: 0 - m_SortingOrder: 0 - m_TargetDisplay: 0 ---- !u!224 &1478282524 + serializedVersion: 6 + m_Component: + - component: {fileID: 1587869380416603015} + - component: {fileID: 1587869380416603009} + - component: {fileID: 1587869380416603008} + - component: {fileID: 1587869380416603010} + m_Layer: 5 + m_Name: Connect + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1587869380416603015 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1478282519} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_GameObject: {fileID: 1587869380416603014} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 1369244107} - - {fileID: 962587538} - - {fileID: 402571138} - - {fileID: 488007353} - - {fileID: 65512613} - m_Father: {fileID: 0} - m_RootOrder: 2 + - {fileID: 1587869379013910477} + m_Father: {fileID: 1587869380155104686} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!1 &1551777327 -GameObject: + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &1587869380520777824 +RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1551777331} - - component: {fileID: 1551777330} - - component: {fileID: 1551777329} - - component: {fileID: 1551777328} - m_Layer: 5 - m_Name: Subscribe - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1551777328 + m_GameObject: {fileID: 1587869380520777831} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1587869379733683975} + m_Father: {fileID: 1587869380155104686} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1587869380520777825 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1551777327} + m_GameObject: {fileID: 1587869380520777831} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} @@ -2139,13 +2227,13 @@ MonoBehaviour: m_SelectedTrigger: Highlighted m_DisabledTrigger: Disabled m_Interactable: 1 - m_TargetGraphic: {fileID: 1551777329} + m_TargetGraphic: {fileID: 1587869380520777826} m_OnClick: m_PersistentCalls: m_Calls: - - m_Target: {fileID: 1478282520} + - m_Target: {fileID: 1587869380155104681} m_TargetAssemblyTypeName: PoolakeyExample, Assembly-CSharp - m_MethodName: SubscribeProduct + m_MethodName: GetPurchases m_Mode: 1 m_Arguments: m_ObjectArgument: {fileID: 0} @@ -2155,13 +2243,13 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 ---- !u!114 &1551777329 +--- !u!114 &1587869380520777826 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1551777327} + m_GameObject: {fileID: 1587869380520777831} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} @@ -2185,35 +2273,34 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!222 &1551777330 +--- !u!222 &1587869380520777827 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1551777327} + m_GameObject: {fileID: 1587869380520777831} m_CullTransparentMesh: 0 ---- !u!224 &1551777331 -RectTransform: +--- !u!1 &1587869380520777831 +GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1551777327} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 735449359} - m_Father: {fileID: 402571138} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &1831972367 + serializedVersion: 6 + m_Component: + - component: {fileID: 1587869380520777824} + - component: {fileID: 1587869380520777827} + - component: {fileID: 1587869380520777826} + - component: {fileID: 1587869380520777825} + m_Layer: 5 + m_Name: GetPurchases + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1587869380626477858 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2221,82 +2308,92 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1831972368} - - component: {fileID: 1831972370} - - component: {fileID: 1831972369} - - component: {fileID: 1831972371} + - component: {fileID: 1587869380626477859} + - component: {fileID: 1587869380626477885} + - component: {fileID: 1587869380626477884} m_Layer: 5 - m_Name: Gem1 Consume + m_Name: Text m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &1831972368 +--- !u!224 &1587869380626477859 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1831972367} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_GameObject: {fileID: 1587869380626477858} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 526519380} - m_Father: {fileID: 402571138} - m_RootOrder: 2 + m_Children: [] + m_Father: {fileID: 1587869379224001567} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1831972369 +--- !u!114 &1587869380626477884 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1831972367} + m_GameObject: {fileID: 1587869380626477858} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Color: {r: 0.26415092, g: 0.26415092, b: 0.26415092, a: 1} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &1831972370 + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 30 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 41 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Subscibe +--- !u!222 &1587869380626477885 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1587869380626477858} + m_CullTransparentMesh: 0 +--- !u!222 &1587869380896503528 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1831972367} + m_GameObject: {fileID: 1587869380896503533} m_CullTransparentMesh: 0 ---- !u!114 &1831972371 +--- !u!114 &1587869380896503529 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1831972367} + m_GameObject: {fileID: 1587869380896503533} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} @@ -2330,13 +2427,13 @@ MonoBehaviour: m_SelectedTrigger: Highlighted m_DisabledTrigger: Disabled m_Interactable: 1 - m_TargetGraphic: {fileID: 1831972369} + m_TargetGraphic: {fileID: 1587869380896503535} m_OnClick: m_PersistentCalls: m_Calls: - - m_Target: {fileID: 1478282520} - m_TargetAssemblyTypeName: - m_MethodName: Gem1Consume + - m_Target: {fileID: 1587869380155104681} + m_TargetAssemblyTypeName: PoolakeyExample, Assembly-CSharp + m_MethodName: Purchase m_Mode: 1 m_Arguments: m_ObjectArgument: {fileID: 0} @@ -2346,86 +2443,7 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 ---- !u!1 &1858509431 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1858509432} - - component: {fileID: 1858509434} - - component: {fileID: 1858509433} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1858509432 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1858509431} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 65512613} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1858509433 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1858509431} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.26415092, g: 0.26415092, b: 0.26415092, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 28 - m_FontStyle: 1 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 41 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Clear ---- !u!222 &1858509434 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1858509431} - m_CullTransparentMesh: 0 ---- !u!1 &2124225834 +--- !u!1 &1587869380896503533 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2433,74 +2451,64 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2124225835} - - component: {fileID: 2124225837} - - component: {fileID: 2124225836} + - component: {fileID: 1587869380896503534} + - component: {fileID: 1587869380896503528} + - component: {fileID: 1587869380896503535} + - component: {fileID: 1587869380896503529} m_Layer: 5 - m_Name: Text + m_Name: Purchase m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &2124225835 +--- !u!224 &1587869380896503534 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2124225834} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_GameObject: {fileID: 1587869380896503533} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 562756172} - m_RootOrder: 0 + m_Children: + - {fileID: 1587869379941113210} + m_Father: {fileID: 1587869380155104686} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} + m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &2124225836 +--- !u!114 &1587869380896503535 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2124225834} + m_GameObject: {fileID: 1587869380896503533} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.26415092, g: 0.26415092, b: 0.26415092, a: 1} + m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 30 - m_FontStyle: 1 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 41 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: purchase List ---- !u!222 &2124225837 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2124225834} - m_CullTransparentMesh: 0 + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 diff --git a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs index 4b633ed..9dd17a5 100644 --- a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs +++ b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; using Poolakey; using Poolakey.Scripts; using UnityEngine.UI; @@ -7,8 +7,6 @@ public class PoolakeyExample : MonoBehaviour { public Text ConsoleText; - public Button Btn_InitIAB, Btn_StartPurchase, Btn_ConsumePurchase, Btn_subscribe,Btn_purchaseList; - private Payment payment; void Start() { @@ -20,7 +18,7 @@ void Start() public void Connect() { - payment.connect(); + payment.Connect(); } public void PurchaseProduct() diff --git a/unity/Assets/Poolakey/Scripts/Payment.cs b/unity/Assets/Poolakey/Scripts/Payment.cs index f736ab6..c6f511b 100644 --- a/unity/Assets/Poolakey/Scripts/Payment.cs +++ b/unity/Assets/Poolakey/Scripts/Payment.cs @@ -19,13 +19,12 @@ public Payment(PaymentConfiguration paymentConfiguration) } } + public void Connect() { - poolakeyBridge.CallStatic( + poolakeyBridge.Call( "connect", - getActivity(), paymentConfiguration.securityCheck.rsaPublicKey, - new ConnectionCallbackProxy() - ); + new ConnectionCallbackProxy()); } public void purchaseProduct(string productId, string payload = null) From 76b9b675702ae054ede3c6a6a2e5f5e7e67faa3d Mon Sep 17 00:00:00 2001 From: Mansour Date: Sun, 18 Jul 2021 16:54:38 +0430 Subject: [PATCH 05/32] Add purchase and subscribe api --- .../com/farsitel/bazaar/PaymentActivity.kt | 95 +++++-------------- .../com/farsitel/bazaar/PoolakeyBridge.java | 37 ++------ .../com/farsitel/bazaar/PoolakeyJavaBridge.kt | 22 +++++ unity/Assets/Poolakey/Demo/PoolakeyExample.cs | 8 +- unity/Assets/Poolakey/Scripts/Payment.cs | 22 ++--- 5 files changed, 65 insertions(+), 119 deletions(-) diff --git a/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt b/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt index 22e0ca6..595d376 100644 --- a/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt +++ b/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt @@ -12,11 +12,6 @@ import ir.cafebazaar.poolakey.request.PurchaseRequest import java.security.InvalidParameterException class PaymentActivity : FragmentActivity() { - - private lateinit var connection: Connection - private lateinit var payment: Payment - - private var rsaPublicKey: String? = null private var productId: String? = null private var payload: String? = null private var command: Command? = null @@ -32,69 +27,38 @@ class PaymentActivity : FragmentActivity() { } private fun purchaseProduct() { - val securityCheck = rsaPublicKey?.let { - SecurityCheck.Enable(it) - } ?: SecurityCheck.Disable - val paymentConfig = PaymentConfiguration(localSecurityCheck = securityCheck) - payment = Payment(context = this, config = paymentConfig) - connection = payment.connect { - connectionFailed { - CallbackHolder.paymentCallback?.onFailure(it) - finish() - } - connectionSucceed { - payment.purchaseProduct( - this@PaymentActivity, - PurchaseRequest(productId!!, REQUEST_CODE, payload) - ) { - purchaseFlowBegan { - // Bazaar's billing screen has opened successfully - } - failedToBeginFlow { throwable -> - // Failed to open Bazaar's billing screen - CallbackHolder.paymentCallback?.onFailure(throwable) - finish() - } - } + PoolakeyJavaBridge.payment.purchaseProduct( + this@PaymentActivity, + PurchaseRequest(productId!!, REQUEST_CODE, payload) + ) { + purchaseFlowBegan { + // Bazaar's billing screen has opened successfully } - disconnected { + failedToBeginFlow { throwable -> + // Failed to open Bazaar's billing screen + CallbackHolder.paymentCallback?.onFailure(throwable) finish() } } } private fun subscribeProduct() { - val securityCheck = rsaPublicKey?.let { - SecurityCheck.Enable(it) - } ?: SecurityCheck.Disable - val paymentConfig = PaymentConfiguration(localSecurityCheck = securityCheck) - payment = Payment(context = this, config = paymentConfig) - connection = payment.connect { - connectionFailed { - CallbackHolder.paymentCallback?.onFailure(it) - finish() + PoolakeyJavaBridge.payment.subscribeProduct( + this@PaymentActivity, + PurchaseRequest(productId!!, REQUEST_CODE, payload) + ) { + purchaseFlowBegan { + // Bazaar's billing screen has opened successfully } - connectionSucceed { - payment.subscribeProduct( - this@PaymentActivity, - PurchaseRequest(productId!!, REQUEST_CODE, payload) - ) { - purchaseFlowBegan { - // Bazaar's billing screen has opened successfully - } - failedToBeginFlow { throwable -> - // Failed to open Bazaar's billing screen - CallbackHolder.paymentCallback?.onFailure(throwable) - finish() - } - } + failedToBeginFlow { throwable -> + // Failed to open Bazaar's billing screen + CallbackHolder.paymentCallback?.onFailure(throwable) + finish() } - disconnected { finish() } } } private fun initArgs() { - rsaPublicKey = intent.extras?.getString(KEY_RSA_PUBLIC_KEY) productId = intent.extras?.getString(KEY_PRODUCT_ID) payload = intent.extras?.getString(KEY_PAYLOAD) command = Command.valueOf(requireNotNull(intent.extras?.getString(KEY_COMMAND))) @@ -102,7 +66,7 @@ class PaymentActivity : FragmentActivity() { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) - payment.onActivityResult(requestCode, resultCode, data) { + PoolakeyJavaBridge.payment.onActivityResult(requestCode, resultCode, data) { purchaseSucceed { purchaseEntity -> // User purchased the product CallbackHolder.paymentCallback?.onSuccess(purchaseEntity) @@ -120,29 +84,21 @@ class PaymentActivity : FragmentActivity() { } } - override fun onDestroy() { - connection.disconnect() - super.onDestroy() - } - companion object { private const val REQUEST_CODE: Int = 1000 - private const val KEY_RSA_PUBLIC_KEY = "rsaPublicKey" private const val KEY_PRODUCT_ID = "productId" private const val KEY_PAYLOAD = "payload" private const val KEY_COMMAND = "command" @JvmStatic fun start( - activity: Activity, - command: Command, - rsaPublicKey: String?, - productId: String, - payload: String? + activity: Activity, + command: Command, + productId: String, + payload: String? ) { val intent = Intent(activity, PaymentActivity::class.java) - intent.putExtra(KEY_RSA_PUBLIC_KEY, rsaPublicKey) intent.putExtra(KEY_PRODUCT_ID, productId) intent.putExtra(KEY_PAYLOAD, payload) intent.putExtra(KEY_COMMAND, command.name) @@ -152,7 +108,6 @@ class PaymentActivity : FragmentActivity() { enum class Command { PurchaseProduct, - Subscribe, - Consume + Subscribe } } \ No newline at end of file diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java index d6d0a5a..143be00 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java @@ -53,37 +53,12 @@ public void connect(String rsaPublicKey, ConnectionCallback callback) { PoolakeyJavaBridge.INSTANCE.connect(getCurrentActivity(), rsaPublicKey, callback); } - public static void purchaseProduct( - Activity activity, - String rsaPublicKey, - String productId, - String payload, - PaymentCallback paymentCallback - ) { - CallbackHolder.INSTANCE.setPaymentCallback(paymentCallback); - PaymentActivity.start( - activity, - PaymentActivity.Command.PurchaseProduct, - rsaPublicKey, - productId, - payload - ); + public void purchase(String productId, String payload, PaymentCallback callback) { + PoolakeyJavaBridge.INSTANCE.startActivity(getCurrentActivity(), PaymentActivity.Command.PurchaseProduct, callback, productId, payload); } - - public static void subscribeProduct( - Activity activity, - String rsaPublicKey, - String productId, - String payload, - PaymentCallback paymentCallback - ) { - CallbackHolder.INSTANCE.setPaymentCallback(paymentCallback); - PaymentActivity.start( - activity, - PaymentActivity.Command.Subscribe, - rsaPublicKey, - productId, - payload - ); + public void subscribe(String productId, String payload, PaymentCallback callback) { + PoolakeyJavaBridge.INSTANCE.startActivity(getCurrentActivity(), PaymentActivity.Command.Subscribe, callback, productId, payload); } + + } diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt b/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt index 1b3d8c0..612020a 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt @@ -1,7 +1,9 @@ package com.farsitel.bazaar +import android.app.Activity import android.content.Context import com.farsitel.bazaar.callback.ConnectionCallback +import com.farsitel.bazaar.callback.PaymentCallback import ir.cafebazaar.poolakey.Connection import ir.cafebazaar.poolakey.ConnectionState import ir.cafebazaar.poolakey.Payment @@ -32,5 +34,25 @@ object PoolakeyJavaBridge { } } } + + fun startActivity( + activity: Activity, + command: PaymentActivity.Command, + paymentCallback: PaymentCallback, + productId: String, + payload: String + ) { + CallbackHolder.paymentCallback = paymentCallback; + if (connection.getState() != ConnectionState.Connected) { +// paymentCallback.onFailure(throw Exception(message :"") ) + return + } + PaymentActivity.start( + activity, + command, + productId, + payload + ) + } } } \ No newline at end of file diff --git a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs index 9dd17a5..ad5e3c2 100644 --- a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs +++ b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs @@ -21,13 +21,13 @@ public void Connect() payment.Connect(); } - public void PurchaseProduct() + public void Purchase() { - payment.purchaseProduct("test"); + payment.Purchase("test"); } - public void SubscribeProduct() + public void Subscribe() { - payment.subscribeProduct("test"); + payment.Subscribe("test"); } public void Log(string message) diff --git a/unity/Assets/Poolakey/Scripts/Payment.cs b/unity/Assets/Poolakey/Scripts/Payment.cs index c6f511b..91d49bb 100644 --- a/unity/Assets/Poolakey/Scripts/Payment.cs +++ b/unity/Assets/Poolakey/Scripts/Payment.cs @@ -27,28 +27,22 @@ public void Connect() new ConnectionCallbackProxy()); } - public void purchaseProduct(string productId, string payload = null) + public void Purchase(string productId, string payload = "") { - poolakeyBridge.CallStatic( - "purchaseProduct", - getActivity(), - paymentConfiguration.securityCheck.rsaPublicKey, + poolakeyBridge.Call( + "purchase", productId, payload, - new PaymentCallbackProxy() - ); + new PaymentCallbackProxy(this)); } - public void subscribeProduct(string productId, string payload = null) + public void Subscribe(string productId, string payload = "") { - poolakeyBridge.CallStatic( - "subscribeProduct", - getActivity(), - paymentConfiguration.securityCheck.rsaPublicKey, + poolakeyBridge.Call( + "subscribe", productId, payload, - new PaymentCallbackProxy() - ); + new PaymentCallbackProxy(this)); } } \ No newline at end of file From ec399fc2f7ea56a1f071ff78c44e965b5c03b4d6 Mon Sep 17 00:00:00 2001 From: Mansour Date: Sun, 18 Jul 2021 16:55:01 +0430 Subject: [PATCH 06/32] Add SKUDetails api --- .../com/farsitel/bazaar/PoolakeyBridge.java | 8 +++++ .../com/farsitel/bazaar/PoolakeyJavaBridge.kt | 22 ++++++++++++++ .../bazaar/callback/SKUDetailsCallback.java | 16 ++++++++++ unity/Assets/Poolakey/Demo/PoolakeyExample.cs | 9 ++++++ .../Scripts/Callbacks/PaymentCallbackProxy.cs | 11 +++++-- .../Callbacks/SKUDetailsCallbackProxy.cs | 30 +++++++++++++++++++ unity/Assets/Poolakey/Scripts/Payment.cs | 16 ++++++++++ 7 files changed, 109 insertions(+), 3 deletions(-) create mode 100644 android/src/main/java/com/farsitel/bazaar/callback/SKUDetailsCallback.java create mode 100644 unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java index 143be00..ee1f6f6 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java @@ -3,6 +3,7 @@ import android.app.Activity; import android.util.Log; +import com.farsitel.bazaar.callback.SKUDetailsCallback; import com.farsitel.bazaar.callback.ConnectionCallback; import com.farsitel.bazaar.callback.PaymentCallback; @@ -53,6 +54,13 @@ public void connect(String rsaPublicKey, ConnectionCallback callback) { PoolakeyJavaBridge.INSTANCE.connect(getCurrentActivity(), rsaPublicKey, callback); } + public void getPurchaseSkuDetails(String productId, SKUDetailsCallback callback) { + PoolakeyJavaBridge.INSTANCE.getPurchaseSkuDetails(productId, callback); + } + public void getSubscriptionSkuDetails(String productId, SKUDetailsCallback callback) { + PoolakeyJavaBridge.INSTANCE.getSubscriptionSkuDetails(productId, callback); + } + public void purchase(String productId, String payload, PaymentCallback callback) { PoolakeyJavaBridge.INSTANCE.startActivity(getCurrentActivity(), PaymentActivity.Command.PurchaseProduct, callback, productId, payload); } diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt b/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt index 612020a..fafd8aa 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt @@ -2,6 +2,7 @@ package com.farsitel.bazaar import android.app.Activity import android.content.Context +import com.farsitel.bazaar.callback.SKUDetailsCallback import com.farsitel.bazaar.callback.ConnectionCallback import com.farsitel.bazaar.callback.PaymentCallback import ir.cafebazaar.poolakey.Connection @@ -54,5 +55,26 @@ object PoolakeyJavaBridge { payload ) } + + fun getSubscriptionSkuDetails(productId: String, callback: SKUDetailsCallback) { + if (connection.getState() != ConnectionState.Connected) { + return + } + payment.getSubscriptionSkuDetails(skuIds = listOf(productId)) { + getSkuDetailsSucceed(callback::onSuccess) + getSkuDetailsFailed(callback::onFailure) + } + } + + fun getPurchaseSkuDetails(productId: String, callback: SKUDetailsCallback) { + if (connection.getState() != ConnectionState.Connected) { + return + } + payment.getInAppSkuDetails(skuIds = listOf(productId)) { + getSkuDetailsSucceed(callback::onSuccess) + getSkuDetailsFailed(callback::onFailure) + } + } + } } \ No newline at end of file diff --git a/android/src/main/java/com/farsitel/bazaar/callback/SKUDetailsCallback.java b/android/src/main/java/com/farsitel/bazaar/callback/SKUDetailsCallback.java new file mode 100644 index 0000000..222aacc --- /dev/null +++ b/android/src/main/java/com/farsitel/bazaar/callback/SKUDetailsCallback.java @@ -0,0 +1,16 @@ +package com.farsitel.bazaar.callback; + +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +import ir.cafebazaar.poolakey.entity.SkuDetails; + +public interface SKUDetailsCallback { + + default void onSuccess(List it) { + } + + default void onFailure(@NotNull Throwable throwable) { + } +} diff --git a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs index ad5e3c2..fd4e436 100644 --- a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs +++ b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs @@ -21,6 +21,15 @@ public void Connect() payment.Connect(); } + public void GetPurchaseSkuDetails() + { + payment.GetPurchaseSkuDetails("test"); + } + public void GetSubscribesSkuDetails() + { + payment.GetSubscriptionSkuDetails("test"); + } + public void Purchase() { payment.Purchase("test"); diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs index 6862891..2e1520c 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs @@ -4,16 +4,21 @@ namespace Poolakey.Scripts.Callbacks { public class PaymentCallbackProxy : AndroidJavaProxy { - public PaymentCallbackProxy() : base("com.farsitel.bazaar.callback.PaymentCallback") {} + private Payment owner; + + public PaymentCallbackProxy(Payment owner) : base("com.farsitel.bazaar.callback.PaymentCallback") + { + this.owner = owner; + } void onSuccess(AndroidJavaObject purchaseEntity) { - Debug.Log("onSuccess" + purchaseEntity); + Debug.Log("onSuccess " + purchaseEntity.Get("originalJson")); } void onFailure(AndroidJavaObject throwable) { - Debug.Log("onFailure"+throwable); + Debug.Log("onFailure " + throwable); } void onCancel() diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs new file mode 100644 index 0000000..91166be --- /dev/null +++ b/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs @@ -0,0 +1,30 @@ +using UnityEngine; + +namespace Poolakey.Scripts.Callbacks +{ + public class SKUDetailsCallbackProxy : AndroidJavaProxy + { + private Payment owner; + + public SKUDetailsCallbackProxy(Payment owner) : base("com.farsitel.bazaar.callback.SKUDetailsCallback") + { + this.owner = owner; + } + + void onSuccess(AndroidJavaObject purchaseEntity) + { + Debug.Log("onSuccess "); + var length = purchaseEntity.Call("size"); + for (int i = 0; i < length; i++) + { + var sku = purchaseEntity.Call("get", i); + Debug.Log(sku.Call("toString")); + } + } + + void onFailure(AndroidJavaObject throwable) + { + Debug.Log("onFailure " + throwable); + } + } +} \ No newline at end of file diff --git a/unity/Assets/Poolakey/Scripts/Payment.cs b/unity/Assets/Poolakey/Scripts/Payment.cs index 91d49bb..931d738 100644 --- a/unity/Assets/Poolakey/Scripts/Payment.cs +++ b/unity/Assets/Poolakey/Scripts/Payment.cs @@ -27,6 +27,22 @@ public void Connect() new ConnectionCallbackProxy()); } + public void GetPurchaseSkuDetails(string productId) + { + poolakeyBridge.Call( + "getPurchaseSkuDetails", + productId, + new SKUDetailsCallbackProxy(this)); + } + + public void GetSubscriptionSkuDetails(string productId) + { + poolakeyBridge.Call( + "getSubscriptionSkuDetails", + productId, + new SKUDetailsCallbackProxy(this)); + } + public void Purchase(string productId, string payload = "") { poolakeyBridge.Call( From 2294d938899adb8501ca6c617dc103601a93297a Mon Sep 17 00:00:00 2001 From: Mansour Date: Sun, 18 Jul 2021 16:55:28 +0430 Subject: [PATCH 07/32] Add consume api --- .../com/farsitel/bazaar/PoolakeyBridge.java | 5 +++- .../com/farsitel/bazaar/PoolakeyJavaBridge.kt | 9 +++++++ .../bazaar/callback/ConsumeCallback.java | 7 ++++++ unity/Assets/Poolakey/Demo/DemoScene.unity | 2 +- unity/Assets/Poolakey/Demo/PoolakeyExample.cs | 13 ++++++++-- .../Scripts/Callbacks/ConsumeCallbackProxy.cs | 24 +++++++++++++++++++ unity/Assets/Poolakey/Scripts/Payment.cs | 7 ++++++ 7 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java index ee1f6f6..2c3237e 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java @@ -3,6 +3,7 @@ import android.app.Activity; import android.util.Log; +import com.farsitel.bazaar.callback.ConsumeCallback; import com.farsitel.bazaar.callback.SKUDetailsCallback; import com.farsitel.bazaar.callback.ConnectionCallback; import com.farsitel.bazaar.callback.PaymentCallback; @@ -68,5 +69,7 @@ public void subscribe(String productId, String payload, PaymentCallback callback PoolakeyJavaBridge.INSTANCE.startActivity(getCurrentActivity(), PaymentActivity.Command.Subscribe, callback, productId, payload); } - + public void consume(String token, ConsumeCallback callback) { + PoolakeyJavaBridge.INSTANCE.consume(token, callback); + } } diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt b/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt index fafd8aa..00d3755 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt @@ -4,6 +4,7 @@ import android.app.Activity import android.content.Context import com.farsitel.bazaar.callback.SKUDetailsCallback import com.farsitel.bazaar.callback.ConnectionCallback +import com.farsitel.bazaar.callback.ConsumeCallback import com.farsitel.bazaar.callback.PaymentCallback import ir.cafebazaar.poolakey.Connection import ir.cafebazaar.poolakey.ConnectionState @@ -76,5 +77,13 @@ object PoolakeyJavaBridge { } } + fun consume(purchaseToken: String, callback: ConsumeCallback) { + if (connection.getState() != ConnectionState.Connected) { + return + } + payment.consumeProduct(purchaseToken) { + consumeSucceed(callback::onSuccess) + consumeFailed (callback::onFailure) + } } } \ No newline at end of file diff --git a/android/src/main/java/com/farsitel/bazaar/callback/ConsumeCallback.java b/android/src/main/java/com/farsitel/bazaar/callback/ConsumeCallback.java index c5eb527..4dc8523 100644 --- a/android/src/main/java/com/farsitel/bazaar/callback/ConsumeCallback.java +++ b/android/src/main/java/com/farsitel/bazaar/callback/ConsumeCallback.java @@ -1,4 +1,11 @@ package com.farsitel.bazaar.callback; +import org.jetbrains.annotations.NotNull; + public interface ConsumeCallback { + default void onSuccess() { + } + + default void onFailure(@NotNull Throwable throwable) { + } } diff --git a/unity/Assets/Poolakey/Demo/DemoScene.unity b/unity/Assets/Poolakey/Demo/DemoScene.unity index ef6b75b..3f39412 100644 --- a/unity/Assets/Poolakey/Demo/DemoScene.unity +++ b/unity/Assets/Poolakey/Demo/DemoScene.unity @@ -2233,7 +2233,7 @@ MonoBehaviour: m_Calls: - m_Target: {fileID: 1587869380155104681} m_TargetAssemblyTypeName: PoolakeyExample, Assembly-CSharp - m_MethodName: GetPurchases + m_MethodName: GetPurchaseSkuDetails m_Mode: 1 m_Arguments: m_ObjectArgument: {fileID: 0} diff --git a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs index fd4e436..0ff2b9c 100644 --- a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs +++ b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; using Poolakey; using Poolakey.Scripts; using UnityEngine.UI; @@ -11,7 +11,7 @@ public class PoolakeyExample : MonoBehaviour void Start() { Log("Poolakey Plugin Version: " + PluginVersion.VersionString); - SecurityCheck securityCheck = SecurityCheck.Disable(); + SecurityCheck securityCheck = SecurityCheck.Enable("MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwCr1DxbF5Ub4SnksjwVnEu5wmLyzoD7MHtM8rVzDFeZInWLsxefy4j9sm853u7haBEBk83na5wHAYzHHK6oq5nzCpdxzbQUuVfw5x4Ir4zb6cUPbHlHNHgRYMfcEaWWV4ek/kY+PebYsZNAdPpiWH0tx+kTYjRvKUsvrkVvsUfHOYyUJmhZFHwVJohSVL2X6uTqBdlZVPsD0aJtCrbXL2JuzsNvH3q91OcQ6yLV1NsCAwEAAQ=="); PaymentConfiguration paymentConfiguration = new PaymentConfiguration(securityCheck); payment = new Payment(paymentConfiguration); } @@ -39,8 +39,17 @@ public void Subscribe() payment.Subscribe("test"); } + public void Consume() + { + payment.Consume("token"); + } + public void Log(string message) { ConsoleText.text += message + "\n"; } + + void OnApplicationQuit(){ + payment.Disconnect(); + } } diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs new file mode 100644 index 0000000..2149384 --- /dev/null +++ b/unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs @@ -0,0 +1,24 @@ +using UnityEngine; + +namespace Poolakey.Scripts.Callbacks +{ + public class ConsumeCallbackProxy : AndroidJavaProxy + { + private Payment owner; + + public ConsumeCallbackProxy(Payment owner) : base("com.farsitel.bazaar.callback.ConsumeCallback") + { + this.owner = owner; + } + + void onSuccess() + { + Debug.Log("onSuccess"); + } + + void onFailure(AndroidJavaObject throwable) + { + Debug.Log("onFailure " + throwable); + } + } +} \ No newline at end of file diff --git a/unity/Assets/Poolakey/Scripts/Payment.cs b/unity/Assets/Poolakey/Scripts/Payment.cs index 931d738..1740b65 100644 --- a/unity/Assets/Poolakey/Scripts/Payment.cs +++ b/unity/Assets/Poolakey/Scripts/Payment.cs @@ -61,4 +61,11 @@ public void Subscribe(string productId, string payload = "") new PaymentCallbackProxy(this)); } + public void Consume(string token) + { + poolakeyBridge.Call( + "consume", + token, + new ConsumeCallbackProxy(this)); + } } \ No newline at end of file From af522d17633885501e1abad3ee33b2a42a8f46ce Mon Sep 17 00:00:00 2001 From: Mansour Date: Sun, 18 Jul 2021 16:55:45 +0430 Subject: [PATCH 08/32] Add disconnct ability --- .../com/farsitel/bazaar/PoolakeyBridge.java | 10 +++- .../com/farsitel/bazaar/PoolakeyJavaBridge.kt | 46 +++++++++++-------- unity/Assets/Poolakey/Scripts/Payment.cs | 9 ++-- 3 files changed, 40 insertions(+), 25 deletions(-) diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java index 2c3237e..b6b3b49 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java @@ -3,10 +3,10 @@ import android.app.Activity; import android.util.Log; -import com.farsitel.bazaar.callback.ConsumeCallback; -import com.farsitel.bazaar.callback.SKUDetailsCallback; import com.farsitel.bazaar.callback.ConnectionCallback; +import com.farsitel.bazaar.callback.ConsumeCallback; import com.farsitel.bazaar.callback.PaymentCallback; +import com.farsitel.bazaar.callback.SKUDetailsCallback; import java.lang.reflect.Field; @@ -55,9 +55,14 @@ public void connect(String rsaPublicKey, ConnectionCallback callback) { PoolakeyJavaBridge.INSTANCE.connect(getCurrentActivity(), rsaPublicKey, callback); } + public void disconnect() { + PoolakeyJavaBridge.INSTANCE.disconnect(); + } + public void getPurchaseSkuDetails(String productId, SKUDetailsCallback callback) { PoolakeyJavaBridge.INSTANCE.getPurchaseSkuDetails(productId, callback); } + public void getSubscriptionSkuDetails(String productId, SKUDetailsCallback callback) { PoolakeyJavaBridge.INSTANCE.getSubscriptionSkuDetails(productId, callback); } @@ -65,6 +70,7 @@ public void getSubscriptionSkuDetails(String productId, SKUDetailsCallback callb public void purchase(String productId, String payload, PaymentCallback callback) { PoolakeyJavaBridge.INSTANCE.startActivity(getCurrentActivity(), PaymentActivity.Command.PurchaseProduct, callback, productId, payload); } + public void subscribe(String productId, String payload, PaymentCallback callback) { PoolakeyJavaBridge.INSTANCE.startActivity(getCurrentActivity(), PaymentActivity.Command.Subscribe, callback, productId, payload); } diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt b/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt index 00d3755..c2d3767 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt @@ -2,10 +2,10 @@ package com.farsitel.bazaar import android.app.Activity import android.content.Context -import com.farsitel.bazaar.callback.SKUDetailsCallback import com.farsitel.bazaar.callback.ConnectionCallback import com.farsitel.bazaar.callback.ConsumeCallback import com.farsitel.bazaar.callback.PaymentCallback +import com.farsitel.bazaar.callback.SKUDetailsCallback import ir.cafebazaar.poolakey.Connection import ir.cafebazaar.poolakey.ConnectionState import ir.cafebazaar.poolakey.Payment @@ -37,26 +37,11 @@ object PoolakeyJavaBridge { } } - fun startActivity( - activity: Activity, - command: PaymentActivity.Command, - paymentCallback: PaymentCallback, - productId: String, - payload: String - ) { - CallbackHolder.paymentCallback = paymentCallback; - if (connection.getState() != ConnectionState.Connected) { -// paymentCallback.onFailure(throw Exception(message :"") ) - return - } - PaymentActivity.start( - activity, - command, - productId, - payload - ) + fun disconnect() { + connection.disconnect(); } + fun getSubscriptionSkuDetails(productId: String, callback: SKUDetailsCallback) { if (connection.getState() != ConnectionState.Connected) { return @@ -77,13 +62,34 @@ object PoolakeyJavaBridge { } } + + fun startActivity( + activity: Activity, + command: PaymentActivity.Command, + paymentCallback: PaymentCallback, + productId: String, + payload: String + ) { + CallbackHolder.paymentCallback = paymentCallback; + if (connection.getState() != ConnectionState.Connected) { +// paymentCallback.onFailure(throw Exception(message :"") ) + return + } + PaymentActivity.start( + activity, + command, + productId, + payload + ) + } + fun consume(purchaseToken: String, callback: ConsumeCallback) { if (connection.getState() != ConnectionState.Connected) { return } payment.consumeProduct(purchaseToken) { consumeSucceed(callback::onSuccess) - consumeFailed (callback::onFailure) + consumeFailed(callback::onFailure) } } } \ No newline at end of file diff --git a/unity/Assets/Poolakey/Scripts/Payment.cs b/unity/Assets/Poolakey/Scripts/Payment.cs index 1740b65..8f0c779 100644 --- a/unity/Assets/Poolakey/Scripts/Payment.cs +++ b/unity/Assets/Poolakey/Scripts/Payment.cs @@ -15,7 +15,7 @@ public Payment(PaymentConfiguration paymentConfiguration) if (pluginClass != null) { poolakeyBridge = pluginClass.CallStatic("getInstance"); - } + } } } @@ -26,6 +26,10 @@ public void Connect() paymentConfiguration.securityCheck.rsaPublicKey, new ConnectionCallbackProxy()); } + public void Disconnect() + { + poolakeyBridge.Call("disconnect"); + } public void GetPurchaseSkuDetails(string productId) { @@ -34,7 +38,6 @@ public void GetPurchaseSkuDetails(string productId) productId, new SKUDetailsCallbackProxy(this)); } - public void GetSubscriptionSkuDetails(string productId) { poolakeyBridge.Call( @@ -51,7 +54,6 @@ public void Purchase(string productId, string payload = "") payload, new PaymentCallbackProxy(this)); } - public void Subscribe(string productId, string payload = "") { poolakeyBridge.Call( @@ -68,4 +70,5 @@ public void Consume(string token) token, new ConsumeCallbackProxy(this)); } + } } \ No newline at end of file From eee4568a18cb97f6aaddfbe4e05d1276641e5db1 Mon Sep 17 00:00:00 2001 From: Mansour Date: Sun, 18 Jul 2021 16:56:52 +0430 Subject: [PATCH 09/32] Rename kotlin bridge --- .../java/com/farsitel/bazaar/PaymentActivity.kt | 10 +++------- .../java/com/farsitel/bazaar/PoolakeyBridge.java | 14 +++++++------- ...olakeyJavaBridge.kt => PoolakeyKotlinBridge.kt} | 2 +- 3 files changed, 11 insertions(+), 15 deletions(-) rename android/src/main/java/com/farsitel/bazaar/{PoolakeyJavaBridge.kt => PoolakeyKotlinBridge.kt} (99%) diff --git a/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt b/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt index 595d376..3d6d7fd 100644 --- a/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt +++ b/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt @@ -4,10 +4,6 @@ import android.app.Activity import android.content.Intent import android.os.Bundle import androidx.fragment.app.FragmentActivity -import ir.cafebazaar.poolakey.Connection -import ir.cafebazaar.poolakey.Payment -import ir.cafebazaar.poolakey.config.PaymentConfiguration -import ir.cafebazaar.poolakey.config.SecurityCheck import ir.cafebazaar.poolakey.request.PurchaseRequest import java.security.InvalidParameterException @@ -27,7 +23,7 @@ class PaymentActivity : FragmentActivity() { } private fun purchaseProduct() { - PoolakeyJavaBridge.payment.purchaseProduct( + PoolakeyKotlinBridge.payment.purchaseProduct( this@PaymentActivity, PurchaseRequest(productId!!, REQUEST_CODE, payload) ) { @@ -43,7 +39,7 @@ class PaymentActivity : FragmentActivity() { } private fun subscribeProduct() { - PoolakeyJavaBridge.payment.subscribeProduct( + PoolakeyKotlinBridge.payment.subscribeProduct( this@PaymentActivity, PurchaseRequest(productId!!, REQUEST_CODE, payload) ) { @@ -66,7 +62,7 @@ class PaymentActivity : FragmentActivity() { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) - PoolakeyJavaBridge.payment.onActivityResult(requestCode, resultCode, data) { + PoolakeyKotlinBridge.payment.onActivityResult(requestCode, resultCode, data) { purchaseSucceed { purchaseEntity -> // User purchased the product CallbackHolder.paymentCallback?.onSuccess(purchaseEntity) diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java index b6b3b49..bd98d9d 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java @@ -52,30 +52,30 @@ private Activity getCurrentActivity() { } public void connect(String rsaPublicKey, ConnectionCallback callback) { - PoolakeyJavaBridge.INSTANCE.connect(getCurrentActivity(), rsaPublicKey, callback); + PoolakeyKotlinBridge.INSTANCE.connect(getCurrentActivity(), rsaPublicKey, callback); } public void disconnect() { - PoolakeyJavaBridge.INSTANCE.disconnect(); + PoolakeyKotlinBridge.INSTANCE.disconnect(); } public void getPurchaseSkuDetails(String productId, SKUDetailsCallback callback) { - PoolakeyJavaBridge.INSTANCE.getPurchaseSkuDetails(productId, callback); + PoolakeyKotlinBridge.INSTANCE.getPurchaseSkuDetails(productId, callback); } public void getSubscriptionSkuDetails(String productId, SKUDetailsCallback callback) { - PoolakeyJavaBridge.INSTANCE.getSubscriptionSkuDetails(productId, callback); + PoolakeyKotlinBridge.INSTANCE.getSubscriptionSkuDetails(productId, callback); } public void purchase(String productId, String payload, PaymentCallback callback) { - PoolakeyJavaBridge.INSTANCE.startActivity(getCurrentActivity(), PaymentActivity.Command.PurchaseProduct, callback, productId, payload); + PoolakeyKotlinBridge.INSTANCE.startActivity(getCurrentActivity(), PaymentActivity.Command.PurchaseProduct, callback, productId, payload); } public void subscribe(String productId, String payload, PaymentCallback callback) { - PoolakeyJavaBridge.INSTANCE.startActivity(getCurrentActivity(), PaymentActivity.Command.Subscribe, callback, productId, payload); + PoolakeyKotlinBridge.INSTANCE.startActivity(getCurrentActivity(), PaymentActivity.Command.Subscribe, callback, productId, payload); } public void consume(String token, ConsumeCallback callback) { - PoolakeyJavaBridge.INSTANCE.consume(token, callback); + PoolakeyKotlinBridge.INSTANCE.consume(token, callback); } } diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt b/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt similarity index 99% rename from android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt rename to android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt index c2d3767..b2bf7d3 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyJavaBridge.kt +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt @@ -12,7 +12,7 @@ import ir.cafebazaar.poolakey.Payment import ir.cafebazaar.poolakey.config.PaymentConfiguration import ir.cafebazaar.poolakey.config.SecurityCheck -object PoolakeyJavaBridge { +object PoolakeyKotlinBridge { lateinit var payment: Payment lateinit var connection: Connection From b7adb97e5dc58355e84ad663be1026bd911bb017 Mon Sep 17 00:00:00 2001 From: Mansour Date: Sun, 18 Jul 2021 16:57:30 +0430 Subject: [PATCH 10/32] Add auto-update task for aar --- android/build.gradle | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/android/build.gradle b/android/build.gradle index bfdcd76..4c8f7da 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -57,4 +57,15 @@ task createJar(type: Copy) { into('build') include('classes.jar') rename('classes.jar', 'Poolakey.jar') +} +task updateAAR(type: Copy) { + from('build/outputs/aar') + into('../unity/Assets/Poolakey/Plugins/') + include(project.name + '-release.aar') +} + +project.tasks.whenTaskAdded { Task theTask -> + if (theTask.name == 'assembleRelease') { + theTask.dependsOn(updateAAR) // Compile the custom task after compiling apk + } } \ No newline at end of file From fcd986492fb2729f202ce5bc512de97c54d56081 Mon Sep 17 00:00:00 2001 From: Mansour Date: Sun, 18 Jul 2021 16:58:52 +0430 Subject: [PATCH 11/32] Integrate purchase and subscribe --- .../com/farsitel/bazaar/PoolakeyBridge.java | 17 +++------ .../farsitel/bazaar/PoolakeyKotlinBridge.kt | 27 ++++++------- .../Plugins/poolakeyunitybridge-release.aar | Bin 36816 -> 36929 bytes .../Scripts/Callbacks/ConsumeCallbackProxy.cs | 7 +--- .../Scripts/Callbacks/PaymentCallbackProxy.cs | 7 +--- .../Callbacks/SKUDetailsCallbackProxy.cs | 7 +--- unity/Assets/Poolakey/Scripts/Payment.cs | 36 +++--------------- 7 files changed, 27 insertions(+), 74 deletions(-) diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java index bd98d9d..efeab40 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java @@ -59,20 +59,13 @@ public void disconnect() { PoolakeyKotlinBridge.INSTANCE.disconnect(); } - public void getPurchaseSkuDetails(String productId, SKUDetailsCallback callback) { - PoolakeyKotlinBridge.INSTANCE.getPurchaseSkuDetails(productId, callback); + public void getSkuDetails(String type, String productId, SKUDetailsCallback callback) { + PoolakeyKotlinBridge.INSTANCE.getSkuDetails(type, productId, callback); } - public void getSubscriptionSkuDetails(String productId, SKUDetailsCallback callback) { - PoolakeyKotlinBridge.INSTANCE.getSubscriptionSkuDetails(productId, callback); - } - - public void purchase(String productId, String payload, PaymentCallback callback) { - PoolakeyKotlinBridge.INSTANCE.startActivity(getCurrentActivity(), PaymentActivity.Command.PurchaseProduct, callback, productId, payload); - } - - public void subscribe(String productId, String payload, PaymentCallback callback) { - PoolakeyKotlinBridge.INSTANCE.startActivity(getCurrentActivity(), PaymentActivity.Command.Subscribe, callback, productId, payload); + public void purchase(String type, String productId, String payload, PaymentCallback callback) { + PaymentActivity.Command cmd = type == "" ? PaymentActivity.Command.PurchaseProduct : PaymentActivity.Command.Subscribe + PoolakeyKotlinBridge.INSTANCE.startActivity(getCurrentActivity(), cmd, callback, productId, payload); } public void consume(String token, ConsumeCallback callback) { diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt b/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt index b2bf7d3..bb8dab8 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt @@ -42,27 +42,24 @@ object PoolakeyKotlinBridge { } - fun getSubscriptionSkuDetails(productId: String, callback: SKUDetailsCallback) { + fun getSkuDetails(type: String, productId: String, callback: SKUDetailsCallback) { if (connection.getState() != ConnectionState.Connected) { return } - payment.getSubscriptionSkuDetails(skuIds = listOf(productId)) { - getSkuDetailsSucceed(callback::onSuccess) - getSkuDetailsFailed(callback::onFailure) + when (type) { + "inApp" -> + payment.getInAppSkuDetails(skuIds = listOf(productId)) { + getSkuDetailsSucceed(callback::onSuccess) + getSkuDetailsFailed(callback::onFailure) + } + else -> + payment.getSubscriptionSkuDetails(skuIds = listOf(productId)) { + getSkuDetailsSucceed(callback::onSuccess) + getSkuDetailsFailed(callback::onFailure) + } } } - fun getPurchaseSkuDetails(productId: String, callback: SKUDetailsCallback) { - if (connection.getState() != ConnectionState.Connected) { - return - } - payment.getInAppSkuDetails(skuIds = listOf(productId)) { - getSkuDetailsSucceed(callback::onSuccess) - getSkuDetailsFailed(callback::onFailure) - } - } - - fun startActivity( activity: Activity, command: PaymentActivity.Command, diff --git a/unity/Assets/Poolakey/Plugins/poolakeyunitybridge-release.aar b/unity/Assets/Poolakey/Plugins/poolakeyunitybridge-release.aar index 6e3e6bd32b14e9c8226d14ff0271c5695fb5c57e..8ba788b3e6e5e4e6d98744233a0422fc6b5c6372 100644 GIT binary patch delta 34985 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"originalJson")); diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs index 91166be..9efbb4b 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs @@ -4,12 +4,9 @@ namespace Poolakey.Scripts.Callbacks { public class SKUDetailsCallbackProxy : AndroidJavaProxy { - private Payment owner; + private Result> result; - public SKUDetailsCallbackProxy(Payment owner) : base("com.farsitel.bazaar.callback.SKUDetailsCallback") - { - this.owner = owner; - } + public SKUDetailsCallbackProxy() : base("com.farsitel.bazaar.callback.SKUDetailsCallback"){} void onSuccess(AndroidJavaObject purchaseEntity) { diff --git a/unity/Assets/Poolakey/Scripts/Payment.cs b/unity/Assets/Poolakey/Scripts/Payment.cs index 8f0c779..8012fcb 100644 --- a/unity/Assets/Poolakey/Scripts/Payment.cs +++ b/unity/Assets/Poolakey/Scripts/Payment.cs @@ -5,6 +5,7 @@ namespace Poolakey.Scripts { public class Payment { + public enum Type { inApp, subscription } PaymentConfiguration paymentConfiguration; private AndroidJavaObject poolakeyBridge; public Payment(PaymentConfiguration paymentConfiguration) @@ -31,44 +32,19 @@ public void Disconnect() poolakeyBridge.Call("disconnect"); } - public void GetPurchaseSkuDetails(string productId) + public void GetSkuDetails(string productId, Type type = Type.inApp) { - poolakeyBridge.Call( - "getPurchaseSkuDetails", - productId, - new SKUDetailsCallbackProxy(this)); - } - public void GetSubscriptionSkuDetails(string productId) - { - poolakeyBridge.Call( - "getSubscriptionSkuDetails", - productId, - new SKUDetailsCallbackProxy(this)); + poolakeyBridge.Call("getSkuDetails", type.ToString(), productId, new SKUDetailsCallbackProxy()); } - public void Purchase(string productId, string payload = "") + public void Purchase(string productId, Type type = Type.inApp, string payload = "") { - poolakeyBridge.Call( - "purchase", - productId, - payload, - new PaymentCallbackProxy(this)); - } - public void Subscribe(string productId, string payload = "") - { - poolakeyBridge.Call( - "subscribe", - productId, - payload, - new PaymentCallbackProxy(this)); + poolakeyBridge.Call("purchase", type.ToString(), productId, payload, new PaymentCallbackProxy()); } public void Consume(string token) { - poolakeyBridge.Call( - "consume", - token, - new ConsumeCallbackProxy(this)); + poolakeyBridge.Call("consume", token, new ConsumeCallbackProxy()); } } } \ No newline at end of file From eb21ed0954cd1fedd2c62d7919d765bec17c8137 Mon Sep 17 00:00:00 2001 From: Mansour Date: Sun, 18 Jul 2021 16:59:45 +0430 Subject: [PATCH 12/32] Remove callbak holder --- .../com/farsitel/bazaar/CallbackHolder.kt | 9 --------- .../com/farsitel/bazaar/PoolakeyBridge.java | 6 ++++-- .../Plugins/poolakeyunitybridge-release.aar | Bin 36929 -> 36996 bytes 3 files changed, 4 insertions(+), 11 deletions(-) delete mode 100644 android/src/main/java/com/farsitel/bazaar/CallbackHolder.kt diff --git a/android/src/main/java/com/farsitel/bazaar/CallbackHolder.kt b/android/src/main/java/com/farsitel/bazaar/CallbackHolder.kt deleted file mode 100644 index b739ab0..0000000 --- a/android/src/main/java/com/farsitel/bazaar/CallbackHolder.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.farsitel.bazaar - -import com.farsitel.bazaar.callback.ConsumeCallback -import com.farsitel.bazaar.callback.PaymentCallback - -object CallbackHolder { - var paymentCallback: PaymentCallback? = null - var consumeCallback: ConsumeCallback? = null -} \ No newline at end of file diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java index efeab40..6288e25 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java @@ -11,7 +11,7 @@ import java.lang.reflect.Field; public class PoolakeyBridge { - private static final String TAG = "PoolakeyBridge"; + public static final String TAG = "PoolakeyBridge"; private static PoolakeyBridge instance; private Class mUnityPlayerClass; @@ -64,7 +64,9 @@ public void getSkuDetails(String type, String productId, SKUDetailsCallback call } public void purchase(String type, String productId, String payload, PaymentCallback callback) { - PaymentActivity.Command cmd = type == "" ? PaymentActivity.Command.PurchaseProduct : PaymentActivity.Command.Subscribe + PaymentActivity.Command cmd = PaymentActivity.Command.PurchaseProduct; + if (!type.equalsIgnoreCase("inApp")) + cmd = PaymentActivity.Command.Subscribe; PoolakeyKotlinBridge.INSTANCE.startActivity(getCurrentActivity(), cmd, callback, productId, payload); } diff --git a/unity/Assets/Poolakey/Plugins/poolakeyunitybridge-release.aar b/unity/Assets/Poolakey/Plugins/poolakeyunitybridge-release.aar index 8ba788b3e6e5e4e6d98744233a0422fc6b5c6372..b6e63f7f5c9d29e1ebcf97769a942d9cb84d0a9f 100644 GIT binary patch delta 35035 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 H00000B{8n8 delta 34989 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 Date: Sun, 18 Jul 2021 17:00:02 +0430 Subject: [PATCH 13/32] Add sync/async Connect ability --- .../farsitel/bazaar/PoolakeyKotlinBridge.kt | 4 +--- .../bazaar/callback/ConnectionCallback.java | 5 +---- .../Callbacks/ConnectionCallbackProxy.cs | 20 ++++++++++++++----- unity/Assets/Poolakey/Scripts/Data/Result.cs | 19 ++++++++++++++++++ unity/Assets/Poolakey/Scripts/Payment.cs | 15 +++++++++----- 5 files changed, 46 insertions(+), 17 deletions(-) create mode 100644 unity/Assets/Poolakey/Scripts/Data/Result.cs diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt b/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt index bb8dab8..20dc7f9 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt @@ -25,9 +25,7 @@ object PoolakeyKotlinBridge { val paymentConfig = PaymentConfiguration(localSecurityCheck = securityCheck) payment = Payment(context = context, config = paymentConfig) connection = payment.connect { - connectionFailed { - callback.onFailure() - } + connectionFailed{ t -> callback.onFailure(t.message, t.stackTrace.joinToString { "\n" }) } connectionSucceed { callback.onConnect() } diff --git a/android/src/main/java/com/farsitel/bazaar/callback/ConnectionCallback.java b/android/src/main/java/com/farsitel/bazaar/callback/ConnectionCallback.java index 91aa211..19ed031 100644 --- a/android/src/main/java/com/farsitel/bazaar/callback/ConnectionCallback.java +++ b/android/src/main/java/com/farsitel/bazaar/callback/ConnectionCallback.java @@ -1,10 +1,7 @@ package com.farsitel.bazaar.callback; public interface ConnectionCallback { - void onConnect(); - void onDisconnect(); - - void onFailure(); + void onFailure(String message, String stackTrace); } \ No newline at end of file diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs index f313a64..295939c 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs @@ -1,24 +1,34 @@ +using System.Threading.Tasks; +using Poolakey.Scripts.Data; using UnityEngine; namespace Poolakey.Scripts.Callbacks { public class ConnectionCallbackProxy : AndroidJavaProxy { - public ConnectionCallbackProxy() : base("com.farsitel.bazaar.callback.ConnectionCallback") {} + private Result result; + public ConnectionCallbackProxy() : base("com.farsitel.bazaar.callback.ConnectionCallback") { } void onConnect() { - Debug.Log("onConnectttttt"); + result = new Result(Status.Success, true, "Connection Succeed."); } void onDisconnect() { - Debug.Log("onDisconnect"); + result = new Result(Status.Disconnect, true, "Connection Disconnect."); } - void onFailure() + void onFailure(string message, string stackTrace) { - Debug.Log("onFailure"); + result = new Result(Status.Failure, false, message, stackTrace); + } + + public async Task> WaitForResult() + { + while (result == null) + await Task.Delay(100); + return result; } } } \ No newline at end of file diff --git a/unity/Assets/Poolakey/Scripts/Data/Result.cs b/unity/Assets/Poolakey/Scripts/Data/Result.cs new file mode 100644 index 0000000..335eb41 --- /dev/null +++ b/unity/Assets/Poolakey/Scripts/Data/Result.cs @@ -0,0 +1,19 @@ +namespace Poolakey.Scripts.Data +{ + public enum Status { Success, Cancel, Disconnect, Failure, Unknown } + public class Result + { + public Status status; + public string message; + public T data; + public string stackTrace; + + public Result(Status status, T data, string message, string stackTrace = null) + { + this.status = status; + this.message = message; + this.data = data; + this.stackTrace = stackTrace; + } + } +} \ No newline at end of file diff --git a/unity/Assets/Poolakey/Scripts/Payment.cs b/unity/Assets/Poolakey/Scripts/Payment.cs index 8012fcb..6b7493f 100644 --- a/unity/Assets/Poolakey/Scripts/Payment.cs +++ b/unity/Assets/Poolakey/Scripts/Payment.cs @@ -1,5 +1,9 @@ using UnityEngine; using Poolakey.Scripts.Callbacks; +using System.Threading.Tasks; +using Poolakey.Scripts.Data; +using System.Collections.Generic; +using System; namespace Poolakey.Scripts { @@ -20,12 +24,13 @@ public Payment(PaymentConfiguration paymentConfiguration) } } - public void Connect() + public async Task> Connect(Action> onComplete = null) { - poolakeyBridge.Call( - "connect", - paymentConfiguration.securityCheck.rsaPublicKey, - new ConnectionCallbackProxy()); + var callback = new ConnectionCallbackProxy(); + poolakeyBridge.Call("connect", paymentConfiguration.securityCheck.rsaPublicKey, callback); + var result = await callback.WaitForResult(); + onComplete?.Invoke(result); + return result; } public void Disconnect() { From 9b97a69a594688b4a92dae4ea9f387c4773b0c03 Mon Sep 17 00:00:00 2001 From: Mansour Date: Sun, 18 Jul 2021 17:00:37 +0430 Subject: [PATCH 14/32] Add sync/async GetSKUDetails ability --- .../bazaar/callback/SKUDetailsCallback.java | 8 ++------ unity/Assets/Poolakey/Demo/PoolakeyExample.cs | 16 +++++++++------ .../Callbacks/SKUDetailsCallbackProxy.cs | 20 ++++++++++++++----- .../Poolakey/Scripts/Data/SKUDetails.cs | 19 ++++++++++++++++++ unity/Assets/Poolakey/Scripts/Payment.cs | 8 ++++++-- 5 files changed, 52 insertions(+), 19 deletions(-) create mode 100644 unity/Assets/Poolakey/Scripts/Data/SKUDetails.cs diff --git a/android/src/main/java/com/farsitel/bazaar/callback/SKUDetailsCallback.java b/android/src/main/java/com/farsitel/bazaar/callback/SKUDetailsCallback.java index 222aacc..cb85054 100644 --- a/android/src/main/java/com/farsitel/bazaar/callback/SKUDetailsCallback.java +++ b/android/src/main/java/com/farsitel/bazaar/callback/SKUDetailsCallback.java @@ -7,10 +7,6 @@ import ir.cafebazaar.poolakey.entity.SkuDetails; public interface SKUDetailsCallback { - - default void onSuccess(List it) { - } - - default void onFailure(@NotNull Throwable throwable) { - } + void onSuccess(List it); + void onFailure(String message, String stackTrace); } diff --git a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs index 0ff2b9c..402690e 100644 --- a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs +++ b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs @@ -1,7 +1,8 @@ -using UnityEngine; -using Poolakey; +using UnityEngine; using Poolakey.Scripts; using UnityEngine.UI; +using Poolakey; +using Poolakey.Scripts.Data; public class PoolakeyExample : MonoBehaviour { @@ -11,19 +12,22 @@ public class PoolakeyExample : MonoBehaviour void Start() { Log("Poolakey Plugin Version: " + PluginVersion.VersionString); - SecurityCheck securityCheck = SecurityCheck.Enable("MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwCr1DxbF5Ub4SnksjwVnEu5wmLyzoD7MHtM8rVzDFeZInWLsxefy4j9sm853u7haBEBk83na5wHAYzHHK6oq5nzCpdxzbQUuVfw5x4Ir4zb6cUPbHlHNHgRYMfcEaWWV4ek/kY+PebYsZNAdPpiWH0tx+kTYjRvKUsvrkVvsUfHOYyUJmhZFHwVJohSVL2X6uTqBdlZVPsD0aJtCrbXL2JuzsNvH3q91OcQ6yLV1NsCAwEAAQ=="); + SecurityCheck securityCheck = SecurityCheck.Disable(); PaymentConfiguration paymentConfiguration = new PaymentConfiguration(securityCheck); payment = new Payment(paymentConfiguration); } public void Connect() { - payment.Connect(); + _ = payment.Connect(); } - public void GetPurchaseSkuDetails() + public async void GetPurchaseSkuDetails() { - payment.GetPurchaseSkuDetails("test"); + var result = await payment.GetSkuDetails("coin_6"); + if (result.status == Status.Success) + foreach (var sku in result.data) + print(sku.ToString()); } public void GetSubscribesSkuDetails() { diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs index 9efbb4b..5068d93 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs @@ -1,3 +1,6 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Poolakey.Scripts.Data; using UnityEngine; namespace Poolakey.Scripts.Callbacks @@ -10,18 +13,25 @@ public SKUDetailsCallbackProxy() : base("com.farsitel.bazaar.callback.SKUDetails void onSuccess(AndroidJavaObject purchaseEntity) { - Debug.Log("onSuccess "); + var list = new List(); var length = purchaseEntity.Call("size"); for (int i = 0; i < length; i++) { - var sku = purchaseEntity.Call("get", i); - Debug.Log(sku.Call("toString")); + list.Add(new SKUDetails(purchaseEntity.Call("get", i))); } + result = new Result>(Status.Success, list, "Fetch SKU details completed."); } - void onFailure(AndroidJavaObject throwable) + void onFailure(string message, string stackTrace) { - Debug.Log("onFailure " + throwable); + result = new Result>(Status.Failure, null, message, stackTrace); + } + + public async Task>> WaitForResult() + { + while (result == null) + await Task.Delay(100); + return result; } } } \ No newline at end of file diff --git a/unity/Assets/Poolakey/Scripts/Data/SKUDetails.cs b/unity/Assets/Poolakey/Scripts/Data/SKUDetails.cs new file mode 100644 index 0000000..f8044d4 --- /dev/null +++ b/unity/Assets/Poolakey/Scripts/Data/SKUDetails.cs @@ -0,0 +1,19 @@ +using UnityEngine; + +namespace Poolakey.Scripts.Data +{ + public class SKUDetails + { + public string sku, type, title, price, description; + public SKUDetails(AndroidJavaObject entity) + { + this.sku = entity.Get("sku"); + this.type = entity.Get("type"); + this.title = entity.Get("title"); + this.price = entity.Get("price"); + this.description = entity.Get("description"); + } + + override public string ToString() => $"sku: {sku}, type: {type}, title: {title}, price: {price}, description: {description}"; + } +} \ No newline at end of file diff --git a/unity/Assets/Poolakey/Scripts/Payment.cs b/unity/Assets/Poolakey/Scripts/Payment.cs index 6b7493f..c50d759 100644 --- a/unity/Assets/Poolakey/Scripts/Payment.cs +++ b/unity/Assets/Poolakey/Scripts/Payment.cs @@ -37,9 +37,13 @@ public void Disconnect() poolakeyBridge.Call("disconnect"); } - public void GetSkuDetails(string productId, Type type = Type.inApp) + public async Task>> GetSkuDetails(string productId, Action>> onComplete = null, Type type = Type.inApp) { - poolakeyBridge.Call("getSkuDetails", type.ToString(), productId, new SKUDetailsCallbackProxy()); + var callback = new SKUDetailsCallbackProxy(); + poolakeyBridge.Call("getSkuDetails", type.ToString(), productId, callback); + var result = await callback.WaitForResult(); + onComplete?.Invoke(result); + return result; } public void Purchase(string productId, Type type = Type.inApp, string payload = "") From 063a58e530ba1862ef2e4264e5f5db995656f126 Mon Sep 17 00:00:00 2001 From: Mansour Date: Sun, 18 Jul 2021 17:01:07 +0430 Subject: [PATCH 15/32] Add sync/async Purchase ability --- .../com/farsitel/bazaar/PaymentActivity.kt | 53 +++++++++++++------ .../farsitel/bazaar/PoolakeyKotlinBridge.kt | 11 ++-- .../bazaar/callback/PaymentCallback.java | 17 ++---- unity/Assets/Poolakey/Demo/PoolakeyExample.cs | 20 ++++--- .../Scripts/Callbacks/PaymentCallbackProxy.cs | 21 ++++++-- .../Poolakey/Scripts/Data/PurchaseInfo.cs | 13 +++++ unity/Assets/Poolakey/Scripts/Payment.cs | 8 ++- 7 files changed, 93 insertions(+), 50 deletions(-) create mode 100644 unity/Assets/Poolakey/Scripts/Data/PurchaseInfo.cs diff --git a/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt b/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt index 3d6d7fd..b5d9f1e 100644 --- a/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt +++ b/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt @@ -4,6 +4,7 @@ import android.app.Activity import android.content.Intent import android.os.Bundle import androidx.fragment.app.FragmentActivity +import com.farsitel.bazaar.callback.PaymentCallback import ir.cafebazaar.poolakey.request.PurchaseRequest import java.security.InvalidParameterException @@ -24,15 +25,15 @@ class PaymentActivity : FragmentActivity() { private fun purchaseProduct() { PoolakeyKotlinBridge.payment.purchaseProduct( - this@PaymentActivity, - PurchaseRequest(productId!!, REQUEST_CODE, payload) + this@PaymentActivity, + PurchaseRequest(productId!!, REQUEST_CODE, payload) ) { purchaseFlowBegan { // Bazaar's billing screen has opened successfully } - failedToBeginFlow { throwable -> + failedToBeginFlow { t -> // Failed to open Bazaar's billing screen - CallbackHolder.paymentCallback?.onFailure(throwable) + paymentCallback?.onFailure(t.message, t.stackTrace.joinToString("\n")) finish() } } @@ -40,15 +41,15 @@ class PaymentActivity : FragmentActivity() { private fun subscribeProduct() { PoolakeyKotlinBridge.payment.subscribeProduct( - this@PaymentActivity, - PurchaseRequest(productId!!, REQUEST_CODE, payload) + this@PaymentActivity, + PurchaseRequest(productId!!, REQUEST_CODE, payload) ) { purchaseFlowBegan { // Bazaar's billing screen has opened successfully } - failedToBeginFlow { throwable -> + failedToBeginFlow { t -> // Failed to open Bazaar's billing screen - CallbackHolder.paymentCallback?.onFailure(throwable) + paymentCallback?.onFailure(t.message, t.stackTrace.joinToString("\n")) finish() } } @@ -63,37 +64,55 @@ class PaymentActivity : FragmentActivity() { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) PoolakeyKotlinBridge.payment.onActivityResult(requestCode, resultCode, data) { - purchaseSucceed { purchaseEntity -> + purchaseSucceed { p -> // User purchased the product - CallbackHolder.paymentCallback?.onSuccess(purchaseEntity) + paymentCallback?.onSuccess( + p.orderId, + p.purchaseToken, + p.payload, + p.packageName, + p.purchaseState.ordinal, + p.purchaseTime, + p.productId, + p.originalJson, + p.dataSignature + ) finish() } purchaseCanceled { // User canceled the purchase - CallbackHolder.paymentCallback?.onCancel() + paymentCallback?.onCancel() finish() } - purchaseFailed { throwable -> - CallbackHolder.paymentCallback?.onFailure(throwable) + purchaseFailed { t -> + paymentCallback?.onFailure(t.message, t.stackTrace.joinToString("\n")) finish() } } } + override fun onDestroy() { + super.onDestroy(); + paymentCallback = null + } + companion object { private const val REQUEST_CODE: Int = 1000 private const val KEY_PRODUCT_ID = "productId" private const val KEY_PAYLOAD = "payload" private const val KEY_COMMAND = "command" + var paymentCallback: PaymentCallback? = null @JvmStatic fun start( - activity: Activity, - command: Command, - productId: String, - payload: String? + activity: Activity, + command: Command, + productId: String, + callback: PaymentCallback, + payload: String? ) { + paymentCallback = callback val intent = Intent(activity, PaymentActivity::class.java) intent.putExtra(KEY_PRODUCT_ID, productId) intent.putExtra(KEY_PAYLOAD, payload) diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt b/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt index 20dc7f9..88c7875 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt @@ -42,18 +42,19 @@ object PoolakeyKotlinBridge { fun getSkuDetails(type: String, productId: String, callback: SKUDetailsCallback) { if (connection.getState() != ConnectionState.Connected) { + callback.onFailure("Connection not found.", "In order to getting ske details, connect to Poolakey!") return } when (type) { "inApp" -> payment.getInAppSkuDetails(skuIds = listOf(productId)) { getSkuDetailsSucceed(callback::onSuccess) - getSkuDetailsFailed(callback::onFailure) + getSkuDetailsFailed{ t -> callback.onFailure(t.message, t.stackTrace.joinToString { "\n" }) } } else -> payment.getSubscriptionSkuDetails(skuIds = listOf(productId)) { getSkuDetailsSucceed(callback::onSuccess) - getSkuDetailsFailed(callback::onFailure) + getSkuDetailsFailed{ t -> callback.onFailure(t.message, t.stackTrace.joinToString { "\n" }) } } } } @@ -61,19 +62,19 @@ object PoolakeyKotlinBridge { fun startActivity( activity: Activity, command: PaymentActivity.Command, - paymentCallback: PaymentCallback, + callback: PaymentCallback, productId: String, payload: String ) { - CallbackHolder.paymentCallback = paymentCallback; if (connection.getState() != ConnectionState.Connected) { -// paymentCallback.onFailure(throw Exception(message :"") ) + callback.onFailure("Connection not found.", "In order to purchasing, connect to Poolakey!") return } PaymentActivity.start( activity, command, productId, + callback, payload ) } diff --git a/android/src/main/java/com/farsitel/bazaar/callback/PaymentCallback.java b/android/src/main/java/com/farsitel/bazaar/callback/PaymentCallback.java index 45ac7c2..9573580 100644 --- a/android/src/main/java/com/farsitel/bazaar/callback/PaymentCallback.java +++ b/android/src/main/java/com/farsitel/bazaar/callback/PaymentCallback.java @@ -1,22 +1,13 @@ package com.farsitel.bazaar.callback; -import com.farsitel.bazaar.CallbackHolder; - import org.jetbrains.annotations.NotNull; import ir.cafebazaar.poolakey.entity.PurchaseInfo; +import ir.cafebazaar.poolakey.entity.PurchaseState; public interface PaymentCallback { - default void onSuccess(PurchaseInfo purchaseEntity) { - CallbackHolder.INSTANCE.setPaymentCallback(null); - } - - default void onCancel() { - CallbackHolder.INSTANCE.setPaymentCallback(null); - } - - default void onFailure(@NotNull Throwable throwable) { - CallbackHolder.INSTANCE.setPaymentCallback(null); - } + void onSuccess(String orderId, String purchaseToken, String payload, String packageName, int purchaseState, long purchaseTime, String productId, String originalJson, String dataSignature); + void onFailure(String message, String stackTrace); + void onCancel(); } diff --git a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs index 402690e..bc493a4 100644 --- a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs +++ b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs @@ -9,6 +9,8 @@ public class PoolakeyExample : MonoBehaviour public Text ConsoleText; private Payment payment; + private PurchaseInfo purchase; + void Start() { Log("Poolakey Plugin Version: " + PluginVersion.VersionString); @@ -24,23 +26,25 @@ public void Connect() public async void GetPurchaseSkuDetails() { - var result = await payment.GetSkuDetails("coin_6"); + var result = await payment.GetSkuDetails("test"); if (result.status == Status.Success) foreach (var sku in result.data) print(sku.ToString()); } - public void GetSubscribesSkuDetails() - { - payment.GetSubscriptionSkuDetails("test"); - } - public void Purchase() + public async void Purchase() { - payment.Purchase("test"); + var result = await payment.Purchase("test"); + print(result.message + " .. " + result.stackTrace); + if (result.status == Status.Success) + { + purchase = result.data; + print(purchase.ToString()); + } } public void Subscribe() { - payment.Subscribe("test"); + _ = payment.Purchase("test", Payment.Type.subscription); } public void Consume() diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs index 312d36a..74da135 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs @@ -1,24 +1,35 @@ +using System.Threading.Tasks; +using Poolakey.Scripts.Data; using UnityEngine; namespace Poolakey.Scripts.Callbacks { public class PaymentCallbackProxy : AndroidJavaProxy { + private Result result; public PaymentCallbackProxy() : base("com.farsitel.bazaar.callback.PaymentCallback") { } - void onSuccess(AndroidJavaObject purchaseEntity) + void onSuccess(string orderId, string purchaseToken, string payload, string packageName, int purchaseState, long purchaseTime, string productId, string originalJson, string dataSignature) { - Debug.Log("onSuccess " + purchaseEntity.Get("originalJson")); + var data = new PurchaseInfo { orderId = orderId, purchaseToken = purchaseToken, payload = payload, packageName = packageName, purchaseState = (PurchaseInfo.State)purchaseState, purchaseTime = purchaseTime, productId = productId, originalJson = originalJson, dataSignature = dataSignature }; + result = new Result(Status.Success, data, "Purchase Succeed."); } - void onFailure(AndroidJavaObject throwable) + void onFailure(string message, string stackTrace) { - Debug.Log("onFailure " + throwable); + result = new Result(Status.Failure, null, message, stackTrace); } void onCancel() { - Debug.Log("onCancel"); + result = new Result(Status.Cancel, null, "Purchase Canceled."); + } + + public async Task> WaitForResult() + { + while (result == null) + await Task.Delay(100); + return result; } } } \ No newline at end of file diff --git a/unity/Assets/Poolakey/Scripts/Data/PurchaseInfo.cs b/unity/Assets/Poolakey/Scripts/Data/PurchaseInfo.cs new file mode 100644 index 0000000..73e2873 --- /dev/null +++ b/unity/Assets/Poolakey/Scripts/Data/PurchaseInfo.cs @@ -0,0 +1,13 @@ +using UnityEngine; +namespace Poolakey.Scripts.Data +{ + public class PurchaseInfo + { + public enum State { Purchased = 0, Refunded = 1 } + public string orderId, purchaseToken, payload, packageName, productId, originalJson, dataSignature; + public State purchaseState; + public long purchaseTime; + + override public string ToString() => $"orderId: {orderId}, purchaseToken: {purchaseToken}, productId: {productId}, purchaseState: {purchaseState}, purchaseTime: {purchaseTime}"; + } +} \ No newline at end of file diff --git a/unity/Assets/Poolakey/Scripts/Payment.cs b/unity/Assets/Poolakey/Scripts/Payment.cs index c50d759..416b3fb 100644 --- a/unity/Assets/Poolakey/Scripts/Payment.cs +++ b/unity/Assets/Poolakey/Scripts/Payment.cs @@ -46,9 +46,13 @@ public async Task>> GetSkuDetails(string productId, Acti return result; } - public void Purchase(string productId, Type type = Type.inApp, string payload = "") + public async Task> Purchase(string productId, Type type = Type.inApp, Action> onComplete = null, string payload = "") { - poolakeyBridge.Call("purchase", type.ToString(), productId, payload, new PaymentCallbackProxy()); + var callback = new PaymentCallbackProxy(); + poolakeyBridge.Call("purchase", type.ToString(), productId, payload, callback); + var result = await callback.WaitForResult(); + onComplete?.Invoke(result); + return result; } public void Consume(string token) From 53481300b027b155bfef620aa6446769265aa4ee Mon Sep 17 00:00:00 2001 From: Mansour Date: Sun, 18 Jul 2021 17:01:31 +0430 Subject: [PATCH 16/32] Add sync/async Consume ability --- .../farsitel/bazaar/PoolakeyKotlinBridge.kt | 3 ++- .../bazaar/callback/ConsumeCallback.java | 7 ++----- unity/Assets/Poolakey/Demo/PoolakeyExample.cs | 16 +++++++++------- .../Plugins/poolakeyunitybridge-release.aar | Bin 36996 -> 39814 bytes .../Scripts/Callbacks/ConsumeCallbackProxy.cs | 16 +++++++++++++--- unity/Assets/Poolakey/Scripts/Payment.cs | 8 ++++++-- 6 files changed, 32 insertions(+), 18 deletions(-) diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt b/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt index 88c7875..fe1cf49 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt @@ -81,11 +81,12 @@ object PoolakeyKotlinBridge { fun consume(purchaseToken: String, callback: ConsumeCallback) { if (connection.getState() != ConnectionState.Connected) { + callback.onFailure("Connection not found.", "In order to consumption, connect to Poolakey!") return } payment.consumeProduct(purchaseToken) { consumeSucceed(callback::onSuccess) - consumeFailed(callback::onFailure) + consumeFailed { t -> callback.onFailure(t.message, t.stackTrace.joinToString { "\n" }) } } } } \ No newline at end of file diff --git a/android/src/main/java/com/farsitel/bazaar/callback/ConsumeCallback.java b/android/src/main/java/com/farsitel/bazaar/callback/ConsumeCallback.java index 4dc8523..15829d0 100644 --- a/android/src/main/java/com/farsitel/bazaar/callback/ConsumeCallback.java +++ b/android/src/main/java/com/farsitel/bazaar/callback/ConsumeCallback.java @@ -3,9 +3,6 @@ import org.jetbrains.annotations.NotNull; public interface ConsumeCallback { - default void onSuccess() { - } - - default void onFailure(@NotNull Throwable throwable) { - } + void onSuccess(); + void onFailure(String message, String stackTrace); } diff --git a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs index bc493a4..c6d6e03 100644 --- a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs +++ b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; using Poolakey.Scripts; using UnityEngine.UI; using Poolakey; @@ -40,24 +40,26 @@ public async void Purchase() { purchase = result.data; print(purchase.ToString()); - } + } } public void Subscribe() { _ = payment.Purchase("test", Payment.Type.subscription); } - public void Consume() + public async void Consume() { - payment.Consume("token"); + var result = await payment.Consume(purchase.purchaseToken); + print(result.message + " .. " + result.stackTrace); } - + public void Log(string message) { ConsoleText.text += message + "\n"; } - void OnApplicationQuit(){ - payment.Disconnect(); + void OnApplicationQuit() + { + payment.Disconnect(); } } diff --git a/unity/Assets/Poolakey/Plugins/poolakeyunitybridge-release.aar b/unity/Assets/Poolakey/Plugins/poolakeyunitybridge-release.aar index b6e63f7f5c9d29e1ebcf97769a942d9cb84d0a9f..2867f6a410c71c0b9d7ab225172c4a65308275ee 100644 GIT binary patch delta 37881 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 delta 35041 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 NaGMYYT8{t#001R%vHAc2 diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs index fbf63bf..deaea34 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs @@ -1,19 +1,29 @@ +using System.Threading.Tasks; +using Poolakey.Scripts.Data; using UnityEngine; namespace Poolakey.Scripts.Callbacks { public class ConsumeCallbackProxy : AndroidJavaProxy { + private Result result; public ConsumeCallbackProxy() : base("com.farsitel.bazaar.callback.ConsumeCallback") { } void onSuccess() { - Debug.Log("onSuccess"); + result = new Result(Status.Success, true, "Consumption Succeed."); } - void onFailure(AndroidJavaObject throwable) + void onFailure(string message, string stackTrace) { - Debug.Log("onFailure " + throwable); + result = new Result(Status.Failure, false, message, stackTrace); + } + + public async Task> WaitForResult() + { + while (result == null) + await Task.Delay(100); + return result; } } } \ No newline at end of file diff --git a/unity/Assets/Poolakey/Scripts/Payment.cs b/unity/Assets/Poolakey/Scripts/Payment.cs index 416b3fb..cbd2587 100644 --- a/unity/Assets/Poolakey/Scripts/Payment.cs +++ b/unity/Assets/Poolakey/Scripts/Payment.cs @@ -55,9 +55,13 @@ public async Task> Purchase(string productId, Type type = T return result; } - public void Consume(string token) + public async Task> Consume(string token, Action> onComplete = null) { - poolakeyBridge.Call("consume", token, new ConsumeCallbackProxy()); + var callback = new ConsumeCallbackProxy(); + poolakeyBridge.Call("consume", token, callback); + var result = await callback.WaitForResult(); + onComplete?.Invoke(result); + return result; } } } \ No newline at end of file From 2b443af48dd45d2bb57ac1d4f1aed8fb9d58308c Mon Sep 17 00:00:00 2001 From: Mansour Date: Mon, 19 Jul 2021 22:42:40 +0430 Subject: [PATCH 17/32] Remove unused files --- .../Poolakey/Demo/DemoSceneSettings.lighting | 63 ------------------ .../Poolakey/Plugins/poolakeyunitybridge.aar | Bin 33991 -> 0 bytes 2 files changed, 63 deletions(-) delete mode 100644 unity/Assets/Poolakey/Demo/DemoSceneSettings.lighting delete mode 100644 unity/Assets/Poolakey/Plugins/poolakeyunitybridge.aar diff --git a/unity/Assets/Poolakey/Demo/DemoSceneSettings.lighting b/unity/Assets/Poolakey/Demo/DemoSceneSettings.lighting deleted file mode 100644 index 28cb3df..0000000 --- a/unity/Assets/Poolakey/Demo/DemoSceneSettings.lighting +++ /dev/null @@ -1,63 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!850595691 &4890085278179872738 -LightingSettings: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: DemoSceneSettings - serializedVersion: 3 - m_GIWorkflowMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_RealtimeEnvironmentLighting: 1 - m_BounceScale: 1 - m_AlbedoBoost: 1 - m_IndirectOutputScale: 1 - m_UsingShadowmask: 1 - m_BakeBackend: 1 - m_LightmapMaxSize: 1024 - m_BakeResolution: 40 - m_Padding: 2 - m_TextureCompression: 1 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0 - m_ExtractAO: 0 - m_MixedBakeMode: 2 - m_LightmapsBakeMode: 1 - m_FilterMode: 1 - m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_RealtimeResolution: 2 - m_ForceWhiteAlbedo: 0 - m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 256 - m_FinalGatherFiltering: 1 - m_PVRCulling: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_LightProbeSampleCountMultiplier: 4 - m_PVRBounces: 2 - m_PVRMinBounces: 2 - m_PVREnvironmentMIS: 0 - m_PVRFilteringMode: 2 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 diff --git a/unity/Assets/Poolakey/Plugins/poolakeyunitybridge.aar b/unity/Assets/Poolakey/Plugins/poolakeyunitybridge.aar deleted file mode 100644 index 742ac3147484996eea637928754e76df4dfa7aef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33991 zcmV)PK()V6O9KQ7000OG0000%0JJD(yR-!W0HhuO00jU508%b=cyygv%WmT~6y5hL z`~g{5a-2+-L4Xtirp2@gW)c(yK}(cOgdzo!O5!Q{@4b{{NfhBg3+bIAMVCC#PX zP|1r;rfFUJ1g;k@`cKk~SRqrqvrynZB*;QE6^Z^N>5Ht(kv)&unsh1eGky7iOtp zPrP7Yf_c<8n!M7S%>(|Zn4VbW(VoNv>pRt)TCU_HvzE(zLX97c=f{ym)+P@!Wgp#W zqJ+{LsVvWUQcp-|Qh(KNNXEs`RTFTYz{eqP@FSq+Whodbz=9yIAi|TV!59V;q*R}X zh4>*U%V;I+947@kOJEiywd7D)>m-ndS>l}i6VwLEnTue(K?r~*NKQ%96pa1pwaz@` zYG4qnm4I(8nO*^V&Ja}RtZ_*}Kgf~I8*hpC&Qp6F(WYXgCK&#cA+WV~*RTf;fy8xE z2aV1LRb&F}%;YLYgCxdMJ=S$j$w|Y^fmf|jP+sRtRrId5s$8V7lv5(9)=(_hRn<;h zoVgpQfs%ri#S~PCHjkl74qi=D9;aEKu^$Za)QIQ4090!v&_Sj%2-vLSz9bHLId$r z;^&Of$Q>GaiAL_x$SXAR8jbvdM&4kNXmiGBXU1q}#`x9I&WzE{jM2`F(awy~&WzE{ zjM2_S8)=7j<__&lwB6BWM_V0jbhOP!Chs~k=!pgghyGp4>*LPE8(s_#Nd36CvvcbbA((KL0_NVHzhUAU2cVelxlG}d9 zzlqyTOK((W%KHuH3GQhjV1;Nr;Dzp}0jNiYTYtEVk0FER6@!`fZQq}UqplSlj)JYo z)Mjj!LH<^~0zNXDj=Ud&T;BlAg%yE#Cee&RD-E-Nhcg8cUpE{hnAIQ%uPqcf*S)Xg zk;+uCl)SPNfmo^!D-xnyFGB@4aI#_A*K(8w?zguqSZI;`-y_xDIOq-r)T~f%?qJY` za~Q;Mv~ps?p~_YU;z*AgEQnoqRFqZGaRfcNE0DH4G-)+{Inj?JAkgX;2bfi|MR3pU)8v6=~`T!2z{NsQZ@DXjJ?JmmBj}hH({_WSCp_BG@69JT|Ry=J95uVUow#9)i z_h6iRT5xgdb(s7J)aaRH=H3-YXl`N0s?31>JK6XXr1K5!4#zp)*Iwe_&F$@e!MyIN zHn9tf{Vu-f9=l-KUvK--UH5pE{U4{er_TG$RXHBp+&a(uBp`(M(eu6u$n8z_yk|T{ zcZWUini^m0ykEyOx?ZgVLmjWzNv&>QmXV!KH(>;|dvq5&+q8?4?Y4`OZ5oBaaNgd} zrh^_J2!b(2(qh8%W0dO^CW=W5>niSd=qq}`angEZU#vOdrzuXxD3I}24Xt6#aRu=# zTf9B=B|GjPJBgzk)+J=rCvVgP=w**hdqAJkQFPI*7WK5y5}t^C1+V`#Ys4NKVu|q_ zcykH;5+v?4n#r^gWt_FM@aG_5XQ3}a-cCdFcJxp9s!Wi>)1>-;f=2dn{w@%ngA`r> zzchKg3U)V}zbQB#ML37rQwi9WnC|+Kw*Tnk?{YcPCi;a%u{^xWGQ%u{+J8_>0|W{H z00;;G002P%Tq}S@A^`vZK>`2(6951JL2hJnZ)s#rVQy(=Wpi{ccx`NLlFM#`Fc3xe zdIPLU>V9e_iG^*DJw&BnUxz?Slz8WvbMIU~()Ewg@d2Gzjm_AS z-?132Y$|1U8S7}fcwp;1N)1@GMNe_Stxv#Ku2EIS_C#$WgqM3X;Q3hRvM~bMS~&D# ztg$E#s|8uZ4l@=AzJ)NBQ1fs21#l-~#FH`8OH&1Ud9zo5!7+0l4M5s?^b23r!)`7y z%6?Y$*L2VoyCMkO4rvbEuUITDoLh88`D6DivqOmK;Qs)BE6UABu_Psg8p&Zd+Ifc@>u1i1M77sg9$I1Qjx~z z;QQKX?WIGsL-HY_xJVwQV)_sHA5cpJ1PTBE2nYZG06_o?+x`E~djJ6Jj{pD*0001E zY+-YAWpgfSVREFpb8uyCxAq&`M#pwm>~w6~w(U+wE4FRhNyoO;K_?yCW}iGSzVAG5 zon5uh-m7X>tug<*>z?Bpzj2MBC<6`w^7(@SA%P(QYd%)<&Hx1gF#-btq4<1j;$X*Q zZshD@}F+aD&k;oZe_t}Vr%5$5~4IAzpjYFpBQ?Mqay5C!ju7q zRu>jBSW~9_1x(nDW(O6PW3Jf+78@6zn*;s>uAbVs5BjbUWfufAT#VD>U^1K4#r$Av z;1~aQcKVE2MfR(?K`LLy{4ge-?vpe!3{LIoZLEM8*u;yL#+9GECubZPJ$O3R)AG9> zk%~?;gT-~=s1IlFiO-wU3 zHT0IOLHzbznZhIT4G~TYRA9dD`?Muc38^tw@o$$a9MqQv1`YyJ3=IN8{a;+JqJx92 zk&T&`u(Oq^h1oyvw@Xb&W#KEv2NoO!z_~Io3>#u_9v*eb1~ecB$r74Z1^8%(M;u3) zO>S1zx>dxNw;LqbOSJFVA{RCr#ytHq^jG70~|`LhqpA3hWLvIzGL(*7D%+TrJA% z3#@i>N#q4`y`};jMjUY|;WPBqTHAKC>aw>tSEule)U~+8r@)439jxVKIN-9`(p?(t zm%sxHt$k%4l@@(5tm8Q=e(a;h5MI2R;6x1f<#91GEl-r>cg^FIzHpeDQuX#R``Bj< zI#pj-@@_0e#^{y9YYSv$r*LqcgD8aVEuh|rkEL2OklSENt4DLnW+pC5Bp5O(nx%2) zS^>Yc>btX#P>0r!Q)Kq97~mANp^ey>iHny0220{H$J`k3gA7WG+zsI3Q@w(T-SsRm zB!qXOr}YF$r3Rqzv+HWA@67R^j*BWHfuZmf zrFaBP(z6Fh*hZ|~-*ImGS3FDV2S(MbnTvURERKvcQ>O`OJjy2_yM1ND*PgAQBHSCS zlaff-tY|T$ls!1NP6k4%?Zp>W&3$pYq4dzp9#$~8HYGDFWJR}2C(YmjM*%Xf>>@QE zzcQzfl&;`bL2Qc_^H+@SuRqZm2HCzAMSb@>J{yo^^TXPJ&$^*S;VfJA$QG7 zUA{OdjuJ=+p{2J!Oht&X_=u{`vGR{kXA?85iCAWk=lDB9uKt%?9;E;#-~8fV$@B2GQ;2Tmyi{zZ#0=ihwOFfQRSTKRm~|BE~_F|xHaHZrkc`V>lgGZR-U2YZo!z4~WTnZ*E*0>7e& z{Q(Kg3(3})9k%NX0510re*2lHrR$LhNza!N0)3@8Owu=Q{>}VmbFW8m2KzgMIqnSt zB*~-wVRogPM3}}Yy3xh2&88O*j6745S4H%Q!poo<851+Dn4EZITf3o`A68G(5XJ9u z+1yPfmDLqbeP5CYaqnwUv4YCzJ0f{hqm!gygC#4#oJgnQKoSxG3nU?vQ^ zsNW+FZl6)q=fm>fII@eIo!Q^d%X{yzA^-&ig%0KJ4yEo6#UTz=^ZRYSU{AGmGD}q) z3ia@8pNt7ve~wySEeK~x+nd+$y6y=kyuXEI^&%X`sa#o!?6yJ;Do9~*xZ z0vNI03wOBJ@ymylR{0pkR~sDMwC@jrAY|aIai+$Gpdf!g#H~+n;ofI)>jM989755^ z%g)T+_3wvBR+e)>2cQsy&ibOPp`lUdhV+vpD>9G|7GqbGVJ54SkSbj^>XbU2{7hca z!T7-Z!sYlI`l=AcVWFC~LbRY^?>=g4vh%UC=g-@lnCPWtr8xdwSICZ{LT*L6D#sCX;`=0(iTqMNLHn+2lS%ocw(>9a3T}$xSdAc@0IJf4nMRrew@6Qo*%K{* zhrhhYY-Z*ahN@f31c#FNY_+^RegU#(=48;ZI90|Kx6HtUDALHL-x%)9(o(+}by*h* z#nJsCLQzTGo^B~#vfl%rn$R=9jo$CP?2rSE_**LH0^u{Qb=8}t;3}pPjElv=zh|L2`Iuwmc3*LKM55( zaHW<-bP3FGe*YoEK8VcdIJzYi3}^jY+^~9Hd+wZ{nY2e|-j3kc#Z(77qoWunSA_3z z4^H!UYbK+`qSvE!upnvqs^}n)Yu)*Qp1*%HS%dnv6rbM<5bD3Kng9MqBpqx`&7A-B zrKsvCpevz#Oh2^H7uyQe>vodR<~4k8#R(G+7dI9w09tx7TdbSt{rJW1(?Wg(ukeAA z>#OQTJU58qdnHu=!lx@_xw^EhL7bj1xJ8|H^ zgd&?ef)L3j&uJ$|cCbd17CG$lKH*OgT*`F#iwxRs}4REd}!=Mh9vNsjy8m zdQUI2(p^wQGl?+o?-(kE3$JgZA|s`@(!bo=&*1_QRYh@R%+s>7UV5ChisCK;pn^zn zyPbaIMAC)W#7~H))2ABi+`D@!6hH!Y+l&K;%W=Avbi{{ z&${wZODHr~eY|I@|6I>mF<;G&syXjbuqk=)oRp0shqvW;w*8|QW6W*h;6q+sI(g@* zJd?%)>Wv3dh(2p$4m)dc@E}<9njGvUjt6*Kd(_j%)N!-+nLx^N7VD&j@6ZQWHWX@o zk;u)srU3e$Msv2>l;E*M3Do%HtDsM8mXHywJ+J#;fS#Wu7+^I4#75BR?lTwyOHcG? zPibG8>}>cPlZYUxc62NGezT)Sj3xY*SmDe|4LTKPk%KMsV{hThY2n znu=pzycskes91%fL?);><-Re85i1nFVf7YFSUQ4V+ye#ZmAJG#XH|{c*Ct3Hy`#<` z3R~Urxfwxs^`eHj7wmSFm3nyO-{b{k`c<8`G%RO4oUZ%skjyb) zZ8E=QeAS>SQL45vow&OrM?7ETL7U+E^%T7;JCUh5td&(rJzX0lC2MR=P$HT;*fba> zsz3jT7KA229wUW8u8d{{t5+aFN;SviwEZ7twT|0J;_GLs%|e2J0RAgH{iiAmeHK)A zD_1Xa5eGXvBYV?-<(!I+1HKr>hk56w9@F|TJB8dlSO{JnIv#I;bEDL51_nJYo>86Y zK1qh2!!N0azy~xMzWwk&y>tqEV9C^A0abiAg(w!wpy`>x8ZN6Y2a_JtzK2-`{;${A zAnTsFMg!4-!y>3uEcb6fG68H-`?JV}UigKW%yIPe9Q6(*lrTrz?|_YSqHy%ND={vs zvk3#RY0YgPc=54!K5(MDE+k-sEJuOD_Tv)X9}&O;n=rGqA=HZ*w%gXW_9$>EP? zY&*IU%zg|gmMw+4suH-rH4m#}+&Qc3G_ZjBrXAK^vTQYkrOKY~sLxa;Ffj`anz$FcL-wmsWQ`M8A#h~MMCq-zWoZe8pwim$e>=Oo(lHBv44-v0nAR* zaXawSruDGz9{||Hm!pT1MvJ=QuIviEI{CaGy_3T`iZ>`eg>G}!Jfan<(7494 zgG;3eDz^T?E~Zy4RSBbm{9GwRtswe78ehRt4A;@sa%qg=isE9<+r>OE0xnhnTw&Mx zoBeNG`h{plEA9~Oe)cL|h|Vk>kYx|eSHc+ur}xY^_wXzIrv>1lx_U_MpYJCazUGD7 z{0+@VQM-C)C}OP0kZ_t_KO$e79*^EANN@MSF}yt~h}akZ#4Y>$?5!*sItQ@ zE4gS%sVSXD#f+YWX8Vrx_jDYPDHJ{Yj16ExKv@6#>F8)=|H-=lO32T~5kup%2yPN+ z=wgYgN8?ez6(FFXGug1U8S3g8>M=@7M(}j-?)08bE>F@^l=CTijk;V25-WI3MV2H~ zU<{e$+z{OeDnC!3G1`i%6v35r^js{Ib|`pU68Zmm;r;I9OY2y?vv^lJe=oaLch~SH zE3LsaK9yngijKLp!TdfIkfl;7v+jDv75vp&&R+6Y!b63Cjy@~xw=YHkWrs2=*iXK7 z#OD>KX=-}Qr{3!lEsnjB)_mCvXL^9cj*>2KVpB_{yxO{prxdGG8+`WnK5@J0)NZXY zxGW~Fi;8aZCo_$VmQtB@_oQhO!QCfT#EF8XUVp7Q(G-RtbJ$f{Ik1f0;}|-*bxvI! zZSPI>03Y+ANHQA7&YQ`yD(qr98z_bw{ZsjX$RL7M4)~W0+fb~;qkbhsi8!>d#$zue>uPYc!ZF5vsXW$5ahwN~Xpmdn6mH1~) zH9jt%PiQ0YvW{xa-!{+&sCdc@IAvi;{>Y){7*Emivb3diOrfaed@Dcfrh~NiP~VHb z6l_|zIPb^|H&5gWy*4sjYHBL6UM9$mDrAmhFaXgHkxb z4&VVD)1l5A+}(Y@kby}AmRlkR^p3q_+K5%3utoq7d4{!&Sv}bTJ~++Bj@~RvsPc$h z8#2fyFV5HRS8b!|nK#qX|?Hei`kv?H5Dq+Sf&#h`^I zO&V3BT!vK}f%sV4#G4a-Ct*lh+ng7M9deBqmqgD9RL=iCD=Ib4f+}_9i+i!PiH95= z(Qz$mc{qYIMW`!hMI~GqI$}~zevCTLIA6FMu6iO`WDq4D=87JUBE=d1dabNMTUAHJ zYcNSC*cqbeDu}U;JoG36D;&z>d;W%Ts#M;vP3-uzy*Mvz@9ynwY~DbDNtFWEh@SK# zsYWv+TX%G-b`Q1)Q!yh`lZJ7FVb6sQgL|pCTmoLj<@Sz+nsn1xLDJ{sk81VPI4p z=TCwoaSXt`n6y7ybYco{A=F>!ao-iWCtdOdXUu`Co2@fi_GM2ds~vY@aNfbdE5L&= zkvk>4sVy?yGV-+j4J_ar7rIY?hkwZm3gN9!2It*xx{Ib-K$OE3VfPS$Z)oTfVeA!n z&g_AJ-L#XBZZSv6PTy;rcm)^Y%5zJE%r2B4?FGF(RF}Rm6L+!}EcU2ay{Le=Px8{p zn;?2|9Pz>jp?3(fQ@KUC+WxH6lG>aM({-Od)HqQcrf7yO9^3BjUUt77>B$wMGG;c9 z@8NyuYX(%unAkN5r6+xq8Q~%rG!-BgK_LH2zi^y<_LE*oijFu}?AUJyxW~1539l3; z1q|dA629f;x+s0*6+T&?QSUU^G%aK?OHn#2s|69^vqWF zA_jKaN}?6grVsrnRcBb3?$M87@$U~`aQg?H1eb@AA4M&ZG;eF_Y4DOJYZY_8h;#*# zmJaKjppS<-5yRXs$XelsyQE7qVL(d{Wi&^ro%nK=CcB`P<``(_!O^RJwZv&r8wHj5 z!|eX2=K*@!j!?z_x_E>3cU8bZHNJ|CYMu4X53fVnEnnzjN~{RY!FjsZwLunjS#Pkv z-)Tk`hzj&)ECd4rBJkh5QwRHh|5Y|~akF(L2ap5)dAHeWN*e#*RB$acu%fcBN|i17 zh_LRkYufk`#t`8^4A^4Q7v@!2!!h%eM%HlX+$Vn zZhyc8UHIfo;P3PnjAATm+dMxoY7|hPZkE?d%+EcC@D1!e2guz4ba`Di$=brHMHb`j zYDsYHOJsaHrx;Qv2u_XM6n^puz8j#69Nfgo4dPbaMUr!OrT2oMIpN?K;~=oYD02Y% znHA|ZIIt!{D1iC)cD(nJzv0A9BzGu)_!Ki+^$)={FB|#JE;Rg83epA-uI>9jRJ*p{ z>)K?pwUG_aaxr<|lf=sXoOgeY4?+yIb>1st@s%%^q%Ym z{qYH8V(m*+aQ;CWdJPC_Y|*>4Tgdlw2@(K~_DhJvd_eOiDWw&fRx81N+66+EMcv?5s)z0~?W1^`^mX{B;*Q8kNT%x$8y_c}s?Cd`cLs}nmyo!8Dsl*Z&d z^PP&^5jIUaLJ3)!hjV-xoA@%E70nN$I9bz%5gfk$EA-Ac@M8r0CUGgSfk7hCZdWEx zk^yX$)w%23>lbug!Tzag!MM?nz^Z`Dxks*BjAfNhpWs))`5+j=IqUwPELQWp-$KW5 zLS%wh$RW@&U5%=OOyImG6QN||_d$pJWqlI8A!=PG;h(-gfW}>;j2cqDqF2dovHD^J zgPXlURu^sqn1w{}-sB7;mj&hpMpBztVTRl#YIf-oAf0vdR)`$Pln0d${c&?$o0CZ+ zp4c=6)}d6Wjok3x;mkrp;Y{F=F`z!6{=-!6f3wm3?0zkv{#O#i@-K-|{Z}iT?S0<7 z&}NlyN1cz|%4L7d6Of`@3TlF8d{U&Q9H=-n;K?sVsXvqStG@UuX{#T;Rxz2_^D8Pc z-&J8n&gxG!A#te=?WxK3Ne@Ps>F2{|B7d;70dOF1z{N`@Uqmr#{??A5BjGdhv%Lnj z3VhU=Ory@CwWlt+6BFCe>P{B?uw&2a9A(n@*0G0Qc~lq%@;l{a%Ub74g>7RgjBMpk z1H3HSTao7#>5LQMWTTTmeY#Nq*&b3N&?C~RxRi=o-oR~HtCIGC*A3+MwHu-)cTvMp z@d~!acnPQ+XlQQW2FL=>ws988f~KCos!lZ%OVpo<0X|B_(H(MmfG%NjGY|3r7BbHS zk8R}WkQLDQ)^ex<@*7vrL-ML#QJHCY%|DJTo(wZ|ydsFkk2`A&ER-!!tXR zkx>zb5c?xrUu9P1dY*x=2Qd6KGylf5&>HSw}x;e zU~uhKOIIX(dmK>JPOTD`sXXS%8;jo}P_qjT1mJTH{MyAKSfx^RIra)BzU{7Hpck)1a(MOKP$V_3{i_&#>rn{haWG z_Q_Fkw50oTCdZB0a`t|2vNp!0ZV{txl0#SR-thxF@zStO&3b$k`KbhFGMq{~w3Ey| z+(Yx_V?ZCn_Exi#erUkHQpN1gp_hX@LWt^$-N{mTiK=n)ie2~-szb;it^wzw6y4j{ z_Z(a6hWb7-t9@|u?);>%6OvdHAqTelvOvWVWjiH-7Pm~24#rjt&aN<&E;qUEa0;vK zncDlLc)fZO6Dd#j;->8}U*QniI|xXb+iJx+3L939vboVwG>`DI$R-tmIGRhcKNyLE z3+dZ3+6%C`l)(hdt}Sa@s5whH-y#}cJrCD=;$I1{aliHdTOoqoH3o z>DO{8KSb+I92@Y9T?h-qEEIx!7U6o@t9UoJiX+P4ktzAIvp2rtFIJ!Rg4jyWNS#w_ znf)b9XklBsUoiBwDHin}GQ-t*bVIs<$vFAJ2f{bg-v14!9O{Dn4^D?5eMq~@l2-;tfyU~SjV zo?G`^8{cilZ@e;wtNl(=D%)U`RknL0C>#`6$^YutnHI((T5R2c*yl*LuzUA!62KfN z7WgSUh)e0skky~FDQgH5&V`_Bh=T-x6iUM}!=X)~!;jqWM;i#S*XBW`bVM!3NoX5% z?Ar70Sk9SMioD=9M)`U=^KbrWxY2p7z^U zImL29@+-|DR|7WAqA4dO6nJO@(tr7)Y>?|m@51Suv@O>f!)-WKY}i+|$;)|C*02=G zSP)G@U-#e+;Cn`rG}F0idg-|!u%;h(yPwS(wW@b;j_$Y>?V378Y^w`GFm+h%P@1i% zP3ZD4D3CKp4>GfiD!(87xLaUdWbmuc`o$Q0g0&f=$!aBT!OOV< z8|Nndk5x`ZBC&Y{=mDfJ&ImCUE~9>(v9&ZU#D3;c5)ZdA*@zg64S`%peT7Ow;ce}uIos&adk6a$F!f5a@z<-gSg*St#;e5Sq!7TYSe(}lp?f! z^+wvx=JCUM420jec#GtYg?02&=v9JkDa`SR$|hI+-YZ zLzDzKr@zyL32(_kRf@cF-vmpVrPu=}2=2iI^4vg7`5;)brrsgwc(1^SATPe6`U{!R zZa`6%;RkI&v{-&2K6deyq6<>A^*C_z6>|wdz&?5ySr5agUwmfTO{{5B7Ddg48n9S5 z6p+^ZHJlgQ5F08m%(FYY^>>LeiMWS>`;6m0yAQtqvBdmaVE(9lg2A7&c;`Jy5;4e# z7Q@UIk~#hFEz3~r^Dqx=a`B2yJE^O>SX|DlryF)GJ5j7}3?GmuQHyi9R0~A!gJU~lVIlPU7Wk7S`*Njiy)IQJzhj6@>4X-EULZb)c9Vfc_N~!mK-$((0ADE|8k}u)EgcsOI#dhAFaL)GMcnz}ZNJ?CH%A0$N0m!!^PD zGg>^aC*w|$|(k`|AMLa=rmmN5LuijMB5<4!w~mP<`7NDcSy?TN2!*(IJIT0%%sw|U#-oIhBuS*k zYGZ?g^vv#;WQDdvNGsR0{S zP}O0I-z|Nj+?nfTMZLX-S#?KwpF+vRB zPS}(~Cvq^7)f*}M)%0(rSe211yKAp!7o0WHwXCG}*+aSgUZ9W0FYe zpZOvn0M?#LKfa;NQRgSwLoODKRkYHyTZin8RzNNG8HXQ@I(DBL+HJj&R8lK;O)KUc z`J~97f}QM@Vq2b3N_B`U12>s174~lk5H5_4EIL2P#t?Gn))aV|MZr^{*t<#{sL6Nm zId8~JdUk|AJY)r?_(%4UCi!*AoU|j`kv3OF0tU4hriT<9-bEjyf8M}o9glEqe*KDr zad5>TP+D5}+Hy^3p9o>y{OA;_$XDDb)szqa!WlxE&7KALkq3@5x$ocCrMtsTXvvh< z){}RS_M9HI?}W$u!YMD;)pKg2tzXI>pim#dbZm+u))Vna^_21Ox>qK;ETAiq`w1;Q z!Li=+BG5%_|p9<@^^zn1z!#0;{vLIyeLi?9;4YBe=W`sdscg$7>`Vnt>~vBZ2{}1Etd1x zfxh`8C6d6kj_o&Xb(D(Jwpyvb15Yzy$ z(Wthtww=S&w5zT5!El(4 zR_D!`DRFDp2iX5|D)ej$FUlP}m)zu|31#wKWVnIl z*b>ZuUdOJ(P6Z5fC16>c-I61YeX&oVK-C3z%kfH z2|N`CC?YF_Mk$U9jMyI+@7C2cZ(C%Lp&Ec-G@%EQ*D!C;(>ScGxwtOv2GR}{t7hb? zR#*MQ(?AwEB8mFLdbu!;UHmYr`m;M+3JBYA@iW@(;<`lSvg9b#9>@N%1Qn~G6e+oP z%ARr58jfki39*)W<7kBj^5Tb@J*RrIjtd|93a)bTEz?2Zph4_5duJbW%jr?w?vD$c zgLziJ_n$_+_Ob2^qq}l{`575TEkuFXS{ZFqC@Rh&@U8pYu#?1qC^nWwt{;qVi(llV z4CoJIU;{FSG65$Mya*nz0X!=quyBHY@mJY~@PNr(2I~@d2v(<53w#MDA{zeWmorD zEg?*j{?d@otoBBd7_iA2j_sGccf%5?#pkrSFyBu!HQ4cDB7P?8E;up|(nSbBO-H~e z>cWHD=Coa2M{rxe2vxxOQ6-ES!UaZ9-3}%I=G7&o=MaM)L@9luw#lOShGYceChLT3 zlH3i0EdxE1FCej4n$o6Y2J^ZkK%P#D~7hwwuE>Um_+*@*Ox_;-=HPD{BR0RsU+h6Di-`X7r7 z%l{Rc;=i_RgfKqLb-W8D%c&tzF)OhYu~5WpNv!a~qA|mX!?&$|=ouclr<}=WE`GL3 zJ-srd;grCqqga+4trl23zrLx9Ebd3vE$&9aZ{MCj<%I%Ru-`JtfAK858l!di*&|KL zZQ89WCo@p+2)o@%*v;_#?(RBnk8UZxxqXIwIoLHsn6Z)5;14um67|lj`9%pB?()(D5k)qPg5I#pVF%pqS3QsO zXghXncj&GnT1zST65qclj|W?%%se|YOEkPFHVEjAE3>z?OXZ}sK>+VjOB*I;k<#r) z5m6<8$u%l|AOcYa)FYNGzN?5iJXs zWx_Q+1%;my$I(m_jrIawFYJn*+;N$iB9Nvp>;g<;_+|Y3v02f8En37N(z-ty)}7Y{ zFu{QP@VPWGK5Qx>8CSBAm#f=+1no5gneM5kF)D}Z3mXVj71H2jY7`jQGkC1UMle5E z3sH&Wm2(N1>GkR=xMYD6*v>IQ#FHOR1m>9$YidsTY{o(CBxPo{;eKOk>xD4o45_pADE;m0$Q{-O{3=df_v zCIMMcT3g_2HmB)dWw3}WO|n>Z22B!*z_Ec7LZnAnAu(DF%T~q<@#uR^oW(^6-Y=;0 zr=@@BqByDA{=ha`i2G@hUXvH(3n7K{GD}!2D8zgyS=_%NaS`F#@XYxCJr62zoIAHkm zd2$In{U+MKwr>b1+a3)-Ke*UPZ-4CYxOhL9>G}4K*!!gdL2JPZr(@%up2D_pvS)vT zo#RPJM6%hIw$iLTXz$wsyUhkVevOJ%1}%4H*6klRW?*T^k3w4+JfCWykrajQm|bBn z{yyByL(Mq{#i~n@MHQ4mV`K>b<_>VmZ0ToJ`!r{#ZDgWIY;kdej23XLk^cyWRrgZs za#u_un8bK2MFkt7RheI&DCIG@ykX&w8bJ3rNKPWks9>d^=Ipqd3ko$>Xn+Ek50Xd} z9D@q%^Q~`c*PX0p);%dHCNTPv3cwQs)4;LE_|j^92CL@YE|$Kd%oE|!pzf+#Z?&Ej zTXu3_jbic#;m;n}jdHtb9}7PLI>N5GT-rV2#SJizZrmq;9k|{#2l0F)B{9aSGWF6Y zx3iB^vyBNX|0b5W+oE@1?l)CW*T3YHO``SmCt6GJW2Mj&(SbQiJp?YI)+WY?lKt08 z3@+DMip?X0R%d`|6#b@Y+X8Z*7M0sZ$r+DxvX1)#rjsn0KrqIMLd+!ZA%B(mQ!C@s<$%Kq%E1`bGJqfIRt9$r0A?czo?D<@H3 z8Jv$tgMbTn)Od<3MQ|xLX}%f|3X|QtKRX$bBv1beBOqZjS$70aaL`;cmwPk+b3xCm39uzzE6--$J{zO*vziI4nYzoH=AuHLyS&E*+6dhld%k>?btMx^4y8XCz zL9_B*4R@SpwBMd1k25sRc)WGi{gW>dw>M0LIe=p}GF zH_0zY@WSk0*S)Xzmi}5T~X|C&_nnrBC6wgqrledkbI;Nfu1{<;wPOL0Z6tj|p@8%p|xMPDHy ze5G;eVvU+lY$x{$J`atC7OlZ^Pa;2O^(Tp4P~4Y^HP*w)$#&mE7XLrDHwqw;p5u-S z*J}@ykKnj)EB04J+>hsYTXyi6SlNp1W^I|?%h%apVbc|C?Yu10u zPt@F>r%2Vq$@pF8Z;nUt0{pgDx2Ld!@pXp3*#r#s=_7S!y-$q5_5E8ha zjBYt7kXdh={FHYhgHGwtkv@c4+ zl#y1-!YD}_Vg}s5yXupWH@glGK@ceJ8C61Db>m7m0TiZxnbxQ$_t zeiwA(MJ&9zM^f6&w)P7ZZ%fucVUU9qD}%tukO7Sy_FC0}$>{!pp3F*fI7(>3)WKnS zv_2}H^+L!0ozHskxN}ao2%!9XT&2UV7G3f9`}Rv*v`IlfbAkYlvKr7vt}SLBoWfUFkV3iE_E|7ruycw z10WxlhV9wAAx2RxOr#rk>iT|w8qj^tZiTkIpR!{#LM5X9t58F#N?C$A>k?m6P|;tM z&N*pLC77H)ajZzbUS6R=ve751$Zbd2wVya+)YJ!OYh=)+^A-LY!RC&D0#0@op}rP6yP{-Jv+SI@fH9Q1P0Nyarb^bqWT3R7I=*Q#x6Rah7upA7XQ;hjo9X6 zR%NK>-@O3>??|+dI0)v8`TG<^26U(PKZYlQl;Gd+KH~wH|BdVLe=z4#1z!y38%KV- zBLr+xOOkpO8e7pgY7;4<7$5}=pBgQK^kYpINz-{X(gXX;+u+s?c8_&wN=)`K^ZQPe zf4G0h%f05!<&Bn{u!>t}cXyyR8fuiHZD8viz{?<>>@!#8EPkFMR zO8BTcjwIN=EIC13+1SZx-s4FI9+x(h!y-m)f2%)vYKa?uke@=CZ~cpNMr}ShhhS^n zQnKH<$YL_2^7?q-JyiLrJ^jmop$#)40fNZL!wkqGib)u3`>rYj@Z-+XDf7~C;J|so zQ*pCJHrH5mp|BEmF#j|xFEXEQP?em`m30t4vN(Bl=uHoJfsTNFB-DUjo0nSfq|+}G zt@03YC~d$P5P5V-4ws5!pA9cOfC-Fu?}zTIaW@7DLKv`vSa8hVCgqfyxK++fA*vuz zvuI1Tr`xeqY6FgORw*jDjnsQBt?^@EDdF|o@aPXAz9{Re>q@91=-1+hCM;Y*4QRq+ zth{s^d3D!gj61hm*+>F(d4@a6mxaXuxz?%A{slD8HF24P_i~-ZZ6ylQSCW^I&Ecka+)dyY?7VP#9=)dbGjzIHJ0^C^mnR*oA#F-q+h9nTxO16`dp2+8Jem1HTfiKJ{6IKNoPahbR{Tt3Jr=0$9F@f8ltn~c+=pL zy}nID)2yjerf(5qJE(5vf!2F$sWBVX+=#Ida24Li>Q^Ctr~z*Zp;+SUpv?BCy&yHLLhyPHNMw!G2a2SBUQxB3$C=HDnpVU=9cVZINEJ zHouwYy-~QpOW+nKm1uWOrIWA*iTMqI%tqp4u2~SpC!&7y$Uvg|Ou(LhU{Bkes1=#{ z9fIhOw5F1;+%9{aKQmkj%`l!h8^Xw(f&4>()G%BmyP44>1>%H7j`jJHZrzX?4H? ztuWO@-y4N&#--x-*I;E`iKg!%zk9-VID_|fX0+9b3(fRklR^^`#L`leIymEYI7`51Xfh{O%KBV103u&_fokN^qwJuJSf0*9}3aC(lBc?xg|3Rc_z0D<7+nSq3_{gt-}^5{SM@S^pHIs z`$d~@dWzD)CAUWu!KPJ)@;VY%0d5^?sXaEovm`+E2 zYm$(oiLTss4^!e=d-0o5B=;Npz=>LdzBsOR50gxpb&wH*6MvFygJ=jjoOc9k8e%>X zG7fN>>V8eNa~!i&HOG8ihTP&MEJ6FCVzwgnuMH_~xOuDQXAF!1&f;@^RF| zTYmK9n)KF5lvj(M1N;cW@vvRKmrzNNOMtNB|VHGvb$@tTSS7J!&Ma?p}W5K@<2KmM%%{==C_5u76p{xU-m^Q7sVi!9&{U$@4rWc;z6m} z0H-x)5RIQSR|J6cV*>Lz%3#^EGEz;teJ%;75LtOWiLX~!aVOtgJY8$}84U@60`sqi zj97J&jMy@aIc+d+|FN5dZ!%u>{E7VbpJkf&f0{A>F4A_NxR3JfVdo_wa=i^IgY7H2 zcB`B1nv1?P35Q*@)FKF*jLi(ufkYF&q`sdjfp@s z#X7U|i^*Tpe5|*V8$|veH~8NneFq#TK5-xGU%2n^iTmu`D_FGj-1%qYj!f@OyS%)7 zC^p?IXIw_!n-C^XHETD*8niyG>n+7_A+>Eb8eSc9dm+0sEj$tQUbJ-@(527DYA-DV zt%JS0Dl;x#GH3DAZulEkt7Zx`sCsnBsuCPTbhua-7&s+=2)>8o3>2HpD1aD|PNSs$ zgY=ta-BSNS`gWhBpK#m1A*hA`|A*)YY~;4Pd0O5f2O5r8e_%i(!fsHQE1aw>bCkOE z{k?K^XTReE^P$o=G_Kf1oCMF1ZRw@k)^j~n4qwJ{1YH`Yz4wI0&bnnMz3~IhHSCx; zz3teY{;fn0)n5^CehtLgy@MD7MU7-x%Xp7oI*RXfeZ6=C_vj5?^yzMP<{f!KnZu`8 zj5~TlwwwgG_6iEBdAo|glSYzjZbP%oKNGPtTTUu4UUj4 za$4%=szD@}2@H=4;YQr)fz9HKH{tpNX4$pNwZkTPi#m_rRvy15LZ-(CaG3i-QWRc- z0QFUrHK4frSO=lrQ37huXtV(36FY^y4YQ1_(in|Lvm&sPunUy;m}eaC+4A6FF|I#w z?y2ILQpzpmXLfQzSgDoVkZ5kd26v8$$VZzub&#?7r|Tz>bC9BHfBB?+W%fhd`L6fi zrS;aRA|qTCD1yYUcPp})2Jy`{hxZS^4V>b~=mW5+5K@htH5;Go?~32sydwyi>xY@I z=N&C@#*R=3^QYsyk7XPiF_ojtYNc+S3uu$e+}04cYj1%v8LCT#*Ij*n<@*6F?`4I; zt5}#z$pPf=b4}D;X~KiKaM3Yyni`I|-=_bSHSnfoSLrr-X}{$!*q8W(eWnD> z;uh03F2}k#PX9^T8`UJ%B!m}Tio_q%JOg8BQwxB3`?#bMPJ}h|RbAv=Xs$r_lTc)2 z{L^%->sA8Ny;_Z#~LF@hNV4x>P6DfUZ?6aHla#7W^}oh)_E>?*naEaZEpSim&i zG`Zd^Xq1JE;I2K#0|L>%#*Hk`>EU}cHzocmi?#211`9Wo)d1fJH(x2LAkQbYCc)vA zrY$lFvxbLlN^x4v@Q=!;BgG#ELXbqK`-yUOAZmO+Md`mX^bUYbfQtY5kA>BjJoUM%izvqqrcWbH`i`sgLqbXof|Erx%5Vd$*6Uh+ppIcMC37Nm9 zyE3_+7PodHYuCzE{Ty+Ke6J+9bMWnnt$CPPCNFXteWstM+Yf!8Z)*+w!I?vAaW2|^ zY}>jB#)*5%C;LydUshee0~O8Z*c&LOzEN7LgRi8j)gPQ{FR-VtPF5ifU%8dnL{lX< zu2^#^<8ISka8qoSEqivq+IN(XrmF`ue#tgJl=0~tB8aUdu<%=1*}AHriiswqvATix z0*0qb)Xj}Jwx4!OVBk9e+f*6!un|@o^n{31AA@afRQ|Fzj{>H|6O2072Vl?2qcNc3 zr2G51fqgJ4X~EG(zyRa+hHgzpdO+4`QgOBs+#w+0D;_pZO-fVG?isAgeS49#Q*qO_ zgc_ZVioG}C(m;YaNa3H!*R~rmGhdcudqb1Iwiht%{i0txNsiVrf<_Ss?l0I1gk6{N z(SEFsg=)$DULt4QW(U%BX&3kYKdpUba9mB2t=NK=1r{?iGh58e%*@PSQHz)vLk3}O|Y zpGE?*KgOZfyLAAhyuG6Ii%x?~NjcvS2V)@IGe4UM5!8|-k;NqeIK7EIGfHBP0C3f* zt=E~Il1A_qLZ-}eF(&S2@fiiohY`Ei+{CJ!=k7tv+Z3Q`{c`y`qhK)ETxdbwWnG8{ z&#>h~z_jfb2`PIS@?brnCdZG>W+%!B9nZW1#PM;A$I9?28El$26=*{O`43n-ftaHJ$4DyhYt73ONN_KmmHZwh`OC~Jw*@F&VJ%30t#=|)z9cB1V-pjS0z&cMZf z!mfP}N`cf}`2kt6$~dHTPv93-wKY3C|2Zu1V{Jw?x{7c z23|YmynFgz5R4IInONIJ??*h%ssEMWhz^WA@!4ZQ5-z}7{Cux70qGL#!7ou+SuHA2 zZqID1Q-BXUx&-^fd_}$gVH?8lN{R_+5tCZ0OFSMNYXM)8E$F;x>o{qBd8xH#ucItz z0Nm4d;MCxr?@AO-(HH@kJikp9%{JPO{>2EMB*{b;a(qu8X4Jwq&$Wqf-==$-!B_=3 zsGdx!p1C|h5-JM=^N9WE!|aA41z;-vew3v%f3r*j>UKakXAalJ!DQ+~)_5W@)wKG7 z6r?IwNJ4c64^21krkCc(9V`&7h>f1*7~?8ZX2$1%=HT2vJbli?Y)v{V6RSyUT(E=% zX_HXSJ;~(nn?8a^Xday{MCRekWjjqCxau)n$&IOVI5 zUM+J7#hw;cAQH^lLSwgx6uMfJd-@~?ye|Ekq}vD?8NYN5M`$5;;8?`Cq6{~=gi(<1 zsYdPBU-U7A8=^E0M_dD?2#5N+Kc7a)p?uOeaHquxWrc*yU(v@B-!^7*w}`7FB;`R> zXAmciH?qa#QAnSeC(`YV63CW@Lbr^QVcVqm2l=#)*dh+UqQEa_DJx5r{X=tHlxTT^ zYoHYO^Az2d>hpntP9_0C6oH0c2k9hObLx9K4f$FRrP(Bvci9 zanKPNp>nF76W>yhHjH0~%&A1C7Oq2VA13+p)eo{~VyLRf%NPUhFPjR>KMwZ)AFAVm zbo}2{N3;tG3r>+wrVT3%yuZ_&eqRFeLH?sUo|;1{ff9nVnLN&NGJLvx_9r+4emsoU zg6%1qXfkD&HjU~{Cil*`{$k&+X_~mp>P?javaOV^D)`W^vFfT|9@VJWVYBdOSq=@mZF>XKz9t^_>dzw#?A4`=R^Z9idy0#(Z@Ooct>GMV~6ZcqSe{puyCY>6+=HzN4hAX(JjRpB?7m2~MXncrhU=^h1GKlrY6ja@xO8 zAB0EhAH;0AJ8&5Bdygnxtj%5eJ12QE2ikZ>7*!f9qP3VEu3A>{sH?Tm)UX!IJa;gi z?LS-N)o!u_r!(V??%dXx$4pC~9+`VTtofgu62)=G%f}C90X!awxopZJS5)-|^|wmr zoyAaRCEpSU)7`{XW$AkZ?PU$<_S;!Pj^FCXsf4YXrJscz`}(UQ$3GxI!WoYBGe>b^ zof@D4BbzPnpoO52*JF1GPFYvmv7pee0GyMMMBz=y5(H;6_`DKq=tu`c9&#(!-vJ5H z8^2^c-v{0)8iqf1bk}+2PFW;UuI+r}zdKHrpgMhR(Y z60Eg6Dn;?p8_Zp#=6d4Gxst;*nf=ffd%?2s@A&nZMQoV_Qwj#zQZ5gBYQ3!^aud0< z-c!=c(V`^|+n!>HNMQNLVs?_|Y$4#7kOdl%D0%x@=5&bwd7WFQFY?YWU1agM7H-cZ z_x#1>dz!=T&5#Q4x5q`kxPC*Y=Bs-VT47V^mylp!yRcwjf`7?H{lh{1O)t2Wbotv==;gu~JIT*! z`Nnosb~ruavuvo5P1mD)pSlxA_4iLv-@Iqu3D`Es&q?6n*)jcbK)8Eyvv@bi)P12msW%ZVqxPt;Q&Ak>EQ!6W<0J?G3V1YSm-%7?fye~^uhnT@|fb0Nw3fMVE6IkP)-?yj~f#$omz%RvuU-54O%6UmI6Swyk(Z&s?UUwkU5l=1`p+|&^l)Zf?u(z% zQR(5VeI?($?0OveRn~U-?b~(jR^l?-d*Pz4%H#l1Aia%{e#J2Wg1MXm$S{<$XUvxN-;X5x7^um9A4!C5Rd^XyAGP&a zlbj$(4CS6nFyGKb3?`Hg-G39}35>u7T3JYNo$%awNhmU?1_g2gaV_e+gXVzl4SI8% z<`<=*qn=SlR`=iL4!uH+TD=J{#m1L(Av7)~KAtP=E3Wsk17#-Pz_ow(-dM+6(M4Iz zC}KK5xEd|jf~)7DhNC2LJO?;?Cw%Y&Af`!RE%{Bm_#!o8!4jQt;l;D6O(v? zAt0xywLwwJg02V8O{dlJfmifd36&p>*x@2x#SbTE9rnhlGz_g`TryN$0!uSXmfo0u zZ9_r(r{Aa~b}F;U6x;kp9{VMo&9|603xx0cVwAKUK4X;U&^hf^bi^(qQUwTRztwq9 zQ3)W;0NJY*nR928zH-zW!kAXkhJU zC|m2MM#X!bcx_5F?7vzh{d_F|G!>)XO4B2N3Sx0H7UQnLRJ0&j_V|Kv(+6Bt=R1CM zjh{a+U+t%vhX(ETfa8XpDtLXA6)qbmb?CXc>BQE%%p;RBtKiN9 zO^!R($fd6`bVu(5?>kGGWiG9YC#Q6u%?o$61@I0G5WjJfnV9;8P_nTexGRvh0_76# z4!YaFovc%c(@=>$KT#1{<*C&Lsqy=E!eMNJ(`1E1-;;Ewfnz{MzrM)e98W<&@G>6# zA0&1ED}VAY)JI$@JL+mpa!bh+$T?*k!Qbj5#D7*FasRG9R;tJhPH;sVWM42|)GBVY z5lg;mSoOHDwpzz=?pj)B3I^*()G3(T5D9&U} z`HF7MxXV70dl>nt@t7wCSfRZ0AL^r0!FMVhNfV1^bJz+x4d)fAbM4mN2Fg1Q+{A9Y zL+q<9YuiW5=Xx|6-YhdLOT^NGV59TCU)&#Xi~-EV9yyi$Q)vX$$LD(XUv=%VWp?pL zRnbT@3AAL0-s(v}=>hbJOBIAgI7Rpj=&C2sU68Qa6qsc<}2)#Sdw9 z=>nFZYVvE7xOB~0e3$`Z@ z?@I`BL`-tfE-3yUYjRcD=uu2x$QG{Q`Xzehy1J#RCAJ*vi#}(pYT4FHD1$*&b0Y`3 zOs-#b9Jf2wqLtGTiQM`Qw=UPQM=Nku;hynKnU&}qx=K=0yMvf#^Y|Gy4m~gJmykkw zE)ZZPY1cl{+~1bcoz*#Wx>?Lq|*;>LPf`AaW)nXH6$yHe%N7-6DmD&)IPY%@bOXSD%rd;HVE8;~D=V)Rrp z-zs5vbUpOXyEBsn&%XDpLM6_bG7_ir*+2;zXpm`}+P0kiikZE7Og1Swx_;%4)+ux{ z&R7L(@5#>@)0KrXyV>w+XQR->)y75YO{;49O~bQ#%1|vsM+Iv-j#MK!9-&=?Jny{V z_xEg1y)gVfjUxTNFvV{)GSnn;Qqw@zM5ck5hJ2GKG7rkc6!;O70#q$DuZB}VUe8XB z-4+_`#Zo(zan<|oIb3Ye^mCPbzdXV<(IdEOg-t~qd6G|T+v56{qz!P=DjM4VJGTF5 zL1Vz<8^Vaa(6M*AK0#TN=hiJeeN!%gTEZuZg=fKIY;m8$0Q{!`r1Mi3*&2(tj?c)m z3Ku;JA?W>>Z0k@@Z%7R@CpAG;zyhwvgIXhjd{)7b4S%(zy9oDR;)clI;pifC9=WK zR!8B{db>AiIKw9bPJkk91Ub!z5gdRbBeCF|OI33(Vg)${q9K?~4P!^j^9+AR_-D_v z=70$`4*>@D9{MkNo>vm2IYNh0vFbMp8tLgKDjh)vWkD&(`g#(SV}#BzdrYjh9QO8E ziu*o?3(RsMSzo3;iGbt_S$a4eS=eFoiR@AT{W0#1hlisT53pI!fjUDUHx&JtlsQufKMDnmYYB&i&SRezihNF~$B*-3UX=P&L<5tu%F!fU-6z-Y`8^nIC zjM2y#B9 zxYDN6?D(?T@5(Z|V3A@pMU*4@B3fr1S`gn#B1^1Opv*$fKg=9GI34i>=&+deKBUs$ zjZ|SMS_h!aW(Xt}Yty4^BQn?FWK^mENXsOq?+=w$C2`0S%OpVJx%_d@_sATDz}O6m zLOQ3zVNly5Y`Htrn8iphr(NgK=jOef{njsgc!}d~^!AHmg_Pvev7QFDS>>+dom#-T z_c9z>D%a(O8sw+9$)T1plxah%)3pb@ANJLeH|LU=guGbgd#>5P7{aId{AIr)VzMlGJ3;Pk9P< zDYx3hkE*WGRS3l~iN$Y;GI@ozS(OP7C(c7A97pAG3o)ZldAw7LV^2r$i=MGK6__3) zRCiX99O@-g`|_Ap`}t=CljNF-VW^ggWHjuz5guI%YCZFb1>Gp5IRbx8oD!)Dzc}vAt&H395UKRXp|cOr>Ah^N5MxlDctnq{ zvXhkA`$m2XkZ%8j49Nf6U|uPZ$B*0pS%Ey@mba9_msUwq4Bi3qASRy|-gqV1`mT%o z-wGsp112RRdA{N3@>)iFj+gmfM(g{$-{r_qJB?ZnU&8*RKVknZ&Bh5VIs;F^@vtK& zu4`7{&SsU9Pc!zI8z|p;)xI9zVbl$&z8A zD&Kr*GHglxcydnAtXI=?95#;cte^W(7FlrpT#!|VWxorA^ET%XMfqD2Bu}_xS$7{6 zNV0KVQ>RKJ6>EZEk8eZ)em_BqBt`?PW{xjlbRETLc0X~XJLOW?Uoo)_bD_OPW=YoE zZwq$m-7i>%AN*bt^VOA8ln66$zs1bow+(BZ^E{yDyKn$i%)0N1vj!8Frp%j0cv_^s z*l&@n8@BM{VYA~iDiLFnk?%5yaBJXBC_-7_IB2E!ngKt%i1wH<=uH=j?!9%X;tqf) zA$g~z+sG7Y1Cmf>NoZgyQu@Ie7DWLM*f$`ubH$g)hOuT2dVFhdS$=!2xGy`V%_a+L zT}d7cjyf%E^sD=}9dO~O1M|)JYa4QN!?LKmVUCf1y1MaDP9#n;cA?6*x*^9Kw(?PG zy3LkdW@DlQ?R%-!m z0~pP2?&wJEGzUV223-RjW~e@WQDP&|4EPbxB!1vmq*l09*PT-4&a2N!ghtesTZklE zg*tCQZ~>^#j@?4R0c4~Jz;Z4VLu*}Vv#}3aD@S<$j`(pL+KPwg_;9w5R@1Zzs2bwh zXp-@j)cAkv0prpAm<{1rswD+y8oDnLKP+ogG2SAArLy976Tfx0sfax_fxDlxDf^e2 zvv4zOIbamzo1-^-aav*tmCnFVLWI?>+G$c{Tpf}s>{82aiJz{4LOwJG2PUqB`~CwT z-zScpV^_m12fDB+SiPO~c@z)#bT#RW#|{8;B6Jyjm-;w!o4pDd$jBU4d(O?@;b@54?3hKSNZAp_8?p_TBS-Q^Z>q~G z`LJp$dKMbL+p_ZYE&&eB~(?VWoxn-Gzm zC=`s2zblaFpKiBcjMeDGp3Qt+srbv4(S9qCh;?A>RklO~`2?FrA9%sVf4w^Jq;s23 zy8?iLQRBZn|9>v!@73@%;XHBYQGVswTA7KtqwTvA^&t0iIioItLwrSc^hJi|Wp;ln z`=Ks%VPfENV+ZrP9+>l0+}aRaY{^no zzqKy9NFA1vgBYo6FB816z2dLo;VNKMNOJpzm3} z9sIc#apW;^QIF8YmjmnygCA%z+*Y5 z`HibID|!_=Y&Q8#D{-{96kjY%;KNEx@l}O?vvvA20yz|_EzUL@`r5v;GPQgvHMZYcSFjfqz2qBb(;U+p9GkM+g$#|h7;?R2 zR4N8riK~QI&Bl&QR|r@e6f!e{Fani*;^b$wwW2F#`)KLiL}kbUqv|om3nHT>^^(w;*hJOUDQlQ8vm0s}8|FKx~7|8W}B)N~2Km zgRyz5aW6VZMV!|1S*NbHtF^l_GH(X2t453 zr?Z^7#Ha1x4#})-p6sC0U|n~OPRqASO~RRzAoxz*!yK6z5JZF&aTE=Z;k9z4#zKe- zR%ep>SeLhGbTV(^(WhL29Ef8Fw`j@qj36291Lh`O?mLKW)HnI2K$(wVF5hP<8S!JYw zlC2wi&q;~qGs&lpnz}QT_$$R1i`ji*JSbYZ@cFe5@P4($N`FIhJ-syIq;cWQ{M231 zP%i?Rur9FElQf35&2l?Ik|JRaZ;6~v;`PA=T(M^!;wXxHr3f;PZ`DSmMV>%?=Xg1z z$u<&7sj|#gu)(U(6(_Ky@4SeA7=LH$3w&)V@lSRD_e>}vZ#XVgDmgh((+MGmRU5#b zcg|H^MpK8SNfr$Y4MAxmihedIaYv3;8d!Az2rvM0+93gNXQNh$ML8 zU+umyhC2t6uPyItt(lga!^F>5-c_hK3fWa5Zp#NIU5dv`mNkO2kM~j2zMGbs)Hn~M z9@zda*Yie%>jNV3D!EDQHuAR$Ws z+e0YaB`Ud!rV*D+If_h)0n1%&R#u!4gUvpzAAE88@C5r5)N6%DGJ*&@Oc)bA@9sUZ z;)dyJ(DLF5y>(mKPl8VD_*dMUZSCx6!KHI8Mx6b1&Q4Er_tx}QINiy#-5aPCiFw=G znw#t$mYR5{r4zDa_ts;p$6M7$7bYh5=xw1VrCEAeY{;(o7L4ZeIpO=FzyrMa9WjxM z_dd#FMWSNzVMV`1$ks4L%RofoS1vw_Yg^K_C$t$6$ckLq*IXIWiFU@2s^yj_&4nh} zwO3ItXN_911@>_$sC+VzY^dkToZS-plsy~q(Z_2($#&0MPj1(He|NP&r9sVVYOdPB zG6V*i_&o~8Q#OTZ(xMjgP>pIZ@;+W?6aP1zZI=L{WXMs?{-7nygWYVm;$$Y z5s7zIg`MLakXOFhMI%Aue~EP%etTn8x~Q_0AXRyYUs*AVt#9#}*XHYE{J7m0QCYT&sq1Dq|)fnchS`5GTM!FFj$&56U2C>f8aU@tZUG4OZKL$eq?(Iop7?d_RPh zNsP}9CQq!;C%lT}F@c}=5(x#c65;~tZqRfDQY$pqxb_AI>bY*2D!uapKV5-+C+vf3 zAFOje;m-!I`W8pX@e`Q@soLC>awimCn94)pT!`7%@LkDms9%*A4ih@x zE+aWUH;C0Z5pX1wkyc$T50WLNNI%H;wV|ECs@2rt5wT|Zo~haN zAg8Pq#24ejr&MXvHs9Xo`IIMpGFF6tlC-=N$#Pug2gOxOps|TQCyP($Rnw<7fsN?N zQwg=v|4U({MV@Bo@mU$09<4fM#Ik^8xjY&pa$cTza_3o2b)ckyY9~dEI(V|6hNTaY z&G!&^*Kcg%Y3Hze^ma?m#FN*~RDSp6a}xaCBQp3aALyL^VN1sXtCRk{?-Kyz@eRm} z14(W%i&rAFFx@4y@I=T4b zB7KYO8!dPan~O$dpdhzZuCmoA@*T8$AWbr>7E<>S!L{z|PI%m9l1_Fn;x`O`)E~uU z2QJ}5yj^7dN0Q*+T@pm$lk%vV+f*NzEg%?gQ3rlKBJ0PyB3Jb8UqCCzSK8l@Riqd0 zJaKOuv#Cjg>t-A0{0x0k-;6>Hmb#F+|0GeLfJPn{sEJ>|GU>HtjoAZvYR!#lP=E_R z^FY(NHyzR7ihj;yp8{xwry|?Yjt@wTsNKP3Wp=W;kY)Ou7~wE6)OXU)d{Lc|(el%b zxrb}~OOyrCWO>-*MFU*`GGpI&_1c7%^EXoRTogni5N|Fdenga14bKTx*60e9^M)xg zY)Ie*Q>Dd`Ql)^%XwPj@XBHIB8!m9woi|=K#WIJhL}*VB3|pY9ef0|~bZ&B092xe^hD}o6+w}} zdBn1u>95F=Jgm$>XQJXC^SRx{mZiw_}-j?cVc zpqB<=Qpa#XEV`6B@4}80SFwWST%8L3U$V$Rw|9vkNHw$_8E!;YR*J4jj$^nH`*oHT|Vg(qP}W7!1r~WC9sPwqq=&t9uit z<_-1zj)!QeMj>8f1?ghoR{&0aeD`cplxATDIO>|@*az6g(%7t@L_~aa*cNr?8!eOZ z9%^`r<=3RRGJvRG1?TOPo|f-m2Etfq zs+Ai(G3nF12^KHRQ>VP5jBW~NIM&UFQhf=a=ubVct>58ub$H+u(Udsbkdc^ng?M~w ziO>N|kUiBRHz`qEY1_GAUyD>0sxE=42)V(~dZrnTfPox63N>m^Nu&?vnO7$fA~*HZ zR0VJWcO#hUvKge!BQ+Ndz&n@p0X<;r?2HeI@%kP!=k6SCu_ZiH16sHpq81iMe>be{ zM?I7BTs(t`9K8LiAa)XJlF+0bGnb5ryWy^v8YvwKytR zrd38C7FSa~2`eQf^L{qZEA62{@lPfXAXEXT-xZrUlLKQh{%KrJJ-{FEz6`Lyv z+)X7eJT;M8@z;?2>gi+VZ6X3Y5+0eWHA^1zD2OawG2lyy0Yjm3ICxq-YZNu2jC6$$ z(l=17U7ME*EtilNfV|mE3V3f`3vt8_R#XEr)T{aJZ3oYyO9)Q=&D%52xGjmcCSZ^` zU5OL4m~KBQj~)?0`XD}+=(v4gwuz&agUZ5T#)I|sKGUTQb3Kbn#jj}GlnMi$J*JU=MhG2L`AwpNY+BODzYAV(e!H zX9Dh*w4G=Pe}7XAWGJ@aN!0O<;G|K@ZTWkQZKEFXQ z{9tsN+=XNa<`2^qPv36O5>1|10$His+){PONc%>WbN8G)ahECxHmrcS7x~b*k^}UNd6cJd^MH6j|RgcVI81l*UsW+yq!l~rSodLIBEIO3xiA&`1OD$x&DQrKY zy%xIt9Cqp>#?;kO=v$+?2jM%o-Mj%=Se2H({JYVBfgLag6>o^6ZgD5*E!aJ#Nv3@5 z-n!N1+y;pV%Zq&|l)8z!L@rK24z1Gbh(Z#M*eoN!HU>yC?h9t=;K$XSWHFo1zHFDW z_{_?*cIeVK%uLp0>UzfM{M_(Bh1gzgSyB{U?#$_#W2^gppDv6!RaxL3#b60N60ZAf zNo7x6CKa3n=Y8&yUS9Ls4Y5vGmA|Pg@PYtz-$k!o<#VkE-7Y=Lr;9qXYRy4Y+5n=( z&=Qy708eWrO0mNi6G!kMO9E6g#}1-Z=# zqHP>N$SD^`#uQ@+n2_u~MTP`{t7R3rd_IB!muoyx(In*-T&7t#EJeAATfP(^NYW+U zBDA~He)7Qe@Lo1X;hFiaxeV=cSbN3Ls!P|d>4fs*)sNyJ)JpW`i^-_|yC%c> zuS_O5^0&z}>5AG3*@V6_8S>wyU%Lbmt*`%{PH6U@O@@2pZzhv2l3+AZr}N0+p}Uol zs=sr_<#DaiWOq^8`W$_BF&JCUIaX{WV}+y7l9r7W$jn#EW;cndys>6;DC}KI+FGLF z`B8oUVYc(6iH*-lM#JFBVW~IbIR;JNpL~+(BA^c08;c?D(gPeoJcNwqJZYZ^5UFrA zOQTt&XTW_NU1pe<yZ6NU8yY+XJMm^*cR9+|q+2z9z9Md^VC zC}KEBv<%a+*Ep|F?C!LL7r>eknh)jPxxp3z5{i51KMurDh}77CQ~Gzf@-cn)9S#tF z7-UB2!J@#vwttxP#Ooyow$SInE|v-7X&}dJv6Nzat7>3jw57UoWLdKG1m$B_G0~My zAjT_bQ2SL@nP>HlQ+Yc@8Eu;SGs?y-whmH9Ei5A-A7${M7BBG7B;yzw&M8&rnxyma zz)HluEz}k!P2l25pZaucb-n+TkFlUShNo24T|$4S{eJmKmLc=z_1$)*1YrK5EXH*JwX*KWkul= zOBfb+-yEl|*}Wu8^_A!e1ydjw1vMHOZ%+&Gs5nsE7xV_FL=qi$bj)`^lHwel8XB^) zNpL^^3})J|%7hTaGE6X&S|`jIBmP`RdbWi!Yz84edo+dtVK(OK-|Vz6nnf=np^o25 z&y@Cye}8z_xTn7`>YVVOt%jc$Vgc=C{0;WM=#}wbSj|5aJ-?Sg63_oulAB8zZtl{Y z{_6k-+%f`VwpIU#Lbu`%UP2&29tusnP36*V^^RaV3}i4 zsZ}10rfkE5mh8ui9?6)4riF?fW4D}_uA0a7P!@a{DiBxQI^sRFl`ndwXPwG3gRKlS zg_}a&f2e=PJgaLb=e!;c`V8^A)X_q0-FKVSeMF(3jL`M$z>oZuUd8EZX6EhriCMim zFceOK@IJ~|G(`Hv7z|Q0gY>|oj7upwQR1;pe8}0BzW7LD`8u85859n5#@XtRyEb-d90?vt_h>R7GqhOk4em!sIlCEsGv3;Pc>(&O+)u3TN0z0+ksMQCt7F!XG zNWiC~EZ-zXC~jr=+@*9(Z{@DoZbqMKRgoMok`UB;vG21jY-X@9$KJU}WDrV5P&nfF z>wa)wo4yM<0q$%@0e*I=JL%w2qxfZa0qNqP9f{LyF@(M%+HH5EX1LWnwl zi2y;ym3HuP4-=mNDrk!L%eHnbCNjSg$eqvlLr>+ZyVuw2;RL0d%uaIk2wW@*lQ+2d zR}xhu3YJ_VdijiIG$oq_+F9BZG=#-#h>0_MH0oYNY;($@z47J7&FaOA5hp#3aE@R63T2+EHMQ){W3;| z2Lq$~|MoNg*rpn&ywgB?UK`JoTPO!_M75=!4_E3A4R0d13yjjvPsTMyc9-jNyXq3Kzk0QQ77*|Z zDTpzN{Rn6-t#wk+?6f)}|An}p+qv1sQJbm5>YJqCsorW_X$Tm0+jh(1MgM7JwZ`U) zP7E{eh#!UpbYK-bP3B*uIU>7~8(h3{eqNqLzl&pd%-vOW?pMdeU2T$CEgx~2Dc$9H z5KL~@|ID|xX=4uNObS-PcwUXOmSWPP?Aj68Y5zzbrxQEXy3-<%rXC`2_ITyCLQ#F~ zq+Q%A(1`6!W)v$S z_oM(8S>F6`0M>|!)-X~!;#jbeIi?afVMbx`V12UlrHr;w7c*dsX|s6H@roeg-<8Bv z%{B>-)r#HSFlli_7Cwi%>_zaD0D0+}9=z{Cr%?tp%R3VBTSZWm%Y4%|@^`ZG6?ot8 z*uGZOPFR71(((;qT ziD+{=#8TR)k6{5FC+l3W*eMT(f*H0-!1&3NSUgNy7Sgw=M4(NbF}zC6Ae37J&7cCe z?l=Lo9LYwzCIFnmd8qerQ?!;#RKbDH?L7A2U2W0OU@3lRWj%{*lcayv-CMc?DFELlGwZN&juTS z6cOtPh?1_f=2m2i-Pops1%6O=6IraPq47hw7a+;R=z&gB>iw=se((sT^b?EIGjhpH z=iElcPvAF03(9K9fC7^@`x-D!(~VK5gvig>9iq`d4@WO@^tWPPIcj3X-5u>p-lH!K z#7tY#v;_yI^w=G=WBo!WRZyPRh*`;(dpFE?uW4vpVU)E{-@QwGa8Q zCP7JnGKD_lBRF_E+tL=p3*`*eagR)haxJjhH;84|(iox(qIL#zS|#TscSFjHUr9{F z5b+duP41ME&^QcWKx0at>*IJ&#YQj~k*YLpl~zi^*_7}c0b3HNy9~BQI!&Gl-}94M zwv*d8<#WmUAwCuDiYK4X4kn!x>2Z7lvH)d<_zd`RAcL>a$Dqk`@)HFq0kH}BS`yXn zvX~7>wA+>p2y-Pe>OJ)ysJ-KMFWKSn%;AN@@&h08{v4Q=x7R`5W$}i*{SKYa!{_d0 z{E+>uVY=X_(}%x&I?=h3>!SC`Zey!|cjb58jNVx#`M=%S#K6?JY;(ef!h)?^H<@oJ zHYnX}YHVm?Vp3n})KkCxHd{Lb^Y8lf%Kwc^U&NpNS$Fp9FT3ONHRgZh@4Tz9efyd# zwEn??ui~#m_b#itYw?cX<--5FW<~2QsRyX1OI<=Roni4 zot9JI(D^ewdh_0AReRU|XU^MRUqAW(ELV#i>avfXuAQ>yXY}Nc_7Tkg*GK*ldzilfCPDZ^6HY)(`8q9j!e3byw&Y`5#RGdXHUPzq~&7(IQUoHJ^>iBr!tnz24t&FOE>RaB({-e#5Xs#U{EXZD6tleF2`}Fmd znf4Z8e^+;!tlt?oU+_<3^Yi`HNgrk@R~27)cy!*uMfK~i)jvAW^z*umn%lN*$K2G+ zdi3Kb11~9^dE)-@|5g94s~-RNK>B{Xj>ETEufB%9wD-9DH(Pvpyz$<3>prjxPx>#t zRV?oF-gE!|H0K=MKacmQpZD5& z>m%c~fBn(Sero@XCy!09zSeWCpWyWCdX?DTw5r&?H~a=H|APuQU3UoxYcBn%zxe3% z_P_HxPAvRiz5T=QvwJL_{;!hUllS`v`@J3YTRER(ue-inp?<@Q-}ctRmA0Q>w=A99P|JRZ6+n4=duHE&&)lGE$ z%ed*cfexDazxR=Jm(c}-{pre;Kf7I6m?!i8vi)U`dhd7nj(5Q-!27;+fY=g*^%EiYs_Q3}X6B^mrxzur8-1E?#%hkrdNy~c=_mj^40b9@zn8j5o2Qr@MdHZVdi3B;NSpS<;bu_ zBW?E9ASVKJIb}^ i=o-;O3ZYS{nSyW&@MdKL8N~vGBEUQC=K>95U;qG~+SpJ4 From ff2367db890bcd56219917534e6750f5f0175409 Mon Sep 17 00:00:00 2001 From: Mansour Date: Mon, 19 Jul 2021 22:45:12 +0430 Subject: [PATCH 18/32] CallbackProxies extend from BaseCallbackProxy --- .../Poolakey/Scripts/Callbacks/BaseCallbackProxy.cs | 13 +++++++++++++ .../Scripts/Callbacks/ConnectionCallbackProxy.cs | 3 +-- .../Scripts/Callbacks/ConsumeCallbackProxy.cs | 3 +-- .../Scripts/Callbacks/PaymentCallbackProxy.cs | 5 ++--- .../Scripts/Callbacks/SKUDetailsCallbackProxy.cs | 4 +--- 5 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 unity/Assets/Poolakey/Scripts/Callbacks/BaseCallbackProxy.cs diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/BaseCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/BaseCallbackProxy.cs new file mode 100644 index 0000000..5f48cb5 --- /dev/null +++ b/unity/Assets/Poolakey/Scripts/Callbacks/BaseCallbackProxy.cs @@ -0,0 +1,13 @@ +using System.Threading.Tasks; +using Poolakey.Scripts.Data; +using UnityEngine; + +namespace Poolakey.Scripts.Callbacks +{ + public class BaseCallbackProxy : AndroidJavaProxy + { + protected Result result; + public BaseCallbackProxy(string address) : base(address) { } + + } +} \ No newline at end of file diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs index 295939c..45a41a9 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs @@ -4,9 +4,8 @@ namespace Poolakey.Scripts.Callbacks { - public class ConnectionCallbackProxy : AndroidJavaProxy + public class ConnectionCallbackProxy : BaseCallbackProxy { - private Result result; public ConnectionCallbackProxy() : base("com.farsitel.bazaar.callback.ConnectionCallback") { } void onConnect() diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs index deaea34..2c425f4 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs @@ -4,9 +4,8 @@ namespace Poolakey.Scripts.Callbacks { - public class ConsumeCallbackProxy : AndroidJavaProxy + public class ConsumeCallbackProxy : BaseCallbackProxy { - private Result result; public ConsumeCallbackProxy() : base("com.farsitel.bazaar.callback.ConsumeCallback") { } void onSuccess() diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs index 74da135..1132ebf 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs @@ -4,11 +4,10 @@ namespace Poolakey.Scripts.Callbacks { - public class PaymentCallbackProxy : AndroidJavaProxy + public class PaymentCallbackProxy : BaseCallbackProxy { - private Result result; - public PaymentCallbackProxy() : base("com.farsitel.bazaar.callback.PaymentCallback") { } + void onSuccess(string orderId, string purchaseToken, string payload, string packageName, int purchaseState, long purchaseTime, string productId, string originalJson, string dataSignature) { var data = new PurchaseInfo { orderId = orderId, purchaseToken = purchaseToken, payload = payload, packageName = packageName, purchaseState = (PurchaseInfo.State)purchaseState, purchaseTime = purchaseTime, productId = productId, originalJson = originalJson, dataSignature = dataSignature }; diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs index 5068d93..910eeb6 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs @@ -5,10 +5,8 @@ namespace Poolakey.Scripts.Callbacks { - public class SKUDetailsCallbackProxy : AndroidJavaProxy + public class SKUDetailsCallbackProxy : BaseCallbackProxy { - private Result> result; - public SKUDetailsCallbackProxy() : base("com.farsitel.bazaar.callback.SKUDetailsCallback"){} void onSuccess(AndroidJavaObject purchaseEntity) From e1a2a81305b415c290de873f8f9c0aeb2d7155c9 Mon Sep 17 00:00:00 2001 From: Mansour Date: Mon, 19 Jul 2021 22:47:35 +0430 Subject: [PATCH 19/32] New result classes --- .../Callbacks/ConnectionCallbackProxy.cs | 6 ++--- .../Scripts/Callbacks/ConsumeCallbackProxy.cs | 4 +-- .../Scripts/Callbacks/PaymentCallbackProxy.cs | 8 +++--- .../Callbacks/SKUDetailsCallbackProxy.cs | 4 +-- unity/Assets/Poolakey/Scripts/Data/Result.cs | 25 ++++++++++++++++--- 5 files changed, 31 insertions(+), 16 deletions(-) diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs index 45a41a9..057e2bb 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs @@ -10,17 +10,17 @@ public ConnectionCallbackProxy() : base("com.farsitel.bazaar.callback.Connection void onConnect() { - result = new Result(Status.Success, true, "Connection Succeed."); + result = new Result(Status.Success, "Connection Succeed."); } void onDisconnect() { - result = new Result(Status.Disconnect, true, "Connection Disconnect."); + result = new Result(Status.Disconnect, "Connection Disconnect."); } void onFailure(string message, string stackTrace) { - result = new Result(Status.Failure, false, message, stackTrace); + result = new Result(Status.Failure, message, stackTrace); } public async Task> WaitForResult() diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs index 2c425f4..056fb2b 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs @@ -10,12 +10,12 @@ public ConsumeCallbackProxy() : base("com.farsitel.bazaar.callback.ConsumeCallba void onSuccess() { - result = new Result(Status.Success, true, "Consumption Succeed."); + result = new Result(Status.Success, "Consumption Succeed."); } void onFailure(string message, string stackTrace) { - result = new Result(Status.Failure, false, message, stackTrace); + result = new Result(Status.Failure, message, stackTrace); } public async Task> WaitForResult() diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs index 1132ebf..5337b21 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs @@ -1,6 +1,4 @@ -using System.Threading.Tasks; using Poolakey.Scripts.Data; -using UnityEngine; namespace Poolakey.Scripts.Callbacks { @@ -11,17 +9,17 @@ public PaymentCallbackProxy() : base("com.farsitel.bazaar.callback.PaymentCallba void onSuccess(string orderId, string purchaseToken, string payload, string packageName, int purchaseState, long purchaseTime, string productId, string originalJson, string dataSignature) { var data = new PurchaseInfo { orderId = orderId, purchaseToken = purchaseToken, payload = payload, packageName = packageName, purchaseState = (PurchaseInfo.State)purchaseState, purchaseTime = purchaseTime, productId = productId, originalJson = originalJson, dataSignature = dataSignature }; - result = new Result(Status.Success, data, "Purchase Succeed."); + result = new PurchaseResult(Status.Success, data, "Purchase Succeed."); } void onFailure(string message, string stackTrace) { - result = new Result(Status.Failure, null, message, stackTrace); + result = new PurchaseResult(Status.Failure, null, message, stackTrace); } void onCancel() { - result = new Result(Status.Cancel, null, "Purchase Canceled."); + result = new PurchaseResult(Status.Cancel, null, "Purchase Canceled."); } public async Task> WaitForResult() diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs index 910eeb6..50c5397 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs @@ -17,12 +17,12 @@ void onSuccess(AndroidJavaObject purchaseEntity) { list.Add(new SKUDetails(purchaseEntity.Call("get", i))); } - result = new Result>(Status.Success, list, "Fetch SKU details completed."); + result = new SKUDetailsResult(Status.Success, list, "Fetch SKU details completed."); } void onFailure(string message, string stackTrace) { - result = new Result>(Status.Failure, null, message, stackTrace); + result = new SKUDetailsResult(Status.Failure, null, message, stackTrace); } public async Task>> WaitForResult() diff --git a/unity/Assets/Poolakey/Scripts/Data/Result.cs b/unity/Assets/Poolakey/Scripts/Data/Result.cs index 335eb41..251c911 100644 --- a/unity/Assets/Poolakey/Scripts/Data/Result.cs +++ b/unity/Assets/Poolakey/Scripts/Data/Result.cs @@ -1,19 +1,36 @@ +using System.Collections.Generic; + namespace Poolakey.Scripts.Data { public enum Status { Success, Cancel, Disconnect, Failure, Unknown } - public class Result + public class Result { public Status status; public string message; - public T data; public string stackTrace; - public Result(Status status, T data, string message, string stackTrace = null) + public Result(Status status, string message, string stackTrace = null) { this.status = status; this.message = message; - this.data = data; this.stackTrace = stackTrace; } } + + public class SKUDetailsResult : Result + { + public List data; + public SKUDetailsResult(Status status, List data, string message, string stackTrace = null) : base(status, message, stackTrace) + { + this.data = data; + } + } + public class PurchaseResult : Result + { + public PurchaseInfo data; + public PurchaseResult(Status status, PurchaseInfo data, string message, string stackTrace = null) : base(status, message, stackTrace) + { + this.data = data; + } + } } \ No newline at end of file From ef8c5dd4c5acd2cd0f60b498d1b26ca394de35cb Mon Sep 17 00:00:00 2001 From: Mansour Date: Mon, 19 Jul 2021 22:48:47 +0430 Subject: [PATCH 20/32] Migrate to new results --- .../Poolakey/Scripts/Callbacks/BaseCallbackProxy.cs | 6 ++++++ .../Scripts/Callbacks/ConnectionCallbackProxy.cs | 9 --------- .../Scripts/Callbacks/ConsumeCallbackProxy.cs | 9 --------- .../Scripts/Callbacks/PaymentCallbackProxy.cs | 7 ------- .../Scripts/Callbacks/SKUDetailsCallbackProxy.cs | 8 -------- unity/Assets/Poolakey/Scripts/Payment.cs | 13 ++++++------- 6 files changed, 12 insertions(+), 40 deletions(-) diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/BaseCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/BaseCallbackProxy.cs index 5f48cb5..cb92967 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/BaseCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/BaseCallbackProxy.cs @@ -9,5 +9,11 @@ public class BaseCallbackProxy : AndroidJavaProxy protected Result result; public BaseCallbackProxy(string address) : base(address) { } + public async Task WaitForResult() + { + while (result == null) + await Task.Delay(100); + return result; + } } } \ No newline at end of file diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs index 057e2bb..ba128ab 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/ConnectionCallbackProxy.cs @@ -1,6 +1,4 @@ -using System.Threading.Tasks; using Poolakey.Scripts.Data; -using UnityEngine; namespace Poolakey.Scripts.Callbacks { @@ -22,12 +20,5 @@ void onFailure(string message, string stackTrace) { result = new Result(Status.Failure, message, stackTrace); } - - public async Task> WaitForResult() - { - while (result == null) - await Task.Delay(100); - return result; - } } } \ No newline at end of file diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs index 056fb2b..03d3f62 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/ConsumeCallbackProxy.cs @@ -1,6 +1,4 @@ -using System.Threading.Tasks; using Poolakey.Scripts.Data; -using UnityEngine; namespace Poolakey.Scripts.Callbacks { @@ -17,12 +15,5 @@ void onFailure(string message, string stackTrace) { result = new Result(Status.Failure, message, stackTrace); } - - public async Task> WaitForResult() - { - while (result == null) - await Task.Delay(100); - return result; - } } } \ No newline at end of file diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs index 5337b21..52ac41a 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs @@ -21,12 +21,5 @@ void onCancel() { result = new PurchaseResult(Status.Cancel, null, "Purchase Canceled."); } - - public async Task> WaitForResult() - { - while (result == null) - await Task.Delay(100); - return result; - } } } \ No newline at end of file diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs index 50c5397..5228e49 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using System.Threading.Tasks; using Poolakey.Scripts.Data; using UnityEngine; @@ -24,12 +23,5 @@ void onFailure(string message, string stackTrace) { result = new SKUDetailsResult(Status.Failure, null, message, stackTrace); } - - public async Task>> WaitForResult() - { - while (result == null) - await Task.Delay(100); - return result; - } } } \ No newline at end of file diff --git a/unity/Assets/Poolakey/Scripts/Payment.cs b/unity/Assets/Poolakey/Scripts/Payment.cs index cbd2587..74d2ffe 100644 --- a/unity/Assets/Poolakey/Scripts/Payment.cs +++ b/unity/Assets/Poolakey/Scripts/Payment.cs @@ -2,7 +2,6 @@ using Poolakey.Scripts.Callbacks; using System.Threading.Tasks; using Poolakey.Scripts.Data; -using System.Collections.Generic; using System; namespace Poolakey.Scripts @@ -24,7 +23,7 @@ public Payment(PaymentConfiguration paymentConfiguration) } } - public async Task> Connect(Action> onComplete = null) + public async Task Connect(Action onComplete = null) { var callback = new ConnectionCallbackProxy(); poolakeyBridge.Call("connect", paymentConfiguration.securityCheck.rsaPublicKey, callback); @@ -37,25 +36,25 @@ public void Disconnect() poolakeyBridge.Call("disconnect"); } - public async Task>> GetSkuDetails(string productId, Action>> onComplete = null, Type type = Type.inApp) + public async Task GetSkuDetails(string productId, Action onComplete = null, Type type = Type.inApp) { var callback = new SKUDetailsCallbackProxy(); poolakeyBridge.Call("getSkuDetails", type.ToString(), productId, callback); - var result = await callback.WaitForResult(); + var result = (SKUDetailsResult)await callback.WaitForResult(); onComplete?.Invoke(result); return result; } - public async Task> Purchase(string productId, Type type = Type.inApp, Action> onComplete = null, string payload = "") + public async Task Purchase(string productId, Type type = Type.inApp, Action onComplete = null, string payload = "") { var callback = new PaymentCallbackProxy(); poolakeyBridge.Call("purchase", type.ToString(), productId, payload, callback); - var result = await callback.WaitForResult(); + var result = (PurchaseResult)await callback.WaitForResult(); onComplete?.Invoke(result); return result; } - public async Task> Consume(string token, Action> onComplete = null) + public async Task Consume(string token, Action onComplete = null) { var callback = new ConsumeCallbackProxy(); poolakeyBridge.Call("consume", token, callback); From ae809e373a7092d71dcb5601a4c4ef4d71b183f0 Mon Sep 17 00:00:00 2001 From: Mansour Date: Mon, 19 Jul 2021 22:56:47 +0430 Subject: [PATCH 21/32] Better variable names --- .../com/farsitel/bazaar/PaymentActivity.kt | 32 +++++++++---------- .../farsitel/bazaar/PoolakeyKotlinBridge.kt | 8 ++--- .../bazaar/callback/ConsumeCallback.java | 2 -- .../bazaar/callback/SKUDetailsCallback.java | 4 +-- .../Callbacks/SKUDetailsCallbackProxy.cs | 6 ++-- 5 files changed, 24 insertions(+), 28 deletions(-) diff --git a/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt b/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt index b5d9f1e..e9fd9a3 100644 --- a/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt +++ b/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt @@ -31,9 +31,9 @@ class PaymentActivity : FragmentActivity() { purchaseFlowBegan { // Bazaar's billing screen has opened successfully } - failedToBeginFlow { t -> + failedToBeginFlow { throwable -> // Failed to open Bazaar's billing screen - paymentCallback?.onFailure(t.message, t.stackTrace.joinToString("\n")) + paymentCallback?.onFailure(throwable.message, throwable.stackTrace.joinToString("\n")) finish() } } @@ -47,9 +47,9 @@ class PaymentActivity : FragmentActivity() { purchaseFlowBegan { // Bazaar's billing screen has opened successfully } - failedToBeginFlow { t -> + failedToBeginFlow { throwable -> // Failed to open Bazaar's billing screen - paymentCallback?.onFailure(t.message, t.stackTrace.joinToString("\n")) + paymentCallback?.onFailure(throwable.message, throwable.stackTrace.joinToString("\n")) finish() } } @@ -64,18 +64,18 @@ class PaymentActivity : FragmentActivity() { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) PoolakeyKotlinBridge.payment.onActivityResult(requestCode, resultCode, data) { - purchaseSucceed { p -> + purchaseSucceed { purchaseInfo -> // User purchased the product paymentCallback?.onSuccess( - p.orderId, - p.purchaseToken, - p.payload, - p.packageName, - p.purchaseState.ordinal, - p.purchaseTime, - p.productId, - p.originalJson, - p.dataSignature + purchaseInfo.orderId, + purchaseInfo.purchaseToken, + purchaseInfo.payload, + purchaseInfo.packageName, + purchaseInfo.purchaseState.ordinal, + purchaseInfo.purchaseTime, + purchaseInfo.productId, + purchaseInfo.originalJson, + purchaseInfo.dataSignature ) finish() } @@ -84,8 +84,8 @@ class PaymentActivity : FragmentActivity() { paymentCallback?.onCancel() finish() } - purchaseFailed { t -> - paymentCallback?.onFailure(t.message, t.stackTrace.joinToString("\n")) + purchaseFailed { throwable -> + paymentCallback?.onFailure(throwable.message, throwable.stackTrace.joinToString("\n")) finish() } } diff --git a/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt b/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt index fe1cf49..7909109 100644 --- a/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt +++ b/android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt @@ -25,7 +25,7 @@ object PoolakeyKotlinBridge { val paymentConfig = PaymentConfiguration(localSecurityCheck = securityCheck) payment = Payment(context = context, config = paymentConfig) connection = payment.connect { - connectionFailed{ t -> callback.onFailure(t.message, t.stackTrace.joinToString { "\n" }) } + connectionFailed{ throwable -> callback.onFailure(throwable.message, throwable.stackTrace.joinToString { "\n" }) } connectionSucceed { callback.onConnect() } @@ -49,12 +49,12 @@ object PoolakeyKotlinBridge { "inApp" -> payment.getInAppSkuDetails(skuIds = listOf(productId)) { getSkuDetailsSucceed(callback::onSuccess) - getSkuDetailsFailed{ t -> callback.onFailure(t.message, t.stackTrace.joinToString { "\n" }) } + getSkuDetailsFailed{ throwable -> callback.onFailure(throwable.message, throwable.stackTrace.joinToString { "\n" }) } } else -> payment.getSubscriptionSkuDetails(skuIds = listOf(productId)) { getSkuDetailsSucceed(callback::onSuccess) - getSkuDetailsFailed{ t -> callback.onFailure(t.message, t.stackTrace.joinToString { "\n" }) } + getSkuDetailsFailed{ throwable -> callback.onFailure(throwable.message, throwable.stackTrace.joinToString { "\n" }) } } } } @@ -86,7 +86,7 @@ object PoolakeyKotlinBridge { } payment.consumeProduct(purchaseToken) { consumeSucceed(callback::onSuccess) - consumeFailed { t -> callback.onFailure(t.message, t.stackTrace.joinToString { "\n" }) } + consumeFailed { throwable -> callback.onFailure(throwable.message, throwable.stackTrace.joinToString { "\n" }) } } } } \ No newline at end of file diff --git a/android/src/main/java/com/farsitel/bazaar/callback/ConsumeCallback.java b/android/src/main/java/com/farsitel/bazaar/callback/ConsumeCallback.java index 15829d0..6241452 100644 --- a/android/src/main/java/com/farsitel/bazaar/callback/ConsumeCallback.java +++ b/android/src/main/java/com/farsitel/bazaar/callback/ConsumeCallback.java @@ -1,7 +1,5 @@ package com.farsitel.bazaar.callback; -import org.jetbrains.annotations.NotNull; - public interface ConsumeCallback { void onSuccess(); void onFailure(String message, String stackTrace); diff --git a/android/src/main/java/com/farsitel/bazaar/callback/SKUDetailsCallback.java b/android/src/main/java/com/farsitel/bazaar/callback/SKUDetailsCallback.java index cb85054..e9819dc 100644 --- a/android/src/main/java/com/farsitel/bazaar/callback/SKUDetailsCallback.java +++ b/android/src/main/java/com/farsitel/bazaar/callback/SKUDetailsCallback.java @@ -1,12 +1,10 @@ package com.farsitel.bazaar.callback; -import org.jetbrains.annotations.NotNull; - import java.util.List; import ir.cafebazaar.poolakey.entity.SkuDetails; public interface SKUDetailsCallback { - void onSuccess(List it); + void onSuccess(List data); void onFailure(String message, String stackTrace); } diff --git a/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs b/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs index 5228e49..700ef43 100644 --- a/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs +++ b/unity/Assets/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs @@ -11,10 +11,10 @@ public SKUDetailsCallbackProxy() : base("com.farsitel.bazaar.callback.SKUDetails void onSuccess(AndroidJavaObject purchaseEntity) { var list = new List(); - var length = purchaseEntity.Call("size"); - for (int i = 0; i < length; i++) + var size = purchaseEntity.Call("size"); + for (int index = 0; index < size; index++) { - list.Add(new SKUDetails(purchaseEntity.Call("get", i))); + list.Add(new SKUDetails(purchaseEntity.Call("get", index))); } result = new SKUDetailsResult(Status.Success, list, "Fetch SKU details completed."); } From 46dc7fc32118d20e49674066426aa444a0e2bc65 Mon Sep 17 00:00:00 2001 From: Mansour Date: Mon, 19 Jul 2021 23:07:25 +0430 Subject: [PATCH 22/32] Add onStartPurchaseFlow event --- .../com/farsitel/bazaar/PaymentActivity.kt | 2 ++ .../bazaar/callback/PaymentCallback.java | 9 ++----- .../Plugins/poolakeyunitybridge-release.aar | Bin 39814 -> 41029 bytes .../Scripts/Callbacks/PaymentCallbackProxy.cs | 23 +++++++++++++----- unity/Assets/Poolakey/Scripts/Data/Result.cs | 2 +- unity/Assets/Poolakey/Scripts/Payment.cs | 4 +-- 6 files changed, 24 insertions(+), 16 deletions(-) diff --git a/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt b/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt index e9fd9a3..d325d32 100644 --- a/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt +++ b/android/src/main/java/com/farsitel/bazaar/PaymentActivity.kt @@ -30,6 +30,7 @@ class PaymentActivity : FragmentActivity() { ) { purchaseFlowBegan { // Bazaar's billing screen has opened successfully + paymentCallback?.onStart() } failedToBeginFlow { throwable -> // Failed to open Bazaar's billing screen @@ -46,6 +47,7 @@ class PaymentActivity : FragmentActivity() { ) { purchaseFlowBegan { // Bazaar's billing screen has opened successfully + paymentCallback?.onStart() } failedToBeginFlow { throwable -> // Failed to open Bazaar's billing screen diff --git a/android/src/main/java/com/farsitel/bazaar/callback/PaymentCallback.java b/android/src/main/java/com/farsitel/bazaar/callback/PaymentCallback.java index 9573580..c7cac39 100644 --- a/android/src/main/java/com/farsitel/bazaar/callback/PaymentCallback.java +++ b/android/src/main/java/com/farsitel/bazaar/callback/PaymentCallback.java @@ -1,13 +1,8 @@ package com.farsitel.bazaar.callback; -import org.jetbrains.annotations.NotNull; - -import ir.cafebazaar.poolakey.entity.PurchaseInfo; -import ir.cafebazaar.poolakey.entity.PurchaseState; - public interface PaymentCallback { - + void onStart(); + void onCancel(); void onSuccess(String orderId, String purchaseToken, String payload, String packageName, int purchaseState, long purchaseTime, String productId, String originalJson, String dataSignature); void onFailure(String message, String stackTrace); - void onCancel(); } diff --git a/unity/Assets/Poolakey/Plugins/poolakeyunitybridge-release.aar b/unity/Assets/Poolakey/Plugins/poolakeyunitybridge-release.aar index 2867f6a410c71c0b9d7ab225172c4a65308275ee..119bfcf39f2607537320acd4ba470ea328e553b2 100644 GIT binary patch delta 39106 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 t?*CHyKck onStartAction; + + public PaymentCallbackProxy(Action onStartAction) : base("com.farsitel.bazaar.callback.PaymentCallback") + { + this.onStartAction = onStartAction; + } + + void onStart() + { + onStartAction?.Invoke(new PurchaseResult(Status.Start, null, "Purchase flow started.")); + } + + void onCancel() + { + result = new PurchaseResult(Status.Cancel, null, "Purchase flow canceled."); + } void onSuccess(string orderId, string purchaseToken, string payload, string packageName, int purchaseState, long purchaseTime, string productId, string originalJson, string dataSignature) { @@ -16,10 +32,5 @@ void onFailure(string message, string stackTrace) { result = new PurchaseResult(Status.Failure, null, message, stackTrace); } - - void onCancel() - { - result = new PurchaseResult(Status.Cancel, null, "Purchase Canceled."); - } } } \ No newline at end of file diff --git a/unity/Assets/Poolakey/Scripts/Data/Result.cs b/unity/Assets/Poolakey/Scripts/Data/Result.cs index 251c911..bc0675c 100644 --- a/unity/Assets/Poolakey/Scripts/Data/Result.cs +++ b/unity/Assets/Poolakey/Scripts/Data/Result.cs @@ -2,7 +2,7 @@ namespace Poolakey.Scripts.Data { - public enum Status { Success, Cancel, Disconnect, Failure, Unknown } + public enum Status { Success, Start, Cancel, Disconnect, Failure, Unknown } public class Result { public Status status; diff --git a/unity/Assets/Poolakey/Scripts/Payment.cs b/unity/Assets/Poolakey/Scripts/Payment.cs index 74d2ffe..162260a 100644 --- a/unity/Assets/Poolakey/Scripts/Payment.cs +++ b/unity/Assets/Poolakey/Scripts/Payment.cs @@ -45,9 +45,9 @@ public async Task GetSkuDetails(string productId, Action Purchase(string productId, Type type = Type.inApp, Action onComplete = null, string payload = "") + public async Task Purchase(string productId, Type type = Type.inApp, Action onStart = null, Action onComplete = null, string payload = "") { - var callback = new PaymentCallbackProxy(); + var callback = new PaymentCallbackProxy(onStart); poolakeyBridge.Call("purchase", type.ToString(), productId, payload, callback); var result = (PurchaseResult)await callback.WaitForResult(); onComplete?.Invoke(result); From 8847dfbef5d38a28788944b9950cf264eff66545 Mon Sep 17 00:00:00 2001 From: Mansour Date: Mon, 19 Jul 2021 23:17:17 +0430 Subject: [PATCH 23/32] Add TODO for security chek --- unity/Assets/Poolakey/Demo/PoolakeyExample.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs index c6d6e03..6451c85 100644 --- a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs +++ b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; using Poolakey.Scripts; using UnityEngine.UI; using Poolakey; @@ -14,6 +14,8 @@ public class PoolakeyExample : MonoBehaviour void Start() { Log("Poolakey Plugin Version: " + PluginVersion.VersionString); + + // TODO: SecurityCheck.Enable("Your RSA key"); SecurityCheck securityCheck = SecurityCheck.Disable(); PaymentConfiguration paymentConfiguration = new PaymentConfiguration(securityCheck); payment = new Payment(paymentConfiguration); From 3b48f9361bbe2a0f25ef0039519c54e2cc3ca925 Mon Sep 17 00:00:00 2001 From: Mansour Date: Mon, 19 Jul 2021 23:17:37 +0430 Subject: [PATCH 24/32] Formating and cleanup --- unity/Assets/Poolakey/Demo/PoolakeyExample.cs | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs index 6451c85..7dc4585 100644 --- a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs +++ b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; using Poolakey.Scripts; using UnityEngine.UI; using Poolakey; @@ -21,38 +21,49 @@ void Start() payment = new Payment(paymentConfiguration); } - public void Connect() + public async void Connect() { - _ = payment.Connect(); + var result = await payment.Connect(); + Log($"{result.message}, {result.stackTrace}"); } public async void GetPurchaseSkuDetails() { var result = await payment.GetSkuDetails("test"); if (result.status == Status.Success) + { foreach (var sku in result.data) - print(sku.ToString()); + { + Log(sku.ToString()); + } + } } public async void Purchase() { var result = await payment.Purchase("test"); - print(result.message + " .. " + result.stackTrace); + Log($"{result.message}, {result.stackTrace}"); if (result.status == Status.Success) { purchase = result.data; - print(purchase.ToString()); + Log(purchase.ToString()); } } - public void Subscribe() + public async void Subscribe() { - _ = payment.Purchase("test", Payment.Type.subscription); + var result = await payment.Purchase("test", Payment.Type.subscription); + print($"{result.message}, {result.stackTrace}"); + if (result.status == Status.Success) + { + purchase = result.data; + Log(purchase.ToString()); + } } public async void Consume() { var result = await payment.Consume(purchase.purchaseToken); - print(result.message + " .. " + result.stackTrace); + print($"{result.message}, {result.stackTrace}"); } public void Log(string message) From 2aea636567e0cfd5a41bd0c84d8182a23a0e17a2 Mon Sep 17 00:00:00 2001 From: Mansour Date: Tue, 20 Jul 2021 15:01:41 +0430 Subject: [PATCH 25/32] Rename aar file (remove '-release' post fix) --- android/build.gradle | 2 +- ...tybridge-release.aar => poolakeyunitybridge.aar} | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename unity/Assets/Poolakey/Plugins/{poolakeyunitybridge-release.aar => poolakeyunitybridge.aar} (100%) diff --git a/android/build.gradle b/android/build.gradle index 4c8f7da..51fa14c 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -61,7 +61,7 @@ task createJar(type: Copy) { task updateAAR(type: Copy) { from('build/outputs/aar') into('../unity/Assets/Poolakey/Plugins/') - include(project.name + '-release.aar') + include(project.name + '.aar') } project.tasks.whenTaskAdded { Task theTask -> diff --git a/unity/Assets/Poolakey/Plugins/poolakeyunitybridge-release.aar b/unity/Assets/Poolakey/Plugins/poolakeyunitybridge.aar similarity index 100% rename from unity/Assets/Poolakey/Plugins/poolakeyunitybridge-release.aar rename to unity/Assets/Poolakey/Plugins/poolakeyunitybridge.aar From dcd0c5159d239f59c8f84c93a1dc1d9c64e85406 Mon Sep 17 00:00:00 2001 From: Mansour Date: Tue, 27 Jul 2021 11:50:42 +0430 Subject: [PATCH 26/32] Add doc images --- images/Auto-resulotion.png | Bin 0 -> 17718 bytes images/Poolakey-unity.jpg | Bin 0 -> 24760 bytes images/Unity-package.png | Bin 0 -> 29005 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/Auto-resulotion.png create mode 100644 images/Poolakey-unity.jpg create mode 100644 images/Unity-package.png diff --git a/images/Auto-resulotion.png b/images/Auto-resulotion.png new file mode 100644 index 0000000000000000000000000000000000000000..5edee28a76d618a01d790eb387c7a79698807f98 GIT binary patch literal 17718 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 BZt(yB literal 0 HcmV?d00001 diff --git a/images/Poolakey-unity.jpg b/images/Poolakey-unity.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07b25020c9b63c05e31f7fa19b35bc99abe67c36 GIT binary patch literal 24760 zcmeFZ1yEg0vjBL2V8Puj_{AZ(LvVL@cXxM(0Kq-DySoQZaCZ%^!L#K1{^xIB)$YHw zTU+&-syos>J$-s+dU~d(_`Udh6F`;}l@JBMzyJX3?GO090tf?$@8J;OU=b1E5s;A( zQ83A{FwxO5X^Ba2$v)Dvv$4=KGjjc=hYy4k^-+cfI3^)L}3IT=!fTMsxpn&}z0Pz2a3He9de+39I z@OO|<&@gXU9I(IPUvU5c4hHcK^7k?T4*>>%BSRp+p>96^JN*A<|5pS5tAYR3!2fFC z|4R)hN;2X_FCYFb0+@jEKOqZbT~N~Cl%<{ryGFvr-+bVea7b~4t)>5auB1%TjFM)F z|2+}_Fw@bpSSetmVPhg%xe~44$iSrGZP_ay)@nL@thi-VQ*0IMbQ5bH@m&eKRA_SF z2;Nyw<7!VB7F2m0uxEHUHbYCVjmW>%dpt~~1`kWR6>h#2000uvdoPAF+ypPNhF#!K z1-z1^g^WHuNZl4ObLmgTe*=thSRV!6+RB#P>^Q#RHMmP2I&by3e@K)nxX=?9j4M*L zC$jr`#Z?}RpJTicKy~b<1&d&Tf0eCST$R-}!)r3hU^Vpz077^Rf9MK=?{743-_%2> z4gejuPAz{*4Kw(cm87&3q*R)p)Lp~=Plf}U*nRU4b>^LLF#yQNWnXurEk*2{`f0Q& z9|g*2fzIS>8ySu`9=xWC_g1`GlmRdS3&Z<;xtVNszSJeR>H1VOWoB-NMM`fa{1m<{ z>ARn8m)}YO06GX)A8d`V<_~iKJS+s45dapmU$x&#>gKZg{+Ou9@kx+{!Ia8wf06u` zABZ>}=RcM3{cAGe0H##Neb*`j(bt<*ElE{n%Lg@kg}_GxImt5@eyiTBqkRB8v^?v= zyAyXZvkjWptB`>#2~VQZ(ynykXv$nTI)^|1gQuLr?4$RL|KGB$5dNhm07BGV{7rYK z2cmDCS;&40?+6Yr#SxH4jmIJgnEfwe{Z-*`5bF=Ngd>VF_89;>q%855XOXz(<+4jU z$v4-{D3wuecHGvC;+zpNtYRUhB;v0^AQ4@f<+*|e9VzbS>!{%f4KB?8e2kPkyFaaP{E;{ z7ga7abGhYAJ#TkdQuhB3l7i3l$e06XvFLz}oHqyn@E?XzG3e+>=$NHZr;7wLg$&~H zf+{$7a(Lyx{TE^1D*n>!4Rt!$p4dBpo-c+05-0y*y~=Ly$wDP@)TmIyg-&^-m6a)r z(bL&hhi2QhbhOG*k0(95_|*OUJ341pG&qm`lng(S$StF}fvp7X%9pvyk@Pq-vIHx{ zVk|R*nVfRl|EOGuOdbKigz(w>)yN;o{cRP)Orp==h^~$^A>hC;!Hh&-DQO#Hi%5)O zp`j&w0g39uMWQ5pfgCIZQ@pyGF?AX2`L_=N8_wnepuZQHLnmkZ0w5oJ-SF?(B2=FGwM=T&2WTbtw7|TkGug3OVCuY*@A=xZ<_j;;0I=mms0#jtP4P93bEEH*NMzTG0SY^r| z<~libCTKTgZu#5+a?%a z-8>!Cl$HzpWxlLEH~(}E&e8)9fSnX;+KVLth|zZ!095o2!qPGTHkMfn7OO35n!dd~ z9TH4IjU#jwGWb5QV88?nhZ@I2Xj8t_VmkZFKji}H!4ZM6i;78z21q)=^uAoV1PA{*_mPk<<;X(>(Su7>THP^mhSJG6 zHG?|V82`++$x=l}iEq-6Ncy_=CKZLJ6R(=LQAYDW%zXUbZGUj5Lm?+ccWmJEBg{Ae zk;TbU&cz6@LW3J(4{3Zh#odPZq$w({{J8}s5uJ{XO80FDLWY- z{27Kf0N+`e3`x8 z=a;(SF$_au9c5CA!b)Myn8}{tI9gfo}q1YjeS_rzA`K`X2bDh_tnY;c(7*x z#Kqg5KYc-e!6yceY_%4wmPw;PAx=E%nnLe2}T9M#CRI|A4>N!do6XKRX$q8-}>xtD<)9Mf|t)A722L>?yIH z1fUP&UHXPLj~x{<=r1@Qf6mlx3|OvvkdfGyh;aj1M?dT!TCeVpboHNmPo(6h;^vRF zuG3KrS=U@O6L6LpF-w0CrYd6Myz9&UzQDDOzNAr;euubf3qbV7FaoD>e|AOyB7^7C zpY(0r`O^c~VmYa%7SniW$a@GLihcd)OIX;Zf;dd&jNf`Qt&zmp0sl-0d5_X^w&Hxe zul?u~f13U){I!81{P0k8GIyrbH1P+hCXm8rCZ4Nps4;9QWfP?pG|yg0%f_}Q38NR& zDcH4C;_>SaqP?2RLHXTJdd!bt7Q4@9IEV8DPK#Hk9=e%74T@QcIitoi4Qa9tRw&f0 z2tL|LC>{B5{>LrgYG=y-j}Q=RGKWCkz9=UNtb^hQG^zn+$wX9aktVgi zYX1dlTt#*Ihmv7srTECW&JjDC@>PrJ*hY%S9iMVj2@uB~c(9^fYLZ(rv=n7p_|WP@ zX_uI+ZpnGqo?~Mt>tyI;r*O2!ISYVo4y6L78OXr9gZe}OL2%O_a29eOXLUu1-h zXVdDX$50`COldx z@4LU zb2z?M$pxr-3p2L&YdkN0TpwYc4l?n|WIowF+*GOdS&7Xg)5&fShONXdyqQx%DyKhu zAr@q30S}S^0B$M|z6RiQ8WaHTgsT9+Fq68FB^>U}dBRLirPOr`>G?zcUjRbZozoon zwPXGl2Ap%p=nNuc?P#?v|=QBk|lm2MeCMFi%5+4jgIvI$Wm;$R-uUr zlXb_@qW57Yt=!M!bvD ztP;FU2=gf(R^u=MxBWjvxYvpX7%Vcq>2LY}8Nh5ATh~A8gxqqzkbbDk{hN4zb-y9? z8{59X|J?R}!lL&p4+{KsK>MGl{ulTEHw`e!TGyNi{68Qyc>gdw3y}J&1^}?%4M6q$ zlPoc_b;Uh#0zE8njzh=i@mSQAgTHYaQSHddvWUY)zjg9Y03A<7!>v$pG-0X})ar2@ zBJaS()l5ETqNjDN_A%_F{f&|RKf(RY@nUn&Yo&Z=)|#2u!7_!&+i{7yvl55QHmvGs zR-7%M?)A4h`@h|X10{?Xb*hKN3@$`2*LA;4Z54D=HnC0Y_%+1R6fJx4+gbIWf*l!! zHnxL!6vAbb_+-?;?eEHYc{~+&q{jagR{%ib;v|)~MRNGVrY4X0Px8+IwkcTqKhyqy z+y1|<0l&966DKkN{uWpQhk%563opGzmH;sDw=fd`g@Q@~jYf?Afsu&~83PlGSwK+U zo|KH0MOZ=qBYSSmTO11JEp`P41N;V_#?X3ZRs#9wer4$jz{OW>kheovkcqwU*VlSh z$`3hD{7CrdK55!iab}4@Y*AF+=79N`xz`X5cARKk0`!S9LAp@9*U*iCXy=lgVH^Gw zw#$AB{%8*RHBcN#j9*)nBq(g&4$({Ee3l;l4J>91;6FWg$8Mf&L3Z}j%b^sx8B#g0BV;c&Cz}&lw-$L* z_)AQ?G>pNw`>JDHEU%~JMtPp{CGKR-%@Rb;p5%|97|ptx{4~?FtAtQ+KJKJ1B*&Uw zaU^Q>+t;^_JPZSq_rdokS!MDQ+k6f;Zu>j0#Ft3?SW|G@pU_&uK+#osGj|%i8zF;N zi8`0U_j&B$tqTh~6C)+wB2yG4_j%8H1Ge6(W{vzYbc=@ME>83tbP@?$Yuo9)IYk=K zlI-wRt3mmsfJdyT8sZmr*3q@%p?&Jzeh;DzJ(m9MXkiWK+6pFOZ;E|Uf? z67}nESiZZ=+|!OmYE+tV{vu8+8R;+i%s}^j_ZRGMAdpP(yde@vGq&o{V7R?Xj3WTc&daWRbKo7T?a)|p{EW6kH8xA3 zxQG?hY*=_JZyoes|RK4^k-kR3ic+oD5|8Xb)^Jth_zjpW^IE;!bhT{_M|SH z(vpThDPmJt6xQwDg5%go%`u3^2k=n6bEQ-(dx(cM3L5KFh8`Yfp(&{OG`*zmLPP+< zTs@MllfCRUW3iQD-qw%9IA16?u^z(VgF1VxraZbRy`Nl>Te4lvSzn1<-B}3ea`0$# z`&fY^%+Twm{v+$k?TIg4?-!z`*d8XUZ=hDNfL!~Ot(5p0m~*Ez>~~_&Ve-4nsVhy4 zBT8+mUoK6}u)&ph8|&^FH+lDq$JaY{gSJ(8l!!)Hkc+%zA@4GiHmrP+S)krU;7Cl@ zyh~(nB_^&Wd~&g8?V;s7&_?$9rZqKxj*BskV7(?K_r7Si|kk>%kMH-+y3LL7~_yj`^ zB8%I;FuFfi-$VeD~ zZc2@(cj**|z#nHDYP=Etot6frQ&?t)o*CYsU%Kug1#uE;K(jbc@C$tn%V~KbhM2mT ztN?z{tc2QXHGUL}Pf(z;*pnACswgL8|HL>DG%ms^B7QdZj-c%x@r)A=eM)vzJ&M4A z;YZ}SCK(`sO5z*v(jCz)Nu)~jiW|3*(Wf-2#Hcm;Jp(H~`^#%gt@-q-`_T&Wy;FFPdz56so_h(^^(cQEaF`v<6Qjx_Wrnb#piNbi(zSk8@{QC;+5A1T}QEqbvXE>3FxoQf{86+{gs_=Lk;_?mbXaw<}?96gd ze7P?;^i=;|WYs@4egpdAD&+MK5J{7(tw&+jc^7NvIijoGzjS?*x`SFArO-vu>9ZWg zd$RpMW;)+m6~|A8!>vf8Q}4-9s$jjC&O(xYyQa$^)R{N%b*W7d6A`5Tgu}K&YW3-& z@Rt11sDx#ylId_Bj)j6?3Ex%{im+kKG~_;woM|8twp=M=nYx$#?v>(&%17Pr-jXj4 z0~98#Z7T_{6vC4oBQ{kLcxDG{r|~KUNzILrBf)ntL5S56qGx{$0o&64T0+6b zO#NZ5ByUSBJ0wXyVKXrLTUyW=}!Z?z7-}(X2P_BtXqxOP?nl;Ki4)?c3=1~UZnU>*oVZ<)@rS0g!0!r zA=N{uM8H02SKORUY08PtbpJ|TDdew`O~iv9m9-wD=`bL)4N>_?JD~*TXpirU>Z7ru z0V8--9JB35Zvm@%j$cPjhyQts1feLOrWuKV0*y9KQx9~jiX$MZyIzNA#yE$Pq^umd z_UZ24#6sWN(W8clI{&Ax(C{>ve6Mlr`1cgn8CEwjUcdWiK|eA34cNtlYCnFzHFqxx z%WLli7LV4wdbhqT_?O?nrdjpjLG@An!cFVSZ(w9f?^V{1w7UC> zoyQN4EC)l{!ZwsPpH`e;bWk|iNma%pV&Yes7^RS5LbGE;+m6?_DGPN3|KL$SLmYE;V}zi_{=uC)W%s?#Fj)G+RGd+GZs(UPEFi?kj)pbq%YgW(+K- zFtv!fFjr&Y6pS1kR3J@yUCpNNl0}TDnoBNBGf2ZpNm)?i(#;Ky?!96VB9ZeHp-Feu zercFJ+-FU|_?GK1N0i}s;>1%Y!Cd$0N1=(hJR}*@PoY9Nz6WA)G4kk90bHT+^-U9l zLVK}yH8CwJkS$c5-VjCa>_1|BdmlTgeIb0kR74h#&l3%1$0s;uu1?!g;b_0w60crO zp0Zyya5tO9&z``tw!MV2;4#VUw{icr^W7S}#V$%-nofH~>lf==uBOt*r<@-dU1B=c zV0hW~m_J_SxZo9V3VDi2=z7=5X>cJdx=0Ks=W?9&1iEk55(Fd`+?hPsbL@+NsR$lZ zwq4b-OHc{~zOPXl4a6s=Rd(zzwyHs1it%0h_AC!qC=d?`k}eK4g~ib^sU(+F8mn*y zS%`kD37_*E6B)Z5CX-gtA=M!LK*LBnaG{xim1mQi#4rIrh9BjiO-Rxr^Su;S3~u}f zma0gtBQ_u+zSx|_8*-I@{fP=S(*Ymvc8i+m-|W~cciT|(d1}WJPh)%a;l%;L3AYJ_ zk9)D$hSt18IPlG_wDwI&c0D@2OY8lmI1$S`Vpap~$7L(Q=Y(95S3p|& zMS4^SBgy?3>BHSZBUd%$%A=RLo+)H-a^c~5oxKN2Y7{y9`LoQU{9~zmqUL*f0l$xy zKNlj=p3C-G9^hy5sy)3~a&62ex<6$;*c3bLBS7u7z!auloJddwK&#Py^FqKuQcJ0V z@r7uXI6=#Ma64#964>Q9(wo*R4-|9w7EPN|I-5%>iG)j*O!av{4BoXH>;U3)bv{4j zXvj!uW`_8nc+Cq|lfHRO$Gf4dG%`W~E(Ko0@V%+%jJSN;C|L+B^`6)VvZ$=EmkP8r zt*Q#?S`EQcObt_weC@~&on96g77+o{B?4I}%(uFT6PFre2FJl}$4X02c0a}>B!0_ZhBgB8 zhy5+NpX#29HDr(Hu6QpLl-~k5l&aEurIOrl?Un(r^2bqr`F!)eT#2({J_&HSfmNz zK8@|tm~lb@YaYh22+ThWWOSKEVAVvQ&qz=t<&!b~P`~2SSdnk?jzY~fCzP$A1Ad^8 za9R9V9WpGLXhFc&QzDT61y*T+eD<@=+@d50MEFMXfxyN4BWx;C!3P2^nCJp?VFq!o z7&*GRCX`Qi>ONhh#nwh#i|rZ$Rjn&$h4IGeJ09~rFJ!9xrw@=3ag~&|o;Wt@^of!c z@VTVJkBkv>g~63-@7 zFgCA*Y_}$FT=Wg!Jyq24`g63Kms-R_H zc0I@h8z>{l6TW)7h2$X;ef#0t1=YE4So^u8pd$s|Uqqdu6UX~p+auy$Rv7T)on~d@ zV*BZwkW^rZRc4M=_)_OeTIA(8fmT$uSpP1dp%srf1?h9s%k8hiI%t8BRz2Urku`Tg zNBaV__^hwQgPz;ekTyDEboqvh#7C5gg{@fDel(8anMq!I_c~%ss2-tnKX^o7({<4y zKG$)=60Fd2k+I9UXhXtjJlWu5XR`7Lp+MgdzBwemY(2|9GYo#;T^v#1C;js=a7`c+ zJ~|)SSA6!UK%unF|AGEqCyZ87EkQLW2q+fdYG)3|^LPj<|20M=VYOmsJotC1=Af@*kQprh8jRf8!JE8AVh zP=}{6TO%cPONyN|g23413ylavDu-H@>X{%73i#Kj8VnGr?guAww~{KFI^M^LQ;_9c zEv>~5{W0)rrGg`#F$75z`N~9zdW>B(frRQ}Hy^dcn|rle+TQ?9ngU#t>9uj){8@88 zSj(9{{C>*5s-0e%MyIcd>23PhRC<@K#*Mq4-?ynwIn_O(n_JwcPlL;t3Bjeb?&HB4 zps0^}*4JXXSjpB+5?3k9lO@%ml$T%(HQ+#_PgsH_Zp7bXCCJ!QYbymf5T@$0|;eDW99q zfbmxC zOZMtf-e)avs^RQWRM8~uCqV+TO9=G{Z1NSu+^ZBEnew5%9@-vQQXb~UCG8(~1$SSk zSFR#sxq`ok#2Aa5ygzY!1U27$dC@G( z%_O`3B~)H4pAtGpq9>@VI&*}y=Ch=gR(kZdX2UOMgyoA>_bjcomV4y~9PP%6hVHWh zTaW2xnqGCS@)s;Ao27i!s;!Wc#d7Rsl585qPI3K_rAT&li;alI5nDVvv>PQu^FH0R zM%5$utCnBS^)uB}uKW0OOS2!9*;G|;o}~hNX8KfNwN5NA8pddRS~C&g$F(&^PfjXf zzeQYnpr71lWh8y;W(ZwLJz-{uFH&&<-PS6DTHW~zFWHZTe+F5Z9)wVYU4;4xo0;8Y z;5l&4$sssauY22tF1B#56-!pad{W`{N^WH&Pa=2U#kn__`&juQL_=e-nHrl3tP}}^ zL0e;{j6x|LKAf+JxKo6~wd1I@TT(eX^4;iHCW4E-7+6?xzU&FiPU-MymWRz0K9>kg zfZ8cBvf!Aar-sB)q2{%)MN#@qUCTM9D8t8s*+~EChC{N=BOCSTcXXc(Hk4MIru)$q z)FhviXbZ*Oy94z(j2?mN^Kx7)0ylF)Mk=PDQEBf|7ZqDom;HvwmG{MsdolU{?u0OO zsrVaUxA^`NI@x*pWEj0(QGinTVB~HPF3zP+!<|c#HegviCbCQDl>q#-KYq4M6vGH# zH=O>oW*B9fc}?&sJ6#)oTYs)AqwY3zh(Y!=YXEr?LiWQ7$krQtPeLf%8@ zrxdCSq^ZQ`vdk_fQ$33abr17TbsmyB>pT1;scv2_Bo$sEzvun^LN?Szf4yDQrqJrUjsv2-#n4Yz;hvmfXYoDMtn;%5O>Z%(xQkCw$fo#A~o|J z$7i3%LJXkNRp203^ItZY?)X{g)^0-*3!~UUjqaOfq>*pz9pj{Waw$axCB#Z*s=kw? z?{`~RX5z(-2wc&cYa@VP4WF^<~e2ul|Q|YU=yzp;{SuN`3Rh*=qXkYgUURiaCzZkT` zwkWepHtazx_A)l*S94)?&S>l@Nb!f{BcZl438?Zijgaiw8Qrw-NU{J=Qd_XikbH9A%RgQc_W^nehf{r?2|kQHwX!-~~Kdp@aIzvmCbT94El8V{Y`7rDvwjjx1@-p$dK( z(mV8IE2Dr2p$KC#n>3C@qVu5Wqg6nUzx?Jr_@lON^Q|oAZ|+OI@-Y-s%KJU}#u}&f z)FNkFvSZGrnLE(LXr1ZEmoZK$i}u8;RNN^?c20I|Jrt)b&X*IEKeL)gC%krv^XhzR z7T5dih>buRvL}@N*)v)07J><)-ResWSGq^LJr>kVj@P^khrM2(y@DuG&B$se#vqe=O$ypPUmHB{>UfQH==K`J~YKPGsrAGi%c_tvc5yr$xOP``l^%d-_dtiJOiikthQ z-GfazNmB7GGy(5Af1d4JUUQsXp(&Zxa^#dq~FeLF*yb;N0z_W^U5 ze8OdG%ydN_7~Uo7i^0RBg9T~_CCxkxypXBaq#&`$;>+LY6 zPd_WFSWxcC_GbYuw$X+wTzPpUrcr+jA=?^J$fu;~A<#~&s^Kt+ml_%?Bz|f$T1_e# zh}9}UO2YSv+I_%2u~tTF?*F!(+ttx{qI2RkYO7T?|0r44CaWp{J?`x2jzROjmZusH z+TY`1`O1Ktctl=}M{{iSdvjestOw5#V+$N7#Qcr$PxWG{R-mK%oEao+vwMv+s^2t6%ZQk>ab^>R zsA<+LIXO7hd-Y72J#9Vy^qhNf%*pOHIQOwu`DgP_<|pG5`LC~4BcXs{#{uona;f0 z*jB^H+dR=B_r)+rhw9E{7b6F>bJ@DMMU&Q`Bci(%CcCypS!iX6(e1=y1Or2yhNJV zi#HzJiu{Jo#&B8q{M?PN(r^+&bjou^S{+h`_$V%m*%mr~x$fkdZLW?P9ZG&^p;u+) ztxy^>Iv+PIeg(bV6|ZM3owVkKEw#Ws=+p0&elHerFKw-d4eFn;(h@^_isI9qf66<- zD_XC?8j^yL+*s1$jcDfTg(^35P(2W*;d8=5$k&uk-Wk}=`Fh4eCkzTXJlAGpp-c=o z->o#NZ6`lOLS#_MORuLJxlV0+A@uRsZUmQsTulOjAuOwvZ3IuqJxh*bNU{A|H+}H7 zWihtC^ez&ksKhN%xkl5P`RKIt13{-eSQ-M$-HOP-#}JzdAnzmnDNYrOx=Y_{ewig)+G{5txY}#{q1q`|){#P$4j~V0 zzz9HwglIWZT0JbwNt5^WBqqu}8=ng7dot1bb(PUhjm1IhxNSdIQhi^}zjeIY%{y)~ zQJg*0tYm*&x0TjJ&Wv!EO0hcN+te1UiHZvb<3Xu6A|IdVmPTx6kH>^IQ=>n&U@ z{T8l%3s6HsK*K`4gMfzo6RrjzP)L{r-=QiPI1qneMq^Y8h|jBqL>7`)RIcm&K`LPA z_;pLz-YG#p@dBNU5$x-+IYE$DwCNp=(l%-7q1{u_56SGq zR`|ZFQfCJjP!XNPo(iT7IsdGvh6bn_UEjCUMQ|{t&?=xrQLLE?)F63E^FXhnTv3sv z7RgAu_8S002F52k30?;YpBHKPAFEKU+doL&SU7*J-(xT#%c0JBkYH=@ZBVpsC%33o z%bS4lXqt9=!r`xZ*dG>PViICNi-?_YXWa2H6zn2}ahxQqSsvoBN0hb$D_TDkgq~tl z!A_9z51$K?DY}UTp|ysAlR~x3I-n72Ex8MoynA~??ZomX1(SgNRj>~Y0aT!E@++zT zF~M`m(2J3q%V{G_Ezj1U*-IAn^<*dZ7kz8 zzBG4qX!ohmxEo6GgI;<@xL}tN)f+9TogPJle47FDF?N8rax|sOkfrw)g7U8avuvPg z>Q}m+eVEx{(~^Enm$A>A#8=6W0vbMTeL*Xbq%AP;zn=5Y>vndGP>*jU?#_GeBm z>IKhl53$fd*o!*7AA8ZYoNDm;?7+0NF@^=d|Enu#<%?rQ=S7cO7>+;h0chFrd0Q(? zmeD9@{QaEP8Om^&FzqDdhz=6{J83tBAgXuS-bU-G+!Ho7dAB|6D)vpHdag+^)s7yz z`T;S0N6#QWCh%5Fdzmr&Zi#?7S)=hs*OTLV-(5R#wmtf&ede#5&B8&#_9DH67J+3^ z3C^*Qp9ZPTjPgIWdnh>N(X#&P?NAQtw9+(`iJ)W&Zo2udZ%R_z0f2eCOG``>slhn* zU?Xy_8#^*hC5(V_@@~(I<#?VNEk2HxZL_M*x`qQned(DWyE$N<*s(f>o{hBoxAFRh zd`N!-LV$C<3EL@_qcDc7u@K-gO0wg&lw)PChpi8 zBdP#ux(X@M90>5r$lM23QB{BZNUoHZuli(8vSuu^w|=)#I;3ocx0O}ZqEFhY;NmzI zfU~SS&R|F@M!L_-?dp5D5yS7$SE@7Wqcvf81O3^ze7_k+6)zwrfUB9?Vv-0Al`~u{ zbPrBbvanYVF-LD)ordh`Y?cT1Lb(*K_ssE>Y*yJ5 zF1a#dz3mclUc+yo;411z8H?CE!g-bUqh%{Bf@?%|sc5^*p3Br&w!mFHgGu-y&;vFc z@u2^N$4%%nW1lWOtp6guuQf29351RfE1^SF#ss9U3Wtw7Y?HLrw4AcWi;SdFc~Q8+ z<|f;mqh$hn9$J2gH;6&pZ{}7GMqqF^73<S$wTv`CEhAP}4IM+v>Hw%WNJE|y)$Exs3<%o$NqW*HW#T$*kxJzON53PDfA zPIg`A&@`NHd1W|f)!~XT8jdD&3XT!~FnzJq5)NLw7w|&DVQJ#uVPNnXjj$z0Szlo2 zQ5u@j1|QzWkPcx;4NZZo+8m-g>SktxI^XE)5uH$F?biJFcV*Cy{m=&s(T137+bpjN z=ob#w_o4_L)-aQdnCyz~gR5(k_h84-s!5DgFHa#Oa9Q! zM=SNeM4v650&2i_$IDt*4;ghQh@SSITWo|}?LU=4+;Fg`>0_4|eeV%eA=5izVgc_b zK|HM)LOj>#GrK_Ti7sle)O#tSxMC8rW#rgF#+60rg9D2NUn9Y*>h)isdaBSi>Y0)h z(>8#JMXkDgMV9GID1+jJV)LI{(q0X>Z2pk^D+9((U~4z=&7V)zOi~$O-h6unhML~p zpm*#in^i3+cM&_}QgSDg_V!de>W;<9^^p8UbDRS|ul{WLuBX?KV++w;_}dQbQLev~ zb`N+^TAV}7=nnVdPJ6Ms-Ke@Kr$dU#EF89m1P2Bi=@*K&qkN=!WH*@;L?exG-efk4 zzP{IzW~^GaQD!9*t1ylvN?HBEwNl}`@YPWJ*k2xTEYbEhIkesCg|fMDx~gjisWr^y zDpbM1-l3fZKPVHI54&c3iFC1@ifu1L(r6Ieg=8RYe`aeej*V($`-#xb z(X}b|vxRUYI1ouZK#GZYRXb{H1_o|%ePNzp*{bBxj2QaG2*sQdw}11i&D-TH>C|-KiMYm(=wgMb3T~{rB;)XqZO9l!$2NC6V+(`E}m# z%Xife1<$4nddv0J)h{eI)h80oHaRnV^2?nOdQ>6+ebDcjH2zbm?`D^YDKj|&nl^N$NYe6X*SW6&lJ3Mc)E^e>aZ zLL{d#7os+an<_ZL5kIf9F7soMkMGFL0tD3*&FD9YnsaUSb=3kSgi9Kw-@x=jgIZ}Q z-Xcs!@Ub^tkMJ5!&2#RpLkfjnHMQ3UFEj@u*B}PwJs}ew(RTQ#lf47NBcT(C%Zb6- z{ir`)0#p-MZ=3krZ6!R1;A&$iCYcitAJZ9*I2k-V!HU7pKJ*WF^j=Lba@1WS&$9Ew zNV*A0>>OHml`#+Nyf#^>$P6384*^ry8HHgk0c|bYi1jg5F8muikPXCAPiB#6Yy2r~ z5N%FqeSKS%Ua>?gE4U{^!*J)moj#uvZoe4~P-Pn4gCe6lf=oHFZ7b-JP?rC7%79?I zUbO0yzh&P&)GdEjIk~FH>du#0B~t0;I2jcQurwu@rFccthjPXDa9~c4ENfDEg1FuG z0-uC-xYaOFjK4+6BQSmEwb^_C83z-9db+KsHb9xtKtXhN8Iz_rc+C1CUjC}4*j7f)9#U%gAoe!I7pG)1CwolJXq)2V+8 zzqad)5Si=MUN^$pJ?}|sYUc|($l9HeBNRW}U*(++zP@;blDjEmxN;2seXBu=I`=_` z$_1G{zJAkDPk@yHbaGWLq_T~BVgX6{>|ln#M~E+41i)-&@VRXiA$0U~WOa>J<3FtM z!8a9o2_7J4N12wBK4_MkgKvJQdLrw6A(H6HX41J}r%z4r>lE}wM(qo^h+=b>Dna8Q z;?A`aj64LY))tOE8#~lhC7X9m_YpeOx_}E-W4_@yfYo?r8Ux!BdN-REi<3&{^9cgk zn!_o&<1#uwjk%F8V`=n@GJMr^BeV06YT+hInxpH80mv8Om zrkj6^Gia05=##k^SY|uis~G6jZ-E#x@aF21=F;3TS_bGsioR}2 zBVmige%1DOph3LDH3;KaGBf`OU8|z-^ZX2=veE(DzvyR}YWK>a-zfCWL{x8Kxxa$_VHm< z5+{^nbtAL)h&_SwUY2x;eoE$|rVIKv5MJ3`!U2PBn{g0bpk-#LnSm0+_QHT;F{j;Y zWHb}bgrW@ZCbkFihYoQvy%ky0yEw|?%ytm(v$q@YdOL0KJKGIq`#~>P3fJ#c9Lsnn zn$yW9ynB0tjg*1u`KeeT@=iic2uJ*TM3SfF>yPCNH1TEu?TLg0kfkh-%T(~uiRr0% z{AdcruD-iumCSjjW3d-ASgbnr`arKCh`RG?$l*B{$AF1Kg~t1oruH^XN!$|*_xK#O zlxbOoR9?CQU+?fDT7tQv62Eaz_p2&%x#R$jdYYzcQd*(vyU{T340Uf4Md?bA|J<{Z3!VA})sXW!awdh%Idx+W1mnWI4eLbSZu&22f0Y z4Mf5l>VjJwWM6}Sdr~FYxyKX05p>*OEc}{GI_JHoR)Y0Tl^uL310H&hX`7f>JIK}p zre8=9`!*`D#so06i!S&LG!|im>mf2#ZGy)gVFfE0dBuO3O91oIgNHAuDyEoq<{ax9 zJ#ewCf)C#7ER61yBxSLEblNAS=94DrBJsayuCpT&eTHZd{M&Cgb*7+es}DZfA5t>FS|_?xYu;Vpj2LOOahkJ&tB>ancx=!^-6; zJ*FO*5p}01kqG1tioRDk!}%!vxw|&JOlxYd1AcAX%V02BQ0j+YDeV0Oqea6(^908~imm?}eJQdBoX8nnBR+^IDbTNeYW${R*- zn3|Sgb{aTYPAyn*+~OlNWZirFhz{&sS$WW+A%jif^B1o5aEGYtB2i8QQw5t|&_;(gQoK%}{Sz^ioMza-#p5ryW(8KzgNSa#hP;M&%Gv>#Es^az z9XdCA>>$N5+Mhkqtw-pK2||gHP5IXW@v&qm375&1&b=ki>|HV2lurg%P&1@dlHE9!2|{_IU|$Y-lZ)WmE3C`Rbf3;`kCE9`mJ9JGa+ zjiMved9*%4-kIMJ<1_?wD6w$QxEk_wtn6$bm^+VezUUd|^*-A`dI%mDZGP-pt_eRJ z3sA!(exATjL?m18N1OJ}XuLIkj%6`fHh+7vh{;5@%gX%p!Muw8+A8Vrz0$jPwOqCQ z3ZBl_UkDqOzQS7G-sGiITEp?Cx$oq3U_17KInqMI063a>>)X#B6CA?&kP}0Ogy;T< z^7p9_q475JW~nLf7?7-q^>i7vdtqxX(Fz30>`h4-wAt4NR>x(Hr?e-|URT?3Deix^ z^m(k1&QqDuiW8PpBta3g@dZ14a6}W`6 zhL9BicveG_W6(J%Ylq%@nH<}=FbhZ7IZz7X^LmDP=4Z*l+G#W>V(Sa$JXA(*UJK`? zzON{#nd)Q2AJ+;97^WIMbZWAi6~K{;Kon)6!&;XYtkv3&cEJsY!*Y?A*M`e+?g7*1 z{ucx8_2$Y4dOp7@Tb8rS7_@N2PDMBn<+NQ^s&gvn(_(I*G10EHq$%e|4~50=P<5h} z7tyfIX56kLH=u6`QegI|3(-UI?1?IrP;7r-4U3TVEy<{wgi`HR@4;tpgS8`TToHsa4VUwObaCC$Z~*UiS-o3jmDLj#OGreo zyLuQP zTwLg7$fS$LsWeNMsp5TiH~Bk90GtGfpgI zw9UO2@}0dTt*f}%PmTiK?&;FL6Yy>V^U;2AV$ea3HyPk)-7L&`Sbo`3?hTPJys(;J z6+~gzN@!Q!K4|X~na3{9EzOVOt26Dufcb15LR6W-&W+l~zv%hQ!^KQp@lM@wKs3UNP~ zig`T@xG(7-^ofWi0LRGDe?MHB0-IwFacooaC_zPXGCdPh5Vs$TSI%~2S{L?Bu z@P}a6F-JBK?zzU9YN3x);zY3?5#eVkwz1SRuMR?BB(lnlRlR31k+`wSUya!}ausG; zZ)`NHIHR-^2~vLWyMm-_u9P*;hhDrhMfz%1e6J-*yuFxOPjv6#*}%;Yra&^P*4$_; zsrx*7Inc_Bq0XfH!GCiQTMcT}a6hIyKOr@IE_nXt3ZRA<;jIh@l>_ROpx!0}5H5M` zMOduib7C!PAOI~>_MSwNL<4XUp6V~Fd^&G45=RAEWGNCJ!PS%pH2cMVh;wAI4bbt!AU3!K*~Uc9fgJws(BX8w(qPV^8%9Po2V-Wi1QQ@EQ-gZi|r_Fy8HR$s>JB<&W*$1Y+VXqk~Bf6wQvwgoW z!hfDZL^F{i2$>h-If`7P>u|RL!rQ}~!)#(tthM%|73UU#2Av9nNOTpH zzdp`j%doexj(VH;mtb^jCaWzcCp~=T^8aRwoU7(aJDgeIxu2{On5}@>h31(#-omR) zP)sGx$m#z~J7Or1m{~-w0MzwOqOM7plQ*$P;FEt#rfp<0MnTH)rRk&6qQ;8FR=8(z zw5M0pM;n5ORA_M;4T?5O)j>y(9g)dM43aG56_y&HP*&{UbmxE0;kuwguAxd`>q{T^ z@SH%J>(gJ>vaa3m68Jt`iIH0)Kq zs;ihJF2N$86;~ZHH8uuK_`Fc08mE&U~2^m8`%d6`zX!7Y#d@a3Ty?P)X z%ZX{YrrYz`8?u(MX?T2fmUWKxD-NG>pB4+$>Ur2^;Y50iqVg>by`3GMuWfmO<_<#jGU*L-4&@#M!B2U6R0mtzU)7Kt#zz3vg^jGHQ$Q<(o!}Np%7t0u z{tO(S*i9?<3;?hp{?yu0K3&~|0HUd#{yuzH{X|H{o3bUm{ZcA##W)6==N0~QC)DO7 zBQ1)?yK_iCc;L%d;kh})F;?P4ON5yQ%{CnoI84<(ab*azxFp8glF3rlZIDSeI+xHf zQGbrqCMLGz{wdNEOEb6hcrr!Nje3`)O`6Iui>)Mg=tt|&F7?EI-tYS|L?%F-AxHmR zhd*4jF-pmuh1>>TI9!f^X>p-BpBn}bC@J&R9xdi!Bfv{T@$znLEshDsnRBs>oagmg zbT$ONFI$#t0({D3vpgo${}{L5aYyjHKoaZw7Ac-lFIZAL2{c8W=VO}N&~Hb6haDT_ z2t?$H=U0?#=1+v89%;Xb5q(tWTi$g0#631c{e!60T=a0Aa*x0;mnO#rbm4hqos`?i1 zZpf`U-yvxjd&UFO7;%u{a*L~p_BFjqq!&m6;P(V?n5Z%e^sWqvaVSfc&1+R(iS<8J zO``>q;W5wqrBSEDK0jbYd^g>F@z&xSjg}870bO-!k20DPzOB^o zg9*Iuwieetc_}Vxo_CX|BdAGVnTjkdB^LU#ZyQk!cMz)jhyeW zq%g`^zW8OJ(MU$d57s+e{o4)m!FRu3^&{q`3UoZOTjJ&COT%V?EPebx+UfL#&$VOp z>n7{vo!pC+hFcjdV0C(b#@o6#JR|~xmfSxIwwh<}^*VCZu0G+*4v5b*C25oPG6-#ql`yrX5bfy197j+H8GGjo@ml^5q z@9{H6Vw0iDnAC_88M+{6YhpJi9KkcItf{i68FswV6jJuy;bG;W*r>hUjx+3gc=u6( z-nou>{?u&afB+72Q%lBEM-4Cq#u|s7CuQdn7gK!Rkh%-KBl5i&6^+=5VF}_nAo-)u z=KD+-B3|#Xp6NZUqY&j^q-Qq<#Kru5z4rHneo$M|#2+)8dX{hUx;Nkii_JQMiklH` zCdC3|nMIp=bMBJJ^@F`;OyTi|u_u&HMPFwE&!eWuO~M>&pp(?r_|9dM%b%0wkBcN0 z^&;Q5kFme)YlC_q8&oSTIq`NTHIs-z&&S?0QQz}{R-Qj_H4kgA)x3Xd@%;m}pz*vE zQo|}`65g0~8zMGv>h#&Ww2W}-b#(a$Q=|htud?2JQ^ijz77U6J;M}CezvQG<8zbNl zA-c`y_5EqEx^Z3PZGi`u^!*2R@d_K3Ay9$lad1ARhaRGPKdXACI?Cq+^%UTego{5M zn%QDNd2t^wcs`5i#_guZgq_fcJ$I3**!nYc4Y(0#@ZKa``z#ELWRq?8Fp(ynH@EV z#dYxnExBF;)F1PMCs`hp+%<&n-cqHP(jWe15qkvQCP>yWyl>fX${RbSB3{&!HOYhebpe08r1U(`CC@!s;lHUm1VL5qw!``clz35$QAQ#M_Pt2e{ ziEMx#3DFeJeg0E!?rBiLBN%qz+u23N)gbr5P$|toc4D97$S+uNkYutg7i?&9`U-Uo zuuTLfjM5CurravQbTXR6s5_(4!KtN{7Y%>#_yy?OEHZQq%dt9jH6Xu zcmHaz8_IoQqS__Y9ygGwA05k0l9rP;kO%E_QC(Lt{60ELCk2V&k}ZBUI=P+q=~JG4=qlW<1;W##gUUf#Q(?+06>iQ4bgzcd?1rz^lo0)E(AAUl z0W=R9bXafGuQ?$v%@kL|7!N7%UqMAv!G~X>CLQ7vh~Wlx8fD(z8;M9EZXGi|md7MD z{iRNDK~#ncn|eRCOjBZ8o{73og_2gyFdl?7_9Ufy_9QtT6k=7)ZJKwSplp-Q5u3mQ zf;FP0c+5rBUt=4!212wZf2?2|P>n}H3BBx4JC>%$a`Qx7+vX*x>@rF4tQqsioh({q zbu>HF8=^ve;|#oHRqMTAXvOgh$=_PB~4QTNf+^{XO}&leLz)oWKz%1Llw4B=wKbcTBbk zhGhh;7P*pw&*@ss744vn6GLdT0fthJvLGq)c`YN^0Z96HUF0b|sALq!o`yh-K2A?8 zjmtLgW#2tkli&+n(MDm+s;HAJ&_-H97ly(q!sb&)Yz0*to4yBdJ}0<^X}*VH^)-5d-v$>$-^Wxyk>WEurx?sUz|`O8M5qpN-+yqRaax! z3!3S$_aJdy&esBcU1)!wGFhmb3h-{`Iy19Snih~NrkKL`e=&`gQWQ3uMm#IWaZpX1 z4E6iHpI@D7{@UH${Yk4hVtD2FvBOe}dwI*A>yn=4>1(0H#Ke~$)bdqWbLH}h(n`G; zZur!9rYc=sTu6FSf`g?rHA(G*ge0ENKUNb;;hr3JZ)|w2f!+xZgp0^a`ce-bO zb8zO*_V6W9B$KS$HMqVtZ6r_MSAS=txWR1H;wmPgS@`c;f$PhPo2EuYSJP^!>zKQA z&YxsCMcy`^o%XI}nHlHN#~WqR58c_=+!VE1%`GZbul$&W??p1raaWwP$$XRUx5!;= z$i)eUjXkGP-THeK`tejWU>Wg-yx?m8kYTz+EP2IRc6j5{3cAo=;mrZ#zQR?KlH0{T znZ-QWhR6n2SmULbuZwhLH*;<(3-_*<$V=~*pW`3J^qy(H(M;;qy@dbHCUxC($z&6dR7CGUr!sh}am1-)`P-z)?oMMs*drZrvGvNp@Wlvr4(QokBPH zOFK6fPbe-$FT9?$!y`YDDwnJQ(^+aB{yu#izG}g(9{U=`;xKGfBGU2)Z=IRhiInOOQ zZKo;tHBr?nLwS}WRlVwF{|C-TaWPIv?2b*8iN{25$tc{ffNgVa@^5LU9wXWuDdv)> zPz>s=y!Y20{^Ienw(4rf*^>9#eQPSl6KgUzi0dy((Psly8GjXT%lt~K-32$~(RMu3 zUisEZo2}#Bk2I614d+W&@AVe%EIn1<$%?rDi-hE(miDyx!mjzco~_zQGGmY&p>y%K z>1Vk;xXM9c7p$xrY%Luv%2Z$H8}fdLxjrdgmr-L%ddwm9b6mgYAese=ubJcOr#;GB zQ@+~QnIK+joJ0c z(~cQ>x3MX8G4}U3<*=!b)laFIC-=FUoWBFICoTk^7j+PstMZt+b<6~1mtaWj<(6YoliJDHmj^Xq6>f zo=OvhMTkd|4Es@g{`~y>veu(VkMwzhO2hd%FfcH#^i)*?2acnYQvNkdV$W+@phob{BvDn|!J8y(I*9;!xSEG%i$hoPfth6opx+ z7-0$DNzr|1l55IVOa&^#&Z#7mZ6D!G)_c#Y$hO&Z1dE00| zhesW2zK-e{wl^O?|KX2(DGaj6dYehM zXV0<*f?#ziXDIeATO;}4LHqmrV_tF_w1l8pT5g(ti(B~Yib26;*f#&g(=h~JJ`4| zB48VbQUH^aHcmxFC4hwMB0yr9czgE-!j3%(=FAIibdsO|l*RkO;`Epv%TP>@o3l0i z3r=~a!b`N4ofej)=2uZ|*J+0SD#m)8QqcLH6f%b#@qa6bo{GanNSc>QpB(B47snFxa zRpl~xjFD%DYvtwT_%zRZH$oKKIl#QkO-qwSutu7p{HRgVi$4oWPEIDybd#129dIkQ z7|dMJdw}QTh+JBN@6ObcH!`uXjN{*p(5i%^t%m(^!VUdBi{g_@~=w7kSM7 zx@u%to*_fVBer%76dmwV*jQQRpu3uqp+0=z0^XN|YzT~@tjv99iot)hSdmIZfGO#3X+Z&Uaq-RY8PaJ1 z0T+An>IBYv_10(Q2JEkWN}_AD&l?>zi55nMC|i~50t$8gd-wiv(k?r ziHeo8pYk#>g$VKAofHP%1cF3J6)KJ@+tsGkmdOHf1K!<}lx z&zJqf!%$9)5-%U0i|z3esxkB5yEX0&HePSvp6*O@3kZ-1SyJ{}EwnTozskoUJSmrs zCi4aLlh5m5S-nI_^^0KI&Dl`{wz>6U&f9kl@BU1?_zu;Yf6_u*_(OtGZ)w3T2R~R2 z6!mw$Jo(LK&=OI+V@x*JXrF9NmWe{pW>{l0kAUZ1HYsKa8GP|D-%mXK`}g-m8L{u+ z@bK{D6+L<`~hGI^eZgSCcwJpmNq_M|=$m3L>D*|5;HAUNK|NwSwIKNPcI7 z?exrRV`JlrMg?SNfpuX42Enr+6ukzU(1*3Pwcck3D}Q&UKfv=qZ6hTm)%j#d!nO|; zW2;o1Vu}+bz1}$sib7#B@jke@IWzN~;S>FVu=`x}5y!Ru1-UnW2Z9209Sm ze?Cjq^9*~kd`u>WoY!uqru=oai2|?h*#UT77G`Gc=1>mpcD}E-H?n-*GpfU2n zwn+QC7WbW=ROu(-iVB$mSd7pZ!&D9(tuzfDX{ zMRzo)w@Q@!Th$jy%u?s*=j%H%p~Dy+_wZR*KoDo4cW3oz*bhWOxU^egCLUePs$S*8R;XP7bNG)Jcfzs6N9N<{z*TFXcRc!TNr>2e}i)LLu z^wRD$PV~M9I$S)>MwVlngiPE9F%Edv-`_jjLnp3>mfL4neplx@ zId9DS7ry%VlD6E>wXv1os)k>)!&746(mjl4p)>tIY;A4#=RY$J1SVslcf9x>YF_Cn zML4+16rh-ge|405YxlL+WUVK5UOYO-m7JuVa>Tgpbn&fCMlFPg&uv@(K?o*AW6+!E zFY^IIsqQ9E>9l3$dRUOAZUI)M9v-vY_@=}M4N^1DdYM1@y z*En~*^%bdzs^YS>LtWu9VNVSM)R)A3cD2 zhJ9sBE<4#yI)G*``PP1~`l)#OVu z_LtB9Of)$fx?v6L>*3<{sE}-;r|LD@ooB!FAZML=kyu>k{ltXCU`vf+wb*Qh#ah8nMDXJ%P7;#A+LdvBeryb68% z`o`sc|KG;T>5H4S^WT4m9pD*l#!@o+?)HPSty)v?=mgb2c*aRDGusCH`-63i(z$Kh zC{Q$Ju*nYk(8^sn))qXM1WyDZg0T;uk+GbDHcwzu(-@e#y|)*K7BarIW#s!*r*@Oy zVj#hl%g5V0KROsKFItL)BayiB2_GL(urF+ZDC<*0gEDmv)QK_3A?zGW|B^4B?R zcy3{D^6A!3csUrFe9|{vX8MA&v z;Gvc5Ew*0v#8SD>K06PWPA6U?+>^n~~jD`8g0;(?o=b%bzt^_5)Bbr1Xo+ zb++8JCtOykz1Cu%@Z9To3hFEdV+Fwalz&hY6(;@)+4)K&k$wFNzrC@UMj2q2m6c7G z_V8$|8eXPg4Ux;w&nM3$B_RQHEbfc?E56shfj{wyjZm*HUS)kum*i}t15C1)`&Xw( zjGFP%Zn2(@j*hA-p#rs%ao1slKZ6ZAP#HQnbQ^3Y3#1`j-O`U(SW4cW?(y~;)nOv& z?*7bWd@ras$dN2NLHo^{A%wOCp})ig4pCo>f1q(hvEw1>?O0On6$2gJ^2zTxTt123 zt_d9UcdV?e5wWobZN9=D9pn#iiRAGqg5mcOM$;Uy(CV{zE6RRu0I6Eswu7`-EZZVO z6qE;zR3eX$j~(02!_ISfF)5jnX!wY3kv%;!<1IFZ6rRt64)Iqhw9zv^Tw(N04j^YH za6-v7PzYZd85zmQ$T&IGuu3p;bMJRW5(8xLz=|$Iq35Te)w|K9*Jif1a{#M$QMx$T zr-x?d69m6(M?-dY*3vOqJwQXFFKKEzUG0wky}OG!BF>i)^Bqxxi7=8Zw3)8TIlfdJ zkRBumed)AHEI^=jc6rG!E+r|6GM^7tBQ}aag2E)_nLsN5OeO*rZH9u5P ziiC}xjh2?yx1RzV1^cOykB`WGO1a|1!!u~=Dm3QXqoa#Zol=Sd6)e@VjV``iO91^B zxMO57ld3h{qGr-Bn%?R@X&G-ZbZ$ka+9@vDjYOHP>`=sX4 zugfOL#j282vvc;uGuBezk`Tzo^tNLmq zpeFuxAEd+?5(kJ43Hkt?K#Z)g-Am-SQ&4mml7QmjKgz>L)CYJDgP`DFK&34yFOBghe9n85DOLdjJ0YtJ5iGHZHEAp`j`3S3Qh6d0~L49iE&lezJ_md+T8N zt<^wl+EJeAQ?J|=w^ZLYBDv={(vf2B{;^j;1mwVIIv`-c(1gu8tt;ZP{ z8HH0)tr%DUz+LGKUz@9`;SpU(=^Gw)?1~`d$YHnaO`ylApe7-i_++Wfbp(*J;*|#} zAU-PIx3h(|_-wQf$^E;!hbq4o6T!7DKpB3u(kAU+p;=@X(9~je7!3eXP!LK3tjNl5 zWUh-TdUjT~DhEPHnn{#FO-;QBzxC7Z`S2<&!4esQb(Q4j=eIeKk(`>^vnU(uLg1N~ zJyoe^+Et{|>TR{!70K}_J|2HQ zM=>kEAF#-YU|e7W>nHeA+ zt;wyV1|+J15+STjL9{TKtZb9bWE8FEQxTD#o*o7&eh8**2X-33yxl6Cy7j$7Lt(P* zk82_qTi;geHN`2}CMBBr-=GyZJG5mSe0Z;LetvF6-Wyq^joC~3&RUKP^a0hZ@AOfn z2|u;!9hdxnO_W7Yjw}O&5*ZNmfl=XX_tWr!qm>nF@O42pn8`ie-G`>cp}!<|pY4Bj z-JAcMltfh70gWs|7^X+U0~;OtHM*0F=dFanKkfFCD;6AG8)q#}uy=-Z( za|^Kkf!cF@wiaJ|k;JTYY`X@NUSs`~IRIXh&{J$&`r$1BjXjNuiRc1(KP19n#n?*qcrr z*rYElfm8!H*P~B#g5H8PhT8OfNWd0PYW=T$404Sb6Dt6kg&Vf z0`sST4I8{`K!^i6fZy2)z=HKv+u0;B_Fd%shK8zIO0A| z&C1eC<1#q*LS$sd$PONyoPecj2wv?~C`a%FtJ(Gy1QqnE=)Al-7aiNqWLi(cyT0?GziHE19Crwf=!5~<{kpmyS zM^)2cKVFP$f-Br4q@XYu0MxtLO1&qI9AqLZ z9~~W?VGL!`3WnJ@38LIc2V>$^gVi)&)7z3Y~g~c>x9H@cT6`-{~K-74F&jSI3jfF+lrzNwml){EtQ%eg@E&YQG%s9}< zcEer)*~Ig_v89D_k^cK^o@=Jr^Nd`$@$L(==T%o%zQV*Sir`DjEr;KO35tzt2ibl_ zG^ULUbJd{}?ELXVn2(PSNG*Y%1!_5&m|`dC5-Ih6t{RfR zXk+E#nz}rPn5y$@Rq2X-^>H&Bjb!HhE|8bC@hSRL7fZZboW>W-^M2#ev4in_&ufhXh41&dHL1#eR zJ`dF=yuE7%3GAyt%3g=!GMXN6lYD$8UshK3EuI$W&vF?+Z3ggrefpzjxfW0W`qQ`_ z33@Pq+ohNcCnO+P{`r$xf&1TXP{z7;$gR@JYuW=;mi-@}z6}lGZHs7fh>6_-CP@E@ zE<+7`C_l2In%#M+^eQ?fg(PLZ+EDD~HIUN40$96=jfyf+p8(1)BLhRRa_%C)VStu5 zIWE!AD;OE&tzt120zn1%4K!l@&n;6hqh;c#h24K?td|hyOwie6UO|pq(9qCqBIQPB zsj|}Hs(N~WJeL22uB@!gBc#Id%%!q`SaNxJ*=e#21rteBR8(K7r&oL^CI$x|KOPN2 z#sl}>Z$0H%|LnF+gcI@eb224NF%^C%leV;o>=_EZ(%f;!9zWoI{^A8Mj`eiaLk1LK zS4{%N_FkTgX0JnrUyQyQ)Ty<$(_Fq(w6sf&_IfNVEHH|}Ou_{qSa zvh>nSz-6%p8!&4LPS(^}ZlrZ}GnLe5sZ?svH5x$W%gD%(3d1q>58R;Ow>aJ&-yHk! zN1+p+!*Z78G>?q}$d=M}L1b7&L0g@6ZOpJwc&CyZOc!qJ`wQC=h*Y zxVPdjk*f}l6w;TM;U}OFa~YQ>JrsctaZ~!9j>MYsRPP)snjUc%-F+(>|_hVg3475P=6mxjAQ01{1CC zh~=O|IcH~Hy|~E8z{2a3IY-_8K=YdPP$jn{^C*CE=o+jbS^j_y08b?oSS3KI-rq;K z?`UNdQi(9iE6S4*8fv!@JPrv91I+VZ?7s(4i<`ooCnX?*9ga_1ye3}fB4~o(Nyw}< z>5dZhyEss9EQf7Ah@5zEjTE;D%hVAEQjKYqLNsz zC}o$HmX4(K_H}ogw+Gw@z~YX_wrNta1N;D%;q{+>ZoAU%?-KE`*`RTsVRvAjx@`mS zrgP3H6LWU>jaJ7*Lt_Hi4|ewUsw)sE*PZ==d)AxC2$Wu&8IT?z1iBLLXRz`_M1KDK ziQRAZZE$eVe!VwQdk5$mo_q7g81(%7`~m{U08&-3hT8lTZA2+)cGuDNeO8t7=4i>%9ly>*+!dwzM}6Bw}N*L^1%d-8xji(3!o*b&G<#~9G1){ znO)O{@YqijhAZ>GM+?KPR>yhGG$+AjPj`O=3k7qv0KsAYwUsJQbS%}Ay1qYFxmFq# z)G;yH+1WsbACaD(n8@=D{q<8xO)aU5LzF%#_!2v-8Gb7&Y78ebr+My0aQptbHxY!8 zkdVV|w%(eU=<}x5T!U>mok@Qx=gbIzx<4veRrMpbXyj=r6vLy-(Z9}JTopuuTV@_t z;U_q8RsZwp)2CX_`U9#b4o**OM;98b$I(mbcz9pD$f1ShA*89+zC9#|cHJRc*{OEj z1BnNG`u9T9spq5_CCYo4fpXsJupknN4N0WVT*NFdQ>fyb;renKgEEO7h<4CN#|q28 z4=u2cFN%+`DyX5HDl8sA@MI{64~l!ns;5%iM?WEDqu2O}kAOfR(!`(Pqlb48#*brG z6AXb+rN+%|JJ;`o;-))2+aMSw{KRoFCOUfUv>kg=f6jB!8^c%$(73gCktomHl4=x~ z!Lk(+GQKSDlR3ZaAFL)`l@$1$*p)cy)?A@uv1urfcuJ3CUi3RPSflqCVFp(3K#b{f zdte&3;n2VUEF#dAGV;wEfQA2#rSy^pr2t7h24&>MpIkDj{?DKy0>e+(c@+jbx=8#y?Vu|Cv3q!n>vz13wl zEM-A|X7@Chl@54W`N&YZu68^I2c%O4aQ=wihUB4hG5VMZJmj*~`u_)|1!%n43K=|j zGv*SEI5J^i`99>Huvs)hO06qF8H|1)|@9LjgI%p*;v zMq*%H$BW&Nmje~r95@{0FaL$r458-F0Ia6eb8+EoDj)!(0hK>KG7<|1NB@gQrBw#@ zx-6CM%lQUpOwr4{$9sHXb>*x@k@VRHT;EH6( z+YlS4*V@wYF;|_^WBbVLhJm}U4CL2VPbr@o|HIAj@k6^==rPYIOi4G37D0VHcSR-& zTt84Ev8ftqyaejis6`_ANbAlY9z1T-kz1CWIEm1dy6Ei{(`O=%ID^ijx&B^4h)G%< zX?2c{65>94_DpYjS~R0s0c}Mx)4^BbE&yRD@bNH$o+9bIJCWxZN{lRozREhDSoM+pX%!!mRvcs!TUO6%afKhzUH`4A7W-5U;b<0IS*ZUR?e^2^`TBio`Gs2@W zi0tj`CS2OiR-=KPB>2+R)s>3hA_nM3Ks-4PP_Z%*=UHfd3!VIV*_}Wy#pFfo;}~J4 z$@lCQIrV2y60eV8BR(atAEWy0rnB6$dPw)y##(wiZ)3%hFB!%U0MR9&aX|BC{cMQv zzp4h>08k*mT~m>gc3X)2n41GOn?kN=D{w|4NM@THhnu18>uyw-K_ut2fldVwF4eKL(o4g)MW@% z>m+IU0=?H%-;7C9$Y^MW24~gg9+cJoza(^!@n;e^oE$XG50f<)-!W^dvP zSsWb72)GnVgMtXi(QPo>I{VXi$+LC^;OQ%=&V)z`#z()U!GS=z-9zcg3 zK(5M1Vgi@b@ea5j;2mTFC=7(OLInr*%w}V>n|YRdHYr4qV^dSlQS_y#K5NdIS8jutSI|1+(g^jE_&t)|3v7 zSv%Xj-y@F~(k8@A5GWXL;v!S@2jWFe4zA3T^O$`y`z)#_@E?Y$56(SCQ@jDl&;02b zvC0Gs#B&KLj_6$lX_u{mA22LcoRHaxVbIL?=bEZPSyfd95}p%O@xuyb0g`QgS36Qs zPPvs)C&7^5R?>>XCxK%=XCazBN>2d3INp6^d|vqep^w*RpY2+A)$9<~5s5gS8Hv0* z%cu%}IwWv8Wb`}G(To@({6KPLcjK=cchL%^jfs9F;59KSGi>BRmD;t)p&_Nafux3vdx;G!YR|jUiDMolf&WHzME_ zk42F5z!UxuGkTWPpPd|LXa*?RA{wc=9_R-X=d#ncM0GLCO%=)r zFAWeRNxQhzb&(K-TBL_+l>XsRl0@0c%MBsNG&W+W{jU#T3!};7kNSG(Fyx^|u15C^ zPV;>jp`sP_O^-wE`#!mK4p?qq%N3H~21uNBT!@4|1VJmEi1TV!LIT0wl6ik>pV_Zu zxgwcu=vdNE!-GK--Dam10EQmTfBW&nd!ke|=b5KWJxD-FpYXX=x{qMzi`TLyR79C+ z2rAy(i78Gdf*Shz190b`YDCuH+aP{=k)vVoKfGF|fsz|bs}&7Rm!afpb_c6W!~ zRx(?MswiaeJ$muNKnw}czxo{~#!{+guYV(YD=B$(uWNC!4N%o3AWFV@b4P*O080Tg z$7SuIpwa`{SEIlw5dDo(B><)^7BMs6+Uy!Qs$ybdzIBnCurxX#4J5+@{hRah#P95N zdR3nzZnKX-zCaJO3RRqEV`E#j@W2!%^yLUuD_bAuVphyddG}6JSGUEij|h-pfGa`JHLx^i2j8(87#66Bp6=~ERtK=B6-#z%k= zi;9W>Juh&GA+ELi!N+0v)r&9?-B;r9!K?deE6U^T;>`5)_ZdknoIu7v4CJ~%%#E<7 z9ab|P!=MsCi#w+4SQ1x3)kix5rf8Fz|r{g=T8mY z_s9{iUOW5$!hkrEfm?kG3kLL9HFSwMxO0O;2%cYi#v1$U>r9rSj|@c)xk2=$`~)+M z2NfaeR1gY*@@Z)r8?OLtqwPz-4zpq-@Loot^*y*RnRLWfOAo?3KuK8!F&POrETH;w z-Jq4o3?oJ?bM5V(KYy-58D77Pf>CLO<<%ui>qi0rP)&<3k|3&~smW4`r{GlrWoShl zJby`CUSK^jGS%yO5=l+33P%%Uour8QarB+z@C_Y{S|JZ8?f}&V4pAk!e^12=R05Ga zB?X0|HSvP8g2YImM*br|2?qZoKNVQ~BR>^}eXwBFa8!LLWJk_G850~wE9SpF_DE4U zOVCybXwZNFIYF=|^)T<)?~)slzc7=n*7&;N7R#$*3t%L*p3K?;Egoc`;2?@qqLhOz z2G)AW8E?aVXe^AM3I^{(c_Kg@ zQ3OzpNfvHyN06=omaGQbI}ii}o~zYp0ovFK9Z@}3^9rD;E0o|%T3k2dB>&=RthDrw zfNySAQ&Pesnyf;cou7AnB`3pqADaFC{d+(Fk2BqERr3G%9~O>Lnk%kusgEM!xJye* zWQ_jLybQ&g`;eAgo7#yOtxDZ|T>ei+cY+U)(Xc)_IXQXVUZ0Nc@;;Z~f6rqa1QQ-F zQ4Uv}zr&$V7R5hJ*HRH?Gj-j9Xj)+$t-YHAaz zm~y8wCTFSwL-J>E1h${Qo11_MLFD5~g^C<@jfoflt|O|-BfD0%w#ccdqRGSAL&T}H zN&(FpQ6`fcY{vxVU$EFO34(f~4iv!8fpe*xBk~tW1GlH}+wk{>E!0D9xi$-&!0CD#j`uM0#ap4m%Yp{e-2<>0Km)%gF)J$z zR5SyFK}mEhTnau|e&*9BK!pPFy?<`&{^{5M=1o2ObR%J;A0vVGo%}(SpY9B;0Lw$? zzEm)Xf%$>wEGH}VkjJP!oYp_W5l9UUd(&WHm^nJe6Mh3pznUl~18X7-bSsc}$$jRz z_l*{w4Pu9RxVFil%YxkN<{1_P$S=VANkV)Q&S#;~yci*|Di!9JJZ_ot*QwGDC_VABxWeOoY-6U$8(CHy5@k zfEfyS>}uDSqGI4YBG6`z44zX5VcP#vmBWWh(E$|W=;v5h;a9tn%V>3`(R<%;qv?yM zOLMaw0}u1qV;S(hJh4Av3azaC9YM&LZWv+09l`@aM;`qBYfguA^3$@P$@$>4zOq#`iE;*dtTt#6DAd#KbQjr zudCn05HUx!5`^k}y}8)gYEoBI(`|BSby|@O{gCu@0=v4h(%iL5m4kyws^l)%cGmf_ zbC2#q`>PkPBx$qMf5hTKES}x~c@4M;#4Ji?8)s){Ks1y4{m>1`rbCJmat5{d0x-GY z+J9s69X_7N&wdQgL2qroe|6hdt7nao9T5UuyKp36fB?xc5@Srvu2m5L&3lxW9T0G@ zo)^49p8U7rih#MxNJ~4rdM`VGojH*7sK!yP@@wosXj zQ%i&AA=&1UJhjcv%jBmCEI_9OLb<+30ZXJXH!JSi!#zU|C>dGZ=z|{pnH&%!y#jhP z_T<1aP?0u4L>t8NZQKMEHPxQEiQQhgCjX88^^!`DD)c)q`R%Hj@%MKK{pB<0UxWUW zDQwbPlmD5pVy&cqlWsgY9K0ht=;Z0aUB&7!dgZMQ9S+}!_wm?T+4z|AVzj~bwHqQL zL%R0vG5Z)DpGQ2d!45kmXQcbps6Z4>ZEj(~&}H<&*cFIRNCy*d5R{%70d|lI zWIe%u44NbP%BPG9@M07AUqIgmjxD?O?(Xfifh=fD<;WTES)(oDbGp+_0L6}QPM|Qw zJ~MIwDIV8}A%~0OZ7?;17%|JuG^q)Wj<`W*`Fy@R_K7Vs3{1CPEH~L$%10%X1v3!( zfuO-}vPVX*@4vsXOO;(sARYY94ji~502zGS=ugtV96Z*=bQZrWz-TS0GGe&~Vib~t z;_)oJp&{l8I=G{vI$kZEUA*%Itr14nOn5rZ8I5C3GI3N-@Fc=1ao)kxVD$tp*yFvw zRv}4`AdDRUCWW}m7*u^F>O_nM+;(SpMexXg+ZF+|8i0VLTO;5S4BMRGz&Ge!`DSe! zDG1vzWOXyvB$o$PM#Q_1A3uV05GfVa7vFOi150fJhfWvR6$GLde8lZ$0?q=FHF;%a zF`yQM4H>{CEwugeXg*9j5?IdWWVro^1S3r+I|v?nhZP}|OP^f8O2ymz9CR+QDMXr> zlyZbzQV0gZJGr^J<>l;ei3E6fco-Rj5iQ44q#<)PJoD&x#SOSGOxmPTEYujHI4C8T z2f**Zdl<$1du62-bns9c(NZ2&`mi3Ah+29VSJ%YwsIWdX{|%A{3Ho zq_nj0qJtnjE|8edJM#2CwUH^k0#6+qYxRHrPJ#{$nOMkKPE%>7#jB zFI*3Mpzs5q*rGXhXS$ky9(`&uWKN}=NR~}rQL+0?`qMVnGA>hi6w4Jv3<^h!hx3+? zm)m{LdL3Ua`D9t$o|7_ui;?(%d&JY)L^A?O2iz-C55K_HezMI+=#)s9ssQ?h0zDP7 z9o%M6kQ3FshHJ-P|+u(q_<*_UUL%5?2s@ zy)ckoBC5bvlddesO`1U`~CD^N0(qowqn_94*4SF^65lqXZzfpJBrAu4~ zzeNl&Y8xLi-*ImcM7TS8Om@iKwFbF!n@J3_@l2 zW%~IbuhtA%AJn4>*=YUgJVm04@LA_ecrtw zV)))q*BB~Y%ef9#mxX%avLU85#5V>lyjyMCDRqzZ%u#>y*2J+)An~t@2TLZ8$}?> z@B4{J5X8>bFsTm(g5U10oo{!pM;~;^y`um9T8Jn0bFTz@OjQ|c>&JG$0VF*@v2)lS z`vBroR;FWikQ2_vXCO5N1R+}y${7_K8#XePNiaP@O~jlwr^6D$Ldy}#tkP;kvqMf! zl8z=*&Y>hGZjDNjgXM7htGpVdO!yi@CEdAkgdOLb^CRu^wI122{(D=*dZVx#WkK2|kdG3+hj%zJHS5oq$6_+ceP z6g)w30wp_0w259XkoN|Pdyoi~Le9L~bszGsMHj9oQGfUjd`{Jv*rU-%@a*871nzQQGJ76%gGUIPcI9m*(Z){IQ>h#8DLjjoga-ZpYAVl zzZgxGC*}^GAtUQ%Z^D9R$Q0AS6$HdIqbV70CB63e z;M1JUL~G`(5%$J^?I2NLE1!v;imwDiA6YGD4E_JJuxjId@A&b9f{@trbwmv`R^y+E z_w*L&qJsBt9kq-XCORoN1V-?`)l(%RpPIxZ1hd|lzT*Ci$|?zKYtbo_!dZj%kr9VKP3dqefn|C zAi{{KfEu<<1j02?aO%s3fXA5hluZr`l8D%0u&w3{V$4nX@FZvx^aY-9g?4bhv~a}O zBbYI6iyG&MMF;`zjV;%sQfh4E8*R3e)$L)~D~M~~%oT*0{<}m9L4HDrV8qK5n+^wF zIk}+k5;KtK?l;f>g0+`E%@^|xF~X$ihNY?<90DsN%j7H6^YHY1EvF`o`PR60Cb|T{ z2;M$>;U8|;BZ)MXU_rT8DK_-8-gWKIz{KO>ar!;m5YlSp2F`?TN5YLwGTy`K*;FM% z2&VF0h)#$%5S)Low;TETS+)^eaBv24b1(L1$;-auE65>aVfdsp(+GE#@gc4TWV9Up zs+D;+bZUWK)z>(mK^yg9Uk{<-)2C0J{5uebGJGE}r^IE)lF-tOFy)?gm1Y}icfKbE zsg*HJCoJ~XyBSC%??`wn`Miw|6dERyL1jM~(Dj@=JZJ=MGyugRtknPNm6#PlK}`I~ zeon~a$^DL@BKc&3^!1I6!*SA&X{10_umii&qgcE!Kd9+|l*7As?tj+hx2Z~P+985K z*kThB@;Lvq5y2yEO_CjvVywz=6N*;WaSpvx_u}o=uHxe2Je-}4`J3PP9!kHxyvUtj zSnvZno!Ip;@jy`S(E9p12?0TSs_^rWrY28>|Fxu)6yO7#UD{1zn<+V&cwv%{fI!3w z47jZrc+@Hpsyq_`P)R;CE#Qd_^!BPmS5A-QUWRC~tDQ>^BSA&@Dj>u%Jx`aevcsRz6S13sgD3N$xfzMq^ z$s$m|O<{_ID_Q?@C0USE$wMH8FF@))|Mr_4)q;kkByx?mt?0qF6;`hApU9~)+5-P? z?+wX57%gjP?c_G7afaYvGMH=AJ-+LC$+hQDD?6*!r?So#jK$KqVOoRd-N3m5_U&l6 zat2@MoJb}sio1giYO3H1=Q)reC3_a3#xvpI)LW!m%1g&H!J-y6RcL1N&r`Ca=vgz& zbM(FZ-6Y&5B`1gZ1q<0FQUx~ItPSi;?;nP$b+z8beSdt8OQ5n`2a;RJAUD`_@S)aU zlNc=+^$oZvCdJ)T7ysva93T}navvE<#--oe^32Vd+@O3z0y8%897LW89Se=~_L18W zD=$RMvPZtfJzNX22iu_CJVNn*2g0$$I$FV=MS)#FTd4XEBPNZ|Rn44j z@WjeDFW`rRO;A@mlm#R>q6d=9laeX-C5mF06~5Emgr2a67OxvF4~)ONQ7KDuIE*7l z3&#JNAm2b>j|%&q;F?ka1I<~dEFwkX5G}Guidwb^C#O1CVDTfBWF3$crZ%8pcR2_V zyPt77}XnPJ04#?xxRg(rRLfuEnW*t~-naX08Sxe&DD94cTswu2XqAd5{8X0pNvt z{-2u$*=ZULQ4yZ2i0B+WZ^cJ9H3OnQXw#5>(O25#a_8*_*xDo8cR73&mAupll1hB; zZN<6~J!*f+l%IK|VgQb_d^+OhDE|UjBTa5(ka?ven3Q_)P;(32_haRxTa_WJ zMw6T|L5x=WuGG$gij*9gPjsg;t62iwdLe@xlQk$~2A~*#AdNVA{QC?>Zn;;ENui6Y z2gJJDM1Ky6nUXvZJWp6A8SzYvz(2Ca{GWY?ciV3Gux; z{Dw_qfYR?v6ha`DpBe}oW4Xs&QR!S=Yi+UC_?y=!_>jA%{lh`pbWv3&?SQ0Cem&f3 z>A|&RzR$=UK-<%0Q6d@LKR#K8dWui*m41j=Wf4fEbGv&@cl;w*hRY|JgHo$N0OQ30 zxUooc=_7SqdL4lZm^GfyGK(A&^=(uL%;z~xzEpdffM9U-|EDkgeFyl`$iN6intE@>E7J)q1(#^Fo9tVp7D^EF81HrCL_PNppi!!{H)p zx%oMlSa-H`){9bI4Gkd2Ll8jzCFeEi0s)C$KA5yLC`-drQ$iq9`cDpuu`9ertH!tiz_B09Ps1etZ~tpaiBS*T>_Um}0~t54qfV14_R&W#;>L$ETK-RvQq|K-AF6+J3fP zr{0Qix&{PB!6V=i3j9l#O&DrRXXXV`oFhevPeFQu=EW~dfkJT@F);R>vO&H6!yYCH z!o_hmd1n8HKIsTKbLpSoZKrP(`Tp$}W+EB)n+l;(Ep5F~kpvu|HV$~?NIKf|xHb+8 zdOEz(P$QYof1RVYz4<#Dp2(U>@sMLy``^4j$BRz1s#@#uV$clNPmhj(kSo>n6(qOU z*Ubd1Q;nyq4CEB#UFxla1T2Oh@`7HI6bv2Hyy9x_rE+bLFxcGDPSiLtLC zl(B`9U8L+1vWy~22vL%(Ga5^lEFtSCODOwN#MmNBl$17WwiHUTHJ)?odmqRB+|Tn{ z{^~ete43fh^|`L|e4nrPo8=|&7?JU6E(qo6uV0sQ22~x-p1Jv^_0t9!&8b z+SM&Wk39Dxk3zE}ahiv0t8q-_n9xZv^QPNlimL95JCc4OAt7c$KBsU90&S}MgNjO) zkr6&PPcV1aiZ00JtoS(l4cESK3u$nF|DkcSk6bO@(-2qG|Ho0_9#_<5t}b7+_tOV_ z6Nrt^OJgJ&yMg%q_4WOms`Jl4o<+%n4ea`lSz{d4hu9+@m$A!t=E$zgS#Rvl)*b1& zc3SzwlRwBR2wfe27%B(0qu&O~A6bWAW>M;nNXi@Qg%$G%j7S>aH;JXc!=O+-J8;_2_gxTX(~ zz@({#h0KhMl2;+N<@l}s++%zfo1Q#b{`f>iQj)OtbmA-|t1CqWD28yF}ce@+iXS!Vvql>=z#;361vG;U;ts(wj^>0UtC3{MS= z{LzgeE3wO(&B4DG%YQyfw@!sYL8ye{38f#fd0zU|oSBuyDqVAKKd9UiO|j))o<;)a`<8Wcwp+HG&mJ$J{0c+Hg-> zmR%jg!o7HFL#)EyU`RjcFhb~SzclS^9TM%E1dV}{IE0Kb(3xcOGJt0z*5)jdZ_pbrtVYYJMO0uM_2DK!a+3ox6G|8fiK22vy96gWx~qP&qsy^F(aq5}_KrU}^!_9pzbjQnm zQ{YIz#+z1hmtevMj4NK-Ni0!a@SEvj%e>qM_wfdpo&Q@`iY+XLniPCMP_br1&V@w# zJbHx&IDtZg#P(ta6nY4Nmeg>RmmU`yospbez;(8O-_-O4)U>2+ z?lD!kjZFI$CzLiSb&=g5FP0n_qODKOUiCkbZPX(wpta=V7-pREKf(dRJ&e4Y>1buu z`HLQq$l6Wt%L{0P*d#vhp#KvMfmdSI5a=M0CIMJ95U8vGcN3sBm3?PC^94LkF*qyB z>H#leQ|biIqq@$S8Z*FBNCLsH52V5FuID@mE}67alVze|EU|?arT+6+R7ng{tdJsr?KMBojbrN50KlcizLqluP^oX z*k!r%W`iE934R-XI z^6%DSaM*$pBjW(30$PxQ;B_TMMUHD2QL_?>T%-ptQcz$T`U?KPlYfK?DK=}}kkA`` zV6Sz@OK1Wt`#N`+YAre!rI@*dYoZaSz)dZv5hAtwI9kd$s_;CP=UddH+V;@b7#`ef z_wOJW{q4f@TlRQxzITLh#ZBC6VcYE>7~qQE{`BW)td87h z-%Ii40=S03xxg7&-Y16=u|4%~Q9Z#_aAtmwlMwZ|O+PN154A10R_xkuphF|Ke--D2 zPPI02#{S9PIUps4wU2rJ+{l9lHnyApA6ctDzJg;}E zFBzG6mAv06;Y4Ij{GgdR790S*pZV$Fj4W|W{PXQMf)3ZsHs{+`#138Y`K+9_(V?*I z5@wJ5b@2Q73enHB9Wq$$&sUN=*QFq3Xizgm zw00eU6OjHq;kbmp2)tNj?;Ow?5$$i@ycr+Q6OjhYae^iOP*nbTF!DgK5fo@6?1tZW z;8asDcuf)pd7@+N=IE0GkWK<#0!7^9_7KipplFznPUMndO-2{(gIJlBgAHN`smiE@ zg#`@Du^w*mi!dV@Nz2O{hg~sX0(Oe_zE~pAy#*n!hp7Pb{i?tJ%Rswg6Y)4WX_3p}C9eM#QDJCg6nX5RO(j(nCr$@i zf-`+D*rY~b>w0(?QZQ<+!zB8)prm`}->9v(ToWvajd#PV3+cpI~hfGdbos`us{B+0^j7ZkyHU-DW zK0Rd5IYC+KQnX-i65j>fHRIw?ub$`DG#g`Xx${j|uq-9szxY}yjrU&gTczus;D_WV z@h^S-y6OStO4moz`_rPv14;F$VW~oB$RNf}S1-zMXm$D-LL)on>cdckUc<$KV}`t>I&AY%JuUEg|aTQf+H4c)zXG4poBhLDdwLrGKv+!&p&Rpa|Ot5@VLy4yl`B={R@bLx&v~Mz2tcPYaI|IM+ctVF8xN36@*bBm{$4U0vPo@8vM(xk^^Za9i{5X;WsOaeLwS z_T9S#w0z_yzEbJl%6K-;7;5xWO2zJ?qNV|ru*6DU14zH|{-Ct9PTro@3C6OLUW!~n zv3IshD=RA#upRB~L(d$W{OKKD0V4(JJ}{evqo4G=^{?VEBnyHAap8uE*AsBpsE3i& z6CCyQ=-#_dt~$F?qW!?o=}tsMzEu}6R>Pk)z$eobYvDJ=^fJo;&p_Ll@Kbl|lE|^? z9aFaA!NI|zb~CNhPvJxWqww#~cbqsMym1v<>GX)YMJ9f5+9|0$ZkwXIWwrKbnn`+b zlhsDBxm8nR?D4;uz<4LN@UMAsRi!-clB)U{wivk5*8!Drob3eeIt9lw0vr#e0C`h* z&!;He3!uLVA@?cJw#ZC5XFmmRo7L`^m-qFbi(QrHiT6nX{<-s}VOtzqZpLcL`#sw) z=eu}0c>DI12vO7y*E58n=HI`6S24k%6_=2(zPdW;f6f`ww|ZjgXZ{Y|)o!i2Uks$hzcI8revCF#ED{uNB27DpA@{jsK?i3mmqseT8u z?fF#NB3OMt!M6#qfRQhz`t`Eg4|`rAbM|L<98 z@}3eN)$RQfO=3NIcj7ok22ExpwHWCQbXj}xI%ru;>&7!pG9`*QJAZzBD59|RWNP#w zfdRfU-xqfYvz*3O9hdvT_<*nclC#sGb@3&WTyxu86xJ5*9h3I^HU+x`>((}TXK}sZ z>8LCCML!fB|Dl~m@K7B1@K|a{?^QIeOia>x(uWtT)TwU1#fUF{WLJlbkUV}Cl6xkX zWuvi(R0)%80vdN8yZm<$ndSHEn?pdfs$!$!+rGYwU^RhzXOKF0$a?~%+i=)zkiRa_ z@4`et3|QB0ihEHPPI;z5Amwhk!xJtyk#1gCq?WUTIdML*cN-!#oH8tx%%wUNvSwTJ zlYMgpr`!&swL4~C-Q{!PGKI7#o^*$`jr`%!@s*mI^DhRmU-n7I%yM!aLMjb=1jeX6 z%L+Ba`2)%G1+XbE0XL>y{3n70CY03s3Y;dCJiw}62%Di4h@K3Cc55AQ0$q5+;=3g} zV&EQ5;OvgjKo)CcwX9HM@W_V|8bS_x?F8(EtvPcG;W^ZIBcO=)oh!~bUfT~DWs_75 zvF;`nX~WVZ)JI=K-Rczp`62ysppdei%hv);I=+8c9Ho}w-U1d=5fKsD+Tnl@>{$x; zA+QZ-fxJ!9W$~u-hv>3;oCFFD%i%fN=#pQXV7y5DEKJNi?9Cfb+sXzy<_p-sFIX!B zu9({7+`)iDXLG>eMq!`|%6$E&XRzn(lX&U#M6p(eIPQ1h8aNQ#kJsXW zD6?C_Ku^cdqXM-sX-P?KVR|;T{D;qVEl1L;exztgahZRuaZt^^1%F8fi*;v)E09-G zW-x1g)u-jjpm~lnHjL@Vf=GRpwr_-x<5!-`*;nRY?)Mq2>D^G>ol*D8uTxsc{(k08 z$-&NXgC*swca$U~7)JZMUK7j0*2mm-QX$l}@_L&>BI}jO!bA;dZM(GM9fXFb4P$AH zXC56gR%1JOQ=en$G3w~qQ$J9GZkI>fTZgs>2_RNwuVzJFq1z=cY;5Z1EllVz7)M53 z#yMBKw95)G*(^IblD5Sy<${}-lNJXjG$?T*-G>)vhZxtF$AtT>H(1+$r?;OZ*5B8+{qv0zJk0N*!iPGty7;h* z4p-zKMa*Y`FsNcE~KFx{68VGef&rkDiNaut@pXA zexiK~)6-F-30DRu=%MH2;o*VjEcC~K%Eyl%ow=ZEb$A?L-V-egXobRYhNT#%{UX=2 zBP+B#n?=d`wDy!Tel`2+<$;{L+-aQnK%R`$oF$4>uk6Z2Bdp{sJJbRR5aW%0g z(jA(0-W8~1-v%pZn5jfrk&*w>lmD<=uZ_nDP~x`_rk@m{7NBNkv>4WUmrcWNO^= zCRqMkcw)~@SpvJLUN4ic{GNK6(&Rs}1MuaXlx#k0W3Tk}2haGycZXGc$knZ~d%k}q z9;n$%RS?4;;rKh}>L<0U-|SDE=!I{j)>>D?Mf=qvQBh()<&7=E8*`WH8;Ww7{I=w1 zZ~lR}`6KsGE^D9A&!wS`zSk$oi&;Hv^Y4>2z!RK#Rena7%O5zxy-^rE*o4`UDBQ(MWhi>ZO;r1NooafOl3)Q%qcQu~ljjb>FdtEGsi%=0#@ zEw$5yBV|M-`4JL`1s<_ZZ2Dx@xAK9GFRZC>W58Hn>4a76RAGlx+N8C&zrbMijU-kb zZdOI#1@4Bp`OT1VQ6 zl?fWv6K#{`DT3h8FJ*4U~#Uk_<;E|;*%YPrAm}t=Ypu07E8nYH{Hs4@QZH_rLzXF$Avpgs@?oP3|S{7UF4r)$oeTDz}F>&vOv;TxgUjVb8U` z-$-1tC;4?bdw62!huxDF*`}vg6QRHFaLw6?1EfLJ=VsH)+*}Q(oSfW<8$>oqC50Uo z=)>dj-&s%E+VVX138j1X4s-P2!g;A zJyrkA-rSGyhF}@bJl&zZ!Az$-2wvHLaoUMee1=9CEBZ@5p(f?>XsZFtADx!ZU;7&N zJJ65arOg5e5m=;H+~2y#?^iGk^wh%0A+@{EH!~H}15as>H{b6gzP~0ILw_zr{jvvK zJUDKH`$H?@5cY_t>C-rNc^4$Te*+A%Cc7xHsWKe5rOejcOHSJq!`ta7Y1d-ayp^4j z0t+fPjPzS(>t2i$n{LtNmep=P^nPdGh={1x)?FB?G%4KA`(k;Nm$+}VG`Mr4Qi^St z81Y(ZgL}SKS68>CxfzK>g8u(&Wm0#`^}y4Tu9V; zGW;c6F(H}GNXf<4A#aY;!@ z;OvAjiE*#_*>5O5Y%*CtY>uh*i&ME%Yp&o}H^uCSWM!3;k@-tH4I=z`Ol)63-HUZKhgd2fB^6kC%Uj%enqdqa5m!&3 zA2c=bNGidlXucdv-YD5g(emRuVGNgAWUR*c{gj`UpVdTfkl1aH5^A>lv z+=&`8{*cucH=0OjSiLBnbKUqO()d2ZqbauM^*AgpH#ItU2`|ylSL%V1F!24_nlTOgm&8*kawdapl^u$~`4C zzY}Ij3-oJ0UIcYAEgw3G) zK_5lJ#5o04b^T^*aiilw9S>u$iOd!BzY-9Dc#65~h9_ayRKoYqhf2?hp%}n7Er&)$ z+Xj5SRsjn^SRr{*fl)_n#tNo$Ej{Yd%t_A}U9MQ={eCreKNo5y9%aweYnu#ThQ`Lm zhK8t8I^|FL2zCfo|LbKnOq&R_ytK5@?c8u4%<;|Y%$ZqvuW&03;hMs&r96iTCY)*Y zPn-fVUItusO3b1WCRtM4<;S(PNq{hQKAV`piadNV z|DK}KgBu-c{x^`%2XQlBc)t&1PG)AkD+$%MvB`+gX}K2?F#&1>#f-{5*R>EJAubMA zVz7fDmUbdCr7`OKF zqq}LIaR#Q~;lpnbIR`CtMS1zsfj8HnRDx`ZNtN6H_yq%p&vgGH=c)(p|@W`LgU(Z z=%)N(ZXkR;dyNv|1E5CeVfP{7&Z=5hNTnd&1}3Phvy+g9@?aAXxb;cAS{N9jdI+#^ zi8%DB-kVQ~!krVefweS@vVJsP#T?1GGXWFia$g3|V4&FCgQ4XEyeFPO2>Q9WuR2Io z@&;I9e?q!RdO8Yo(5=)@_os6pMy%FImv1|@KWB1zgnF2RZN zn8d_6`2&hW!@-{?Fef4QVi|5a^jj^EtEYpN_c^vLpz1%<13!E6!-{VAh_6SX@6HkAX_(4o^={+=Mb(;G$!5kT&ZieWSilRXl;^6=LTS z40mcjV^uIttCgu--S9?d<*%QAD>Gg@vUJteTSeNtVgY59(d{ODH@^tx#`-x&f+R9; zUeZsN4*CcT`I`NkiyzfXH)-f13W-}s@{jDjSz`4`3<_eHme3rFGqHHgc^Wj-s1Ec*x(ro0a9xTpbS)6c94m)!luL`V~X=Wzeahp+1c6&iy5)l%s8L z+(3iyO!C=#v`r9={S^3{zV8Ry8r=q8!N+SVdzB}JVQ}_7N(1+yuCWn4mVY~~v|K*> z07zhC`LhXc+1Z4%6QBP8xT)P@7aJgib|8F(z#Naq?U=JqL)6lube&+DC1&veeJsP{^fZW!YI< zk4E|6#%95(2-^~8*kk*L&|EB!w~DpXl{#CzY!>?T?j4c{Ilj*h0ih00eqr1kDwFyt z0)>K!noL^M6Zl;Qn}X3?$3H^8K4)p6sLOaC5((F`K$oev?O1RTvyU z{_SlQtzRdt3e5++$t?%&F^+gZ=~R6uv{c+|v%AAagycv2sAVK2B#b^IA#iS9x;4Wf z?UwJSmUO09<@;t|!_J3Up>FZ_MLP)iY|M&C

ZtAdg-JA|8g_!MdjqD_MRHu1)H& zGoCAP+Ok`6p&LMAKYq9^!n*dHl$p5qr)THb63VCu<3XF&SF^oEZ)5a;#vQ{T@ssNZ z`mokvp_RhI`i2IGy{LNj`^Tfk#>QQ8#OlS%Z>f%p@$1-#b_A9~pmv71zf|wQ`L`T; zJ=3)99G(z2QT=$K1R)AbwY=u}m-Ps`A8+KOe(F4shzUOpPt-NA^jQfCU( zm62n_32UKYKj=>xgtVuKM3GkX&YtCSSPqanaPtKd97N$!nQ$rvM8Fxt&_NXuHjzIO zsj+g+8H3JF#Gp}Oo!rk~ggC+hBLaZ*=w~3*~jb99(sx40Ve! zf%0wimOBY@N)1K6y1m@B$Gdpf&RXYj`b6HHkdXE4QZzF=B-J~m;)FtD!fmuxB0aTF z@I2^-4WN7!q0M34%G3rIYk9cmyhv0@Qv@dV&?D-a{R1 Date: Tue, 27 Jul 2021 11:51:12 +0430 Subject: [PATCH 27/32] Fix missing reference of log text --- unity/Assets/Poolakey/Demo/DemoScene.unity | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/unity/Assets/Poolakey/Demo/DemoScene.unity b/unity/Assets/Poolakey/Demo/DemoScene.unity index 3f39412..28dbf77 100644 --- a/unity/Assets/Poolakey/Demo/DemoScene.unity +++ b/unity/Assets/Poolakey/Demo/DemoScene.unity @@ -477,7 +477,7 @@ GameObject: - component: {fileID: 488007355} - component: {fileID: 488007354} m_Layer: 5 - m_Name: ConsolText + m_Name: VersionText m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -749,7 +749,7 @@ GameObject: - component: {fileID: 948878755} - component: {fileID: 948878756} m_Layer: 5 - m_Name: Text + m_Name: ConsolText m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -828,7 +828,7 @@ RectTransform: m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1856.4832, y: 0} + m_SizeDelta: {x: 1497.724, y: 0} m_Pivot: {x: 0, y: 1} --- !u!1 &962587537 GameObject: @@ -866,10 +866,10 @@ RectTransform: m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -261.1} - m_SizeDelta: {x: 0, y: -522} - m_Pivot: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 396} + m_Pivot: {x: 0.5, y: 0} --- !u!114 &962587539 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1885,7 +1885,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 1a53fa97845622047a65db02032e1a69, type: 3} m_Name: m_EditorClassIdentifier: - ConsoleText: {fileID: 488007354} + ConsoleText: {fileID: 948878755} --- !u!1 &1587869380155104685 GameObject: m_ObjectHideFlags: 0 From e827b9fe9e3b403f0f52847aff902b9d1a65ea78 Mon Sep 17 00:00:00 2001 From: Mansour Date: Tue, 27 Jul 2021 17:45:23 +0430 Subject: [PATCH 28/32] Add brief for Poolakey --- README.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b5d3f0b..1c8f49e 100644 --- a/README.md +++ b/README.md @@ -1 +1,19 @@ -# PoolakeyUnitySdk +
+ +[........... راهنمــــــای فـــــــارسی ..........](https://github.com/cafebazaar/air-extension-inappbilling/blob/master/README_FA.md) + + +Unity SDK for [Poolakey](https://github.com/cafebazaar/Poolakey) ( New Cafebazaar IAP ). +## Step 1 : Download and import [Unity Package](/releases) + +
+ +```c# +dependencies { + // RxJava 3 + implementation "com.github.cafebazaar.Poolakey:Poolakey-rx3:[latest_version]" + // RxJava 2 + implementation "com.github.cafebazaar.Poolakey:Poolakey-rx:[latest_version]" +} +``` + From ce04222858dff8ed6fd8624218fda566138fb0f0 Mon Sep 17 00:00:00 2001 From: Mansour Date: Tue, 27 Jul 2021 17:46:16 +0430 Subject: [PATCH 29/32] Change productID --- unity/Assets/Poolakey/Demo/PoolakeyExample.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs index 7dc4585..547826e 100644 --- a/unity/Assets/Poolakey/Demo/PoolakeyExample.cs +++ b/unity/Assets/Poolakey/Demo/PoolakeyExample.cs @@ -29,7 +29,7 @@ public async void Connect() public async void GetPurchaseSkuDetails() { - var result = await payment.GetSkuDetails("test"); + var result = await payment.GetSkuDetails("productID"); if (result.status == Status.Success) { foreach (var sku in result.data) @@ -41,7 +41,7 @@ public async void GetPurchaseSkuDetails() public async void Purchase() { - var result = await payment.Purchase("test"); + var result = await payment.Purchase("productID"); Log($"{result.message}, {result.stackTrace}"); if (result.status == Status.Success) { @@ -51,8 +51,8 @@ public async void Purchase() } public async void Subscribe() { - var result = await payment.Purchase("test", Payment.Type.subscription); - print($"{result.message}, {result.stackTrace}"); + var result = await payment.Purchase("productID", Payment.Type.subscription); + Log($"{result.message}, {result.stackTrace}"); if (result.status == Status.Success) { purchase = result.data; @@ -63,7 +63,7 @@ public async void Subscribe() public async void Consume() { var result = await payment.Consume(purchase.purchaseToken); - print($"{result.message}, {result.stackTrace}"); + Log($"{result.message}, {result.stackTrace}"); } public void Log(string message) From ba803e6acbacdc85558097aed08cf8585ceeb92f Mon Sep 17 00:00:00 2001 From: Mansour Date: Tue, 27 Jul 2021 18:09:56 +0430 Subject: [PATCH 30/32] Update readme Add persian readme --- README.md | 22 ++++++++++------------ README_FA.md | 17 +++++++++++++++++ unity/README.md | 1 - 3 files changed, 27 insertions(+), 13 deletions(-) create mode 100644 README_FA.md delete mode 100644 unity/README.md diff --git a/README.md b/README.md index 1c8f49e..370a255 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,17 @@ -
+
-[........... راهنمــــــای فـــــــارسی ..........](https://github.com/cafebazaar/air-extension-inappbilling/blob/master/README_FA.md) +[........... راهنمــــــای فـــــــارسی ..........](https://github.com/manjav/PoolakeyUnitySdk/blob/main/README_FA.md) -Unity SDK for [Poolakey](https://github.com/cafebazaar/Poolakey) ( New Cafebazaar IAP ). -## Step 1 : Download and import [Unity Package](/releases) +### Unity SDK for [Poolakey](https://github.com/cafebazaar/Poolakey) ( New Cafebazaar IAP ).

-
+Easy payment : ```c# -dependencies { - // RxJava 3 - implementation "com.github.cafebazaar.Poolakey:Poolakey-rx3:[latest_version]" - // RxJava 2 - implementation "com.github.cafebazaar.Poolakey:Poolakey-rx:[latest_version]" -} +var connectionResult = await payment.Connect(); +var purchaseResult = await payment.Purchase("productID"); +var consumeResult = await payment.Consume(purchaseResult.data.purchaseToken); ``` - +

+## How to use? +For more information regarding the usage of Poolakey, please check out the [wiki](https://github.com/manjav/PoolakeyUnitySdk/wiki) page. \ No newline at end of file diff --git a/README_FA.md b/README_FA.md new file mode 100644 index 0000000..8a92e55 --- /dev/null +++ b/README_FA.md @@ -0,0 +1,17 @@ +
+ +[........... راهنمــــــای فـــــــارسی ..........](https://github.com/manjav/PoolakeyUnitySdk/blob/main/README_FA.md) + + +### [کتابخانه پولکی](https://github.com/cafebazaar/Poolakey) ( سیستم جدید و ساده پرداخت درون‌برنامه کافه بازار ).

+ +پیاده سازی بسیار آسان : + +```c# +var connectionResult = await payment.Connect(); +var purchaseResult = await payment.Purchase("productID"); +var consumeResult = await payment.Consume(purchaseResult.data.purchaseToken); +``` +

+## چطوری شروع کنم؟ +برای اینکه اطلاعات بیشتری از نحوه استفاده کتابخانه به دست بیاری به [ویکی](https://github.com/manjav/PoolakeyUnitySdk/wiki) مراجعه کن. \ No newline at end of file diff --git a/unity/README.md b/unity/README.md deleted file mode 100644 index b5d3f0b..0000000 --- a/unity/README.md +++ /dev/null @@ -1 +0,0 @@ -# PoolakeyUnitySdk From 6843bb1255594f13ca77e517fc94209ffe4d5c7b Mon Sep 17 00:00:00 2001 From: Mansour Date: Thu, 29 Jul 2021 11:13:16 +0430 Subject: [PATCH 31/32] Update style for persian readme --- README_FA.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/README_FA.md b/README_FA.md index 8a92e55..3365eb5 100644 --- a/README_FA.md +++ b/README_FA.md @@ -1,11 +1,10 @@
-[........... راهنمــــــای فـــــــارسی ..........](https://github.com/manjav/PoolakeyUnitySdk/blob/main/README_FA.md) +### [

........... English Readme ..........
](https://github.com/manjav/PoolakeyUnitySdk/blob/main/README_FA.md) +
- -### [کتابخانه پولکی](https://github.com/cafebazaar/Poolakey) ( سیستم جدید و ساده پرداخت درون‌برنامه کافه بازار ).

- -پیاده سازی بسیار آسان : +##
پولکی (کتابخانه جدید و ساده پرداخت درون‌برنامه کافه بازار)

+

پیاده سازی بسیار آسان :

```c# var connectionResult = await payment.Connect(); @@ -13,5 +12,5 @@ var purchaseResult = await payment.Purchase("productID"); var consumeResult = await payment.Consume(purchaseResult.data.purchaseToken); ```

-## چطوری شروع کنم؟ -برای اینکه اطلاعات بیشتری از نحوه استفاده کتابخانه به دست بیاری به [ویکی](https://github.com/manjav/PoolakeyUnitySdk/wiki) مراجعه کن. \ No newline at end of file + +## [
پیاده سازی گام به گام کتابخانه
](https://github.com/manjav/PoolakeyUnitySdk/wiki/%DB%B1.-%D9%86%D8%B5%D8%A8-SDK) \ No newline at end of file From e7546279779927158025b2cfe1f0b54f0f733d8e Mon Sep 17 00:00:00 2001 From: Mansour Date: Thu, 29 Jul 2021 11:14:47 +0430 Subject: [PATCH 32/32] Edit url --- README_FA.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_FA.md b/README_FA.md index 3365eb5..20ac808 100644 --- a/README_FA.md +++ b/README_FA.md @@ -1,6 +1,6 @@
-### [
........... English Readme ..........
](https://github.com/manjav/PoolakeyUnitySdk/blob/main/README_FA.md) +### [
........... English Readme ..........
](https://github.com/manjav/PoolakeyUnitySdk/blob/main/README.md)
##
پولکی (کتابخانه جدید و ساده پرداخت درون‌برنامه کافه بازار)