From be5d377488cc9a4b7c926c6949279e5798603b27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sven=20Na=CC=88hler?= Date: Fri, 17 Dec 2021 15:39:07 +0100 Subject: [PATCH] Add CustomStickerLayer example --- custom_sticker_layer/.gitignore | 1 + custom_sticker_layer/build.gradle | 77 ++++++++ custom_sticker_layer/proguard-rules.pro | 21 +++ .../src/main/AndroidManifest.xml | 26 +++ custom_sticker_layer/src/main/assets/LICENSE | 1 + .../src/main/ic_launcher-web.png | Bin 0 -> 37823 bytes .../android/app/KEditorDemoActivity.kt | 176 ++++++++++++++++++ .../app/custom/CustomGlStickerLayer.kt | 95 ++++++++++ .../custom/CustomImageStickerLayerSettings.kt | 12 ++ .../main/res/drawable/background_black.xml | 8 + .../res/drawable/brush_preview_background.xml | 10 + .../drawable/button_launcher_background.xml | 21 +++ .../src/main/res/drawable/imgly_logo.png | Bin 0 -> 4918 bytes .../main/res/drawable/imgly_logo_pesdk.png | Bin 0 -> 20860 bytes .../src/main/res/layout/activity_main.xml | 90 +++++++++ .../res/layout/imgly_popup_brush_preview.xml | 57 ++++++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1356 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 2018 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 3258 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1037 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 1295 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2105 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 1868 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 2484 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 4574 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 2874 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 4432 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 7232 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 4093 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 6471 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 10634 bytes .../src/main/res/values/colors.xml | 7 + .../src/main/res/values/strings.xml | 4 + .../src/main/res/values/styles.xml | 8 + settings.gradle | 2 +- 37 files changed, 625 insertions(+), 1 deletion(-) create mode 100644 custom_sticker_layer/.gitignore create mode 100644 custom_sticker_layer/build.gradle create mode 100644 custom_sticker_layer/proguard-rules.pro create mode 100644 custom_sticker_layer/src/main/AndroidManifest.xml create mode 100644 custom_sticker_layer/src/main/assets/LICENSE create mode 100644 custom_sticker_layer/src/main/ic_launcher-web.png create mode 100644 custom_sticker_layer/src/main/java/com/photoeditorsdk/android/app/KEditorDemoActivity.kt create mode 100644 custom_sticker_layer/src/main/java/com/photoeditorsdk/android/app/custom/CustomGlStickerLayer.kt create mode 100644 custom_sticker_layer/src/main/java/com/photoeditorsdk/android/app/custom/CustomImageStickerLayerSettings.kt create mode 100644 custom_sticker_layer/src/main/res/drawable/background_black.xml create mode 100644 custom_sticker_layer/src/main/res/drawable/brush_preview_background.xml create mode 100644 custom_sticker_layer/src/main/res/drawable/button_launcher_background.xml create mode 100644 custom_sticker_layer/src/main/res/drawable/imgly_logo.png create mode 100644 custom_sticker_layer/src/main/res/drawable/imgly_logo_pesdk.png create mode 100644 custom_sticker_layer/src/main/res/layout/activity_main.xml create mode 100644 custom_sticker_layer/src/main/res/layout/imgly_popup_brush_preview.xml create mode 100644 custom_sticker_layer/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 custom_sticker_layer/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 custom_sticker_layer/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 custom_sticker_layer/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 custom_sticker_layer/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 custom_sticker_layer/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 custom_sticker_layer/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 custom_sticker_layer/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 custom_sticker_layer/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 custom_sticker_layer/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 custom_sticker_layer/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 custom_sticker_layer/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 custom_sticker_layer/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 custom_sticker_layer/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 custom_sticker_layer/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 custom_sticker_layer/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 custom_sticker_layer/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 custom_sticker_layer/src/main/res/values/colors.xml create mode 100644 custom_sticker_layer/src/main/res/values/strings.xml create mode 100644 custom_sticker_layer/src/main/res/values/styles.xml diff --git a/custom_sticker_layer/.gitignore b/custom_sticker_layer/.gitignore new file mode 100644 index 00000000..796b96d1 --- /dev/null +++ b/custom_sticker_layer/.gitignore @@ -0,0 +1 @@ +/build diff --git a/custom_sticker_layer/build.gradle b/custom_sticker_layer/build.gradle new file mode 100644 index 00000000..12175373 --- /dev/null +++ b/custom_sticker_layer/build.gradle @@ -0,0 +1,77 @@ +apply plugin: 'com.android.application' + +apply plugin: 'ly.img.android.sdk' +apply plugin: 'kotlin-android' + +imglyConfig { + + pesdk { + enabled true + licencePath 'LICENSE' // Name of the Licence file in the asset folder + } + + // Define the modules you are need + modules { + // Add all the UI modules you are need + include 'ui:core' + include 'ui:text' + include 'ui:focus' + include 'ui:frame' + include 'ui:brush' + include 'ui:filter' + include 'ui:camera' + include 'ui:sticker' + include 'ui:overlay' + include 'ui:transform' + include 'ui:adjustment' + include 'ui:text-design' + + // Add the serializer if you need + include 'backend:serializer' + + // Allow Background Encoding [Optional] + include 'backend:headless' + + // Add asset packs if you need + include 'assets:font-basic' + include 'assets:frame-basic' + include 'assets:filter-basic' + include 'assets:overlay-basic' + include 'assets:sticker-shapes' + include 'assets:sticker-emoticons' + include 'backend:sticker-smart' + } +} + +android { + compileSdkVersion 30 + buildToolsVersion '30.0.2' + + defaultConfig { + applicationId "com.photoeditorsdk.android.app" + minSdkVersion 16 + targetSdkVersion 30 + versionCode 1 + versionName "1.0" + testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' + + resValue 'string', 'pesdk_version', "v$pesdk_version" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation 'androidx.appcompat:appcompat:1.3.1' +} diff --git a/custom_sticker_layer/proguard-rules.pro b/custom_sticker_layer/proguard-rules.pro new file mode 100644 index 00000000..f1b42451 --- /dev/null +++ b/custom_sticker_layer/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/custom_sticker_layer/src/main/AndroidManifest.xml b/custom_sticker_layer/src/main/AndroidManifest.xml new file mode 100644 index 00000000..5c0aa830 --- /dev/null +++ b/custom_sticker_layer/src/main/AndroidManifest.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/custom_sticker_layer/src/main/assets/LICENSE b/custom_sticker_layer/src/main/assets/LICENSE new file mode 100644 index 00000000..e8c9727f --- /dev/null +++ b/custom_sticker_layer/src/main/assets/LICENSE @@ -0,0 +1 @@ +{"owner":"Imgly","version":"2.1","enterprise_license":false,"available_actions":["magic","filter","transform","sticker","text","adjustments","brush","focus","frames","camera"],"features":["adjustment","filter","focus","overlay","transform","text","sticker","frame","brush","camera","textdesign","library","export"],"platform":"Android","app_identifiers":["com.photoeditorsdk.android.app"],"api_token":"-lIPN9NGKvlJBI90zPVrFg","domains":["https://api.photoeditorsdk.com"],"issued_at":1528984457,"expires_at":null,"signature":"h3Q0G/1HZg+t9WXXYQ+b6YSbGHc3UOq1ktOci5tNf4xTV+A7igkTPCYbxSIELZUyAr+9idZNt8Z1thIVQ+3Kzaq7kCzaDgl+vHAglrxHTZuscg8gPjSGrfXWUeUNA0PZUXY72q5DYVc8BRaTrCdnIfZPScnvi1QmV/+M/ao2VGq98/Mu8jb4jHXpj3f/zTlsaBwUgLFCerR2nEYm8m0cpjxuGu1DSIKxCC8JgTxhPLC+w8LS0+gSlfps69lVUap7VyAj9DWCARQDfeHSAnokYzvTu0GL7xglCWuZbutaVezA//oWaa0qIDY66tOXBKosULRp2VqShATmfbvnIueAkEhWZSyMX+G6MRI1VYHtI4Q5YhMQLSWFvsIP6oVLJs+iiMpUXtcglGp85TGY9x2fQcJuWAbvFm7vYnTJqTHyiU81uZF+goC/N8zLrn8gORreOmdvDqQ7Sff65k8I9+D6cv7gtZGw4mxGohbMGqPuTFCXlbsCCA/58KTYJoqme/wPxqB0yhBE9VBU3W/y3TFjsv5ZmhZH1YheiN/fTOlnwSij8ZeaFCLtkNcfSmS7EWhPDWfZxptiRS7/BJqVRYxRwRc4W3KWMc30EiWCm0F+WDW64z0ayLH0g8KA56eaDR/8P1P0TNPJh8uS9t56HmvBmEU5pDrVm+BQRP3oPf3OFss="} \ No newline at end of file diff --git a/custom_sticker_layer/src/main/ic_launcher-web.png b/custom_sticker_layer/src/main/ic_launcher-web.png new file mode 100644 index 0000000000000000000000000000000000000000..d6d766a7dc512657545fa35ceffe54eee8a4bd51 GIT binary patch literal 37823 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�sq1NveB7ZEy{>v!C(9 zsR@9<#9_jfDNCKu*Fc>q)WXWEQmh>}A$QQfaZ-#?Iwm)640SQ|@0Q;eS(Dib-gx_f zad$TWluRqpV2!qXzt$5MI#A{|vO0=t5f>g>{KEIZ>1Vj|WiUD+r*@4V97Q4O)Dser zb>K8a;D~F7_X=cPv1TN8G&@1wFjmWG%D_EeV9bg+SZCZ5r+1?%5R?BIk8}i@E@?*$ zj0dFt-DLN*vpPsw5=ufX+64LUk~Dp>bN@o=Ix{q;u)xyy!%;~V3Dg165#qz)bSG@k zAcwnDhahiQfVXQDZ+$Ou`Xg#cg->hR24y$3yMcv zuQE_Ui`_6ev;|=TyP0AhDVQqR*uPqf;~!F^iL;Cf`B`tvaND#5@`4tU1e-o@2Fprv zj75|kR7k0zIK0+Oh?t&Q)3KV;fVTnHFsI62#n$+kWRegx3{*|lZP-DX5P8JpSLYCL zZm#uIEZ+~iGNarWnq~+!pA+4_6GhL7hi$&Nn7uOa#i`4ty~y-ay5r)tUR!(3cu+sM zZ#hIj{dD#>s>F_ezx`(95QiA0g;G`57&L6{N%%e$_g$!4me3<;ct2u-^`mo#nQ1oJ zCrNJOZeQ%xE0crF==VnV<`Ao#-MWo(3(a6xgyg^-Q}9CuRH4MS_SZDya!>>1ySqPM-{d;J7Gb}l!7V+i}JOwLTj6QfQu^yWGMH4?=508x?Qha?h^IOzl z-cU^C5+*fd0q|Qr8Q@3G3itS=;-IkhFVAYCIjV!`-fu)FhqU(RCQa#U>usx^ewR`6 zID*&3B@S`PG3jX?L(&R&PE3(w79%nm5(0I|V{4*gK5>VQHY@wrSEiDXh6Q&u?Y|RT zLUFRFnmzBDEi|XdC}FU7De!KMfnU2t#n1Ryry&=g?E1;shjnNpenYFp0Kf z-)H5=yV8+D^cDkE_0RL4cMK8tKkZkY<7Yq|g>O~bh@t?!9h>_kn$yDA!Z-Oy1Gdfa zJJ)$!&}YeK>(3p8!%=K^rQ8DUI3Ac>G4_^X6?O$=*}WToF7{#@LF6ci)|+3F<*v$= z<{+OFzNd*g%MVUp=g#n(Q5-g zU6ZkM1{Fto3`vxziu$N<+18*5$~yQzn;jp-x(%Wd5~FyUah^l7y3s68o@K+ekGkWS z)Pl)@J1tpXJKR%s?^+m2sxTvK4v79H922uqjma~HsTu|4=Zdn7hHSs0OR%R+O24*C z>{4Z)!2iQ>`M8n!FFn;ohnu#jUenuLr!Gx>+laK_zHjvQgP%l-RPKyWm(2uqR=dNn5{+kH$bSMZG0hWa);u!+YM$0S@F2h&OIIbYP`S&zl zIBJs*kAAum_uPm^$si~(_Wm&yKUAM}vq^}ny(LoAC}?bEtUjN7YitVn4Pkd__n>sz zDHnrEoE?yxYMYRSb$ORdvBIC&C}Qt_Q$(ujRzKqPMYfSZeTJoD-}zSr0Y98)3aueF ziPo3F0e&4KLy2J^0;BBZq2Sl+^t5-JxIOCcAa?wR@XcZIwP>B+%YWUdrYwTstHKJK zH_$#P*l}9LV;ZiaoYb_HZ#=zzQ}~QPY7SII2D~2~m2MaVfWVdjZE4bS&^Nsp(P=})Tpc<4z>>_13wlVLIM$r^* z-^Q9(WXdo9E!vzmd=;~*fIQPgdVbYz-c6-GGD{{j?w)V706Vtk1|t@Ja#Z*t1Ck)B zXEICpLttuYa&gL<7G z)0=bo^G0-r(J|tfGDrHv-%fDvH%(utaz6lhZ?cWRKfjrZ)!k3}IK zYA(ehX0!;`zZ1`J-lO;Z`z7?9(vU}vZhcErGHd=zmx=XdRzl%@m-iP1i2XUYAMk+U z)79U2{8>&SKUGTMeqoaK#y@GnzFQ{78HbFn0aL5-|7EBRT8R9z}6Shf0 z?JR?tpA23&XRKY53Cwyw&fq^d0 zS)CRfT-_#Y&4Yr*40VE*6t8_nrVBX%CGxcQ+#y1x55yg33CA+fHLkn9)SEIouTn_keISBROyaY^QZ zifo-uXCeA7Dn7BBcul@g+y52nRlXG0E9Uf4c#S^qDNI(zuj1oF*|7H&6psmvfP`$P z`=fOVv8ozb;Zj*pp%%A4$pR^)P8_0W71dbz$PBpZpJcQxR9`|9sOPI;c^Kx~UQnr6 z$;ViW2f#q(H5~#la|r(Iwd2M2l)BaV$#mhxU6}vv!&IRAGf z;x_Hf<6`hChiUaIPP6FEVY%o-xq2+3iv}kEBbk|!*I4fYDX^J|^ENAPNQD}2Ymqf2 z8|4&OG%d{g>Qn_bgbkENE__}yufs)EDwvI@o{133sK)JlO)|dZfbF$aW?xKe4xpMx zweM(!lqWaPo$D1Q0Cc5?83#JA=N}h%X<4qi;ui>8A|YsP!-?5=VA#;b1?YMm9mSU3 zy*eLglPHsN1*?iti^I=G736?vU4)2FDq*RL%PrZD(I|U}*w~M-#;dHolw+!=Ia31^ z5^kNXs49u=9A@);QKHx@{&T#O{3>mCb5ctp7jfQ#DDL}zfGNvvyZ}=F8TXOjZBj_x z#ouP8yS0_>PCpYImO=V6^*(2o(_Qxlk6T#Lj?hz=LB*(~%M%QzI&^3j1LSHtt*ou@ z7pzDeY(@rCWXV}sCv@@+m9ay57pip ztLR6#pY=PPA4?d}eE{RBL;jr5*`VfdE0^e6oi7Ci~%> zG{FkBXs`zbq)ks57nchUU;Z)B_H*?U_r2UN<%!Qwh+-HItxY}C$5YvCJ{{r~%#h%0 zdY)G9M6;kbPod0A=`qVBj?38gzN*A{ea3xcF74T`XO@oswkL)4D-_298}!Ea`$G#b z-UI_feW-L35jg$o)BAg-6czD5#fI9n4~J0~MuX6vzvMj+@4m1(-{4+6q$z-1Cj-pz zUT>#W1+cU8(Nr?CNgni)SgG!`vbiUxj9rM8HHZ1khU@I?Tvh->(y1%nmc9n69)`FYk8QDUmOYOJ#k=*tc_Q^cFXA`e z(2X=QnIlfpIBJBkSf>5kF)5SJ-s0^t`~_v*@q1sq6002rQ;HExxL;xD8D<}VtOsp9 z-bz_?n@a?!q*wR_`&{yY6VuI;yQ2=9W+%eogBl@a&n%z)^(Q2_voFH0OPkd2qY_`c zK$6G)fIPrvZ`I?AODth}pY?>$ARV=*`()Zhh=e2dI{ApV!T8wmAw3f(QU(|pM+C_) zyl{aIREbDN0DP8MnDa8$srPJmZQ8F-yio0&syHvfoDxi*T#J<#Bdvg zxkgs1-xkmc?2$X}F=QG`pgBaDdISyQGAoCAR3{C&#eaz>ko~~UwNUga??TB43r$~E zcDg7Y_f#Mezy7K&{zjk$ z%zCq~3>!9NHYnI+MUeV-9021h-jm$=y%_jrBP0(D{Z%Tpj*4x{VdQCcAfvU-LyO{O z1;|gP_?q@~;+^nt;#=5W3aO}i)-aQ(*J-~k)?c0QNX8VnwVKf`oZ#PRNyRytwaeW{ zQPeEF2A$@{f^V&Ti`uahh7}i{px(VCKaK$^HNy}n8Gp{cX#%ee20_CqVY+zh7KC!| zFm}cA9GGDIv;Ns{M-D0w4U^;#S(D8Dt42Fz3{#wDB)Pw~y_bCKguZ+_g}nLKEvpn8 z)4kwI;>z3S>2O>YLL~i;{h0{5!ki}5Nl+(bA zX6nn|L7cx!r7>2N)AwrL#S%$hSu$Y|svTPFHz?{zib8EI(vM1=Bkm-)(`9T(3Q7pn zX9ljp z=dE~GJj!6nJl{9fz+#Bd@a8LqTf_0-Bm{<1&0^En%t}yFgld8uayF4^Zj1~Bk{L*lh3Nh3yRLGib(Q|-MwsiPmSh=8+K23n04S(XBEUKrbD7+*qe$flOVw-5l25TI zMxSB81db(!V8sH(WzSaB+4WSyJ!oZ`Vm=WH*-Ejh~oC zBsH%PxKfoW$Qvw!gp||k+o(TSxWr78^hcGsUQ$3u|{Z$cN6$G^;V2aKJNo|pQzvUmzKwi11 z(t>tdZYYX^_u;B+ADSmaQ9NY|<~zjoRyh%;)X>Z=@9)RPg|UwhexCU2-p29rK4Ieq zaI!!`rzk}O;|bTR_Xb$bTHK=hC;c!`&-g`Val(t>VY>w*7{J zRR}P|9nowjI8%g;TZNW`UkN#H{P}m{=@CSuC5jKU?h&ZbsYG;qT0593O|^Qpds-DU zL8o8bIvLILVy%cHzE?&cT{Nb)ep+wJ==kt zZM(7BC*ulKFYv5U_p+B`%mJ^Eoug=4aIZ_R5d>PO+k(7+cC&n4>Q7Ls-yvMPAJ8Ig z%ZT1ywy|7-CnuCc%5<{wJ^F1I$f+;tRjvXAzsC@Y?mkq-9R8&EaUs`s(?#>)zYC!w zDHrfh7g??EIsf{&WffpSfPFB#n`&B5R8u`$y5}2lCqDhg!GE)~QU=Aoth4)udp_8# zv!5Mi!Jr4dgl#TbTJ6zR1E7zsnI zMVv`LPgMUp*kqfqeHg5_+-@y@DJLw3Uvt^xqW0`}Wgp_$-yT*z$r7=%zeQ)l@r3Uq zgMyVNwW_7SLpZQSg!^io+lIy1i>LM`o$ULP?{3Up01cK>MaIA|fWQZaYIBb~By%%x$m-lMCz=#NLr z`BApnav2apWU%8o`+N8Krs zNTx@;+od)EcVa`eY^3Bb)ZkHkN?r^Ag+Jz}@H!)~aeTczC_uk^p71wsg7)aOoOpi# z$$9-jXo?NGe+wM%HhV1_F zyi>hE0TO(i?CP8F{TsY8a5)qCkbpJV23x1uo#?uVYd1*VGi%5jd}kg@?nw258ZzY!6)AKNP%F_Nj3 z zm-b^CYW$`L!HJJm)?%{NJ1G6e9gC2cgPP=HNP<1!CVX zB)JJwUb2?pTQ2TVZwqtp_-H`ZVW+5Gq3x{?*E`0Tmt}fVUaeEftxor|fOggq$S0Mi z;eWFTC1~u%CcEwqT#U#QrOaMzpXDUt#O!C=($r$r13s$wN}C4c>1tG@xcfq z?W>ntzj(jbpM7X+0G}9B92MrkzW#v8umm@t2+dk1etwf)ZC$bC{o@5=xp1cx_-}^e zOZMYm|MIA0QQ-IIw8}a*94luqAPh4-{-}-;u|>5W)IQtFPOfY@R^c&F*-+bU*wZ$u zM7;=QtouT)$fapysr5o`D=KjiY`uSLq+WoxGOL2 zj2)2mjly!*hm?&*_+)yGA80o-;+zFFeQv;#t2%|U=KhA-@ixb^=5*^bsfzF_;S0vP znfr>iH-)%c>h2#G{vVpoG9aq1Yr`|N(uj07(%s$NAdN_ebk_h%NT)PNBPrdWDAL`M z(ujc4Io~-v@An_hoY=AUTK9de{0{}}rYf&~Lg97!2vz$}EEEKGqHZD14z7K_Tmo66c2U>A z=&N@-0vdX@Zzq2&tg`XhIeAF)0M|R-}bs?-jg#nU3q9cct)t%_NF?g_xD{7d6%7xs5X%{c&}B?I;_q>7p9u$&o$|& zq*Od;=2CPd+54m>w9w4glX03UUsSlE;jWSCwhSU5J>i`JFFMlL<10|DB%zJzjokRD zXPR*J<9atgf3k|4qaKU#@2T3VYIFe=1FE`g8u)hl&7U(JE=`mDWs&^rW@}1nr^Cfsl|qjIDY4vX zC%w$+Ngwuyxe9wVI0vzxWmt=+Jk!T0R%_^2$>tK;>YBcXV zuY%si5wMQ00l#~T@=K;QvRCs$Paq<*maIUpmM`%nU?Z3P!N0AH?dfx501kPeF3Ei4CvryPrUh2UCfzJlfC7#)Z8Dnh*;7FaeB z9Q&K|6tl_5t-yj=N)StYLnF8RuFxa|OZr0BXB+Z9ZY$Whfk!s`L}c}5t_6I-NDxnZ z$Ewfr$3WoglC1mZS8s`U*)#-AQOKe$Tp!c8!#YO458R3IteF{ANqxltY(>@(f>z-4!R+u$ z0|d)xe=a?I&J2Q9_WdtZ3_O!ib9=W@Dh-bzaJeT7l1RcXx@v>ZE7iv3Y^H>)(I$D7 zA0CGShJ7r}TDtL@#g40AG1-nDrX-U%eoaiCgGTs2 zvqMVw)sK?fUb^-XOd?f$+x(!5eGt-NPh)H5_WilsloxRI6$C?CtErj>14xB^sLfCr z>nxj{46nC~asDV+z2(OANdBSsxD{Eo>;BAbCOdCr$5P9uwtgQpwx2=V`?oRdX};|U z+h;0eb6j+XaRf5&g;%pl>9+~kRLVSr7TQJTla!XkgNv`AFLS~GbVQ4l3<5%XkT)#t zixe9VVvYb(s1>Izwa%lCDY>zSB*&lGc116tCrWD3sf;W>b#6~0`CcP)M2`m z{NCDi&W4antcgmmL^K0I;=KLhQo|q#i__oc@SBNN7JzHS6fs(?*YvXityOj}CA2Ci z_=54;fu1A~_@IDTH!XwkyCh}GxZnaimSXj5-kGGa;!Rm4vWTNtTkfYcjz3C#mu7GFjE9c7R;#hzx#PMeK4?sRQG%cnsp|gQpH&ztuE@f zhF$=+p9)3?@JnOpO;aw31I4dl^y%+!+0{+o#!I&T?I(p78Rhh}9ku^X?{=@Y4!>i& z?;%>`CdAr+!Gu#Bx&VJ%7M9^HGPUazH|N6jlD@)sjW0&Kb|anRc?V;S*+WFhq%Lg8 z%f6d&+f`2>15Y6@Q8whsgT}=!S(&e;980vla(eX1_6C_S%-H2spyy9H#2Mp3St@pY-`#lL1B zj0@$C5ysxLrw~|f70Si<8#{fLtB1&-={K)<{{%G}Ys=Npbp*h>^_Z((5;y-Oksjgz$<=FcQLJ#u?t zB2(LOf}nrM@AJj=jh`Xp z-{^EXCCChz$ZR|Yhzy#AIqWvBmzh@s!P>ReSk2>#3Ufloou|Sb{2bjfnPCNeYlIe5Js`mPmOM*4#2d1`4jzTJPFyGjE+-t{U#Xl1)z0bI&CaMlAHb&^$ z_6lRN&_cPxg>zIXa+>SGRGTCtQ`U`WLRP(kFNQB-PLJ4t zRO1--x}B?$l`aBr2ew5j!d_})9u#f-!Ve-jw+w+Kmy=bJ1Q|S=B#TG!p-S|sMqo(8 zK=Pe*d}4?WWfw$%O@L~~-k5*ARRa-N{>NN5a>^1nlL?=W*(6(mtt|bXe@LAmKHJl2 zn9l=)TUHn~9cg&#>TRh}A;chVok!fiXeVVV+84RwE0q_L0V&2$+ ze9b*Y8{j6Xssj8`ufD>k?Rjr!L39Y<*gw%HIEKWgIhW5 zt}OdMVm{`eW-r;4c=mkg7nA9FK;t1UZU-L0lf#lrD)ld*_DLv+ym>f|%lS z&vm<*bh`|n2Ou=ed+~S=6RgD_YnY8Fb#X^G4(h(mnR6SFG`lfOU915yoQjgg%lewa zA7D1x2Y_f?%mMtALRSS6VwvFN=IvE+%1lhS`Xq(b3 zOVRt>icO(Z`u>$)RNur&|I*8s*iJcTL5L;m_jVnPsvu5NERcw2jqo5!Xd*2$s+?t0 zGqZfjgWvD7b$)rM3$S;~e6Y}~nHaihstu}E;#fW9$FcV_!MQ|ed#+gCh0U$H^rA^Y z{k`H;RYs6Tud04S^WpToQ|o#d`crCG5^i2F#GA#k`C#hJjMrw`c%#%LgrsILEzfiC zp&$ApS=y2gEeu(71oyl6Pagv2DDD}|*$l=>(aoATM1^w4ii*qWgM|}u+l)1GO-K5e ziytJlP8q4Ji5Q{v2BUeKcCaBgJX%{*(sfW%$2{3+6_VO24h$#t?>Ub<|BJ8rjpgBF z9e$b@o#Bs~JFhu64bc=#R|_!7x_#o~T$CITH<~U6Eb+*6wW>@{7tYmJfI5d7TLj%F zFDBL3@atm0faHQ8!A4Ia_12KCXsZ$oRWM8^oq^;U`{Ydl0Pj<%nj(y6mZ*6+vbGkm zLOj7q6`;C?gueXK`LxI~&4)l)l$N0cNnZu+tObV_7h$utLtv3uIhBo!aUEmBYf6X& zd{5}_<7Zh)s!A+St0QT-q~>w{6+g9wAQTGHhRzz7R7J|+#g0Zq-{C0FhB!|3v?Jlj z0w5t5foKf-%rq$#1IbHMsErnI{4uw~tNRzASes(<6dVgLE0p41n~SWY(BExf?tS_3 z_CtG)?puru#qm$b@Ar&ee))XOjg|9ai^c5k`%gh^h@~P(0)_90n3bC}WY7-9X`}3v z=8Nb_Wg9|UC#IYWfaUZVHpJ=Sfs?$rTq^BUP=nQX%rmPrt4-ZP61yiBhG>?GiqVAg z*0RAqDrDX~BoD#U#h8~l=CRP0n;t^$PyTY5{40n} zCJ;&dNH7l&Gfff3yw7AfhnJt58HOx1UTgye4{Yi7D7Ttizb$>Sq%rn&*i`y7FG-v1 z*S?xduDU0vBF`)l#`gwhp^;G`;h=6bo+&V9vuFiizD@J2WnvupD#CC7OR^rq{gJH` z$GOsUlo!gSjd59(8Pm@90IG^O&_zQBTW1?U9kVL-E z0F%xOl4%$DN5W2)<;6$hldSnp8yn)GgRUb|L#y*{!Ee{x&V^HbrpzywR8p}3G6;wM ze2x$!-j^X=AY-48eAOUv+py}>bGuU7EXlpw3Q6(C0%MxH<>k{9b>WHzMFN(ri3BFY z>?ziRbd|P)Ykthn*6F@Z{&9WuS2PDlMiC3VN}XXwIPrcpJEGB(JFKvK9SyOjR9?q? z^oeyJWEpTUJb?&0e6liCyt`0=;E!R1Xdz~Q=ci9vHUE{u$#ytK&syq5|eB? zB$_5IL7vKH&?bo1b2`}4i!p1bJkaCM9NgU=xEV!Q7Bwsx9n~{DTLr=?na$?2U8I?( zn&*yViY-HaZc8f(QFF*v=?Z`HCgm(N6Ft1O>pz0iO~O|D{5Wt|1ii!bX?;w2a|ly~ zBOd+@hycSHwP%0g`cRzIgn*z@ec6BLMw|>BQd?ppu(oQosrtdM;h9s~wCLg1HxN%ZvP%UYUgkn*;^AEJW( zfv71OzX2pd4X)S=Bi)>SC9e-xjRlE)Ptk_H2>VMh7Udhu<01Cdi)+J+GQRGTivlI? ztQ{ms28b1bRy8R0l9xS6#L01Ng9NWKIYPhDiKc*utLI@5vF~)Q`|c{EOFSiD7Xh0Nk#Ji05cx<$u4zs}Fu$DTR5V&@D+mN31H9 zSrPls2_bizatuU+Hp%AxV=~Ike1BY|Gx)2Oh(kqP&W$G}(gUlP->iLnaU1oZaR2b9 z2mV06y*x!wZbChs$|~8i)0zCF3ORX9gM@i(#?40_G)S>toupn&UC<#fZBvn<{sxRg z#t!L#oayu%g)WvB>nee^em*kBp6VyoJyFiqL4n^(cF?+DjYSlw=M1DbukGIuOJy4* z2eY0QH_HmzzNS%M)TE<*YbZG`8x7Q_9e+V3^D_@mo*}OR(lX@l-irp+rkZ82c6z=B zrB_22f2tbB9Nt`S-j&3c+%x)#U$KsRhX4xod7!@kGpn8d4lAvzrE{C@HPnS$p03PI z!Dxtpn{c|nDKkPT^h$Dwm2HU`6rpcO0?8XSWXQ{UJskhpsWQE~-=ABxb0aDTP*kN4 z@D_(-YP{zQFCqnZ5;;jlo#21}7($Ln*RJHBx%3IXjJXKT^IW{PVJ>j9#H?&Rz4rKdKNYEKe7QLV}ih)`a3%w|ZcF4C1Z_<>@nYAAq zqM_K@Jy@%A-imLfiY#?5DH8@;Cz>Jp#*myhP%qC(cxz9j&quw0uYyN>b1!L4VDaNp zi^`cLMrP3)YW2!RJE@P^f%mYI&y7#BC>Eq^j56O-^*5iD^*PS0AWXC|Td>`%(eMRA zaitp@_N3oZaU z*pM6C4Bn!fN|~4V4DZ&?RlSp%AN*Gk2BJ)vp0s;^BQr&7nlCQhy(~U+XNnhiWN70dbG?>~l<|GBl9_J(dd4w7GQAf&XitXLdHS)UWY}29@UVK> z-QojUWfa?fCre6@7W7|(SRE@Q!A%nPxV{rWXX``~vOND@L3}t=xLe#WKvhLw<;x3 zrgNeY^uqbiv)D!lm(VfM-G64jO!^DNGI>so8T#^T#`f)G9A5%{HK|wrC$AFcG z;bZQ*Zrys!gIqG+_}=;hrySH-35j_co2~C)0#s#1Fml6J^*|S;RE~c9m9s97g0OS) z=tYexA&ryD;``eEvBpRrN`nL``aSRFqA> z?Md{_*AlU(f*9iDTi`2-H3$9#azDe+)qfZz-5?w^(>@$APpB0j8GWo^I|1Rze}Dlf zf!H+t^gTp)s*{@}swY)Q%+`dqfZPD-gr_qyB5WyOzGwuM>znoKfk;!7#|N{+$8M?| z&t@s$)eI=d941T0!m-M=Pe?DFmGu!;GV)*lF!Sw_xB;ag+K@VBcJ=O8(V1 zMt@Lpj9d2cIb=^gOxQAHBE|C_l&olT_{4!0g5&a{_!mw7%6Uj%(4?V}X#KntR)G;8 zCAeexZ9LSiTEK(R4jzPc5Zm=iFFdY$or}A7>prt*yvo)-^b}8}SvFWFvOCE; zEBRv0+(>qzbJ{AAXDuO?fJ%o5^`zR!WR!kQS-!CaKn77?yBZ5X{z!SWrtFp{!mP9t|1iO3IUvrtEB z*UgYncI}l?;v1nARAJa1JM1HN9!Z%WM!iVk6=I|GnXPHKkDzRBc#a}Ou43@Ed zi?r-oUk@=oEC12%c9j?Dj)a5Ui^n9hOt&*Lo+|tF(N0Wn#Yjh4p^%hAVjgo55M$qv zj6l9UQ?oE$SqFsyHrvbW!VoWuuWF{T@p)%cnPwM&C%)ivlM*hd?mNQZ_)(PFgQia^ z7Gu(|7`rNtw%~D$-RRZ{)5JsgTg_ZKh>KUevg*u>XrFSk^;z2J9aHW(4qh!hbNDgv z`gEe5S%+rjjqnO<@hGF%*AMn?7dTJd_181)cyw16T>CIpo;*7_On60cN%1&UG8;MN zyBpb)aZ;<(N{8!VgvKE?BsK#fo20FU{dd5jMLIG{IVb>db4Gh;m`8pjkY0T7ZG_7#Sq~1;_emxAS}GJR5%R*#NAyX-|7hd zl_h_n|6syBawP@~ej}YtibF zC9fnZZSprX&}dF#8%Y5nP<2T}Eq+vIS$yp~HomWbYngQdg&I&7b1UB1S{-;&4@iR>bA$5#!0a3FN#20~9?u za9q1%v)X`$4G^5NiQXuJu57jmX|m~ns`NrKrTK1t+K?Ys zSXSqA1Pmf&Kdzynr=pEdnAM0a@`~=d+o^3eWZr(e0@PMoZ+$#JP^r>9gI@!z`y|r5 zbA7-i0Z=VD=^>x2*-%k;LjYWv{FQC2jOh_Twk|dEPNI+#Dhl4cH#w?C= zGanR144{x+R^5hse&)`jmWuMXiDSYYt1Ja$(q5C91TUoW-KInsT1AEc8=Li z!{f0de8p45!I%0?cjIMxOJ@nB!Vm=_D88E?5{!F*H_P%98dC4Wi#yf*$U3og4%O@) zv|+=r`{afuITZ%Dp?96D09%k+k#p!f(A7upAw%~96|NEk83k%k#w$`%9-+PIQSB1) z28Qo)sspM@SG@vWnd?T*2J#mST<_k4xt*xAMlr7V^vUuOyBR=>#lO|VWxwdLZd7N~ z&&OfZ$b^`k&dKNe^nFtbFK7)bq=n&^r81Nxu_1}ZRf z61(+X!b11Sy$IE-`ZD+$oy7Xr;~NYMnfb7ML~a8A>M1z4yx*fT@-t1CH1R}ZH35X` zp5t8x{=dCpex!gIcjKt+D+Dw%?Vh%LI2C%}K}8vXR6$mNlCa@ur$oQOC|O0bME|^4 zsjZ7=^&;7~teK_ITA*Cg?zwi@eS2j6p0VxCH2m%sV9jsjt6>z!BowXt;QqC8_6*)@ zYC(0#>lhz91$`<}X??Oc_3y;u*_;l{k2d#mC8~obLs)QCXNHKkgC7F& zg(g5n>WBMi>N)HrYbtc|>*?|zuzHCT@CB#0nA+GObt;J_b@|7nhQF?N63rXEH#!$u z(gXK*s43r*DK5olmUUKmwBehrHn);W1v~zjt4jTkJUjg*SYn!y!@$Bf?WDGZB0guM z>Ou(=$qFSEwaBZ>gwW^ATSk$eC^*t2;vMzn%m0`ZT$Rfv*;0V>{0D}6lX7(kTfFRX zkEgv6Tt55ea^!|ByUCCgF~2zGbMG@KyRlAaD%)2xXO`{OD6e)&)%nUcvmp4}z<(o; z6DQ-Y45do0q9nfR+{wg#+|OHcW?}EX#g+dIw&_GwydBI=ieC#TbY`)hKf(5MA)Bwd zg;|=9p63C65&NH@>OaG_PjRl)s#n1o{#h~EJ%iW%Xxr}m0i<*|qzf1QEx?RxH!g&4 zJ6ig3)BsMAPXUgHY(aN!(S(z`wQXiaeqL-_nP9PYq{5!D9nfM|(kjt$Kbvj_5=wgy z2@9&XIxZ-^M#B7@a3MHn?+0wa%y;#i?=ro04A7#8r#sF)RsL4FFi@-^tKFWqb>8I6C&} zKFuwx;H;^d_#yG|_tWo39!Lf4xG0!j!iu9!ROUZwcqeyMhaPR$h}Se=zf(J(?v&BY z596qS1K^SO=|COQjIRaZ^BdqLVU&@U?f9n&0_N=8|GytZ$+|DbXPZh14r%Xsh)vIG z{~Z5{;b5=+&=e-2i+~H~{^PP?O3>>z8kC+UbiI}Gg8?-N$P((C*3OyRO6CCtCrB^Z z`&^u3tsk}I{)HD+tBUW~FWq?==z~tapnhl`UTT)82w`)evzk8bIk_y-f0a}>wO^Jm z-t4{#+=iZ4mw|bZmp$dks94NrM2rK708GHN_U1X(WZe-7#P%{e8cuAmQMzzJw%k znmL|o_^++@oSg9Hz{_N2*`u#9UihFKD7O~J10J!>|9$3qkm_*>)X4Njo}VJfV!HTG zXS-8IS`59QGxf3!1f&ei)d6f{Jsis6`29)St8<8uKgl1=gRf^4p)EiP+-ykZe|MI= zDi=Tu zatS0Gdw|;lt>eVBIsd&X#-up^x^~x?c+r3PsrBha%j0jHfg=bD4Y%%t!@J;ggSC>W zjHM9LqHYP7j~Dj^jTsm~G6noX-!dnAvfs4ZKf5&-$xJOb`&S3=P`ReP4LU2L{3G^o zwW;>6d$<80tM@ee(j!hVAT$C~|4bZyJ#L^dvs!C!kElxccpJFM+f=|J9`|#K>u;IF{r-#HS~&u! zt4Xm+U!nNL=LEe!2`cPu#Y}2D|6L0TJpr@@FYY&*;)5~%PE-@g#4%ntcEa6wHVd&DPj}xGY#;zx_p=YJK+T+c@=;Aqp~?oT_}}jx!<^b=g|!Z_Y%3Asn=@#e(}v z%W~0um@NjM6}b%r$51h^)nKfP0JRlq6cY=UTt%b7N)#qIP{i0H2S5VbVx;p;V3qLL z6i^H41@uYQ9X`U|g)}oob~0XPp$rKw&jERrWVwN^JHIjwgD)2J2T?~H+pQcS*TeJ& zM^n)f0Q9yC1mV2=gQNgC0%}`(&VZX(3)uvwj#6+3a*h0@cR=&W+uVMyKdV|n_k8ne z^RH+13`QFs^^Mjbo;gO@Pz7^QR_F%mb`?Uo-E&^;!d9(=73gdpl?F6g`XKCcgYjwt zMvTA%>`5+}eHOn=Vi;hKB@&63uda6%54LOB7MJ~YbGOM!eRie)93m9O49e{;J}$bh zrYU=>n3aA?KR^WJ*b4O|WfmR1Dt^SKfL=oU*GUCRQ|)TqU$F!l+S26OqUS z!IB*n9&;-VMY-a;^>FO;4bj5DOGzX#jJ8#4+>1Lk<`7)^vidDC6kSk(P^zzGfL|5=yq z{IwukdNwk+?LL838f=^%;@x`#x1zqQTKn5k=&fpFDWW?nJ8F~T0%WFrPOLoY<-^1gnlNC~I!)h%W zU(VlbY3sy}*c;}eDbu(NuvPqlklY}tp!&X}H}OrF{jQs*eZ9hvRTDt;%)d2p0i=VO zQO8sbIy}3G^RIy9(a7oJ?9|ieDWlPj@5{wN{A#6|$YL#TWjmAS*oGe!W7KM8YSc)s zD9!SnsiL^+6nof1^OpluN0-}Lm&w_mee>7%1?-Di=~`2LoRe6O$IEFM8YMSsZ@P7d z2yiin(BqY0><5pWru&PEBfWWtr-F`l4KxnXqA?(Q?E6Q_?KtD?n*tO`!n;a~q-i9)J{PfE#YP;z2i)mh}AuU;OMN_Va&5bCpuG za=jY>Z+q{NX2gEH9zKAOVJ2|=R#L0ZeW)Nztrw=9T@QPME~~pp4(k=8@NPpUjIi92 zt~Eq??=6`V0FDBTEE$D+^DJ&Gzq5$tvVdRD@~>no#w|0ab@qlf+?kAcaDiS$dF@zH zqJz>S9+|2KcR&fn-?l)5K`KJd8--b~^j*!jx^qIS8;3@5&y!f=uK(2SilyB#AD5?i zC>(iE>x5a^LIJS-$Hc0e`@6mqiluo^Z}PWWY zZMXPgW9|553qWXV-Z@^+vSuvRo2i(^xkw!_0?1 z^mw)$!cF|*Q=Z$=blU$^Ny{f^9uw z9`uQwEZArR-;i$d{yl`g_XLD?XC0!SK@>&mX~1&$ut9$R#ZJ2k)=tHf04AmgwK z4GH%t=fs%o7i>-l+K!kG>|2TTW1dedE44y#w2RJIlv((o=DWp*S|Em1(_)@LC38nR z)qDzxXV&>8srpqM@#~%p6C>^^bmGY~Ek-)@E}Dv0kT0=Vi{)88ZNL^+hRF*arSiNG z&QfA5OG3yW4w8`6$b@N3nqD;^0k!f-X$$R+85h;Bmtgu5uV>4I~ePo#|!ObtVT2Dy@Z7?USM%I84#nMpMq>+*`9Qc8-Uw z$t~WPuDo&j*MckBhz8ix%{ExLRE%5AAJ12$x7SwUcJZG&WF3&Dy87*6^m6a`eO#o> z-xWJ~uz5s5OFG#JBi;X#p%i73N-RL8YNV?05{?oyvOq{u@0Y5?xA@Xnaee#{g4>q= zA@k%`nV9=|AH zT8DuJjj3}f&**7gbp$jkmF3EsA5ICHLErNa=-n&JNQT>!qscM07eE4R4x zFucD+5gB|+m4!DaRamw1x`jlG}r`X_1^r4OI3Kf%>EedH}>e%4}46b`SO5p&a`bC152Wc#>8>-g5M zF^*(MmnF71AWSngKwbn<#hkLIB1f@&bMA*`jV49bE^{KdTzwYeb=KjNm27h5Gc!e+ z7RJ@Co`3r_OY5^rmUb_Yoz@n&UAltQ7%(6O^z5_^|55HV}6gEFC9#$o2*ll48PIFR|iNf`4oc3`RzO5MO|Cp2?F zGqJq}ME)X#L;Hx_#80$)K>MWDO-lL)aw2bq&_l%Ul18MsP_U#NHJS!E@Z3t+ji-6y z1m$DxvQ#MP!cd_QW#~5#MQIHc=3Xzn+(LfC?ECecXg#lc)7zn}Z=VxS?D(0Utuq20 zt$0S4F!`RbQ3hXatQt91^Ldb9gAWfp{_`auV%CWOI{k!U#(w#i*F57BqFR^Ef#o`} zr!5eg`P2q$VmkjUpmz}O_!_KWuD6SnNU-`XM_Y5jBk7ysteA~MtC&P2my8I$Hk~ng zcypQe@pSHFIX>ka`meW9HVZ9fY@%KYx0f9Wxd_`-YmP+pHYixTTzH+3W_D3isKDnq z;(G&05#>wNdHzMEc3u{4bS0=rPFob8crP{{5BO{u!@Gcr`SWe*0D@3Gc?TRE*iQ() z8cP{av|)iz%{eXHMLeCA?>ks~YtGPhng8o!YW;@N!fKyI4sG2AKG7$h!KraYAHL11 zTkCkR!K-C2MPXhQ1X;$AiJld)4uU`*{_X&NiTU>gun^{ET@wIOINu5F@w^>Ew?VTJkL90L%CK-JUhTLbqu~(CYa_^pt zN3Wq~s%8^E7v6s$*k4O`hcV3r`WHAPA4T7E@%oHzi5H*FjzDL2*FTB5^*MhP|5$8u) zb^IF{wKHrc5Tv&4V=H&AZ6leQpvfcyyZa<7Tl$jtRq~UZ|6cpY5)Gm87>@4Np-E~? zGazU3I!y!F4Cv4(khX}#P4w-x1KCO);DUh6idI{1da@R-qO-RaWD(iwBmCMbPUCJz zL53v%lfQw3(T}Bv$g^JRs9E#hqL@C0ujBao-A5(S{}E`B@|ne+vlBl+)LDFbkMRr; z5HK=`KZI))a&_8$T-2F=mVIOHq_&8zrsCnA=85A*M>~dkvF>{*a_m#1D%?;->2T zMUU{38_Gb0OD&6M5r&I1h=BW+%>suAqW`r|QC^ypDs$Z`F;OY(#jc2u$l|Jyo@rU- zr^-*iZ%bUlTqV?VSAVZLR(J91ToG`Kd@U&b^xCtH(gOZ)@0YvW^JEfY2eFcDO;n*X zfIy!4E6Gaf0+~}sASO^RsSLG8vZ9bILnQeE2YL<-inI{#^c}V5D%?u1JbWiKAIV3| zJv}V+`LmRk&tz9p3!}AFo!WF{(@lSS{4S}2dpX*+w>mH*KREM*i3CytP2~5Q1o7IK zk)^4~nDW2hth6^d3sk%t_TO8uAq4Vt3G?w3Vn%}*ytfU{78WlMPeHaC0gJUMXT5b3S2*xqt6Fa&5XDdbJ%3{JhhjtJ#5Nt;g=9rIz@2(8`m@=2H~@<%Rrfnti7PK|(d6KM zbSg2Ez{IdtNot><$qwNOR_iSxCJaRq#gzhLTi636|CK}I$az<;s^?m{aB{|Nu10|V zqUi!fZj^x?3H$F>*mI9~_qh1#CjIU?Rd<0r$Ee7`u827Vv5!km`6=&SQ^#QZcmlPe z70IUz`rv$kh0GK}@IW4gB8f7jmzh8K2P{YmBtql1%ox{*VF5<1bRIQE9Xy>*SyCX97H#ciB;p2Keh4)&H zcgFa4j#oLX4co?T>KQ9Si+KJ>M={_#k4Ik3K(%ilsLTo4EfwHS*3#lR(2lhU%_dMefjqKIP>KT%4|8&x2 zKlIuLqJVb&FzS8TlEwCAEAi{@Z3{PBA}a#@J1|>b!Ho>Z?qS@HyEZXU<)JGlKOj-7DmcOYxbu*A;H*$Z#-tyEx2Zg$mABDH`GxWW5zV&#Z*oHW_C% zmU2Sn4sSB26om8gJB&q)c8Dwx7EH(I&rXhg-_&;gQ+~Mn&4==Dtt~Vug;1{^D=?^@ zS2cjnW8=u27eWF_nj+t+tnFS(QVOg_Qt-Y53K-VGh}2RoE2BZx84NXdK>#|(5%3iT zsbpe@35!9Iu6c{3PHZp5^Piz1gtUK?|G1RvP9q|HqCPu2Ao4(DFpo?@`FlL@1T+3l@80CATF8j>-t%d?$JLMGEtbcd zn$5rv0Yr(8SKfC(5yI&Y;8-2hnODU*oF!*fxGvxD*!nzM5s?9tiNxB@gan(Dzy+5S z_lq1NLW?3W$p4i}fD3k@UkUZ04OmVL)Kp_6y(Tf8z6E4EyF9l-HQqqFb;ow~b{qdY z(7#vn7RWdL+f1q!MYmzFKv2AWjfA$P_xs@vgIDPvhT1(i1=fdI)JhuHfbbyRbVMip zW@lg>STnM)D>j%mfbe;04&8%b3dzD`70}yva@D8pO7Dkf!2=_(xO||r?m&Vu^X74h zM5G$+)8b*D+_zfa-6IUJ4+z?u@S0X`$?=e?Ei-2J>&k0~7xL=cp1n z3%$Fc(J>D3qcP0k6K-fH6)A?^G)J49ixZZX=ZwW|2&L?H#D&0>j4qm!la*#kU zB{QK{8s=v91T|MdfW9D$#HlYyN`8a8EHCrIlykj2R}5(4 zEE;&_D$dhu%ZC2t=KOa!^oj#h5>5o$?C#Vq$-W2j%cDLY_UR>fQSp4yZi=rLgI0lG zZUT0Kt<%3j!P~BWxS23uWLB|dLPm&7-T_sPm0fo9=Gz~TD$@=E#1j`1*eXAy?+e6= za(TDAR~z}@0%K1p{JGA4H?SlJ%EN(vdOCpVeE8puIIUZ?#C&8d+6Ppwr4Ly_l?u$) zCg6Ek^!(W4!#i%s@44#AYQu)oX7}wO7d}XkC4_taq6NHYKZ3_Jx#?XFS^;z7-+C() z!Ty$@Tkr4((e*a4B-GZHb*!br&0~V&`S&|vz^XaHGNj6^tDRp+==zcbCe8&}jJ(L; zsM95P4mceZn8zX$Or*4>J>jv4fY?mfS2My)MNDr2$hhA2=P$g*-GF_#3DCQ730R2h z7%C!iiij8+H#z7zTU!3ArA6edg6_RStg{)-`W+Zr;y?+hxCi!p{^PBdirV|Q^xKO+ zm0)i>wKW>WrTlCtu|O>DsgSaOI%H&IWJbU0y$Ak z>mE?Q9nNOnCF%S&CSj7IO7LYW#`80@j$c$X(2X4Nga=bHffyFc6BsS$&oNx@ce>Nb zb+R{Egvp3PArUM}S@rFCkGRObJ0cYiWbXNAYZJtYpC}gA{Rbmm^47{wY%yDyb6Wb1QGXh~X@4hn#jLL!}ty%$*lpg~u zg%HDn=IS+?U?|rfZCZ)X6nr?HO+@4Iw)`w1`qm>h{^p2OQyrZ0nbfMN*c4UdLhf|q zPfY;(v^eSh%~Adld~k3ugf1PQi=H1c%m?Xu1yQel4H?VG%4+Wih^#Js*AKZOK0CDO zAbNEAVd{J(Wbc8Jl=N1|Qi&YV^%F{g4@R$M|I2*x1+u3uQTjq^xY#;yvML z2t4n5Vq6k5gVk~*5v8C5WqnHsqgS*kNKc9G~Dy+`Gps783K`DTw>ThO>->4 zXB$J@fOJ`u^%h?&&9y2WwT7&hqIHyT=89tiDm`$$bJ?CoT}z5f6}YO0+#W=NY8Li5+r4ZKGe~;gLW~+3X8as90&*DDG(mHO9sB22JT=Xe*TMqV&5Td=mS?&6o$R`E|(~1wu`_d46kLY)JiDPd!cwZME-c;R<79WLR1>}wx=e31xE8JSjt)#Bx|V+^u<~mX zy`9;Um!V%J=`4vT0<5#4qbbgt& zJfck!x#4-ymrcHE!kWFoz>49uxrq;9^b+&aK9BvyKJ z1tkcaRo6<#j|U#k$S{-?uifEx$(xYFYUQ$fr1DJ?j5)273_uTGE%+>5RfkK0QkOc# zd~3?z56``YRFe>ruN%16ikkagdV`pfZF4_RA{M`{>h`s4;z|{s_Jq(z;EKD3D3_-N z{drPKp3w*YSmCe>G{A`h!9-u|Kv*_ZW{mn29(b(24Z9t{hBu;8eOQ4Y;RR4s3`9Gl zMj91KhxJaG54!G!9bYAv_ ze0vV3Ci9rCnBRAVl)k9!#AFVMhF*#5?=X}j5g3@EBfG#Iqvi#P4{Lar^d|9I6VG`T z&SAALA{&me_vzE8t!D?0uKso|PvE0v3QhNgPAxf9YJYsg&-%_BNYv9a^w%GayDb-o z<4o_B4<5L<;w++U`0*NDLi*dWQK&*-)qkQbBT)0@84rFKFM#3?2+w~=rMm7>=@y<8 z?uJV|zJtFkG)9r&C*}p-a>~cn_bve*g%@Q)5AFGk$hOaNrEysdI?3AYsuur zbDNqiFGCRmjt1?Y%*&rh1y@vPbiu48PQ2T8qzlwmP4_# zQPY+>%L=v^|C@ed%y!30=d?s5oCXL*l^5Iz;A#E4bDyx8j;2W!lz6>EQEPryr+yw$ zV?lo1Xxqz4K!=kv3-{_Z4?eh@(TlC&R$f@;Nw-F*2Sw33%j-R!4@jf8P#*S2(RYM*P8nO0}1bX->r)e4lj6pBeGK zvwf@?rcUAT5i(sksx#=<``Q8rPdbpKD3$T?y}TTmTz*55Q9ruNX}(Y8Y`Cjp<`{Nw zaX0K-n0e;SY7J)vx)Sp6c_G8n$;)ioO4(+YO+73crkyAb?OwuiTbe9>wuWTQvMUyX zA^750+Kp*4a}w@dJb3^XWvj7#WVPAq>`W^ZpzEp|SoiVWToFHbFFxB#zIYr-z-d-p zD8`r^wrDDH(@pN9%;ML^kU}lAue?m%4uR*SDID55o1#^+;w{M(fAn>Cd>ubn;D~7O z(D=`XGM#1zD#_7i9RQvGJ3rsJ%7oKk?hQ+CuIDrSfGP%UTT2Z6d-oVpvEAN-6e{)2 z(;Uxwb%2e5zU9A)L(arOEz|1_%L;7dQMkb_?6C&cc@Y0O&~6{@ae@+H{S$QwSMPka zp8l|z1Xu*b`QTh=jjbuQUM>D3Vd#xymaGxCCG)ua%NeJ+)!i&H(i^^mA`0bjUTkc> z5Xo&1ax^6JH0029)1_O}J9ObJI+xOGTXTX^icHhg^)EOam;SFDTz|;UbeTO_J(@+A zjcFyk$|}&4{%^w+f2?jL2%bK{hzowkg5Q1R8t+!$m#mQl%#uvFCzu*8rN^Uvw4#!O72r`{y2DvmV*3-rPrE_+b&H zW=+-K%^f;W`*B)^&lEy$9vTlMTh?1j`9Hrof0B%Rwz5G PP>At1MsieN@U#B`8@H}9 literal 0 HcmV?d00001 diff --git a/custom_sticker_layer/src/main/java/com/photoeditorsdk/android/app/KEditorDemoActivity.kt b/custom_sticker_layer/src/main/java/com/photoeditorsdk/android/app/KEditorDemoActivity.kt new file mode 100644 index 00000000..19eec4e9 --- /dev/null +++ b/custom_sticker_layer/src/main/java/com/photoeditorsdk/android/app/KEditorDemoActivity.kt @@ -0,0 +1,176 @@ +package com.photoeditorsdk.android.app + +import android.app.Activity +import android.content.Intent +import android.net.Uri +import android.os.Build +import android.os.Bundle +import android.os.Environment +import android.provider.MediaStore +import android.util.Log +import android.widget.Button +import android.widget.Toast + +import com.photoeditorsdk.android.app.custom.CustomImageStickerLayerSettings + +import java.io.File +import java.io.IOException +import ly.img.android.pesdk.PhotoEditorSettingsList +import ly.img.android.pesdk.assets.filter.basic.FilterPackBasic +import ly.img.android.pesdk.assets.font.basic.FontPackBasic +import ly.img.android.pesdk.assets.frame.basic.FramePackBasic +import ly.img.android.pesdk.assets.overlay.basic.OverlayPackBasic +import ly.img.android.pesdk.assets.sticker.emoticons.StickerPackEmoticons +import ly.img.android.pesdk.assets.sticker.shapes.StickerPackShapes +import ly.img.android.pesdk.backend.model.EditorSDKResult +import ly.img.android.pesdk.backend.model.constant.OutputMode +import ly.img.android.pesdk.backend.model.state.LoadSettings +import ly.img.android.pesdk.backend.model.state.PhotoEditorSaveSettings +import ly.img.android.pesdk.backend.model.state.layer.ImageStickerLayerSettings +import ly.img.android.pesdk.backend.model.state.manager.StateHandler + +import ly.img.android.pesdk.ui.activity.PhotoEditorBuilder +import ly.img.android.pesdk.ui.model.state.* +import ly.img.android.pesdk.ui.panels.item.PersonalStickerAddItem +import ly.img.android.pesdk.ui.utils.PermissionRequest +import ly.img.android.serializer._3.IMGLYFileWriter + +class KEditorDemoActivity : Activity(), PermissionRequest.Response { + + companion object { + const val PESDK_RESULT = 1 + const val GALLERY_RESULT = 2 + init { + StateHandler.replaceStateClass(ImageStickerLayerSettings::class.java, CustomImageStickerLayerSettings::class.java) + } + } + + // Important permission request for Android 6.0 and above, don't forget to add this! + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + PermissionRequest.onRequestPermissionsResult(requestCode, permissions, grantResults) + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + } + + override fun permissionGranted() {} + + override fun permissionDenied() { + /* TODO: The Permission was rejected by the user. The Editor was not opened, + * Show a hint to the user and try again. */ + } + + // Create a empty new SettingsList and apply the changes on this reference. + // If you include our asset Packs and use our UI you also need to add them to the UI, + // otherwise they are only available for the backend (like Serialisation) + // See the specific feature sections of our guides if you want to know how to add our own Assets. + private fun createPesdkSettingsList() = + PhotoEditorSettingsList() + .configure { + it.setFilterList(FilterPackBasic.getFilterPack()) + } + .configure { + it.setFontList(FontPackBasic.getFontPack()) + } + .configure { + it.setFrameList(FramePackBasic.getFramePack()) + } + .configure { + it.setOverlayList(OverlayPackBasic.getOverlayPack()) + } + .configure { + it.setStickerLists( + PersonalStickerAddItem(), + StickerPackEmoticons.getStickerCategory(), + StickerPackShapes.getStickerCategory() + ) + } + .configure { + // Set custom editor image export settings + it.setOutputToGallery(Environment.DIRECTORY_DCIM) + it.outputMode = OutputMode.EXPORT_IF_NECESSARY + } + + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + + val openGallery = findViewById