From 6dc6ce00597bf027ee07b040d7feb01a2a384040 Mon Sep 17 00:00:00 2001 From: "Claude (Chronicler #83 - The Compiler)" Date: Tue, 14 Apr 2026 08:29:51 -0500 Subject: [PATCH] Rules mods: add Forge 1.18.2-40.2.4 builds for both Firefrost and Discord Rules Ported from 1.20.1 source with 1.18.2 API changes (TextComponent, sendMessage w/ UUID, getPlayer). Both compile clean on Java 17 + ForgeGradle 6.0 + Gradle 8.8. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../.gradle/8.8/checksums/checksums.lock | Bin 0 -> 17 bytes .../.gradle/8.8/checksums/md5-checksums.bin | Bin 0 -> 18597 bytes .../.gradle/8.8/checksums/sha1-checksums.bin | Bin 0 -> 18605 bytes .../8.8/dependencies-accessors/gc.properties | 0 .../8.8/executionHistory/executionHistory.bin | Bin 0 -> 101068 bytes .../executionHistory/executionHistory.lock | Bin 0 -> 17 bytes .../.gradle/8.8/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/8.8/fileHashes/fileHashes.bin | Bin 0 -> 19797 bytes .../.gradle/8.8/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../8.8/fileHashes/resourceHashesCache.bin | Bin 0 -> 18735 bytes .../1.18.2/.gradle/8.8/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../buildOutputCleanup/outputFiles.bin | Bin 0 -> 19181 bytes .../1.18.2/.gradle/file-system.probe | Bin 0 -> 8 bytes .../1.18.2/.gradle/vcs-1/gc.properties | 0 services/discord-rules/1.18.2/build.gradle | 50 ++++ .../discord-rules/1.18.2/gradle.properties | 2 + .../1.18.2/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43453 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + services/discord-rules/1.18.2/gradlew | 249 ++++++++++++++++++ services/discord-rules/1.18.2/gradlew.bat | 92 +++++++ services/discord-rules/1.18.2/settings.gradle | 8 + .../com/discordrules/CooldownManager.java | 32 +++ .../java/com/discordrules/DiscordFetcher.java | 45 ++++ .../com/discordrules/DiscordFormatter.java | 45 ++++ .../java/com/discordrules/RulesCache.java | 26 ++ .../java/com/discordrules/RulesCommand.java | 62 +++++ .../java/com/discordrules/ServerRules.java | 53 ++++ .../com/discordrules/ServerRulesConfig.java | 43 +++ .../src/main/resources/META-INF/mods.toml | 27 ++ .../discord-rules-1.0.5-1.18.2-forge.jar | Bin 0 -> 15266 bytes .../.gradle/8.8/checksums/checksums.lock | Bin 0 -> 17 bytes .../.gradle/8.8/checksums/md5-checksums.bin | Bin 0 -> 23047 bytes .../.gradle/8.8/checksums/sha1-checksums.bin | Bin 0 -> 34589 bytes .../8.8/dependencies-accessors/gc.properties | 0 .../8.8/executionHistory/executionHistory.bin | Bin 0 -> 101299 bytes .../executionHistory/executionHistory.lock | Bin 0 -> 17 bytes .../1.18.2/.gradle/8.8/expanded/expanded.lock | Bin 0 -> 17 bytes .../.gradle/8.8/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/8.8/fileHashes/fileHashes.bin | Bin 0 -> 19797 bytes .../.gradle/8.8/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../8.8/fileHashes/resourceHashesCache.bin | Bin 0 -> 18735 bytes .../1.18.2/.gradle/8.8/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../buildOutputCleanup/outputFiles.bin | Bin 0 -> 19181 bytes .../1.18.2/.gradle/file-system.probe | Bin 0 -> 8 bytes .../1.18.2/.gradle/vcs-1/gc.properties | 0 services/rules-mod/1.18.2/build.gradle | 50 ++++ services/rules-mod/1.18.2/gradle.properties | 2 + .../1.18.2/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43453 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + services/rules-mod/1.18.2/gradlew | 249 ++++++++++++++++++ services/rules-mod/1.18.2/gradlew.bat | 92 +++++++ services/rules-mod/1.18.2/settings.gradle | 8 + .../rules/CooldownManager.java | 32 +++ .../firefrostgaming/rules/DiscordFetcher.java | 47 ++++ .../rules/DiscordFormatter.java | 45 ++++ .../com/firefrostgaming/rules/RulesCache.java | 26 ++ .../firefrostgaming/rules/RulesCommand.java | 62 +++++ .../firefrostgaming/rules/ServerRules.java | 53 ++++ .../rules/ServerRulesConfig.java | 35 +++ .../src/main/resources/META-INF/mods.toml | 28 ++ .../firefrostrules-1.0.5-1.18.2-forge.jar | Bin 0 -> 15175 bytes 65 files changed, 1481 insertions(+) create mode 100644 services/discord-rules/1.18.2/.gradle/8.8/checksums/checksums.lock create mode 100644 services/discord-rules/1.18.2/.gradle/8.8/checksums/md5-checksums.bin create mode 100644 services/discord-rules/1.18.2/.gradle/8.8/checksums/sha1-checksums.bin create mode 100644 services/discord-rules/1.18.2/.gradle/8.8/dependencies-accessors/gc.properties create mode 100644 services/discord-rules/1.18.2/.gradle/8.8/executionHistory/executionHistory.bin create mode 100644 services/discord-rules/1.18.2/.gradle/8.8/executionHistory/executionHistory.lock create mode 100644 services/discord-rules/1.18.2/.gradle/8.8/fileChanges/last-build.bin create mode 100644 services/discord-rules/1.18.2/.gradle/8.8/fileHashes/fileHashes.bin create mode 100644 services/discord-rules/1.18.2/.gradle/8.8/fileHashes/fileHashes.lock create mode 100644 services/discord-rules/1.18.2/.gradle/8.8/fileHashes/resourceHashesCache.bin create mode 100644 services/discord-rules/1.18.2/.gradle/8.8/gc.properties create mode 100644 services/discord-rules/1.18.2/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 services/discord-rules/1.18.2/.gradle/buildOutputCleanup/cache.properties create mode 100644 services/discord-rules/1.18.2/.gradle/buildOutputCleanup/outputFiles.bin create mode 100644 services/discord-rules/1.18.2/.gradle/file-system.probe create mode 100644 services/discord-rules/1.18.2/.gradle/vcs-1/gc.properties create mode 100644 services/discord-rules/1.18.2/build.gradle create mode 100644 services/discord-rules/1.18.2/gradle.properties create mode 100644 services/discord-rules/1.18.2/gradle/wrapper/gradle-wrapper.jar create mode 100644 services/discord-rules/1.18.2/gradle/wrapper/gradle-wrapper.properties create mode 100755 services/discord-rules/1.18.2/gradlew create mode 100644 services/discord-rules/1.18.2/gradlew.bat create mode 100644 services/discord-rules/1.18.2/settings.gradle create mode 100644 services/discord-rules/1.18.2/src/main/java/com/discordrules/CooldownManager.java create mode 100644 services/discord-rules/1.18.2/src/main/java/com/discordrules/DiscordFetcher.java create mode 100644 services/discord-rules/1.18.2/src/main/java/com/discordrules/DiscordFormatter.java create mode 100644 services/discord-rules/1.18.2/src/main/java/com/discordrules/RulesCache.java create mode 100644 services/discord-rules/1.18.2/src/main/java/com/discordrules/RulesCommand.java create mode 100644 services/discord-rules/1.18.2/src/main/java/com/discordrules/ServerRules.java create mode 100644 services/discord-rules/1.18.2/src/main/java/com/discordrules/ServerRulesConfig.java create mode 100644 services/discord-rules/1.18.2/src/main/resources/META-INF/mods.toml create mode 100644 services/discord-rules/discord-rules-1.0.5-1.18.2-forge.jar create mode 100644 services/rules-mod/1.18.2/.gradle/8.8/checksums/checksums.lock create mode 100644 services/rules-mod/1.18.2/.gradle/8.8/checksums/md5-checksums.bin create mode 100644 services/rules-mod/1.18.2/.gradle/8.8/checksums/sha1-checksums.bin create mode 100644 services/rules-mod/1.18.2/.gradle/8.8/dependencies-accessors/gc.properties create mode 100644 services/rules-mod/1.18.2/.gradle/8.8/executionHistory/executionHistory.bin create mode 100644 services/rules-mod/1.18.2/.gradle/8.8/executionHistory/executionHistory.lock create mode 100644 services/rules-mod/1.18.2/.gradle/8.8/expanded/expanded.lock create mode 100644 services/rules-mod/1.18.2/.gradle/8.8/fileChanges/last-build.bin create mode 100644 services/rules-mod/1.18.2/.gradle/8.8/fileHashes/fileHashes.bin create mode 100644 services/rules-mod/1.18.2/.gradle/8.8/fileHashes/fileHashes.lock create mode 100644 services/rules-mod/1.18.2/.gradle/8.8/fileHashes/resourceHashesCache.bin create mode 100644 services/rules-mod/1.18.2/.gradle/8.8/gc.properties create mode 100644 services/rules-mod/1.18.2/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 services/rules-mod/1.18.2/.gradle/buildOutputCleanup/cache.properties create mode 100644 services/rules-mod/1.18.2/.gradle/buildOutputCleanup/outputFiles.bin create mode 100644 services/rules-mod/1.18.2/.gradle/file-system.probe create mode 100644 services/rules-mod/1.18.2/.gradle/vcs-1/gc.properties create mode 100644 services/rules-mod/1.18.2/build.gradle create mode 100644 services/rules-mod/1.18.2/gradle.properties create mode 100644 services/rules-mod/1.18.2/gradle/wrapper/gradle-wrapper.jar create mode 100644 services/rules-mod/1.18.2/gradle/wrapper/gradle-wrapper.properties create mode 100755 services/rules-mod/1.18.2/gradlew create mode 100644 services/rules-mod/1.18.2/gradlew.bat create mode 100644 services/rules-mod/1.18.2/settings.gradle create mode 100644 services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/CooldownManager.java create mode 100644 services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/DiscordFetcher.java create mode 100644 services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/DiscordFormatter.java create mode 100644 services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/RulesCache.java create mode 100644 services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/RulesCommand.java create mode 100644 services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/ServerRules.java create mode 100644 services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/ServerRulesConfig.java create mode 100644 services/rules-mod/1.18.2/src/main/resources/META-INF/mods.toml create mode 100644 services/rules-mod/firefrostrules-1.0.5-1.18.2-forge.jar diff --git a/services/discord-rules/1.18.2/.gradle/8.8/checksums/checksums.lock b/services/discord-rules/1.18.2/.gradle/8.8/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..7dd1d21d530b233607445138c266e56df46df190 GIT binary patch literal 17 UcmZR6;(het-X$AWGC%+i07c;ip8x;= literal 0 HcmV?d00001 diff --git a/services/discord-rules/1.18.2/.gradle/8.8/checksums/md5-checksums.bin b/services/discord-rules/1.18.2/.gradle/8.8/checksums/md5-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..8c1eba749d3fdf5c0558b3c1e5ab65b9e569392a GIT binary patch literal 18597 zcmeI%Axncn7y#gNHXVE`>Sxk52cIHZW*mr`ObWA#f>;a&lhI}|m}K|^W)}Pnf_Y)Z zX0h4lecnEXf50Hm!QK1v9xr$I)Y}drZ;ZwxOvc7MPbRP_k4Q{zkor02Y2`9fBd<-Up=lBMak^fxJ8pznuH<(1PBlyK!5-N0t5&U zAV7cs0RjXF5FkL{zX)uHi%e&iNvd%g6njxrp9w*HzrXmr^SW@AEpPVn_k*qSW#^(> zXpHmCJfF`Y-^|vG1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7e?Uka>;&1#`9rG371ee$%idekq}593k)^yXl>5`F_rogY`v+S#dA n-om{0yQCgvomXEwk?Dxol;V+PD12} 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 S-QDuILt?W$UXSPgZT}CMou^6w literal 0 HcmV?d00001 diff --git a/services/discord-rules/1.18.2/.gradle/8.8/executionHistory/executionHistory.lock b/services/discord-rules/1.18.2/.gradle/8.8/executionHistory/executionHistory.lock new file mode 100644 index 0000000000000000000000000000000000000000..ee767800798e7023479ecf19a2d7bae475e17594 GIT binary patch literal 17 UcmZRc^I5^}ocWsw1_05yvQNdN!< literal 0 HcmV?d00001 diff --git a/services/discord-rules/1.18.2/.gradle/8.8/fileChanges/last-build.bin b/services/discord-rules/1.18.2/.gradle/8.8/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/services/discord-rules/1.18.2/.gradle/8.8/fileHashes/fileHashes.bin b/services/discord-rules/1.18.2/.gradle/8.8/fileHashes/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..36f1935b8d280cf263ddd222cff07c98e0b5321f GIT binary patch literal 19797 zcmeI4c}!GC9LFC}ksG8-03(RptOBK#lq(=N%h8%}lt4MPpx6?ZTec`z4r`Hu6f8z$ z4ay;@1tA3sR1gp;cyI|=C{?VAv=lVRRj}{v%*1q`f7E}Q-y}Ql<@@IIes4ZI``7NQ z3q@(Dyu^)q)zn^{!WkF<17H9QfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFz|md z;7?CP4oya5ha_{NoJ>*gD9|UHbL3l!x$fE#=(1-C`Tiik$5K;OYm|p_j|(LKc0IR0 z^X||ODEBrY`Nb>W8@L7r*Q1>G8OeLQ%P&Ok9!tdI=Skl8JY(K5R6-k%mnC_B%Zx+$ z-iZ#Bd&HA`YOb(&A>ZvK%DoCn{nFK&@S&8e#;xbjc#jd1+xjbxKUywP zN4aM-$?X*M_#viK6)5+LAi3+=)Lf+kVLPsSg5(}HS?WCbkxlqMYa|bqT3XWLBx~Wk zm*o4NoZqs&>bFpwOOgE3vO4p;wk~EZ(alGXUMhn=*@h;@_AXuzGlvhaIGmy=iPBs% zha_}Y`6&8m_HW|$(}edUd}|eRe4RU|(_Cf{VZVxq>Q*-K;Nw!?qx{s$zjx0LEw+6~ z|5FiD!+seN)C!xpm#x$u9}-YlTWELFFT3Y5eySiu=rX$-#GXp7%u&)>Jdb|TO*gBj0~Glthj#pSyG#GsitPr z=-qXChXn14dmYbQmf4XZ_Ed>q-HAz@uek5zH0YpUJ1L85?818oHqbT23I2rP@>=4M z;0V7rE2#2dC#vzMG(D1T3TAXCR--Sg{H&*!cGpK6Zt#q6`(yPtf}_%-*5r)KR4+DQA_fs08#W;{J)o`^ zSk@5DKQY^CwrY-vK}5*avx$g%r2?bfi9{dyj^=3^oi5jL+`yIK>{ zxzqDTNk$fGro;SDD-p5dB=bq4D0R)B=w9so@CjILs!0sf-B>hfYZzU>f@(z3tA%bh iO_OY*%-ll1@9^=z623ktM>ztc;R_ zEG-d-kyEw%XcyN#h-CS009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0;re+txy$IceFI<{3| zhu*S$a!~7XoTZ&dbJxYt@Ut=Fp4>DT3lyPOg>5g#|DM=z@78Z6FKzZ2iXwrVId@)S z!(t6y+Y2&F?w`6e8^u;vV&ge9x0B*jZ$Gx^oWYL8*q;Qy-ormU@HQJVPbqze``U(} YH?iSa9Uq)Z9V)a3N3-0fKxwS;32Hy7&j0`b literal 0 HcmV?d00001 diff --git a/services/discord-rules/1.18.2/.gradle/8.8/gc.properties b/services/discord-rules/1.18.2/.gradle/8.8/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/services/discord-rules/1.18.2/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/services/discord-rules/1.18.2/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..4da24aa9d8b6372f050a8b6d2ebb37056d8fed96 GIT binary patch literal 17 UcmZR6lb|qt$AorP1_;mw05W|91^@s6 literal 0 HcmV?d00001 diff --git a/services/discord-rules/1.18.2/.gradle/buildOutputCleanup/cache.properties b/services/discord-rules/1.18.2/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..a4229be --- /dev/null +++ b/services/discord-rules/1.18.2/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Tue Apr 14 08:26:28 CDT 2026 +gradle.version=8.8 diff --git a/services/discord-rules/1.18.2/.gradle/buildOutputCleanup/outputFiles.bin b/services/discord-rules/1.18.2/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..18e733c7d3536b397a34e60a84a1e96045d8e564 GIT binary patch literal 19181 zcmeI%dq`6O6vy#fmQj|LVQFOALnmmcsFXbrL36u3v4n7C85{UVCB1wF>tRAxSYc{W zXr`75Mp-^c)0~RT5?PU^rY6Qri%P-hA=t(}M+^UvfduipuzCIN+;ew7_@6<7U_XD9 z4q^PT8$ZPv1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00RGuK$!7C=131??=jtU zViPL}UUQ8nt`~HgdHYZHY?3}!Z0G+UT+#VC*gC#ZP@ly;?U7$nU2m0?1u>fY^3*R-dC``ve+tI{+bTc~$)&+q%B%6QVcmiE|jFKk?MvC}1D zkJRO{+>66|zJFQXS4Vp`a<48@&+H0zbf!MYz4k#;kNdvCb+l(E_qxRR@S)PuLsAzz zxIb^m$vd#4?F98a?)u7)0XeG9TH2%M-V)Wm&BapQMDu0b4ZA|lRVI!^N?lRFz5kkx z&Y;!O_ZMZ{2kvDrTX6d8R@!rh`_Gk5R$Vikg6Y1=+^rvv#*_?Iyrum~+--7)zb)CI zrTfYQxi5_$ZOip}nMm^)+?_(y<-0u^>uG-xcQ@H7{UR$@d+Im2`!t+w34EpUrakUs z{m11ODeVg*XkN|TUl|`)?e;XA<{h{PXC_>-zIwYx>f&DRq4hOG%4B63%|~)q7qm9F zdk&nZd4KK)vmSb;JgYbTZ5t0!$Nk8v^wh?nVgvQfW4*sZU;aMRO6u}z?#Bbx2bDC( z@$(LIk8#fPx|1#|p!wdh-hJc#hZRwAQdcx_Pw)-X-pY4Y(S0qrYf3}BeGQ8(Y5o{@ z{wW9+WF$@C9Rd)500bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX?}p8`I{UuGL$(@ZbZoAqDC82(`~@B2)=YBI&VC!M(2ygd`I PGH>(LT{W4_Q#|t<_?ilv literal 0 HcmV?d00001 diff --git a/services/discord-rules/1.18.2/.gradle/file-system.probe b/services/discord-rules/1.18.2/.gradle/file-system.probe new file mode 100644 index 0000000000000000000000000000000000000000..6e0abffed3cb8f2c961724e4ca973bd678f37c8f GIT binary patch literal 8 PcmZQzV4T~d7tI9#2AKiA literal 0 HcmV?d00001 diff --git a/services/discord-rules/1.18.2/.gradle/vcs-1/gc.properties b/services/discord-rules/1.18.2/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/services/discord-rules/1.18.2/build.gradle b/services/discord-rules/1.18.2/build.gradle new file mode 100644 index 0000000..6c35202 --- /dev/null +++ b/services/discord-rules/1.18.2/build.gradle @@ -0,0 +1,50 @@ +buildscript { + repositories { + maven { url = 'https://maven.minecraftforge.net/' } + mavenCentral() + } + dependencies { + classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '6.0.+' + } +} + +apply plugin: 'net.minecraftforge.gradle' + +version = '1.0.5' +group = 'com.discordrules' +archivesBaseName = 'discordrules' + +java.toolchain.languageVersion = JavaLanguageVersion.of(17) + +minecraft { + mappings channel: 'official', version: '1.18.2' + runs { + server { + workingDirectory project.file('run') + property 'forge.logging.markers', 'REGISTRIES' + property 'forge.logging.console.level', 'debug' + mods { + discordrules { + source sourceSets.main + } + } + } + } +} + +dependencies { + minecraft 'net.minecraftforge:forge:1.18.2-40.2.4' +} + +jar { + manifest { + attributes([ + "Implementation-Title": "Discord Rules", + "Implementation-Version": project.version, + ]) + } +} + +tasks.withType(JavaCompile).configureEach { + options.encoding = 'UTF-8' +} diff --git a/services/discord-rules/1.18.2/gradle.properties b/services/discord-rules/1.18.2/gradle.properties new file mode 100644 index 0000000..29b2ac4 --- /dev/null +++ b/services/discord-rules/1.18.2/gradle.properties @@ -0,0 +1,2 @@ +org.gradle.jvmargs=-Xmx3G +org.gradle.daemon=false diff --git a/services/discord-rules/1.18.2/gradle/wrapper/gradle-wrapper.jar b/services/discord-rules/1.18.2/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..e6441136f3d4ba8a0da8d277868979cfbc8ad796 GIT binary patch literal 43453 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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
NnX)EH+Nua)3Y(c z&{(nX_ht=QbJ%DzAya}!&uNu!4V0xI)QE$SY__m)SAKcN0P(&JcoK*Lxr@P zY&P=}&B3*UWNlc|&$Oh{BEqwK2+N2U$4WB7Fd|aIal`FGANUa9E-O)!gV`((ZGCc$ zBJA|FFrlg~9OBp#f7aHodCe{6= zay$6vN~zj1ddMZ9gQ4p32(7wD?(dE>KA2;SOzXRmPBiBc6g`eOsy+pVcHu=;Yd8@{ zSGgXf@%sKKQz~;!J;|2fC@emm#^_rnO0esEn^QxXgJYd`#FPWOUU5b;9eMAF zZhfiZb|gk8aJIw*YLp4!*(=3l8Cp{(%p?ho22*vN9+5NLV0TTazNY$B5L6UKUrd$n zjbX%#m7&F#U?QNOBXkiiWB*_tk+H?N3`vg;1F-I+83{M2!8<^nydGr5XX}tC!10&e z7D36bLaB56WrjL&HiiMVtpff|K%|*{t*ltt^5ood{FOG0<>k&1h95qPio)2`eL${YAGIx(b4VN*~nKn6E~SIQUuRH zQ+5zP6jfnP$S0iJ@~t!Ai3o`X7biohli;E zT#yXyl{bojG@-TGZzpdVDXhbmF%F9+-^YSIv|MT1l3j zrxOFq>gd2%U}?6}8mIj?M zc077Zc9fq(-)4+gXv?Az26IO6eV`RAJz8e3)SC7~>%rlzDwySVx*q$ygTR5kW2ds- z!HBgcq0KON9*8Ff$X0wOq$`T7ml(@TF)VeoF}x1OttjuVHn3~sHrMB++}f7f9H%@f z=|kP_?#+fve@{0MlbkC9tyvQ_R?lRdRJ@$qcB(8*jyMyeME5ns6ypVI1Xm*Zr{DuS zZ!1)rQfa89c~;l~VkCiHI|PCBd`S*2RLNQM8!g9L6?n`^evQNEwfO@&JJRme+uopQX0%Jo zgd5G&#&{nX{o?TQwQvF1<^Cg3?2co;_06=~Hcb6~4XWpNFL!WU{+CK;>gH%|BLOh7@!hsa(>pNDAmpcuVO-?;Bic17R}^|6@8DahH)G z!EmhsfunLL|3b=M0MeK2vqZ|OqUqS8npxwge$w-4pFVXFq$_EKrZY?BuP@Az@(k`L z`ViQBSk`y+YwRT;&W| z2e3UfkCo^uTA4}Qmmtqs+nk#gNr2W4 zTH%hhErhB)pkXR{B!q5P3-OM+M;qu~f>}IjtF%>w{~K-0*jPVLl?Chz&zIdxp}bjx zStp&Iufr58FTQ36AHU)0+CmvaOpKF;W@sMTFpJ`j;3d)J_$tNQI^c<^1o<49Z(~K> z;EZTBaVT%14(bFw2ob@?JLQ2@(1pCdg3S%E4*dJ}dA*v}_a4_P(a`cHnBFJxNobAv zf&Zl-Yt*lhn-wjZsq<9v-IsXxAxMZ58C@e0!rzhJ+D@9^3~?~yllY^s$?&oNwyH!#~6x4gUrfxplCvK#!f z$viuszW>MFEcFL?>ux*((!L$;R?xc*myjRIjgnQX79@UPD$6Dz0jutM@7h_pq z0Zr)#O<^y_K6jfY^X%A-ip>P%3saX{!v;fxT-*0C_j4=UMH+Xth(XVkVGiiKE#f)q z%Jp=JT)uy{&}Iq2E*xr4YsJ5>w^=#-mRZ4vPXpI6q~1aFwi+lQcimO45V-JXP;>(Q zo={U`{=_JF`EQj87Wf}{Qy35s8r1*9Mxg({CvOt}?Vh9d&(}iI-quvs-rm~P;eRA@ zG5?1HO}puruc@S{YNAF3vmUc2B4!k*yi))<5BQmvd3tr}cIs#9)*AX>t`=~{f#Uz0 z0&Nk!7sSZwJe}=)-R^$0{yeS!V`Dh7w{w5rZ9ir!Z7Cd7dwZcK;BT#V0bzTt>;@Cl z#|#A!-IL6CZ@eHH!CG>OO8!%G8&8t4)Ro@}USB*k>oEUo0LsljsJ-%5Mo^MJF2I8- z#v7a5VdJ-Cd%(a+y6QwTmi+?f8Nxtm{g-+WGL>t;s#epv7ug>inqimZCVm!uT5Pf6 ziEgQt7^%xJf#!aPWbuC_3Nxfb&CFbQy!(8ANpkWLI4oSnH?Q3f?0k1t$3d+lkQs{~(>06l&v|MpcFsyAv zin6N!-;pggosR*vV=DO(#+}4ps|5$`udE%Kdmp?G7B#y%H`R|i8skKOd9Xzx8xgR$>Zo2R2Ytktq^w#ul4uicxW#{ zFjG_RNlBroV_n;a7U(KIpcp*{M~e~@>Q#Av90Jc5v%0c>egEdY4v3%|K1XvB{O_8G zkTWLC>OZKf;XguMH2-Pw{BKbFzaY;4v2seZV0>^7Q~d4O=AwaPhP3h|!hw5aqOtT@ z!SNz}$of**Bl3TK209@F=Tn1+mgZa8yh(Png%Zd6Mt}^NSjy)etQrF zme*llAW=N_8R*O~d2!apJnF%(JcN??=`$qs3Y+~xs>L9x`0^NIn!8mMRFA_tg`etw z3k{9JAjnl@ygIiJcNHTy02GMAvBVqEss&t2<2mnw!; zU`J)0>lWiqVqo|ex7!+@0i>B~BSU1A_0w#Ee+2pJx0BFiZ7RDHEvE*ptc9md(B{&+ zKE>TM)+Pd>HEmdJao7U@S>nL(qq*A)#eLOuIfAS@j`_sK0UEY6OAJJ-kOrHG zjHx`g!9j*_jRcJ%>CE9K2MVf?BUZKFHY?EpV6ai7sET-tqk=nDFh-(65rhjtlKEY% z@G&cQ<5BKatfdA1FKuB=i>CCC5(|9TMW%K~GbA4}80I5%B}(gck#Wlq@$nO3%@QP_ z8nvPkJFa|znk>V92cA!K1rKtr)skHEJD;k8P|R8RkCq1Rh^&}Evwa4BUJz2f!2=MH zo4j8Y$YL2313}H~F7@J7mh>u%556Hw0VUOz-Un@ZASCL)y8}4XXS`t1AC*^>PLwIc zUQok5PFS=*#)Z!3JZN&eZ6ZDP^-c@StY*t20JhCnbMxXf=LK#;`4KHEqMZ-Ly9KsS zI2VUJGY&PmdbM+iT)zek)#Qc#_i4uH43 z@T5SZBrhNCiK~~esjsO9!qBpaWK<`>!-`b71Y5ReXQ4AJU~T2Njri1CEp5oKw;Lnm)-Y@Z3sEY}XIgSy%xo=uek(kAAH5MsV$V3uTUsoTzxp_rF=tx zV07vlJNKtJhCu`b}*#m&5LV4TAE&%KtHViDAdv#c^x`J7bg z&N;#I2GkF@SIGht6p-V}`!F_~lCXjl1BdTLIjD2hH$J^YFN`7f{Q?OHPFEM$65^!u zNwkelo*5+$ZT|oQ%o%;rBX$+?xhvjb)SHgNHE_yP%wYkkvXHS{Bf$OiKJ5d1gI0j< zF6N}Aq=(WDo(J{e-uOecxPD>XZ@|u-tgTR<972`q8;&ZD!cep^@B5CaqFz|oU!iFj zU0;6fQX&~15E53EW&w1s9gQQ~Zk16X%6 zjG`j0yq}4deX2?Tr(03kg>C(!7a|b9qFI?jcE^Y>-VhudI@&LI6Qa}WQ>4H_!UVyF z((cm&!3gmq@;BD#5P~0;_2qgZhtJS|>WdtjY=q zLnHH~Fm!cxw|Z?Vw8*~?I$g#9j&uvgm7vPr#&iZgPP~v~BI4jOv;*OQ?jYJtzO<^y z7-#C={r7CO810!^s(MT!@@Vz_SVU)7VBi(e1%1rvS!?PTa}Uv`J!EP3s6Y!xUgM^8 z4f!fq<3Wer_#;u!5ECZ|^c1{|q_lh3m^9|nsMR1#Qm|?4Yp5~|er2?W^7~cl;_r4WSme_o68J9p03~Hc%X#VcX!xAu%1`R!dfGJCp zV*&m47>s^%Ib0~-2f$6oSgn3jg8m%UA;ArcdcRyM5;}|r;)?a^D*lel5C`V5G=c~k zy*w_&BfySOxE!(~PI$*dwG><+-%KT5p?whOUMA*k<9*gi#T{h3DAxzAPxN&Xws8o9Cp*`PA5>d9*Z-ynV# z9yY*1WR^D8|C%I@vo+d8r^pjJ$>eo|j>XiLWvTWLl(^;JHCsoPgem6PvegHb-OTf| zvTgsHSa;BkbG=(NgPO|CZu9gUCGr$8*EoH2_Z#^BnxF0yM~t`|9ws_xZ8X8iZYqh! zAh;HXJ)3P&)Q0(&F>!LN0g#bdbis-cQxyGn9Qgh`q+~49Fqd2epikEUw9caM%V6WgP)532RMRW}8gNS%V%Hx7apSz}tn@bQy!<=lbhmAH=FsMD?leawbnP5BWM0 z5{)@EEIYMu5;u)!+HQWhQ;D3_Cm_NADNeb-f56}<{41aYq8p4=93d=-=q0Yx#knGYfXVt z+kMxlus}t2T5FEyCN~!}90O_X@@PQpuy;kuGz@bWft%diBTx?d)_xWd_-(!LmVrh**oKg!1CNF&LX4{*j|) zIvjCR0I2UUuuEXh<9}oT_zT#jOrJAHNLFT~Ilh9hGJPI1<5`C-WA{tUYlyMeoy!+U zhA#=p!u1R7DNg9u4|QfED-2TuKI}>p#2P9--z;Bbf4Op*;Q9LCbO&aL2i<0O$ByoI z!9;Ght733FC>Pz>$_mw(F`zU?`m@>gE`9_p*=7o=7av`-&ifU(^)UU`Kg3Kw`h9-1 z6`e6+im=|m2v`pN(2dE%%n8YyQz;#3Q-|x`91z?gj68cMrHl}C25|6(_dIGk*8cA3 zRHB|Nwv{@sP4W+YZM)VKI>RlB`n=Oj~Rzx~M+Khz$N$45rLn6k1nvvD^&HtsMA4`s=MmuOJID@$s8Ph4E zAmSV^+s-z8cfv~Yd(40Sh4JG#F~aB>WFoX7ykaOr3JaJ&Lb49=B8Vk-SQT9%7TYhv z?-Pprt{|=Y5ZQ1?od|A<_IJU93|l4oAfBm?3-wk{O<8ea+`}u%(kub(LFo2zFtd?4 zwpN|2mBNywv+d^y_8#<$r>*5+$wRTCygFLcrwT(qc^n&@9r+}Kd_u@Ithz(6Qb4}A zWo_HdBj#V$VE#l6pD0a=NfB0l^6W^g`vm^sta>Tly?$E&{F?TTX~DsKF~poFfmN%2 z4x`Dc{u{Lkqz&y!33;X}weD}&;7p>xiI&ZUb1H9iD25a(gI|`|;G^NwJPv=1S5e)j z;U;`?n}jnY6rA{V^ zxTd{bK)Gi^odL3l989DQlN+Zs39Xe&otGeY(b5>rlIqfc7Ap4}EC?j<{M=hlH{1+d zw|c}}yx88_xQr`{98Z!d^FNH77=u(p-L{W6RvIn40f-BldeF-YD>p6#)(Qzf)lfZj z?3wAMtPPp>vMehkT`3gToPd%|D8~4`5WK{`#+}{L{jRUMt zrFz+O$C7y8$M&E4@+p+oV5c%uYzbqd2Y%SSgYy#xh4G3hQv>V*BnuKQhBa#=oZB~w{azUB+q%bRe_R^ z>fHBilnRTUfaJ201czL8^~Ix#+qOHSO)A|xWLqOxB$dT2W~)e-r9;bm=;p;RjYahB z*1hegN(VKK+ztr~h1}YP@6cfj{e#|sS`;3tJhIJK=tVJ-*h-5y9n*&cYCSdg#EHE# zSIx=r#qOaLJoVVf6v;(okg6?*L_55atl^W(gm^yjR?$GplNP>BZsBYEf_>wM0Lc;T zhf&gpzOWNxS>m+mN92N0{;4uw`P+9^*|-1~$uXpggj4- z^SFc4`uzj2OwdEVT@}Q`(^EcQ_5(ZtXTql*yGzdS&vrS_w>~~ra|Nb5abwf}Y!uq6R5f&6g2ge~2p(%c< z@O)cz%%rr4*cRJ5f`n@lvHNk@lE1a*96Kw6lJ~B-XfJW%?&-y?;E&?1AacU@`N`!O z6}V>8^%RZ7SQnZ-z$(jsX`amu*5Fj8g!3RTRwK^`2_QHe;_2y_n|6gSaGyPmI#kA0sYV<_qOZc#-2BO%hX)f$s-Z3xlI!ub z^;3ru11DA`4heAu%}HIXo&ctujzE2!6DIGE{?Zs>2}J+p&C$rc7gJC35gxhflorvsb%sGOxpuWhF)dL_&7&Z99=5M0b~Qa;Mo!j&Ti_kXW!86N%n= zSC@6Lw>UQ__F&+&Rzv?gscwAz8IP!n63>SP)^62(HK98nGjLY2*e^OwOq`3O|C92? z;TVhZ2SK%9AGW4ZavTB9?)mUbOoF`V7S=XM;#3EUpR+^oHtdV!GK^nXzCu>tpR|89 zdD{fnvCaN^^LL%amZ^}-E+214g&^56rpdc@yv0b<3}Ys?)f|fXN4oHf$six)-@<;W&&_kj z-B}M5U*1sb4)77aR=@%I?|Wkn-QJVuA96an25;~!gq(g1@O-5VGo7y&E_srxL6ZfS z*R%$gR}dyONgju*D&?geiSj7SZ@ftyA|}(*Y4KbvU!YLsi1EDQQCnb+-cM=K1io78o!v*);o<XwjaQH%)uIP&Zm?)Nfbfn;jIr z)d#!$gOe3QHp}2NBak@yYv3m(CPKkwI|{;d=gi552u?xj9ObCU^DJFQp4t4e1tPzM zvsRIGZ6VF+{6PvqsplMZWhz10YwS={?`~O0Ec$`-!klNUYtzWA^f9m7tkEzCy<_nS z=&<(awFeZvt51>@o_~>PLs05CY)$;}Oo$VDO)?l-{CS1Co=nxjqben*O1BR>#9`0^ zkwk^k-wcLCLGh|XLjdWv0_Hg54B&OzCE^3NCP}~OajK-LuRW53CkV~Su0U>zN%yQP zH8UH#W5P3-!ToO-2k&)}nFe`t+mdqCxxAHgcifup^gKpMObbox9LFK;LP3}0dP-UW z?Zo*^nrQ6*$FtZ(>kLCc2LY*|{!dUn$^RW~m9leoF|@Jy|M5p-G~j%+P0_#orRKf8 zvuu5<*XO!B?1E}-*SY~MOa$6c%2cM+xa8}_8x*aVn~57v&W(0mqN1W`5a7*VN{SUH zXz98DDyCnX2EPl-`Lesf`=AQT%YSDb`$%;(jUTrNen$NPJrlpPDP}prI>Ml!r6bCT;mjsg@X^#&<}CGf0JtR{Ecwd&)2zuhr#nqdgHj+g2n}GK9CHuwO zk>oZxy{vcOL)$8-}L^iVfJHAGfwN$prHjYV0ju}8%jWquw>}_W6j~m<}Jf!G?~r5&Rx)!9JNX!ts#SGe2HzobV5); zpj@&`cNcO&q+%*<%D7za|?m5qlmFK$=MJ_iv{aRs+BGVrs)98BlN^nMr{V_fcl_;jkzRju+c-y?gqBC_@J0dFLq-D9@VN&-`R9U;nv$Hg?>$oe4N&Ht$V_(JR3TG^! zzJsbQbi zFE6-{#9{G{+Z}ww!ycl*7rRdmU#_&|DqPfX3CR1I{Kk;bHwF6jh0opI`UV2W{*|nn zf_Y@%wW6APb&9RrbEN=PQRBEpM(N1w`81s=(xQj6 z-eO0k9=Al|>Ej|Mw&G`%q8e$2xVz1v4DXAi8G};R$y)ww638Y=9y$ZYFDM$}vzusg zUf+~BPX>(SjA|tgaFZr_e0{)+z9i6G#lgt=F_n$d=beAt0Sa0a7>z-?vcjl3e+W}+ z1&9=|vC=$co}-Zh*%3588G?v&U7%N1Qf-wNWJ)(v`iO5KHSkC5&g7CrKu8V}uQGcfcz zmBz#Lbqwqy#Z~UzHgOQ;Q-rPxrRNvl(&u6ts4~0=KkeS;zqURz%!-ERppmd%0v>iRlEf+H$yl{_8TMJzo0 z>n)`On|7=WQdsqhXI?#V{>+~}qt-cQbokEbgwV3QvSP7&hK4R{Z{aGHVS3;+h{|Hz z6$Js}_AJr383c_+6sNR|$qu6dqHXQTc6?(XWPCVZv=)D#6_;D_8P-=zOGEN5&?~8S zl5jQ?NL$c%O)*bOohdNwGIKM#jSAC?BVY={@A#c9GmX0=T(0G}xs`-%f3r=m6-cpK z!%waekyAvm9C3%>sixdZj+I(wQlbB4wv9xKI*T13DYG^T%}zZYJ|0$Oj^YtY+d$V$ zAVudSc-)FMl|54n=N{BnZTM|!>=bhaja?o7s+v1*U$!v!qQ%`T-6fBvmdPbVmro&d zk07TOp*KuxRUSTLRrBj{mjsnF8`d}rMViY8j`jo~Hp$fkv9F_g(jUo#Arp;Xw0M$~ zRIN!B22~$kx;QYmOkos@%|5k)!QypDMVe}1M9tZfkpXKGOxvKXB!=lo`p?|R1l=tA zp(1}c6T3Fwj_CPJwVsYtgeRKg?9?}%oRq0F+r+kdB=bFUdVDRPa;E~~>2$w}>O>v=?|e>#(-Lyx?nbg=ckJ#5U6;RT zNvHhXk$P}m9wSvFyU3}=7!y?Y z=fg$PbV8d7g25&-jOcs{%}wTDKm>!Vk);&rr;O1nvO0VrU&Q?TtYVU=ir`te8SLlS zKSNmV=+vF|ATGg`4$N1uS|n??f}C_4Sz!f|4Ly8#yTW-FBfvS48Tef|-46C(wEO_%pPhUC5$-~Y?!0vFZ^Gu`x=m7X99_?C-`|h zfmMM&Y@zdfitA@KPw4Mc(YHcY1)3*1xvW9V-r4n-9ZuBpFcf{yz+SR{ zo$ZSU_|fgwF~aakGr(9Be`~A|3)B=9`$M-TWKipq-NqRDRQc}ABo*s_5kV%doIX7LRLRau_gd@Rd_aLFXGSU+U?uAqh z8qusWWcvgQ&wu{|sRXmv?sl=xc<$6AR$+cl& zFNh5q1~kffG{3lDUdvEZu5c(aAG~+64FxdlfwY^*;JSS|m~CJusvi-!$XR`6@XtY2 znDHSz7}_Bx7zGq-^5{stTRy|I@N=>*y$zz>m^}^{d&~h;0kYiq8<^Wq7Dz0w31ShO^~LUfW6rfitR0(=3;Uue`Y%y@ex#eKPOW zO~V?)M#AeHB2kovn1v=n^D?2{2jhIQd9t|_Q+c|ZFaWt+r&#yrOu-!4pXAJuxM+Cx z*H&>eZ0v8Y`t}8{TV6smOj=__gFC=eah)mZt9gwz>>W$!>b3O;Rm^Ig*POZP8Rl0f zT~o=Nu1J|lO>}xX&#P58%Yl z83`HRs5#32Qm9mdCrMlV|NKNC+Z~ z9OB8xk5HJ>gBLi+m@(pvpw)1(OaVJKs*$Ou#@Knd#bk+V@y;YXT?)4eP9E5{J%KGtYinNYJUH9PU3A}66c>Xn zZ{Bn0<;8$WCOAL$^NqTjwM?5d=RHgw3!72WRo0c;+houoUA@HWLZM;^U$&sycWrFd zE7ekt9;kb0`lps{>R(}YnXlyGY}5pPd9zBpgXeJTY_jwaJGSJQC#-KJqmh-;ad&F- z-Y)E>!&`Rz!HtCz>%yOJ|v(u7P*I$jqEY3}(Z-orn4 zlI?CYKNl`6I){#2P1h)y(6?i;^z`N3bxTV%wNvQW+eu|x=kbj~s8rhCR*0H=iGkSj zk23lr9kr|p7#qKL=UjgO`@UnvzU)`&fI>1Qs7ubq{@+lK{hH* zvl6eSb9%yngRn^T<;jG1SVa)eA>T^XX=yUS@NCKpk?ovCW1D@!=@kn;l_BrG;hOTC z6K&H{<8K#dI(A+zw-MWxS+~{g$tI7|SfP$EYKxA}LlVO^sT#Oby^grkdZ^^lA}uEF zBSj$weBJG{+Bh@Yffzsw=HyChS(dtLE3i*}Zj@~!_T-Ay7z=B)+*~3|?w`Zd)Co2t zC&4DyB!o&YgSw+fJn6`sn$e)29`kUwAc+1MND7YjV%lO;H2}fNy>hD#=gT ze+-aFNpyKIoXY~Vq-}OWPBe?Rfu^{ps8>Xy%42r@RV#*QV~P83jdlFNgkPN=T|Kt7 zV*M`Rh*30&AWlb$;ae130e@}Tqi3zx2^JQHpM>j$6x`#{mu%tZlwx9Gj@Hc92IuY* zarmT|*d0E~vt6<+r?W^UW0&#U&)8B6+1+;k^2|FWBRP9?C4Rk)HAh&=AS8FS|NQaZ z2j!iZ)nbEyg4ZTp-zHwVlfLC~tXIrv(xrP8PAtR{*c;T24ycA-;auWsya-!kF~CWZ zw_uZ|%urXgUbc@x=L=_g@QJ@m#5beS@6W195Hn7>_}z@Xt{DIEA`A&V82bc^#!q8$ zFh?z_Vn|ozJ;NPd^5uu(9tspo8t%&-U9Ckay-s@DnM*R5rtu|4)~e)`z0P-sy?)kc zs_k&J@0&0!q4~%cKL)2l;N*T&0;mqX5T{Qy60%JtKTQZ-xb%KOcgqwJmb%MOOKk7N zgq})R_6**{8A|6H?fO+2`#QU)p$Ei2&nbj6TpLSIT^D$|`TcSeh+)}VMb}LmvZ{O| ze*1IdCt3+yhdYVxcM)Q_V0bIXLgr6~%JS<<&dxIgfL=Vnx4YHuU@I34JXA|+$_S3~ zy~X#gO_X!cSs^XM{yzDGNM>?v(+sF#<0;AH^YrE8smx<36bUsHbN#y57K8WEu(`qHvQ6cAZPo=J5C(lSmUCZ57Rj6cx!e^rfaI5%w}unz}4 zoX=nt)FVNV%QDJH`o!u9olLD4O5fl)xp+#RloZlaA92o3x4->?rB4`gS$;WO{R;Z3>cG3IgFX2EA?PK^M}@%1%A;?f6}s&CV$cIyEr#q5;yHdNZ9h{| z-=dX+a5elJoDo?Eq&Og!nN6A)5yYpnGEp}?=!C-V)(*~z-+?kY1Q7qs#Rsy%hu_60rdbB+QQNr?S1 z?;xtjUv|*E3}HmuNyB9aFL5H~3Ho0UsmuMZELp1a#CA1g`P{-mT?BchuLEtK}!QZ=3AWakRu~?f9V~3F;TV`5%9Pcs_$gq&CcU}r8gOO zC2&SWPsSG{&o-LIGTBqp6SLQZPvYKp$$7L4WRRZ0BR$Kf0I0SCFkqveCp@f)o8W)! z$%7D1R`&j7W9Q9CGus_)b%+B#J2G;l*FLz#s$hw{BHS~WNLODV#(!u_2Pe&tMsq={ zdm7>_WecWF#D=?eMjLj=-_z`aHMZ=3_-&E8;ibPmM}61i6J3is*=dKf%HC>=xbj4$ zS|Q-hWQ8T5mWde6h@;mS+?k=89?1FU<%qH9B(l&O>k|u_aD|DY*@~(`_pb|B#rJ&g zR0(~(68fpUPz6TdS@4JT5MOPrqDh5_H(eX1$P2SQrkvN8sTxwV>l0)Qq z0pzTuvtEAKRDkKGhhv^jk%|HQ1DdF%5oKq5BS>szk-CIke{%js?~%@$uaN3^Uz6Wf z_iyx{bZ(;9y4X&>LPV=L=d+A}7I4GkK0c1Xts{rrW1Q7apHf-))`BgC^0^F(>At1* za@e7{lq%yAkn*NH8Q1{@{lKhRg*^TfGvv!Sn*ed*x@6>M%aaqySxR|oNadYt1mpUZ z6H(rupHYf&Z z29$5g#|0MX#aR6TZ$@eGxxABRKakDYtD%5BmKp;HbG_ZbT+=81E&=XRk6m_3t9PvD zr5Cqy(v?gHcYvYvXkNH@S#Po~q(_7MOuCAB8G$a9BC##gw^5mW16cML=T=ERL7wsk zzNEayTG?mtB=x*wc@ifBCJ|irFVMOvH)AFRW8WE~U()QT=HBCe@s$dA9O!@`zAAT) zaOZ7l6vyR+Nk_OOF!ZlZmjoImKh)dxFbbR~z(cMhfeX1l7S_`;h|v3gI}n9$sSQ>+3@AFAy9=B_y$)q;Wdl|C-X|VV3w8 z2S#>|5dGA8^9%Bu&fhmVRrTX>Z7{~3V&0UpJNEl0=N32euvDGCJ>#6dUSi&PxFW*s zS`}TB>?}H(T2lxBJ!V#2taV;q%zd6fOr=SGHpoSG*4PDaiG0pdb5`jelVipkEk%FV zThLc@Hc_AL1#D&T4D=w@UezYNJ%0=f3iVRuVL5H?eeZM}4W*bomebEU@e2d`M<~uW zf#Bugwf`VezG|^Qbt6R_=U0}|=k;mIIakz99*>FrsQR{0aQRP6ko?5<7bkDN8evZ& zB@_KqQG?ErKL=1*ZM9_5?Pq%lcS4uLSzN(Mr5=t6xHLS~Ym`UgM@D&VNu8e?_=nSFtF$u@hpPSmI4Vo_t&v?>$~K4y(O~Rb*(MFy_igM7 z*~yYUyR6yQgzWnWMUgDov!!g=lInM+=lOmOk4L`O?{i&qxy&D*_qorRbDwj6?)!ef z#JLd7F6Z2I$S0iYI={rZNk*<{HtIl^mx=h>Cim*04K4+Z4IJtd*-)%6XV2(MCscPiw_a+y*?BKbTS@BZ3AUao^%Zi#PhoY9Vib4N>SE%4>=Jco0v zH_Miey{E;FkdlZSq)e<{`+S3W=*ttvD#hB8w=|2aV*D=yOV}(&p%0LbEWH$&@$X3x~CiF-?ejQ*N+-M zc8zT@3iwkdRT2t(XS`d7`tJQAjRmKAhiw{WOqpuvFp`i@Q@!KMhwKgsA}%@sw8Xo5Y=F zhRJZg)O4uqNWj?V&&vth*H#je6T}}p_<>!Dr#89q@uSjWv~JuW(>FqoJ5^ho0%K?E z9?x_Q;kmcsQ@5=}z@tdljMSt9-Z3xn$k)kEjK|qXS>EfuDmu(Z8|(W?gY6-l z@R_#M8=vxKMAoi&PwnaIYw2COJM@atcgfr=zK1bvjW?9B`-+Voe$Q+H$j!1$Tjn+* z&LY<%)L@;zhnJlB^Og6I&BOR-m?{IW;tyYC%FZ!&Z>kGjHJ6cqM-F z&19n+e1=9AH1VrVeHrIzqlC`w9=*zfmrerF?JMzO&|Mmv;!4DKc(sp+jy^Dx?(8>1 zH&yS_4yL7m&GWX~mdfgH*AB4{CKo;+egw=PrvkTaoBU+P-4u?E|&!c z)DKc;>$$B6u*Zr1SjUh2)FeuWLWHl5TH(UHWkf zLs>7px!c5n;rbe^lO@qlYLzlDVp(z?6rPZel=YB)Uv&n!2{+Mb$-vQl=xKw( zve&>xYx+jW_NJh!FV||r?;hdP*jOXYcLCp>DOtJ?2S^)DkM{{Eb zS$!L$e_o0(^}n3tA1R3-$SNvgBq;DOEo}fNc|tB%%#g4RA3{|euq)p+xd3I8^4E&m zFrD%}nvG^HUAIKe9_{tXB;tl|G<%>yk6R;8L2)KUJw4yHJXUOPM>(-+jxq4R;z8H#>rnJy*)8N+$wA$^F zN+H*3t)eFEgxLw+Nw3};4WV$qj&_D`%ADV2%r zJCPCo%{=z7;`F98(us5JnT(G@sKTZ^;2FVitXyLe-S5(hV&Ium+1pIUB(CZ#h|g)u zSLJJ<@HgrDiA-}V_6B^x1>c9B6%~847JkQ!^KLZ2skm;q*edo;UA)~?SghG8;QbHh z_6M;ouo_1rq9=x$<`Y@EA{C%6-pEV}B(1#sDoe_e1s3^Y>n#1Sw;N|}8D|s|VPd+g z-_$QhCz`vLxxrVMx3ape1xu3*wjx=yKSlM~nFgkNWb4?DDr*!?U)L_VeffF<+!j|b zZ$Wn2$TDv3C3V@BHpSgv3JUif8%hk%OsGZ=OxH@8&4`bbf$`aAMchl^qN>Eyu3JH} z9-S!x8-s4fE=lad%Pkp8hAs~u?|uRnL48O|;*DEU! zuS0{cpk%1E0nc__2%;apFsTm0bKtd&A0~S3Cj^?72-*Owk3V!ZG*PswDfS~}2<8le z5+W^`Y(&R)yVF*tU_s!XMcJS`;(Tr`J0%>p=Z&InR%D3@KEzzI+-2)HK zuoNZ&o=wUC&+*?ofPb0a(E6(<2Amd6%uSu_^-<1?hsxs~0K5^f(LsGqgEF^+0_H=uNk9S0bb!|O8d?m5gQjUKevPaO+*VfSn^2892K~%crWM8+6 z25@V?Y@J<9w%@NXh-2!}SK_(X)O4AM1-WTg>sj1{lj5@=q&dxE^9xng1_z9w9DK>| z6Iybcd0e zyi;Ew!KBRIfGPGytQ6}z}MeXCfLY0?9%RiyagSp_D1?N&c{ zyo>VbJ4Gy`@Fv+5cKgUgs~na$>BV{*em7PU3%lloy_aEovR+J7TfQKh8BJXyL6|P8un-Jnq(ghd!_HEOh$zlv2$~y3krgeH;9zC}V3f`uDtW(%mT#944DQa~^8ZI+zAUu4U(j0YcDfKR$bK#gvn_{JZ>|gZ5+)u?T$w7Q%F^;!Wk?G z(le7r!ufT*cxS}PR6hIVtXa)i`d$-_1KkyBU>qmgz-=T};uxx&sKgv48akIWQ89F{ z0XiY?WM^~;|T8zBOr zs#zuOONzH?svv*jokd5SK8wG>+yMC)LYL|vLqm^PMHcT=`}V$=nIRHe2?h)8WQa6O zPAU}d`1y(>kZiP~Gr=mtJLMu`i<2CspL|q2DqAgAD^7*$xzM`PU4^ga`ilE134XBQ z99P(LhHU@7qvl9Yzg$M`+dlS=x^(m-_3t|h>S}E0bcFMn=C|KamQ)=w2^e)35p`zY zRV8X?d;s^>Cof2SPR&nP3E+-LCkS0J$H!eh8~k0qo$}00b=7!H_I2O+Ro@3O$nPdm ztmbOO^B+IHzQ5w>@@@J4cKw5&^_w6s!s=H%&byAbUtczPQ7}wfTqxxtQNfn*u73Qw zGuWsrky_ajPx-5`R<)6xHf>C(oqGf_Fw|-U*GfS?xLML$kv;h_pZ@Kk$y0X(S+K80 z6^|z)*`5VUkawg}=z`S;VhZhxyDfrE0$(PMurAxl~<>lfZa>JZ288ULK7D` zl9|#L^JL}Y$j*j`0-K6kH#?bRmg#5L3iB4Z)%iF@SqT+Lp|{i`m%R-|ZE94Np7Pa5 zCqC^V3}B(FR340pmF*qaa}M}+h6}mqE~7Sh!9bDv9YRT|>vBNAqv09zXHMlcuhKD| zcjjA(b*XCIwJ33?CB!+;{)vX@9xns_b-VO{i0y?}{!sdXj1GM8+$#v>W7nw;+O_9B z_{4L;C6ol?(?W0<6taGEn1^uG=?Q3i29sE`RfYCaV$3DKc_;?HsL?D_fSYg}SuO5U zOB_f4^vZ_x%o`5|C@9C5+o=mFy@au{s)sKw!UgC&L35aH(sgDxRE2De%(%OT=VUdN ziVLEmdOvJ&5*tCMKRyXctCwQu_RH%;m*$YK&m;jtbdH#Ak~13T1^f89tn`A%QEHWs~jnY~E}p_Z$XC z=?YXLCkzVSK+Id`xZYTegb@W8_baLt-Fq`Tv|=)JPbFsKRm)4UW;yT+J`<)%#ue9DPOkje)YF2fsCilK9MIIK>p*`fkoD5nGfmLwt)!KOT+> zOFq*VZktDDyM3P5UOg`~XL#cbzC}eL%qMB=Q5$d89MKuN#$6|4gx_Jt0Gfn8w&q}%lq4QU%6#jT*MRT% zrLz~C8FYKHawn-EQWN1B75O&quS+Z81(zN)G>~vN8VwC+e+y(`>HcxC{MrJ;H1Z4k zZWuv$w_F0-Ub%MVcpIc){4PGL^I7M{>;hS?;eH!;gmcOE66z3;Z1Phqo(t zVP(Hg6q#0gIKgsg7L7WE!{Y#1nI(45tx2{$34dDd#!Z0NIyrm)HOn5W#7;f4pQci# zDW!FI(g4e668kI9{2+mLwB+=#9bfqgX%!B34V-$wwSN(_cm*^{y0jQtv*4}eO^sOV z*9xoNvX)c9isB}Tgx&ZRjp3kwhTVK?r9;n!x>^XYT z@Q^7zp{rkIs{2mUSE^2!Gf6$6;j~&4=-0cSJJDizZp6LTe8b45;{AKM%v99}{{FfC zz709%u0mC=1KXTo(=TqmZQ;c?$M3z(!xah>aywrj40sc2y3rKFw4jCq+Y+u=CH@_V zxz|qeTwa>+<|H%8Dz5u>ZI5MmjTFwXS-Fv!TDd*`>3{krWoNVx$<133`(ftS?ZPyY z&4@ah^3^i`vL$BZa>O|Nt?ucewzsF)0zX3qmM^|waXr=T0pfIb0*$AwU=?Ipl|1Y; z*Pk6{C-p4MY;j@IJ|DW>QHZQJcp;Z~?8(Q+Kk3^0qJ}SCk^*n4W zu9ZFwLHUx-$6xvaQ)SUQcYd6fF8&x)V`1bIuX@>{mE$b|Yd(qomn3;bPwnDUc0F=; zh*6_((%bqAYQWQ~odER?h>1mkL4kpb3s7`0m@rDKGU*oyF)$j~Ffd4fXV$?`f~rHf zB%Y)@5SXZvfwm10RY5X?TEo)PK_`L6qgBp=#>fO49$D zDq8Ozj0q6213tV5Qq=;fZ0$|KroY{Dz=l@lU^J)?Ko@ti20TRplXzphBi>XGx4bou zEWrkNjz0t5j!_ke{g5I#PUlEU$Km8g8TE|XK=MkU@PT4T><2OVamoK;wJ}3X0L$vX zgd7gNa359*nc)R-0!`2X@FOTB`+oETOPc=ubp5R)VQgY+5BTZZJ2?9QwnO=dnulIUF3gFn;BODC2)65)HeVd%t86sL7Rv^Y+nbn+&l z6BAJY(ETvwI)Ts$aiE8rht4KD*qNyE{8{x6R|%akbTBzw;2+6Echkt+W+`u^XX z_z&x%n '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# 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 + if ! command -v java >/dev/null 2>&1 + then + 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 +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + 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 + + +# 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"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# 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/services/discord-rules/1.18.2/gradlew.bat b/services/discord-rules/1.18.2/gradlew.bat new file mode 100644 index 0000000..7101f8e --- /dev/null +++ b/services/discord-rules/1.18.2/gradlew.bat @@ -0,0 +1,92 @@ +@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=. +@rem This is normally unused +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% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +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% equ 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! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/services/discord-rules/1.18.2/settings.gradle b/services/discord-rules/1.18.2/settings.gradle new file mode 100644 index 0000000..428f51d --- /dev/null +++ b/services/discord-rules/1.18.2/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + maven { url = 'https://maven.minecraftforge.net/' } + } +} + +rootProject.name = 'discordrules' diff --git a/services/discord-rules/1.18.2/src/main/java/com/discordrules/CooldownManager.java b/services/discord-rules/1.18.2/src/main/java/com/discordrules/CooldownManager.java new file mode 100644 index 0000000..1837c64 --- /dev/null +++ b/services/discord-rules/1.18.2/src/main/java/com/discordrules/CooldownManager.java @@ -0,0 +1,32 @@ +package com.discordrules; + +import net.minecraft.Util; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.server.level.ServerPlayer; +import java.time.Duration; +import java.time.Instant; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +public class CooldownManager { + private static final ConcurrentHashMap COOLDOWNS = new ConcurrentHashMap<>(); + + public static boolean checkAndUpdateCooldown(ServerPlayer player) { + UUID playerId = player.getUUID(); + Instant now = Instant.now(); + int cooldownSeconds = ServerRulesConfig.COOLDOWN_SECONDS.get(); + Instant lastUsed = COOLDOWNS.get(playerId); + if (lastUsed != null) { + long secondsSinceLastUse = Duration.between(lastUsed, now).getSeconds(); + if (secondsSinceLastUse < cooldownSeconds) { + long remaining = cooldownSeconds - secondsSinceLastUse; + player.sendMessage(new TextComponent("\u00a7cPlease wait " + remaining + " seconds before checking the rules again."), Util.NIL_UUID); + return false; + } + } + COOLDOWNS.put(playerId, now); + return true; + } + + public static void removePlayer(UUID playerId) { COOLDOWNS.remove(playerId); } +} diff --git a/services/discord-rules/1.18.2/src/main/java/com/discordrules/DiscordFetcher.java b/services/discord-rules/1.18.2/src/main/java/com/discordrules/DiscordFetcher.java new file mode 100644 index 0000000..9f35c3a --- /dev/null +++ b/services/discord-rules/1.18.2/src/main/java/com/discordrules/DiscordFetcher.java @@ -0,0 +1,45 @@ +package com.discordrules; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.Duration; +import java.util.concurrent.CompletableFuture; + +public class DiscordFetcher { + private static final Logger LOGGER = LoggerFactory.getLogger(DiscordFetcher.class); + private static final HttpClient CLIENT = HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(10)).build(); + + public static CompletableFuture fetchRulesAsync() { + if (!ServerRulesConfig.isMessageIdValid()) { + LOGGER.error("Invalid Discord Message ID in config."); + return CompletableFuture.completedFuture(null); + } + String token = ServerRulesConfig.BOT_TOKEN.get(); + String channelId = ServerRulesConfig.CHANNEL_ID.get(); + String messageId = ServerRulesConfig.MESSAGE_ID.get(); + URI uri = URI.create("https://discord.com/api/v10/channels/" + channelId + "/messages/" + messageId); + HttpRequest request = HttpRequest.newBuilder().uri(uri) + .header("Authorization", "Bot " + token) + .header("Accept", "application/json").GET().build(); + return CLIENT.sendAsync(request, HttpResponse.BodyHandlers.ofString()) + .thenApply(response -> { + if (response.statusCode() == 200) { + JsonObject json = JsonParser.parseString(response.body()).getAsJsonObject(); + return json.get("content").getAsString(); + } else { + LOGGER.error("Discord API returned status: {}", response.statusCode()); + return null; + } + }) + .exceptionally(ex -> { + LOGGER.error("Network error while fetching Discord rules", ex); + return null; + }); + } +} diff --git a/services/discord-rules/1.18.2/src/main/java/com/discordrules/DiscordFormatter.java b/services/discord-rules/1.18.2/src/main/java/com/discordrules/DiscordFormatter.java new file mode 100644 index 0000000..34913b9 --- /dev/null +++ b/services/discord-rules/1.18.2/src/main/java/com/discordrules/DiscordFormatter.java @@ -0,0 +1,45 @@ +package com.discordrules; + +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TextComponent; + +public class DiscordFormatter { + public static MutableComponent formatRules(String rawDiscordText) { + String processedText = ServerRulesConfig.STRIP_EMOJIS.get() + ? stripEmojis(rawDiscordText) : rawDiscordText; + ChatFormatting headerColor = parseColor(ServerRulesConfig.HEADER_COLOR.get(), ChatFormatting.GOLD); + ChatFormatting bodyColor = parseColor(ServerRulesConfig.BODY_COLOR.get(), ChatFormatting.YELLOW); + MutableComponent rootComponent = new TextComponent(""); + String[] lines = processedText.split("\n"); + for (String line : lines) { + MutableComponent lineComponent; + if (line.startsWith("**") && line.endsWith("**")) { + String cleanLine = line.replace("**", ""); + lineComponent = new TextComponent(cleanLine); + lineComponent.withStyle(headerColor, ChatFormatting.BOLD); + } else if (line.trim().startsWith("-") || line.trim().startsWith("\u2022")) { + lineComponent = new TextComponent(" " + line.trim()); + lineComponent.withStyle(bodyColor); + } else { + lineComponent = new TextComponent(line); + lineComponent.withStyle(bodyColor); + } + rootComponent.append(lineComponent).append(new TextComponent("\n")); + } + return rootComponent; + } + + private static String stripEmojis(String text) { + if (text == null) return ""; + return text.replaceAll("[\\x{1F300}-\\x{1F9FF}]", ""); + } + + private static ChatFormatting parseColor(String name, ChatFormatting fallback) { + try { + return ChatFormatting.valueOf(name.toUpperCase()); + } catch (IllegalArgumentException e) { + return fallback; + } + } +} diff --git a/services/discord-rules/1.18.2/src/main/java/com/discordrules/RulesCache.java b/services/discord-rules/1.18.2/src/main/java/com/discordrules/RulesCache.java new file mode 100644 index 0000000..6ffab0b --- /dev/null +++ b/services/discord-rules/1.18.2/src/main/java/com/discordrules/RulesCache.java @@ -0,0 +1,26 @@ +package com.discordrules; + +import java.time.Instant; + +public class RulesCache { + private static String cachedRules = null; + private static Instant lastFetchTime = Instant.MIN; + private static final String FALLBACK_RULES = + "Server Rules\n1. Be respectful to all players.\n2. No griefing or cheating.\n3. Follow staff instructions.\nPlease check Discord for the full rules list."; + + public static boolean isCacheValid() { + if (cachedRules == null) return false; + long cacheMinutes = ServerRulesConfig.CACHE_MINUTES.get(); + return Instant.now().isBefore(lastFetchTime.plusSeconds(cacheMinutes * 60)); + } + + public static void updateCache(String newRules) { + if (newRules != null && !newRules.trim().isEmpty()) { + cachedRules = newRules; + lastFetchTime = Instant.now(); + } + } + + public static String getRules() { return cachedRules != null ? cachedRules : FALLBACK_RULES; } + public static void invalidate() { cachedRules = null; lastFetchTime = Instant.MIN; } +} diff --git a/services/discord-rules/1.18.2/src/main/java/com/discordrules/RulesCommand.java b/services/discord-rules/1.18.2/src/main/java/com/discordrules/RulesCommand.java new file mode 100644 index 0000000..cc5789b --- /dev/null +++ b/services/discord-rules/1.18.2/src/main/java/com/discordrules/RulesCommand.java @@ -0,0 +1,62 @@ +package com.discordrules; + +import com.mojang.brigadier.CommandDispatcher; +import net.minecraft.Util; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.server.level.ServerPlayer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class RulesCommand { + private static final Logger LOGGER = LoggerFactory.getLogger(RulesCommand.class); + + public static void register(CommandDispatcher dispatcher) { + dispatcher.register(Commands.literal("rules").executes(context -> { + CommandSourceStack source = context.getSource(); + LOGGER.info("[DIAG] /rules invoked. isPlayer={}, token length={}, channel={}, messageId={}, isValid={}", + source.getEntity() instanceof ServerPlayer, + ServerRulesConfig.BOT_TOKEN.get().length(), + ServerRulesConfig.CHANNEL_ID.get(), + ServerRulesConfig.MESSAGE_ID.get(), + ServerRulesConfig.isMessageIdValid()); + if (source.getEntity() == null || !(source.getEntity() instanceof ServerPlayer)) { + LOGGER.info("[DIAG] Console path — fetching from Discord"); + DiscordFetcher.fetchRulesAsync().thenAccept(fetchedRules -> { + String rulesText; + if (fetchedRules != null) { + RulesCache.updateCache(fetchedRules); + rulesText = fetchedRules; + } else { + LOGGER.warn("Discord fetch failed. Using fallback rules."); + rulesText = RulesCache.getRules(); + } + source.getServer().execute(() -> source.sendSuccess(DiscordFormatter.formatRules(rulesText), false)); + }); + return 1; + } + ServerPlayer player = (ServerPlayer) source.getEntity(); + if (!CooldownManager.checkAndUpdateCooldown(player)) return 0; + if (RulesCache.isCacheValid()) { + player.sendMessage(DiscordFormatter.formatRules(RulesCache.getRules()), Util.NIL_UUID); + return 1; + } + player.sendMessage(new TextComponent("\u00a77Fetching latest rules..."), Util.NIL_UUID); + DiscordFetcher.fetchRulesAsync().thenAccept(fetchedRules -> { + String rulesText; + if (fetchedRules != null) { + RulesCache.updateCache(fetchedRules); + rulesText = fetchedRules; + } else { + LOGGER.warn("Discord fetch failed. Falling back to cached rules for {}", player.getName().getString()); + rulesText = RulesCache.getRules(); + } + MutableComponent formattedRules = DiscordFormatter.formatRules(rulesText); + source.getServer().execute(() -> player.sendMessage(formattedRules, Util.NIL_UUID)); + }); + return 1; + })); + } +} diff --git a/services/discord-rules/1.18.2/src/main/java/com/discordrules/ServerRules.java b/services/discord-rules/1.18.2/src/main/java/com/discordrules/ServerRules.java new file mode 100644 index 0000000..d6f1abd --- /dev/null +++ b/services/discord-rules/1.18.2/src/main/java/com/discordrules/ServerRules.java @@ -0,0 +1,53 @@ +package com.discordrules; + +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.RegisterCommandsEvent; +import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.event.config.ModConfigEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Mod("discordrules") +public class ServerRules { + private static final Logger LOGGER = LoggerFactory.getLogger(ServerRules.class); + + public ServerRules() { + ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ServerRulesConfig.SPEC); + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onConfigLoaded); + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onConfigReload); + MinecraftForge.EVENT_BUS.register(this); + LOGGER.info("Discord Rules Mod Initialized."); + } + + @SubscribeEvent + public void onRegisterCommands(RegisterCommandsEvent event) { + RulesCommand.register(event.getDispatcher()); + LOGGER.info("Registered /rules command."); + } + + @SubscribeEvent + public void onPlayerLogout(PlayerEvent.PlayerLoggedOutEvent event) { + CooldownManager.removePlayer(event.getPlayer().getUUID()); + } + + private void onConfigLoaded(ModConfigEvent.Loading event) { + if (event.getConfig().getSpec() == ServerRulesConfig.SPEC) { + String token = ServerRulesConfig.BOT_TOKEN.get(); + if (token.equals("YOUR_TOKEN_HERE")) { + LOGGER.warn("Rules mod is using default config values! Edit config/discordrules-common.toml"); + } else { + LOGGER.info("Rules mod config loaded successfully. Channel: {}", ServerRulesConfig.CHANNEL_ID.get()); + } + } + } + + private void onConfigReload(ModConfigEvent.Reloading event) { + LOGGER.info("Rules configuration reloaded! Invalidating cache."); + RulesCache.invalidate(); + } +} diff --git a/services/discord-rules/1.18.2/src/main/java/com/discordrules/ServerRulesConfig.java b/services/discord-rules/1.18.2/src/main/java/com/discordrules/ServerRulesConfig.java new file mode 100644 index 0000000..ba475d5 --- /dev/null +++ b/services/discord-rules/1.18.2/src/main/java/com/discordrules/ServerRulesConfig.java @@ -0,0 +1,43 @@ +package com.discordrules; + +import net.minecraftforge.common.ForgeConfigSpec; +import org.apache.commons.lang3.StringUtils; + +public class ServerRulesConfig { + public static final ForgeConfigSpec SPEC; + public static final ForgeConfigSpec.ConfigValue BOT_TOKEN; + public static final ForgeConfigSpec.ConfigValue CHANNEL_ID; + public static final ForgeConfigSpec.ConfigValue MESSAGE_ID; + public static final ForgeConfigSpec.IntValue COOLDOWN_SECONDS; + public static final ForgeConfigSpec.IntValue CACHE_MINUTES; + public static final ForgeConfigSpec.ConfigValue HEADER_COLOR; + public static final ForgeConfigSpec.ConfigValue BODY_COLOR; + public static final ForgeConfigSpec.BooleanValue STRIP_EMOJIS; + + static { + ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + builder.comment("Discord Rules Mod Configuration", + "IMPORTANT: Do not remove [section] headers when editing.", + "Values must stay under their section or the mod cannot read them.") + .push("discord"); + BOT_TOKEN = builder.comment("Discord Bot Token").define("bot_token", "YOUR_TOKEN_HERE"); + CHANNEL_ID = builder.comment("Discord Channel ID").define("channel_id", "1234567890123456789"); + MESSAGE_ID = builder.comment("Discord Message ID").define("message_id", "1234567890123456789"); + builder.pop(); + builder.push("display"); + HEADER_COLOR = builder.comment("Header color (bold lines). Valid: BLACK, DARK_BLUE, DARK_GREEN, DARK_AQUA, DARK_RED, DARK_PURPLE, GOLD, GRAY, DARK_GRAY, BLUE, GREEN, AQUA, RED, LIGHT_PURPLE, YELLOW, WHITE").define("header_color", "GOLD"); + BODY_COLOR = builder.comment("Body color (regular lines and bullet points)").define("body_color", "YELLOW"); + STRIP_EMOJIS = builder.comment("Strip emojis that Minecraft can't render (recommended: true)").define("strip_emojis", true); + builder.pop(); + builder.push("performance"); + COOLDOWN_SECONDS = builder.comment("Per-player cooldown in seconds").defineInRange("cooldown_seconds", 60, 0, 3600); + CACHE_MINUTES = builder.comment("Cache duration in minutes").defineInRange("cache_minutes", 30, 1, 1440); + builder.pop(); + SPEC = builder.build(); + } + + public static boolean isMessageIdValid() { + String id = MESSAGE_ID.get(); + return StringUtils.isNotBlank(id) && id.matches("^\\d{17,20}$"); + } +} diff --git a/services/discord-rules/1.18.2/src/main/resources/META-INF/mods.toml b/services/discord-rules/1.18.2/src/main/resources/META-INF/mods.toml new file mode 100644 index 0000000..3401644 --- /dev/null +++ b/services/discord-rules/1.18.2/src/main/resources/META-INF/mods.toml @@ -0,0 +1,27 @@ +modLoader="javafml" +loaderVersion="[40,)" +license="MIT" + +[[mods]] +modId="discordrules" +version="${file.jarVersion}" +displayName="Discord Rules" +authors="FirefrostGaming" +description=''' +Fetches server rules dynamically from a Discord message for the /rules command. +Configure your Discord bot token, channel, and message ID — players type /rules and see your latest rules in chat, formatted with configurable colors. +''' + +[[dependencies.discordrules]] +modId="forge" +mandatory=true +versionRange="[40,)" +ordering="NONE" +side="SERVER" + +[[dependencies.discordrules]] +modId="minecraft" +mandatory=true +versionRange="[1.18.2,1.19)" +ordering="NONE" +side="SERVER" diff --git a/services/discord-rules/discord-rules-1.0.5-1.18.2-forge.jar b/services/discord-rules/discord-rules-1.0.5-1.18.2-forge.jar new file mode 100644 index 0000000000000000000000000000000000000000..de6f745692c8a24de1ff29f822f3f30774b5acd4 GIT binary patch literal 15266 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 literal 0 HcmV?d00001 diff --git a/services/rules-mod/1.18.2/.gradle/8.8/checksums/checksums.lock b/services/rules-mod/1.18.2/.gradle/8.8/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..0d66df5c11d6c57b620cc2a08342c8a991835cb8 GIT binary patch literal 17 VcmZSn_QqQB*mXWZ1~6cp3IH}Z1dIRx literal 0 HcmV?d00001 diff --git a/services/rules-mod/1.18.2/.gradle/8.8/checksums/md5-checksums.bin b/services/rules-mod/1.18.2/.gradle/8.8/checksums/md5-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..5f20b2efecea87c34c3170b84b1631a4d81cb635 GIT binary patch literal 23047 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 VRDzG&uX>7JLqTK|7?Sj{`)|T<&Z9 z|M$nmKP_fpF$0SkSj@m;1{O20n1RI%EM{Oa1B)40%)nv>7BjGzfyE3gW?(S`iy2tV zz+wg#Gw^>U1C~%n*g$7i6PLh$SQbJcNOKSfbem!o)1`SC@-@I;`v{`HAH*f!U2}Eh zj}FjHBQU+;WQ+1?W~% zsGgcw#`sa?~;e<36JSJ)wcTs-NOvk z)0A1Zxr8*|0eTD{s;6`4OawpIMe??{3)2t((Dtt5}-RCH(=Mv&V`ID2k0o@pDe{S~j4A-iAD!J@>0g*e#*f=1rdJOxzmui27sSV3L-k_W zfd*au`>{aZn}h0?hi*==leQ-V-5eVaSMmhgY$JD@1Ko5d8eby(q-v>3k37)zO)x#& zboA2ozsPkA!}46(VEI&To#AB=ze@{^FE71&S%XW~2ORmtrZD|! z=}#iz5#nox<^Nj#y{DT-?jHm3E?9o9HyFQ@KI4M?h8Wa@)>9ccV7pN|^*D%kPsj9Y zr=RRDH$&##!D3XuachTTN?Q)H4%qOZ`mLDLgCzq zo9(Kl-0@?VfPQETrW=H zMyZUmtS>!*ZljOJ-z#~qaY;b}T9e^oI*jV|!>nbbx5aCK9;}AyjaGk~I*q?>1-f$! zrnj`2J_{Q|)~f(lRDa-~mFmD9fQ)||Y`#3SZr^VxopJ`$b65$DZ}AuJa_JH|0Q5u8 zQT@>#-!f+nzEPli6<~U*fZFGHi9(>;{V#q%KAv7kSr6#J%xHXDZR1XVJqKi+43k0i z$0h3o1k|mMf_R%4RBwN(d8>A+7@0?5`%(SL&ffFF1(B~oydOQL->j@=e&gT-bfYzx z{v&mt#GXRW?47^goSE`c*YMK)mZm zRDUJlv+K@RW?i7~$Hwz(#ZHf1PHy}_x5MVe8@}Avk84xE13e%Ut*6($T=b12Yv zVe4C;j_>zz_jeC~9=#on@82%fHh%Q?L7+Rn$Ml^?GRLiNd+(ByUO`rJTw<3siDcF)nEvd%7N-$wBhVcWVS1-%N{y!O1)%S_jp{Q(nH=Y?Zu$)L zefgMfU749D@}VB+?%4I3$&^lBn>D3~=niQ7UxnVJg10dz#gX|K&Wh>n_RXRVx_3c6R@glHC$3^IqkcXe=&_jZKUMo_oltXR97ar_ z^~`gr)yd{JzXb6H*nM-pbyL{}xw(@-cX^4%6V@Nz8>~tc2Kqj1UJ&%eJ4UaBBl$mY z9E&d=6gGb)v;@Rkt6=(w>y5Y)wQQh!(V_a1_d5>er|Tg5Jx8p+OGZ_hZyS@ML42$P z8qdIdqavS^w+`rs+%f%_|BSju@^zq_)uTG&tH*u{TV+Ooo`9_nOls@Re=mRX5a@@o z_AsvxjZ)pRn;z%}Xf^Z9-`mPKk9>Opbemh~U$98NsJs)Rhs?*w7F1`o$#$BTQ$h0S zWQ6K$>-!t_#C0O;wmvpr*j|^2{%D^32Dvv z+lpZN-E;2#`$ijp9ukM@%edZ`@q7+L=C83Mrf;X4eHGS?JlDjc@;sNWmZMU#t1qa> z8(UYoOd`HL9kA~Ly7?0n;M#xV(odD4EkNJ9AJvx=zFbhDPeHDun+c|GU-MIC$z3Er zi5oG!M2Dx4VL}De6Rv^kJYhL@`F<(LKF4P_s;`J({M2BY=>p;{ZeV)Z*`Axh`;qx; z{|?nx3hpRprnfQ!@d?;IZKbE=)0Z~g2Y?>35{p0NGL=8V7YB5wRjAGz{nuZf*~=Q} z2N_X)m7~14htpDIoa-OP^sle)PKMk-_Bk{M)dT8@^G4%WCsawZbq*uz zhQk9?=gTW*Qe%4ua8 z-FXg;7y2Hivb|>KYM@(MqPlRJV#8M5EM(m?#^%@BPcPZld}c)U8;O`MvLZ|`OnIFh z;%kQ1Bf6q@Q?;Gid7zsKV!CT<<9%~MR0eNnXUyACRW{=0L7!^VCWBCi!CAovwvWXUF zfqDX-VY-@((Zn1Vvfps=#PpK5RYohOk@YQf7S)MN4AV6x>1#nf7Ezdh)u**T!wreJ#EUgvinuX}+WWR2=dS+j-#TrZIP2VwC_d73dU!F@=- zOnkBU!bCj}dd+R1p3rreJ~=q!ZNMJ^bWcZA-|Es`<9$pu7U%&|nBID%VTev%9O!$- zF@26>M8xkH3Fuz0QC-qI`6;!v$aAziD$lF64ti-P7$WWQsYm}pomGa-KUHZGsizm!HH>=Zq{bPZ0DV^& zruWVNdRYA<1?c;{F?}LbV_2z_ALvOHsIKXdmXgb2+6MFpZ2jEP*lg3hx4{kQVL52L zmej`{&FOMv9X?!u=^+D#qL=xQeQazis%s1HGJPfa;S;DQ@D`>|xob7uJ&T-!h1^E< zo%{+pZ{^gOL3{$XZtUz??iYP8EDz|`j9C1Sn>U(mA2I^n4om3Hzl|IWkNA*zlz1AA z*U4e7kg5(x_Ob2~sIEJq_ttOcggvOoAG=TK%Ll#=dhrjL*9Hz~yuRCsN1ua;jv(F? z%cp@o-{)7 zJE|KAAJeSu*_90R@b{Shcj9Axbq2ED>V=@XF<+@$o)So)0W^61KBtbn^ zu9$AP{rj&&MbCkLpb^sx`psQ@n34HqjOEjO+sKimXMspNgJ#fpbIbf$B{gYuoM7|F z{MOFXliX*5K>cRZX#DP{t;X?VQOJEcX&BWl4Dz@ldF8S|e1s9ITRL5e%eE37P&5_%TV2BRZskCC-*BL{=hFx zcjh~n`;r;CUY5eBZnwPZcBx)bH;DJf+HbdN2i;WCb5@{7&SCLtEIVzu|DFK42_352 z=ed4Ae`FtW?qoED>U(@h%Y!xy-Uso!=}~>}${HSn^1K3|yJ7v^yH(6$_SiARH)axx zFMVHqsU;eDu0J4*>W+f93mW#QXn=ZbvFqrlB9K*JKZKmm?7xP_I|WGCN8GMP+Ucl) z>3uHBhl=W#f_g%2QQdjs){cMrCcQ}el~LWLaKE_J5m!rDJjMt5}e+Iumyf-#ZJgZy>J_N290J?Pm8t;{FlAMz*iHwsF z?Ec~%6jF5Q?;4~%yOyHy-d`D5Wt1e4`Q=@K>OKcVcLaLp_k;Qku=UDkE~eeBNgWvv z4ykCoFX6*wWs|qlAU^sdrqA7S(scWV+(+!yP~C3})A1{PdryLRlLAb?bbM@6OwV$l zAAF1I{x&7yC-?~Hy!J))fI=Z>?fW{&{xc#0)eq_v>O9gWJOcID2V(l2?#~8GsKjrJ(=dAHT&`#QTpNvNlzJe=2pm-Nl?}tL-kIwm|=4ASc1&%Ri6@ z9{7}A_P!f-%ysJAhJ;q4vU~ATMuxieUWNcl@C*fvdf5<51yKx?PN+7Gy7nTyQ#1r*MVZ zi-92{_sqe)uK8@fsX1BZe0t9hK<{WkSJ~mhO5mmYlbSm6d{g-7=#|=*z`KsJo}BND zG-jY*XyLIjo(d>#o&Qcj{kn=z=~NdVu40qe&uX8sHIq!X4aE{2tsX6I)pV+}?l|ekC&m!WQ_q!v9D?EgS|IE$aK~%0kE1IpVw9 zIe9(jZAQ}X!tXi4IgCTzpJ3Fc_QIn`lAn=ZqiIpMWov&mKdmsD^O|09x%#%?Yx5x$ zq+e@63*~8yUOWo&+Kf-hR(12r$L;u3x1KQ~%BAVWjt)7+?lXx3G{9YJfg5|B9h{(mI2D(#Qx3Kmi{X%}L(}3?16#c@ZATQ*XQCgJx@a668`m%mW zaV)vT;18i#~4Fr>iub$A*t$$BfSy%+9NH0L`=%S`_ zx)oWnnEzP4S#J9%Jl>8q;(`S9E)RKZI0C8+9$6G#coa!;WCcDok)3vRis|OcExm_j zY|}!c1+V;61ucxT0u&SUzbU=&D9Gy&J~h03pZ7h_2S;ymKAsuBeKL8|RZgg7aKFaa z0gBCu+6#|@yx`dg6^R`sIvJ@bAAAIXtv))yVb! zJE8Y8d5E$PXMf$x)Pmk}BDYWvP~7m<{*M&YLS*#Pq8=<^*x!`*V*R$QkrwX1ODb9a z3PLlU?1lV7%+62kg-1bN{h)=kD6Q}L+|r8SZ8|*l=ep9ae_I*vn}B#hGX^d^0?-FV zzwjuM&n zM3d4yrfoKF-~W?=PECY$Mc|~8DAeh zOR?mbhaHtmjv@Wp4ZK!Dds9j;JPPtcR#941WXX7~z@L04%ec<#t<_I^`is6mI|XtM z(}33s_-a%13y&g6ep!xBZE1`D@Wt%l&x~ocoa6UP*{YTWo*ou~!0SgI zplIFA@hFny7_vsuqR#CzBkX*0^_=TTk=K9b6qPhuH$!(jcx?Qr2VS)9m3S27bpxO3 z7~|d0*I=xtaBu}Lm*T;##sxf3&d6Rr0kw(7{R@vGNsja4Q(r=Fi5tEqwpm#!`)Kdr zoY>YiwhVYpuLP7LyeFl&UU(Gbg^XTW6#KG^A~IEm%7U9+6(T4^=tpTXUFHxrL4}yU1w>`j(8z&l&;xM-7h?fB#Ayd(4x{Z zbHzXH)?vD}KX%0@PrVH;=L(=K!2OyLC-;lN?i;li9tC;9Pc;MrO^W`NT`k>TMWGk@ zIYQeD8ODEJ9)!jO?Db29Ofj$XgT5)Q7aj$9!7U>YXj1N59b);3Ze`FJwcIkh>SyZcob9g z3y*@l&H^u*RPM#fyKC)vjs|s^g+#3VCYg4?5P1D=B~wx^EHu1uD98)!U};jPVgps8 zep`r(^ez7&lx!JI%B+5j^oxt^MPCv_?S)5?B)`GC69R!IWt950%wo%lZ|`4?44gT2 z`f@O53bMDE(IHcW?=;R*@F>U&+BL(47FD(KyAS>NXzM=bX zNlkoeXUfSPze@bCT#|oxQc`JJ`@LOR8FIbgF##3jDd>ZuUw9Pcb(##(q(T$aLhXe|L0-@mfC^3Ou*#XPYqb%-+od%=M2~nV z=5wq@a`-cyOfk}*g1#yGg-4MjzsuoM8F%l-x$g0zw`BVLe#@SD#+#FoR&c*a#5Ck8 zvqR&O(raNQEJrt2%%$HY5VR#_kOY$v@XJh9Ul7>{aP6H$Ikw9$qPRg zT`p-AlBA@M`#)8E^7V3vh4zVXVH<=#D7^3}5-~lA4AG?OF8LQtR;3nq_N!TC^&MuZ zycYig@yZ1h5uRrhUKcB>TQ5o0>9gGKi*!C@)NaO_tqG_&1wgTf|96T+%s`$vXi@)8 zh_8!c*pS86_0qa!T(l;qJ?-A z*IxT$z0^_}$wntat)=$Dqe#Tl@Vy@@Y-^zpiWY8s8B?j~9YWmA$nvFsG_HzY$GQ>m z%77UHftAK8ibp|S;GRO0ns(^DVYU2W(4L9rDE_6s^_33F@vs+(cqSNl3BjHeEzD@C z*mZ_;jn9ohr5^qlW45xtY{~l#h>9drbh~J*y>7Si|B}|M9N#?W#iV}L`%zb)<3G@^ zWF|nlHdA}?mD<}73QjGR?ke~My@Nl;aZ_plwD7DXp!m6|DLgL{@hmuXq@(4f&tBFN zHT<~Y9=~+0d;qi50sFy1q=oEcFGAuSYA-wr^6J2+=Hwn#DQ&xR>CipR1Mzcn1*Rfm z21vi)ISiGy&(H@&=KK8elO2uRW*_b4J=JP|rl7|v`y`;wrII1KKKS1sQBW%@Q@T}U zj>pkUCoY+cJ6jbav34t(KoR(KK5BlRsUfB{nSBe3O z>mIci9z`PNAZHG=sGs@w2Y%EH?Ap+`{@uG|$J>h)tz zm!;kEoGS=U*1VZm=a(v%gLt_h{VJvI*TSg&>fQHLa~a1oXX_INbL4YaEn zBMB;u&{e0rUJIjwYg{_j{s^Xs%(d8emTV2$7v%pE@%luzBCvN;do7GwK}xTj6TWyg zO5xr7@EZMBa!(R>1Ft-ImkbqlcrQRP4i`o}oYxF^<8ZHz%iZ^w+sgdYT<^umClw@O zo)X!LzyYoMlwJ#?e5yIL7^jszu6&VgJU=_dRl+)5iS!FO-{5*f?X@rp_f(&l*9H1T z>l^_0%$#@u9!XH4bq;`gN=&@a0w`K%%isQZh%!gpl+8=rf zz$-OW*l64x@F)^7-x#0TUL~Ez`BuO^h-vkb>*|WbQpZQRK<4w~5Q@e=YGIU$-M2lm z8};@&mOLLF)cPrT>|4nr#H#>!2}A26<%n7sCC%&g?QHq8bvM+1rini*KNakH{T1T% z0C=(TQF|?n+W1-6?apFpA$x$olab=G(kGu5X}YQ8TS6+9LwI3Jrl5 zhc30(UCoD*XOu;K-0X)vastDx=Wo42_BMsr0CgW;t0>l}g;5J@A)Pe;@)38>k^sY$ zFnz)0R|Z|?FM@s*Z2~Q1{z~1#g;5)f1wJ_%4V7elKej>C;@4rZoD5CG3z=UmkEy*D zMzPoJ9BF>P)uhH(W2vmZQPh%sskdOS1Wzq+vP57CruM?4NW`KkC>koXsPrc)O0%a$ zertXBZ4q9lL6(twlNHLI=pkWe?Coo*mFP#r0Ykbw1_ytGP^;)Q3AeCKV3Nu8Y<_7PcW9Y2hUB zlA`f@<-(|i9oJK&#lsIju}ENj3V}H8G1dccHr+JPs>21Bz!qwU_Vs@Q8z1lY2gg zyf+>5+57H(edKWnQQ!%YAP3JgiZQ=1YGEx@Ya~uppU&35@m7~(^y#J9>*p^CBmMdV z`o+Xf-NJ=YudR2ld*3c?r6%0{`!%viFj4OP6UD-d{#u^wJ<8?Ef?Fqmf0ZR?KcO^;@=Fb%I+sW!zOsj z`;n~(3^cAX9z`PFgrBaVLW>G8|9s3^T;~;MNMO%NaZ66t+sf&1zY;tZkY^%BxPKJ= z!lNKB_-+RkT2y6#i_9tmR{gL0HkKc(;hb?bsL%smipZE}gr3JJz3?a!@fN(dh6*j} z{u8d_!3H+E*`eN#ZnOw1%I>IR0$xhU4wkV6LMi%%M?qdGWGezKD%;SZ{B(d?*MkRp z80X(ymUrhBg?3$V4wdE*YJ%DekAl4Z;!_i8VpR(F!$w1gMS~h7y5)#%RG095%`7H!ws6JpyKBsF4oSosZa^`-qV`%CHEAQs%w#l1=ghZj zQ2vLkxc#zn=p2gdWevQRKBD$o7=`;j0P&6k@S=4Nfcwin@lG3{Xq^L?3YJWN+Sa;H zd-Ycj-JX|jb-p{dfqvB@XDKZC)cxA;TyJmAFjujU(M-;5Nd33gv2B+Dbr*R~p|y%$ zd{=PmWx0FbtH*qO2Zain9OClT5h{(`Lb_#Zsl66PEv$uKjvv-*aSU=j{_KHt!`8HR z(OXA@efOw6Ntq9EUZ&MVrQXzQE zl~8u!b^S{*7voBz{6{YmGG}+x1HPn{ zlX^@F(5@e*nnVF5KqK>7Yus3>+9Z0{9txC9zTVcm?SmaMHkv8`#RKhVDZLta>=i}+ z5vvsmP0dHG&pRDp?TG?j%>iVJt{nPpfRgIZ{XAbK=xTX2=X`=W`)1}FmFdxddH|k$ z>BncNDZfdlCZ27f{d6|cNpxqOi208!yAW!C>_x~`q^7!GRE@U$$hH;RbL_s^$ynmX zvhxOjdT0+QHV$fvbf1IS)UWXbi+n~z;$^q`h73JpghFP@!CGocEXu>7z=9eIXr zg`cjW3T9SPQ|Er0D9Bs8%=5{aO)AgNpp|D5_^kujxU- zDo@>#by49R8LI)+E=#8P+rLqJ)y4R*r>%c0VlZp$p>O>`KFj<(v@e8P*zQlJ2VZ~6y$|GFVmtplJ}nx&DuP@ zeA#NhQoHtKrp&Gyq=jR^YgG}o*SmuJ*$4L1y(GV|zpM&n;T3B)BAI^zXMsR?zWE3> zRW0tNn%>x8#+4V)rJd{W#KGwXd4EVEKBXs9+Ji&XRO7^Q`3(}hda7xwHT3WOh~Ph3 z51pOBIeaQars$+psVTN4&0E($wQl-V+&!%Q?e%#E`g2gu$dnA3V$-gprZ!|S4s)=s z8Xav|^=tM@`OO^>CD7_ZrofJfE)Kd9l$k%KMHKW93l$Q%AXWLHN!77`gB+5>r!UD~ z^xxJ{Q#sEs$uz{j-u%R{XKvTDsd&rU%g|k%?Dd&UF)sN*O@-t+O(hzYH%-`v1^=xW zS{@-RuLh`R@Q#5%SYt+m3ZAhhY(M5P+g!%TC?+n<*ykYt?d)K$4)VG|w?DlBVkt&c zcfhq1a(+r%ZYgJHj+YLcIzNj3{?&07wjwZONmEneB$j+r`Dlhg!y-S09GBMHNuK2O zFu`+IB$-;`vh=@GB;s>$Vn&ntdcwLmo$xC@!`e5wxhVN}YsQifaK92f4M8>tN7hn% z;Zcy6Ik|;2DanvcT#{_uUmZnQiz*a<^hLU|NB}RRm1K%;D~Z|*kAl2<@hN(@ndzpC zz;u>vx2D3ag{|mI-a@A!aKDVeD$2@mn%WDGg1pAbUNkAM2en6T?$R3Nv$JL^Wz2JZ zLxBHZqG2!Nelo?mg~o`&qe#R~B0eRTBDXb+@3F?N-h8e5x3?AxJbUAWc!4KGy3No! zLOBlcD98)WI8*^Gs;k^+>VziyvDy57*WX%OW79L=*#j?=Re-tzKg&{#c{~d80()#a zS`@2wpoaLReS&%kZ|D_%P3Uyh){%Ea37#g$$zDr*;apO9;ZY=F*E)Pk<%Hi|8?(1+ zt3F2WDSx_oe$$S;Wk|n#$rRl=csx>g;Zcwmd>4l*phc}Bnhz!Yd#3fv_O8i+;?M?R z|32~>mEdU#uV~QQef%$=PYN$Q3i7JPr~ck^@<~m(^n2#QUZMqO#n&X+>(H|hJPu7+ z$P{7CO=>SZ3i9g4r<6b1^9t}VDZGAkiZoz+BwYGIRWjlQ?_8mBHUs*g=ocPEBEEn} zEmUYx$6jsJW`1uSds96zEn9Q&!N^(ots`>3-jE@N5g+KA!V8aryuekaNeMfrnoHHa zmR)`Sz}>mjlpe#6tDvzCuk$Ysk-Z4A&_0;b>vTYcBAa*uclRF`s}-v~-A|b;fkqIS zN&%EmCN*_6EI2;$VnL9w_xZ$aNAEmw4WELt0Qbwxf=tm3d;E6_YT-OSm3Z}WYRmDC zw+A!pGF{7Zt5rJK%0UZXZUEHMY-%q)FNYV)`zL?(x4m07Y;oJIbL&@aG9|TooJR%gvYoI^_1sW*OK!FAdG*F;{0u2;spg;o!8Ys{}fd&dRP@sVV4HRggKm!FD zD9}KG1`0G#;Qtp2^v8`H?A}bvvkJ&BhgW($OjG=F;Dc@YU#IxyEq6cuWLYA9u>9^L z2L5^K{kOTt*Jz331y_E$^N#V28oS54zn?gM;AJNd6E}BV>>l6zQsOvc9Ct~1`C;&_J-y7ij%+*cR7$Jdo4j$iiLBavGd4}Qu$zEMgXAJPBPM-TgK@)Gy>=N~4H zCw}7iTkdBK?+p}apg;o!8Ys{}fd&dRP@sVV4HRggKm!FDD9}KG1`0G#pn(Dn6lkD8 z0|go=&_IC(3N%olfdUN_XrMp?1sW*OK!FAdG*F;{0u2;spg;o!8Ys{}fd&dRP@sVV z4HRggKm!FDD9}KG|Gz1~dpwP9#A_^h-BlJ1My?tW(_YL4*Hr=~w$-?7*TGjkg?fcKYbw0zvQ?!Ut5*TV-phc|%7yd8!oYGs1 zm5{Gb?cAq*QTL96`}ghGXYhr+dUQ;ji+rK*ruc2pW*{1iP9^V=fL;*`ghRQwR*e(Z za={tN7wlW2aiY|>qRdkRtl#i*>%gb}r+Y3+LZ5(*xu8qWTaqu)KN2i_wj>rSkDg7_ zQ7bYuU|7+_v&AJGG9(BPrQL__Q~Zig4}|<90_8WkhXz=YC`eQ|1|QuVvSO9t$dG=4 zGAmpWYvl2qPTf9K3kFQAhGdLzaj&P*6kUrMC4G%ZpgiVX?WM!zF}f^l`t*uG(2UY{ zAY$2(a5UyipjU+_9jORfQ6Iicvwl|bb8-AC{WztEdZ)*@)6Qt!uBh8*W7c2$%Xu?j zer)lU|MFk7Xf&Zzi*yPEE$`-BT#Zhwm^g6~`v4d5P;YFD$y(pX4;|mP!^>ZdEZV+w zA;IC@B8FTxj4)5HMd=h4*L(BZJa5!j`XxKo3P|S*iw4lGp zvbBm}tY6}jBy=Nb{BuU~>HTF^OvBF7nt2}o>+6v7R$YWz_3h}3`uE*EeZl1)o$y9M zuix&k^~C<57AmgLimmu2Z|+S49Q?>Pp2pFLr|n;35WiD`NcWoOU32`yTQ6MJ^RWVt zw~MFAP?w_&D~DiiHm`QXh~ViGDzAt|n|YS}^`&dvyaShZBai>ph5UiC@}N~_g&;5q z!@Fgu6*9vSU$opZ0(QW7;xA9|_fzx1zr@kKslqW@X!sQJ<@l37@UA2x6UpDT`m@Oc zI`-+?rB~0vtUMVUxgw}V0|(KT6#sXx9UsI zpYfA6^E{k%$JOdl0)-+18vkzE&YoN20`YJ8ozr)>hFU?-)WjF8kP$Wmq2j`E{rh$D zDKn~$4~tnLB8rOwk*Mdk#9>cMCdE&|E zejL5@qvrqVyy30MBWDzR;LQSi2k|&_jwbXjBNzZj^jX7V5zW0=^x=ChW-7W2T6g7z zuXK`!wk`O0pQLj3Hgq`-`X15gI6q6MA#^N_lT1kESbHPWsz`3gy z!N0y(ZAL5{p&38#XH}Y)CBsk+#nL23<`~0fIN4xW+hBMecf*R3swxa?&^5t*F1U;D zx<1<%HT!t{l3rO zInfYpi;H8M0Iq@U+WQ;rIqt=ae>i!|aoaEb@wsIMZ)S`wc&NWP94>}F2Zdy)M!WAk z>u3C|uQX!OEUQ`?r*pc&F`~}$iYf~xFS4>M>l_0j>nbNRg6=~4sv%v9-d3^bcX{Va zCwkr-K6Xa`)6S_Ij^NOi-wuRKaQrA;8jbLbNb|szqd5_1T8hpXJg;bqEb}a{n}Q^B zCJ4=llBLOt&6sg0p9AIM*l}%a+@JQh_x3q{^D$qBiUt+DmpL6Zf2E~^(OEQMkiM{9 zYWVa>z$^v@fgeLlmd#2)j^%kEVpW2yD4F&IJjA<=Apv)p{8HzID0e+q~WmC{WFGIEk)eu!q6b(f)IFVHu z1*meWW~iE=(N%zC@B4WlkbI)+vZtVn~AMMkm=RmoVj zrM9Ea>s$HV;vw%`C~vuMbQZ)k$}9a~v{4w)21F?Cy+jMai9@(4<5y@^Fl3z-3{_$* zR+kK&mw8?`6;?9^3zX$KTNYK(NP~ACy5i#bYwXPq(@yI%osG^M)Md$o*B7kGn3z>~ z0$B*w5QJ%jR-K0pgjAEU6j@<;gO?;zW+a2RO#zw&{5vXdkUaGud#lx}p3(ve{ZSMzy+xry!r_N|;FwTcZ11`}7mC-fBkY&@7 z4c%aLi`95W*Lgu^A;hs3McooK!9gtnS&d%fM> z)od&+L(wJdSWVY7NhX*uGNW*|X`31^G91f^V1k5d1gaXX;!cql2U0U8KX}>8C)~g3 z_KypG-ltkvo2KS$iRzW+U}PHL$*dxawqRme;mL^>E2*rZin=Okys1FNF;sVjRjsT; z{utDC`Gi3qgp9*>_W5yUuYyl9euTA%3_LU|3P-LMib9Ws9Ej2iIG#Xrcxs%$XqwF1 z0>=V1PLmXivvgC@Wrnp3TVQR8r_;{>Cn(O~?uTA&?Vabp`u3dn-`>5N9&_Ix1utZb zH6fuEiUlJO0C*Q@!4I}YTPmm7il+0tC2)!$u~1)hA}6pEu{}ghuz8IUxj2;1fpU>* zBVBn@=;LpHIO)O5Z}{S!)3#>C6?i!T#2A3 zc$~!B634JC7M*iT3Fu@bJG?x9(_!b`aeWhyB`yALdn`99H?(}06FXkvxNSs3z2?Dl zC60xrYUm0tG0<=fK~Y6nC2BassHP&D#7H3EwV4PS^Wltk2TVHn@<}(1`RUbme-^CE z_(|8YK4IF2VtPfC7O|#eS`-!4l0}v^1XYF3C_v*@7)50yR?!8?GDT>#s>aX>IG+RO zKK4MLqgv1JX)XHtAU=3;QUA#W|IG!4j`*DfT%}zo*i?XW z={I8Z*88SE_TbKARzEMl&_QmN#TF+fm1CMl!lBAQFz62jic4b96+(8Pn2v?Zg0NU5 zuu2h@wPD#Xt)OLD$71qTN93Se9$*U~Q?`un{kk zf1pFok#x3t0!hYZWkJ(*8-hlVp<} z%d851WOI@tV*7|PFQh;NS3tW2J>r&ofA#;m``HVYJwNKMMhEpQcrB|PUK%#F5;}&c zATg$*Sd9vHi>lZPR-4ERqAYQ$rLcw}DUg$#pkQ&bnqq^yYj!mt79;>&)cSQjGy3bR z5A8Yej1NDU{N6E-6l~23HP`E71%oske)vNJKMqC1@Ylf+7INJ`Wb3Gs2?NjMbsjj| z;5op~f*|L39r~+bU@fpR6pp=}1{}U>FKxbN@N*|EeZNn^nM1%!-O$dfw6hr zhM!HB1y+h9nE~UP7?Gyp0RYp;vlpn1AYw? zCa`F;f`Si4!=O`6Qyc!F!%w;C{Bm_byKg2PbJQDi_}r|TGK4qW2yhDN1s-l9fq~s= zXq;@~He|>yPFG|&HZ?3F&EiB&wdm?I)Q0sTOK)Cbe0pf<*&E&-`NzUjW)!@f@v0$e zOj)=TXo5_|#R!Zgb|X-O^WU;8MpqajC@jS?Ro>(!a0`%L;h?vudIBtY50*CR|HYWX z*$+PO$G|%mJQ?bkh4Pn#mmUloLxM=iaWG?{_(8A|x4Ess@g_iwse+0J&qA4oYRz$$ zh&2u7L03UK$gyz_;R`<8e*CekTa;dC_FT7W*zI+r8p2sd$#9y3Km=+gY)Td4o`IhO zn+Gm8$XQ#qKrl&ziKlQZj3{te7YyMV0_O679@pBfm&_AJH7N~`8saJbs9 zE2+@^VWfc2qcbZb8xmb zRDI}rBf?>SC~OTgEGKqOC;!g+Whj2SB=S6CsEUP94{IZ~XKQf9NfvguhAl5L5M4H- zC4*w81JuQL+|fxE5uVgiLr5VIL^f9K)&D?hcHPz_=*= z^4qCXpSkSl5f$5-45wN8-7Fl!NerB9_^KcoIG#Xb^GNW1fbl@W*doxdSp{xSc)$#N z#vq0Z;{+SL3KC=^kS=;RcIy)mZXdAx+4pypwwl*9n~)CK-cj3Milhc#)JaXElYb{3 z5V#WI0fvF0!jis8gC=6lLYEGLE?D+wD^#bOIqG`wEpG? z+yCH83bF`21+Yo1SZp{6>c@urG?;b*o|2^aI}!7ah8ULM6gE`efNl@h7o*xT;w6Hh zTCk2x(Uc&(dA=GR&ZKI1m!8{ZnT1Dn-SZiv?;3ovO`VkmV<(ThMueFp&LCFi`hQ)? z4eaZkG+lw&$zv@*w`Y*U z;-1BYb`82X!(4yHO@qQut$(nH`}`HN=grR)yq=9jCn)*?;i~K4S8!!S9%*Db!y5;$ zm(H^Ayo2xP25-XiZfcfpF_vIih?*&C5-4HlBxvcxZ-vHR9Nzr(b(=nDH)zeT_UsP} zHe`%n5;aLSG-v_q6HeJE?fmJaw_wFW2=cTAlih$@&d|UhH9Ty~;NT&Fp39jMQcvI& zSE2oCNuXG)1k^?M*p5%BZ-249|M};4J4X$Ca9DN@F^8PQtT3v`;{FBeNTdbizYxO# zfpNskROFOs24Wg`LvT;WqX(T??5vuwSfYqPIyC**Hk(a+uZtoh z0>zpch)0^CQGjSR3zj;$&Kb%1eAU0yIe(F=knVMr6S| zg0u`3-gkk46|alXm6M?zw#3PCBEHq;*bjT0dH(!q^L{<+=I}iQt1@1g1kE@@a?(kP zqu~(kym1h~Dh<)hbFdfSqZ1Jnw>Y>Npv-ZIa3CTm+9sAGPh=2*!L9*}i`$udhExok z^y8pD%{#Pda>3L8DR?z2+~P);RuL-+26QkT{IAlSq6*MzWMn+3EHN99F~lN7Wb2v= zyHF4i#nP~+={OwN4S{np>-qhc^RJ@HOOGqR>!VL*?OvUQewMVI<7_Qyp_i3M5Df$` z=irpHNIX)4T5c(lF5(XjsZFeE=qy|Yj0O(^B3Q7&;-?`&bO)RW^0=09$Dr2VdW?b0 z%Jp=cF%PeQF^imn#M$GjaMjfkf8$~_NfKc>&9p7V|2Q~~;YEa(i{Zg-5PlJ%g^2Jd zOR2yFQEQ8_ct~?t z*eXX{bYMWXDHw2&F&qqCj?v)ZaJeK2x4D2Ws?P@Aw(1g@vk>pebhiEV0 zT-;tSTX=V?%j~x%f4A-WroXJ(RX5=sf5bJcA19&_w|WqzvSf|yaiq2=ih$s`%4&oS zsUokz*T}$rgQGca^$^e+*3PQ!7jJpx-;a)-HQ}wVjPGWDT(`(ZZP*fHB95#M8%<>` zD%OX}DAZy^dmN{)x^x7UD7nQW?d+pKt-hHK38I;Yi0nP-)n?{x>xVZ-3JF;A4g+tDe3`ZMq)I>$Lfi@Tym}d$! z_!Dt)IFd2g=!aQzMiv}j{Ost3V?J7OeHQ+WR3u3{5tLvTMa0szRi-XAs&R!|^EB~nA)BiLNojTyfw^n4C+m!s6 zi-UG$96cm5nSyEa3KC%8^MjK>gR+if1Vuour2?Z7R+%lr<42Z>k3c3PH;5U1de4Vu z_PAi=s#4Df=9(;{7s<#)V?;2L<;O$ulAzs+*b62ynIIdHl?+YNgx}Y)ZFsIY)n@EC zZU9V1?bKuM*&*C8xx)cpY~S4W{GXfT;K9ZMq2aa}$Ido%OF}*!LV%_w*@_J<2N`vS zD8Mm|m8eMY?Ls`pv2$UQ5&Ul0sIN}yx@F6SUE3XW*rS*KoP`S@WoyJSQ#2F7NC6p5 z77I0pfz4{c-r^wnU>+DGgfFWyXT>o~+O3PIZ3|Cn^y@Eweimvs`@UUAWRYS3;hfME zW5{slQ0ikDCD0!bF%xK{2O;hR>1*mH{L0W`4P+SWh7Dn-fHe!c#gi~3Vvtp^M9&7S z%TFHrea=yhMW*|vDQCS>bkUsoSxRN19hPVnQ9sI)h9Q;2{o!QDMI9<4_6#o%$cF?c z#)J!dCNX^bs(&tbJ_U2UVCf%JF5ylE8JHF zL2Z6NLd+TlHt~pq`=KDju86_Xrjd=I!ZBr)mBUdG3;VR8;ehERBm@IS%vTA&u+Po= zMv5ZROeAQz93DQnkO`v#1~@!xh-Vqd6opvFx}j6A;rpMj;Xb0YVus8U?a8`EYJf2W z)r}FY%pwJ{bo_wtstSkuV@<&Ij0jo014y!Cb4A7)3Nm^$); zU1t<*tjjHwawNf>c7OPiF(>)sx(3%LOCs;Yb3@$TV8jT6Go&s93q>y!O;MK_8dp$)8i+2hfbdU?AWQxv|r9B9+zbzLsH&fB5@CFM1&9n zJ)q1(8(|Tj6p?=jfdv;g$(}P1P-B3u4&S`#ru`*=u|xsvuF(0jx?Xg`<<0ze$tiAX?(M ziHG@1iG@!tBhU~WiY+6PK(!H!fxpH^CIJHVk^9oYBlO#+alLovtU_^ z9UTuUKlX;{!Fpe-My)x>;b^ngVNs#N`}PNP~Fl_MXx;*56=Z1r64 zmqrSn%n4al^Oe8aH0qU>L*Dgl4@{bO!sF#FE-inm9#y7Mm%h`n=#1}|zC8Pyejmox z`DWD5x-{zYlKIWOpFceD)n}gmXwveZ?x{ajY1I4XE&Yz%(fUn!+~c!1yl{87`cRWb z%{^k)1$Ug+a>G@pF4=PIODl}}RFOt?pEjs@;e!KDIO^rGcf5E{tIz9BvAWlzQL7F( zdg2j3v3JGRk81Ygx+bmuzG^heZn zx1Tq%@fBU}KYOcu#kBRO=0u&&R}~u7>ZGw(NIQO>_xq5gTW^1GlU3y{$l_eEoNYUKre|WcAeVpRIgu;YB&2Byl+8rv8lj>9QM2+ueRo z$+_EZ-Sy0K?|zfH#!`#nl$+`^s*-;3{vU37`^yJ*Pd)iIuK()Hw>9xH=Ck&UvSTZ{ zU$&;hE$IT;J-1)gyPmwzS2Rn+KgS`QMrE702n7|GG13 z`?8m|%y@soj&-f6i7o#dd!)Wpol(O&E<3Qa`MaSTj=kcjW_{Lu_D`ufql6CzjXCDy z&Qn5bPGZ+g?)+SRt2m>sd3O8v@634gqKyZ<$)6HA?dSSfZ$`axcbhhgpFaHJPp4aj zZI&$VkomeKJ1F8GF-!x${i@%pona@Ph1*S~F_r65&G6^K%}!{f`mX zF1!28|_VuE|j9PN+3GL_m&w6RW+UC=aoUwF9=IUKiZbDU+m=ipz zYke8@$)3w@9kig=-CMu<>b(JTo*7#wish=hjQX<2S1Z|%?)!P=rs@3}9dY<)^{cjw z@@`UI4_@A3&*7Ul%=!9h?^&6%e4?-Cy|RpI{^=_%UU**bHRysjPJ8;#!R47h+}iN0 zV_g~b<0IGlN-w?Dm$?VQ z*~6UCf*X@&un?@x<>wqm!3Uu>J;A9+p7 z+0V7kJOo3wbe?O;sKJv?JeU8n)y3ncGN&y)UF$|m>T?Adb*HX<^Yb&$ zG>MtZZvEJ5^K4dbt-RKcQJ%%q@L7`QC%0$?Y(VMo7tzFNi|+j(3{R&1KS5P#1qeH)flz=s2AGP zpP$s3xqamHBY)Ujk$Jp7&aZum8nM*Bb5S!!g`19U#YP?-I5G6a?}fqn-`3ZPF{jCz(nwd;nXAG*0<)A|>_`r@Q3Gnav6 zw;1i$|@vu@}2Z z%nf?EsuH8F`S+3ux7^zI$tgv5j@$4@(;3-i8YMsAT-AtC>&}|+-jrUNUU6o4edPP0 zGqa00B%_v_3NfnW+_hhwzj6C_pU#pt-q`=OIdy-exvUSP4%pW8s5Vl`y`NF~^G_c4 z*5u3$`jib($LcWZr%zivw(_aXU0+|pUOMd9qAi(+|C2Pqr1~!Cskx{PqjvrG>~_;1 zYO>_oix0nU>RXSzo1OH{e`Of8?!?aL%<*n+@AcfUTvL^?Aod-Y18@b9UQ>OTRzhwVh4>u6i))@+G}z_TnBISTyP2$Ok`GhO$dC zNXoveO1{fYH5j#$-Da#TUvgo8<;U{u z1aH17!KhDnd_8~bFmcQK9mck6wfz0*)Wx5)j5HeCdi&OsdXH*-L7%s)rma;MNA`|{ z$kL{$T(874E%BK_@9_Ix zIQPj9)_Whz>@mP8PVL*eO?o}5 zZhd}7ua__Gv&B2y`^aA*odmvn|DfF$6Q-?*gM1uo<@>WnUeccLF`{#qU)wye&G0VR zJJzYtzwLLVJ2+zz;;8Rfu>8yw<8N;1>-=83h<13X_lf@r^`vun|C7Tzpe}o~^SkV~ zJE!~KZ2H2nMN(_3-(}x-E!}X)vRBXgGJHu*9{40 zPB)o=8I5A*CD}j@ul9@qH9WUejqi3DwP##}Y&P$V4k@hKf%j0qH*PYZ#c@ZDJ@mD? zqS-|ovv$Q&%*$Ta+&evmyT!l%`i~#YYZUx>!r;>`c%!iGo4%)=?@wvtotgN46+?+b z6wF(*=7UpvtyKz!cPJ2h!1$Gx$pz#zMD6raIr< zb*Oh*jr|w@_Re-cEnM*X+-piE9J_PZ!J$@PJKz42_uiVkaN}Pty=STMsDH`pTc6u_ zz{)eJ{@a$58~wAj_x7YO$CpYRWX`ZhCq4S~6<+B?`Ru^?Pw1@ zjzf{J|2_7xQA559Ua`O>Di%s|Duj}C7q3YHTg=jYJLXY3fgXm z5-k$7V)4<>$zQ>+NW z{Q7C$Ey zcTyEeJZU7k-`U|`Gy-cH^U}%ONB2_i#h62`oIS7ICpeUPCxi_&Dg+xi>=nG8C9i$4 zfmZ#4Pc7|z-;yEk&Fp>Rx3{f5m`Xk3c_d{Q#GKu)S772O*03K5;``kB8G)y6_T#3a zcW-1kVZ5Z*CpPVYi}sDqWr6aJDIgPzI(F*bzF)_pnb5KWHW&lsF?vEQx-kD#`#j2bhS7jsNmDu*mTV=r7`O2=g;j`I&rm- zp;}7e)0#v`x}x8#GYOKOl_St9{hdTMh{dA+ycdZ{j}9sBM2u5--my|Wf9+|OPqsFPx_4_c?*^!}b_S$W{XMr)(^xK~QjO(( zxi}IxQu7=u_xG)&TJeQcsujO47gH+qi+>OLanD?QIi)%lypQg6C)4SU33Pzizl$l! zf#HweL8`Z7U%tsSaHLoKZ8wnYfhnX?Juu!ydw&o~w~>634Y^?ZHSK}gtgz4Xc$sPo z>wmMu3i9J%O!Hmk!PH7KlhO>nYL$ia+?cE-df(5*BOqQLG@GP*wC~xaQ^&sj{5?7q zQX{v$@!jNUS1dSxBm2xZJwNE;os#r%-maT=*)&>sr)Uw(#Bxm@@0MKLKW0iqt96J7 z@f|xIE}bbQ9;$8Q*LIvf`|QsrjAZtBcMKY}!m)Xm#fUX~*cw=~1!M5KhP?J=%@%xn z`HRpdk8TVcf{BUY!_B=^>UIC?edHTY<7mV~1~aAfR!q4u zGC0AXxD}84pSQr%xVz_Ihrb7GOm>NRj_B?<|HKA!4IDe-0}zk9i7V5X3x`Y55U^)*Hc~<_ftFhxSI3HJQHooYRUI|MJ2vC#vxMHm|ejzb9dZWAJK5 zUi(_~C*AXSFW6B$>HTvn?`!;V6DswPXZhY46}Up2{dSIrt@`%qywBC1!;>`{ zPo{oqu>&8k1woLBu+ON!OAmMH6PMp9og9F1{eUG`wI>R13EOtS2x!5=1^YP?6Z zNWhAYEWE?#GXqgFPr?VS!QooIat$LF#+jC0QCu*-M2mJ07kh6c%1U>wB1E#Snt7g2 z3J*B3O1PJxM+8FfR>GZ&@jU(_%hoD_v3`k9NZ2)T0_vO1n>O9MYRSUme_GZ2QtkWC zXC$BAp9m2&^F037*CFSvx(JmT+PJ^g6ITUV2e_&f6uwlz!Et@B?O$UMzf<=H-O1na z^R7Am;jI@g>-iW|t1g~|-ZrcpI$^VUwIfEf;x6R*Mw@w-{Pm@4+`I#qb|a7f)rI`d zAk;EMYMhvR;Vsa_&2Yqr!7T=KRpW`jJV9dK`QJy)2mcaB_ofQRXrbW~uwvU|HytuI zhQ(QUU%DJRJK}8k$k}8{h;TOavI8bLy1SdL>4^8ZfQov?Is0%w7;uGY2HbwQ=zh3F z+HIu?ph;C6>z_1}p)hSIgLmIOTA&yeTZ7$P5W1>=|6n4E1|tp{CgXgok2~L{-S-;Z zs|FL6Z<&Kr^dtAH@CPI{y4uTEk+K(o;#3kY!=T%sh8zhxZsgJ!NmGIl&R$S;uq5gi zN&FynJ?N>0GX%g~e9o>RXNHZDGC_i9H+i~Py&q0dm^PilTkmnsyjVP)$I?)z@UO4a z(li`NOr+pt$uKYx(b6O`QOK|vPR2A;j4#JjUd$TBbQdyY)JOsMkvTJLd?ae>01a=w z#y9gisJ#+1*W*13)8>14>oK-&p&0lHh z!9dJ%5_ElJ#F`J&y3JyD+7?4gn8qhD2G8=mCM%|e*@Frumr4w)$`XcaYnauC`L%o+ zyyM}I53@@h(c-PAm}cI{surGCW~1VO`3lj@x36M7%ttRY|Ei#2?b4CE-Yjj{ih;0?|Q4GK`T| zW!X{~K~kY_D7JyQk*vu>SYSXnE1Qgrnb*8&)&TVpP?u(@qlmoq6VdGYmV_%gzZNZ{ z@gfBsPGdgRFVd{4VHB*WFpP#!Cu8#Xr}35~V69=Ixycw9iVIPj42Xs1gv$%lMkIOb z4{~*%Jw(DR*p4C%_AY9$uM~sTS5zh4a&l`pB-@Z28?+O1hTtag zA!qTJ2GmhjkwsfD!E~^jM2nSF)=))Vl{DT|;Lb2qm;Y4pozy{E-oFo-oHVP)_CZw% zVoRYY+=fuTqqO1-?B%e3IDyeLnYS^V97N$Xj9cd{9W#+-hP4b^z`%H(PCtXsIfE(AWhLURvqo|C;V*0yenIe3O zs>aX>IG+RO^0(9hao&1{VdiZwYay5uP>PlZ&=VNGSJ5Zs06S}y3~nv-g=8`PM#?-7fFq)v+8)76J=FYS!nWz zoIp?IIKwco?s(ghSP)ONR8=)i8)aB7oU`iU24m_lz1*z2#FgrfVdge}Evqg!!~F`= zru${#k;of%nafm|(0QFSSeQ0yFbkQQZzOX~Hpi7yr|E}xwGuiuyxa+jL=jO};5bwjTM=wtR6G>kDdIGoE%-&0wuykVcjwGHkRU66>SkphYrf zLg*}jP!e*!XjL*1Ffw_a2kmU=8laK|8fB22 zKLz#ddS8~JUj>4kypjODi4>oDcX`Gng(Y}7Rx~$ zHfjL-Tws@!sS`H6^$o?$hhq?ql1#G1x=auao<|v>H=Y$NMr2InzG#w;7=XbFjLqw| zrCPcyuu`083GfHhDaK)F&{Ir2=i5&{>GtZ}B=~vL+(Nysat{e!&lg z6Lc(NnbVy7n55H?9FOYBuC5$Ooha-5N8z6nWcSzn+rqQ~xVa(r{=z>eEF-_;dJEI$ z_2!0U3QByfiHAR+}c}^2_*|0>W8W1jJ0J>C4 zo%igmUkGNdUOQeFXf5b8H`HGmg6YXF06SX=Scl{$Yq3-x-xV4C@6tPQOM-DE`n4MjFh(MO`EpHBSTX+L{YazQ&*5xCaWYTpBGW=0GBFS`lt}P4vde$xVt!Y0=xI` zMk({;M`x+KIzMp_R8`E>eFS`A+6?$Cax?RXUgp&bL}ulAAbnxlMEWeM74`$3nG-J% zCXKyf!%2yCY`6~<|ITn~N%40gQ6d^9q=bY`L*)(DV35eesJ4v!dqGew1TRd{lwf%B zd^J3BQCNQh-rbLlM(*r3bn$l^u9ntJzV^DJ=~)nOKj4|U8ccRUaX4IzzWr_irL6^m z6$t(~iJy*<&cbv+)XcO<42aQfRV3N3Izu!QK{6BtN!BcWKACmZ8Cj^o`vud?OJtKYJz(gRFT{WPh&PmXgFy_9z^%X;iX^KXqLRF> zf}*fVIZe|QM9_Fmli*`!P_*x!#f5fbL2=D)^z2r@_)j}v{3%@z9x?GyQ^}&BcfVo# zdd4bq;=TjnDiYvVXts!U&>ANq^@&H#F3Tdt*pe;X;7z0$o0_Ftj3rnWifI%z36vodAprT&mz3s;G08CC1Y{R{C2krq@_6%+=cTMP9xDtZ}c2D04ohB71_ z+ZPLxg(Rs7OJWys-^u6ZQlt9?&js(P9NXyXO@oGIm->@eBLIm7UksW|S0aZsPhD;JyRNdB88akm1>BVOFF9DJv02OW|Z%gRhe0R|xRF$*852H8@Bt zWDeNK89-vOz#xjNi*Rx#LpwSOC%Y6|`nCMcAKXKqO_|neNz(@HcT5hX5lg-%Ri}9-`KPfjj_= zORvWle6^~rea$Xm!Ja7 zs>4;5IKwq`W07sy)-_c#bwS`{U4z)9<8V+m2%Jlzu8ZgP-ZrVt>{HI98ZRj5O?&GJ zW|_N)l4K=lRYOC=-_F<^um%oEP8KQdlHlOA6iFBHhsL07jcVvDg42wKSTzIngXCO0 zry=#K4mh|M7guz5AN4|e`ty@IGq;bNe&i3EE3$AA?MHkwFCj#_v0J!+>@uADb|;UV+p-{!5asAkT112KO^C{Pygo6!Ia&S=aj zhbDn4iIyc;r!vDJw18?vxZMP>JdqJOk&{@PfweCohgM^&;82SQIG1L#w~sF`m~{Vn z1Af|GaKd-zF3&=_$+;D*9}KMbaTO`^)Gz&#YtDzEyF#Z zxMpr*5s4P8EG-Vw&bzPFDkJ^U4Jayb2GbT&K167}sIFsdS>ez}M3zhi#M4AYwn0zm zF;MDKprNjiIKE@wPm`waesXKK_5S0A47ka=yEF?EE8j?F9xzYEh;$l(Khq@|r^`@E zSa?LRzE}%JJ_pAp8i}yHgpzebHYBv5f_dSR+=Wdh**$m9DpJ>8)3tciiW_^eo5U<4 z`uRjKH{`;SbIB!XhN$cCRSE)(EmZbHxr3yD_YIjNs8dG<2_qP$l0>fJU^2O``S+3u zx7^zI$tgv5j@$4@(-}D;SFRAuuD?n0rYsKHm2qOB(~2pWHm_I$gS0FJqBXdGB_7o% zJg+DSUZM8T7Lk-iHnopHCX;I2Srguy(o54T&J3@Qd_Qz%md#i4fn0W(>dBZyW5m89 zY>S8IM}i+x1amjhY6T`1FB3PLX`l~+Z6l+GQ*FkMQwe~{L@GIV?N{e--2UCCv!snT z_J3_omYM3gN3HG~4};f-+h&|fwxL@RdPJd=$R5)w8dj9pW58@^%d-;!;UT5l0~REwQP{XxynAHtZn<%Bi4RJSplzMOPIpalZoA z)ed(3_w07lA8NAX+KUgrZt7c)yqiTmbY3yc&Nw43u@bE!>Msvk!_cn4{o(X^iaLu5 zfji{eV>O{M3u7V+5}s@hUD~jm1O!mvDq~2kh{ba?V4ckucW10SvGX}|yqnv5J@>Yq zpdR&nmUd+RQT?ni8^2kN$Y(Hsl8_LYr(jpa5CWx9VXyibpG9Vj`(k0AHZ&YC;q(dF zn1dekRU+Ba=LSvDiVQssB)A+o>`|x|CLG|1j7pY>$`S)D^I(W#d()}c@cqx%a98q| zm(N-Ani)QD>5G!J1B8F8NjtrsW2YgpmI9fFL12Tuv z#fgJwfRhAPv{7D*b_*y+LAH(#Eyyo1=BO9n z-4$D&rTx2Ku-%cBcR9XGtVkpr!9;JAh&sOxc77jRqa~?dCdHznVycY5A(8=!4_~vy zLz`4#s_@7;76b@5gdsI!Z>ND>jMKQ(Z8`9|8#{D){gPELu4dNH*MIQ-({5p7T}WQa zk!HiR`@@$^Y0`^R*BG>(A!WBD1%ss3LhD4$DMPxigRy7^;zy{mss$e6F&^FhyyGJ8 zlf&ORyY0fI-yiVW&Zge_jqskVn!C9Toci_?;9W&oJ!iw)rI~2MDQGAPNA3WrM3Zq8 z9xpf#C9rDV;AjBAs~RWN^X40-=9RI)3aPU>Ohi&TVS0nCTs z;rzsm2UCS}8EymCU`5de*JEr+gfB*gA%h?{$fP3~*+c{3STK?R1`h< zwmyEbf8||Q^xb+)mbKmaLvd%un~-S4nr;<`{iGpbP#cc%OirJ`)PsJ%(CAe} zqPqld7Q!8{l2r{hvn0tn>>L42U^yPGq>%5a?EOU8m!u-q@oD{WShEZNxZd;hwEiU* z_E&x^_x=O#B0FQUIH*OVb|6~f6od}*my)+~dw*)@j@%8+z!^AD`cNp8Q)$;eJXK7643&DTVh@7+uIr$p| zlQwjw-cMOc8w`_q*qY?pRt*wzTCCA-A$ab`u288{S29<)_lj+<=bEIAHL24S4A*>f z->V0J)NOPKl{z`3P8d3gFLoegVx(V`E{#Uef)Iimh4ttWhxsNJGI5dZqG*aNV*rJ2 z3KCkgqD>qlqJb@#B?JA>fr7*)<@k^-X=6IF$Q#}tLouk-nHZTThu5+$t42r={}QBj zU1v{FsiP;d3y|e=$ODx+;~{fG?uS7IY4a4a$VyDKB0;89RlAg2OfH~O2Nz_XIzv>- zd=CqtQfCEZ7Z*xuhE0;3oSdn;Hsw$2$zS&t=5=p`Po?(3&%DgZd8~P9K~JT2pszc{ z>fT*Ft>^pS*WsK>?Y5qih9Bt-%X8WCoJ#F@{`WWTPHQHfo%~9&-gDl`JFSs-PSojq zb)imcnw@z-tQNH;(O%kVzgwra)KqF$>de!kYQZlbU7)GdCeS&dB=Okfrqwc)+G#m+ zjinY!=BBf8T4UqPw>1fRIx{}u^sfvAgZ@yUxFqI8zyif|EL=viYb1DOkN_c}`y6I1 zVgi&!UYw+}5(f8hEQiB}j3z#4o8iE~4gri~huEn|<$lb3kZ87EM zL1#?-Fui)sVz)1UzY^Q+;-rM&)e4hJ?Sz?=#)tc>%OsWBWHKk%@2|FpX^P87>k+dAsYlx}*N2LK7h^3}(VN^N78Im>r+ zqL6tGl{zZ6zwnP0gz6YI4#SjY@5cmbnMP*~m2v2N^4n_c?gDV={$FdN^268 zIhOmO%@LK_jVW_B?ns$@_dTLg+a6^eS5I;t0OcCR>$z<&M5T5Ys#hIysMH2N^|=QP zmD({UE4Nl&`@K-9J!$Hu+2*vx3YFUbC3E4I#KvoOP03l$6)LsmO6G;^Nh~Or-A$;} z<|g%|aR-&!Q6zH>Y#+=J#LQ_Y4=S~hN9OVVIKTEKtkKlJbI~e;O6`=9T`5uiTT)P| z9Vs&3FL`RNK&AG5sFRSc&8l&t5IO0#K&3WYs8ckeHe7Sn(11$qXOOuJB)dJiyfxQd z1E|!d0h#+MQc=uhg+7&9pr0G`a#e6nr540zmuZyzfOA!WPNf#0XBTluMlCm0-&AVR zcikUpE=!rI)Kcrr4f>P~fhZEGl+U)dnMy5f&OH22l&tvRnWXAqlKGi~%3>k&i*Kd*^8354JN)X2 zWtegt2o*=Yo4j?7`Xy2kw4y$InMgd0 zQluRi+CUyk%<5s3_Y3!p6w|0}EU$?9W6?-)AvK3)PkH^?NjqXUm(RVb|J>I3zGA-5 zpLRoO#GMcehl9w6@P5C~;$kPkad2@&GlLdgrVX`1gUxVdC>VAICBr#Sr<7|&&`kox zCJ1Da%EkC!C~n7JWJ-Zs<@wGPCl@b%wuNx}rmyau+4!}U-Wj!i@o&J5N=1$O@UvHL ZdwaWj_9x?awm9aX*lds2;>4BVq=139|3EF{G zGER$;fB`}@w31V9FB=RtF-;Ue2+ekk`uolNNJo6TU(B|7ZJINmfP^A;8GjP`5TG+ zi`0T#=2U(w%A=V?-k}IwJ5(YqMftYc<$UO~O5yx>CsEEbBl1ysppqKuc@%FSO5~d2 zBa!n;P8{BTFOeJf^Cr48wZczFH!`OUI)QJr@hn$_e9M3}836EnW_qjYZE!OVv7vb0!j z3nHptM+E&VGEo`Hb+H-L%AD7x2NjI*xoB2TKSTsg_ezL?D`RQ zt*JQCiwJXjGO_35w%tt|&JEnYsG)cIT4ArVU{?uSvj-7RyhSFKXr>A49j%X9UQupN zqD=z2jUYO9$ zN{iKlEk?VOu&qHIMYXriR9uV8`Jtw_I^gi9u6lwQpQi&bWQDtSMS`uZ`*%VzrJi|5 zme?4g@$dNk`5QcZR%Z}FSz%UO+LdW<1?T4?iQhbRT8N!7eH~vSg7XZvH>l%D4ZUP? z*82@_e;f92b|TgSBUt5jdcxNJBAJLu_^Z9~K$5%Z`(r^~qO;g{hi;68EWC#&hghQ35&r;71Cz`E literal 0 HcmV?d00001 diff --git a/services/rules-mod/1.18.2/.gradle/8.8/fileHashes/fileHashes.lock b/services/rules-mod/1.18.2/.gradle/8.8/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..e1d837ab142e9434f9a40739a9ee1674729238c0 GIT binary patch literal 17 UcmZSHv`#}X#`Z%y0|aOS04>@B)&Kwi literal 0 HcmV?d00001 diff --git a/services/rules-mod/1.18.2/.gradle/8.8/fileHashes/resourceHashesCache.bin b/services/rules-mod/1.18.2/.gradle/8.8/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000000000000000000000000000000000000..33abbfbb026b6c08880b1e08be1d307d0d528009 GIT binary patch literal 18735 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 yu?e%!_ptzGB|8GrCfu%p?(_ zQccdaaVK$5bz;*rnyK{_SQYM>;aES6Qs^lj9lEs6_J+%nIiuQC*fN;z8md>r_~Mfl zU%p5Dt_YT>gQqfr@`cR!$NWr~+`CZb%dn;WtzrAOI>P_JtsB76PYe*<%H(y>qx-`Kq!X_; z<{RpAqYhE=L1r*M)gNF3B8r(<%8mo*SR2hu zccLRZwGARt)Hlo1euqTyM>^!HK*!Q2P;4UYrysje@;(<|$&%vQekbn|0Ruu_Io(w4#%p6ld2Yp7tlA`Y$cciThP zKzNGIMPXX%&Ud0uQh!uQZz|FB`4KGD?3!ND?wQt6!n*f4EmCoJUh&b?;B{|lxs#F- z31~HQ`SF4x$&v00@(P+j1pAaj5!s`)b2RDBp*PB=2IB>oBF!*6vwr7Dp%zpAx*dPr zb@Zjq^XjN?O4QcZ*O+8>)|HlrR>oD*?WQl5ri3R#2?*W6iJ>>kH%KnnME&TT@ZzrHS$Q%LC?n|e>V+D+8D zYc4)QddFz7I8#}y#Wj6>4P%34dZH~OUDb?uP%-E zwjXM(?Sg~1!|wI(RVuxbu)-rH+O=igSho_pDCw(c6b=P zKk4ATlB?bj9+HHlh<_!&z0rx13K3ZrAR8W)!@Y}o`?a*JJsD+twZIv`W)@Y?Amu_u zz``@-e2X}27$i(2=9rvIu5uTUOVhzwu%mNazS|lZb&PT;XE2|B&W1>=B58#*!~D&) zfVmJGg8UdP*fx(>Cj^?yS^zH#o-$Q-*$SnK(ZVFkw+er=>N^7!)FtP3y~Xxnu^nzY zikgB>Nj0%;WOltWIob|}%lo?_C7<``a5hEkx&1ku$|)i>Rh6@3h*`slY=9U}(Ql_< zaNG*J8vb&@zpdhAvv`?{=zDedJ23TD&Zg__snRAH4eh~^oawdYi6A3w8<Ozh@Kw)#bdktM^GVb zrG08?0bG?|NG+w^&JvD*7LAbjED{_Zkc`3H!My>0u5Q}m!+6VokMLXxl`Mkd=g&Xx z-a>m*#G3SLlhbKB!)tnzfWOBV;u;ftU}S!NdD5+YtOjLg?X}dl>7m^gOpihrf1;PY zvll&>dIuUGs{Qnd- zwIR3oIrct8Va^Tm0t#(bJD7c$Z7DO9*7NnRZorrSm`b`cxz>OIC;jSE3DO8`hX955ui`s%||YQtt2 z5DNA&pG-V+4oI2s*x^>-$6J?p=I>C|9wZF8z;VjR??Icg?1w2v5Me+FgAeGGa8(3S z4vg*$>zC-WIVZtJ7}o9{D-7d>zCe|z#<9>CFve-OPAYsneTb^JH!Enaza#j}^mXy1 z+ULn^10+rWLF6j2>Ya@@Kq?26>AqK{A_| zQKb*~F1>sE*=d?A?W7N2j?L09_7n+HGi{VY;MoTGr_)G9)ot$p!-UY5zZ2Xtbm=t z@dpPSGwgH=QtIcEulQNI>S-#ifbnO5EWkI;$A|pxJd885oM+ zGZ0_0gDvG8q2xebj+fbCHYfAXuZStH2j~|d^sBAzo46(K8n59+T6rzBwK)^rfPT+B zyIFw)9YC-V^rhtK`!3jrhmW-sTmM+tPH+;nwjL#-SjQPUZ53L@A>y*rt(#M(qsiB2 zx6B)dI}6Wlsw%bJ8h|(lhkJVogQZA&n{?Vgs6gNSXzuZpEyu*xySy8ro07QZ7Vk1!3tJphN_5V7qOiyK8p z#@jcDD8nmtYi1^l8ml;AF<#IPK?!pqf9D4moYk>d99Im}Jtwj6c#+A;f)CQ*f-hZ< z=p_T86jog%!p)D&5g9taSwYi&eP z#JuEK%+NULWus;0w32-SYFku#i}d~+{Pkho&^{;RxzP&0!RCm3-9K6`>KZpnzS6?L z^H^V*s!8<>x8bomvD%rh>Zp3>Db%kyin;qtl+jAv8Oo~1g~mqGAC&Qi_wy|xEt2iz zWAJEfTV%cl2Cs<1L&DLRVVH05EDq`pH7Oh7sR`NNkL%wi}8n>IXcO40hp+J+sC!W?!krJf!GJNE8uj zg-y~Ns-<~D?yqbzVRB}G>0A^f0!^N7l=$m0OdZuqAOQqLc zX?AEGr1Ht+inZ-Qiwnl@Z0qukd__a!C*CKuGdy5#nD7VUBM^6OCpxCa2A(X;e0&V4 zM&WR8+wErQ7UIc6LY~Q9x%Sn*Tn>>P`^t&idaOEnOd(Ufw#>NoR^1QdhJ8s`h^|R_ zXX`c5*O~Xdvh%q;7L!_!ohf$NfEBmCde|#uVZvEo>OfEq%+Ns7&_f$OR9xsihRpBb z+cjk8LyDm@U{YN>+r46?nn{7Gh(;WhFw6GAxtcKD+YWV?uge>;+q#Xx4!GpRkVZYu zzsF}1)7$?%s9g9CH=Zs+B%M_)+~*j3L0&Q9u7!|+T`^O{xE6qvAP?XWv9_MrZKdo& z%IyU)$Q95AB4!#hT!_dA>4e@zjOBD*Y=XjtMm)V|+IXzjuM;(l+8aA5#Kaz_$rR6! zj>#&^DidYD$nUY(D$mH`9eb|dtV0b{S>H6FBfq>t5`;OxA4Nn{J(+XihF(stSche7$es&~N$epi&PDM_N`As;*9D^L==2Q7Z2zD+CiU(|+-kL*VG+&9!Yb3LgPy?A zm7Z&^qRG_JIxK7-FBzZI3Q<;{`DIxtc48k> zc|0dmX;Z=W$+)qE)~`yn6MdoJ4co;%!`ddy+FV538Y)j(vg}5*k(WK)KWZ3WaOG!8 z!syGn=s{H$odtpqFrT#JGM*utN7B((abXnpDM6w56nhw}OY}0TiTG1#f*VFZr+^-g zbP10`$LPq_;PvrA1XXlyx2uM^mrjTzX}w{yuLo-cOClE8MMk47T25G8M!9Z5ypOSV zAJUBGEg5L2fY)ZGJb^E34R2zJ?}Vf>{~gB!8=5Z) z9y$>5c)=;o0HeHHSuE4U)#vG&KF|I%-cF6f$~pdYJWk_dD}iOA>iA$O$+4%@>JU08 zS`ep)$XLPJ+n0_i@PkF#ri6T8?ZeAot$6JIYHm&P6EB=BiaNY|aA$W0I+nz*zkz_z zkEru!tj!QUffq%)8y0y`T&`fuus-1p>=^hnBiBqD^hXrPs`PY9tU3m0np~rISY09> z`P3s=-kt_cYcxWd{de@}TwSqg*xVhp;E9zCsnXo6z z?f&Sv^U7n4`xr=mXle94HzOdN!2kB~4=%)u&N!+2;z6UYKUDqi-s6AZ!haB;@&B`? z_TRX0%@suz^TRdCb?!vNJYPY8L_}&07uySH9%W^Tc&1pia6y1q#?*Drf}GjGbPjBS zbOPcUY#*$3sL2x4v_i*Y=N7E$mR}J%|GUI(>WEr+28+V z%v5{#e!UF*6~G&%;l*q*$V?&r$Pp^sE^i-0$+RH3ERUUdQ0>rAq2(2QAbG}$y{de( z>{qD~GGuOk559Y@%$?N^1ApVL_a704>8OD%8Y%8B;FCt%AoPu8*D1 zLB5X>b}Syz81pn;xnB}%0FnwazlWfUV)Z-~rZg6~b z6!9J$EcE&sEbzcy?CI~=boWA&eeIa%z(7SE^qgVLz??1Vbc1*aRvc%Mri)AJaAG!p z$X!_9Ds;Zz)f+;%s&dRcJt2==P{^j3bf0M=nJd&xwUGlUFn?H=2W(*2I2Gdu zv!gYCwM10aeus)`RIZSrCK=&oKaO_Ry~D1B5!y0R=%!i2*KfXGYX&gNv_u+n9wiR5 z*e$Zjju&ODRW3phN925%S(jL+bCHv6rZtc?!*`1TyYXT6%Ju=|X;6D@lq$8T zW{Y|e39ioPez(pBH%k)HzFITXHvnD6hw^lIoUMA;qAJ^CU?top1fo@s7xT13Fvn1H z6JWa-6+FJF#x>~+A;D~;VDs26>^oH0EI`IYT2iagy23?nyJ==i{g4%HrAf1-*v zK1)~@&(KkwR7TL}L(A@C_S0G;-GMDy=MJn2$FP5s<%wC)4jC5PXoxrQBFZ_k0P{{s@sz+gX`-!=T8rcB(=7vW}^K6oLWMmp(rwDh}b zwaGGd>yEy6fHv%jM$yJXo5oMAQ>c9j`**}F?MCry;T@47@r?&sKHgVe$MCqk#Z_3S z1GZI~nOEN*P~+UaFGnj{{Jo@16`(qVNtbU>O0Hf57-P>x8Jikp=`s8xWs^dAJ9lCQ z)GFm+=OV%AMVqVATtN@|vp61VVAHRn87}%PC^RAzJ%JngmZTasWBAWsoAqBU+8L8u z4A&Pe?fmTm0?mK-BL9t+{y7o(7jm+RpOhL9KnY#E&qu^}B6=K_dB}*VlSEiC9fn)+V=J;OnN)Ta5v66ic1rG+dGAJ1 z1%Zb_+!$=tQ~lxQrzv3x#CPb?CekEkA}0MYSgx$Jdd}q8+R=ma$|&1a#)TQ=l$1tQ z=tL9&_^vJ)Pk}EDO-va`UCT1m#Uty1{v^A3P~83_#v^ozH}6*9mIjIr;t3Uv%@VeW zGL6(CwCUp)Jq%G0bIG%?{_*Y#5IHf*5M@wPo6A{$Um++Co$wLC=J1aoG93&T7Ho}P z=mGEPP7GbvoG!uD$k(H3A$Z))+i{Hy?QHdk>3xSBXR0j!11O^mEe9RHmw!pvzv?Ua~2_l2Yh~_!s1qS`|0~0)YsbHSz8!mG)WiJE| z2f($6TQtt6L_f~ApQYQKSb=`053LgrQq7G@98#igV>y#i==-nEjQ!XNu9 z~;mE+gtj4IDDNQJ~JVk5Ux6&LCSFL!y=>79kE9=V}J7tD==Ga+IW zX)r7>VZ9dY=V&}DR))xUoV!u(Z|%3ciQi_2jl}3=$Agc(`RPb z8kEBpvY>1FGQ9W$n>Cq=DIpski};nE)`p3IUw1Oz0|wxll^)4dq3;CCY@RyJgFgc# zKouFh!`?Xuo{IMz^xi-h=StCis_M7yq$u) z?XHvw*HP0VgR+KR6wI)jEMX|ssqYvSf*_3W8zVTQzD?3>H!#>InzpSO)@SC8q*ii- z%%h}_#0{4JG;Jm`4zg};BPTGkYamx$Xo#O~lBirRY)q=5M45n{GCfV7h9qwyu1NxOMoP4)jjZMxmT|IQQh0U7C$EbnMN<3)Kk?fFHYq$d|ICu>KbY_hO zTZM+uKHe(cIZfEqyzyYSUBZa8;Fcut-GN!HSA9ius`ltNebF46ZX_BbZNU}}ZOm{M2&nANL9@0qvih15(|`S~z}m&h!u4x~(%MAO$jHRWNfuxWF#B)E&g3ghSQ9|> z(MFaLQj)NE0lowyjvg8z0#m6FIuKE9lDO~Glg}nSb7`~^&#(Lw{}GVOS>U)m8bF}x zVjbXljBm34Cs-yM6TVusr+3kYFjr28STT3g056y3cH5Tmge~ASxBj z%|yb>$eF;WgrcOZf569sDZOVwoo%8>XO>XQOX1OyN9I-SQgrm;U;+#3OI(zrWyow3 zk==|{lt2xrQ%FIXOTejR>;wv(Pb8u8}BUpx?yd(Abh6? zsoO3VYWkeLnF43&@*#MQ9-i-d0t*xN-UEyNKeyNMHw|A(k(_6QKO=nKMCxD(W(Yop zsRQ)QeL4X3Lxp^L%wzi2-WVSsf61dqliPUM7srDB?Wm6Lzn0&{*}|IsKQW;02(Y&| zaTKv|`U(pSzuvR6Rduu$wzK_W-Y-7>7s?G$)U}&uK;<>vU}^^ns@Z!p+9?St1s)dG zK%y6xkPyyS1$~&6v{kl?Md6gwM|>mt6Upm>oa8RLD^8T{0?HC!Z>;(Bob7el(DV6x zi`I)$&E&ngwFS@bi4^xFLAn`=fzTC;aimE^!cMI2n@Vo%Ae-ne`RF((&5y6xsjjAZ zVguVoQ?Z9uk$2ON;ersE%PU*xGO@T*;j1BO5#TuZKEf(mB7|g7pcEA=nYJ{s3vlbg zd4-DUlD{*6o%Gc^N!Nptgay>j6E5;3psI+C3Q!1ZIbeCubW%w4pq9)MSDyB{HLm|k zxv-{$$A*pS@csolri$Ge<4VZ}e~78JOL-EVyrbxKra^d{?|NnPp86!q>t<&IP07?Z z^>~IK^k#OEKgRH+LjllZXk7iA>2cfH6+(e&9ku5poo~6y{GC5>(bRK7hwjiurqAiZ zg*DmtgY}v83IjE&AbiWgMyFbaRUPZ{lYiz$U^&Zt2YjG<%m((&_JUbZcfJ22(>bi5 z!J?<7AySj0JZ&<-qXX;mcV!f~>G=sB0KnjWca4}vrtunD^1TrpfeS^4dvFr!65knK zZh`d;*VOkPs4*-9kL>$GP0`(M!j~B;#x?Ba~&s6CopvO86oM?-? zOw#dIRc;6A6T?B`Qp%^<U5 z19x(ywSH$_N+Io!6;e?`tWaM$`=Db!gzx|lQ${DG!zb1Zl&|{kX0y6xvO1o z220r<-oaS^^R2pEyY;=Qllqpmue|5yI~D|iI!IGt@iod{Opz@*ml^w2bNs)p`M(Io z|E;;m*Xpjd9l)4G#KaWfV(t8YUn@A;nK^#xgv=LtnArX|vWQVuw3}B${h+frU2>9^ z!l6)!Uo4`5k`<<;E(ido7M6lKTgWezNLq>U*=uz&s=cc$1%>VrAeOoUtA|T6gO4>UNqsdK=NF*8|~*sl&wI=x9-EGiq*aqV!(VVXA57 zw9*o6Ir8Lj1npUXvlevtn(_+^X5rzdR>#(}4YcB9O50q97%rW2me5_L=%ffYPUSRc z!vv?Kv>dH994Qi>U(a<0KF6NH5b16enCp+mw^Hb3Xs1^tThFpz!3QuN#}KBbww`(h z7GO)1olDqy6?T$()R7y%NYx*B0k_2IBiZ14&8|JPFxeMF{vSTxF-Vi3+ZOI=Thq2} zyQgjYY1_7^ZQHh{?P))4+qUiQJLi1&{yE>h?~jU%tjdV0h|FENbM3X(KnJdPKc?~k zh=^Ixv*+smUll!DTWH!jrV*wSh*(mx0o6}1@JExzF(#9FXgmTXVoU+>kDe68N)dkQ zH#_98Zv$}lQwjKL@yBd;U(UD0UCl322=pav<=6g>03{O_3oKTq;9bLFX1ia*lw;#K zOiYDcBJf)82->83N_Y(J7Kr_3lE)hAu;)Q(nUVydv+l+nQ$?|%MWTy`t>{havFSQloHwiIkGK9YZ79^9?AZo0ZyQlVR#}lF%dn5n%xYksXf8gnBm=wO7g_^! zauQ-bH1Dc@3ItZ-9D_*pH}p!IG7j8A_o94#~>$LR|TFq zZ-b00*nuw|-5C2lJDCw&8p5N~Z1J&TrcyErds&!l3$eSz%`(*izc;-?HAFD9AHb-| z>)id`QCrzRws^9(#&=pIx9OEf2rmlob8sK&xPCWS+nD~qzU|qG6KwA{zbikcfQrdH z+ zQg>O<`K4L8rN7`GJB0*3<3`z({lWe#K!4AZLsI{%z#ja^OpfjU{!{)x0ZH~RB0W5X zTwN^w=|nA!4PEU2=LR05x~}|B&ZP?#pNgDMwD*ajI6oJqv!L81gu=KpqH22avXf0w zX3HjbCI!n9>l046)5rr5&v5ja!xkKK42zmqHzPx$9Nn_MZk`gLeSLgC=LFf;H1O#B zn=8|^1iRrujHfbgA+8i<9jaXc;CQBAmQvMGQPhFec2H1knCK2x!T`e6soyrqCamX% zTQ4dX_E*8so)E*TB$*io{$c6X)~{aWfaqdTh=xEeGvOAN9H&-t5tEE-qso<+C!2>+ zskX51H-H}#X{A75wqFe-J{?o8Bx|>fTBtl&tcbdR|132Ztqu5X0i-pisB-z8n71%q%>EF}yy5?z=Ve`}hVh{Drv1YWL zW=%ug_&chF11gDv3D6B)Tz5g54H0mDHNjuKZ+)CKFk4Z|$RD zfRuKLW`1B>B?*RUfVd0+u8h3r-{@fZ{k)c!93t1b0+Q9vOaRnEn1*IL>5Z4E4dZ!7 ztp4GP-^1d>8~LMeb}bW!(aAnB1tM_*la=Xx)q(I0Y@__Zd$!KYb8T2VBRw%e$iSdZ zkwdMwd}eV9q*;YvrBFTv1>1+}{H!JK2M*C|TNe$ZSA>UHKk);wz$(F$rXVc|sI^lD zV^?_J!3cLM;GJuBMbftbaRUs$;F}HDEDtIeHQ)^EJJ1F9FKJTGH<(Jj`phE6OuvE) zqK^K`;3S{Y#1M@8yRQwH`?kHMq4tHX#rJ>5lY3DM#o@or4&^_xtBC(|JpGTfrbGkA z2Tu+AyT^pHannww!4^!$5?@5v`LYy~T`qs7SYt$JgrY(w%C+IWA;ZkwEF)u5sDvOK zGk;G>Mh&elvXDcV69J_h02l&O;!{$({fng9Rlc3ID#tmB^FIG^w{HLUpF+iB`|
NnX)EH+Nua)3Y(c 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# 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 + if ! command -v java >/dev/null 2>&1 + then + 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 +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + 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 + + +# 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"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# 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/services/rules-mod/1.18.2/gradlew.bat b/services/rules-mod/1.18.2/gradlew.bat new file mode 100644 index 0000000..7101f8e --- /dev/null +++ b/services/rules-mod/1.18.2/gradlew.bat @@ -0,0 +1,92 @@ +@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=. +@rem This is normally unused +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% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +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% equ 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! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/services/rules-mod/1.18.2/settings.gradle b/services/rules-mod/1.18.2/settings.gradle new file mode 100644 index 0000000..7c71559 --- /dev/null +++ b/services/rules-mod/1.18.2/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + maven { url = 'https://maven.minecraftforge.net/' } + } +} + +rootProject.name = 'firefrostrules' diff --git a/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/CooldownManager.java b/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/CooldownManager.java new file mode 100644 index 0000000..9d57220 --- /dev/null +++ b/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/CooldownManager.java @@ -0,0 +1,32 @@ +package com.firefrostgaming.rules; + +import net.minecraft.Util; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.server.level.ServerPlayer; +import java.time.Duration; +import java.time.Instant; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +public class CooldownManager { + private static final ConcurrentHashMap COOLDOWNS = new ConcurrentHashMap<>(); + + public static boolean checkAndUpdateCooldown(ServerPlayer player) { + UUID playerId = player.getUUID(); + Instant now = Instant.now(); + int cooldownSeconds = ServerRulesConfig.COOLDOWN_SECONDS.get(); + Instant lastUsed = COOLDOWNS.get(playerId); + if (lastUsed != null) { + long secondsSinceLastUse = Duration.between(lastUsed, now).getSeconds(); + if (secondsSinceLastUse < cooldownSeconds) { + long remaining = cooldownSeconds - secondsSinceLastUse; + player.sendMessage(new TextComponent("\u00A7cPlease wait " + remaining + " seconds before checking the rules again."), Util.NIL_UUID); + return false; + } + } + COOLDOWNS.put(playerId, now); + return true; + } + + public static void removePlayer(UUID playerId) { COOLDOWNS.remove(playerId); } +} diff --git a/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/DiscordFetcher.java b/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/DiscordFetcher.java new file mode 100644 index 0000000..bb5aad3 --- /dev/null +++ b/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/DiscordFetcher.java @@ -0,0 +1,47 @@ +package com.firefrostgaming.rules; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.Duration; +import java.util.concurrent.CompletableFuture; + +public class DiscordFetcher { + private static final Logger LOGGER = LoggerFactory.getLogger(DiscordFetcher.class); + private static final HttpClient CLIENT = HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(10)).build(); + + public static CompletableFuture fetchRulesAsync() { + String messageId = ServerRulesConfig.MESSAGE_ID.get(); + LOGGER.info("[DIAG] fetchRulesAsync called. messageId='{}', isValid={}", messageId, ServerRulesConfig.isMessageIdValid()); + if (!ServerRulesConfig.isMessageIdValid()) { + LOGGER.error("Invalid Discord Message ID in config. Raw value: '{}'", messageId); + return CompletableFuture.completedFuture(null); + } + String token = ServerRulesConfig.BOT_TOKEN.get(); + String channelId = ServerRulesConfig.CHANNEL_ID.get(); + URI uri = URI.create("https://discord.com/api/v10/channels/" + channelId + "/messages/" + messageId); + LOGGER.info("[DIAG] Fetching from Discord: channel={}, message={}", channelId, messageId); + HttpRequest request = HttpRequest.newBuilder().uri(uri) + .header("Authorization", "Bot " + token) + .header("Accept", "application/json").GET().build(); + return CLIENT.sendAsync(request, HttpResponse.BodyHandlers.ofString()) + .thenApply(response -> { + if (response.statusCode() == 200) { + JsonObject json = JsonParser.parseString(response.body()).getAsJsonObject(); + return json.get("content").getAsString(); + } else { + LOGGER.error("Discord API returned status: {}", response.statusCode()); + return null; + } + }) + .exceptionally(ex -> { + LOGGER.error("Network error while fetching Discord rules", ex); + return null; + }); + } +} diff --git a/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/DiscordFormatter.java b/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/DiscordFormatter.java new file mode 100644 index 0000000..f4859f4 --- /dev/null +++ b/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/DiscordFormatter.java @@ -0,0 +1,45 @@ +package com.firefrostgaming.rules; + +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TextComponent; + +public class DiscordFormatter { + public static MutableComponent formatRules(String rawDiscordText) { + String processedText = convertEmojis(rawDiscordText); + String lowerText = processedText.toLowerCase(); + ChatFormatting headerColor = ChatFormatting.DARK_PURPLE; + ChatFormatting bodyColor = ChatFormatting.LIGHT_PURPLE; + if (lowerText.contains("fire") || lowerText.contains("[fire]")) { + headerColor = ChatFormatting.GOLD; + bodyColor = ChatFormatting.YELLOW; + } else if (lowerText.contains("frost") || lowerText.contains("[frost]")) { + headerColor = ChatFormatting.AQUA; + bodyColor = ChatFormatting.DARK_AQUA; + } + MutableComponent rootComponent = new TextComponent(""); + String[] lines = processedText.split("\n"); + for (String line : lines) { + MutableComponent lineComponent; + if (line.startsWith("**") && line.endsWith("**")) { + String cleanLine = line.replace("**", ""); + lineComponent = new TextComponent(cleanLine); + lineComponent.withStyle(headerColor, ChatFormatting.BOLD); + } else if (line.trim().startsWith("-") || line.trim().startsWith("\u2022")) { + lineComponent = new TextComponent(" " + line.trim()); + lineComponent.withStyle(bodyColor); + } else { + lineComponent = new TextComponent(line); + lineComponent.withStyle(bodyColor); + } + rootComponent.append(lineComponent).append(new TextComponent("\n")); + } + return rootComponent; + } + + private static String convertEmojis(String text) { + if (text == null) return ""; + return text.replace("\uD83D\uDD25", "[Fire]").replace("\u2744\uFE0F", "[Frost]") + .replace("\uD83D\uDC9C", "[Arcane]").replaceAll("[\\x{1F300}-\\x{1F9FF}]", ""); + } +} diff --git a/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/RulesCache.java b/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/RulesCache.java new file mode 100644 index 0000000..c4f557d --- /dev/null +++ b/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/RulesCache.java @@ -0,0 +1,26 @@ +package com.firefrostgaming.rules; + +import java.time.Instant; + +public class RulesCache { + private static String cachedRules = null; + private static Instant lastFetchTime = Instant.MIN; + private static final String FALLBACK_RULES = + "[Fire] Server Rules\n1. Be respectful to all players.\n2. No griefing or cheating.\n3. Follow staff instructions.\nPlease check Discord for the full rules list."; + + public static boolean isCacheValid() { + if (cachedRules == null) return false; + long cacheMinutes = ServerRulesConfig.CACHE_MINUTES.get(); + return Instant.now().isBefore(lastFetchTime.plusSeconds(cacheMinutes * 60)); + } + + public static void updateCache(String newRules) { + if (newRules != null && !newRules.trim().isEmpty()) { + cachedRules = newRules; + lastFetchTime = Instant.now(); + } + } + + public static String getRules() { return cachedRules != null ? cachedRules : FALLBACK_RULES; } + public static void invalidate() { cachedRules = null; lastFetchTime = Instant.MIN; } +} diff --git a/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/RulesCommand.java b/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/RulesCommand.java new file mode 100644 index 0000000..1d032c5 --- /dev/null +++ b/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/RulesCommand.java @@ -0,0 +1,62 @@ +package com.firefrostgaming.rules; + +import com.mojang.brigadier.CommandDispatcher; +import net.minecraft.Util; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.server.level.ServerPlayer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class RulesCommand { + private static final Logger LOGGER = LoggerFactory.getLogger(RulesCommand.class); + + public static void register(CommandDispatcher dispatcher) { + dispatcher.register(Commands.literal("rules").executes(context -> { + CommandSourceStack source = context.getSource(); + LOGGER.info("[DIAG] /rules invoked. isPlayer={}, token length={}, channel={}, messageId={}, isValid={}", + source.getEntity() instanceof ServerPlayer, + ServerRulesConfig.BOT_TOKEN.get().length(), + ServerRulesConfig.CHANNEL_ID.get(), + ServerRulesConfig.MESSAGE_ID.get(), + ServerRulesConfig.isMessageIdValid()); + if (source.getEntity() == null || !(source.getEntity() instanceof ServerPlayer)) { + LOGGER.info("[DIAG] Console path — fetching from Discord"); + DiscordFetcher.fetchRulesAsync().thenAccept(fetchedRules -> { + String rulesText; + if (fetchedRules != null) { + RulesCache.updateCache(fetchedRules); + rulesText = fetchedRules; + } else { + LOGGER.warn("Discord fetch failed. Using fallback rules."); + rulesText = RulesCache.getRules(); + } + source.getServer().execute(() -> source.sendSuccess(DiscordFormatter.formatRules(rulesText), false)); + }); + return 1; + } + ServerPlayer player = (ServerPlayer) source.getEntity(); + if (!CooldownManager.checkAndUpdateCooldown(player)) return 0; + if (RulesCache.isCacheValid()) { + player.sendMessage(DiscordFormatter.formatRules(RulesCache.getRules()), Util.NIL_UUID); + return 1; + } + player.sendMessage(new TextComponent("\u00A77Fetching latest rules..."), Util.NIL_UUID); + DiscordFetcher.fetchRulesAsync().thenAccept(fetchedRules -> { + String rulesText; + if (fetchedRules != null) { + RulesCache.updateCache(fetchedRules); + rulesText = fetchedRules; + } else { + LOGGER.warn("Discord fetch failed. Falling back to cached rules for {}", player.getName().getString()); + rulesText = RulesCache.getRules(); + } + MutableComponent formattedRules = DiscordFormatter.formatRules(rulesText); + source.getServer().execute(() -> player.sendMessage(formattedRules, Util.NIL_UUID)); + }); + return 1; + })); + } +} diff --git a/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/ServerRules.java b/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/ServerRules.java new file mode 100644 index 0000000..f275076 --- /dev/null +++ b/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/ServerRules.java @@ -0,0 +1,53 @@ +package com.firefrostgaming.rules; + +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.RegisterCommandsEvent; +import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.event.config.ModConfigEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Mod("firefrostrules") +public class ServerRules { + private static final Logger LOGGER = LoggerFactory.getLogger(ServerRules.class); + + public ServerRules() { + ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ServerRulesConfig.SPEC); + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onConfigLoaded); + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onConfigReload); + MinecraftForge.EVENT_BUS.register(this); + LOGGER.info("Firefrost Rules Mod Initialized."); + } + + @SubscribeEvent + public void onRegisterCommands(RegisterCommandsEvent event) { + RulesCommand.register(event.getDispatcher()); + LOGGER.info("Registered /rules command."); + } + + @SubscribeEvent + public void onPlayerLogout(PlayerEvent.PlayerLoggedOutEvent event) { + CooldownManager.removePlayer(event.getPlayer().getUUID()); + } + + private void onConfigLoaded(ModConfigEvent.Loading event) { + if (event.getConfig().getSpec() == ServerRulesConfig.SPEC) { + String token = ServerRulesConfig.BOT_TOKEN.get(); + if (token.equals("YOUR_TOKEN_HERE")) { + LOGGER.warn("Rules mod is using default config values! Edit config/firefrostrules-common.toml"); + } else { + LOGGER.info("Rules mod config loaded successfully. Channel: {}", ServerRulesConfig.CHANNEL_ID.get()); + } + } + } + + private void onConfigReload(ModConfigEvent.Reloading event) { + LOGGER.info("Rules configuration reloaded! Invalidating cache."); + RulesCache.invalidate(); + } +} diff --git a/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/ServerRulesConfig.java b/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/ServerRulesConfig.java new file mode 100644 index 0000000..e0e74c2 --- /dev/null +++ b/services/rules-mod/1.18.2/src/main/java/com/firefrostgaming/rules/ServerRulesConfig.java @@ -0,0 +1,35 @@ +package com.firefrostgaming.rules; + +import net.minecraftforge.common.ForgeConfigSpec; +import org.apache.commons.lang3.StringUtils; + +public class ServerRulesConfig { + public static final ForgeConfigSpec SPEC; + public static final ForgeConfigSpec.ConfigValue BOT_TOKEN; + public static final ForgeConfigSpec.ConfigValue CHANNEL_ID; + public static final ForgeConfigSpec.ConfigValue MESSAGE_ID; + public static final ForgeConfigSpec.IntValue COOLDOWN_SECONDS; + public static final ForgeConfigSpec.IntValue CACHE_MINUTES; + + static { + ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + builder.comment("Firefrost Rules Mod Configuration", + "IMPORTANT: Do not remove [section] headers when editing.", + "Values must stay under their section or the mod cannot read them.") + .push("discord"); + BOT_TOKEN = builder.comment("Discord Bot Token").define("bot_token", "YOUR_TOKEN_HERE"); + CHANNEL_ID = builder.comment("Discord Channel ID").define("channel_id", "1234567890123456789"); + MESSAGE_ID = builder.comment("Discord Message ID").define("message_id", "1234567890123456789"); + builder.pop(); + builder.push("performance"); + COOLDOWN_SECONDS = builder.comment("Per-player cooldown in seconds").defineInRange("cooldown_seconds", 60, 0, 3600); + CACHE_MINUTES = builder.comment("Cache duration in minutes").defineInRange("cache_minutes", 30, 1, 1440); + builder.pop(); + SPEC = builder.build(); + } + + public static boolean isMessageIdValid() { + String id = MESSAGE_ID.get(); + return StringUtils.isNotBlank(id) && id.matches("^\\d{17,20}$"); + } +} diff --git a/services/rules-mod/1.18.2/src/main/resources/META-INF/mods.toml b/services/rules-mod/1.18.2/src/main/resources/META-INF/mods.toml new file mode 100644 index 0000000..d83ddc8 --- /dev/null +++ b/services/rules-mod/1.18.2/src/main/resources/META-INF/mods.toml @@ -0,0 +1,28 @@ +modLoader="javafml" +loaderVersion="[40,)" +license="All Rights Reserved" +issueTrackerURL="https://firefrostgaming.com/support" + +[[mods]] +modId="firefrostrules" +version="${file.jarVersion}" +displayName="Firefrost Rules" +displayURL="https://firefrostgaming.com" +authors="Firefrost Gaming" +description=''' +Fetches server rules dynamically from Discord for the /rules command. +''' + +[[dependencies.firefrostrules]] +modId="forge" +mandatory=true +versionRange="[40,)" +ordering="NONE" +side="SERVER" + +[[dependencies.firefrostrules]] +modId="minecraft" +mandatory=true +versionRange="[1.18.2,1.19)" +ordering="NONE" +side="SERVER" diff --git a/services/rules-mod/firefrostrules-1.0.5-1.18.2-forge.jar b/services/rules-mod/firefrostrules-1.0.5-1.18.2-forge.jar new file mode 100644 index 0000000000000000000000000000000000000000..ae2f9f9af1eb11bca1a6d7c458b269e55398118f GIT binary patch literal 15175 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 J#rb>h{{er|Ab9`) literal 0 HcmV?d00001