From d2f1d094d40f8f15956db1c20d546e07d25a8c41 Mon Sep 17 00:00:00 2001 From: ObserverOfTime Date: Fri, 8 Oct 2021 15:12:39 +0300 Subject: [PATCH] YaoiMangaOnline: new extension (#9400) --- src/all/yaoimangaonline/AndroidManifest.xml | 2 + src/all/yaoimangaonline/build.gradle | 12 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1632 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1229 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2308 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 3504 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 5094 bytes .../yaoimangaonline/res/web_hi_res_512.png | Bin 0 -> 16945 bytes .../all/yaoimangaonline/YaoiMangaFilters.kt | 432 ++++++++++++++++++ .../all/yaoimangaonline/YaoiMangaOnline.kt | 109 +++++ 10 files changed, 555 insertions(+) create mode 100644 src/all/yaoimangaonline/AndroidManifest.xml create mode 100644 src/all/yaoimangaonline/build.gradle create mode 100644 src/all/yaoimangaonline/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/yaoimangaonline/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/yaoimangaonline/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/yaoimangaonline/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/yaoimangaonline/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/yaoimangaonline/res/web_hi_res_512.png create mode 100644 src/all/yaoimangaonline/src/eu/kanade/tachiyomi/extension/all/yaoimangaonline/YaoiMangaFilters.kt create mode 100644 src/all/yaoimangaonline/src/eu/kanade/tachiyomi/extension/all/yaoimangaonline/YaoiMangaOnline.kt diff --git a/src/all/yaoimangaonline/AndroidManifest.xml b/src/all/yaoimangaonline/AndroidManifest.xml new file mode 100644 index 000000000..95481c3e2 --- /dev/null +++ b/src/all/yaoimangaonline/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/src/all/yaoimangaonline/build.gradle b/src/all/yaoimangaonline/build.gradle new file mode 100644 index 000000000..e5f8b63f4 --- /dev/null +++ b/src/all/yaoimangaonline/build.gradle @@ -0,0 +1,12 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +ext { + extName = 'Yaoi Manga Online' + pkgNameSuffix = 'all.yaoimangaonline' + extClass = '.YaoiMangaOnline' + extVersionCode = 1 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/all/yaoimangaonline/res/mipmap-hdpi/ic_launcher.png b/src/all/yaoimangaonline/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..9ae63abaa00e6488d5b4c6c672e8c657500fd745 GIT binary patch literal 1632 zcmV-m2A}zfP)WH-nr?3p<;FiFnl{&M#2M|J~Xgb_v!BXGre*mB`amjxYnN=Tmt zkmI=B${|dRR0C90HocU;K%x`_8uz^gfFe~u zrPB+M9YBFqq;3J(ljq3#$C2IYN3OFMxu$mHEf(cBX|*DEr3tzAF63_BL(VaRY}k#= z=|}2aObSH3i^wLt$OfIr-5HE6udxle%If6H;CbY#F2fmIoh zdEEP3)__ta*V(HG#9M7hr(R`cQ_b!^O7a2Nka|Mt*7&kO)DuG9YE$l_UWaBJ>VJcL zRgJ7R>$;suoi7VSL<#w>+sZ%}%8`1PGy!q_V@X$E_Tr_!fv6{hTsm{n-AC%XM+hTd zTPLr1ttZo3Uml2v5^^0km4Pa&k@(-J0~&J6=QfK4*`$~oK-4XywMAnOM>EF}rPx+5 zu~uuR8tlCRBBF$RN4N48&3+lFu$s}J*w|Fk%{p`WGpe)aK=fIfT{P^@Xi$7pyBxZu zL)EIfr$9uMkhNV`o{O$DAx*O$=kmvP0u%R+pL%l>h`MHz4oKET<1^_2wcn6;Ph(r! zz`6q>qJ(^sLCLc9nliRqK#SEX#~pp47DpdI%$a<(NStJ;TTtkpE={YaZh?p>A=h$E zxr;t?Bu_*M*`%0s!lxsXT5$9OL?^t8U1YJHNBWt=1U|_@Fn_sTYxn2}h=>weS~`@w zsPCb?d!}B+PLU+eJ%diIIQjxgx`UV46&008eakyv*W-{sx5l1$UMKf~s3;*<-=e(9 zcRc>|8t)=<=P$^g*FTmG9DM;1Q9}CUx$Fi3L0*Mmx_07s% zH0VU?Uq-H?O8&TGBwIN810te??D5aaK$q%~bBxFztEfWiU)KB{bPYs=FmiPb$`iKj zyc|x$Nw(Yp5+!8Alge{ZB3OBa=F_w}14M){TGN<|c6863!EEE`7)X?mrL#r*&^?t^ zNWHK37f`zUMX~PrX*Y264MfEB_KS9D?#U4#Q9{1Pp1OOQukIF({(*=nA!omwx{C~; z)IdfD89*9=n%WJZlyi^)qyW^|W&ovJ#Tr@-pp+eC04a1(ee*sCx_Bvd2N^)MsXM5y zai0TKr#=?r>KgVrP?9TEcjTq|eGXJ!nHs3}N`3=T{~M&95Yq7(WJAwl-&XY8M|QOv zxrP?StI&9>4Ov4gvW{+KJr1PzN01GT3IrZ0~_=9Z4=*$zoRB*L1Er3qVtg zlAeL89h$xhiUE!Je$@c95Y1bl`0Y^Uao_K%fzD0MFKxe}F0X*%H`Eo6cqG+8KMYUa z{a8%Jo8X7t$od}aTG}R5U*U>07}+ZIE#von{X+my1U_H-K=B(~4*@+6Hg e!U!XBBK`*=tAd2$Un>#-0000# literal 0 HcmV?d00001 diff --git a/src/all/yaoimangaonline/res/mipmap-mdpi/ic_launcher.png b/src/all/yaoimangaonline/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..e1621d129d6333e8af4893ca3569eb730fc97785 GIT binary patch literal 1229 zcmV;;1Ty=HP)9w!yo` zMWiN_m@$@`?mHeQT=4pyIWPT<3WIPL4b25h)GecAb&DD8aH=pSmZ^m;py);${`kcQES}X zsZsJRr}HfS^0E;5Er!GKe@K|`ms1HJ;xQI~c{wjc@<$;Y=Qtb(EO8(+OF$kj7AM~t zV2P(hW|s>aKNC!i)de@U5keni1xP+D#?74?EN#8Q5(g~uL&4c|OesAoM#A@#M?~T& zvEISL#&>idW04=?a2#|?8?Qc|@?OvMRn}~Kd({Xb^!Z$<4vVn^EO8(bKcdbapp+IR zGU}0Kfc6d+W}~AEh{TU@I1akt#zF0{ryy);3^zeeUs$0d27Y9U6WIU|cOgIs>WoE5?BM))G!AO{zD5FdYCA zSO=2fw35j3CXo3Rc}DblAnr#X%!Pmio~8S~FMyQ6z%yXx7G;Rh$()YMNL_u|$Ba+QVIKv`2oR9(Br?a8mW8+l%-)gi)7hJU%Pl1UmU#C6g@Lb6_Wkj( z`lY570C}_Nj(7PkbS-3lrj=sk$-)<)!=e4UD z09jmBJ}ViUfdrxn$gaNh_iYX!dA3?j0kFh@4h<`3VPqVHnV@{_k58+zsVM+ihyc|q zWWj6!)-#a)Y_$OisXK0H3VQ$_2=m1>v1H zw2B143lYUEuog?f(Jv2x#N~&zq}sa*wo_REj?U8#;5_93_A>x20a{N2*xFAKK#TPx zK%3(f0hlcc0QOS^U^1Tsu-YmcfJlj3J2D?ueor=AfXs&zeM%3IzTC|j=|B`{cRx^D zJJ4oR{*x$8+yhaQ8K~U}LeBs&Dff#_!2tDBzIwG8po^>OoX#Obo~uY1z&8&XvjQZG z2DipMAL+!{J`TqLi~JBv{5Z2nAuCvTSBolqWXdSU6m7o^-Z2*WAz9gmCja{W^*ckK zB%F0AS1#X{Z!R{>N`GK624rO$a5xTRWm{1~=sD1dx&I}W#dhZ0x=;*0^Z5Qm2whZD zBdfYld#j=Tf%mT_-_zGRfAq~4{`CW$Kl(;XCFg8<^2_VGiTS@T-1xK!AylQdQh5m> zbn|L`qvM*v(tnMa@1#UceI-@qTn0=3)%r#ULg*$!=u$zoV&-{%_2CK`eY!B>NtC02|A<1!ldWmVk00000NkvXXu0mjflXEY+ literal 0 HcmV?d00001 diff --git a/src/all/yaoimangaonline/res/mipmap-xhdpi/ic_launcher.png b/src/all/yaoimangaonline/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..48215d38c192be6643a0201b2cc811f752597faf GIT binary patch literal 2308 zcmV+f3H$bmP) z+fx%+9>;%(?&tyqjxx@!&W_k`OKtxds$bgq52Y@P-#I4qiYULIR{|a1<{H z>BK61+TAMuiTMX+YOA*P!L6E?-Fch6%{V&`D&=n62<$RC_a?Ny(r15 zP(bs3JkK3{WLoH1)DfU*Q+~gZDBkD(j$TT#`ijWvoRB&v$?7XfR$ofvUd(e%|8;BE z;HHJ%83KSR-ch3X0_ML7kf+@@k+yU!zdA05%t&&@5&L7fJg~6OH`2KGW!~5fng%8& z4FM3iy)wC;{ep~p|0Iojk;tCc3s00bokGUg@~f;WBmjD%Gv>!Y8;}1#biX&I!P|cZ zUiZs|9!8b@dDq82A&U1O^PQ-30)Q3(b&e=LG!0Gt^W)}od!nua|39bXb~#K$@xBlM z!UOPI$JC3D8qb&kAjJp(Yj$_`?Iq*tPXa)=6>#^(w)(bw09a!LfYe>*uH*>-dMe=V zPuq^PSOFlqr{iz{klrDrO{b6^YCv9f0J*IMx!G*&$#Raoun5f+)yQh=ksmvW^lWeF zyP!TNvgY>r<0`i!FDQ)uILu~bC8bCY97f)B3Q5lwD-YnE6PHya&ihFE-N>#CAw7Oh z|A`hABR$)TqH2`==ZV$5RTHP5>u8&4#_)?;sS2g?Rg+)k)r}RT!l>lTF$>+nN zvn`kj4XrUVpSV59E9~0W_SQ3zwYypYNV1CNx(0n!V6h+>oQO^KUmnoz*IIzYaVPNr z(5p_}Rlu6tjn95rMP@&!U3o1X(X_pK0T5Y5R#T@BKtUl==Y3TXRYCICrR zk#rC0z9XV1I}HWE>Ke7Pzp*Xa>RR0ZB)11y)dAhNq)XlYg>6v3Tk{!(o6SfE-q5O@{YQ>P4>&FW$SPW@wFkkV+E9 zo;%_KfF!F(FZb&o3ocxZs!!J3uHANRy&)AAHvov+gRG)jAB2i(B$4*#xP#1Epqc&b zsx!F&NV1Cb(hdDp&~q!IzW9j{^HDW*5rd6u0K`3utgK2G0Dj=GZnKElT zWVZ*+cI_G0rPh=tEdWVYk%qcw4`yarC6Yy}C1}qr?W!rZA#ptv05ng)^$=N+O&^5r zn+pvH{jJ-ni!n1lApl6SiuBY)ePh9bxf~YaduLu)gv8*lHxm=U$TV_2V*%$#{j-@o z)Ypw6?wSOE#Sl*FT-SN{7}9<>nk|;#pIZweT4!rr6=Aj$flj?Gppl3TY00K??GkLIG{ z@BtXG%uoPWTm_Xi;a5Qnch?920ze!9INBlr2mnb8fC>OB44^*z)pG(s3;-|zV5I>x z2>>ezfQkpP6|R880>H{vK;7>I0HdX6e=$AOAOIK+Kt~1ex<&!OZ~!`XRT{PJQ~-z& z06Ta@05BYYo*k6}KnwtsR)l{Es;LtI3)l$ zAiO5>%D+NtHAr%MUK7RpN^;NQt{%sC8+PPc0U!fPOAUFKSjrZ=Jq-Z1W|veq?dco& z`(FQkTcY@cl=+w1?R7rDojpU}ZMIdm0l-$s%S!`*6e9ot0Ibc}x^)u(-aXefBZkD!HJ)9Z%+Q#G&u2dGU@F(_fPz=tJm@E_O{MHru}9|6#(QwM#d%p zF!Y_0DFE;uWM_W}0674V2OBbqGflMdeOA!?KC?6>qc-MQTQW_w5jJGl03Z(la{L~> z2L@(;Al3lDdPq;tUZ0h<9RPL!z#ag|O>*r4fF0|zvbIBddNu&8_j?tSNCAL#0FVZm znHwQJ{R2o#+X886A10}`KzjNIkeRs=0Mh*47@qlBAW~ueI=3##wbt*&vKTKyga{EL eM2HZP81X;eb`{KL`aQh>0000f* zEZH>(@7Nl`@J;WZ-yip$dw=Jg=Q;PDd!OGqH?dYGTpS`C001sCQ_Ka1B>f$1ER1=< zc($2=N0?y@Y_Aus-gm;<+6yHMM_^~Y^71eZvRZh9vjpnkL@B=y))vG2j>VuQH8oYT z?>NS%pbh!qHYV}WX~C(Ol7g2r*Csdes;l~jDtuMdHj6Dz@;;+Hcy&6@G;~ZaCj8}- z_Fr*N`+UFYE!Q+{Ywoe2C9_PW`EO$WU%cm+lpWy{2vEjLXZ;+_$V*LSZ;Tv}##lT> zp=8JT1iZQpqj2FLFw3*{X-&X+7=e@=Zad0Z$S*EXn1A4O3j4kmX?Q8zC(^n$k;>TO; z`l&+UC|k*fU}z@QoU-mVkVc3Xlj5c%5~5uwEemP(6e}&Al^Jo-IF{~J=gW0}ygGlz zR5icW&+>S$obMN#-$J>U-<^`ye=9}yazTY5TrnxS&;E7UtfD+h`Hsh!IeD%lx?Ayt zSXgc?`Jo#}#(eFqTfOfBZ%yA+P-d7=GOP}{`uYd$C_}u=sg~FulM3$w{hD0=)bh&wz^N*UEz1Pzq;rTWq&`FO*V^FvyZ4RXREJJm5JPqHAWIJd_rNoi zmgIG(v~=*a_tyn{VkJsH9WQrDg4W0MYHFl}z!;iC}UeixwS zUpY}JDw$MPDDo3TByy{R@KY@bklfkOc86DV1HS(ZOaf8bU@Uy&2OltHs!`hwayKCA z`LDRc2ArT+hhZCNDo9fxevON0$o7L?*=KKblIj^JkX(FC@PouzvZk%Mbs19Uwju7P zjw{Y6cn4X~Z&hAdX>3DaH@e7LP`52XJz;eD&{i8wv(B0jG59i>@Ou4Z+OH_MoWelZ z6BsUAem9^2UW(L=pY`WT+ZBQbOjOctKiHTSumo=iWsPj$s|SB6iDy#fmVX#WB=v0L zCx~r*xKw@6?}UfnJ9KyX(h6AS(*t_OTC*m^48Ks(>gwrz^Ut1oaM#43luvqymusE6 z`6LuLY;w)N=H zbZ}BD+24?$rqVa-pH8c*{FB^%XIZpk{0K?)0A^&<5X;-NZOVH2p+oz*(C?2N&9f|Z z(v8J}RM05pjc+K1yZkvyQ8u^Lz@sta)dm+XOL@mzte}Stfs+{Hj6vPU7v@|n0tnzoe59U1HNQ<$AAxAk8I$JTh2ZH z1}eK)4jun!3Je(d!;40Vi{6#Fnr4-q0Bl!SB1!)O5WKYmr|N ztbxQvgU>nsPT2*lZm?tMHO~YqDAG}V_~oKql7;1WPBS=FWJoMK>Y&VK?TIyUsKIBV zniTb%ZFDDlv1_Hs1~RU44YEGxZU(xlP9JpT$CE zrA{1<9o4NSHNo>e)K3Ph-V?^9o2%PqvkxDzLwio8`o7Qmi1$+r^FU~+&_!CU=L4@BER#IQR>FCGXAGNys_OyCB zrNiVoeYG(p-!F#^ajhrmeTB84>e89slPLU`eT{SXr_O<6o;J?)4AhCl^-3x&X)5ma zudMR1F1?3xS(fLWA6o)>)FC(PgF%We{=3*Q@{C1O7_B!k1w_dNy>X89Fq-We@hT!b3eSAYsE>N*tNao(m|+l-lL}c8HbT3mRoer^32+$8NeJupmzgCCvc_~XlZQE_3%7-$W-Nbn+btP4UsbM9{*4U({AZ=GWhCBDKe?M z#<%BaR*#R7QwaT3j#T(gbL#SkOB2Hq7L#dxyp0_BNooPg6$r4$b^+>gFQOaq9xnr>%{swxI-r8yqczmRHyB=b_7DrWGv{mjtr@c2mj4H#+CE{JoH3Hzm?)nYt* z@;HGLVmix+5?OFrz`9{NQ7_0-qIMHy4@D;X|4QAM@OrG^F?%W$iagKI+YB$Iuh=tr zXS3(eCy?0@Oyv4)Bi7RDBkQU(38JJ*=%=L@_(kuUlN&qLj30pET~ad<+R6`Iw~Jvb zO$A?r-;l7liO<54#M!q|wZf_;n!?sWco-?LI69efAwASdf?TNm^JNma<6+|~V?XM%WneF<=aFQLPwAGO$QMcOP^U%m2G6eF;kQ zw65I-Y1%{-!y79NoPF<2ax;iVlIT7i-vg;!uigshMZ$m~vg_@@9 zskyK1;GsRpa*f1=(0AWC~Y=`nUEHMFDa$KuwqOfJ{R2*LyUVZts;oh z4mtKl+yl(eD-+NU)=O72!d7Me;+~L-j$!Pj$9oiZ#2+4Mf4{Z>xtz}~IgC(D@3fpq zA=!U74`PK#_qG;^AD^{qII01GtDw8jOR`q>$-X%b!@@txE|AhKrIsTQ42}z4MQu>5 z=3mId@80NvFsS2o8*`+&@J0sSb7GssrIn?-19R{f-!lX%-HMHF8jadKqzKwx5H|42 zrc3Gtd{S8j=SL%PpSE#x>l)eYL#?&B#{;$w39?QC8(lSj*)4)gV!265G$yfcUJN3A zq!juFbs=lfL%^C1;Q$1~yY$hW8OQ#+Mm7Yr=N}^N(!adqIVVO&#Y$(Y9`ab>qCJnI z|Et#!G4|&OdZEhECZJOT&C2@Ya3Xwv#SNIU7AndA0;8)m3@|-ZS{TpwJ6Hy2W%kl$ zrp1S|__uUjo;I`bmd$NI;s!TuSlIx-{&UAc2x6HOLs3p6K>n6#AWfOr?CqvGwa&R6 zwsj~78ljqMETyZtxuO8!N3G2==+w+4ugVZ-c}t5Pq~tk|uRw^3*kLYXNDis6u#f{d zxeY$j)$GVT;5%D2aW%EsLui!V9USnlYHVvli|}1WWp$PMJ3h|vGQ|LlaDXa6a%DpU z5_EL59YVZ6IxMUmlC1M?y24g6$1M4dbS%@*DtOh2a%A~0V zLx4D!d~V>dRH#8^A^zC5!cC5T*WCH|4x&M^)G_LOLnO~hb*F9~|9r}OAbqdyH{H+4 zCsH5GvxMAZW@(FO{z>iHpKs&w@!10i9#vJ22wOFs(U_k!VS;wb!L#=61Nu9?g^hP@ zy)un(W$|Y1b^2u8OdK`v4ZV|=)@m&wHOB_#nL}u?h?L}OE(*D9zy~~K2H|hDsbYY5 zPF`MKQAWl{I%xDlqozsKctMcwNRIj4nc7I-If~drROBY*0^ns>aRP4UkR~b8t23vX zcVW2zm`y9kIRRH~u#!wB{}@Ua-2@1IAmGplLFiwb>(c2VlbMMV@s|SF=TYp^wk4%@ zhR@l-Bs0+;j4%U&gi?Th#UlzyMvJikE9~>q+N5$zUZypeU?Nfws1x;@6~PG0fgUY^ z_%fU8+FDDyc#n|~@aLXK3cACJOZle{5f6#&E+0YMQ&FZ*(xShnL#KFqj2saf23Or# zigP(w?jF6$uPG}=HX+}5R>0q*;`V>tj=UtD2in3Nm)NZ6%IL&^nUNKy&d~M7{{Zv! BV^shE literal 0 HcmV?d00001 diff --git a/src/all/yaoimangaonline/res/mipmap-xxxhdpi/ic_launcher.png b/src/all/yaoimangaonline/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4502fd2c5d376bf107b954efd01dafbebc094969 GIT binary patch literal 5094 zcma)AXH-*5*Pas~5{iHnOQZ-&M-&7^1VWQ0O*%-qG*L>ZQiLQTh=Np6DI!G>u0RsF zRA~_@0cnCtuL6Q7Qly3U9`C*DegA#yJ8PXYXRX=$+0X3RGxMDD(AZF$mFWZ%0Dx6j zNAnuoQhwizNceee)bkJkoF%%NYG%RDe`M+#a}A}pseVMz4_EHos`45ct30aN@~T_W zy2X@(9pW&fkF?<8n$6)7MMPX?DtzXpT5g{Ansy~%v`h19kGGqgEb|Rn*^KzqPni#^ zYn9G(o{z14!N=Q*<*{~s_B27TsLasq(`Le!bb!fB(CW@?(CSPGNYpuf%@~ZBY^Krf@}+aYd*(XER&FR)xIKh_h55(Vw`fzg~(NF z!DIi#^uC2lJ5yj#6Qo=kO4n1&r<&Z3U6w6USdQF|a9`gl9o*iN0WNjVZSQjlx<#Iq zxfg<9&S}QC!l-l?B!@KJ_zuKjn%uQdeJ4H+*aNB+=K78KqhEU6jgXs2Hm%zsE(*d! z&kw5+cD^n-O;Oc_K%JlF2lf~Nf8I6Z{!~cSS1+|UPm>Hn`rrFcxErx-GL?yC?H)Ta zl^=~w7(fSKtJ?yb@wNLXAP+G2PZd$t3K|zp?3(AhZFhD(!%$J|H(kg3h`ivdGFSd= zpR-QnP{p>D6V7cN=`-=svbq+(dK$P;nj%(SW9Fs8mDjeO4fL&_0*r*Jw4I0|nAP;s z)X)SSCG=e!W0YRsB|x@P-p9jPmBA8#062ogtn_J&D$5*51M>M4kJbfbRM!3-Qg>Ku z{ayTx27&vn!6<+b@CK<0SOC2duIiCj=FL;LSfY8Kr^5nt@W|){iyH^Z-gU2C32y?ucAA zQt|qsi~wo9rHLry0@8IxY3T-p*?1u#%bg?L@Y^yNw2m36DEbm1P&QR4#LR-Ev^Kq6 z&_fVFFDHSwtriVAzRUrGL$!&lK(SWZ;N)q*2<#wtm414lXgrp|ii8~P7zv{h4QO*1 zFk1xh^DkaPf|^r+<-B4%oQys+ftPncA;JQ9hZ>8KFgc=qSeT3Nv!cgKaZ=A z58c!A5D|~-5`F#JWKe%*qPohebjbM6%MUuHkmdYXjSshZLN;Bwo{@6A0(geDj+E74 zlWO>Gk^rA-S<4~nt2!#FONjrN2F@EiiT9o{5FzIgA+4Kfzbe_)vqec5d)tJ%eBO`& zhM907s3ESpn;!U;khJGdWwh>NQW_@y^jiHWu7U^tgx;a>UDJoS_BS+se(F5}9(C$!|J z)JNu7R$~v(*ws^w0$gll`5Yc+$tr)Lun3>yW^J1`vnBw+il?c~rL zokDrgHnJ_>UI`*!iCyf@GlM?h?LwW}QZPjA!jB3!>FX^n&C^qCe%Pyh7|g{h6z(6h z8I$Pa-1VwVP?YQ8l~K1$0KJYX7jl$9OxOL&#nLYKl+??^(a{p(NnPO{k;fPbaw8Rw za*5|r=GnT#%Z`$BoM*fG`L>=N&390R*p1$`tV~zE(yZ|_4Nb1=&izqbS=}LFoc8SC zmk5}?d2v9-uS5gy;oFbWXkaFb@y8@z^Ew~6q0@*%2tadt&Tr_l2R%hwpZ7V359wKw zDudzt8caOJ?a^ZdPhb~L#S9D4g6;v?l8;{4YV`-6D@KIe+i>5Ns+Sm$~f$k7LBGT&<6W*riM%_JJ}=h1uQx8DjSI5_gyBiyE~?7np>c z`%iPYQo>EI1sRhaGCs-ATAL&)dh0fd&|_qN)J0EcS0*LPov|p}==CLKUktrI5-5M+ zrCfK(2^9DXnp}amiN1QKL7U;^Rj2kVU&~7frd;I-ojQ$2=?Ran1dhMEmf6TGDvvHJ zWvG8lr*ETF5!BDJ56@XZKno>stO(P7GrT~1c}1&BY1+3vb_@lESQqP}JKk#05XL4C zW8#(Chlab|Yb)QeQd#Pfb)p9``HZBCy@Q|tx3!5Jzid4R z&>@l775;e8BZwq`RmoonO-a8rliYJ&0I<0D5*-f2eQ*M$17TkFYvbB=Sk2H3PJooj z*s<6&b@Mcrb2sQctvI*x((Vg2q42d@rH{kk2C}MmbT`El3q`Qkg;eV;^Qz<^N6cR} zSQ9g|Z%ml>q?f267mG!zk+l~u(_`g56ybDw)Jmq)f zVpf^LPq{z9s+#!H>M9#O`ea!d38!m|wZHyE#6*MzSoBw{q><#Zj`Z}{Cy!Us6Htq{78m04U8&yf4#h?wwK?YV0)vMxRc@)Sm1oJr{=2D{hSg^;{;`BeCI>;uR@kTgh=C0H9v%o7Uc@?f7mGPdLRsD6m?s!rm+4=LMSr|IoT>DFXUq*t}88C;s>UIDGg%qe-cne0HgYMEAAtTpiy zQF?jLI!1L51?X(AXC~V+oQ>1N(jf%mAV;G1Fk3-ve_f@DYa86pnU`sMV8QcmLwCXc7If~6 zvI;`Lh8~j)94%oLN0}7fIBf*^m=pqQ5Fyx042_P1V zJO(AIf39FoxiWGJUKAA#+`nnEc-ukMDQ^xr4fpt>|DwF z2R0ZY$if6LU>-qf`D0;)1AGt!g3!f$eh~5Zn8%0n9T?{81^-9*tLed2M+9YNPQ+-@ z66$9Acbx1f3Th8HentL^{DAzTpm})-_g_r+oBbSw_kCZ4K&}?hMEDe&tAg%dy8mQ} z9fj$K-M3bA{~clyxNu?d5N3ekzy25f%oKp8CFx%Sj=73;8q_-^^e?kW__W!3gW(L9i46`-K4 zDnjY1H)(wb-`zbu5QNKx#BStEkcj`~&I4v}!>g_wYg-5Rwj<~Xx}GP%s6_Rh;JHSe zsf8&M2uaM!Vt_?`X09j?pfV6jTJ+zma)P9VS6Bg6j&Y_ z*ZtYkLUb(;-7{kCC6Fq-`l7z)3YFN+;Y9aT>e@Sx2EW12*^Yja-8}>bxjRZv8bjxr zl`u$9e25Sivb}8!O+Mx==w9bGm{2Ra)57%=;o_VQf7DrQ3XLjXh~ocTbrDQ*4pw?e z08f_L=Q)5nUKg@97x%NVkq$83UXS0e#`eWpY<9>-5b7-a9eh50TTzt==$tO_QpTeI z19}3FZ=37NP@u!eA7ccdLi#BRWcXEjZZm$oW?o)&V+*_SsD>PT^LU!{^2b}tL5Q+b zyN|XJMzMAY6EQDp_c^+!_I0{4o<6Y~4{6^7$ zPN!=9=J2|Z|OCxA2*Kx|)b8;x1Rlp)z@>puKk!|e(6NrJb&!w2!QXDn1 z|4{ykgebLu%vx5q3OQ!AIF;gjwg%&NnS~B)=2Kh3AKULXg|NY7dcUm*tueIU^ej>! zz{%Nlno?P+4MA^SbX!^b>)ye}+niQZY>N{EAw1{$Fi(fnyFh$XOfjMnBJd_YsZf%Y z#^OcUccLo{OqGl__r|c&k9K{74w|!IfGn=~&I9Ze^`xRf{SB8T-Koi$tf2La`&-)! zvG{|joR?J~yVC$16I z4fUC+?Nf8y71k^(7S^nsFRWSRE3A3UAgs4fZelM!6xexNs4%>G6O&J)16zz{9jd|w6;=1r znfVFn=%07fCD3YJnd^>aGYMuca#Z??l-UTq4PoQx3VH1#R8B371lypl*e{N65MR(Gs;qN&$-Ta6>|BKCd>Y#`ymKo z(biJG3PE(>f9arod%<6;UR^{85`eVT&l!3p%~hJX7@8!$@)nd!6+BsRQbVS^ z7h@#8u&=kPdG$+guQATBweV?cm%;S`B&!r-oXaW91i2KCYoGOb;+8YNwKLet19<{Kw=5{C6|AxnSgZ}JOxI(`J(xYz%xvQ|=Ux0JN`)@LO&h=sEKEWB-*{832&OJeY z#HWzVr;@g<<0_ZN>+^Y${#Q3LkR(GNa|{os1-a8_zMfTS=o6fLeLE6jXBQ*nkT#1c zpM9A@KhXE7#PA3RI*T~%gk9zGQ?LE`lk)2jUh*45_2KUpngUkAUrpERBYEWp^oWdd zf`V0L^Zl%3OXr=E=WH00A35Y^4o}h(@>{=ALBX-XpE=}3?BE*O@&(l;lTtED# z+T3S-da(!2eLGj_Rl6yLU6jKQyvis$`;x6aJH1G%zHMJerE)#bJj;pm!?N`iht0@& zF{tg}V43@gY$uNRh&D4WG>3lPp6gpv_0|idTZ)yLI^{FhAjRdcUK_8ZvCl@x(q!a= zg&M=5J-Iv0DAK5gdaZ&-lP-+j)8<#q3^xlqo5Qedu1hNxMG6jHa$ENHuUix{>G#x) zU41)qfSpY#pObjqYbG+xc!!-mtXDgZLFWRtY5DVZ{@d*`NkUcCSTL3L|900 z@MAgqV$ZroHIsfH-6~}~xrJwiQ;k7AmMIL!NBW${R(TB@ z?D^!@7*bJjGdf{-u3a9jUOVPd_tn}YrA$J%EVsFMI%gOD@Zm$GjJoQCSJfu3wf|LF zqD^$qn6oB-2wz!b=FFnnTJ%hKI##Q(gPxRk9w#}PR}MIR&+|Z_IcGSwE?H<4v8D4q{WDyQxyHKO{`5Wma%4-Dc$Ns+#rkwcc zy6MY3x*YH8mcEVa>h30WePm{15|!MokH?n%cruxYCq1lW6xm0oZtmGdKrG7LDsK=r zHu!+N{xi@u+kWf^1+C`JgGvcd}9v?YcX39Qj-(n&Yp7c}(Y2Nkkdce9lnE`rm9EQ1a zO$fTc-@F_!Ym4FEYV8?^Cvd~6Nl?nt_Z}Sho`}%K#+{M1KlBgNy%J6?J>o*)rgs>D z`X@=nws+5BY#bNbx@Ev)wGW+3YC*y<7Fv*{VfQ}Fx20yt$ho;@MSN?yx0Gxd?maLO z30)Q*$t4$azc=5`SziaMhpDUgW0vCRPR$>Co~!R3YVvW^JURrD+T*2Og(9Q#-p>(? z`osRLy|y1S+X?ADaQdo{Q9c=+%xJ`8y<78 zNhgv{S9>nE{&LzXoZob{Zcz#{hn&A|&y4V_%!mGXQmIn090#c)gdypyJA13Yj!(lD z`vRgjp2{p7^?+3fEPO&oix=V~kN7Ps^y7A!pw$a>P-@l#XfVpTeXWsO^Aef0J|6cE zVu5Z^9YbfZOH`=e8H`XSMKVBRB@EDoYm<<%$6ApjfhP(PnY=v`E`wB~+4hLYbzD~R(``cOEC6fnvR`B!v z1xQXPc$}hhd3wv$cNC!NN<}utHMEloWTtW(@bN&S*dtDRB^5gz$>bWI67sIN(~QzvQCnpvvb^btXX<`X}kI zb&Joq!^L$wRXWvxck{dC(#E^rc0wW57V467kmUT)=si#L!(^t6rY4)Avn-cYm(9s& z{|y{iSfLLIOi{GFCJ0?9fGzHB9+lg=4b9V^V3V^T17RipA!G#Y^t-?@Cp(pQH;hEx zo=(xzK{A>YX`^6^0Y6lrYw5n**v5-Zx#2Q!4k-8xMFgb%7*=rNLFlU|9BSc|8-g~g zWTq4tAgc(9@Nsmb3gZqf7ZvDg&OYab`nVxmXCMl;6>SPfO3<)8Cu(19G_>;dzCLso z2kYQjG5u>-Q@ORLn6pgM?JWc*NDUIW^a2RwXfiY^TYXl}0IIN;^}M|s@z(*`D!e!_ z&__6ucz@U`6DEe2;v@v=I29AV@Xo1Teks5$LPRel6(GK00X0oq|0MNctcQ zv-vOOOiU1ueGzPt9fpY)qAbpZHovk#cL2Ry>d!c66A(W+!HgMPpzshqt`8;M;w-*d zz>tmCxqMyf91nqf?&c1Q8dLLiosV}uJmM|Z@|q1N(jl!Ovr3V3b2nXQPHTOP!o|Fi zKOl0#G$G`3t5U5vyu4r^q_WRYK#&_cO)|bq$mtz^X;uDxOzJ?el8?!3GP~!Z z`qbNEH*Co%r3UMp$qbW+IfOZg=iUKVLvZSymE^k`r9F+TaStue94 zDNk>@E@hs>rwVl!AKWW}PqP_~=zZQmVBUFu%wM>O?2{MQIri_>u^T?M$!8Hi@;W)X z;O(=SjsvGY2k9kbT9`;3M~i)vIUwg+{NMuvI8TXRWC`$|-h~=E`pMh_gU2PxgWd|d zo8BGK%Tr^mJqeFyz#!G7APaG>3)oOT{}V+E=_PIFT&Ht_9p>3QR|`wZgsv7XJS%Bc z5;iVR8G6KXRFoqjdc1#)!>LbvhS#*VTRzzF*7H|s27yHuuE`Ire4Imhz2Ev<8IqKa zlp)re-1E2@(+X2jgCTBX1YVI|pUX9ls&x*yYTn6+MK^61i$_P4sPHy3rQTyVVx)0^U8 zWv~(I5rFQ*u`At2-EEJ5KaUg7mP)JTLrQ!OupR^7xLk0m;7hDzH?mJAU z@5Z`lI@%@iwudOWnV4zn+#T`!*5{Xao~{~hw;zK_;9;x|k2uSreyGFU z!=9PigDJ!oks!iRrmX9_UzuF|B~LX=N(1G5bSy6ES4&WJI4gE7?&{S(AHBO9@h=Vx zM(l*h-05E(Zy9NrEHw0p3|8_!H~8F+iEval?&@i$=da%A1gc*pD=xRHpAXEE=WrU9 z>TWQtaU%#Y z7c$2r6Pu2;nUDF&&*|eTy;AI&r8fJm#qZyo^~-h*>2?lN9D24f42|)R&dZA5w2gT* z;~=|XG^--uME=%t=5?vsU@1S76pMCa%#0P|0{2kcA=oG@L-pC22RYg$P7imr8|8-9 zE3FJXyQdjr_$a8qKDD>GNX1pGUsg$l|5$2gV&#_8+ykbf*+a$Kn36AIBDdzBy{bg4 zkhOCOzyjvvhbY`$KB!AXtPU`^Yj2*T@B&{Dj$cMx++^(^!vqRu#%^u zKUV6aojRD!bu)0!%`C*{t#tgt#{?(>P=&caNnF*pNin&OzG#-%un}thvMkPfe(0gK zEY@k;Lj1@N@fW4fphZTySD3ODQo?k$AWW}VWP#x{X+NLDh$t}%Ib4Mc2 z+%_)NncebVD?P_2fiPR!z@vF|#$2L}r3_jVfU97G_VlD)BdFPht&N;|Mh@bsQfCrpViLX zh68wD@L?su-3&|$VtA6psI(5bPv>mecM*@(36Revhf7Cv%$}U^6w(A zn2A6;0np{H^!d>2zI6Zmm8SfAc^{O)VOG2bBUNH-th0+zUnw~Ggt`XLDAA$dU0LWcW$CPjAf>;{JDx1n{Q;>DLjd`aDDLO@8 zl*3BD@Ezdgp-^OPH~)8JeR}@A!*Ei9J(cIPAG0=&Ix{BC_LyIlt(H<9yw7dGVVLtB zS(V-~r&Obfo-(1>Jj8ncSHso%0hm~#Wy(7sv(l5TJo~l^EK~yby*<8lILJO`of{)i#*1SKL ze&ainhQ6qGGv6+o0W1^vy{xxi=%(Onf7#W>?`mRQ(|bnDlvY)1T9vvYGb(~!3rAol zKcM$SQLtPs^ssBL1;IYY`9}XbKA5lMgNnkYUC^8#hZnJN#AWSYS3uU1M%K=2=Y26k z>x#_tL->1F{45sNK7C;oS>5`C^I=_{!C`2t(&um@0SzcEgFL&Jy;Tcc(|b|vO=0vL z?+n=7+V*Ngr4k%3w!CW$We$iadRzchyFZaebU)rM-&4#l);>p-ygthfpNh)c zIwBAUlZjh^CSB^=-?rG$W>|Jg$$Q{!AXV!rcb>rQhMB8b0uYyayXCENhp%FJlalAn zA|Iut>=F^V6WP%^v~#_m4Za?vMS6bDx!HZrq)w`L zsJ5m!C?CR_eymEPkm>V|wc%%$YyXnQMX-~Ht=c!TBd_F95jtABZpau1yLSL@7&cS+ zS_Pq4Y1_(Oq3ne3QqWRdzvvepdX0LTc8Wl%2Vf|kAP)XBjhd!sPtTT$+VU#Qz$FZh zAwyy>t;w9Uqe4^gmE*4$uL>`cCw_%p%dWFHW{Bl(aeJQ*4;w%ml6exE2uEG%N3tUg zWT?nvgE{{{|Sz70=toHQf$tk&(VZuS-%hN}s4x@r()nc|%HP zbcXrbp#%6FZoG1q3L@T`7{c%*u`BYacw_>gZItsX(%?CbHoGGsqU1w)m;Re!o}ehj zwwVCG@9yBH1Ll_}Q@6zN&p#_OBlI-3-#X01ys9`)wjqQx5?DAaCWX#fC@yQ&&}&v! zt{^k}M2j}kcNLGrM%fuu9~J%*%$J5M==jH|Kl^c8; z7%}#8<-KVYr@gDyHU{OpdD1bw#ld<**Wf}eS`;tACgaGO%a~$0dD1nmldy8N3xp5F zj>TZ%(uVf=P42-X% z&5q%AE2Am4Ay9MOJ$Qz2@&O42$jpr?%ACpyunGJPiA@K%#ROgQSlYAtp z_iOE^Ukx1m|NdA|>ScE9)5)_h>zWp6>z|ilI!l^xHokGP=#!>jxXT?XNh?d2H6`t3 z^=jtg`KYJ>CBh1aF1Vq(;dt!0`2B$m9ZDI*wMLwJGXw{Kt3_Bp$(mb00*+2l7@EAo zbUn8dJN|B}a`FujaSJ$@ls>B9_qyb6l%xIgwoOpuRo4uu%t-b&+PT8-1M4igSwL*; z<<|AYYfF3S`&o>=;`5gLaSrW#+Ffa5sc|Hj1`fH0L0oImc?zN&Aaw4Y7C!iZRB~G* z#&~!OeuQ@J^zyGW0dDT5o*{e_78nJUoTDVadGrvI3d3QM-z)eY2skyUtVQPo^(|?X zC@80Yk0g

YJ1bD|wULUeM6>8ieQ!*Rt32+fsP=&%Ra>yV6s%rgPciwMwM-w8w_O z_z~~7Di;)es6@wZ5kpGU^oEB&Uc1HF&1*X;9S5_}d|4*;8H6ux@pup{%-XKW)ELpg zmfqido2kce2K!c7`l7H+>mGh4U%sJ)=3)P3h0Ng->x5JPvo^=h6IQ7IJ>}==g;5ci z+)Tjz=bV4nN}C;cbUHd(G|_@5sPG8?RH-1`TcSa>nS0pywq)GiMB3u>_Z}x_>f?GjF!UrTx|lI2}?pJ>>JzMeVgSiTCD@nyxkM8_}YAE5UCT z$0p`5CfV1+X85mRIpOXg$a+AWLB4;_F%WYd9G(_@g{r^wZ;?{%k$zFTBzKlWaf|1O z-^tJ4xSU4>N^?RYcWbFPAV%=J$6Mh{vowFfjn6i%*R@^bMj6Z(SeWq6SFtZEVvTf` z1>vL+T9~HsRu9SLIq{-6((~|l>F3YBTW6%%Oym(OHZ8$5bUpdb#tJ12b@_Nj((N!a zO%N9c(7J){yleUd72{7A%%-0alQv&fN{`M(3*K~pS~AQ_uzutwMAa;NS^B$cq_^`= zpCp!W3y{?5P}pr&HKxcEy9g`c-z#2|_r}5MS@1asqG!`UiUY^{8>uSX-XCrV71@J} z&}E(q>J#UqQ}y58-|#0zm$L@FW)N%7ZVyR6mx@z5??k@hPinYG6Q#Vjj0nXaF%2_< zyY$f9xGgYthL=Uz?dL3_)2Mead)o)9XV=IAN%zgUc)>xxpiSL>%l>A7id39PK z@<-7SB`5`^{(JG=j$tuMOc^rFJi{9{zgF!u@mv_h0PtMX8F2#zVjLmBZ(EG9Y81`tfPWT#$L``(4`qTFL!fpv_gk zmX%+3ShX7$g@6TaJ*S`$s!Oh_wZ#n9*$WScMep9067lGfHZVsB)EpZJa_D;FaJ;)pKUCrR3BBq)Nq-q?7i%&7H?xyw1#dS|x zw;l7A%)TMzwRQNbw8_aF(4Qb{2vRf#UHS*y@c&Q&>2N=&b9r)F z4E<%!$4ahEv4F-z)cnMrHI2{Ay3Mu8zpi2<6;6}X&HPe#y{1feD2a$!7hFg({`cCV zji5&kUdk?P3>>rXIeC}x^yS06yTe;J+l<~WKA@=@Y7U4&+}6bExPTx#H}q7dtwb8Z zsu0O>C`mB`8DS9q!C~$S94`5uN;7^WKxwRK{yR$etcx0nU0hFdb*);BRd{jr6V7RS zxEJSf1V!~hP)3(L>cz*dPNRCR@9J0Yn&uLHD|(I7Cxt z(mLMywL7DJW_v?6;d^9S3m(4C=eqzmQ5WI!%-{bC#_ zuo0{`qHdlD`J!iKz5YfdDVfTs;s;Qp8{ADLh6NSfJn=bCj<6y#_HsIlv_>7p~e*BhLZZ8YjP|;g_t;* z^2GXAr>*zSEvkVEQ&yyr1tltV)AI|ztWR4SGpwR(ajSUtMHCE&GP72?%CYG+jphke z@{IyYm!c}Yttr2Y&!pTTcUSO@qpWz&QW8GQ*z4z`UByWmkoU$qkTqynZtHjSyUlcV zCo!q%{M0W_SV+J?lyUJnzwqTFb(-R?^VCqJ+Qjs^|B1-~&uoM+0c2VOIhpO6D!MO~ zDo7K#jxz>ucvl?NC{c|~JyHnn`17V7y*N}s5jmDYexR#CH20;amNp@U$n(021|FTg z@5(vu4y58<-70_Zfm%oLassz?5Eo)xQZkp#b3K2T=QU`qPy{G3)4#n_(Ol8NfA+Y@ zFEPT(6Gm*9npAM5_CSs$zdE6%fP1fciql?YrSj_bGAEuVk{sOk~J-G8t5VDaKP33p{mT zx4+XF?(gbr7sMCvKEfRlXJbDClQ>+?AKt(qVH8sS&s+cZZ%{O59RS)xl^*oBKhEgr zk=JSrZp$?TsmFN~uJhxG(R`CTQ3t(yw9Cpt(jLtLP;Fq| z$$Y7V7dmHBx=Z$px_SHE#)z(}^6#ae?8}6;9&FBSotJuGD#Dxsx* zk-c5!YvUZG7gSA-7z2NlW0$>Klj;aVd0FeDq9_R%`E29ILPN6^jWufy5;cE?rqw-r zJGs9d`rdR6qzqGj@8>%FK>hg_8NE_!n*nNj*OC0+P&6yMR5-m|xubF8mbu?}1&+VB zi0D0s)Do>boos~U`sVy+(HGXbIpw#weYZ_N-57iv;LSU2`Ln7RPxj<5`7;Z!I~3t( zw%u@qru8$O9#6GO?2?J+-#V5|V|rgRuE^FmuB#w$o7^vqS{ybleQA!fl#=p16kFvM zas)-mGx{5J42%)K$mC_?qVfpO-SPLdWoNoAj;^m46h7|i=I2ssV1A=F#BOAsx{Ge! zCM$bfAoYH^MGbv1ZVmvn*7m|$qTSpg*CbBXxwrjz;__WzSkeDF9lV%qlp8(TTCqyicDp;V3>^IS4I@h*r(R{wD(eKDbi>X?-`pgMe|zDWkRjQuowB+to+g66-thDJXLuf({N*FXAO7zCFnO08jf7h zr8yaexyeF?nCvd@lh-(%*F7qhcNc^+GrP#>i>DI~;cJx0OWicldv}5~JX`4v&iHn@ zJKh0zyj{MCK;B*{y;(rH1*{LG((vAv4NBw;hp!QtW7E@Y$J*{!5_{9I!2@~v))XZ2pjVnmluKNiKy$+tsm>(7<)UfX1b##MKeq zzWP=obKIMo;3l5lwnsXF3nNqc{q90r#=sQ`kHspY>*H@UP%~TEI>ce&dE##wBU&F+ z1ok+ACJll7Qq1&<$hAs*SEN{Y4pmadY+nKvNWRhL$IWrtI(zM^T-y#RKXYk^kFoR zzb2V`dUF>3YRAngFCAOhX*ffz%RtOoN}d{Yti{F5znUD&g)a{Id;4D95MEuA2nF@4 zHgpmv)v7*z1P8Dz#wwH?Zc#sP*4bPR6_K(YrKJ(cRgFQfd#4VPtQoCoAmuW{pE*H^ zW*+Nxvb?NYN0WUo&Vs!0pcjDDKH>L$CxK%px;|X`%>gBF16?Bv{~tNeru;89n3szF zAbcW_)8n|v->1z9^ z**WGU#o^5=XI53e+gn}6a#dwVl>)z)&3R{zW|y=Bk$}&c5B|q2E2xH|>RbqX zza>eO^!VdGmguyxqo!MHkt?(a;6a+Qw*@73J}3DvC|`U)8?#Y?&>=Bb?dbZlXa*5n zXCo*+e+WRShUUzMe@@r6=izKRkUcQPTly8aR)t~}MCU8xTot}Vzj zHA!@FH}>8DeL4{6r{tB;_Hkxu09BlzXd<)iF(3ril+k3eu?vlF2P2OITJc&x5%I1C z4^k<)*h*L(&9^*od{!p$gW?A4l0ZfrS+v-LG^Aw!l?r$7+HzY;eYkO|$mgP;MV=x} zbPFsw{$h=ZABfEMW`k}R6gg9rij)gAwF$Z$FFtgk&Zauaim$iWu5Hzh(QdlbAD~j} z0q;Pm3grys8{8$N?D|@Lqk;DMx1x0|0HCVi3*8_9pBILc&Y4pgmzM2+%}D9uR6V=U z16sZ7=viu`^a9Y@YLC14ViK!>Y2z5Dis*KZK zxil5eV3AY?j6NI0bH;Ha6Lc)sxO*~7K<($p z6T(W6u`J+{0fu?r8KH6*?{%r>`&Ck1x96A3H3oxQk-IcqJ_oIckbxpibif(~ouJo8 zSa}>zJGxLdsK81$N>#rIdJWoN73(xHtf@=hCmlJ9$H?gq26}5;RHP z@LYVfdwwSS$;-FGBz3#r3I%VW`iS5yniKx&0Lo}{$gHYG;u|HGi+-2b zGHC2szn(inv5>VoqoL*fdE9%urs-Wz(g>a|OZNb^Pm+f5H+MbYqewIs#>cx&Io=Os zR_&W15p!QmXn^3-pXR~y^5YlwXw51~f&`g(OyCj?ef2s%H&p|d_pj9%tKqwHRCa^q zXy%?L3+}OQy$^)2ywKLO+mXA!sdOfv&BgIJ%tDKOsBjETqe?>{%MOzPV+SazI|xs% zI|{*a$#wf^%E>D*rms%6VT4GuNZVQrhWSa$FnN@iAayiNw!PYr0FfsD`nESLPzqi3 z9|F;k>MG6EgeNmVZ*VjK&VqrA-+|nJkqncEz{~-`I#Q9=bmLJ1pLiW$OQp6Iq54a7 z(C?s5+Jnm(0yg@GG5c?ORSn9Cy+Uo&GRS`~1*0RoG=l+-_kZ{SXI)o+`G5Ehmjk3o z2MPWEZ=7TR_o+>wp`h2K5Z0juy(0gAk7l2@SG8IM`j50J$6LC-mZzDd{XgQ)c@C+P zf6Eb&0x9cX9JN`oU@(0DP2ro||0bY88M?paQ2nj*?*)IUiNYzUKCk}=DirmC`4boo znjYZHAL%hyXcw%t{nB35g1>or!-5fFfQYmdj-qJH7qRXJepk^yUw4F#ok{zf{4M(b zV*WHl=|L)wUHmO7$ze$G^?$D)6@X#>Aog!vY4Ad84S#R;mre_A(T_s^^EL3JCHcz# zCS@=P@wZTbCVFAjC;p)P7X7Q7bAGez_P_0yqBvE^lHrer-@`@;5t)B;-VcFj?=RNn z6uVzn@nnOsr$1l%b&2cO!RleP|Jv4_v3l;E(cj>CzX5?xZr0zldmu|j=s%DjxNqSn zbDaq@wEg$-%cAR!Krk4F{kO6*9PZ#z;qo4kNB7?nJ`j4JQJ^%#;yvSdq#~_~0Bp*g z`kBsm{jLVM>%V`r=Ku+NbccvQ9d5rrDdThmP9*3@#Em?m$nL+EmT^vZaa$iQUWkeM zp-K3QvblBkuGRY=MaouB;8~H#vHSm{=-yKzYOH_nw-=Znr8Hlb3w&4SZ{O9)r<4ku zREhVK-Y(^}CCwyS1P6QvW*4|VT3l6s2@La4_DOdH9p1lb_6Kp1>Wt4B6~sWQ3%_mZ zSHwTri29RGpbA3v`J3eYS8=e|n$hx$9Ti7X zGn2yyxF;MN3@8YUIu!|}sWARWao;1(Mp@2C0p`ENOj;ohWVXZpX#ag7 z$c=jQ4bU>zr6oF} zzkbQ+6qcQH1qhx_;5nP;eCS_9o3o2+KMcGA66OiAGA&=5hFp)*Fnzth>Ltf}b8rz# zB#d%E4`@+qz0QD-8l`5;Z6)6aQ~h1kF~03nPbvH3*d%_nfe`7h1I2Z6#2RHHYVW{0 zK=b|}+aD;TRsJJ+u1{y}v9YdCmfGLHm^&6FkYI=k?gmqtH2dm6gXrPla9k8%)+188 zyjlVtdh&Yr{QI}rIqXJ0T7eIrg2A#{`4mq4cX6=1 zrtMsw`EBuEmExz}_3sixb_cD#{mCA_WdI`#1p@>{4(d8e22pp*1?SaYf)S&-ZoWp} zVb9L>mKDnTd z1TN7W7#)SEl?>bA!*jh7izg=snrx&mjcr>!oi{J;tbm(h}b1 zM$hWVvu^W;365JrtsGtQS|1B81yY9him!mak$sus=P?t!6WW9OpyD3&ADH z+roK%k;11Pn=8C?-<({T$qUZKjh8gOWtfaf&;l^5`A}Xvmzlgg{K#@=m|?)j+Se$+ zhjZ+A$LkK`LYTt>Cm2m(0JB}V;dTBdGtQhNsE+0)la@T`pqo=(rj?g!5-n`spZqg+qjKyP#XcpM3 zri-w}lq0N|sMT@ue}Pj#={8vTBh zIT%eo0b}zsI)IEyt1O;)DW|-AdoGV`xevN##|P>9IK3@pmj-&^(O|;-EVtTxF8QlU z3WX)SK+Y;|=C*`EUhQD&%)SS<*xHx!@IMFn=2_Q4Z!#z^isE;O9&zsX`3!ak!@f9a zPWn-L>lRI{(+52^2vk0*Pv}7EgR?9c?kBdNe{?SYXv+E|iiUO`ABXnWyr&;UjG)N{ z;N=B_>H(UJzIpt9)4^4=)@;w1SX;3@KP}1$!FlLZANTF8UI>@LzUT2>TmXy{X^h`0 zxB3|X7#F25-oAc}gncT54bMHrfZ@nJ1dSA}Cz;7C8-u4H`OK8YaQGWAM#49;ivo&3 z9dnEsaUS;TW`hV7SD^}Ah3^*Sy@=I>j1t5iOJg73GL9Z;ES@G#tPrD@R}gU`VC22+ zK5UU$P6pbw3^)0>+SE#R1+PNDbDE}us_I~*8fcqco}{=!9Lc$|mGw?drO$5ydDNOK zJXgFFd{GTL^x_>IctwDORLH*MkbYb6#s$dK115M9%u~OBg45fbcOBr*_B^>U;ptGE z@=v|5(=uaqc@T7hM{Z9w;;9Vobp1|GIAgWaLd8mVe$@iGIX}BNO_*d%8m%#kqjBDm zgd$UfqQ7x^2VEaeQRwE}=Ft^huz%7Zv>B410;!y?_q7Y(T3&hBDi*go_>9WQq7dof z0aW9}sIseOBD>IJ*$l;e?@-{a>w}91pvxb<9Ohf-KW%H>5;yM9*kDJ5zUJtHQPL=0 z7*ejj!cjJQ(apLA#cMqbCg|&VR($06A;4-|F|ZGEyT}mU1{i}N<^5C1?^icrQU{yC zlaS?KDMI91;afcw`!FMsxu+H)bLEk6l+W;K1l{Nydm2i2QgvjmQOCwZ9Z(gIBZlO|Ja#4rQq>x zD*%b8deNq?O30zShUkmib6n8MHKBAKt;=P>^8&%!-kjmXySp{VioD2U%@vW$$K2Aa z4=o-S5V4rl#zg8(&9@@-rf#&2jpPj6*akVC9Hpf~v9SevqrhRcMthRu+%FB2%Q3ij9D*QeVVv=J3s@PkAP(h62t%ULb9h+S#i z?9$bjAVDjcGpIb23UWe7cn@^fE)BY74Z1ptB?Jf_7UAXwi%J2v8@ z%jJH+)_)6rD=PBz+!n8OOX$+4o6GA+JXzWL^akvr&yi{yo!p6)e(OlwSyu~+_ZZ8O z0nfB%w)|jck7I&)SSel*yjGI)+{WrR8i^sA?A@O(ySC1w9mB26!hNJ0x&+q9^g=JX?T$U2w?`y;9hD<&!wm^2sup`ouUi$sR>k>ZGt56aT9jvt_}YFz1>{L#hRTQ<|5$;5N{ zVpx1~ z6(}Wy%ZTzI@zYME>ESJ`&m3|CPrm3(7J~M--2Jn;<#HN^iQO`s$-mr5mz+_~yL%g4 zx)fJib!O-kb9;u(Qrdmdy$_rlmjlY%J@;NefE=qor(V1DPqO#p?a&{Z2`D0Xxz<@A+aikB)}xIUFk_wFKi>^XKUp-ic&cZ33ZTUUH0#qR)xQMt*_Ggrw)ieqP01mVsf zwzpZ0a!PN7GqtXUq33(ZflKm&KGW#=m*iybI910I5RKT=!UL<1Urdg~ z^==NxzjX4g_%y$O>~m8GaN{ehKD*ZQGmM7+`x%y(*aCVCTCy zU!NR(iZoI3?q9iCK2Xj1zW&3Vo0^qWYUuLxsVOBm`bxC2^UDNoa-%7^kC&_>y+hnc zc{ji3>xKnpP#4yhL1!0=i927-!&tsbz$h+Cw?QrLJr1HqqvqWd)`$5H>;TqfR z)&b|ZONyHMW}Ef}n`k>x02`lqEQ-t@<;-ol%o0$FU?hHRk)qRSX)cFxstMqj07Y*5 zf5}rR*#*q#kc6Qz^7Dj}HRM)35=<;=RheTNhy8f-&m;GbQM1@#&g#|Dh ztD7ywi_ZveTQs1H15eZUvHF)eJZ)yJeOx%s`_$ zx3zZPW|s{={nq!3gDmmK=nU#qt4>e|xGisaEWbf||7a(5lhYcL#*y*})QbI5BrKN$ zRvJg|Z!a5(o*3qSHpKFkC15r!pi$=8C!76Z@WS9=#Y%%@eYf_~Xl{~--B=BFI~(a! zNw$tYGp#?o-fq5AIuF0HJjD8}QrsnL-)2XJm#vG3f&gltl2y0p3eV=yfM@pX4rs zs(QR0!-R_9rtZpE6=v3{T63z-HefcQnr=mKZsSaSJPU8+A)PI5QT>NNYaa^7bw0UH`pap=0Zi zQx&!r2LrH)?>y=Aq$&i#Mk)U; zfbnVpeiLnLA-PkEC$5kP?ViQpVBzt{V4ZV&ZPWxdzE}H9X&l(;zjz?Jr8rFQ(t(fS>?eD+FEdu~|_q>3ok>x!$n^Xbby#`yy1qCn7 z+@J24^*-%03=UBcwu?&WJGCRZtD#k;OK0#{wTkB}3m|{-;KO%2hkvgge5_L5J1w=j z#YO6qqO7ekWS2g}AiA(0oQ;X{#_7I6x5Wt*QF2GxK@`qLF#v(DMDEVbgW#!rRA;h*TYKde*G>YLAD6#Z zNWysluZb`^;1SR($zfvHT$9ZoF^!%b7Y{RZK868t0_;D@Q1Ya&knQBVT);#RR+`%T zSnQ3Lv-9aVF8C$_+M~JsN>g2u3-*8KUp}a2-bLG|jPzRDNB~_!khaDp^_=sTf&UB9 Cmm|gi literal 0 HcmV?d00001 diff --git a/src/all/yaoimangaonline/src/eu/kanade/tachiyomi/extension/all/yaoimangaonline/YaoiMangaFilters.kt b/src/all/yaoimangaonline/src/eu/kanade/tachiyomi/extension/all/yaoimangaonline/YaoiMangaFilters.kt new file mode 100644 index 000000000..669811db8 --- /dev/null +++ b/src/all/yaoimangaonline/src/eu/kanade/tachiyomi/extension/all/yaoimangaonline/YaoiMangaFilters.kt @@ -0,0 +1,432 @@ +package eu.kanade.tachiyomi.extension.all.yaoimangaonline + +import eu.kanade.tachiyomi.source.model.Filter + +class CategoryFilter( + values: Array = categories.keys.toTypedArray() +) : Filter.Select("Category", values) { + override fun toString() = categories[values[state]]!! + + companion object { + private val categories = mapOf( + "ALL" to "-1", + "07-Ghost dj" to "121", + "A3! Dj" to "5315", + "Ace Attorney Dj" to "5899", + "Ai no Kusabi DJ" to "87", + "AI: The Somnium Files Dj" to "6774", + "Aldnoah.Zero Dj" to "4978", + "All Out!! Dj" to "3414", + "Ameiro Paradox Dj" to "1741", + "Ansatsu Kyoushitsu Dj" to "3437", + "Antique Bakery dj" to "123", + "Ao no Exorcist Dj" to "639", + "Arashi Dj" to "2518", + "Arslan Senki Dj" to "5098", + "Assassination Classroom Dj" to "2522", + "Assassin’s Creed Dj" to "2519", + "Astro Fighter Sunred Dj" to "348", + "Attack on Titan dj" to "108", + "Avengers Dj" to "2532", + "Azazel san! dj" to "214", + "Baccano Dj" to "5925", + "Bakumatsu Rock Dj" to "2552", + "Banana Fish Dj" to "5926", + "Band Yarouze! Dj" to "3941", + "Bara" to "14", + "Barakamon dj" to "132", + "Basquash! Dj" to "2550", + "Batman Dj" to "7861", + "Battle Spirits Dj" to "2555", + "Beelzebub dj" to "125", + "Berserk Dj" to "2558", + "Beyblade Burst Dj" to "3512", + "Big Hero 6 Dj" to "3464", + "Black Clover Dj" to "5924", + "Black Jack Dj" to "4006", + "Blazblue Dj" to "351", + "Blood Blockade Battlefront Dj" to "3987", + "Boktai Dj" to "1307", + "Boku Dake ga Inai Machi Dj" to "3529", + "Boku no Hero Academia Dj" to "3362", + "Boondock Saints Dj" to "2620", + "Border Dj" to "2617", + "Brave Story Dj" to "2622", + "Buddy Complex Dj" to "2625", + "Bungou Stray Dogs Dj" to "5897", + "Bungou to Alchemist Dj" to "6365", + "Call of Duty Modern Warfare DJ" to "2794", + "Candidate for Goddess Dj" to "2627", + "Cardfight!! Vanguard Dj" to "3611", + "Casshern Sins Dj" to "2628", + "Castlevania Dj" to "2631", + "Chinko no Tsubuyaki Dj" to "2865", + "Chobits Dj" to "2546", + "Chouhatsu Denkou Sekka Boys Dj" to "4977", + "Chousoku Henkei Gyrozetter Dj" to "2633", + "Clannad Dj" to "2635", + "Cluster Edge Dj" to "2640", + "Code Geass Dj" to "2644", + "ConCon-Collector Dj" to "478", + "Crows ZERO Dj" to "3331", + "D.Gray-man Dj" to "2255", + "Daiya no Ace Dj" to "2676", + "Danganronpa Dj" to "3712", + "Dark Avengers Dj" to "2529", + "Darkstalkers/ Red Earth dj" to "383", + "Datenshi ni Sasageru Uta dj" to "949", + "DAYS Dj" to "3514", + "Dead by Daylight Dj" to "4970", + "Detective Conan Dj" to "3333", + "Devil May Cry 5 Dj" to "5915", + "Devilman Dj" to "4975", + "Donten ni Warau Dj" to "3922", + "Doushitemo Furetakunai Dj" to "3052", + "Dr. Stone Dj" to "7324", + "Dragalia Lost Dj" to "5914", + "Dragon Ball Dj" to "2799", + "Dragon Quest Dj" to "398", + "Dragon’s Dogma Dj" to "3679", + "DRAMAtical Murder Dj" to "3486", + "Drifters Dj" to "5930", + "Durarara dj" to "82", + "Dynasty Warriors Dj" to "3218", + "Enen no Shouboutai Dj" to "5933", + "Ensemble Stars! Dj" to "1868", + "Enzai Dj" to "571", + "Eternal Arcadia Dj" to "2825", + "Eyeshield 21 Dj" to "3644", + "Fantastic Boyfriends Dj" to "1704", + "Fate/Grand Order Dj" to "3117", + "Fate/Stay Night Dj" to "3656", + "Fate/Zero Dj" to "3235", + "Final Fantasy Dj" to "3277", + "Fire Emblem Dj" to "692", + "Free! dj" to "71", + "Friday the 13th Dj" to "3944", + "Fullmetal Alchemist Dj" to "409", + "Furry" to "15", + "Future Card Buddyfight Dj" to "387", + // "Gay Movies" to "3017", + "Gay Novels" to "1852", + "Gekkan Shoujo Nozaki-kun Dj" to "3940", + "Genshin Impact Dj" to "6423", + "GetBackers Dj" to "5278", + "Giant Killing Dj" to "3216", + "Gingitsune Dj" to "325", + "Gintama Dj" to "3225", + "Golden Kamuy Dj" to "5901", + "Granblue Fantasy Dj" to "3758", + "Gravitation Dj" to "2069", + "Gravity Falls Dj" to "3855", + "Guardians of the Galaxy Dj" to "449", + "Gugure! Kokkuri-san Dj" to "3877", + "Gundam Dj" to "5931", + "Gundam Wing Dj" to "5900", + "Gyakuten Saiban Dj" to "2834", + "Hacka Doll Dj" to "3472", + "Haikyuu!! Dj" to "512", + "Hakkenden Dj" to "2498", + "Hakuouki Dj" to "2495", + "Harry Potter Dj" to "2489", + "Hataraku Saibou Dj" to "4191", + "Heat Guy J Dj" to "2482", + "Heroman Dj" to "2479", + "Hetalia Dj" to "191", + "Hidoku Shinaide Dj" to "754", + "Hikaru No Go Dj" to "2476", + "Hinomaru Zumou Dj" to "2473", + "Honeycomb Child Dj" to "306", + "Hoozuki no Reitetsu Dj" to "3810", + "How to Train Your Dragon Dj" to "196", + "Hunter x Hunter Dj" to "3562", + "Hypnosis Mic Dj" to "4289", + "Identity V Dj" to "5929", + "IDOLiSH7 Dj" to "3773", + "Inazuma Eleven Dj" to "2279", + "Initial D Dj" to "2464", + "Interval Dj" to "2462", + "InuYasha Dj" to "2455", + "Ixion Saga Dj" to "2454", + "Jinrou Judgement Dj" to "7862", + "Jojo DJ" to "1280", + "Jojo no Kimyou na Bouken Dj" to "3193", + "Jormungand Dj" to "6228", + "Jujutsu Kaisen Dj" to "5895", + "K Project Dj" to "1014", + "Kagerou Project Dj" to "4094", + "Kaiji Dj" to "2828", + "Kakumeiki Valvrave Dj" to "2450", + "Kami-sama no Ude no Naka de Dj" to "3056", + "Kanpai! Dj" to "2445", + "Kantai Collection Dj" to "3664", + "Karamete de Kudoite Dj" to "1933", + "Katekyo Hitman Reborn! Dj" to "2247", + "Katekyo! Dj" to "1843", + "Kekkai Sensen Dj" to "3695", + "Kichiku Megane Dj" to "3816", + "Kidou Senshi Gundam – Tekketsu no Orphans Dj" to "3129", + "Kill la Kill Dj" to "2447", + "Killing Stalking Dj" to "6593", + "Kimetsu no Yaiba Dj" to "5898", + "Kimi no Na wa dj" to "5423", + "Kimi to boku Dj" to "2442", + "King of Fighters Dj" to "6255", + "King of Prism by Pretty Rhythm Dj" to "4973", + "King’s Raid Dj" to "4969", + "Kingdom Hearts Dj" to "2269", + "Kiseijuu Dj" to "2996", + "Knight’s & Magic Dj" to "3736", + "Kocchi Muite Waratte Dj" to "3238", + "Koibito Kijunchi Dj" to "882", + "Koisuru Boukun Dj" to "1004", + "Konjiki no Gash!! Dj" to "3892", + "Kono Yoru no Subete Dj" to "2440", + "Koshotengai no Hashihime Dj" to "4968", + "Kuroko no Basuke Dj" to "1094", + "Kuroshitsuji Dj" to "2252", + "Kyoukai no Kanata Dj" to "2434", + "Kyoushou Sentai Danjijaa Dj" to "3303", + "Lamento dj" to "150", + "Laputa Castle in the Sky Dj" to "2432", + "League of Legends Dj" to "455", + "Legendz: Tale of the Dragon Kings Dj" to "343", + "Lord of the Rings Dj" to "148", + "Loveless Dj" to "5928", + "Lucky Dog Dj" to "3894", + "Magi dj" to "139", + "Maiden Rose DJ" to "724", + "Megido72 Dj" to "4972", + "Metal Gear Solid Dj" to "3395", + "Mob Psycho 100 Dj" to "3450", + "Mobile Fighter G Gundam Dj" to "2831", + "Mobile Suit Gundam 00 Dj" to "3627", + "Mobile Suit Gundam Tekketsu no Orphans Dj" to "702", + "Morenatsu Dj" to "355", + "Mousou Elektel Dj" to "994", + "Mugen no Juunin Dj" to "2821", + "Mushishi Dj" to "2242", + "MUV-LUV Dj" to "2241", + "My Hero Academia Dj" to "3137", + "Naruto Dj" to "2402", + "Natsume Yuujinchou Dj" to "3913", + "Neon Genesis Evangelion Dj" to "2841", + "New Danganronpa V3 Dj" to "3410", + "NieR: Automata Dj" to "3722", + "NightS Dj" to "4974", + "Nightwing Dj" to "3170", + "Ninku Dj" to "2926", + "Noragami Dj" to "2237", + "Octopath Traveler Dj" to "5531", + "One Piece Dj" to "2384", + "One Punch-Man Dj" to "3171", + "Onmyou Taisenki Dj" to "496", + "Ookiku Furikabutte Dj" to "5934", + "Oreimo Dj" to "3260", + "Osomatsu-san Dj" to "3120", + "Ouran High School Host Club Dj" to "2919", + "Owari no Seraph Dj" to "2909", + "Palette Parade Dj" to "5923", + "Pandora Hearts Dj" to "2896", + "Persona 3 Dj" to "3551", + "Persona 4 Dj" to "336", + "Persona 5 Dj" to "3508", + "Phantasy Star Dj" to "2235", + "Phi Brain Dj" to "2233", + "Phoenix Wright Dj" to "2804", + "Phoenix Wright: Ace Attorney Dj" to "2835", + "Pokemon dj" to "51", + "Pretty Rhythm Dj" to "5950", + "Prince of Tennis Dj" to "2336", + "Professor Layton Dj" to "2332", + "Promare Dj" to "4280", + "Psycho Break Dj" to "1967", + "Psycho Pass Dj" to "5910", + "Pumpkin Scissors Dj" to "2231", + "Punishing: Gray Raven Dj" to "5896", + "Quiz Magic Academy Dj" to "5981", + "Rakudai Ninja Rantarou Dj" to "1911", + "Rampo Kitan: Game of Laplace Dj" to "3417", + "Re: Zero kara Hajimeru Isekai Seikatsu Dj" to "5935", + "Resident Evil Dj" to "2832", + "Rival Schools Dj" to "2844", + "Rokkuman Dj" to "2229", + "Rurouni Kenshin Dj" to "2226", + "Ryu ga Gotoku Dj" to "6335", + "Sabita Yoru demo Koi wa Sasayaku Dj" to "1465", + "Saiki Kusuo no Psi Nan Dj" to "3851", + "Saint Seiya Dj" to "7860", + "Saint Young Men Dj" to "2223", + "Saiyuki Dj" to "5905", + "Sakura Gari Dj" to "734", + "Samurai Deeper Kyo Dj" to "2220", + "Sekaiichi Hatsukoi Dj" to "2379", + "Sengoku Basara Dj" to "3250", + "Sherlock Dj" to "1710", + "Shiki Dj" to "2323", + "Shin SangokuMusou Dj" to "3217", + "Shin Seiki Evangelion Dj" to "3156", + "Shingeki no Kyojin dj" to "97", + "Shining Wind Dj" to "461", + "Shinkansen Henkei Robo Shinkalion Dj" to "5908", + "Shinrabansou Choco Dj" to "2820", + "Shironeko Project Dj" to "2321", + "Shokugeki no Soma Dj" to "5907", + "Shoshitsu Dj" to "2318", + "Show by Rock!! Dj" to "3906", + "ShuMao Dj" to "2218", + "Silver Spoon Dj" to "4074", + "SK8 the Infinity Dj" to "7178", + "Slam Dunk Dj" to "6104", + "SMAP! Dj" to "2987", + "Smile PreCure! dj" to "370", + "Soukyuu no Fafner Dj" to "2216", + "SOUL CATCHER" to "5904", + "Soul Eater Dj" to "2314", + "Soul Hackers Dj" to "2313", + "SoulCalibur Dj" to "2312", + "South Park Dj" to "4030", + "Splatoon Dj" to "2377", + "SSSS.GRIDMAN Dj" to "5903", + "Star Fox Dj" to "417", + "Stardew Valley Dj" to "5932", + "Starry Sky Dj" to "2211", + "Strange Plus Dj" to "2212", + "Street Fighter Dj" to "3769", + "Strider Hiryuu Dj" to "2214", + "Suisei no Gargantia Dj" to "3245", + "Summer Wars Dj" to "2797", + "Superman/Batman Dj" to "49", + "Supernatural Dj" to "1705", + "SWAT Kats Dj" to "3283", + "Sword Art Online dj" to "185", + "Tactics dj" to "182", + "Taiiku Kyoushi Kiwame Dj" to "3806", + "Tales of Destiny Dj" to "5902", + "Tales of Graces dj" to "180", + "Tales of the Abyss Dj" to "4073", + "Tales of Vesperia Dj" to "3931", + "Tales of Zestiria Dj" to "4976", + "Tate no Yuusha no Nariagari Dj" to "4967", + "The Evil Within Dj" to "1966", + "THE IDOLM@STER Dj" to "3558", + "The Legend Of Zelda Dj" to "4455", + "The Lion King DJ" to "320", + "The Melancholy of Haruhi Suzumiya Dj" to "3823", + "The Mighty Thor Dj" to "2082", + "The Outsiders Dj" to "576", + "The Silence of the Lambs Dj" to "5982", + "The Unlimited – Hyoubu Kyousuke Dj" to "834", + "The World God Only Knows Dj" to "3667", + "Tiger & Bunny dj" to "61", + "To Aru Majutsu no Index Dj" to "2079", + "Tobaku Haouden ZERO Dj" to "3927", + "Togainu no Chi dj" to "46", + "Tokkyuu!! Dj" to "2077", + "Tokyo Ghoul Dj" to "1756", + "Toriko Dj" to "2812", + "Totally Captivated dj" to "178", + "Touken Ranbu Dj" to "570", + "Trigun Dj" to "174", + "Turn A Gundam Dj" to "2480", + "Twisted Wonderland Dj" to "5909", + "Uchuu Kyoudai Dj" to "6052", + "Under Grand Hotel Dj" to "3048", + "Ura Brave Kingdom Dj" to "2074", + "Urban Reign Dj" to "2846", + "Usavich dj" to "47", + "Uta no Prince-sama Dj" to "2259", + "Utawarerumono Dj" to "230", + "Valkariya Chronicles Dj" to "2806", + "Valkyria Chronicles Dj" to "225", + "Valvrave the Liberator Dj" to "2449", + "Vampire Knight dj" to "171", + "Vassalord dj" to "166", + "Vinland Saga Dj" to "6424", + "Vocaloid Dj" to "1719", + "Voltron Dj" to "5414", + "Warriors Orochi Dj" to "218", + "Wild Adapter dj" to "164", + "Winnie the Pooh Dj" to "3869", + "World Trigger Dj" to "1091", + "xxxHoLic Dj" to "1075", + "Yahari Ore no Seishun Love Comedy wa Machigatteiru Dj" to "5916", + "Yakuza DJ" to "161", + "Yami no Matsuei Dj" to "6106", + // "Yaoi Anime" to "2009", + "Yaoi DJ" to "1", + "Yaoi Gallery" to "198", + "Yaoi Games Online" to "199", + "Yaoi Magazines" to "3543", + "Yaoi Manga" to "13", + "Yaoi Oneshots" to "22", + "Yarichin Bitch Club Dj" to "5927", + "Yarou Fes 2013 Petit Dj" to "3433", + "Yondemasuyo Azazel-san dj" to "210", + "Young Black Jack dj" to "207", + "Yowamushi Pedal Dj" to "2273", + "Yu Yu Hakusho Dj" to "1087", + "Yu-Gi-Oh! Dj" to "1027", + "Yuri!!! on Ice Dj" to "2503", + "Zettai Karen Children dj" to "50", + "Zootopia Dj" to "2075", + ) + } +} + +class TagFilter( + values: Array = tags.keys.toTypedArray() +) : Filter.Select("Tag", values) { + override fun toString() = tags[values[state]]!! + + companion object { + private val tags = mapOf( + "ALL" to "", + "Ahegao" to "ahegao", + "Bara" to "bara", + "BDSM Yaoi" to "bdsm", + "Beastality" to "beastality", + "Big Penis" to "big-penis", + "Blowjob" to "blowjob", + "Bondage" to "bondage", + "Chinese" to "chinese", + "Comedy" to "comedy", + "Completed Yaoi Manga" to "completed-yaoi-manga", + "Cross-dressing" to "cross-dressing", + "Cute" to "cute", + "Dark skin" to "dark-skin", + "Drama" to "drama", + "English" to "english", + "Full Color" to "full-color", + "Group Sex" to "group-sex", + "Handjob" to "handjob", + "Hardcore" to "hardcore", + "Hard Yaoi" to "hard-yaoi", + "Hentai" to "hentai", + "Hentai Yaoi" to "hentai-yaoi", + "Hentai Yaoi Manga" to "hentai-yaoi-manga", + "Incest" to "incest", + "Japanese" to "japanese", + "Komik Yaoi Hentai" to "komik-yaoi-hentai", + "Korean" to "korean", + "Masturbation" to "masturbation", + "Megane" to "megane", + "Muscle" to "muscle", + "Nipple play" to "nipple-play", + "Rape" to "rape", + "Romance" to "romance", + "School Life" to "school-life", + "Sex toy" to "sex-toy", + "Shounen Ai" to "shounen-ai", + "Slice of Life" to "slice-of-life", + "Smut" to "smut", + "Threesome" to "threesome", + "Uncensored Yaoi" to "uncensored-yaoi", + "Webtoon" to "webtoon", + "Yaoi" to "yaoi", + "Yaoi Hentai" to "yaoi-hentai", + "Yaoi Hentai Manga" to "yaoi-hentai-manga", + "Yaoi Sex" to "yaoi-sex", + ) + } +} diff --git a/src/all/yaoimangaonline/src/eu/kanade/tachiyomi/extension/all/yaoimangaonline/YaoiMangaOnline.kt b/src/all/yaoimangaonline/src/eu/kanade/tachiyomi/extension/all/yaoimangaonline/YaoiMangaOnline.kt new file mode 100644 index 000000000..904dfe171 --- /dev/null +++ b/src/all/yaoimangaonline/src/eu/kanade/tachiyomi/extension/all/yaoimangaonline/YaoiMangaOnline.kt @@ -0,0 +1,109 @@ +package eu.kanade.tachiyomi.extension.all.yaoimangaonline + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.source.online.ParsedHttpSource +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Response +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element + +class YaoiMangaOnline : ParsedHttpSource() { + override val lang = "all" + + override val name = "Yaoi Manga Online" + + override val baseUrl = "https://yaoimangaonline.com" + + override val supportsLatest = false + + override fun latestUpdatesSelector() = popularMangaSelector() + + override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector() + + override fun latestUpdatesRequest(page: Int) = popularMangaRequest(page) + + override fun latestUpdatesFromElement(element: Element) = + popularMangaFromElement(element) + + override fun popularMangaSelector() = searchMangaSelector() + + override fun popularMangaNextPageSelector() = searchMangaNextPageSelector() + + override fun popularMangaRequest(page: Int) = + searchMangaRequest(page, "", FilterList()) + + override fun popularMangaFromElement(element: Element) = + searchMangaFromElement(element) + + override fun searchMangaSelector() = + ".post:not(.category-gay-movies):not(.category-yaoi-anime) > div > a" + + override fun searchMangaNextPageSelector() = ".herald-pagination > .next" + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = + baseUrl.toHttpUrl().newBuilder().run { + filters.forEach { + when (it) { + is CategoryFilter -> if (it.state != 0) { + addQueryParameter("cat", it.toString()) + } + is TagFilter -> if (it.state != 0) { + addEncodedPathSegments("tag/$it") + } + else -> Unit + } + } + addQueryParameter("s", query) + GET(toString(), headers) + } + + override fun searchMangaFromElement(element: Element) = + SManga.create().apply { + title = element.attr("title") + setUrlWithoutDomain(element.attr("href")) + thumbnail_url = element.selectFirst("img").attr("src") + } + + override fun mangaDetailsParse(document: Document) = + SManga.create().apply { + title = document.selectFirst(".entry-title").text() + thumbnail_url = document.head() + .selectFirst("meta[property=og:image]").attr("content") + description = document.selectFirst(".entry-content > p") + .html().replace("
", "\n") + genre = document.select(".meta-tags > a").joinToString { it.text() } + } + + override fun chapterListSelector() = "#acp_paging_menu > li" + + override fun chapterFromElement(element: Element) = + SChapter.create().apply { + name = element.selectFirst(".acp_title").text() + setUrlWithoutDomain( + element.selectFirst("a")?.attr("href") ?: element.baseUri() + ) + } + + override fun chapterListParse(response: Response) = + super.chapterListParse(response).ifEmpty { + SChapter.create().apply { + name = "Chapter" + url = response.request.url.encodedPath + }.let(::listOf) + } + + override fun pageListParse(document: Document) = + document.select(".size-full").mapIndexed { idx, img -> + Page(idx, "", img.attr("src")) + } + + override fun imageUrlParse(document: Document) = + throw UnsupportedOperationException("Not used") + + override fun getFilterList() = + FilterList(CategoryFilter(), TagFilter()) +}