=lzombie/vehicles/PolygonalMap2  java/lang/Object()V java/util/ArrayList   -zombie/vehicles/PolygonalMap2$VisibilityGraphnodesLjava/util/ArrayList;  edges   obstacles  intersectNodes  perimeterNodes  perimeterEdges " #obstacleTraceNodes%"gnu/trove/list/array/TIntArrayList $ ( )*splitXY$Lgnu/trove/list/array/TIntArrayList; , -.createdZ 0 12cluster.Lzombie/vehicles/PolygonalMap2$VehicleCluster; 4 5clear 789 :;%zombie/vehicles/PolygonalMap2$VehiclepolyPlusRadius+Lzombie/vehicles/PolygonalMap2$VehiclePoly; =>? @A)zombie/vehicles/PolygonalMap2$VehiclePolyzF CDE FG"zombie/vehicles/PolygonalMap2$Nodealloc&()Lzombie/vehicles/PolygonalMap2$Node; =I JAx1 =L MAy1 CO PQinit)(FFI)Lzombie/vehicles/PolygonalMap2$Node; =S TAx2 =V WAy2 =Y ZAx3 =\ ]Ay3 =_ `Ax4 =b cAy4 efg Fh&zombie/vehicles/PolygonalMap2$Obstacle*()Lzombie/vehicles/PolygonalMap2$Obstacle; ej PkQ(Lzombie/vehicles/PolygonalMap2$Vehicle;)Lzombie/vehicles/PolygonalMap2$Obstacle; m noadd(Ljava/lang/Object;)Z qrs Ft"zombie/vehicles/PolygonalMap2$Edge&()Lzombie/vehicles/PolygonalMap2$Edge; ev wxouter(Lzombie/vehicles/PolygonalMap2$EdgeRing; qz P{(Lzombie/vehicles/PolygonalMap2$Node;Lzombie/vehicles/PolygonalMap2$Node;Lzombie/vehicles/PolygonalMap2$Obstacle;Lzombie/vehicles/PolygonalMap2$EdgeRing;)Lzombie/vehicles/PolygonalMap2$Edge; }~ n&zombie/vehicles/PolygonalMap2$EdgeRing'(Lzombie/vehicles/PolygonalMap2$Edge;)Z e  calcBounds 7 A upVectorDot?s33 e nodeCrawlFront$Lzombie/vehicles/PolygonalMap2$Node; e  nodeCrawlRear C flagsI q splitJ(Lzombie/vehicles/PolygonalMap2$Node;)Lzombie/vehicles/PolygonalMap2$Edge;  zombie/vehicles/BaseVehicleTL_vector2f_poolLjava/lang/ThreadLocal;  java/lang/ThreadLocalget()Ljava/lang/Object;.zombie/vehicles/BaseVehicle$Vector2fObjectPool Forg/joml/Vector2f e  crawlNodes 7  crawlOffsets&Lgnu/trove/list/array/TFloatArrayList;  $gnu/trove/list/array/TFloatArrayListsize()I (I)F C Ax C Ay set(FF)Lorg/joml/Vector2f; sub)(Lorg/joml/Vector2fc;)Lorg/joml/Vector2f; mul(F)Lorg/joml/Vector2f; n release(Ljava/lang/Object;)V C  sharesEdge'(Lzombie/vehicles/PolygonalMap2$Node;)Z C  onSameShapeButDoesNotShareAnEdge C  sharesShape (I)Ljava/lang/Object;  intersectso(Lzombie/vehicles/PolygonalMap2$Node;Lzombie/vehicles/PolygonalMap2$Node;Lzombie/vehicles/PolygonalMap2$Edge;)Z q hasNode q node1 q node2  java/awt/geom/Line2DlinesIntersect (DDDDDDDD)Z*zombie/vehicles/PolygonalMap2$Intersection O(Lzombie/vehicles/PolygonalMap2$Edge;Lzombie/vehicles/PolygonalMap2$Edge;FFFF)V  ,zombie/vehicles/PolygonalMap2$VehicleClusterbounds-()Lzombie/vehicles/PolygonalMap2$VehicleRect;  )zombie/vehicles/PolygonalMap2$VehicleRect   w   h /[[Lzombie/vehicles/PolygonalMap2$ObjectOutline;  @  top  bottom  left  right  instanceLzombie/vehicles/PolygonalMap2;  !" getSquare+(III)Lzombie/vehicles/PolygonalMap2$Square; $ %&contains*(Lzombie/vehicles/PolygonalMap2$Square;I)Z ()* +,$zombie/vehicles/PolygonalMap2$Squarehas(I)Z (. /0 isReallySolid()Z 234 56+zombie/vehicles/PolygonalMap2$ObjectOutlinesetSolid5(III[[Lzombie/vehicles/PolygonalMap2$ObjectOutline;)V 28 96setWest 2; <6setNorth 2@ Aa(III[[Lzombie/vehicles/PolygonalMap2$ObjectOutline;)Lzombie/vehicles/PolygonalMap2$ObjectOutline; 2C D.nw 2F G.nw_w 2I J.nw_n 2L MNtraceG([[Lzombie/vehicles/PolygonalMap2$ObjectOutline;Ljava/util/ArrayList;)V 2 Q R0isEmptyTzombie/iso/IsoGridSquare eV PWD(Lzombie/iso/IsoGridSquare;)Lzombie/vehicles/PolygonalMap2$Obstacle; C Z %[(FFI)Z C] ^.ignore ` abaddAll(Ljava/util/Collection;)Z 2d  d g hi clipperThreadLzombie/vehicles/Clipper;kzombie/vehicles/Clipper j j4> jp qraddAABB(FFFF)V t uvxyBufferThreadLjava/nio/ByteBuffer; jx ygeneratePolygons {|} 5~java/nio/ByteBuffer()Ljava/nio/ByteBuffer; j  getPolygon(ILjava/nio/ByteBuffer;)I  getEdgesFromBufferB(Ljava/nio/ByteBuffer;Lzombie/vehicles/PolygonalMap2$Obstacle;ZI)V { getShort()S e innerjava/util/Collection { positionjava/lang/Float { (I)Ljava/nio/ByteBuffer; } F*()Lzombie/vehicles/PolygonalMap2$EdgeRing; }4 { getFloat()F  java/lang/Mathabs(F)F  min(FF)F  max $ %,? $ n, } } $4  rects  trySplitv(Lzombie/vehicles/PolygonalMap2$Edge;Lzombie/vehicles/PolygonalMap2$VehicleRect;Lgnu/trove/list/array/TIntArrayList;)V $Q $ sort $ $ (I)I  %o ( 0 isCanPathW ( 0 isCanPathN e vehicle'Lzombie/vehicles/PolygonalMap2$Vehicle;  connectTwoNodest(Lzombie/vehicles/PolygonalMap2$Node;Lzombie/vehicles/PolygonalMap2$Node;)Lzombie/vehicles/PolygonalMap2$Connection; e .Lzombie/vehicles/PolygonalMap2$ImmutableRectF; ,zombie/vehicles/PolygonalMap2$ImmutableRectF     ceil(D)D   e  isPointInside(FF)Z  getNodeForSquareL(Lzombie/vehicles/PolygonalMap2$Square;)Lzombie/vehicles/PolygonalMap2$Node; C visible(zombie/vehicles/PolygonalMap2$Connection )   otherNodeJ(Lzombie/vehicles/PolygonalMap2$Node;)Lzombie/vehicles/PolygonalMap2$Node; e getClosestInteriorCrawlNode((FF)Lzombie/vehicles/PolygonalMap2$Node;   C  isConnectedTo   u(Lzombie/vehicles/PolygonalMap2$Node;Lzombie/vehicles/PolygonalMap2$Node;I)Lzombie/vehicles/PolygonalMap2$Connection;  breakConnection-(Lzombie/vehicles/PolygonalMap2$Connection;)V e  connectCrawlNodesZ(Lzombie/vehicles/PolygonalMap2$VisibilityGraph;Lzombie/vehicles/PolygonalMap2$Obstacle;)V   1(Lzombie/vehicles/PolygonalMap2$ImmutableRectF;)Z  checkEdgeIntersectionS(Lzombie/vehicles/PolygonalMap2$EdgeRing;Lzombie/vehicles/PolygonalMap2$EdgeRing;)V  checkEdgeIntersectionSplit+(Lzombie/vehicles/PolygonalMap2$EdgeRing;)V  getIntersectionv(Lzombie/vehicles/PolygonalMap2$Edge;Lzombie/vehicles/PolygonalMap2$Edge;)Lzombie/vehicles/PolygonalMap2$Intersection; q  intersections   nodeSplit  !" comparatorCLzombie/vehicles/PolygonalMap2$VisibilityGraph$CompareIntersection; $%& '(Azombie/vehicles/PolygonalMap2$VisibilityGraph$CompareIntersectionedge$Lzombie/vehicles/PolygonalMap2$Edge; *+, -java/util/Collections)(Ljava/util/List;Ljava/util/Comparator;)V / 0J(Lzombie/vehicles/PolygonalMap2$Edge;)Lzombie/vehicles/PolygonalMap2$Edge; e2 3isNodeInsideOf 5 67clusterOutlineGrid2Lzombie/vehicles/PolygonalMap2$ClusterOutlineGrid; 9:; <=0zombie/vehicles/PolygonalMap2$ClusterOutlineGridsetSize6(II)Lzombie/vehicles/PolygonalMap2$ClusterOutlineGrid; ? F  B PC2(IIIII)Lzombie/vehicles/PolygonalMap2$VehicleRect; 9E FGsetInner(III)V 9I J3(III)Lzombie/vehicles/PolygonalMap2$ClusterOutline; LMN .,zombie/vehicles/PolygonalMap2$ClusterOutline 9P QRisInner(III)Z LT . LV W.n LY Z.e L\ ].s L_ `. innerCorner (b c0isNonThumpableSolid Ce fgaddGraph2(Lzombie/vehicles/PolygonalMap2$VisibilityGraph;)V Li j.tw Ll m.tn Lo p.te Lr s.ts 9u MvE(Lzombie/vehicles/PolygonalMap2$ClusterOutline;)Ljava/util/ArrayList; 9x yreleaseElements C{ |}square&Lzombie/vehicles/PolygonalMap2$Square; C ,hasFlag  .$assertionsDisabledjava/lang/AssertionError    isVisibleK(Lzombie/vehicles/PolygonalMap2$Node;Lzombie/vehicles/PolygonalMap2$Node;)Z  oremove   containsPoint(FFF)Z  (FFFI)Z ( ( (  closestPointOnEdge2Lzombie/vehicles/PolygonalMap2$ClosestPointOnEdge;java/lang/Double   e getClosestPointOnEdge7(FFLzombie/vehicles/PolygonalMap2$ClosestPointOnEdge;)V %0zombie/vehicles/PolygonalMap2$ClosestPointOnEdge  distSqD  node  pointLorg/joml/Vector2f; q obstacle(Lzombie/vehicles/PolygonalMap2$Obstacle; e splitEdgeAtNearestPointl(Lzombie/vehicles/PolygonalMap2$ClosestPointOnEdge;ILzombie/vehicles/PolygonalMap2$AdjustStartEndNodeData;)Z  4zombie/vehicles/PolygonalMap2$AdjustStartEndNodeDatagraph/Lzombie/vehicles/PolygonalMap2$VisibilityGraph;  . isNodeNew  (newEdge   addNode'(Lzombie/vehicles/PolygonalMap2$Node;)V  zombie/iso/IsoUtilsDistanceToSquared(FFFF)F   addEdgesForVehicle*(Lzombie/vehicles/PolygonalMap2$Vehicle;)V  addWorldObstaclesClipper  splitWorldObstacleEdges    checkNodesInObstacles  calculateNodeVisibility  connectVehicleCrawlNodes  poolLjava/util/ArrayDeque; Qjava/util/ArrayDeque   pop   squareToNode&Lgnu/trove/map/hash/TIntObjectHashMap;  o$gnu/trove/map/hash/TIntObjectHashMap containsValue Cd qd ed d   push   iterator()Ljava/util/Iterator;    0java/util/IteratorhasNext   next  zombie/debug/LineDraweraddLine(FFFFFFFFFLjava/lang/String;Z)V }  zombie/debug/DebugOptionsLzombie/debug/DebugOptions;   !PolymapRenderCrawling!Lzombie/debug/BooleanDebugOption; #$% &0zombie/debug/BooleanDebugOptiongetValue=L ) *!PolymapRenderConnections> - .!PolymapRenderNodes= 123 40java/lang/ClassdesiredAssertionStatus $ 9  Signature;Ljava/util/ArrayList;;Ljava/util/ArrayList;?Ljava/util/ArrayList;GLjava/util/ArrayDeque;CodeLineNumberTable_(Lzombie/vehicles/PolygonalMap2$VehicleCluster;)Lzombie/vehicles/PolygonalMap2$VisibilityGraph; StackMapTableaddWorldObstacles DeprecatedRuntimeVisibleAnnotationsLjava/lang/Deprecated;getStairSquares(Ljava/util/ArrayList;)V@(Ljava/util/ArrayList;)VgetCanPathSquaresaddPerimeterEdges removeNode(FFII)Z)(Lzombie/vehicles/PolygonalMap2$Square;)ZgetPointOutsideObstacles<(FFFLzombie/vehicles/PolygonalMap2$AdjustStartEndNodeData;)IgetClosestNodeTocreate1()Lzombie/vehicles/PolygonalMap2$VisibilityGraph;render SourceFilePolygonalMap2.javaNestHost InnerClassesVisibilityGraphVehicleClusterVehicle VehiclePolyNodeObstacleEdgeEdgeRingVector2fObjectPool Intersection VehicleRect ObjectOutlineSquare ConnectionImmutableRectFCompareIntersectionClusterOutlineGridClusterOutlineClosestPointOnEdgeAdjustStartEndNodeData0 -.12898:8;8989 8:#89)*!"678<.!=]** Y * Y * Y * Y * Y * Y * Y !*$Y&'>& %0;FQ cP?=n6*+*+/*3* 3*3*3*3*3*>&  &-4=i+6M,<>B,H,KN:B,R,UN:B,X,[N:B,^,aN:d+i:*lWpuy: puy: puy: puy: u |Wu |Wu |Wu |W* lW* lW* lW* lW* lW* lW* lW* lW+B,H,Rb n,K,Ub nNB,X,^b n,[,ab nNYY* lW* lW :  :* lW*lW:::36+G+8WWWBN:YWWWBN:YBb nb nN:YlWlWlW* lW* lW* lW : : *lW* lWϱ>E ->OXbu%/9:\~    !1ASfq "#$&'$(.+7.@0J1TZ4a5h7@m:  7=CCCCeqqqq 7=CCCCeqqqqqqO=z+,ә+,י+,ڙ>*ݢ#*q:*+,>*ݢ#*q:*+,>F:<=>ABC+D8ECFECKIXJeKpLrIxO@  $$=tJ-+ -,++,,---->STU@=b+F+8+8+8,8,8,8 ,8  f%fj ffjf9   ffj f%fjf o9 %ffjf%fjf o9 J C<5% %fkc8 fkc8Y+, >:Z[#\5]G_``gaicdfghil@ i  qqA= */L+Yd+Yd+Y`+Y`++ M*/ >+6+d+6+dò:*#' -+d+d,1'+d+d,7'+d+d,:='+d`+d,7>'+d+d`,:8!6+6+ ,?:BEH,*!KOPŸdSU:6OdOC: O`C:  Y+b Y+b*   XY  \p  uy: u |W*  lWl*lW*u_W6+/6+,22 ,22c+e>7qrst&u0v=xEyVzg{t|}~ !z'y-9EPmw%+0:GMS_ku@dK  9( H2ehCC- BCD= */L+Yd+Yd+Y`+Y`fjYlffM,m*/ >+6++6+:*#' -',nfnf`nb`nbo'%,nfnfnb`nbo'%,nfnf`nbnboK6+es:,w66zW,WdSU:*66  * *lW*u_W6  ݢ* _W ۄi>*&09FMQYhw &,08>H N W c m t ~         @BFj7(#**{5e'= +6++hh`W,u::,lW* 6d6-+8 +8 B  N: *  lW6* dZ* C: * `C: *   XY  \p  ,y:  |W* * dC:* C: p ,y:  |W>v     # ' , !1 "; %D 'O )U *[ +i ,s 'y / 1 2 3 5 7 8 / ; < = > ?@$}.GCC=q++f++f++8++8+8,Q,F,;,0-,%*,f*/ Y -,W,Q,F,;,0-,%*,b*/ Y -,W++8++8+8,Q,F,;,0-,%*,f*/ Y -,W,Q,F,;,0-,%*,b*/ Y -,W>V D( E; FN GW I J K N O P R S T2 U; Wg X Y \ ] ^ a@XX=+d=+qN*'6*/ݢ%*/:*-*'*'*'--f--f--X*'d6EB*'-*/ N:-:* lW*lW6*'EB*'-*/ N:-:* lW*lW--X*'d6EB-*'*/ N:-:* lW*lWT6*'EB-*'*/ N:-:* lW*lW>' h j k l- n> oI lO qY r\ sc t w y { | } ~ y  ! ) 3 = F X h            h @3q0 KFMFMEF=*/M,Yd,Y`,Y`,Yd,Y`,Y`,>,R,6,=*/ :H'+Ě +lW,e>B   & : D Q ` r w z @I "(8GHF=*/M,Yd,Y`,Yd,Y`,>,X,6,C*/ :#ƚ ə+Ě +lW,e>F    & 0 = L ^ c f v  @5 "(8G=P%<*ݢ*eM,,>,ݢs,C:,`C:,`C:WW`,ݢ,``C:W,PC,d>,C:,W>,C:,W,P,N-׋6-ڋ6-ۍݎ6-፸ݎ66K6  : */ :  , bb :  d6    :    :,  :6,u,uq:8888 8 8 8 8ffjffjf9 ffjffjfo9ffjffjfo9fkc8 fkc8!B !*/ N:""Y6#":$#%W$$W*$lW* "lW" ~W"W e   ń`>*ݢ:*e:,**,?>VU  # * - : G V e p {     ' 2 = P U X m p z            , F M P m           # !- "7 #K $W %Z ` (h n t z . / 0 1 2 3 4 5 .  8@ e tI6  e !(CCC e(CCCq" e(CCCqCq6 e(CCC e"e = 4<*ݢ*eM`>*ݢ*e:,Զ *,uu 6ݢ"}:*,u 6,ݢO,}:*u 6ݢ }:* ل<<*ݢ?*eM*,u>,ݢ*,}>v Z [ \( ]5 ^D _G `T ad bs c} a e f g h i j h e \ Z o p q r s' r- o3 v@Be)e+'}) e=>++q:6,f,q:*B*:3lWlW* lW*lW|>: y z { |+ }> ~H M X c p } { y @qe=o+d=f+qN-PJ-#-)-d6)-:-.:*lW؄>6   ! ( 2 B P X b h n @q*=-<* ݢF* CM>*ݢ'*e:,1 ,\ Ԅ<*ݢF*CM>*ݢ'*e:,1 ,\ Ԅ>N  & 3 < A D J P ] i v @& C(C(I= */L+Yd+Yd+Y`+Y`4++8M*/ >6*/ݢ*/:>dd``@A:636,+d+dDen6+6+o,H:KS,dO S,dO U,`O X,`O [|6+6+,H:S#UX[ ^X+`+`:<a4'):Y*d*lWUSKhknq,t:P6dYC: `C:  Y+b Y+bp  y: * lWdޥ;dCY+bdCY+bkY,w+e>>    & 0 ? G Y j     ! / 5 C I W ] c i u          E M U X g s              @iJ 9O"  L @LTI aL= Y L+* _W+*_W=+ݢ+CN-\-z-z'`6+ݢ+C:\zz'-~~m-P-z-zƚS-zəFzzƚ3zə%Y*- -WE>r    $ - 4 7 K N \ g o r               #@(  CC& =k*+]+\V Y M,* _W,*_W>,ݢ2,C:\*+ +W* +lW>6 ' ( ) *( +2 ,< -D .G /Q 0[ +a 4j 5@* CJ=l1* +W+d=+N-> 9 : ;# <* :0 G@ %[=u96*/ݢ(*/:#$> J K# L/ M1 J7 O@ -%K=w;6*/ݢ**/:#$> S T# U1 V3 S9 X@ /%L=G=*/ݢ8*/N-+b+b+> \ ] ^= _? \E a@ <%&=J>*/ݢ;*/:+b+b+> e f g@ hB eH j@ ?MN=:9:: 8 8 6  *ݢs* e:  #$R #$H #$7,9:: 8 8 ^   W%)*™*ŶlW*ȶ>v n p q r s t( u6 vM wV xi yp zw {~ | } t @*  qCu[O=LN86* ݢ7* C:#$8 N8->*    $ 5 = @ D J @ C9P=!<*/ݢ */M*,ԶՄ*<*ݢI*eM,-*,u>,ݢ*,}܄*****+>R   ' - 1 > J Q T \ i x ~ @* e FQ=B Y  > @H =f<* ݢ.* ޶* C<*ݢ(*q*q<*ݢ*eM,<*/ݢ*/e*/* Y*>R ! $ 2 8 E V d j w @! ! / $R= ; D*M, L,qN--*/ --*/ # #fD*M, ,eN D-u: Rq:*/ */ # #fD-: r}:: Rq:*/ */ # #fD"-: C:'f'f*/ 'b'b*/  : T::~3*/ */  E4*M, ,CN("Y-: F:-:--*/ */ + ,"S 88 8-\ 8-'f-'f*/ -'b-'b*/ /* M, ,CN("c-: P:-:* ę---*/ */ ," -\;-'f-'f*/ -'b-'b*/ 6*M, H,CN-/f-/f*/ -/b-/b*/ >5   U Y \ w y  S W Z ] i      * - 0 3 N Z y          * 6 U ] i     " # $7 %: &@  Q e X } X _C W 'C L :   'C S7 MS=^/0$Y59Y64Y7> W $ @ @TUVW XY7Z=[C\e]q^}_`ab2c(def$ g9hLijk