From 258fc336949350be1074864859a5f2f3956c48a6 Mon Sep 17 00:00:00 2001 From: ayub Date: Mon, 14 Jul 2025 13:13:54 +0700 Subject: [PATCH] initial commit --- .DS_Store | Bin 0 -> 6148 bytes CHANGELOG.md | 38 + LICENSE | 21 + README.md | 77 ++ analysis_options.yaml | 4 + android/.DS_Store | Bin 0 -> 6148 bytes android/build.gradle | 52 ++ android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59536 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + android/gradlew | 234 ++++++ android/gradlew.bat | 89 +++ android/settings.gradle | 1 + android/src/.DS_Store | Bin 0 -> 6148 bytes android/src/main/AndroidManifest.xml | 12 + .../dev/yashgarg/appcheck/AppcheckPlugin.kt | 224 ++++++ .../dev/yashgarg/appcheck/DrawableUtil.kt | 35 + example/.DS_Store | Bin 0 -> 6148 bytes example/README.md | 16 + example/analysis_options.yaml | 28 + example/android/app/build.gradle.kts | 44 ++ .../android/app/src/debug/AndroidManifest.xml | 8 + .../android/app/src/main/AndroidManifest.xml | 48 ++ .../yashgarg/appcheck_example/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 8 + example/android/build.gradle.kts | 21 + example/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 5 + example/android/settings.gradle.kts | 25 + example/ios/Flutter/AppFrameworkInfo.plist | 26 + example/ios/Flutter/Debug.xcconfig | 2 + example/ios/Flutter/Release.xcconfig | 2 + example/ios/Podfile | 43 + example/ios/Podfile.lock | 16 + example/ios/Runner.xcodeproj/project.pbxproj | 732 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 117 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + example/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 +++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 1226 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 1418 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + example/ios/Runner/Base.lproj/Main.storyboard | 26 + example/ios/Runner/Info.plist | 49 ++ example/ios/Runner/Runner-Bridging-Header.h | 1 + example/lib/main.dart | 109 +++ example/pubspec.yaml | 27 + images/screen-android.png | Bin 0 -> 106516 bytes images/screen-ios.png | Bin 0 -> 52959 bytes ios/appcheck.podspec | 23 + ios/appcheck/Package.swift | 22 + .../Sources/appcheck/AppcheckPlugin.swift | 50 ++ lib/.DS_Store | Bin 0 -> 6148 bytes lib/appcheck.dart | 2 + lib/src/app_info.dart | 80 ++ lib/src/appcheck.dart | 95 +++ pubspec.yaml | 26 + 88 files changed, 2760 insertions(+) create mode 100644 .DS_Store create mode 100644 CHANGELOG.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 analysis_options.yaml create mode 100644 android/.DS_Store create mode 100644 android/build.gradle create mode 100644 android/gradle/wrapper/gradle-wrapper.jar create mode 100644 android/gradle/wrapper/gradle-wrapper.properties create mode 100755 android/gradlew create mode 100644 android/gradlew.bat create mode 100644 android/settings.gradle create mode 100644 android/src/.DS_Store create mode 100644 android/src/main/AndroidManifest.xml create mode 100644 android/src/main/kotlin/dev/yashgarg/appcheck/AppcheckPlugin.kt create mode 100644 android/src/main/kotlin/dev/yashgarg/appcheck/DrawableUtil.kt create mode 100644 example/.DS_Store create mode 100644 example/README.md create mode 100644 example/analysis_options.yaml create mode 100644 example/android/app/build.gradle.kts create mode 100644 example/android/app/src/debug/AndroidManifest.xml create mode 100644 example/android/app/src/main/AndroidManifest.xml create mode 100644 example/android/app/src/main/kotlin/dev/yashgarg/appcheck_example/MainActivity.kt create mode 100644 example/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 example/android/app/src/main/res/drawable/launch_background.xml create mode 100644 example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 example/android/app/src/main/res/values-night/styles.xml create mode 100644 example/android/app/src/main/res/values/styles.xml create mode 100644 example/android/app/src/profile/AndroidManifest.xml create mode 100644 example/android/build.gradle.kts create mode 100644 example/android/gradle.properties create mode 100644 example/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 example/android/settings.gradle.kts create mode 100644 example/ios/Flutter/AppFrameworkInfo.plist create mode 100644 example/ios/Flutter/Debug.xcconfig create mode 100644 example/ios/Flutter/Release.xcconfig create mode 100644 example/ios/Podfile create mode 100644 example/ios/Podfile.lock create mode 100644 example/ios/Runner.xcodeproj/project.pbxproj create mode 100644 example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 example/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 example/ios/Runner/AppDelegate.swift create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 example/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 example/ios/Runner/Base.lproj/Main.storyboard create mode 100644 example/ios/Runner/Info.plist create mode 100644 example/ios/Runner/Runner-Bridging-Header.h create mode 100644 example/lib/main.dart create mode 100644 example/pubspec.yaml create mode 100644 images/screen-android.png create mode 100644 images/screen-ios.png create mode 100644 ios/appcheck.podspec create mode 100644 ios/appcheck/Package.swift create mode 100644 ios/appcheck/Sources/appcheck/AppcheckPlugin.swift create mode 100644 lib/.DS_Store create mode 100644 lib/appcheck.dart create mode 100644 lib/src/app_info.dart create mode 100644 lib/src/appcheck.dart create mode 100644 pubspec.yaml diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..daac23c2680ef5d90f71536b5cf384b38b924695 GIT binary patch literal 6148 zcmeHKu}T9$5S>k;2`ZYxLb31)8xg^DmZzMRjgTMEcp*k|xnKxb-Y4W6{02MiENpH4 z2Rp$^#5cPevztr6Du~R$?%Ug$*?ITE?PiHc9S`CfQI&`)XpE&LbW@D|+;Ud1GwVR5 z*GQ>Nai>+QU#7WenGgj;fxo5zf4gP6pf1I9L(cb`^fXm<{gsbM(kNp_qdY#P zA@fCTe9>*TH_V&W& zsJ6{>tLD94JvuP;I;hz2-kA12bv^BI>$S6oyI1qBMf_^WbL-{3e!VlUCpKRNaAvbr zmJLcT3Wx%tz>fmFKLluup~cLg-a63fD*&*BX>Ax+c>oM7h88n}@W7Nw1)5Z4uNcat zV?MBPp~cLgNhf75AIer%_J*Q#b*vxga8jW`=|uriz*nGX9;d`S?$)2sbm*cZGKs!fc=2.12.0 from 2.17.0 + +## 1.0.5 + +- Remove QUERY_ALL_PACKAGES permission due to playstore policies (check README for more info) + +## 1.0.4 + +- Fixed some lint warnings +- Updated Dart SDK min version to 2.17 + +## 1.0.3 + +- Fixed system app logic for Android +- Fixed opening URLs on earlier iOS versions + +## 1.0.0 - 1.0.2 + +- Rewritten in Kotlin and with Null-Safety. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..b6ac9e4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Yash Garg + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..f15d657 --- /dev/null +++ b/README.md @@ -0,0 +1,77 @@ +# AppCheck + +[![Pub](https://img.shields.io/pub/v/appcheck.svg)](https://pub.dartlang.org/packages/appcheck) + +A Flutter plugin that allows you to check if an app is installed/enabled, launch an app and get the list of installed apps. + +## Installation + +First, add `appcheck` as a [dependency in your pubspec.yaml file](https://flutter.io/using-packages/). + +## Methods available + +- `checkAvailability(String uri)` +- `isAppInstalled(String uri)` +- `getInstalledApps()` (only for **Android**) +- `isAppEnabled(String uri)` (only for **Android**) +- `launchApp(String uri)` + +## Permissions + +Before using the plugin, you need to add declarations in your configuration files. + +### Android + +If you want to use the `getInstalledApps()` function, you need the `QUERY_ALL_PACKAGES` permission. + + ```xml + + ``` + + If you only want to check certain apps and you know the packageName, add them via queries in AndroidManifest.xml. + + ```xml + + + + ``` + +### iOS + +Make sure your `Info.plist` file includes the necessary URL schemes under `LSApplicationQueriesSchemes` to check and launch other apps: + +```xml +LSApplicationQueriesSchemes + + scheme1 + scheme2 + + +``` + +Example: + +```xml +LSApplicationQueriesSchemes + + fb + twitter + instagram + whatsapp + youtube + comgooglemaps + http + https + mailto + + +``` + +Check out [Example](https://github.com/Yash-Garg/appcheck/blob/develop/example/lib/main.dart). + +## Screenshots + +

+ + +

diff --git a/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000..a5744c1 --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1,4 @@ +include: package:flutter_lints/flutter.yaml + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/android/.DS_Store b/android/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a110447ebe891e1fd7bf06373a7566c756733337 GIT binary patch literal 6148 zcmeHKJ5Iwu5S<|rvP413&}|D{3aT_FGABqw84@E?*m4v^L*)~28g4+r88`yB;LXmU z#MpukMPx?WeY^A7*?p3CJw(K_$9zIGBBBIMkY&&#qV6>vnX?!p--M($1mrnZ&zKP{8yj#{SHrH4>F(!>|@nt za9V6FySXne&z|2kx5ZWUHfz_~%0~;y=i&@F1I~amaF`6}t3%1jVIJR4?F={rKQJKo zLqHQu4I9OHb)btS0B{I(6pW>okeFbY8a9fsKv+Y88p>8;u!ch)%r7-;6g8aKiVwET zU&RZ@>{vfUcj8phduPBIXfrU-=}6xHYkV@jMSeTPXU>2#@Xr|FVK&cZIF!Auo#V+{ w8_*VLBI4J`0D^JrCjb+UrG|~7tRngt4)h;^NQigNz#lO13GaGDhX4Qo literal 0 HcmV?d00001 diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..1af4bcb --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,52 @@ +group 'dev.yashgarg.appcheck' +version '1.0-SNAPSHOT' + +buildscript { + ext.kotlin_version = '1.6.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:4.1.3' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +rootProject.allprojects { + repositories { + google() + mavenCentral() + } +} + +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' + +android { + namespace "dev.yashgarg.appcheck" + + compileSdkVersion 31 + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + minSdkVersion 16 + } +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..7454180f2ae8848c63b8b4dea2cb829da983f2fa GIT binary patch literal 59536 zcma&NbC71ylI~qywr$(CZQJHswz}-9F59+k+g;UV+cs{`J?GrGXYR~=-ydruB3JCa zB64N^cILAcWk5iofq)<(fq;O7{th4@;QxID0)qN`mJ?GIqLY#rX8-|G{5M0pdVW5^ zzXk$-2kQTAC?_N@B`&6-N-rmVFE=$QD?>*=4<|!MJu@}isLc4AW#{m2if&A5T5g&~ ziuMQeS*U5sL6J698wOd)K@oK@1{peP5&Esut<#VH^u)gp`9H4)`uE!2$>RTctN+^u z=ASkePDZA-X8)rp%D;p*~P?*a_=*Kwc<^>QSH|^<0>o37lt^+Mj1;4YvJ(JR-Y+?%Nu}JAYj5 z_Qc5%Ao#F?q32i?ZaN2OSNhWL;2oDEw_({7ZbgUjna!Fqn3NzLM@-EWFPZVmc>(fZ z0&bF-Ch#p9C{YJT9Rcr3+Y_uR^At1^BxZ#eo>$PLJF3=;t_$2|t+_6gg5(j{TmjYU zK12c&lE?Eh+2u2&6Gf*IdKS&6?rYbSEKBN!rv{YCm|Rt=UlPcW9j`0o6{66#y5t9C zruFA2iKd=H%jHf%ypOkxLnO8#H}#Zt{8p!oi6)7#NqoF({t6|J^?1e*oxqng9Q2Cc zg%5Vu!em)}Yuj?kaP!D?b?(C*w!1;>R=j90+RTkyEXz+9CufZ$C^umX^+4|JYaO<5 zmIM3#dv`DGM;@F6;(t!WngZSYzHx?9&$xEF70D1BvfVj<%+b#)vz)2iLCrTeYzUcL z(OBnNoG6Le%M+@2oo)&jdOg=iCszzv59e zDRCeaX8l1hC=8LbBt|k5?CXgep=3r9BXx1uR8!p%Z|0+4Xro=xi0G!e{c4U~1j6!) zH6adq0}#l{%*1U(Cb%4AJ}VLWKBPi0MoKFaQH6x?^hQ!6em@993xdtS%_dmevzeNl z(o?YlOI=jl(`L9^ z0O+H9k$_@`6L13eTT8ci-V0ljDMD|0ifUw|Q-Hep$xYj0hTO@0%IS^TD4b4n6EKDG z??uM;MEx`s98KYN(K0>c!C3HZdZ{+_53DO%9k5W%pr6yJusQAv_;IA}925Y%;+!tY z%2k!YQmLLOr{rF~!s<3-WEUs)`ix_mSU|cNRBIWxOox_Yb7Z=~Q45ZNe*u|m^|)d* zog=i>`=bTe!|;8F+#H>EjIMcgWcG2ORD`w0WD;YZAy5#s{65~qfI6o$+Ty&-hyMyJ z3Ra~t>R!p=5ZpxA;QkDAoPi4sYOP6>LT+}{xp}tk+<0k^CKCFdNYG(Es>p0gqD)jP zWOeX5G;9(m@?GOG7g;e74i_|SmE?`B2i;sLYwRWKLy0RLW!Hx`=!LH3&k=FuCsM=9M4|GqzA)anEHfxkB z?2iK-u(DC_T1};KaUT@3nP~LEcENT^UgPvp!QC@Dw&PVAhaEYrPey{nkcn(ro|r7XUz z%#(=$7D8uP_uU-oPHhd>>^adbCSQetgSG`e$U|7mr!`|bU0aHl_cmL)na-5x1#OsVE#m*+k84Y^+UMeSAa zbrVZHU=mFwXEaGHtXQq`2ZtjfS!B2H{5A<3(nb-6ARVV8kEmOkx6D2x7~-6hl;*-*}2Xz;J#a8Wn;_B5=m zl3dY;%krf?i-Ok^Pal-}4F`{F@TYPTwTEhxpZK5WCpfD^UmM_iYPe}wpE!Djai6_{ z*pGO=WB47#Xjb7!n2Ma)s^yeR*1rTxp`Mt4sfA+`HwZf%!7ZqGosPkw69`Ix5Ku6G z@Pa;pjzV&dn{M=QDx89t?p?d9gna*}jBly*#1!6}5K<*xDPJ{wv4& zM$17DFd~L*Te3A%yD;Dp9UGWTjRxAvMu!j^Tbc}2v~q^59d4bz zvu#!IJCy(BcWTc`;v$9tH;J%oiSJ_i7s;2`JXZF+qd4C)vY!hyCtl)sJIC{ebI*0> z@x>;EzyBv>AI-~{D6l6{ST=em*U( z(r$nuXY-#CCi^8Z2#v#UXOt`dbYN1z5jzNF2 z411?w)whZrfA20;nl&C1Gi+gk<`JSm+{|*2o<< zqM#@z_D`Cn|0H^9$|Tah)0M_X4c37|KQ*PmoT@%xHc3L1ZY6(p(sNXHa&49Frzto& zR`c~ClHpE~4Z=uKa5S(-?M8EJ$zt0&fJk~p$M#fGN1-y$7!37hld`Uw>Urri(DxLa;=#rK0g4J)pXMC zxzraOVw1+kNWpi#P=6(qxf`zSdUC?D$i`8ZI@F>k6k zz21?d+dw7b&i*>Kv5L(LH-?J%@WnqT7j#qZ9B>|Zl+=> z^U-pV@1y_ptHo4hl^cPRWewbLQ#g6XYQ@EkiP z;(=SU!yhjHp%1&MsU`FV1Z_#K1&(|5n(7IHbx&gG28HNT)*~-BQi372@|->2Aw5It z0CBpUcMA*QvsPy)#lr!lIdCi@1k4V2m!NH)%Px(vu-r(Q)HYc!p zJ^$|)j^E#q#QOgcb^pd74^JUi7fUmMiNP_o*lvx*q%_odv49Dsv$NV;6J z9GOXKomA{2Pb{w}&+yHtH?IkJJu~}Z?{Uk++2mB8zyvh*xhHKE``99>y#TdD z&(MH^^JHf;g(Tbb^&8P*;_i*2&fS$7${3WJtV7K&&(MBV2~)2KB3%cWg#1!VE~k#C z!;A;?p$s{ihyojEZz+$I1)L}&G~ml=udD9qh>Tu(ylv)?YcJT3ihapi!zgPtWb*CP zlLLJSRCj-^w?@;RU9aL2zDZY1`I3d<&OMuW=c3$o0#STpv_p3b9Wtbql>w^bBi~u4 z3D8KyF?YE?=HcKk!xcp@Cigvzy=lnFgc^9c%(^F22BWYNAYRSho@~*~S)4%AhEttv zvq>7X!!EWKG?mOd9&n>vvH1p4VzE?HCuxT-u+F&mnsfDI^}*-d00-KAauEaXqg3k@ zy#)MGX!X;&3&0s}F3q40ZmVM$(H3CLfpdL?hB6nVqMxX)q=1b}o_PG%r~hZ4gUfSp zOH4qlEOW4OMUc)_m)fMR_rl^pCfXc{$fQbI*E&mV77}kRF z&{<06AJyJ!e863o-V>FA1a9Eemx6>^F$~9ppt()ZbPGfg_NdRXBWoZnDy2;#ODgf! zgl?iOcF7Meo|{AF>KDwTgYrJLb$L2%%BEtO>T$C?|9bAB&}s;gI?lY#^tttY&hfr# zKhC+&b-rpg_?~uVK%S@mQleU#_xCsvIPK*<`E0fHE1&!J7!xD#IB|SSPW6-PyuqGn3^M^Rz%WT{e?OI^svARX&SAdU77V(C~ zM$H{Kg59op{<|8ry9ecfP%=kFm(-!W&?U0@<%z*+!*<e0XesMxRFu9QnGqun6R_%T+B%&9Dtk?*d$Q zb~>84jEAPi@&F@3wAa^Lzc(AJz5gsfZ7J53;@D<;Klpl?sK&u@gie`~vTsbOE~Cd4 z%kr56mI|#b(Jk&;p6plVwmNB0H@0SmgdmjIn5Ne@)}7Vty(yb2t3ev@22AE^s!KaN zyQ>j+F3w=wnx7w@FVCRe+`vUH)3gW%_72fxzqX!S&!dchdkRiHbXW1FMrIIBwjsai8`CB2r4mAbwp%rrO>3B$Zw;9=%fXI9B{d(UzVap7u z6piC-FQ)>}VOEuPpuqznpY`hN4dGa_1Xz9rVg(;H$5Te^F0dDv*gz9JS<|>>U0J^# z6)(4ICh+N_Q`Ft0hF|3fSHs*?a=XC;e`sJaU9&d>X4l?1W=|fr!5ShD|nv$GK;j46@BV6+{oRbWfqOBRb!ir88XD*SbC(LF}I1h#6@dvK%Toe%@ zhDyG$93H8Eu&gCYddP58iF3oQH*zLbNI;rN@E{T9%A8!=v#JLxKyUe}e}BJpB{~uN zqgxRgo0*-@-iaHPV8bTOH(rS(huwK1Xg0u+e!`(Irzu@Bld&s5&bWgVc@m7;JgELd zimVs`>vQ}B_1(2#rv#N9O`fJpVfPc7V2nv34PC);Dzbb;p!6pqHzvy?2pD&1NE)?A zt(t-ucqy@wn9`^MN5apa7K|L=9>ISC>xoc#>{@e}m#YAAa1*8-RUMKwbm|;5p>T`Z zNf*ph@tnF{gmDa3uwwN(g=`Rh)4!&)^oOy@VJaK4lMT&5#YbXkl`q?<*XtsqD z9PRK6bqb)fJw0g-^a@nu`^?71k|m3RPRjt;pIkCo1{*pdqbVs-Yl>4E>3fZx3Sv44grW=*qdSoiZ9?X0wWyO4`yDHh2E!9I!ZFi zVL8|VtW38}BOJHW(Ax#KL_KQzarbuE{(%TA)AY)@tY4%A%P%SqIU~8~-Lp3qY;U-} z`h_Gel7;K1h}7$_5ZZT0&%$Lxxr-<89V&&TCsu}LL#!xpQ1O31jaa{U34~^le*Y%L za?7$>Jk^k^pS^_M&cDs}NgXlR>16AHkSK-4TRaJSh#h&p!-!vQY%f+bmn6x`4fwTp z$727L^y`~!exvmE^W&#@uY!NxJi`g!i#(++!)?iJ(1)2Wk;RN zFK&O4eTkP$Xn~4bB|q8y(btx$R#D`O@epi4ofcETrx!IM(kWNEe42Qh(8*KqfP(c0 zouBl6>Fc_zM+V;F3znbo{x#%!?mH3`_ANJ?y7ppxS@glg#S9^MXu|FM&ynpz3o&Qh z2ujAHLF3($pH}0jXQsa#?t--TnF1P73b?4`KeJ9^qK-USHE)4!IYgMn-7z|=ALF5SNGkrtPG@Y~niUQV2?g$vzJN3nZ{7;HZHzWAeQ;5P|@Tl3YHpyznGG4-f4=XflwSJY+58-+wf?~Fg@1p1wkzuu-RF3j2JX37SQUc? zQ4v%`V8z9ZVZVqS8h|@@RpD?n0W<=hk=3Cf8R?d^9YK&e9ZybFY%jdnA)PeHvtBe- zhMLD+SSteHBq*q)d6x{)s1UrsO!byyLS$58WK;sqip$Mk{l)Y(_6hEIBsIjCr5t>( z7CdKUrJTrW%qZ#1z^n*Lb8#VdfzPw~OIL76aC+Rhr<~;4Tl!sw?Rj6hXj4XWa#6Tp z@)kJ~qOV)^Rh*-?aG>ic2*NlC2M7&LUzc9RT6WM%Cpe78`iAowe!>(T0jo&ivn8-7 zs{Qa@cGy$rE-3AY0V(l8wjI^uB8Lchj@?L}fYal^>T9z;8juH@?rG&g-t+R2dVDBe zq!K%{e-rT5jX19`(bP23LUN4+_zh2KD~EAYzhpEO3MUG8@}uBHH@4J zd`>_(K4q&>*k82(dDuC)X6JuPrBBubOg7qZ{?x!r@{%0);*`h*^F|%o?&1wX?Wr4b z1~&cy#PUuES{C#xJ84!z<1tp9sfrR(i%Tu^jnXy;4`Xk;AQCdFC@?V%|; zySdC7qS|uQRcH}EFZH%mMB~7gi}a0utE}ZE_}8PQH8f;H%PN41Cb9R%w5Oi5el^fd z$n{3SqLCnrF##x?4sa^r!O$7NX!}&}V;0ZGQ&K&i%6$3C_dR%I7%gdQ;KT6YZiQrW zk%q<74oVBV>@}CvJ4Wj!d^?#Zwq(b$E1ze4$99DuNg?6t9H}k_|D7KWD7i0-g*EO7 z;5{hSIYE4DMOK3H%|f5Edx+S0VI0Yw!tsaRS2&Il2)ea^8R5TG72BrJue|f_{2UHa z@w;^c|K3da#$TB0P3;MPlF7RuQeXT$ zS<<|C0OF(k)>fr&wOB=gP8!Qm>F41u;3esv7_0l%QHt(~+n; zf!G6%hp;Gfa9L9=AceiZs~tK+Tf*Wof=4!u{nIO90jH@iS0l+#%8=~%ASzFv7zqSB^?!@N7)kp0t&tCGLmzXSRMRyxCmCYUD2!B`? zhs$4%KO~m=VFk3Buv9osha{v+mAEq=ik3RdK@;WWTV_g&-$U4IM{1IhGX{pAu%Z&H zFfwCpUsX%RKg);B@7OUzZ{Hn{q6Vv!3#8fAg!P$IEx<0vAx;GU%}0{VIsmFBPq_mb zpe^BChDK>sc-WLKl<6 zwbW|e&d&dv9Wu0goueyu>(JyPx1mz0v4E?cJjFuKF71Q1)AL8jHO$!fYT3(;U3Re* zPPOe%*O+@JYt1bW`!W_1!mN&=w3G9ru1XsmwfS~BJ))PhD(+_J_^N6j)sx5VwbWK| zwRyC?W<`pOCY)b#AS?rluxuuGf-AJ=D!M36l{ua?@SJ5>e!IBr3CXIxWw5xUZ@Xrw z_R@%?{>d%Ld4p}nEsiA@v*nc6Ah!MUs?GA7e5Q5lPpp0@`%5xY$C;{%rz24$;vR#* zBP=a{)K#CwIY%p} zXVdxTQ^HS@O&~eIftU+Qt^~(DGxrdi3k}DdT^I7Iy5SMOp$QuD8s;+93YQ!OY{eB24%xY7ml@|M7I(Nb@K_-?F;2?et|CKkuZK_>+>Lvg!>JE~wN`BI|_h6$qi!P)+K-1Hh(1;a`os z55)4Q{oJiA(lQM#;w#Ta%T0jDNXIPM_bgESMCDEg6rM33anEr}=|Fn6)|jBP6Y}u{ zv9@%7*#RI9;fv;Yii5CI+KrRdr0DKh=L>)eO4q$1zmcSmglsV`*N(x=&Wx`*v!!hn6X-l0 zP_m;X??O(skcj+oS$cIdKhfT%ABAzz3w^la-Ucw?yBPEC+=Pe_vU8nd-HV5YX6X8r zZih&j^eLU=%*;VzhUyoLF;#8QsEfmByk+Y~caBqSvQaaWf2a{JKB9B>V&r?l^rXaC z8)6AdR@Qy_BxQrE2Fk?ewD!SwLuMj@&d_n5RZFf7=>O>hzVE*seW3U?_p|R^CfoY`?|#x9)-*yjv#lo&zP=uI`M?J zbzC<^3x7GfXA4{FZ72{PE*-mNHyy59Q;kYG@BB~NhTd6pm2Oj=_ zizmD?MKVRkT^KmXuhsk?eRQllPo2Ubk=uCKiZ&u3Xjj~<(!M94c)Tez@9M1Gfs5JV z->@II)CDJOXTtPrQudNjE}Eltbjq>6KiwAwqvAKd^|g!exgLG3;wP+#mZYr`cy3#39e653d=jrR-ulW|h#ddHu(m9mFoW~2yE zz5?dB%6vF}+`-&-W8vy^OCxm3_{02royjvmwjlp+eQDzFVEUiyO#gLv%QdDSI#3W* z?3!lL8clTaNo-DVJw@ynq?q!%6hTQi35&^>P85G$TqNt78%9_sSJt2RThO|JzM$iL zg|wjxdMC2|Icc5rX*qPL(coL!u>-xxz-rFiC!6hD1IR%|HSRsV3>Kq~&vJ=s3M5y8SG%YBQ|{^l#LGlg!D?E>2yR*eV%9m$_J6VGQ~AIh&P$_aFbh zULr0Z$QE!QpkP=aAeR4ny<#3Fwyw@rZf4?Ewq`;mCVv}xaz+3ni+}a=k~P+yaWt^L z@w67!DqVf7D%7XtXX5xBW;Co|HvQ8WR1k?r2cZD%U;2$bsM%u8{JUJ5Z0k= zZJARv^vFkmWx15CB=rb=D4${+#DVqy5$C%bf`!T0+epLJLnh1jwCdb*zuCL}eEFvE z{rO1%gxg>1!W(I!owu*mJZ0@6FM(?C+d*CeceZRW_4id*D9p5nzMY&{mWqrJomjIZ z97ZNnZ3_%Hx8dn;H>p8m7F#^2;T%yZ3H;a&N7tm=Lvs&lgJLW{V1@h&6Vy~!+Ffbb zv(n3+v)_D$}dqd!2>Y2B)#<+o}LH#%ogGi2-?xRIH)1!SD)u-L65B&bsJTC=LiaF+YOCif2dUX6uAA|#+vNR z>U+KQekVGon)Yi<93(d!(yw1h3&X0N(PxN2{%vn}cnV?rYw z$N^}_o!XUB!mckL`yO1rnUaI4wrOeQ(+&k?2mi47hzxSD`N#-byqd1IhEoh!PGq>t z_MRy{5B0eKY>;Ao3z$RUU7U+i?iX^&r739F)itdrTpAi-NN0=?^m%?{A9Ly2pVv>Lqs6moTP?T2-AHqFD-o_ znVr|7OAS#AEH}h8SRPQ@NGG47dO}l=t07__+iK8nHw^(AHx&Wb<%jPc$$jl6_p(b$ z)!pi(0fQodCHfM)KMEMUR&UID>}m^(!{C^U7sBDOA)$VThRCI0_+2=( zV8mMq0R(#z;C|7$m>$>`tX+T|xGt(+Y48@ZYu#z;0pCgYgmMVbFb!$?%yhZqP_nhn zy4<#3P1oQ#2b51NU1mGnHP$cf0j-YOgAA}A$QoL6JVLcmExs(kU{4z;PBHJD%_=0F z>+sQV`mzijSIT7xn%PiDKHOujX;n|M&qr1T@rOxTdxtZ!&u&3HHFLYD5$RLQ=heur zb>+AFokUVQeJy-#LP*^)spt{mb@Mqe=A~-4p0b+Bt|pZ+@CY+%x}9f}izU5;4&QFE zO1bhg&A4uC1)Zb67kuowWY4xbo&J=%yoXlFB)&$d*-}kjBu|w!^zbD1YPc0-#XTJr z)pm2RDy%J3jlqSMq|o%xGS$bPwn4AqitC6&e?pqWcjWPt{3I{>CBy;hg0Umh#c;hU3RhCUX=8aR>rmd` z7Orw(5tcM{|-^J?ZAA9KP|)X6n9$-kvr#j5YDecTM6n z&07(nD^qb8hpF0B^z^pQ*%5ePYkv&FabrlI61ntiVp!!C8y^}|<2xgAd#FY=8b*y( zuQOuvy2`Ii^`VBNJB&R!0{hABYX55ooCAJSSevl4RPqEGb)iy_0H}v@vFwFzD%>#I>)3PsouQ+_Kkbqy*kKdHdfkN7NBcq%V{x^fSxgXpg7$bF& zj!6AQbDY(1u#1_A#1UO9AxiZaCVN2F0wGXdY*g@x$ByvUA?ePdide0dmr#}udE%K| z3*k}Vv2Ew2u1FXBaVA6aerI36R&rzEZeDDCl5!t0J=ug6kuNZzH>3i_VN`%BsaVB3 zQYw|Xub_SGf{)F{$ZX5`Jc!X!;eybjP+o$I{Z^Hsj@D=E{MnnL+TbC@HEU2DjG{3-LDGIbq()U87x4eS;JXnSh;lRlJ z>EL3D>wHt-+wTjQF$fGyDO$>d+(fq@bPpLBS~xA~R=3JPbS{tzN(u~m#Po!?H;IYv zE;?8%^vle|%#oux(Lj!YzBKv+Fd}*Ur-dCBoX*t{KeNM*n~ZPYJ4NNKkI^MFbz9!v z4(Bvm*Kc!-$%VFEewYJKz-CQN{`2}KX4*CeJEs+Q(!kI%hN1!1P6iOq?ovz}X0IOi z)YfWpwW@pK08^69#wSyCZkX9?uZD?C^@rw^Y?gLS_xmFKkooyx$*^5#cPqntNTtSG zlP>XLMj2!VF^0k#ole7`-c~*~+_T5ls?x4)ah(j8vo_ zwb%S8qoaZqY0-$ZI+ViIA_1~~rAH7K_+yFS{0rT@eQtTAdz#8E5VpwnW!zJ_^{Utv zlW5Iar3V5t&H4D6A=>?mq;G92;1cg9a2sf;gY9pJDVKn$DYdQlvfXq}zz8#LyPGq@ z+`YUMD;^-6w&r-82JL7mA8&M~Pj@aK!m{0+^v<|t%APYf7`}jGEhdYLqsHW-Le9TL z_hZZ1gbrz7$f9^fAzVIP30^KIz!!#+DRLL+qMszvI_BpOSmjtl$hh;&UeM{ER@INV zcI}VbiVTPoN|iSna@=7XkP&-4#06C};8ajbxJ4Gcq8(vWv4*&X8bM^T$mBk75Q92j z1v&%a;OSKc8EIrodmIiw$lOES2hzGDcjjB`kEDfJe{r}yE6`eZL zEB`9u>Cl0IsQ+t}`-cx}{6jqcANucqIB>Qmga_&<+80E2Q|VHHQ$YlAt{6`Qu`HA3 z03s0-sSlwbvgi&_R8s={6<~M^pGvBNjKOa>tWenzS8s zR>L7R5aZ=mSU{f?ib4Grx$AeFvtO5N|D>9#)ChH#Fny2maHWHOf2G=#<9Myot#+4u zWVa6d^Vseq_0=#AYS(-m$Lp;*8nC_6jXIjEM`omUmtH@QDs3|G)i4j*#_?#UYVZvJ z?YjT-?!4Q{BNun;dKBWLEw2C-VeAz`%?A>p;)PL}TAZn5j~HK>v1W&anteARlE+~+ zj>c(F;?qO3pXBb|#OZdQnm<4xWmn~;DR5SDMxt0UK_F^&eD|KZ=O;tO3vy4@4h^;2 zUL~-z`-P1aOe?|ZC1BgVsL)2^J-&vIFI%q@40w0{jjEfeVl)i9(~bt2z#2Vm)p`V_ z1;6$Ae7=YXk#=Qkd24Y23t&GvRxaOoad~NbJ+6pxqzJ>FY#Td7@`N5xp!n(c!=RE& z&<<@^a$_Ys8jqz4|5Nk#FY$~|FPC0`*a5HH!|Gssa9=~66&xG9)|=pOOJ2KE5|YrR zw!w6K2aC=J$t?L-;}5hn6mHd%hC;p8P|Dgh6D>hGnXPgi;6r+eA=?f72y9(Cf_ho{ zH6#)uD&R=73^$$NE;5piWX2bzR67fQ)`b=85o0eOLGI4c-Tb@-KNi2pz=Ke@SDcPn za$AxXib84`!Sf;Z3B@TSo`Dz7GM5Kf(@PR>Ghzi=BBxK8wRp>YQoXm+iL>H*Jo9M3 z6w&E?BC8AFTFT&Tv8zf+m9<&S&%dIaZ)Aoqkak_$r-2{$d~0g2oLETx9Y`eOAf14QXEQw3tJne;fdzl@wV#TFXSLXM2428F-Q}t+n2g%vPRMUzYPvzQ9f# zu(liiJem9P*?0%V@RwA7F53r~|I!Ty)<*AsMX3J{_4&}{6pT%Tpw>)^|DJ)>gpS~1rNEh z0$D?uO8mG?H;2BwM5a*26^7YO$XjUm40XmBsb63MoR;bJh63J;OngS5sSI+o2HA;W zdZV#8pDpC9Oez&L8loZO)MClRz!_!WD&QRtQxnazhT%Vj6Wl4G11nUk8*vSeVab@N#oJ}`KyJv+8Mo@T1-pqZ1t|?cnaVOd;1(h9 z!$DrN=jcGsVYE-0-n?oCJ^4x)F}E;UaD-LZUIzcD?W^ficqJWM%QLy6QikrM1aKZC zi{?;oKwq^Vsr|&`i{jIphA8S6G4)$KGvpULjH%9u(Dq247;R#l&I0{IhcC|oBF*Al zvLo7Xte=C{aIt*otJD}BUq)|_pdR>{zBMT< z(^1RpZv*l*m*OV^8>9&asGBo8h*_4q*)-eCv*|Pq=XNGrZE)^(SF7^{QE_~4VDB(o zVcPA_!G+2CAtLbl+`=Q~9iW`4ZRLku!uB?;tWqVjB0lEOf}2RD7dJ=BExy=<9wkb- z9&7{XFA%n#JsHYN8t5d~=T~5DcW4$B%3M+nNvC2`0!#@sckqlzo5;hhGi(D9=*A4` z5ynobawSPRtWn&CDLEs3Xf`(8^zDP=NdF~F^s&={l7(aw&EG}KWpMjtmz7j_VLO;@ zM2NVLDxZ@GIv7*gzl1 zjq78tv*8#WSY`}Su0&C;2F$Ze(q>F(@Wm^Gw!)(j;dk9Ad{STaxn)IV9FZhm*n+U} zi;4y*3v%A`_c7a__DJ8D1b@dl0Std3F||4Wtvi)fCcBRh!X9$1x!_VzUh>*S5s!oq z;qd{J_r79EL2wIeiGAqFstWtkfIJpjVh%zFo*=55B9Zq~y0=^iqHWfQl@O!Ak;(o*m!pZqe9 z%U2oDOhR)BvW8&F70L;2TpkzIutIvNQaTjjs5V#8mV4!NQ}zN=i`i@WI1z0eN-iCS z;vL-Wxc^Vc_qK<5RPh(}*8dLT{~GzE{w2o$2kMFaEl&q zP{V=>&3kW7tWaK-Exy{~`v4J0U#OZBk{a9{&)&QG18L@6=bsZ1zC_d{{pKZ-Ey>I> z;8H0t4bwyQqgu4hmO`3|4K{R*5>qnQ&gOfdy?z`XD%e5+pTDzUt3`k^u~SaL&XMe= z9*h#kT(*Q9jO#w2Hd|Mr-%DV8i_1{J1MU~XJ3!WUplhXDYBpJH><0OU`**nIvPIof z|N8@I=wA)sf45SAvx||f?Z5uB$kz1qL3Ky_{%RPdP5iN-D2!p5scq}buuC00C@jom zhfGKm3|f?Z0iQ|K$Z~!`8{nmAS1r+fp6r#YDOS8V*;K&Gs7Lc&f^$RC66O|)28oh`NHy&vq zJh+hAw8+ybTB0@VhWN^0iiTnLsCWbS_y`^gs!LX!Lw{yE``!UVzrV24tP8o;I6-65 z1MUiHw^{bB15tmrVT*7-#sj6cs~z`wk52YQJ*TG{SE;KTm#Hf#a~|<(|ImHH17nNM z`Ub{+J3dMD!)mzC8b(2tZtokKW5pAwHa?NFiso~# z1*iaNh4lQ4TS)|@G)H4dZV@l*Vd;Rw;-;odDhW2&lJ%m@jz+Panv7LQm~2Js6rOW3 z0_&2cW^b^MYW3)@o;neZ<{B4c#m48dAl$GCc=$>ErDe|?y@z`$uq3xd(%aAsX)D%l z>y*SQ%My`yDP*zof|3@_w#cjaW_YW4BdA;#Glg1RQcJGY*CJ9`H{@|D+*e~*457kd z73p<%fB^PV!Ybw@)Dr%(ZJbX}xmCStCYv#K3O32ej{$9IzM^I{6FJ8!(=azt7RWf4 z7ib0UOPqN40X!wOnFOoddd8`!_IN~9O)#HRTyjfc#&MCZ zZAMzOVB=;qwt8gV?{Y2?b=iSZG~RF~uyx18K)IDFLl})G1v@$(s{O4@RJ%OTJyF+Cpcx4jmy|F3euCnMK!P2WTDu5j z{{gD$=M*pH!GGzL%P)V2*ROm>!$Y=z|D`!_yY6e7SU$~a5q8?hZGgaYqaiLnkK%?0 zs#oI%;zOxF@g*@(V4p!$7dS1rOr6GVs6uYCTt2h)eB4?(&w8{#o)s#%gN@BBosRUe z)@P@8_Zm89pr~)b>e{tbPC~&_MR--iB{=)y;INU5#)@Gix-YpgP<-c2Ms{9zuCX|3 z!p(?VaXww&(w&uBHzoT%!A2=3HAP>SDxcljrego7rY|%hxy3XlODWffO_%g|l+7Y_ zqV(xbu)s4lV=l7M;f>vJl{`6qBm>#ZeMA}kXb97Z)?R97EkoI?x6Lp0yu1Z>PS?2{ z0QQ(8D)|lc9CO3B~e(pQM&5(1y&y=e>C^X$`)_&XuaI!IgDTVqt31wX#n+@!a_A0ZQkA zCJ2@M_4Gb5MfCrm5UPggeyh)8 zO9?`B0J#rkoCx(R0I!ko_2?iO@|oRf1;3r+i)w-2&j?=;NVIdPFsB)`|IC0zk6r9c zRrkfxWsiJ(#8QndNJj@{@WP2Ackr|r1VxV{7S&rSU(^)-M8gV>@UzOLXu9K<{6e{T zXJ6b92r$!|lwjhmgqkdswY&}c)KW4A)-ac%sU;2^fvq7gfUW4Bw$b!i@duy1CAxSn z(pyh$^Z=&O-q<{bZUP+$U}=*#M9uVc>CQVgDs4swy5&8RAHZ~$)hrTF4W zPsSa~qYv_0mJnF89RnnJTH`3}w4?~epFl=D(35$ zWa07ON$`OMBOHgCmfO(9RFc<)?$x)N}Jd2A(<*Ll7+4jrRt9w zwGxExUXd9VB#I|DwfxvJ;HZ8Q{37^wDhaZ%O!oO(HpcqfLH%#a#!~;Jl7F5>EX_=8 z{()l2NqPz>La3qJR;_v+wlK>GsHl;uRA8%j`A|yH@k5r%55S9{*Cp%uw6t`qc1!*T za2OeqtQj7sAp#Q~=5Fs&aCR9v>5V+s&RdNvo&H~6FJOjvaj--2sYYBvMq;55%z8^o z|BJDA4vzfow#DO#ZQHh;Oq_{r+qP{R9ox2TOgwQiv7Ow!zjN+A@BN;0tA2lUb#+zO z(^b89eV)D7UVE+h{mcNc6&GtpOqDn_?VAQ)Vob$hlFwW%xh>D#wml{t&Ofmm_d_+; zKDxzdr}`n2Rw`DtyIjrG)eD0vut$}dJAZ0AohZ+ZQdWXn_Z@dI_y=7t3q8x#pDI-K z2VVc&EGq445Rq-j0=U=Zx`oBaBjsefY;%)Co>J3v4l8V(T8H?49_@;K6q#r~Wwppc z4XW0(4k}cP=5ex>-Xt3oATZ~bBWKv)aw|I|Lx=9C1s~&b77idz({&q3T(Y(KbWO?+ zmcZ6?WeUsGk6>km*~234YC+2e6Zxdl~<_g2J|IE`GH%n<%PRv-50; zH{tnVts*S5*_RxFT9eM0z-pksIb^drUq4>QSww=u;UFCv2AhOuXE*V4z?MM`|ABOC4P;OfhS(M{1|c%QZ=!%rQTDFx`+}?Kdx$&FU?Y<$x;j7z=(;Lyz+?EE>ov!8vvMtSzG!nMie zsBa9t8as#2nH}n8xzN%W%U$#MHNXmDUVr@GX{?(=yI=4vks|V)!-W5jHsU|h_&+kY zS_8^kd3jlYqOoiI`ZqBVY!(UfnAGny!FowZWY_@YR0z!nG7m{{)4OS$q&YDyw6vC$ zm4!$h>*|!2LbMbxS+VM6&DIrL*X4DeMO!@#EzMVfr)e4Tagn~AQHIU8?e61TuhcKD zr!F4(kEebk(Wdk-?4oXM(rJwanS>Jc%<>R(siF+>+5*CqJLecP_we33iTFTXr6W^G z7M?LPC-qFHK;E!fxCP)`8rkxZyFk{EV;G-|kwf4b$c1k0atD?85+|4V%YATWMG|?K zLyLrws36p%Qz6{}>7b>)$pe>mR+=IWuGrX{3ZPZXF3plvuv5Huax86}KX*lbPVr}L z{C#lDjdDeHr~?l|)Vp_}T|%$qF&q#U;ClHEPVuS+Jg~NjC1RP=17=aQKGOcJ6B3mp z8?4*-fAD~}sX*=E6!}^u8)+m2j<&FSW%pYr_d|p_{28DZ#Cz0@NF=gC-o$MY?8Ca8 zr5Y8DSR^*urS~rhpX^05r30Ik#2>*dIOGxRm0#0YX@YQ%Mg5b6dXlS!4{7O_kdaW8PFSdj1=ryI-=5$fiieGK{LZ+SX(1b=MNL!q#lN zv98?fqqTUH8r8C7v(cx#BQ5P9W>- zmW93;eH6T`vuJ~rqtIBg%A6>q>gnWb3X!r0wh_q;211+Om&?nvYzL1hhtjB zK_7G3!n7PL>d!kj){HQE zE8(%J%dWLh1_k%gVXTZt zEdT09XSKAx27Ncaq|(vzL3gm83q>6CAw<$fTnMU05*xAe&rDfCiu`u^1)CD<>sx0i z*hr^N_TeN89G(nunZoLBf^81#pmM}>JgD@Nn1l*lN#a=B=9pN%tmvYFjFIoKe_(GF z-26x{(KXdfsQL7Uv6UtDuYwV`;8V3w>oT_I<`Ccz3QqK9tYT5ZQzbop{=I=!pMOCb zCU68`n?^DT%^&m>A%+-~#lvF!7`L7a{z<3JqIlk1$<||_J}vW1U9Y&eX<}l8##6i( zZcTT@2`9(Mecptm@{3A_Y(X`w9K0EwtPq~O!16bq{7c0f7#(3wn-^)h zxV&M~iiF!{-6A@>o;$RzQ5A50kxXYj!tcgme=Qjrbje~;5X2xryU;vH|6bE(8z^<7 zQ>BG7_c*JG8~K7Oe68i#0~C$v?-t@~@r3t2inUnLT(c=URpA9kA8uq9PKU(Ps(LVH zqgcqW>Gm?6oV#AldDPKVRcEyQIdTT`Qa1j~vS{<;SwyTdr&3*t?J)y=M7q*CzucZ&B0M=joT zBbj@*SY;o2^_h*>R0e({!QHF0=)0hOj^B^d*m>SnRrwq>MolNSgl^~r8GR#mDWGYEIJA8B<|{{j?-7p zVnV$zancW3&JVDtVpIlI|5djKq0(w$KxEFzEiiL=h5Jw~4Le23@s(mYyXWL9SX6Ot zmb)sZaly_P%BeX_9 zw&{yBef8tFm+%=--m*J|o~+Xg3N+$IH)t)=fqD+|fEk4AAZ&!wcN5=mi~Vvo^i`}> z#_3ahR}Ju)(Px7kev#JGcSwPXJ2id9%Qd2A#Uc@t8~egZ8;iC{e! z%=CGJOD1}j!HW_sgbi_8suYnn4#Ou}%9u)dXd3huFIb!ytlX>Denx@pCS-Nj$`VO&j@(z!kKSP0hE4;YIP#w9ta=3DO$7f*x zc9M4&NK%IrVmZAe=r@skWD`AEWH=g+r|*13Ss$+{c_R!b?>?UaGXlw*8qDmY#xlR= z<0XFbs2t?8i^G~m?b|!Hal^ZjRjt<@a? z%({Gn14b4-a|#uY^=@iiKH+k?~~wTj5K1A&hU z2^9-HTC)7zpoWK|$JXaBL6C z#qSNYtY>65T@Zs&-0cHeu|RX(Pxz6vTITdzJdYippF zC-EB+n4}#lM7`2Ry~SO>FxhKboIAF#Z{1wqxaCb{#yEFhLuX;Rx(Lz%T`Xo1+a2M}7D+@wol2)OJs$TwtRNJ={( zD@#zTUEE}#Fz#&(EoD|SV#bayvr&E0vzmb%H?o~46|FAcx?r4$N z&67W3mdip-T1RIxwSm_&(%U|+WvtGBj*}t69XVd&ebn>KOuL(7Y8cV?THd-(+9>G7*Nt%T zcH;`p={`SOjaf7hNd(=37Lz3-51;58JffzIPgGs_7xIOsB5p2t&@v1mKS$2D$*GQ6 zM(IR*j4{nri7NMK9xlDy-hJW6sW|ZiDRaFiayj%;(%51DN!ZCCCXz+0Vm#};70nOx zJ#yA0P3p^1DED;jGdPbQWo0WATN=&2(QybbVdhd=Vq*liDk`c7iZ?*AKEYC#SY&2g z&Q(Ci)MJ{mEat$ZdSwTjf6h~roanYh2?9j$CF@4hjj_f35kTKuGHvIs9}Re@iKMxS-OI*`0S z6s)fOtz}O$T?PLFVSeOjSO26$@u`e<>k(OSP!&YstH3ANh>)mzmKGNOwOawq-MPXe zy4xbeUAl6tamnx))-`Gi2uV5>9n(73yS)Ukma4*7fI8PaEwa)dWHs6QA6>$}7?(L8 ztN8M}?{Tf!Zu22J5?2@95&rQ|F7=FK-hihT-vDp!5JCcWrVogEnp;CHenAZ)+E+K5 z$Cffk5sNwD_?4+ymgcHR(5xgt20Z8M`2*;MzOM#>yhk{r3x=EyM226wb&!+j`W<%* zSc&|`8!>dn9D@!pYow~(DsY_naSx7(Z4i>cu#hA5=;IuI88}7f%)bRkuY2B;+9Uep zpXcvFWkJ!mQai63BgNXG26$5kyhZ2&*3Q_tk)Ii4M>@p~_~q_cE!|^A;_MHB;7s#9 zKzMzK{lIxotjc};k67^Xsl-gS!^*m*m6kn|sbdun`O?dUkJ{0cmI0-_2y=lTAfn*Y zKg*A-2sJq)CCJgY0LF-VQvl&6HIXZyxo2#!O&6fOhbHXC?%1cMc6y^*dOS{f$=137Ds1m01qs`>iUQ49JijsaQ( zksqV9@&?il$|4Ua%4!O15>Zy&%gBY&wgqB>XA3!EldQ%1CRSM(pp#k~-pkcCg4LAT zXE=puHbgsw)!xtc@P4r~Z}nTF=D2~j(6D%gTBw$(`Fc=OOQ0kiW$_RDd=hcO0t97h zb86S5r=>(@VGy1&#S$Kg_H@7G^;8Ue)X5Y+IWUi`o;mpvoV)`fcVk4FpcT|;EG!;? zHG^zrVVZOm>1KFaHlaogcWj(v!S)O(Aa|Vo?S|P z5|6b{qkH(USa*Z7-y_Uvty_Z1|B{rTS^qmEMLEYUSk03_Fg&!O3BMo{b^*`3SHvl0 zhnLTe^_vVIdcSHe)SQE}r~2dq)VZJ!aSKR?RS<(9lzkYo&dQ?mubnWmgMM37Nudwo z3Vz@R{=m2gENUE3V4NbIzAA$H1z0pagz94-PTJyX{b$yndsdKptmlKQKaaHj@3=ED zc7L?p@%ui|RegVYutK$64q4pe9+5sv34QUpo)u{1ci?)_7gXQd{PL>b0l(LI#rJmN zGuO+%GO`xneFOOr4EU(Wg}_%bhzUf;d@TU+V*2#}!2OLwg~%D;1FAu=Un>OgjPb3S z7l(riiCwgghC=Lm5hWGf5NdGp#01xQ59`HJcLXbUR3&n%P(+W2q$h2Qd z*6+-QXJ*&Kvk9ht0f0*rO_|FMBALen{j7T1l%=Q>gf#kma zQlg#I9+HB+z*5BMxdesMND`_W;q5|FaEURFk|~&{@qY32N$G$2B=&Po{=!)x5b!#n zxLzblkq{yj05#O7(GRuT39(06FJlalyv<#K4m}+vs>9@q-&31@1(QBv82{}Zkns~K ze{eHC_RDX0#^A*JQTwF`a=IkE6Ze@j#-8Q`tTT?k9`^ZhA~3eCZJ-Jr{~7Cx;H4A3 zcZ+Zj{mzFZbVvQ6U~n>$U2ZotGsERZ@}VKrgGh0xM;Jzt29%TX6_&CWzg+YYMozrM z`nutuS)_0dCM8UVaKRj804J4i%z2BA_8A4OJRQ$N(P9Mfn-gF;4#q788C@9XR0O3< zsoS4wIoyt046d+LnSCJOy@B@Uz*#GGd#+Ln1ek5Dv>(ZtD@tgZlPnZZJGBLr^JK+!$$?A_fA3LOrkoDRH&l7 zcMcD$Hsjko3`-{bn)jPL6E9Ds{WskMrivsUu5apD z?grQO@W7i5+%X&E&p|RBaEZ(sGLR@~(y^BI@lDMot^Ll?!`90KT!JXUhYS`ZgX3jnu@Ja^seA*M5R@f`=`ynQV4rc$uT1mvE?@tz)TN<=&H1%Z?5yjxcpO+6y_R z6EPuPKM5uxKpmZfT(WKjRRNHs@ib)F5WAP7QCADvmCSD#hPz$V10wiD&{NXyEwx5S z6NE`3z!IS^$s7m}PCwQutVQ#~w+V z=+~->DI*bR2j0^@dMr9`p>q^Ny~NrAVxrJtX2DUveic5vM%#N*XO|?YAWwNI$Q)_) zvE|L(L1jP@F%gOGtnlXtIv2&1i8q<)Xfz8O3G^Ea~e*HJsQgBxWL(yuLY+jqUK zRE~`-zklrGog(X}$9@ZVUw!8*=l`6mzYLtsg`AvBYz(cxmAhr^j0~(rzXdiOEeu_p zE$sf2(w(BPAvO5DlaN&uQ$4@p-b?fRs}d7&2UQ4Fh?1Hzu*YVjcndqJLw0#q@fR4u zJCJ}>_7-|QbvOfylj+e^_L`5Ep9gqd>XI3-O?Wp z-gt*P29f$Tx(mtS`0d05nHH=gm~Po_^OxxUwV294BDKT>PHVlC5bndncxGR!n(OOm znsNt@Q&N{TLrmsoKFw0&_M9$&+C24`sIXGWgQaz=kY;S{?w`z^Q0JXXBKFLj0w0U6P*+jPKyZHX9F#b0D1$&(- zrm8PJd?+SrVf^JlfTM^qGDK&-p2Kdfg?f>^%>1n8bu&byH(huaocL>l@f%c*QkX2i znl}VZ4R1en4S&Bcqw?$=Zi7ohqB$Jw9x`aM#>pHc0x z0$!q7iFu zZ`tryM70qBI6JWWTF9EjgG@>6SRzsd}3h+4D8d~@CR07P$LJ}MFsYi-*O%XVvD@yT|rJ+Mk zDllJ7$n0V&A!0flbOf)HE6P_afPWZmbhpliqJuw=-h+r;WGk|ntkWN(8tKlYpq5Ow z(@%s>IN8nHRaYb*^d;M(D$zGCv5C|uqmsDjwy4g=Lz>*OhO3z=)VD}C<65;`89Ye} zSCxrv#ILzIpEx1KdLPlM&%Cctf@FqTKvNPXC&`*H9=l=D3r!GLM?UV zOxa(8ZsB`&+76S-_xuj?G#wXBfDY@Z_tMpXJS7^mp z@YX&u0jYw2A+Z+bD#6sgVK5ZgdPSJV3>{K^4~%HV?rn~4D)*2H!67Y>0aOmzup`{D zzDp3c9yEbGCY$U<8biJ_gB*`jluz1ShUd!QUIQJ$*1;MXCMApJ^m*Fiv88RZ zFopLViw}{$Tyhh_{MLGIE2~sZ)t0VvoW%=8qKZ>h=adTe3QM$&$PO2lfqH@brt!9j ziePM8$!CgE9iz6B<6_wyTQj?qYa;eC^{x_0wuwV~W+^fZmFco-o%wsKSnjXFEx02V zF5C2t)T6Gw$Kf^_c;Ei3G~uC8SM-xyycmXyC2hAVi-IfXqhu$$-C=*|X?R0~hu z8`J6TdgflslhrmDZq1f?GXF7*ALeMmOEpRDg(s*H`4>_NAr`2uqF;k;JQ+8>A|_6ZNsNLECC%NNEb1Y1dP zbIEmNpK)#XagtL4R6BC{C5T(+=yA-(Z|Ap}U-AfZM#gwVpus3(gPn}Q$CExObJ5AC z)ff9Yk?wZ}dZ-^)?cbb9Fw#EjqQ8jxF4G3=L?Ra zg_)0QDMV1y^A^>HRI$x?Op@t;oj&H@1xt4SZ9(kifQ zb59B*`M99Td7@aZ3UWvj1rD0sE)d=BsBuW*KwkCds7ay(7*01_+L}b~7)VHI>F_!{ zyxg-&nCO?v#KOUec0{OOKy+sjWA;8rTE|Lv6I9H?CI?H(mUm8VXGwU$49LGpz&{nQp2}dinE1@lZ1iox6{ghN&v^GZv9J${7WaXj)<0S4g_uiJ&JCZ zr8-hsu`U%N;+9N^@&Q0^kVPB3)wY(rr}p7{p0qFHb3NUUHJb672+wRZs`gd1UjKPX z4o6zljKKA+Kkj?H>Ew63o%QjyBk&1!P22;MkD>sM0=z_s-G{mTixJCT9@_|*(p^bz zJ8?ZZ&;pzV+7#6Mn`_U-)k8Pjg?a;|Oe^us^PoPY$Va~yi8|?+&=y$f+lABT<*pZr zP}D{~Pq1Qyni+@|aP;ixO~mbEW9#c0OU#YbDZIaw=_&$K%Ep2f%hO^&P67hApZe`x zv8b`Mz@?M_7-)b!lkQKk)JXXUuT|B8kJlvqRmRpxtQDgvrHMXC1B$M@Y%Me!BSx3P z#2Eawl$HleZhhTS6Txm>lN_+I`>eV$&v9fOg)%zVn3O5mI*lAl>QcHuW6!Kixmq`X zBCZ*Ck6OYtDiK!N47>jxI&O2a9x7M|i^IagRr-fmrmikEQGgw%J7bO|)*$2FW95O4 zeBs>KR)izRG1gRVL;F*sr8A}aRHO0gc$$j&ds8CIO1=Gwq1%_~E)CWNn9pCtBE}+`Jelk4{>S)M)`Ll=!~gnn1yq^EX(+y*ik@3Ou0qU`IgYi3*doM+5&dU!cho$pZ zn%lhKeZkS72P?Cf68<#kll_6OAO26bIbueZx**j6o;I0cS^XiL`y+>{cD}gd%lux} z)3N>MaE24WBZ}s0ApfdM;5J_Ny}rfUyxfkC``Awo2#sgLnGPewK};dORuT?@I6(5~ z?kE)Qh$L&fwJXzK){iYx!l5$Tt|^D~MkGZPA}(o6f7w~O2G6Vvzdo*a;iXzk$B66$ zwF#;wM7A+(;uFG4+UAY(2`*3XXx|V$K8AYu#ECJYSl@S=uZW$ksfC$~qrrbQj4??z-)uz0QL}>k^?fPnJTPw% zGz)~?B4}u0CzOf@l^um}HZzbaIwPmb<)< zi_3@E9lc)Qe2_`*Z^HH;1CXOceL=CHpHS{HySy3T%<^NrWQ}G0i4e1xm_K3(+~oi$ zoHl9wzb?Z4j#90DtURtjtgvi7uw8DzHYmtPb;?%8vb9n@bszT=1qr)V_>R%s!92_` zfnHQPANx z<#hIjIMm#*(v*!OXtF+w8kLu`o?VZ5k7{`vw{Yc^qYclpUGIM_PBN1+c{#Vxv&E*@ zxg=W2W~JuV{IuRYw3>LSI1)a!thID@R=bU+cU@DbR^_SXY`MC7HOsCN z!dO4OKV7(E_Z8T#8MA1H`99?Z!r0)qKW_#|29X3#Jb+5+>qUidbeP1NJ@)(qi2S-X zao|f0_tl(O+$R|Qwd$H{_ig|~I1fbp_$NkI!0E;Y z6JrnU{1Ra6^on{9gUUB0mwzP3S%B#h0fjo>JvV~#+X0P~JV=IG=yHG$O+p5O3NUgG zEQ}z6BTp^Fie)Sg<){Z&I8NwPR(=mO4joTLHkJ>|Tnk23E(Bo`FSbPc05lF2-+)X? z6vV3*m~IBHTy*^E!<0nA(tCOJW2G4DsH7)BxLV8kICn5lu6@U*R`w)o9;Ro$i8=Q^V%uH8n3q=+Yf;SFRZu z!+F&PKcH#8cG?aSK_Tl@K9P#8o+jry@gdexz&d(Q=47<7nw@e@FFfIRNL9^)1i@;A z28+$Z#rjv-wj#heI|<&J_DiJ*s}xd-f!{J8jfqOHE`TiHHZVIA8CjkNQ_u;Ery^^t zl1I75&u^`1_q)crO+JT4rx|z2ToSC>)Or@-D zy3S>jW*sNIZR-EBsfyaJ+Jq4BQE4?SePtD2+jY8*%FsSLZ9MY>+wk?}}}AFAw)vr{ml)8LUG-y9>^t!{~|sgpxYc0Gnkg`&~R z-pilJZjr@y5$>B=VMdZ73svct%##v%wdX~9fz6i3Q-zOKJ9wso+h?VME7}SjL=!NUG{J?M&i!>ma`eoEa@IX`5G>B1(7;%}M*%-# zfhJ(W{y;>MRz!Ic8=S}VaBKqh;~7KdnGEHxcL$kA-6E~=!hrN*zw9N+_=odt<$_H_8dbo;0=42wcAETPCVGUr~v(`Uai zb{=D!Qc!dOEU6v)2eHSZq%5iqK?B(JlCq%T6av$Cb4Rko6onlG&?CqaX7Y_C_cOC3 zYZ;_oI(}=>_07}Oep&Ws7x7-R)cc8zfe!SYxJYP``pi$FDS)4Fvw5HH=FiU6xfVqIM!hJ;Rx8c0cB7~aPtNH(Nmm5Vh{ibAoU#J6 zImRCr?(iyu_4W_6AWo3*vxTPUw@vPwy@E0`(>1Qi=%>5eSIrp^`` zK*Y?fK_6F1W>-7UsB)RPC4>>Ps9)f+^MqM}8AUm@tZ->j%&h1M8s*s!LX5&WxQcAh z8mciQej@RPm?660%>{_D+7er>%zX_{s|$Z+;G7_sfNfBgY(zLB4Ey}J9F>zX#K0f6 z?dVNIeEh?EIShmP6>M+d|0wMM85Sa4diw1hrg|ITJ}JDg@o8y>(rF9mXk5M z2@D|NA)-7>wD&wF;S_$KS=eE84`BGw3g0?6wGxu8ys4rwI?9U=*^VF22t3%mbGeOh z`!O-OpF7#Vceu~F`${bW0nYVU9ecmk31V{tF%iv&5hWofC>I~cqAt@u6|R+|HLMMX zVxuSlMFOK_EQ86#E8&KwxIr8S9tj_goWtLv4f@!&h8;Ov41{J~496vp9vX=(LK#j! zAwi*21RAV-LD>9Cw3bV_9X(X3)Kr0-UaB*7Y>t82EQ%!)(&(XuAYtTsYy-dz+w=$ir)VJpe!_$ z6SGpX^i(af3{o=VlFPC);|J8#(=_8#vdxDe|Cok+ANhYwbE*FO`Su2m1~w+&9<_9~ z-|tTU_ACGN`~CNW5WYYBn^B#SwZ(t4%3aPp z;o)|L6Rk569KGxFLUPx@!6OOa+5OjQLK5w&nAmwxkC5rZ|m&HT8G%GVZxB_@ME z>>{rnXUqyiJrT(8GMj_ap#yN_!9-lO5e8mR3cJiK3NE{_UM&=*vIU`YkiL$1%kf+1 z4=jk@7EEj`u(jy$HnzE33ZVW_J4bj}K;vT?T91YlO(|Y0FU4r+VdbmQ97%(J5 zkK*Bed8+C}FcZ@HIgdCMioV%A<*4pw_n}l*{Cr4}a(lq|injK#O?$tyvyE`S%(1`H z_wwRvk#13ElkZvij2MFGOj`fhy?nC^8`Zyo%yVcUAfEr8x&J#A{|moUBAV_^f$hpaUuyQeY3da^ zS9iRgf87YBwfe}>BO+T&Fl%rfpZh#+AM?Dq-k$Bq`vG6G_b4z%Kbd&v>qFjow*mBl z-OylnqOpLg}or7_VNwRg2za3VBK6FUfFX{|TD z`Wt0Vm2H$vdlRWYQJqDmM?JUbVqL*ZQY|5&sY*?!&%P8qhA~5+Af<{MaGo(dl&C5t zE%t!J0 zh6jqANt4ABdPxSTrVV}fLsRQal*)l&_*rFq(Ez}ClEH6LHv{J#v?+H-BZ2)Wy{K@9 z+ovXHq~DiDvm>O~r$LJo!cOuwL+Oa--6;UFE2q@g3N8Qkw5E>ytz^(&($!O47+i~$ zKM+tkAd-RbmP{s_rh+ugTD;lriL~`Xwkad#;_aM?nQ7L_muEFI}U_4$phjvYgleK~`Fo`;GiC07&Hq1F<%p;9Q;tv5b?*QnR%8DYJH3P>Svmv47Y>*LPZJy8_{9H`g6kQpyZU{oJ`m%&p~D=K#KpfoJ@ zn-3cqmHsdtN!f?~w+(t+I`*7GQA#EQC^lUA9(i6=i1PqSAc|ha91I%X&nXzjYaM{8$s&wEx@aVkQ6M{E2 zfzId#&r(XwUNtPcq4Ngze^+XaJA1EK-%&C9j>^9(secqe{}z>hR5CFNveMsVA)m#S zk)_%SidkY-XmMWlVnQ(mNJ>)ooszQ#vaK;!rPmGKXV7am^_F!Lz>;~{VrIO$;!#30XRhE1QqO_~#+Ux;B_D{Nk=grn z8Y0oR^4RqtcYM)7a%@B(XdbZCOqnX#fD{BQTeLvRHd(irHKq=4*jq34`6@VAQR8WG z^%)@5CXnD_T#f%@-l${>y$tfb>2LPmc{~5A82|16mH)R?&r#KKLs7xpN-D`=&Cm^R zvMA6#Ahr<3X>Q7|-qfTY)}32HkAz$_mibYV!I)u>bmjK`qwBe(>za^0Kt*HnFbSdO z1>+ryKCNxmm^)*$XfiDOF2|{-v3KKB?&!(S_Y=Ht@|ir^hLd978xuI&N{k>?(*f8H z=ClxVJK_%_z1TH0eUwm2J+2To7FK4o+n_na)&#VLn1m;!+CX+~WC+qg1?PA~KdOlC zW)C@pw75_xoe=w7i|r9KGIvQ$+3K?L{7TGHwrQM{dCp=Z*D}3kX7E-@sZnup!BImw z*T#a=+WcTwL78exTgBn|iNE3#EsOorO z*kt)gDzHiPt07fmisA2LWN?AymkdqTgr?=loT7z@d`wnlr6oN}@o|&JX!yPzC*Y8d zu6kWlTzE1)ckyBn+0Y^HMN+GA$wUO_LN6W>mxCo!0?oiQvT`z$jbSEu&{UHRU0E8# z%B^wOc@S!yhMT49Y)ww(Xta^8pmPCe@eI5C*ed96)AX9<>))nKx0(sci8gwob_1}4 z0DIL&vsJ1_s%<@y%U*-eX z5rN&(zef-5G~?@r79oZGW1d!WaTqQn0F6RIOa9tJ=0(kdd{d1{<*tHT#cCvl*i>YY zH+L7jq8xZNcTUBqj(S)ztTU!TM!RQ}In*n&Gn<>(60G7}4%WQL!o>hbJqNDSGwl#H z`4k+twp0cj%PsS+NKaxslAEu9!#U3xT1|_KB6`h=PI0SW`P9GTa7caD1}vKEglV8# zjKZR`pluCW19c2fM&ZG)c3T3Um;ir3y(tSCJ7Agl6|b524dy5El{^EQBG?E61H0XY z`bqg!;zhGhyMFl&(o=JWEJ8n~z)xI}A@C0d2hQGvw7nGv)?POU@(kS1m=%`|+^ika zXl8zjS?xqW$WlO?Ewa;vF~XbybHBor$f<%I&*t$F5fynwZlTGj|IjZtVfGa7l&tK} zW>I<69w(cZLu)QIVG|M2xzW@S+70NinQzk&Y0+3WT*cC)rx~04O-^<{JohU_&HL5XdUKW!uFy|i$FB|EMu0eUyW;gsf`XfIc!Z0V zeK&*hPL}f_cX=@iv>K%S5kL;cl_$v?n(Q9f_cChk8Lq$glT|=e+T*8O4H2n<=NGmn z+2*h+v;kBvF>}&0RDS>)B{1!_*XuE8A$Y=G8w^qGMtfudDBsD5>T5SB;Qo}fSkkiV ze^K^M(UthkwrD!&*tTsu>Dacdj_q`~V%r_twr$(Ct&_dKeeXE?fA&4&yASJWJ*}~- zel=@W)tusynfC_YqH4ll>4Eg`Xjs5F7Tj>tTLz<0N3)X<1px_d2yUY>X~y>>93*$) z5PuNMQLf9Bu?AAGO~a_|J2akO1M*@VYN^VxvP0F$2>;Zb9;d5Yfd8P%oFCCoZE$ z4#N$^J8rxYjUE_6{T%Y>MmWfHgScpuGv59#4u6fpTF%~KB^Ae`t1TD_^Ud#DhL+Dm zbY^VAM#MrAmFj{3-BpVSWph2b_Y6gCnCAombVa|1S@DU)2r9W<> zT5L8BB^er3zxKt1v(y&OYk!^aoQisqU zH(g@_o)D~BufUXcPt!Ydom)e|aW{XiMnes2z&rE?og>7|G+tp7&^;q?Qz5S5^yd$i z8lWr4g5nctBHtigX%0%XzIAB8U|T6&JsC4&^hZBw^*aIcuNO47de?|pGXJ4t}BB`L^d8tD`H`i zqrP8?#J@8T#;{^B!KO6J=@OWKhAerih(phML`(Rg7N1XWf1TN>=Z3Do{l_!d~DND&)O)D>ta20}@Lt77qSnVsA7>)uZAaT9bsB>u&aUQl+7GiY2|dAEg@%Al3i316y;&IhQL^8fw_nwS>f60M_-m+!5)S_6EPM7Y)(Nq^8gL7(3 zOiot`6Wy6%vw~a_H?1hLVzIT^i1;HedHgW9-P#)}Y6vF%C=P70X0Tk^z9Te@kPILI z_(gk!k+0%CG)%!WnBjjw*kAKs_lf#=5HXC00s-}oM-Q1aXYLj)(1d!_a7 z*Gg4Fe6F$*ujVjI|79Z5+Pr`us%zW@ln++2l+0hsngv<{mJ%?OfSo_3HJXOCys{Ug z00*YR-(fv<=&%Q!j%b-_ppA$JsTm^_L4x`$k{VpfLI(FMCap%LFAyq;#ns5bR7V+x zO!o;c5y~DyBPqdVQX)8G^G&jWkBy2|oWTw>)?5u}SAsI$RjT#)lTV&Rf8;>u*qXnb z8F%Xb=7#$m)83z%`E;49)t3fHInhtc#kx4wSLLms!*~Z$V?bTyUGiS&m>1P(952(H zuHdv=;o*{;5#X-uAyon`hP}d#U{uDlV?W?_5UjJvf%11hKwe&(&9_~{W)*y1nR5f_ z!N(R74nNK`y8>B!0Bt_Vr!;nc3W>~RiKtGSBkNlsR#-t^&;$W#)f9tTlZz>n*+Fjz z3zXZ;jf(sTM(oDzJt4FJS*8c&;PLTW(IQDFs_5QPy+7yhi1syPCarvqrHFcf&yTy)^O<1EBx;Ir`5W{TIM>{8w&PB>ro4;YD<5LF^TjTb0!zAP|QijA+1Vg>{Afv^% zmrkc4o6rvBI;Q8rj4*=AZacy*n8B{&G3VJc)so4$XUoie0)vr;qzPZVbb<#Fc=j+8CGBWe$n|3K& z_@%?{l|TzKSlUEO{U{{%Fz_pVDxs7i9H#bnbCw7@4DR=}r_qV!Zo~CvD4ZI*+j3kO zW6_=|S`)(*gM0Z;;}nj`73OigF4p6_NPZQ-Od~e$c_);;4-7sR>+2u$6m$Gf%T{aq zle>e3(*Rt(TPD}03n5)!Ca8Pu!V}m6v0o1;5<1h$*|7z|^(3$Y&;KHKTT}hV056wuF0Xo@mK-52~r=6^SI1NC%c~CC?n>yX6wPTgiWYVz!Sx^atLby9YNn1Rk{g?|pJaxD4|9cUf|V1_I*w zzxK)hRh9%zOl=*$?XUjly5z8?jPMy%vEN)f%T*|WO|bp5NWv@B(K3D6LMl!-6dQg0 zXNE&O>Oyf%K@`ngCvbGPR>HRg5!1IV$_}m@3dWB7x3t&KFyOJn9pxRXCAzFr&%37wXG;z^xaO$ekR=LJG ztIHpY8F5xBP{mtQidqNRoz= z@){+N3(VO5bD+VrmS^YjG@+JO{EOIW)9=F4v_$Ed8rZtHvjpiEp{r^c4F6Ic#ChlC zJX^DtSK+v(YdCW)^EFcs=XP7S>Y!4=xgmv>{S$~@h=xW-G4FF9?I@zYN$e5oF9g$# zb!eVU#J+NjLyX;yb)%SY)xJdvGhsnE*JEkuOVo^k5PyS=o#vq!KD46UTW_%R=Y&0G zFj6bV{`Y6)YoKgqnir2&+sl+i6foAn-**Zd1{_;Zb7Ki=u394C5J{l^H@XN`_6XTKY%X1AgQM6KycJ+= zYO=&t#5oSKB^pYhNdzPgH~aEGW2=ec1O#s-KG z71}LOg@4UEFtp3GY1PBemXpNs6UK-ax*)#$J^pC_me;Z$Je(OqLoh|ZrW*mAMBFn< zHttjwC&fkVfMnQeen8`Rvy^$pNRFVaiEN4Pih*Y3@jo!T0nsClN)pdrr9AYLcZxZ| zJ5Wlj+4q~($hbtuY zVQ7hl>4-+@6g1i`1a)rvtp-;b0>^`Dloy(#{z~ytgv=j4q^Kl}wD>K_Y!l~ zp(_&7sh`vfO(1*MO!B%<6E_bx1)&s+Ae`O)a|X=J9y~XDa@UB`m)`tSG4AUhoM=5& znWoHlA-(z@3n0=l{E)R-p8sB9XkV zZ#D8wietfHL?J5X0%&fGg@MH~(rNS2`GHS4xTo7L$>TPme+Is~!|79=^}QbPF>m%J zFMkGzSndiPO|E~hrhCeo@&Ea{M(ieIgRWMf)E}qeTxT8Q#g-!Lu*x$v8W^M^>?-g= zwMJ$dThI|~M06rG$Sv@C@tWR>_YgaG&!BAbkGggVQa#KdtDB)lMLNVLN|51C@F^y8 zCRvMB^{GO@j=cHfmy}_pCGbP%xb{pNN>? z?7tBz$1^zVaP|uaatYaIN+#xEN4jBzwZ|YI_)p(4CUAz1ZEbDk>J~Y|63SZaak~#0 zoYKruYsWHoOlC1(MhTnsdUOwQfz5p6-D0}4;DO$B;7#M{3lSE^jnTT;ns`>!G%i*F?@pR1JO{QTuD0U+~SlZxcc8~>IB{)@8p`P&+nDxNj`*gh|u?yrv$phpQcW)Us)bi`kT%qLj(fi{dWRZ%Es2!=3mI~UxiW0$-v3vUl?#g{p6eF zMEUAqo5-L0Ar(s{VlR9g=j7+lt!gP!UN2ICMokAZ5(Agd>})#gkA2w|5+<%-CuEP# zqgcM}u@3(QIC^Gx<2dbLj?cFSws_f3e%f4jeR?4M^M3cx1f+Qr6ydQ>n)kz1s##2w zk}UyQc+Z5G-d-1}{WzjkLXgS-2P7auWSJ%pSnD|Uivj5u!xk0 z_^-N9r9o;(rFDt~q1PvE#iJZ_f>J3gcP$)SOqhE~pD2|$=GvpL^d!r z6u=sp-CrMoF7;)}Zd7XO4XihC4ji?>V&(t^?@3Q&t9Mx=qex6C9d%{FE6dvU6%d94 zIE;hJ1J)cCqjv?F``7I*6bc#X)JW2b4f$L^>j{*$R`%5VHFi*+Q$2;nyieduE}qdS{L8y8F08yLs?w}{>8>$3236T-VMh@B zq-nujsb_1aUv_7g#)*rf9h%sFj*^mIcImRV*k~Vmw;%;YH(&ylYpy!&UjUVqqtfG` zox3esju?`unJJA_zKXRJP)rA3nXc$m^{S&-p|v|-0x9LHJm;XIww7C#R$?00l&Yyj z=e}gKUOpsImwW?N)+E(awoF@HyP^EhL+GlNB#k?R<2>95hz!h9sF@U20DHSB3~WMa zk90+858r@-+vWwkawJ)8ougd(i#1m3GLN{iSTylYz$brAsP%=&m$mQQrH$g%3-^VR zE%B`Vi&m8f3T~&myTEK28BDWCVzfWir1I?03;pX))|kY5ClO^+bae z*7E?g=3g7EiisYOrE+lA)2?Ln6q2*HLNpZEWMB|O-JI_oaHZB%CvYB(%=tU= zE*OY%QY58fW#RG5=gm0NR#iMB=EuNF@)%oZJ}nmm=tsJ?eGjia{e{yuU0l3{d^D@)kVDt=1PE)&tf_hHC%0MB znL|CRCPC}SeuVTdf>-QV70`0(EHizc21s^sU>y%hW0t!0&y<7}Wi-wGy>m%(-jsDj zP?mF|>p_K>liZ6ZP(w5(|9Ga%>tLgb$|doDDfkdW>Z z`)>V2XC?NJT26mL^@ zf+IKr27TfM!UbZ@?zRddC7#6ss1sw%CXJ4FWC+t3lHZupzM77m^=9 z&(a?-LxIq}*nvv)y?27lZ{j zifdl9hyJudyP2LpU$-kXctshbJDKS{WfulP5Dk~xU4Le4c#h^(YjJit4#R8_khheS z|8(>2ibaHES4+J|DBM7I#QF5u-*EdN{n=Kt@4Zt?@Tv{JZA{`4 zU#kYOv{#A&gGPwT+$Ud}AXlK3K7hYzo$(fBSFjrP{QQ zeaKg--L&jh$9N}`pu{Bs>?eDFPaWY4|9|foN%}i;3%;@4{dc+iw>m}{3rELqH21G! z`8@;w-zsJ1H(N3%|1B@#ioLOjib)j`EiJqPQVSbPSPVHCj6t5J&(NcWzBrzCiDt{4 zdlPAUKldz%6x5II1H_+jv)(xVL+a;P+-1hv_pM>gMRr%04@k;DTokASSKKhU1Qms| zrWh3a!b(J3n0>-tipg{a?UaKsP7?+|@A+1WPDiQIW1Sf@qDU~M_P65_s}7(gjTn0X zucyEm)o;f8UyshMy&>^SC3I|C6jR*R_GFwGranWZe*I>K+0k}pBuET&M~ z;Odo*ZcT?ZpduHyrf8E%IBFtv;JQ!N_m>!sV6ly$_1D{(&nO~w)G~Y`7sD3#hQk%^ zp}ucDF_$!6DAz*PM8yE(&~;%|=+h(Rn-=1Wykas_-@d&z#=S}rDf`4w(rVlcF&lF! z=1)M3YVz7orwk^BXhslJ8jR);sh^knJW(Qmm(QdSgIAIdlN4Te5KJisifjr?eB{FjAX1a0AB>d?qY4Wx>BZ8&}5K0fA+d{l8 z?^s&l8#j7pR&ijD?0b%;lL9l$P_mi2^*_OL+b}4kuLR$GAf85sOo02?Y#90}CCDiS zZ%rbCw>=H~CBO=C_JVV=xgDe%b4FaEFtuS7Q1##y686r%F6I)s-~2(}PWK|Z8M+Gu zl$y~5@#0Ka%$M<&Cv%L`a8X^@tY&T7<0|(6dNT=EsRe0%kp1Qyq!^43VAKYnr*A5~ zsI%lK1ewqO;0TpLrT9v}!@vJK{QoVa_+N4FYT#h?Y8rS1S&-G+m$FNMP?(8N`MZP zels(*?kK{{^g9DOzkuZXJ2;SrOQsp9T$hwRB1(phw1c7`!Q!by?Q#YsSM#I12RhU{$Q+{xj83axHcftEc$mNJ8_T7A-BQc*k(sZ+~NsO~xAA zxnbb%dam_fZlHvW7fKXrB~F&jS<4FD2FqY?VG?ix*r~MDXCE^WQ|W|WM;gsIA4lQP zJ2hAK@CF*3*VqPr2eeg6GzWFlICi8S>nO>5HvWzyZTE)hlkdC_>pBej*>o0EOHR|) z$?};&I4+_?wvL*g#PJ9)!bc#9BJu1(*RdNEn>#Oxta(VWeM40ola<0aOe2kSS~{^P zDJBd}0L-P#O-CzX*%+$#v;(x%<*SPgAje=F{Zh-@ucd2DA(yC|N_|ocs*|-!H%wEw z@Q!>siv2W;C^^j^59OAX03&}&D*W4EjCvfi(ygcL#~t8XGa#|NPO+*M@Y-)ctFA@I z-p7npT1#5zOLo>7q?aZpCZ=iecn3QYklP;gF0bq@>oyBq94f6C=;Csw3PkZ|5q=(c zfs`aw?II0e(h=|7o&T+hq&m$; zBrE09Twxd9BJ2P+QPN}*OdZ-JZV7%av@OM7v!!NL8R;%WFq*?{9T3{ct@2EKgc8h) zMxoM$SaF#p<`65BwIDfmXG6+OiK0e)`I=!A3E`+K@61f}0e z!2a*FOaDrOe>U`q%K!QN`&=&0C~)CaL3R4VY(NDt{Xz(Xpqru5=r#uQN1L$Je1*dkdqQ*=lofQaN%lO!<5z9ZlHgxt|`THd>2 zsWfU$9=p;yLyJyM^t zS2w9w?Bpto`@H^xJpZDKR1@~^30Il6oFGfk5%g6w*C+VM)+%R@gfIwNprOV5{F^M2 zO?n3DEzpT+EoSV-%OdvZvNF+pDd-ZVZ&d8 zKeIyrrfPN=EcFRCPEDCVflX#3-)Ik_HCkL(ejmY8vzcf-MTA{oHk!R2*36`O68$7J zf}zJC+bbQk--9Xm!u#lgLvx8TXx2J258E5^*IZ(FXMpq$2LUUvhWQPs((z1+2{Op% z?J}9k5^N=z;7ja~zi8a_-exIqWUBJwohe#4QJ`|FF*$C{lM18z^#hX6!5B8KAkLUX ziP=oti-gpV(BsLD{0(3*dw}4JxK23Y7M{BeFPucw!sHpY&l%Ws4pSm`+~V7;bZ%Dx zeI)MK=4vC&5#;2MT7fS?^ch9?2;%<8Jlu-IB&N~gg8t;6S-#C@!NU{`p7M8@2iGc& zg|JPg%@gCoCQ&s6JvDU&`X2S<57f(k8nJ1wvBu{8r?;q3_kpZZ${?|( z+^)UvR33sjSd)aT!UPkA;ylO6{aE3MQa{g%Mcf$1KONcjO@&g5zPHWtzM1rYC{_K> zgQNcs<{&X{OA=cEWw5JGqpr0O>x*Tfak2PE9?FuWtz^DDNI}rwAaT0(bdo-<+SJ6A z&}S%boGMWIS0L}=S>|-#kRX;e^sUsotry(MjE|3_9duvfc|nwF#NHuM-w7ZU!5ei8 z6Mkf>2)WunY2eU@C-Uj-A zG(z0Tz2YoBk>zCz_9-)4a>T46$(~kF+Y{#sA9MWH%5z#zNoz)sdXq7ZR_+`RZ%0(q zC7&GyS_|BGHNFl8Xa%@>iWh%Gr?=J5<(!OEjauj5jyrA-QXBjn0OAhJJ9+v=!LK`` z@g(`^*84Q4jcDL`OA&ZV60djgwG`|bcD*i50O}Q{9_noRg|~?dj%VtKOnyRs$Uzqg z191aWoR^rDX#@iSq0n z?9Sg$WSRPqSeI<}&n1T3!6%Wj@5iw5`*`Btni~G=&;J+4`7g#OQTa>u`{4ZZ(c@s$ zK0y;ySOGD-UTjREKbru{QaS>HjN<2)R%Nn-TZiQ(Twe4p@-saNa3~p{?^V9Nixz@a zykPv~<@lu6-Ng9i$Lrk(xi2Tri3q=RW`BJYOPC;S0Yly%77c727Yj-d1vF!Fuk{Xh z)lMbA69y7*5ufET>P*gXQrxsW+ zz)*MbHZv*eJPEXYE<6g6_M7N%#%mR{#awV3i^PafNv(zyI)&bH?F}2s8_rR(6%!V4SOWlup`TKAb@ee>!9JKPM=&8g#BeYRH9FpFybxBXQI2|g}FGJfJ+ zY-*2hB?o{TVL;Wt_ek;AP5PBqfDR4@Z->_182W z{P@Mc27j6jE*9xG{R$>6_;i=y{qf(c`5w9fa*`rEzX6t!KJ(p1H|>J1pC-2zqWENF zmm=Z5B4u{cY2XYl(PfrInB*~WGWik3@1oRhiMOS|D;acnf-Bs(QCm#wR;@Vf!hOPJ zgjhDCfDj$HcyVLJ=AaTbQ{@vIv14LWWF$=i-BDoC11}V;2V8A`S>_x)vIq44-VB-v z*w-d}$G+Ql?En8j!~ZkCpQ$|cA0|+rrY>tiCeWxkRGPoarxlGU2?7%k#F693RHT24 z-?JsiXlT2PTqZqNb&sSc>$d;O4V@|b6VKSWQb~bUaWn1Cf0+K%`Q&Wc<>mQ>*iEGB zbZ;aYOotBZ{vH3y<0A*L0QVM|#rf*LIsGx(O*-7)r@yyBIzJnBFSKBUSl1e|8lxU* zzFL+YDVVkIuzFWeJ8AbgN&w(4-7zbiaMn{5!JQXu)SELk*CNL+Fro|2v|YO)1l15t zs(0^&EB6DPMyaqvY>=KL>)tEpsn;N5Q#yJj<9}ImL((SqErWN3Q=;tBO~ExTCs9hB z2E$7eN#5wX4<3m^5pdjm#5o>s#eS_Q^P)tm$@SawTqF*1dj_i#)3};JslbLKHXl_N z)Fxzf>FN)EK&Rz&*|6&%Hs-^f{V|+_vL1S;-1K-l$5xiC@}%uDuwHYhmsV?YcOUlk zOYkG5v2+`+UWqpn0aaaqrD3lYdh0*!L`3FAsNKu=Q!vJu?Yc8n|CoYyDo_`r0mPoo z8>XCo$W4>l(==h?2~PoRR*kEe)&IH{1sM41mO#-36`02m#nTX{r*r`Q5rZ2-sE|nA zhnn5T#s#v`52T5|?GNS`%HgS2;R(*|^egNPDzzH_z^W)-Q98~$#YAe)cEZ%vge965AS_am#DK#pjPRr-!^za8>`kksCAUj(Xr*1NW5~e zpypt_eJpD&4_bl_y?G%>^L}=>xAaV>KR6;^aBytqpiHe%!j;&MzI_>Sx7O%F%D*8s zSN}cS^<{iiK)=Ji`FpO#^zY!_|D)qeRNAtgmH)m;qC|mq^j(|hL`7uBz+ULUj37gj zksdbnU+LSVo35riSX_4z{UX=%n&}7s0{WuZYoSfwAP`8aKN9P@%e=~1`~1ASL-z%# zw>DO&ixr}c9%4InGc*_y42bdEk)ZdG7-mTu0bD@_vGAr*NcFoMW;@r?@LUhRI zCUJgHb`O?M3!w)|CPu~ej%fddw20lod?Ufp8Dmt0PbnA0J%KE^2~AIcnKP()025V> zG>noSM3$5Btmc$GZoyP^v1@Poz0FD(6YSTH@aD0}BXva?LphAiSz9f&Y(aDAzBnUh z?d2m``~{z;{}kZJ>a^wYI?ry(V9hIoh;|EFc0*-#*`$T0DRQ1;WsqInG;YPS+I4{g zJGpKk%%Sdc5xBa$Q^_I~(F97eqDO7AN3EN0u)PNBAb+n+ zWBTxQx^;O9o0`=g+Zrt_{lP!sgWZHW?8bLYS$;1a@&7w9rD9|Ge;Gb?sEjFoF9-6v z#!2)t{DMHZ2@0W*fCx;62d#;jouz`R5Y(t{BT=$N4yr^^o$ON8d{PQ=!O zX17^CrdM~7D-;ZrC!||<+FEOxI_WI3CA<35va%4v>gc zEX-@h8esj=a4szW7x{0g$hwoWRQG$yK{@3mqd-jYiVofJE!Wok1* znV7Gm&Ssq#hFuvj1sRyHg(6PFA5U*Q8Rx>-blOs=lb`qa{zFy&n4xY;sd$fE+<3EI z##W$P9M{B3c3Si9gw^jlPU-JqD~Cye;wr=XkV7BSv#6}DrsXWFJ3eUNrc%7{=^sP> zrp)BWKA9<}^R9g!0q7yWlh;gr_TEOD|#BmGq<@IV;ueg+D2}cjpp+dPf&Q(36sFU&K8}hA85U61faW&{ zlB`9HUl-WWCG|<1XANN3JVAkRYvr5U4q6;!G*MTdSUt*Mi=z_y3B1A9j-@aK{lNvx zK%p23>M&=KTCgR!Ee8c?DAO2_R?B zkaqr6^BSP!8dHXxj%N1l+V$_%vzHjqvu7p@%Nl6;>y*S}M!B=pz=aqUV#`;h%M0rU zHfcog>kv3UZAEB*g7Er@t6CF8kHDmKTjO@rejA^ULqn!`LwrEwOVmHx^;g|5PHm#B zZ+jjWgjJ!043F+&#_;D*mz%Q60=L9Ove|$gU&~As5^uz@2-BfQ!bW)Khn}G+Wyjw- z19qI#oB(RSNydn0t~;tAmK!P-d{b-@@E5|cdgOS#!>%#Rj6ynkMvaW@37E>@hJP^8 z2zk8VXx|>#R^JCcWdBCy{0nPmYFOxN55#^-rlqobe0#L6)bi?E?SPymF*a5oDDeSd zO0gx?#KMoOd&G(2O@*W)HgX6y_aa6iMCl^~`{@UR`nMQE`>n_{_aY5nA}vqU8mt8H z`oa=g0SyiLd~BxAj2~l$zRSDHxvDs;I4>+M$W`HbJ|g&P+$!U7-PHX4RAcR0szJ*( ze-417=bO2q{492SWrqDK+L3#ChUHtz*@MP)e^%@>_&#Yk^1|tv@j4%3T)diEX zATx4K*hcO`sY$jk#jN5WD<=C3nvuVsRh||qDHnc~;Kf59zr0;c7VkVSUPD%NnnJC_ zl3F^#f_rDu8l}l8qcAz0FFa)EAt32IUy_JLIhU_J^l~FRH&6-ivSpG2PRqzDdMWft>Zc(c)#tb%wgmWN%>IOPm zZi-noqS!^Ftb81pRcQi`X#UhWK70hy4tGW1mz|+vI8c*h@ zfFGJtW3r>qV>1Z0r|L>7I3un^gcep$AAWfZHRvB|E*kktY$qQP_$YG60C@X~tTQjB3%@`uz!qxtxF+LE!+=nrS^07hn` zEgAp!h|r03h7B!$#OZW#ACD+M;-5J!W+{h|6I;5cNnE(Y863%1(oH}_FTW})8zYb$7czP zg~Szk1+_NTm6SJ0MS_|oSz%e(S~P-&SFp;!k?uFayytV$8HPwuyELSXOs^27XvK-D zOx-Dl!P|28DK6iX>p#Yb%3`A&CG0X2S43FjN%IB}q(!hC$fG}yl1y9W&W&I@KTg6@ zK^kpH8=yFuP+vI^+59|3%Zqnb5lTDAykf z9S#X`3N(X^SpdMyWQGOQRjhiwlj!0W-yD<3aEj^&X%=?`6lCy~?`&WSWt z?U~EKFcCG_RJ(Qp7j=$I%H8t)Z@6VjA#>1f@EYiS8MRHZphp zMA_5`znM=pzUpBPO)pXGYpQ6gkine{6u_o!P@Q+NKJ}k!_X7u|qfpAyIJb$_#3@wJ z<1SE2Edkfk9C!0t%}8Yio09^F`YGzpaJHGk*-ffsn85@)%4@`;Fv^8q(-Wk7r=Q8p zT&hD`5(f?M{gfzGbbwh8(}G#|#fDuk7v1W)5H9wkorE0ZZjL0Q1=NRGY>zwgfm81DdoaVwNH;or{{eSyybt)m<=zXoA^RALYG-2t zouH|L*BLvmm9cdMmn+KGopyR@4*=&0&4g|FLoreZOhRmh=)R0bg~ zT2(8V_q7~42-zvb)+y959OAv!V$u(O3)%Es0M@CRFmG{5sovIq4%8Ahjk#*5w{+)+ zMWQoJI_r$HxL5km1#6(e@{lK3Udc~n0@g`g$s?VrnQJ$!oPnb?IHh-1qA`Rz$)Ai< z6w$-MJW-gKNvOhL+XMbE7&mFt`x1KY>k4(!KbbpZ`>`K@1J<(#vVbjx@Z@(6Q}MF# zMnbr-f55(cTa^q4+#)=s+ThMaV~E`B8V=|W_fZWDwiso8tNMTNse)RNBGi=gVwgg% zbOg8>mbRN%7^Um-7oj4=6`$|(K7!+t^90a{$18Z>}<#!bm%ZEFQ{X(yBZMc>lCz0f1I2w9Sq zuGh<9<=AO&g6BZte6hn>Qmvv;Rt)*cJfTr2=~EnGD8P$v3R|&1RCl&7)b+`=QGapi zPbLg_pxm`+HZurtFZ;wZ=`Vk*do~$wB zxoW&=j0OTbQ=Q%S8XJ%~qoa3Ea|au5o}_(P;=!y-AjFrERh%8la!z6Fn@lR?^E~H12D?8#ht=1F;7@o4$Q8GDj;sSC%Jfn01xgL&%F2 zwG1|5ikb^qHv&9hT8w83+yv&BQXOQyMVJSBL(Ky~p)gU3#%|blG?IR9rP^zUbs7rOA0X52Ao=GRt@C&zlyjNLv-} z9?*x{y(`509qhCV*B47f2hLrGl^<@SuRGR!KwHei?!CM10Tq*YDIoBNyRuO*>3FU? zHjipIE#B~y3FSfOsMfj~F9PNr*H?0oHyYB^G(YyNh{SxcE(Y-`x5jFMKb~HO*m+R% zrq|ic4fzJ#USpTm;X7K+E%xsT_3VHKe?*uc4-FsILUH;kL>_okY(w`VU*8+l>o>Jm ziU#?2^`>arnsl#)*R&nf_%>A+qwl%o{l(u)M?DK1^mf260_oteV3#E_>6Y4!_hhVD zM8AI6MM2V*^_M^sQ0dmHu11fy^kOqXqzpr?K$`}BKWG`=Es(9&S@K@)ZjA{lj3ea7_MBP zk(|hBFRjHVMN!sNUkrB;(cTP)T97M$0Dtc&UXSec<+q?y>5=)}S~{Z@ua;1xt@=T5 zI7{`Z=z_X*no8s>mY;>BvEXK%b`a6(DTS6t&b!vf_z#HM{Uoy_5fiB(zpkF{})ruka$iX*~pq1ZxD?q68dIo zIZSVls9kFGsTwvr4{T_LidcWtt$u{kJlW7moRaH6+A5hW&;;2O#$oKyEN8kx`LmG)Wfq4ykh+q{I3|RfVpkR&QH_x;t41Uw z`P+tft^E2B$domKT@|nNW`EHwyj>&}K;eDpe z1bNOh=fvIfk`&B61+S8ND<(KC%>y&?>opCnY*r5M+!UrWKxv0_QvTlJc>X#AaI^xo zaRXL}t5Ej_Z$y*|w*$6D+A?Lw-CO-$itm^{2Ct82-<0IW)0KMNvJHgBrdsIR0v~=H z?n6^}l{D``Me90`^o|q!olsF?UX3YSq^6Vu>Ijm>>PaZI8G@<^NGw{Cx&%|PwYrfw zR!gX_%AR=L3BFsf8LxI|K^J}deh0ZdV?$3r--FEX`#INxsOG6_=!v)DI>0q|BxT)z z-G6kzA01M?rba+G_mwNMQD1mbVbNTWmBi*{s_v_Ft9m2Avg!^78(QFu&n6mbRJ2bA zv!b;%yo{g*9l2)>tsZJOOp}U~8VUH`}$ z8p_}t*XIOehezolNa-a2x0BS})Y9}&*TPgua{Ewn-=wVrmJUeU39EKx+%w%=ixQWK zDLpwaNJs65#6o7Ln7~~X+p_o2BR1g~VCfxLzxA{HlWAI6^H;`juI=&r1jQrUv_q0Z z1Ja-tjdktrrP>GOC*#p?*xfQU5MqjMsBe!9lh(u8)w$e@Z|>aUHI5o;MGw*|Myiz3 z-f0;pHg~Q#%*Kx8MxH%AluVXjG2C$)WL-K63@Q`#y9_k_+}eR(x4~dp7oV-ek0H>I zgy8p#i4GN{>#v=pFYUQT(g&b$OeTy-X_#FDgNF8XyfGY6R!>inYn8IR2RDa&O!(6< znXs{W!bkP|s_YI*Yx%4stI`=ZO45IK6rBs`g7sP40ic}GZ58s?Mc$&i`kq_tfci>N zIHrC0H+Qpam1bNa=(`SRKjixBTtm&e`j9porEci!zdlg1RI0Jw#b(_Tb@RQK1Zxr_ z%7SUeH6=TrXt3J@js`4iDD0=IoHhK~I7^W8^Rcp~Yaf>2wVe|Hh1bUpX9ATD#moByY57-f2Ef1TP^lBi&p5_s7WGG9|0T}dlfxOx zXvScJO1Cnq`c`~{Dp;{;l<-KkCDE+pmexJkd}zCgE{eF=)K``-qC~IT6GcRog_)!X z?fK^F8UDz$(zFUrwuR$qro5>qqn>+Z%<5>;_*3pZ8QM|yv9CAtrAx;($>4l^_$_-L z*&?(77!-=zvnCVW&kUcZMb6;2!83si518Y%R*A3JZ8Is|kUCMu`!vxDgaWjs7^0j( ziTaS4HhQ)ldR=r)_7vYFUr%THE}cPF{0H45FJ5MQW^+W>P+eEX2kLp3zzFe*-pFVA zdDZRybv?H|>`9f$AKVjFWJ=wegO7hOOIYCtd?Vj{EYLT*^gl35|HQ`R=ti+ADm{jyQE7K@kdjuqJhWVSks>b^ zxha88-h3s;%3_5b1TqFCPTxVjvuB5U>v=HyZ$?JSk+&I%)M7KE*wOg<)1-Iy)8-K! z^XpIt|0ibmk9RtMmlUd7#Ap3Q!q9N4atQy)TmrhrFhfx1DAN`^vq@Q_SRl|V z#lU<~n67$mT)NvHh`%als+G-)x1`Y%4Bp*6Un5Ri9h=_Db zA-AdP!f>f0m@~>7X#uBM?diI@)Egjuz@jXKvm zJo+==juc9_<;CqeRaU9_Mz@;3e=E4=6TK+c`|uu#pIqhSyNm`G(X)&)B`8q0RBv#> z`gGlw(Q=1Xmf55VHj%C#^1lpc>LY8kfA@|rlC1EA<1#`iuyNO z(=;irt{_&K=i4)^x%;U(Xv<)+o=dczC5H3W~+e|f~{*ucxj@{Yi-cw^MqYr3fN zF5D+~!wd$#al?UfMnz(@K#wn`_5na@rRr8XqN@&M&FGEC@`+OEv}sI1hw>Up0qAWf zL#e4~&oM;TVfjRE+10B_gFlLEP9?Q-dARr3xi6nQqnw>k-S;~b z;!0s2VS4}W8b&pGuK=7im+t(`nz@FnT#VD|!)eQNp-W6)@>aA+j~K*H{$G`y2|QHY z|Hmy+CR@#jWY4~)lr1qBJB_RfHJFfP<}pK5(#ZZGSqcpyS&}01LnTWk5fzmXMGHkJ zTP6L^B+uj;lmB_W<~4=${+v0>z31M!-_O@o-O9GyW)j_mjx}!0@br_LE-7SIuPP84 z;5=O(U*g_um0tyG|61N@d9lEuOeiRd+#NY^{nd5;-CVlw&Ap7J?qwM^?E29wvS}2d zbzar4Fz&RSR(-|s!Z6+za&Z zY#D<5q_JUktIzvL0)yq_kLWG6DO{ri=?c!y!f(Dk%G{8)k`Gym%j#!OgXVDD3;$&v@qy#ISJfp=Vm>pls@9-mapVQChAHHd-x+OGx)(*Yr zC1qDUTZ6mM(b_hi!TuFF2k#8uI2;kD70AQ&di$L*4P*Y-@p`jdm%_c3f)XhYD^6M8&#Y$ZpzQMcR|6nsH>b=*R_Von!$BTRj7yGCXokoAQ z&ANvx0-Epw`QIEPgI(^cS2f(Y85yV@ygI{ewyv5Frng)e}KCZF7JbR(&W618_dcEh(#+^zZFY;o<815<5sOHQdeax9_!PyM&;{P zkBa5xymca0#)c#tke@3KNEM8a_mT&1gm;p&&JlMGH(cL(b)BckgMQ^9&vRwj!~3@l zY?L5}=Jzr080OGKb|y`ee(+`flQg|!lo6>=H)X4`$Gz~hLmu2a%kYW_Uu8x09Pa0J zKZ`E$BKJ=2GPj_3l*TEcZ*uYRr<*J^#5pILTT;k_cgto1ZL-%slyc16J~OH-(RgDA z%;EjEnoUkZ&acS{Q8`{i6T5^nywgqQI5bDIymoa7CSZG|WWVk>GM9)zy*bNih|QIm z%0+(Nnc*a_xo;$=!HQYaapLms>J1ToyjtFByY`C2H1wT#178#4+|{H0BBqtCdd$L% z_3Hc60j@{t9~MjM@LBalR&6@>B;9?r<7J~F+WXyYu*y3?px*=8MAK@EA+jRX8{CG?GI-< z54?Dc9CAh>QTAvyOEm0^+x;r2BWX|{3$Y7)L5l*qVE*y0`7J>l2wCmW zL1?|a`pJ-l{fb_N;R(Z9UMiSj6pQjOvQ^%DvhIJF!+Th7jO2~1f1N+(-TyCFYQZYw z4)>7caf^Ki_KJ^Zx2JUb z&$3zJy!*+rCV4%jqwyuNY3j1ZEiltS0xTzd+=itTb;IPYpaf?8Y+RSdVdpacB(bVQ zC(JupLfFp8y43%PMj2}T|VS@%LVp>hv4Y!RPMF?pp8U_$xCJ)S zQx!69>bphNTIb9yn*_yfj{N%bY)t{L1cs8<8|!f$;UQ*}IN=2<6lA;x^(`8t?;+ST zh)z4qeYYgZkIy{$4x28O-pugO&gauRh3;lti9)9Pvw+^)0!h~%m&8Q!AKX%urEMnl z?yEz?g#ODn$UM`+Q#$Q!6|zsq_`dLO5YK-6bJM6ya>}H+vnW^h?o$z;V&wvuM$dR& zeEq;uUUh$XR`TWeC$$c&Jjau2it3#%J-y}Qm>nW*s?En?R&6w@sDXMEr#8~$=b(gk zwDC3)NtAP;M2BW_lL^5ShpK$D%@|BnD{=!Tq)o(5@z3i7Z){} zGr}Exom_qDO{kAVkZ*MbLNHE666Kina#D{&>Jy%~w7yX$oj;cYCd^p9zy z8*+wgSEcj$4{WxKmCF(5o7U4jqwEvO&dm1H#7z}%VXAbW&W24v-tS6N3}qrm1OnE)fUkoE8yMMn9S$?IswS88tQWm4#Oid#ckgr6 zRtHm!mfNl-`d>O*1~d7%;~n+{Rph6BBy^95zqI{K((E!iFQ+h*C3EsbxNo_aRm5gj zKYug($r*Q#W9`p%Bf{bi6;IY0v`pB^^qu)gbg9QHQ7 zWBj(a1YSu)~2RK8Pi#C>{DMlrqFb9e_RehEHyI{n?e3vL_}L>kYJC z_ly$$)zFi*SFyNrnOt(B*7E$??s67EO%DgoZL2XNk8iVx~X_)o++4oaK1M|ou73vA0K^503j@uuVmLcHH4ya-kOIDfM%5%(E z+Xpt~#7y2!KB&)PoyCA+$~DXqxPxxALy!g-O?<9+9KTk4Pgq4AIdUkl`1<1#j^cJg zgU3`0hkHj_jxV>`Y~%LAZl^3o0}`Sm@iw7kwff{M%VwtN)|~!p{AsfA6vB5UolF~d zHWS%*uBDt<9y!9v2Xe|au&1j&iR1HXCdyCjxSgG*L{wmTD4(NQ=mFjpa~xooc6kju z`~+d{j7$h-;HAB04H!Zscu^hZffL#9!p$)9>sRI|Yovm)g@F>ZnosF2EgkU3ln0bR zTA}|+E(tt)!SG)-bEJi_0m{l+(cAz^pi}`9=~n?y&;2eG;d9{M6nj>BHGn(KA2n|O zt}$=FPq!j`p&kQ8>cirSzkU0c08%8{^Qyqi-w2LoO8)^E7;;I1;HQ6B$u0nNaX2CY zSmfi)F`m94zL8>#zu;8|{aBui@RzRKBlP1&mfFxEC@%cjl?NBs`cr^nm){>;$g?rhKr$AO&6qV_Wbn^}5tfFBry^e1`%du2~o zs$~dN;S_#%iwwA_QvmMjh%Qo?0?rR~6liyN5Xmej8(*V9ym*T`xAhHih-v$7U}8=dfXi2i*aAB!xM(Xekg*ix@r|ymDw*{*s0?dlVys2e)z62u1 z+k3esbJE=-P5S$&KdFp+2H7_2e=}OKDrf( z9-207?6$@f4m4B+9E*e((Y89!q?zH|mz_vM>kp*HGXldO0Hg#!EtFhRuOm$u8e~a9 z5(roy7m$Kh+zjW6@zw{&20u?1f2uP&boD}$#Zy)4o&T;vyBoqFiF2t;*g=|1=)PxB z8eM3Mp=l_obbc?I^xyLz?4Y1YDWPa+nm;O<$Cn;@ane616`J9OO2r=rZr{I_Kizyc zP#^^WCdIEp*()rRT+*YZK>V@^Zs=ht32x>Kwe zab)@ZEffz;VM4{XA6e421^h~`ji5r%)B{wZu#hD}f3$y@L0JV9f3g{-RK!A?vBUA}${YF(vO4)@`6f1 z-A|}e#LN{)(eXloDnX4Vs7eH|<@{r#LodP@Nz--$Dg_Par%DCpu2>2jUnqy~|J?eZ zBG4FVsz_A+ibdwv>mLp>P!(t}E>$JGaK$R~;fb{O3($y1ssQQo|5M;^JqC?7qe|hg zu0ZOqeFcp?qVn&Qu7FQJ4hcFi&|nR!*j)MF#b}QO^lN%5)4p*D^H+B){n8%VPUzi! zDihoGcP71a6!ab`l^hK&*dYrVYzJ0)#}xVrp!e;lI!+x+bfCN0KXwUAPU9@#l7@0& QuEJmfE|#`Dqx|px0L@K;Y5)KL 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..3a02907 --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/android/gradlew b/android/gradlew new file mode 100755 index 0000000..1b6c787 --- /dev/null +++ b/android/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${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='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# 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 ;; #( + MSYS* | 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" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat new file mode 100644 index 0000000..ac1b06f --- /dev/null +++ b/android/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@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 Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@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="-Xmx64m" "-Xms64m" + +@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 execute + +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 execute + +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 + +: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 %* + +: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..ef280d4 --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'appcheck' diff --git a/android/src/.DS_Store b/android/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d823cfabcc008a7d89bc4b1680b2041e164b48aa GIT binary patch literal 6148 zcmeHKF;2r!47F*7NDOp?@k>mMy}_pnD@!i`Z6!cznl9|wxKQuFeK-Nn_6H@3%E$oE zlK;!M{qmDH#IcCz@^!lqnTtpbHb*PCIk?V4u2>(+?XANQBXn~V3`aen(_{_s3}whStb3Qz$mKn1A4zf=G{+pInh zmCrVEV<{DuOb D + + + + diff --git a/android/src/main/kotlin/dev/yashgarg/appcheck/AppcheckPlugin.kt b/android/src/main/kotlin/dev/yashgarg/appcheck/AppcheckPlugin.kt new file mode 100644 index 0000000..6cf8207 --- /dev/null +++ b/android/src/main/kotlin/dev/yashgarg/appcheck/AppcheckPlugin.kt @@ -0,0 +1,224 @@ +package dev.yashgarg.appcheck + +import android.content.Context +import android.content.Intent +import android.content.pm.ApplicationInfo +import android.content.pm.PackageInfo +import android.content.pm.PackageManager +import android.content.pm.PackageManager.NameNotFoundException +import android.util.Log +import androidx.annotation.NonNull +import io.flutter.embedding.engine.plugins.FlutterPlugin +import io.flutter.plugin.common.MethodCall +import io.flutter.plugin.common.MethodChannel +import io.flutter.plugin.common.MethodChannel.* +import kotlin.collections.* +import android.os.Build.VERSION.SDK_INT +import android.os.Build.VERSION_CODES.P + +import android.os.Build +// Import yang diperlukan untuk sertifikat dan hashing +import java.security.MessageDigest +import java.security.cert.CertificateFactory +import java.security.cert.X509Certificate +import java.io.ByteArrayInputStream +import javax.security.auth.x500.X500Principal + +/** AppcheckPlugin */ +class AppcheckPlugin : FlutterPlugin, MethodCallHandler { + private lateinit var channel: MethodChannel + private lateinit var context: Context + + override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { + channel = MethodChannel(flutterPluginBinding.binaryMessenger, "dev.yashgarg/appcheck") + channel.setMethodCallHandler(this) + context = flutterPluginBinding.applicationContext + } + + override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) { + val uriSchema: String + when (call.method) { + "checkAvailability" -> { + uriSchema = call.argument("uri").toString() + checkAvailability(uriSchema, result) + } + "getInstalledApps" -> { + val startTime = System.currentTimeMillis() + + // Memanggil fungsi yang sekarang mengembalikan Pair: List dan durasi PM + val (apps, pmDuration) = getInstalledNonSystemApps() + + val endTime = System.currentTimeMillis() + val totalDuration = endTime - startTime + + val resultMap = mutableMapOf() + resultMap["apps"] = apps + resultMap["duration_ms"] = totalDuration + resultMap["package_manager_duration_ms"] = pmDuration // Tambahkan durasi PackageManager di sini + + result.success(resultMap) + } + "isAppEnabled" -> { + uriSchema = call.argument("uri").toString() + isAppEnabled(uriSchema, result) + } + "launchApp" -> { + uriSchema = call.argument("uri").toString() + launchApp(uriSchema, result) + } + else -> result.notImplemented() + } + } + + private fun checkAvailability(uri: String, result: Result) { + val info = getAppPackageInfo(uri) + if (info != null) { + result.success(convertPackageInfoToJson(info)) + return + } + result.error("400", "App not found $uri", null) + } + + // Mengubah tipe return menjadi Pair>, Long> + // untuk mengembalikan daftar aplikasi DAN durasi operasi PackageManager. + private fun getInstalledNonSystemApps(): Pair>, Long> { + val packageManager: PackageManager = context.packageManager + val flags = PackageManager.GET_SIGNING_CERTIFICATES or PackageManager.GET_PERMISSIONS + + val pmCallStartTime = System.currentTimeMillis() + val packages = packageManager.getInstalledPackages(flags) + val pmCallEndTime = System.currentTimeMillis() + val pmDuration = pmCallEndTime - pmCallStartTime // Durasi spesifik PackageManager.getInstalledPackages + + val installedApps: MutableList> = ArrayList() + + for (pkg in packages) { + if ((pkg.applicationInfo.flags and ApplicationInfo.FLAG_SYSTEM) == 0) { + val map = convertPackageInfoToJson(pkg) + installedApps.add(map) + } + } + return Pair(installedApps, pmDuration) // Mengembalikan Pair + } + + private fun getAppPackageInfo(uri: String): PackageInfo? { + val pm = context.packageManager + try { + val flags = PackageManager.GET_ACTIVITIES or + PackageManager.GET_SIGNING_CERTIFICATES or + PackageManager.GET_PERMISSIONS + return pm.getPackageInfo(uri, flags) + } catch (e: NameNotFoundException) { + e.message?.let { Log.e("getAppPackageInfo ($uri)", it) } + } + return null + } + + private fun convertPackageInfoToJson(info: PackageInfo): Map { + val app: MutableMap = HashMap() + val appInfo = info.applicationInfo + + app["app_name"] = appInfo?.loadLabel(context.packageManager)?.toString() ?: "N/A" + + app["system_app"] = (appInfo.flags and ApplicationInfo.FLAG_SYSTEM) != 0 + app["package_name"] = info.packageName + app["version_name"] = info.versionName ?: "N/A" + app["version_code"] = getVersionCode(info) + + app["installer"] = context.packageManager.getInstallerPackageName(info.packageName) ?: "unknown" + app["source_dir"] = appInfo.sourceDir + val apkFile = java.io.File(appInfo.sourceDir) + app["apk_size_bytes"] = apkFile.length() + + app["permissions"] = info.requestedPermissions?.toList() ?: listOf() + + try { + val signatures = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + info.signingInfo?.apkContentsSigners ?: emptyArray() + } else { + @Suppress("DEPRECATION") + info.signatures ?: emptyArray() + } + + if (signatures.isNotEmpty()) { + // SHA-256 + val md = MessageDigest.getInstance("SHA-256") + val sha = md.digest(signatures[0].toByteArray()) + val hex = sha.joinToString(":") { "%02X".format(it) } + app["signature_sha256"] = hex + + val certFactory = CertificateFactory.getInstance("X.509") + val cert = certFactory.generateCertificate( + ByteArrayInputStream(signatures[0].toByteArray()) + ) as X509Certificate + + val x500Principal = cert.subjectX500Principal + var developerName = "unknown" + + val subjectDN = x500Principal.name + + val parts = subjectDN.split(",").map { it.trim() } + for (part in parts) { + if (part.startsWith("O=", ignoreCase = true)) { + developerName = part.substring(2).trim() + break + } else if (part.startsWith("CN=", ignoreCase = true)) { + developerName = part.substring(3).trim() + } + } + + if (developerName == "unknown" && subjectDN.isNotEmpty()) { + developerName = subjectDN + } + + app["developer"] = developerName + } else { + app["signature_sha256"] = "N/A" + app["developer"] = "unknown" + } + } catch (e: Exception) { + Log.e("AppCheckPlugin", "Error getting signature/developer info: ${e.message}") + app["signature_sha256"] = "error" + app["developer"] = "error" + } + + return app + } + + @Suppress("DEPRECATION") + private fun getVersionCode(packageInfo: PackageInfo): Long { + return if (SDK_INT < P) packageInfo.versionCode.toLong() + else packageInfo.longVersionCode + } + + private fun isAppEnabled(packageName: String, result: Result) { + val appStatus: Boolean + try { + val appInfo: ApplicationInfo = context.packageManager.getApplicationInfo(packageName, 0) + appStatus = appInfo.enabled + } catch (e: NameNotFoundException) { + result.error("400", "${e.message} $packageName", e) + return + } + result.success(appStatus) + } + + private fun launchApp(packageName: String, result: Result) { + val info = getAppPackageInfo(packageName) + if (info != null) { + val launchIntent: Intent? = + context.packageManager.getLaunchIntentForPackage(packageName) + if (launchIntent != null) { + launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + context.startActivity(launchIntent) + result.success(null) + return + } + } + result.error("400", "App not found $packageName", null) + } + + override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) { + channel.setMethodCallHandler(null) + } +} \ No newline at end of file diff --git a/android/src/main/kotlin/dev/yashgarg/appcheck/DrawableUtil.kt b/android/src/main/kotlin/dev/yashgarg/appcheck/DrawableUtil.kt new file mode 100644 index 0000000..0d55e24 --- /dev/null +++ b/android/src/main/kotlin/dev/yashgarg/appcheck/DrawableUtil.kt @@ -0,0 +1,35 @@ +package dev.yashgarg.appcheck + +import android.graphics.Bitmap +import android.graphics.Canvas +import android.graphics.drawable.BitmapDrawable +import android.graphics.drawable.Drawable +import java.io.ByteArrayOutputStream + +class DrawableUtil { + + companion object { + fun drawableToByteArray(drawable: Drawable): ByteArray { + val bitmap = drawableToBitmap(drawable) + ByteArrayOutputStream().use { stream -> + bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream) + return stream.toByteArray() + } + } + + private fun drawableToBitmap(drawable: Drawable): Bitmap { + if (drawable is BitmapDrawable) { + return drawable.bitmap + } + val bitmap = Bitmap.createBitmap( + drawable.intrinsicWidth, + drawable.intrinsicHeight, + Bitmap.Config.ARGB_8888 + ) + val canvas = Canvas(bitmap) + drawable.setBounds(0, 0, canvas.width, canvas.height) + drawable.draw(canvas) + return bitmap + } + } +} diff --git a/example/.DS_Store b/example/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..862ca99f2fee60c3d293ca9ac80590bd2c73d47d GIT binary patch literal 6148 zcmeHK%}T>S5T0!cMl4wLqIk*GW5EZAB_2HY0n{|0LgE(1d#*l$_!@#wAikF0>`e1R zDtJmx~IEu#D>rDYu zpszqAw^LsK&%QqY_lxY#6fgz;l>%;@EwVWtN!QlF!|__1pk1P|ab7Lhl;9#P#mMEQ c_y8>!{0UzGQ^i^k9++(ef(+J~0zaz2Cr{v9Jpcdz literal 0 HcmV?d00001 diff --git a/example/README.md b/example/README.md new file mode 100644 index 0000000..8c829f0 --- /dev/null +++ b/example/README.md @@ -0,0 +1,16 @@ +# appcheck_example + +Demonstrates how to use the appcheck plugin. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/example/analysis_options.yaml b/example/analysis_options.yaml new file mode 100644 index 0000000..0d29021 --- /dev/null +++ b/example/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/example/android/app/build.gradle.kts b/example/android/app/build.gradle.kts new file mode 100644 index 0000000..14fdeb7 --- /dev/null +++ b/example/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "dev.yashgarg.appcheck_example" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "dev.yashgarg.appcheck_example" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/example/android/app/src/debug/AndroidManifest.xml b/example/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..ea9e82e --- /dev/null +++ b/example/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..866d229 --- /dev/null +++ b/example/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/android/app/src/main/kotlin/dev/yashgarg/appcheck_example/MainActivity.kt b/example/android/app/src/main/kotlin/dev/yashgarg/appcheck_example/MainActivity.kt new file mode 100644 index 0000000..53294af --- /dev/null +++ b/example/android/app/src/main/kotlin/dev/yashgarg/appcheck_example/MainActivity.kt @@ -0,0 +1,5 @@ +package dev.yashgarg.appcheck_example + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/example/android/app/src/main/res/drawable-v21/launch_background.xml b/example/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/example/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/example/android/app/src/main/res/drawable/launch_background.xml b/example/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/example/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/example/android/app/src/main/res/values-night/styles.xml b/example/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..06952be --- /dev/null +++ b/example/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/example/android/app/src/main/res/values/styles.xml b/example/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/example/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/example/android/app/src/profile/AndroidManifest.xml b/example/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..ea9e82e --- /dev/null +++ b/example/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/example/android/build.gradle.kts b/example/android/build.gradle.kts new file mode 100644 index 0000000..89176ef --- /dev/null +++ b/example/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/example/android/gradle.properties b/example/android/gradle.properties new file mode 100644 index 0000000..f018a61 --- /dev/null +++ b/example/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..afa1e8e --- /dev/null +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/example/android/settings.gradle.kts b/example/android/settings.gradle.kts new file mode 100644 index 0000000..a439442 --- /dev/null +++ b/example/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/example/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..7c56964 --- /dev/null +++ b/example/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 12.0 + + diff --git a/example/ios/Flutter/Debug.xcconfig b/example/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..ec97fc6 --- /dev/null +++ b/example/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/example/ios/Flutter/Release.xcconfig b/example/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..c4855bf --- /dev/null +++ b/example/ios/Flutter/Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/example/ios/Podfile b/example/ios/Podfile new file mode 100644 index 0000000..e549ee2 --- /dev/null +++ b/example/ios/Podfile @@ -0,0 +1,43 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '12.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock new file mode 100644 index 0000000..5180d6a --- /dev/null +++ b/example/ios/Podfile.lock @@ -0,0 +1,16 @@ +PODS: + - Flutter (1.0.0) + +DEPENDENCIES: + - Flutter (from `Flutter`) + +EXTERNAL SOURCES: + Flutter: + :path: Flutter + +SPEC CHECKSUMS: + Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 + +PODFILE CHECKSUM: 4305caec6b40dde0ae97be1573c53de1882a07e5 + +COCOAPODS: 1.16.2 diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..cf51ed0 --- /dev/null +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,732 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 37E5C4AEABC2CA0643A7B086 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6687A00FE71024576C895E46 /* Pods_RunnerTests.framework */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 765DBB429833EBB7CF282A6B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 347FB30EA4BB7FB8F79A74D6 /* Pods_Runner.framework */; }; + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 347FB30EA4BB7FB8F79A74D6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 6687A00FE71024576C895E46 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 88F213E6DBA248142F3D9BFE /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + CD16D63CB99A551BA2988C1A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + D1CC536D063D72C8BABF1DF5 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E961C0CA195FBE32F634B838 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F619D137137E66E608EBC4AA /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F768F77D61D6DECD1401D45C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, + 765DBB429833EBB7CF282A6B /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CD6202F4799FB25D91497991 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 37E5C4AEABC2CA0643A7B086 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 01FCEB1AD5845EC1B96CC50D /* Pods */ = { + isa = PBXGroup; + children = ( + CD16D63CB99A551BA2988C1A /* Pods-Runner.debug.xcconfig */, + E961C0CA195FBE32F634B838 /* Pods-Runner.release.xcconfig */, + D1CC536D063D72C8BABF1DF5 /* Pods-Runner.profile.xcconfig */, + 88F213E6DBA248142F3D9BFE /* Pods-RunnerTests.debug.xcconfig */, + F768F77D61D6DECD1401D45C /* Pods-RunnerTests.release.xcconfig */, + F619D137137E66E608EBC4AA /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + 01FCEB1AD5845EC1B96CC50D /* Pods */, + E6D7869587DAE79ACE34D023 /* Frameworks */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; + E6D7869587DAE79ACE34D023 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 347FB30EA4BB7FB8F79A74D6 /* Pods_Runner.framework */, + 6687A00FE71024576C895E46 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + BB8BB306117DDBB8CE98F2AD /* [CP] Check Pods Manifest.lock */, + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + CD6202F4799FB25D91497991 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 0956961A5DF932F9DFF1C09D /* [CP] Check Pods Manifest.lock */, + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + packageProductDependencies = ( + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, + ); + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + packageReferences = ( + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, + ); + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 0956961A5DF932F9DFF1C09D /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + BB8BB306117DDBB8CE98F2AD /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.appcheckExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 88F213E6DBA248142F3D9BFE /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.appcheckExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F768F77D61D6DECD1401D45C /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.appcheckExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F619D137137E66E608EBC4AA /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.appcheckExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.appcheckExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.appcheckExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = { + isa = XCSwiftPackageProductDependency; + productName = FlutterGeneratedPluginSwiftPackage; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..d795332 --- /dev/null +++ b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/example/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..21a3cc1 --- /dev/null +++ b/example/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/example/ios/Runner/AppDelegate.swift b/example/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..6266644 --- /dev/null +++ b/example/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Flutter +import UIKit + +@main +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..797d452e458972bab9d994556c8305db4c827017 GIT binary patch literal 406 zcmV;H0crk;P))>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed2d933e1120817fe9182483a228007b18ab6ae GIT binary patch literal 450 zcmV;z0X_bSP)iGWQ_5NJQ_~rNh*z)}eT%KUb z`7gNk0#AwF^#0T0?hIa^`~Ck;!}#m+_uT050aTR(J!bU#|IzRL%^UsMS#KsYnTF*!YeDOytlP4VhV?b} z%rz_<=#CPc)tU1MZTq~*2=8~iZ!lSa<{9b@2Jl;?IEV8)=fG217*|@)CCYgFze-x? zIFODUIA>nWKpE+bn~n7;-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGr zXPIdeRE&b2Thd#{MtDK$px*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{Hig)k suLT-RhftRq8b9;(V=235Wa|I=027H2wCDra;{X5v07*qoM6N<$f;9x^2LJ#7 literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd7b0099ca80c806f8fe495613e8d6c69460d76 GIT binary patch literal 282 zcmV+#0p(^bcu7P-R4C8Q z&e;xxFbF_Vrezo%_kH*OKhshZ6BFpG-Y1e10`QXJKbND7AMQ&cMj60B5TNObaZxYybcN07*qoM6N<$g3m;S%K!iX literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fe730945a01f64a61e2235dbe3f45b08f7729182 GIT binary patch literal 462 zcmV;<0WtoGP)-}iV`2<;=$?g5M=KQbZ{F&YRNy7Nn@%_*5{gvDM0aKI4?ESmw z{NnZg)A0R`+4?NF_RZexyVB&^^ZvN!{I28tr{Vje;QNTz`dG&Jz0~Ek&f2;*Z7>B|cg}xYpxEFY+0YrKLF;^Q+-HreN0P{&i zK~zY`?b7ECf-n?@;d<&orQ*Q7KoR%4|C>{W^h6@&01>0SKS`dn{Q}GT%Qj_{PLZ_& zs`MFI#j-(>?bvdZ!8^xTwlY{qA)T4QLbY@j(!YJ7aXJervHy6HaG_2SB`6CC{He}f zHVw(fJWApwPq!6VY7r1w-Fs)@ox~N+q|w~e;JI~C4Vf^@d>Wvj=fl`^u9x9wd9 zR%3*Q+)t%S!MU_`id^@&Y{y7-r98lZX0?YrHlfmwb?#}^1b{8g&KzmkE(L>Z&)179 zp<)v6Y}pRl100G2FL_t(o!|l{-Q-VMg#&MKg7c{O0 z2wJImOS3Gy*Z2Qifdv~JYOp;v+U)a|nLoc7hNH;I$;lzDt$}rkaFw1mYK5_0Q(Sut zvbEloxON7$+HSOgC9Z8ltuC&0OSF!-mXv5caV>#bc3@hBPX@I$58-z}(ZZE!t-aOG zpjNkbau@>yEzH(5Yj4kZiMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_st8pKG z(%SHyHdU&v%f36~uERh!bd`!T2dw;z6PrOTQ7Vt*#9F2uHlUVnb#ev_o^fh}Dzmq} zWtlk35}k=?xj28uO|5>>$yXadTUE@@IPpgH`gJ~Ro4>jd1IF|(+IX>8M4Ps{PNvmI zNj4D+XgN83gPt_Gm}`Ybv{;+&yu-C(Grdiahmo~BjG-l&mWM+{e5M1sm&=xduwgM9 z`8OEh`=F3r`^E{n_;%9weN{cf2%7=VzC@cYj+lg>+3|D|_1C@{hcU(DyQG_BvBWe? zvTv``=%b1zrol#=R`JB)>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..502f463a9bc882b461c96aadf492d1729e49e725 GIT binary patch literal 586 zcmV-Q0=4~#P)+}#`wDE{8-2Mebf5<{{PqV{TgVcv*r8?UZ3{-|G?_}T*&y;@cqf{ z{Q*~+qr%%p!1pS*_Uicl#q9lc(D`!D`LN62sNwq{oYw(Wmhk)k<@f$!$@ng~_5)Ru z0Z)trIA5^j{DIW^c+vT2%lW+2<(RtE2wR;4O@)Tm`Xr*?A(qYoM}7i5Yxw>D(&6ou zxz!_Xr~yNF+waPe00049Nkl*;a!v6h%{rlvIH#gW3s8p;bFr=l}mRqpW2h zw=OA%hdyL~z+UHOzl0eKhEr$YYOL-c-%Y<)=j?(bzDweB7{b+%_ypvm_cG{SvM=DK zhv{K@m>#Bw>2W$eUI#iU)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G! zhkE!s;%oku3;IwG3U^2kw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn`0X*2 zy3(k600_CSZj?O$Qu%&$;|TGUJrptR(HzyIx>5E(2r{eA(<6t3e3I0B)7d6s7?Z5J zZ!rtKvA{MiEBm&KFtoifx>5P^Z=vl)95XJn()aS5%ad(s?4-=Tkis9IGu{`Fy8r+H07*qoM6N<$f20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec303439225b78712f49115768196d8d76f6790 GIT binary patch literal 862 zcmV-k1EKthP)20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f5fea27c705180eb716271f41b582e76dcbd90 GIT binary patch literal 1674 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 literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..0bedcf2 --- /dev/null +++ b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/example/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/example/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/ios/Runner/Base.lproj/Main.storyboard b/example/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/example/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/ios/Runner/Info.plist b/example/ios/Runner/Info.plist new file mode 100644 index 0000000..0b39485 --- /dev/null +++ b/example/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Appcheck + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + appcheck_example + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/example/ios/Runner/Runner-Bridging-Header.h b/example/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/example/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/example/lib/main.dart b/example/lib/main.dart new file mode 100644 index 0000000..515aa78 --- /dev/null +++ b/example/lib/main.dart @@ -0,0 +1,109 @@ +import 'dart:async'; +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:appcheck/appcheck.dart'; + +void main() { + runApp(const AppCheckExample()); +} + +class AppCheckExample extends StatefulWidget { + const AppCheckExample({super.key}); + + @override + State createState() => _AppCheckExampleState(); +} + +class _AppCheckExampleState extends State { + final appCheck = AppCheck(); + List installedApps = []; + + final List iOSApps = [ + AppInfo(appName: "Calendar", packageName: "calshow://"), + AppInfo(appName: "Facebook", packageName: "fb://"), + AppInfo(appName: "WhatsApp", packageName: "whatsapp://"), + ]; + + @override + void initState() { + super.initState(); + getApps(); + } + + Future getApps() async { + List? apps = []; + try { + if (Platform.isAndroid) { + apps = await appCheck.getInstalledApps(); + apps?.sort( + (a, b) => + a.appName!.toLowerCase().compareTo(b.appName!.toLowerCase()), + ); + + const package = "com.google.android.apps.maps"; + final isAvailable = await appCheck.checkAvailability(package); + debugPrint("$package available: $isAvailable"); + + final isEnabled = await appCheck.isAppEnabled(package); + debugPrint("$package is ${isEnabled ? 'enabled' : 'disabled'}"); + } else if (Platform.isIOS) { + apps = iOSApps; + + final isAvailable = await appCheck.checkAvailability("calshow://"); + debugPrint("Calendar available: $isAvailable"); + } + } catch (e) { + debugPrint("Error fetching apps: $e"); + } + + if (mounted) { + setState(() { + installedApps = apps ?? []; + }); + } + } + + @override + Widget build(BuildContext context) { + return MaterialApp( + debugShowCheckedModeBanner: false, + home: Scaffold( + appBar: AppBar(title: const Text('AppCheck Example')), + body: + installedApps.isNotEmpty + ? ListView.builder( + itemCount: installedApps.length, + itemBuilder: (context, index) { + final app = installedApps[index]; + return ListTile( + title: Text(app.appName ?? app.packageName), + subtitle: Text( + (app.isSystemApp ?? false) ? 'System App' : 'User App', + ), + trailing: IconButton( + icon: const Icon(Icons.open_in_new), + onPressed: () => _launchApp(app), + ), + ); + }, + ) + : const Center(child: Text('No installed apps found!')), + ), + ); + } + + Future _launchApp(AppInfo app) async { + try { + await appCheck.launchApp(app.packageName); + debugPrint("${app.appName ?? app.packageName} launched!"); + } catch (e) { + if (!mounted) return; // Ensure the widget is still in the tree + + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text("${app.appName ?? app.packageName} not found!")), + ); + debugPrint("Error launching app: $e"); + } + } +} diff --git a/example/pubspec.yaml b/example/pubspec.yaml new file mode 100644 index 0000000..00ff4fd --- /dev/null +++ b/example/pubspec.yaml @@ -0,0 +1,27 @@ +name: appcheck_example +description: "Demonstrates how to use the appcheck plugin." + +publish_to: "none" + +environment: + sdk: ^3.7.0 + +dependencies: + flutter: + sdk: flutter + + appcheck: + path: ../ + + cupertino_icons: ^1.0.8 + +dev_dependencies: + integration_test: + sdk: flutter + flutter_test: + sdk: flutter + + flutter_lints: ^5.0.0 + +flutter: + uses-material-design: true diff --git a/images/screen-android.png b/images/screen-android.png new file mode 100644 index 0000000000000000000000000000000000000000..24a3a0869ea08a259053e7d6bfaa191a0eb2f502 GIT binary patch literal 106516 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 NgStjK*+1By{V#}T;u!z{ literal 0 HcmV?d00001 diff --git a/images/screen-ios.png b/images/screen-ios.png new file mode 100644 index 0000000000000000000000000000000000000000..c2052461a7adeaffea118d7cc03accc5f6808f09 GIT binary patch literal 52959 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%0A862`ISySXi(Dw17RIhqBQC5^4+! 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 T-UB#@Yv1leyW)S+zx00qa%F=C literal 0 HcmV?d00001 diff --git a/ios/appcheck.podspec b/ios/appcheck.podspec new file mode 100644 index 0000000..2ad42d9 --- /dev/null +++ b/ios/appcheck.podspec @@ -0,0 +1,23 @@ +# +# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html. +# Run `pod lib lint appcheck.podspec` to validate before publishing. +# +Pod::Spec.new do |s| + s.name = 'appcheck' + s.version = '1.5.4+1' + s.summary = 'Flutter plugin that allows you to check if an app is installed/enabled, launch an app and get the list of installed apps.' + s.description = <<-DESC + Flutter plugin that allows you to check if an app is installed/enabled, launch an app and get the list of installed apps. + DESC + s.homepage = 'http://github.com/Yash-Garg/Appcheck' + s.license = { :file => '../LICENSE' } + s.author = { 'Yash Garg' => 'me@yashgarg.dev' } + s.source = { :path => '.' } + s.source_files = 'appcheck/Sources/appcheck/**/*' + s.dependency 'Flutter' + s.platform = :ios, '9.0' + + # Flutter.framework does not contain a i386 slice. + s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } + s.swift_version = '5.0' +end diff --git a/ios/appcheck/Package.swift b/ios/appcheck/Package.swift new file mode 100644 index 0000000..252477c --- /dev/null +++ b/ios/appcheck/Package.swift @@ -0,0 +1,22 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "appcheck", + platforms: [ + .iOS("9.0") + ], + products: [ + .library(name: "appcheck", targets: ["appcheck"]) + ], + dependencies: [], + targets: [ + .target( + name: "appcheck", + dependencies: [], + resources: [] + ) + ] +) diff --git a/ios/appcheck/Sources/appcheck/AppcheckPlugin.swift b/ios/appcheck/Sources/appcheck/AppcheckPlugin.swift new file mode 100644 index 0000000..a67136e --- /dev/null +++ b/ios/appcheck/Sources/appcheck/AppcheckPlugin.swift @@ -0,0 +1,50 @@ +import Flutter +import UIKit + +public class AppcheckPlugin: NSObject, FlutterPlugin { + public static func register(with registrar: FlutterPluginRegistrar) { + let channel = FlutterMethodChannel(name: "dev.yashgarg/appcheck", binaryMessenger: registrar.messenger()) + let instance = AppcheckPlugin() + registrar.addMethodCallDelegate(instance, channel: channel) + } + + public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { + guard let arguments = call.arguments as? [String: Any], + let uriSchema = arguments["uri"] as? String else { + result(FlutterError(code: "INVALID_ARGUMENT", message: "Missing uri argument", details: nil)) + return + } + + switch call.method { + case "checkAvailability": + result(checkAvailability(uri: uriSchema)) + case "launchApp": + launchApp(uri: uriSchema, result: result) + default: + result(FlutterMethodNotImplemented) + } + } + + public func checkAvailability(uri: String) -> Bool { + guard let url = URL(string: uri) else { + return false + } + return UIApplication.shared.canOpenURL(url) + } + + public func launchApp(uri: String, result: @escaping FlutterResult) { + guard let url = URL(string: uri), checkAvailability(uri: uri) else { + result(false) + return + } + + if #available(iOS 10.0, *) { + UIApplication.shared.open(url, options: [:]) { success in + result(success) + } + } else { + let success = UIApplication.shared.openURL(url) + result(success) + } + } +} diff --git a/lib/.DS_Store b/lib/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..051d435ebcd67aec51ee18e034dd2dca2008f622 GIT binary patch literal 6148 zcmeHKJ5Iwu5S<|@ETM=uRGBnGZ59}->W1!j@v&E|2?gn+I0>&N5lk8=+ zdFb;mU%xZkwrQ4|c8N$edB1wOxp=$nXV)jPyT|^i1vDBJpaN8Y3Q&Q6tpIwqS#=)B zl?qS+D)6O%eIE+kuukj({nLTPM*yJx#=GI!X9-}j0I*K%0ug~}P=P_!95FQLh?lIZ z6T85mi~7wtCvVoAP}FZnym+~29mtgmP=R9wMzNh*|G$I(F#jKuxT6A8;7=)_<7Uy! z@k-fS2QO#6w!rV? permissions; + final String? signatureSha256; + final String? developer; + + AppInfo({ + required this.packageName, + this.appName, + this.versionName, + this.isSystemApp, + this.versionCode, + this.icon, + this.installer, + this.sourceDir, + this.apkSizeBytes, + this.permissions, + this.signatureSha256, + this.developer, + }); + + static AppInfo fromMap(Map map) { + return AppInfo( + appName: map["app_name"], + packageName: map["package_name"], + versionName: map["version_name"], + isSystemApp: map["system_app"], + versionCode: map["version_code"], + icon: map["icon"] is Uint8List ? map["icon"] : null, + installer: map["installer"], + sourceDir: map["source_dir"], + apkSizeBytes: map["apk_size_bytes"], + permissions: map["permissions"]?.cast(), + signatureSha256: map["signature_sha256"], + developer: map["developer"], + ); + } + + static List fromNativeResponseAndPrintDuration(Map nativeResponse) { + final List> appsRaw = List>.from(nativeResponse['apps'] as List); + final int totalDurationMs = nativeResponse['duration_ms'] as int; + // Ambil durasi spesifik PackageManager dari map + final int pmDurationMs = nativeResponse['package_manager_duration_ms'] as int; + + print('Native getInstalledApps total duration (filtered non-system): $totalDurationMs ms'); + print('PackageManager.getInstalledPackages duration: $pmDurationMs ms'); // Cetak durasi PM + + return appsRaw.map((e) => AppInfo.fromMap(e)).toList(); + } + + @override + String toString() { + if (Platform.isAndroid) { + return 'App - $appName, Package - $packageName, Version - $versionName, ' + 'System App - $isSystemApp, Installer - $installer, Source - $sourceDir, ' + 'Size - ${apkSizeBytes ?? "unknown"} bytes, ' + 'Permissions - $permissions, Signature - $signatureSha256, ' + 'Developer - $developer'; + } else if (Platform.isIOS) { + return 'App - $packageName'; + } else { + throw PlatformException(code: "404", message: "Platform not supported"); + } + } +} \ No newline at end of file diff --git a/lib/src/appcheck.dart b/lib/src/appcheck.dart new file mode 100644 index 0000000..6110e8d --- /dev/null +++ b/lib/src/appcheck.dart @@ -0,0 +1,95 @@ +// lib/src/appcheck.dart (package) +import 'dart:io'; +import 'package:appcheck/src/app_info.dart'; +import 'package:flutter/services.dart'; + +/// Main class of the plugin. +class AppCheck { + final MethodChannel _channel; + + AppCheck({MethodChannel? channel}) + : _channel = channel ?? const MethodChannel('dev.yashgarg/appcheck'); + + /// Check if an app is available with the given [uri] scheme. + /// + /// Returns [AppInfo] containing info about the App or throws a [PlatformException] + /// if the app isn't found. + /// + Future checkAvailability(String uri) async { + final args = {'uri': uri}; + + if (Platform.isAndroid) { + Map app = await _channel.invokeMethod( + "checkAvailability", + args, + ); + + return AppInfo.fromMap(app); + } else if (Platform.isIOS) { + bool appAvailable = + await _channel.invokeMethod("checkAvailability", args); + + if (!appAvailable) { + throw PlatformException(code: "", message: "App not found $uri"); + } + + return AppInfo(packageName: uri); + } + + return null; + } + + /// Check if an app is installed with the given [uri] scheme. + /// + /// Returns true if the app is installed and false if the app is not installed. + Future isAppInstalled(String uri) async { + try { + await checkAvailability(uri); + return true; + } catch (_) { + return false; + } + } + + /// Only for **Android**. + /// + /// Get the list of all installed apps, where + /// each app has a form like [checkAvailability()]. + /// + /// Returns a list of [AppInfo] containing all installed apps data, else returns [null] + Future?> getInstalledApps() async { + // Ubah tipe pengembalian menjadi Map + final Map? nativeResponse = await _channel.invokeMethod("getInstalledApps"); + + if (nativeResponse != null) { + // Gunakan metode helper dari AppInfo untuk memproses respons native + return AppInfo.fromNativeResponseAndPrintDuration(nativeResponse); + } + return null; + } + + /// Only for **Android**. + /// + /// Check if the app is enabled or not with the given [uri] scheme. + /// + /// If the app isn't found, then a [PlatformException] is thrown. + Future isAppEnabled(String uri) async { + Map args = {'uri': uri}; + return await _channel.invokeMethod("isAppEnabled", args); + } + + /// Launch an app with the given [uri] scheme if it exists. + /// + /// If the app isn't found, then a [PlatformException] is thrown. + Future launchApp(String uri) async { + Map args = {'uri': uri}; + if (Platform.isAndroid) { + await _channel.invokeMethod("launchApp", args); + } else if (Platform.isIOS) { + bool appAvailable = await _channel.invokeMethod("launchApp", args); + if (!appAvailable) { + throw PlatformException(code: "", message: "App not found $uri"); + } + } + } +} \ No newline at end of file diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..c42cfbc --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,26 @@ +name: appcheck +description: Flutter plugin that allows you to check if an app is installed/enabled, launch an app and get the list of installed apps. +version: 1.5.4+1 +homepage: https://github.com/Yash-Garg/appcheck + +environment: + sdk: ">=2.12.0 <4.0.0" + flutter: ">=3.0.0" + +dependencies: + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^3.0.2 + +flutter: + plugin: + platforms: + android: + package: dev.yashgarg.appcheck + pluginClass: AppcheckPlugin + ios: + pluginClass: AppcheckPlugin