<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:UMLLabProfile="http:///schemas/UMLLabProfile/NS/0" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xsi:schemaLocation="http:///schemas/UMLLabProfile/NS/0 pathmap://UMLLAB_PROFILES/UMLLab.profile.uml#UMLLabProfile-Annotation_2-UMLLabProfile">
  <uml:Model xmi:id="__ss2cCxOEeWvaK2JGTJcvA" name="Sphere_Miners">
    <eAnnotations xmi:id="__4P_ICxOEeWvaK2JGTJcvA" source="http://ns.yatta.de/umllab">
      <contents xmi:type="ecore:EAnnotation" xmi:id="__4P_ISxOEeWvaK2JGTJcvA" source="codegen">
        <details xmi:id="__4P_IixOEeWvaK2JGTJcvA" key="codegenDirectory" value="/Sphere Miners/src"/>
        <details xmi:id="_AGFm0CxPEeWvaK2JGTJcvA" key="AssociatedSourceCode" value="/Sphere Miners/src/ais/DumbAI.java;1161302303/1;/Sphere Miners/src/me/stieglmaier/sphereMiners/main/SphereMiners.java;3447319884/1;/Sphere Miners/src/me/stieglmaier/sphereMiners/model/ai/SphereMiners2015.java;438813897/1;/Sphere Miners/src/me/stieglmaier/sphereMiners/model/Direction.java;2181631423/1;/Sphere Miners/src/me/stieglmaier/sphereMiners/model/ai/Sphere.java;141263431/1;/Sphere Miners/src/me/stieglmaier/sphereMiners/model/ai/AIManager.java;653873738/1;/Sphere Miners/src/me/stieglmaier/sphereMiners/model/Model.java;1687734567/1;/Sphere Miners/src/me/stieglmaier/sphereMiners/model/Position.java;3418631206/1;/Sphere Miners/src/me/stieglmaier/sphereMiners/model/GameSimulation.java;2317915164/1;/Sphere Miners/src/me/stieglmaier/sphereMiners/model/MutableSphere.java;451181354/1;/Sphere Miners/src/me/stieglmaier/sphereMiners/model/Sphere.java;988380150/1;/Sphere Miners/src/me/stieglmaier/sphereMiners/model/Tick.java;222220940/1;/Sphere Miners/src/me/stieglmaier/sphereMiners/model/physics/PhysicsManager.java;1634821968/1;/Sphere Miners/src/me/stieglmaier/sphereMiners/exceptions/InvalidAILocationException.java;624192103/1;/Sphere Miners/src/ais/DumbAI2.java;1475665678/1;/Sphere Miners/src/ais/DumbAI3.java;2177796520/1;/Sphere Miners/src/ais/DumbAI4.java;3472499225/1;/Sphere Miners/src/ais/DumbAI5.java;415265983/1;/Sphere Miners/src/ais/DumbAI6.java;3120531732/1;/Sphere Miners/src/ais/DumbAI7.java;1875238834/1;"/>
        <details xmi:id="_bdjHMCxPEeWvaK2JGTJcvA" key="observedFolders" value="/Sphere Miners"/>
      </contents>
      <contents xmi:type="ecore:EAnnotation" xmi:id="_Jh71YCx_EeWapP3vpHQOHQ" source="preferences">
        <contents xmi:type="ecore:EAnnotation" xmi:id="_Jh71YSx_EeWapP3vpHQOHQ" source="com.yattasolutions.codegen.reverse">
          <details xmi:id="_Jh71Yix_EeWapP3vpHQOHQ" key="com.yattasolutions.codegen.reverse.roundtrip.ReverseEngineerNewFiles" value="true"/>
          <details xmi:id="_Jh71Yyx_EeWapP3vpHQOHQ" key="com.yattasolutions.codegen.reverse.roundtrip.ReverseEngineerChangedFiles" value="true"/>
          <details xmi:id="_Jh71ZCx_EeWapP3vpHQOHQ" key="com.yattasolutions.codegen.reverse.roundtrip.RemoveDeletedFiles" value="true"/>
        </contents>
      </contents>
      <contents xmi:type="ecore:EAnnotation" xmi:id="_XSolICx_EeWapP3vpHQOHQ" source="dangling-refs">
        <contents xmi:type="uml:Class" xmi:id="_Edjg4CxQEeWvaK2JGTJcvA" name="Direction"/>
        <contents xmi:type="uml:OpaqueBehavior" xmi:id="_C6qVUCxREeWvaK2JGTJcvA" name="getDirection" specification="_MaFSkCxQEeWvaK2JGTJcvA">
          <ownedParameter xmi:id="_XSolISx_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return">
            <name xsi:nil="true"/>
          </ownedParameter>
          <language>java</language>
          <body>return direction;
 </body>
        </contents>
      </contents>
    </eAnnotations>
    <elementImport xmi:id="__-lQoCxOEeWvaK2JGTJcvA">
      <importedElement xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#boolean"/>
    </elementImport>
    <elementImport xmi:id="__-l3sCxOEeWvaK2JGTJcvA">
      <importedElement xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#byte"/>
    </elementImport>
    <elementImport xmi:id="__-l3sSxOEeWvaK2JGTJcvA">
      <importedElement xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#char"/>
    </elementImport>
    <elementImport xmi:id="__-l3sixOEeWvaK2JGTJcvA">
      <importedElement xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
    </elementImport>
    <elementImport xmi:id="__-l3syxOEeWvaK2JGTJcvA">
      <importedElement xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#float"/>
    </elementImport>
    <elementImport xmi:id="__-l3tCxOEeWvaK2JGTJcvA">
      <importedElement xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
    </elementImport>
    <elementImport xmi:id="__-l3tSxOEeWvaK2JGTJcvA">
      <importedElement xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#long"/>
    </elementImport>
    <elementImport xmi:id="__-l3tixOEeWvaK2JGTJcvA">
      <importedElement xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#short"/>
    </elementImport>
    <elementImport xmi:id="__-mewCxOEeWvaK2JGTJcvA">
      <importedElement xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
    </elementImport>
    <packagedElement xmi:type="uml:Package" xmi:id="__-qJICxOEeWvaK2JGTJcvA" name="ais">
      <packagedElement xmi:type="uml:Class" xmi:id="__-1IQCxOEeWvaK2JGTJcvA" name="DumbAI">
        <generalization xmi:id="_mrbNgSxSEeWvaK2JGTJcvA" general="___DxwCxOEeWvaK2JGTJcvA"/>
        <ownedOperation xmi:id="_mrZYUCxSEeWvaK2JGTJcvA" name="init" visibility="protected"/>
        <ownedOperation xmi:id="_mramcCxSEeWvaK2JGTJcvA" name="playTurn" visibility="protected"/>
      </packagedElement>
      <packagedElement xmi:type="uml:Class" xmi:id="_TzzkoCy9EeWK-qBJoTmIJg" name="DumbAI2">
        <generalization xmi:id="_Tz2n8Cy9EeWK-qBJoTmIJg" general="___DxwCxOEeWvaK2JGTJcvA"/>
        <ownedOperation xmi:id="_Tz0LsCy9EeWK-qBJoTmIJg" name="init" visibility="protected"/>
        <ownedOperation xmi:id="_Tz0LtCy9EeWK-qBJoTmIJg" name="playTurn" visibility="protected"/>
      </packagedElement>
      <packagedElement xmi:type="uml:Class" xmi:id="_VhXSoCy9EeWK-qBJoTmIJg" name="DumbAI3">
        <generalization xmi:id="_VhZu4Cy9EeWK-qBJoTmIJg" general="___DxwCxOEeWvaK2JGTJcvA"/>
        <ownedOperation xmi:id="_VhXSoSy9EeWK-qBJoTmIJg" name="init" visibility="protected"/>
        <ownedOperation xmi:id="_VhX5siy9EeWK-qBJoTmIJg" name="playTurn" visibility="protected"/>
      </packagedElement>
      <packagedElement xmi:type="uml:Class" xmi:id="_yGKI0Cy9EeWK-qBJoTmIJg" name="DumbAI4">
        <generalization xmi:id="_yGNMICy9EeWK-qBJoTmIJg" general="___DxwCxOEeWvaK2JGTJcvA"/>
        <ownedOperation xmi:id="_yGKv4Cy9EeWK-qBJoTmIJg" name="init" visibility="protected"/>
        <ownedOperation xmi:id="_yGKv5Cy9EeWK-qBJoTmIJg" name="playTurn" visibility="protected"/>
      </packagedElement>
      <packagedElement xmi:type="uml:Class" xmi:id="_7ZgRkCy_EeWK-qBJoTmIJg" name="DumbAI5">
        <generalization xmi:id="_7Zit0Cy_EeWK-qBJoTmIJg" general="___DxwCxOEeWvaK2JGTJcvA"/>
        <ownedOperation xmi:id="_7ZgRkSy_EeWK-qBJoTmIJg" name="init" visibility="protected"/>
        <ownedOperation xmi:id="_7ZgRlSy_EeWK-qBJoTmIJg" name="playTurn" visibility="protected"/>
      </packagedElement>
      <packagedElement xmi:type="uml:Class" xmi:id="__13vMCy_EeWK-qBJoTmIJg" name="DumbAI6">
        <generalization xmi:id="__16ygCy_EeWK-qBJoTmIJg" general="___DxwCxOEeWvaK2JGTJcvA"/>
        <ownedOperation xmi:id="__14WQCy_EeWK-qBJoTmIJg" name="init" visibility="protected"/>
        <ownedOperation xmi:id="__14WRCy_EeWK-qBJoTmIJg" name="playTurn" visibility="protected"/>
      </packagedElement>
      <packagedElement xmi:type="uml:Class" xmi:id="_GdlDACzAEeWK-qBJoTmIJg" name="DumbAI7">
        <generalization xmi:id="_GdoGUCzAEeWK-qBJoTmIJg" general="___DxwCxOEeWvaK2JGTJcvA"/>
        <ownedOperation xmi:id="_GdlqECzAEeWK-qBJoTmIJg" name="init" visibility="protected"/>
        <ownedOperation xmi:id="_GdlqFCzAEeWK-qBJoTmIJg" name="playTurn" visibility="protected"/>
      </packagedElement>
    </packagedElement>
    <packagedElement xmi:type="uml:Package" xmi:id="__-rXQCxOEeWvaK2JGTJcvA" name="me">
      <packagedElement xmi:type="uml:Package" xmi:id="__-rXQSxOEeWvaK2JGTJcvA" name="stieglmaier">
        <packagedElement xmi:type="uml:Package" xmi:id="__-r-UCxOEeWvaK2JGTJcvA" name="sphereMiners">
          <packagedElement xmi:type="uml:Package" xmi:id="__-vosCxOEeWvaK2JGTJcvA" name="main">
            <packagedElement xmi:type="uml:Class" xmi:id="__-6AwCxOEeWvaK2JGTJcvA" name="SphereMiners">
              <ownedComment xmi:id="___ugICxOEeWvaK2JGTJcvA">
                <body>Main class of the program. Creates the model and the View in a new Thread and
adds the View as Observer to the model.</body>
              </ownedComment>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="___q1wCxOEeWvaK2JGTJcvA" name="main" specification="__-8dACxOEeWvaK2JGTJcvA">
                <ownedParameter xmi:id="___q1wSxOEeWvaK2JGTJcvA" name="args">
                  <eAnnotations xmi:id="___q1wixOEeWvaK2JGTJcvA" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="___q1wyxOEeWvaK2JGTJcvA" key="final"/>
                  </eAnnotations>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="___q1xCxOEeWvaK2JGTJcvA" value="*"/>
                </ownedParameter>
                <language>java</language>
                <body>Configuration config;
     if (args.length > 0) {
         config = Configuration.builder().loadFromFile(args[0]).build();
     } else {
         config = Configuration.defaultConfiguration();
     }

     EventQueue.invokeLater(new Runnable() {
         public void run() {
             Model model = null;
             try {
                 model = new Model(new PhysicsManager(config), new AIManager(config));
             } catch (ClassNotFoundException | MalformedURLException | InvalidConfigurationException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
             }
             model.simulateGame(&quot;ais.DumbAI&quot;, &quot;ais.DumbAI2&quot;, &quot;ais.DumbAI3&quot;, &quot;ais.DumbAI4&quot;, &quot;ais.DumbAI5&quot;);
             // new gui with config
         }
     });
 </body>
              </ownedBehavior>
              <ownedOperation xmi:id="__-8dACxOEeWvaK2JGTJcvA" name="main" isStatic="true" method="___q1wCxOEeWvaK2JGTJcvA" raisedException="_R1wH4CyOEeWapP3vpHQOHQ _OKSGQCyPEeWapP3vpHQOHQ">
                <ownedParameter xmi:id="__-8dASxOEeWvaK2JGTJcvA" name="args">
                  <eAnnotations xmi:id="___AHYCxOEeWvaK2JGTJcvA" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="___AHYSxOEeWvaK2JGTJcvA" key="final"/>
                  </eAnnotations>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="__-_gUCxOEeWvaK2JGTJcvA" value="*"/>
                </ownedParameter>
              </ownedOperation>
              <ownedOperation xmi:id="___AucCxOEeWvaK2JGTJcvA" name="SphereMiners" visibility="private">
                <eAnnotations xmi:id="___BVgCxOEeWvaK2JGTJcvA" source="http://www.eclipse.org/uml2/2.0.0/UML">
                  <details xmi:id="___BVgSxOEeWvaK2JGTJcvA" key="create"/>
                </eAnnotations>
                <ownedParameter xmi:id="___CjoCxOEeWvaK2JGTJcvA" type="__-6AwCxOEeWvaK2JGTJcvA" direction="return"/>
              </ownedOperation>
            </packagedElement>
          </packagedElement>
          <packagedElement xmi:type="uml:Package" xmi:id="__-wPwCxOEeWvaK2JGTJcvA" name="model">
            <packagedElement xmi:type="uml:Class" xmi:id="_KfN9ACx_EeWapP3vpHQOHQ" name="MutableSphere">
              <ownedAttribute xmi:id="_KgXMgCx_EeWapP3vpHQOHQ" name="position" visibility="public" type="_KfZjMCx_EeWapP3vpHQOHQ" association="_Kg3i0Cx_EeWapP3vpHQOHQ"/>
              <ownedAttribute xmi:id="_KgXzkSx_EeWapP3vpHQOHQ" name="direction" type="_KfZjMCx_EeWapP3vpHQOHQ" association="_Kg4J4Sx_EeWapP3vpHQOHQ">
                <defaultValue xmi:type="uml:LiteralString" xmi:id="_RvB1MCzYEeWK-qBJoTmIJg" value="new Position()"/>
              </ownedAttribute>
              <ownedAttribute xmi:id="_KgZBsix_EeWapP3vpHQOHQ" name="size">
                <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                <defaultValue xmi:type="uml:LiteralString" xmi:id="_F616cCyhEeWK-qBJoTmIJg" value="10"/>
              </ownedAttribute>
              <ownedAttribute xmi:id="_F8BmMCyhEeWK-qBJoTmIJg" name="minSplittingsize" visibility="private">
                <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                <defaultValue xmi:type="uml:LiteralString" xmi:id="_F8BmMSyhEeWK-qBJoTmIJg" value="size * 2"/>
              </ownedAttribute>
              <ownedAttribute xmi:id="_F8CNQSyhEeWK-qBJoTmIJg" name="maxMergeDist" visibility="private">
                <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                <defaultValue xmi:type="uml:LiteralString" xmi:id="_F8CNQiyhEeWK-qBJoTmIJg" value="1"/>
              </ownedAttribute>
              <interfaceRealization xmi:id="_KgGGwCx_EeWapP3vpHQOHQ" client="_KfN9ACx_EeWapP3vpHQOHQ" supplier="_Kfj7QCx_EeWapP3vpHQOHQ" contract="_Kfj7QCx_EeWapP3vpHQOHQ"/>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_Kgg9gix_EeWapP3vpHQOHQ" name="split" specification="_ep1nkCxQEeWvaK2JGTJcvA">
                <ownedParameter xmi:id="_Kgg9gyx_EeWapP3vpHQOHQ" type="_KfN9ACx_EeWapP3vpHQOHQ" isOrdered="true" direction="return">
                  <name xsi:nil="true"/>
                  <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Kgg9hCx_EeWapP3vpHQOHQ" value="*"/>
                </ownedParameter>
                <language>java</language>
                <body>if (size >= minSplittingsize) {
         MutableSphere newSphere = new MutableSphere();
         newSphere.size = size/2;
         newSphere.direction = direction;
         newSphere.position = position;
         newSphere.maxMergeDist = maxMergeDist;
         newSphere.minSplittingsize = minSplittingsize;
         size = (size+1)/2;
         return Lists.newArrayList(this, newSphere);

     } else {
         return Collections.singletonList(this);
     }
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_Kgg9hSx_EeWapP3vpHQOHQ" name="merge" specification="_k5BJ0CxUEeWvaK2JGTJcvA">
                <ownedParameter xmi:id="_Kgg9hix_EeWapP3vpHQOHQ" name="sphere" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                <language>java</language>
                <body>if (canBeMergedWidth(sphere)) {
         size += sphere.getSize();
         sphere.setSize(0);
     }
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_Kgg9hyx_EeWapP3vpHQOHQ" name="canBeMergedWidth" specification="_KgHU4Cx_EeWapP3vpHQOHQ">
                <ownedParameter xmi:id="_Kgg9iCx_EeWapP3vpHQOHQ" name="otherSphere" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                <ownedParameter xmi:id="_Kgg9iSx_EeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#boolean"/>
                </ownedParameter>
                <language>java</language>
                <body>return position.dist(otherSphere.getPosition()) &lt;= maxMergeDist
             // TODO more constraints on size?
             &amp;&amp; size > otherSphere.getSize();
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_Kgg9iix_EeWapP3vpHQOHQ" name="toImmutableSphere" specification="_KfQZQCx_EeWapP3vpHQOHQ">
                <ownedParameter xmi:id="_Kgg9iyx_EeWapP3vpHQOHQ" type="_Kfj7QCx_EeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                </ownedParameter>
                <language>java</language>
                <body>return new ImmutableSphere(this);
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_F8HFwCyhEeWK-qBJoTmIJg" name="MutableSphere" specification="_F7A5kCyhEeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_F8HFwSyhEeWK-qBJoTmIJg" name="config" type="_RDlEECyOEeWapP3vpHQOHQ"/>
                <ownedParameter xmi:id="_F8HFwiyhEeWK-qBJoTmIJg" type="_KfN9ACx_EeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                </ownedParameter>
                <language>java</language>
                <body>config.inject(this);
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_I0leACy9EeWK-qBJoTmIJg" name="toString" specification="_I0f-cCy9EeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_I0leASy9EeWK-qBJoTmIJg" direction="return">
                  <name xsi:nil="true"/>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                </ownedParameter>
                <language>java</language>
                <body>return &quot;Sphere (&quot; + size + &quot;) at &quot; + position;
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_JvZPsCzZEeWK-qBJoTmIJg" name="immutableCopy" specification="_JvWMYCzZEeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_li7oECzZEeWK-qBJoTmIJg" type="_Kfj7QCx_EeWapP3vpHQOHQ" direction="return"/>
                <language>java</language>
                <body>MutableSphere newSphere = new MutableSphere();
     newSphere.size = size;
     newSphere.direction = direction;
     newSphere.position = position;
     newSphere.maxMergeDist = maxMergeDist;
     newSphere.minSplittingsize = minSplittingsize;
     return newSphere.toImmutableSphere();
 </body>
              </ownedBehavior>
              <ownedOperation xmi:id="_ep1nkCxQEeWvaK2JGTJcvA" name="split" visibility="public" method="_Kgg9gix_EeWapP3vpHQOHQ">
                <ownedParameter xmi:id="_ep1nkSxQEeWvaK2JGTJcvA" type="_KfN9ACx_EeWapP3vpHQOHQ" isOrdered="true" direction="return">
                  <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_9O33MSxQEeWvaK2JGTJcvA" value="*"/>
                </ownedParameter>
              </ownedOperation>
              <ownedOperation xmi:id="_k5BJ0CxUEeWvaK2JGTJcvA" name="merge" visibility="public" method="_Kgg9hSx_EeWapP3vpHQOHQ">
                <ownedParameter xmi:id="_m1F08CxUEeWvaK2JGTJcvA" name="sphere" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
              </ownedOperation>
              <ownedOperation xmi:id="_KfQZQCx_EeWapP3vpHQOHQ" name="toImmutableSphere" method="_Kgg9iix_EeWapP3vpHQOHQ">
                <ownedComment xmi:id="_KgxcMix_EeWapP3vpHQOHQ">
                  <body>Create an immutable view of this sphere object;</body>
                </ownedComment>
                <ownedParameter xmi:id="_KgH78ix_EeWapP3vpHQOHQ" type="_Kfj7QCx_EeWapP3vpHQOHQ" direction="return"/>
              </ownedOperation>
              <ownedOperation xmi:id="_KgHU4Cx_EeWapP3vpHQOHQ" name="canBeMergedWidth" method="_Kgg9hyx_EeWapP3vpHQOHQ">
                <ownedParameter xmi:id="_KgHU4Sx_EeWapP3vpHQOHQ" name="otherSphere" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                <ownedParameter xmi:id="_KgHU4ix_EeWapP3vpHQOHQ" direction="return">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#boolean"/>
                </ownedParameter>
              </ownedOperation>
              <ownedOperation xmi:id="_F7A5kCyhEeWK-qBJoTmIJg" name="MutableSphere" method="_F8HFwCyhEeWK-qBJoTmIJg" raisedException="_R1wH4CyOEeWapP3vpHQOHQ">
                <eAnnotations xmi:id="_F7BgoSyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                  <details xmi:id="_F7BgoiyhEeWK-qBJoTmIJg" key="create"/>
                </eAnnotations>
                <ownedParameter xmi:id="_F7A5kSyhEeWK-qBJoTmIJg" name="config" type="_RDlEECyOEeWapP3vpHQOHQ"/>
                <ownedParameter xmi:id="_F7BgoCyhEeWK-qBJoTmIJg" type="_KfN9ACx_EeWapP3vpHQOHQ" direction="return"/>
              </ownedOperation>
              <ownedOperation xmi:id="_F7BgoyyhEeWK-qBJoTmIJg" name="MutableSphere" visibility="private">
                <eAnnotations xmi:id="_F7BgpCyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                  <details xmi:id="_F7BgpSyhEeWK-qBJoTmIJg" key="create"/>
                </eAnnotations>
                <ownedParameter xmi:id="_F7CHsCyhEeWK-qBJoTmIJg" type="_KfN9ACx_EeWapP3vpHQOHQ" direction="return"/>
              </ownedOperation>
              <ownedOperation xmi:id="_I0f-cCy9EeWK-qBJoTmIJg" name="toString" method="_I0leACy9EeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_I0jo0Cy9EeWK-qBJoTmIJg" direction="return">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                </ownedParameter>
              </ownedOperation>
              <ownedOperation xmi:id="_JvWMYCzZEeWK-qBJoTmIJg" name="immutableCopy" method="_JvZPsCzZEeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_li3WoCzZEeWK-qBJoTmIJg" type="_Kfj7QCx_EeWapP3vpHQOHQ" direction="return"/>
              </ownedOperation>
              <nestedClassifier xmi:type="uml:Class" xmi:id="_KfRAUCx_EeWapP3vpHQOHQ" name="ImmutableSphere" visibility="private">
                <eAnnotations xmi:id="_KfRAUSx_EeWapP3vpHQOHQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
                  <details xmi:id="_KfRAUix_EeWapP3vpHQOHQ" key="static"/>
                </eAnnotations>
                <ownedAttribute xmi:id="_KgaP1Cx_EeWapP3vpHQOHQ" name="sphere" visibility="package" type="_Kfj7QCx_EeWapP3vpHQOHQ" association="_Kg4w8Sx_EeWapP3vpHQOHQ"/>
                <interfaceRealization xmi:id="_KgH78yx_EeWapP3vpHQOHQ" client="_KfRAUCx_EeWapP3vpHQOHQ" supplier="_Kfj7QCx_EeWapP3vpHQOHQ" contract="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_KghkkCx_EeWapP3vpHQOHQ" name="ImmutableSphere" specification="_VAIzUCxZEeWvaK2JGTJcvA">
                  <ownedParameter xmi:id="_KghkkSx_EeWapP3vpHQOHQ" type="_KfRAUCx_EeWapP3vpHQOHQ" direction="return">
                    <name xsi:nil="true"/>
                  </ownedParameter>
                  <ownedParameter xmi:id="_Kghkkix_EeWapP3vpHQOHQ" name="sphere" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                  <language>java</language>
                  <body>this.sphere = sphere;
     </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_Kghkkyx_EeWapP3vpHQOHQ" name="getDirection" specification="_KfSOcSx_EeWapP3vpHQOHQ">
                  <ownedParameter xmi:id="_KghklCx_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return">
                    <name xsi:nil="true"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>return sphere.getDirection();
     </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_KghklSx_EeWapP3vpHQOHQ" name="getSize" specification="_KfS1gSx_EeWapP3vpHQOHQ">
                  <ownedParameter xmi:id="_Kghklix_EeWapP3vpHQOHQ" direction="return">
                    <name xsi:nil="true"/>
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>return sphere.getSize();
     </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_grLF0ixTEeWvaK2JGTJcvA" name="setSize" specification="_grJ3sCxTEeWvaK2JGTJcvA">
                  <ownedParameter xmi:id="_Kghklyx_EeWapP3vpHQOHQ" name="size">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>throw new UnsupportedOperationException(&quot;This object is immutable!&quot;);
     </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_grLF0CxTEeWvaK2JGTJcvA" name="setDirection" specification="_grJQoCxTEeWvaK2JGTJcvA">
                  <ownedParameter xmi:id="_F8Hs0iyhEeWK-qBJoTmIJg" name="direction" type="_KfZjMCx_EeWapP3vpHQOHQ"/>
                  <language>java</language>
                  <body>throw new UnsupportedOperationException(&quot;This object is immutable!&quot;);
     </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_KgiLoCx_EeWapP3vpHQOHQ" name="split" specification="_KfTckix_EeWapP3vpHQOHQ">
                  <ownedParameter xmi:id="_KgiLoSx_EeWapP3vpHQOHQ" type="_KfN9ACx_EeWapP3vpHQOHQ" isOrdered="true" direction="return">
                    <name xsi:nil="true"/>
                    <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_KgiLoix_EeWapP3vpHQOHQ" value="*"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>throw new UnsupportedOperationException(&quot;This object is immutable!&quot;);
     </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_KgiLoyx_EeWapP3vpHQOHQ" name="merge" specification="_KgIjAix_EeWapP3vpHQOHQ">
                  <ownedParameter xmi:id="_KgiLpCx_EeWapP3vpHQOHQ" name="sphere" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                  <language>java</language>
                  <body>throw new UnsupportedOperationException(&quot;This object is immutable!&quot;);
     </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_KgiLpSx_EeWapP3vpHQOHQ" name="canBeMergedWidth" specification="_KgJxICx_EeWapP3vpHQOHQ">
                  <ownedParameter xmi:id="_KgiLpix_EeWapP3vpHQOHQ" name="sphere2" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                  <ownedParameter xmi:id="_KgiLpyx_EeWapP3vpHQOHQ" direction="return">
                    <name xsi:nil="true"/>
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#boolean"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>return sphere.canBeMergedWidth(sphere2);
    </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_F8Hs0CyhEeWK-qBJoTmIJg" name="getPosition" specification="_F6-dUCyhEeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_F8Hs0SyhEeWK-qBJoTmIJg" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return">
                    <name xsi:nil="true"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>return sphere.getDirection();
     </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_F8IT4CyhEeWK-qBJoTmIJg" name="setPosition" specification="_F6_EYiyhEeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_F8IT4SyhEeWK-qBJoTmIJg" name="position" type="_KfZjMCx_EeWapP3vpHQOHQ"/>
                  <language>java</language>
                  <body>throw new UnsupportedOperationException(&quot;This object is immutable!&quot;);
     </body>
                </ownedBehavior>
                <ownedOperation xmi:id="_VAIzUCxZEeWvaK2JGTJcvA" name="ImmutableSphere" visibility="private" method="_KghkkCx_EeWapP3vpHQOHQ">
                  <eAnnotations xmi:id="_Kej1sCx_EeWapP3vpHQOHQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_Kej1sSx_EeWapP3vpHQOHQ" key="create"/>
                  </eAnnotations>
                  <ownedParameter xmi:id="_KfSOcCx_EeWapP3vpHQOHQ" type="_KfRAUCx_EeWapP3vpHQOHQ" direction="return"/>
                  <ownedParameter xmi:id="_KgIjACx_EeWapP3vpHQOHQ" name="sphere" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                </ownedOperation>
                <ownedOperation xmi:id="_grJ3sCxTEeWvaK2JGTJcvA" name="setSize" visibility="public" method="_grLF0ixTEeWvaK2JGTJcvA">
                  <ownedParameter xmi:id="_grKewCxTEeWvaK2JGTJcvA" name="size">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                  </ownedParameter>
                </ownedOperation>
                <ownedOperation xmi:id="_grJQoCxTEeWvaK2JGTJcvA" name="setDirection" visibility="public" method="_grLF0CxTEeWvaK2JGTJcvA">
                  <ownedParameter xmi:id="_vVYNQCxPEeWvaK2JGTJcvA" name="direction" type="_KfZjMCx_EeWapP3vpHQOHQ"/>
                </ownedOperation>
                <ownedOperation xmi:id="_KfSOcSx_EeWapP3vpHQOHQ" name="getDirection" method="_Kghkkyx_EeWapP3vpHQOHQ">
                  <ownedParameter xmi:id="_KgIjASx_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return"/>
                </ownedOperation>
                <ownedOperation xmi:id="_KfS1gSx_EeWapP3vpHQOHQ" name="getSize" method="_KghklSx_EeWapP3vpHQOHQ">
                  <ownedParameter xmi:id="_KfS1gix_EeWapP3vpHQOHQ" direction="return">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                  </ownedParameter>
                </ownedOperation>
                <ownedOperation xmi:id="_KfTckix_EeWapP3vpHQOHQ" name="split" method="_KgiLoCx_EeWapP3vpHQOHQ">
                  <ownedParameter xmi:id="_KfUDoCx_EeWapP3vpHQOHQ" type="_KfN9ACx_EeWapP3vpHQOHQ" isOrdered="true" direction="return">
                    <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_KfUDoSx_EeWapP3vpHQOHQ" value="*"/>
                  </ownedParameter>
                </ownedOperation>
                <ownedOperation xmi:id="_KgIjAix_EeWapP3vpHQOHQ" name="merge" method="_KgiLoyx_EeWapP3vpHQOHQ">
                  <ownedParameter xmi:id="_KgJKECx_EeWapP3vpHQOHQ" name="sphere" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                </ownedOperation>
                <ownedOperation xmi:id="_KgJxICx_EeWapP3vpHQOHQ" name="canBeMergedWidth" method="_KgiLpSx_EeWapP3vpHQOHQ">
                  <ownedParameter xmi:id="_KgJxISx_EeWapP3vpHQOHQ" name="sphere2" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                  <ownedParameter xmi:id="_KgJxIix_EeWapP3vpHQOHQ" direction="return">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#boolean"/>
                  </ownedParameter>
                </ownedOperation>
                <ownedOperation xmi:id="_F6-dUCyhEeWK-qBJoTmIJg" name="getPosition" method="_F8Hs0CyhEeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_F6-dUSyhEeWK-qBJoTmIJg" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return"/>
                </ownedOperation>
                <ownedOperation xmi:id="_F6_EYiyhEeWK-qBJoTmIJg" name="setPosition" method="_F8IT4CyhEeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_F6_EYyyhEeWK-qBJoTmIJg" name="position" type="_KfZjMCx_EeWapP3vpHQOHQ"/>
                </ownedOperation>
              </nestedClassifier>
            </packagedElement>
            <packagedElement xmi:type="uml:Package" xmi:id="__-w20CxOEeWvaK2JGTJcvA" name="ai">
              <packagedElement xmi:type="uml:Class" xmi:id="___DxwCxOEeWvaK2JGTJcvA" name="SphereMiners2015" isAbstract="true">
                <ownedAttribute xmi:id="_5ACQgCxWEeWvaK2JGTJcvA" name="actualTurn" visibility="private" type="_5AAbUCxWEeWvaK2JGTJcvA" association="_5AEFsCxWEeWvaK2JGTJcvA"/>
                <ownedAttribute xmi:id="_KgehQCx_EeWapP3vpHQOHQ" name="physMgr" visibility="private" type="_Kfm-kCx_EeWapP3vpHQOHQ" association="_VyAXsCyyEeWK-qBJoTmIJg"/>
                <ownedAttribute xmi:id="_l3ktECyyEeWK-qBJoTmIJg" name="aiName" visibility="private">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                </ownedAttribute>
                <ownedAttribute xmi:id="_E18pwCyzEeWK-qBJoTmIJg" name="ownSpheres" visibility="protected" type="_-pGUgCyHEeWapP3vpHQOHQ" isOrdered="true" association="_T9Aysyy3EeWK-qBJoTmIJg"/>
                <ownedAttribute xmi:id="_aJaVcCy1EeWK-qBJoTmIJg" name="allSpheres" visibility="private" type="_9O8IoCxQEeWvaK2JGTJcvA" association="_aJbjkCy1EeWK-qBJoTmIJg">
                  <qualifier xmi:id="_aJa8gSy1EeWK-qBJoTmIJg">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  </qualifier>
                </ownedAttribute>
                <ownedAttribute xmi:id="_T8-9gCy3EeWK-qBJoTmIJg" name="sphereMap" visibility="private" type="_-pGUgCyHEeWapP3vpHQOHQ" association="_T9AysCy3EeWK-qBJoTmIJg"/>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_5AC3kSxWEeWvaK2JGTJcvA" name="changeMoveDirection" specification="_zoqVcCxREeWvaK2JGTJcvA">
                  <ownedParameter xmi:id="_5AC3kixWEeWvaK2JGTJcvA" name="spheres" type="_M6-cUCxUEeWvaK2JGTJcvA">
                    <eAnnotations xmi:id="_5AC3kyxWEeWvaK2JGTJcvA" source="http://www.eclipse.org/uml2/2.0.0/UML">
                      <details xmi:id="_5AC3lCxWEeWvaK2JGTJcvA" key="final"/>
                    </eAnnotations>
                  </ownedParameter>
                  <language>java</language>
                  <body>actualTurn = new Function&lt;Void, Void>() {
         @Override
         public Void apply(Void arg0) {
             for (Entry&lt;Sphere, Position> entry : spheres.entrySet()) {
                 sphereMap.firstMatch(equalIfFirstPartMatches(entry.getKey()))
                          .get()
                          .getSecond()
                          .setPosition(entry.getValue());
             }
             return null;
         }
     };
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_AWrt8CxXEeWvaK2JGTJcvA" name="split" specification="_9X_hgCxREeWvaK2JGTJcvA">
                  <ownedParameter xmi:id="_KgmdECx_EeWapP3vpHQOHQ" name="sphere" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                  <language>java</language>
                  <body>actualTurn = new Function&lt;Void, Void>() {
         @Override
         public Void apply(Void arg0) {
             // lists cannot be changed directly therefore we need the phyiscsmanager here
             physMgr.split(sphereMap.firstMatch(equalIfFirstPartMatches(sphere))
                                    .get().getSecond(),
                           aiName);
             return null;
         }
     };
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_AWrt8ixXEeWvaK2JGTJcvA" name="merge" specification="_GZwc8CxSEeWvaK2JGTJcvA">
                  <ownedParameter xmi:id="_KgmdESx_EeWapP3vpHQOHQ" name="sphere1" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                  <ownedParameter xmi:id="_KgmdEix_EeWapP3vpHQOHQ" name="sphere2" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                  <language>java</language>
                  <body>actualTurn = new Function&lt;Void, Void>() {
         @Override
         public Void apply(Void arg0) {
             // lists cannot be changed directly therefore we need the phyiscsmanager here
             physMgr.merge(sphereMap.firstMatch(equalIfFirstPartMatches(sphere1))
                                    .get().getSecond(),
                           sphereMap.firstMatch(equalIfFirstPartMatches(sphere2))
                                    .get().getSecond(),
                           aiName);
             return null;
         }
     };
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_AWrt9SxXEeWvaK2JGTJcvA" name="evaluateTurn" specification="_4_8J4CxWEeWvaK2JGTJcvA">
                  <language>java</language>
                  <body>playTurn();
     actualTurn.apply(null);
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_KgnEICx_EeWapP3vpHQOHQ" name="setManager" specification="_Ke83QCx_EeWapP3vpHQOHQ">
                  <ownedParameter xmi:id="_l3lUICyyEeWK-qBJoTmIJg" name="mgr" type="_Kfm-kCx_EeWapP3vpHQOHQ"/>
                  <language>java</language>
                  <body>physMgr = mgr;
     allSpheres = mgr.getAISpheres();
     sphereMap = FluentIterable.from(allSpheres.get(aiName))
                               .transform(new Function&lt;MutableSphere, Pair&lt;Sphere, MutableSphere>>() {
         @Override
         public Pair&lt;Sphere, MutableSphere> apply(MutableSphere sphere) {
             return Pair.of(sphere.toImmutableSphere(), sphere);
         }
     });
     ownSpheres = sphereMap.transform(Pair.getProjectionToFirst());
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_l3lUISyyEeWK-qBJoTmIJg" name="setName" specification="_l3kGACyyEeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_l3lUIiyyEeWK-qBJoTmIJg" name="name">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>this.aiName = name;
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_4lIJoCy4EeWK-qBJoTmIJg" name="equalIfFirstPartMatches" specification="_4lG7gCy4EeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_4lIJoSy4EeWK-qBJoTmIJg" name="sphere" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                  <ownedParameter xmi:id="_4lIJoiy4EeWK-qBJoTmIJg" type="_8D9dcCy3EeWK-qBJoTmIJg" direction="return">
                    <name xsi:nil="true"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>return new Predicate&lt;Pair&lt;Sphere, MutableSphere>>() {
         @Override
         public boolean apply(Pair&lt;Sphere, MutableSphere> pair) {
             return pair.getFirst() == sphere;
         }
     };
 </body>
                </ownedBehavior>
                <ownedOperation xmi:id="___E_4CxOEeWvaK2JGTJcvA" name="init" visibility="protected" isAbstract="true">
                  <ownedComment xmi:id="_eL8GcCxXEeWvaK2JGTJcvA">
                    <body>Set up your AI, initial values for attributes, color of your spheres, ...</body>
                  </ownedComment>
                </ownedOperation>
                <ownedOperation xmi:id="___Fm8CxOEeWvaK2JGTJcvA" name="playTurn" visibility="protected" isAbstract="true">
                  <ownedComment xmi:id="_ULmC4CxXEeWvaK2JGTJcvA">
                    <body>In this method your AI has to specify what it wants to do, it can either
     * change the moving direction of any number of spheres controlled by you, or
     * split a sphere into two (half) parts, or merge two spheres to a bigger one.
     *
     * Note: the or is exclusive in this case, only one of the above operations
     *       is allowed at the same time</body>
                  </ownedComment>
                </ownedOperation>
                <ownedOperation xmi:id="_zoqVcCxREeWvaK2JGTJcvA" name="changeMoveDirection" visibility="protected" isLeaf="true" method="_5AC3kSxWEeWvaK2JGTJcvA">
                  <ownedComment xmi:id="_a9ZCAiyzEeWK-qBJoTmIJg">
                    <body>Changes the moving direction of a Sphere instantly, there is no kind of
     * friction or acceleration in between. However the speed cannot be changed
     * with this method, as it is dependant on the size of the Sphere and cannot
     * be set by a player.
     *
     * Executing this method prevents you from executing {@link SphereMiners2015#split(Sphere)}
     * and {@link SphereMiners2015#merge(Sphere, Sphere)} in this turn. The last
     * called method of these will be executed.</body>
                  </ownedComment>
                  <ownedParameter xmi:id="_3qS-4CxREeWvaK2JGTJcvA" name="spheres" type="_M6-cUCxUEeWvaK2JGTJcvA">
                    <eAnnotations xmi:id="_4_6UsCxWEeWvaK2JGTJcvA" source="http://www.eclipse.org/uml2/2.0.0/UML">
                      <details xmi:id="_4_6UsSxWEeWvaK2JGTJcvA" key="final"/>
                    </eAnnotations>
                  </ownedParameter>
                </ownedOperation>
                <ownedOperation xmi:id="_9X_hgCxREeWvaK2JGTJcvA" name="split" visibility="protected" isLeaf="true" method="_AWrt8CxXEeWvaK2JGTJcvA">
                  <ownedComment xmi:id="_6a7m8CyzEeWK-qBJoTmIJg">
                    <body>Splits the given sphere to two equally (half) sized ones.
     *
     * Executing this method prevents you from executing {@link SphereMiners2015#changeMoveDirection(Map)}
     * and {@link SphereMiners2015#merge(Sphere, Sphere)} in this turn. The last
     * called method of these will be executed.</body>
                  </ownedComment>
                  <ownedParameter xmi:id="_-B3k8CxREeWvaK2JGTJcvA" name="sphere" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                </ownedOperation>
                <ownedOperation xmi:id="_GZwc8CxSEeWvaK2JGTJcvA" name="merge" visibility="protected" isLeaf="true" method="_AWrt8ixXEeWvaK2JGTJcvA">
                  <ownedComment xmi:id="_6a7m8SyzEeWK-qBJoTmIJg">
                    <body>Merges the given spheres to one that has the accumulated size of both.
     *
     * Executing this method prevents you from executing {@link SphereMiners2015#changeMoveDirection(Map)}
     * and {@link SphereMiners2015#split(Sphere)} in this turn. The last
     * called method of these will be executed.</body>
                  </ownedComment>
                  <ownedParameter xmi:id="_I1tiACxSEeWvaK2JGTJcvA" name="sphere1" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                  <ownedParameter xmi:id="_K4LwECxSEeWvaK2JGTJcvA" name="sphere2" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                </ownedOperation>
                <ownedOperation xmi:id="_1eyesCxTEeWvaK2JGTJcvA" name="getSurroundingEnemies" visibility="protected" isLeaf="true">
                  <ownedComment xmi:id="_q6MYwCy6EeWK-qBJoTmIJg">
                    <body>Returns the enemies surrounding the given sphere in a certain distance.
     * @param sphere
     * @return</body>
                  </ownedComment>
                  <ownedParameter xmi:id="_1eyesSxTEeWvaK2JGTJcvA" type="_KfN9ACx_EeWapP3vpHQOHQ" direction="return">
                    <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_M65j0CxUEeWvaK2JGTJcvA" value="*"/>
                  </ownedParameter>
                  <ownedParameter xmi:id="_8VJSgCxTEeWvaK2JGTJcvA" name="sphere" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                </ownedOperation>
                <ownedOperation xmi:id="_4_8J4CxWEeWvaK2JGTJcvA" name="evaluateTurn" visibility="package" method="_AWrt9SxXEeWvaK2JGTJcvA">
                  <ownedComment xmi:id="_KgzRYCx_EeWapP3vpHQOHQ">
                    <body>Package private, this should only be called by AIManager!</body>
                  </ownedComment>
                </ownedOperation>
                <ownedOperation xmi:id="_Ke83QCx_EeWapP3vpHQOHQ" name="setManager" visibility="package" method="_KgnEICx_EeWapP3vpHQOHQ">
                  <ownedComment xmi:id="_KgzRYSx_EeWapP3vpHQOHQ">
                    <body>Package private, this should only be called and set by AImanager!</body>
                  </ownedComment>
                  <ownedParameter xmi:id="_KgnEISx_EeWapP3vpHQOHQ" name="mgr" type="_Kfm-kCx_EeWapP3vpHQOHQ"/>
                </ownedOperation>
                <ownedOperation xmi:id="_l3kGACyyEeWK-qBJoTmIJg" name="setName" visibility="package" method="_l3lUISyyEeWK-qBJoTmIJg">
                  <ownedComment xmi:id="_wLX-gCy6EeWK-qBJoTmIJg">
                    <body>Set the name used as identifier in maps throughout the framework</body>
                  </ownedComment>
                  <ownedParameter xmi:id="_l3kGASyyEeWK-qBJoTmIJg" name="name">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  </ownedParameter>
                </ownedOperation>
                <ownedOperation xmi:id="_4lG7gCy4EeWK-qBJoTmIJg" name="equalIfFirstPartMatches" visibility="private" isLeaf="true" isStatic="true" method="_4lIJoCy4EeWK-qBJoTmIJg">
                  <ownedComment xmi:id="_5E5j8Cy6EeWK-qBJoTmIJg">
                    <body>A predicate that finds a certain counterpart in fluentiterables filled
     * with pairs (unfortunately there is no fluent map implementation)</body>
                  </ownedComment>
                  <ownedParameter xmi:id="_4lG7gSy4EeWK-qBJoTmIJg" name="sphere" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                  <ownedParameter xmi:id="_4lG7giy4EeWK-qBJoTmIJg" type="_8D9dcCy3EeWK-qBJoTmIJg" direction="return"/>
                </ownedOperation>
              </packagedElement>
              <packagedElement xmi:type="uml:Association" xmi:id="_5AEFsCxWEeWvaK2JGTJcvA" name="" memberEnd="_5AEFsSxWEeWvaK2JGTJcvA _5ACQgCxWEeWvaK2JGTJcvA">
                <ownedEnd xmi:id="_5AEFsSxWEeWvaK2JGTJcvA" name="" type="___DxwCxOEeWvaK2JGTJcvA" association="_5AEFsCxWEeWvaK2JGTJcvA"/>
              </packagedElement>
              <packagedElement xmi:type="uml:Class" xmi:id="_ulHUUCxXEeWvaK2JGTJcvA" name="AIManager" isLeaf="true">
                <ownedAttribute xmi:id="_VBLVICxZEeWvaK2JGTJcvA" name="aiList" visibility="private" isLeaf="true" isOrdered="true" isReadOnly="true">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_VBLVISxZEeWvaK2JGTJcvA" value="*"/>
                  <defaultValue xmi:type="uml:LiteralString" xmi:id="_VBL8MCxZEeWvaK2JGTJcvA" value="new ArrayList&lt;>()"/>
                </ownedAttribute>
                <ownedAttribute xmi:id="_VBL8MSxZEeWvaK2JGTJcvA" name="ais" visibility="private" isLeaf="true" type="___DxwCxOEeWvaK2JGTJcvA" isOrdered="true" isReadOnly="true" association="_VBW7UCxZEeWvaK2JGTJcvA">
                  <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_VBL8MixZEeWvaK2JGTJcvA" value="1"/>
                  <qualifier xmi:id="_KfmXgCx_EeWapP3vpHQOHQ">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  </qualifier>
                  <defaultValue xmi:type="uml:LiteralString" xmi:id="_VBL8MyxZEeWvaK2JGTJcvA" value="new HashMap&lt;>()"/>
                </ownedAttribute>
                <ownedAttribute xmi:id="_VBMjQCxZEeWvaK2JGTJcvA" name="loader" visibility="private" type="_VAoikixZEeWvaK2JGTJcvA" association="_VBYJcCxZEeWvaK2JGTJcvA"/>
                <ownedAttribute xmi:id="_VBNKUSxZEeWvaK2JGTJcvA" name="AI_FILELOCATION" visibility="private" isLeaf="true" isReadOnly="true">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  <defaultValue xmi:type="uml:LiteralString" xmi:id="_VBNKUixZEeWvaK2JGTJcvA" value="getAIPath()"/>
                </ownedAttribute>
                <ownedAttribute xmi:id="_qG978CyBEeWapP3vpHQOHQ" name="AI_TIME" visibility="private">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                  <defaultValue xmi:type="uml:LiteralString" xmi:id="_qG-jACyBEeWapP3vpHQOHQ" value="50"/>
                </ownedAttribute>
                <ownedAttribute xmi:id="_o-jE4CyNEeWapP3vpHQOHQ" name="AI_FOLDER_NAME" visibility="private">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  <defaultValue xmi:type="uml:LiteralString" xmi:id="_o-jE4SyNEeWapP3vpHQOHQ" value="&quot;ais&quot;"/>
                </ownedAttribute>
                <ownedAttribute xmi:id="_XC-gECyhEeWK-qBJoTmIJg" name="physicsManager" visibility="private" type="_Kfm-kCx_EeWapP3vpHQOHQ" association="_XDAVQCyhEeWK-qBJoTmIJg"/>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_VBO_gCxZEeWvaK2JGTJcvA" name="AIManager" specification="_VAHlMixZEeWvaK2JGTJcvA">
                  <ownedParameter xmi:id="_RDoHYCyOEeWapP3vpHQOHQ" type="_ulHUUCxXEeWvaK2JGTJcvA" direction="return">
                    <name xsi:nil="true"/>
                  </ownedParameter>
                  <ownedParameter xmi:id="_RDoHYSyOEeWapP3vpHQOHQ" name="config" type="_RDlEECyOEeWapP3vpHQOHQ"/>
                  <language>java</language>
                  <body>config.inject(this);
     initalizeClassloader();
     makeAiList();
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_VBO_gixZEeWvaK2JGTJcvA" name="initalizeClassloader" specification="_VAIMQSxZEeWvaK2JGTJcvA">
                  <language>java</language>
                  <body>File fileloc = new File(AI_FILELOCATION);
     final URL[] url = new URL[1];
     url[0] = fileloc.toURI().toURL();
     AccessController.doPrivileged(new PrivilegedAction&lt;Object>() {
         public Object run() {
             loader = new URLClassLoader(url);
             return null;
         }
     });
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_VBO_hCxZEeWvaK2JGTJcvA" name="makeAiList" specification="_VAIMQyxZEeWvaK2JGTJcvA">
                  <language>java</language>
                  <body>// create Loader
     File fileloc = new File(AI_FILELOCATION);
     File[] classes = fileloc.listFiles();
     if (classes != null) {

         // if there are no files, classes will be null. (See JavaManual)
         for (File f : classes) {
             String fileName = f.getName();
             if (fileName.endsWith(&quot;.class&quot;)) {
                 fileName = fileName.split(&quot;.class&quot;)[0];
             }

             // only add ais if they are valid (extend SphereMiner2015 class)
             if (isValidAi(fileName)) {
                 aiList.add(fileName);
             }
         }
     }
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_VBO_hSxZEeWvaK2JGTJcvA" name="isValidAi" specification="_VAQvICxZEeWvaK2JGTJcvA">
                  <ownedParameter xmi:id="_VBO_hixZEeWvaK2JGTJcvA" name="path">
                    <eAnnotations xmi:id="_VBO_hyxZEeWvaK2JGTJcvA" source="http://www.eclipse.org/uml2/2.0.0/UML">
                      <details xmi:id="_VBO_iCxZEeWvaK2JGTJcvA" key="final"/>
                    </eAnnotations>
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  </ownedParameter>
                  <ownedParameter xmi:id="_VBO_iSxZEeWvaK2JGTJcvA" direction="return">
                    <name xsi:nil="true"/>
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#boolean"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>boolean validAi = true;
     Class&lt;?> loadedAI;
     try {
         loadedAI = loader.loadClass(path);

         // check if the ai implements the AI interface
         // in this case, the ai is valid because it implements the AI
         // interface, so the isValidAi method can instantly return true
         // without proceeding the check
         validAi = loadedAI.getSuperclass().getName().equals(SphereMiners2015.class.getName());

     } catch (ClassFormatError
             | NoClassDefFoundError
             | ClassNotFoundException e) {
         // do not throw an exception this method should check if the ai
         // is valid, so if not its not necessary to throw an exception
         validAi = false;
     }

     return validAi;
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_VBPmkCxZEeWvaK2JGTJcvA" name="getAIList" specification="_VAIMRCxZEeWvaK2JGTJcvA">
                  <ownedParameter xmi:id="_VBPmkSxZEeWvaK2JGTJcvA" isOrdered="true" direction="return">
                    <name xsi:nil="true"/>
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                    <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_VBPmkixZEeWvaK2JGTJcvA" value="*"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>return Collections.unmodifiableList(aiList);
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_VBPmkyxZEeWvaK2JGTJcvA" name="initializeGameAIs" specification="_VARWMSxZEeWvaK2JGTJcvA">
                  <ownedParameter xmi:id="_Kgl2ACx_EeWapP3vpHQOHQ" name="aisToPlay">
                    <eAnnotations xmi:id="_Kgl2ASx_EeWapP3vpHQOHQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
                      <details xmi:id="_Kgl2Aix_EeWapP3vpHQOHQ" key="final"/>
                    </eAnnotations>
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                    <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Kgl2Ayx_EeWapP3vpHQOHQ" value="*"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>ais.clear();

     for (String ai : aisToPlay) {
         if (!isValidAi(ai)) {
             throw new InvalidAILocationException(&quot;AI &quot; + ai + &quot; not found.&quot;);
         }
     }

     // load ais in discrete thread, so one's able to handle bad constructors.
     ScheduledExecutorService aiLoader = Executors.newSingleThreadScheduledExecutor();
     try {
         aiLoader.invokeAll(FluentIterable.of(aisToPlay).transform(new Function&lt;String, Callable&lt;Void>>() {
             @Override
             public Callable&lt;Void> apply(String ai) {
                 return loadAi(ai, loader);
             }
         }).toList());

         // pretty bad something interrupted our loading process...
     } catch (InterruptedException e1) {
         throw new RuntimeException(); // TODO investigate if this is really necessary
     }

     // wait for ailoader to finish or kill it in case of too long computation times
     try {
         if (!aiLoader.awaitTermination(AI_TIME, TimeUnit.MILLISECONDS)) {
             aiLoader.shutdownNow();
         }
     } catch (InterruptedException e) {
         // Do nothing, the ais are instantiated or not at this point, in
         // case they aren't the next if clause throws an exception
     }

     // if loading was not successful throw an exception
     // otherwise set the relevant fields in the ai
     // and call the init method
     for (String aiStr : aisToPlay) {
         SphereMiners2015 ai = ais.get(aiStr);
         if (ai == null) {
             throw new InstantiationException(&quot;The Ais could not be loaded properly.&quot;);
         } else {
             ai.setName(aiStr);
             ai.setManager(physicsManager);
             ai.init();
         }
     }
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_VBPmmixZEeWvaK2JGTJcvA" name="loadAi" specification="_VA6PYyxZEeWvaK2JGTJcvA">
                  <ownedParameter xmi:id="_sapDMCyLEeWapP3vpHQOHQ" name="ai">
                    <eAnnotations xmi:id="_sapDMSyLEeWapP3vpHQOHQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
                      <details xmi:id="_sapDMiyLEeWapP3vpHQOHQ" key="final"/>
                    </eAnnotations>
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  </ownedParameter>
                  <ownedParameter xmi:id="_sapDMyyLEeWapP3vpHQOHQ" name="loader" type="_VAoikixZEeWvaK2JGTJcvA">
                    <eAnnotations xmi:id="_sapDNCyLEeWapP3vpHQOHQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
                      <details xmi:id="_sapDNSyLEeWapP3vpHQOHQ" key="final"/>
                    </eAnnotations>
                  </ownedParameter>
                  <ownedParameter xmi:id="_sapDNiyLEeWapP3vpHQOHQ" type="_VAs0ACxZEeWvaK2JGTJcvA" direction="return">
                    <name xsi:nil="true"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>return new Callable&lt;Void>() {

         @Override
         public Void call() throws Exception {
             Class&lt;?> cl;
             try {
                 cl = loader.loadClass(ai);
             } catch (ClassFormatError
                     | NoClassDefFoundError
                     | ClassNotFoundException e) {
                 // do nothing, exception is handled in another method
                 return null;
             }

             // search for constructor with zero arguments, and make it
             // accessible
             for (Constructor&lt;?> ct : cl.getConstructors()) {
                 if (ct.getParameterTypes().length == 0) {
                     ct.setAccessible(true);
                     try {
                         ais.put(ai, (SphereMiners2015) ct.newInstance());

                     } catch (InstantiationException
                             | IllegalAccessException
                             | IllegalArgumentException
                             | InvocationTargetException
                             | VerifyError e) {
                         // if any of these errors occured the ai could not
                         // be loaded properly, so the method returns without
                         // doing anything
                         return null;
                     }
                     break;
                 }
             }
             return null;
         }
     };
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_VBPmpSxZEeWvaK2JGTJcvA" name="applyMoves" specification="_VA8EkixZEeWvaK2JGTJcvA">
                  <language>java</language>
                  <body>for (SphereMiners2015 ai : ais.values()) {
         Preconditions.checkNotNull(ai, &quot;Any of the Ais is not initialized&quot;);
     }

     // execute AIs and Launcher
     ExecutorService threadpool = Executors.newCachedThreadPool();
     List&lt;Future&lt;Void>> retvals =
             threadpool.invokeAll(FluentIterable.from(ais.values())
                                                .transform(new Function&lt;SphereMiners2015, Callable&lt;Void>>() {

         @Override
         public Callable&lt;Void> apply(SphereMiners2015 arg0) {
             return new Callable&lt;Void>() {

                 @Override
                 public Void call() throws Exception {
                     arg0.evaluateTurn();
                     return null;
                 }
             };
         }
     }).toList());

     if (!threadpool.awaitTermination(AI_TIME, TimeUnit.MILLISECONDS)) {
         threadpool.shutdownNow();
         String[] aiStr = new String[ais.size()];
         ais.keySet().toArray(aiStr);
         for (int i = 0; i &lt; ais.size(); i++) {
             Future&lt;Void> ret = retvals.get(i);
             if (ret.isCancelled()) {
                 try {
                     reinitializeAi(aiStr[i]);
                 } catch (ClassNotFoundException
                         | IllegalAccessException
                         | InstantiationException e1) {
                     throw new Error(&quot;Reinitialization of &quot;
                             + ais.get(aiStr[i]).getClass().getName()
                             + &quot; FAILED!&quot;);
                 }
             }
             i++;
         }
     } 
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_VBQNoCxZEeWvaK2JGTJcvA" name="reinitializeAi" specification="_VA_u8CxZEeWvaK2JGTJcvA">
                  <ownedParameter xmi:id="_CmcNcCyAEeWapP3vpHQOHQ" name="ai">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>Class&lt;?> cl = loader.loadClass(ais.get(ai).getClass().getName());
     ais.remove(ai);
     SphereMiners2015 newAi = (SphereMiners2015) cl.newInstance();
     newAi.setName(ai);
     newAi.setManager(physicsManager);
     newAi.init();
     ais.put(ai, newAi);
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_o-jr8CyNEeWapP3vpHQOHQ" name="getAIPath" specification="_o-bJECyNEeWapP3vpHQOHQ">
                  <ownedParameter xmi:id="_o-jr8SyNEeWapP3vpHQOHQ" direction="return">
                    <name xsi:nil="true"/>
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>String fileLoc = null;
     try {
         fileLoc = URLDecoder.decode(AIManager.class.getProtectionDomain()
                 .getCodeSource().getLocation().getPath(), &quot;UTF-8&quot;);
     } catch (UnsupportedEncodingException e) {
         // if this exception is thrown further executing the framework
         // makes no sense, so throw a runtime exception
         throw new RuntimeException(&quot;Invalid encoding chosen for URLDecoder.&quot;);
     }

     // if everything is packaged in a jar file remove the last part and add the ai folder
     if (fileLoc.endsWith(&quot;.jar&quot;)) {
         int index = fileLoc.lastIndexOf(&quot;/&quot;);
         fileLoc = fileLoc.substring(0, index + 1);
         fileLoc += AI_FOLDER_NAME;

         // if the program is run without jar file just append the ai folder one step over in the hierarchy
     } else {
         fileLoc += &quot;../&quot; + AI_FOLDER_NAME;
     }

     return fileLoc;
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_XC_uMCyhEeWK-qBJoTmIJg" name="setPhysicsManager" specification="_XC61sCyhEeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_XC_uMSyhEeWK-qBJoTmIJg" name="physMgr" type="_Kfm-kCx_EeWapP3vpHQOHQ"/>
                  <language>java</language>
                  <body>physicsManager = physMgr;
 </body>
                </ownedBehavior>
                <ownedOperation xmi:id="_VAHlMixZEeWvaK2JGTJcvA" name="AIManager" method="_VBO_gCxZEeWvaK2JGTJcvA" raisedException="_VA4aMCxZEeWvaK2JGTJcvA _VAn7gCxZEeWvaK2JGTJcvA _R1wH4CyOEeWapP3vpHQOHQ">
                  <eAnnotations xmi:id="_VAHlNCxZEeWvaK2JGTJcvA" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_VAIMQCxZEeWvaK2JGTJcvA" key="create"/>
                  </eAnnotations>
                  <ownedComment xmi:id="_VBTQ8CxZEeWvaK2JGTJcvA">
                    <body>The constructor of this class. It is responsible for listing the possible
     * AIs, so they can be displayed in the View and chosen to simulate games.
     *
     * @throws ClassNotFoundException Could appear if a class file is deleted
     *                                in the runtime of this method
     * @throws MalformedURLException  Could appear if the Constants.AI_LOCATION
     *                                was malformed
     * @throws InvalidConfigurationException</body>
                  </ownedComment>
                  <ownedParameter xmi:id="_VAHlMyxZEeWvaK2JGTJcvA" type="_ulHUUCxXEeWvaK2JGTJcvA" direction="return"/>
                  <ownedParameter xmi:id="_RDm5QCyOEeWapP3vpHQOHQ" name="config" type="_RDlEECyOEeWapP3vpHQOHQ"/>
                </ownedOperation>
                <ownedOperation xmi:id="_VAIMQSxZEeWvaK2JGTJcvA" name="initalizeClassloader" visibility="private" method="_VBO_gixZEeWvaK2JGTJcvA" raisedException="_VAn7gCxZEeWvaK2JGTJcvA">
                  <ownedComment xmi:id="_VBTQ8SxZEeWvaK2JGTJcvA">
                    <body>this function initialises the classloader.
     *
     * @throws MalformedURLException Could appear if the Constants.AI_LOCATION
     *                               was malformed</body>
                  </ownedComment>
                </ownedOperation>
                <ownedOperation xmi:id="_VAIMQyxZEeWvaK2JGTJcvA" name="makeAiList" visibility="private" method="_VBO_hCxZEeWvaK2JGTJcvA" raisedException="_VA4aMCxZEeWvaK2JGTJcvA">
                  <ownedComment xmi:id="_VBTQ8yxZEeWvaK2JGTJcvA">
                    <body>This method creates the list of the possible AIs.
     *
     * @throws ClassNotFoundException Could appear if a class file is deleted
     *                                in the runtime of this method</body>
                  </ownedComment>
                </ownedOperation>
                <ownedOperation xmi:id="_VAIMRCxZEeWvaK2JGTJcvA" name="getAIList" method="_VBPmkCxZEeWvaK2JGTJcvA">
                  <ownedComment xmi:id="_VBTQ9SxZEeWvaK2JGTJcvA">
                    <body>This method returns the complete list of AIs which can be chosen to
     * simulate a game.
     *
     * @return The available AIs.</body>
                  </ownedComment>
                  <ownedParameter xmi:id="_VAIMRSxZEeWvaK2JGTJcvA" isOrdered="true" direction="return">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                    <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_VAIMRixZEeWvaK2JGTJcvA" value="*"/>
                  </ownedParameter>
                </ownedOperation>
                <ownedOperation xmi:id="_VAQvICxZEeWvaK2JGTJcvA" name="isValidAi" visibility="private" method="_VBO_hSxZEeWvaK2JGTJcvA">
                  <ownedComment xmi:id="_VBTQ9CxZEeWvaK2JGTJcvA">
                    <body>This method checks if the selected class is of a valid AI type.
     *
     * @param path The path to the selected class.
     * @return The boolean result, if the class is correct.</body>
                  </ownedComment>
                  <ownedParameter xmi:id="_VAQvISxZEeWvaK2JGTJcvA" name="path">
                    <eAnnotations xmi:id="_VAQvJCxZEeWvaK2JGTJcvA" source="http://www.eclipse.org/uml2/2.0.0/UML">
                      <details xmi:id="_VARWMCxZEeWvaK2JGTJcvA" key="final"/>
                    </eAnnotations>
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  </ownedParameter>
                  <ownedParameter xmi:id="_VAQvIixZEeWvaK2JGTJcvA" direction="return">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#boolean"/>
                  </ownedParameter>
                </ownedOperation>
                <ownedOperation xmi:id="_VARWMSxZEeWvaK2JGTJcvA" name="initializeGameAIs" method="_VBPmkyxZEeWvaK2JGTJcvA" raisedException="_VA5BQSxZEeWvaK2JGTJcvA _F71Y8CyhEeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_VBPmlyxZEeWvaK2JGTJcvA" name="aisToPlay">
                    <eAnnotations xmi:id="_VBPmmCxZEeWvaK2JGTJcvA" source="http://www.eclipse.org/uml2/2.0.0/UML">
                      <details xmi:id="_VBPmmSxZEeWvaK2JGTJcvA" key="final"/>
                    </eAnnotations>
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                    <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_1rwU8CxZEeWvaK2JGTJcvA" value="*"/>
                  </ownedParameter>
                </ownedOperation>
                <ownedOperation xmi:id="_VA6PYyxZEeWvaK2JGTJcvA" name="loadAi" visibility="private" method="_VBPmmixZEeWvaK2JGTJcvA">
                  <ownedComment xmi:id="_VBTQ9yxZEeWvaK2JGTJcvA">
                    <body>This method returns a thread where an ai will be initialized if possible.
     *
     * @param ai             the name of the class which should be initialized
     * @param loader         the loader which is used for initialization
     * @param aiToInitialize this enum indicates which global variable (ai1, ai2) should be
     *                       assigned the newly initialized ai
     * @return the Thread for the initialization</body>
                  </ownedComment>
                  <ownedParameter xmi:id="_VA6PZCxZEeWvaK2JGTJcvA" name="ai">
                    <eAnnotations xmi:id="_VA62dCxZEeWvaK2JGTJcvA" source="http://www.eclipse.org/uml2/2.0.0/UML">
                      <details xmi:id="_Ke3XsCx_EeWapP3vpHQOHQ" key="final"/>
                    </eAnnotations>
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  </ownedParameter>
                  <ownedParameter xmi:id="_VA62cCxZEeWvaK2JGTJcvA" name="loader" type="_VAoikixZEeWvaK2JGTJcvA">
                    <eAnnotations xmi:id="_VA62dixZEeWvaK2JGTJcvA" source="http://www.eclipse.org/uml2/2.0.0/UML">
                      <details xmi:id="_Ke3-wCx_EeWapP3vpHQOHQ" key="final"/>
                    </eAnnotations>
                  </ownedParameter>
                  <ownedParameter xmi:id="_VA62cixZEeWvaK2JGTJcvA" type="_VAs0ACxZEeWvaK2JGTJcvA" direction="return"/>
                </ownedOperation>
                <ownedOperation xmi:id="_VA8EkixZEeWvaK2JGTJcvA" name="applyMoves" method="_VBPmpSxZEeWvaK2JGTJcvA" raisedException="_VA7dgSxZEeWvaK2JGTJcvA _VA8EkCxZEeWvaK2JGTJcvA">
                  <ownedComment xmi:id="_AodZoCyHEeWapP3vpHQOHQ">
                    <body>This method lets all AIs compute one step. If an AIs calculation lasts
     * too long, it is terminated and reinitialized again. After the threads
     * finished their calculation all their moves are given to the Physics. If
     * a Thread is terminated before it could finish its calculations all its
     * moves until the termination are given to the Physics.
     *
     * @throws IllegalArgumentException if the tick-parameter is invalid (e.g. null).
     * @throws InterruptedException</body>
                  </ownedComment>
                </ownedOperation>
                <ownedOperation xmi:id="_VA_u8CxZEeWvaK2JGTJcvA" name="reinitializeAi" visibility="private" method="_VBQNoCxZEeWvaK2JGTJcvA" raisedException="_VA4aMCxZEeWvaK2JGTJcvA _VA_H4CxZEeWvaK2JGTJcvA _VA5BQSxZEeWvaK2JGTJcvA">
                  <ownedComment xmi:id="_VBT4AixZEeWvaK2JGTJcvA">
                    <body>This method reinitializes an AI.
     *
     * @param ai determinate which AI should be reinitialized.
     * @throws ClassNotFoundException Could appear if a class file is deleted in the runtime of
     *                                this method
     * @throws InstantiationException if the class can't be instantiated anymore.
     * @throws IllegalAccessException if the class could not be accessed.</body>
                  </ownedComment>
                  <ownedParameter xmi:id="_VBQNoSxZEeWvaK2JGTJcvA" name="ai">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  </ownedParameter>
                </ownedOperation>
                <ownedOperation xmi:id="_o-bJECyNEeWapP3vpHQOHQ" name="getAIPath" method="_o-jr8CyNEeWapP3vpHQOHQ">
                  <ownedComment xmi:id="_o-jr8iyNEeWapP3vpHQOHQ">
                    <body>This method creates the ai path, depending on the path of this class.
     *
     * @throws UnsupportedEncodingException if the encoding is invalid
     *                                      (Will never happen a standard java charset is used)
     * @ return The file location of the ai.</body>
                  </ownedComment>
                  <ownedParameter xmi:id="_o-cXMCyNEeWapP3vpHQOHQ" direction="return">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  </ownedParameter>
                </ownedOperation>
                <ownedOperation xmi:id="_XC61sCyhEeWK-qBJoTmIJg" name="setPhysicsManager" method="_XC_uMCyhEeWK-qBJoTmIJg">
                  <ownedComment xmi:id="_XC_uMiyhEeWK-qBJoTmIJg">
                    <body>Adds a physicsManager instance to this class
     * @param physMgr</body>
                  </ownedComment>
                  <ownedParameter xmi:id="_XC61sSyhEeWK-qBJoTmIJg" name="physMgr" type="_Kfm-kCx_EeWapP3vpHQOHQ"/>
                </ownedOperation>
              </packagedElement>
              <packagedElement xmi:type="uml:Class" xmi:id="_VA5oUSxZEeWvaK2JGTJcvA" name="InvalidAiLocationException"/>
              <packagedElement xmi:type="uml:Class" xmi:id="_VA6PYSxZEeWvaK2JGTJcvA" name="Team"/>
              <packagedElement xmi:type="uml:Class" xmi:id="_VA62eixZEeWvaK2JGTJcvA" name="TickInformationStore"/>
              <packagedElement xmi:type="uml:Class" xmi:id="_VA8roCxZEeWvaK2JGTJcvA" name="AiAction"/>
              <packagedElement xmi:type="uml:Class" xmi:id="_VA9SsCxZEeWvaK2JGTJcvA" name="AiMethods"/>
              <packagedElement xmi:type="uml:Class" xmi:id="_VA9SsixZEeWvaK2JGTJcvA" name="SpecificTick"/>
              <packagedElement xmi:type="uml:Class" xmi:id="_VBCLMixZEeWvaK2JGTJcvA" name="Position"/>
              <packagedElement xmi:type="uml:Association" xmi:id="_VBW7UCxZEeWvaK2JGTJcvA" name="" memberEnd="_VBW7USxZEeWvaK2JGTJcvA _VBL8MSxZEeWvaK2JGTJcvA">
                <ownedEnd xmi:id="_VBW7USxZEeWvaK2JGTJcvA" name="" type="_ulHUUCxXEeWvaK2JGTJcvA" association="_VBW7UCxZEeWvaK2JGTJcvA"/>
              </packagedElement>
              <packagedElement xmi:type="uml:Association" xmi:id="_VBYJcCxZEeWvaK2JGTJcvA" name="" memberEnd="_VBYJcSxZEeWvaK2JGTJcvA _VBMjQCxZEeWvaK2JGTJcvA">
                <ownedEnd xmi:id="_VBYJcSxZEeWvaK2JGTJcvA" name="" type="_ulHUUCxXEeWvaK2JGTJcvA" association="_VBYJcCxZEeWvaK2JGTJcvA"/>
              </packagedElement>
              <packagedElement xmi:type="uml:Association" xmi:id="_XDAVQCyhEeWK-qBJoTmIJg" name="" memberEnd="_XDAVQSyhEeWK-qBJoTmIJg _XC-gECyhEeWK-qBJoTmIJg">
                <ownedEnd xmi:id="_XDAVQSyhEeWK-qBJoTmIJg" name="" type="_ulHUUCxXEeWvaK2JGTJcvA" association="_XDAVQCyhEeWK-qBJoTmIJg"/>
              </packagedElement>
              <packagedElement xmi:type="uml:Association" xmi:id="_VyAXsCyyEeWK-qBJoTmIJg" name="" memberEnd="_VyAXsSyyEeWK-qBJoTmIJg _KgehQCx_EeWapP3vpHQOHQ">
                <ownedEnd xmi:id="_VyAXsSyyEeWK-qBJoTmIJg" name="" type="___DxwCxOEeWvaK2JGTJcvA" association="_VyAXsCyyEeWK-qBJoTmIJg"/>
              </packagedElement>
              <packagedElement xmi:type="uml:Association" xmi:id="_aJbjkCy1EeWK-qBJoTmIJg" name="" memberEnd="_aJbjkSy1EeWK-qBJoTmIJg _aJaVcCy1EeWK-qBJoTmIJg">
                <ownedEnd xmi:id="_aJbjkSy1EeWK-qBJoTmIJg" name="" type="___DxwCxOEeWvaK2JGTJcvA" association="_aJbjkCy1EeWK-qBJoTmIJg"/>
              </packagedElement>
              <packagedElement xmi:type="uml:Association" xmi:id="_T9AysCy3EeWK-qBJoTmIJg" name="" memberEnd="_T9AysSy3EeWK-qBJoTmIJg _T8-9gCy3EeWK-qBJoTmIJg">
                <ownedEnd xmi:id="_T9AysSy3EeWK-qBJoTmIJg" name="" type="___DxwCxOEeWvaK2JGTJcvA" association="_T9AysCy3EeWK-qBJoTmIJg"/>
              </packagedElement>
              <packagedElement xmi:type="uml:Association" xmi:id="_T9Aysyy3EeWK-qBJoTmIJg" name="" memberEnd="_T9AytCy3EeWK-qBJoTmIJg _E18pwCyzEeWK-qBJoTmIJg">
                <ownedEnd xmi:id="_T9AytCy3EeWK-qBJoTmIJg" name="" type="___DxwCxOEeWvaK2JGTJcvA" association="_T9Aysyy3EeWK-qBJoTmIJg"/>
              </packagedElement>
            </packagedElement>
            <packagedElement xmi:type="uml:Package" xmi:id="_Ke_6kCx_EeWapP3vpHQOHQ" name="physics">
              <packagedElement xmi:type="uml:Class" xmi:id="_Kfm-kCx_EeWapP3vpHQOHQ" name="PhysicsManager">
                <ownedAttribute xmi:id="_b8locCyjEeWK-qBJoTmIJg" name="spheresPerPlayer" visibility="private" isLeaf="true" type="_9O8IoCxQEeWvaK2JGTJcvA" isReadOnly="true" association="_b8oEsCyjEeWK-qBJoTmIJg">
                  <qualifier xmi:id="_b8mPgSyjEeWK-qBJoTmIJg">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  </qualifier>
                  <defaultValue xmi:type="uml:LiteralString" xmi:id="_VN4wcCzSEeWK-qBJoTmIJg" value="new HashMap&lt;>()"/>
                </ownedAttribute>
                <ownedAttribute xmi:id="_b8mPgiyjEeWK-qBJoTmIJg" name="initialDistance" visibility="private">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                  <defaultValue xmi:type="uml:LiteralString" xmi:id="_b8mPgyyjEeWK-qBJoTmIJg" value="50"/>
                </ownedAttribute>
                <ownedAttribute xmi:id="_824CwCykEeWK-qBJoTmIJg" name="fieldWidth" visibility="private">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                  <defaultValue xmi:type="uml:LiteralString" xmi:id="_824CwSykEeWK-qBJoTmIJg" value="100"/>
                </ownedAttribute>
                <ownedAttribute xmi:id="_824p0CykEeWK-qBJoTmIJg" name="fieldHeight" visibility="private">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                  <defaultValue xmi:type="uml:LiteralString" xmi:id="_824p0SykEeWK-qBJoTmIJg" value="100"/>
                </ownedAttribute>
                <ownedAttribute xmi:id="_-bHnQCylEeWK-qBJoTmIJg" name="config" visibility="private" isLeaf="true" type="_RDlEECyOEeWapP3vpHQOHQ" isReadOnly="true" association="_-bIOUCylEeWK-qBJoTmIJg"/>
                <ownedAttribute xmi:id="_nt_rECzREeWK-qBJoTmIJg" name="framesPerSecond" visibility="private">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                  <defaultValue xmi:type="uml:LiteralString" xmi:id="_nt_rESzREeWK-qBJoTmIJg" value="25"/>
                </ownedAttribute>
                <ownedAttribute xmi:id="_nuASICzREeWK-qBJoTmIJg" name="tick" visibility="private">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                  <defaultValue xmi:type="uml:LiteralString" xmi:id="_nuASISzREeWK-qBJoTmIJg" value="1.0 / framesPerSecond"/>
                </ownedAttribute>
                <ownedAttribute xmi:id="_nuASJSzREeWK-qBJoTmIJg" name="calcsPerTick" visibility="private">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                  <defaultValue xmi:type="uml:LiteralString" xmi:id="_nuASJizREeWK-qBJoTmIJg" value="10"/>
                </ownedAttribute>
                <ownedAttribute xmi:id="_nuASKizREeWK-qBJoTmIJg" name="PART_TICK" visibility="private" isLeaf="true" isReadOnly="true">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                  <defaultValue xmi:type="uml:LiteralString" xmi:id="_nuA5MCzREeWK-qBJoTmIJg" value="tick / calcsPerTick"/>
                </ownedAttribute>
                <ownedAttribute xmi:id="_VN7zwCzSEeWK-qBJoTmIJg" name="aiManager" visibility="private" type="_ulHUUCxXEeWvaK2JGTJcvA" association="_VN9B4CzSEeWK-qBJoTmIJg"/>
                <ownedAttribute xmi:id="_veVI8CzTEeWK-qBJoTmIJg" name="maxSpeed" visibility="private">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                  <defaultValue xmi:type="uml:LiteralString" xmi:id="_veVI8SzTEeWK-qBJoTmIJg" value="1.0"/>
                </ownedAttribute>
                <ownedAttribute xmi:id="_lW1fECzUEeWK-qBJoTmIJg" name="minSpeed" visibility="private">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                  <defaultValue xmi:type="uml:LiteralString" xmi:id="_lW1fESzUEeWK-qBJoTmIJg" value="1.0"/>
                </ownedAttribute>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_aRiRUCyiEeWK-qBJoTmIJg" name="createInitialTick" specification="_aRQkgCyiEeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_aRiRUSyiEeWK-qBJoTmIJg" name="ais">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                    <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_aRiRUiyiEeWK-qBJoTmIJg" value="*"/>
                  </ownedParameter>
                  <ownedParameter xmi:id="_aRiRUyyiEeWK-qBJoTmIJg" type="_WuO_ICyhEeWK-qBJoTmIJg" direction="return">
                    <name xsi:nil="true"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>Position initalPos = new Position(fieldWidth/2, fieldHeight/2);
     double angle = 360.0/ais.length;
     
     // b² = c² - a², c = 1 im Einheitskreis, a = sin Alpha * c im Einheitskreis
     // Strahlensatz: ZA zu BA = ZA' zu BA', c zu a = x*c zu x*a sodass x*a = 5 
     double a = Math.sin(angle/360*Math.PI);
     double radius = initialDistance / 2 / a;

     int i = 0;
     for (String ai : ais) {
         // create new sphere for current player
         List&lt;MutableSphere> sphereList = Lists.newArrayList();
         try {
             MutableSphere sphere = new MutableSphere(config);
             Position addPos = new Position(radius * Math.cos(i * 2 * Math.PI / ais.length),
                                            radius * Math.sin(i * 2 * Math.PI / ais.length));
             sphere.setPosition(initalPos.add(addPos));
             sphereList.add(sphere);
         } catch (InvalidConfigurationException e) {
             // this will never happen, hopefully...
             throw new RuntimeException();
         }
         spheresPerPlayer.put(ai, sphereList);
         i++;
     }
     return snapshot();
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_aRiRVCyiEeWK-qBJoTmIJg" name="applyPhysics" specification="_aRRLkSyiEeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_aRiRVSyiEeWK-qBJoTmIJg" type="_WuO_ICyhEeWK-qBJoTmIJg" direction="return">
                    <name xsi:nil="true"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>for (int i = 0; i &lt; calcsPerTick; i++) {
         // 1. let ais do ther moves
         aiManager.applyMoves();

         // 2. move all spheres
         moveSpheres();

         // 3. merge overlapping spheres of opponent ais
         mergeSpheres();
     }
     return snapshot();
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_aRi4YCyiEeWK-qBJoTmIJg" name="getAISpheres" specification="_aRRLkiyiEeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_G1JPcCy1EeWK-qBJoTmIJg" type="_M6-cUCxUEeWvaK2JGTJcvA" direction="return">
                    <name xsi:nil="true"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>return Collections.unmodifiableMap(spheresPerPlayer);
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_824p1SykEeWK-qBJoTmIJg" name="PhysicsManager" specification="_822NkCykEeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_T3HVUCzTEeWK-qBJoTmIJg" name="config" type="_RDlEECyOEeWapP3vpHQOHQ"/>
                  <ownedParameter xmi:id="_T3HVUSzTEeWK-qBJoTmIJg" type="_Kfm-kCx_EeWapP3vpHQOHQ" direction="return">
                    <name xsi:nil="true"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>config.inject(this);
     this.config = config;
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_gRB3ICy5EeWK-qBJoTmIJg" name="merge" specification="_gRBQECy5EeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_gRB3ISy5EeWK-qBJoTmIJg" name="sphere1" type="_KfN9ACx_EeWapP3vpHQOHQ"/>
                  <ownedParameter xmi:id="_gRB3Iiy5EeWK-qBJoTmIJg" name="sphere2" type="_KfN9ACx_EeWapP3vpHQOHQ"/>
                  <ownedParameter xmi:id="_gRB3Iyy5EeWK-qBJoTmIJg" name="aiName">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>if (sphere1.canBeMergedWidth(sphere2)) {
         List&lt;MutableSphere> spheres = spheresPerPlayer.get(aiName);
         spheres.remove(sphere2);
         sphere1.merge(sphere2);
     }
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_lmJhsCy5EeWK-qBJoTmIJg" name="split" specification="_lmI6oCy5EeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_lmJhsSy5EeWK-qBJoTmIJg" name="sphere" type="_KfN9ACx_EeWapP3vpHQOHQ"/>
                  <ownedParameter xmi:id="_lmJhsiy5EeWK-qBJoTmIJg" name="aiName">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>List&lt;MutableSphere> spheres = spheresPerPlayer.get(aiName);
     spheres.remove(sphere);
     spheres.addAll(sphere.split());
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_T3HVUizTEeWK-qBJoTmIJg" name="setAIManager" specification="_T3FgICzTEeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_T3HVUyzTEeWK-qBJoTmIJg" name="mgr" type="_ulHUUCxXEeWvaK2JGTJcvA"/>
                  <language>java</language>
                  <body>aiManager = mgr;
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_zCp5YCzVEeWK-qBJoTmIJg" name="moveSpheres" specification="_zCndICzVEeWK-qBJoTmIJg">
                  <language>java</language>
                  <body>// get size of biggest sphere
     int maxSize = 0;
     for (List&lt;MutableSphere> spheres : spheresPerPlayer.values()) {
         for (MutableSphere sphere : spheres) {
             if (sphere.getSize() > maxSize) {
                 maxSize = sphere.getSize();
             }
         }
     }
     for (List&lt;MutableSphere> spheres : spheresPerPlayer.values()) {
         for (MutableSphere sphere : spheres) {
             double speed = (maxSize - sphere.getSize()) / maxSize * maxSpeed * PART_TICK;
             Position tmpPos = sphere.getPosition().add(sphere.getDirection().normalize().mult(speed));
             double x = tmpPos.getX() % fieldWidth;
             double y = tmpPos.getY() % fieldHeight;
             sphere.setPosition(new Position(x, y));
         }
     }
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_EGuMcCzYEeWK-qBJoTmIJg" name="mergeSpheres" specification="_EGm3sCzYEeWK-qBJoTmIJg">
                  <language>java</language>
                  <body>for(Entry&lt;String, List&lt;MutableSphere>> entry : spheresPerPlayer.entrySet()) {
         String playerName = entry.getKey();
         for (MutableSphere playerSphere : entry.getValue()) {
             for(Entry&lt;String, List&lt;MutableSphere>> enemies : spheresPerPlayer.entrySet()) {
                 if (enemies.getKey().equals(playerName)) continue;
                 Iterator&lt;MutableSphere> it = enemies.getValue().iterator();
                 while (it.hasNext()) {
                     MutableSphere enemySphere = it.next();
                     if (playerSphere.canBeMergedWidth(enemySphere)) {
                         it.remove();
                         playerSphere.merge(enemySphere);
                     }
                 }
             }
         }
     }
 </body>
                </ownedBehavior>
                <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_WbRFYCzZEeWK-qBJoTmIJg" name="snapshot" specification="_WbOpICzZEeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_nV2-QCzZEeWK-qBJoTmIJg" type="_WuO_ICyhEeWK-qBJoTmIJg" direction="return">
                    <name xsi:nil="true"/>
                  </ownedParameter>
                  <language>java</language>
                  <body>Map&lt;String, List&lt;Sphere>> newMap = new HashMap&lt;>();
     for (Entry&lt;String, List&lt;MutableSphere>> entry : spheresPerPlayer.entrySet()) {
         ArrayList&lt;Sphere> newList = new ArrayList&lt;>();
         for (MutableSphere sphere : entry.getValue()) {
             newList.add(sphere.immutableCopy());
         }
         newMap.put(entry.getKey(), Collections.unmodifiableList(newList));
     }
     return new Tick(Collections.unmodifiableMap(newMap));
 </body>
                </ownedBehavior>
                <ownedOperation xmi:id="_aRQkgCyiEeWK-qBJoTmIJg" name="createInitialTick" method="_aRiRUCyiEeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_aRQkgSyiEeWK-qBJoTmIJg" name="ais">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                    <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_aRRLkCyiEeWK-qBJoTmIJg" value="*"/>
                  </ownedParameter>
                  <ownedParameter xmi:id="_aRhqQCyiEeWK-qBJoTmIJg" type="_WuO_ICyhEeWK-qBJoTmIJg" direction="return"/>
                </ownedOperation>
                <ownedOperation xmi:id="_aRRLkSyiEeWK-qBJoTmIJg" name="applyPhysics" method="_aRiRVCyiEeWK-qBJoTmIJg" raisedException="_VA7dgSxZEeWvaK2JGTJcvA _VA8EkCxZEeWvaK2JGTJcvA">
                  <ownedParameter xmi:id="_aRhqQSyiEeWK-qBJoTmIJg" type="_WuO_ICyhEeWK-qBJoTmIJg" direction="return"/>
                </ownedOperation>
                <ownedOperation xmi:id="_aRRLkiyiEeWK-qBJoTmIJg" name="getAISpheres" method="_aRi4YCyiEeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_G1DI0Sy1EeWK-qBJoTmIJg" type="_M6-cUCxUEeWvaK2JGTJcvA" direction="return"/>
                </ownedOperation>
                <ownedOperation xmi:id="_822NkCykEeWK-qBJoTmIJg" name="PhysicsManager" method="_824p1SykEeWK-qBJoTmIJg" raisedException="_R1wH4CyOEeWapP3vpHQOHQ">
                  <eAnnotations xmi:id="_822NkyykEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_822NlCykEeWK-qBJoTmIJg" key="create"/>
                  </eAnnotations>
                  <ownedParameter xmi:id="_822NkSykEeWK-qBJoTmIJg" name="config" type="_RDlEECyOEeWapP3vpHQOHQ"/>
                  <ownedParameter xmi:id="_822NkiykEeWK-qBJoTmIJg" type="_Kfm-kCx_EeWapP3vpHQOHQ" direction="return"/>
                </ownedOperation>
                <ownedOperation xmi:id="_gRBQECy5EeWK-qBJoTmIJg" name="merge" method="_gRB3ICy5EeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_gRBQESy5EeWK-qBJoTmIJg" name="sphere1" type="_KfN9ACx_EeWapP3vpHQOHQ"/>
                  <ownedParameter xmi:id="_gRBQEiy5EeWK-qBJoTmIJg" name="sphere2" type="_KfN9ACx_EeWapP3vpHQOHQ"/>
                  <ownedParameter xmi:id="_gRBQEyy5EeWK-qBJoTmIJg" name="aiName">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  </ownedParameter>
                </ownedOperation>
                <ownedOperation xmi:id="_lmI6oCy5EeWK-qBJoTmIJg" name="split" method="_lmJhsCy5EeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_lmI6oSy5EeWK-qBJoTmIJg" name="sphere" type="_KfN9ACx_EeWapP3vpHQOHQ"/>
                  <ownedParameter xmi:id="_lmI6oiy5EeWK-qBJoTmIJg" name="aiName">
                    <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  </ownedParameter>
                </ownedOperation>
                <ownedOperation xmi:id="_T3FgICzTEeWK-qBJoTmIJg" name="setAIManager" method="_T3HVUizTEeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_T3FgISzTEeWK-qBJoTmIJg" name="mgr" type="_ulHUUCxXEeWvaK2JGTJcvA"/>
                </ownedOperation>
                <ownedOperation xmi:id="_zCndICzVEeWK-qBJoTmIJg" name="moveSpheres" visibility="private" method="_zCp5YCzVEeWK-qBJoTmIJg"/>
                <ownedOperation xmi:id="_EGm3sCzYEeWK-qBJoTmIJg" name="mergeSpheres" visibility="private" method="_EGuMcCzYEeWK-qBJoTmIJg"/>
                <ownedOperation xmi:id="_WbOpICzZEeWK-qBJoTmIJg" name="snapshot" visibility="private" method="_WbRFYCzZEeWK-qBJoTmIJg">
                  <ownedParameter xmi:id="_WbOpISzZEeWK-qBJoTmIJg" type="_WuO_ICyhEeWK-qBJoTmIJg" direction="return"/>
                </ownedOperation>
              </packagedElement>
              <packagedElement xmi:type="uml:Association" xmi:id="_b8oEsCyjEeWK-qBJoTmIJg" name="" memberEnd="_b8oEsSyjEeWK-qBJoTmIJg _b8locCyjEeWK-qBJoTmIJg">
                <ownedEnd xmi:id="_b8oEsSyjEeWK-qBJoTmIJg" name="" type="_Kfm-kCx_EeWapP3vpHQOHQ" association="_b8oEsCyjEeWK-qBJoTmIJg"/>
              </packagedElement>
              <packagedElement xmi:type="uml:Association" xmi:id="_-bIOUCylEeWK-qBJoTmIJg" name="" memberEnd="_-bIOUSylEeWK-qBJoTmIJg _-bHnQCylEeWK-qBJoTmIJg">
                <ownedEnd xmi:id="_-bIOUSylEeWK-qBJoTmIJg" name="" type="_Kfm-kCx_EeWapP3vpHQOHQ" association="_-bIOUCylEeWK-qBJoTmIJg"/>
              </packagedElement>
              <packagedElement xmi:type="uml:Association" xmi:id="_VN9B4CzSEeWK-qBJoTmIJg" name="" memberEnd="_VN9B4SzSEeWK-qBJoTmIJg _VN7zwCzSEeWK-qBJoTmIJg">
                <ownedEnd xmi:id="_VN9B4SzSEeWK-qBJoTmIJg" name="" type="_Kfm-kCx_EeWapP3vpHQOHQ" association="_VN9B4CzSEeWK-qBJoTmIJg"/>
              </packagedElement>
            </packagedElement>
            <packagedElement xmi:type="uml:Class" xmi:id="_KfZjMCx_EeWapP3vpHQOHQ" name="Position">
              <ownedAttribute xmi:id="_KgcFACx_EeWapP3vpHQOHQ" name="DEPS" isLeaf="true" isStatic="true" isReadOnly="true">
                <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                <defaultValue xmi:type="uml:LiteralString" xmi:id="_KgcFASx_EeWapP3vpHQOHQ" value="1.19209289551e-08"/>
              </ownedAttribute>
              <ownedAttribute xmi:id="_KgcsECx_EeWapP3vpHQOHQ" name="x" visibility="private" isLeaf="true" isReadOnly="true">
                <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
              </ownedAttribute>
              <ownedAttribute xmi:id="_KgcsEix_EeWapP3vpHQOHQ" name="y" visibility="public" isLeaf="true" isReadOnly="true">
                <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
              </ownedAttribute>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_VBQNrCxZEeWvaK2JGTJcvA" name="Position" specification="_VBCyQSxZEeWvaK2JGTJcvA">
                <ownedParameter xmi:id="_Kgiysix_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                </ownedParameter>
                <language>java</language>
                <body>x = 0.0;
     y = 0.0;
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_KgjZwCx_EeWapP3vpHQOHQ" name="mult" specification="_KfcmgSx_EeWapP3vpHQOHQ">
                <ownedParameter xmi:id="_KgjZwSx_EeWapP3vpHQOHQ" name="f">
                  <eAnnotations xmi:id="_KgjZwix_EeWapP3vpHQOHQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_KgjZwyx_EeWapP3vpHQOHQ" key="final"/>
                  </eAnnotations>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
                <ownedParameter xmi:id="_KgjZxCx_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                </ownedParameter>
                <language>java</language>
                <body>return new Position(x * f, y * f);

 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_VBSC0ixZEeWvaK2JGTJcvA" name="add" specification="_VBKHACxZEeWvaK2JGTJcvA">
                <ownedParameter xmi:id="_F8JiCCyhEeWK-qBJoTmIJg" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                </ownedParameter>
                <ownedParameter xmi:id="_F8JiCSyhEeWK-qBJoTmIJg" name="p" type="_KfZjMCx_EeWapP3vpHQOHQ">
                  <eAnnotations xmi:id="_F8JiCiyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_F8JiCyyhEeWK-qBJoTmIJg" key="final"/>
                  </eAnnotations>
                </ownedParameter>
                <language>java</language>
                <body>Preconditions.checkNotNull(p);
     return new Position(x + p.getX(), y + p.getY());
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_KgjZxSx_EeWapP3vpHQOHQ" name="sub" specification="_KgNbgCx_EeWapP3vpHQOHQ">
                <ownedParameter xmi:id="_KgjZxix_EeWapP3vpHQOHQ" name="p" type="_KfZjMCx_EeWapP3vpHQOHQ">
                  <eAnnotations xmi:id="_KgjZxyx_EeWapP3vpHQOHQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_KgjZyCx_EeWapP3vpHQOHQ" key="final"/>
                  </eAnnotations>
                </ownedParameter>
                <ownedParameter xmi:id="_KgjZySx_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                </ownedParameter>
                <language>java</language>
                <body>Preconditions.checkNotNull(p);
     return new Position(x - p.getX(), y - p.getY());
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_KgjZyix_EeWapP3vpHQOHQ" name="negate" specification="_KfdNkSx_EeWapP3vpHQOHQ">
                <ownedParameter xmi:id="_KgjZyyx_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                </ownedParameter>
                <language>java</language>
                <body>return new Position(-x, -y);
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_KgjZzCx_EeWapP3vpHQOHQ" name="getX" specification="_VAIzUSxZEeWvaK2JGTJcvA">
                <ownedParameter xmi:id="_KgjZzSx_EeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
                <language>java</language>
                <body>return x;
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_VBQ0sCxZEeWvaK2JGTJcvA" name="invertX" specification="_VBEAYCxZEeWvaK2JGTJcvA">
                <ownedParameter xmi:id="_KgjZzix_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                </ownedParameter>
                <language>java</language>
                <body>return new Position(-x, y);
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_KgkA0Cx_EeWapP3vpHQOHQ" name="invertY" specification="_Kfd0oSx_EeWapP3vpHQOHQ">
                <ownedParameter xmi:id="_KgkA0Sx_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                </ownedParameter>
                <language>java</language>
                <body>return new Position(x, -y);
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_KgkA0ix_EeWapP3vpHQOHQ" name="length" specification="_KfebsCx_EeWapP3vpHQOHQ">
                <ownedParameter xmi:id="_KgkA0yx_EeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
                <language>java</language>
                <body>double sqLen = x * x + y * y;
     return Math.sqrt(sqLen);
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_KgkA1Cx_EeWapP3vpHQOHQ" name="dist" specification="_VBFOgCxZEeWvaK2JGTJcvA">
                <ownedParameter xmi:id="_gEPZgCzTEeWK-qBJoTmIJg" direction="return">
                  <name xsi:nil="true"/>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
                <ownedParameter xmi:id="_gEPZgSzTEeWK-qBJoTmIJg" name="p" type="_KfZjMCx_EeWapP3vpHQOHQ">
                  <eAnnotations xmi:id="_gEPZgizTEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_gEPZgyzTEeWK-qBJoTmIJg" key="final"/>
                  </eAnnotations>
                </ownedParameter>
                <language>java</language>
                <body>Preconditions.checkNotNull(p);
     Position dif = this.sub(p);
     return dif.length();
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_KgkA2Sx_EeWapP3vpHQOHQ" name="normalize" specification="_KffCwCx_EeWapP3vpHQOHQ">
                <ownedParameter xmi:id="_KgkA2ix_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                </ownedParameter>
                <language>java</language>
                <body>double len = length();
     if (len &lt; DEPS) {
         return new Position();
     } else {
         return mult(1 / len);
     }
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_Kgkn4Cx_EeWapP3vpHQOHQ" name="scalarProduct" specification="_KgOClSx_EeWapP3vpHQOHQ">
                <ownedParameter xmi:id="_Kgkn4Sx_EeWapP3vpHQOHQ" name="p" type="_KfZjMCx_EeWapP3vpHQOHQ">
                  <eAnnotations xmi:id="_Kgkn4ix_EeWapP3vpHQOHQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_Kgkn4yx_EeWapP3vpHQOHQ" key="final"/>
                  </eAnnotations>
                </ownedParameter>
                <ownedParameter xmi:id="_Kgkn5Cx_EeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
                <language>java</language>
                <body>return x * p.getX() + y * p.getY();
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_Kgkn5Sx_EeWapP3vpHQOHQ" name="angleDeg" specification="_KgOCmix_EeWapP3vpHQOHQ">
                <ownedParameter xmi:id="_iXdZUCzTEeWK-qBJoTmIJg" direction="return">
                  <name xsi:nil="true"/>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
                <ownedParameter xmi:id="_iXdZUSzTEeWK-qBJoTmIJg" name="v" type="_KfZjMCx_EeWapP3vpHQOHQ">
                  <eAnnotations xmi:id="_iXdZUizTEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_iXdZUyzTEeWK-qBJoTmIJg" key="final"/>
                  </eAnnotations>
                </ownedParameter>
                <language>java</language>
                <body>if (this.equals(new Position()) || v.equals(new Position())) {
         throw new IllegalArgumentException(&quot;The Positions must not be zero.&quot;);
     }
     double val = normalize().scalarProduct(v.normalize());
     if (val &lt; -1) {
         val = -1;
     } else if (val > 1) {
         val = 1;
     }
     double rad = Math.acos(val);
     return rad * 180 / Math.PI;
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_Kgkn6ix_EeWapP3vpHQOHQ" name="angleDegOriented" specification="_KgOpoyx_EeWapP3vpHQOHQ">
                <ownedParameter xmi:id="_koLewCzTEeWK-qBJoTmIJg" direction="return">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
                <ownedParameter xmi:id="_koLewSzTEeWK-qBJoTmIJg" name="v" type="_KfZjMCx_EeWapP3vpHQOHQ">
                  <eAnnotations xmi:id="_koLewizTEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_koLewyzTEeWK-qBJoTmIJg" key="final"/>
                  </eAnnotations>
                </ownedParameter>
                <language>java</language>
                <body>if (this.equals(new Position()) || v.equals(new Position())) {
         throw new IllegalArgumentException(&quot;The Positions must not be zero.&quot;);
     }

     double angleBetween = this.angleDeg(v);
     if (angleBetween &lt; DEPS) {
         return 0;
     }

     double angleThis = this.angleDeg(new Position(1, 0));
     if (y &lt; -DEPS) {
         angleThis = 360 - angleThis;
     }

     double angleV = v.angleDeg(new Position(1, 0));
     if (v.getY() &lt; -DEPS) {
         angleV = 360 - angleV;
     }

     if (angleThis - angleV > 180 || angleV - angleThis > 180) {
         angleBetween = -angleBetween;
     }

     return angleBetween;
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_Kgkn7yx_EeWapP3vpHQOHQ" name="normVecFromAngle" specification="_Kffp0Cx_EeWapP3vpHQOHQ">
                <ownedParameter xmi:id="_Kgkn8Cx_EeWapP3vpHQOHQ" name="deg">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
                <ownedParameter xmi:id="_Kgkn8Sx_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                </ownedParameter>
                <language>java</language>
                <body>// fix degrees to range from 0 to 360
     while (deg > 360) {
         deg -= 360;
     }
     while (deg &lt; 0) {
         deg += 360;
     }

     double rad = deg * Math.PI / 180;
     double u = Math.cos(rad);
     double v = Math.sqrt(1 - u * u);
     if (deg > 180) {
         v = -v;
     }
     return new Position(u, v);
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_Kgkn8ix_EeWapP3vpHQOHQ" name="hashCode" specification="_KfgQ4Cx_EeWapP3vpHQOHQ">
                <ownedParameter xmi:id="_Kgkn8yx_EeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                </ownedParameter>
                <language>java</language>
                <body>final int prime = 31;
     int result = 1;
     long temp;
     temp = Double.doubleToLongBits(x);
     result = prime * result + (int) (temp ^ (temp >>> 32));
     temp = Double.doubleToLongBits(y);
     result = prime * result + (int) (temp ^ (temp >>> 32));
     return result;
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_VBRbyixZEeWvaK2JGTJcvA" name="equals" specification="_VBIR0CxZEeWvaK2JGTJcvA">
                <ownedParameter xmi:id="_KglO8Cx_EeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#boolean"/>
                </ownedParameter>
                <ownedParameter xmi:id="_KglO8Sx_EeWapP3vpHQOHQ" name="obj" type="_KgUJMCx_EeWapP3vpHQOHQ">
                  <eAnnotations xmi:id="_KglO8ix_EeWapP3vpHQOHQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_KglO8yx_EeWapP3vpHQOHQ" key="final"/>
                  </eAnnotations>
                </ownedParameter>
                <language>java</language>
                <body>if (this == obj) {
         return true;
     }
     if (obj == null) {
         return false;
     }
     if (getClass() != obj.getClass()) {
         return false;
     }
     Position other = (Position) obj;
     if (Math.abs(x - other.x) > DEPS) {
         return false;
     }
     if (Math.abs(y - other.y) > DEPS) {
         return false;
     }
     return true;
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_KglO9Cx_EeWapP3vpHQOHQ" name="toString" specification="_Kfg38ix_EeWapP3vpHQOHQ">
                <ownedParameter xmi:id="_KglO9Sx_EeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                </ownedParameter>
                <language>java</language>
                <body>return &quot;(&quot; + x + &quot;, &quot; + y + &quot;)&quot;;
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_F8JiACyhEeWK-qBJoTmIJg" name="Position" specification="_F7jFECyhEeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_F8JiASyhEeWK-qBJoTmIJg" name="newX">
                  <eAnnotations xmi:id="_F8JiAiyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_F8JiAyyhEeWK-qBJoTmIJg" key="final"/>
                  </eAnnotations>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
                <ownedParameter xmi:id="_F8JiBCyhEeWK-qBJoTmIJg" name="newY">
                  <eAnnotations xmi:id="_F8JiBSyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_F8JiBiyhEeWK-qBJoTmIJg" key="final"/>
                  </eAnnotations>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
                <ownedParameter xmi:id="_F8JiByyhEeWK-qBJoTmIJg" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                </ownedParameter>
                <language>java</language>
                <body>Preconditions.checkArgument(!(Double.isNaN(newX) || Double.isNaN(newY)),
                                 &quot;The parameters have to be in the range of a double. x: &quot;);
     this.x = newX;
     this.y = newY;
 </body>
              </ownedBehavior>
              <ownedOperation xmi:id="_VBCyQSxZEeWvaK2JGTJcvA" name="Position" method="_VBQNrCxZEeWvaK2JGTJcvA">
                <eAnnotations xmi:id="_KeqjYCx_EeWapP3vpHQOHQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
                  <details xmi:id="_KeqjYSx_EeWapP3vpHQOHQ" key="create"/>
                </eAnnotations>
                <ownedComment xmi:id="_KgyDQCx_EeWapP3vpHQOHQ">
                  <body>Creates a new {@link Position}.</body>
                </ownedComment>
                <ownedParameter xmi:id="_KfbYYCx_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return"/>
              </ownedOperation>
              <ownedOperation xmi:id="_VBKHACxZEeWvaK2JGTJcvA" name="add" visibility="public" method="_VBSC0ixZEeWvaK2JGTJcvA">
                <ownedComment xmi:id="_VBUfECxZEeWvaK2JGTJcvA">
                  <body>Returns the sum of the current {@link Position} and a given one.
     *
     * @param p The {@link Position} to add.
     * @return the sum of the current {@link Position} and a given one.
     * @throws IllegalArgumentException if the given Position is null this exception will be thrown.</body>
                </ownedComment>
                <ownedParameter xmi:id="_KgM0cSx_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return"/>
                <ownedParameter xmi:id="_VBSC0yxZEeWvaK2JGTJcvA" name="p" type="_KfZjMCx_EeWapP3vpHQOHQ">
                  <eAnnotations xmi:id="_VBSC1CxZEeWvaK2JGTJcvA" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_KerxgCx_EeWapP3vpHQOHQ" key="final"/>
                  </eAnnotations>
                </ownedParameter>
              </ownedOperation>
              <ownedOperation xmi:id="_VAIzUSxZEeWvaK2JGTJcvA" name="getX" method="_KgjZzCx_EeWapP3vpHQOHQ">
                <ownedComment xmi:id="_KgyDRSx_EeWapP3vpHQOHQ">
                  <body>Returns the x-component of this {@link Position}.
     *
     * @return the x-component of this {@link Position}.</body>
                </ownedComment>
                <ownedParameter xmi:id="_Kfd0oCx_EeWapP3vpHQOHQ" direction="return">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
              </ownedOperation>
              <ownedOperation xmi:id="_VBEAYCxZEeWvaK2JGTJcvA" name="invertX" method="_VBQ0sCxZEeWvaK2JGTJcvA">
                <ownedComment xmi:id="_KgyDRix_EeWapP3vpHQOHQ">
                  <body>Creates a new Position that has the inverted x coordinate compared to this
     * Position.
     *
     * @return The new Position.</body>
                </ownedComment>
                <ownedParameter xmi:id="_KgNbhix_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return"/>
              </ownedOperation>
              <ownedOperation xmi:id="_VBFOgCxZEeWvaK2JGTJcvA" name="dist" method="_KgkA1Cx_EeWapP3vpHQOHQ">
                <ownedComment xmi:id="_KgyqUix_EeWapP3vpHQOHQ">
                  <body>Calculates the distance of this Position to another one.
     *
     * @param p The other Position.
     * @return The double result.
     * @throws IllegalArgumentException if the given Position is null this exception will be thrown.</body>
                </ownedComment>
                <ownedParameter xmi:id="_evRKoCzTEeWK-qBJoTmIJg" direction="return">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
                <ownedParameter xmi:id="_KgkA1ix_EeWapP3vpHQOHQ" name="p" type="_KfZjMCx_EeWapP3vpHQOHQ">
                  <eAnnotations xmi:id="_KgkA1yx_EeWapP3vpHQOHQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_KgkA2Cx_EeWapP3vpHQOHQ" key="final"/>
                  </eAnnotations>
                </ownedParameter>
              </ownedOperation>
              <ownedOperation xmi:id="_VBIR0CxZEeWvaK2JGTJcvA" name="equals" method="_VBRbyixZEeWvaK2JGTJcvA">
                <ownedParameter xmi:id="_Kfg38Sx_EeWapP3vpHQOHQ" direction="return">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#boolean"/>
                </ownedParameter>
                <ownedParameter xmi:id="_KgUwQSx_EeWapP3vpHQOHQ" name="obj" type="_KgUJMCx_EeWapP3vpHQOHQ">
                  <eAnnotations xmi:id="_KgVXUCx_EeWapP3vpHQOHQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_KgVXUSx_EeWapP3vpHQOHQ" key="final"/>
                  </eAnnotations>
                </ownedParameter>
              </ownedOperation>
              <ownedOperation xmi:id="_KfcmgSx_EeWapP3vpHQOHQ" name="mult" method="_KgjZwCx_EeWapP3vpHQOHQ">
                <ownedComment xmi:id="_KgyDQix_EeWapP3vpHQOHQ">
                  <body>Returns a new {@link Position} calculated by scaling the current
     * {@link Position} by a given factor.
     *
     * @param f The factor to scale the {@link Position} to.
     * @return a new {@link Position} calculated by scaling the current
     *         {@link Position} by a given factor.</body>
                </ownedComment>
                <ownedParameter xmi:id="_Kfcmgix_EeWapP3vpHQOHQ" name="f">
                  <eAnnotations xmi:id="_Kfcmgyx_EeWapP3vpHQOHQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_KfdNkCx_EeWapP3vpHQOHQ" key="final"/>
                  </eAnnotations>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
                <ownedParameter xmi:id="_KgM0cCx_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return"/>
              </ownedOperation>
              <ownedOperation xmi:id="_KfdNkSx_EeWapP3vpHQOHQ" name="negate" method="_KgjZyix_EeWapP3vpHQOHQ">
                <ownedComment xmi:id="_KgyDRCx_EeWapP3vpHQOHQ">
                  <body>Returns the negative {@link Position}.
     *
     * @return the negative {@link Position}.</body>
                </ownedComment>
                <ownedParameter xmi:id="_KgNbhSx_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return"/>
              </ownedOperation>
              <ownedOperation xmi:id="_Kfd0oSx_EeWapP3vpHQOHQ" name="invertY" method="_KgkA0Cx_EeWapP3vpHQOHQ">
                <ownedComment xmi:id="_KgyqUCx_EeWapP3vpHQOHQ">
                  <body>Creates a new Position that has the inverted y coordinate compared to this
     * Position.
     *
     * @return The new Position.</body>
                </ownedComment>
                <ownedParameter xmi:id="_KgOCkCx_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return"/>
              </ownedOperation>
              <ownedOperation xmi:id="_KfebsCx_EeWapP3vpHQOHQ" name="length" method="_KgkA0ix_EeWapP3vpHQOHQ">
                <ownedComment xmi:id="_KgyqUSx_EeWapP3vpHQOHQ">
                  <body>Returns the length of this {@link Position}. (as seen from 0/0)
     *
     * @return the length of this {@link Position}.</body>
                </ownedComment>
                <ownedParameter xmi:id="_KfebsSx_EeWapP3vpHQOHQ" direction="return">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
              </ownedOperation>
              <ownedOperation xmi:id="_KffCwCx_EeWapP3vpHQOHQ" name="normalize" method="_KgkA2Sx_EeWapP3vpHQOHQ">
                <ownedComment xmi:id="_KgyqUyx_EeWapP3vpHQOHQ">
                  <body>Returns the normalized-vector of this {@link Vector}.
     *
     * @return the normalized-vector of this {@link Vector}.</body>
                </ownedComment>
                <ownedParameter xmi:id="_CGRJ4CzTEeWK-qBJoTmIJg" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return"/>
              </ownedOperation>
              <ownedOperation xmi:id="_Kffp0Cx_EeWapP3vpHQOHQ" name="normVecFromAngle" isStatic="true" method="_Kgkn7yx_EeWapP3vpHQOHQ">
                <ownedComment xmi:id="_KgyqVyx_EeWapP3vpHQOHQ">
                  <body>Method that calculates a normalized Position in the direction the angle
     * points.
     *
     * @param deg The angle in degrees.
     * @return The result as Position.</body>
                </ownedComment>
                <ownedParameter xmi:id="_Kffp0Sx_EeWapP3vpHQOHQ" name="deg">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
                <ownedParameter xmi:id="_KgOpqCx_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return"/>
              </ownedOperation>
              <ownedOperation xmi:id="_KfgQ4Cx_EeWapP3vpHQOHQ" name="hashCode" method="_Kgkn8ix_EeWapP3vpHQOHQ">
                <ownedParameter xmi:id="_KfgQ4Sx_EeWapP3vpHQOHQ" direction="return">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                </ownedParameter>
              </ownedOperation>
              <ownedOperation xmi:id="_Kfg38ix_EeWapP3vpHQOHQ" name="toString" method="_KglO9Cx_EeWapP3vpHQOHQ">
                <ownedParameter xmi:id="_KfhfACx_EeWapP3vpHQOHQ" direction="return">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                </ownedParameter>
              </ownedOperation>
              <ownedOperation xmi:id="_KgNbgCx_EeWapP3vpHQOHQ" name="sub" method="_KgjZxSx_EeWapP3vpHQOHQ">
                <ownedComment xmi:id="_KgyDQyx_EeWapP3vpHQOHQ">
                  <body>Returns the difference of the current {@link Position} and a given one.
     *
     * @param p The {@link Position} to add.
     * @return the difference of the current {@link Position} and a given one.
     * @throws IllegalArgumentException if the given Position is null this exception will be thrown.</body>
                </ownedComment>
                <ownedParameter xmi:id="_KgNbgSx_EeWapP3vpHQOHQ" name="p" type="_KfZjMCx_EeWapP3vpHQOHQ">
                  <eAnnotations xmi:id="_KgNbgyx_EeWapP3vpHQOHQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_KgNbhCx_EeWapP3vpHQOHQ" key="final"/>
                  </eAnnotations>
                </ownedParameter>
                <ownedParameter xmi:id="_KgNbgix_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return"/>
              </ownedOperation>
              <ownedOperation xmi:id="_KgOClSx_EeWapP3vpHQOHQ" name="scalarProduct" method="_Kgkn4Cx_EeWapP3vpHQOHQ">
                <ownedComment xmi:id="_KgyqVCx_EeWapP3vpHQOHQ">
                  <body>Method that calculates the scalar product of this vector with another
     * one.
     *
     * @param p The other vector as Position.
     * @return The double result.</body>
                </ownedComment>
                <ownedParameter xmi:id="_KgOClix_EeWapP3vpHQOHQ" name="p" type="_KfZjMCx_EeWapP3vpHQOHQ">
                  <eAnnotations xmi:id="_KgOCmCx_EeWapP3vpHQOHQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_KgOCmSx_EeWapP3vpHQOHQ" key="final"/>
                  </eAnnotations>
                </ownedParameter>
                <ownedParameter xmi:id="_KgOClyx_EeWapP3vpHQOHQ" direction="return">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
              </ownedOperation>
              <ownedOperation xmi:id="_KgOCmix_EeWapP3vpHQOHQ" name="angleDeg" method="_Kgkn5Sx_EeWapP3vpHQOHQ">
                <ownedComment xmi:id="_KgyqVSx_EeWapP3vpHQOHQ">
                  <body>Calculates the angle between two Positions in degrees. The angle is always
     * positive and the smaller one of the two possible angles. The Positions must
     * not be zero.
     *
     * @param v The other Position.
     * @return The angle between the two Positions in degrees.</body>
                </ownedComment>
                <ownedParameter xmi:id="_gEOycCzTEeWK-qBJoTmIJg" direction="return">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
                <ownedParameter xmi:id="_Kgkn5ix_EeWapP3vpHQOHQ" name="v" type="_KfZjMCx_EeWapP3vpHQOHQ">
                  <eAnnotations xmi:id="_Kgkn5yx_EeWapP3vpHQOHQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_Kgkn6Cx_EeWapP3vpHQOHQ" key="final"/>
                  </eAnnotations>
                </ownedParameter>
              </ownedOperation>
              <ownedOperation xmi:id="_KgOpoyx_EeWapP3vpHQOHQ" name="angleDegOriented" method="_Kgkn6ix_EeWapP3vpHQOHQ">
                <ownedComment xmi:id="_KgyqVix_EeWapP3vpHQOHQ">
                  <body>Calculates the angle between two Positions in degrees. The angle is between
     * -180 and 180 degrees depending on the orientation. Moreover the smaller
     * (in absolute values) angle of the two possible is returned. The Positions
     * must not be zero.
     *
     * @param v The other Position.
     * @return The angle in degrees.</body>
                </ownedComment>
                <ownedParameter xmi:id="_iXcyQCzTEeWK-qBJoTmIJg" direction="return">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
                <ownedParameter xmi:id="_Kgkn6yx_EeWapP3vpHQOHQ" name="v" type="_KfZjMCx_EeWapP3vpHQOHQ">
                  <eAnnotations xmi:id="_Kgkn7Cx_EeWapP3vpHQOHQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_Kgkn7Sx_EeWapP3vpHQOHQ" key="final"/>
                  </eAnnotations>
                </ownedParameter>
              </ownedOperation>
              <ownedOperation xmi:id="_F7jFECyhEeWK-qBJoTmIJg" name="Position" method="_F8JiACyhEeWK-qBJoTmIJg">
                <eAnnotations xmi:id="_F7jFFCyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                  <details xmi:id="_F7jFFSyhEeWK-qBJoTmIJg" key="create"/>
                </eAnnotations>
                <ownedComment xmi:id="_KgyDQSx_EeWapP3vpHQOHQ">
                  <body>Creates a new {@link Position}.
     *
     * @param newX The x-component of the new {@link Position}.
     * @param newY The y-component of the new {@link Position}.</body>
                </ownedComment>
                <ownedParameter xmi:id="_F7jFESyhEeWK-qBJoTmIJg" name="newX">
                  <eAnnotations xmi:id="_F7jFFiyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_F7jFFyyhEeWK-qBJoTmIJg" key="final"/>
                  </eAnnotations>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
                <ownedParameter xmi:id="_F7jFEiyhEeWK-qBJoTmIJg" name="newY">
                  <eAnnotations xmi:id="_F7jFGCyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_F7jFGSyhEeWK-qBJoTmIJg" key="final"/>
                  </eAnnotations>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
                </ownedParameter>
                <ownedParameter xmi:id="_F7jFEyyhEeWK-qBJoTmIJg" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return"/>
              </ownedOperation>
            </packagedElement>
            <packagedElement xmi:type="uml:Interface" xmi:id="_Kfj7QCx_EeWapP3vpHQOHQ" name="Sphere">
              <ownedAttribute xmi:id="_LWQ9wCxTEeWvaK2JGTJcvA" name="direction" visibility="public" type="_KfZjMCx_EeWapP3vpHQOHQ" isReadOnly="true"/>
              <ownedAttribute xmi:id="_OcK-wCxTEeWvaK2JGTJcvA" name="size" visibility="public" isReadOnly="true">
                <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
              </ownedAttribute>
              <ownedAttribute xmi:id="_F7ZUECyhEeWK-qBJoTmIJg" name="position" visibility="package" type="_KfZjMCx_EeWapP3vpHQOHQ" association="_F8MlUCyhEeWK-qBJoTmIJg"/>
              <ownedOperation xmi:id="_KflJYCx_EeWapP3vpHQOHQ" name="split" visibility="package">
                <ownedComment xmi:id="_KgyqWSx_EeWapP3vpHQOHQ">
                  <body>Splits the sphere into two equal sized (smaller) parts.
     * Should only be called by the Framework, no AI interaction permitted.</body>
                </ownedComment>
                <ownedParameter xmi:id="_KflJYSx_EeWapP3vpHQOHQ" type="_KfN9ACx_EeWapP3vpHQOHQ" isOrdered="true" direction="return">
                  <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_KflJYix_EeWapP3vpHQOHQ" value="*"/>
                </ownedParameter>
              </ownedOperation>
              <ownedOperation xmi:id="_KgP3wCx_EeWapP3vpHQOHQ" name="setDirection">
                <ownedComment xmi:id="_KgyqWCx_EeWapP3vpHQOHQ">
                  <body>Sets the direction in which the Sphere is moving.
     * Should only be called by the Framework, no AI interaction permitted.</body>
                </ownedComment>
                <ownedParameter xmi:id="_KgQe0Cx_EeWapP3vpHQOHQ" name="direction" type="_KfZjMCx_EeWapP3vpHQOHQ"/>
              </ownedOperation>
              <ownedOperation xmi:id="_KgQe0Sx_EeWapP3vpHQOHQ" name="merge" visibility="package">
                <ownedComment xmi:id="_KgyqWix_EeWapP3vpHQOHQ">
                  <body>Merges two spheres of the same player two one big sphere.
     * Should only be called by the Framework, no AI interaction permitted.</body>
                </ownedComment>
                <ownedParameter xmi:id="_KgQe0ix_EeWapP3vpHQOHQ" name="sphere" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
              </ownedOperation>
              <ownedOperation xmi:id="_KgRF4Cx_EeWapP3vpHQOHQ" name="canBeMergedWidth">
                <ownedComment xmi:id="_KgyqWyx_EeWapP3vpHQOHQ">
                  <body>Checks if a sphere can be merged with another.
     * @param sphere2 the sphere to merge</body>
                </ownedComment>
                <ownedParameter xmi:id="_KgRF4Sx_EeWapP3vpHQOHQ" name="sphere2" type="_Kfj7QCx_EeWapP3vpHQOHQ"/>
                <ownedParameter xmi:id="_KgRF4ix_EeWapP3vpHQOHQ" direction="return">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#boolean"/>
                </ownedParameter>
              </ownedOperation>
              <ownedOperation xmi:id="_F7kTMCyhEeWK-qBJoTmIJg" name="setSize">
                <ownedComment xmi:id="_F8MlUiyhEeWK-qBJoTmIJg">
                  <body>Sets the size of the Sphere.
     * Should only be called by the Framework, no AI interaction permitted.</body>
                </ownedComment>
                <ownedParameter xmi:id="_F7kTMSyhEeWK-qBJoTmIJg" name="size">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                </ownedParameter>
              </ownedOperation>
            </packagedElement>
            <packagedElement xmi:type="uml:Association" xmi:id="_Kg3i0Cx_EeWapP3vpHQOHQ" name="" memberEnd="_Kg3i0Sx_EeWapP3vpHQOHQ _KgXMgCx_EeWapP3vpHQOHQ">
              <ownedEnd xmi:id="_Kg3i0Sx_EeWapP3vpHQOHQ" name="" type="_KfN9ACx_EeWapP3vpHQOHQ" association="_Kg3i0Cx_EeWapP3vpHQOHQ"/>
            </packagedElement>
            <packagedElement xmi:type="uml:Association" xmi:id="_Kg4J4Sx_EeWapP3vpHQOHQ" name="" memberEnd="_Kg4J4ix_EeWapP3vpHQOHQ _KgXzkSx_EeWapP3vpHQOHQ">
              <ownedEnd xmi:id="_Kg4J4ix_EeWapP3vpHQOHQ" name="" type="_KfN9ACx_EeWapP3vpHQOHQ" association="_Kg4J4Sx_EeWapP3vpHQOHQ"/>
            </packagedElement>
            <packagedElement xmi:type="uml:Association" xmi:id="_Kg4w8Sx_EeWapP3vpHQOHQ" name="" memberEnd="_Kg4w8ix_EeWapP3vpHQOHQ _KgaP1Cx_EeWapP3vpHQOHQ">
              <ownedEnd xmi:id="_Kg4w8ix_EeWapP3vpHQOHQ" name="" type="_KfRAUCx_EeWapP3vpHQOHQ" association="_Kg4w8Sx_EeWapP3vpHQOHQ"/>
            </packagedElement>
            <packagedElement xmi:type="uml:Class" xmi:id="_5TsHUCyNEeWapP3vpHQOHQ" name="Model">
              <generalization xmi:id="_F78GoCyhEeWK-qBJoTmIJg" general="_F7zjwCyhEeWK-qBJoTmIJg"/>
              <ownedAttribute xmi:id="_F7_J8CyhEeWK-qBJoTmIJg" name="physMgr" visibility="private" isLeaf="true" type="_Kfm-kCx_EeWapP3vpHQOHQ" isReadOnly="true" association="_F8QPsSyhEeWK-qBJoTmIJg"/>
              <ownedAttribute xmi:id="_F7_J8iyhEeWK-qBJoTmIJg" name="aiMgr" visibility="private" isLeaf="true" type="_ulHUUCxXEeWvaK2JGTJcvA" isReadOnly="true" association="_F8QPtCyhEeWK-qBJoTmIJg"/>
              <ownedAttribute xmi:id="_F7_xASyhEeWK-qBJoTmIJg" name="simulationView" visibility="private" type="_F7bwUCyhEeWK-qBJoTmIJg" association="_F8Q2wSyhEeWK-qBJoTmIJg"/>
              <ownedAttribute xmi:id="_F7_xAyyhEeWK-qBJoTmIJg" name="simulation" visibility="private" type="_VA5oUyxZEeWvaK2JGTJcvA" association="_F8Q2xCyhEeWK-qBJoTmIJg"/>
              <ownedAttribute xmi:id="_F8AYESyhEeWK-qBJoTmIJg" name="existsSimulation" visibility="private">
                <eAnnotations xmi:id="_F8AYEiyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                  <details xmi:id="_F8AYEyyhEeWK-qBJoTmIJg" key="volatile"/>
                </eAnnotations>
                <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#boolean"/>
                <defaultValue xmi:type="uml:LiteralString" xmi:id="_F8AYFCyhEeWK-qBJoTmIJg" value="false"/>
              </ownedAttribute>
              <ownedAttribute xmi:id="_F8A_ISyhEeWK-qBJoTmIJg" name="isSimulationPaused" visibility="private">
                <eAnnotations xmi:id="_F8A_IiyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                  <details xmi:id="_F8A_IyyhEeWK-qBJoTmIJg" key="volatile"/>
                </eAnnotations>
                <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#boolean"/>
                <defaultValue xmi:type="uml:LiteralString" xmi:id="_F8A_JCyhEeWK-qBJoTmIJg" value="false"/>
              </ownedAttribute>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_F8F3qCyhEeWK-qBJoTmIJg" name="Model" specification="_F6wa4CyhEeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_F8F3qSyhEeWK-qBJoTmIJg" name="phys" type="_Kfm-kCx_EeWapP3vpHQOHQ">
                  <eAnnotations xmi:id="_F8F3qiyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_F8F3qyyhEeWK-qBJoTmIJg" key="final"/>
                  </eAnnotations>
                </ownedParameter>
                <ownedParameter xmi:id="_F8F3rCyhEeWK-qBJoTmIJg" name="ai" type="_ulHUUCxXEeWvaK2JGTJcvA">
                  <eAnnotations xmi:id="_F8F3rSyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_F8F3riyhEeWK-qBJoTmIJg" key="final"/>
                  </eAnnotations>
                </ownedParameter>
                <ownedParameter xmi:id="_F8F3ryyhEeWK-qBJoTmIJg" type="_5TsHUCyNEeWapP3vpHQOHQ" direction="return">
                  <name xsi:nil="true"/>
                </ownedParameter>
                <language>java</language>
                <body>this.physMgr = Preconditions.checkNotNull(phys);
     this.aiMgr = Preconditions.checkNotNull(ai);

     aiMgr.setPhysicsManager(physMgr);
     physMgr.setAIManager(aiMgr);
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_F8F3sCyhEeWK-qBJoTmIJg" name="simulateGame" specification="_F7ezoCyhEeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_F8F3sSyhEeWK-qBJoTmIJg" name="ais">
                  <eAnnotations xmi:id="_F8F3siyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_F8F3syyhEeWK-qBJoTmIJg" key="final"/>
                  </eAnnotations>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_F8F3tCyhEeWK-qBJoTmIJg" value="*"/>
                </ownedParameter>
                <language>java</language>
                <body>if (!existsSimulation) {
         existsSimulation = true;
         simulation = new Thread(new Runnable() {

             @Override
             public void run() {

                 // reset old simulation
                 simulationView = new GameSimulation();
                 simulationView.addInstance(physMgr.createInitialTick(ais));

                 // now try to initialize a game with the given AIs.
                 // this needs the physMgr with a new simulation do
                 // not change the order
                 try {
                     aiMgr.initializeGameAIs(ais);

                     // a given AI could not be initialized or found at the
                     // given location
                 } catch (InstantiationException | InvalidAILocationException e) {
                     existsSimulation = false;
                     ResourceBundle bundle = ResourceBundle.getBundle(&quot;sphere_miners_language&quot;);
                     setChanged();

                     if (e instanceof InstantiationException) {
                         notifyObservers(bundle.getString(&quot;KI_INVALID&quot;));
                     } else {
                         notifyObservers(bundle.getString(&quot;KI_LOCATION_INVALID&quot;));
                     }

                     // abort execution because there is an error.
                     return;
                 }

                 while (true) {
                     // check runtime relevant flags
                     if (!existsSimulation) {
                         return;
                     } else {
                         while (isSimulationPaused) {
                             try {
                                 wait();
                             } catch (InterruptedException e) {
                                 // if they don't care we don't care...
                                 // one does not simply interrupt...
                                 // TODO is this correct?
                             }
                         }
                     }

                     // let the AIs apply their moves.
                     try {
                         aiMgr.applyMoves();
                     } catch (InterruptedException e) {
                         // probably a programming error, when this occurs
                         throw new RuntimeException(e);
                     }

                     // calculates the tick based on the AI moves.
                     // adds the finished tick.
                     try {
                         simulationView.addInstance(physMgr.applyPhysics());
                     } catch (IllegalArgumentException e) {
                         // TODO Auto-generated catch block
                         e.printStackTrace();
                     } catch (InterruptedException e) {
                         // TODO Auto-generated catch block
                         e.printStackTrace();
                     }
                 }
             }
         });
         simulation.setName(&quot;[jSoccer][CommunicationLayer]&quot;);
         simulation.start();
     }
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_F8F3tSyhEeWK-qBJoTmIJg" name="getViewableSimulation" specification="_F6xB9iyhEeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_F8F3tiyhEeWK-qBJoTmIJg" type="_F7bwUCyhEeWK-qBJoTmIJg" direction="return">
                  <name xsi:nil="true"/>
                </ownedParameter>
                <language>java</language>
                <body>return simulationView;
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_F8GesCyhEeWK-qBJoTmIJg" name="stopSimulation" specification="_F6xB9yyhEeWK-qBJoTmIJg">
                <language>java</language>
                <body>if (existsSimulation) {
         existsSimulation = false;
         isSimulationPaused = false;
     }
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_F8GesSyhEeWK-qBJoTmIJg" name="pauseSimulation" specification="_F6xB-CyhEeWK-qBJoTmIJg">
                <language>java</language>
                <body>if (existsSimulation) {
         isSimulationPaused = true;
     }
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_F8GesiyhEeWK-qBJoTmIJg" name="resumeSimulation" specification="_F6xB-SyhEeWK-qBJoTmIJg">
                <language>java</language>
                <body>if (existsSimulation) {
         isSimulationPaused = false;
         simulation.notify();
     }
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_F8GesyyhEeWK-qBJoTmIJg" name="getAIList" specification="_F6xpACyhEeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_F8GetCyhEeWK-qBJoTmIJg" isOrdered="true" direction="return">
                  <name xsi:nil="true"/>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_F8GetSyhEeWK-qBJoTmIJg" value="*"/>
                </ownedParameter>
                <language>java</language>
                <body>return aiMgr.getAIList();
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_H-M2USzCEeWK-qBJoTmIJg" name="toPrimitive" specification="_H-MPQCzCEeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_H-M2UizCEeWK-qBJoTmIJg" name="IntegerArray">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer"/>
                  <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_H-M2UyzCEeWK-qBJoTmIJg" value="*"/>
                </ownedParameter>
                <ownedParameter xmi:id="_H-M2VCzCEeWK-qBJoTmIJg" direction="return">
                  <name xsi:nil="true"/>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                  <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_H-M2VSzCEeWK-qBJoTmIJg" value="*"/>
                </ownedParameter>
                <language>java</language>
                <body>int[] result = new int[IntegerArray.length];
     for (int i = 0; i &lt; IntegerArray.length; i++) {
             result[i] = IntegerArray[i].intValue();
     }
     return result;
</body>
              </ownedBehavior>
              <ownedOperation xmi:id="_F6wa4CyhEeWK-qBJoTmIJg" name="Model" method="_F8F3qCyhEeWK-qBJoTmIJg">
                <eAnnotations xmi:id="_F6xB8CyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                  <details xmi:id="_F6xB8SyhEeWK-qBJoTmIJg" key="create"/>
                </eAnnotations>
                <ownedComment xmi:id="_F8LXMCyhEeWK-qBJoTmIJg">
                  <body>Creates a new {@link CommunicationLayer}.
     *
     * @param phys    The {@link PhysicsManager} to use for the simulation.
     * @param ai      The {@link AIManager} to use for the simulation.
     * @param simView The {@link SimulationToViewManager} to use for the simulation.
     * @throws IllegalArgumentException if a reference of the given managers is null an exception
     *                                  will be thrown to prevent an illegal state.</body>
                </ownedComment>
                <ownedParameter xmi:id="_F6wa4SyhEeWK-qBJoTmIJg" name="phys" type="_Kfm-kCx_EeWapP3vpHQOHQ">
                  <eAnnotations xmi:id="_F6xB8iyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_F6xB8yyhEeWK-qBJoTmIJg" key="final"/>
                  </eAnnotations>
                </ownedParameter>
                <ownedParameter xmi:id="_F6wa4iyhEeWK-qBJoTmIJg" name="ai" type="_ulHUUCxXEeWvaK2JGTJcvA">
                  <eAnnotations xmi:id="_F6xB9CyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_F6xB9SyhEeWK-qBJoTmIJg" key="final"/>
                  </eAnnotations>
                </ownedParameter>
                <ownedParameter xmi:id="_F6wa4yyhEeWK-qBJoTmIJg" type="_5TsHUCyNEeWapP3vpHQOHQ" direction="return"/>
              </ownedOperation>
              <ownedOperation xmi:id="_F6xB9iyhEeWK-qBJoTmIJg" name="getViewableSimulation" method="_F8F3tSyhEeWK-qBJoTmIJg">
                <ownedComment xmi:id="_F8LXMSyhEeWK-qBJoTmIJg">
                  <body>{@inheritDoc}</body>
                </ownedComment>
                <ownedParameter xmi:id="_F72AACyhEeWK-qBJoTmIJg" type="_F7bwUCyhEeWK-qBJoTmIJg" direction="return"/>
              </ownedOperation>
              <ownedOperation xmi:id="_F6xB9yyhEeWK-qBJoTmIJg" name="stopSimulation" method="_F8GesCyhEeWK-qBJoTmIJg"/>
              <ownedOperation xmi:id="_F6xB-CyhEeWK-qBJoTmIJg" name="pauseSimulation" method="_F8GesSyhEeWK-qBJoTmIJg"/>
              <ownedOperation xmi:id="_F6xB-SyhEeWK-qBJoTmIJg" name="resumeSimulation" method="_F8GesiyhEeWK-qBJoTmIJg"/>
              <ownedOperation xmi:id="_F6xpACyhEeWK-qBJoTmIJg" name="getAIList" method="_F8GesyyhEeWK-qBJoTmIJg">
                <ownedComment xmi:id="_F8LXMiyhEeWK-qBJoTmIJg">
                  <body>{@inheritDoc}</body>
                </ownedComment>
                <ownedParameter xmi:id="_F6xpASyhEeWK-qBJoTmIJg" isOrdered="true" direction="return">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_F6xpAiyhEeWK-qBJoTmIJg" value="*"/>
                </ownedParameter>
              </ownedOperation>
              <ownedOperation xmi:id="_F7ezoCyhEeWK-qBJoTmIJg" name="simulateGame" method="_F8F3sCyhEeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_F7fasCyhEeWK-qBJoTmIJg" name="ais">
                  <eAnnotations xmi:id="_F7fasyyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_F7fatCyhEeWK-qBJoTmIJg" key="final"/>
                  </eAnnotations>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                  <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_F7fasiyhEeWK-qBJoTmIJg" value="*"/>
                </ownedParameter>
              </ownedOperation>
              <ownedOperation xmi:id="_H-MPQCzCEeWK-qBJoTmIJg" name="toPrimitive" isStatic="true" method="_H-M2USzCEeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_H-MPQSzCEeWK-qBJoTmIJg" name="IntegerArray">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer"/>
                  <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_H-M2UCzCEeWK-qBJoTmIJg" value="*"/>
                </ownedParameter>
                <ownedParameter xmi:id="_H-MPQizCEeWK-qBJoTmIJg" direction="return">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                  <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_H-MPQyzCEeWK-qBJoTmIJg" value="*"/>
                </ownedParameter>
              </ownedOperation>
            </packagedElement>
            <packagedElement xmi:type="uml:Package" xmi:id="_F6riYCyhEeWK-qBJoTmIJg" name="simulation">
              <packagedElement xmi:type="uml:Class" xmi:id="_F7yVoCyhEeWK-qBJoTmIJg" name="Tick"/>
            </packagedElement>
            <packagedElement xmi:type="uml:Class" xmi:id="_F7bwUCyhEeWK-qBJoTmIJg" name="GameSimulation" isLeaf="true">
              <ownedComment xmi:id="_F8KwICyhEeWK-qBJoTmIJg">
                <body>This representation of a game can be displayed by the GUI.</body>
              </ownedComment>
              <ownedAttribute xmi:id="_F7-i4CyhEeWK-qBJoTmIJg" name="ticks" visibility="private" type="_WuO_ICyhEeWK-qBJoTmIJg" isOrdered="true" association="_F8PooCyhEeWK-qBJoTmIJg">
                <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_F7-i4SyhEeWK-qBJoTmIJg" value="*"/>
              </ownedAttribute>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_F8FQkCyhEeWK-qBJoTmIJg" name="GameSimulation" specification="_F7cXYCyhEeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_F8FQkSyhEeWK-qBJoTmIJg" type="_F7bwUCyhEeWK-qBJoTmIJg" direction="return">
                  <name xsi:nil="true"/>
                </ownedParameter>
                <language>java</language>
                <body>ticks = new ArrayList&lt;>();
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_F8FQkiyhEeWK-qBJoTmIJg" name="GameSimulation" specification="_F7c-cSyhEeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_F8FQkyyhEeWK-qBJoTmIJg" name="simulationList" type="_9O8IoCxQEeWvaK2JGTJcvA"/>
                <ownedParameter xmi:id="_F8FQlCyhEeWK-qBJoTmIJg" type="_F7bwUCyhEeWK-qBJoTmIJg" direction="return">
                  <name xsi:nil="true"/>
                </ownedParameter>
                <language>java</language>
                <body>Preconditions.checkNotNull(simulationList);
     ticks = simulationList;
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_F8FQlSyhEeWK-qBJoTmIJg" name="addInstance" specification="_F77fkCyhEeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_WuWT4CyhEeWK-qBJoTmIJg" name="tick" type="_WuO_ICyhEeWK-qBJoTmIJg">
                  <eAnnotations xmi:id="_WuWT4SyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_WuWT4iyhEeWK-qBJoTmIJg" key="final"/>
                  </eAnnotations>
                </ownedParameter>
                <language>java</language>
                <body>ticks.add(Preconditions.checkNotNull(tick));
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_F8F3oyyhEeWK-qBJoTmIJg" name="getTick" specification="_F7dlgSyhEeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_WuWT4yyhEeWK-qBJoTmIJg" name="numberOfTick">
                  <eAnnotations xmi:id="_WuWT5CyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_WuWT5SyhEeWK-qBJoTmIJg" key="final"/>
                  </eAnnotations>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                </ownedParameter>
                <ownedParameter xmi:id="_WuWT5iyhEeWK-qBJoTmIJg" type="_WuO_ICyhEeWK-qBJoTmIJg" direction="return"/>
                <language>java</language>
                <body>if (numberOfTick &lt; 0 || numberOfTick > ticks.size()) {
         return null;
     } else {
         return ticks.get(numberOfTick);
     }
 </body>
              </ownedBehavior>
              <ownedOperation xmi:id="_F7cXYCyhEeWK-qBJoTmIJg" name="GameSimulation" method="_F8FQkCyhEeWK-qBJoTmIJg">
                <eAnnotations xmi:id="_F7cXYSyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                  <details xmi:id="_F7cXYiyhEeWK-qBJoTmIJg" key="create"/>
                </eAnnotations>
                <ownedComment xmi:id="_F8KwISyhEeWK-qBJoTmIJg">
                  <body>Creates a new empty {@link GameSimulation}.</body>
                </ownedComment>
                <ownedParameter xmi:id="_F7c-cCyhEeWK-qBJoTmIJg" type="_F7bwUCyhEeWK-qBJoTmIJg" direction="return"/>
              </ownedOperation>
              <ownedOperation xmi:id="_F7c-cSyhEeWK-qBJoTmIJg" name="GameSimulation" method="_F8FQkiyhEeWK-qBJoTmIJg">
                <eAnnotations xmi:id="_F7c-cyyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                  <details xmi:id="_F7c-dCyhEeWK-qBJoTmIJg" key="create"/>
                </eAnnotations>
                <ownedComment xmi:id="_F8KwIiyhEeWK-qBJoTmIJg">
                  <body>Creates a new {@link GameSimulation} from a list of {@link Tick}s.
     *
     * @param simulationList List of created ticks.</body>
                </ownedComment>
                <ownedParameter xmi:id="_F7c-ciyhEeWK-qBJoTmIJg" name="simulationList" type="_9O8IoCxQEeWvaK2JGTJcvA"/>
                <ownedParameter xmi:id="_F7c-dSyhEeWK-qBJoTmIJg" type="_F7bwUCyhEeWK-qBJoTmIJg" direction="return"/>
              </ownedOperation>
              <ownedOperation xmi:id="_F7dlgSyhEeWK-qBJoTmIJg" name="getTick" method="_F8F3oyyhEeWK-qBJoTmIJg">
                <ownedComment xmi:id="_F8KwJCyhEeWK-qBJoTmIJg">
                  <body>Returns the tick at a specific position in the game.
     *
     * @param numberOfTick The number of the {@link Tick} to return.
     * @return The requested {@link Tick}. Null if the requested
     *         tick is not available yet or out of range (e.g. bigger than
     *         maximum number of ticks).</body>
                </ownedComment>
                <ownedParameter xmi:id="_F7dlgiyhEeWK-qBJoTmIJg" name="numberOfTick">
                  <eAnnotations xmi:id="_F7dlgyyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_F7dlhCyhEeWK-qBJoTmIJg" key="final"/>
                  </eAnnotations>
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
                </ownedParameter>
                <ownedParameter xmi:id="_F77flCyhEeWK-qBJoTmIJg" type="_WuO_ICyhEeWK-qBJoTmIJg" direction="return"/>
              </ownedOperation>
              <ownedOperation xmi:id="_F77fkCyhEeWK-qBJoTmIJg" name="addInstance" method="_F8FQlSyhEeWK-qBJoTmIJg">
                <ownedComment xmi:id="_F8KwIyyhEeWK-qBJoTmIJg">
                  <body>Adds a new {@link Tick} to the SimulationObject.
     *
     * @param tick The {@link Tick} to add.
     * @throws IllegalArgumentException
     *             If the tick-parameter is invalid (e.g. null) this exception
     *             will be thrown to prevent an invalid state.</body>
                </ownedComment>
                <ownedParameter xmi:id="_F77fkSyhEeWK-qBJoTmIJg" name="tick" type="_WuO_ICyhEeWK-qBJoTmIJg">
                  <eAnnotations xmi:id="_F77fkiyhEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                    <details xmi:id="_F77fkyyhEeWK-qBJoTmIJg" key="final"/>
                  </eAnnotations>
                </ownedParameter>
              </ownedOperation>
            </packagedElement>
            <packagedElement xmi:type="uml:Association" xmi:id="_F8MlUCyhEeWK-qBJoTmIJg" name="" memberEnd="_F7ZUECyhEeWK-qBJoTmIJg _F8MlUSyhEeWK-qBJoTmIJg">
              <ownedEnd xmi:id="_F8MlUSyhEeWK-qBJoTmIJg" name="" type="_Kfj7QCx_EeWapP3vpHQOHQ" association="_F8MlUCyhEeWK-qBJoTmIJg"/>
            </packagedElement>
            <packagedElement xmi:type="uml:Association" xmi:id="_F8PooCyhEeWK-qBJoTmIJg" name="" memberEnd="_F8PooSyhEeWK-qBJoTmIJg _F7-i4CyhEeWK-qBJoTmIJg">
              <ownedEnd xmi:id="_F8PooSyhEeWK-qBJoTmIJg" name="" type="_F7bwUCyhEeWK-qBJoTmIJg" association="_F8PooCyhEeWK-qBJoTmIJg"/>
            </packagedElement>
            <packagedElement xmi:type="uml:Association" xmi:id="_F8QPsSyhEeWK-qBJoTmIJg" name="" memberEnd="_F8QPsiyhEeWK-qBJoTmIJg _F7_J8CyhEeWK-qBJoTmIJg">
              <ownedEnd xmi:id="_F8QPsiyhEeWK-qBJoTmIJg" name="" type="_5TsHUCyNEeWapP3vpHQOHQ" association="_F8QPsSyhEeWK-qBJoTmIJg"/>
            </packagedElement>
            <packagedElement xmi:type="uml:Association" xmi:id="_F8QPtCyhEeWK-qBJoTmIJg" name="" memberEnd="_F8QPtSyhEeWK-qBJoTmIJg _F7_J8iyhEeWK-qBJoTmIJg">
              <ownedEnd xmi:id="_F8QPtSyhEeWK-qBJoTmIJg" name="" type="_5TsHUCyNEeWapP3vpHQOHQ" association="_F8QPtCyhEeWK-qBJoTmIJg"/>
            </packagedElement>
            <packagedElement xmi:type="uml:Association" xmi:id="_F8Q2wSyhEeWK-qBJoTmIJg" name="" memberEnd="_F8Q2wiyhEeWK-qBJoTmIJg _F7_xASyhEeWK-qBJoTmIJg">
              <ownedEnd xmi:id="_F8Q2wiyhEeWK-qBJoTmIJg" name="" type="_5TsHUCyNEeWapP3vpHQOHQ" association="_F8Q2wSyhEeWK-qBJoTmIJg"/>
            </packagedElement>
            <packagedElement xmi:type="uml:Association" xmi:id="_F8Q2xCyhEeWK-qBJoTmIJg" name="" memberEnd="_F8Q2xSyhEeWK-qBJoTmIJg _F7_xAyyhEeWK-qBJoTmIJg">
              <ownedEnd xmi:id="_F8Q2xSyhEeWK-qBJoTmIJg" name="" type="_5TsHUCyNEeWapP3vpHQOHQ" association="_F8Q2xCyhEeWK-qBJoTmIJg"/>
            </packagedElement>
            <packagedElement xmi:type="uml:Class" xmi:id="_WuO_ICyhEeWK-qBJoTmIJg" name="Tick">
              <ownedAttribute xmi:id="_gceAMCy7EeWK-qBJoTmIJg" name="allSpheres" visibility="package" type="_9O8IoCxQEeWvaK2JGTJcvA" association="_gcfOUCy7EeWK-qBJoTmIJg">
                <qualifier xmi:id="_gcenQiy7EeWK-qBJoTmIJg">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                </qualifier>
              </ownedAttribute>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_gcenQyy7EeWK-qBJoTmIJg" name="Tick" specification="_gccyECy7EeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_gcenRCy7EeWK-qBJoTmIJg" name="map" type="_M6-cUCxUEeWvaK2JGTJcvA"/>
                <ownedParameter xmi:id="_gcenRSy7EeWK-qBJoTmIJg" type="_WuO_ICyhEeWK-qBJoTmIJg" direction="return">
                  <name xsi:nil="true"/>
                </ownedParameter>
                <language>java</language>
                <body>this.allSpheres = map;
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_gcenRiy7EeWK-qBJoTmIJg" name="print" specification="_gcdZJSy7EeWK-qBJoTmIJg">
                <language>java</language>
                <body>for (Entry&lt;String, List&lt;Sphere>> entry : allSpheres.entrySet()) {
         System.out.println(&quot;Player &quot; + entry.getKey() + &quot;:&quot;);
         System.out.println(entry.getValue());
     }
 </body>
              </ownedBehavior>
              <ownedOperation xmi:id="_gccyECy7EeWK-qBJoTmIJg" name="Tick" method="_gcenQyy7EeWK-qBJoTmIJg">
                <eAnnotations xmi:id="_gcdZIiy7EeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                  <details xmi:id="_gcdZIyy7EeWK-qBJoTmIJg" key="create"/>
                </eAnnotations>
                <ownedParameter xmi:id="_gcdZICy7EeWK-qBJoTmIJg" name="map" type="_M6-cUCxUEeWvaK2JGTJcvA"/>
                <ownedParameter xmi:id="_gcdZISy7EeWK-qBJoTmIJg" type="_WuO_ICyhEeWK-qBJoTmIJg" direction="return"/>
              </ownedOperation>
              <ownedOperation xmi:id="_gcdZJSy7EeWK-qBJoTmIJg" name="print" method="_gcenRiy7EeWK-qBJoTmIJg"/>
            </packagedElement>
            <packagedElement xmi:type="uml:Association" xmi:id="_gcfOUCy7EeWK-qBJoTmIJg" name="" memberEnd="_gcfOUSy7EeWK-qBJoTmIJg _gceAMCy7EeWK-qBJoTmIJg">
              <ownedEnd xmi:id="_gcfOUSy7EeWK-qBJoTmIJg" name="" type="_WuO_ICyhEeWK-qBJoTmIJg" association="_gcfOUCy7EeWK-qBJoTmIJg"/>
            </packagedElement>
          </packagedElement>
          <packagedElement xmi:type="uml:Package" xmi:id="_F6t-oCyhEeWK-qBJoTmIJg" name="exceptions">
            <packagedElement xmi:type="uml:Class" xmi:id="_F71Y8CyhEeWK-qBJoTmIJg" name="InvalidAILocationException" isLeaf="true">
              <ownedComment xmi:id="_dQk1UCyiEeWK-qBJoTmIJg">
                <body>This exception should be thrown if the location of an AI is invalid in case
they should be initialized. An invalid location equals an invalid filename.</body>
              </ownedComment>
              <generalization xmi:id="_dQkOQCyiEeWK-qBJoTmIJg" general="_dQjnMCyiEeWK-qBJoTmIJg"/>
              <ownedAttribute xmi:id="_dQkOQSyiEeWK-qBJoTmIJg" name="serialVersionUID" visibility="private" isLeaf="true" isStatic="true" isReadOnly="true">
                <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#long"/>
                <defaultValue xmi:type="uml:LiteralString" xmi:id="_dQkOQiyiEeWK-qBJoTmIJg" value="1170066104466868734L"/>
              </ownedAttribute>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_dQkOQyyiEeWK-qBJoTmIJg" name="InvalidAILocationException" specification="_dQfVwCyiEeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_dQkORCyiEeWK-qBJoTmIJg" type="_F71Y8CyhEeWK-qBJoTmIJg" direction="return"/>
                <language>java</language>
                <body>super();
 </body>
              </ownedBehavior>
              <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_dQkORSyiEeWK-qBJoTmIJg" name="InvalidAILocationException" specification="_dQf80iyiEeWK-qBJoTmIJg">
                <ownedParameter xmi:id="_dQkORiyiEeWK-qBJoTmIJg" name="s">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                </ownedParameter>
                <ownedParameter xmi:id="_dQkORyyiEeWK-qBJoTmIJg" type="_F71Y8CyhEeWK-qBJoTmIJg" direction="return"/>
                <language>java</language>
                <body>super(s);
 </body>
              </ownedBehavior>
              <ownedOperation xmi:id="_dQfVwCyiEeWK-qBJoTmIJg" name="InvalidAILocationException" method="_dQkOQyyiEeWK-qBJoTmIJg">
                <eAnnotations xmi:id="_dQfVwSyiEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                  <details xmi:id="_dQf80CyiEeWK-qBJoTmIJg" key="create"/>
                </eAnnotations>
                <ownedParameter xmi:id="_dQf80SyiEeWK-qBJoTmIJg" type="_F71Y8CyhEeWK-qBJoTmIJg" direction="return"/>
              </ownedOperation>
              <ownedOperation xmi:id="_dQf80iyiEeWK-qBJoTmIJg" name="InvalidAILocationException" method="_dQkORSyiEeWK-qBJoTmIJg">
                <eAnnotations xmi:id="_dQf81CyiEeWK-qBJoTmIJg" source="http://www.eclipse.org/uml2/2.0.0/UML">
                  <details xmi:id="_dQf81SyiEeWK-qBJoTmIJg" key="create"/>
                </eAnnotations>
                <ownedParameter xmi:id="_dQf80yyiEeWK-qBJoTmIJg" name="s">
                  <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
                </ownedParameter>
                <ownedParameter xmi:id="_dQf81iyiEeWK-qBJoTmIJg" type="_F71Y8CyhEeWK-qBJoTmIJg" direction="return"/>
              </ownedOperation>
            </packagedElement>
          </packagedElement>
        </packagedElement>
      </packagedElement>
    </packagedElement>
    <packagedElement xmi:type="uml:Package" xmi:id="__-slYCxOEeWvaK2JGTJcvA" name="java">
      <packagedElement xmi:type="uml:Package" xmi:id="__-slYSxOEeWvaK2JGTJcvA" name="awt">
        <packagedElement xmi:type="uml:Class" xmi:id="___i58CxOEeWvaK2JGTJcvA" name="EventQueue"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_VAlfQCxZEeWvaK2JGTJcvA" name="Color"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_CiAv4CzBEeWK-qBJoTmIJg" name="Dimension"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_CiAv4izBEeWK-qBJoTmIJg" name="Graphics"/>
      </packagedElement>
      <packagedElement xmi:type="uml:Package" xmi:id="_9O33MCxQEeWvaK2JGTJcvA" name="util">
        <packagedElement xmi:type="uml:Package" xmi:id="_VADTwCxZEeWvaK2JGTJcvA" name="concurrent">
          <packagedElement xmi:type="uml:Interface" xmi:id="_VAs0ACxZEeWvaK2JGTJcvA" name="Callable"/>
          <packagedElement xmi:type="uml:Class" xmi:id="_VAtbESxZEeWvaK2JGTJcvA" name="CancellationException"/>
          <packagedElement xmi:type="uml:Class" xmi:id="_VAuCISxZEeWvaK2JGTJcvA" name="ExecutionException"/>
          <packagedElement xmi:type="uml:Interface" xmi:id="_VAupMSxZEeWvaK2JGTJcvA" name="ExecutorService"/>
          <packagedElement xmi:type="uml:Class" xmi:id="_VAvQQSxZEeWvaK2JGTJcvA" name="Executors"/>
          <packagedElement xmi:type="uml:Interface" xmi:id="_VAv3USxZEeWvaK2JGTJcvA" name="Future"/>
          <packagedElement xmi:type="uml:Enumeration" xmi:id="_VAweYSxZEeWvaK2JGTJcvA" name="TimeUnit"/>
          <packagedElement xmi:type="uml:Class" xmi:id="_VAxFcSxZEeWvaK2JGTJcvA" name="TimeoutException"/>
          <packagedElement xmi:type="uml:Interface" xmi:id="_ymBWcCyCEeWapP3vpHQOHQ" name="ScheduledExecutorService"/>
        </packagedElement>
        <packagedElement xmi:type="uml:Interface" xmi:id="_9O8IoCxQEeWvaK2JGTJcvA" name="List"/>
        <packagedElement xmi:type="uml:Interface" xmi:id="_M6-cUCxUEeWvaK2JGTJcvA" name="Map">
          <nestedClassifier xmi:type="uml:Interface" xmi:id="_KShjACy6EeWK-qBJoTmIJg" name="Entry"/>
        </packagedElement>
        <packagedElement xmi:type="uml:Interface" xmi:id="_M6_DYSxUEeWvaK2JGTJcvA" name="Set"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_VAqXwSxZEeWvaK2JGTJcvA" name="ArrayList"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_VAq-0CxZEeWvaK2JGTJcvA" name="Collections"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_VAq-0ixZEeWvaK2JGTJcvA" name="HashMap"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_VArl4SxZEeWvaK2JGTJcvA" name="Timer"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_VArl4yxZEeWvaK2JGTJcvA" name="TimerTask"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_F7zjwCyhEeWK-qBJoTmIJg" name="Observable"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_F70x4CyhEeWK-qBJoTmIJg" name="ResourceBundle"/>
        <packagedElement xmi:type="uml:Interface" xmi:id="_EGs-UCzYEeWK-qBJoTmIJg" name="Iterator"/>
      </packagedElement>
      <packagedElement xmi:type="uml:Package" xmi:id="_VACssCxZEeWvaK2JGTJcvA" name="io">
        <packagedElement xmi:type="uml:Class" xmi:id="_VAmtYCxZEeWvaK2JGTJcvA" name="File"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_o-h2wCyNEeWapP3vpHQOHQ" name="UnsupportedEncodingException"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_OKSGQCyPEeWapP3vpHQOHQ" name="IOException"/>
      </packagedElement>
      <packagedElement xmi:type="uml:Package" xmi:id="_VACssSxZEeWvaK2JGTJcvA" name="lang">
        <packagedElement xmi:type="uml:Class" xmi:id="_VA4aMCxZEeWvaK2JGTJcvA" name="ClassNotFoundException"/>
        <packagedElement xmi:type="uml:Package" xmi:id="_VACssixZEeWvaK2JGTJcvA" name="reflect">
          <packagedElement xmi:type="uml:Class" xmi:id="_VAmtYixZEeWvaK2JGTJcvA" name="Constructor"/>
          <packagedElement xmi:type="uml:Class" xmi:id="_VAnUcSxZEeWvaK2JGTJcvA" name="InvocationTargetException"/>
        </packagedElement>
        <packagedElement xmi:type="uml:Class" xmi:id="_VA5BQSxZEeWvaK2JGTJcvA" name="InstantiationException"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_VA5oUyxZEeWvaK2JGTJcvA" name="Thread"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_VA7dgSxZEeWvaK2JGTJcvA" name="IllegalArgumentException"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_VA8EkCxZEeWvaK2JGTJcvA" name="InterruptedException"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_VA_H4CxZEeWvaK2JGTJcvA" name="IllegalAccessException"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_KgUJMCx_EeWapP3vpHQOHQ" name="Object"/>
        <packagedElement xmi:type="uml:Interface" xmi:id="_JmK-sCyLEeWapP3vpHQOHQ" name="Runnable"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_dQjnMCyiEeWK-qBJoTmIJg" name="Exception"/>
      </packagedElement>
      <packagedElement xmi:type="uml:Package" xmi:id="_VACssyxZEeWvaK2JGTJcvA" name="net">
        <packagedElement xmi:type="uml:Class" xmi:id="_VAn7gCxZEeWvaK2JGTJcvA" name="MalformedURLException"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_VAoikCxZEeWvaK2JGTJcvA" name="URL"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_VAoikixZEeWvaK2JGTJcvA" name="URLClassLoader"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_o-id0SyNEeWapP3vpHQOHQ" name="URLDecoder"/>
      </packagedElement>
      <packagedElement xmi:type="uml:Package" xmi:id="_VACstCxZEeWvaK2JGTJcvA" name="security">
        <packagedElement xmi:type="uml:Class" xmi:id="_VApJoSxZEeWvaK2JGTJcvA" name="AccessController"/>
        <packagedElement xmi:type="uml:Interface" xmi:id="_VApwsSxZEeWvaK2JGTJcvA" name="PrivilegedAction"/>
      </packagedElement>
    </packagedElement>
    <packagedElement xmi:type="uml:DataType" xmi:id="_uppIoCxPEeWvaK2JGTJcvA" name="void"/>
    <packagedElement xmi:type="uml:DataType" xmi:id="_3XqMMCxQEeWvaK2JGTJcvA" name="List&lt;Sphere>"/>
    <packagedElement xmi:type="uml:DataType" xmi:id="_yPq3UCxTEeWvaK2JGTJcvA" name="Mapy&lt;Sphere, Sphere>"/>
    <packagedElement xmi:type="uml:DataType" xmi:id="_DT2xECxUEeWvaK2JGTJcvA" name="Set&lt;Sphere>"/>
    <packagedElement xmi:type="uml:Package" xmi:id="_4_5toCxWEeWvaK2JGTJcvA" name="com">
      <packagedElement xmi:type="uml:Package" xmi:id="_4_5toSxWEeWvaK2JGTJcvA" name="google">
        <packagedElement xmi:type="uml:Package" xmi:id="_4_5toixWEeWvaK2JGTJcvA" name="common">
          <packagedElement xmi:type="uml:Package" xmi:id="_4_5toyxWEeWvaK2JGTJcvA" name="base">
            <packagedElement xmi:type="uml:Interface" xmi:id="_5AAbUCxWEeWvaK2JGTJcvA" name="Function"/>
            <packagedElement xmi:type="uml:Class" xmi:id="_KgLmUCx_EeWapP3vpHQOHQ" name="Preconditions"/>
            <packagedElement xmi:type="uml:Interface" xmi:id="_8D9dcCy3EeWK-qBJoTmIJg" name="Predicate"/>
          </packagedElement>
          <packagedElement xmi:type="uml:Package" xmi:id="_-o5gMCyHEeWapP3vpHQOHQ" name="collect">
            <packagedElement xmi:type="uml:Class" xmi:id="_-pGUgCyHEeWapP3vpHQOHQ" name="FluentIterable"/>
            <packagedElement xmi:type="uml:Class" xmi:id="_F731MCyhEeWK-qBJoTmIJg" name="Lists"/>
            <packagedElement xmi:type="uml:Class" xmi:id="_G1IBUCy1EeWK-qBJoTmIJg" name="ImmutableMap"/>
          </packagedElement>
        </packagedElement>
      </packagedElement>
      <packagedElement xmi:type="uml:Package" xmi:id="_4d0jkCy_EeWK-qBJoTmIJg" name="sun">
        <packagedElement xmi:type="uml:Package" xmi:id="_4d0jkSy_EeWK-qBJoTmIJg" name="corba">
          <packagedElement xmi:type="uml:Package" xmi:id="_4d0jkiy_EeWK-qBJoTmIJg" name="se">
            <packagedElement xmi:type="uml:Package" xmi:id="_4d0jkyy_EeWK-qBJoTmIJg" name="impl">
              <packagedElement xmi:type="uml:Package" xmi:id="_4d0jlCy_EeWK-qBJoTmIJg" name="ior">
                <packagedElement xmi:type="uml:Class" xmi:id="_4d6DICy_EeWK-qBJoTmIJg" name="OldPOAObjectKeyTemplate"/>
              </packagedElement>
            </packagedElement>
          </packagedElement>
        </packagedElement>
      </packagedElement>
    </packagedElement>
    <packagedElement xmi:type="uml:Package" xmi:id="_RDXBoCyOEeWapP3vpHQOHQ" name="org">
      <packagedElement xmi:type="uml:Package" xmi:id="_RDXBoSyOEeWapP3vpHQOHQ" name="sosy_lab">
        <packagedElement xmi:type="uml:Package" xmi:id="_RDXBoiyOEeWapP3vpHQOHQ" name="common">
          <packagedElement xmi:type="uml:Class" xmi:id="_T8-WcCy3EeWK-qBJoTmIJg" name="Pair"/>
          <packagedElement xmi:type="uml:Package" xmi:id="_RDXBoyyOEeWapP3vpHQOHQ" name="configuration">
            <packagedElement xmi:type="uml:Class" xmi:id="_RDlEECyOEeWapP3vpHQOHQ" name="Configuration"/>
            <packagedElement xmi:type="uml:Interface" xmi:id="_RDlrICyOEeWapP3vpHQOHQ" name="Options"/>
            <packagedElement xmi:type="uml:Class" xmi:id="_R1wH4CyOEeWapP3vpHQOHQ" name="InvalidConfigurationException"/>
            <packagedElement xmi:type="uml:Interface" xmi:id="_tf2QYCyOEeWapP3vpHQOHQ" name="Option"/>
          </packagedElement>
        </packagedElement>
      </packagedElement>
    </packagedElement>
    <packagedElement xmi:type="uml:Package" xmi:id="_Ch5bICzBEeWK-qBJoTmIJg" name="javax">
      <packagedElement xmi:type="uml:Package" xmi:id="_Ch5bISzBEeWK-qBJoTmIJg" name="swing">
        <packagedElement xmi:type="uml:Class" xmi:id="_CiBW8SzBEeWK-qBJoTmIJg" name="JApplet"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_CiBW8yzBEeWK-qBJoTmIJg" name="JFrame"/>
        <packagedElement xmi:type="uml:Class" xmi:id="_CiBW9SzBEeWK-qBJoTmIJg" name="JPanel"/>
      </packagedElement>
    </packagedElement>
    <profileApplication xmi:id="__4R0UCxOEeWvaK2JGTJcvA">
      <eAnnotations xmi:id="__4U3oCxOEeWvaK2JGTJcvA" source="http://www.eclipse.org/uml2/2.0.0/UML">
        <references xmi:type="ecore:EPackage" href="pathmap://UMLLAB_PROFILES/UMLLab.profile.uml#UMLLabProfile-Annotation_2-UMLLabProfile"/>
      </eAnnotations>
      <appliedProfile href="pathmap://UMLLAB_PROFILES/UMLLab.profile.uml#UMLLabProfile"/>
    </profileApplication>
  </uml:Model>
  <UMLLabProfile:TargetLanguage xmi:id="__4YiACxOEeWvaK2JGTJcvA" base_Package="__ss2cCxOEeWvaK2JGTJcvA">
    <languageName>java</languageName>
  </UMLLabProfile:TargetLanguage>
  <UMLLabProfile:LegacyStyledElement xmi:id="___B8kCxOEeWvaK2JGTJcvA" base_Element="___AucCxOEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="___kIECxOEeWvaK2JGTJcvA" base_Element="___i58CxOEeWvaK2JGTJcvA"/>
  <UMLLabProfile:UnresolvedElement xmi:id="_upsL8CxPEeWvaK2JGTJcvA" base_Element="_uppIoCxPEeWvaK2JGTJcvA"/>
  <UMLLabProfile:UnresolvedElement xmi:id="_3Xt2kCxQEeWvaK2JGTJcvA" base_Element="_3XqMMCxQEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_9O8vsCxQEeWvaK2JGTJcvA" base_Element="_9O8IoCxQEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Annotations xmi:id="_mrZ_YCxSEeWvaK2JGTJcvA" base_Element="_mrZYUCxSEeWvaK2JGTJcvA">
    <annotations xmi:id="_mrZ_YSxSEeWvaK2JGTJcvA" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_mramcSxSEeWvaK2JGTJcvA" base_Element="_mramcCxSEeWvaK2JGTJcvA">
    <annotations xmi:id="_mrbNgCxSEeWvaK2JGTJcvA" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:LegacyStyledElement xmi:id="_mrb0kCxSEeWvaK2JGTJcvA" base_Element="_mrZYUCxSEeWvaK2JGTJcvA"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_mrb0kSxSEeWvaK2JGTJcvA" base_Element="_mramcCxSEeWvaK2JGTJcvA"/>
  <UMLLabProfile:UnresolvedElement xmi:id="_yPq3USxTEeWvaK2JGTJcvA" base_Element="_yPq3UCxTEeWvaK2JGTJcvA"/>
  <UMLLabProfile:UnresolvedElement xmi:id="_DT3YICxUEeWvaK2JGTJcvA" base_Element="_DT2xECxUEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_M6_DYCxUEeWvaK2JGTJcvA" base_Element="_M6-cUCxUEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_M6_DYixUEeWvaK2JGTJcvA" base_Element="_M6_DYSxUEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Generics xmi:id="_4_67wCxWEeWvaK2JGTJcvA" genericsValue="Sphere, Position" base_Element="_3qS-4CxREeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_5ABCYCxWEeWvaK2JGTJcvA" base_Element="_5AAbUCxWEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Generics xmi:id="_5ACQgSxWEeWvaK2JGTJcvA" genericsValue="Void, Void" base_Element="_5ACQgCxWEeWvaK2JGTJcvA"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_5AC3kCxWEeWvaK2JGTJcvA" base_Element="_5ACQgCxWEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_5AEFsixWEeWvaK2JGTJcvA" base_Element="_5AEFsCxWEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Annotations xmi:id="_VAHlMCxZEeWvaK2JGTJcvA" base_Element="_ulHUUCxXEeWvaK2JGTJcvA">
    <annotations xmi:id="_RDasACyOEeWapP3vpHQOHQ" name="Options">
      <annotationParameters xmi:id="_RDasASyOEeWapP3vpHQOHQ" name="prefix" skipArray="true">
        <valueSpecifications xmi:type="uml:LiteralString" xmi:id="_VBSp4CxZEeWvaK2JGTJcvA" value="&quot;ai&quot;"/>
      </annotationParameters>
    </annotations>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:StyledElement xmi:id="_VANEwCxZEeWvaK2JGTJcvA" base_Element="_VAHlMixZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:StyledElement xmi:id="_VANEwSxZEeWvaK2JGTJcvA" base_Element="_VAIMQSxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:StyledElement xmi:id="_VANr0CxZEeWvaK2JGTJcvA" base_Element="_VAIMQyxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:StyledElement xmi:id="_VANr0SxZEeWvaK2JGTJcvA" base_Element="_VAIMRCxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:StyledElement xmi:id="_VAQvIyxZEeWvaK2JGTJcvA" base_Element="_VAQvICxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VAmGUCxZEeWvaK2JGTJcvA" base_Element="_VAlfQCxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VAmtYSxZEeWvaK2JGTJcvA" base_Element="_VAmtYCxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VAnUcCxZEeWvaK2JGTJcvA" base_Element="_VAmtYixZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VAnUcixZEeWvaK2JGTJcvA" base_Element="_VAnUcSxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VAn7gSxZEeWvaK2JGTJcvA" base_Element="_VAn7gCxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VAoikSxZEeWvaK2JGTJcvA" base_Element="_VAoikCxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VApJoCxZEeWvaK2JGTJcvA" base_Element="_VAoikixZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VApwsCxZEeWvaK2JGTJcvA" base_Element="_VApJoSxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VAqXwCxZEeWvaK2JGTJcvA" base_Element="_VApwsSxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VAqXwixZEeWvaK2JGTJcvA" base_Element="_VAqXwSxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VAq-0SxZEeWvaK2JGTJcvA" base_Element="_VAq-0CxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VArl4CxZEeWvaK2JGTJcvA" base_Element="_VAq-0ixZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VArl4ixZEeWvaK2JGTJcvA" base_Element="_VArl4SxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VAsM8CxZEeWvaK2JGTJcvA" base_Element="_VArl4yxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VAtbECxZEeWvaK2JGTJcvA" base_Element="_VAs0ACxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VAuCICxZEeWvaK2JGTJcvA" base_Element="_VAtbESxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VAupMCxZEeWvaK2JGTJcvA" base_Element="_VAuCISxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VAvQQCxZEeWvaK2JGTJcvA" base_Element="_VAupMSxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VAv3UCxZEeWvaK2JGTJcvA" base_Element="_VAvQQSxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VAweYCxZEeWvaK2JGTJcvA" base_Element="_VAv3USxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VAxFcCxZEeWvaK2JGTJcvA" base_Element="_VAweYSxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VAxsgCxZEeWvaK2JGTJcvA" base_Element="_VAxFcSxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VA5BQCxZEeWvaK2JGTJcvA" base_Element="_VA4aMCxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VA5oUCxZEeWvaK2JGTJcvA" base_Element="_VA5BQSxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VA5oUixZEeWvaK2JGTJcvA" base_Element="_VA5oUSxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VA6PYCxZEeWvaK2JGTJcvA" base_Element="_VA5oUyxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VA6PYixZEeWvaK2JGTJcvA" base_Element="_VA6PYSxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VA7dgCxZEeWvaK2JGTJcvA" base_Element="_VA62eixZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VA7dgixZEeWvaK2JGTJcvA" base_Element="_VA7dgSxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VA8EkSxZEeWvaK2JGTJcvA" base_Element="_VA8EkCxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VA8roSxZEeWvaK2JGTJcvA" base_Element="_VA8roCxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VA9SsSxZEeWvaK2JGTJcvA" base_Element="_VA9SsCxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VA95wCxZEeWvaK2JGTJcvA" base_Element="_VA9SsixZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VA_H4SxZEeWvaK2JGTJcvA" base_Element="_VA_H4CxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VBCyQCxZEeWvaK2JGTJcvA" base_Element="_VBCLMixZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Annotations xmi:id="_VBEndyxZEeWvaK2JGTJcvA" base_Element="_VBEAYCxZEeWvaK2JGTJcvA">
    <annotations xmi:id="_VBEneCxZEeWvaK2JGTJcvA" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_VBI45CxZEeWvaK2JGTJcvA" base_Element="_VBIR0CxZEeWvaK2JGTJcvA">
    <annotations xmi:id="_VBI45SxZEeWvaK2JGTJcvA" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Reference xmi:id="_VBXiYCxZEeWvaK2JGTJcvA" base_Element="_VBW7UCxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_VBYJcixZEeWvaK2JGTJcvA" base_Element="_VBYJcCxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Array xmi:id="_1rw8ACxZEeWvaK2JGTJcvA" dimensions="0" base_Element="_VBPmlyxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_KfH2YCx_EeWapP3vpHQOHQ" base_Element="_VBIR0CxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_KfJrkCx_EeWapP3vpHQOHQ" base_Element="_VBLVICxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_KfKSoCx_EeWapP3vpHQOHQ" base_Element="_VBL8MSxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_KfKSoSx_EeWapP3vpHQOHQ" base_Element="_VBMjQCxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_KfK5sCx_EeWapP3vpHQOHQ" base_Element="_VARWMSxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_KfS1gCx_EeWapP3vpHQOHQ" base_Element="_KfSOcSx_EeWapP3vpHQOHQ"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_KfS1gyx_EeWapP3vpHQOHQ" base_Element="_KfS1gSx_EeWapP3vpHQOHQ"/>
  <UMLLabProfile:Annotations xmi:id="_KfTckCx_EeWapP3vpHQOHQ" base_Element="_grJQoCxTEeWvaK2JGTJcvA">
    <annotations xmi:id="_KfTckSx_EeWapP3vpHQOHQ" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:LegacyStyledElement xmi:id="_KfUDoix_EeWapP3vpHQOHQ" base_Element="_KfTckix_EeWapP3vpHQOHQ"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_Kfg38Cx_EeWapP3vpHQOHQ" base_Element="_KfgQ4Cx_EeWapP3vpHQOHQ"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_KfhfASx_EeWapP3vpHQOHQ" base_Element="_Kfg38ix_EeWapP3vpHQOHQ"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_KgHU4yx_EeWapP3vpHQOHQ" base_Element="_KgHU4Cx_EeWapP3vpHQOHQ"/>
  <UMLLabProfile:Annotations xmi:id="_KgH78Cx_EeWapP3vpHQOHQ" base_Element="_KgHU4Cx_EeWapP3vpHQOHQ">
    <annotations xmi:id="_KgH78Sx_EeWapP3vpHQOHQ" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:LegacyStyledElement xmi:id="_KgJKESx_EeWapP3vpHQOHQ" base_Element="_KgIjAix_EeWapP3vpHQOHQ"/>
  <UMLLabProfile:Annotations xmi:id="_KgJKEix_EeWapP3vpHQOHQ" base_Element="_KgIjAix_EeWapP3vpHQOHQ">
    <annotations xmi:id="_KgJKEyx_EeWapP3vpHQOHQ" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:LegacyStyledElement xmi:id="_KgJxIyx_EeWapP3vpHQOHQ" base_Element="_KgJxICx_EeWapP3vpHQOHQ"/>
  <UMLLabProfile:Annotations xmi:id="_KgJxJCx_EeWapP3vpHQOHQ" base_Element="_KgJxICx_EeWapP3vpHQOHQ">
    <annotations xmi:id="_KgKYMCx_EeWapP3vpHQOHQ" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Reference xmi:id="_KgMNYCx_EeWapP3vpHQOHQ" base_Element="_KgLmUCx_EeWapP3vpHQOHQ"/>
  <UMLLabProfile:Reference xmi:id="_KgUwQCx_EeWapP3vpHQOHQ" base_Element="_KgUJMCx_EeWapP3vpHQOHQ"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_KgXzkCx_EeWapP3vpHQOHQ" base_Element="_KgXMgCx_EeWapP3vpHQOHQ">
    <associatedElement xmi:type="uml:Operation" xmi:id="_F7SmYCyhEeWK-qBJoTmIJg" name="getPosition" method="_F8GetiyhEeWK-qBJoTmIJg">
      <ownedParameter xmi:id="_F7SmYSyhEeWK-qBJoTmIJg" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return"/>
    </associatedElement>
    <associatedElement xmi:type="uml:Operation" xmi:id="_F7TNcCyhEeWK-qBJoTmIJg" name="setPosition" method="_F8GeuCyhEeWK-qBJoTmIJg">
      <ownedParameter xmi:id="_F7TNcSyhEeWK-qBJoTmIJg" name="position" type="_KfZjMCx_EeWapP3vpHQOHQ"/>
    </associatedElement>
  </UMLLabProfile:LegacyStyledElement>
  <UMLLabProfile:LegacyStyledElement xmi:id="_KgYaoCx_EeWapP3vpHQOHQ" base_Element="_KgXzkSx_EeWapP3vpHQOHQ">
    <associatedElement xmi:type="uml:Operation" xmi:id="_KgYaoSx_EeWapP3vpHQOHQ" name="setDirection" method="_KggWcCx_EeWapP3vpHQOHQ">
      <ownedParameter xmi:id="_KgYaoix_EeWapP3vpHQOHQ" name="direction" type="_KfZjMCx_EeWapP3vpHQOHQ"/>
    </associatedElement>
    <associatedElement xmi:type="uml:Operation" xmi:id="_MaFSkCxQEeWvaK2JGTJcvA" name="getDirection" visibility="public" method="_C6qVUCxREeWvaK2JGTJcvA">
      <eAnnotations xmi:id="_Bvm3cCxREeWvaK2JGTJcvA" source="http://www.eclipse.org/uml2/2.0.0/UML">
        <details xmi:id="_Bvm3cSxREeWvaK2JGTJcvA" key="create"/>
      </eAnnotations>
      <ownedParameter xmi:id="_Kgw1ISx_EeWapP3vpHQOHQ" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return"/>
    </associatedElement>
  </UMLLabProfile:LegacyStyledElement>
  <UMLLabProfile:Annotations xmi:id="_KgZBsCx_EeWapP3vpHQOHQ" base_Element="_KgYaoSx_EeWapP3vpHQOHQ">
    <annotations xmi:id="_KgZBsSx_EeWapP3vpHQOHQ" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:LegacyStyledElement xmi:id="_KgZBsyx_EeWapP3vpHQOHQ" base_Element="_KgZBsix_EeWapP3vpHQOHQ">
    <associatedElement xmi:type="uml:Operation" xmi:id="_KgZBtCx_EeWapP3vpHQOHQ" name="getSize" method="_KggWcix_EeWapP3vpHQOHQ">
      <ownedParameter xmi:id="_KgZowix_EeWapP3vpHQOHQ" direction="return">
        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
      </ownedParameter>
    </associatedElement>
    <associatedElement xmi:type="uml:Operation" xmi:id="_KgZowCx_EeWapP3vpHQOHQ" name="setSize" method="_Kgg9gCx_EeWapP3vpHQOHQ">
      <ownedParameter xmi:id="_KgZowSx_EeWapP3vpHQOHQ" name="size">
        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
      </ownedParameter>
    </associatedElement>
  </UMLLabProfile:LegacyStyledElement>
  <UMLLabProfile:Annotations xmi:id="_KgaP0Cx_EeWapP3vpHQOHQ" base_Element="_KgZBtCx_EeWapP3vpHQOHQ">
    <annotations xmi:id="_KgaP0Sx_EeWapP3vpHQOHQ" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_KgaP0ix_EeWapP3vpHQOHQ" base_Element="_KgZowCx_EeWapP3vpHQOHQ">
    <annotations xmi:id="_KgaP0yx_EeWapP3vpHQOHQ" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:LegacyStyledElement xmi:id="_Kga24Cx_EeWapP3vpHQOHQ" base_Element="_KgaP1Cx_EeWapP3vpHQOHQ"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_KgcsESx_EeWapP3vpHQOHQ" base_Element="_KgcsECx_EeWapP3vpHQOHQ"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_KgdTICx_EeWapP3vpHQOHQ" base_Element="_KgcsEix_EeWapP3vpHQOHQ">
    <associatedElement xmi:type="uml:Operation" xmi:id="_KgdTISx_EeWapP3vpHQOHQ" name="getY" method="_KgiysCx_EeWapP3vpHQOHQ">
      <ownedParameter xmi:id="_KgdTIix_EeWapP3vpHQOHQ" direction="return">
        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
      </ownedParameter>
    </associatedElement>
  </UMLLabProfile:LegacyStyledElement>
  <UMLLabProfile:LegacyStyledElement xmi:id="_KgfIUCx_EeWapP3vpHQOHQ" base_Element="_KgehQCx_EeWapP3vpHQOHQ"/>
  <uml:OpaqueBehavior xmi:id="_KggWcCx_EeWapP3vpHQOHQ" name="setDirection" specification="_KgYaoSx_EeWapP3vpHQOHQ">
    <ownedParameter xmi:id="_KggWcSx_EeWapP3vpHQOHQ" name="direction" type="_KfZjMCx_EeWapP3vpHQOHQ"/>
    <language>java</language>
    <body>this.direction = direction;
 </body>
  </uml:OpaqueBehavior>
  <uml:OpaqueBehavior xmi:id="_KggWcix_EeWapP3vpHQOHQ" name="getSize" specification="_KgZBtCx_EeWapP3vpHQOHQ">
    <ownedParameter xmi:id="_KggWcyx_EeWapP3vpHQOHQ" direction="return">
      <name xsi:nil="true"/>
      <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
    </ownedParameter>
    <language>java</language>
    <body>return this.size;
 </body>
  </uml:OpaqueBehavior>
  <uml:OpaqueBehavior xmi:id="_Kgg9gCx_EeWapP3vpHQOHQ" name="setSize" specification="_KgZowCx_EeWapP3vpHQOHQ">
    <ownedParameter xmi:id="_Kgg9gSx_EeWapP3vpHQOHQ" name="size">
      <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#int"/>
    </ownedParameter>
    <language>java</language>
    <body>this.size = size;
 </body>
  </uml:OpaqueBehavior>
  <uml:OpaqueBehavior xmi:id="_KgiysCx_EeWapP3vpHQOHQ" name="getY" specification="_KgdTISx_EeWapP3vpHQOHQ">
    <ownedParameter xmi:id="_KgiysSx_EeWapP3vpHQOHQ" direction="return">
      <name xsi:nil="true"/>
      <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/JavaPrimitiveTypes.library.uml#double"/>
    </ownedParameter>
    <language>java</language>
    <body>return y;
 </body>
  </uml:OpaqueBehavior>
  <UMLLabProfile:Annotations xmi:id="_KgxcMCx_EeWapP3vpHQOHQ" base_Element="_MaFSkCxQEeWvaK2JGTJcvA">
    <annotations xmi:id="_KgxcMSx_EeWapP3vpHQOHQ" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Reference xmi:id="_Kg4J4Cx_EeWapP3vpHQOHQ" base_Element="_Kg3i0Cx_EeWapP3vpHQOHQ"/>
  <UMLLabProfile:Reference xmi:id="_Kg4w8Cx_EeWapP3vpHQOHQ" base_Element="_Kg4J4Sx_EeWapP3vpHQOHQ"/>
  <UMLLabProfile:Reference xmi:id="_Kg5YACx_EeWapP3vpHQOHQ" base_Element="_Kg4w8Sx_EeWapP3vpHQOHQ"/>
  <UMLLabProfile:Reference xmi:id="_ymB9gCyCEeWapP3vpHQOHQ" base_Element="_ymBWcCyCEeWapP3vpHQOHQ"/>
  <UMLLabProfile:Reference xmi:id="_-pG7kCyHEeWapP3vpHQOHQ" base_Element="_-pGUgCyHEeWapP3vpHQOHQ"/>
  <UMLLabProfile:Reference xmi:id="_JmLlwCyLEeWapP3vpHQOHQ" base_Element="_JmK-sCyLEeWapP3vpHQOHQ"/>
  <UMLLabProfile:Generics xmi:id="_samm8CyLEeWapP3vpHQOHQ" genericsValue="Void" base_Element="_VA6PYyxZEeWvaK2JGTJcvA"/>
  <UMLLabProfile:Reference xmi:id="_o-id0CyNEeWapP3vpHQOHQ" base_Element="_o-h2wCyNEeWapP3vpHQOHQ"/>
  <UMLLabProfile:Reference xmi:id="_o-id0iyNEeWapP3vpHQOHQ" base_Element="_o-id0SyNEeWapP3vpHQOHQ"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_RDVzgCyOEeWapP3vpHQOHQ" base_Element="_ulHUUCxXEeWvaK2JGTJcvA"/>
  <UMLLabProfile:StyledElement xmi:id="_RDchMiyOEeWapP3vpHQOHQ" base_Element="_o-bJECyNEeWapP3vpHQOHQ"/>
  <UMLLabProfile:Reference xmi:id="_RDlEESyOEeWapP3vpHQOHQ" base_Element="_RDlEECyOEeWapP3vpHQOHQ"/>
  <UMLLabProfile:Reference xmi:id="_RDlrISyOEeWapP3vpHQOHQ" base_Element="_RDlrICyOEeWapP3vpHQOHQ"/>
  <UMLLabProfile:Reference xmi:id="_R1wH4SyOEeWapP3vpHQOHQ" base_Element="_R1wH4CyOEeWapP3vpHQOHQ"/>
  <UMLLabProfile:Annotations xmi:id="_tftGcCyOEeWapP3vpHQOHQ" base_Element="_qG978CyBEeWapP3vpHQOHQ">
    <annotations xmi:id="_tftGcSyOEeWapP3vpHQOHQ" name="Option">
      <annotationParameters xmi:id="_tftGciyOEeWapP3vpHQOHQ" name="name" skipArray="true">
        <valueSpecifications xmi:type="uml:LiteralString" xmi:id="_tf4FkCyOEeWapP3vpHQOHQ" value="&quot;timeout&quot;"/>
      </annotationParameters>
      <annotationParameters xmi:id="_tfttgCyOEeWapP3vpHQOHQ" name="description" skipArray="true">
        <valueSpecifications xmi:type="uml:LiteralString" xmi:id="_tf4FkSyOEeWapP3vpHQOHQ" value="&quot;Timeout for the computation done by the ais in milliseconds&quot;"/>
      </annotationParameters>
    </annotations>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_tfttgSyOEeWapP3vpHQOHQ" base_Element="_o-jE4CyNEeWapP3vpHQOHQ">
    <annotations xmi:id="_tfttgiyOEeWapP3vpHQOHQ" name="Option">
      <annotationParameters xmi:id="_tfttgyyOEeWapP3vpHQOHQ" name="name" skipArray="true">
        <valueSpecifications xmi:type="uml:LiteralString" xmi:id="_tf4FkiyOEeWapP3vpHQOHQ" value="&quot;location&quot;"/>
      </annotationParameters>
      <annotationParameters xmi:id="_tftthCyOEeWapP3vpHQOHQ" name="description" skipArray="true">
        <valueSpecifications xmi:type="uml:LiteralString" xmi:id="_tf4FkyyOEeWapP3vpHQOHQ" value="&quot;In which folder should the framework search for ais?&quot;&#xA;            + &quot; (Base is the root of the project/ the folder where the jar file is located)&quot;"/>
      </annotationParameters>
    </annotations>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Reference xmi:id="_tf23cCyOEeWapP3vpHQOHQ" base_Element="_tf2QYCyOEeWapP3vpHQOHQ"/>
  <UMLLabProfile:Reference xmi:id="_OKSGQSyPEeWapP3vpHQOHQ" base_Element="_OKSGQCyPEeWapP3vpHQOHQ"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_F6zeMCyhEeWK-qBJoTmIJg" base_Element="_KfN9ACx_EeWapP3vpHQOHQ"/>
  <UMLLabProfile:Annotations xmi:id="_F63voCyhEeWK-qBJoTmIJg" base_Element="_KgZBsix_EeWapP3vpHQOHQ">
    <annotations xmi:id="_F63voSyhEeWK-qBJoTmIJg" name="Option">
      <annotationParameters xmi:id="_F63voiyhEeWK-qBJoTmIJg" name="name" skipArray="true">
        <valueSpecifications xmi:type="uml:LiteralString" xmi:id="_F8LXNCyhEeWK-qBJoTmIJg" value="&quot;initialSize&quot;"/>
      </annotationParameters>
      <annotationParameters xmi:id="_F63voyyhEeWK-qBJoTmIJg" name="description" skipArray="true">
        <valueSpecifications xmi:type="uml:LiteralString" xmi:id="_F8LXNiyhEeWK-qBJoTmIJg" value="&quot;The initial size for a sphere &quot;&#xA;            + &quot;with which a player starts.&quot;"/>
      </annotationParameters>
    </annotations>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_F649wCyhEeWK-qBJoTmIJg" base_Element="_ep1nkCxQEeWvaK2JGTJcvA">
    <annotations xmi:id="_F649wSyhEeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_F65k0CyhEeWK-qBJoTmIJg" base_Element="_k5BJ0CxUEeWvaK2JGTJcvA">
    <annotations xmi:id="_F65k0SyhEeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:StyledElement xmi:id="_F66L4CyhEeWK-qBJoTmIJg" base_Element="_KfRAUCx_EeWapP3vpHQOHQ"/>
  <UMLLabProfile:Annotations xmi:id="_F66y8CyhEeWK-qBJoTmIJg" base_Element="_KfSOcSx_EeWapP3vpHQOHQ">
    <annotations xmi:id="_F67aACyhEeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_F67aASyhEeWK-qBJoTmIJg" base_Element="_KfS1gSx_EeWapP3vpHQOHQ">
    <annotations xmi:id="_F67aAiyhEeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_F68BECyhEeWK-qBJoTmIJg" base_Element="_grJ3sCxTEeWvaK2JGTJcvA">
    <annotations xmi:id="_F68BESyhEeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_F69PMCyhEeWK-qBJoTmIJg" base_Element="_KfTckix_EeWapP3vpHQOHQ">
    <annotations xmi:id="_F692QCyhEeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_F6_EYCyhEeWK-qBJoTmIJg" base_Element="_F6-dUCyhEeWK-qBJoTmIJg">
    <annotations xmi:id="_F6_EYSyhEeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_F6_rcCyhEeWK-qBJoTmIJg" base_Element="_F6_EYiyhEeWK-qBJoTmIJg">
    <annotations xmi:id="_F6_rcSyhEeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_F7ASgCyhEeWK-qBJoTmIJg" base_Element="_KfN9ACx_EeWapP3vpHQOHQ">
    <annotations xmi:id="_F7ASgSyhEeWK-qBJoTmIJg" name="Options">
      <annotationParameters xmi:id="_F7ASgiyhEeWK-qBJoTmIJg" name="prefix" skipArray="true">
        <valueSpecifications xmi:type="uml:LiteralString" xmi:id="_F8LXMyyhEeWK-qBJoTmIJg" value="&quot;sphere&quot;"/>
      </annotationParameters>
    </annotations>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_F7JccCyhEeWK-qBJoTmIJg" base_Element="_KfgQ4Cx_EeWapP3vpHQOHQ">
    <annotations xmi:id="_F7JccSyhEeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_F7KDgCyhEeWK-qBJoTmIJg" base_Element="_Kfg38ix_EeWapP3vpHQOHQ">
    <annotations xmi:id="_F7KqkCyhEeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_F7TNciyhEeWK-qBJoTmIJg" base_Element="_F7SmYCyhEeWK-qBJoTmIJg">
    <annotations xmi:id="_F7TNcyyhEeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_F7T0gCyhEeWK-qBJoTmIJg" base_Element="_F7TNcCyhEeWK-qBJoTmIJg">
    <annotations xmi:id="_F7T0gSyhEeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:StyledElement xmi:id="_F7UbkCyhEeWK-qBJoTmIJg" base_Element="_F7A5kCyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:StyledElement xmi:id="_F7VCoCyhEeWK-qBJoTmIJg" base_Element="_KfQZQCx_EeWapP3vpHQOHQ"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_F7VCoSyhEeWK-qBJoTmIJg" base_Element="_F6-dUCyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_F7VpsCyhEeWK-qBJoTmIJg" base_Element="_grJ3sCxTEeWvaK2JGTJcvA"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_F7VpsSyhEeWK-qBJoTmIJg" base_Element="_grJQoCxTEeWvaK2JGTJcvA"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_F7VpsiyhEeWK-qBJoTmIJg" base_Element="_F6_EYiyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Generics xmi:id="_F7dlgCyhEeWK-qBJoTmIJg" genericsValue="Tick" base_Element="_F7c-ciyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_F7fasSyhEeWK-qBJoTmIJg" base_Element="_F7ezoCyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Array xmi:id="_F7fatSyhEeWK-qBJoTmIJg" dimensions="0" base_Element="_F7fasCyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_F7yVoSyhEeWK-qBJoTmIJg" base_Element="_F7yVoCyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_F70K0CyhEeWK-qBJoTmIJg" base_Element="_F7zjwCyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_F70x4SyhEeWK-qBJoTmIJg" base_Element="_F70x4CyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_F731MSyhEeWK-qBJoTmIJg" base_Element="_F731MCyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_F7-i4iyhEeWK-qBJoTmIJg" base_Element="_F7-i4CyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_F7_J8SyhEeWK-qBJoTmIJg" base_Element="_F7_J8CyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_F7_xACyhEeWK-qBJoTmIJg" base_Element="_F7_J8iyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_F7_xAiyhEeWK-qBJoTmIJg" base_Element="_F7_xASyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_F8AYECyhEeWK-qBJoTmIJg" base_Element="_F7_xAyyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_F8A_ICyhEeWK-qBJoTmIJg" base_Element="_F8AYESyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_F8A_JSyhEeWK-qBJoTmIJg" base_Element="_F8A_ISyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Annotations xmi:id="_F8BmMiyhEeWK-qBJoTmIJg" base_Element="_F8BmMCyhEeWK-qBJoTmIJg">
    <annotations xmi:id="_F8BmMyyhEeWK-qBJoTmIJg" name="Option">
      <annotationParameters xmi:id="_F8CNQCyhEeWK-qBJoTmIJg" name="description" skipArray="true">
        <valueSpecifications xmi:type="uml:LiteralString" xmi:id="_F8LXNyyhEeWK-qBJoTmIJg" value="&quot;The minimal size a sphere has to have before it can be splitted&quot;"/>
      </annotationParameters>
    </annotations>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_F8CNQyyhEeWK-qBJoTmIJg" base_Element="_F8CNQSyhEeWK-qBJoTmIJg">
    <annotations xmi:id="_F8CNRCyhEeWK-qBJoTmIJg" name="Option">
      <annotationParameters xmi:id="_F8CNRSyhEeWK-qBJoTmIJg" name="description" skipArray="true">
        <valueSpecifications xmi:type="uml:LiteralString" xmi:id="_RvHUwCzYEeWK-qBJoTmIJg" value="&quot;The maximal distance between two spheres that should be merged&quot;"/>
      </annotationParameters>
    </annotations>
  </UMLLabProfile:Annotations>
  <uml:OpaqueBehavior xmi:id="_F8GetiyhEeWK-qBJoTmIJg" name="getPosition" specification="_F7SmYCyhEeWK-qBJoTmIJg">
    <ownedParameter xmi:id="_F8GetyyhEeWK-qBJoTmIJg" type="_KfZjMCx_EeWapP3vpHQOHQ" direction="return">
      <name xsi:nil="true"/>
    </ownedParameter>
    <language>java</language>
    <body>return position;
 </body>
  </uml:OpaqueBehavior>
  <uml:OpaqueBehavior xmi:id="_F8GeuCyhEeWK-qBJoTmIJg" name="setPosition" specification="_F7TNcCyhEeWK-qBJoTmIJg">
    <ownedParameter xmi:id="_F8GeuSyhEeWK-qBJoTmIJg" name="position" type="_KfZjMCx_EeWapP3vpHQOHQ"/>
    <language>java</language>
    <body>this.position = position;
 </body>
  </uml:OpaqueBehavior>
  <UMLLabProfile:Reference xmi:id="_F8QPsCyhEeWK-qBJoTmIJg" base_Element="_F8PooCyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_F8QPsyyhEeWK-qBJoTmIJg" base_Element="_F8QPsSyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_F8Q2wCyhEeWK-qBJoTmIJg" base_Element="_F8QPtCyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_F8Q2wyyhEeWK-qBJoTmIJg" base_Element="_F8Q2wSyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_F8Rd0CyhEeWK-qBJoTmIJg" base_Element="_F8Q2xCyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:StyledElement xmi:id="_XC8q4CyhEeWK-qBJoTmIJg" base_Element="_XC61sCyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_XDA8UCyhEeWK-qBJoTmIJg" base_Element="_XDAVQCyhEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_dQjnMSyiEeWK-qBJoTmIJg" base_Element="_dQjnMCyiEeWK-qBJoTmIJg"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_b8gv8CyjEeWK-qBJoTmIJg" base_Element="_Kfm-kCx_EeWapP3vpHQOHQ"/>
  <UMLLabProfile:Annotations xmi:id="_b8jMMCyjEeWK-qBJoTmIJg" base_Element="_Kfm-kCx_EeWapP3vpHQOHQ">
    <annotations xmi:id="_b8jMMSyjEeWK-qBJoTmIJg" name="Options">
      <annotationParameters xmi:id="_b8jMMiyjEeWK-qBJoTmIJg" name="prefix" skipArray="true">
        <valueSpecifications xmi:type="uml:LiteralString" xmi:id="_b8ndoCyjEeWK-qBJoTmIJg" value="&quot;physics&quot;"/>
      </annotationParameters>
    </annotations>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:StyledElement xmi:id="_b8jzQCyjEeWK-qBJoTmIJg" base_Element="_aRQkgCyiEeWK-qBJoTmIJg"/>
  <UMLLabProfile:StyledElement xmi:id="_b8kaUCyjEeWK-qBJoTmIJg" base_Element="_aRRLkSyiEeWK-qBJoTmIJg"/>
  <UMLLabProfile:StyledElement xmi:id="_b8kaUSyjEeWK-qBJoTmIJg" base_Element="_aRRLkiyiEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Generics xmi:id="_b8mPgCyjEeWK-qBJoTmIJg" genericsValue="MutableSphere" base_Element="_b8locCyjEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Annotations xmi:id="_b8m2kCyjEeWK-qBJoTmIJg" base_Element="_b8mPgiyjEeWK-qBJoTmIJg">
    <annotations xmi:id="_b8m2kSyjEeWK-qBJoTmIJg" name="Option">
      <annotationParameters xmi:id="_b8m2kiyjEeWK-qBJoTmIJg" name="description" skipArray="true">
        <valueSpecifications xmi:type="uml:LiteralString" xmi:id="_825Q4CykEeWK-qBJoTmIJg" value="&quot;The initial distance between the spheres of all ais&quot;"/>
      </annotationParameters>
    </annotations>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Reference xmi:id="_b8oEsiyjEeWK-qBJoTmIJg" base_Element="_b8oEsCyjEeWK-qBJoTmIJg"/>
  <UMLLabProfile:StyledElement xmi:id="_8220oCykEeWK-qBJoTmIJg" base_Element="_822NkCykEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Annotations xmi:id="_824CwiykEeWK-qBJoTmIJg" base_Element="_824CwCykEeWK-qBJoTmIJg">
    <annotations xmi:id="_824CwyykEeWK-qBJoTmIJg" name="Option">
      <annotationParameters xmi:id="_824CxCykEeWK-qBJoTmIJg" name="description" skipArray="true">
        <valueSpecifications xmi:type="uml:LiteralString" xmi:id="_nuD8gCzREeWK-qBJoTmIJg" value="&quot;The width of the game field in meters&quot;"/>
      </annotationParameters>
    </annotations>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_824p0iykEeWK-qBJoTmIJg" base_Element="_824p0CykEeWK-qBJoTmIJg">
    <annotations xmi:id="_824p0yykEeWK-qBJoTmIJg" name="Option">
      <annotationParameters xmi:id="_824p1CykEeWK-qBJoTmIJg" name="description" skipArray="true">
        <valueSpecifications xmi:type="uml:LiteralString" xmi:id="_nuD8gSzREeWK-qBJoTmIJg" value="&quot;The height of the game field in meters&quot;"/>
      </annotationParameters>
    </annotations>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Reference xmi:id="_-bI1YCylEeWK-qBJoTmIJg" base_Element="_-bIOUCylEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_VyAXsiyyEeWK-qBJoTmIJg" base_Element="_VyAXsCyyEeWK-qBJoTmIJg"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_l3ktESyyEeWK-qBJoTmIJg" base_Element="_l3ktECyyEeWK-qBJoTmIJg"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_E18pwiyzEeWK-qBJoTmIJg" base_Element="_E18pwCyzEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Generics xmi:id="_G1DI0Cy1EeWK-qBJoTmIJg" genericsValue="String, List&lt;MutableSphere>" base_Element="_aRRLkiyiEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_G1IoYCy1EeWK-qBJoTmIJg" base_Element="_G1IBUCy1EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Generics xmi:id="_aJaVcSy1EeWK-qBJoTmIJg" genericsValue="MutableSphere" base_Element="_aJaVcCy1EeWK-qBJoTmIJg"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_aJa8gCy1EeWK-qBJoTmIJg" base_Element="_aJaVcCy1EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_aJcKoCy1EeWK-qBJoTmIJg" base_Element="_aJbjkCy1EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Generics xmi:id="_T8424Cy3EeWK-qBJoTmIJg" genericsValue="Sphere" base_Element="_E18pwCyzEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_T8-WcSy3EeWK-qBJoTmIJg" base_Element="_T8-WcCy3EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Generics xmi:id="_T8_kkCy3EeWK-qBJoTmIJg" genericsValue="Pair&lt;Sphere, MutableSphere>" base_Element="_T8-9gCy3EeWK-qBJoTmIJg"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_T8_kkSy3EeWK-qBJoTmIJg" base_Element="_T8-9gCy3EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_T9Aysiy3EeWK-qBJoTmIJg" base_Element="_T9AysCy3EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_T9BZwCy3EeWK-qBJoTmIJg" base_Element="_T9Aysyy3EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_8D-EgCy3EeWK-qBJoTmIJg" base_Element="_8D9dcCy3EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Generics xmi:id="_4lG7gyy4EeWK-qBJoTmIJg" genericsValue="Pair&lt;Sphere, MutableSphere>" base_Element="_4lG7gCy4EeWK-qBJoTmIJg"/>
  <UMLLabProfile:StyledElement xmi:id="_gRBQFCy5EeWK-qBJoTmIJg" base_Element="_gRBQECy5EeWK-qBJoTmIJg"/>
  <UMLLabProfile:StyledElement xmi:id="_lmI6oyy5EeWK-qBJoTmIJg" base_Element="_lmI6oCy5EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Generics xmi:id="_gcdZJCy7EeWK-qBJoTmIJg" genericsValue="String, List&lt;Sphere>" base_Element="_gcdZICy7EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Generics xmi:id="_gcenQCy7EeWK-qBJoTmIJg" genericsValue="Sphere" base_Element="_gceAMCy7EeWK-qBJoTmIJg"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_gcenQSy7EeWK-qBJoTmIJg" base_Element="_gceAMCy7EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_gcfOUiy7EeWK-qBJoTmIJg" base_Element="_gcfOUCy7EeWK-qBJoTmIJg"/>
  <UMLLabProfile:StyledElement xmi:id="_I0iasCy9EeWK-qBJoTmIJg" base_Element="_I0f-cCy9EeWK-qBJoTmIJg"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_Tz0LsSy9EeWK-qBJoTmIJg" base_Element="_Tz0LsCy9EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Annotations xmi:id="_Tz0Lsiy9EeWK-qBJoTmIJg" base_Element="_Tz0LsCy9EeWK-qBJoTmIJg">
    <annotations xmi:id="_Tz0Lsyy9EeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:LegacyStyledElement xmi:id="_Tz0ywCy9EeWK-qBJoTmIJg" base_Element="_Tz0LtCy9EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Annotations xmi:id="_Tz0ywSy9EeWK-qBJoTmIJg" base_Element="_Tz0LtCy9EeWK-qBJoTmIJg">
    <annotations xmi:id="_Tz0ywiy9EeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:LegacyStyledElement xmi:id="_VhXSoiy9EeWK-qBJoTmIJg" base_Element="_VhXSoSy9EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Annotations xmi:id="_VhX5sCy9EeWK-qBJoTmIJg" base_Element="_VhXSoSy9EeWK-qBJoTmIJg">
    <annotations xmi:id="_VhX5sSy9EeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:LegacyStyledElement xmi:id="_VhX5syy9EeWK-qBJoTmIJg" base_Element="_VhX5siy9EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Annotations xmi:id="_VhX5tCy9EeWK-qBJoTmIJg" base_Element="_VhX5siy9EeWK-qBJoTmIJg">
    <annotations xmi:id="_VhX5tSy9EeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:LegacyStyledElement xmi:id="_yGKv4Sy9EeWK-qBJoTmIJg" base_Element="_yGKv4Cy9EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Annotations xmi:id="_yGKv4iy9EeWK-qBJoTmIJg" base_Element="_yGKv4Cy9EeWK-qBJoTmIJg">
    <annotations xmi:id="_yGKv4yy9EeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:LegacyStyledElement xmi:id="_yGKv5Sy9EeWK-qBJoTmIJg" base_Element="_yGKv5Cy9EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Annotations xmi:id="_yGKv5iy9EeWK-qBJoTmIJg" base_Element="_yGKv5Cy9EeWK-qBJoTmIJg">
    <annotations xmi:id="_yGKv5yy9EeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Reference xmi:id="_4d6DISy_EeWK-qBJoTmIJg" base_Element="_4d6DICy_EeWK-qBJoTmIJg"/>
  <UMLLabProfile:LegacyStyledElement xmi:id="_7ZgRkiy_EeWK-qBJoTmIJg" base_Element="_7ZgRkSy_EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Annotations xmi:id="_7ZgRkyy_EeWK-qBJoTmIJg" base_Element="_7ZgRkSy_EeWK-qBJoTmIJg">
    <annotations xmi:id="_7ZgRlCy_EeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:LegacyStyledElement xmi:id="_7Zg4oCy_EeWK-qBJoTmIJg" base_Element="_7ZgRlSy_EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Annotations xmi:id="_7Zg4oSy_EeWK-qBJoTmIJg" base_Element="_7ZgRlSy_EeWK-qBJoTmIJg">
    <annotations xmi:id="_7Zg4oiy_EeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:LegacyStyledElement xmi:id="__14WQSy_EeWK-qBJoTmIJg" base_Element="__14WQCy_EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Annotations xmi:id="__14WQiy_EeWK-qBJoTmIJg" base_Element="__14WQCy_EeWK-qBJoTmIJg">
    <annotations xmi:id="__14WQyy_EeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:LegacyStyledElement xmi:id="__149UCy_EeWK-qBJoTmIJg" base_Element="__14WRCy_EeWK-qBJoTmIJg"/>
  <UMLLabProfile:Annotations xmi:id="__149USy_EeWK-qBJoTmIJg" base_Element="__14WRCy_EeWK-qBJoTmIJg">
    <annotations xmi:id="__149Uiy_EeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:LegacyStyledElement xmi:id="_GdlqESzAEeWK-qBJoTmIJg" base_Element="_GdlqECzAEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Annotations xmi:id="_GdlqEizAEeWK-qBJoTmIJg" base_Element="_GdlqECzAEeWK-qBJoTmIJg">
    <annotations xmi:id="_GdlqEyzAEeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:LegacyStyledElement xmi:id="_GdlqFSzAEeWK-qBJoTmIJg" base_Element="_GdlqFCzAEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Annotations xmi:id="_GdlqFizAEeWK-qBJoTmIJg" base_Element="_GdlqFCzAEeWK-qBJoTmIJg">
    <annotations xmi:id="_GdlqFyzAEeWK-qBJoTmIJg" name="Override"/>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Reference xmi:id="_CiAv4SzBEeWK-qBJoTmIJg" base_Element="_CiAv4CzBEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_CiBW8CzBEeWK-qBJoTmIJg" base_Element="_CiAv4izBEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_CiBW8izBEeWK-qBJoTmIJg" base_Element="_CiBW8SzBEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_CiBW9CzBEeWK-qBJoTmIJg" base_Element="_CiBW8yzBEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_CiB-ACzBEeWK-qBJoTmIJg" base_Element="_CiBW9SzBEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Array xmi:id="_H-MPRCzCEeWK-qBJoTmIJg" base_Element="_H-MPQCzCEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Annotations xmi:id="_nt_rEizREeWK-qBJoTmIJg" base_Element="_nt_rECzREeWK-qBJoTmIJg">
    <annotations xmi:id="_nt_rEyzREeWK-qBJoTmIJg" name="Option">
      <annotationParameters xmi:id="_nt_rFCzREeWK-qBJoTmIJg" name="description" skipArray="true">
        <valueSpecifications xmi:type="uml:LiteralString" xmi:id="_nuD8gizREeWK-qBJoTmIJg" value="&quot;The frames that should be displayed per second&quot;"/>
      </annotationParameters>
    </annotations>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_nuASIizREeWK-qBJoTmIJg" base_Element="_nuASICzREeWK-qBJoTmIJg">
    <annotations xmi:id="_nuASIyzREeWK-qBJoTmIJg" name="Option">
      <annotationParameters xmi:id="_nuASJCzREeWK-qBJoTmIJg" name="description" skipArray="true">
        <valueSpecifications xmi:type="uml:LiteralString" xmi:id="_nuD8gyzREeWK-qBJoTmIJg" value="&quot;The duration of a tick in seconds. &quot;&#xA;            + &quot;Changing this changes the game speed!&quot;"/>
      </annotationParameters>
    </annotations>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_nuASJyzREeWK-qBJoTmIJg" base_Element="_nuASJSzREeWK-qBJoTmIJg">
    <annotations xmi:id="_nuASKCzREeWK-qBJoTmIJg" name="Option">
      <annotationParameters xmi:id="_nuASKSzREeWK-qBJoTmIJg" name="description" skipArray="true">
        <valueSpecifications xmi:type="uml:LiteralString" xmi:id="_nuD8hCzREeWK-qBJoTmIJg" value="&quot;The amount of calculations that should be done per tick.&quot;&#xA;            + &quot; Changing this changes the granularity of the calculations&quot;"/>
      </annotationParameters>
    </annotations>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Reference xmi:id="_VN9B4izSEeWK-qBJoTmIJg" base_Element="_VN9B4CzSEeWK-qBJoTmIJg"/>
  <UMLLabProfile:StyledElement xmi:id="_T3GHMCzTEeWK-qBJoTmIJg" base_Element="_T3FgICzTEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Annotations xmi:id="_veVI8izTEeWK-qBJoTmIJg" base_Element="_veVI8CzTEeWK-qBJoTmIJg">
    <annotations xmi:id="_veVI8yzTEeWK-qBJoTmIJg" name="Option">
      <annotationParameters xmi:id="_veVI9CzTEeWK-qBJoTmIJg" name="description" skipArray="true">
        <valueSpecifications xmi:type="uml:LiteralString" xmi:id="_veVwACzTEeWK-qBJoTmIJg" value="&quot;The maximum speed a sphere may have in meter/tick&quot;"/>
      </annotationParameters>
    </annotations>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:Annotations xmi:id="_lW1fEizUEeWK-qBJoTmIJg" base_Element="_lW1fECzUEeWK-qBJoTmIJg">
    <annotations xmi:id="_lW1fEyzUEeWK-qBJoTmIJg" name="Option">
      <annotationParameters xmi:id="_lW1fFCzUEeWK-qBJoTmIJg" name="description" skipArray="true">
        <valueSpecifications xmi:type="uml:LiteralString" xmi:id="_lW2GICzUEeWK-qBJoTmIJg" value="&quot;The minimum speed a sphere may have in meter/tick&quot;"/>
      </annotationParameters>
    </annotations>
  </UMLLabProfile:Annotations>
  <UMLLabProfile:StyledElement xmi:id="_zCorQCzVEeWK-qBJoTmIJg" base_Element="_zCndICzVEeWK-qBJoTmIJg"/>
  <UMLLabProfile:StyledElement xmi:id="_EGoF0CzYEeWK-qBJoTmIJg" base_Element="_EGm3sCzYEeWK-qBJoTmIJg"/>
  <UMLLabProfile:Reference xmi:id="_EGtlYCzYEeWK-qBJoTmIJg" base_Element="_EGs-UCzYEeWK-qBJoTmIJg"/>
  <UMLLabProfile:StyledElement xmi:id="_JvYBkCzZEeWK-qBJoTmIJg" base_Element="_JvWMYCzZEeWK-qBJoTmIJg"/>
  <UMLLabProfile:StyledElement xmi:id="_WbP3QCzZEeWK-qBJoTmIJg" base_Element="_WbOpICzZEeWK-qBJoTmIJg"/>
</xmi:XMI>
