x      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                !"#$%&'()*+,-./0123456789: ; < = > ? @ A B C DEFGHI J K L M N O P Q RSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~;Safe579;'Returns the vector perpendicular on the given vector between the 2 points. Always has positive y and vector length 1; y is inverted in canvas(Returns the vector perpendicular on the given vector between the 2 points. Always has negative y and vector length 1; y is inverted in canvas6   In degrees!"#$%&'()*+,-./012345-   !"#$%&'()*+,6 543!"#$%&'()*+,  210/.-$  !"#$%&'()*+,-./012345NoneNoneSafe<=>?<=>??>=<<=>?Safe57 @ABCDEFGHIJ @ABCDEFGHIJ@ABCDEFGHIJSafe57KLKLKLSafe57MNOPQRSTMNOPQRSTMNOPQRSTSafe/57UVWXYZ[\]^_`abcdeUVWXYZ[\]^_`abcdeUVWXYZ[\]^_`abcdeSafe57fghijklmnopqrstuvfghijklmnopqrstuvfghijklmnopqrstuvSafe57&wxyz{|}~2fghijklmnopqwxyz{|}~ wxyz{|}~ Safe57Almost all key presses are registered including modifier keys. Expect character keys to come in as their character. Press a c, get a "c". If a modifier is used and a different character is expected, it will be that instead. Press shift + c, get a Ct. Modifiers are also sent as their string representation: "shift", "ctrl" or "alt". Space is expected as "space". Safe57Q Opcode: 1900  Opcode: 1901 Opcode: 1902 Opcode: 1800 Opcode: 1801 Opcode: 1802 Opcode: 2300 Opcode: 2301@Opcode: 2302 Usually this is the top left corner of the element  Opcode: 2201 Opcode: 2200 Opcode: 1601 Opcode: 1602 Opcode: 1603 Opcode: 1604 Opcode: 1605 Opcode: 1606 Opcode: 1607 Opcode: 1608 Opcode: 1600 Opcode: 1500 Opcode: 1501 Opcode: 1502 Opcode: 1503 Opcode: 2400 Opcode: 2401 Opcode: 2402 Opcode: 1401 Opcode: 1402 Opcode: 1400 Opcode: 1300 Opcode: 1301 Opcode: 1200 Opcode: 1201 Opcode: 1000Opcode: 1001 First circle = inner circle, Second circle is enclosing circle Opcode: 1002 Opcode: 0900 Opcode: 0901 Opcode: 0902 Opcode: 0903 Opcode: 0904 Opcode: 0800 Opcode: 0801Opcode: 0802 [ScreenPixel] should be as long as width * height * 4. Each quad is red,green,blue,alpha Opcode: 0701 Opcode:0702 Opcode: 0703 Opcode: 0700 Opcode: 0601 Opcode: 0602 Opcode: 0600 Opcode: 0501 Opcode: 0502 Opcode: 0500 Opcode: 0400 Opcode: 0401 Opcode: 0402 Opcode: 0403 Opcode: 0404 Opcode: 0405 Opcode: 0406 Opcode: 0407 Opcode: 0408 Opcode: 0300 Opcode: 0301  Opcode: 0302  Opcode: 0303  Opcode: 0304  Opcode: 0305 Reserved type words Type: t | Opcode Arguments: a | List of arguments for that data type Route: r | Either s for system or u8 for user Object: o | The object that is beneathExample: {r: s, o: {SystemMeasuredText object}}SystemMeasuredText object: {t:2102, a1:[CanvasId, CanvasText object, ScreenDimensions]} Opcode: 0200 Opcode: 0201 Opcode: 0202 Opcode: 0203 Opcode: 0204 Opcode: 0100 Opcode: 0101 Opcode: 2000 Opcode: 2001 Opcode: 2100 Opcode: 2101      In degrees       D      Safe57"Z| The point indications are from the perspective of a regular Cartesian cordinate system.'| Rotation is around a point on the canvas. May be the centre of the boundingbox (enclosing rectangle) or an arbitrary point. Angle is in degrees and counter-clockwise in the cordinate system(from the x-axis to the y-axis) and visually on canvas clock-wise.)8Should contain atleast 1 shape. Rotation before Position*| Position is upperleftcorner. Position is the corner closes to origin. Visually in canvas, this is top left. In a Cartesian cordinate system, this is bottom left.+| Position is center,The first point of the regular polygon, always starts in the direction from the x-axis.(Towards x-infinity). Position is the the centre of the regular polygonB"| Can contain any number of points;!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[@!"#$%&'(-*)+,./01<?B23456789:;=>@ACDEFGHIJKLMNOPQRSTUVWXYZ[!"#$%&'(<)*+,-./012345678945:78945;:7894<=>5?7894@A894B894BC7894B7894DEFGHIJKLMNOPQRSTUVWXYZ[Safe Safe57"\]^_`abcdefghijklmnopqrstuvwxyz{|}!\]^_`abcdefghijklmnopqrstuvwxyz{|"ijfghdecba`_^\]}klmnopqrstuvwxyz{|\]^_`abcdefghijklmnopqrstuvwxyz{|}Safe57   Safe /5679:;QRT Convert to a  Convert to a  A version of 8 that works for any data type that has an instance for !Safe"None      #None      $None2!'%None57 !"#$%  !"#$%None57 &None0 &'()*+,-./012 &-'()*+,./0& '()*+,-./012NoneW      !"#$%&'()*+,-./012345678W      !"#$%&'()*+,-./012345678]876543210/$%&'()*+,-. !"#            !"#$ %&'()*+,-./012345678'None :;<=>3456:;<=> :;<=>3456 None      :;<=>:;<=>      (None?@AB7C89?@ABC?@AB7C89 None?@ABC?@ABC)None DEFG:H;<=>?@DEFGH DEFG:H;<=>?@NonefghijklmnopqrstuvDEFGHDEFGHuvrstjklmnopqfghi*None IJKALBCDMNEFIJKLMN IJKALBCDMNEF NoneIJKLMNIJKLMN+NoneOPGQOPQOPGQ Noned!"#$%&'(-*)+,./01<?B23456789:;=>@ACDEFGHIJKLMNOPQRSTUVWXYZ[OPQOPQ[ZYXWVUTSRQPONMLKJIHGFDE()*+,-./012345678945:78945;:7894<=>5?7894@A894B894BC7894B7894&'#$%!",NoneRSHTUIJKLMNOPQVRRSTUVRSHTUIJKLMNOPQVRNoneUVWXYZ[\]^_`abcdeRSTUVRSTUVe]^_`abcdUVWXYZ[\-NoneWXYZSTUVWXYZ[\]^_`abcdWXYZWXYZSTUVWXYZ[\]^_`abcdNoneWXYZWXYZ      .None[\]^_ef[\]^_[\]^_efNone MNOPQRST[\]^_ [\]^_QRSTMNOP/None`ab`ab`abNoneKL`ab`abKL0None cdefgghhijklmcdefgh cdefgghhijklmNone@ABCDEFGHIJcdefghcdefghJIHGFDE@ABCNoneijkijkijkijk1None GCheckes to see if there is a node on a certain position Abstracts the standardized 23 to  Abstracts  back to  BasicShapes and Canvas events'Translates color datatype to RGBA codes.Translates the thickness to a float Returns the point when making a step f long from the point start in the direction of the vector. The length between start pos and result pos is always f.Vector from p1 to p2 Returns the vector perpendicular on the given vector between the 2 points. Always has positive y and vector length 1; y is inverted in canvasReturns the vector perpendicular on the given vector between the 2 points. Always has negative y and vector length 1; y is inverted in canvas8Returns the size of the vector "lmnopqrstuvwxyz{|}~"lmnopqrstuvwxyz{|}~"lmnopqrstuvwxyz{|}~NoneTfghijklmnopqwxyz{|}~lmnopqrstuvwxyz{|}~Tlmnopqrstuvwxyz{|}~}~z{|wxyjklmnopqfghi4Nonennn5Noneopqopqopq6Nonerstrrst7Noneuvwxuuvwx8Noneyzyzyz9None{|{|{|:None}Grab an outEvent from the outEventQueue and route it to the correct module sender if any. If there isn't one, throw a NoOutRouteException. The router will continue until it: - Comes across a Stop outEvent: Raises a RequestShutdownException - Raises an exception - Receives an exception (Only possibility is ShutdownException) In all cases, a Stop outEvent is sent to all module senders.}~}~}~;None<Noneeventloop function eventloop function =NoneNone-Starts the entire system. First the setup phase is handled to setup the different concurrent resources. This is followed by the initialization phase where all modules are initialised. Than, the different worker threads are spawned and finally the system thread will go to work as the eventloop thread.^Shutting down is handled centrally through the system thread (main thread). If any of the threads(including the system thread) receive an exception, only the first exception is thrown to the system thread which will try to shutdown immediately. This exception is logged by the system thread. All other exceptions are logged by their respective threads. The system thread will than shutdown the worker threads. This is done by throwing exceptions to all workerthreads except sender threads. These are sent a Stop event. If they take longer than 1 second, to finish up, they will also be thrown an exception.Utility function in order to create the different thread actions in the system. Assumed is that the action requires the system configuration, the module configuration and some resource that may be available in the module configuration.    >?@ABCDEFGHIJKLMNOPQRSTUUVVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~K       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOOPQRSSTUVWXYZ[\]^_`abcdefghijklmnop./qrstuvwxyz{|}~                                                 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%       !"#$%&'(()*+,,-./01234567789:;<<=>??@ABCDEFGHIJKLMNOPQRS'T'U'V'W'X(Y(Z([(\(])^)_)`)a)b*c*d*e*f*g*h+i+j+k,l,m,n,o,p-q-r-s-t.u.v.w.x.y/z/{/|0}0~00001111111111111111111111111111111111                   !!!!!!!!!!!!!!!!!!!! ! ! " " """"""""""""""""""" "!"""#"$"%"&"'#(#)#*$+$,$-$.$/$0$1$2$3$4$5$6$7$8$9$:$;%<%=%>%?%@%A&B&C&D&E&F&G&H&B&I&J&K&L&M'N'O'P'Q(R(S(T)U)V)W)X)Y)Z)[*\*]*^*_*`*a+b,c,d,e,f,g,h,i,j,k,l,m-n-o-p-q-r-s-t-u-v-w-x-y-z-{-|-}-~-..0000000455566677778899::::;;;<<<<==(eventloop-0.8.2.0-ItWJivsjzOf5qNe5fCfrgOEventloop.Utility.VectorsEventloop.Types.CommonEventloop.Module.TimerEventloop.Module.StdOutEventloop.Module.StdInEventloop.Module.File Eventloop.Module.Websocket.MouseEventloop.Module.Graphs#Eventloop.Module.Websocket.Keyboard!Eventloop.Module.Websocket.CanvasEventloop.Module.BasicShapes#Eventloop.Utility.Trees.GeneralTreeEventloop.Module.DrawTrees!Eventloop.Module.StatefulGraphicsEventloop.Types.EventsEventloop.Types.SystemEventloop.DefaultConfigurationEventloop.CoreEventloop.Utility.WebsocketsEventloop.Utility.ConfigEventloop.Module.Timer.TypesEventloop.Module.StdOut.TypesEventloop.Module.StdIn.TypesEventloop.Module.File.Types&Eventloop.Module.Websocket.Mouse.TypesEventloop.Module.Graphs.Types)Eventloop.Module.Websocket.Keyboard.Types'Eventloop.Module.Websocket.Canvas.Types"Eventloop.Module.BasicShapes.Types"Eventloop.Utility.Trees.LayoutTree Eventloop.Module.DrawTrees.Types*Eventloop.Module.DrawTrees.RoseTreeGeneric(Eventloop.Module.Websocket.Canvas.Opcode.Eventloop.Module.Websocket.Canvas.JSONEncoding,Eventloop.Module.BasicShapes.MeasureTextHack$Eventloop.Module.BasicShapes.Classes'Eventloop.Module.StatefulGraphics.TypesEventloop.Types.Exception(Eventloop.Module.Websocket.Canvas.Canvas,Eventloop.Module.Websocket.Keyboard.Keyboard&Eventloop.Module.Websocket.Mouse.Mouse$Eventloop.Module.DrawTrees.DrawTrees(Eventloop.Module.BasicShapes.BasicShapesEventloop.Module.File.File2Eventloop.Module.StatefulGraphics.StatefulGraphicsEventloop.Module.StdIn.StdInEventloop.Module.StdOut.StdOutEventloop.Module.Timer.TimerEventloop.Module.Graphs.GraphsEventLoop.Types EventTypesEventloop.OutRouterEventloop.System.ProcessingEventloop.System.TeardownThreadEventloop.System.SetupEventloop.System.SenderThread Eventloop.System.RetrieverThread Eventloop.System.OutRouterThread%Eventloop.System.InitializationThread Eventloop.System.EventloopThread'Eventloop.System.DisplayExceptionThreadRotateLeftAroundrotateLeftAround ToPolarCoord toPolarCoordToPointtoPointVector2D|+||-||/|* negateVector angleBetween Translate translate ExtremaCoordxMinxMaxyMinyMaxCoordxyPoint PolarCoordOffsetYXLengthRadiansAngledegreesToRadiansradiansToDegrees lengthToPointlengthBetweenPointsdifferenceBetweenPoints averagePointdownPerpendicularupPerpendicular followVectorintersectVector turnToVector originPoint$fRotateLeftAroundPoint$fRotateLeftAroundPolarCoord$fToPolarCoordPoint$fToPointPolarCoord$fVector2DPoint$fVector2DPolarCoord$fExtremaCoord[]$fCoordPolarCoord $fCoordPoint$fShowPolarCoord$fEqPolarCoord $fShowPoint $fEqPoint$fGenericPoint $fNFDataPoint NumericIdNamedIdProcessingDescriptionEventloopModuleIdentifierTimerOutSetTimerSetIntervalTimer UnsetTimerTimerInTickTimerStartFunction StartedTimer TickBufferTimerIdMicroSecondDelay StdOutOut StdOutMessageStdInOutStdInReceiveContentsStdInReceiveLineStdInReceiveCharStdInInStdInReceivedContentsStdInReceivedLineStdInReceivedCharFileOutOpenFile CloseFileRetrieveContents RetrieveLine RetrieveCharIfEOFWriteToFileIn FileOpened FileClosedRetrievedContents RetrievedLine RetrievedCharIsEOFWroteTo MouseButton MouseLeft MouseRight MouseMiddle MouseEventClick DoubleClick MouseMove MouseDownMouseUp MouseEnter MouseLeave MouseType MouseCanvasMouseSVGMouseInMouseWeighted UnweightedDirected Undirected ThicknessThinThickColorRedBlueGreenPurpleGreyYellowOrangeBlackWhiteGraphnodesedgesdirectedweightedEdgeNodeWeightLabel GraphsOut SetupGraphs DrawGraph InstructionsGraphsInKeyVectorPosKeyboard ClearPartClearRectangle ClearCanvasCSSUnit CSSPixels CSSPercentage CSSBindPoint CSSFromCenterCSSFromDefault CSSPositionCSSMeasurements CSSTopOffset CSSLeftOffsetCanvasTransformSaveRestoreRotateScale Transform SetTransformResetTransformTransformationMatrix TransformUnit Alignment AlignLeft AlignRight AlignCenterTextFill NoTextFill TextStroke NoTextStrokeTextFillRenderStyleTextStrokeRenderStyleFont CanvasTextCanvasGradientTypeRadialGradientLinearGradientPatternRepetitionRepeatRepeatXRepeatYNoRepeat CanvasImage CanvasElement ImageData RenderStyle CanvasColorCanvasGradient CanvasPatternCanvasColorStopPathFill NoPathFillPathRenderFillStyle PathStroke NoPathStrokePathRenderStrokeStyleScreenPathPartMoveToLineTo BezierCurveToQuadraticCurveToArcToArc Rectangle ClosePathCanvasOperationDrawPathDrawText DoTransformClearFrame CanvasOut SetupCanvasTeardownCanvasCanvasOperations MeasureTextCanvasIn MeasuredTextSystemCanvasOutSystemMeasureTextSystemCanvasInSystemMeasuredTextRoutedMessageOut OutUserCanvasOutSystemCanvasRoutedMessageIn InUserCanvasInSystemCanvasFontSize FontFamilyScreenLineThicknessScaleYScaleX ScaleUnit ScreenCircleColorStopOffset ScreenPixel ScreenColor ScreenAlpha ScreenBlue ScreenGreen ScreenRedScreenColorMetricZIndexCanvasIdScreenEndAngleScreenStartingAngleScreenEndPointScreenControlPointScreenStartingPointScreenDimensions ScreenPoint ScreenAngle ScreenRadius ScreenHeight ScreenWidthScreenYScreenX ScreenMetricOpcodeCanvasSystemReceiveBuffer BoundingBox RotatePoint AroundCenter AroundPointRotationShapeCompositeShapeCircleRegularPolygonTextLine MultiLineFilledMultiLinePolygonshapes positionM rotationMposition dimensions fillColorstrokeLineThickness strokeColorradiusnumberOfPointstext fontFamilyfontSize alignmentpoint1point2points fillWidthBasicShapesOut DrawShapesNumberOfPoints LowerRight LowerLeft UpperRight UpperLeftStrokeLineThickness FillThickness StrokeColor FillColorAlphaRadius DimensionsHeightWidthPositionGraphicalNumericGeneralizeTreegeneralizeTreeMiddle BottomOffset RightOffset TopOffset LeftOffset GeneralLineGeneralNodeContentGeneralNodeText GeneralNode GeneralTreeGeneralTreeBoxtextFont textHeight charWidthmarginBetweenTreesmarginBetweenNodeContentmarginBetweenNodeRowsmarginBetweenNodeColumnsgeneralNodeDimensionflattenDimensionsgeneralNodeContentDimensionlayoutGeneralTreelayoutGeneralTreeChildren layoutLinelayoutGeneralTreeslayoutGeneralNodeContentListlayoutGeneralNodeContenttextSize treeIndex$fGeneralizeTreeGeneralTree$fShowGeneralNodeContent$fEqGeneralNodeContent$fGenericGeneralNodeContent$fNFDataGeneralNodeContent$fShowGeneralLine$fEqGeneralLine$fGenericGeneralLine$fNFDataGeneralLine$fShowGeneralTree$fEqGeneralTree$fGenericGeneralTree$fNFDataGeneralTreeRoseTreeRoseNodeRBTreeRBNode NodeColorNodeRed NodeBlackNodeGrey DrawTreesOut DrawTrees ToRoseTree toRoseTreegenericToRoseTreeToScreenPathParttoScreenPathPartsToCanvasOperationstoCanvasOperations ToCanvasOut toCanvasOutOverlapsoverlapscontainstouches ToBoundingBox toBoundingBoxToCentertoCenter ToPrimitives toPrimitivesGeometricPrimitivePoints CircleAreaopOnBoundingBoxallRegularPolygonPointsboundingBoxFromPrimitives normalizeBBox roundPoint roundColorstrokePointsForConnection strokePointsstrokePointsClosedPathfindRotationPoint toCanvasTexttoCanvasPathFillhasCanvasPathFillallScreenPolygonPoints NoDimChange noDimChangeGraphicsStates GraphicsState StatefulBBStatefulGraphicStatefulGraphicPerformedDrawnModifiedRemovedNoOpStatefulGraphicsOutDrawRemoveOutOutFileOutTimer OutStdOutOutStdIn OutCanvasOutBasicShapes OutDrawTrees OutGraphsOutStatefulGraphicsStopInStart InKeyboardInMouseInFileInTimerInStdInInCanvasInGraphs$fEqIn$fShowIn$fEqOut $fShowOut $fGenericOut $fNFDataOutIOState TimerState FileStateStatefulGraphicsStateNoStatestartedIntervalTimers startedTimersopenedstates IOConstantsMouseConstantsKeyboardConstantsCanvasConstantsStdInConstantsTimerConstants FileConstants NoConstants clientSocketclientConnection serverSocketcanvasSystemReceiveBuffer stdInInQueue tickInQueue fileInQueue SharedIOStateSharedIOConstantssafePrintToken measureText!EventloopSetupModuleConfigurationmoduleIdentifier initializerFeventRetrieverF preprocessorFpostprocessorF eventSenderF teardownFEventloopSetupConfigurationbeginProgstate eventloopFsetupModuleConfigurationsEventloopSystemConfigurationeventloopConfig moduleConfigssharedIOConstantssharedIOStateTsystemThreadIdretrieverThreadsMoutRouterThreadMsenderThreadsM exceptions isStoppingMEventloopConfiguration progstateT eventloopFunc inEventQueue outEventQueue"EventloopModuleSenderConfigurationsendersenderEventQueueEventloopModuleConfigurationmoduleId ioConstantsioStateT initializerM retrieverM preprocessorMpostprocessorM senderConfigM teardownMSenderEventQueue OutEventQueue InEventQueueOutEventRouterTeardown EventSender PostProcessor PreProcessorEventRetriever Initializer$fShowIOConstantssetupCanvasModuleConfigurationcanvasModuleIdentifiercanvasInitializercanvasEventRetrievercanvasEventSender setupKeyboardModuleConfigurationkeyboardModuleIdentifierkeyboardInitializerkeyboardEventRetrieverkeyboardEventSendersetupMouseModuleConfigurationmouseModuleIdentifiermouseInitializermouseEventRetrievermouseEventSender!setupDrawTreesModuleConfigurationdrawTreesModuleIdentifierdrawTreesPostProcessorshowGeneralTreeList rbExampleTreeroseExampleTree#setupBasicShapesModuleConfigurationbasicShapesModuleIdentifierbasicShapesPostProcessorsetupFileModuleConfigurationfileModuleIdentifierfileEventRetrieverfileEventSender fileTeardown(setupStatefulGraphicsModuleConfiguration statefulGraphicsModuleIdentifierstatefulGraphicsInitializerstatefulGraphicsPostProcessorsetupStdInModuleConfigurationstdInModuleIdentifierstdInInitializerstdInEventRetrieverstdInEventSendersetupStdOutModuleConfigurationstdOutModuleIdentifierstdOutEventSendersetupTimerModuleConfigurationtimerModuleIdentifiertimerInitializertimerEventRetrievertimerEventSender timerTeardown%allModulesEventloopSetupConfigurationsetupSharedIOConstantssetupSharedIOStatesetupGraphsModuleConfigurationgraphsModuleIdentifier nodeRadius xArrowSize yArrowSize weightHeightdimCanvasGraphsroundDimCanvasGraphscanvasGraphsWidthcanvasGraphsHeightinstructionsHeightinstructionsBeginAtcanvasInstrWidthcanvasInstrHeightdimCanvasInstrroundDimCanvasInstrcanvasIdGraphscanvasIdInstructionsonNodegraphsPreProcessorgraphsPostProcessorcolorToRGBAColorthicknessToFloatfindNode graphToShapes nodeToShapes edgeToShapes posOnVector vectorizedownPerpendicularToupPerpendicularTo vectorSizestartEventloopSystemterminateWithinOrThrowExceptionthreadActionsBasedOnModulespawnWorkerThreadregisterRetrieverThreadregisterOutRouterThreadregisterSenderThreadthrowShutdownExceptionToThreadallWorkerThreadsretrieverThreadsoutRouterThread senderThreadsUnbufferedReaderThread ReaderThread ClientSocket ServerSocket ReceiveBufferMessagePortHostcreateBindListenServerSocketacceptFirstConnectionsetupWebsocketConnectionhandleCloseRequestException takeMessage writeMessagewriteBinaryMessage isConnectedcloseWebsocketConnectiondestroyWebsocketConnection$fShowConnection&network-2.6.3.1-G4Up1CPKbp7DeFsnywOnGGNetwork.Socket iNADDR_ANY)websockets-0.9.7.0-LWhC8QMCiocCeRPgjT0UOxNetwork.WebSockets.Connection Connection ipAddress keyboardPort mousePort canvasPort $fShowMVarConnect BottomConnect TopConnect LayoutLineLayoutNodeContentLayoutNodeText LayoutNode LayoutTreeLBox marginLine lineThickness textThickness printTreeprintNodeContent printLinemarginizeLinePointsbase GHC.GenericsGeneric GToRoseTree gtoRoseTree emptyNode cleanTree mergeProduct$fToRoseTree[]$fToRoseTree[]0$fToRoseTreeChar$fToRoseTreeDouble$fToRoseTreeFloat$fToRoseTreeInteger$fToRoseTreeInt$fGToRoseTree:+:$fGToRoseTree:*:$fGToRoseTreeV1$fGToRoseTreeU1$fGToRoseTreeM1$fGToRoseTreeM10$fGToRoseTreeK1ToOpcodetoOpcode$fToOpcodeCSSBindPoint$fToOpcodeCSSPosition$fToOpcodeClearPart$fToOpcodeCSSUnit$fToOpcodeCanvasTransform$fToOpcodeAlignment$fToOpcodeTextFill$fToOpcodeTextStroke$fToOpcodeFont$fToOpcodeCanvasText$fToOpcodeCanvasGradientType$fToOpcodePatternRepetition$fToOpcodeCanvasImage$fToOpcodeRenderStyle$fToOpcodePathFill$fToOpcodePathStroke$fToOpcodeScreenPathPart$fToOpcodeCanvasOperation$fToOpcodeCanvasOut$fToOpcodeSystemCanvasOutoperationObject$fToJSONClearPart$fToJSONCSSUnit$fToJSONCSSBindPoint$fToJSONCSSPosition$fToJSONCanvasTransform$fToJSONAlignment$fToJSONTextFill$fToJSONTextStroke $fToJSONFont$fToJSONCanvasText$fToJSONCanvasGradientType$fToJSONPatternRepetition$fToJSONCanvasImage$fToJSONRenderStyle$fToJSONPathFill$fToJSONPathStroke$fToJSONScreenPathPart$fToJSONCanvasOperation$fToJSONCanvasOut$fToJSONSystemCanvasOut$fToJSONRoutedMessageOut$fFromJSONAlignment$fFromJSONFont$fFromJSONCanvasText$fFromJSONCanvasIn$fFromJSONSystemCanvasIn$fFromJSONRoutedMessageInmeasureTextRefsaveMeasureTextuseMeasureText$fToScreenPathPartShape$fToCanvasOperationsShape$fToCanvasOutBasicShapesOut$fOverlapsBoundingBox$fOverlapsShape$fToBoundingBoxShape$fToBoundingBoxBoundingBox$fToCenterShape$fToCenterBoundingBox$fToPrimitivesShape$fToPrimitivesBoundingBox$fTranslateGeometricPrimitive$fTranslateShape$fRotateLeftAroundBoundingBox $fExtremaCoordGeometricPrimitive$fExtremaCoordBoundingBox$$fRotateLeftAroundGeometricPrimitive$fOverlapsStatefulBB$fToBoundingBoxStatefulBB$fToPrimitivesStatefulBB$fOverlapsStatefulGraphic$fToBoundingBoxStatefulGraphic$fToPrimitivesStatefulGraphicEventloopExceptionShuttingDownExceptionRequestShutdownExceptionNoOutRouteExceptionInitializationExceptionRetrievingExceptionProcessingExceptionSendingExceptionTeardownExceptionexceptionMessage$fShowEventloopException$fExceptionEventloopExceptioncanvasTeardownsendRoutedMessageOutroute measureText_messageToKeyboardInkeyboardTeardown$fFromJSONKeyboardmessageToMouseIn mouseTeardown$fFromJSONPoint$fFromJSONMouseButton$fFromJSONMouseEvent$fFromJSONMouseType$fFromJSONMouseInmaxWidthshowGeneralTreeList'showGeneralTreenodeColorToFillColor$fGeneralizeTreeRoseTree$fGeneralizeTreeRBTreebasicShapesInitializerfileInitializerfileEventSender' doReadAction getFromFilefileIsReadablefileIsWriteable fileIsOpenedretrieveContentsretrieveOpenedFileremoveOpenedFile closeAllFilesgetIdgetZgetShapereplaceGraphicalStatefindGraphicalStatecalculateNewScenecalculateRemovecalculateRedrawscalculateRedrawsForDrawncalculateRedrawsForRemoved statefulIds statefulIdsplitsplitOnperformStatefulGraphicsOut addGraphicaddOrReplaceGraphic removeGraphicstdInEventSender' doStdInGettimerEventSender' registerTimer startTimerunregisterTimer haltTimerfindStartedTimertick routeOutEventprocessEventWithModuleprocessEventsWithModules processEventsstartTeardowningteardownModulesteardownModulesetupEventloopSystemConfigsetupEventloopConfigurationsetupEventloopModuleConfig'setupEventloopModuleSenderConfiguration startSendingsendOnestartRetrieving retrieveOnestartOutRouting outRoutes outRouteOneoutRouteBroadcastStopstartInitializinginitializeModulesinitializeModulestartEventloopingfindProcessorseventloopSteps eventloopStepstartDisplayingExceptionsdisplayException