From bbcef5c34044ad73ed633244691341684a8ddb7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E7=A5=A5?= <1366971433@qq.com> Date: Thu, 24 Oct 2019 15:10:34 +0800 Subject: [PATCH] modify --- code/Flink/flink-basis-java/pom.xml | 239 ++++++++++++++++++ .../main/java/com/heibaiying/BatchJob.java | 45 ++++ .../java/com/heibaiying/StreamingJob.java | 64 +++++ .../src/main/resources/log4j.properties | 0 .../pom.xml | 2 +- .../src/main/resources/log4j.properties | 23 ++ .../src/main/resources/wordcount.txt | 0 .../main/scala/com/heibaiying/BatchJob.scala | 0 .../scala/com/heibaiying/StreamingJob.scala | 0 .../scala/com/heibaiying/WordCountBatch.scala | 2 +- .../com/heibaiying/WordCountStreaming.scala | 0 pictures/flink-lib.png | Bin 14791 -> 13727 bytes 12 files changed, 373 insertions(+), 2 deletions(-) create mode 100644 code/Flink/flink-basis-java/pom.xml create mode 100644 code/Flink/flink-basis-java/src/main/java/com/heibaiying/BatchJob.java create mode 100644 code/Flink/flink-basis-java/src/main/java/com/heibaiying/StreamingJob.java rename code/Flink/{flink-basis => flink-basis-java}/src/main/resources/log4j.properties (100%) rename code/Flink/{flink-basis => flink-basis-scala}/pom.xml (99%) create mode 100644 code/Flink/flink-basis-scala/src/main/resources/log4j.properties rename code/Flink/{flink-basis => flink-basis-scala}/src/main/resources/wordcount.txt (100%) rename code/Flink/{flink-basis => flink-basis-scala}/src/main/scala/com/heibaiying/BatchJob.scala (100%) rename code/Flink/{flink-basis => flink-basis-scala}/src/main/scala/com/heibaiying/StreamingJob.scala (100%) rename code/Flink/{flink-basis => flink-basis-scala}/src/main/scala/com/heibaiying/WordCountBatch.scala (86%) rename code/Flink/{flink-basis => flink-basis-scala}/src/main/scala/com/heibaiying/WordCountStreaming.scala (100%) diff --git a/code/Flink/flink-basis-java/pom.xml b/code/Flink/flink-basis-java/pom.xml new file mode 100644 index 0000000..82b282f --- /dev/null +++ b/code/Flink/flink-basis-java/pom.xml @@ -0,0 +1,239 @@ + + + 4.0.0 + + com.heibaiying + flink-basis-java + 1.0 + jar + + Flink Quickstart Job + http://www.myorganization.org + + + UTF-8 + 1.9.0 + 1.8 + 2.11 + ${java.version} + ${java.version} + + + + + apache.snapshots + Apache Development Snapshot Repository + https://repository.apache.org/content/repositories/snapshots/ + + false + + + true + + + + + + + + + org.apache.flink + flink-java + ${flink.version} + provided + + + org.apache.flink + flink-streaming-java_${scala.binary.version} + ${flink.version} + provided + + + + + + + + + + org.slf4j + slf4j-log4j12 + 1.7.7 + runtime + + + log4j + log4j + 1.2.17 + runtime + + + + org.projectlombok + lombok + 1.18.10 + provided + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + ${java.version} + ${java.version} + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.0.0 + + + + package + + shade + + + + + org.apache.flink:force-shading + com.google.code.findbugs:jsr305 + org.slf4j:* + log4j:* + + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + com.heibaiying.StreamingJob + + + + + + + + + + + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + org.apache.maven.plugins + maven-shade-plugin + [3.0.0,) + + shade + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + [3.1,) + + testCompile + compile + + + + + + + + + + + + + + + + + + + + add-dependencies-for-IDEA + + + + idea.version + + + + + + org.apache.flink + flink-java + ${flink.version} + compile + + + org.apache.flink + flink-streaming-java_${scala.binary.version} + ${flink.version} + compile + + + + + + diff --git a/code/Flink/flink-basis-java/src/main/java/com/heibaiying/BatchJob.java b/code/Flink/flink-basis-java/src/main/java/com/heibaiying/BatchJob.java new file mode 100644 index 0000000..7d3a48b --- /dev/null +++ b/code/Flink/flink-basis-java/src/main/java/com/heibaiying/BatchJob.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.heibaiying; + +import org.apache.flink.api.java.ExecutionEnvironment; +import org.apache.flink.api.java.operators.DataSource; + +/** + * Skeleton for a Flink Batch Job. + * + *

For a tutorial how to write a Flink batch application, check the + * tutorials and examples on the Flink Website. + * + *

To package your application into a JAR file for execution, + * change the main class in the POM.xml file to this class (simply search for 'mainClass') + * and run 'mvn clean package' on the command line. + */ +public class BatchJob { + + public static void main(String[] args) throws Exception { + + final String rootPath = "D:\\BigData-Notes\\code\\Flink\\flink-basis-java\\src\\main\\resources\\"; + // set up the batch execution environment + final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); + + DataSource readTextFile = env.readTextFile(rootPath + "log4j.properties"); + readTextFile.print(); + } +} diff --git a/code/Flink/flink-basis-java/src/main/java/com/heibaiying/StreamingJob.java b/code/Flink/flink-basis-java/src/main/java/com/heibaiying/StreamingJob.java new file mode 100644 index 0000000..5c607c6 --- /dev/null +++ b/code/Flink/flink-basis-java/src/main/java/com/heibaiying/StreamingJob.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.heibaiying; + +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; + +/** + * Skeleton for a Flink Streaming Job. + * + *

For a tutorial how to write a Flink streaming application, check the + * tutorials and examples on the Flink Website. + * + *

To package your application into a JAR file for execution, run + * 'mvn clean package' on the command line. + * + *

If you change the name of the main class (with the public static void main(String[] args)) + * method, change the respective entry in the POM.xml file (simply search for 'mainClass'). + */ +public class StreamingJob { + + public static void main(String[] args) throws Exception { + // set up the streaming execution environment + final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + + /* + * Here, you can start creating your execution plan for Flink. + * + * Start with getting some data from the environment, like + * env.readTextFile(textPath); + * + * then, transform the resulting DataStream using operations + * like + * .filter() + * .flatMap() + * .join() + * .coGroup() + * + * and many more. + * Have a look at the programming guide for the Java API: + * + * http://flink.apache.org/docs/latest/apis/streaming/index.html + * + */ + + // execute program + env.execute("Flink Streaming Java API Skeleton"); + } +} diff --git a/code/Flink/flink-basis/src/main/resources/log4j.properties b/code/Flink/flink-basis-java/src/main/resources/log4j.properties similarity index 100% rename from code/Flink/flink-basis/src/main/resources/log4j.properties rename to code/Flink/flink-basis-java/src/main/resources/log4j.properties diff --git a/code/Flink/flink-basis/pom.xml b/code/Flink/flink-basis-scala/pom.xml similarity index 99% rename from code/Flink/flink-basis/pom.xml rename to code/Flink/flink-basis-scala/pom.xml index a4ef7c3..8e57e57 100644 --- a/code/Flink/flink-basis/pom.xml +++ b/code/Flink/flink-basis-scala/pom.xml @@ -22,7 +22,7 @@ under the License. 4.0.0 com.heibaiying - flink-basis + flink-basis-scala 1.0 jar diff --git a/code/Flink/flink-basis-scala/src/main/resources/log4j.properties b/code/Flink/flink-basis-scala/src/main/resources/log4j.properties new file mode 100644 index 0000000..da32ea0 --- /dev/null +++ b/code/Flink/flink-basis-scala/src/main/resources/log4j.properties @@ -0,0 +1,23 @@ +################################################################################ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ + +log4j.rootLogger=INFO, console + +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p %-60c %x - %m%n diff --git a/code/Flink/flink-basis/src/main/resources/wordcount.txt b/code/Flink/flink-basis-scala/src/main/resources/wordcount.txt similarity index 100% rename from code/Flink/flink-basis/src/main/resources/wordcount.txt rename to code/Flink/flink-basis-scala/src/main/resources/wordcount.txt diff --git a/code/Flink/flink-basis/src/main/scala/com/heibaiying/BatchJob.scala b/code/Flink/flink-basis-scala/src/main/scala/com/heibaiying/BatchJob.scala similarity index 100% rename from code/Flink/flink-basis/src/main/scala/com/heibaiying/BatchJob.scala rename to code/Flink/flink-basis-scala/src/main/scala/com/heibaiying/BatchJob.scala diff --git a/code/Flink/flink-basis/src/main/scala/com/heibaiying/StreamingJob.scala b/code/Flink/flink-basis-scala/src/main/scala/com/heibaiying/StreamingJob.scala similarity index 100% rename from code/Flink/flink-basis/src/main/scala/com/heibaiying/StreamingJob.scala rename to code/Flink/flink-basis-scala/src/main/scala/com/heibaiying/StreamingJob.scala diff --git a/code/Flink/flink-basis/src/main/scala/com/heibaiying/WordCountBatch.scala b/code/Flink/flink-basis-scala/src/main/scala/com/heibaiying/WordCountBatch.scala similarity index 86% rename from code/Flink/flink-basis/src/main/scala/com/heibaiying/WordCountBatch.scala rename to code/Flink/flink-basis-scala/src/main/scala/com/heibaiying/WordCountBatch.scala index a7ec2a7..ff52ae7 100644 --- a/code/Flink/flink-basis/src/main/scala/com/heibaiying/WordCountBatch.scala +++ b/code/Flink/flink-basis-scala/src/main/scala/com/heibaiying/WordCountBatch.scala @@ -6,7 +6,7 @@ object WordCountBatch { def main(args: Array[String]): Unit = { val benv = ExecutionEnvironment.getExecutionEnvironment - val text = benv.readTextFile("D:\\BigData-Notes\\code\\Flink\\flink-basis\\src\\main\\resources\\wordcount.txt") + val text = benv.readTextFile("D:\\BigData-Notes\\code\\Flink\\flink-basis-scala\\src\\main\\resources\\wordcount.txt") val counts = text.flatMap { _.toLowerCase.split(",") filter { _.nonEmpty } }.map { (_, 1) }.groupBy(0).sum(1) counts.print() } diff --git a/code/Flink/flink-basis/src/main/scala/com/heibaiying/WordCountStreaming.scala b/code/Flink/flink-basis-scala/src/main/scala/com/heibaiying/WordCountStreaming.scala similarity index 100% rename from code/Flink/flink-basis/src/main/scala/com/heibaiying/WordCountStreaming.scala rename to code/Flink/flink-basis-scala/src/main/scala/com/heibaiying/WordCountStreaming.scala diff --git a/pictures/flink-lib.png b/pictures/flink-lib.png index d43cd3468c2d35fb0f5aca5aa976b03fa178c18d..9d76b9dedb91d450274965fc4e0c27d8e5190dc5 100644 GIT binary patch literal 13727 zcma*ucQjm$qBihRqD7BRjNV%iof(~|2~nd)k4|((OAwtPAzBhGqDF~2YV-^dJ&aC7 zFT)sPzDeHqoO8>$_kL>`_L@KUT6^!`ex65yp}r;=2@?qb03g%WQhNXZ;Cf+?b%_YD zzva^nWwC#Vy|v8!008p7-yfVTL2_p7msI}hX8uNAPX2**zK#GRPgid{KYvFn`mc)s z02@GCP1!i;&0cv2HM#Q!Lct$T1MD&)fAF8I?i=-#osWA&rbrJkqHHl&(E;h zc}y!4<|ijPZ4wGPaS_I__)9%8$Fo+ekJ6+Qc7|E&j5kYr2M`{Ko{DbMw-(#DTDu#B zzbEm&UuKa1A%M2b`YRLQ20m^Sn2nMsR^kOoyHMy z2Dd6iLgJ@pkV2n0L(u8{=qzZB1rBc1p;mkjm6tk|u)g!1==eTYKcpNL0Dyuu*DZm1 z=cmvYsip_D0XLr7{zz=i#`vC*KS_Lehlaumq@uN7Q~R~bB4OahQM)ih?m@C5jUuam z?YHI7OlxwS(e*%lG@~L>`x&t$XOZ*EJ!RWy*Td~%MxqWMbm&z>VEpEQ)DH2eF>~++ zvsm=yZ6oHOdH7p6rDFHIrUDA4hUQs--vT1c`3uhc4lo6)R(rp;&^I|j?biZ#!hkpg zHU}NhOW_Qm;1JgQS?z2wvGyEI7w(uAM&Ts`-qg1`5oXAOzKqAI!hx~MJg)*JPEUx7 z4Ye#(?C~9E*J$MoWi3`hRZ9jYQ{Z;7#o{!QEt2nudW$*4ER@Csqr3Pd6|a9tY=MxH zuAs9|E!UE8qvwjsc9P5!q&0^)$H{6Z_iA|gqHRM8%FuVw_!__HceaYVE_Oi;JvZBn z7mQJ`Zl%odFBl@$ny-g4-m*Bp%n#mqEyO=8be8J)(uBWax9>|K;hV(#-tU6$9nJzZh&*MU z%^IL^+oG1QUZ;XrQc(#0C@XH%eMr{4hhH($x(F?bI1Z<`X}Ox}X3NQ#ka1+kjhyXs zRn-tEd#LYlUr37mg_zPzDssF`*{ z+%Mz=Oi3l}Q=e#u{j})QN?Xh8p5t^)w`$$qkrS8UH`<n27Xp!m<*gV(0q!tXPncRIA@{k`zOaf0H5~2^v5G;THmea3t!Onl?Co};h0}0oFu_xbs#== z=F0<=qP3OI;J(O2OlfoaWap?Ewb#AJ2TMhgRSOZ?Xw+w*k4re-0%y2r-h&Fs_ZD;$ zE;QJm{?hnPcaWibAOGMtD>n7g4MKrVUu0seK=WSC!)<)N!R^E~P=eb#8Bz{OY8tk@ zn?YSf9xpdY>L>W#&M~DmrF_$6Cu|^>Y;&4WX5347UFYBW%pFfFYpq=UUAe!J7QKsV z1nu325t51I57qO56kmBClH}hr&V)poR8zXl4b#fukXUJni6-Xq7P2BQXD;Nv<>LXv z-M(GVJ8+d5n7Pt?>xSpo1rf9u*CNP<4?vp9frD=Z7N05ljyj-m&oOh}VVE9j3ruKx z$ben4eD4C)c;|ZU7az0Gz-OWnPd_UTFb&w9JFOo+lZlx7+zXODlNHtUX@_`9Bn-2x zJhqR``5~)>Z`QFWx{-d{%06eUHXwkEYZd2ICwfft(7ZudDpQSqoCu zs%JUSx|tU*9`|bGDp8$)e5Mrf^m-+_ra!*(&lJwx6^MRl#aY^|dHYRYC+Q&d$H@$0 zWbRhnJ$l^@{`a>?T`b1D=*%xnY}&z^`YYoM-mZsn6~w6bY5EP`%QDE*!Ls1*lebxF zm%>NBUXR(+-DY{K$YL+!&M9mfHYEOdx6%!WoBR=jICCtVTC)N{&>)!zIA|}_GM7+T zEb$wJHR%wUYUv>!lu8juO&RQT6v0&hTnPz{ojLe=#Gbax74ahV&?E-}Ni>}aQ2oqI zb#)<>kpHR_j(iBdef7y^zV~SR_@^%EKBjN$J`2>r-@u;KD_{-G^#Ws6VgFd^QU2Og z)sTeCBnAL(MLJwAHFv{#q&E=JSM}|gY-PT-U2K{|;8sAc2%Fw(h~D$GgUTz_91y6F zClPPKk@o4~>^DMmg*J5;k)m-0LA~;$6sdwJeg;;>lhS>*U(WuxG<+`?^f&VOoS4%l z>vn1lt z^!r|ZSc$XnoN!}U69NAs`M4%}c3>3r(WCLu(MV4Rb{Tw*Y1v-6xPF%1PJ?!S91Cen zNuYAz|n>O1&py)9t`RNt+82TI4lBQ>^ z{HGaDlSjMsxuNZs{xQn-2A0$i@>6bG$v({35r46klbG0)jTJ60pbLHmVc8Wb=~r@i zpT6u@Bu7}@|BH{t!EiBqNS<1yv*wt>>Kb=q&j3%%B!ds^Y0h(Nr>{81-4GU;941H_ z>&EEIohZDB`a;CON{|j$7q;+6lqLwhu>5f5ssU~b!F~P|*{Kr@K3jeH6cryn=#6w< z&NAQy-=}%7$3DCXEt_X3Wq#gqd(Z3B*2mz9ZaaBG0zJ%A$y1N$strRWp-3lnh{v82 z@QGvkMRno}RZHyCS;adw1v9&5DDG z+FkKLWACg>$31@bmbqb$6PhRzr=@0@k&+B{G7EiU9EEq*PvSB~=omBZ9M5iq4jB}? z$-M_lxaFT+TI_)EBw?zcHLyegLT4oncp$qrrT5SxS>afn&QdBAx~^ejsd7>aosCPP z@hx@KDNQ5Tm^l%j0!gBnFXI|hk%>31BDq6j6@G0^VYbj=yr|I-Tf6SdUq2xIT@w;g zyq>V52QQW{)YHcHn=kaRN5Kz-Z|Qs(35ZB=93STDC_IO=bE$pTwr8`S74=c#@yrd} z?Y7QZ`3TqNdCVd?qn9o_R1SX=|!jX|XH>Tm0W9B?rj-?OpE1PC;a zlTD_QYlsQoC>>|b#%Wpc66dxqdMKkDZg%4aAZ?<`p$wtR9os5EFW$PTsO*ok^XS9J zjmp8~-JpaoF-~_9)oPLvwIqX9l5$pT9_y8c%aYAqz-{kQf*=e$4_t1JrezLepl zXeh1u8@gB@^o9u29Kc!{z_Bo(?G-O@1Drik?jT&IK7e2b!P^^tW*xjJLt`)0Ta-H< z40FEpv?t;pEiqK)Z#-Y^;(_-~aD|gY=bRs90VClM>uSwGP4pua6!>WG7y9~H28aS3 z?vwaqgMc8I{2ptX=hxbZrxZ^O9~yl4uwLvPT%L!D39V6jQ@Db9rx-SRRWWpKvza@B z$FQ=O99wsDMiq(@Jj~+`TR;8)3FBJXd!4*=ZW<)aeHfA2dk3JEb4@PXCv~L50%-CX z^I(RsF2D$fGF&S}tA`mElXzpSk#-xQhZ{SBvz+7yoB$2Z_6~*KN;bh>yR*Ozx~nk) zrA=9uEu18-_T4-bq20!LR@!O&H{J88^waWNV}frN7yTqXPGkCioM=#MbA{h>y&p)W zw4%l#MES!mXmZhQ$5pMx?78dH z!T0*aT{>npq;Pwm#Ew!`H=iwD@5fOFh--dMu_jDZq8zcU&FR|uH1tb3TTLjY+nT24 z_Ddl8wf{X&p?85luA;lPA@of?>WL(Xv2d8{CUU}x;!88foXI0!*u9D&smKtR`&HV zt)a_~Hb8_Q?SUHzbYR1PTsbohUcV!q$&D&nPmRoX7@{#l6ID6Xj;sfWuND15oY%H& z#bq663%Qb9L}0Z(>ljsBXyEO*p=k|GkesAtZs<9GelNA`Hnf*W)sfG|*Hwe+xvIKt zLs+gUe$;)JkgFEwubAwND)e0xNfILP>|}i3f;6*ZU{6`Fy-P634o-|hr5(&iM5>%9 zI?mooavsMjK44Ee=ei^!UsnWjt%LCeSN|AFe`sOP5C(vk##pj;j&opTH z69#)m$FAG_UiR!8Tskkr6C)yiHFjM#-_v&Fb&5#Qkq??%=6kn0nhP}P)PXWN*k51H z{U|iZusq%fevCi$*cQP?lyq77U4)c#>|BhLvT(w>^I%ml2P${kwf~Vy=K4EJ=>0z= zXPU?{`~DwI{)`_sIqPS;)w1)4HbE@Iiow+c$0g^){AmH}GsrdWkcq+98B zuZeNL^SeXt+)rmNnVhQEAcQ!}IGBhS_xw>qo9rB~H;tfPd|gWn>;G+cx!}X=o{9DrC;fe3Z$K{o{4W51q35te(1R%S~-iKLO-S9!=UEE#fSeQ zvimP{TiANPuX-nGG>B8>V|zwEY!o$BGAZo94F15PDa@o^lBd!NW4Sn)6-HX>RHZ>ug4vD?u53ujoK4xt%i&*)_Po;0?&i+Aj z1!U{%A>+d5CSCD0nH0Cne5+MIuGCbV=;nhQ#3AdLKkk>}Ks0~Q%RLM60Z-{51 z4N~5>MtoWWYdG*RSiMIL&y;TQ0W`VZZp^I`DZd~9jJ5So8uAi39rW!UZwiKGM788*=`qbWVgkvkP3c7U!^k}m$wYI1?|6iF{7P+d!=vt~z1>mS z{r7b>72!mZrM)@9BY{t#G~W{F$RF_xNN`#gah7?zyr>!mma?E=AG|-+AjoX~0c(kV z3Ie(^i~_^T39xzI;gA)$&&75;y1J;P0O~nI5Y@oPFkH)Vm45B5cY`BJ3qU=VR#22> zduukOf&1ktDff}l4`b^SA*866BeWrIZDJ$y6$1e9x33v8=Uy>cN>cY@s*UUJETL7^ z|Dbwu*()>8H&i*od`UaaNLI`??VSUg6+jRBN<0eXQ5`&gcwIbF2(-`akJ_t$As57O zbk74fPeO&_p#b=ie%G{w*p1$I&P(5KJD`*FBXOVkE>wiw>UYQUy`(%t;3@!%y3gn1 zvDciPo?JsA%N^PG>jb;x#xHiWEtD){UV7$T#@ir0_h!_S@9KG$@eJ5ecC$*dmEDCs zIKbcb_dul%|I^c&sN9{E3Cz~pxHS~L#qopF!epxJJ-JQwwB#fs?8m}&hw2Qe> z7TD(mGd+15(;Glenp^6;ZP%^8xW_BiJ?+Z}qyvBAP!mO3@9`qoA9rJtbP+d zVq9dk!e-R_i>nxvABDAVYojiAF%;PY)gXXvY;)n)qaDaS!(+{$6Znuk{Cmlwsl<@} zKixaSg>~lYm2v2``TBh$f-HgTnWhZJvx)=;)| z-mBBpGM&Lnm0Xvn{O>1e7rARv<(RT~I~aLnVq# zNn&q2R-Mve49Cb`ZTdvgA%@`HCE3PUiOQ zq&PUUtO-}QG1Uap;*}fLGIZ_+no^3p3WBi|N(>eL;WVC#L?(K~Ee2TYkeZeguDBNF&zTE=FoiIFEWw!nWM{V z0r-1u+6VTtm(TbQra%QE#iBnuG93*0!(H`o%Z-c3jtp4;t&^Y8nbRx|pB8+GH8kB& z(U@uHjTZsu>tr>C(YB=D7M%zh7jjD9Zk%8>!D&gu{DAr-4elqQxmhAtfUD~h zUqzJy#931zuP5T<=zqfU6L)REpz6x;tGi6yaVHXCkcPO_*Py#dr50$<6aJ|4P?i)N zaO-z+;UCe^xvl|)xHW~y^w^wmViWqB*ydg`texZW(%$RjIm=JkOfiI0bla<^G=dXNjA=`hsro!)fg)!K)U4XmKLb1G|WQ)Svy0Sw89h-1>4 z=#QjvQ*c@kdd>CIG3uUHh?;9Ds!uEAd%`B|#Qwf~uGD3>{eCcK0#}As&+7h8XkUVw z8QbUH!_u~?(+(T@R2KtscABKfm6|SC(|!?d#9eZss{yp_O{{1~2fsSe9L4z?uHw`Z zJf+iQlL5z2?Ua``JbUMPgRr0Hb$j@&@ns}gtzR4MD{zny*Tm}apqwMj<7et}Qm{EB z7O~M*=0`Td!j>uhkJuaET#B2LsM9uxwcQp1%j0_yrLs!3sXIz@ttsE=OiZ#*brH_% zCwZH7WI%%O2i4L?0j8I%og?h>T4+=Bm8L5s8lrGHEEKEcagU9%lWNtm&+@)n;-q;J z8;4zB%pE)af2la-uUvb1_FuWS&(APoL(D@EhJU`$cJ-R%*N-rDYS=>b9TgO*a|_`x z)1qDZji=5$(8u@zg(=|L*{*#GV9jOdW?Lh0EN__HqjRea4ak)q5V;F~vSp>@kNQR$ zyYx9M6=J*ei5OkV>Hhf~VsKP_PzFWhSw#e)AF>APjybsADYz5OD?gOMe~6;87_#+L zNDQ1n6v&)k)gCJ*aO>gxOcgr}kAuG{fPx3tJ-Qi+!&TJwvzg6}D7}9vIwy^5Fy{L# z2l?%)=MHFBKa2TjBDH|?urYD$Lha}Slmhj+sc_JKga?dTcYV~1c!y-2cP%RY={^zf@+X+{sKWEfDs;~ukoUQ?=C zE{`&KTUW@>9p%4dMXAi!2^qOb3REv?XaVW9-nL{X)U|gHQNo2se9S1 zVNA4Pe*6LRX!o&6_JG|m4|NRZeDY-@$LY4ceP&|^*GzWp9oN#!FH5P)uC1PM=P#FJx)ao40#V_KS4A7DN{}oB z6sod+MQ5`=P-vsmb@_?6K0%}@0mw;hZSxv;#^&!R`rM~1JXPuP92-H0j?nZrW|1xj zzkA@S)p#U2Zf~S!(*)%E|K#uRti(U!<}Xn*@_Yt2taJ36(>wqbzATL{G+CY`KXE+< zYu=U)r#ej(e<(j$>qfr6S8SBPR8agUYZfp=$1Dsy_`_a3b$f3ws0i1q9KAALK+49} zM<_4?Gq>X^8OlOWjs-Ef6Fx54EXKJPipHb1fZVO#U)90$*Cl2Df<7b_+8iWa(e_EF*+cVIol{~r}c!t1Ua?edwdvx?C;WR(OA%1wD zQSXEG|K_gm>VM+yr~klRAOb1ah@nXhL!#N=o*#W;o<;7rqnht26o4@n=WM>%C&R0M znVBXPD)SMku1=^(rA=;^cqNjmiI+8~5A@YF_J|lC@sURp2#(0avQ3;b>uOtr5>F z6&_-eal!8?P!sHQl|z9FgB<5LV$k1MQ#5l7wnQ3Hprc@#0nslGa;0CClGTo&f)Cx3 z0x>4(o=UGf%Z{6e^jbRDph5>+gB2_cVuSa^(?lYtqk~faU2rV6nx(Io0npekzNgpM zf7oOjw^+xZuXtbgWSpP{u$rADS&v^te z3u3n5wlY$hn|;|?=T7#Z)#HRbgqr*h zm^p2O7}O%@?>6f#|7YNOFr9zEj3Vxg_dd`6YHNcLt-MuyDm_PU*zss1;riVM+mRJL zZCsN*zR%H7Q9sYD1^GrVu8T?R_9qO;jJ53=5J|NZAvaKo;a464u8cw8D_M^9#Ugv1 zx!M8LRaa63InHJ?9pppQFRe}jIWCk4Y_o~KqfJTKR_<qwNKof`Q)AON4X9PGqa2t9~N{skXqYZXmKaVH;}~pO7H(zsA2nhMM0ou878&lz|8B;Zy`a3lqG! zyE3oU*h*m}Zl-WEc-tB5;`E@iF$H8h#9CZ&`2?-goa&4zJU_|bmG~9)?8dJeKMZY5 zS^=ZM-(hb*XOE{EnHFlaZgs&_T6*+NE!c z&uTl3llbSWz1o7MzupD*MkJiv@tJIYOtJeR>CV^7Jykk_3jlzY@AnqKLHr9&3YNgY zW=c`TRBXP2`<@(|KjTertvyB*3cU5?JgAE_@WE@W4 zJZN>#3}zsrmz?vlx|tKK02KJ6*Y^H^E;5XmzAV#7&X?zVmWR@uSLKCo!|S3T=e*6~ zIzjS3x-?T_>T?EC-|2j`(Q7Suvs1HkMcwv!I=f2A697dsI{XwHJu!91%<@De;KjQ$ zpHZ~?R}^NC4Gj2>W-`?LHqM3b87-(|+`T=oYis0_ZRlms&cTbq>%9~eYVFQjoP52k zHRF}jG4D6Hb4}Hv>X7mtr+6Bav;`4>)(kal(5u)$Gs1^g{eBmApQq)0&N6v#-oDA? zd4TX7o~qgHf3MfDcf0NyRD~zX33tms$>4V5FeMpk-c`o|tp8`cc6yQVP!dtZ{GIep zjJ+V|3)AU4+|=p-Gh-!&^sJt#{gc6BcN_RUoY6vg)I|6;VhR-2wa_g+ntm|*5z&%a zw0(`7cN^;m*DN^&hxl+Jo##PI*tl7g!7l#Mh*AR!XS~*%ZAvZjx{s5CK}jCas1YExZi+6zDb-+PYtpCJ*h;K^<+) zP}g3&7aWP|^@(3_EA?!F@cMF&>kWitCzK|wJJ1=I=h^&U9G|35Fc2Bw!beJt1;{G0 zAL6NLzT=ZpKXpVUbZICA#eZ}~M!l$cbj?vb?16G*&g(jQJI_ZRgO`l|3``})P@G)< zNZI5jX-dP>mrf+IMNf<7?k18CyBLfn{U1T;p~CN=^lk1HUW4y5@QD3M zUFeAK^XN`2sd=b#`BCl~j~S9JsY@Q|Jm`+YBkeUvXUx zJ?4=n?~InmyW|e+V3%{iW7lXUC~m7>@+5 zKZU7I9xBw{{l&NFkjT^a!q##zpiQE_8EX z<)5mmC*@`GGTyTZaP0j*ioZSU5hKL(uc5&!!}1)KyoG_r_S7&@bb(X^oB|>P1zs=J zxSq8yfLOGzXn-qwz~-HBtMlfdr^4(7v)|k05lA|F#xUK}BUnY6J_SWMN9(HuJ?f7h zKSsR6K4Udt+50r!^!Ls{Y9l=Jx9K$5f=;ligDOkOujxm>8IHnZ)4M0ZXuhkEpt)NR%A+|E@<<(Q2jSZ~;5+{rJm zvr9%C2^?e{l)&4Oag9~1v-K4xsFh?CY6Tr3>#{y^&7PpxE2nYMJo)M%E0xPal=|X| zf7G#R({T>T8X)$`My>}nNEQI2U(dMb$tK^51M)f=A|>EK@daa|28i*cud6YS?Vb6B z5$v4F_=R{=vS49r&0@BgohIF-bjsuKEXejTeY_`xDYEXHDvs}n_^V1hBf`0=$e8wj z-|FvByIVWl|M8&8KmvDu>Xw*$&RAM!^h^-u>wAwU|1LhI=ZR3?M~W1i~PPH1&xnb;1q=iIf9;h!0dn2^}9SS*2p?% zvsAUT#WipD>(DTYdp!qaSLZ=zDZQ1i1(qqEu1?$7szov^?S5fD!@T-*#btr?AQget zR)yFrC!^z=w^WtFEOU9eIuU$Yj#|22%%dts1e;kmlKI^;S z6=XyZ$zc$veMuA~(AogC*@xOk%0%SO3p`DPzb8s5d=f`vukAs7TqZ?a2Lp~wA)dVc zrbGO@d~W(auAO`Sb(5|CkIno94$hCT-O*}*A$!sl)#c@A@V9Gx6(SY*NdWIq(W&D% zdE%mSF!O4m!u+CTuNz6x@Xiu9^xQRp-i1A`wNqhAU$xpnIMg?{Ux-Po(sv;a-22ji z-uqS0MT>+GS}M_8viyTZXMs^p_?H$Lk3lWdyK`qOm-)8xGkN_&0$&QM*>|w_$zlUf zvp2arH6~u#*3vfRBdy~({m(s&C&dLy9d*<9I8A5H4BkC<#h!_!W7V}!kZ;ehUAt&D zaB^A?1U!fnRQmnU8_@v;H9~DX)7xIw78F|NUU^46Z=UVHJD@x_vNkYL;)t2Y#)s|6 z>r+?s%wWjS0C_{(+RHGOc=yVXi+ue4-!=N0?`_#M}oN0i{q3^_$)Xyt}-6g1yZJ;Aonoi#*^ zIZbMT3~tJcuZIp8q87_IDHW2s_TgfZc*W99kW^=t4TDCn@@v}8tGEBnRGm8A&bo$s z7Rl=B+Ga8m+g?ZH^FdsJ8Qez8NY2TXRODb_KlN!ro^}fAq-x?0Yi!(0%J?i8+y7i} z^BfTUbBW3<7iyrD8<^`3Iy;%YRyw|6ZI^_|bAgYe1^{@{=%`{6uJeOGQp2dt^4ITZXy4%?qi!S_kB%rsoHGKTd>A5l=q6QqMwbLV2* zP+^TWA4fTL9+a<-oO~ftJ;h%-z3EGY9h9E^w?Sz!VSsaT*HPK#YzjxBeI2n+*yDdI ztK#{&u(fcn*%-D{$(kEA!Ls;Cw;3cEbb_C#J=5HiZ6NmgQ$+7bBSP0z@hu%DBbNn#{H~<9dv?+0 zv8FuFrAz7pT@3HF2E}0~&qfvn*XO2#`S8^d^u@^&Vlzk+2h2ez#%9$soy{aNC;ahH z0wN#5w4d`G+N^8cHEk?O)x*`9qgP?f^g#GY>zIZ35!feOg+DM>x=(m;92l{ z;Q4~}`X`|35&L-kY-Y4mn$C?U&|s{YroA6+);_B2`6rlirL}93L`pV0E0szs&B~oCu8td*YwPB)$J@n7$z;Qpzc$@B8Xx&z{bjFD_se;eKLK&b%;(cfVTTXHT&dpDS3pw4Z-@*?5kVHcVYNhBCm#xw0IfD z-4wVa6L;}QQa7T4qEg=U6!S~*LtZg8r!I+$q)xt^cN zCyEHm?$aj)>>sUMkpRPT&Xk2>QWGK~+u)np)S!ONAk;vW-0OB|f8`V6qrTG3{5n{3 zts43)Vcm^~PP=x2s^MT0=^gG{Q@S{!G~Il@xpQ{u{WQh2`S~yEn%|YP`!I@UF-$x> zbvX{I=Xps+eNG)ny>3iS%COGIs6`K+yz!p@q-N@Gd~C(dI{4VOxxXW~x4b+a{mw;f z8_W8^7;lb^6PmnbNAg?~*6yk>c*&R#xIwbfWE6b2sqBrCT8AP9Y`C84cisD|PCJy> z&E4!>c>D2P{@rXj<)LY|k_Ext7)))`6rQEj(+E(z4+PW>7bQ#%Ypjv@=Tx$TQIWHn zYa%4QYsw=~HD~{Wd9LWtv<7UU>l-R#^rckgy zY7&r?#Y&Q9nSJ?dKAU zLMQx&N?zO9IGQ(0cvw{Js0(7LEC}bQByP%9Mb-jxX>(ZKCTXm;i3pH;^b>JV>r6RE z$aDgg;G(9{4K=s1cYuyI+@gI*+gH%Q^%OF!-Rr;TYL%ev;7a#}@xfT7c>x4Ni^p{s zP8zw0KPCtfxeR@$|KpPUSmirhI>hV~h}9fF?!R!Wa%!i7^7umSLWa9zO#GiTU0F@r1atuz%4oUTe{@psVe(t}nBQZq(5S2S9^{N6f zvnzO>1GLN*Sth(VV-P0B-WQD`2T&_#5y<-!9cZiHn?_yF<>nP^#~Z&^Rz!X)9Gb!3 z@e=TJ)7{PH5g*H0TfY~!^o2FbeaX00XS#QiQwAYLaesAOl@gUa$e*NTtJAw;@R2WH zzQ1%-cMC0;-L1J$GRL@qhs}0>NgNCzIAb~d-6!R>39`QBOmjuvtMXSpi;1Dq)rsP7 zh;sycUgYUwokgo}2s9~Hr&Djn243H>%`N55hew0kx#wyVH_H7g>a%M&r0dtX*(k6E zqwbKJ?-gJRoY?k{YDiC<)F40Gq1+Gvv?RXZh8KnrJ$Dv@T;t7LdZb3bifajt~)Vj)t2`gLa~fP-=)3tx88R*Wg;1(eDE|{(IYl^ zvw6cp<#z9fCb6li<*uy^!Ie7I7=s4NlH1crH9G%OW!4S$(Ps=xEEV)uA9UQdM&M$Q rf5PpRwaL>hoNdf|c7zo-2H5xJDfrg8BPsTus{q>S`fAlGw$c9&8R39? literal 14791 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