From 441ded118b0eb13fb08b83a491ad75cd2faa1181 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Elias=20M=C3=BCller?= <elias@elias-mueller.com>
Date: Sat, 27 Nov 2021 23:06:48 +0100
Subject: [PATCH] initial commit

---
 .idea/.gitignore                              |   3 +
 .idea/artifacts/BungeeQueue_jar.xml           |   8 ++
 .idea/libraries/waterfall_1_17_451.xml        |   9 ++
 .idea/misc.xml                                |  11 ++
 .idea/modules.xml                             |   8 ++
 .idea/runConfigurations.xml                   |  10 ++
 .idea/uiDesigner.xml                          | 124 ++++++++++++++++++
 BungeeQueue.iml                               |  21 +++
 out/artifacts/BungeeQueue_jar/BungeeQueue.jar | Bin 0 -> 11738 bytes
 .../minecraft/bungeequeue/BungeeQueue.class   | Bin 0 -> 2399 bytes
 .../bungeequeue/command/MaxPlayers$1.class    | Bin 0 -> 1957 bytes
 .../bungeequeue/command/MaxPlayers.class      | Bin 0 -> 5922 bytes
 .../bungeequeue/listener/PlayerJoin.class     | Bin 0 -> 1439 bytes
 .../bungeequeue/scheduler/MoveToTarget.class  | Bin 0 -> 3114 bytes
 .../scheduler/PlayersWaitingCheck.class       | Bin 0 -> 2130 bytes
 .../scheduler/QueueInfoMessager.class         | Bin 0 -> 2334 bytes
 out/production/BungeeQueue/plugin.yml         |   3 +
 .../minecraft/bungeequeue/BungeeQueue.java    |  47 +++++++
 .../bungeequeue/command/MaxPlayers.java       |  95 ++++++++++++++
 .../bungeequeue/listener/PlayerJoin.java      |  16 +++
 .../bungeequeue/scheduler/MoveToTarget.java   |  36 +++++
 .../scheduler/PlayersWaitingCheck.java        |  29 ++++
 .../scheduler/QueueInfoMessager.java          |  26 ++++
 src/plugin.yml                                |   3 +
 24 files changed, 449 insertions(+)
 create mode 100644 .idea/.gitignore
 create mode 100644 .idea/artifacts/BungeeQueue_jar.xml
 create mode 100644 .idea/libraries/waterfall_1_17_451.xml
 create mode 100644 .idea/misc.xml
 create mode 100644 .idea/modules.xml
 create mode 100644 .idea/runConfigurations.xml
 create mode 100644 .idea/uiDesigner.xml
 create mode 100644 BungeeQueue.iml
 create mode 100644 out/artifacts/BungeeQueue_jar/BungeeQueue.jar
 create mode 100644 out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/BungeeQueue.class
 create mode 100644 out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers$1.class
 create mode 100644 out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.class
 create mode 100644 out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.class
 create mode 100644 out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/MoveToTarget.class
 create mode 100644 out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/PlayersWaitingCheck.class
 create mode 100644 out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.class
 create mode 100644 out/production/BungeeQueue/plugin.yml
 create mode 100644 src/eu/mhsl/minecraft/bungeequeue/BungeeQueue.java
 create mode 100644 src/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.java
 create mode 100644 src/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.java
 create mode 100644 src/eu/mhsl/minecraft/bungeequeue/scheduler/MoveToTarget.java
 create mode 100644 src/eu/mhsl/minecraft/bungeequeue/scheduler/PlayersWaitingCheck.java
 create mode 100644 src/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.java
 create mode 100644 src/plugin.yml

diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/artifacts/BungeeQueue_jar.xml b/.idea/artifacts/BungeeQueue_jar.xml
new file mode 100644
index 0000000..b33c59d
--- /dev/null
+++ b/.idea/artifacts/BungeeQueue_jar.xml
@@ -0,0 +1,8 @@
+<component name="ArtifactManager">
+  <artifact type="jar" name="BungeeQueue:jar">
+    <output-path>$PROJECT_DIR$/out/artifacts/BungeeQueue_jar</output-path>
+    <root id="archive" name="BungeeQueue.jar">
+      <element id="module-output" name="BungeeQueue" />
+    </root>
+  </artifact>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/waterfall_1_17_451.xml b/.idea/libraries/waterfall_1_17_451.xml
new file mode 100644
index 0000000..d25e01c
--- /dev/null
+++ b/.idea/libraries/waterfall_1_17_451.xml
@@ -0,0 +1,9 @@
+<component name="libraryTable">
+  <library name="waterfall-1.17-451">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../ClientBlocker/run/proxy/waterfall-1.17-451.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..6b02fc2
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="EntryPointsManager">
+    <list size="1">
+      <item index="0" class="java.lang.String" itemvalue="net.md_5.bungee.event.EventHandler" />
+    </list>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="adopt-openjdk-11" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..5258986
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/BungeeQueue.iml" filepath="$PROJECT_DIR$/BungeeQueue.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 0000000..797acea
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RunConfigurationProducerService">
+    <option name="ignoredProducers">
+      <set>
+        <option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
+      </set>
+    </option>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..e96534f
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+</project>
\ No newline at end of file
diff --git a/BungeeQueue.iml b/BungeeQueue.iml
new file mode 100644
index 0000000..9c3cf1a
--- /dev/null
+++ b/BungeeQueue.iml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="minecraft" name="Minecraft">
+      <configuration>
+        <autoDetectTypes>
+          <platformType>WATERFALL</platformType>
+        </autoDetectTypes>
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="waterfall-1.17-451" level="project" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/out/artifacts/BungeeQueue_jar/BungeeQueue.jar b/out/artifacts/BungeeQueue_jar/BungeeQueue.jar
new file mode 100644
index 0000000000000000000000000000000000000000..69bb97516ca7295253b51f9eb69b5198e2d65fea
GIT binary patch
literal 11738
zcmbVy1yo#HvNoFF+E@tg5ZpbuJB>>kXj~fCK(GdadvF?e_Yi_R!9#ElPH+hcdEwso
zR&r<lxij-uuU_k{)q7V}?{m(#Yk&2rD<L8Q;80Ld;3neSwcvg;G&m$Uh`qa&jU$`4
zgZ=$59NdV~s7j+Ign3L!O$GCr3aiTYu*&FYy{0_t?8q47hslw#Q6&{NMP-&rC4_P&
zq|!+#9n%y8?aVan8M9m~6gYLI$0(|N_nFUsMp6CwRsR_q4Gs<k4$iH~_b;&#fBp(~
zXaCm&e$IIq;9%`)|2L!XejDXr;|Ml)0a?2J&3N+v=Xf)BM=LPc*&XZ-{$uW+%jMhf
z*Ob}+?Oe$}{AfJ*VKcV}xw;nW9Jox&0`B<);wu@)LU|@6=}}>QM9(KA4fkh|GbiXj
zQFYNXz0;6c`GkJ<dRP<s?Lhpi5D#}?N}Aa7oIJIuJ$;2Ht#pCona#=L>;q4+tmRpX
zfbUnruVSg(Gv%m4z5S{-=^g2u4Wnh~^p(vNqCJzg&@oN-Cp0E%qX;lP-J_%<6EstK
zEB1-yKsb|59HG8?r2Rt2b|t$4vp`Jil6`?`f?ehjL`+g4OB#-hCmmBKaiHB&{FzXT
zH|z?>8Dk6i2cLB)4>B`8YJp@8Tv?x<Vf2VU5?LcSK7z!qcf-V*Sej*)qoPu_o0R;a
zPTuav&19EFm-b_|9<6g`FGes><r@5;wNvJH16+uv0+tc9TWMwCZ4KW#H!=8E)!CmW
zo4PC#v8`V%Sq07IY2PA*k{aM>-XKHq_eLLWv$pY~i5TD|R6iPHJqA{?hSB2F%{66W
zj^Nvpq2v2Y;j9@&JhrT#bQz^@ozHGO8n~767+qZVGah3ypGsEZI#WZNKV!9-b~{$z
zMf>6?oxr@D9GOS(mhF>jlu>m{pw+ps<j?>X?c0h^oDgJP%=WNrUO$I5Qoj)n;tj47
zvJQR-yiFdAfSxl>Vxg1fTPLK^Q)3_5c}SF-+O>~B6A`=^GzKYbu0G<+NU2EM{$R+j
zjtIXXo3(D>w3D*D*4POf1$&0+F57-mc=F^C61kn1S*Jwey6k(9WR<pQig!797AXGt
z?lOAa$)KC4&cq&)F=Z8RE->#fW|(btRCdn;!A&LRdfAMA*;o5E4)poWN0@^m2CJu!
zgILyH{-UhVotCpyW<mb)XT1cz`Y#&qZhJPLHmwgZ8iX|44~1_<%5~nzx!3Z_$Y0wj
z4T+fO9_=M>(1TktjyFXPz*AVsx&yt|!V;YO7SQA$q~b9EC_muxh}@hbma=RS3M{`Y
z*nDoJ;+YX^0wwbzPwmhrP`Q8g0pn3+opyV3n;vY1>5`{Vuk}Y<`iH_M=(@LQlAG_o
zKV^?A=lePrjFQb=>&;Roi1+9uvZsl0ynLx^oF$X{eyBM;xy?9~#zCFKNT-=znbul$
zfI(E8GD3ky%ejud%Or%JV#<{f5VQG2G<pzj?i4pVitSs|d5(O7=!vTbHexj-FDXO*
z&>Vs-)r!iRN$Ywi4>pwwxWVhW<Jj0nVO?DqU}PPz7E~RHP{^DK=vsVl#vC!G=lmK_
ztiT!JxuTs#H9N1MJpDd@e`9<~_YoxJbryXTxAxGpl|I2dOY$5X(1CQCREQ`;M42;l
z8BG;uM9$#8to&GUmaQx3@`hg}6>Fkbi0bU|)5qOvNt3<gmL}#YapOnpOOX>sp_5X<
zOp?CowCJFl@%u*)uz0cm&gd}`9GofY-@zjNzr`4HCkF?Rqs4DHMfnfVD)1lsPyu<V
z+k?EpF0Qnke*#uA&_U~|437V20lk(*q#&eCbW4qdB{CvHGm{zVBw_iW75E_;>Rx8M
zPh`jRhhrNZaO<&p{>{VK{#?m%l3FQ1zxr=7DTP<|Sm8dk-C;**dq>50dn?EDra!)&
zTEXd_$Y87Hmh|0XeC13DjXr($;e})*`lFSjE*YcY?oKeGZriEJBa-&jU~CBROO?$j
z%wN=IjRui|^o<$ur?r)EO5Ah#7Ig9e%Ahz{wM&i@L^!6vO4owe7`*%X3D;8+s}^<K
z+GYEY?Bygy0eI8s!(_eL&>LpL+8VO=^IOA><$mScYWdX)bomO<w57@QAM}Z)7V@bt
zbvZ6{28WE6jBvZiIyT~q-fsvm8Eys6?4)p24spM!SB%I#JmmnmwR>4G)8Hp5$>Fdh
z2&x2Eaz_D^!Vin?whIXtJ|84>0!AVVst-duR}=1L=^hW*;(C58^AiPG<@Uyv-a4;^
zA86JeiDC#8X)%mNxrm4-m6;G|^mt+>sVJL6VZN#%lPcm-$`~6!d_)184FD9=h~F8J
zUuARyA3rCrTU`WA4H1a%`i8&ul_AD$)2BzVhjpt)*U9P{Oextc2+%LZ=62jzMrM`{
ziXdl%iX%~ARfQa3tnPvK^Eo{2^Uj5sO6V%ia9O3&dc=ziei6+_zG_*#O3Wj4-&nu%
zR$wxRg*WAM+NHZ`Ik%Lm81L~k;D7&UBVQ|7#pnHkb)ejL)hD|mR-acKg<Nl^^6N^>
z6jm^8Lu2QrI>v$7GM_rP^W&T}y<TJd9P^=Gu49dAigyy$UI`wTjCQ{M+hVgR>1XQh
z!a8NMrC|=Dq!F*=#AY48mEbaEtCx%Mjt9nk73I$`wG_A??}9nTKMs84dOI9|s_yv&
zll((OC8LeAOM=c2=*8-NYww`Yj~{+YLt?kDFy^Io@w=d(y^dwf>zNO(xbyWDmAP#%
z8KtPM6DUP97+lA3t7PC+)bc27ck+}gjjlwE(=MWKhk1JTnqXLm;kw1=80t3T`x88?
z+3s)mCOr%BQQD$OWL<B4*=19_7_lahMxc_dKwN0M>L;_~LfEa0-i6`b;~p0I%ga4s
zq}*gSz}L%yUBS?~-J^pBmg&~uk1O4~<~5S1oSLBwyEjyve!&(*BnZ6i3N9S**Jdci
zffmKaQ<VzvVTM@mWrdvem_;OQiENm6cG-kTI=YY?+KBxFHCV-@ui1Pw8Sg_zH3P0t
zN5ce~f;WYCmt{=RR=;0ne4dDh5KA)*$-MR@va-o!s10FC-+ien1^DjJo>;@u_$hiK
zQDz_80weR5EH&ceJZ-7#;AFZiIdT+zy2wf%uM}#g{8abq12jp=Gh3eiEXWEU{|QZh
zmOuXpD}4VSu=2m4qKE2b1SGis^2~dB=zx!^!N%rmo7xoZG$Bd@Y9PIe4TsWVQc9Dy
zUs@~o`QWH;kKqD6A%TU4x)EHVeVqb9T%mQFgp7pDl5-cbjI)%+646?@*KtOg#Z>zQ
z{VM<U^7fMJ_*stY@tErmVLw2pz85zVZ-^M`DThHEN)I-<q^6%1Re{umWD8G}zXd%N
zx^WOL?4=HIB1kPLI4iGNiRbM|Ejc0;#_K&#xlTyyr?YIAcA_sV0|YHx2o!8Y1-hXS
zcjBG3bet;8bwnyZj;I63J8LoR7)G&Y>7>-O!35oMeJ`GO4@lm4q3}Z?i6I$1B|Qw%
z=R+KhT`Mk!ot1g5tRahisGcE^;<!yMT%_K#xphaXQBk~OOmn*9j1aZWdzZr=D_TFD
zZbS^1uqxMj)_eoPX5!&=UgLU0;%}4bV;F&aG+iV`9=1YXJnCL9EfrjWt?8$1dS^#1
zXJ>j_I7n)ypPcGV4rS@_Ie^Xd7YO-h3&;*!F918Kf=lbQE%9SzKGYuzk4<tk9=F)=
za?1Ph#|rZ~>ysSKw33a`vkBJMuoiu8&@=ScWuL=evR_#7E^X6_25XBF95kw^sPUqD
zgAIALmOj*jtxvW9{PNo^l_Wm)?`#e~dQq#XY1TaL2}%^m-fCRZQdmaA)+eUFUa)O{
zuQb-$6n~N%;s~`dQhQ>ViCwNL8|g7)pP$J4)g8ywaKxpj7Wqh(ceBJpLqy2d;GTBi
zBUi2JSlwQxI+WokJ1ZzLiDfEFXh9gUH81RgaE!!xFUHIi?K%|{QoSCBXUE&+vL8-L
zisTACb99_HHp&gPK((4(?g>(1?~({!Owb%KRO|P?$&3m+Md_N@Xo`|MC6<cY9fJ={
zYR5#ac!?<3T^aJ7i+o^*&QGErhs~nobcVTdp*vboYNu^^-#RU%W}!i+r)DV4wkmSb
zh6bd<+7pO_H7pR)Bbh{lmmPOX8#8=Eot<z>=cnI4?FEIs1J*lK(Rw8WK{IBiTO{{w
z^?7@eS2Fv#m$WY>c(e2idu0!E<1`iP(|MmRJ8D??A<IeKlnI>Jab@?-(TOl@lHL@B
zI1SzKk)y5)b9F?1;jF-7cv@&W>pr5B0ywOZo+R^)J8*xU2o#XXJi9ou_$nqOBD25}
z93y!mZ->z06C4%23obF;q$<PFo-a&8rIWZ<DHa$KwC3mG;jkx7%~mhiH4t%NS>kD3
zbiN2-DKI0^AJfrh$YzU6Is<w*b9Y^OV?@R@=O4eRqHmjG)#i5R9btMb&c1nf6BtFY
zA;)FX84Lb~B#yamg|SoZoMenuO9S$F()L!cyh2qSVJgJQp{KyxHO{Ung*q_7?M>B%
zOX4${3iG~c*&G(7Wod+<K_#pYxYat@TNVH+#5BWsO3JE>Q(FCg`eRWtA>_uCHASkN
znQN@wrna}LOv+kcUF3D^pfXrm>BgfhzOpoyv6>Lk?LGHyPH%d*yh1=i`S#aBfGdL~
zkTZc)C!<J+5-$Yh)oh-(M)x@Q8v^^#4V^#TCKxwix@SFw5X|eX0~g%}B6;8MM0{1@
zk-((2_S~x*k64-126QH=E->Vemvo>5k1QSU_q9V=RtYmdGU^R$8)M&Hqu2Xo9D2lJ
zubgn6?xZpzb+gHENIr`w{p8?HB}&Qa(2b}`{ORLw@wQXaN>kn2k_WnU-xT_DPSZo)
z58klc_t)6xWfFh(1u>^OYo?o2uwb04>bVmaMSWPoD9<yu8~>E%{2I(yX|U%PSZu4-
zSRCc1&P@veGc9I!D52h|<jJd0q#aR46@@6nGHneqp#u&q<kEh2D=QY2jsa2~Pr_X^
zIE;t`2E>WY5Y~;e^?50L97VVb-&7G>TFm;dSnfK{uH?-ZP!}ozn-yyNOz?b?oz#GX
zmaZc2q>~HB28k`A*KSD{7fUC`FFT|GsCywVMBeASW*&Utu!;7JzACfqZF=VD0yN4`
zk+o}zeP0i3yg6}P&~e1=ZEFFSGA$SqiSAW)Gu}rZ*%6n8=FIpnu9L*#b%m%1i#Qm!
zG;B*{frh+16AENAjPkIC^&6Zg6>#y2pw%HrfoYTJ2}(F=0*T{?y<Y&;-fb}b1xk`a
zYUN~gg%axKw|%p~GUc)Dmhe?qQ5Y}o+}I^G;iYA+b-IgYK@W0$%l)%(pL6zkNh5~j
zr7%M^lm62$gPNdd*hkVfb7Q*a)bUT3wFibqHPncoS@c2JDzmg3?*xFz*MZb%Zorwv
zmm5)v)dWgLAE#Bhm>kOqCO4}m*j_0#ao#-J5;XwgZ>>JhiHE64xh?j#KM{CeoS0|c
z+QMi}FB4RxRafUF4wNg?<H2k052~Z#kB7WLkdj6QHiabOu0%#}I+e@gEfyGj?;(}u
z8YD_PUEvAEYgqY?<L&FV!OqX_`hg^k=2<UU8_~XpJ-(<tTfqQbYku>)%3@!YYWYMb
zB}FdQtXKWoQLkAr=DdPk8$Qq-uk7x&dC~G3LlDwbw?gs+P^m~o-`q2?UHzc)i_I+D
z6OQ&bdF9`sUJ2ZEQz*Q?KiFzg?b-F*W%5z7X(!~{Hf1^(#3XTK9o6!g`F6_pdSDH;
z3Z*YdJVhoWedxlLkD+oU_rh1RP6OoSD>T|8XdQTS9vpE;-&o0GEBVT&b87)5^5&ab
zcK}@AfOU5mpKZ?tvT9(IVg)QalR;Ma<5cPjl3uFS)_XXKq{*h3w*0`iFE8Ei36?wh
zpMS>*!fqR&-z93XyE9~;Zr)r^OVi!;#r=f;^1|4_a?~%SqkNwREERXP;TB;2f@1%G
zhRU;rgAzJ>8Lx0$!^H^II-mi0>gjwWF2N9azOjS~&_?<^!LIUNZr8Ko*!qNRW)4~B
zsr2n;Tq=3jRwa*66jLX>@^Y+=)ElvoK`QN=npm(=&>+*X=5|RT=JAyOV3@P*(8~8W
z&M4d@fi<t!IV=NL2J6q2;-{C6t@+jsbZG_Ir^Jwof!LrACfYk{RpcxHlR@?|G8RBK
zrR6ojH8VL<b8E4KSh%;_8qVixG#zB)c%qxN<1#ezyoKip>}MSEzzJ}>*F`s8SBv|e
zR(Q+?p!78ErH6m%N2!MHsVPpS*wz>Tr62ZZO+%TJ^w12*6Gyt8l}K9=sdIM8E~PiI
zKg{4G<Iw7B!-3{vhOg-CIc@dOZRd4nYDd(^?R!5_rqpKCW-dbs4*fGfkoS=sdS?!q
z$k6y=TGjGHn%IMY9f~}6DX_j~tev*bYMEENi<9v1Zb9BuNYY=(b^#!XcWiE2ofj?6
zKxd3Gyl?iyNle?bwfatG4zVGwE7Zf3FX<{$Ya}Xq<fMv5HCK9NB25P{Rx!+Kao^px
znCZqX0CWYsklYQib35z+GbrH^DT1Dqy8-eQL~~fVAYd*t1cx)gyoO6)hy1Xl98EhR
zG4=L2xp2s~m_1XLb5>1ICJu4;p0}Lz2S}hVy}K2KtU3HtGTr@q=E19X?(8sI6sx0w
zdAS-FJBMZXiu9M4{yb!ot|U!J<ao|s+G>%tN*!dvF@z#Vi`B36RB!X+qkP!X+-cG#
zsqsw|WZSc&ybz<E3L4*8L{c3>mM0{e^ddY#_-p{j&aOPtlIFC}B|_^O_OQ{7eD333
zo%Hi*ra3dxG31&oMzz95k=eePk!oXQyKV=96N+GJ&|_g}+Q#`KHdvu&8|o>Z5V2#2
zkpcqZM!*Labfz8Ckj?;nS=Sj|`G%43VYfw5$2<S#@8OFpmjMqIcQAhADHb{$95vD3
zkpT?<w&J$8adiVbf?a-N1C-1DO7imm7f$}*0u-Ho^1*+wm&w|OTGP(~_k?ILI)uF3
zaQW5}rsh}SC4EYUkf+hZGR`xP>3Nj&>6c&BNo<=AA!6*`Y-ETJpVA&pXhb5izqR7O
zGrr19{C;~d;t5x;C%=wSRWK3T01YI>D4Ga|(L$YhUsuWWT<Q=H(sBk(>O_HzdO{v)
z_0US4XU0h`TUqmPm19H%?LeR&O7iz2&#GO26uvv2QZ3#laPXYHl4+=Nq@O85AueJi
zPv0Kv<Q+j``FaKAnv>Gs`1W#8%CU`F-N<Ft$n8jNDPRLN4Ll*LZ^#`*nzA+gOxTVa
zSYzXap7;e)Ix54io}!EALS<k{Qyg_6r-}vI)yFEt19vbZNF2Lr`V8xIC%Of%2ZS@z
za$eQ4lBM2B#~YkVz8|EB*gZSqy~a1ZimA*eBYRThw$#ZZRg~ShQB*k^q`PuOi@PJW
zF0^DtoQXY6A-TF9sQ3ly@57{M=%Y2bT+_?%@5fRa82-HoN<!AmQNGD{yxS640Tm>>
zhM4vsl3~YB$IWSUiuBBs+I3IhF88=O=yRD?IGyI15tn&JJMb6urt2gJcL~^#5hu`9
zF{fiB$`&~yM`qKGYdDO`tllxUXi2D}wqcZ8y2#v0rfhiZmJev<x)F)Y(UflaIo|FW
zIPL*sVDGDTCqbGv%sT2i--{~9MEe8Yap60-PVO}2t&s3?eTk9#eDsO}hRWxW{*<%f
zk&)227tSZTgeTmp6@YEd^B+w^1I|l17k6?h(#Be)@+Bdp%}9cdcdlV3M2pV%%qE3B
zb!pASuT-6gVY?D`xoP(_PsXQ)3(_W+cwFGF1n-v=%w5~lx&@zH4#Q{45shIiw>&SV
z=8y}brsQsmg;rbpO{WPwpC(Vgh8^W^;|x7Iq#}4JDs6{oGKaLVJBj4IUpPo99<S~h
zTEPsEA)1s5N-cx>nBR_Y%B?y*ylyOY7L0ueaBw-ufA_jE{@XXj)!Z6v;cowz_w64W
z8xsGGmp{ojU675NjiZ&6HQ3zlfBOc&RZn~%&b^~SolRXsBO%l4gy-n2ti~F+RLJ)E
z$?^t@T8793PW8=0d>P9vZ%Z$3<ZhVB{jT)MC(b%gpRRsOjLY|bt6-z3)w|iVLg8xF
zk>+H1yexk2bA!_9J(DO95>KAlTMCfnOzF0XDuz78Ux&!{Sa?|$oX~%uKP6nj3iH&Q
zfH=N_BT8rqxAzhvz}ke}&cmY^p){xR8cm*bKy3nVlD74_z=2hhwcx<xOgrYlj-c(5
zTUiI7x01_jkwxxWO2NBlqAW|zA<GhdXUJ>>+C3#ezr~Wtimjo>PCW+!aAAjI36$%b
zrc4^9p?7}}D}VA%wLD8rrb|_x;_NeHUrf2@GsyJlF=$cg-gidmopJ6XjICH8#1Z!>
z<nedrO!W~`)4_euQ_5WH$YlyZvXuI6q$Ubu2A~irG7;6P5zNv}4k*u-o8K#J-qHOV
z6kXmecfTk*A+$HsoUsQ8_&?~V$<SM1APqTOr6*#OKRYI5IUC$${LV_b0sZcX;wKg_
zRgnqiF77sNL;~5}{2~^A_D85{%ko1Ck(9~Mln~~B#2foy%s**z8}7fHb$>Kwa2!rZ
z8Z*rdp|wX!ao9rK9_qYA>d*e-LvOH(GKWwqucN&J&D$>h&fIF599^WjqVKBT9Z#fb
zVLZZY&1qpQH-IJ#zhkuMm=f$2oVA63dcah!>p|jFUs$RWf8XAQFWtOOf43OH7rgk@
zLBGJG+2K~?$f<`}y*qJb8Bd5I=eYqEjW|ym5zB>ph1Qeq&kIYcHm^|!h5aeB@TOk|
zNqmn)rP+h2bg`yN-Q~ZvUQDV}iu!CLpIvrdSCqYNh#|5MPSlgqrxbNaA6A}wwpz@y
z{7l}U0Fj^UQbKkOqM`%*;I7D}R~v+;3mS!Q&3U>Ux!6T8^42sH<D7I)5FnB`<iOJb
zGM?f=h7tkCmUjXB={p~@ACX>D^I|5Spe-~kb~R*THkTPps7Th=_3F&ebjG|UGHPB}
zD=*x+ec~l(__c$2<jdlwEr`eI4!HNG=`1V*I{$9{i&aa5zAo8}le=}{I~+lqMH!C(
z9mML%LG(WQlm7F|xGu^7jdta4%e?~Ug4<pp!ol@xerp%(IO1{x)h<zT-AE>zCHw>s
zK(%X8y@Po?%!3Flz9MIjZj4~KOUM}IwEn8o*l3HI?S!<U^-f;d9>xHrh`S{idMxi;
zjxN$Gu?FvxvGbC%;@idbmnD1Hd(2%$VfAVJM$`RQd=t<smyjz)+F645bZO?iL<#l}
zx!BXY1H9>@+`<Q=W6h%@p0u8+3)k}ev^hl%Q1LBuqrMVwgAVPoqWn)zc0+BVeEnv|
zyf>S&Yc}VN|I@-9>7*Huwje{A06Oo+)2_Em*JoQI;4d<pg#mxGS;4uYcoaYT37S6}
zr4L=yKS{fVN}s>9S%v-!G*WT$0BbvGgIuh@Zhyj1mX5yGQy}2}m;(kXLbN~#u@}HG
zg9c7$)GLm5%O`M3QNFUq<2A8llM2f|R$!-H>ma>;8DW^rE*7RqT{~Pi{J8wtk6`g$
z=F6pHR2-7HE!f?P*!8njeWxGy*U>rfhdpz+Jm#jnO=bbSSZnu;ZO-b)<l&Rv%&#9$
zl6G-EO|8ZU%FCVLs4BY9zwUT-nFQF^<;Y!gBX~rk7Y4J%*aWqbmUh#)ywukGFt|L=
zxDQe7Adh^(Pp*3s5_FE1ZBgRfnnmQeu*Z+N48S;iCbccGJhLo?K@f3;3xy01PbxS-
ziB-KrH9*+s8o`XUQOVo=D9!G-#?;Vd=Vj2R4BTuTVo!|9=VtmDv8@XwR-Z##c2U)=
zRXvQhM5I0$<nS^<D?t=;{PPW>i7x;oZCpi=M#<xE*$D;xk!>lB%2PZ0DW#a7K7x(6
z9$|>l+2a`tZ=D@VQ?RGxmONsQ`s_t&W53u}Bd(#d9#_K<Dw>;ddpwFPHpCm8;qBnH
z)WoL1yUc}@+yoKn0f+y{L4)#kH?d~GU=@7GMqP|j7K3Mp6#_*{xd(&;xk|4~t^4>0
zoEsPi%LXMFiM8SfTF}Udi1&S-jkp_S5Z#3cJ8ow#C@Rl%l>pUCq*BrFQ-bndN7fJs
zFdKO>(>q73KYw9m^-Aa%MFX<&-Q2tm&R~Pd(K1xx&hJ~p=!|MaC8ct6dAU*-m_X}|
z&M6>U=OpU2)oJGIol^v<og>;v*t=(U0-lXYKt=<4lEYIs8V2u-uu!VkDM$O=gr_#u
zIO65#J*VsV%p~PD$n0fasO;rl$km$rG&H?<6wGI)?`<?rpP1-6%Vc*1@&nsLn}O}Y
zp1_|iSrU&`g;Gs4!m~wjpTMPp7(Gf%pCXbZ(D^W3Pfdq1Og%(Lc6Rg2cYww;NgE9=
zGTlyV8w?ySIjiT&5~@e`(%_~ttB3>nh~gFKQ?1cJ^xiGrMuVWGyW9!9n1wt&*AL7t
z7ghkw`x=*IT;F9diuTxEs3Em4bpy(&7_GMAXiDJUt#N_4s_9QX%92zWpeu-_KdQx_
zPne82<7PB3fU$_Tt-*#zl{-tDSbOHp^gfi9u+9P}xznbLsg{q`vp?5pqiN4~sz!i7
zs)|)EUYdeRSYl*S*|DupeV8jMmw!n9rJzs*(apBEbIR3YP#_mIX3=7*We&)0{*|U_
zqJbbm&%oo@Y*<MO_BRzVLD~Ai=ay+t$LdqCJ?AwfZCSi)8AqS?th?a8Wd+*BU|(Hj
zQzz>iLQ>79;;qG-+o9yg;ohvY<nAbPIgqE>4D%m)%VfYN$x{}W84!0B-}<MYRX#E-
zq(Yx}4KRy!0SSaB`zG2tb2Ab@hD>nXXDOy)QEckZ)fEpWc6X-+u`^MVjHI9JqUlbD
zOsSGAIU@llC?d^GrihG88Cue~Lw*wb9_)RMnQJH78cXw_7cSuWtHNRz0gSz>_M!KA
zf%VJ*yI6W@*sMGh84@og)Z|U>F4*-Xe7~aSdXm08Vi3ybO=!nTskniM*<BEHdnn`+
zl*qpE@SIk~6sSc+HP~ZLn>%ATm0#H-(H^B5g%GUUaqA_v2P(e6QbZa0g4_0bfkJ~f
za$nDaP-BSWaq{G?0hDCMFEW@`4b4{SCe$%2Ca30D`I!gVft9*=Bvfzn8Q*AbL{t4I
zfiM*+w;Lh8Fv!@oa-J%lWNykte+_E%*7+m1ya=>v5;;b^mw+&8jbfB{7iIBr*SK<c
zWE}z1bU%dlG}K}JKe~t7;wlys>UHIFgFb$=*l|+tUZr~0LwKW0bTcOy$vV~Jt<Kxg
z>r){kn&x<dIe^GY=ju`nO2vi|T(6nbQB&E=${2Kg3@BhWAXqA%821Qos)z?1p4K-K
z<=mx#ZUClh-1faN%?>R5aonde<L@8p+ZUfMV+(%Pw#*p6?*%($9)H;j#Q%%E;13Op
zf}^FA3fR>ZWCeEl-wgq{szv&9LtsOl|E7ng5~x$?(C{KrQopguK+8}8jfd|W8VX^>
z1$}E==$K=hFA@C9i}{_edE7!-9|ZEb&z^?~ZQdN_Yzgeo(*f)yS;Y>QeLslq2=Dk^
zFZl-iI2fviTj?UwXpch2y)dVQMiNJ@i|{ykNp)r5wudUAtzd1s06<0&aXoKW4$G|W
zOfqq*d^a$iZaNLg&}cR*!96W|Lp`7<ugHAP5Qvh5YF8MVBX>yEUJ+Y0H&Q~WKJ>*$
zW_0LPyW?x;W&^+#2K$qOh@DD2e#_QMUl(JNB!Xp-{7z^&kR=8N9ICW9rz<5ecGVBR
ztAd1nPGZhGeA4}~NJP+zP2arR`KGRB8t}<O<&lm#@o0vm?d;jccH7&2yEdIVWrXB5
zux(;fV^!o?K^MQ@T$9a^Qn`8i=be1Yah$9sqqnrOZtU-mp<cl(e$nN-T{g((%>A6O
z7n*$lH0C1C{0$l$bVRu!sjke|vCd&svon?5g(;0?yd!|3(Uvw1LO!XTr_F_wmKdr<
z5$RpqmfcGBCS5_V)gZck#d_M#*qJaIbN#7!zUpXH{n}wwUz9!$Mdo1~=9HR>JOtxD
zv}3${)aYCt&;%A88+`(ES$10?dtrA-VIK4jL-)sZk%ky~bb4wVpN0{YPKm@75P6R0
zz<86zxRlgD6)i(4GE-|DJM(nMUwwFWf(+ry;1|Sg1u5Tv!__CyntL8ePp)LAC}mZ}
zP~lB8<F7|zY9~ePZpZT!CE*q0yo=+{j;yl6)1sdg5|a&o*rM+z;+8^&b`-IGi^7)h
zq{BwaOlfjtD}HzG`IY0k0_>G6<Ag=v$R0xo4I3c&K>lR3xrn2((74&}Ok7!OEY_rc
z<<fd)tWGaS&!;Fx$hp)Az_)AiB5K_tx%zblIHe_X8XRgFvsL6KGG|m4kJJ|LRY^a}
z)e~*`l#FTo#UvMsHHTmT&-;%;T@rGu0RQSOd16+KNh<7Q`z|`0yTsDa9u4j#T(x*q
zuFvW!m*g+r2>FR)T@9gc7F!a?f8o-z+FfQ);h(DjYV0_A;>&tP#B@W0RG8_U^vl_d
z+ihd2_=N2s1Go*`*jRX`1E1b`Iy%?eqZE72aW1!rhY5b&=1FJg*~^v<f5snWBeZOT
zoHLE<3tJ-oAhL>8y+P;WLSh1&s}H@upr7!9(njA$-B%Kk2Y)|g&ne{GVxf_rC^>$D
zGiY~FTy8d=mPO<6%1zt>27U}L<ojJ1h08D6$$Dz|gjCWT(NNuA;zm{EjChi@w+WVT
z+ljScfYW}BH1Nuy;c@e1ZRlnLacm;-NnhI$mMRAi=OL{#y76Q9>x$?Y7w|aEib@Zk
z>hYR3T<pEcMH$8o&_p7`)D-*s<B1rh-CV0P0a00JKPdhUUe*nv@eS6pmpq^N8o-~H
zSyZPjqLkb()Z}6^N}%NYT<9fd!?%d=p!0w=U$o>48x>qy9J+lY`xntKrf9<yI%HSx
ze*975rZhn&Y=4%x<bOzJ;1K|DzjTbhs|+7>jDNMisv6am;1ST^{<RMA*Id6pA@c7g
zJm?aCS=P_XUn<3a9p*u&_{(~JUjE;#-&KqMdj5lM@t2+dy!_|+e^oL5TCN8j<L~OD
z2OZ-tV~78DzWzzo_;<_mAYl4si9a``zfbg+oatA>56XkzH3<)bre8MqAN%}gdDBDY
z|MwI<MERYEeb6`jGPa+O%YT;nuPA@+k$<;34~*_F%O&`CF@EEBe<l9F@czzdJutk#
zZ2P}(`VV~X-(~(lj{P!hl7E-^?^M~Z)E~&Q-w&=2WZ5qR{x@F#6?OLeEq*u+|6UtC
zoQ8kdCfR@fC;s_t{Ck{-O6zy9dZ@I1*%zAsJkGzUyVRACA3Zq4{`tB833mN|+>ZYN
Dlq5+x

literal 0
HcmV?d00001

diff --git a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/BungeeQueue.class b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/BungeeQueue.class
new file mode 100644
index 0000000000000000000000000000000000000000..7773d136805cc8277f798039079251ed959cbc6f
GIT binary patch
literal 2399
zcmbtWZF3V<6n<_=y2*BHU#JCzPFsqSCcuJ%im4H3i#8;sC7~7HaJ#upE^O}NX17DX
z`3?V$cBZJz_yhbE{u0M?ck>2rLubrna`&Ed&)ajKb2fkd^T(e6K8DnB9)&a(@VSng
zxRt_fwJs~kN(!rLy`v;wX!ufxj)IOg6gAw{F&b@3N?q2lu44j)B)L_eWE%IdF@jCp
z*HF=Ms;3&#P}Om!C(u=t2O73?%tgs;YxqjTLx$m}PEZ$;VWA|sZ#HX>uA4i7taEN!
zPlXw2&5iI-o?+z2fCs$7y*=(RT!^)?UAZgjW^`yx?z&`W_?B1ae#cO6TF*8dYoB{9
z2DZkKa74>z7%x4x_AE2-g=3aTLYC=@s7uQaJkD_QHTBX_@g=u?;YxGEbDs%bi$diK
z<ZgILNZ}V4PGlChDDJXbBgbPUA^CdH+~Ho;+HpuSS#oX5*|I#L_HALpZwN{_SK@)$
zY_uG+NoKZZ?fPxZLUhdAA%2?*DT<hK<*JOFri5(ymbA(Ld~E6}-~9+ARk|xzM5}GO
zWIOH5^@<yKHoqfOp5uMNE-Ua1T)|ZX@8Nw7UmN%a-!de_ybOGY?+si)hG1xgS7=}n
z83T{-1H;w9MX3wol6%Ajb#FyiNDUNi2R6f%!M3*BY+ABrmb<rZpayPW7j=efgN<8u
zgVzFwBA4AgUUjP>lQc982t3yC#DIe)!;Ry*2`@(Rvdmj8tFDNgKdx<?wA+^Og{&_(
zxJ}`+$T6JkG540|S^J8<1}@?f!{T7?eK$zFcw-kb%*LJRqYkwx_1apOYYUmhW3X+s
z+n)*>!Xy)Qn`238X5XWF^YMP-8h)I-MN^|}$q3|&N2Kw}jA@@H_GjX%j5|wB;PJYm
zr>8(yBxSgpi7ojR`~09I9aniZCdN7emLn!J6#uXPwx`g&p`h>3oWVQ-s9q;jt=5yS
z0bw=MBOhIc9e5s>zF8Gb{(z<(gH~BxzPG+oA@1~z(3qp-D;J0R5us_ibu<jmj|EAX
zX~?PjfehzjzF2%iQt`CwME1-M6g7oQ9`p3JJFi}mNUJ$WPiZyv!j<M-xKhuCD>Wz>
zF4OZ6OeE-;#wY!LKoXNyMr$(r0_>OY$cOYh9116Jjh>C@0IuUB+A(_JcZ~l=id+Ie
zXAdy+8%~sRlZitl4=|jY)WU~U?hxthOXv?@VB`=+dpk<ow+=Bz+i}uP&~|bPC-q<P
z_V1WZVY{t3MT*m;n8G`+tIm+>>=b6`+g0`Q&(gmP;4Bq8LpjdUpNcuWi*xiUSimO)
z*d{^d5Ma+qqH3Iu>S))P!cTPS2Gz>&X}4Mhrh@7}FkR|{iFIA%`wSIGz*yn{voA46
bna>~KoXVC#p{<9}rzzXhBv~TK5I*}C8>x<l

literal 0
HcmV?d00001

diff --git a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers$1.class b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..072b04821f6c1941cb4d3dace19e327629236987
GIT binary patch
literal 1957
zcmb7FZBHCk6n^fqFt9r<6e-ph?4Y#WUA7F=zNpkHyU-Th1=_7tsEN7ETy}4ny@T@t
zls{tpZsG?&*|aohV@&vF{6)s7=MD=rW^2kOd+yvb=jA!)KIhKwfB*a|fNS`w2d7Zf
z;$jB<7|X)Ocoyd{p~WQw@Au#`u4G~0s)1|W_#lG}KJ39qnAA_#wfI=SzG2`K1D_h0
zVi?%q-iRO(^GLW09)Bc)kfE>gkZ*81j-+Q-WEf2{bVUsrj*K&0s)*QbHbT#CN+q0t
zuSWJttm;C16N^~bj^Au@<=R!g)rzORuS+GP8w@kK<GcSCOn#9eUG`nU&|4u4b8&M;
z1o!xgN1FbM?{IIC2U71_%CrX0V9qKfg0jcMP|)`Bv7wAiP%RxntVrfG47ScNR#76d
zo9@?FT79tjx}-KxE+>+{vKIn>OCEHW0-UHt+*zyg^#q-P5<{lu$AKemN?k(lQR~L^
zIgn;XIi4R%Rj-Pu;kyRPCZ;jN&^;%@=(Zn5CI<1ki2<B8aR$Q%Zko7-+a_l5nTgL)
zVJIF4r-7=8In0|_z#WEsTi*tc?6Tin_mxmlDVClq0)`)_V{0=GTta4TN?~y#$J*X=
z<;r?w@p!dP4RkF*Cl^@TvDNS!LRqzSDLfHu^M*&tVDGuJW=Una<bOx=%Gw}iifB6;
zv!+Qm6^EPJ)Rj&{2hnexh7>ClYLf@na=g0tz30jLm{s$G;E{FFs_*S69WY2zTMIl6
z#jtMHT>~`}_wa>@Mcg;>C6-Jq;{kE~xKtmRpy5eo$D^w4`IU#n0V3s*>Tax5i>XI5
zHXDh6M?Up#{J0q@pHQnlk>`*#G#$Cw{4&GIqYQeAi7oOl(O@qB!dx8yAa)uJ9?pp^
zvL=dCkhDrR0|)jm6h_wh|HoTOE{5a)8M4U*Q4;|j7Q=;?jm@g8+xtedRG3E8nk9xp
z?iHQ%Y@W{T7nlI9MFCCEq}C6$qjH(3T=qSE1nFDzm1%~vZBrfE5w1>W-=WeT)sbnw
zZ78SR^ibF?ClGWSGmPf)4_@wB;-NU4J#x#2Lb+8DhP+O`#oQ~q<`-enXQdwuuOZdf
zr|%GeR=QB=)03kA8N5Mn-=wE9?K^1gEsQ<|D-@q1Rd|MupAy5jNOqASP{Z3K2NUOB
z4B;&8$SDa)w<aYVZUy`n=_FvO@C2z{q!}usyXa*24iogy#qb-9YVk3;chQqV@fT#4
z`m@hqKE{b1oZLb0F8WgV;h#S=h7M>9gXko=NO|w$JdN`WEMbZ!`T)}qWq%j%CFn{m
rbR*=EMd~kP44nHDR|(d6Ql)SKIa<@mqkz#wlgB%>W~hKuw9@Zil;0oy

literal 0
HcmV?d00001

diff --git a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.class b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.class
new file mode 100644
index 0000000000000000000000000000000000000000..f7004e09a8a87ff3259c77e1576767a3a5a30f15
GIT binary patch
literal 5922
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

literal 0
HcmV?d00001

diff --git a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.class b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.class
new file mode 100644
index 0000000000000000000000000000000000000000..75ee954974051cd9df2568fc811123b0731299f5
GIT binary patch
literal 1439
zcmb7ETT|396#lYY>Mm6f6-7mti`oKO5fK%<EDMgKRq=+SJ~*WfOPp?sZHkwFB@ZyD
z<BM<pD94kQVP~{D`jX@%Ip=)md|&eY$EU9Vrm;}LUYw}lB&r4m_h6`kHVl_Bf>U~R
zS`TNsV8Je96k}Z&$5{jC3^)ePGjz@hDb#g_Hp^aOXs<^BXXti?<oDC&GLN5l%OUOb
zx{>dNOI|Fry|dY_Rz<=v>GITRt|p<=BsV|yR+O`x$_D3eQl4@r6p7-J$IfEtz31_r
zNXQumGm<Tv;jHCKuAFA@YHG*X@z#XH*SS>AVw5O1Y6!WY%^8i95vb9BcVXy%lu9L<
zd`TpNN~lR0DNl(=QUxQw1<Lbg>27;62zgA9E03cz_W3QLJJQ`kf9|!n?wRODkAVpj
z7cj|S7ggi0ddjIs&9z8U9doG&10FLB&8OA3X&mrGRX?P0^`UNCbydg@X@jqP`_fQ@
zI{HNeQzkB9+QemCF>w_$24+oM!*v5UOx#4xz?_LX<{2jbn-hi}U568Tvf(^fe$9Qw
zFkDo|T9^_Sj=RGvgH?2^h&qOHgR8uA4CgKTx5jJI{Ya9IG&jy-9K91f$UTUHLzdeD
z`B=q5HZnO36d|ZnyX#RHQH#s-wMTbf)gC^rF`O(+x_g<jbojZKTP(`f)j!}bqM5>W
z`Z4zuX=lu`UlxMM1TyC(d{-poHeOWQpL)d5m2er{<4NK*DAl<2&zbbIvi~ldx$IeI
z`lQc7KWtJ>&Pb|6m`Q>V@5?ya-J##b3xZ$B%M~_bzrY|&`oqYJKC}|e^p0rUPnJV7
zqq$>r3+!Wd+)HC;wpqaeTATR=9K<2A82WISf@o)sc3J`U*d|J!(e}KzeG45M=-h;{
zi9OpWm#~3~KHWxF3C~&y_R*&a!gP!<S%gO?>dS-eB%-i5f__SPl+HAuV>B}yr?G^A
EpH$|IZU6uP

literal 0
HcmV?d00001

diff --git a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/MoveToTarget.class b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/MoveToTarget.class
new file mode 100644
index 0000000000000000000000000000000000000000..3802aca59d918edbd0bba1823586eeda71ef2661
GIT binary patch
literal 3114
zcmbVOYf~Fl7=BI?SO{C76ezu6pwxyy*{Z!t?S<G2HYpSkZL8KpatK>CyXo$R7QElB
z_xq*ZX8hvkGD@Y+IL`RN8OQ(N4{=6)&u*He)1}saNX|L$c`wg<J^TCL*M0`D8(&A!
ziQV<sggy1xi~Aceh<$SRKnvX`8}J|wM{xv4<=?S73`g-0j!SZ?0coH0gcKT4Fsk5W
z9mb+qjq!R+;9<F&tivO6eN<9T$=&G&G~<l?dn}3_cwE5~3eGBclA+P%c22m%&WLH~
zreI*F8EW_Grta=%2*-OT86rt5OE*m^VmMLEPYHX1PZ>mMNm&_gOmbV7=MpjE&gc%q
zu9PTh`5DL1@+6kA`LwG|70sLw=Zm5!G$%77vPDDKTH2Zu6V`->V~}jxMU!9@7zR?N
zaJ78)?9P&;#tXWZu}sqE>XxaE+SWx~WJe7?FKiNBHSY4vY?>EJP*j8Gr?R|<H1=#~
z*b@&_I4<ltVUOx&ZZLI@&vDJ*W=@-!v8@Zztw9-rT3a|p!)1v5mkNd&VcV9?&=#mo
z0aq}^5FNLQc19f0Wgu5q$6!E$P|=OeDq`qTkWrC^P%y0`hZz+*&M`C(S(fX#HZP=w
zJ7Z;?rdrH4!)Q{FZ^nQM6PAL4iu14)I4WEeRm|Z6!(Knu+kD4kju3e#HZnae3!p2O
z<Yq<~w9my(%1mvO*z&@32L=WdTvRcS1r<->X$8-ycoxs8cpfh>^#7k^G4uwq&u~{u
zTKR%ylEI;(Ze#^TvU5ThqF~vsE^HB7DCT3QbzwMO-UyY9)q;W-RlJ0kRlI^%8Pw<`
zvBbs;{MT=~RJ?}QRa}y{Z{ST8Z{ckf@8De(@8Nxh9d}Zyl!8jNj7*)Qnxu}Xkj9Fp
z>9<K|kgJudV^~v>DwiEa=+>x)yk_!JL@jFQ4w-NEORnhZhL$1<^+cnmyG$WgM_-_l
zqt+g#F!}B8gJIYjSl!fd(|S(xnTE}2YcPrr@F7DYURC0L2v%yLD9yW%$at1A%P<+g
zv+2+qh%d<vV~QG|yxkHM>YMNrjsn#;Ls#%bC@Yk$e^-!7IeF%<N3B5)P}6Z`<1lQF
z2cxVKA)xgnld^I-S>78-qLL+ps02>)Z;7>Ir8@@Y0=G@ileX$qjJq}wy}=bFJN|s6
zncQ)Mp`>LP{vahItra5`I!&oOzgQM$R4_CM^E3}=y2Xb}sJ(Gn%09!Upl~IruSu<(
zijkvZhfYycgEM)Zj}X;le1X&oIV!UThdUEAN=R)jFBF8CWjGKNu|QNSsj4|TcKGlK
zQkk&@cPS=)@!m5lYZ&5=D9<)R(%=w|v~V1rBia7=ZHvmPR7%gF*MvbKzp3cU<xn=+
zdc7RH43>&U!N)2-!DSWOFu>65)rH5Pn{(Ez&{E!;N{<eo<{8(r=gE_N<)q+Cib%?`
zW{dQMtHbnI+ew2vj-UekqdMj#eg5-xjGI|QI6b~#^%N=Ls+u%62u{owL^b>EU-~9*
zEn8jUCCzd;jO(r#RPYrIoSWhk<PSYzx8_3^&BsnqU(hckpMClk4AY*z0_eYoPJ4*X
zXpJVWf+fN~AasRJA#9N}T7h~*Xm>a5RG$-D5vLP9C1ovt5|89vSVVXk5r)f%Tv<d-
z;u>m!WhfyezDMXXntnvx66#x`OK6Y`%TO8JuVPq4<G0vH@}!_CgkR{@>H7(*PqnmM
z#hOL5E}^ZZeF<w9(LviKtXszV5c)hF8$yt%!yf7cp#_=<Z41_;oqS%4esoabb>bjJ
zB29595Oto=ORw4qd73y9==1zrDEZe<cM8I4>@OT|4#~QuYZ<ajBoL;xJJJ6el*o68
z$guhTHT(YcFJYtfkhpwMjh@6BtU@c9Zu1Psd@Ut&qz@Xldl0&D5AG!^62b<AhZSu4
vN2;P#!F>vSY=>ye+DXAqqKB{xpVJy8;ZN}eKEpcfr?br00pdA`Lm2uOtr25u

literal 0
HcmV?d00001

diff --git a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/PlayersWaitingCheck.class b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/PlayersWaitingCheck.class
new file mode 100644
index 0000000000000000000000000000000000000000..5a03e40ab183916c01caae75917a6a924e801d50
GIT binary patch
literal 2130
zcmbtVU3U{z6x}y1nKT*NS_>3KNuWSmN=H;gNCDeurIMD?)K)>o+vGNxW-=3JCY3IK
zgs<YlXP@N(Ee|Z$^39*5EOpOE+EfEBmoN9@+;jFhXP<lS{q>K>PXJs*GmS$y)rZqK
zlff9qGnl~H3{GG&7|v;!3eJoSUc>n`UdJ23@MZ=YE({UiQW}?$4^F3pftC|EKLmkG
z!S<?#YZ~6sFe8whHf__tD$p}FzADgLa4Je*plI4^vDH{t?uuNuC>bg`WofNS*9`Wt
zu-C7dp1_r&Y8j21XBiEem0h{v8|y8*s?--P)l!C6uBl4PQm(ON$!+C&Ytr;hyIQEJ
zay?JiZp#)BO@XPRt$d?VxqBf7Fl5s-%8pG~-*jwa$#w3TsuJPQ^kB)C<@$nbh7oC)
z6-bwymRnYHW)SvB7mrh$a!cwsf)Nb`9q-~j4Rbo)$8`<!IzGS+9YrkYSj0_%$^R0O
zjwRgEu&kqm6%8NiSjC!-kMOaM+qfezIO{mR=ex4Gp!}Ls@dlFkB!y3Pe1^LkKGz|!
zuA_{V6e>CtRs{0@gI#(IvNbGeSB;zNo1~Go+!HOgY&$M+C~WzrWz74^mA>N&j6dJ?
zY*^%5L6HSAVX;ff-BPqX^Q=m4m{lWEnzuI`mhjXw2;Q&Ax>l7RSCe%e8!zq!TyQKa
zx*)_G?j{#VnY&pX-e=s-mZn-wdW-5FDPlL=W;fX3X1J~2!6LPLEz_gwU`HTDN_f)0
z7eXMRb6#Oznl_u|&{(A3i52)d-i?Ofx^K5B&5(e3+w-MeCfz3))W4W8l0MoLooY2G
z$+31CVUaCL*@H%O8YEBEMcE+q{(MWmOTBy=8>k9oXDSs{$u>;Sqcj^8BrCGMlMU}d
zPT)vG)>Xl=%hF#n{Tf$6%sz8J-I;rg8`m+UBNnl|dj#%}lVN@-U7N1|#$+3fZ&;74
zR0KwsRm0ip7V3uUG<Jhcx}lneTF`<P?LyaKIHtYj)RhrIM+wczG8<!C10Sqp(Q)c6
zzFPV`-zT?VNzYTv@|(^qV~nWVuS>gPDQ`3~%y(RbIQ$ODKEsvmrs|@8r$aw#?tCYm
zF+@RHR*APiufbuv{Ug6_u?f8Td_Cka%r8pdFu$7wXFjJKk8)>l7Mu@E{0Q+wc>EH_
zWGGDGWv=x|0mtwPcXZY^7CD0TQ1;zJBzDjvu!CNK;@KS>5V()aTqFg4hPLn!smUGm
zCGahBKOy}H8E$of$2bT)LVt8VkigpafBwSF4hB1bu5|)Mo@o9;7c~B-yJ#<lXitKq
zdJrTvg$zfXZ1m$C1~7v`+`tgOj$v$)o3F^r*G%p{wI49uAo(n9bNrBxbCsZ$5wDnZ
zOh}GeBS=0)zlIajzajAyDXxCU4A-<i$@2t8QRkc{eI^>jIf}Qq@8`)y%H9sgD}Mp}
CT0l4e

literal 0
HcmV?d00001

diff --git a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.class b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.class
new file mode 100644
index 0000000000000000000000000000000000000000..052d84ba9044aacfb17e0f6519e09a64f79d5fc1
GIT binary patch
literal 2334
zcmbVN-BTM?6#v~MWb?5UngXrbk7&Urg|cdGwWhX`6liSt3J4ag^k#D*3!B|^KM<;q
zKKraMI-}z_<BZP810Cv&<FkK~<EUphi=-t~@nP@YbME;*zjN<ze?I;Nz#I4^f#-2C
zjzJ71aS6joT!7*&uSj?`j@NKm!s{_yNg#%+aZ-5G+g<Zy-%62%8y<PnTi)?bM`Fl(
zXN4GUdGu%uW8UF-5>eciP?YelggXq;>zbiCHyFa1>^wuHU{(b~S4lI(q+72DYmQfR
z;-pHZ%Jq3}X&xOgBTh}T8FD4zD)pMJD|J#+ExzI?71vl5;(;q%q1b9oR9#(I%8W-B
zjTLi3*fw7kR*oE7uED?>48tWuI7+>`d?ip<ctcZE(;%acW*W-0Wo~MsI<509U$t}A
z;p+MXZ}{;@C@~~vP1jPznC1oDcfjB98sFeDPUDP(2^o`^k}xe}24xwun3M4ys0u?z
zi9^DIjQ4SuA=_51#vP?#)*GfF3@7hudR15qJqz4&1XV`oRH$@A=gz~l7uceNB^e*!
zo{SH%EaN^nLwDXZ9ow;ZV?sDJvubxmQHep7QH7APf>jwcXfoDtk1Cp0$kaM?>Sy{=
zIwPa*u|oq{83s%l4Lo4D_P?7(@pxraywH`Y${KZt0J6_2yM_^<#%H>YrYl89Sllrw
z_3X19=Y8b(oul}5%_igBrF}ys;t*_(J;`B+Y5#cW%Vb*=_B@l4RO9xf*d&Vt_eC;q
z_(ad1d`m_oeZE~k3)Ig5y>nX)0$F0DFjt(KT+WY_83x)y_$eJS-J59!=sTQsEX`QW
zdGmMXFqZ{W_iC58HB!E_JYF6hon$z7s54)h+;pf-wNmC^M6+$r)ppqR%BUGtu{pK!
zR31$z<g&#CEYQ8c7{kdrUl#?_P`R_9IW^kZ4mTV+?adT}F0~ecZY17l2&2kyvt5mj
z6lbJj>SSm*vv{=pI)Va6Z0#X+n6OeLtc;gOXvm|gCAdS}!Ay4P@M!YfrnG~pr;;UY
z$|=AN!_49RXu($QKikjFOK`l)V3VPLe-Jfe!(10i6JO0HjB%BQa7)5NN~L6)>n>fq
za*?iBtDtk+7Sx%~TMHl9Xx=-wxlz@H-QQHq9mH@8=Ltn`RN9CywaD+Gr-c=mC~#e$
zrRmN|_?SlQKz{9FV>tV4IlPGH=*eYxfnLuL{pn4h^(;{e{Tcl`E<OVL$v-|vYt(1P
zk*2-e6d)rn5k*(Uo-#X+4upyK<2FLO2s4xhcM)Ou0$<XmgW*?1Cx*5m{fyY%RQwSV
z+eq#}Ch?(NbcPVQ{}{)B9dt!@(7lc0beKvJ8TQFQb{8iY+6eZL;5K?&4f=tQwBB8<
z?P;X?NNxuwcX29=@BUi$vJAt^@+vxM^<JV*4515`(M`|fae9nW_y{NPDSGe~dhs>-
z@GZ%Fk5l-8N|`3DJ}TsCe1?7u(2i;l)aPZ|ClUGsaS0cG$2a6EL#z<8WD-bF0bOii
PgUsZJjuCyGzPJAd_<?;6

literal 0
HcmV?d00001

diff --git a/out/production/BungeeQueue/plugin.yml b/out/production/BungeeQueue/plugin.yml
new file mode 100644
index 0000000..86d0427
--- /dev/null
+++ b/out/production/BungeeQueue/plugin.yml
@@ -0,0 +1,3 @@
+name: BungeeQueue
+main: eu.mhsl.minecraft.bungeequeue.BungeeQueue
+version: 0.1
\ No newline at end of file
diff --git a/src/eu/mhsl/minecraft/bungeequeue/BungeeQueue.java b/src/eu/mhsl/minecraft/bungeequeue/BungeeQueue.java
new file mode 100644
index 0000000..0070374
--- /dev/null
+++ b/src/eu/mhsl/minecraft/bungeequeue/BungeeQueue.java
@@ -0,0 +1,47 @@
+package eu.mhsl.minecraft.bungeequeue;
+
+import eu.mhsl.minecraft.bungeequeue.command.MaxPlayers;
+import eu.mhsl.minecraft.bungeequeue.listener.PlayerJoin;
+import eu.mhsl.minecraft.bungeequeue.scheduler.MoveToTarget;
+import eu.mhsl.minecraft.bungeequeue.scheduler.PlayersWaitingCheck;
+import eu.mhsl.minecraft.bungeequeue.scheduler.QueueInfoMessager;
+import net.md_5.bungee.api.ProxyServer;
+import net.md_5.bungee.api.config.ServerInfo;
+import net.md_5.bungee.api.connection.ProxiedPlayer;
+import net.md_5.bungee.api.plugin.Plugin;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+public class BungeeQueue extends Plugin {
+    public static Plugin plugin;
+    public static ServerInfo queueServer;
+    public static ServerInfo targetServer;
+
+    public static int maxPlayers = 1; //mutable per command
+
+    public static List<ProxiedPlayer> list = new ArrayList<>();
+
+    @Override
+    public void onEnable() {
+        plugin = this;
+        ProxyServer instance = ProxyServer.getInstance();
+
+        queueServer = instance.getServerInfo("queue");
+        targetServer = instance.getServerInfo("server");
+
+        instance.getPluginManager().registerListener(this, new PlayerJoin());
+        instance.getPluginManager().registerCommand(this, new MaxPlayers());
+
+        instance.getScheduler().schedule(this, new MoveToTarget(), 5, 1, TimeUnit.SECONDS);
+        instance.getScheduler().schedule(this, new QueueInfoMessager(), 5, 2, TimeUnit.SECONDS);
+        instance.getScheduler().schedule(this, new PlayersWaitingCheck(), 10, 10, TimeUnit.SECONDS);
+
+    }
+
+    public void onDisable() {
+
+    }
+
+}
diff --git a/src/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.java b/src/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.java
new file mode 100644
index 0000000..daaddb6
--- /dev/null
+++ b/src/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.java
@@ -0,0 +1,95 @@
+package eu.mhsl.minecraft.bungeequeue.command;
+
+import eu.mhsl.minecraft.bungeequeue.BungeeQueue;
+import net.md_5.bungee.api.ChatColor;
+import net.md_5.bungee.api.CommandSender;
+import net.md_5.bungee.api.ProxyServer;
+import net.md_5.bungee.api.chat.ComponentBuilder;
+import net.md_5.bungee.api.connection.ProxiedPlayer;
+import net.md_5.bungee.api.plugin.Command;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+public class MaxPlayers extends Command {
+    public MaxPlayers() {
+        super("maxplayers", "bungeequeue.queue");
+    }
+
+    @Override
+    public void execute(CommandSender p, String[] strings) {
+        if(strings.length >= 1) {
+            switch (strings[0]) {
+                case "set":
+                    if(strings.length == 2) {
+                        BungeeQueue.maxPlayers = Integer.parseInt(strings[1]);
+                        p.sendMessage(new ComponentBuilder("Die Maximale Spieleranzahl wurde auf " + strings[1] + " gesetzt.").color(ChatColor.GREEN).create());
+                    } else p.sendMessage(new ComponentBuilder("Bitte definiere die maximale Spieleranzahl: /maxplayers set <amount> ").color(ChatColor.RED).create());
+                    break;
+                case "query":
+                    p.sendMessage(new ComponentBuilder("Die aktuelle Spielerzahl ist " + BungeeQueue.maxPlayers).color(ChatColor.GREEN)
+                            .append("\n... davon belegt " + BungeeQueue.targetServer.getPlayers().size()).color(ChatColor.GREEN)
+                            .append("\ndu kannst 'enforce' nutzen, um eine Überbelegung zu verhindern.").color(ChatColor.RED)
+                            .create()
+                    );
+                    break;
+                case "enforce":
+                    if(enforceMaxPlayer(strings.length == 2 ? Integer.parseInt(strings[1]) : 30))
+                        p.sendMessage(new ComponentBuilder("Die maximale Spielerzahl wird durchgesetzt...").color(ChatColor.GREEN).create());
+                    else
+                        p.sendMessage(new ComponentBuilder("Die maximale Spielerzahl ist nicht erreicht und kann somit auch nicht durchgesetzt werden!").color(ChatColor.RED).create());
+                    break;
+                case "bypass":
+                    if(strings.length > 2) {
+                        p.sendMessage(new ComponentBuilder("Bitte definiere nur einen Nutzernamen").color(ChatColor.RED).create());
+                    } else if(strings.length == 2) {
+                        ProxiedPlayer targetPlayer = ProxyServer.getInstance().getPlayer(strings[1]);
+                        targetPlayer.connect(BungeeQueue.targetServer);
+                        p.sendMessage(new ComponentBuilder(targetPlayer.getName() + " wurde an der Queue vorbeigelassen!").color(ChatColor.GREEN).create());
+                        targetPlayer.sendMessage(new ComponentBuilder("Du wurdest von einem Administrator vorzeitig auf den Server verschoben!").color(ChatColor.GREEN).create());
+                    } else {
+                        ((ProxiedPlayer) p).connect(BungeeQueue.targetServer);
+                        p.sendMessage(new ComponentBuilder("Du wurdest per Befehl von der Queue befreit!").color(ChatColor.GREEN).create());
+                    }
+                    break;
+                default:
+                    p.sendMessage(new ComponentBuilder("Invalide Command-Syntax, valide argumente sind <query | set <amount> | enforce>").color(ChatColor.RED).create());
+            }
+        } else p.sendMessage(new ComponentBuilder("Die Syntax des commands ist /maxplayers <query | set <amount> | enforce>").color(ChatColor.RED).create());
+    }
+
+    private boolean enforceMaxPlayer(int timeout) {
+        List<ProxiedPlayer> evaluatedPlayers = new ArrayList<>();
+
+        int leftOver = BungeeQueue.targetServer.getPlayers().size() - BungeeQueue.maxPlayers;
+        if(leftOver <= 0) return false;
+
+        List<ProxiedPlayer> players = new ArrayList<>(BungeeQueue.targetServer.getPlayers());
+        Collections.shuffle(players);
+        for (int i = 0; i < leftOver; i++) {
+            evaluatedPlayers.add(players.get(i));
+
+            players.get(i).sendMessage(new ComponentBuilder("\n\n>> Achtung >> \n").bold(true).color(ChatColor.RED)
+                    .append("Aufgrund eines zu hohen Spieleraufkommens werden zufällige Spieler vom Server gekickt.\n Begebe dich an einen sicheren Ort.\n").color(ChatColor.GOLD)
+                    .append("Du wirst in " + timeout + " sekunden in die Queue verschoben!\n\n").color(ChatColor.RED)
+                    .create()
+            );
+        }
+
+        ProxyServer.getInstance().getScheduler().schedule(BungeeQueue.plugin, new Runnable() {
+            @Override
+            public void run() {
+                for(ProxiedPlayer p : evaluatedPlayers) {
+                    p.connect(BungeeQueue.queueServer);
+                    p.sendMessage(new ComponentBuilder("Du wurdest wie angekündigt aufgrund einer zu hohen Spielerzahl zurück in die Queue versetzt. Die Auswahl dich zu verschieben war Zufällig. Sorry - gönn dir eine Pause!").color(ChatColor.GOLD).create());
+                }
+            }
+        }, timeout, TimeUnit.SECONDS);
+
+        return true;
+    }
+}
diff --git a/src/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.java b/src/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.java
new file mode 100644
index 0000000..b1e423d
--- /dev/null
+++ b/src/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.java
@@ -0,0 +1,16 @@
+package eu.mhsl.minecraft.bungeequeue.listener;
+
+import eu.mhsl.minecraft.bungeequeue.BungeeQueue;
+import net.md_5.bungee.api.ChatColor;
+import net.md_5.bungee.api.chat.ComponentBuilder;
+import net.md_5.bungee.api.event.PostLoginEvent;
+import net.md_5.bungee.api.plugin.Listener;
+import net.md_5.bungee.event.EventHandler;
+
+public class PlayerJoin implements Listener {
+    @EventHandler
+    public void onPlayerJoin(PostLoginEvent e) {
+        e.getPlayer().sendMessage(new ComponentBuilder("Du wurdest zur Queue hinzugefügt!").color(ChatColor.DARK_AQUA).create());
+        BungeeQueue.list.add(e.getPlayer());
+    }
+}
diff --git a/src/eu/mhsl/minecraft/bungeequeue/scheduler/MoveToTarget.java b/src/eu/mhsl/minecraft/bungeequeue/scheduler/MoveToTarget.java
new file mode 100644
index 0000000..372fc30
--- /dev/null
+++ b/src/eu/mhsl/minecraft/bungeequeue/scheduler/MoveToTarget.java
@@ -0,0 +1,36 @@
+package eu.mhsl.minecraft.bungeequeue.scheduler;
+
+import eu.mhsl.minecraft.bungeequeue.BungeeQueue;
+import net.md_5.bungee.api.ChatColor;
+import net.md_5.bungee.api.ProxyServer;
+import net.md_5.bungee.api.chat.ComponentBuilder;
+import net.md_5.bungee.api.connection.ProxiedPlayer;
+
+public class MoveToTarget implements Runnable {
+    private boolean targetIsOnline = false;
+
+    @Override
+    public void run() {
+        //check if people are in Queue
+        if(BungeeQueue.list.size() == 0) return;
+
+        //check target-server reachable
+        BungeeQueue.targetServer.ping((result, error) -> {
+            targetIsOnline = (error == null);
+            if(!targetIsOnline) ProxyServer.getInstance().getLogger().warning(error.getMessage());
+        });
+        if(!targetIsOnline) {
+            ProxyServer.getInstance().getLogger().warning("Target-Server seems Offline! Cancelling Queue-Movement...");
+            return;
+        }
+
+
+
+        //test if target-server has free Space - move Players
+        if(BungeeQueue.targetServer.getPlayers().size() < BungeeQueue.maxPlayers) {
+            ProxiedPlayer p = BungeeQueue.list.remove(0);
+            p.sendMessage(new ComponentBuilder("Teleportiere zum Zielserver...").color(ChatColor.GRAY).append("\nViel Spaß!").color(ChatColor.GREEN).create());
+            p.connect(BungeeQueue.targetServer);
+        }
+    }
+}
diff --git a/src/eu/mhsl/minecraft/bungeequeue/scheduler/PlayersWaitingCheck.java b/src/eu/mhsl/minecraft/bungeequeue/scheduler/PlayersWaitingCheck.java
new file mode 100644
index 0000000..58c1c56
--- /dev/null
+++ b/src/eu/mhsl/minecraft/bungeequeue/scheduler/PlayersWaitingCheck.java
@@ -0,0 +1,29 @@
+package eu.mhsl.minecraft.bungeequeue.scheduler;
+
+import eu.mhsl.minecraft.bungeequeue.BungeeQueue;
+import net.md_5.bungee.api.ProxyServer;
+import net.md_5.bungee.api.chat.ComponentBuilder;
+import net.md_5.bungee.api.connection.ProxiedPlayer;
+
+public class PlayersWaitingCheck implements Runnable {
+    @Override
+    public void run() {
+
+        for(ProxiedPlayer p : BungeeQueue.queueServer.getPlayers()) {
+            //check if there are players on queue but not registered by the Plugin
+            if(!BungeeQueue.list.contains(p)) {
+                ProxyServer.getInstance().getLogger().warning("Added missing Player " + p.getName() + " to Queue!");
+                BungeeQueue.list.add(p);
+            }
+        }
+
+        for(ProxiedPlayer p : BungeeQueue.list) {
+            //check if players not connected anymore in queue
+            if(!BungeeQueue.queueServer.getPlayers().contains(p)) {
+                ProxyServer.getInstance().getLogger().warning("Removed missing Player " + p.getName() + " from Queue!");
+                BungeeQueue.list.remove(p);
+            }
+        }
+
+    }
+}
diff --git a/src/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.java b/src/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.java
new file mode 100644
index 0000000..936ee7f
--- /dev/null
+++ b/src/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.java
@@ -0,0 +1,26 @@
+package eu.mhsl.minecraft.bungeequeue.scheduler;
+
+import eu.mhsl.minecraft.bungeequeue.BungeeQueue;
+import net.md_5.bungee.api.ChatColor;
+import net.md_5.bungee.api.ChatMessageType;
+import net.md_5.bungee.api.chat.ComponentBuilder;
+import net.md_5.bungee.api.connection.ProxiedPlayer;
+
+public class QueueInfoMessager implements Runnable {
+    @Override
+    public void run() {
+        for(ProxiedPlayer p : BungeeQueue.list) {
+            p.sendMessage(
+                    ChatMessageType.ACTION_BAR,
+                    new ComponentBuilder("Warteschlange platz ").color(ChatColor.DARK_GREEN)
+                            .append((BungeeQueue.list.indexOf(p)+1)+"").bold(true).color(ChatColor.GREEN)
+                            .append(" / ").bold(false).color(ChatColor.DARK_GREEN)
+                            .append(BungeeQueue.list.size()+"").bold(true).color(ChatColor.GREEN)
+                            .append(" - (").color(ChatColor.GRAY)
+                            .append("" + ((BungeeQueue.list.indexOf(p) / BungeeQueue.list.size()) * 100))
+                            .append("%)")
+                            .create()
+            );
+        }
+    }
+}
diff --git a/src/plugin.yml b/src/plugin.yml
new file mode 100644
index 0000000..86d0427
--- /dev/null
+++ b/src/plugin.yml
@@ -0,0 +1,3 @@
+name: BungeeQueue
+main: eu.mhsl.minecraft.bungeequeue.BungeeQueue
+version: 0.1
\ No newline at end of file