From 7f7f8970bc7018bed9e115f6ad881db381a96900 Mon Sep 17 00:00:00 2001 From: Tara Date: Sun, 20 Nov 2022 07:05:44 -0700 Subject: [PATCH] Make structural changes to repository Modernizes the repository --- .gitignore | 407 +- Settings.StyleCop | 184 - _ReSharper.lsleditor/BuildScriptCache/.crc | 1 - .../BuildScriptCache/.version | Bin 4 -> 0 bytes .../BuildScriptCache/5/4680b305.dat | Bin 80 -> 0 bytes _ReSharper.lsleditor/ModuleIds.xml | 7 - _ReSharper.lsleditor/NamedArguments/.crc | 1 - _ReSharper.lsleditor/NamedArguments/.version | Bin 4 -> 0 bytes .../NamedArguments/5/4680b305.dat | Bin 24541 -> 0 bytes .../ProjectModel/ProjectModel.dat | Bin 100 -> 0 bytes _ReSharper.lsleditor/Resources/.crc | 1 - _ReSharper.lsleditor/Resources/.version | Bin 4 -> 0 bytes _ReSharper.lsleditor/Resources/5/626cc1d.dat | Bin 3900 -> 0 bytes _ReSharper.lsleditor/SymbolCache.bin | Bin 74578 -> 0 bytes _ReSharper.lsleditor/TagPrefixes/.crc | Bin 4 -> 0 bytes _ReSharper.lsleditor/TagPrefixes/.version | Bin 4 -> 0 bytes _ReSharper.lsleditor/TodoCache/.crc | 1 - _ReSharper.lsleditor/TodoCache/.version | Bin 4 -> 0 bytes _ReSharper.lsleditor/TodoCache/3/79ddd176.dat | Bin 22234 -> 0 bytes .../WebsiteFileReferences/.crc | Bin 4 -> 0 bytes .../WebsiteFileReferences/.version | Bin 4 -> 0 bytes _ReSharper.lsleditor/WordIndex/.crc | 1 - _ReSharper.lsleditor/WordIndex/.version | Bin 4 -> 0 bytes _ReSharper.lsleditor/WordIndex/2/7003905d.dat | Bin 45036 -> 0 bytes _ReSharper.lsleditor/WordIndex/5/4680b305.dat | Bin 65918 -> 0 bytes _ReSharper.lsleditor/WordIndex/6/bf11a17.dat | Bin 65638 -> 0 bytes build/AssemblyRevisionIncrementer.exe | Bin 8192 -> 0 bytes lsl-editor-doc.xml | 3272 ---- {trunk => source}/About.Designer.cs | 350 +- {trunk => source}/About.cs | 198 +- {trunk => source}/About.resx | 238 +- {trunk => source}/App.ico | Bin {trunk => source}/BZip2Decompress/BZip2.cs | 126 +- .../BZip2Decompress/BZip2Constants.cs | 322 +- .../BZip2Decompress/BZip2InputStream.cs | 1926 +-- .../BZip2Decompress/IChecksum.cs | 186 +- .../BZip2Decompress/StrangeCrc.cs | 414 +- {trunk => source}/Browser.Designer.cs | 160 +- {trunk => source}/Browser.cs | 320 +- {trunk => source}/Browser.resx | 244 +- .../BugReport/BugReportForm.Designer.cs | 872 +- {trunk => source}/BugReport/BugReportForm.cs | 586 +- .../BugReport/BugReportForm.resx | 256 +- .../BugReport/UploadBugReport.cs | 436 +- {trunk => source}/Decompressor/Decompress.cs | 186 +- {trunk => source}/Decompressor/ZipEntry.cs | 734 +- .../Docking/AutoHideStripBase.cs | 1060 +- {trunk => source}/Docking/DockAreasEditor.cs | 284 +- {trunk => source}/Docking/DockContent.cs | 608 +- .../Docking/DockContentCollection.cs | 350 +- .../Docking/DockContentEventArgs.cs | 38 +- .../Docking/DockContentHandler.cs | 2126 +-- {trunk => source}/Docking/DockOutlineBase.cs | 322 +- .../Docking/DockPane.SplitterControl.cs | 312 +- {trunk => source}/Docking/DockPane.cs | 2576 +-- .../Docking/DockPaneCaptionBase.cs | 200 +- .../Docking/DockPaneCollection.cs | 94 +- .../Docking/DockPaneStripBase.cs | 504 +- .../Docking/DockPanel.AutoHideWindow.cs | 1224 +- .../Docking/DockPanel.DockDragHandler.cs | 1628 +- .../Docking/DockPanel.DragHandler.cs | 270 +- .../Docking/DockPanel.FocusManager.cs | 1136 +- .../Docking/DockPanel.MdiClientController.cs | 860 +- .../Docking/DockPanel.Persistor.cs | 1562 +- .../Docking/DockPanel.SplitterDragHandler.cs | 330 +- {trunk => source}/Docking/DockPanel.bmp | Bin {trunk => source}/Docking/DockPanel.cs | 2054 +-- .../Docking/DockPanelExtender.cs | 450 +- {trunk => source}/Docking/DockPanelSkin.cs | 842 +- .../Docking/DockWindow.SplitterControl.cs | 56 +- {trunk => source}/Docking/DockWindow.cs | 486 +- .../Docking/DockWindowCollection.cs | 76 +- {trunk => source}/Docking/DragForm.cs | 128 +- {trunk => source}/Docking/DummyControl.cs | 26 +- {trunk => source}/Docking/Enums.cs | 120 +- {trunk => source}/Docking/FloatWindow.cs | 906 +- .../Docking/FloatWindowCollection.cs | 84 +- .../Docking/Helpers/DockHelper.cs | 206 +- .../Docking/Helpers/DrawHelper.cs | 176 +- .../Docking/Helpers/ResourceHelper.cs | 58 +- .../Docking/Helpers/Win32Helper.cs | 38 +- {trunk => source}/Docking/InertButtonBase.cs | 230 +- {trunk => source}/Docking/Interfaces.cs | 92 +- {trunk => source}/Docking/Localization.cs | 92 +- {trunk => source}/Docking/Measures.cs | 28 +- .../Docking/NestedDockingStatus.cs | 216 +- .../Docking/NestedPaneCollection.cs | 232 +- .../Docking/Resources.Designer.cs | 450 +- {trunk => source}/Docking/Resources.resx | 378 +- .../Resources/DockIndicator_PaneDiamond.bmp | Bin .../DockIndicator_PaneDiamond_Bottom.bmp | Bin .../DockIndicator_PaneDiamond_Hotspot.bmp | Bin ...DockIndicator_PaneDiamond_HotspotIndex.bmp | Bin .../DockIndicator_PaneDiamond_Left.bmp | Bin .../DockIndicator_PaneDiamond_Right.bmp | Bin .../DockIndicator_PaneDiamond_Top.bmp | Bin .../Resources/DockIndicator_PanelBottom.bmp | Bin .../DockIndicator_PanelBottom_Active.bmp | Bin .../Resources/DockIndicator_PanelFill.bmp | Bin .../DockIndicator_PanelFill_Active.bmp | Bin .../Resources/DockIndicator_PanelLeft.bmp | Bin .../DockIndicator_PanelLeft_Active.bmp | Bin .../Resources/DockIndicator_PanelRight.bmp | Bin .../DockIndicator_PanelRight_Active.bmp | Bin .../Resources/DockIndicator_PanelTop.bmp | Bin .../DockIndicator_PanelTop_Active.bmp | Bin .../Docking/Resources/DockPane_AutoHide.bmp | Bin .../Docking/Resources/DockPane_Close.bmp | Bin .../Docking/Resources/DockPane_Dock.bmp | Bin .../Docking/Resources/DockPane_Option.bmp | Bin .../Resources/DockPane_OptionOverflow.bmp | Bin .../Dockindicator_PaneDiamond_Fill.bmp | Bin {trunk => source}/Docking/SplitterBase.cs | 140 +- {trunk => source}/Docking/Strings.Designer.cs | 1548 +- {trunk => source}/Docking/Strings.resx | 712 +- .../Docking/VS2005AutoHideStrip.cs | 1010 +- .../Docking/VS2005DockPaneCaption.cs | 956 +- .../Docking/VS2005DockPaneStrip.cs | 2958 ++-- .../Docking/VisibleNestedPaneCollection.cs | 336 +- {trunk => source}/EditForm.Designer.cs | 268 +- {trunk => source}/EditForm.cs | 1276 +- {trunk => source}/EditForm.resx | 244 +- {trunk => source}/Editor/GListBox.Designer.cs | 72 +- {trunk => source}/Editor/GListBox.cs | 296 +- .../Editor/GListBoxWindow.Designer.cs | 126 +- {trunk => source}/Editor/GListBoxWindow.cs | 344 +- {trunk => source}/Editor/GListBoxWindow.resx | 238 +- {trunk => source}/Editor/KeyWords.cs | 820 +- {trunk => source}/Editor/MsXsltContext.cs | 78 +- {trunk => source}/Editor/Numbered.Designer.cs | 74 +- {trunk => source}/Editor/Numbered.cs | 286 +- {trunk => source}/Editor/NumberedTextBoxUC.cs | 170 +- .../Editor/NumberedTextBoxUC.designer.cs | 212 +- .../Editor/NumberedTextBoxUC.resx | 238 +- .../Editor/RichLabel.Designer.cs | 84 +- {trunk => source}/Editor/RichLabel.cs | 536 +- {trunk => source}/Editor/RichLabel.resx | 238 +- {trunk => source}/Editor/RoundCorners.cs | 378 +- {trunk => source}/Editor/SyntaxRichTextBox.cs | 4522 +++--- .../Editor/SyntaxRichTextBox.resx | 84 +- {trunk => source}/Editor/TooltipWindow.cs | 314 +- .../Editor/TooltipWindow.designer.cs | 122 +- {trunk => source}/Editor/TooltipWindow.resx | 238 +- {trunk => source}/FindWindow.Designer.cs | 422 +- {trunk => source}/FindWindow.cs | 578 +- {trunk => source}/FindWindow.resx | 238 +- {trunk => source}/Form1.cs | 2218 +-- {trunk => source}/Form1.resx | 694 +- {trunk => source}/GotoWindow.Designer.cs | 206 +- {trunk => source}/GotoWindow.cs | 178 +- {trunk => source}/GotoWindow.resx | 238 +- {trunk => source}/Helpers/AutoFormatter.cs | 744 +- {trunk => source}/Helpers/CodeCompletion.cs | 200 +- {trunk => source}/Helpers/CompilerHelper.cs | 282 +- {trunk => source}/Helpers/FileAssociator.cs | 222 +- {trunk => source}/Helpers/GetTemplate.cs | 134 +- {trunk => source}/Helpers/GroupboxEvent.cs | 372 +- {trunk => source}/Helpers/GroupboxEvent.resx | 258 +- {trunk => source}/Helpers/HTTPRequest.cs | 430 +- {trunk => source}/Helpers/LSL2CSharp.cs | 1276 +- {trunk => source}/Helpers/LSLIConverter.cs | 0 {trunk => source}/Helpers/LSLIPathHelper.cs | 0 {trunk => source}/Helpers/Measure.cs | 132 +- {trunk => source}/Helpers/OopsFormatter.cs | 130 +- {trunk => source}/Helpers/OutlineHelper.cs | 112 +- {trunk => source}/Helpers/PrinterHelper.cs | 1404 +- {trunk => source}/Helpers/SendMyKeys.cs | 538 +- {trunk => source}/Helpers/Settings.cs | 140 +- {trunk => source}/Helpers/SmtpClient.cs | 702 +- .../Helpers/TabControlExtended.Designer.cs | 56 +- .../Helpers/TabControlExtended.cs | 490 +- {trunk => source}/Helpers/TaskQueue.cs | 470 +- .../Helpers/TextFileEncodingDetector.cs | 0 {trunk => source}/Helpers/WebRequestClass.cs | 494 +- {trunk => source}/Helpers/XMLRPC.cs | 636 +- {trunk => source}/Icons/ADDITEM.GIF | Bin {trunk => source}/Icons/COPY.GIF | Bin {trunk => source}/Icons/CUT.GIF | Bin {trunk => source}/Icons/DEINDENT.GIF | Bin {trunk => source}/Icons/DELETE.GIF | Bin {trunk => source}/Icons/END.GIF | Bin {trunk => source}/Icons/FIND.GIF | Bin {trunk => source}/Icons/ININDENT.GIF | Bin {trunk => source}/Icons/NEWDOC.GIF | Bin {trunk => source}/Icons/NEWPROJ.GIF | Bin {trunk => source}/Icons/OPEN.GIF | Bin {trunk => source}/Icons/PASTE.GIF | Bin {trunk => source}/Icons/PRINT.GIF | Bin {trunk => source}/Icons/PROJECT.GIF | Bin {trunk => source}/Icons/PROPS.GIF | Bin {trunk => source}/Icons/REDO.GIF | Bin {trunk => source}/Icons/SAVE.GIF | Bin {trunk => source}/Icons/SAVEALL.GIF | Bin {trunk => source}/Icons/SAVEAS.GIF | Bin {trunk => source}/Icons/START.GIF | Bin {trunk => source}/Icons/UNDO.GIF | Bin {trunk => source}/Images/Class.gif | Bin {trunk => source}/Images/Close-Active.gif | Bin {trunk => source}/Images/Close-Disabled.gif | Bin {trunk => source}/Images/Close-Inactive.gif | Bin {trunk => source}/Images/Constants.gif | Bin {trunk => source}/Images/Enum.gif | Bin {trunk => source}/Images/Events.gif | Bin {trunk => source}/Images/Functions.gif | Bin {trunk => source}/Images/Namespace.gif | Bin {trunk => source}/Images/Properties.gif | Bin {trunk => source}/Images/SealedClass.gif | Bin {trunk => source}/Images/States.gif | Bin {trunk => source}/Images/Unknown.gif | Bin {trunk => source}/Images/Vars.gif | Bin {trunk => source}/Images/logo.gif | Bin .../ImagesSolutionExplorer/Animation.gif | Bin .../ImagesSolutionExplorer/Animations.gif | Bin .../ImagesSolutionExplorer/Body Parts.gif | Bin .../ImagesSolutionExplorer/Calling Cards.gif | Bin .../ImagesSolutionExplorer/Clothes.gif | Bin .../ImagesSolutionExplorer/Eyes.gif | Bin .../ImagesSolutionExplorer/Folder.gif | Bin .../ImagesSolutionExplorer/Gesture.gif | Bin .../ImagesSolutionExplorer/Gestures.gif | Bin .../ImagesSolutionExplorer/Gloves.gif | Bin .../ImagesSolutionExplorer/Hair.gif | Bin .../ImagesSolutionExplorer/Inventory.gif | Bin .../ImagesSolutionExplorer/Jacket.gif | Bin .../ImagesSolutionExplorer/LSLIScript.gif | Bin .../ImagesSolutionExplorer/Landmark.gif | Bin .../ImagesSolutionExplorer/Landmarks.gif | Bin .../ImagesSolutionExplorer/Lost And Found.gif | Bin .../ImagesSolutionExplorer/Notecard.gif | Bin .../ImagesSolutionExplorer/Notecards.gif | Bin .../ImagesSolutionExplorer/Object.gif | Bin .../ImagesSolutionExplorer/Objects.gif | Bin .../ImagesSolutionExplorer/Pants.gif | Bin .../ImagesSolutionExplorer/Photo Album.gif | Bin .../ImagesSolutionExplorer/Prim.gif | Bin .../ImagesSolutionExplorer/Project.gif | Bin .../ImagesSolutionExplorer/Script.gif | Bin .../ImagesSolutionExplorer/Scripts.gif | Bin .../ImagesSolutionExplorer/Shape.gif | Bin .../ImagesSolutionExplorer/Shirt.gif | Bin .../ImagesSolutionExplorer/Shoes.gif | Bin .../ImagesSolutionExplorer/Skin.gif | Bin .../ImagesSolutionExplorer/Skirt.gif | Bin .../ImagesSolutionExplorer/Snapshot.gif | Bin .../ImagesSolutionExplorer/Socks.gif | Bin .../ImagesSolutionExplorer/Solution.gif | Bin .../ImagesSolutionExplorer/Sound.gif | Bin .../ImagesSolutionExplorer/Sounds.gif | Bin .../ImagesSolutionExplorer/Texture.gif | Bin .../ImagesSolutionExplorer/Textures.gif | Bin .../ImagesSolutionExplorer/Trash.gif | Bin .../ImagesSolutionExplorer/Underpants.gif | Bin .../ImagesSolutionExplorer/Undershirt.gif | Bin .../ImagesSolutionExplorer/Unknown.gif | Bin .../ImagesSolutionExplorer/question.gif | Bin {trunk => source}/LSLEditor.rc | 10 +- {trunk => source}/LSLEditor.res | Bin {trunk => source}/LSLEditorForm.Designer.cs | 2346 +-- {trunk => source}/LSLEditorForm.cs | 4292 ++--- {trunk => source}/LSLEditorForm.resx | 712 +- {trunk => source}/MakeZipFile.cmd | 26 +- {trunk => source}/PermissionsForm.Designer.cs | 270 +- {trunk => source}/PermissionsForm.cs | 230 +- {trunk => source}/PermissionsForm.resx | 238 +- {trunk => source}/Plugins/Generic.cs | 212 +- {trunk => source}/Plugins/LSLint.cs | 370 +- {trunk => source}/Plugins/Particles.cs | 142 +- {trunk => source}/Plugins/Svn.cs | 288 +- {trunk => source}/Properties/AssemblyInfo.cs | 206 +- .../Properties/Resources.Designer.cs | 566 +- {trunk => source}/Properties/Resources.resx | 374 +- .../Properties/Settings.Designer.cs | 2592 +-- .../Properties/Settings.settings | 682 +- {trunk => source}/Resource/About.htm | 404 +- {trunk => source}/Resource/App.ico | Bin {trunk => source}/Resource/ConfCSharp.xml | 202 +- {trunk => source}/Resource/ConfLSL.xml | 13198 ++++++++-------- {trunk => source}/Resource/ReleaseNotes.htm | 3964 ++--- {trunk => source}/Resource/ToolsOptions.xml | 60 +- {trunk => source}/Resource/app.config | 286 +- {trunk => source}/Resource/thanks.gif | Bin .../Resources/export_file-32.png | Bin {trunk => source}/RuntimeConsole.Designer.cs | 456 +- {trunk => source}/RuntimeConsole.cs | 842 +- {trunk => source}/RuntimeConsole.resx | 244 +- {trunk => source}/SecondLife/Float.cs | 826 +- {trunk => source}/SecondLife/LSL_Constants.cs | 1530 +- {trunk => source}/SecondLife/LSL_Events.cs | 256 +- {trunk => source}/SecondLife/LSL_Functions.cs | 6804 ++++---- .../SecondLife/OSSL_Functions.cs | 0 .../SecondLife/SecondLifeHost.cs | 3084 ++-- .../SecondLife/SecondLifeMain.cs | 1426 +- {trunk => source}/SecondLife/String.cs | 256 +- {trunk => source}/SecondLife/integer.cs | 570 +- {trunk => source}/SecondLife/key.cs | 304 +- {trunk => source}/SecondLife/list.cs | 654 +- {trunk => source}/SecondLife/rotation.cs | 548 +- {trunk => source}/SecondLife/vector.cs | 566 +- .../SimulatorConsole.Designer.cs | 372 +- {trunk => source}/SimulatorConsole.cs | 816 +- {trunk => source}/SimulatorConsole.resx | 244 +- .../Solution/GuidProperty.Designer.cs | 228 +- {trunk => source}/Solution/GuidProperty.cs | 168 +- {trunk => source}/Solution/GuidProperty.resx | 238 +- .../Solution/NewProject.Designer.cs | 408 +- {trunk => source}/Solution/NewProject.cs | 306 +- {trunk => source}/Solution/NewProject.resx | 244 +- .../Solution/SolutionExplorer.cs | 5080 +++--- .../Solution/SolutionExplorer.designer.cs | 244 +- .../Solution/SolutionExplorer.resx | 646 +- .../Solution/SvnAguments.Designer.cs | 276 +- {trunk => source}/Solution/SvnAguments.cs | 204 +- {trunk => source}/Solution/SvnAguments.resx | 238 +- {trunk => source}/SyntaxError.Designer.cs | 352 +- {trunk => source}/SyntaxError.cs | 360 +- {trunk => source}/SyntaxError.resx | 348 +- {trunk => source}/ToolWindow.Designer.cs | 100 +- {trunk => source}/ToolWindow.cs | 116 +- {trunk => source}/ToolWindow.resx | 238 +- .../Tools/EnvironmentBrowser.Designer.cs | 148 +- {trunk => source}/Tools/EnvironmentBrowser.cs | 122 +- .../Tools/EnvironmentBrowser.resx | 238 +- .../Tools/EnvironmentGeneral.Designer.cs | 462 +- {trunk => source}/Tools/EnvironmentGeneral.cs | 198 +- .../Tools/EnvironmentGeneral.resx | 238 +- .../Tools/EnvironmentHelp.Designer.cs | 448 +- {trunk => source}/Tools/EnvironmentHelp.cs | 262 +- {trunk => source}/Tools/EnvironmentHelp.resx | 238 +- .../Tools/EnvironmentPlugins.Designer.cs | 148 +- {trunk => source}/Tools/EnvironmentPlugins.cs | 254 +- .../Tools/EnvironmentPlugins.resx | 238 +- .../Tools/IncludeExportSettings.Designer.cs | 0 .../Tools/IncludeExportSettings.cs | 0 .../Tools/IncludeExportSettings.resx | 0 .../Tools/ProjectIncludes.Designer.cs | 0 {trunk => source}/Tools/ProjectIncludes.cs | 0 {trunk => source}/Tools/ProjectIncludes.resx | 0 .../Tools/ProjectSettings.Designer.cs | 252 +- {trunk => source}/Tools/ProjectSettings.cs | 178 +- {trunk => source}/Tools/ProjectSettings.resx | 244 +- .../Tools/RuntimeExternal.Designer.cs | 258 +- {trunk => source}/Tools/RuntimeExternal.cs | 134 +- {trunk => source}/Tools/RuntimeExternal.resx | 238 +- .../Tools/RuntimeGeneral.Designer.cs | 364 +- {trunk => source}/Tools/RuntimeGeneral.cs | 146 +- {trunk => source}/Tools/RuntimeGeneral.resx | 238 +- .../Tools/RuntimeInternal.Designer.cs | 626 +- {trunk => source}/Tools/RuntimeInternal.cs | 342 +- {trunk => source}/Tools/RuntimeInternal.resx | 238 +- .../Tools/RuntimeSmtp.Designer.cs | 548 +- {trunk => source}/Tools/RuntimeSmtp.cs | 218 +- {trunk => source}/Tools/RuntimeSmtp.resx | 238 +- .../TextEditorCodeCompletion.Designer.cs | 226 +- .../Tools/TextEditorCodeCompletion.cs | 134 +- .../Tools/TextEditorCodeCompletion.resx | 238 +- .../Tools/TextEditorFontColors.Designer.cs | 330 +- .../Tools/TextEditorFontColors.cs | 242 +- .../Tools/TextEditorFontColors.resx | 244 +- .../Tools/TextEditorGeneral.Designer.cs | 596 +- {trunk => source}/Tools/TextEditorGeneral.cs | 266 +- .../Tools/TextEditorGeneral.resx | 238 +- .../Tools/ToolsOptions.Designer.cs | 304 +- {trunk => source}/Tools/ToolsOptions.cs | 314 +- {trunk => source}/Tools/ToolsOptions.resx | 238 +- .../Tools/VersionControlGeneral.Designer.cs | 320 +- .../Tools/VersionControlGeneral.cs | 178 +- .../Tools/VersionControlGeneral.resx | 244 +- .../UpdateApplicationForm.Designer.cs | 344 +- {trunk => source}/UpdateApplicationForm.cs | 976 +- {trunk => source}/UpdateApplicationForm.resx | 238 +- .../org.lsleditor.www/Reference.cs | 666 +- .../org.lsleditor.www/Reference.map | 12 +- .../org.lsleditor.www/Service1.disco | 10 +- .../org.lsleditor.www/Service1.wsdl | 378 +- {trunk => source}/_MakeRelease.cmd | 24 +- {trunk => source}/app.config | 644 +- {trunk => source}/gpl-2.0.txt | 678 +- {trunk => source}/llDialogForm.Designer.cs | 574 +- {trunk => source}/llDialogForm.cs | 198 +- {trunk => source}/llDialogForm.resx | 238 +- {trunk => source}/llTextBoxForm.Designer.cs | 230 +- {trunk => source}/llTextBoxForm.cs | 178 +- {trunk => source}/llTextBoxForm.resx | 238 +- {trunk => source}/lsleditor.csproj | 2304 +-- {trunk => source}/lsleditor.sln | 60 +- {trunk => source}/packages.config | 0 {trunk => source}/sharedheader.txt | 86 +- trunk/Docking/Win32/Enums.cs | 369 - trunk/Docking/Win32/NativeMethods.cs | 64 - trunk/StyleCop.Cache | 717 - trunk/lsleditor.5.0.ReSharper.user | 37 - trunk/lsleditor.suo | Bin 48640 -> 0 bytes trunk/lsleditor_TemporaryKey.pfx | Bin 1660 -> 0 bytes .../Newtonsoft.Json.10.0.3/LICENSE.md | 20 - .../Newtonsoft.Json.10.0.3.nupkg | Bin 2066867 -> 0 bytes .../lib/net20/Newtonsoft.Json.dll | Bin 498688 -> 0 bytes .../lib/net20/Newtonsoft.Json.xml | 9815 ------------ .../lib/net35/Newtonsoft.Json.dll | Bin 460800 -> 0 bytes .../lib/net35/Newtonsoft.Json.xml | 8944 ----------- .../lib/net40/Newtonsoft.Json.dll | Bin 525824 -> 0 bytes .../lib/net40/Newtonsoft.Json.xml | 9144 ----------- .../lib/net45/Newtonsoft.Json.dll | Bin 653824 -> 0 bytes .../lib/net45/Newtonsoft.Json.xml | 10760 ------------- .../lib/netstandard1.0/Newtonsoft.Json.dll | Bin 624128 -> 0 bytes .../lib/netstandard1.0/Newtonsoft.Json.xml | 10467 ------------ .../lib/netstandard1.3/Newtonsoft.Json.dll | Bin 639488 -> 0 bytes .../lib/netstandard1.3/Newtonsoft.Json.xml | 10559 ------------- .../Newtonsoft.Json.dll | Bin 433664 -> 0 bytes .../Newtonsoft.Json.xml | 8555 ---------- .../Newtonsoft.Json.dll | Bin 623616 -> 0 bytes .../Newtonsoft.Json.xml | 10467 ------------ .../Newtonsoft.Json.10.0.3/tools/install.ps1 | 116 - 412 files changed, 72437 insertions(+), 155552 deletions(-) delete mode 100644 Settings.StyleCop delete mode 100644 _ReSharper.lsleditor/BuildScriptCache/.crc delete mode 100644 _ReSharper.lsleditor/BuildScriptCache/.version delete mode 100644 _ReSharper.lsleditor/BuildScriptCache/5/4680b305.dat delete mode 100644 _ReSharper.lsleditor/ModuleIds.xml delete mode 100644 _ReSharper.lsleditor/NamedArguments/.crc delete mode 100644 _ReSharper.lsleditor/NamedArguments/.version delete mode 100644 _ReSharper.lsleditor/NamedArguments/5/4680b305.dat delete mode 100644 _ReSharper.lsleditor/ProjectModel/ProjectModel.dat delete mode 100644 _ReSharper.lsleditor/Resources/.crc delete mode 100644 _ReSharper.lsleditor/Resources/.version delete mode 100644 _ReSharper.lsleditor/Resources/5/626cc1d.dat delete mode 100644 _ReSharper.lsleditor/SymbolCache.bin delete mode 100644 _ReSharper.lsleditor/TagPrefixes/.crc delete mode 100644 _ReSharper.lsleditor/TagPrefixes/.version delete mode 100644 _ReSharper.lsleditor/TodoCache/.crc delete mode 100644 _ReSharper.lsleditor/TodoCache/.version delete mode 100644 _ReSharper.lsleditor/TodoCache/3/79ddd176.dat delete mode 100644 _ReSharper.lsleditor/WebsiteFileReferences/.crc delete mode 100644 _ReSharper.lsleditor/WebsiteFileReferences/.version delete mode 100644 _ReSharper.lsleditor/WordIndex/.crc delete mode 100644 _ReSharper.lsleditor/WordIndex/.version delete mode 100644 _ReSharper.lsleditor/WordIndex/2/7003905d.dat delete mode 100644 _ReSharper.lsleditor/WordIndex/5/4680b305.dat delete mode 100644 _ReSharper.lsleditor/WordIndex/6/bf11a17.dat delete mode 100644 build/AssemblyRevisionIncrementer.exe delete mode 100644 lsl-editor-doc.xml rename {trunk => source}/About.Designer.cs (96%) rename {trunk => source}/About.cs (97%) rename {trunk => source}/About.resx (97%) rename {trunk => source}/App.ico (100%) rename {trunk => source}/BZip2Decompress/BZip2.cs (97%) rename {trunk => source}/BZip2Decompress/BZip2Constants.cs (97%) rename {trunk => source}/BZip2Decompress/BZip2InputStream.cs (95%) rename {trunk => source}/BZip2Decompress/IChecksum.cs (97%) rename {trunk => source}/BZip2Decompress/StrangeCrc.cs (97%) rename {trunk => source}/Browser.Designer.cs (97%) rename {trunk => source}/Browser.cs (97%) rename {trunk => source}/Browser.resx (97%) rename {trunk => source}/BugReport/BugReportForm.Designer.cs (97%) rename {trunk => source}/BugReport/BugReportForm.cs (96%) rename {trunk => source}/BugReport/BugReportForm.resx (97%) rename {trunk => source}/BugReport/UploadBugReport.cs (96%) rename {trunk => source}/Decompressor/Decompress.cs (97%) rename {trunk => source}/Decompressor/ZipEntry.cs (96%) rename {trunk => source}/Docking/AutoHideStripBase.cs (96%) rename {trunk => source}/Docking/DockAreasEditor.cs (96%) rename {trunk => source}/Docking/DockContent.cs (96%) rename {trunk => source}/Docking/DockContentCollection.cs (96%) rename {trunk => source}/Docking/DockContentEventArgs.cs (93%) rename {trunk => source}/Docking/DockContentHandler.cs (96%) rename {trunk => source}/Docking/DockOutlineBase.cs (96%) rename {trunk => source}/Docking/DockPane.SplitterControl.cs (97%) rename {trunk => source}/Docking/DockPane.cs (96%) rename {trunk => source}/Docking/DockPaneCaptionBase.cs (96%) rename {trunk => source}/Docking/DockPaneCollection.cs (94%) rename {trunk => source}/Docking/DockPaneStripBase.cs (96%) rename {trunk => source}/Docking/DockPanel.AutoHideWindow.cs (97%) rename {trunk => source}/Docking/DockPanel.DockDragHandler.cs (97%) rename {trunk => source}/Docking/DockPanel.DragHandler.cs (96%) rename {trunk => source}/Docking/DockPanel.FocusManager.cs (97%) rename {trunk => source}/Docking/DockPanel.MdiClientController.cs (97%) rename {trunk => source}/Docking/DockPanel.Persistor.cs (98%) rename {trunk => source}/Docking/DockPanel.SplitterDragHandler.cs (96%) rename {trunk => source}/Docking/DockPanel.bmp (100%) rename {trunk => source}/Docking/DockPanel.cs (96%) rename {trunk => source}/Docking/DockPanelExtender.cs (96%) rename {trunk => source}/Docking/DockPanelSkin.cs (97%) rename {trunk => source}/Docking/DockWindow.SplitterControl.cs (96%) rename {trunk => source}/Docking/DockWindow.cs (96%) rename {trunk => source}/Docking/DockWindowCollection.cs (97%) rename {trunk => source}/Docking/DragForm.cs (97%) rename {trunk => source}/Docking/DummyControl.cs (93%) rename {trunk => source}/Docking/Enums.cs (93%) rename {trunk => source}/Docking/FloatWindow.cs (96%) rename {trunk => source}/Docking/FloatWindowCollection.cs (94%) rename {trunk => source}/Docking/Helpers/DockHelper.cs (96%) rename {trunk => source}/Docking/Helpers/DrawHelper.cs (97%) rename {trunk => source}/Docking/Helpers/ResourceHelper.cs (95%) rename {trunk => source}/Docking/Helpers/Win32Helper.cs (95%) rename {trunk => source}/Docking/InertButtonBase.cs (96%) rename {trunk => source}/Docking/Interfaces.cs (96%) rename {trunk => source}/Docking/Localization.cs (95%) rename {trunk => source}/Docking/Measures.cs (93%) rename {trunk => source}/Docking/NestedDockingStatus.cs (95%) rename {trunk => source}/Docking/NestedPaneCollection.cs (96%) rename {trunk => source}/Docking/Resources.Designer.cs (97%) rename {trunk => source}/Docking/Resources.resx (98%) rename {trunk => source}/Docking/Resources/DockIndicator_PaneDiamond.bmp (100%) rename {trunk => source}/Docking/Resources/DockIndicator_PaneDiamond_Bottom.bmp (100%) rename {trunk => source}/Docking/Resources/DockIndicator_PaneDiamond_Hotspot.bmp (100%) rename {trunk => source}/Docking/Resources/DockIndicator_PaneDiamond_HotspotIndex.bmp (100%) rename {trunk => source}/Docking/Resources/DockIndicator_PaneDiamond_Left.bmp (100%) rename {trunk => source}/Docking/Resources/DockIndicator_PaneDiamond_Right.bmp (100%) rename {trunk => source}/Docking/Resources/DockIndicator_PaneDiamond_Top.bmp (100%) rename {trunk => source}/Docking/Resources/DockIndicator_PanelBottom.bmp (100%) rename {trunk => source}/Docking/Resources/DockIndicator_PanelBottom_Active.bmp (100%) rename {trunk => source}/Docking/Resources/DockIndicator_PanelFill.bmp (100%) rename {trunk => source}/Docking/Resources/DockIndicator_PanelFill_Active.bmp (100%) rename {trunk => source}/Docking/Resources/DockIndicator_PanelLeft.bmp (100%) rename {trunk => source}/Docking/Resources/DockIndicator_PanelLeft_Active.bmp (100%) rename {trunk => source}/Docking/Resources/DockIndicator_PanelRight.bmp (100%) rename {trunk => source}/Docking/Resources/DockIndicator_PanelRight_Active.bmp (100%) rename {trunk => source}/Docking/Resources/DockIndicator_PanelTop.bmp (100%) rename {trunk => source}/Docking/Resources/DockIndicator_PanelTop_Active.bmp (100%) rename {trunk => source}/Docking/Resources/DockPane_AutoHide.bmp (100%) rename {trunk => source}/Docking/Resources/DockPane_Close.bmp (100%) rename {trunk => source}/Docking/Resources/DockPane_Dock.bmp (100%) rename {trunk => source}/Docking/Resources/DockPane_Option.bmp (100%) rename {trunk => source}/Docking/Resources/DockPane_OptionOverflow.bmp (100%) rename {trunk => source}/Docking/Resources/Dockindicator_PaneDiamond_Fill.bmp (100%) rename {trunk => source}/Docking/SplitterBase.cs (95%) rename {trunk => source}/Docking/Strings.Designer.cs (97%) rename {trunk => source}/Docking/Strings.resx (98%) rename {trunk => source}/Docking/VS2005AutoHideStrip.cs (96%) rename {trunk => source}/Docking/VS2005DockPaneCaption.cs (96%) rename {trunk => source}/Docking/VS2005DockPaneStrip.cs (97%) rename {trunk => source}/Docking/VisibleNestedPaneCollection.cs (97%) rename {trunk => source}/EditForm.Designer.cs (97%) rename {trunk => source}/EditForm.cs (96%) rename {trunk => source}/EditForm.resx (97%) rename {trunk => source}/Editor/GListBox.Designer.cs (95%) rename {trunk => source}/Editor/GListBox.cs (96%) rename {trunk => source}/Editor/GListBoxWindow.Designer.cs (96%) rename {trunk => source}/Editor/GListBoxWindow.cs (96%) rename {trunk => source}/Editor/GListBoxWindow.resx (97%) rename {trunk => source}/Editor/KeyWords.cs (96%) rename {trunk => source}/Editor/MsXsltContext.cs (98%) rename {trunk => source}/Editor/Numbered.Designer.cs (96%) rename {trunk => source}/Editor/Numbered.cs (97%) rename {trunk => source}/Editor/NumberedTextBoxUC.cs (97%) rename {trunk => source}/Editor/NumberedTextBoxUC.designer.cs (97%) rename {trunk => source}/Editor/NumberedTextBoxUC.resx (97%) rename {trunk => source}/Editor/RichLabel.Designer.cs (95%) rename {trunk => source}/Editor/RichLabel.cs (96%) rename {trunk => source}/Editor/RichLabel.resx (97%) rename {trunk => source}/Editor/RoundCorners.cs (97%) rename {trunk => source}/Editor/SyntaxRichTextBox.cs (96%) rename {trunk => source}/Editor/SyntaxRichTextBox.resx (97%) rename {trunk => source}/Editor/TooltipWindow.cs (96%) rename {trunk => source}/Editor/TooltipWindow.designer.cs (96%) rename {trunk => source}/Editor/TooltipWindow.resx (97%) rename {trunk => source}/FindWindow.Designer.cs (97%) rename {trunk => source}/FindWindow.cs (96%) rename {trunk => source}/FindWindow.resx (97%) rename {trunk => source}/Form1.cs (97%) rename {trunk => source}/Form1.resx (98%) rename {trunk => source}/GotoWindow.Designer.cs (96%) rename {trunk => source}/GotoWindow.cs (97%) rename {trunk => source}/GotoWindow.resx (97%) rename {trunk => source}/Helpers/AutoFormatter.cs (96%) rename {trunk => source}/Helpers/CodeCompletion.cs (97%) rename {trunk => source}/Helpers/CompilerHelper.cs (97%) rename {trunk => source}/Helpers/FileAssociator.cs (97%) rename {trunk => source}/Helpers/GetTemplate.cs (97%) rename {trunk => source}/Helpers/GroupboxEvent.cs (96%) rename {trunk => source}/Helpers/GroupboxEvent.resx (97%) rename {trunk => source}/Helpers/HTTPRequest.cs (97%) rename {trunk => source}/Helpers/LSL2CSharp.cs (95%) rename {trunk => source}/Helpers/LSLIConverter.cs (100%) rename {trunk => source}/Helpers/LSLIPathHelper.cs (100%) rename {trunk => source}/Helpers/Measure.cs (97%) rename {trunk => source}/Helpers/OopsFormatter.cs (97%) rename {trunk => source}/Helpers/OutlineHelper.cs (97%) rename {trunk => source}/Helpers/PrinterHelper.cs (96%) rename {trunk => source}/Helpers/SendMyKeys.cs (96%) rename {trunk => source}/Helpers/Settings.cs (97%) rename {trunk => source}/Helpers/SmtpClient.cs (96%) rename {trunk => source}/Helpers/TabControlExtended.Designer.cs (96%) rename {trunk => source}/Helpers/TabControlExtended.cs (96%) rename {trunk => source}/Helpers/TaskQueue.cs (97%) rename {trunk => source}/Helpers/TextFileEncodingDetector.cs (100%) rename {trunk => source}/Helpers/WebRequestClass.cs (97%) rename {trunk => source}/Helpers/XMLRPC.cs (96%) rename {trunk => source}/Icons/ADDITEM.GIF (100%) rename {trunk => source}/Icons/COPY.GIF (100%) rename {trunk => source}/Icons/CUT.GIF (100%) rename {trunk => source}/Icons/DEINDENT.GIF (100%) rename {trunk => source}/Icons/DELETE.GIF (100%) rename {trunk => source}/Icons/END.GIF (100%) rename {trunk => source}/Icons/FIND.GIF (100%) rename {trunk => source}/Icons/ININDENT.GIF (100%) rename {trunk => source}/Icons/NEWDOC.GIF (100%) rename {trunk => source}/Icons/NEWPROJ.GIF (100%) rename {trunk => source}/Icons/OPEN.GIF (100%) rename {trunk => source}/Icons/PASTE.GIF (100%) rename {trunk => source}/Icons/PRINT.GIF (100%) rename {trunk => source}/Icons/PROJECT.GIF (100%) rename {trunk => source}/Icons/PROPS.GIF (100%) rename {trunk => source}/Icons/REDO.GIF (100%) rename {trunk => source}/Icons/SAVE.GIF (100%) rename {trunk => source}/Icons/SAVEALL.GIF (100%) rename {trunk => source}/Icons/SAVEAS.GIF (100%) rename {trunk => source}/Icons/START.GIF (100%) rename {trunk => source}/Icons/UNDO.GIF (100%) rename {trunk => source}/Images/Class.gif (100%) rename {trunk => source}/Images/Close-Active.gif (100%) rename {trunk => source}/Images/Close-Disabled.gif (100%) rename {trunk => source}/Images/Close-Inactive.gif (100%) rename {trunk => source}/Images/Constants.gif (100%) rename {trunk => source}/Images/Enum.gif (100%) rename {trunk => source}/Images/Events.gif (100%) rename {trunk => source}/Images/Functions.gif (100%) rename {trunk => source}/Images/Namespace.gif (100%) rename {trunk => source}/Images/Properties.gif (100%) rename {trunk => source}/Images/SealedClass.gif (100%) rename {trunk => source}/Images/States.gif (100%) rename {trunk => source}/Images/Unknown.gif (100%) rename {trunk => source}/Images/Vars.gif (100%) rename {trunk => source}/Images/logo.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Animation.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Animations.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Body Parts.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Calling Cards.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Clothes.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Eyes.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Folder.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Gesture.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Gestures.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Gloves.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Hair.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Inventory.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Jacket.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/LSLIScript.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Landmark.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Landmarks.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Lost And Found.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Notecard.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Notecards.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Object.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Objects.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Pants.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Photo Album.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Prim.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Project.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Script.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Scripts.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Shape.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Shirt.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Shoes.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Skin.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Skirt.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Snapshot.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Socks.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Solution.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Sound.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Sounds.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Texture.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Textures.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Trash.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Underpants.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Undershirt.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/Unknown.gif (100%) rename {trunk => source}/ImagesSolutionExplorer/question.gif (100%) rename {trunk => source}/LSLEditor.rc (97%) rename {trunk => source}/LSLEditor.res (100%) rename {trunk => source}/LSLEditorForm.Designer.cs (98%) rename {trunk => source}/LSLEditorForm.cs (97%) rename {trunk => source}/LSLEditorForm.resx (98%) rename {trunk => source}/MakeZipFile.cmd (97%) rename {trunk => source}/PermissionsForm.Designer.cs (97%) rename {trunk => source}/PermissionsForm.cs (97%) rename {trunk => source}/PermissionsForm.resx (97%) rename {trunk => source}/Plugins/Generic.cs (97%) rename {trunk => source}/Plugins/LSLint.cs (97%) rename {trunk => source}/Plugins/Particles.cs (97%) rename {trunk => source}/Plugins/Svn.cs (96%) rename {trunk => source}/Properties/AssemblyInfo.cs (97%) rename {trunk => source}/Properties/Resources.Designer.cs (97%) rename {trunk => source}/Properties/Resources.resx (98%) rename {trunk => source}/Properties/Settings.Designer.cs (97%) rename {trunk => source}/Properties/Settings.settings (97%) rename {trunk => source}/Resource/About.htm (95%) rename {trunk => source}/Resource/App.ico (100%) rename {trunk => source}/Resource/ConfCSharp.xml (96%) rename {trunk => source}/Resource/ConfLSL.xml (97%) rename {trunk => source}/Resource/ReleaseNotes.htm (97%) rename {trunk => source}/Resource/ToolsOptions.xml (97%) rename {trunk => source}/Resource/app.config (97%) rename {trunk => source}/Resource/thanks.gif (100%) rename {trunk => source}/Resources/export_file-32.png (100%) rename {trunk => source}/RuntimeConsole.Designer.cs (97%) rename {trunk => source}/RuntimeConsole.cs (96%) rename {trunk => source}/RuntimeConsole.resx (97%) rename {trunk => source}/SecondLife/Float.cs (96%) rename {trunk => source}/SecondLife/LSL_Constants.cs (97%) rename {trunk => source}/SecondLife/LSL_Events.cs (97%) rename {trunk => source}/SecondLife/LSL_Functions.cs (96%) rename {trunk => source}/SecondLife/OSSL_Functions.cs (100%) rename {trunk => source}/SecondLife/SecondLifeHost.cs (96%) rename {trunk => source}/SecondLife/SecondLifeMain.cs (96%) rename {trunk => source}/SecondLife/String.cs (96%) rename {trunk => source}/SecondLife/integer.cs (96%) rename {trunk => source}/SecondLife/key.cs (96%) rename {trunk => source}/SecondLife/list.cs (96%) rename {trunk => source}/SecondLife/rotation.cs (96%) rename {trunk => source}/SecondLife/vector.cs (96%) rename {trunk => source}/SimulatorConsole.Designer.cs (97%) rename {trunk => source}/SimulatorConsole.cs (96%) rename {trunk => source}/SimulatorConsole.resx (97%) rename {trunk => source}/Solution/GuidProperty.Designer.cs (96%) rename {trunk => source}/Solution/GuidProperty.cs (97%) rename {trunk => source}/Solution/GuidProperty.resx (97%) rename {trunk => source}/Solution/NewProject.Designer.cs (97%) rename {trunk => source}/Solution/NewProject.cs (97%) rename {trunk => source}/Solution/NewProject.resx (97%) rename {trunk => source}/Solution/SolutionExplorer.cs (96%) rename {trunk => source}/Solution/SolutionExplorer.designer.cs (97%) rename {trunk => source}/Solution/SolutionExplorer.resx (98%) rename {trunk => source}/Solution/SvnAguments.Designer.cs (97%) rename {trunk => source}/Solution/SvnAguments.cs (96%) rename {trunk => source}/Solution/SvnAguments.resx (97%) rename {trunk => source}/SyntaxError.Designer.cs (97%) rename {trunk => source}/SyntaxError.cs (96%) rename {trunk => source}/SyntaxError.resx (98%) rename {trunk => source}/ToolWindow.Designer.cs (97%) rename {trunk => source}/ToolWindow.cs (97%) rename {trunk => source}/ToolWindow.resx (97%) rename {trunk => source}/Tools/EnvironmentBrowser.Designer.cs (96%) rename {trunk => source}/Tools/EnvironmentBrowser.cs (97%) rename {trunk => source}/Tools/EnvironmentBrowser.resx (97%) rename {trunk => source}/Tools/EnvironmentGeneral.Designer.cs (97%) rename {trunk => source}/Tools/EnvironmentGeneral.cs (97%) rename {trunk => source}/Tools/EnvironmentGeneral.resx (97%) rename {trunk => source}/Tools/EnvironmentHelp.Designer.cs (97%) rename {trunk => source}/Tools/EnvironmentHelp.cs (97%) rename {trunk => source}/Tools/EnvironmentHelp.resx (97%) rename {trunk => source}/Tools/EnvironmentPlugins.Designer.cs (96%) rename {trunk => source}/Tools/EnvironmentPlugins.cs (97%) rename {trunk => source}/Tools/EnvironmentPlugins.resx (97%) rename {trunk => source}/Tools/IncludeExportSettings.Designer.cs (100%) rename {trunk => source}/Tools/IncludeExportSettings.cs (100%) rename {trunk => source}/Tools/IncludeExportSettings.resx (100%) rename {trunk => source}/Tools/ProjectIncludes.Designer.cs (100%) rename {trunk => source}/Tools/ProjectIncludes.cs (100%) rename {trunk => source}/Tools/ProjectIncludes.resx (100%) rename {trunk => source}/Tools/ProjectSettings.Designer.cs (97%) rename {trunk => source}/Tools/ProjectSettings.cs (97%) rename {trunk => source}/Tools/ProjectSettings.resx (97%) rename {trunk => source}/Tools/RuntimeExternal.Designer.cs (96%) rename {trunk => source}/Tools/RuntimeExternal.cs (97%) rename {trunk => source}/Tools/RuntimeExternal.resx (97%) rename {trunk => source}/Tools/RuntimeGeneral.Designer.cs (97%) rename {trunk => source}/Tools/RuntimeGeneral.cs (97%) rename {trunk => source}/Tools/RuntimeGeneral.resx (97%) rename {trunk => source}/Tools/RuntimeInternal.Designer.cs (97%) rename {trunk => source}/Tools/RuntimeInternal.cs (97%) rename {trunk => source}/Tools/RuntimeInternal.resx (97%) rename {trunk => source}/Tools/RuntimeSmtp.Designer.cs (97%) rename {trunk => source}/Tools/RuntimeSmtp.cs (97%) rename {trunk => source}/Tools/RuntimeSmtp.resx (97%) rename {trunk => source}/Tools/TextEditorCodeCompletion.Designer.cs (97%) rename {trunk => source}/Tools/TextEditorCodeCompletion.cs (97%) rename {trunk => source}/Tools/TextEditorCodeCompletion.resx (97%) rename {trunk => source}/Tools/TextEditorFontColors.Designer.cs (97%) rename {trunk => source}/Tools/TextEditorFontColors.cs (97%) rename {trunk => source}/Tools/TextEditorFontColors.resx (97%) rename {trunk => source}/Tools/TextEditorGeneral.Designer.cs (97%) rename {trunk => source}/Tools/TextEditorGeneral.cs (97%) rename {trunk => source}/Tools/TextEditorGeneral.resx (97%) rename {trunk => source}/Tools/ToolsOptions.Designer.cs (97%) rename {trunk => source}/Tools/ToolsOptions.cs (97%) rename {trunk => source}/Tools/ToolsOptions.resx (97%) rename {trunk => source}/Tools/VersionControlGeneral.Designer.cs (97%) rename {trunk => source}/Tools/VersionControlGeneral.cs (97%) rename {trunk => source}/Tools/VersionControlGeneral.resx (97%) rename {trunk => source}/UpdateApplicationForm.Designer.cs (97%) rename {trunk => source}/UpdateApplicationForm.cs (96%) rename {trunk => source}/UpdateApplicationForm.resx (97%) rename {trunk => source}/Web References/org.lsleditor.www/Reference.cs (97%) rename {trunk => source}/Web References/org.lsleditor.www/Reference.map (99%) rename {trunk => source}/Web References/org.lsleditor.www/Service1.disco (99%) rename {trunk => source}/Web References/org.lsleditor.www/Service1.wsdl (97%) rename {trunk => source}/_MakeRelease.cmd (97%) rename {trunk => source}/app.config (97%) rename {trunk => source}/gpl-2.0.txt (98%) rename {trunk => source}/llDialogForm.Designer.cs (97%) rename {trunk => source}/llDialogForm.cs (97%) rename {trunk => source}/llDialogForm.resx (97%) rename {trunk => source}/llTextBoxForm.Designer.cs (97%) rename {trunk => source}/llTextBoxForm.cs (97%) rename {trunk => source}/llTextBoxForm.resx (97%) rename {trunk => source}/lsleditor.csproj (97%) rename {trunk => source}/lsleditor.sln (98%) rename {trunk => source}/packages.config (100%) rename {trunk => source}/sharedheader.txt (97%) delete mode 100644 trunk/Docking/Win32/Enums.cs delete mode 100644 trunk/Docking/Win32/NativeMethods.cs delete mode 100644 trunk/StyleCop.Cache delete mode 100644 trunk/lsleditor.5.0.ReSharper.user delete mode 100644 trunk/lsleditor.suo delete mode 100644 trunk/lsleditor_TemporaryKey.pfx delete mode 100644 trunk/packages/Newtonsoft.Json.10.0.3/LICENSE.md delete mode 100644 trunk/packages/Newtonsoft.Json.10.0.3/Newtonsoft.Json.10.0.3.nupkg delete mode 100644 trunk/packages/Newtonsoft.Json.10.0.3/lib/net20/Newtonsoft.Json.dll delete mode 100644 trunk/packages/Newtonsoft.Json.10.0.3/lib/net20/Newtonsoft.Json.xml delete mode 100644 trunk/packages/Newtonsoft.Json.10.0.3/lib/net35/Newtonsoft.Json.dll delete mode 100644 trunk/packages/Newtonsoft.Json.10.0.3/lib/net35/Newtonsoft.Json.xml delete mode 100644 trunk/packages/Newtonsoft.Json.10.0.3/lib/net40/Newtonsoft.Json.dll delete mode 100644 trunk/packages/Newtonsoft.Json.10.0.3/lib/net40/Newtonsoft.Json.xml delete mode 100644 trunk/packages/Newtonsoft.Json.10.0.3/lib/net45/Newtonsoft.Json.dll delete mode 100644 trunk/packages/Newtonsoft.Json.10.0.3/lib/net45/Newtonsoft.Json.xml delete mode 100644 trunk/packages/Newtonsoft.Json.10.0.3/lib/netstandard1.0/Newtonsoft.Json.dll delete mode 100644 trunk/packages/Newtonsoft.Json.10.0.3/lib/netstandard1.0/Newtonsoft.Json.xml delete mode 100644 trunk/packages/Newtonsoft.Json.10.0.3/lib/netstandard1.3/Newtonsoft.Json.dll delete mode 100644 trunk/packages/Newtonsoft.Json.10.0.3/lib/netstandard1.3/Newtonsoft.Json.xml delete mode 100644 trunk/packages/Newtonsoft.Json.10.0.3/lib/portable-net40+sl5+win8+wp8+wpa81/Newtonsoft.Json.dll delete mode 100644 trunk/packages/Newtonsoft.Json.10.0.3/lib/portable-net40+sl5+win8+wp8+wpa81/Newtonsoft.Json.xml delete mode 100644 trunk/packages/Newtonsoft.Json.10.0.3/lib/portable-net45+win8+wp8+wpa81/Newtonsoft.Json.dll delete mode 100644 trunk/packages/Newtonsoft.Json.10.0.3/lib/portable-net45+win8+wp8+wpa81/Newtonsoft.Json.xml delete mode 100644 trunk/packages/Newtonsoft.Json.10.0.3/tools/install.ps1 diff --git a/.gitignore b/.gitignore index a1ed38d..40da635 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,398 @@ -################################################################################ -# This .gitignore file was automatically created by Microsoft(R) Visual Studio. -################################################################################ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore -/bin -/lsl-editor-doc.xml -/trunk/.vs/lsleditor/v15 -/trunk/obj/Debug -/trunk/obj/Release/Default/Project -/trunk/obj/Release -/trunk/lsleditor.csproj.user +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml diff --git a/Settings.StyleCop b/Settings.StyleCop deleted file mode 100644 index 3b4d8a9..0000000 --- a/Settings.StyleCop +++ /dev/null @@ -1,184 +0,0 @@ - - - en-GB - - - - - False - - - - - - - - - False - - - - - False - - - - - False - - - - - False - - - - - False - - - - - True - - - - - True - - - - - False - - - - - True - - - - - True - - - - - True - - - - - False - - - - - True - - - - - - - - - - False - - - - - False - - - - - False - - - - - False - - - - - - - - - - False - - - - - False - - - - - - - - - - False - - - - - False - - - - - - - - - - False - - - - - - - - - - False - - - - - False - - - - - False - - - - - False - - - - - - - - - - False - - - - - - - \ No newline at end of file diff --git a/_ReSharper.lsleditor/BuildScriptCache/.crc b/_ReSharper.lsleditor/BuildScriptCache/.crc deleted file mode 100644 index 27c8f6d..0000000 --- a/_ReSharper.lsleditor/BuildScriptCache/.crc +++ /dev/null @@ -1 +0,0 @@ -ó¨û \ No newline at end of file diff --git a/_ReSharper.lsleditor/BuildScriptCache/.version b/_ReSharper.lsleditor/BuildScriptCache/.version deleted file mode 100644 index 2cf9f2099b716d1d48d504a8708bb43dafcff3f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4 LcmZQ#U|;|M01N;F diff --git a/_ReSharper.lsleditor/BuildScriptCache/5/4680b305.dat b/_ReSharper.lsleditor/BuildScriptCache/5/4680b305.dat deleted file mode 100644 index 3d5acddbc0848e4f36b78d98c607960660f7fd17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 zcmWe=4drxUU|{&X;x~)AsildTg^Q7?u9>Tug|3OAp|P%$xru?Uvze=#iJ7ITfr+V; jewtNIaZYMVW=VdLUUG3kQGOOfAV2HReWy5p#xMW?SQ!=! diff --git a/_ReSharper.lsleditor/ModuleIds.xml b/_ReSharper.lsleditor/ModuleIds.xml deleted file mode 100644 index c4076ec..0000000 --- a/_ReSharper.lsleditor/ModuleIds.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/_ReSharper.lsleditor/NamedArguments/.crc b/_ReSharper.lsleditor/NamedArguments/.crc deleted file mode 100644 index bfb7e15..0000000 --- a/_ReSharper.lsleditor/NamedArguments/.crc +++ /dev/null @@ -1 +0,0 @@ -ÌÏbÙ \ No newline at end of file diff --git a/_ReSharper.lsleditor/NamedArguments/.version b/_ReSharper.lsleditor/NamedArguments/.version deleted file mode 100644 index f66c9cf4c9672fa2832bce76f4082fd97b823506..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4 LcmZQ%U|;|M00;mA diff --git a/_ReSharper.lsleditor/NamedArguments/5/4680b305.dat b/_ReSharper.lsleditor/NamedArguments/5/4680b305.dat deleted file mode 100644 index 7326acf483def2575ef5dabd587d88fadb8dcb73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24541 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 diff --git a/_ReSharper.lsleditor/Resources/.crc b/_ReSharper.lsleditor/Resources/.crc deleted file mode 100644 index ca596c6..0000000 --- a/_ReSharper.lsleditor/Resources/.crc +++ /dev/null @@ -1 +0,0 @@ -s[/ \ No newline at end of file diff --git a/_ReSharper.lsleditor/Resources/.version b/_ReSharper.lsleditor/Resources/.version deleted file mode 100644 index 38424fc7a255c7fc7f84b4af38cd70f1062ee07b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4 Lcmd;JU|;|M03-kj diff --git a/_ReSharper.lsleditor/Resources/5/626cc1d.dat b/_ReSharper.lsleditor/Resources/5/626cc1d.dat deleted file mode 100644 index 211a06ae5d949f73f50044e39898326ff20b04a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3900 zcmb7{Yitx%6vr=-VnHJnEG^L1B9-!LOQ9|8%4<72-7ai**PY##f(WzSyW4@;xy$Tq zyRC=>s1ag-55yYvgO3otK*jJBMKFS~keKi?lt==KA)5FI2x^Gnxt-aaDe=Q?zwGSo zo!>e4JpSiyPET;OfDpRXvb?aNx~{6G)-kubtcI_tEvu@moL5#qziLhySHm|{)znqb zsj9B82-^aL$cc)GjaND(l_)W+X!R=TOklNK#fcO;Q9hyIKz}w+Q4Zie@cHw;)2r=_ zc!9`CO(F_d@Ze6LO4i~wO(&P+w7+z9D0#z`pF(Wph%FcoiyF4a8eSSkj0}Jx<0#SjFK0PHFWd736gMz-ZUD3nqRI;Af>Shvzee zBw`b~6irO=s!EIy&&rxB-00690h|d^OpIc;l+Y^6UG!1VR4m5Oi}`x^dD!!9?gzdE7%4*OtG0b}+VMO0;$=AG%(_?xZ0`2Gjf;lM_DgN; zZZU*q9c#b*K<6e*X7Kdi*7EcMbChR$Sv?cek{>E-niRLDr|8!9hi6Q8 zU4X{)CRa`WaJ(F)eeZ^UvOt8`L0Rg#Q{NQ&AZc&Zm!FJm_4xuOYf4E88IvhqV0pe7pFhb8D z^pw8pP{q!{wSBN=?4-~}EJfQj)SR2y=@yk}5~LD6fVHPHRzz9q7DF;dCntce8c-Y& zld{%C!cs(n)1X)$LWVAQ#26kiHhnlM`EbUE@K*`iYdA$65~Oa7HW+#wgcIi!&YaoE zly7s|QhZvf6pbS?QH?a+-FbDqW!?tBz}M$CN1coYtQBC4UOp8Ee0rWQ9C2{{fLUR5 zHa=+RDQ2CG|8rgN$;qgs81DD&+P~wRiKqS0B%NQw+7C{m5o~zZ)LtEiFC?* zf4FoKYp*@RbtxKF710<6H-6ww1(x`yrtq(3*s)M*DGsB-J)-x^)_pdfJZr#5PIChxA^?trRV{C$@2MKu;;hQ@NNUVfUXw6lVES= z(P_9(je@-nFNgYyfau^2;(O217wrN7cN7mYygmVSPeJH09uSe|0O9rV9^{z{=BO>6 z3!vH(SoZS{FPi>5kf{y3fW}RO)u0DfQ7NE=fZZQJzrf>TTrhyXn+^cG!{G|>P3Vgm z<^^xXoh_}b?P1YRXHp6qLG9ApdiUYO#plfo4PG9v_baUIbp8#w;8WJN?s+0&l?*!h z$L6)>vu6Jh_K?ErJ6=_{#Vp$*&VfK%BSe;{{UdZ BJe&Xk diff --git a/_ReSharper.lsleditor/SymbolCache.bin b/_ReSharper.lsleditor/SymbolCache.bin deleted file mode 100644 index 8071ba1a4361d0955e4a7bc3778853881e10e27d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74578 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 ZQTIWpuYiY8VWQ1v0?Yw-!lb{k{|j;biA4Ya diff --git a/_ReSharper.lsleditor/WebsiteFileReferences/.crc b/_ReSharper.lsleditor/WebsiteFileReferences/.crc deleted file mode 100644 index 593f4708db84ac8fd0f5cc47c634f38c013fe9e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4 LcmZQzU|;|M00aO5 diff --git a/_ReSharper.lsleditor/WebsiteFileReferences/.version b/_ReSharper.lsleditor/WebsiteFileReferences/.version deleted file mode 100644 index 59c36c64b0847e574e2d118e7365f446a8f54bf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4 LcmZQ(U|;|M01yBK diff --git a/_ReSharper.lsleditor/WordIndex/.crc b/_ReSharper.lsleditor/WordIndex/.crc deleted file mode 100644 index 99db6de..0000000 --- a/_ReSharper.lsleditor/WordIndex/.crc +++ /dev/null @@ -1 +0,0 @@ -B•ae \ No newline at end of file diff --git a/_ReSharper.lsleditor/WordIndex/.version b/_ReSharper.lsleditor/WordIndex/.version deleted file mode 100644 index 2cf9f2099b716d1d48d504a8708bb43dafcff3f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4 LcmZQ#U|;|M01N;F diff --git a/_ReSharper.lsleditor/WordIndex/2/7003905d.dat b/_ReSharper.lsleditor/WordIndex/2/7003905d.dat deleted file mode 100644 index bc422e524c934772bd25c32e75c29cd502218a49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45036 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 E4|)M36aWAK diff --git a/_ReSharper.lsleditor/WordIndex/5/4680b305.dat b/_ReSharper.lsleditor/WordIndex/5/4680b305.dat deleted file mode 100644 index e0e3460256dfd82d79601c12f4beda4d93e43b8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65918 zcmeFac|6r?+cr+2tVJmml}eHZC3B+&N{P&gqB1O!VVS4CnMzB^*q~$#DI`jzk&Gz~ z(tt7)(L8As^@FtIt%HpRS?0L{nLHwu-#6iuw$jIm=j%E-W|q z8Mbqly0JZ7tk^zFyjad2a&9blAD$20(>`9fJdn4XhlhvS#bFlK9G@W&ze(bB@LNVp zKVM2=o#@gptG83ie7DM*ltQO<^$%rE5kBG2@ntE)k!{A4dfuIqQ97l+fP9=t9@LQW zjM9_+c$hkygW_j|GP5tZQ+xC_tctsl&ajAfP3o_vePWOjhq&@uTJOg;6mh+E0ac-dVa+QgNlwvvaau z=Qp?P?s(E5l;>>5qbJR#Tpp(eRBpYLk`Uldg``~?{<-Y1(3;vnYG&q}1J(UEHLde@ zYqMG5u`Mb*&SrV!=+(zBB$#RKV^bAF&ECe=#669>&0+d(U(cJ=?}pGTn_$W-wQ8MN zR+YToVHb*WlVOO?aHg_a_X&%V*Q@za+op@xm%39K)}X6w$UHAE&)itQi8>a>VG8i^ zN8V0!qI}5TZ?kkLb>{39nXITV#xqwPw=qp8GNK*~y1eZM7+23VD%=fP zB|g>tb`qngP+sw(J2f!Lmpb!t9Mb=Kb z5_)wlf9NEgo7da}1;!trwb!cpcHS)Z3Zd5vB#%zrmKGu^7D`%RL}Nd_+H&leIG<}xo2Pw`h5i{-tHQcG;?J=kst zQabkT9_nnLRrby{Y;QRmmb<;3Gs{iR+MTB%;55sL+#7RpZ}9tzy^UV5S6^o@!17B$ zouR;)9H+VoK9ZV7ITF<;+Tx?_*=u3iKu+7k@Rj;IO#P;tP*@h6;A0$0X*Oqkjfq^s z!h1TNfZ*E)5la{J@;&_t1dW_LTz&xH8~rtX0N4kBf0=pw9RP4Hxh#v$=&ES_o0r9e zTRL=kNfgd-raLy=!CnkQ2n1}iTVQ0|4zU`Q6o++jQzRrO{%>LFt&3vNnOevRK)le zus-w!mA;_zHx4R^{djo33T$)K>D3*vnL`);#w;I?9|4B0V-|DKIUj4Z0~^TAiRPkn zt{cP&)0EDPTQcu|7fNTx_;YUmT{`DLjpSTVI&@EhT{z0GWP;r@6DfvC1$p-J5uNgA zvv#;Ed5$MvTS`9XLOymUj|B4XGV6#KUY zbb6Taj9(l|nV6ilsNUpF)gCpl10S#IU9)lF(MvNyH8pBm-@Vc4YAzH_m$TFPN|4SO1DKAmwVJLN_8sYM)SoV}?n z`bi>*{?w=mvu-?H#$oDAv{+*Gg!DdsL1TfQdgV(krzxu8cC74qi3!FZ24xsrY{R-jv0SZpeC)f7ofT)oJa^%})yQTl`0YO7Y&&7jK zGk-o98zpP}fnt7taWF2r$}oPHgYlmtrsGFli^Smo5$!&|PMAIfmgEpvk;ewn5zEE} zYRV6qpV1Zb$Ds*+qU6eb7`9agP(y6nRhBDUO!_Od0#eDJ$QNEri29!oK}%R`%9~HQ zWsBU+cuqJ*47&Js3w1jv_eo}~KlNDL)aL1P@w;)!U)vlN=BZy)4LX*VSz`CA0|Fu( z1o)|!L)0frRv2@W;4xBfjfS^OnyvA43zea?I)R%EuOJPMcjKie_LkrKN1^p+VuHKB zLGu&8>Tf*Y-No~FJ4V4XBzG)j9CBxdjJ`K=*}r*b{#hDuC0suwNs;xU$h7*p9DStIuVhL8UuS8N8UNhnC=(zB z_T2mZXZGqA+0JovcVzVlCWtJ;#f`m@$6zr3my1^h@+On4!1tab+6Uk?;R@OFmtjwOpm8Q)F3;B z%#~8}cX_Qga(M6QDl|$>Vb+}zhuy;}TUuV2K3^C=_~kvwFI1;AKOX$eg-`ob$-3IZ zH%2CJ;=SEzp}$N`BY?V|(qFo&J(${}srUeriDEqq$?00`iwm>Y7v_j0WK?_k6?vZ6 z#-}s#+j?7Z1>PsQi)|sh@E@{Ox{XK`M!pl@2(4h?#j`R}eoit=Bm$|F8M9U^G~GD2 z^5E05)Xb^JEnekj-s4##*-Yxhox0Nk{M}ti0G(w5eWdeE-v7ZV7mpqayBGk;MYU?KUFgWV4{MUPK8;bb|b!hFD+t|PY5r}S4xc^jS) zD~L@n*tgE7foBJQx%WJ|x%JjfJ7q3^uR9qNCq4FCwLpJ^SJT$2HErIjF(+}+rf+&G z?b5m86Q0IC_7T=Mj`<$8p-%4bG|%WQ$zzS0`b*m_S36c-^>p^-Gm`GB^HmL7!W4s9 z1@T92ZZ&ccSXBWIB)RP*hjVS`jGYQKi-dg}oew#+y0dPbyf8>{mGAwwImzax#zI+d zhlwpy3!?6oyt;c{Ay8Gh@LQw81lN13$H-^IEIw0IC%UUS>6Y|kkF%-U`R-jd+dekz zsLY1f%Fyc_9N#!lS7k)%9?Jh&w{X)aCXd#b#>a1}5^Q}|S+;D{t(Z{KT9vzSYSbu+ zeFvUcT&<~hl?ZM)IQp}!o}ugqXWNKZ#I(h$ ztcqz56YlSb(@JRumtz~!Icr+Acx1-guYAi}_g4jNIJ;eNp?bLb%Kj&$UU`nO*IhC3 zjohZPFv0aRuc}Y=gt*e&(CT4ZO$$cx$e-A0xv0Ksmc$V2vx@8TJFAqH zs$z#EXIz-G$4IVuc4^~t{rXoo6*>&=w?}c>^p->)Ef3RO`JKZ|SXi5QHaq3Ei_`Oy z50uQ@*StTqBH;7+b+6~m?oOPy>zwb|lQ#}m_?%HYuj>=hxGtNy`t1^4N%Q2yOA~L~ zf7;kjlt1^8Dt!+}HC$!W?&!Q(V%6E*=|^+VTy#!~78a=~ zlZ@BvC{Ya9d~khWJO4p}0{PSLC7wMOyEaR=Jrsrq+r?IZ^NcIIg2H%d*5CAC_|dh`cdjy{gIW6tmk=eQButlXnFrmX{GL| z!{zG73REryQth*5onx8!pBhlw*l6=)M*CCSIWdBgpIbaNp7Kar=Vixc@h)i3e$}40 zS}W$r;pdDY%S@FOmfh{LVjPJJdbWjRHQ5n_o>GXH?iJ*cH0q)Q#t_g9@h~4>u})sr8*P=(V>ua??xIz$`J&NOyX9W%Zg1sVe)4yB9u}^V3Hmr@jzqa5BPZE>K-7U}u~nZW z*XK379&%JyteJ1nbN#@)YkE@*gU5`_Qp0{i&6y>1W=kXmcB1(NJcSt0z@F zBh~*N!D;r(@nJ0~5Qzb0(1~ZQ5O8slfjQI9yb#-$N z(~>E{__?Y_MgKF+i!S$Oy~wG(?Q+u%i9h7nTF%^Z?1zsuidK?C)z{_jD>(j+1qbkW zKB)^HC~Y%b+)F(E2U|(YLjEMg_DUF_4I%biE*Pe}b`UE6ogf(S3lTQmVbUX!?QjLl zvA4YMPtfzLs3z^OWcHSS5!KjJxAXm-{-lUdKS#AofAo!t$TJ$9h*F4jh-_$hA`+rm z`tL-pn(>cMpqF&(O%n5s`={0hqpT59r12X3g>Gg$(U~3+ZFcsW#VKW+$W9RR0+SZN zbxpY&>=SM^6#kvg70$}f=L!vSG}X~8N5<5A>F8HvMrg9r&Gi=Yxj2$3p}#3Pw)_dQ zrNX$plt<+A8g+q*LWeTqkWt~>{yXPyN=i2q=Z`0OGLNe5q**v`pPz^Ehd(LUH}W!v z8BWd$%!m6v1yQz7d4wNDiFK^wZxX&Z#*8sI!jGYEEb842{yGNSGyFxOPW*i zCpw44#Aj-~BhCNh%ivY}9UQ3JyZtD5VBvqfUl+@SMMpoJ!z^b^v|W6f-;js=Ke_A( z2fzxvgl*4?M;$nwCJzrPuG?G5If+->#oC@!C)(Zdl0DGxh1f(`le&cx1I!O5mriec z6Gi(HTSm_+n)8Z(U`tD_D7?1~8Xoq}xiiw1jhMtcuj<8$qu)~2>@x9=Up-|D!V>2%rH7A>sh=LDYeAv8POQbWUPCdyt9J5x|$GTJU*KXHD6g6ph=wtXui$<)i0c zFiJ+SQtstRy6@jX{`)NQ|H!P3&-ZZA|1_I?Jdu37k9@y`(efj8l%fL?$+L&9;!HlnrqVhp*hmmE33_onuYEz_hLXuj{?uug zod!ZcE{m8|Us?`@Tju1)I3$mj;EkV|*AcpwL$$9z@EU-BJSVwee=T8`v^Y#?8^Dr5 zw1OZ&YZmr*Zl|DG*h7NAm@D&UmfWv;c7JKi$eKRx)lcV|d4 zE4!EzYi9MTw6>kI$cpXh@uyJbTckHqi-f8zT%n2%Q_H^37y7$}scXxOH4&;1qTIp%ft4r`JyJxRNR!)yd^z)JY;1ETUVc(OxkCYse({pm0T%=qzlO)k}V`4 zKZgqLF!2v@ERmJnZ6t{&X{;dxATiy`wAh8(4voexKMvDtEQi_pQpJ16^jeeJ&Q5i! zW=B6r&A4S~fbd^IE_6&7CSp~>5vJv3ke~gP#0>H>gVdUOkpUjxe}?C21fCBaTRVDA zFHhGWwIH#Ny0aZwKXgd3t)8cl3iT-}`UuXyBf*Ju@@G_rJTqve)X@J%14`YE?d?t` zPjFKz7vx4rfKpk*1=ZY?io`+Fx4#Qq|0fzyzoP2s1{8O;{;yycDqcaIODS{%Y068f zTx8j4=_}Pip8-;T1*1PhVHbHzA6MP-)$J7&+RQOxJ9`*15YC{EwsuAz=zpBRQ z5X-H&UbygxTKN};{`?+Scu>vo=m&kYIp?_s)sl*oM_aD*{ipd)v*I{@2I6#BMzw@$ z?yt@Q&A^W$A@Nzmc(2|jT#k;5?JXVIc0Ck9kHpY4u=Ro;35b0izrKL@cMOPN)n*g4 zoG@{)MsJ-^{~Qx&Y-#n!^bw3LbGBjG{3!(Hp7N{kByc(N54Z#cOIzA#$aMQ&?(!?h z{GXV_go#W4-B5=qPTUihXs9tGwcTB*@#4MH8IU+*@8s!dNd{Tb`8Rj&aPHxWo-{m| zE6&h=u-%-8mwxpJ``;K}_22zta{nO_Pw2yexN>N%qA1F^&)PGtfN4al1vv)FKd_B7 zGpN`wxdqJN#qg!27tF(#zi68!AeZ_vhdbw>W72=+AaePd^C$Pvr~2Z^9Kvx=VSR|B z|X$Jw>vm41%MlR$8B5Ws|cCd6?_7}0^47;W6<)TivYAN;M0}Mk>&^3q4?V|u(TXS z9yf62jp+B~eWh|kRg-xj+B5L?I;!7u`W0w`LzC36zn_1qX_Mz`$^HOPIzo#Q@XRxw zuBFh+1M!1>?WqE2+O-ca`|$GbikDjnUixOXiuHC3E8X4W(qW@8_)`JkHLFZ+JgJ_; zxZsnU1524UUgCFw(Emg(yZ;xmB6Pfw$D%DkJKX7f7P2Bpjv&ZJZcFoJkS9Ub2I&!` zNZj!HU-4&kM02v++?5LXG=o`FXSc*g=g*FKIN_hAH;l%7bhIVV*3fu5NZ8gZJ+p*- zEwnbR?;j05^Myk}wEb+s1T%(TT&Cd64*jXIW;WLV6vo2)@-aPZ%7ZSGA z4y)6Uu)Q8Pa{wf88jr(9WwHhbVcxoUXy?=~XNqP*&ypRs>+G+f`{!IYfSkvoXfvZl zy@czZ+8NyC6y4R>$#o3ra%#|ub0z=VM-UPxqt+%HdMfb$%TfH*G~l00Dh?^J0?C8! zkkRGTiesZ{B$Nk?0)>a8NBaQih>y|=5g(=2e^p}f`<@g2t0M{u4_N_(7Krx3g?~Pp zIF2Z*pu()w)-k;7*aL;Cprr;ercQ205_3TycJI0y{p;R%UKviP?Z@Y62f-)S%T2edN#WX6)CX^^^G=!%Sc=e&cav19Fe5 zUVPOydfW#E^<%>)Z?j+VntYF)ix&ycDz#;zpJK{(r>@<-o8=VK&46aI^UEfoe&pv_ zkDk91$|cp5Nj`gDS2ZnrLs1zBR_XjW&IrJMUxi`tA90H*?wtX zw@}uL!K=nb>Fe@xys{b1M0Z#aBaB?FgI}3Z|3QnE5JI9&2A{AvlF@VQ%7Wv(v_r&P+ndJ3caAf3HUnIQGW0xn+3leIJ?x1BU4PpmBKy~=u^)uP_efq3a_W-31tn_{v@WL-jnfLJIKy&*wA0+9?dgWWtnCkK$54=9w;A0Va zUC`PZk1r1!Gh3k$y4IraVT=(*9Om$FK9ysIb z3}Z+6Q*~uwt^vMw9gy3<5qF~~O%C&rwUsGml&zF~mUE5#UKq(=wn|h~x`V$~ahl9K z9@n$`V;Fz{{enWqwz?$K@opRPNxpA6^hZX^f~cGZJClk6moZWz~OCu_{VFr-oNtE6*@aCmCU z@FBux11@c$R*i8kQCY0Y*z~n|V}9^8d6nfJ)X=EZ0PVFZqbHgR#h=Oe%7Uj zmkzr=bpLSBh>~U=<1yvyeGy*yJ(no$20P>VRuy z%F zq^`_*%Pd{xs9jd%>-Up;cH`#iQmj89hq*Z=+6z(4=p4CUi<=I(lo#LFI%dnN zZR(3mg!2{kg!Ve`*K#kYurOa(f!PI6Y(^}!IEGzCmgFoRYtudTg5}5PQrqCie&H7YXcnP z$1POrnw-A!(R?*T#1r9{QZ8%^q9$p_3BNP_kY1`8MD_x)OxB;24RCI^HZiW;FrKd< zBc}aAI0dCE<|Sad6=n(4GxOiXwz~^~t5&RCV*gStZ(iY$a#!Q?qwbD!I&y*TyKd4O zSUO*R)de?$#lt1uUveG9byq+y?B~F`RE> z-$~wYYDkpIU8|cCVsYA$yz_!6NTd=xue+t+<{KgZtX6pA==Tk6!FPr2Tas5m4}Wl+ z*RhW7s~;ezx;|Ce6BJX~nxpYW+opM@o0Xl1F%+s;thK0LC3vdJ;Lec!CNuTed=Z9w zP20xK&Qd@6!nI5D{5}rzQ_`e{Mak~e#u2HWyfbSvlE~ho6v^5^G1){hdX-1gmtnh* zEiH7*@`IMXEF~bSE~kzOJ-mUliUTz9^M^}WJiT2~&aa~*6S?V0zs={i_ejptUl$2) z9``=~TK%4K2i52Ki%L7CS&<3xi^=OgD=5rdN}jvP@0k~O&ET$F0M(Ip$7bng*=KR< zI82|rUxl8TXm7jge`)+ociV_38A~P@S-hH9_F+b>xX55 zkQRnLQ>f#IK@;$do2ZZFGcGH-DW~j&Na$BZ{1HrL1C)dFQED>KKm#?#LL~X~E=_ciB zw|s(595}Fb>m@nSm?6!ixPWJ2Qolj#u9ELFAY<1@tZ5M%c52O68OP9#`FY{eF4y;d zrtV94Kd@HWzBsUVeWJ<4Bda4FsMSwnW;749e|m7Rv&J6s{=cjB z>$HB}9PCZro5X2mmRC9s?pmHvFZbML?)@Pz2ZcNHZI`M$+?)fI^(K~+#nNlU>p=QF zyFVYFolRD_luth*go5LM)DCL4#dhkY_nu?RhlMhY$qut)+uSJI2}49@or@h(B-eQS zyq`uxj?x;F;n%nJ*u%^^eJDkr4r}fCd(4)Ya&F!qct^Nx&&nBsq9NAmeCH$HO<`Bx zdR}=7y(p9O(;6e<515X5R5mz=NB3Y@+LMj-%59rFgKo#c+mdB}US$&bnOBLQWnbvM zTdn=J%{$nVr~NQCgu0Q(zO(mntuWs=sTC&s^s+Z-A1?^GRGq*o*>-fo{nz>M??2LF z39*_>pGbtWOvE;xTo-(Yx&H*oKT7jd7zN~YZj%x{FkvJm-n7n@`c7hj?>yo&nOB$m zFxkU*_Bru`;s^9EjB`v?8`>|FSv0ct;hsxpEYm066qcz7&V7DfHgIYx$V=gAYe;~l{gA&^ZB*vERJGG;xd8^nF4Tt?ftlEcHuM{ZSwWsLXA~YJ&S`d!!MsZCy5ZA< z-)DY$zpMrZb9jS>s_i;)YlqFXS)C1@3ncx6rYO5mx4ML$>9n2mc(X0&73Py}97jb$ z-Ooo!YQoJ5+S+Y}jZgDM$K&Z`&OMebtjz)KJ!tpwi?Xlo3mzKw+J*Hdgz{3){)E}6 z3SEJAH;Oq-_PRsm4Rb@Nk+q&w|GEPSwSw)Hh)(Q z%bWR-U{k?iZ(+DdtXhuFt_%5|bWruM=G+%C*|sxwPz^)AGan9l8pwXVd6}l}7V4s# zKg*Kbr<>*;rmSqmEuq&vDdoXNhp>+?j&OY0E%$a-#YNV%*56f2CAb0^k?!OAc$1lK=k?Z8y}dq*S=MYP7t)z@@7aU5+TLXeSpnrsu20Be z_765`2hnu(U7x<|^E+H0TpLWN!6S`a%Nxc?Aq2cxS#7?iOc-xj?+5Kx(d;%uB*%T88PDaEnHh`KKjsR zQt==8TZMf@Ns7jvwQgs;f0#M)R+)os*_A1M74N_uwKaS zW)i2gR3jr1Oo*?pxLr`K3#B$8Fdl3Xm;_X2@R}lf8x`S8wUOzI6?qAAABfNMRA|?D zq1%r)e&%za4EGGzQ$Jtni7EyaIyL~C-A)ZaMvm%b+^CTPU@^q6fB*V0?Mb)5_scmtdf03kYxK<(+8`h(g!}p2INU3EA7&{apieRxN2$Bacyh> zZXmBqdFCyBRNH1Qc?~BPKWCsC!Bl>*TM3@N)T_lV6c`S$cn1S_2^nZV5cIz8!{{jD znQi_}dE<#2o)jvEyEbd3z#0zho;R+`E3?&o^dh3YLS#Eic3}*cNz-kS^R%F^6ks2VNq-Tg^QV z6V*K`yg9?qcn=}xf$vxu1Jzy`Ios)^0)I@H|BP2com+Jpj*q-ZzF+0U<~_%@3JI1> zY@RwHj9P0vrul>3%X01V&iKJq6PuTO4WUvkB%0O9*CPaNCmGx`!HJ`0^s>eELmXr6 zp72ieN5HA+%h&qa7o;5j9RdyjU&`U(RJ1ARmId9Opc}4m%VOjzO;19KjMeN2I#a*6 z`C$x3EEUBuUiu*)u1`=saGfF#MDPMwp5%=EJlpf)UOTS?zr zx`mkk-CVrpVjYvF=y5+)$L!dFb|5HGP+Re39H!>sw^?W#qAjvHz2hPhKqO00v%+Ek zY8HtH=zRoTv@4NJB9TN3!*Fk9-PyMGBXO-{HYG{mK=mVmj4DbWjkX2`p8zAEWW8iF z=pk?g+r)uI7!C)FL0bf^9kfWT!&DTFNxL6y9>M1dW3Y|8@GJjO2j-dbtrWqWv&3p`&|O(R+qPscydTR_O_7 z`G7{lV3w4ZA=aSIkR%_vxo9qMOTy;X2D5e1FKMcYrk;K}9Z3qTnmSwnISI{(ai8)+m=NQ^;Ef|f=5 zVZg+*!l0o*ebF@3vcrXQXc|$pzv3X!-!z>Cx*jX198Z)VLK_g4QArD8)gX!98u^yS zyQGbQ7Dnf37islr2^B)VLDWO?v*vBOIX36b3&zLGZ0g2^Dj(2boZN#3puwc6wb7u& zK*2%z{9$Ia43y9g0S%MTR!MY@O4gWeRtjnn$tGGuhWz97K<}Hxm@Po-0=QhSXBPtO%oK;nAnBl02|{$31jp(Xkm;@hbU!-Nb2^cxF&MSSp+KQMgmy{T)~X3urv-&I z)X>b9%CGXa3KRL%#fEMju!91v2b#W}OuSo>bl~%H@lYm&HJ}fnutp4eLt;>amhq6@ zT2B6H4%0ExQPeQnVCm*Uh>5E<$v=3#BYp9xFCP6S@rahV(DD|@S!j+AcM*gIWEqG( ziwK{GI7GLx5jWhu#i!D3ljiB4wxDIQXMQakZ4-mhx?7XhJp6Q}tUd1ji}5cJKR_zr zzM(kXb=QkR>mzZfCzV0k=$kL@^JE{8+e%NMjIQ&b(yvP}CJ#6%JaE}Q<}HFYzEt!wZB^2Cffh3f&pV&TK7lU@~yEjF`6C#(GZ<9KaLQmD4_~}Rp zWGk@4&8w+<%$qvMAF>&==%Nn|>ks}ETO;&%QC}=_suj5bVoZ+9*aXOuAbA{$6E_f^$HJXVnRlusk1 z9TEu0AH;`l6GjW$FJa@7cJjK>8k6{Ryd}}*>wV^14n<2LFcbU1u=}1?LQ`CeZ+n%E z&h0RTXmS*J9!VZ=XRMse9+|{;Z}RXUkIm#US}eab#3y*)k@i@l18?`g$8^%E zZ<+3h395uZnk}dDVp6>arO|G}h$JM~6xHKX&Z)cAH5oq0LXy8 zme#v!A28X2mah98EEp+t77LF4t=>4>onUguA0-CXw$ z{Cu*Bq$F~N3iAIV_LUM+B>8SNUvC%w{%L#wk#=Uy`QFpZYVPAk`eNR167vx2P>Y}j zL!Cm`VL#VkYo;8zj~Way4|(lG6;}#zM^n+P1MzTX{Fk(rj62!DXvlvile-IymI{zB zGT@c_xM};LXTTCkBJwWL@ib8>a9WF62(bosn2z;!tC9CYk^&5dSRAnm91G$J;uSCi z*b58?hF&GkKg3=rfyAbQ>I*68-BF>&8vbcs~<-6C3d=_;L&(@*lxX*fgJUo*$ z%r^A4&-M@dG(Fn<4^h9h`{d@mKj;;nzI3+lYX2rz8&~>YQJzpS<4QxRL{l2AZ0RPb zm7u_ZdZ}k7DN$?Us!Er95jytm_`$B*L%%$5TPid^R;U8k5Gqmn8h&cE`|_)62sIPn z0`!iW+=Nvzm6z{5A=evJ1{9c3fkma36lmcqx|#hsscWb<Lkj5);$4*Wl|4Mk4MoZ)5@x!FT&R;nQwM7|jQ{taZ% z`njU4`*&Iuw*a2J?R=e=b&EeY%~(#kjE0XtPg!RvF|4SCN~lJ zI?Ykx*3rF8GP$7;BG`>3vUc(e9tu1FxG0+c`nvIm94#3J7X=&A^Y`{0;HPM5 zI)pIb``N_ef?&RaNZ@h9!RdhS*;$iz4dR|TzGmX60R()$?geKCt_Iu->I?8Qs3)53 ziN%kg0r(kkD&UO31HnR&;g=wUL(MQ+rX}sqkw4D{*s9gbq8nVI8n^*yD2zViVwknmRvy9B0PsPgE^lT6*U{fSO6*|h3!on@IH*Jz{1DB9XSX zp@2m3h~WXSkb)b66%7R+in@Bcw=Ed+huIOZ2VztoEL<4VhY@{<7lI_SY>uuL>D@>% zo1T$kJqm4_KO%``Y|-`~%+Z^^#Ii47{6+zT4isRJehwC3jE3I#n=3gsFNyhB(93FD zIvW54;9p8E5`YwbZp2Veo5TUGVj=z{V+I@cE*ln6Y5)bud@U1a|YNWRK^0 zWY8Fa-PAOTbMs2%4uA?+CwSrjasUrzRQJQl;&WdDjL<-Y?+^hGNpZ(B%~}MzRo4gZ zlI~b3PBUe+*hlzgq&d9o@T>w9`t$SfBo-g+*IQDVo}2aaf>~?#U6NY7JvHa_zFe{o z8h#UKpz}z&X9PBgyKe*y1>gc>-MDK~Y#T&=dBJGIZNLO#KX)#O_&uj|(QI+k`wEmf1VU`J-TJj;pC_F9Yoz553|SxVJHwMJ%)*026ruW?n8=V8+d zo#R1o3utNo5;X{Qp!Ph+801#AYHG2l0|7a>-mW7>^zJE@2w#aT{D9nJ^PWM?^|eDi zqP6M{h#b7PYx1e)>BpB-S&<%(Tafb{sSITx|Do-VfHmkOXe}G^P~>yS(cGr8DcDw1 z-}!_{v0 zp=OFd{qQCDsy4ZOOz>4*V-gq`g=8^1trqx|+TSI8?#m;xOrN7gSg{GrQlB8%wb)YJ z#3NVR0QF^8b7K_7#Ly#^c;?if2i^haP`7*C3+eLIa8?1Xd6p_%-a81Ty8(km;n9siQHd=cPG*QslfNumBiIu3pP3Q$q-eXpz zykt|02;Qum%wayxOe$3?HsLvNEmvEKq*A~<;2o`b0;U3YQ1fRme3t;N6SPs#C($)F zFqg(3)WE>xlVr5b&YLdsai)>0#!aX&d*#dH2;AR&WA}<Avne`b%ef2pzzco7}%fzgozEr-cCEVbRjZbwzI9hUE0-020dx$4N{@vZN~I9 zf%r`lr-R=zRIEkh_e8wk=00rd6}-LGZ`+tyOpNUVE2ZY|$|h!-}k(bS3oa zTK>>UIyZ%8%Iw9IH#!Bld1bmq-u{8L8I8+rH9{Sp;$_#L9~rPj`{8EyohSAnT?o?p z&|{y*k;2u&F)U`R{ydAlLWoWuOo!gcz|!S_y}ne{a>ei}LRDiSbMQ+qYFJ*u_MK(^ z+dnuR-D4sirFDB*NVSDYOuXY4vayDD8-*k9wwc4Er=c2(STV1;lc`3FD=mkX?#V=I z0*We;&{p-$jGT+wT@9jQp%kVRL5hwk91aPs%ioJjU&JJbFS46TPusUFFt?mCBJNQ7 zZS|1r@#<}RRcC7JiOqOEHVji`FkuGLbu5d<0_l5Snp;Y2?MYYYZ%q_BT z+7Ql1B}|AAN%W^~=eSowzK`^3o27pB8s&l}OvPB>pS^cfN9e2TDsxgECdw9JIvy6B zL%xX=%<=MMSEOJqWPd3p{vi!R3WoFx7Kp*$T=;g>)YJk}PA%dv2S0vRXKYCPsl?Wf ziG?HIiEqS2Kuj%MA`wWX%$T*B-khA8IrTW~SD3(rsT_|Q&Wvd28gdQSc$aTO2tA2b zIBJXJy$`;boTl)wou7A)YiuY4+_m@u{AkrUMz{XzcQwVK5;DU!#IFx)1<&T+0-XlUijjHZp%-2*SW z$}nKjsv^@y&TY;7bo1IQjq(|q!kDZ}Pt>(3DBKbD_;tAxfi%pDoK0RUrs0;6uQPt_ z&?X?F+*2J+CzMg;vf_C&d)bWqr!K(A%bDatEv0*YLzXSejpc03 za-U%{hwWx3=jiUpB5N(!ZgSq<-bCH-k1rs|(kXiM2ir8IugdB}mj7jBxwgEXeT?Y* zqrIXsfE)<<2>nRU=%KVgm6e1MxvDK80yc^#e*IKbWmnHNDku{JqgR8kA@w3zl|4WckN8yGoE8qVV6>2VajO$`-rUOuh_G@%ry9@*3# zAeU+47!}*$v0?q@O?lw9w$?J`N{xQk`|751>$gXY;EfNRcV{_kkMtzTsd*Q-P~L%C z_*q4v^DvYYDcF^nJcA;VyXVdw<}I?ZaTg8sy?HQLWuD>2gS39UQF_1D*aZ{S5 zUS`%<&hs$VJma$w)*L1nuPpNWM}9S9&P&)qL50CjhWlNCc z-r5oyK6^I&Si6s2(CAxCX@p*3ohqh*5O5YA0M>*)1 z0X*|_E)Qqhs2+Y@GJ>Ds;WqBggVtF9FM-effX zqBWV+U9f!9^uPMjd4d2DfE!Z6B}Xm~$IPi5-TO8DoOuo$oq21?-Z{6H+%6x%UtxSs z7~)e*Q$)Q98#E>?VuCFsWv3!q1W}9E4pnC4d)?mvTiRY?OMzB>4|%3-?LFW`01y;D z-3|aPm3EM_iXFC%LLeFaW!dDK^@{n=o}H68|7xzm?p@66YlE`x z%GjK+cY2m;&!3*P3N>*Q`I$(yW63il4VeF<-9#qIlYe910q94hy%TGm7P~9d&wJg-|n50^y2PqNQ(OyzI8>EMf9rzm05m#tm+Lz;-8Ky z{Nx0|F5_wB%hx2 zuwtCr?5ww(!>m@#wZkkZ>($!>L0$Tg_kU57Gd13t(3xZwmcTSJO_z*O2;1_Uan|T* z1o!9_v~^e-6jl6eiUBO}#f@zl2vV@{Bd8b>s;qIkM!>>e1r?h)KXq`IvYc6NmX0K) zo;z*MkCggSU$Nd7ReqDGLKED-YSOZ&Zs+4}(qjJ<232q)IhaT6q5}I^MxMby7L#YN zkR{|9jA9X<343^nJcB_*BtfGPw~LoBV8v3|Gkce^{UpbCV|(kg0y@@=~>aT zn@lo5$_7;_)StJ>0}~W@I@ldZt>7krvL5N=Hlp|pArGi4p}0pXiL?&&AXNOQd!e}R zN2U@WeL#8uFerk8a?lGM^IpAQNxx9a(NaK11*z|NXKb6J;d&O1M5e_)YKt zB^=5(I_T1z6xeZ0q2N{yU}_Vv0rwmCMkesw9^B)E`wS1d#K8SVc>yLF_lqtwfEOq= zprpox6_h;SwBWJBBq&-XuQVs9Kw#kYEjDDy*0C9@qaTyBS<$h^VS&Q_^79|d{Xdd_ z-}|(k>L&M;JLn_Wf3Yu4K*{h#O3>UQEz#5MM&Vp6U_y#6z{eknJC3%j7+Lg%Nr@;2 z4OUCKV>!;@cISPyl>wCWg{N8yfgGyMYH$-KaX@k8$cozxg}KP=sVRm1xAlyrMH_A2 za30zB?%rmLpVkOD}2Eu%h;rB7!p(L-CN;sI!0K`qBC$tN7 z(5w`UK`Tz=>At+}U7r+i`?B=PF9Y-TF$m?a`hU%=l$rfi}z&_eOK={xq8ST zuvYO&b)p^m!IR1A#;GJS!X>Y_eDk8Q3OC%01(f%pTG+9tPN4s;Z3nT6t!_??2j<9O zrH$tb9+fqoHg`(D%?`Wp(fHHIn_(@;^c6-&cEej1CTM&o-uUKQiB9r8v`)E46A{bJ zjP+%W#cF3R7u304hQl(Sl(m6OAKur`t}&e-oiX7j4TK%34OP(=M}3S|MZk;OCCC0 zSn-5)g)##hgc#(SgK({oyCpP}cT3P6{Y*9ev;=?Xps|99RUm#&X7G`N1^KMh#T8@o z%gEsT^;vTlN$vX4vM_U4~S)q)J>?wi&!z|a!8 zo8fuiIn;=6k{SC3e@>2$op&LZ9pM0to>1b}X*Z+9Z(t58DjA618c%bWFK_H0lJ_L; zo5pTo4b~t_8AzwoRbNf%6I zT7rYj0dgB;8cD3LZm=sTd}Enh6Ku6TWj?3{&1=YWa;7l6v16k~#gK`uY}n?7k%s8q zU<_t>v;9Z9D5Hxpj50uR*k7)1hp{dq^(wqVog zHUed^$zp@xeET~B7%%$ds__AA)5GSnm#O?77)OfY5ZlZEJ8A@WG^S4&@NZjJbv>P| zh^WYh+&Roer#n5cCKanuM;G2FopGvA`Y+Fa{gUK6kWIR(;_0#G#?gR}F*GXzT8wwV7Q{teARW zdjKR_1W5F6ei+v4cFsRp4_%fwAw4#-tTABe(dL6cIFIjrVA2OBzX_Nid*S9gxT#!# z3pcP-SzeW*`3`#g8Gr=6QYb|re1-rSLpHcG9XLDwiu0iP5pW-Q2d^5U7dyQ`u*Y1f zb~$Gfgwg;bT-uRmcX#IodIo&Y zKpCMu=pVyzGSL2exvogQ1QaPU+dn;sNU5<)iHkVgsBL{0gI*zeM)8H>3ZSA(KxOi~ zutm#y*%tbPJGCc5XInDA&BMdq+0I>VG0WZFj%YCmy2uTC_`}2Wji5_rffI#ozgvPr zsSWjHPn`b`KS?QhMQW8~?-?nzQR<3xn06$R(lhnEJ5@qnX|4v@Z2UHq5uf})>ByRf z*YLA^_41~Q3ACn6BxAD4*FLZ!qg}{zx4ftiP6+LB!iaNtqEN!$@sd42Hv%9|MH!sp z6d*qHp6|OQ<1f8;k^gpU{@PLK4$Ms)b8W*px)m2MK)%?mm!JJjeCP5@3Kr0KNK zH0o*8W@uinwu`kLdvh_J_DkWUz)M9p7VnRZQG$O8xiq{~@KM1-1uHhUhYFr5+Cv3D z6}OKHAr~Qv_ETYm4?Iy6|{r!V8MR{9~S&q@L~Nc{}sGf@Myt*1@9F+SU{G`q)Bs}qq_0mZ#Zj` zZZjc^+1B=!Fi;Sx`04r|d`n|r#?qIu{3aO-xR(FZ-uXt=e8+K|cB7)?e_GV7W=6}u zk+ZWhb&E|S$)Am>q}n;U-PHa_vih2f8HOldd2%A*3wl&C#LmxUR?WhP`%D5w^H>> z&FFB8o*J$HN=>cMVR!?0AMjb4-gMu>MfGHpjC?RM;a1gWOkP;IiraDRr3vFL_cSIw z8bzx^8zNS+N{3j+#JQX^XKBIylF=0y1#J_P8d%1r(ADWV#{%}$R|c*pc8gn|NYg$U zjoGtP)6}eT@xH-`2F}%Kc>}iDH0|R3f?2@8UJQ<B&7M@F}et}Cp zRMM$rRhVZ?RB-sRc3GppnXF?3G}fS_8tS^6)OF`9_x*)QR-HQ#O`BfLnKGf3#uuz} zqo!||Cm0J~e{k7P&U7U&rgl+l$8BdWpuUeBpKVa*)_p-i%hGVr?g%Q5)uq4U+Bc+D;D^WYrkb~$>6Pj%t=g%yKMx2#jx`2>p3lo z)U-zS7!>aLimx8W-!1m4zgc1Vw-vE~;2oMY=iShCg^c5sa6KcWYRm`YK572ds3vb# z!SZT5PU;2fo~GLsuhsr`YlD1v`gTpcqfVO@SC>zRNHQ6n-8+&Aey=3|{OA#RU1ZUJ zf2bh#)%)c+4d1_P)LwfpM>N${~gy{w8Mx>nKV<-6xY|M~4 zsq@8FEB^m@X}U(WLcLTK;~5P=(T zLUTf=HD86|Fm`gNd;gBA$U3&KdQy*octwaqNZteBl1rRi<)plUf}WBh3l(Br$0fE; z6f04AD_aUfkEyjz-X~)bdft{d)BvTxMu}djMR*}e4Cn;vpiLVkxJi*dP^8+3Uj3up zvmeU}j{3$;*8A=*8JQ*0YiNC;ICy{=UlCbB@->M;b$54|F*O%SJ&dmK5p&%O@rIUC z2s28@sN$Sq$_q?~@GS`#ewWEx5KdH$yaR)a4s z?HElN&X9*1z^a>o)h5~Ab12GV_J#OIT0~E33bzddtk_Ew0L6Zyn2EEeIC+zKR7jD! zXU%&ZO0R9KK9{&HdLee-SiC-{j?ls*;7n+7@lqYv}F0jqlwr*Lgv;>bL^Jac>%J9GmMr#fk@o@5bKVbc1RErt53 z#3_DIFPb)~ONA;4va7a%0TT^tO zGBxJCr<9nUZVwC3!2gX8UC8dddw9*UV@&ILGC?%?M z;Tl8i{r%1@c+$h`g65Nh;O%?PMVMfjD$~L}S{T(HOl)g>Obu6oYqTYoAEKoaUUjCr zdq(Uku*jcR%e$Wvx!<2;yy;CdL$SM%n*OHj)XC_)-8%ymO_#^5St+M2f+rjdswj2I zjQv8`WoC?erex5={tuEZoWXQpQjojs=Z(M&tzSZMnKdcv;%pZI%t$@v`kfaedfSx) z87)$+PflDW@2c$jf=PmlXJO5E;y(}F zLfWECF34;4F?QJLB)1_m#|JWfqV){d1Z~3Y&(G&x9lHENhSNlrCvWr{-bT`G%boSc R$4j62`CBJz9m*?<{sT;af?WUr diff --git a/_ReSharper.lsleditor/WordIndex/6/bf11a17.dat b/_ReSharper.lsleditor/WordIndex/6/bf11a17.dat deleted file mode 100644 index 74fc66a902f0bb85d9f507114e4d60601979c143..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65638 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 - - - LSLEditor - - - -

- About dialogue box form. - - - About dialogue box form. - - - - - Initialises a new instance of the class. - - The parent form. - - - - OK/Close button. - - - - - - - Link to SourceForge page. - - - - - - - Loads the page. - - - - - - - Required designer variable. - - - - - Container for LSLife picture. - - - - - Container to hold all the elements. - - - - - OK Button. - - - - - Web Browser. - - - - - Link label. - - - - - Version label. - - - - - LSL Editor label. - - - - - Clean up any resources being used. - - True if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Defines internal values for both compression and decompression - - - - - Random numbers used to randomise repetitive blocks - - - - - When multiplied by compression parameter (1-9) gives the block size for compression - 9 gives the best compresssion but uses the most memory. - - - - - Backend constant - - - - - Backend constant - - - - - Backend constant - - - - - Backend constant - - - - - Backend constant - - - - - Backend constant - - - - - Backend constant - - - - - Backend constant - - - - - Backend constant - - - - - An input stream that decompresses files in the BZip2 format - - - - - Construct instance for reading from stream - - Data source - - - - Get/set flag indicating ownership of underlying stream. - When the flag is true will close the underlying stream also. - - - - - Gets a value indicating if the stream supports reading - - - - - Gets a value indicating whether the current stream supports seeking. - - - - - Gets a value indicating whether the current stream supports writing. - This property always returns false - - - - - Gets the length in bytes of the stream. - - - - - Gets or sets the streams position. - Setting the position is not supported and will throw a NotSupportException - - Any attempt to set the position - - - - Flushes the stream. - - - - - Set the streams position. This operation is not supported and will throw a NotSupportedException - - Any access - - - - Sets the length of this stream to the given value. - This operation is not supported and will throw a NotSupportedExceptionortedException - - Any access - - - - Writes a block of bytes to this stream using data from a buffer. - This operation is not supported and will throw a NotSupportedException - - Any access - - - - Writes a byte to the current position in the file stream. - This operation is not supported and will throw a NotSupportedException - - The value to write. - Any access - - - - Read a sequence of bytes and advances the read position by one byte. - - Array of bytes to store values in - Offset in array to begin storing data - The maximum number of bytes to read - The total number of bytes read into the buffer. This might be less - than the number of bytes requested if that number of bytes are not - currently available or zero if the end of the stream is reached. - - - - - Closes the stream, releasing any associated resources. - - - - - Read a byte from stream advancing position - - byte read or -1 on end of stream - - - - Interface to compute a data checksum used by checked input/output streams. - A data checksum can be updated by one byte or with a byte array. After each - update the value of the current checksum can be returned by calling - getValue. The complete checksum object can also be reset - so it can be used again with new data. - - - - - Returns the data checksum computed so far. - - - - - Resets the data checksum as if no update was ever called. - - - - - Adds one byte to the data checksum. - - - the data value to add. The high byte of the int is ignored. - - - - - Updates the data checksum with the bytes taken from the array. - - - buffer an array of bytes - - - - - Adds the byte array to the data checksum. - - - The buffer which contains the data - - - The offset in the buffer where the data starts - - - the number of data bytes to add. - - - - - Bzip2 checksum algorithm - - - - - Initialise a default instance of - - - - - Reset the state of Crc. - - - - - Get the current Crc value. - - - - - Update the Crc value. - - data update is based on - - - - Update Crc based on a block of data - - - - - Update Crc based on a portion of a block of data - - block of data - index of first byte to use - number of bytes to use - - - - Determines whether the close button is visible on the content - - - - - Determines the color with which the client rectangle will be drawn. - If you take this property instead of the BackColor it will not have any influence on the borders to the surrounding controls (DockPane). - If you use BackColor the borders to the surrounding controls (DockPane) will also change there colors. - Alternatively you can use both of them (BackColor to draw the define the color of the borders and DockBackColor to define the color of the client rectangle). - For Backgroundimages: Set your prefered Image, then set the DockBackColor and the BackColor to the same Color (Control) - - - - - DragHandlerBase is the base class for drag handlers. The derived class should: - 1. Define its public method BeginDrag. From within this public BeginDrag method, - DragHandlerBase.BeginDrag should be called to initialize the mouse capture - and message filtering. - 2. Override the OnDragging and OnEndDrag methods. - - - - - The skin to use when displaying the DockPanel. - The skin allows custom gradient color schemes to be used when drawing the - DockStrips and Tabs. - - - - - The skin used to display the auto hide strips and tabs. - - - - - The skin used to display the Document and ToolWindow style DockStrips and Tabs. - - - - - The skin used to display the auto hide strip and tabs. - - - - - The gradient color skin for the DockStrips. - - - - - The gradient color skin for the Tabs. - - - - - The skin used to display the document and tool strips and tabs. - - - - - The skin used to display the Document style DockPane strip and tab. - - - - - The skin used to display the ToolWindow style DockPane strip and tab. - - - - - The skin used to display the DockPane ToolWindow strip and tab. - - - - - The skin used to display the active ToolWindow caption. - - - - - The skin used to display the inactive ToolWindow caption. - - - - - The skin used to display the DockPane strip and tab. - - - - - The gradient color skin for the DockStrip. - - - - - The skin used to display the active DockPane tabs. - - - - - The skin used to display the inactive DockPane tabs. - - - - - The skin used to display the dock pane tab - - - - - The text color. - - - - - The gradient color skin. - - - - - The beginning gradient color. - - - - - The ending gradient color. - - - - - The gradient mode to display the colors. - - - - - The location to draw the DockPaneStrip for Document style windows. - - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized string similar to Docking. - - - - - Looks up a localized string similar to Docking Notification. - - - - - Looks up a localized string similar to Property Changed. - - - - - Looks up a localized string similar to (Float). - - - - - Looks up a localized string similar to Determines if end user drag and drop docking is allowed.. - - - - - Looks up a localized string similar to The size to display the content in auto hide mode. Value < 1 to specify the size in portion; value >= 1 to specify the size in pixel.. - - - - - Looks up a localized string similar to Enable/Disable the close button of the content.. - - - - - Looks up a localized string similar to Shows or hides the close button of the content. This property does not function with System MDI Document Style.. - - - - - Looks up a localized string similar to The form must be of type IDockContent.. - - - - - Looks up a localized string similar to Gets or sets a value indicating in which area of the DockPanel the content allowed to show.. - - - - - Looks up a localized string similar to Occurs when the value of DockState property changed.. - - - - - Looks up a localized string similar to Indicates the content will be hidden instead of being closed.. - - - - - Looks up a localized string similar to The desired docking state when first showing.. - - - - - Looks up a localized string similar to Context menu displayed for the dock pane tab strip.. - - - - - Looks up a localized string similar to The tab text displayed in the dock pane. If not set, the Text property will be used.. - - - - - Looks up a localized string similar to The text displayed when mouse hovers over the tab.. - - - - - Looks up a localized string similar to The provided value is out of range.. - - - - - Looks up a localized string similar to Invalid Value: The value of DockAreas conflicts with current DockState.. - - - - - Looks up a localized string similar to The pane is invalid. Check the IsFloat and DockPanel properties of this dock pane.. - - - - - Looks up a localized string similar to The pane is invalid. Check the IsFloat and DockPanel properties of this dock pane.. - - - - - Looks up a localized string similar to Invalid value, conflicts with DockableAreas property.. - - - - - Looks up a localized string similar to The dock state is invalid.. - - - - - Looks up a localized string similar to The dock panel is null.. - - - - - Looks up a localized string similar to Invalid beforeContent, it must be contained by the pane.. - - - - - Looks up a localized string similar to Invalid DockState: Content can not be showed as "Unknown" or "Hidden".. - - - - - Looks up a localized string similar to The previous pane is invalid. It can not be null, and its docking state must not be auto-hide.. - - - - - Looks up a localized string similar to DockPanel can not be null.. - - - - - Looks up a localized string similar to The Pane can not be null.. - - - - - Looks up a localized string similar to Invalid value, check DockableAreas property.. - - - - - Looks up a localized string similar to Context menu displayed for the dock pane tab strip.. - - - - - Looks up a localized string similar to Press SHIFT for docking to full side.. - - - - - Looks up a localized string similar to Invalid Content: ActiveContent must be one of the visible contents, or null if there is no visible content.. - - - - - Looks up a localized string similar to Invalid argument: Content can not be "null".. - - - - - Looks up a localized string similar to Invalid argument: The content's DockPanel can not be "null".. - - - - - Looks up a localized string similar to The specified container conflicts with the IsFloat property.. - - - - - Looks up a localized string similar to The previous pane does not exist in the nested docking pane collection.. - - - - - Looks up a localized string similar to The container can not be null.. - - - - - Looks up a localized string similar to The previous pane can not be null when the nested docking pane collection is not empty.. - - - - - Looks up a localized string similar to The previous pane can not be itself.. - - - - - Looks up a localized string similar to FloatWindow property can not be set to "null" when DockState is DockState.Float.. - - - - - Looks up a localized string similar to Invalid Content: Content not within the collection.. - - - - - Looks up a localized string similar to Invalid Index: The index is out of range.. - - - - - Looks up a localized string similar to The state for the dock pane is invalid.. - - - - - Looks up a localized string similar to Auto Hide. - - - - - Looks up a localized string similar to Close. - - - - - Looks up a localized string similar to Options. - - - - - Looks up a localized string similar to Invalid Content: The content must be auto-hide state and associates with this DockPanel.. - - - - - Looks up a localized string similar to Occurs when the value of ActiveContentProperty changed.. - - - - - Looks up a localized string similar to Occurs when the value of ActiveDocument property changed.. - - - - - Looks up a localized string similar to Occurs when the value of ActivePane property changed.. - - - - - Looks up a localized string similar to Determines if the drag and drop docking is allowed.. - - - - - Looks up a localized string similar to Determines if the drag and drop nested docking is allowed.. - - - - - Looks up a localized string similar to Occurs when a content added to the DockPanel.. - - - - - Looks up a localized string similar to Occurs when a content removed from the DockPanel.. - - - - - Looks up a localized string similar to The default size of float window.. - - - - - Looks up a localized string similar to Provides Visual Studio .Net style docking.. - - - - - Looks up a localized string similar to Size of the bottom docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels.. - - - - - Looks up a localized string similar to Size of the left docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels.. - - - - - Looks up a localized string similar to The visual skin to use when displaying the docked windows.. - - - - - Looks up a localized string similar to Size of the right docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels.. - - - - - Looks up a localized string similar to Size of the top docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels.. - - - - - Looks up a localized string similar to The style of the document window.. - - - - - Looks up a localized string similar to Determines where the tab strip for Document style content is drawn.. - - - - - Looks up a localized string similar to The DockPanel has already been initialized.. - - - - - Looks up a localized string similar to The configuration file's version is invalid.. - - - - - Looks up a localized string similar to The XML file format is invalid.. - - - - - Looks up a localized string similar to Invalid parent form. When using DockingMdi or SystemMdi document style, the DockPanel control must be the child control of the main MDI container form.. - - - - - Looks up a localized string similar to DockPanel configuration file. Author: Weifen Luo, all rights reserved.. - - - - - Looks up a localized string similar to !!! AUTOMATICALLY GENERATED FILE. DO NOT MODIFY !!!. - - - - - Looks up a localized string similar to Indicates whether the control layout is right-to-left when the RightToLeft property is set to Yes.. - - - - - Looks up a localized string similar to Invalid Index: The index is out of range.. - - - - - Looks up a localized string similar to Invalid Pane: DockPane not within the collection.. - - - - - Looks up a localized string similar to Determines if the document icon will be displayed in the tab strip.. - - - - - Looks up a localized string similar to Close. - - - - - Looks up a localized string similar to Window List. - - - - - Looks up a localized string similar to Invalid argument: DockPanel can not be "null".. - - - - - Looks up a localized string similar to Invalid Index: The index is out of range.. - - - - - Looks up a localized string similar to Invalid Pane: DockPane not within the collection.. - - - - - Looks up a localized string similar to Invalid DockPanel.. - - - - - Determines whether the close button is visible on the content - - - - - Calculate which tabs are displayed and in what order. - - - - - Data Grid View Printer. Print functions for a datagridview, since MS - didn't see fit to do it. - - - - - Title for this report. Default is empty. - - - - - Font for the title. Default is Tahoma, 18pt. - - - - - Foreground color for the title. Default is Black - - - - - Allow the user to override the title string alignment. Default value is - Alignment - Near; - - - - - Allow the user to override the title string format flags. Default values - are: FormatFlags - NoWrap, LineLimit, NoClip - - - - - SubTitle for this report. Default is empty. - - - - - Font for the subtitle. Default is Tahoma, 12pt. - - - - - Foreground color for the subtitle. Default is Black - - - - - Allow the user to override the subtitle string alignment. Default value is - Alignment - Near; - - - - - Allow the user to override the subtitle string format flags. Default values - are: FormatFlags - NoWrap, LineLimit, NoClip - - - - - footer for this report. Default is empty. - - - - - Font for the footer. Default is Tahoma, 10pt. - - - - - Foreground color for the footer. Default is Black - - - - - Allow the user to override the footer string alignment. Default value is - Alignment - Center; - - - - - Allow the user to override the footer string format flags. Default values - are: FormatFlags - NoWrap, LineLimit, NoClip - - - - - Include page number in the printout. Default is true. - - - - - Font for the page number, Default is Tahoma, 8pt. - - - - - Text color (foreground) for the page number. Default is Black - - - - - Allow the user to override the page number string alignment. Default value is - Alignment - Near; - - - - - Allow the user to override the pagenumber string format flags. Default values - are: FormatFlags - NoWrap, LineLimit, NoClip - - - - - Allow the user to select whether to have the page number at the top or bottom - of the page. Default is false: page numbers on the bottom of the page - - - - - Should the page number be printed on a separate line, or printed on the - same line as the header / footer? Default is false; - - - - - Page margins override. Default is (60, 60, 60, 60) - - - - - Constructor for PrinterHelper - - - - - Start the printing process, print to a printer. - - The EditForm to print - NOTE: Any changes to this method also need to be done in PrintPreviewEditForm - - - - Start the printing process, print to a print preview dialog - - The EditForm to print - NOTE: Any changes to this method also need to be done in PrintDataGridView - - - - Set up the print job. Save information from print dialog - and print document for easy access. Also sets up the rows - and columns that will be printed. - - The print dialog the user just filled out - - - - Centralize the string format settings. Does the work of checking for user - overrides, and if they're not present, setting the cell alignment to match - (somewhat) the source control's string alignment. - - String alignment - String format flags - DataGridView style to apply (if available) - True if user overrode alignment or flags - - - - - PrintPage event handler. This routine prints one page. It will - skip non-printable pages if the user selected the "some pages" option - on the print dialog. - - default object from windows - Event info from Windows about the printing - - - - Print a header or footer section. Used for page numbers and titles - - Graphic context to print in - Track vertical space used; 'y' location - String to print - Font to use for printing - Color to print in - Alignment - print to left, center or right - String format flags - True if the user overrode the alignment or flags - - - - Print the footer. This handles the footer spacing, and printing the page number - at the bottom of the page (if the page number is not in the header). - - Graphic context to print in - Track vertical space used; 'y' location - - - - Represents an object that performs a certain action asynchronously, by using an internal buffer queue - and one internal thread. - - - - Reference to the thread used to empty the queue - - - Internal queue that serves as buffer for required actions - - - Used to signal the thread when a new object is added to the queue - - - Flag that notifies that the object should be disposed - - - Creates a new buffered object - - - Method executed by the internal thread to empty the queue - - - The tasks being saved in the queue - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - This part of the SecondLife class initialises the constants for LSL. - - - This part of the SecondLife class contains the Event definitions. - - - This part of the SecondLife class contains the LSL function definitions. - - - This part of the SecondLife class contains the OSSL function definitions. - - - This part of the SecondLife class defines the Float struct. - - - Partial definition of SecondLife class to handle running scripts. - - - - - A struct for Float objects. - - - - - Stores the Float value. - - - - - Gets or sets the value of the Float. - - Gets or sets the objValue data member. - - - - Initialises a new instance of the struct. - - - - - - Initialises a new instance of the struct. - - - - - - No idea of the intention here ;-). - - The Float value as a 32 bit number. - - - - Converts the Float to a string representation. - - String representation of the Float. - - - - Converts the Float to a string representation. - - - String representation of the Float. - - - - Converts the Float to a string representation. - - - String representation of the Float. - - - - Creates a new instance of a Float from a string. - - - A new Float instance. - - - - Creates a new instance of a Float from a String. - - - A new Float instance. - - - - Creates a new instance of a Float from an Int32 . - - - A new Float instance. - - - - Creates a new instance of a Float from a long. - - - A new Float instance. - - - - Creates a new instance of a Float from a Double. - - - A new Float instance. - - - - Creates a new instance of a Float from an integer type. - - - A new Float instance. - - - - Calculates the result of multiplying a and b. - - - - The product of a and b. - - - - Calculates the result of dividing a by b. - - - - The result of dividing a by b. - - - - Calculates the result of incrementing the Float's value. - - - The result of incrementing the Float's value. - - - - Calculates the result of decrementing the Float's value. - - - The result of decrementing the Float's value. - - - - Calculates the result of adding a to b. - - - - The result of adding a to b. - - - - Calculates the result of subtracting a from b. - - - - The result of subtracting a from b. - - - - Casts the Float to a boolean. - - - A boolean value. - - - - Defines a boolean true value. - - - A boolean indicating whether the value is considered true. - - - - Defines a boolean false value. - - - A boolean indicating whether the value is considered false. - - - - Defines the equality operator. - - First operand. - Second operand. - A boolean value indicating equality. - - - - Defines the inequality operator. - - First operand. - Second operand. - A boolean value indicating inequality. - - - - Compares two Floats. - - First operand. - Second operand. - An integer (-1, 0, or 1), indicating whether the first item is less than, same as, or greater than the second. - - - - Defines the Equals operator. - - - A boolean value indicating equality. - - - - Holds the host object. - - - - - Random generator. - - - - - Holds the time of the script starting execution. - - - - - Contains a boolean value indicating whether this object accepts other items to be dropped into it. - - - - - Contains a list of keys of avatars that may enter a parcel. - - - - - Contains a list of keys of avatars that may NOT enter a parcel. - - - - - Volume of sound played by this prim. - - - - - Name of the object/prim. - - - - - URL for parcel's music stream. - - - - - Position of object/prim placement in a simulator. - - - - - Rotation of the object/prim's placement in the simulator. - - - - - Local rotation of the prim with respect to the object root. - - - - - Scale of the object/prim. - - - - - Text for the "Sit" entry on object menu. - - - - - Radius that sound may be heard around the object/prim. - - - - - Region Coordinates of the simulator's bottom-left corner. - - - - - Parameter passed to the script on start up. - - - - - Initialises a new instance of the class. - - - - - Gets the position of the object within the simulator. - - Gets the vPosition data member. - - - - Gets or sets the SecondLifeHost object. - - The host property gets/sets the slhHost data member. - - - - Outputs messages during execution of the script. - - The text (with possible placeholders) to be output. - Values to be put into corresponding placeholders. - - - - Wrapper to call the SecondLifeHost.Chat method. - - Channel for message to be sent on. - Text of message to send. - Type of communication (from CommunicationType enumerator). - - - - Method to trigger change in script state. - - Name of state to switch to. - - - - Takes the possibly negative value list indexes and corrects them to be absolute indexes. - - Length of list. - Start index. - End index. - True, unless an error occurred, then false. - - - - Randomly rearranges the list of items. - - List to shuffle. - The reordered list. - - - - Convert a list into an array of buckets containing Stride elements. - - List of items. - Number of element for each bucket. - The list separated into elements of Stride length. - - - - Converts buckets back into a list. - - Array of buckets. - Stride value. - The items recombined into a simple list. - - - - Implements the Comparer Interface for our custom types (Float, Integer, and String). - - - - - True/false parameter indicating whether the comparison should be done in ascending or descending order. - - - - - Initialises a new instance of the class. - - - - - - Perform the comparison between two objects. - - First object. - Second object. - An integer (-1, 0, or 1), indicating whether the first item is less than, same as, or greater than the second. - - - - Takes a string and splits it into a list based upon separators (which are not kept) and spacers (which are). - - The source text. - Separators to split on. - Spacers to split on. - True/false indicating whether nulls are kept in the resulting list. - A new list of the split string. - - - - Convert string to Base64 representation. - - Source string. - Base64 encoding of the source string. - - - - Converts Base64 encoded string back to UTF-8. - - Base64 encoded string. - UTF-8 string. - - - - Performs the lookup. - - String source. - Byte within string. - The Base64 value of the element. - - - - Pre-generated matrix for quicker lookup. - - - - - Performs (iA ** iB) % iC. - - Base value. - Exponent value . - Modulus value. - The calculated result. - - - - Performs the llModPow2() function. - - Value one. - Value two. - The modulus value. - The calculated result. - - - - Used by llListStatistics in generating the statistics. - - List of numbers (mixed types possible) to use. - The numbers added together as a Float type. - - - - Calculates the mean of the supplied numbers. - - Array of numbers. - The mean of the supplied numbers as a double type. - - - - Calculates standard deviation. - - Array of numbers to work with. - The standard deviation of the supplied numbers as a double type. - - - - Performs division, only if both values are non-zero. - - First number. - Second number. - The result of the division, or zero if not performed. - - - - Takes a hexadecimal representation of a number and coverts it to an integer. - - Byte to convert. - Integer value of the supplied byte. - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - The main entry point for the application. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Summary description for GroupboxTextbox. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - This Class translates LSL script into CSharp code - - LSL scripting code - CSHarp code - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Represents an event with a single string argument. - - - - - Stores the text of the message. - - - - - Initialises a new instance of the class. - - String Text. - - - - Represents a linked message event. - - - - - Stores the index of the sending link. - - - - - Stores a 32 bit numerical value. - - - - - Stores a text string. - - - - - Stores a key. - - - - - Initialises a new instance of the class. - - - - - - - - - Represents a chat event. - - - - - Stores the 32-bit number of the channel. - - - - - Stores the name of the object/avatar. - - - - - Stores the key of the objewct/avatar. - - - - - Stores the text of the message. - - - - - Stores the type of communication the event represents. - - - - - Initialises a new instance of the class. - - Channel to communicate on. Some communication types have channel limitations. - Name of object/avatar. - UUID of object/avatar. - Text of message. - Type of communication (CommunicationType enum). - - - - SecondLifeHost class. - - - - - Stores a list of ListenFilters - - - - - Stores a list of the links in an object. - - - - - Stores the SecondLife object representing the script. - - - - - not sure? - - - - - Flag indicating an event has occurred. - - - - - Stores and controls a thread?. - - - - - An editor form? - - - - - A compiled assembly of the LSL script. - - - - - Stores the path to the script (including script name). - - - - - Stores globally unique ID. - - - - - Stores SecondLifeHostMessageHandler function. - - Sender of message. - SecondLifeHostEventArgs object. - - - - OnVerboseMessage event handler. - - - - - OnStateChange event handler. - - - - - Stores SecondLifeHostChatHandler function. - - The sender. - SecondLifeHostChatEventArgs object. - - - - OnChat event handler. - - - - - Stores SecondLifeHostMessageLinkedHandler function. - - The caller. - SecondLifeHostMessageLinkedEventArgs object. - - - - OnMessageLinked event handler. - - - - - OnDie event handler. - - - - - OnReset event handler. - - - - - OnListenChannelsChanged event handler. - - - - - Stores a timer. - - - - - Stores the timer for a Sensor event. - - - - - Name of currently active state. - - - - - Name of state to switch to. - - - - - Name of the containing object/prim. - - - - - Description of the containing object/prim. - - - - - Initialises a new instance of the class. - - Editor form this host is atached to. - Assembly of the compiled script. - Full path (including file name) to the script. - UUID of the containing object? - - - - Performs the timer event? - - The caller. - ElapsedEventArgs object. - - - - Watches for the flag to switch state, and enacts the change when needed. - - - - - Raises the flag for switching state. If the Force argument is true it ensures a state change. - - - - - - - Initialises a new state. - - - - - Gets a methods arguments using reflection. - - - - - - - Runtime output of LSL event info. - - - - - - - Queue the method for execution. - - Some method (is it event or state?). - Array of arguments for the method. - - - - Fetches the names of all events (limited to current state?) in the script. - - List of events. - - - - Reset the script? - - - - - Stop executing the script. Resets the queue, timer etc. first. - - - - - Disposal method. Resets the Queue, Sensor, Timer, XMLRPC, etc. - - - - - The Link structure holds data used in Link Messaging. - - - - - Data - 32 bit integer. - - - - - Data - string. - - - - - Data - SL key. - - - - - Destination for the data. - - - - - Initialises a new instance of the type. - - 32 bit integer data. - string data. - SL key data. - Destination for the message. - - - - Resets the link list, "breaking" them. - - - - - Removes the specified Link from the list. - - The index number of the link to remove. - - - - Fetches the names of the ListenFilters. - - Array of ListenFilter names. - - - - ListenFilter type structure. - - - - - Channel to listen on. - - - - - Name of object/avatar to listen for. - - - - - Key of object/avatar to listen for. - - - - - Text from object/avatar to listen for. - - - - - Flag indicating whether this filter is enabled or not. - - - - - Initialises a new instance of the type. - - Channel to listen to (required). - Name to listen for (can be empty). - UUID to listen for (can be empty/null). - Text to listen for (can be empty). - - - - Control for a ListenFilter - - 32 bit integer handle of the ListenFilter. - Flag indicating whether to enable or disable. - - - - Removes a ListenFilter from the list. - - 32 bit integer handle of the ListenFilter. - - - - Creates a ListenFilter from the llListen paramters. - - Channel to listen ot. - Name of object/avatar to listen for. - Key of object/avatar to listen for. - Text from object/avatar to listen for. - 32 bit integer handle. - - - - Determines whether paremeters have a matching ListenFilter entry. - - - - - - True if a matche is found, otherwise false. - - - - // sink listen - - SecondLifeHostChatEventArgs object. - - - - Raise a chat event. - - - Channel to send message on. - Name of sender. - Key of sender. - Message to send. - CommunicatioType enumerator value. - - - - Raise a linked message event. - - - - - - - - - // sink - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Wiki sais this is not working in InWorld - - - - - - - - - - // Wiki sais currently disabled - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - provides methods to send email via smtp direct to mail server - http://www.ietf.org/rfc/rfc0821.txt - - - - - Get / Set the name of the SMTP mail server - - - - - OnTextChanged - - - - - Color a line - - - - - Enumeration of Communication Types that the host understands. - - - - - Indicates the message can be heard only within 5m. - - - - - Indicates the message can be heard only within 20m. - - - - - Indicates the message can be heard only within 100m. - - - - - Indicates the message can be only heard by the owner any where within the same simulator. - - - - - Indicates the message can be heard any where within the same simulator. - - - - - Indicates the message can be heard any where within the same simulator, by a specific object. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Required designer variable. - - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - diff --git a/trunk/About.Designer.cs b/source/About.Designer.cs similarity index 96% rename from trunk/About.Designer.cs rename to source/About.Designer.cs index 180ba9a..1737cf1 100644 --- a/trunk/About.Designer.cs +++ b/source/About.Designer.cs @@ -1,175 +1,175 @@ -namespace LSLEditor -{ - /// - /// About dialogue box form. - /// - public partial class About - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Container for LSLife picture. - /// - private System.Windows.Forms.PictureBox pictureBox1; - - /// - /// Container to hold all the elements. - /// - private System.Windows.Forms.GroupBox groupBox1; - - /// - /// OK Button. - /// - private System.Windows.Forms.Button button1; - - /// - /// Web Browser. - /// - private System.Windows.Forms.WebBrowser webBrowser1; - - /// - /// Link label. - /// - private System.Windows.Forms.LinkLabel linkLabel1; - - /// - /// Version label. - /// - private System.Windows.Forms.Label label1; - - /// - /// LSL Editor label. - /// - private System.Windows.Forms.Label label2; - - /// - /// Clean up any resources being used. - /// - /// True if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (this.components != null)) { - this.components.Dispose(); - } - - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.pictureBox1 = new System.Windows.Forms.PictureBox(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.label2 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.webBrowser1 = new System.Windows.Forms.WebBrowser(); - this.linkLabel1 = new System.Windows.Forms.LinkLabel(); - this.button1 = new System.Windows.Forms.Button(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); - this.groupBox1.SuspendLayout(); - this.SuspendLayout(); - // - // pictureBox1 - // - this.pictureBox1.Image = global::LSLEditor.Properties.Resources.logo; - this.pictureBox1.Location = new System.Drawing.Point(16, 16); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(184, 80); - this.pictureBox1.TabIndex = 0; - this.pictureBox1.TabStop = false; - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.label2); - this.groupBox1.Controls.Add(this.label1); - this.groupBox1.Controls.Add(this.webBrowser1); - this.groupBox1.Controls.Add(this.linkLabel1); - this.groupBox1.Controls.Add(this.pictureBox1); - this.groupBox1.Location = new System.Drawing.Point(16, 8); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(320, 360); - this.groupBox1.TabIndex = 1; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "LSL-Editor"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(72, 112); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(16, 13); - this.label2.TabIndex = 4; - this.label2.Text = "..."; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(16, 112); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(45, 13); - this.label1.TabIndex = 3; - this.label1.Text = "Version:"; - // - // webBrowser1 - // - this.webBrowser1.Location = new System.Drawing.Point(8, 128); - this.webBrowser1.MinimumSize = new System.Drawing.Size(20, 20); - this.webBrowser1.Name = "webBrowser1"; - this.webBrowser1.Size = new System.Drawing.Size(304, 224); - this.webBrowser1.TabIndex = 2; - // - // linkLabel1 - // - this.linkLabel1.AutoSize = true; - this.linkLabel1.Location = new System.Drawing.Point(16, 96); - this.linkLabel1.Name = "linkLabel1"; - this.linkLabel1.Size = new System.Drawing.Size(79, 13); - this.linkLabel1.TabIndex = 1; - this.linkLabel1.TabStop = true; - this.linkLabel1.Text = "© 2006 — 2012"; - this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); - // - // button1 - // - this.button1.Location = new System.Drawing.Point(240, 376); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(75, 23); - this.button1.TabIndex = 2; - this.button1.Text = "Ok"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // About - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.Color.White; - this.ClientSize = new System.Drawing.Size(352, 410); - this.Controls.Add(this.button1); - this.Controls.Add(this.groupBox1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "About"; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "About"; - this.Load += new System.EventHandler(this.About_Load); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - } -} +namespace LSLEditor +{ + /// + /// About dialogue box form. + /// + public partial class About + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Container for LSLife picture. + /// + private System.Windows.Forms.PictureBox pictureBox1; + + /// + /// Container to hold all the elements. + /// + private System.Windows.Forms.GroupBox groupBox1; + + /// + /// OK Button. + /// + private System.Windows.Forms.Button button1; + + /// + /// Web Browser. + /// + private System.Windows.Forms.WebBrowser webBrowser1; + + /// + /// Link label. + /// + private System.Windows.Forms.LinkLabel linkLabel1; + + /// + /// Version label. + /// + private System.Windows.Forms.Label label1; + + /// + /// LSL Editor label. + /// + private System.Windows.Forms.Label label2; + + /// + /// Clean up any resources being used. + /// + /// True if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (this.components != null)) { + this.components.Dispose(); + } + + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.webBrowser1 = new System.Windows.Forms.WebBrowser(); + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + this.button1 = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // pictureBox1 + // + this.pictureBox1.Image = global::LSLEditor.Properties.Resources.logo; + this.pictureBox1.Location = new System.Drawing.Point(16, 16); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(184, 80); + this.pictureBox1.TabIndex = 0; + this.pictureBox1.TabStop = false; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.webBrowser1); + this.groupBox1.Controls.Add(this.linkLabel1); + this.groupBox1.Controls.Add(this.pictureBox1); + this.groupBox1.Location = new System.Drawing.Point(16, 8); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(320, 360); + this.groupBox1.TabIndex = 1; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "LSL-Editor"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(72, 112); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(16, 13); + this.label2.TabIndex = 4; + this.label2.Text = "..."; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(16, 112); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(45, 13); + this.label1.TabIndex = 3; + this.label1.Text = "Version:"; + // + // webBrowser1 + // + this.webBrowser1.Location = new System.Drawing.Point(8, 128); + this.webBrowser1.MinimumSize = new System.Drawing.Size(20, 20); + this.webBrowser1.Name = "webBrowser1"; + this.webBrowser1.Size = new System.Drawing.Size(304, 224); + this.webBrowser1.TabIndex = 2; + // + // linkLabel1 + // + this.linkLabel1.AutoSize = true; + this.linkLabel1.Location = new System.Drawing.Point(16, 96); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(79, 13); + this.linkLabel1.TabIndex = 1; + this.linkLabel1.TabStop = true; + this.linkLabel1.Text = "© 2006 — 2012"; + this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(240, 376); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 2; + this.button1.Text = "Ok"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // About + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(352, 410); + this.Controls.Add(this.button1); + this.Controls.Add(this.groupBox1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "About"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "About"; + this.Load += new System.EventHandler(this.About_Load); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + } +} diff --git a/trunk/About.cs b/source/About.cs similarity index 97% rename from trunk/About.cs rename to source/About.cs index bd69ff2..f4cfea7 100644 --- a/trunk/About.cs +++ b/source/About.cs @@ -1,100 +1,100 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// About.cs -// Provides the code for the About dialogue -// - -using System; -using System.ComponentModel; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Reflection; -using System.Windows.Forms; - -namespace LSLEditor -{ - /// - /// About dialogue box form. - /// - public partial class About : Form - { - /// - /// Initialises a new instance of the class. - /// - /// The parent form. - [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1642:ConstructorSummaryDocumentationMustBeginWithStandardText", Justification = "Reviewed.")] - public About(LSLEditorForm parent) - { - this.InitializeComponent(); - - this.Icon = parent.Icon; - - string strVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); - this.label2.Text = strVersion; - } - - /// - /// OK/Close button. - /// - /// - /// - private void button1_Click(object sender, EventArgs e) - { - this.Close(); - } - - /// - /// Link to SourceForge page. - /// - /// - /// - private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - System.Diagnostics.Process.Start(Properties.Settings.Default.ContactUrl); - } - - /// - /// Loads the page. - /// - /// - /// - private void About_Load(object sender, EventArgs e) - { - string strExeFileName = Path.GetFileName(Assembly.GetExecutingAssembly().CodeBase); - this.webBrowser1.Navigate("res://" + strExeFileName + "/" + Properties.Settings.Default.About); - } - } +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// About.cs +// Provides the code for the About dialogue +// + +using System; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.IO; +using System.Reflection; +using System.Windows.Forms; + +namespace LSLEditor +{ + /// + /// About dialogue box form. + /// + public partial class About : Form + { + /// + /// Initialises a new instance of the class. + /// + /// The parent form. + [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1642:ConstructorSummaryDocumentationMustBeginWithStandardText", Justification = "Reviewed.")] + public About(LSLEditorForm parent) + { + this.InitializeComponent(); + + this.Icon = parent.Icon; + + string strVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); + this.label2.Text = strVersion; + } + + /// + /// OK/Close button. + /// + /// + /// + private void button1_Click(object sender, EventArgs e) + { + this.Close(); + } + + /// + /// Link to SourceForge page. + /// + /// + /// + private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + System.Diagnostics.Process.Start(Properties.Settings.Default.ContactUrl); + } + + /// + /// Loads the page. + /// + /// + /// + private void About_Load(object sender, EventArgs e) + { + string strExeFileName = Path.GetFileName(Assembly.GetExecutingAssembly().CodeBase); + this.webBrowser1.Navigate("res://" + strExeFileName + "/" + Properties.Settings.Default.About); + } + } } \ No newline at end of file diff --git a/trunk/About.resx b/source/About.resx similarity index 97% rename from trunk/About.resx rename to source/About.resx index ff31a6d..19dc0dd 100644 --- a/trunk/About.resx +++ b/source/About.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/trunk/App.ico b/source/App.ico similarity index 100% rename from trunk/App.ico rename to source/App.ico diff --git a/trunk/BZip2Decompress/BZip2.cs b/source/BZip2Decompress/BZip2.cs similarity index 97% rename from trunk/BZip2Decompress/BZip2.cs rename to source/BZip2Decompress/BZip2.cs index ceb6cc7..9adad89 100644 --- a/trunk/BZip2Decompress/BZip2.cs +++ b/source/BZip2Decompress/BZip2.cs @@ -1,63 +1,63 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.IO; - -// BZip2.Decompress(File.OpenRead("in"), File.Create("out")); - - -namespace LSLEditor.Decompressor -{ - public sealed class BZip2 - { - public static void Decompress(Stream inStream, Stream outStream) - { - using ( outStream ) { - using ( BZip2InputStream bzis = new BZip2InputStream(inStream) ) { - int ch = bzis.ReadByte(); - while (ch != -1) { - outStream.WriteByte((byte)ch); - ch = bzis.ReadByte(); - } - } - } - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.IO; + +// BZip2.Decompress(File.OpenRead("in"), File.Create("out")); + + +namespace LSLEditor.Decompressor +{ + public sealed class BZip2 + { + public static void Decompress(Stream inStream, Stream outStream) + { + using ( outStream ) { + using ( BZip2InputStream bzis = new BZip2InputStream(inStream) ) { + int ch = bzis.ReadByte(); + while (ch != -1) { + outStream.WriteByte((byte)ch); + ch = bzis.ReadByte(); + } + } + } + } + } +} diff --git a/trunk/BZip2Decompress/BZip2Constants.cs b/source/BZip2Decompress/BZip2Constants.cs similarity index 97% rename from trunk/BZip2Decompress/BZip2Constants.cs rename to source/BZip2Decompress/BZip2Constants.cs index 618c2cd..a936abe 100644 --- a/trunk/BZip2Decompress/BZip2Constants.cs +++ b/source/BZip2Decompress/BZip2Constants.cs @@ -1,161 +1,161 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -namespace LSLEditor.Decompressor -{ - - /// - /// Defines internal values for both compression and decompression - /// - public sealed class BZip2Constants - { - /// - /// Random numbers used to randomise repetitive blocks - /// - public readonly static int[] rNums = { - 619, 720, 127, 481, 931, 816, 813, 233, 566, 247, - 985, 724, 205, 454, 863, 491, 741, 242, 949, 214, - 733, 859, 335, 708, 621, 574, 73, 654, 730, 472, - 419, 436, 278, 496, 867, 210, 399, 680, 480, 51, - 878, 465, 811, 169, 869, 675, 611, 697, 867, 561, - 862, 687, 507, 283, 482, 129, 807, 591, 733, 623, - 150, 238, 59, 379, 684, 877, 625, 169, 643, 105, - 170, 607, 520, 932, 727, 476, 693, 425, 174, 647, - 73, 122, 335, 530, 442, 853, 695, 249, 445, 515, - 909, 545, 703, 919, 874, 474, 882, 500, 594, 612, - 641, 801, 220, 162, 819, 984, 589, 513, 495, 799, - 161, 604, 958, 533, 221, 400, 386, 867, 600, 782, - 382, 596, 414, 171, 516, 375, 682, 485, 911, 276, - 98, 553, 163, 354, 666, 933, 424, 341, 533, 870, - 227, 730, 475, 186, 263, 647, 537, 686, 600, 224, - 469, 68, 770, 919, 190, 373, 294, 822, 808, 206, - 184, 943, 795, 384, 383, 461, 404, 758, 839, 887, - 715, 67, 618, 276, 204, 918, 873, 777, 604, 560, - 951, 160, 578, 722, 79, 804, 96, 409, 713, 940, - 652, 934, 970, 447, 318, 353, 859, 672, 112, 785, - 645, 863, 803, 350, 139, 93, 354, 99, 820, 908, - 609, 772, 154, 274, 580, 184, 79, 626, 630, 742, - 653, 282, 762, 623, 680, 81, 927, 626, 789, 125, - 411, 521, 938, 300, 821, 78, 343, 175, 128, 250, - 170, 774, 972, 275, 999, 639, 495, 78, 352, 126, - 857, 956, 358, 619, 580, 124, 737, 594, 701, 612, - 669, 112, 134, 694, 363, 992, 809, 743, 168, 974, - 944, 375, 748, 52, 600, 747, 642, 182, 862, 81, - 344, 805, 988, 739, 511, 655, 814, 334, 249, 515, - 897, 955, 664, 981, 649, 113, 974, 459, 893, 228, - 433, 837, 553, 268, 926, 240, 102, 654, 459, 51, - 686, 754, 806, 760, 493, 403, 415, 394, 687, 700, - 946, 670, 656, 610, 738, 392, 760, 799, 887, 653, - 978, 321, 576, 617, 626, 502, 894, 679, 243, 440, - 680, 879, 194, 572, 640, 724, 926, 56, 204, 700, - 707, 151, 457, 449, 797, 195, 791, 558, 945, 679, - 297, 59, 87, 824, 713, 663, 412, 693, 342, 606, - 134, 108, 571, 364, 631, 212, 174, 643, 304, 329, - 343, 97, 430, 751, 497, 314, 983, 374, 822, 928, - 140, 206, 73, 263, 980, 736, 876, 478, 430, 305, - 170, 514, 364, 692, 829, 82, 855, 953, 676, 246, - 369, 970, 294, 750, 807, 827, 150, 790, 288, 923, - 804, 378, 215, 828, 592, 281, 565, 555, 710, 82, - 896, 831, 547, 261, 524, 462, 293, 465, 502, 56, - 661, 821, 976, 991, 658, 869, 905, 758, 745, 193, - 768, 550, 608, 933, 378, 286, 215, 979, 792, 961, - 61, 688, 793, 644, 986, 403, 106, 366, 905, 644, - 372, 567, 466, 434, 645, 210, 389, 550, 919, 135, - 780, 773, 635, 389, 707, 100, 626, 958, 165, 504, - 920, 176, 193, 713, 857, 265, 203, 50, 668, 108, - 645, 990, 626, 197, 510, 357, 358, 850, 858, 364, - 936, 638 - }; - - /// - /// When multiplied by compression parameter (1-9) gives the block size for compression - /// 9 gives the best compresssion but uses the most memory. - /// - public const int baseBlockSize = 100000; - - /// - /// Backend constant - /// - public const int MAX_ALPHA_SIZE = 258; - - /// - /// Backend constant - /// - public const int MAX_CODE_LEN = 23; - - /// - /// Backend constant - /// - public const int RUNA = 0; - - /// - /// Backend constant - /// - public const int RUNB = 1; - - /// - /// Backend constant - /// - public const int N_GROUPS = 6; - - /// - /// Backend constant - /// - public const int G_SIZE = 50; - - /// - /// Backend constant - /// - public const int N_ITERS = 4; - - /// - /// Backend constant - /// - public const int MAX_SELECTORS = (2 + (900000 / G_SIZE)); - - /// - /// Backend constant - /// - public const int NUM_OVERSHOOT_BYTES = 20; - - private BZip2Constants() - { - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +namespace LSLEditor.Decompressor +{ + + /// + /// Defines internal values for both compression and decompression + /// + public sealed class BZip2Constants + { + /// + /// Random numbers used to randomise repetitive blocks + /// + public readonly static int[] rNums = { + 619, 720, 127, 481, 931, 816, 813, 233, 566, 247, + 985, 724, 205, 454, 863, 491, 741, 242, 949, 214, + 733, 859, 335, 708, 621, 574, 73, 654, 730, 472, + 419, 436, 278, 496, 867, 210, 399, 680, 480, 51, + 878, 465, 811, 169, 869, 675, 611, 697, 867, 561, + 862, 687, 507, 283, 482, 129, 807, 591, 733, 623, + 150, 238, 59, 379, 684, 877, 625, 169, 643, 105, + 170, 607, 520, 932, 727, 476, 693, 425, 174, 647, + 73, 122, 335, 530, 442, 853, 695, 249, 445, 515, + 909, 545, 703, 919, 874, 474, 882, 500, 594, 612, + 641, 801, 220, 162, 819, 984, 589, 513, 495, 799, + 161, 604, 958, 533, 221, 400, 386, 867, 600, 782, + 382, 596, 414, 171, 516, 375, 682, 485, 911, 276, + 98, 553, 163, 354, 666, 933, 424, 341, 533, 870, + 227, 730, 475, 186, 263, 647, 537, 686, 600, 224, + 469, 68, 770, 919, 190, 373, 294, 822, 808, 206, + 184, 943, 795, 384, 383, 461, 404, 758, 839, 887, + 715, 67, 618, 276, 204, 918, 873, 777, 604, 560, + 951, 160, 578, 722, 79, 804, 96, 409, 713, 940, + 652, 934, 970, 447, 318, 353, 859, 672, 112, 785, + 645, 863, 803, 350, 139, 93, 354, 99, 820, 908, + 609, 772, 154, 274, 580, 184, 79, 626, 630, 742, + 653, 282, 762, 623, 680, 81, 927, 626, 789, 125, + 411, 521, 938, 300, 821, 78, 343, 175, 128, 250, + 170, 774, 972, 275, 999, 639, 495, 78, 352, 126, + 857, 956, 358, 619, 580, 124, 737, 594, 701, 612, + 669, 112, 134, 694, 363, 992, 809, 743, 168, 974, + 944, 375, 748, 52, 600, 747, 642, 182, 862, 81, + 344, 805, 988, 739, 511, 655, 814, 334, 249, 515, + 897, 955, 664, 981, 649, 113, 974, 459, 893, 228, + 433, 837, 553, 268, 926, 240, 102, 654, 459, 51, + 686, 754, 806, 760, 493, 403, 415, 394, 687, 700, + 946, 670, 656, 610, 738, 392, 760, 799, 887, 653, + 978, 321, 576, 617, 626, 502, 894, 679, 243, 440, + 680, 879, 194, 572, 640, 724, 926, 56, 204, 700, + 707, 151, 457, 449, 797, 195, 791, 558, 945, 679, + 297, 59, 87, 824, 713, 663, 412, 693, 342, 606, + 134, 108, 571, 364, 631, 212, 174, 643, 304, 329, + 343, 97, 430, 751, 497, 314, 983, 374, 822, 928, + 140, 206, 73, 263, 980, 736, 876, 478, 430, 305, + 170, 514, 364, 692, 829, 82, 855, 953, 676, 246, + 369, 970, 294, 750, 807, 827, 150, 790, 288, 923, + 804, 378, 215, 828, 592, 281, 565, 555, 710, 82, + 896, 831, 547, 261, 524, 462, 293, 465, 502, 56, + 661, 821, 976, 991, 658, 869, 905, 758, 745, 193, + 768, 550, 608, 933, 378, 286, 215, 979, 792, 961, + 61, 688, 793, 644, 986, 403, 106, 366, 905, 644, + 372, 567, 466, 434, 645, 210, 389, 550, 919, 135, + 780, 773, 635, 389, 707, 100, 626, 958, 165, 504, + 920, 176, 193, 713, 857, 265, 203, 50, 668, 108, + 645, 990, 626, 197, 510, 357, 358, 850, 858, 364, + 936, 638 + }; + + /// + /// When multiplied by compression parameter (1-9) gives the block size for compression + /// 9 gives the best compresssion but uses the most memory. + /// + public const int baseBlockSize = 100000; + + /// + /// Backend constant + /// + public const int MAX_ALPHA_SIZE = 258; + + /// + /// Backend constant + /// + public const int MAX_CODE_LEN = 23; + + /// + /// Backend constant + /// + public const int RUNA = 0; + + /// + /// Backend constant + /// + public const int RUNB = 1; + + /// + /// Backend constant + /// + public const int N_GROUPS = 6; + + /// + /// Backend constant + /// + public const int G_SIZE = 50; + + /// + /// Backend constant + /// + public const int N_ITERS = 4; + + /// + /// Backend constant + /// + public const int MAX_SELECTORS = (2 + (900000 / G_SIZE)); + + /// + /// Backend constant + /// + public const int NUM_OVERSHOOT_BYTES = 20; + + private BZip2Constants() + { + } + } +} diff --git a/trunk/BZip2Decompress/BZip2InputStream.cs b/source/BZip2Decompress/BZip2InputStream.cs similarity index 95% rename from trunk/BZip2Decompress/BZip2InputStream.cs rename to source/BZip2Decompress/BZip2InputStream.cs index c10b3e3..1f2123d 100644 --- a/trunk/BZip2Decompress/BZip2InputStream.cs +++ b/source/BZip2Decompress/BZip2InputStream.cs @@ -1,963 +1,963 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.IO; - -namespace LSLEditor.Decompressor -{ - - /// - /// An input stream that decompresses files in the BZip2 format - /// - public class BZip2InputStream : Stream - { - #region Constants - const int START_BLOCK_STATE = 1; - const int RAND_PART_A_STATE = 2; - const int RAND_PART_B_STATE = 3; - const int RAND_PART_C_STATE = 4; - const int NO_RAND_PART_A_STATE = 5; - const int NO_RAND_PART_B_STATE = 6; - const int NO_RAND_PART_C_STATE = 7; - #endregion - #region Constructors - /// - /// Construct instance for reading from stream - /// - /// Data source - public BZip2InputStream(Stream stream) - { - // init arrays - for (int i = 0; i < BZip2Constants.N_GROUPS; ++i) - { - limit[i] = new int[BZip2Constants.MAX_ALPHA_SIZE]; - baseArray[i] = new int[BZip2Constants.MAX_ALPHA_SIZE]; - perm[i] = new int[BZip2Constants.MAX_ALPHA_SIZE]; - } - - BsSetStream(stream); - Initialize(); - InitBlock(); - SetupBlock(); - } - - #endregion - - /// - /// Get/set flag indicating ownership of underlying stream. - /// When the flag is true will close the underlying stream also. - /// - public bool IsStreamOwner - { - get { return isStreamOwner; } - set { isStreamOwner = value; } - } - - - #region Stream Overrides - /// - /// Gets a value indicating if the stream supports reading - /// - public override bool CanRead - { - get { - return baseStream.CanRead; - } - } - - /// - /// Gets a value indicating whether the current stream supports seeking. - /// - public override bool CanSeek { - get { - return baseStream.CanSeek; - } - } - - /// - /// Gets a value indicating whether the current stream supports writing. - /// This property always returns false - /// - public override bool CanWrite { - get { - return false; - } - } - - /// - /// Gets the length in bytes of the stream. - /// - public override long Length { - get { - return baseStream.Length; - } - } - - /// - /// Gets or sets the streams position. - /// Setting the position is not supported and will throw a NotSupportException - /// - /// Any attempt to set the position - public override long Position { - get { - return baseStream.Position; - } - set { - throw new NotSupportedException("BZip2InputStream position cannot be set"); - } - } - - /// - /// Flushes the stream. - /// - public override void Flush() - { - if (baseStream != null) { - baseStream.Flush(); - } - } - - /// - /// Set the streams position. This operation is not supported and will throw a NotSupportedException - /// - /// Any access - public override long Seek(long offset, SeekOrigin origin) - { - throw new NotSupportedException("BZip2InputStream Seek not supported"); - } - - /// - /// Sets the length of this stream to the given value. - /// This operation is not supported and will throw a NotSupportedExceptionortedException - /// - /// Any access - public override void SetLength(long value) - { - throw new NotSupportedException("BZip2InputStream SetLength not supported"); - } - - /// - /// Writes a block of bytes to this stream using data from a buffer. - /// This operation is not supported and will throw a NotSupportedException - /// - /// Any access - public override void Write(byte[] buffer, int offset, int count) - { - throw new NotSupportedException("BZip2InputStream Write not supported"); - } - - /// - /// Writes a byte to the current position in the file stream. - /// This operation is not supported and will throw a NotSupportedException - /// - /// The value to write. - /// Any access - public override void WriteByte(byte value) - { - throw new NotSupportedException("BZip2InputStream WriteByte not supported"); - } - - /// - /// Read a sequence of bytes and advances the read position by one byte. - /// - /// Array of bytes to store values in - /// Offset in array to begin storing data - /// The maximum number of bytes to read - /// The total number of bytes read into the buffer. This might be less - /// than the number of bytes requested if that number of bytes are not - /// currently available or zero if the end of the stream is reached. - /// - public override int Read(byte[] buffer, int offset, int count) - { - if ( buffer == null ) - { - throw new ArgumentNullException("buffer"); - } - - for (int i = 0; i < count; ++i) { - int rb = ReadByte(); - if (rb == -1) { - return i; - } - buffer[offset + i] = (byte)rb; - } - return count; - } - - /// - /// Closes the stream, releasing any associated resources. - /// - public override void Close() - { - if ( IsStreamOwner && (baseStream != null) ) { - baseStream.Close(); - } - } - /// - /// Read a byte from stream advancing position - /// - /// byte read or -1 on end of stream - public override int ReadByte() - { - if (streamEnd) - { - return -1; // ok - } - - int retChar = currentChar; - switch (currentState) - { - case RAND_PART_B_STATE: - SetupRandPartB(); - break; - case RAND_PART_C_STATE: - SetupRandPartC(); - break; - case NO_RAND_PART_B_STATE: - SetupNoRandPartB(); - break; - case NO_RAND_PART_C_STATE: - SetupNoRandPartC(); - break; - case START_BLOCK_STATE: - case NO_RAND_PART_A_STATE: - case RAND_PART_A_STATE: - break; - default: - break; - } - return retChar; - } - - #endregion - - void MakeMaps() - { - nInUse = 0; - for (int i = 0; i < 256; ++i) { - if (inUse[i]) { - seqToUnseq[nInUse] = (byte)i; - unseqToSeq[i] = (byte)nInUse; - nInUse++; - } - } - } - - void Initialize() - { - char magic1 = BsGetUChar(); - char magic2 = BsGetUChar(); - - char magic3 = BsGetUChar(); - char magic4 = BsGetUChar(); - - if (magic1 != 'B' || magic2 != 'Z' || magic3 != 'h' || magic4 < '1' || magic4 > '9') { - streamEnd = true; - return; - } - - SetDecompressStructureSizes(magic4 - '0'); - computedCombinedCRC = 0; - } - - void InitBlock() - { - char magic1 = BsGetUChar(); - char magic2 = BsGetUChar(); - char magic3 = BsGetUChar(); - char magic4 = BsGetUChar(); - char magic5 = BsGetUChar(); - char magic6 = BsGetUChar(); - - if (magic1 == 0x17 && magic2 == 0x72 && magic3 == 0x45 && magic4 == 0x38 && magic5 == 0x50 && magic6 == 0x90) { - Complete(); - return; - } - - if (magic1 != 0x31 || magic2 != 0x41 || magic3 != 0x59 || magic4 != 0x26 || magic5 != 0x53 || magic6 != 0x59) { - BadBlockHeader(); - streamEnd = true; - return; - } - - storedBlockCRC = BsGetInt32(); - - blockRandomised = (BsR(1) == 1); - - GetAndMoveToFrontDecode(); - - mCrc.Reset(); - currentState = START_BLOCK_STATE; - } - - void EndBlock() - { - computedBlockCRC = (int)mCrc.Value; - - // -- A bad CRC is considered a fatal error. -- - if (storedBlockCRC != computedBlockCRC) { - CrcError(); - } - - // 1528150659 - computedCombinedCRC = ((computedCombinedCRC << 1) & 0xFFFFFFFF) | (computedCombinedCRC >> 31); - computedCombinedCRC = computedCombinedCRC ^ (uint)computedBlockCRC; - } - - void Complete() - { - storedCombinedCRC = BsGetInt32(); - if (storedCombinedCRC != (int)computedCombinedCRC) { - CrcError(); - } - - streamEnd = true; - } - - void BsSetStream(Stream stream) - { - baseStream = stream; - bsLive = 0; - bsBuff = 0; - } - - void FillBuffer() - { - int thech = 0; - - try { - thech = baseStream.ReadByte(); - } catch (Exception) { - CompressedStreamEOF(); - } - - if (thech == -1) { - CompressedStreamEOF(); - } - - bsBuff = (bsBuff << 8) | (thech & 0xFF); - bsLive += 8; - } - - int BsR(int n) - { - while (bsLive < n) { - FillBuffer(); - } - - int v = (bsBuff >> (bsLive - n)) & ((1 << n) - 1); - bsLive -= n; - return v; - } - - char BsGetUChar() - { - return (char)BsR(8); - } - - int BsGetint() - { - int u = BsR(8); - u = (u << 8) | BsR(8); - u = (u << 8) | BsR(8); - u = (u << 8) | BsR(8); - return u; - } - - int BsGetIntVS(int numBits) - { - return BsR(numBits); - } - - int BsGetInt32() - { - return BsGetint(); - } - - void RecvDecodingTables() - { - char[][] len = new char[BZip2Constants.N_GROUPS][]; - for (int i = 0; i < BZip2Constants.N_GROUPS; ++i) { - len[i] = new char[BZip2Constants.MAX_ALPHA_SIZE]; - } - - bool[] inUse16 = new bool[16]; - - //--- Receive the mapping table --- - for (int i = 0; i < 16; i++) { - inUse16[i] = (BsR(1) == 1); - } - - for (int i = 0; i < 16; i++) { - if (inUse16[i]) { - for (int j = 0; j < 16; j++) { - inUse[i * 16 + j] = (BsR(1) == 1); - } - } else { - for (int j = 0; j < 16; j++) { - inUse[i * 16 + j] = false; - } - } - } - - MakeMaps(); - int alphaSize = nInUse + 2; - - //--- Now the selectors --- - int nGroups = BsR(3); - int nSelectors = BsR(15); - - for (int i = 0; i < nSelectors; i++) { - int j = 0; - while (BsR(1) == 1) { - j++; - } - selectorMtf[i] = (byte)j; - } - - //--- Undo the MTF values for the selectors. --- - byte[] pos = new byte[BZip2Constants.N_GROUPS]; - for (int v = 0; v < nGroups; v++) { - pos[v] = (byte)v; - } - - for (int i = 0; i < nSelectors; i++) { - int v = selectorMtf[i]; - byte tmp = pos[v]; - while (v > 0) { - pos[v] = pos[v - 1]; - v--; - } - pos[0] = tmp; - selector[i] = tmp; - } - - //--- Now the coding tables --- - for (int t = 0; t < nGroups; t++) { - int curr = BsR(5); - for (int i = 0; i < alphaSize; i++) { - while (BsR(1) == 1) { - if (BsR(1) == 0) { - curr++; - } else { - curr--; - } - } - len[t][i] = (char)curr; - } - } - - //--- Create the Huffman decoding tables --- - for (int t = 0; t < nGroups; t++) { - int minLen = 32; - int maxLen = 0; - for (int i = 0; i < alphaSize; i++) { - maxLen = Math.Max(maxLen, len[t][i]); - minLen = Math.Min(minLen, len[t][i]); - } - HbCreateDecodeTables(limit[t], baseArray[t], perm[t], len[t], minLen, maxLen, alphaSize); - minLens[t] = minLen; - } - } - - void GetAndMoveToFrontDecode() - { - byte[] yy = new byte[256]; - int nextSym; - - int limitLast = BZip2Constants.baseBlockSize * blockSize100k; - origPtr = BsGetIntVS(24); - - RecvDecodingTables(); - int EOB = nInUse+1; - int groupNo = -1; - int groupPos = 0; - - /*-- - Setting up the unzftab entries here is not strictly - necessary, but it does save having to do it later - in a separate pass, and so saves a block's worth of - cache misses. - --*/ - for (int i = 0; i <= 255; i++) { - unzftab[i] = 0; - } - - for (int i = 0; i <= 255; i++) { - yy[i] = (byte)i; - } - - last = -1; - - if (groupPos == 0) { - groupNo++; - groupPos = BZip2Constants.G_SIZE; - } - - groupPos--; - int zt = selector[groupNo]; - int zn = minLens[zt]; - int zvec = BsR(zn); - int zj; - - while (zvec > limit[zt][zn]) { - if (zn > 20) { // the longest code - throw new Exception("Bzip data error"); - } - zn++; - while (bsLive < 1) { - FillBuffer(); - } - zj = (bsBuff >> (bsLive-1)) & 1; - bsLive--; - zvec = (zvec << 1) | zj; - } - if (zvec - baseArray[zt][zn] < 0 || zvec - baseArray[zt][zn] >= BZip2Constants.MAX_ALPHA_SIZE) { - throw new Exception("Bzip data error"); - } - nextSym = perm[zt][zvec - baseArray[zt][zn]]; - - while (true) { - if (nextSym == EOB) { - break; - } - - if (nextSym == BZip2Constants.RUNA || nextSym == BZip2Constants.RUNB) { - int s = -1; - int n = 1; - do { - if (nextSym == BZip2Constants.RUNA) { - s += (0 + 1) * n; - } else if (nextSym == BZip2Constants.RUNB) { - s += (1 + 1) * n; - } - - n <<= 1; - - if (groupPos == 0) { - groupNo++; - groupPos = BZip2Constants.G_SIZE; - } - - groupPos--; - - zt = selector[groupNo]; - zn = minLens[zt]; - zvec = BsR(zn); - - while (zvec > limit[zt][zn]) { - zn++; - while (bsLive < 1) { - FillBuffer(); - } - zj = (bsBuff >> (bsLive - 1)) & 1; - bsLive--; - zvec = (zvec << 1) | zj; - } - nextSym = perm[zt][zvec - baseArray[zt][zn]]; - } while (nextSym == BZip2Constants.RUNA || nextSym == BZip2Constants.RUNB); - - s++; - byte ch = seqToUnseq[yy[0]]; - unzftab[ch] += s; - - while (s > 0) { - last++; - ll8[last] = ch; - s--; - } - - if (last >= limitLast) { - BlockOverrun(); - } - continue; - } else { - last++; - if (last >= limitLast) { - BlockOverrun(); - } - - byte tmp = yy[nextSym - 1]; - unzftab[seqToUnseq[tmp]]++; - ll8[last] = seqToUnseq[tmp]; - - for (int j = nextSym-1; j > 0; --j) { - yy[j] = yy[j - 1]; - } - yy[0] = tmp; - - if (groupPos == 0) { - groupNo++; - groupPos = BZip2Constants.G_SIZE; - } - - groupPos--; - zt = selector[groupNo]; - zn = minLens[zt]; - zvec = BsR(zn); - while (zvec > limit[zt][zn]) { - zn++; - while (bsLive < 1) { - FillBuffer(); - } - zj = (bsBuff >> (bsLive-1)) & 1; - bsLive--; - zvec = (zvec << 1) | zj; - } - nextSym = perm[zt][zvec - baseArray[zt][zn]]; - continue; - } - } - } - - void SetupBlock() - { - int[] cftab = new int[257]; - - cftab[0] = 0; - Array.Copy(unzftab, 0, cftab, 1, 256); - - for (int i = 1; i <= 256; i++) { - cftab[i] += cftab[i - 1]; - } - - for (int i = 0; i <= last; i++) { - byte ch = ll8[i]; - tt[cftab[ch]] = i; - cftab[ch]++; - } - - cftab = null; - - tPos = tt[origPtr]; - - count = 0; - i2 = 0; - ch2 = 256; /*-- not a char and not EOF --*/ - - if (blockRandomised) { - rNToGo = 0; - rTPos = 0; - SetupRandPartA(); - } else { - SetupNoRandPartA(); - } - } - - void SetupRandPartA() - { - if (i2 <= last) { - chPrev = ch2; - ch2 = ll8[tPos]; - tPos = tt[tPos]; - if (rNToGo == 0) { - rNToGo = BZip2Constants.rNums[rTPos]; - rTPos++; - if (rTPos == 512) { - rTPos = 0; - } - } - rNToGo--; - ch2 ^= (int)((rNToGo == 1) ? 1 : 0); - i2++; - - currentChar = ch2; - currentState = RAND_PART_B_STATE; - mCrc.Update(ch2); - } else { - EndBlock(); - InitBlock(); - SetupBlock(); - } - } - - void SetupNoRandPartA() - { - if (i2 <= last) { - chPrev = ch2; - ch2 = ll8[tPos]; - tPos = tt[tPos]; - i2++; - - currentChar = ch2; - currentState = NO_RAND_PART_B_STATE; - mCrc.Update(ch2); - } else { - EndBlock(); - InitBlock(); - SetupBlock(); - } - } - - void SetupRandPartB() - { - if (ch2 != chPrev) { - currentState = RAND_PART_A_STATE; - count = 1; - SetupRandPartA(); - } else { - count++; - if (count >= 4) { - z = ll8[tPos]; - tPos = tt[tPos]; - if (rNToGo == 0) { - rNToGo = BZip2Constants.rNums[rTPos]; - rTPos++; - if (rTPos == 512) { - rTPos = 0; - } - } - rNToGo--; - z ^= (byte)((rNToGo == 1) ? 1 : 0); - j2 = 0; - currentState = RAND_PART_C_STATE; - SetupRandPartC(); - } else { - currentState = RAND_PART_A_STATE; - SetupRandPartA(); - } - } - } - - void SetupRandPartC() - { - if (j2 < (int)z) { - currentChar = ch2; - mCrc.Update(ch2); - j2++; - } else { - currentState = RAND_PART_A_STATE; - i2++; - count = 0; - SetupRandPartA(); - } - } - - void SetupNoRandPartB() - { - if (ch2 != chPrev) { - currentState = NO_RAND_PART_A_STATE; - count = 1; - SetupNoRandPartA(); - } else { - count++; - if (count >= 4) { - z = ll8[tPos]; - tPos = tt[tPos]; - currentState = NO_RAND_PART_C_STATE; - j2 = 0; - SetupNoRandPartC(); - } else { - currentState = NO_RAND_PART_A_STATE; - SetupNoRandPartA(); - } - } - } - - void SetupNoRandPartC() - { - if (j2 < (int)z) { - currentChar = ch2; - mCrc.Update(ch2); - j2++; - } else { - currentState = NO_RAND_PART_A_STATE; - i2++; - count = 0; - SetupNoRandPartA(); - } - } - - void SetDecompressStructureSizes(int newSize100k) - { - if (!(0 <= newSize100k && newSize100k <= 9 && 0 <= blockSize100k && blockSize100k <= 9)) { - throw new Exception("Invalid block size"); - } - - blockSize100k = newSize100k; - - if (newSize100k == 0) { - return; - } - - int n = BZip2Constants.baseBlockSize * newSize100k; - ll8 = new byte[n]; - tt = new int[n]; - } - - static void CompressedStreamEOF() - { - throw new Exception("BZip2 input stream end of compressed stream"); - } - - static void BlockOverrun() - { - throw new Exception("BZip2 input stream block overrun"); - } - - static void BadBlockHeader() - { - throw new Exception("BZip2 input stream bad block header"); - } - - static void CrcError() - { - throw new Exception("BZip2 input stream crc error"); - } - - static void HbCreateDecodeTables(int[] limit, int[] baseArray, int[] perm, char[] length, int minLen, int maxLen, int alphaSize) - { - int pp = 0; - - for (int i = minLen; i <= maxLen; ++i) - { - for (int j = 0; j < alphaSize; ++j) - { - if (length[j] == i) - { - perm[pp] = j; - ++pp; - } - } - } - - for (int i = 0; i < BZip2Constants.MAX_CODE_LEN; i++) - { - baseArray[i] = 0; - } - - for (int i = 0; i < alphaSize; i++) - { - ++baseArray[length[i] + 1]; - } - - for (int i = 1; i < BZip2Constants.MAX_CODE_LEN; i++) - { - baseArray[i] += baseArray[i - 1]; - } - - for (int i = 0; i < BZip2Constants.MAX_CODE_LEN; i++) - { - limit[i] = 0; - } - - int vec = 0; - - for (int i = minLen; i <= maxLen; i++) - { - vec += (baseArray[i + 1] - baseArray[i]); - limit[i] = vec - 1; - vec <<= 1; - } - - for (int i = minLen + 1; i <= maxLen; i++) - { - baseArray[i] = ((limit[i - 1] + 1) << 1) - baseArray[i]; - } - } - - #region Instance Fields - /*-- - index of the last char in the block, so - the block size == last + 1. - --*/ - int last; - - /*-- - index in zptr[] of original string after sorting. - --*/ - int origPtr; - - /*-- - always: in the range 0 .. 9. - The current block size is 100000 * this number. - --*/ - int blockSize100k; - - bool blockRandomised; - - int bsBuff; - int bsLive; - IChecksum mCrc = new StrangeCRC(); - - bool[] inUse = new bool[256]; - int nInUse; - - byte[] seqToUnseq = new byte[256]; - byte[] unseqToSeq = new byte[256]; - - byte[] selector = new byte[BZip2Constants.MAX_SELECTORS]; - byte[] selectorMtf = new byte[BZip2Constants.MAX_SELECTORS]; - - int[] tt; - byte[] ll8; - - /*-- - freq table collected to save a pass over the data - during decompression. - --*/ - int[] unzftab = new int[256]; - - int[][] limit = new int[BZip2Constants.N_GROUPS][]; - int[][] baseArray = new int[BZip2Constants.N_GROUPS][]; - int[][] perm = new int[BZip2Constants.N_GROUPS][]; - int[] minLens = new int[BZip2Constants.N_GROUPS]; - - Stream baseStream; - bool streamEnd; - - int currentChar = -1; - - int currentState = START_BLOCK_STATE; - - int storedBlockCRC, storedCombinedCRC; - int computedBlockCRC; - uint computedCombinedCRC; - - int count, chPrev, ch2; - int tPos; - int rNToGo; - int rTPos; - int i2, j2; - byte z; - bool isStreamOwner = true; - #endregion - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.IO; + +namespace LSLEditor.Decompressor +{ + + /// + /// An input stream that decompresses files in the BZip2 format + /// + public class BZip2InputStream : Stream + { + #region Constants + const int START_BLOCK_STATE = 1; + const int RAND_PART_A_STATE = 2; + const int RAND_PART_B_STATE = 3; + const int RAND_PART_C_STATE = 4; + const int NO_RAND_PART_A_STATE = 5; + const int NO_RAND_PART_B_STATE = 6; + const int NO_RAND_PART_C_STATE = 7; + #endregion + #region Constructors + /// + /// Construct instance for reading from stream + /// + /// Data source + public BZip2InputStream(Stream stream) + { + // init arrays + for (int i = 0; i < BZip2Constants.N_GROUPS; ++i) + { + limit[i] = new int[BZip2Constants.MAX_ALPHA_SIZE]; + baseArray[i] = new int[BZip2Constants.MAX_ALPHA_SIZE]; + perm[i] = new int[BZip2Constants.MAX_ALPHA_SIZE]; + } + + BsSetStream(stream); + Initialize(); + InitBlock(); + SetupBlock(); + } + + #endregion + + /// + /// Get/set flag indicating ownership of underlying stream. + /// When the flag is true will close the underlying stream also. + /// + public bool IsStreamOwner + { + get { return isStreamOwner; } + set { isStreamOwner = value; } + } + + + #region Stream Overrides + /// + /// Gets a value indicating if the stream supports reading + /// + public override bool CanRead + { + get { + return baseStream.CanRead; + } + } + + /// + /// Gets a value indicating whether the current stream supports seeking. + /// + public override bool CanSeek { + get { + return baseStream.CanSeek; + } + } + + /// + /// Gets a value indicating whether the current stream supports writing. + /// This property always returns false + /// + public override bool CanWrite { + get { + return false; + } + } + + /// + /// Gets the length in bytes of the stream. + /// + public override long Length { + get { + return baseStream.Length; + } + } + + /// + /// Gets or sets the streams position. + /// Setting the position is not supported and will throw a NotSupportException + /// + /// Any attempt to set the position + public override long Position { + get { + return baseStream.Position; + } + set { + throw new NotSupportedException("BZip2InputStream position cannot be set"); + } + } + + /// + /// Flushes the stream. + /// + public override void Flush() + { + if (baseStream != null) { + baseStream.Flush(); + } + } + + /// + /// Set the streams position. This operation is not supported and will throw a NotSupportedException + /// + /// Any access + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException("BZip2InputStream Seek not supported"); + } + + /// + /// Sets the length of this stream to the given value. + /// This operation is not supported and will throw a NotSupportedExceptionortedException + /// + /// Any access + public override void SetLength(long value) + { + throw new NotSupportedException("BZip2InputStream SetLength not supported"); + } + + /// + /// Writes a block of bytes to this stream using data from a buffer. + /// This operation is not supported and will throw a NotSupportedException + /// + /// Any access + public override void Write(byte[] buffer, int offset, int count) + { + throw new NotSupportedException("BZip2InputStream Write not supported"); + } + + /// + /// Writes a byte to the current position in the file stream. + /// This operation is not supported and will throw a NotSupportedException + /// + /// The value to write. + /// Any access + public override void WriteByte(byte value) + { + throw new NotSupportedException("BZip2InputStream WriteByte not supported"); + } + + /// + /// Read a sequence of bytes and advances the read position by one byte. + /// + /// Array of bytes to store values in + /// Offset in array to begin storing data + /// The maximum number of bytes to read + /// The total number of bytes read into the buffer. This might be less + /// than the number of bytes requested if that number of bytes are not + /// currently available or zero if the end of the stream is reached. + /// + public override int Read(byte[] buffer, int offset, int count) + { + if ( buffer == null ) + { + throw new ArgumentNullException("buffer"); + } + + for (int i = 0; i < count; ++i) { + int rb = ReadByte(); + if (rb == -1) { + return i; + } + buffer[offset + i] = (byte)rb; + } + return count; + } + + /// + /// Closes the stream, releasing any associated resources. + /// + public override void Close() + { + if ( IsStreamOwner && (baseStream != null) ) { + baseStream.Close(); + } + } + /// + /// Read a byte from stream advancing position + /// + /// byte read or -1 on end of stream + public override int ReadByte() + { + if (streamEnd) + { + return -1; // ok + } + + int retChar = currentChar; + switch (currentState) + { + case RAND_PART_B_STATE: + SetupRandPartB(); + break; + case RAND_PART_C_STATE: + SetupRandPartC(); + break; + case NO_RAND_PART_B_STATE: + SetupNoRandPartB(); + break; + case NO_RAND_PART_C_STATE: + SetupNoRandPartC(); + break; + case START_BLOCK_STATE: + case NO_RAND_PART_A_STATE: + case RAND_PART_A_STATE: + break; + default: + break; + } + return retChar; + } + + #endregion + + void MakeMaps() + { + nInUse = 0; + for (int i = 0; i < 256; ++i) { + if (inUse[i]) { + seqToUnseq[nInUse] = (byte)i; + unseqToSeq[i] = (byte)nInUse; + nInUse++; + } + } + } + + void Initialize() + { + char magic1 = BsGetUChar(); + char magic2 = BsGetUChar(); + + char magic3 = BsGetUChar(); + char magic4 = BsGetUChar(); + + if (magic1 != 'B' || magic2 != 'Z' || magic3 != 'h' || magic4 < '1' || magic4 > '9') { + streamEnd = true; + return; + } + + SetDecompressStructureSizes(magic4 - '0'); + computedCombinedCRC = 0; + } + + void InitBlock() + { + char magic1 = BsGetUChar(); + char magic2 = BsGetUChar(); + char magic3 = BsGetUChar(); + char magic4 = BsGetUChar(); + char magic5 = BsGetUChar(); + char magic6 = BsGetUChar(); + + if (magic1 == 0x17 && magic2 == 0x72 && magic3 == 0x45 && magic4 == 0x38 && magic5 == 0x50 && magic6 == 0x90) { + Complete(); + return; + } + + if (magic1 != 0x31 || magic2 != 0x41 || magic3 != 0x59 || magic4 != 0x26 || magic5 != 0x53 || magic6 != 0x59) { + BadBlockHeader(); + streamEnd = true; + return; + } + + storedBlockCRC = BsGetInt32(); + + blockRandomised = (BsR(1) == 1); + + GetAndMoveToFrontDecode(); + + mCrc.Reset(); + currentState = START_BLOCK_STATE; + } + + void EndBlock() + { + computedBlockCRC = (int)mCrc.Value; + + // -- A bad CRC is considered a fatal error. -- + if (storedBlockCRC != computedBlockCRC) { + CrcError(); + } + + // 1528150659 + computedCombinedCRC = ((computedCombinedCRC << 1) & 0xFFFFFFFF) | (computedCombinedCRC >> 31); + computedCombinedCRC = computedCombinedCRC ^ (uint)computedBlockCRC; + } + + void Complete() + { + storedCombinedCRC = BsGetInt32(); + if (storedCombinedCRC != (int)computedCombinedCRC) { + CrcError(); + } + + streamEnd = true; + } + + void BsSetStream(Stream stream) + { + baseStream = stream; + bsLive = 0; + bsBuff = 0; + } + + void FillBuffer() + { + int thech = 0; + + try { + thech = baseStream.ReadByte(); + } catch (Exception) { + CompressedStreamEOF(); + } + + if (thech == -1) { + CompressedStreamEOF(); + } + + bsBuff = (bsBuff << 8) | (thech & 0xFF); + bsLive += 8; + } + + int BsR(int n) + { + while (bsLive < n) { + FillBuffer(); + } + + int v = (bsBuff >> (bsLive - n)) & ((1 << n) - 1); + bsLive -= n; + return v; + } + + char BsGetUChar() + { + return (char)BsR(8); + } + + int BsGetint() + { + int u = BsR(8); + u = (u << 8) | BsR(8); + u = (u << 8) | BsR(8); + u = (u << 8) | BsR(8); + return u; + } + + int BsGetIntVS(int numBits) + { + return BsR(numBits); + } + + int BsGetInt32() + { + return BsGetint(); + } + + void RecvDecodingTables() + { + char[][] len = new char[BZip2Constants.N_GROUPS][]; + for (int i = 0; i < BZip2Constants.N_GROUPS; ++i) { + len[i] = new char[BZip2Constants.MAX_ALPHA_SIZE]; + } + + bool[] inUse16 = new bool[16]; + + //--- Receive the mapping table --- + for (int i = 0; i < 16; i++) { + inUse16[i] = (BsR(1) == 1); + } + + for (int i = 0; i < 16; i++) { + if (inUse16[i]) { + for (int j = 0; j < 16; j++) { + inUse[i * 16 + j] = (BsR(1) == 1); + } + } else { + for (int j = 0; j < 16; j++) { + inUse[i * 16 + j] = false; + } + } + } + + MakeMaps(); + int alphaSize = nInUse + 2; + + //--- Now the selectors --- + int nGroups = BsR(3); + int nSelectors = BsR(15); + + for (int i = 0; i < nSelectors; i++) { + int j = 0; + while (BsR(1) == 1) { + j++; + } + selectorMtf[i] = (byte)j; + } + + //--- Undo the MTF values for the selectors. --- + byte[] pos = new byte[BZip2Constants.N_GROUPS]; + for (int v = 0; v < nGroups; v++) { + pos[v] = (byte)v; + } + + for (int i = 0; i < nSelectors; i++) { + int v = selectorMtf[i]; + byte tmp = pos[v]; + while (v > 0) { + pos[v] = pos[v - 1]; + v--; + } + pos[0] = tmp; + selector[i] = tmp; + } + + //--- Now the coding tables --- + for (int t = 0; t < nGroups; t++) { + int curr = BsR(5); + for (int i = 0; i < alphaSize; i++) { + while (BsR(1) == 1) { + if (BsR(1) == 0) { + curr++; + } else { + curr--; + } + } + len[t][i] = (char)curr; + } + } + + //--- Create the Huffman decoding tables --- + for (int t = 0; t < nGroups; t++) { + int minLen = 32; + int maxLen = 0; + for (int i = 0; i < alphaSize; i++) { + maxLen = Math.Max(maxLen, len[t][i]); + minLen = Math.Min(minLen, len[t][i]); + } + HbCreateDecodeTables(limit[t], baseArray[t], perm[t], len[t], minLen, maxLen, alphaSize); + minLens[t] = minLen; + } + } + + void GetAndMoveToFrontDecode() + { + byte[] yy = new byte[256]; + int nextSym; + + int limitLast = BZip2Constants.baseBlockSize * blockSize100k; + origPtr = BsGetIntVS(24); + + RecvDecodingTables(); + int EOB = nInUse+1; + int groupNo = -1; + int groupPos = 0; + + /*-- + Setting up the unzftab entries here is not strictly + necessary, but it does save having to do it later + in a separate pass, and so saves a block's worth of + cache misses. + --*/ + for (int i = 0; i <= 255; i++) { + unzftab[i] = 0; + } + + for (int i = 0; i <= 255; i++) { + yy[i] = (byte)i; + } + + last = -1; + + if (groupPos == 0) { + groupNo++; + groupPos = BZip2Constants.G_SIZE; + } + + groupPos--; + int zt = selector[groupNo]; + int zn = minLens[zt]; + int zvec = BsR(zn); + int zj; + + while (zvec > limit[zt][zn]) { + if (zn > 20) { // the longest code + throw new Exception("Bzip data error"); + } + zn++; + while (bsLive < 1) { + FillBuffer(); + } + zj = (bsBuff >> (bsLive-1)) & 1; + bsLive--; + zvec = (zvec << 1) | zj; + } + if (zvec - baseArray[zt][zn] < 0 || zvec - baseArray[zt][zn] >= BZip2Constants.MAX_ALPHA_SIZE) { + throw new Exception("Bzip data error"); + } + nextSym = perm[zt][zvec - baseArray[zt][zn]]; + + while (true) { + if (nextSym == EOB) { + break; + } + + if (nextSym == BZip2Constants.RUNA || nextSym == BZip2Constants.RUNB) { + int s = -1; + int n = 1; + do { + if (nextSym == BZip2Constants.RUNA) { + s += (0 + 1) * n; + } else if (nextSym == BZip2Constants.RUNB) { + s += (1 + 1) * n; + } + + n <<= 1; + + if (groupPos == 0) { + groupNo++; + groupPos = BZip2Constants.G_SIZE; + } + + groupPos--; + + zt = selector[groupNo]; + zn = minLens[zt]; + zvec = BsR(zn); + + while (zvec > limit[zt][zn]) { + zn++; + while (bsLive < 1) { + FillBuffer(); + } + zj = (bsBuff >> (bsLive - 1)) & 1; + bsLive--; + zvec = (zvec << 1) | zj; + } + nextSym = perm[zt][zvec - baseArray[zt][zn]]; + } while (nextSym == BZip2Constants.RUNA || nextSym == BZip2Constants.RUNB); + + s++; + byte ch = seqToUnseq[yy[0]]; + unzftab[ch] += s; + + while (s > 0) { + last++; + ll8[last] = ch; + s--; + } + + if (last >= limitLast) { + BlockOverrun(); + } + continue; + } else { + last++; + if (last >= limitLast) { + BlockOverrun(); + } + + byte tmp = yy[nextSym - 1]; + unzftab[seqToUnseq[tmp]]++; + ll8[last] = seqToUnseq[tmp]; + + for (int j = nextSym-1; j > 0; --j) { + yy[j] = yy[j - 1]; + } + yy[0] = tmp; + + if (groupPos == 0) { + groupNo++; + groupPos = BZip2Constants.G_SIZE; + } + + groupPos--; + zt = selector[groupNo]; + zn = minLens[zt]; + zvec = BsR(zn); + while (zvec > limit[zt][zn]) { + zn++; + while (bsLive < 1) { + FillBuffer(); + } + zj = (bsBuff >> (bsLive-1)) & 1; + bsLive--; + zvec = (zvec << 1) | zj; + } + nextSym = perm[zt][zvec - baseArray[zt][zn]]; + continue; + } + } + } + + void SetupBlock() + { + int[] cftab = new int[257]; + + cftab[0] = 0; + Array.Copy(unzftab, 0, cftab, 1, 256); + + for (int i = 1; i <= 256; i++) { + cftab[i] += cftab[i - 1]; + } + + for (int i = 0; i <= last; i++) { + byte ch = ll8[i]; + tt[cftab[ch]] = i; + cftab[ch]++; + } + + cftab = null; + + tPos = tt[origPtr]; + + count = 0; + i2 = 0; + ch2 = 256; /*-- not a char and not EOF --*/ + + if (blockRandomised) { + rNToGo = 0; + rTPos = 0; + SetupRandPartA(); + } else { + SetupNoRandPartA(); + } + } + + void SetupRandPartA() + { + if (i2 <= last) { + chPrev = ch2; + ch2 = ll8[tPos]; + tPos = tt[tPos]; + if (rNToGo == 0) { + rNToGo = BZip2Constants.rNums[rTPos]; + rTPos++; + if (rTPos == 512) { + rTPos = 0; + } + } + rNToGo--; + ch2 ^= (int)((rNToGo == 1) ? 1 : 0); + i2++; + + currentChar = ch2; + currentState = RAND_PART_B_STATE; + mCrc.Update(ch2); + } else { + EndBlock(); + InitBlock(); + SetupBlock(); + } + } + + void SetupNoRandPartA() + { + if (i2 <= last) { + chPrev = ch2; + ch2 = ll8[tPos]; + tPos = tt[tPos]; + i2++; + + currentChar = ch2; + currentState = NO_RAND_PART_B_STATE; + mCrc.Update(ch2); + } else { + EndBlock(); + InitBlock(); + SetupBlock(); + } + } + + void SetupRandPartB() + { + if (ch2 != chPrev) { + currentState = RAND_PART_A_STATE; + count = 1; + SetupRandPartA(); + } else { + count++; + if (count >= 4) { + z = ll8[tPos]; + tPos = tt[tPos]; + if (rNToGo == 0) { + rNToGo = BZip2Constants.rNums[rTPos]; + rTPos++; + if (rTPos == 512) { + rTPos = 0; + } + } + rNToGo--; + z ^= (byte)((rNToGo == 1) ? 1 : 0); + j2 = 0; + currentState = RAND_PART_C_STATE; + SetupRandPartC(); + } else { + currentState = RAND_PART_A_STATE; + SetupRandPartA(); + } + } + } + + void SetupRandPartC() + { + if (j2 < (int)z) { + currentChar = ch2; + mCrc.Update(ch2); + j2++; + } else { + currentState = RAND_PART_A_STATE; + i2++; + count = 0; + SetupRandPartA(); + } + } + + void SetupNoRandPartB() + { + if (ch2 != chPrev) { + currentState = NO_RAND_PART_A_STATE; + count = 1; + SetupNoRandPartA(); + } else { + count++; + if (count >= 4) { + z = ll8[tPos]; + tPos = tt[tPos]; + currentState = NO_RAND_PART_C_STATE; + j2 = 0; + SetupNoRandPartC(); + } else { + currentState = NO_RAND_PART_A_STATE; + SetupNoRandPartA(); + } + } + } + + void SetupNoRandPartC() + { + if (j2 < (int)z) { + currentChar = ch2; + mCrc.Update(ch2); + j2++; + } else { + currentState = NO_RAND_PART_A_STATE; + i2++; + count = 0; + SetupNoRandPartA(); + } + } + + void SetDecompressStructureSizes(int newSize100k) + { + if (!(0 <= newSize100k && newSize100k <= 9 && 0 <= blockSize100k && blockSize100k <= 9)) { + throw new Exception("Invalid block size"); + } + + blockSize100k = newSize100k; + + if (newSize100k == 0) { + return; + } + + int n = BZip2Constants.baseBlockSize * newSize100k; + ll8 = new byte[n]; + tt = new int[n]; + } + + static void CompressedStreamEOF() + { + throw new Exception("BZip2 input stream end of compressed stream"); + } + + static void BlockOverrun() + { + throw new Exception("BZip2 input stream block overrun"); + } + + static void BadBlockHeader() + { + throw new Exception("BZip2 input stream bad block header"); + } + + static void CrcError() + { + throw new Exception("BZip2 input stream crc error"); + } + + static void HbCreateDecodeTables(int[] limit, int[] baseArray, int[] perm, char[] length, int minLen, int maxLen, int alphaSize) + { + int pp = 0; + + for (int i = minLen; i <= maxLen; ++i) + { + for (int j = 0; j < alphaSize; ++j) + { + if (length[j] == i) + { + perm[pp] = j; + ++pp; + } + } + } + + for (int i = 0; i < BZip2Constants.MAX_CODE_LEN; i++) + { + baseArray[i] = 0; + } + + for (int i = 0; i < alphaSize; i++) + { + ++baseArray[length[i] + 1]; + } + + for (int i = 1; i < BZip2Constants.MAX_CODE_LEN; i++) + { + baseArray[i] += baseArray[i - 1]; + } + + for (int i = 0; i < BZip2Constants.MAX_CODE_LEN; i++) + { + limit[i] = 0; + } + + int vec = 0; + + for (int i = minLen; i <= maxLen; i++) + { + vec += (baseArray[i + 1] - baseArray[i]); + limit[i] = vec - 1; + vec <<= 1; + } + + for (int i = minLen + 1; i <= maxLen; i++) + { + baseArray[i] = ((limit[i - 1] + 1) << 1) - baseArray[i]; + } + } + + #region Instance Fields + /*-- + index of the last char in the block, so + the block size == last + 1. + --*/ + int last; + + /*-- + index in zptr[] of original string after sorting. + --*/ + int origPtr; + + /*-- + always: in the range 0 .. 9. + The current block size is 100000 * this number. + --*/ + int blockSize100k; + + bool blockRandomised; + + int bsBuff; + int bsLive; + IChecksum mCrc = new StrangeCRC(); + + bool[] inUse = new bool[256]; + int nInUse; + + byte[] seqToUnseq = new byte[256]; + byte[] unseqToSeq = new byte[256]; + + byte[] selector = new byte[BZip2Constants.MAX_SELECTORS]; + byte[] selectorMtf = new byte[BZip2Constants.MAX_SELECTORS]; + + int[] tt; + byte[] ll8; + + /*-- + freq table collected to save a pass over the data + during decompression. + --*/ + int[] unzftab = new int[256]; + + int[][] limit = new int[BZip2Constants.N_GROUPS][]; + int[][] baseArray = new int[BZip2Constants.N_GROUPS][]; + int[][] perm = new int[BZip2Constants.N_GROUPS][]; + int[] minLens = new int[BZip2Constants.N_GROUPS]; + + Stream baseStream; + bool streamEnd; + + int currentChar = -1; + + int currentState = START_BLOCK_STATE; + + int storedBlockCRC, storedCombinedCRC; + int computedBlockCRC; + uint computedCombinedCRC; + + int count, chPrev, ch2; + int tPos; + int rNToGo; + int rTPos; + int i2, j2; + byte z; + bool isStreamOwner = true; + #endregion + } +} diff --git a/trunk/BZip2Decompress/IChecksum.cs b/source/BZip2Decompress/IChecksum.cs similarity index 97% rename from trunk/BZip2Decompress/IChecksum.cs rename to source/BZip2Decompress/IChecksum.cs index 87213f8..4a82d7b 100644 --- a/trunk/BZip2Decompress/IChecksum.cs +++ b/source/BZip2Decompress/IChecksum.cs @@ -1,93 +1,93 @@ -// IChecksum.cs - Interface to compute a data checksum -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -namespace LSLEditor.Decompressor -{ - - /// - /// Interface to compute a data checksum used by checked input/output streams. - /// A data checksum can be updated by one byte or with a byte array. After each - /// update the value of the current checksum can be returned by calling - /// getValue. The complete checksum object can also be reset - /// so it can be used again with new data. - /// - public interface IChecksum - { - /// - /// Returns the data checksum computed so far. - /// - long Value - { - get; - } - - /// - /// Resets the data checksum as if no update was ever called. - /// - void Reset(); - - /// - /// Adds one byte to the data checksum. - /// - /// - /// the data value to add. The high byte of the int is ignored. - /// - void Update(int value); - - /// - /// Updates the data checksum with the bytes taken from the array. - /// - /// - /// buffer an array of bytes - /// - void Update(byte[] buffer); - - /// - /// Adds the byte array to the data checksum. - /// - /// - /// The buffer which contains the data - /// - /// - /// The offset in the buffer where the data starts - /// - /// - /// the number of data bytes to add. - /// - void Update(byte[] buffer, int offset, int count); - } -} +// IChecksum.cs - Interface to compute a data checksum +// Copyright (C) 2001 Mike Krueger +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +namespace LSLEditor.Decompressor +{ + + /// + /// Interface to compute a data checksum used by checked input/output streams. + /// A data checksum can be updated by one byte or with a byte array. After each + /// update the value of the current checksum can be returned by calling + /// getValue. The complete checksum object can also be reset + /// so it can be used again with new data. + /// + public interface IChecksum + { + /// + /// Returns the data checksum computed so far. + /// + long Value + { + get; + } + + /// + /// Resets the data checksum as if no update was ever called. + /// + void Reset(); + + /// + /// Adds one byte to the data checksum. + /// + /// + /// the data value to add. The high byte of the int is ignored. + /// + void Update(int value); + + /// + /// Updates the data checksum with the bytes taken from the array. + /// + /// + /// buffer an array of bytes + /// + void Update(byte[] buffer); + + /// + /// Adds the byte array to the data checksum. + /// + /// + /// The buffer which contains the data + /// + /// + /// The offset in the buffer where the data starts + /// + /// + /// the number of data bytes to add. + /// + void Update(byte[] buffer, int offset, int count); + } +} diff --git a/trunk/BZip2Decompress/StrangeCrc.cs b/source/BZip2Decompress/StrangeCrc.cs similarity index 97% rename from trunk/BZip2Decompress/StrangeCrc.cs rename to source/BZip2Decompress/StrangeCrc.cs index a1cfc9e..f6309f7 100644 --- a/trunk/BZip2Decompress/StrangeCrc.cs +++ b/source/BZip2Decompress/StrangeCrc.cs @@ -1,207 +1,207 @@ -// StrangeCRC.cs - computes a crc used in the bziplib -// -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -using System; - -namespace LSLEditor.Decompressor -{ - /// - /// Bzip2 checksum algorithm - /// - public class StrangeCRC : IChecksum - { - readonly static uint[] crc32Table = { - 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, - 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, - 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, - 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, - 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, - 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, - 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, - 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, - 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, - 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, - 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, - 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, - 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, - 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, - 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, - 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, - 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, - 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, - 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, - 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, - 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, - 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, - 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, - 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, - 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, - 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, - 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, - 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, - 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, - 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, - 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, - 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a, - 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, - 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, - 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, - 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, - 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, - 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, - 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, - 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, - 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, - 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, - 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, - 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, - 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, - 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, - 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, - 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, - 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, - 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, - 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, - 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, - 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, - 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, - 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, - 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, - 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, - 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, - 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, - 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, - 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, - 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, - 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, - 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4 - }; - - int globalCrc; - - /// - /// Initialise a default instance of - /// - public StrangeCRC() - { - Reset(); - } - - /// - /// Reset the state of Crc. - /// - public void Reset() - { - globalCrc = -1; - } - - /// - /// Get the current Crc value. - /// - public long Value { - get { - return ~globalCrc; - } - } - - /// - /// Update the Crc value. - /// - /// data update is based on - public void Update(int value) - { - int temp = (globalCrc >> 24) ^ value; - if (temp < 0) { - temp = 256 + temp; - } - globalCrc = unchecked((int)((globalCrc << 8) ^ crc32Table[temp])); - } - - /// - /// Update Crc based on a block of data - /// - public void Update(byte[] buffer) - { - if (buffer == null) { - throw new ArgumentNullException("buffer"); - } - - Update(buffer, 0, buffer.Length); - } - - /// - /// Update Crc based on a portion of a block of data - /// - /// block of data - /// index of first byte to use - /// number of bytes to use - public void Update(byte[] buffer, int offset, int count) - { - if (buffer == null) { - throw new ArgumentNullException("buffer"); - } - - if ( offset < 0 ) - { -#if COMPACT_FRAMEWORK_V10 - throw new ArgumentOutOfRangeException("offset"); -#else - throw new ArgumentOutOfRangeException("offset", "cannot be less than zero"); -#endif - } - - if ( count < 0 ) - { -#if COMPACT_FRAMEWORK_V10 - throw new ArgumentOutOfRangeException("count"); -#else - throw new ArgumentOutOfRangeException("count", "cannot be less than zero"); -#endif - } - - if ( offset + count > buffer.Length ) - { - throw new ArgumentOutOfRangeException("count"); - } - - for (int i = 0; i < count; ++i) { - Update(buffer[offset++]); - } - } - } -} +// StrangeCRC.cs - computes a crc used in the bziplib +// +// Copyright (C) 2001 Mike Krueger +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; + +namespace LSLEditor.Decompressor +{ + /// + /// Bzip2 checksum algorithm + /// + public class StrangeCRC : IChecksum + { + readonly static uint[] crc32Table = { + 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, + 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, + 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, + 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, + 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, + 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, + 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, + 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, + 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, + 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, + 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, + 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, + 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, + 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, + 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, + 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, + 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, + 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, + 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, + 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, + 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, + 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, + 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, + 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, + 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, + 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, + 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, + 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, + 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, + 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, + 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, + 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a, + 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, + 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, + 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, + 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, + 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, + 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, + 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, + 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, + 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, + 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, + 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, + 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, + 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, + 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, + 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, + 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, + 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, + 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, + 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, + 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, + 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, + 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, + 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, + 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, + 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, + 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, + 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, + 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, + 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, + 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, + 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, + 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4 + }; + + int globalCrc; + + /// + /// Initialise a default instance of + /// + public StrangeCRC() + { + Reset(); + } + + /// + /// Reset the state of Crc. + /// + public void Reset() + { + globalCrc = -1; + } + + /// + /// Get the current Crc value. + /// + public long Value { + get { + return ~globalCrc; + } + } + + /// + /// Update the Crc value. + /// + /// data update is based on + public void Update(int value) + { + int temp = (globalCrc >> 24) ^ value; + if (temp < 0) { + temp = 256 + temp; + } + globalCrc = unchecked((int)((globalCrc << 8) ^ crc32Table[temp])); + } + + /// + /// Update Crc based on a block of data + /// + public void Update(byte[] buffer) + { + if (buffer == null) { + throw new ArgumentNullException("buffer"); + } + + Update(buffer, 0, buffer.Length); + } + + /// + /// Update Crc based on a portion of a block of data + /// + /// block of data + /// index of first byte to use + /// number of bytes to use + public void Update(byte[] buffer, int offset, int count) + { + if (buffer == null) { + throw new ArgumentNullException("buffer"); + } + + if ( offset < 0 ) + { +#if COMPACT_FRAMEWORK_V10 + throw new ArgumentOutOfRangeException("offset"); +#else + throw new ArgumentOutOfRangeException("offset", "cannot be less than zero"); +#endif + } + + if ( count < 0 ) + { +#if COMPACT_FRAMEWORK_V10 + throw new ArgumentOutOfRangeException("count"); +#else + throw new ArgumentOutOfRangeException("count", "cannot be less than zero"); +#endif + } + + if ( offset + count > buffer.Length ) + { + throw new ArgumentOutOfRangeException("count"); + } + + for (int i = 0; i < count; ++i) { + Update(buffer[offset++]); + } + } + } +} diff --git a/trunk/Browser.Designer.cs b/source/Browser.Designer.cs similarity index 97% rename from trunk/Browser.Designer.cs rename to source/Browser.Designer.cs index 2bf08cb..37cd816 100644 --- a/trunk/Browser.Designer.cs +++ b/source/Browser.Designer.cs @@ -1,81 +1,81 @@ -namespace LSLEditor -{ - partial class Browser - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.tabControl1 = new System.Windows.Forms.TabControlExtended(this.components); - this.contextMenuStrip1.SuspendLayout(); - this.SuspendLayout(); - // - // contextMenuStrip1 - // - this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.closeToolStripMenuItem}); - this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(112, 26); - // - // closeToolStripMenuItem - // - this.closeToolStripMenuItem.Name = "closeToolStripMenuItem"; - this.closeToolStripMenuItem.Size = new System.Drawing.Size(111, 22); - this.closeToolStripMenuItem.Text = "Close"; - this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click); - // - // tabControl1 - // - this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl1.Location = new System.Drawing.Point(0, 0); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(592, 366); - this.tabControl1.TabIndex = 1; - this.tabControl1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.tabControl1_MouseDown); - // - // Browser - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(592, 366); - this.Controls.Add(this.tabControl1); - this.Name = "Browser"; - this.Text = "Browser"; - this.contextMenuStrip1.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TabControlExtended tabControl1; - private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; - private System.Windows.Forms.ToolStripMenuItem closeToolStripMenuItem; - } +namespace LSLEditor +{ + partial class Browser + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tabControl1 = new System.Windows.Forms.TabControlExtended(this.components); + this.contextMenuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.closeToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(112, 26); + // + // closeToolStripMenuItem + // + this.closeToolStripMenuItem.Name = "closeToolStripMenuItem"; + this.closeToolStripMenuItem.Size = new System.Drawing.Size(111, 22); + this.closeToolStripMenuItem.Text = "Close"; + this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click); + // + // tabControl1 + // + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Location = new System.Drawing.Point(0, 0); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(592, 366); + this.tabControl1.TabIndex = 1; + this.tabControl1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.tabControl1_MouseDown); + // + // Browser + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(592, 366); + this.Controls.Add(this.tabControl1); + this.Name = "Browser"; + this.Text = "Browser"; + this.contextMenuStrip1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControlExtended tabControl1; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem closeToolStripMenuItem; + } } \ No newline at end of file diff --git a/trunk/Browser.cs b/source/Browser.cs similarity index 97% rename from trunk/Browser.cs rename to source/Browser.cs index 061eba3..b92472f 100644 --- a/trunk/Browser.cs +++ b/source/Browser.cs @@ -1,160 +1,160 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// Browser.cs -// -// - -using System; -using System.ComponentModel; -using System.Drawing; -using System.Drawing.Imaging; -using System.Windows.Forms; -using LSLEditor.Docking; - -namespace LSLEditor -{ - public partial class Browser : DockContent - { - private LSLEditorForm lslEditorForm; - - public Browser(LSLEditorForm lslEditorForm) - { - InitializeComponent(); - - this.Icon = lslEditorForm.Icon; - this.lslEditorForm = lslEditorForm; - - // enables close buttons on tabs - this.tabControl1.SetDrawMode(); - } - - private void axWebBrowser1_StatusTextChanged(object sender, EventArgs e) - { - WebBrowser axWebBrowser1 = sender as WebBrowser; - ToolStripStatusLabel status = axWebBrowser1.Tag as ToolStripStatusLabel; - if (status != null) { - status.Text = axWebBrowser1.StatusText; - } - } - - private void axWebBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) - { - string strUrl = e.Url.ToString(); - if (strUrl.EndsWith(".lsl")) { - e.Cancel = true; - if (MessageBox.Show("Import LSL script?", "Import script", MessageBoxButtons.OKCancel) != DialogResult.Cancel) { - WebBrowser axWebBrowser1 = sender as WebBrowser; - axWebBrowser1.Stop(); - - this.lslEditorForm.OpenFile(strUrl, Guid.NewGuid()); - } - } - } - - public void ShowWebBrowser(string strTabName, string strUrl) - { - WebBrowser axWebBrowser1 = null; - try { - if (!Properties.Settings.Default.HelpNewTab) { - TabPage tabPage = this.tabControl1.TabPages[0]; - tabPage.Text = strTabName + " "; - axWebBrowser1 = tabPage.Controls[0] as WebBrowser; - } - } catch { } - - if (axWebBrowser1 == null) { - TabPage tabPage = new TabPage(strTabName + " "); - tabPage.BackColor = Color.White; - - axWebBrowser1 = new WebBrowser(); - - ToolStripStatusLabel toolStripStatusLabel1 = new ToolStripStatusLabel(); - StatusStrip statusStrip1 = new StatusStrip(); - - statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { toolStripStatusLabel1 }); - statusStrip1.Location = new System.Drawing.Point(0, 318); - statusStrip1.Name = "statusStrip1"; - statusStrip1.Size = new System.Drawing.Size(584, 22); - statusStrip1.TabIndex = 0; - statusStrip1.Text = "statusStrip1"; - - toolStripStatusLabel1.Name = "toolStripStatusLabel1"; - toolStripStatusLabel1.Size = new System.Drawing.Size(109, 17); - toolStripStatusLabel1.Text = "toolStripStatusLabel1"; - - tabPage.Controls.Add(axWebBrowser1); - - tabPage.Controls.Add(statusStrip1); - - this.tabControl1.TabPages.Add(tabPage); - this.tabControl1.SelectedIndex = this.tabControl1.TabCount - 1; - - // reference - axWebBrowser1.Tag = toolStripStatusLabel1; - - axWebBrowser1.Dock = DockStyle.Fill; - axWebBrowser1.StatusTextChanged += new EventHandler(axWebBrowser1_StatusTextChanged); - axWebBrowser1.Navigating += new WebBrowserNavigatingEventHandler(axWebBrowser1_Navigating); - } - axWebBrowser1.Navigate(strUrl); - } - - private void closeToolStripMenuItem_Click(object sender, EventArgs e) - { - int intTabToClose = (int)this.contextMenuStrip1.Tag; - if (intTabToClose < this.tabControl1.TabCount) { - this.tabControl1.TabPages.RemoveAt(intTabToClose); - } - } - - private void tabControl1_MouseDown(object sender, MouseEventArgs e) - { - TabControl tabControl = sender as TabControl; - if (tabControl != null) { - if (e.Button == MouseButtons.Right) { - for (int intI = 0; intI < tabControl.TabCount; intI++) { - Rectangle rt = tabControl.GetTabRect(intI); - if (e.X > rt.Left && e.X < rt.Right - && e.Y > rt.Top && e.Y < rt.Bottom) { - this.contextMenuStrip1.Tag = intI; - this.contextMenuStrip1.Show(this.tabControl1, new Point(e.X, e.Y)); - } - } - } - } - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// Browser.cs +// +// + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Imaging; +using System.Windows.Forms; +using LSLEditor.Docking; + +namespace LSLEditor +{ + public partial class Browser : DockContent + { + private LSLEditorForm lslEditorForm; + + public Browser(LSLEditorForm lslEditorForm) + { + InitializeComponent(); + + this.Icon = lslEditorForm.Icon; + this.lslEditorForm = lslEditorForm; + + // enables close buttons on tabs + this.tabControl1.SetDrawMode(); + } + + private void axWebBrowser1_StatusTextChanged(object sender, EventArgs e) + { + WebBrowser axWebBrowser1 = sender as WebBrowser; + ToolStripStatusLabel status = axWebBrowser1.Tag as ToolStripStatusLabel; + if (status != null) { + status.Text = axWebBrowser1.StatusText; + } + } + + private void axWebBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) + { + string strUrl = e.Url.ToString(); + if (strUrl.EndsWith(".lsl")) { + e.Cancel = true; + if (MessageBox.Show("Import LSL script?", "Import script", MessageBoxButtons.OKCancel) != DialogResult.Cancel) { + WebBrowser axWebBrowser1 = sender as WebBrowser; + axWebBrowser1.Stop(); + + this.lslEditorForm.OpenFile(strUrl, Guid.NewGuid()); + } + } + } + + public void ShowWebBrowser(string strTabName, string strUrl) + { + WebBrowser axWebBrowser1 = null; + try { + if (!Properties.Settings.Default.HelpNewTab) { + TabPage tabPage = this.tabControl1.TabPages[0]; + tabPage.Text = strTabName + " "; + axWebBrowser1 = tabPage.Controls[0] as WebBrowser; + } + } catch { } + + if (axWebBrowser1 == null) { + TabPage tabPage = new TabPage(strTabName + " "); + tabPage.BackColor = Color.White; + + axWebBrowser1 = new WebBrowser(); + + ToolStripStatusLabel toolStripStatusLabel1 = new ToolStripStatusLabel(); + StatusStrip statusStrip1 = new StatusStrip(); + + statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { toolStripStatusLabel1 }); + statusStrip1.Location = new System.Drawing.Point(0, 318); + statusStrip1.Name = "statusStrip1"; + statusStrip1.Size = new System.Drawing.Size(584, 22); + statusStrip1.TabIndex = 0; + statusStrip1.Text = "statusStrip1"; + + toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + toolStripStatusLabel1.Size = new System.Drawing.Size(109, 17); + toolStripStatusLabel1.Text = "toolStripStatusLabel1"; + + tabPage.Controls.Add(axWebBrowser1); + + tabPage.Controls.Add(statusStrip1); + + this.tabControl1.TabPages.Add(tabPage); + this.tabControl1.SelectedIndex = this.tabControl1.TabCount - 1; + + // reference + axWebBrowser1.Tag = toolStripStatusLabel1; + + axWebBrowser1.Dock = DockStyle.Fill; + axWebBrowser1.StatusTextChanged += new EventHandler(axWebBrowser1_StatusTextChanged); + axWebBrowser1.Navigating += new WebBrowserNavigatingEventHandler(axWebBrowser1_Navigating); + } + axWebBrowser1.Navigate(strUrl); + } + + private void closeToolStripMenuItem_Click(object sender, EventArgs e) + { + int intTabToClose = (int)this.contextMenuStrip1.Tag; + if (intTabToClose < this.tabControl1.TabCount) { + this.tabControl1.TabPages.RemoveAt(intTabToClose); + } + } + + private void tabControl1_MouseDown(object sender, MouseEventArgs e) + { + TabControl tabControl = sender as TabControl; + if (tabControl != null) { + if (e.Button == MouseButtons.Right) { + for (int intI = 0; intI < tabControl.TabCount; intI++) { + Rectangle rt = tabControl.GetTabRect(intI); + if (e.X > rt.Left && e.X < rt.Right + && e.Y > rt.Top && e.Y < rt.Bottom) { + this.contextMenuStrip1.Tag = intI; + this.contextMenuStrip1.Show(this.tabControl1, new Point(e.X, e.Y)); + } + } + } + } + } + } +} diff --git a/trunk/Browser.resx b/source/Browser.resx similarity index 97% rename from trunk/Browser.resx rename to source/Browser.resx index 174d5e9..6fa74a8 100644 --- a/trunk/Browser.resx +++ b/source/Browser.resx @@ -1,123 +1,123 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 127, 17 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 127, 17 + \ No newline at end of file diff --git a/trunk/BugReport/BugReportForm.Designer.cs b/source/BugReport/BugReportForm.Designer.cs similarity index 97% rename from trunk/BugReport/BugReportForm.Designer.cs rename to source/BugReport/BugReportForm.Designer.cs index 54ad41c..14ae3f5 100644 --- a/trunk/BugReport/BugReportForm.Designer.cs +++ b/source/BugReport/BugReportForm.Designer.cs @@ -1,437 +1,437 @@ -namespace LSLEditor.BugReport -{ - partial class BugReportForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.panel2 = new System.Windows.Forms.Panel(); - this.button4 = new System.Windows.Forms.Button(); - this.label6 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.listView1 = new System.Windows.Forms.ListView(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.tabControl1 = new System.Windows.Forms.TabControl(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.panel1 = new System.Windows.Forms.Panel(); - this.button3 = new System.Windows.Forms.Button(); - this.progressBar1 = new System.Windows.Forms.ProgressBar(); - this.button2 = new System.Windows.Forms.Button(); - this.button1 = new System.Windows.Forms.Button(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.textBox5 = new System.Windows.Forms.TextBox(); - this.splitter2 = new System.Windows.Forms.Splitter(); - this.textBox4 = new System.Windows.Forms.TextBox(); - this.splitter1 = new System.Windows.Forms.Splitter(); - this.listView2 = new System.Windows.Forms.ListView(); - this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); - this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); - this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.timer1 = new System.Windows.Forms.Timer(this.components); - this.groupBox1.SuspendLayout(); - this.panel2.SuspendLayout(); - this.tabControl1.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.panel1.SuspendLayout(); - this.tabPage2.SuspendLayout(); - this.contextMenuStrip1.SuspendLayout(); - this.SuspendLayout(); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.textBox3); - this.groupBox1.Controls.Add(this.panel2); - this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox1.Location = new System.Drawing.Point(3, 3); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Padding = new System.Windows.Forms.Padding(8); - this.groupBox1.Size = new System.Drawing.Size(712, 330); - this.groupBox1.TabIndex = 0; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "report"; - // - // textBox3 - // - this.textBox3.AcceptsReturn = true; - this.textBox3.AcceptsTab = true; - this.textBox3.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox3.Location = new System.Drawing.Point(8, 160); - this.textBox3.Multiline = true; - this.textBox3.Name = "textBox3"; - this.textBox3.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.textBox3.Size = new System.Drawing.Size(696, 162); - this.textBox3.TabIndex = 4; - // - // panel2 - // - this.panel2.Controls.Add(this.button4); - this.panel2.Controls.Add(this.label6); - this.panel2.Controls.Add(this.label5); - this.panel2.Controls.Add(this.label4); - this.panel2.Controls.Add(this.label3); - this.panel2.Controls.Add(this.label1); - this.panel2.Controls.Add(this.textBox1); - this.panel2.Controls.Add(this.listView1); - this.panel2.Controls.Add(this.textBox2); - this.panel2.Controls.Add(this.label2); - this.panel2.Dock = System.Windows.Forms.DockStyle.Top; - this.panel2.Location = new System.Drawing.Point(8, 21); - this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(696, 139); - this.panel2.TabIndex = 6; - // - // button4 - // - this.button4.Location = new System.Drawing.Point(312, 112); - this.button4.Name = "button4"; - this.button4.Size = new System.Drawing.Size(75, 24); - this.button4.TabIndex = 9; - this.button4.Text = "check all"; - this.button4.UseVisualStyleBackColor = true; - this.button4.Click += new System.EventHandler(this.button4_Click); - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(0, 80); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(191, 13); - this.label6.TabIndex = 8; - this.label6.Text = "and will not be made public in any way!"; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(0, 64); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(217, 13); - this.label5.TabIndex = 7; - this.label5.Text = "Uploaded files will only be used for bugfixing,"; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(208, 8); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(98, 13); - this.label4.TabIndex = 6; - this.label4.Text = "Files to be included"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(0, 104); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(130, 13); - this.label3.TabIndex = 5; - this.label3.Text = "Description of the problem"; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(0, 8); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(35, 13); - this.label1.TabIndex = 2; - this.label1.Text = "Name"; - // - // textBox1 - // - this.textBox1.Location = new System.Drawing.Point(40, 8); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(168, 20); - this.textBox1.TabIndex = 1; - // - // listView1 - // - this.listView1.CheckBoxes = true; - this.listView1.Location = new System.Drawing.Point(312, 8); - this.listView1.Name = "listView1"; - this.listView1.Size = new System.Drawing.Size(248, 104); - this.listView1.TabIndex = 3; - this.listView1.UseCompatibleStateImageBehavior = false; - this.listView1.View = System.Windows.Forms.View.Details; - // - // textBox2 - // - this.textBox2.Location = new System.Drawing.Point(40, 40); - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(168, 20); - this.textBox2.TabIndex = 2; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(0, 40); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(32, 13); - this.label2.TabIndex = 3; - this.label2.Text = "Email"; - // - // tabControl1 - // - this.tabControl1.Controls.Add(this.tabPage1); - this.tabControl1.Controls.Add(this.tabPage2); - this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl1.Location = new System.Drawing.Point(8, 8); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(726, 402); - this.tabControl1.TabIndex = 0; - // - // tabPage1 - // - this.tabPage1.Controls.Add(this.groupBox1); - this.tabPage1.Controls.Add(this.panel1); - this.tabPage1.Location = new System.Drawing.Point(4, 22); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Padding = new System.Windows.Forms.Padding(3); - this.tabPage1.Size = new System.Drawing.Size(718, 376); - this.tabPage1.TabIndex = 0; - this.tabPage1.Text = "New bug report"; - this.tabPage1.UseVisualStyleBackColor = true; - // - // panel1 - // - this.panel1.Controls.Add(this.button3); - this.panel1.Controls.Add(this.progressBar1); - this.panel1.Controls.Add(this.button2); - this.panel1.Controls.Add(this.button1); - this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.panel1.Location = new System.Drawing.Point(3, 333); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(712, 40); - this.panel1.TabIndex = 0; - // - // button3 - // - this.button3.Location = new System.Drawing.Point(504, 8); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(75, 23); - this.button3.TabIndex = 7; - this.button3.Text = "Close"; - this.button3.UseVisualStyleBackColor = true; - this.button3.Click += new System.EventHandler(this.button3_Click); - // - // progressBar1 - // - this.progressBar1.Location = new System.Drawing.Point(8, 8); - this.progressBar1.Name = "progressBar1"; - this.progressBar1.Size = new System.Drawing.Size(280, 23); - this.progressBar1.TabIndex = 0; - // - // button2 - // - this.button2.Enabled = false; - this.button2.Location = new System.Drawing.Point(416, 8); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(75, 23); - this.button2.TabIndex = 6; - this.button2.Text = "Cancel"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // button1 - // - this.button1.Location = new System.Drawing.Point(296, 8); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(112, 23); - this.button1.TabIndex = 5; - this.button1.Text = "Send bug report"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // tabPage2 - // - this.tabPage2.Controls.Add(this.textBox5); - this.tabPage2.Controls.Add(this.splitter2); - this.tabPage2.Controls.Add(this.textBox4); - this.tabPage2.Controls.Add(this.splitter1); - this.tabPage2.Controls.Add(this.listView2); - this.tabPage2.Location = new System.Drawing.Point(4, 22); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Padding = new System.Windows.Forms.Padding(3); - this.tabPage2.Size = new System.Drawing.Size(718, 376); - this.tabPage2.TabIndex = 1; - this.tabPage2.Text = "Bug tracker"; - this.tabPage2.UseVisualStyleBackColor = true; - // - // textBox5 - // - this.textBox5.AcceptsReturn = true; - this.textBox5.AcceptsTab = true; - this.textBox5.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox5.Location = new System.Drawing.Point(267, 131); - this.textBox5.Multiline = true; - this.textBox5.Name = "textBox5"; - this.textBox5.ReadOnly = true; - this.textBox5.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.textBox5.Size = new System.Drawing.Size(448, 242); - this.textBox5.TabIndex = 10; - // - // splitter2 - // - this.splitter2.Dock = System.Windows.Forms.DockStyle.Top; - this.splitter2.Location = new System.Drawing.Point(267, 128); - this.splitter2.Name = "splitter2"; - this.splitter2.Size = new System.Drawing.Size(448, 3); - this.splitter2.TabIndex = 3; - this.splitter2.TabStop = false; - // - // textBox4 - // - this.textBox4.AcceptsReturn = true; - this.textBox4.AcceptsTab = true; - this.textBox4.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox4.Location = new System.Drawing.Point(267, 3); - this.textBox4.Multiline = true; - this.textBox4.Name = "textBox4"; - this.textBox4.ReadOnly = true; - this.textBox4.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.textBox4.Size = new System.Drawing.Size(448, 125); - this.textBox4.TabIndex = 9; - // - // splitter1 - // - this.splitter1.Location = new System.Drawing.Point(264, 3); - this.splitter1.Name = "splitter1"; - this.splitter1.Size = new System.Drawing.Size(3, 370); - this.splitter1.TabIndex = 1; - this.splitter1.TabStop = false; - // - // listView2 - // - this.listView2.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.columnHeader1, - this.columnHeader2}); - this.listView2.ContextMenuStrip = this.contextMenuStrip1; - this.listView2.Dock = System.Windows.Forms.DockStyle.Left; - this.listView2.FullRowSelect = true; - this.listView2.HideSelection = false; - this.listView2.Location = new System.Drawing.Point(3, 3); - this.listView2.Name = "listView2"; - this.listView2.Size = new System.Drawing.Size(261, 370); - this.listView2.TabIndex = 8; - this.listView2.UseCompatibleStateImageBehavior = false; - this.listView2.View = System.Windows.Forms.View.Details; - this.listView2.SelectedIndexChanged += new System.EventHandler(this.listView2_SelectedIndexChanged); - // - // columnHeader1 - // - this.columnHeader1.Text = "Number"; - this.columnHeader1.Width = 85; - // - // columnHeader2 - // - this.columnHeader2.Text = "Date/Time"; - this.columnHeader2.Width = 145; - // - // contextMenuStrip1 - // - this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.deleteToolStripMenuItem}); - this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(117, 26); - // - // deleteToolStripMenuItem - // - this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem"; - this.deleteToolStripMenuItem.Size = new System.Drawing.Size(116, 22); - this.deleteToolStripMenuItem.Text = "Delete"; - this.deleteToolStripMenuItem.Click += new System.EventHandler(this.deleteToolStripMenuItem_Click); - // - // timer1 - // - this.timer1.Tick += new System.EventHandler(this.timer1_Tick); - // - // BugReportForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(742, 418); - this.Controls.Add(this.tabControl1); - this.Name = "BugReportForm"; - this.Padding = new System.Windows.Forms.Padding(8); - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "LSLEditor bug report"; - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.panel2.ResumeLayout(false); - this.panel2.PerformLayout(); - this.tabControl1.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.panel1.ResumeLayout(false); - this.tabPage2.ResumeLayout(false); - this.tabPage2.PerformLayout(); - this.contextMenuStrip1.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.ListView listView1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.TextBox textBox3; - private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TabControl tabControl1; - private System.Windows.Forms.TabPage tabPage1; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.ProgressBar progressBar1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.TabPage tabPage2; - private System.Windows.Forms.TextBox textBox5; - private System.Windows.Forms.Splitter splitter2; - private System.Windows.Forms.TextBox textBox4; - private System.Windows.Forms.Splitter splitter1; - private System.Windows.Forms.ListView listView2; - private System.Windows.Forms.ColumnHeader columnHeader1; - private System.Windows.Forms.Timer timer1; - private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; - private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem; - private System.Windows.Forms.Button button3; - private System.Windows.Forms.Button button4; - private System.Windows.Forms.ColumnHeader columnHeader2; - } +namespace LSLEditor.BugReport +{ + partial class BugReportForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.panel2 = new System.Windows.Forms.Panel(); + this.button4 = new System.Windows.Forms.Button(); + this.label6 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.listView1 = new System.Windows.Forms.ListView(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.panel1 = new System.Windows.Forms.Panel(); + this.button3 = new System.Windows.Forms.Button(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.textBox5 = new System.Windows.Forms.TextBox(); + this.splitter2 = new System.Windows.Forms.Splitter(); + this.textBox4 = new System.Windows.Forms.TextBox(); + this.splitter1 = new System.Windows.Forms.Splitter(); + this.listView2 = new System.Windows.Forms.ListView(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.groupBox1.SuspendLayout(); + this.panel2.SuspendLayout(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.panel1.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.contextMenuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.textBox3); + this.groupBox1.Controls.Add(this.panel2); + this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox1.Location = new System.Drawing.Point(3, 3); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Padding = new System.Windows.Forms.Padding(8); + this.groupBox1.Size = new System.Drawing.Size(712, 330); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "report"; + // + // textBox3 + // + this.textBox3.AcceptsReturn = true; + this.textBox3.AcceptsTab = true; + this.textBox3.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox3.Location = new System.Drawing.Point(8, 160); + this.textBox3.Multiline = true; + this.textBox3.Name = "textBox3"; + this.textBox3.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBox3.Size = new System.Drawing.Size(696, 162); + this.textBox3.TabIndex = 4; + // + // panel2 + // + this.panel2.Controls.Add(this.button4); + this.panel2.Controls.Add(this.label6); + this.panel2.Controls.Add(this.label5); + this.panel2.Controls.Add(this.label4); + this.panel2.Controls.Add(this.label3); + this.panel2.Controls.Add(this.label1); + this.panel2.Controls.Add(this.textBox1); + this.panel2.Controls.Add(this.listView1); + this.panel2.Controls.Add(this.textBox2); + this.panel2.Controls.Add(this.label2); + this.panel2.Dock = System.Windows.Forms.DockStyle.Top; + this.panel2.Location = new System.Drawing.Point(8, 21); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(696, 139); + this.panel2.TabIndex = 6; + // + // button4 + // + this.button4.Location = new System.Drawing.Point(312, 112); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(75, 24); + this.button4.TabIndex = 9; + this.button4.Text = "check all"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(0, 80); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(191, 13); + this.label6.TabIndex = 8; + this.label6.Text = "and will not be made public in any way!"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(0, 64); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(217, 13); + this.label5.TabIndex = 7; + this.label5.Text = "Uploaded files will only be used for bugfixing,"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(208, 8); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(98, 13); + this.label4.TabIndex = 6; + this.label4.Text = "Files to be included"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(0, 104); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(130, 13); + this.label3.TabIndex = 5; + this.label3.Text = "Description of the problem"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(0, 8); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(35, 13); + this.label1.TabIndex = 2; + this.label1.Text = "Name"; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(40, 8); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(168, 20); + this.textBox1.TabIndex = 1; + // + // listView1 + // + this.listView1.CheckBoxes = true; + this.listView1.Location = new System.Drawing.Point(312, 8); + this.listView1.Name = "listView1"; + this.listView1.Size = new System.Drawing.Size(248, 104); + this.listView1.TabIndex = 3; + this.listView1.UseCompatibleStateImageBehavior = false; + this.listView1.View = System.Windows.Forms.View.Details; + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(40, 40); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(168, 20); + this.textBox2.TabIndex = 2; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(0, 40); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(32, 13); + this.label2.TabIndex = 3; + this.label2.Text = "Email"; + // + // tabControl1 + // + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Location = new System.Drawing.Point(8, 8); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(726, 402); + this.tabControl1.TabIndex = 0; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.groupBox1); + this.tabPage1.Controls.Add(this.panel1); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(718, 376); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "New bug report"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // panel1 + // + this.panel1.Controls.Add(this.button3); + this.panel1.Controls.Add(this.progressBar1); + this.panel1.Controls.Add(this.button2); + this.panel1.Controls.Add(this.button1); + this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel1.Location = new System.Drawing.Point(3, 333); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(712, 40); + this.panel1.TabIndex = 0; + // + // button3 + // + this.button3.Location = new System.Drawing.Point(504, 8); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 23); + this.button3.TabIndex = 7; + this.button3.Text = "Close"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // progressBar1 + // + this.progressBar1.Location = new System.Drawing.Point(8, 8); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(280, 23); + this.progressBar1.TabIndex = 0; + // + // button2 + // + this.button2.Enabled = false; + this.button2.Location = new System.Drawing.Point(416, 8); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 6; + this.button2.Text = "Cancel"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(296, 8); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(112, 23); + this.button1.TabIndex = 5; + this.button1.Text = "Send bug report"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.textBox5); + this.tabPage2.Controls.Add(this.splitter2); + this.tabPage2.Controls.Add(this.textBox4); + this.tabPage2.Controls.Add(this.splitter1); + this.tabPage2.Controls.Add(this.listView2); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(718, 376); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "Bug tracker"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // textBox5 + // + this.textBox5.AcceptsReturn = true; + this.textBox5.AcceptsTab = true; + this.textBox5.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox5.Location = new System.Drawing.Point(267, 131); + this.textBox5.Multiline = true; + this.textBox5.Name = "textBox5"; + this.textBox5.ReadOnly = true; + this.textBox5.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBox5.Size = new System.Drawing.Size(448, 242); + this.textBox5.TabIndex = 10; + // + // splitter2 + // + this.splitter2.Dock = System.Windows.Forms.DockStyle.Top; + this.splitter2.Location = new System.Drawing.Point(267, 128); + this.splitter2.Name = "splitter2"; + this.splitter2.Size = new System.Drawing.Size(448, 3); + this.splitter2.TabIndex = 3; + this.splitter2.TabStop = false; + // + // textBox4 + // + this.textBox4.AcceptsReturn = true; + this.textBox4.AcceptsTab = true; + this.textBox4.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox4.Location = new System.Drawing.Point(267, 3); + this.textBox4.Multiline = true; + this.textBox4.Name = "textBox4"; + this.textBox4.ReadOnly = true; + this.textBox4.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBox4.Size = new System.Drawing.Size(448, 125); + this.textBox4.TabIndex = 9; + // + // splitter1 + // + this.splitter1.Location = new System.Drawing.Point(264, 3); + this.splitter1.Name = "splitter1"; + this.splitter1.Size = new System.Drawing.Size(3, 370); + this.splitter1.TabIndex = 1; + this.splitter1.TabStop = false; + // + // listView2 + // + this.listView2.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader1, + this.columnHeader2}); + this.listView2.ContextMenuStrip = this.contextMenuStrip1; + this.listView2.Dock = System.Windows.Forms.DockStyle.Left; + this.listView2.FullRowSelect = true; + this.listView2.HideSelection = false; + this.listView2.Location = new System.Drawing.Point(3, 3); + this.listView2.Name = "listView2"; + this.listView2.Size = new System.Drawing.Size(261, 370); + this.listView2.TabIndex = 8; + this.listView2.UseCompatibleStateImageBehavior = false; + this.listView2.View = System.Windows.Forms.View.Details; + this.listView2.SelectedIndexChanged += new System.EventHandler(this.listView2_SelectedIndexChanged); + // + // columnHeader1 + // + this.columnHeader1.Text = "Number"; + this.columnHeader1.Width = 85; + // + // columnHeader2 + // + this.columnHeader2.Text = "Date/Time"; + this.columnHeader2.Width = 145; + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.deleteToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(117, 26); + // + // deleteToolStripMenuItem + // + this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem"; + this.deleteToolStripMenuItem.Size = new System.Drawing.Size(116, 22); + this.deleteToolStripMenuItem.Text = "Delete"; + this.deleteToolStripMenuItem.Click += new System.EventHandler(this.deleteToolStripMenuItem_Click); + // + // timer1 + // + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // BugReportForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(742, 418); + this.Controls.Add(this.tabControl1); + this.Name = "BugReportForm"; + this.Padding = new System.Windows.Forms.Padding(8); + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "LSLEditor bug report"; + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + this.tabPage2.PerformLayout(); + this.contextMenuStrip1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.ListView listView1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.ProgressBar progressBar1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TextBox textBox5; + private System.Windows.Forms.Splitter splitter2; + private System.Windows.Forms.TextBox textBox4; + private System.Windows.Forms.Splitter splitter1; + private System.Windows.Forms.ListView listView2; + private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.Timer timer1; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.ColumnHeader columnHeader2; + } } \ No newline at end of file diff --git a/trunk/BugReport/BugReportForm.cs b/source/BugReport/BugReportForm.cs similarity index 96% rename from trunk/BugReport/BugReportForm.cs rename to source/BugReport/BugReportForm.cs index de64197..5088f31 100644 --- a/trunk/BugReport/BugReportForm.cs +++ b/source/BugReport/BugReportForm.cs @@ -1,294 +1,294 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// BugReportForm.cs -// -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.Reflection; - -using LSLEditor.org.lsleditor.www; - - -namespace LSLEditor.BugReport -{ - public partial class BugReportForm : Form - { - private bool blnComplete; - private UploadBugReport ubr; - - private LSLEditorForm parent; - - public BugReportForm(LSLEditorForm parent) - { - InitializeComponent(); - this.parent = parent; - this.Icon = parent.Icon; - this.textBox1.Text = Properties.Settings.Default.AvatarName; - this.textBox2.Text = Properties.Settings.Default.EmailAddress; - this.listView1.Columns.Add("ScriptName",this.listView1.Width-30); - foreach (Form form in parent.Children) - { - EditForm editForm = form as EditForm; - if (editForm == null || editForm.IsDisposed) - continue; - ListViewItem lvi = new ListViewItem(editForm.ScriptName); - lvi.Checked = false; - this.listView1.Items.Add(lvi); - } - ShowBugReportsList(); - } - - private void ShowBugReportsList() - { - if (Properties.Settings.Default.Bugreports == null) - return; - this.listView2.Items.Clear(); - foreach (string Handle in Properties.Settings.Default.Bugreports) - { - long result; - if (!long.TryParse(Handle, out result)) - continue; - result *= (long)1e7; - DateTime dateTime = new DateTime(result); - ListViewItem lvi = new ListViewItem(Handle); - lvi.SubItems.Add(dateTime.ToString()); - lvi.Tag = Handle; - this.listView2.Items.Add(lvi); - } - } - - //close - private void button3_Click(object sender, EventArgs e) - { - this.timer1.Stop(); - if (ubr != null) - ubr.Stop(); - this.Close(); - } - - // cancel - private void button2_Click(object sender, EventArgs e) - { - this.button2.Enabled = false; - this.timer1.Stop(); - this.progressBar1.Value = 0; - if (ubr != null) - ubr.Stop(); - this.button1.Enabled = true; - } - - private void button1_Click(object sender, EventArgs e) - { - string strMessage = this.textBox3.Text.Trim(); - if (strMessage == "") - { - MessageBox.Show("The bug report is empty(?!), it is not send!", "Bug report", MessageBoxButtons.OK, MessageBoxIcon.Information); - return; - } - ubr = new UploadBugReport(); - this.button1.Enabled = false; - this.button2.Enabled = true; - this.blnComplete = false; - this.timer1.Start(); - ubr.OnComplete += new UploadBugReport.UploadCompleteHandler(ubr_OnComplete); - List list = new List(); - StringBuilder sb = new StringBuilder(); - - Properties.Settings.Default.AvatarName = this.textBox1.Text; - Properties.Settings.Default.EmailAddress = this.textBox2.Text; - - sb.AppendFormat("Version: {0} {1}\r\n", - this.parent.Text, - Assembly.GetExecutingAssembly().GetName().Version.ToString()); - sb.AppendFormat("Name: {0}\r\n", this.textBox1.Text); - sb.AppendFormat("Email: {0}\r\n\r\n", this.textBox2.Text); - sb.Append(this.textBox3.Text); - list.Add(new UploadBugReport.FileToUpload("bugreport.txt", sb.ToString())); - foreach (ListViewItem lvi in this.listView1.Items) - { - if (!lvi.Checked) - continue; - string strScriptName = lvi.Text; - string strBody = null; - foreach (Form form in parent.Children) - { - EditForm editForm = form as EditForm; - if (editForm == null || editForm.IsDisposed) - continue; - if (editForm.ScriptName == strScriptName) - strBody = editForm.SourceCode; - } - if(strBody != null) - list.Add(new UploadBugReport.FileToUpload(strScriptName, strBody)); - } - ubr.UploadAsync(list, this.progressBar1); - } - - void ubr_OnComplete(object sender, UploadBugReport.UploadCompleteEventArgs e) - { - if(e.TotalBytes == -1) - MessageBox.Show("There is something wrong. Your bug report has not been sent!!", "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); - else - MessageBox.Show("Your bug report has been sent (" + e.TotalBytes + " bytes)", "Ready", MessageBoxButtons.OK, MessageBoxIcon.Information); - this.blnComplete = true; - } - - private void timer1_Tick(object sender, EventArgs e) - { - if (this.blnComplete) - { - this.timer1.Stop(); - - this.button1.Enabled = true; - this.button2.Enabled = false; - - this.progressBar1.Value = 0; - this.textBox3.Clear(); - ShowBugReportsList(); - this.tabControl1.SelectedIndex = 1; - } - - if (ubr != null) - { - if (!ubr.blnRunning) - { - this.button1.Enabled = true; - this.timer1.Stop(); - } - } - - } - - private void listView2_SelectedIndexChanged(object sender, EventArgs e) - { - if (this.listView2.SelectedItems.Count == 0) - return; - ListViewItem lvi = this.listView2.SelectedItems[0]; - string Handle = lvi.Tag.ToString(); - - Service1 service1 = new Service1(); - service1.GetStatusCompleted += new GetStatusCompletedEventHandler(service1_GetStatusCompleted); - service1.GetStatusAsync(Handle, Handle); - } - - void service1_GetStatusCompleted(object sender, GetStatusCompletedEventArgs e) - { - this.textBox5.Clear(); - string Handle = e.UserState.ToString(); - if (e.Error != null) - { - this.textBox4.Text = "Bug report [" + Handle + "] not available (at this time)"; - return; - } - - string strResult = e.Result; - if (strResult == null) - { - this.textBox5.Text = "Bug report [" + Handle + "] does not exist (anymore)"; - return; - } - - this.textBox5.Text = strResult.Replace("\n", "\r\n"); - - Service1 service1 = new Service1(); - service1.GetBugReportCompleted += new GetBugReportCompletedEventHandler(service1_GetBugReportCompleted); - service1.GetBugReportAsync(Handle, Handle); - } - - void service1_GetBugReportCompleted(object sender, GetBugReportCompletedEventArgs e) - { - this.textBox4.Clear(); - string Handle = e.UserState.ToString(); - - if (e.Error != null) - { - this.textBox4.Text = "Bug report [" + Handle + "] not available (at this time)"; - return; - } - - string strResult = e.Result; - if (strResult == null) - { - this.textBox4.Text = "Bug report [" + Handle + "] does not extist (anymore)"; - return; - } - - this.textBox4.Text = strResult.Replace("\n", "\r\n"); - } - - private void deleteToolStripMenuItem_Click(object sender, EventArgs e) - { - if (this.listView2.SelectedItems.Count == 0) - return; - - if (MessageBox.Show("Delete " + this.listView2.SelectedItems.Count + " bugreports?", "Delete Bugreports", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) - { - for(int intI=0; intI +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// BugReportForm.cs +// +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; + +using LSLEditor.org.lsleditor.www; + + +namespace LSLEditor.BugReport +{ + public partial class BugReportForm : Form + { + private bool blnComplete; + private UploadBugReport ubr; + + private LSLEditorForm parent; + + public BugReportForm(LSLEditorForm parent) + { + InitializeComponent(); + this.parent = parent; + this.Icon = parent.Icon; + this.textBox1.Text = Properties.Settings.Default.AvatarName; + this.textBox2.Text = Properties.Settings.Default.EmailAddress; + this.listView1.Columns.Add("ScriptName",this.listView1.Width-30); + foreach (Form form in parent.Children) + { + EditForm editForm = form as EditForm; + if (editForm == null || editForm.IsDisposed) + continue; + ListViewItem lvi = new ListViewItem(editForm.ScriptName); + lvi.Checked = false; + this.listView1.Items.Add(lvi); + } + ShowBugReportsList(); + } + + private void ShowBugReportsList() + { + if (Properties.Settings.Default.Bugreports == null) + return; + this.listView2.Items.Clear(); + foreach (string Handle in Properties.Settings.Default.Bugreports) + { + long result; + if (!long.TryParse(Handle, out result)) + continue; + result *= (long)1e7; + DateTime dateTime = new DateTime(result); + ListViewItem lvi = new ListViewItem(Handle); + lvi.SubItems.Add(dateTime.ToString()); + lvi.Tag = Handle; + this.listView2.Items.Add(lvi); + } + } + + //close + private void button3_Click(object sender, EventArgs e) + { + this.timer1.Stop(); + if (ubr != null) + ubr.Stop(); + this.Close(); + } + + // cancel + private void button2_Click(object sender, EventArgs e) + { + this.button2.Enabled = false; + this.timer1.Stop(); + this.progressBar1.Value = 0; + if (ubr != null) + ubr.Stop(); + this.button1.Enabled = true; + } + + private void button1_Click(object sender, EventArgs e) + { + string strMessage = this.textBox3.Text.Trim(); + if (strMessage == "") + { + MessageBox.Show("The bug report is empty(?!), it is not send!", "Bug report", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + ubr = new UploadBugReport(); + this.button1.Enabled = false; + this.button2.Enabled = true; + this.blnComplete = false; + this.timer1.Start(); + ubr.OnComplete += new UploadBugReport.UploadCompleteHandler(ubr_OnComplete); + List list = new List(); + StringBuilder sb = new StringBuilder(); + + Properties.Settings.Default.AvatarName = this.textBox1.Text; + Properties.Settings.Default.EmailAddress = this.textBox2.Text; + + sb.AppendFormat("Version: {0} {1}\r\n", + this.parent.Text, + Assembly.GetExecutingAssembly().GetName().Version.ToString()); + sb.AppendFormat("Name: {0}\r\n", this.textBox1.Text); + sb.AppendFormat("Email: {0}\r\n\r\n", this.textBox2.Text); + sb.Append(this.textBox3.Text); + list.Add(new UploadBugReport.FileToUpload("bugreport.txt", sb.ToString())); + foreach (ListViewItem lvi in this.listView1.Items) + { + if (!lvi.Checked) + continue; + string strScriptName = lvi.Text; + string strBody = null; + foreach (Form form in parent.Children) + { + EditForm editForm = form as EditForm; + if (editForm == null || editForm.IsDisposed) + continue; + if (editForm.ScriptName == strScriptName) + strBody = editForm.SourceCode; + } + if(strBody != null) + list.Add(new UploadBugReport.FileToUpload(strScriptName, strBody)); + } + ubr.UploadAsync(list, this.progressBar1); + } + + void ubr_OnComplete(object sender, UploadBugReport.UploadCompleteEventArgs e) + { + if(e.TotalBytes == -1) + MessageBox.Show("There is something wrong. Your bug report has not been sent!!", "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); + else + MessageBox.Show("Your bug report has been sent (" + e.TotalBytes + " bytes)", "Ready", MessageBoxButtons.OK, MessageBoxIcon.Information); + this.blnComplete = true; + } + + private void timer1_Tick(object sender, EventArgs e) + { + if (this.blnComplete) + { + this.timer1.Stop(); + + this.button1.Enabled = true; + this.button2.Enabled = false; + + this.progressBar1.Value = 0; + this.textBox3.Clear(); + ShowBugReportsList(); + this.tabControl1.SelectedIndex = 1; + } + + if (ubr != null) + { + if (!ubr.blnRunning) + { + this.button1.Enabled = true; + this.timer1.Stop(); + } + } + + } + + private void listView2_SelectedIndexChanged(object sender, EventArgs e) + { + if (this.listView2.SelectedItems.Count == 0) + return; + ListViewItem lvi = this.listView2.SelectedItems[0]; + string Handle = lvi.Tag.ToString(); + + Service1 service1 = new Service1(); + service1.GetStatusCompleted += new GetStatusCompletedEventHandler(service1_GetStatusCompleted); + service1.GetStatusAsync(Handle, Handle); + } + + void service1_GetStatusCompleted(object sender, GetStatusCompletedEventArgs e) + { + this.textBox5.Clear(); + string Handle = e.UserState.ToString(); + if (e.Error != null) + { + this.textBox4.Text = "Bug report [" + Handle + "] not available (at this time)"; + return; + } + + string strResult = e.Result; + if (strResult == null) + { + this.textBox5.Text = "Bug report [" + Handle + "] does not exist (anymore)"; + return; + } + + this.textBox5.Text = strResult.Replace("\n", "\r\n"); + + Service1 service1 = new Service1(); + service1.GetBugReportCompleted += new GetBugReportCompletedEventHandler(service1_GetBugReportCompleted); + service1.GetBugReportAsync(Handle, Handle); + } + + void service1_GetBugReportCompleted(object sender, GetBugReportCompletedEventArgs e) + { + this.textBox4.Clear(); + string Handle = e.UserState.ToString(); + + if (e.Error != null) + { + this.textBox4.Text = "Bug report [" + Handle + "] not available (at this time)"; + return; + } + + string strResult = e.Result; + if (strResult == null) + { + this.textBox4.Text = "Bug report [" + Handle + "] does not extist (anymore)"; + return; + } + + this.textBox4.Text = strResult.Replace("\n", "\r\n"); + } + + private void deleteToolStripMenuItem_Click(object sender, EventArgs e) + { + if (this.listView2.SelectedItems.Count == 0) + return; + + if (MessageBox.Show("Delete " + this.listView2.SelectedItems.Count + " bugreports?", "Delete Bugreports", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) + { + for(int intI=0; intI - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 100, 17 - - - 17, 17 - - - 42 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 100, 17 + + + 17, 17 + + + 42 + \ No newline at end of file diff --git a/trunk/BugReport/UploadBugReport.cs b/source/BugReport/UploadBugReport.cs similarity index 96% rename from trunk/BugReport/UploadBugReport.cs rename to source/BugReport/UploadBugReport.cs index 4ab277e..092769d 100644 --- a/trunk/BugReport/UploadBugReport.cs +++ b/source/BugReport/UploadBugReport.cs @@ -1,218 +1,218 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.IO; -using System.Text; -using System.Drawing; -using System.Text.RegularExpressions; -using System.Threading; -using System.Collections; -using System.Collections.Specialized; -using System.Collections.Generic; -using System.Windows.Forms; - -namespace LSLEditor.BugReport -{ - class UploadBugReport - { - public struct FileToUpload - { - public string FileName; - public string Body; - public string Path; - public FileToUpload(string FileName, string Body) - { - this.FileName = FileName; - this.Body = Body; - this.Path = null; - } - } - - public class UploadCompleteEventArgs : EventArgs - { - public int TotalBytes; - public UploadCompleteEventArgs(int intTotal) - { - this.TotalBytes = intTotal; - } - } - - public bool blnRunning; - - public delegate void UploadCompleteHandler(object sender, UploadCompleteEventArgs e); - public event UploadCompleteHandler OnComplete; - - private Thread thread; - private ProgressBar progressbar; - private List list; - - public void UploadAsync(List list, ProgressBar progressbar) - { - this.list = list; - this.progressbar = progressbar; - - this.blnRunning = true; - - thread = new Thread(new ThreadStart(Worker)); - thread.IsBackground = true; - thread.Name = "Worker"; - thread.Start(); - } - - public void Stop() - { - this.blnRunning = false; - if (thread != null) - { - thread.Join(1000); - thread = null; - } - } - - private void Worker() - { - int intTotal = 0; - try - { - org.lsleditor.www.Service1 webservice = new org.lsleditor.www.Service1(); - - string Handle = webservice.Open(); - if (Handle == null) - { - MessageBox.Show("Can't get an upload handle", "Oops..."); - this.blnRunning = false; - return; - } - - if (Properties.Settings.Default.Bugreports == null) - Properties.Settings.Default.Bugreports = new StringCollection(); - Properties.Settings.Default.Bugreports.Add(Handle); - - // Properties.Settings.Default.Save(); - - int intNumber = 0; - foreach (FileToUpload file in this.list) - { - string strFileName = string.Format("{0}-{1}", intNumber, file.FileName); - if (file.Path == null) - { - intTotal += Upload(Handle, strFileName, Encoding.ASCII.GetBytes(file.Body)); - } - else - { - intTotal += Upload(Handle, strFileName, file.Path); - } - intNumber++; - } - } - catch - { - intTotal = -1; - } - if (this.blnRunning) - if (OnComplete != null) - OnComplete(this, new UploadCompleteEventArgs(intTotal)); - this.blnRunning = false; - } - - private delegate void SetValueDelegate(int intValue); - - private void SetMaximum(int intMaximum) - { - if (this.progressbar.InvokeRequired) - { - this.progressbar.Invoke(new SetValueDelegate(SetMaximum), new object[] { intMaximum }); - } - else - { - this.progressbar.Maximum = intMaximum; - } - } - - private void SetValue(int intValue) - { - if (this.progressbar.InvokeRequired) - { - this.progressbar.Invoke(new SetValueDelegate(SetValue), new object[] { intValue }); - } - else - { - this.progressbar.Value = intValue; - } - } - private int Upload(string Handle, string FileName, byte[] buffer) - { - org.lsleditor.www.Service1 webservice = new org.lsleditor.www.Service1(); - if (Handle == null) - return 0; - - SetMaximum(buffer.Length); - int intOffset = 0; - int intTotal = 0; - byte[] smallbuffer = new byte[1024]; - while (this.blnRunning) - { - int intLength = Math.Min(smallbuffer.Length, buffer.Length - intOffset); - if (intLength <= 0) - break; - Array.Copy(buffer, intOffset, smallbuffer, 0, intLength); - intOffset += intLength; - string strError = webservice.Write(Handle, FileName, smallbuffer, intLength); - if (strError != null) - { - MessageBox.Show("Error:" + strError, "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); - break; - } - intTotal += intLength; - SetValue(intTotal); - } - return intTotal; - } - - private int Upload(string Handle, string FileName, string strPath) - { - FileStream fs = new FileStream(strPath, FileMode.Open, FileAccess.Read); - byte[] buffer = new byte[fs.Length]; - fs.Read(buffer, 0, (int)fs.Length); - fs.Close(); - return Upload(Handle, FileName, buffer); - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.IO; +using System.Text; +using System.Drawing; +using System.Text.RegularExpressions; +using System.Threading; +using System.Collections; +using System.Collections.Specialized; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace LSLEditor.BugReport +{ + class UploadBugReport + { + public struct FileToUpload + { + public string FileName; + public string Body; + public string Path; + public FileToUpload(string FileName, string Body) + { + this.FileName = FileName; + this.Body = Body; + this.Path = null; + } + } + + public class UploadCompleteEventArgs : EventArgs + { + public int TotalBytes; + public UploadCompleteEventArgs(int intTotal) + { + this.TotalBytes = intTotal; + } + } + + public bool blnRunning; + + public delegate void UploadCompleteHandler(object sender, UploadCompleteEventArgs e); + public event UploadCompleteHandler OnComplete; + + private Thread thread; + private ProgressBar progressbar; + private List list; + + public void UploadAsync(List list, ProgressBar progressbar) + { + this.list = list; + this.progressbar = progressbar; + + this.blnRunning = true; + + thread = new Thread(new ThreadStart(Worker)); + thread.IsBackground = true; + thread.Name = "Worker"; + thread.Start(); + } + + public void Stop() + { + this.blnRunning = false; + if (thread != null) + { + thread.Join(1000); + thread = null; + } + } + + private void Worker() + { + int intTotal = 0; + try + { + org.lsleditor.www.Service1 webservice = new org.lsleditor.www.Service1(); + + string Handle = webservice.Open(); + if (Handle == null) + { + MessageBox.Show("Can't get an upload handle", "Oops..."); + this.blnRunning = false; + return; + } + + if (Properties.Settings.Default.Bugreports == null) + Properties.Settings.Default.Bugreports = new StringCollection(); + Properties.Settings.Default.Bugreports.Add(Handle); + + // Properties.Settings.Default.Save(); + + int intNumber = 0; + foreach (FileToUpload file in this.list) + { + string strFileName = string.Format("{0}-{1}", intNumber, file.FileName); + if (file.Path == null) + { + intTotal += Upload(Handle, strFileName, Encoding.ASCII.GetBytes(file.Body)); + } + else + { + intTotal += Upload(Handle, strFileName, file.Path); + } + intNumber++; + } + } + catch + { + intTotal = -1; + } + if (this.blnRunning) + if (OnComplete != null) + OnComplete(this, new UploadCompleteEventArgs(intTotal)); + this.blnRunning = false; + } + + private delegate void SetValueDelegate(int intValue); + + private void SetMaximum(int intMaximum) + { + if (this.progressbar.InvokeRequired) + { + this.progressbar.Invoke(new SetValueDelegate(SetMaximum), new object[] { intMaximum }); + } + else + { + this.progressbar.Maximum = intMaximum; + } + } + + private void SetValue(int intValue) + { + if (this.progressbar.InvokeRequired) + { + this.progressbar.Invoke(new SetValueDelegate(SetValue), new object[] { intValue }); + } + else + { + this.progressbar.Value = intValue; + } + } + private int Upload(string Handle, string FileName, byte[] buffer) + { + org.lsleditor.www.Service1 webservice = new org.lsleditor.www.Service1(); + if (Handle == null) + return 0; + + SetMaximum(buffer.Length); + int intOffset = 0; + int intTotal = 0; + byte[] smallbuffer = new byte[1024]; + while (this.blnRunning) + { + int intLength = Math.Min(smallbuffer.Length, buffer.Length - intOffset); + if (intLength <= 0) + break; + Array.Copy(buffer, intOffset, smallbuffer, 0, intLength); + intOffset += intLength; + string strError = webservice.Write(Handle, FileName, smallbuffer, intLength); + if (strError != null) + { + MessageBox.Show("Error:" + strError, "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); + break; + } + intTotal += intLength; + SetValue(intTotal); + } + return intTotal; + } + + private int Upload(string Handle, string FileName, string strPath) + { + FileStream fs = new FileStream(strPath, FileMode.Open, FileAccess.Read); + byte[] buffer = new byte[fs.Length]; + fs.Read(buffer, 0, (int)fs.Length); + fs.Close(); + return Upload(Handle, FileName, buffer); + } + } +} diff --git a/trunk/Decompressor/Decompress.cs b/source/Decompressor/Decompress.cs similarity index 97% rename from trunk/Decompressor/Decompress.cs rename to source/Decompressor/Decompress.cs index 504e110..30703ae 100644 --- a/trunk/Decompressor/Decompress.cs +++ b/source/Decompressor/Decompress.cs @@ -1,93 +1,93 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; // bitconvertor -using System.IO; -using System.IO.Compression; - -using System.Security.Cryptography; - - -namespace LSLEditor.Decompressor -{ - public class MD5Verify - { - public static string ComputeHash(string strFile) - { - MD5CryptoServiceProvider csp = new MD5CryptoServiceProvider(); - FileStream stream = File.OpenRead(strFile); - byte[] hash = csp.ComputeHash(stream); - stream.Close(); - return BitConverter.ToString(hash).Replace("-", "").ToLower(); - } - } - - public sealed class Gzip - { - public static void Decompress(Stream inStream, Stream outStream) - { - using (outStream) - { - using (GZipStream zipStream = new GZipStream(inStream, CompressionMode.Decompress)) - { - int ch = zipStream.ReadByte(); - while (ch != -1) - { - outStream.WriteByte((byte)ch); - ch = zipStream.ReadByte(); - } - } - } - } - } - - - public sealed class Zip - { - public static void Decompress(Stream inStream, Stream outStream) - { - ZipEntry zipEntry = ZipEntry.Read(inStream); - inStream.Close(); - using (outStream) - { - zipEntry.Extract(outStream); - } - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; // bitconvertor +using System.IO; +using System.IO.Compression; + +using System.Security.Cryptography; + + +namespace LSLEditor.Decompressor +{ + public class MD5Verify + { + public static string ComputeHash(string strFile) + { + MD5CryptoServiceProvider csp = new MD5CryptoServiceProvider(); + FileStream stream = File.OpenRead(strFile); + byte[] hash = csp.ComputeHash(stream); + stream.Close(); + return BitConverter.ToString(hash).Replace("-", "").ToLower(); + } + } + + public sealed class Gzip + { + public static void Decompress(Stream inStream, Stream outStream) + { + using (outStream) + { + using (GZipStream zipStream = new GZipStream(inStream, CompressionMode.Decompress)) + { + int ch = zipStream.ReadByte(); + while (ch != -1) + { + outStream.WriteByte((byte)ch); + ch = zipStream.ReadByte(); + } + } + } + } + } + + + public sealed class Zip + { + public static void Decompress(Stream inStream, Stream outStream) + { + ZipEntry zipEntry = ZipEntry.Read(inStream); + inStream.Close(); + using (outStream) + { + zipEntry.Extract(outStream); + } + } + } +} diff --git a/trunk/Decompressor/ZipEntry.cs b/source/Decompressor/ZipEntry.cs similarity index 96% rename from trunk/Decompressor/ZipEntry.cs rename to source/Decompressor/ZipEntry.cs index 35f1aaa..d8437bd 100644 --- a/trunk/Decompressor/ZipEntry.cs +++ b/source/Decompressor/ZipEntry.cs @@ -1,367 +1,367 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; - -namespace LSLEditor.Decompressor -{ - - public class ZipEntry - { - - private const int ZipEntrySignature = 0x04034b50; - private const int ZipEntryDataDescriptorSignature = 0x08074b50; - - private DateTime _LastModified; - - private string _FileName; - - private Int16 _VersionNeeded; - - private Int16 _BitField; - - private Int16 _CompressionMethod; - - private Int32 _CompressedSize; - - private Int32 _UncompressedSize; - - private Int32 _LastModDateTime; - private Int32 _Crc32; - private byte[] _Extra; - - private byte[] __filedata; - private byte[] _FileData - { - get - { - if (__filedata == null) - { - } - return __filedata; - } - } - - private System.IO.MemoryStream _UnderlyingMemoryStream; - private System.IO.Compression.DeflateStream _CompressedStream; - private System.IO.Compression.DeflateStream CompressedStream - { - get - { - if (_CompressedStream == null) - { - _UnderlyingMemoryStream = new System.IO.MemoryStream(); - bool LeaveUnderlyingStreamOpen = true; - _CompressedStream = new System.IO.Compression.DeflateStream(_UnderlyingMemoryStream, - System.IO.Compression.CompressionMode.Compress, - LeaveUnderlyingStreamOpen); - } - return _CompressedStream; - } - } - - private static bool ReadHeader(System.IO.Stream s, ZipEntry ze) - { - int signature = Shared.ReadSignature(s); - - // return null if this is not a local file header signature - if (SignatureIsNotValid(signature)) - { - s.Seek(-4, System.IO.SeekOrigin.Current); - return false; - } - - byte[] block = new byte[26]; - int n = s.Read(block, 0, block.Length); - if (n != block.Length) return false; - - int i = 0; - ze._VersionNeeded = (short)(block[i++] + block[i++] * 256); - ze._BitField = (short)(block[i++] + block[i++] * 256); - ze._CompressionMethod = (short)(block[i++] + block[i++] * 256); - ze._LastModDateTime = block[i++] + block[i++] * 256 + block[i++] * 256 * 256 + block[i++] * 256 * 256 * 256; - - // the PKZIP spec says that if bit 3 is set (0x0008), then the CRC, Compressed size, and uncompressed size - // come directly after the file data. The only way to find it is to scan the zip archive for the signature of - // the Data Descriptor, and presume that that signature does not appear in the (compressed) data of the compressed file. - - if ((ze._BitField & 0x0008) != 0x0008) - { - ze._Crc32 = block[i++] + block[i++] * 256 + block[i++] * 256 * 256 + block[i++] * 256 * 256 * 256; - ze._CompressedSize = block[i++] + block[i++] * 256 + block[i++] * 256 * 256 + block[i++] * 256 * 256 * 256; - ze._UncompressedSize = block[i++] + block[i++] * 256 + block[i++] * 256 * 256 + block[i++] * 256 * 256 * 256; - } - else - { - // the CRC, compressed size, and uncompressed size are stored later in the stream. - // here, we advance the pointer. - i += 12; - } - - Int16 filenameLength = (short)(block[i++] + block[i++] * 256); - Int16 extraFieldLength = (short)(block[i++] + block[i++] * 256); - - block = new byte[filenameLength]; - n = s.Read(block, 0, block.Length); - ze._FileName = Shared.StringFromBuffer(block, 0, block.Length); - - ze._Extra = new byte[extraFieldLength]; - n = s.Read(ze._Extra, 0, ze._Extra.Length); - - // transform the time data into something usable - ze._LastModified = Shared.PackedToDateTime(ze._LastModDateTime); - - // actually get the compressed size and CRC if necessary - if ((ze._BitField & 0x0008) == 0x0008) - { - long posn = s.Position; - long SizeOfDataRead = Shared.FindSignature(s, ZipEntryDataDescriptorSignature); - if (SizeOfDataRead == -1) return false; - - // read 3x 4-byte fields (CRC, Compressed Size, Uncompressed Size) - block = new byte[12]; - n = s.Read(block, 0, block.Length); - if (n != 12) return false; - i = 0; - ze._Crc32 = block[i++] + block[i++] * 256 + block[i++] * 256 * 256 + block[i++] * 256 * 256 * 256; - ze._CompressedSize = block[i++] + block[i++] * 256 + block[i++] * 256 * 256 + block[i++] * 256 * 256 * 256; - ze._UncompressedSize = block[i++] + block[i++] * 256 + block[i++] * 256 * 256 + block[i++] * 256 * 256 * 256; - - if (SizeOfDataRead != ze._CompressedSize) - throw new Exception("Data format error (bit 3 is set)"); - - // seek back to previous position, to read file data - s.Seek(posn, System.IO.SeekOrigin.Begin); - } - - return true; - } - - - private static bool SignatureIsNotValid(int signature) - { - return (signature != ZipEntrySignature); - } - - public static ZipEntry Read(System.IO.Stream s) - { - ZipEntry entry = new ZipEntry(); - if (!ReadHeader(s, entry)) return null; - - entry.__filedata = new byte[entry._CompressedSize]; - int n = s.Read(entry._FileData, 0, entry._FileData.Length); - if (n != entry._FileData.Length) - { - throw new Exception("badly formatted zip file."); - } - // finally, seek past the (already read) Data descriptor if necessary - if ((entry._BitField & 0x0008) == 0x0008) - { - s.Seek(16, System.IO.SeekOrigin.Current); - } - return entry; - } - - - public void Extract(System.IO.Stream s) - { - using (System.IO.MemoryStream memstream = new System.IO.MemoryStream(_FileData)) - { - System.IO.Stream input = null; - try - { - if (this._CompressedSize == this._UncompressedSize) - { - input = memstream; - } - else - { - input = new System.IO.Compression.DeflateStream(memstream, System.IO.Compression.CompressionMode.Decompress); - } - - System.IO.Stream output = null; - try - { - output = s; - - - byte[] bytes = new byte[4096]; - int n; - - n = 1; // anything non-zero - while (n != 0) - { - n = input.Read(bytes, 0, bytes.Length); - if (n > 0) - { - output.Write(bytes, 0, n); - } - } - } - finally - { - // we only close the output stream if we opened it. - if (output != null) - { - output.Close(); - output.Dispose(); - } - } - } - finally - { - // we only close the output stream if we opened it. - // we cannot use using() here because in some cases we do not want to Dispose the stream! - if ((input != null) && (input != memstream)) - { - input.Close(); - input.Dispose(); - } - } - } - } - - } - - class Shared - { - protected internal static string StringFromBuffer(byte[] buf, int start, int maxlength) - { - int i; - char[] c = new char[maxlength]; - for (i = 0; (i < maxlength) && (i < buf.Length) && (buf[i] != 0); i++) - { - c[i] = (char)buf[i]; // System.BitConverter.ToChar(buf, start+i*2); - } - string s = new System.String(c, 0, i); - return s; - } - - protected internal static int ReadSignature(System.IO.Stream s) - { - int n = 0; - byte[] sig = new byte[4]; - n = s.Read(sig, 0, sig.Length); - if (n != sig.Length) throw new Exception("Could not read signature - no data!"); - int signature = (((sig[3] * 256 + sig[2]) * 256) + sig[1]) * 256 + sig[0]; - return signature; - } - - protected internal static long FindSignature(System.IO.Stream s, int SignatureToFind) - { - long startingPosition = s.Position; - - int BATCH_SIZE = 1024; - byte[] targetBytes = new byte[4]; - targetBytes[0] = (byte)(SignatureToFind >> 24); - targetBytes[1] = (byte)((SignatureToFind & 0x00FF0000) >> 16); - targetBytes[2] = (byte)((SignatureToFind & 0x0000FF00) >> 8); - targetBytes[3] = (byte)(SignatureToFind & 0x000000FF); - byte[] batch = new byte[BATCH_SIZE]; - int n = 0; - bool success = false; - do - { - n = s.Read(batch, 0, batch.Length); - if (n != 0) - { - for (int i = 0; i < n; i++) - { - if (batch[i] == targetBytes[3]) - { - s.Seek(i - n, System.IO.SeekOrigin.Current); - int sig = ReadSignature(s); - success = (sig == SignatureToFind); - if (!success) s.Seek(-3, System.IO.SeekOrigin.Current); - break; // out of for loop - } - } - } - else break; - if (success) break; - } while (true); - if (!success) - { - s.Seek(startingPosition, System.IO.SeekOrigin.Begin); - return -1; // or throw? - } - - // subtract 4 for the signature. - long bytesRead = (s.Position - startingPosition) - 4; - // number of bytes read, should be the same as compressed size of file - return bytesRead; - } - protected internal static DateTime PackedToDateTime(Int32 packedDateTime) - { - Int16 packedTime = (Int16)(packedDateTime & 0x0000ffff); - Int16 packedDate = (Int16)((packedDateTime & 0xffff0000) >> 16); - - int year = 1980 + ((packedDate & 0xFE00) >> 9); - int month = (packedDate & 0x01E0) >> 5; - int day = packedDate & 0x001F; - - - int hour = (packedTime & 0xF800) >> 11; - int minute = (packedTime & 0x07E0) >> 5; - int second = packedTime & 0x001F; - - DateTime d = System.DateTime.Now; - try { d = new System.DateTime(year, month, day, hour, minute, second, 0); } - catch - { - Console.Write("\nInvalid date/time?:\nyear: {0} ", year); - Console.Write("month: {0} ", month); - Console.WriteLine("day: {0} ", day); - Console.WriteLine("HH:MM:SS= {0}:{1}:{2}", hour, minute, second); - } - - return d; - } - - - protected internal static Int32 DateTimeToPacked(DateTime time) - { - UInt16 packedDate = (UInt16)((time.Day & 0x0000001F) | ((time.Month << 5) & 0x000001E0) | (((time.Year - 1980) << 9) & 0x0000FE00)); - UInt16 packedTime = (UInt16)((time.Second & 0x0000001F) | ((time.Minute << 5) & 0x000007E0) | ((time.Hour << 11) & 0x0000F800)); - return (Int32)(((UInt32)(packedDate << 16)) | packedTime); - } - } - -} - +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; + +namespace LSLEditor.Decompressor +{ + + public class ZipEntry + { + + private const int ZipEntrySignature = 0x04034b50; + private const int ZipEntryDataDescriptorSignature = 0x08074b50; + + private DateTime _LastModified; + + private string _FileName; + + private Int16 _VersionNeeded; + + private Int16 _BitField; + + private Int16 _CompressionMethod; + + private Int32 _CompressedSize; + + private Int32 _UncompressedSize; + + private Int32 _LastModDateTime; + private Int32 _Crc32; + private byte[] _Extra; + + private byte[] __filedata; + private byte[] _FileData + { + get + { + if (__filedata == null) + { + } + return __filedata; + } + } + + private System.IO.MemoryStream _UnderlyingMemoryStream; + private System.IO.Compression.DeflateStream _CompressedStream; + private System.IO.Compression.DeflateStream CompressedStream + { + get + { + if (_CompressedStream == null) + { + _UnderlyingMemoryStream = new System.IO.MemoryStream(); + bool LeaveUnderlyingStreamOpen = true; + _CompressedStream = new System.IO.Compression.DeflateStream(_UnderlyingMemoryStream, + System.IO.Compression.CompressionMode.Compress, + LeaveUnderlyingStreamOpen); + } + return _CompressedStream; + } + } + + private static bool ReadHeader(System.IO.Stream s, ZipEntry ze) + { + int signature = Shared.ReadSignature(s); + + // return null if this is not a local file header signature + if (SignatureIsNotValid(signature)) + { + s.Seek(-4, System.IO.SeekOrigin.Current); + return false; + } + + byte[] block = new byte[26]; + int n = s.Read(block, 0, block.Length); + if (n != block.Length) return false; + + int i = 0; + ze._VersionNeeded = (short)(block[i++] + block[i++] * 256); + ze._BitField = (short)(block[i++] + block[i++] * 256); + ze._CompressionMethod = (short)(block[i++] + block[i++] * 256); + ze._LastModDateTime = block[i++] + block[i++] * 256 + block[i++] * 256 * 256 + block[i++] * 256 * 256 * 256; + + // the PKZIP spec says that if bit 3 is set (0x0008), then the CRC, Compressed size, and uncompressed size + // come directly after the file data. The only way to find it is to scan the zip archive for the signature of + // the Data Descriptor, and presume that that signature does not appear in the (compressed) data of the compressed file. + + if ((ze._BitField & 0x0008) != 0x0008) + { + ze._Crc32 = block[i++] + block[i++] * 256 + block[i++] * 256 * 256 + block[i++] * 256 * 256 * 256; + ze._CompressedSize = block[i++] + block[i++] * 256 + block[i++] * 256 * 256 + block[i++] * 256 * 256 * 256; + ze._UncompressedSize = block[i++] + block[i++] * 256 + block[i++] * 256 * 256 + block[i++] * 256 * 256 * 256; + } + else + { + // the CRC, compressed size, and uncompressed size are stored later in the stream. + // here, we advance the pointer. + i += 12; + } + + Int16 filenameLength = (short)(block[i++] + block[i++] * 256); + Int16 extraFieldLength = (short)(block[i++] + block[i++] * 256); + + block = new byte[filenameLength]; + n = s.Read(block, 0, block.Length); + ze._FileName = Shared.StringFromBuffer(block, 0, block.Length); + + ze._Extra = new byte[extraFieldLength]; + n = s.Read(ze._Extra, 0, ze._Extra.Length); + + // transform the time data into something usable + ze._LastModified = Shared.PackedToDateTime(ze._LastModDateTime); + + // actually get the compressed size and CRC if necessary + if ((ze._BitField & 0x0008) == 0x0008) + { + long posn = s.Position; + long SizeOfDataRead = Shared.FindSignature(s, ZipEntryDataDescriptorSignature); + if (SizeOfDataRead == -1) return false; + + // read 3x 4-byte fields (CRC, Compressed Size, Uncompressed Size) + block = new byte[12]; + n = s.Read(block, 0, block.Length); + if (n != 12) return false; + i = 0; + ze._Crc32 = block[i++] + block[i++] * 256 + block[i++] * 256 * 256 + block[i++] * 256 * 256 * 256; + ze._CompressedSize = block[i++] + block[i++] * 256 + block[i++] * 256 * 256 + block[i++] * 256 * 256 * 256; + ze._UncompressedSize = block[i++] + block[i++] * 256 + block[i++] * 256 * 256 + block[i++] * 256 * 256 * 256; + + if (SizeOfDataRead != ze._CompressedSize) + throw new Exception("Data format error (bit 3 is set)"); + + // seek back to previous position, to read file data + s.Seek(posn, System.IO.SeekOrigin.Begin); + } + + return true; + } + + + private static bool SignatureIsNotValid(int signature) + { + return (signature != ZipEntrySignature); + } + + public static ZipEntry Read(System.IO.Stream s) + { + ZipEntry entry = new ZipEntry(); + if (!ReadHeader(s, entry)) return null; + + entry.__filedata = new byte[entry._CompressedSize]; + int n = s.Read(entry._FileData, 0, entry._FileData.Length); + if (n != entry._FileData.Length) + { + throw new Exception("badly formatted zip file."); + } + // finally, seek past the (already read) Data descriptor if necessary + if ((entry._BitField & 0x0008) == 0x0008) + { + s.Seek(16, System.IO.SeekOrigin.Current); + } + return entry; + } + + + public void Extract(System.IO.Stream s) + { + using (System.IO.MemoryStream memstream = new System.IO.MemoryStream(_FileData)) + { + System.IO.Stream input = null; + try + { + if (this._CompressedSize == this._UncompressedSize) + { + input = memstream; + } + else + { + input = new System.IO.Compression.DeflateStream(memstream, System.IO.Compression.CompressionMode.Decompress); + } + + System.IO.Stream output = null; + try + { + output = s; + + + byte[] bytes = new byte[4096]; + int n; + + n = 1; // anything non-zero + while (n != 0) + { + n = input.Read(bytes, 0, bytes.Length); + if (n > 0) + { + output.Write(bytes, 0, n); + } + } + } + finally + { + // we only close the output stream if we opened it. + if (output != null) + { + output.Close(); + output.Dispose(); + } + } + } + finally + { + // we only close the output stream if we opened it. + // we cannot use using() here because in some cases we do not want to Dispose the stream! + if ((input != null) && (input != memstream)) + { + input.Close(); + input.Dispose(); + } + } + } + } + + } + + class Shared + { + protected internal static string StringFromBuffer(byte[] buf, int start, int maxlength) + { + int i; + char[] c = new char[maxlength]; + for (i = 0; (i < maxlength) && (i < buf.Length) && (buf[i] != 0); i++) + { + c[i] = (char)buf[i]; // System.BitConverter.ToChar(buf, start+i*2); + } + string s = new System.String(c, 0, i); + return s; + } + + protected internal static int ReadSignature(System.IO.Stream s) + { + int n = 0; + byte[] sig = new byte[4]; + n = s.Read(sig, 0, sig.Length); + if (n != sig.Length) throw new Exception("Could not read signature - no data!"); + int signature = (((sig[3] * 256 + sig[2]) * 256) + sig[1]) * 256 + sig[0]; + return signature; + } + + protected internal static long FindSignature(System.IO.Stream s, int SignatureToFind) + { + long startingPosition = s.Position; + + int BATCH_SIZE = 1024; + byte[] targetBytes = new byte[4]; + targetBytes[0] = (byte)(SignatureToFind >> 24); + targetBytes[1] = (byte)((SignatureToFind & 0x00FF0000) >> 16); + targetBytes[2] = (byte)((SignatureToFind & 0x0000FF00) >> 8); + targetBytes[3] = (byte)(SignatureToFind & 0x000000FF); + byte[] batch = new byte[BATCH_SIZE]; + int n = 0; + bool success = false; + do + { + n = s.Read(batch, 0, batch.Length); + if (n != 0) + { + for (int i = 0; i < n; i++) + { + if (batch[i] == targetBytes[3]) + { + s.Seek(i - n, System.IO.SeekOrigin.Current); + int sig = ReadSignature(s); + success = (sig == SignatureToFind); + if (!success) s.Seek(-3, System.IO.SeekOrigin.Current); + break; // out of for loop + } + } + } + else break; + if (success) break; + } while (true); + if (!success) + { + s.Seek(startingPosition, System.IO.SeekOrigin.Begin); + return -1; // or throw? + } + + // subtract 4 for the signature. + long bytesRead = (s.Position - startingPosition) - 4; + // number of bytes read, should be the same as compressed size of file + return bytesRead; + } + protected internal static DateTime PackedToDateTime(Int32 packedDateTime) + { + Int16 packedTime = (Int16)(packedDateTime & 0x0000ffff); + Int16 packedDate = (Int16)((packedDateTime & 0xffff0000) >> 16); + + int year = 1980 + ((packedDate & 0xFE00) >> 9); + int month = (packedDate & 0x01E0) >> 5; + int day = packedDate & 0x001F; + + + int hour = (packedTime & 0xF800) >> 11; + int minute = (packedTime & 0x07E0) >> 5; + int second = packedTime & 0x001F; + + DateTime d = System.DateTime.Now; + try { d = new System.DateTime(year, month, day, hour, minute, second, 0); } + catch + { + Console.Write("\nInvalid date/time?:\nyear: {0} ", year); + Console.Write("month: {0} ", month); + Console.WriteLine("day: {0} ", day); + Console.WriteLine("HH:MM:SS= {0}:{1}:{2}", hour, minute, second); + } + + return d; + } + + + protected internal static Int32 DateTimeToPacked(DateTime time) + { + UInt16 packedDate = (UInt16)((time.Day & 0x0000001F) | ((time.Month << 5) & 0x000001E0) | (((time.Year - 1980) << 9) & 0x0000FE00)); + UInt16 packedTime = (UInt16)((time.Second & 0x0000001F) | ((time.Minute << 5) & 0x000007E0) | ((time.Hour << 11) & 0x0000F800)); + return (Int32)(((UInt32)(packedDate << 16)) | packedTime); + } + } + +} + diff --git a/trunk/Docking/AutoHideStripBase.cs b/source/Docking/AutoHideStripBase.cs similarity index 96% rename from trunk/Docking/AutoHideStripBase.cs rename to source/Docking/AutoHideStripBase.cs index 5889641..6f56b38 100644 --- a/trunk/Docking/AutoHideStripBase.cs +++ b/source/Docking/AutoHideStripBase.cs @@ -1,530 +1,530 @@ -using System; -using System.Collections; -using System.Windows.Forms; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace LSLEditor.Docking -{ - public abstract partial class AutoHideStripBase : Control - { - [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] - protected class Tab : IDisposable - { - private IDockContent m_content; - - protected internal Tab(IDockContent content) - { - m_content = content; - } - - ~Tab() - { - Dispose(false); - } - - public IDockContent Content - { - get { return m_content; } - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - } - } - - [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] - protected sealed class TabCollection : IEnumerable - { - #region IEnumerable Members - IEnumerator IEnumerable.GetEnumerator() - { - for (int i = 0; i < Count; i++) - yield return this[i]; - } - - IEnumerator IEnumerable.GetEnumerator() - { - for (int i = 0; i < Count; i++) - yield return this[i]; - } - #endregion - - internal TabCollection(DockPane pane) - { - m_dockPane = pane; - } - - private DockPane m_dockPane = null; - public DockPane DockPane - { - get { return m_dockPane; } - } - - public DockPanel DockPanel - { - get { return DockPane.DockPanel; } - } - - public int Count - { - get { return DockPane.DisplayingContents.Count; } - } - - public Tab this[int index] - { - get - { - IDockContent content = DockPane.DisplayingContents[index]; - if (content == null) - throw (new ArgumentOutOfRangeException("index")); - if (content.DockHandler.AutoHideTab == null) - content.DockHandler.AutoHideTab = (DockPanel.AutoHideStripControl.CreateTab(content)); - return content.DockHandler.AutoHideTab as Tab; - } - } - - public bool Contains(Tab tab) - { - return (IndexOf(tab) != -1); - } - - public bool Contains(IDockContent content) - { - return (IndexOf(content) != -1); - } - - public int IndexOf(Tab tab) - { - if (tab == null) - return -1; - - return IndexOf(tab.Content); - } - - public int IndexOf(IDockContent content) - { - return DockPane.DisplayingContents.IndexOf(content); - } - } - - [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] - protected class Pane : IDisposable - { - private DockPane m_dockPane; - - protected internal Pane(DockPane dockPane) - { - m_dockPane = dockPane; - } - - ~Pane() - { - Dispose(false); - } - - public DockPane DockPane - { - get { return m_dockPane; } - } - - public TabCollection AutoHideTabs - { - get - { - if (DockPane.AutoHideTabs == null) - DockPane.AutoHideTabs = new TabCollection(DockPane); - return DockPane.AutoHideTabs as TabCollection; - } - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - } - } - - [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] - protected sealed class PaneCollection : IEnumerable - { - private class AutoHideState - { - public DockState m_dockState; - public bool m_selected = false; - - public AutoHideState(DockState dockState) - { - m_dockState = dockState; - } - - public DockState DockState - { - get { return m_dockState; } - } - - public bool Selected - { - get { return m_selected; } - set { m_selected = value; } - } - } - - private class AutoHideStateCollection - { - private AutoHideState[] m_states; - - public AutoHideStateCollection() - { - m_states = new AutoHideState[] { - new AutoHideState(DockState.DockTopAutoHide), - new AutoHideState(DockState.DockBottomAutoHide), - new AutoHideState(DockState.DockLeftAutoHide), - new AutoHideState(DockState.DockRightAutoHide) - }; - } - - public AutoHideState this[DockState dockState] - { - get - { - for (int i = 0; i < m_states.Length; i++) - { - if (m_states[i].DockState == dockState) - return m_states[i]; - } - throw new ArgumentOutOfRangeException("dockState"); - } - } - - public bool ContainsPane(DockPane pane) - { - if (pane.IsHidden) - return false; - - for (int i = 0; i < m_states.Length; i++) - { - if (m_states[i].DockState == pane.DockState && m_states[i].Selected) - return true; - } - return false; - } - } - - internal PaneCollection(DockPanel panel, DockState dockState) - { - m_dockPanel = panel; - m_states = new AutoHideStateCollection(); - States[DockState.DockTopAutoHide].Selected = (dockState == DockState.DockTopAutoHide); - States[DockState.DockBottomAutoHide].Selected = (dockState == DockState.DockBottomAutoHide); - States[DockState.DockLeftAutoHide].Selected = (dockState == DockState.DockLeftAutoHide); - States[DockState.DockRightAutoHide].Selected = (dockState == DockState.DockRightAutoHide); - } - - private DockPanel m_dockPanel; - public DockPanel DockPanel - { - get { return m_dockPanel; } - } - - private AutoHideStateCollection m_states; - private AutoHideStateCollection States - { - get { return m_states; } - } - - public int Count - { - get - { - int count = 0; - foreach (DockPane pane in DockPanel.Panes) - { - if (States.ContainsPane(pane)) - count++; - } - - return count; - } - } - - public Pane this[int index] - { - get - { - int count = 0; - foreach (DockPane pane in DockPanel.Panes) - { - if (!States.ContainsPane(pane)) - continue; - - if (count == index) - { - if (pane.AutoHidePane == null) - pane.AutoHidePane = DockPanel.AutoHideStripControl.CreatePane(pane); - return pane.AutoHidePane as Pane; - } - - count++; - } - throw new ArgumentOutOfRangeException("index"); - } - } - - public bool Contains(Pane pane) - { - return (IndexOf(pane) != -1); - } - - public int IndexOf(Pane pane) - { - if (pane == null) - return -1; - - int index = 0; - foreach (DockPane dockPane in DockPanel.Panes) - { - if (!States.ContainsPane(pane.DockPane)) - continue; - - if (pane == dockPane.AutoHidePane) - return index; - - index++; - } - return -1; - } - - #region IEnumerable Members - - IEnumerator IEnumerable.GetEnumerator() - { - for (int i = 0; i < Count; i++) - yield return this[i]; - } - - IEnumerator IEnumerable.GetEnumerator() - { - for (int i = 0; i < Count; i++) - yield return this[i]; - } - - #endregion - } - - protected AutoHideStripBase(DockPanel panel) - { - m_dockPanel = panel; - m_panesTop = new PaneCollection(panel, DockState.DockTopAutoHide); - m_panesBottom = new PaneCollection(panel, DockState.DockBottomAutoHide); - m_panesLeft = new PaneCollection(panel, DockState.DockLeftAutoHide); - m_panesRight = new PaneCollection(panel, DockState.DockRightAutoHide); - - SetStyle(ControlStyles.OptimizedDoubleBuffer, true); - SetStyle(ControlStyles.Selectable, false); - } - - private DockPanel m_dockPanel; - protected DockPanel DockPanel - { - get { return m_dockPanel; } - } - - private PaneCollection m_panesTop; - protected PaneCollection PanesTop - { - get { return m_panesTop; } - } - - private PaneCollection m_panesBottom; - protected PaneCollection PanesBottom - { - get { return m_panesBottom; } - } - - private PaneCollection m_panesLeft; - protected PaneCollection PanesLeft - { - get { return m_panesLeft; } - } - - private PaneCollection m_panesRight; - protected PaneCollection PanesRight - { - get { return m_panesRight; } - } - - protected PaneCollection GetPanes(DockState dockState) - { - if (dockState == DockState.DockTopAutoHide) - return PanesTop; - else if (dockState == DockState.DockBottomAutoHide) - return PanesBottom; - else if (dockState == DockState.DockLeftAutoHide) - return PanesLeft; - else if (dockState == DockState.DockRightAutoHide) - return PanesRight; - else - throw new ArgumentOutOfRangeException("dockState"); - } - - internal int GetNumberOfPanes(DockState dockState) - { - return GetPanes(dockState).Count; - } - - protected Rectangle RectangleTopLeft - { - get - { - int height = MeasureHeight(); - return PanesTop.Count > 0 && PanesLeft.Count > 0 ? new Rectangle(0, 0, height, height) : Rectangle.Empty; - } - } - - protected Rectangle RectangleTopRight - { - get - { - int height = MeasureHeight(); - return PanesTop.Count > 0 && PanesRight.Count > 0 ? new Rectangle(Width - height, 0, height, height) : Rectangle.Empty; - } - } - - protected Rectangle RectangleBottomLeft - { - get - { - int height = MeasureHeight(); - return PanesBottom.Count > 0 && PanesLeft.Count > 0 ? new Rectangle(0, Height - height, height, height) : Rectangle.Empty; - } - } - - protected Rectangle RectangleBottomRight - { - get - { - int height = MeasureHeight(); - return PanesBottom.Count > 0 && PanesRight.Count > 0 ? new Rectangle(Width - height, Height - height, height, height) : Rectangle.Empty; - } - } - - protected internal Rectangle GetTabStripRectangle(DockState dockState) - { - int height = MeasureHeight(); - if (dockState == DockState.DockTopAutoHide && PanesTop.Count > 0) - return new Rectangle(RectangleTopLeft.Width, 0, Width - RectangleTopLeft.Width - RectangleTopRight.Width, height); - else if (dockState == DockState.DockBottomAutoHide && PanesBottom.Count > 0) - return new Rectangle(RectangleBottomLeft.Width, Height - height, Width - RectangleBottomLeft.Width - RectangleBottomRight.Width, height); - else if (dockState == DockState.DockLeftAutoHide && PanesLeft.Count > 0) - return new Rectangle(0, RectangleTopLeft.Width, height, Height - RectangleTopLeft.Height - RectangleBottomLeft.Height); - else if (dockState == DockState.DockRightAutoHide && PanesRight.Count > 0) - return new Rectangle(Width - height, RectangleTopRight.Width, height, Height - RectangleTopRight.Height - RectangleBottomRight.Height); - else - return Rectangle.Empty; - } - - private GraphicsPath m_displayingArea = null; - private GraphicsPath DisplayingArea - { - get - { - if (m_displayingArea == null) - m_displayingArea = new GraphicsPath(); - - return m_displayingArea; - } - } - - private void SetRegion() - { - DisplayingArea.Reset(); - DisplayingArea.AddRectangle(RectangleTopLeft); - DisplayingArea.AddRectangle(RectangleTopRight); - DisplayingArea.AddRectangle(RectangleBottomLeft); - DisplayingArea.AddRectangle(RectangleBottomRight); - DisplayingArea.AddRectangle(GetTabStripRectangle(DockState.DockTopAutoHide)); - DisplayingArea.AddRectangle(GetTabStripRectangle(DockState.DockBottomAutoHide)); - DisplayingArea.AddRectangle(GetTabStripRectangle(DockState.DockLeftAutoHide)); - DisplayingArea.AddRectangle(GetTabStripRectangle(DockState.DockRightAutoHide)); - Region = new Region(DisplayingArea); - } - - protected override void OnMouseDown(MouseEventArgs e) - { - base.OnMouseDown(e); - - if (e.Button != MouseButtons.Left) - return; - - IDockContent content = HitTest(); - if (content == null) - return; - - content.DockHandler.Activate(); - } - - protected override void OnMouseHover(EventArgs e) - { - base.OnMouseHover(e); - - IDockContent content = HitTest(); - if (content != null && DockPanel.ActiveAutoHideContent != content) - DockPanel.ActiveAutoHideContent = content; - - // requires further tracking of mouse hover behavior, - ResetMouseEventArgs(); - } - - protected override void OnLayout(LayoutEventArgs levent) - { - RefreshChanges(); - base.OnLayout (levent); - } - - internal void RefreshChanges() - { - if (IsDisposed) - return; - - SetRegion(); - OnRefreshChanges(); - } - - protected virtual void OnRefreshChanges() - { - } - - protected internal abstract int MeasureHeight(); - - private IDockContent HitTest() - { - Point ptMouse = PointToClient(Control.MousePosition); - return HitTest(ptMouse); - } - - protected virtual Tab CreateTab(IDockContent content) - { - return new Tab(content); - } - - protected virtual Pane CreatePane(DockPane dockPane) - { - return new Pane(dockPane); - } - - protected abstract IDockContent HitTest(Point point); - } -} +using System; +using System.Collections; +using System.Windows.Forms; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace LSLEditor.Docking +{ + public abstract partial class AutoHideStripBase : Control + { + [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] + protected class Tab : IDisposable + { + private IDockContent m_content; + + protected internal Tab(IDockContent content) + { + m_content = content; + } + + ~Tab() + { + Dispose(false); + } + + public IDockContent Content + { + get { return m_content; } + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + } + } + + [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] + protected sealed class TabCollection : IEnumerable + { + #region IEnumerable Members + IEnumerator IEnumerable.GetEnumerator() + { + for (int i = 0; i < Count; i++) + yield return this[i]; + } + + IEnumerator IEnumerable.GetEnumerator() + { + for (int i = 0; i < Count; i++) + yield return this[i]; + } + #endregion + + internal TabCollection(DockPane pane) + { + m_dockPane = pane; + } + + private DockPane m_dockPane = null; + public DockPane DockPane + { + get { return m_dockPane; } + } + + public DockPanel DockPanel + { + get { return DockPane.DockPanel; } + } + + public int Count + { + get { return DockPane.DisplayingContents.Count; } + } + + public Tab this[int index] + { + get + { + IDockContent content = DockPane.DisplayingContents[index]; + if (content == null) + throw (new ArgumentOutOfRangeException("index")); + if (content.DockHandler.AutoHideTab == null) + content.DockHandler.AutoHideTab = (DockPanel.AutoHideStripControl.CreateTab(content)); + return content.DockHandler.AutoHideTab as Tab; + } + } + + public bool Contains(Tab tab) + { + return (IndexOf(tab) != -1); + } + + public bool Contains(IDockContent content) + { + return (IndexOf(content) != -1); + } + + public int IndexOf(Tab tab) + { + if (tab == null) + return -1; + + return IndexOf(tab.Content); + } + + public int IndexOf(IDockContent content) + { + return DockPane.DisplayingContents.IndexOf(content); + } + } + + [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] + protected class Pane : IDisposable + { + private DockPane m_dockPane; + + protected internal Pane(DockPane dockPane) + { + m_dockPane = dockPane; + } + + ~Pane() + { + Dispose(false); + } + + public DockPane DockPane + { + get { return m_dockPane; } + } + + public TabCollection AutoHideTabs + { + get + { + if (DockPane.AutoHideTabs == null) + DockPane.AutoHideTabs = new TabCollection(DockPane); + return DockPane.AutoHideTabs as TabCollection; + } + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + } + } + + [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] + protected sealed class PaneCollection : IEnumerable + { + private class AutoHideState + { + public DockState m_dockState; + public bool m_selected = false; + + public AutoHideState(DockState dockState) + { + m_dockState = dockState; + } + + public DockState DockState + { + get { return m_dockState; } + } + + public bool Selected + { + get { return m_selected; } + set { m_selected = value; } + } + } + + private class AutoHideStateCollection + { + private AutoHideState[] m_states; + + public AutoHideStateCollection() + { + m_states = new AutoHideState[] { + new AutoHideState(DockState.DockTopAutoHide), + new AutoHideState(DockState.DockBottomAutoHide), + new AutoHideState(DockState.DockLeftAutoHide), + new AutoHideState(DockState.DockRightAutoHide) + }; + } + + public AutoHideState this[DockState dockState] + { + get + { + for (int i = 0; i < m_states.Length; i++) + { + if (m_states[i].DockState == dockState) + return m_states[i]; + } + throw new ArgumentOutOfRangeException("dockState"); + } + } + + public bool ContainsPane(DockPane pane) + { + if (pane.IsHidden) + return false; + + for (int i = 0; i < m_states.Length; i++) + { + if (m_states[i].DockState == pane.DockState && m_states[i].Selected) + return true; + } + return false; + } + } + + internal PaneCollection(DockPanel panel, DockState dockState) + { + m_dockPanel = panel; + m_states = new AutoHideStateCollection(); + States[DockState.DockTopAutoHide].Selected = (dockState == DockState.DockTopAutoHide); + States[DockState.DockBottomAutoHide].Selected = (dockState == DockState.DockBottomAutoHide); + States[DockState.DockLeftAutoHide].Selected = (dockState == DockState.DockLeftAutoHide); + States[DockState.DockRightAutoHide].Selected = (dockState == DockState.DockRightAutoHide); + } + + private DockPanel m_dockPanel; + public DockPanel DockPanel + { + get { return m_dockPanel; } + } + + private AutoHideStateCollection m_states; + private AutoHideStateCollection States + { + get { return m_states; } + } + + public int Count + { + get + { + int count = 0; + foreach (DockPane pane in DockPanel.Panes) + { + if (States.ContainsPane(pane)) + count++; + } + + return count; + } + } + + public Pane this[int index] + { + get + { + int count = 0; + foreach (DockPane pane in DockPanel.Panes) + { + if (!States.ContainsPane(pane)) + continue; + + if (count == index) + { + if (pane.AutoHidePane == null) + pane.AutoHidePane = DockPanel.AutoHideStripControl.CreatePane(pane); + return pane.AutoHidePane as Pane; + } + + count++; + } + throw new ArgumentOutOfRangeException("index"); + } + } + + public bool Contains(Pane pane) + { + return (IndexOf(pane) != -1); + } + + public int IndexOf(Pane pane) + { + if (pane == null) + return -1; + + int index = 0; + foreach (DockPane dockPane in DockPanel.Panes) + { + if (!States.ContainsPane(pane.DockPane)) + continue; + + if (pane == dockPane.AutoHidePane) + return index; + + index++; + } + return -1; + } + + #region IEnumerable Members + + IEnumerator IEnumerable.GetEnumerator() + { + for (int i = 0; i < Count; i++) + yield return this[i]; + } + + IEnumerator IEnumerable.GetEnumerator() + { + for (int i = 0; i < Count; i++) + yield return this[i]; + } + + #endregion + } + + protected AutoHideStripBase(DockPanel panel) + { + m_dockPanel = panel; + m_panesTop = new PaneCollection(panel, DockState.DockTopAutoHide); + m_panesBottom = new PaneCollection(panel, DockState.DockBottomAutoHide); + m_panesLeft = new PaneCollection(panel, DockState.DockLeftAutoHide); + m_panesRight = new PaneCollection(panel, DockState.DockRightAutoHide); + + SetStyle(ControlStyles.OptimizedDoubleBuffer, true); + SetStyle(ControlStyles.Selectable, false); + } + + private DockPanel m_dockPanel; + protected DockPanel DockPanel + { + get { return m_dockPanel; } + } + + private PaneCollection m_panesTop; + protected PaneCollection PanesTop + { + get { return m_panesTop; } + } + + private PaneCollection m_panesBottom; + protected PaneCollection PanesBottom + { + get { return m_panesBottom; } + } + + private PaneCollection m_panesLeft; + protected PaneCollection PanesLeft + { + get { return m_panesLeft; } + } + + private PaneCollection m_panesRight; + protected PaneCollection PanesRight + { + get { return m_panesRight; } + } + + protected PaneCollection GetPanes(DockState dockState) + { + if (dockState == DockState.DockTopAutoHide) + return PanesTop; + else if (dockState == DockState.DockBottomAutoHide) + return PanesBottom; + else if (dockState == DockState.DockLeftAutoHide) + return PanesLeft; + else if (dockState == DockState.DockRightAutoHide) + return PanesRight; + else + throw new ArgumentOutOfRangeException("dockState"); + } + + internal int GetNumberOfPanes(DockState dockState) + { + return GetPanes(dockState).Count; + } + + protected Rectangle RectangleTopLeft + { + get + { + int height = MeasureHeight(); + return PanesTop.Count > 0 && PanesLeft.Count > 0 ? new Rectangle(0, 0, height, height) : Rectangle.Empty; + } + } + + protected Rectangle RectangleTopRight + { + get + { + int height = MeasureHeight(); + return PanesTop.Count > 0 && PanesRight.Count > 0 ? new Rectangle(Width - height, 0, height, height) : Rectangle.Empty; + } + } + + protected Rectangle RectangleBottomLeft + { + get + { + int height = MeasureHeight(); + return PanesBottom.Count > 0 && PanesLeft.Count > 0 ? new Rectangle(0, Height - height, height, height) : Rectangle.Empty; + } + } + + protected Rectangle RectangleBottomRight + { + get + { + int height = MeasureHeight(); + return PanesBottom.Count > 0 && PanesRight.Count > 0 ? new Rectangle(Width - height, Height - height, height, height) : Rectangle.Empty; + } + } + + protected internal Rectangle GetTabStripRectangle(DockState dockState) + { + int height = MeasureHeight(); + if (dockState == DockState.DockTopAutoHide && PanesTop.Count > 0) + return new Rectangle(RectangleTopLeft.Width, 0, Width - RectangleTopLeft.Width - RectangleTopRight.Width, height); + else if (dockState == DockState.DockBottomAutoHide && PanesBottom.Count > 0) + return new Rectangle(RectangleBottomLeft.Width, Height - height, Width - RectangleBottomLeft.Width - RectangleBottomRight.Width, height); + else if (dockState == DockState.DockLeftAutoHide && PanesLeft.Count > 0) + return new Rectangle(0, RectangleTopLeft.Width, height, Height - RectangleTopLeft.Height - RectangleBottomLeft.Height); + else if (dockState == DockState.DockRightAutoHide && PanesRight.Count > 0) + return new Rectangle(Width - height, RectangleTopRight.Width, height, Height - RectangleTopRight.Height - RectangleBottomRight.Height); + else + return Rectangle.Empty; + } + + private GraphicsPath m_displayingArea = null; + private GraphicsPath DisplayingArea + { + get + { + if (m_displayingArea == null) + m_displayingArea = new GraphicsPath(); + + return m_displayingArea; + } + } + + private void SetRegion() + { + DisplayingArea.Reset(); + DisplayingArea.AddRectangle(RectangleTopLeft); + DisplayingArea.AddRectangle(RectangleTopRight); + DisplayingArea.AddRectangle(RectangleBottomLeft); + DisplayingArea.AddRectangle(RectangleBottomRight); + DisplayingArea.AddRectangle(GetTabStripRectangle(DockState.DockTopAutoHide)); + DisplayingArea.AddRectangle(GetTabStripRectangle(DockState.DockBottomAutoHide)); + DisplayingArea.AddRectangle(GetTabStripRectangle(DockState.DockLeftAutoHide)); + DisplayingArea.AddRectangle(GetTabStripRectangle(DockState.DockRightAutoHide)); + Region = new Region(DisplayingArea); + } + + protected override void OnMouseDown(MouseEventArgs e) + { + base.OnMouseDown(e); + + if (e.Button != MouseButtons.Left) + return; + + IDockContent content = HitTest(); + if (content == null) + return; + + content.DockHandler.Activate(); + } + + protected override void OnMouseHover(EventArgs e) + { + base.OnMouseHover(e); + + IDockContent content = HitTest(); + if (content != null && DockPanel.ActiveAutoHideContent != content) + DockPanel.ActiveAutoHideContent = content; + + // requires further tracking of mouse hover behavior, + ResetMouseEventArgs(); + } + + protected override void OnLayout(LayoutEventArgs levent) + { + RefreshChanges(); + base.OnLayout (levent); + } + + internal void RefreshChanges() + { + if (IsDisposed) + return; + + SetRegion(); + OnRefreshChanges(); + } + + protected virtual void OnRefreshChanges() + { + } + + protected internal abstract int MeasureHeight(); + + private IDockContent HitTest() + { + Point ptMouse = PointToClient(Control.MousePosition); + return HitTest(ptMouse); + } + + protected virtual Tab CreateTab(IDockContent content) + { + return new Tab(content); + } + + protected virtual Pane CreatePane(DockPane dockPane) + { + return new Pane(dockPane); + } + + protected abstract IDockContent HitTest(Point point); + } +} diff --git a/trunk/Docking/DockAreasEditor.cs b/source/Docking/DockAreasEditor.cs similarity index 96% rename from trunk/Docking/DockAreasEditor.cs rename to source/Docking/DockAreasEditor.cs index f7e5531..4aebf03 100644 --- a/trunk/Docking/DockAreasEditor.cs +++ b/source/Docking/DockAreasEditor.cs @@ -1,142 +1,142 @@ -using System; -using System.ComponentModel; -using System.Drawing; -using System.Drawing.Design; -using System.Windows.Forms; -using System.Windows.Forms.Design; - -namespace LSLEditor.Docking -{ - internal class DockAreasEditor : UITypeEditor - { - private class DockAreasEditorControl : System.Windows.Forms.UserControl - { - private CheckBox checkBoxFloat; - private CheckBox checkBoxDockLeft; - private CheckBox checkBoxDockRight; - private CheckBox checkBoxDockTop; - private CheckBox checkBoxDockBottom; - private CheckBox checkBoxDockFill; - private DockAreas m_oldDockAreas; - - public DockAreas DockAreas - { - get - { - DockAreas dockAreas = 0; - if (checkBoxFloat.Checked) - dockAreas |= DockAreas.Float; - if (checkBoxDockLeft.Checked) - dockAreas |= DockAreas.DockLeft; - if (checkBoxDockRight.Checked) - dockAreas |= DockAreas.DockRight; - if (checkBoxDockTop.Checked) - dockAreas |= DockAreas.DockTop; - if (checkBoxDockBottom.Checked) - dockAreas |= DockAreas.DockBottom; - if (checkBoxDockFill.Checked) - dockAreas |= DockAreas.Document; - - if (dockAreas == 0) - return m_oldDockAreas; - else - return dockAreas; - } - } - - public DockAreasEditorControl() - { - checkBoxFloat = new CheckBox(); - checkBoxDockLeft = new CheckBox(); - checkBoxDockRight = new CheckBox(); - checkBoxDockTop = new CheckBox(); - checkBoxDockBottom = new CheckBox(); - checkBoxDockFill = new CheckBox(); - - SuspendLayout(); - - checkBoxFloat.Appearance = Appearance.Button; - checkBoxFloat.Dock = DockStyle.Top; - checkBoxFloat.Height = 24; - checkBoxFloat.Text = Strings.DockAreaEditor_FloatCheckBoxText; - checkBoxFloat.TextAlign = ContentAlignment.MiddleCenter; - checkBoxFloat.FlatStyle = FlatStyle.System; - - checkBoxDockLeft.Appearance = System.Windows.Forms.Appearance.Button; - checkBoxDockLeft.Dock = System.Windows.Forms.DockStyle.Left; - checkBoxDockLeft.Width = 24; - checkBoxDockLeft.FlatStyle = FlatStyle.System; - - checkBoxDockRight.Appearance = System.Windows.Forms.Appearance.Button; - checkBoxDockRight.Dock = System.Windows.Forms.DockStyle.Right; - checkBoxDockRight.Width = 24; - checkBoxDockRight.FlatStyle = FlatStyle.System; - - checkBoxDockTop.Appearance = System.Windows.Forms.Appearance.Button; - checkBoxDockTop.Dock = System.Windows.Forms.DockStyle.Top; - checkBoxDockTop.Height = 24; - checkBoxDockTop.FlatStyle = FlatStyle.System; - - checkBoxDockBottom.Appearance = System.Windows.Forms.Appearance.Button; - checkBoxDockBottom.Dock = System.Windows.Forms.DockStyle.Bottom; - checkBoxDockBottom.Height = 24; - checkBoxDockBottom.FlatStyle = FlatStyle.System; - - checkBoxDockFill.Appearance = System.Windows.Forms.Appearance.Button; - checkBoxDockFill.Dock = System.Windows.Forms.DockStyle.Fill; - checkBoxDockFill.FlatStyle = FlatStyle.System; - - this.Controls.AddRange(new Control[] { - checkBoxDockFill, - checkBoxDockBottom, - checkBoxDockTop, - checkBoxDockRight, - checkBoxDockLeft, - checkBoxFloat}); - - Size = new System.Drawing.Size(160, 144); - BackColor = SystemColors.Control; - ResumeLayout(); - } - - public void SetStates(DockAreas dockAreas) - { - m_oldDockAreas = dockAreas; - if ((dockAreas & DockAreas.DockLeft) != 0) - checkBoxDockLeft.Checked = true; - if ((dockAreas & DockAreas.DockRight) != 0) - checkBoxDockRight.Checked = true; - if ((dockAreas & DockAreas.DockTop) != 0) - checkBoxDockTop.Checked = true; - if ((dockAreas & DockAreas.DockTop) != 0) - checkBoxDockTop.Checked = true; - if ((dockAreas & DockAreas.DockBottom) != 0) - checkBoxDockBottom.Checked = true; - if ((dockAreas & DockAreas.Document) != 0) - checkBoxDockFill.Checked = true; - if ((dockAreas & DockAreas.Float) != 0) - checkBoxFloat.Checked = true; - } - } - - private DockAreasEditor.DockAreasEditorControl m_ui = null; - - public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) - { - return UITypeEditorEditStyle.DropDown; - } - - public override object EditValue(ITypeDescriptorContext context, IServiceProvider sp, object value) - { - if (m_ui == null) - m_ui = new DockAreasEditor.DockAreasEditorControl(); - - m_ui.SetStates((DockAreas)value); - - IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)sp.GetService(typeof(IWindowsFormsEditorService)); - edSvc.DropDownControl(m_ui); - - return m_ui.DockAreas; - } - } -} +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Design; +using System.Windows.Forms; +using System.Windows.Forms.Design; + +namespace LSLEditor.Docking +{ + internal class DockAreasEditor : UITypeEditor + { + private class DockAreasEditorControl : System.Windows.Forms.UserControl + { + private CheckBox checkBoxFloat; + private CheckBox checkBoxDockLeft; + private CheckBox checkBoxDockRight; + private CheckBox checkBoxDockTop; + private CheckBox checkBoxDockBottom; + private CheckBox checkBoxDockFill; + private DockAreas m_oldDockAreas; + + public DockAreas DockAreas + { + get + { + DockAreas dockAreas = 0; + if (checkBoxFloat.Checked) + dockAreas |= DockAreas.Float; + if (checkBoxDockLeft.Checked) + dockAreas |= DockAreas.DockLeft; + if (checkBoxDockRight.Checked) + dockAreas |= DockAreas.DockRight; + if (checkBoxDockTop.Checked) + dockAreas |= DockAreas.DockTop; + if (checkBoxDockBottom.Checked) + dockAreas |= DockAreas.DockBottom; + if (checkBoxDockFill.Checked) + dockAreas |= DockAreas.Document; + + if (dockAreas == 0) + return m_oldDockAreas; + else + return dockAreas; + } + } + + public DockAreasEditorControl() + { + checkBoxFloat = new CheckBox(); + checkBoxDockLeft = new CheckBox(); + checkBoxDockRight = new CheckBox(); + checkBoxDockTop = new CheckBox(); + checkBoxDockBottom = new CheckBox(); + checkBoxDockFill = new CheckBox(); + + SuspendLayout(); + + checkBoxFloat.Appearance = Appearance.Button; + checkBoxFloat.Dock = DockStyle.Top; + checkBoxFloat.Height = 24; + checkBoxFloat.Text = Strings.DockAreaEditor_FloatCheckBoxText; + checkBoxFloat.TextAlign = ContentAlignment.MiddleCenter; + checkBoxFloat.FlatStyle = FlatStyle.System; + + checkBoxDockLeft.Appearance = System.Windows.Forms.Appearance.Button; + checkBoxDockLeft.Dock = System.Windows.Forms.DockStyle.Left; + checkBoxDockLeft.Width = 24; + checkBoxDockLeft.FlatStyle = FlatStyle.System; + + checkBoxDockRight.Appearance = System.Windows.Forms.Appearance.Button; + checkBoxDockRight.Dock = System.Windows.Forms.DockStyle.Right; + checkBoxDockRight.Width = 24; + checkBoxDockRight.FlatStyle = FlatStyle.System; + + checkBoxDockTop.Appearance = System.Windows.Forms.Appearance.Button; + checkBoxDockTop.Dock = System.Windows.Forms.DockStyle.Top; + checkBoxDockTop.Height = 24; + checkBoxDockTop.FlatStyle = FlatStyle.System; + + checkBoxDockBottom.Appearance = System.Windows.Forms.Appearance.Button; + checkBoxDockBottom.Dock = System.Windows.Forms.DockStyle.Bottom; + checkBoxDockBottom.Height = 24; + checkBoxDockBottom.FlatStyle = FlatStyle.System; + + checkBoxDockFill.Appearance = System.Windows.Forms.Appearance.Button; + checkBoxDockFill.Dock = System.Windows.Forms.DockStyle.Fill; + checkBoxDockFill.FlatStyle = FlatStyle.System; + + this.Controls.AddRange(new Control[] { + checkBoxDockFill, + checkBoxDockBottom, + checkBoxDockTop, + checkBoxDockRight, + checkBoxDockLeft, + checkBoxFloat}); + + Size = new System.Drawing.Size(160, 144); + BackColor = SystemColors.Control; + ResumeLayout(); + } + + public void SetStates(DockAreas dockAreas) + { + m_oldDockAreas = dockAreas; + if ((dockAreas & DockAreas.DockLeft) != 0) + checkBoxDockLeft.Checked = true; + if ((dockAreas & DockAreas.DockRight) != 0) + checkBoxDockRight.Checked = true; + if ((dockAreas & DockAreas.DockTop) != 0) + checkBoxDockTop.Checked = true; + if ((dockAreas & DockAreas.DockTop) != 0) + checkBoxDockTop.Checked = true; + if ((dockAreas & DockAreas.DockBottom) != 0) + checkBoxDockBottom.Checked = true; + if ((dockAreas & DockAreas.Document) != 0) + checkBoxDockFill.Checked = true; + if ((dockAreas & DockAreas.Float) != 0) + checkBoxFloat.Checked = true; + } + } + + private DockAreasEditor.DockAreasEditorControl m_ui = null; + + public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) + { + return UITypeEditorEditStyle.DropDown; + } + + public override object EditValue(ITypeDescriptorContext context, IServiceProvider sp, object value) + { + if (m_ui == null) + m_ui = new DockAreasEditor.DockAreasEditorControl(); + + m_ui.SetStates((DockAreas)value); + + IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)sp.GetService(typeof(IWindowsFormsEditorService)); + edSvc.DropDownControl(m_ui); + + return m_ui.DockAreas; + } + } +} diff --git a/trunk/Docking/DockContent.cs b/source/Docking/DockContent.cs similarity index 96% rename from trunk/Docking/DockContent.cs rename to source/Docking/DockContent.cs index 3f109e9..20b8702 100644 --- a/trunk/Docking/DockContent.cs +++ b/source/Docking/DockContent.cs @@ -1,304 +1,304 @@ -using System; -using System.ComponentModel; -using System.Drawing; -using System.Windows.Forms; -using System.Runtime.InteropServices; -using System.Diagnostics.CodeAnalysis; - -namespace LSLEditor.Docking -{ - public class DockContent : Form, IDockContent - { - public DockContent() - { - m_dockHandler = new DockContentHandler(this, new GetPersistStringCallback(GetPersistString)); - m_dockHandler.DockStateChanged += new EventHandler(DockHandler_DockStateChanged); - //Suggested as a fix by bensty regarding form resize - this.ParentChanged += new EventHandler(DockContent_ParentChanged); - } - - //Suggested as a fix by bensty regarding form resize - private void DockContent_ParentChanged(object Sender, EventArgs e) - { - if (this.Parent != null) - this.Font = this.Parent.Font; - } - - private DockContentHandler m_dockHandler = null; - [Browsable(false)] - public DockContentHandler DockHandler - { - get { return m_dockHandler; } - } - - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockContent_AllowEndUserDocking_Description")] - [DefaultValue(true)] - public bool AllowEndUserDocking - { - get { return DockHandler.AllowEndUserDocking; } - set { DockHandler.AllowEndUserDocking = value; } - } - - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockContent_DockAreas_Description")] - [DefaultValue(DockAreas.DockLeft|DockAreas.DockRight|DockAreas.DockTop|DockAreas.DockBottom|DockAreas.Document|DockAreas.Float)] - public DockAreas DockAreas - { - get { return DockHandler.DockAreas; } - set { DockHandler.DockAreas = value; } - } - - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockContent_AutoHidePortion_Description")] - [DefaultValue(0.25)] - public double AutoHidePortion - { - get { return DockHandler.AutoHidePortion; } - set { DockHandler.AutoHidePortion = value; } - } - - [Localizable(true)] - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockContent_TabText_Description")] - [DefaultValue(null)] - private string m_tabText = null; - public string TabText - { - get { return m_tabText; } - set { DockHandler.TabText = m_tabText = value; } - } - private bool ShouldSerializeTabText() - { - return (m_tabText != null); - } - - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockContent_CloseButton_Description")] - [DefaultValue(true)] - public bool CloseButton - { - get { return DockHandler.CloseButton; } - set { DockHandler.CloseButton = value; } - } - - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockContent_CloseButtonVisible_Description")] - [DefaultValue(true)] - public bool CloseButtonVisible - { - get { return DockHandler.CloseButtonVisible; } - set { DockHandler.CloseButtonVisible = value; } - } - - [Browsable(false)] - public DockPanel DockPanel - { - get { return DockHandler.DockPanel; } - set { DockHandler.DockPanel = value; } - } - - [Browsable(false)] - public DockState DockState - { - get { return DockHandler.DockState; } - set { DockHandler.DockState = value; } - } - - [Browsable(false)] - public DockPane Pane - { - get { return DockHandler.Pane; } - set { DockHandler.Pane = value; } - } - - [Browsable(false)] - public bool IsHidden - { - get { return DockHandler.IsHidden; } - set { DockHandler.IsHidden = value; } - } - - [Browsable(false)] - public DockState VisibleState - { - get { return DockHandler.VisibleState; } - set { DockHandler.VisibleState = value; } - } - - [Browsable(false)] - public bool IsFloat - { - get { return DockHandler.IsFloat; } - set { DockHandler.IsFloat = value; } - } - - [Browsable(false)] - public DockPane PanelPane - { - get { return DockHandler.PanelPane; } - set { DockHandler.PanelPane = value; } - } - - [Browsable(false)] - public DockPane FloatPane - { - get { return DockHandler.FloatPane; } - set { DockHandler.FloatPane = value; } - } - - [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] - protected virtual string GetPersistString() - { - return GetType().ToString(); - } - - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockContent_HideOnClose_Description")] - [DefaultValue(false)] - public bool HideOnClose - { - get { return DockHandler.HideOnClose; } - set { DockHandler.HideOnClose = value; } - } - - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockContent_ShowHint_Description")] - [DefaultValue(DockState.Unknown)] - public DockState ShowHint - { - get { return DockHandler.ShowHint; } - set { DockHandler.ShowHint = value; } - } - - [Browsable(false)] - public bool IsActivated - { - get { return DockHandler.IsActivated; } - } - - public bool IsDockStateValid(DockState dockState) - { - return DockHandler.IsDockStateValid(dockState); - } - - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockContent_TabPageContextMenu_Description")] - [DefaultValue(null)] - public ContextMenu TabPageContextMenu - { - get { return DockHandler.TabPageContextMenu; } - set { DockHandler.TabPageContextMenu = value; } - } - - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockContent_TabPageContextMenuStrip_Description")] - [DefaultValue(null)] - public ContextMenuStrip TabPageContextMenuStrip - { - get { return DockHandler.TabPageContextMenuStrip; } - set { DockHandler.TabPageContextMenuStrip = value; } - } - - [Localizable(true)] - [Category("Appearance")] - [LocalizedDescription("DockContent_ToolTipText_Description")] - [DefaultValue(null)] - public string ToolTipText - { - get { return DockHandler.ToolTipText; } - set { DockHandler.ToolTipText = value; } - } - - public new void Activate() - { - DockHandler.Activate(); - } - - public new void Hide() - { - DockHandler.Hide(); - } - - public new void Show() - { - DockHandler.Show(); - } - - public void Show(DockPanel dockPanel) - { - DockHandler.Show(dockPanel); - } - - public void Show(DockPanel dockPanel, DockState dockState) - { - DockHandler.Show(dockPanel, dockState); - } - - [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters")] - public void Show(DockPanel dockPanel, Rectangle floatWindowBounds) - { - DockHandler.Show(dockPanel, floatWindowBounds); - } - - public void Show(DockPane pane, IDockContent beforeContent) - { - DockHandler.Show(pane, beforeContent); - } - - public void Show(DockPane previousPane, DockAlignment alignment, double proportion) - { - DockHandler.Show(previousPane, alignment, proportion); - } - - [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters")] - public void FloatAt(Rectangle floatWindowBounds) - { - DockHandler.FloatAt(floatWindowBounds); - } - - public void DockTo(DockPane paneTo, DockStyle dockStyle, int contentIndex) - { - DockHandler.DockTo(paneTo, dockStyle, contentIndex); - } - - public void DockTo(DockPanel panel, DockStyle dockStyle) - { - DockHandler.DockTo(panel, dockStyle); - } - - #region IDockContent Members - void IDockContent.OnActivated(EventArgs e) - { - this.OnActivated(e); - } - - void IDockContent.OnDeactivate(EventArgs e) - { - this.OnDeactivate(e); - } - #endregion - - #region Events - private void DockHandler_DockStateChanged(object sender, EventArgs e) - { - OnDockStateChanged(e); - } - - private static readonly object DockStateChangedEvent = new object(); - [LocalizedCategory("Category_PropertyChanged")] - [LocalizedDescription("Pane_DockStateChanged_Description")] - public event EventHandler DockStateChanged - { - add { Events.AddHandler(DockStateChangedEvent, value); } - remove { Events.RemoveHandler(DockStateChangedEvent, value); } - } - protected virtual void OnDockStateChanged(EventArgs e) - { - EventHandler handler = (EventHandler)Events[DockStateChangedEvent]; - if (handler != null) - handler(this, e); - } - #endregion - } -} +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; +using System.Runtime.InteropServices; +using System.Diagnostics.CodeAnalysis; + +namespace LSLEditor.Docking +{ + public class DockContent : Form, IDockContent + { + public DockContent() + { + m_dockHandler = new DockContentHandler(this, new GetPersistStringCallback(GetPersistString)); + m_dockHandler.DockStateChanged += new EventHandler(DockHandler_DockStateChanged); + //Suggested as a fix by bensty regarding form resize + this.ParentChanged += new EventHandler(DockContent_ParentChanged); + } + + //Suggested as a fix by bensty regarding form resize + private void DockContent_ParentChanged(object Sender, EventArgs e) + { + if (this.Parent != null) + this.Font = this.Parent.Font; + } + + private DockContentHandler m_dockHandler = null; + [Browsable(false)] + public DockContentHandler DockHandler + { + get { return m_dockHandler; } + } + + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockContent_AllowEndUserDocking_Description")] + [DefaultValue(true)] + public bool AllowEndUserDocking + { + get { return DockHandler.AllowEndUserDocking; } + set { DockHandler.AllowEndUserDocking = value; } + } + + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockContent_DockAreas_Description")] + [DefaultValue(DockAreas.DockLeft|DockAreas.DockRight|DockAreas.DockTop|DockAreas.DockBottom|DockAreas.Document|DockAreas.Float)] + public DockAreas DockAreas + { + get { return DockHandler.DockAreas; } + set { DockHandler.DockAreas = value; } + } + + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockContent_AutoHidePortion_Description")] + [DefaultValue(0.25)] + public double AutoHidePortion + { + get { return DockHandler.AutoHidePortion; } + set { DockHandler.AutoHidePortion = value; } + } + + [Localizable(true)] + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockContent_TabText_Description")] + [DefaultValue(null)] + private string m_tabText = null; + public string TabText + { + get { return m_tabText; } + set { DockHandler.TabText = m_tabText = value; } + } + private bool ShouldSerializeTabText() + { + return (m_tabText != null); + } + + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockContent_CloseButton_Description")] + [DefaultValue(true)] + public bool CloseButton + { + get { return DockHandler.CloseButton; } + set { DockHandler.CloseButton = value; } + } + + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockContent_CloseButtonVisible_Description")] + [DefaultValue(true)] + public bool CloseButtonVisible + { + get { return DockHandler.CloseButtonVisible; } + set { DockHandler.CloseButtonVisible = value; } + } + + [Browsable(false)] + public DockPanel DockPanel + { + get { return DockHandler.DockPanel; } + set { DockHandler.DockPanel = value; } + } + + [Browsable(false)] + public DockState DockState + { + get { return DockHandler.DockState; } + set { DockHandler.DockState = value; } + } + + [Browsable(false)] + public DockPane Pane + { + get { return DockHandler.Pane; } + set { DockHandler.Pane = value; } + } + + [Browsable(false)] + public bool IsHidden + { + get { return DockHandler.IsHidden; } + set { DockHandler.IsHidden = value; } + } + + [Browsable(false)] + public DockState VisibleState + { + get { return DockHandler.VisibleState; } + set { DockHandler.VisibleState = value; } + } + + [Browsable(false)] + public bool IsFloat + { + get { return DockHandler.IsFloat; } + set { DockHandler.IsFloat = value; } + } + + [Browsable(false)] + public DockPane PanelPane + { + get { return DockHandler.PanelPane; } + set { DockHandler.PanelPane = value; } + } + + [Browsable(false)] + public DockPane FloatPane + { + get { return DockHandler.FloatPane; } + set { DockHandler.FloatPane = value; } + } + + [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + protected virtual string GetPersistString() + { + return GetType().ToString(); + } + + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockContent_HideOnClose_Description")] + [DefaultValue(false)] + public bool HideOnClose + { + get { return DockHandler.HideOnClose; } + set { DockHandler.HideOnClose = value; } + } + + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockContent_ShowHint_Description")] + [DefaultValue(DockState.Unknown)] + public DockState ShowHint + { + get { return DockHandler.ShowHint; } + set { DockHandler.ShowHint = value; } + } + + [Browsable(false)] + public bool IsActivated + { + get { return DockHandler.IsActivated; } + } + + public bool IsDockStateValid(DockState dockState) + { + return DockHandler.IsDockStateValid(dockState); + } + + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockContent_TabPageContextMenu_Description")] + [DefaultValue(null)] + public ContextMenu TabPageContextMenu + { + get { return DockHandler.TabPageContextMenu; } + set { DockHandler.TabPageContextMenu = value; } + } + + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockContent_TabPageContextMenuStrip_Description")] + [DefaultValue(null)] + public ContextMenuStrip TabPageContextMenuStrip + { + get { return DockHandler.TabPageContextMenuStrip; } + set { DockHandler.TabPageContextMenuStrip = value; } + } + + [Localizable(true)] + [Category("Appearance")] + [LocalizedDescription("DockContent_ToolTipText_Description")] + [DefaultValue(null)] + public string ToolTipText + { + get { return DockHandler.ToolTipText; } + set { DockHandler.ToolTipText = value; } + } + + public new void Activate() + { + DockHandler.Activate(); + } + + public new void Hide() + { + DockHandler.Hide(); + } + + public new void Show() + { + DockHandler.Show(); + } + + public void Show(DockPanel dockPanel) + { + DockHandler.Show(dockPanel); + } + + public void Show(DockPanel dockPanel, DockState dockState) + { + DockHandler.Show(dockPanel, dockState); + } + + [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters")] + public void Show(DockPanel dockPanel, Rectangle floatWindowBounds) + { + DockHandler.Show(dockPanel, floatWindowBounds); + } + + public void Show(DockPane pane, IDockContent beforeContent) + { + DockHandler.Show(pane, beforeContent); + } + + public void Show(DockPane previousPane, DockAlignment alignment, double proportion) + { + DockHandler.Show(previousPane, alignment, proportion); + } + + [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters")] + public void FloatAt(Rectangle floatWindowBounds) + { + DockHandler.FloatAt(floatWindowBounds); + } + + public void DockTo(DockPane paneTo, DockStyle dockStyle, int contentIndex) + { + DockHandler.DockTo(paneTo, dockStyle, contentIndex); + } + + public void DockTo(DockPanel panel, DockStyle dockStyle) + { + DockHandler.DockTo(panel, dockStyle); + } + + #region IDockContent Members + void IDockContent.OnActivated(EventArgs e) + { + this.OnActivated(e); + } + + void IDockContent.OnDeactivate(EventArgs e) + { + this.OnDeactivate(e); + } + #endregion + + #region Events + private void DockHandler_DockStateChanged(object sender, EventArgs e) + { + OnDockStateChanged(e); + } + + private static readonly object DockStateChangedEvent = new object(); + [LocalizedCategory("Category_PropertyChanged")] + [LocalizedDescription("Pane_DockStateChanged_Description")] + public event EventHandler DockStateChanged + { + add { Events.AddHandler(DockStateChangedEvent, value); } + remove { Events.RemoveHandler(DockStateChangedEvent, value); } + } + protected virtual void OnDockStateChanged(EventArgs e) + { + EventHandler handler = (EventHandler)Events[DockStateChangedEvent]; + if (handler != null) + handler(this, e); + } + #endregion + } +} diff --git a/trunk/Docking/DockContentCollection.cs b/source/Docking/DockContentCollection.cs similarity index 96% rename from trunk/Docking/DockContentCollection.cs rename to source/Docking/DockContentCollection.cs index 5ff390f..f9d1d08 100644 --- a/trunk/Docking/DockContentCollection.cs +++ b/source/Docking/DockContentCollection.cs @@ -1,175 +1,175 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; - -namespace LSLEditor.Docking -{ - public class DockContentCollection : ReadOnlyCollection - { - private static List _emptyList = new List(0); - - internal DockContentCollection() - : base(new List()) - { - } - - internal DockContentCollection(DockPane pane) - : base(_emptyList) - { - m_dockPane = pane; - } - - private DockPane m_dockPane = null; - private DockPane DockPane - { - get { return m_dockPane; } - } - - public new IDockContent this[int index] - { - get - { - if (DockPane == null) - return Items[index] as IDockContent; - else - return GetVisibleContent(index); - } - } - - internal int Add(IDockContent content) - { -#if DEBUG - if (DockPane != null) - throw new InvalidOperationException(); -#endif - - if (Contains(content)) - return IndexOf(content); - - Items.Add(content); - return Count - 1; - } - - internal void AddAt(IDockContent content, int index) - { -#if DEBUG - if (DockPane != null) - throw new InvalidOperationException(); -#endif - - if (index < 0 || index > Items.Count - 1) - return; - - if (Contains(content)) - return; - - Items.Insert(index, content); - } - - public new bool Contains(IDockContent content) - { - if (DockPane == null) - return Items.Contains(content); - else - return (GetIndexOfVisibleContents(content) != -1); - } - - public new int Count - { - get - { - if (DockPane == null) - return base.Count; - else - return CountOfVisibleContents; - } - } - - public new int IndexOf(IDockContent content) - { - if (DockPane == null) - { - if (!Contains(content)) - return -1; - else - return Items.IndexOf(content); - } - else - return GetIndexOfVisibleContents(content); - } - - internal void Remove(IDockContent content) - { - if (DockPane != null) - throw new InvalidOperationException(); - - if (!Contains(content)) - return; - - Items.Remove(content); - } - - private int CountOfVisibleContents - { - get - { -#if DEBUG - if (DockPane == null) - throw new InvalidOperationException(); -#endif - - int count = 0; - foreach (IDockContent content in DockPane.Contents) - { - if (content.DockHandler.DockState == DockPane.DockState) - count++; - } - return count; - } - } - - private IDockContent GetVisibleContent(int index) - { -#if DEBUG - if (DockPane == null) - throw new InvalidOperationException(); -#endif - - int currentIndex = -1; - foreach (IDockContent content in DockPane.Contents) - { - if (content.DockHandler.DockState == DockPane.DockState) - currentIndex++; - - if (currentIndex == index) - return content; - } - throw (new ArgumentOutOfRangeException()); - } - - private int GetIndexOfVisibleContents(IDockContent content) - { -#if DEBUG - if (DockPane == null) - throw new InvalidOperationException(); -#endif - - if (content == null) - return -1; - - int index = -1; - foreach (IDockContent c in DockPane.Contents) - { - if (c.DockHandler.DockState == DockPane.DockState) - { - index++; - - if (c == content) - return index; - } - } - return -1; - } - } -} +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; + +namespace LSLEditor.Docking +{ + public class DockContentCollection : ReadOnlyCollection + { + private static List _emptyList = new List(0); + + internal DockContentCollection() + : base(new List()) + { + } + + internal DockContentCollection(DockPane pane) + : base(_emptyList) + { + m_dockPane = pane; + } + + private DockPane m_dockPane = null; + private DockPane DockPane + { + get { return m_dockPane; } + } + + public new IDockContent this[int index] + { + get + { + if (DockPane == null) + return Items[index] as IDockContent; + else + return GetVisibleContent(index); + } + } + + internal int Add(IDockContent content) + { +#if DEBUG + if (DockPane != null) + throw new InvalidOperationException(); +#endif + + if (Contains(content)) + return IndexOf(content); + + Items.Add(content); + return Count - 1; + } + + internal void AddAt(IDockContent content, int index) + { +#if DEBUG + if (DockPane != null) + throw new InvalidOperationException(); +#endif + + if (index < 0 || index > Items.Count - 1) + return; + + if (Contains(content)) + return; + + Items.Insert(index, content); + } + + public new bool Contains(IDockContent content) + { + if (DockPane == null) + return Items.Contains(content); + else + return (GetIndexOfVisibleContents(content) != -1); + } + + public new int Count + { + get + { + if (DockPane == null) + return base.Count; + else + return CountOfVisibleContents; + } + } + + public new int IndexOf(IDockContent content) + { + if (DockPane == null) + { + if (!Contains(content)) + return -1; + else + return Items.IndexOf(content); + } + else + return GetIndexOfVisibleContents(content); + } + + internal void Remove(IDockContent content) + { + if (DockPane != null) + throw new InvalidOperationException(); + + if (!Contains(content)) + return; + + Items.Remove(content); + } + + private int CountOfVisibleContents + { + get + { +#if DEBUG + if (DockPane == null) + throw new InvalidOperationException(); +#endif + + int count = 0; + foreach (IDockContent content in DockPane.Contents) + { + if (content.DockHandler.DockState == DockPane.DockState) + count++; + } + return count; + } + } + + private IDockContent GetVisibleContent(int index) + { +#if DEBUG + if (DockPane == null) + throw new InvalidOperationException(); +#endif + + int currentIndex = -1; + foreach (IDockContent content in DockPane.Contents) + { + if (content.DockHandler.DockState == DockPane.DockState) + currentIndex++; + + if (currentIndex == index) + return content; + } + throw (new ArgumentOutOfRangeException()); + } + + private int GetIndexOfVisibleContents(IDockContent content) + { +#if DEBUG + if (DockPane == null) + throw new InvalidOperationException(); +#endif + + if (content == null) + return -1; + + int index = -1; + foreach (IDockContent c in DockPane.Contents) + { + if (c.DockHandler.DockState == DockPane.DockState) + { + index++; + + if (c == content) + return index; + } + } + return -1; + } + } +} diff --git a/trunk/Docking/DockContentEventArgs.cs b/source/Docking/DockContentEventArgs.cs similarity index 93% rename from trunk/Docking/DockContentEventArgs.cs rename to source/Docking/DockContentEventArgs.cs index 4dc9e92..0f7f52e 100644 --- a/trunk/Docking/DockContentEventArgs.cs +++ b/source/Docking/DockContentEventArgs.cs @@ -1,19 +1,19 @@ -using System; - -namespace LSLEditor.Docking -{ - public class DockContentEventArgs : EventArgs - { - private IDockContent m_content; - - public DockContentEventArgs(IDockContent content) - { - m_content = content; - } - - public IDockContent Content - { - get { return m_content; } - } - } -} +using System; + +namespace LSLEditor.Docking +{ + public class DockContentEventArgs : EventArgs + { + private IDockContent m_content; + + public DockContentEventArgs(IDockContent content) + { + m_content = content; + } + + public IDockContent Content + { + get { return m_content; } + } + } +} diff --git a/trunk/Docking/DockContentHandler.cs b/source/Docking/DockContentHandler.cs similarity index 96% rename from trunk/Docking/DockContentHandler.cs rename to source/Docking/DockContentHandler.cs index 3076a9c..5e79579 100644 --- a/trunk/Docking/DockContentHandler.cs +++ b/source/Docking/DockContentHandler.cs @@ -1,1063 +1,1063 @@ -using System; -using System.Windows.Forms; -using System.Drawing; -using System.ComponentModel; -using System.Diagnostics.CodeAnalysis; - -namespace LSLEditor.Docking -{ - public delegate string GetPersistStringCallback(); - - public class DockContentHandler : IDisposable, IDockDragSource - { - public DockContentHandler(Form form) : this(form, null) - { - } - - public DockContentHandler(Form form, GetPersistStringCallback getPersistStringCallback) - { - if (!(form is IDockContent)) - throw new ArgumentException(Strings.DockContent_Constructor_InvalidForm, "form"); - - m_form = form; - m_getPersistStringCallback = getPersistStringCallback; - - m_events = new EventHandlerList(); - Form.Disposed +=new EventHandler(Form_Disposed); - Form.TextChanged += new EventHandler(Form_TextChanged); - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - if(disposing) - { - lock(this) - { - DockPanel = null; - if (m_autoHideTab != null) - m_autoHideTab.Dispose(); - if (m_tab != null) - m_tab.Dispose(); - - Form.Disposed -= new EventHandler(Form_Disposed); - Form.TextChanged -= new EventHandler(Form_TextChanged); - m_events.Dispose(); - } - } - } - - private Form m_form; - public Form Form - { - get { return m_form; } - } - - public IDockContent Content - { - get { return Form as IDockContent; } - } - - private IDockContent m_previousActive = null; - public IDockContent PreviousActive - { - get { return m_previousActive; } - internal set { m_previousActive = value; } - } - - private IDockContent m_nextActive = null; - public IDockContent NextActive - { - get { return m_nextActive; } - internal set { m_nextActive = value; } - } - - private EventHandlerList m_events; - private EventHandlerList Events - { - get { return m_events; } - } - - private bool m_allowEndUserDocking = true; - public bool AllowEndUserDocking - { - get { return m_allowEndUserDocking; } - set { m_allowEndUserDocking = value; } - } - - private double m_autoHidePortion = 0.25; - public double AutoHidePortion - { - get { return m_autoHidePortion; } - set - { - if (value <= 0) - throw(new ArgumentOutOfRangeException(Strings.DockContentHandler_AutoHidePortion_OutOfRange)); - - if (m_autoHidePortion == value) - return; - - m_autoHidePortion = value; - - if (DockPanel == null) - return; - - if (DockPanel.ActiveAutoHideContent == Content) - DockPanel.PerformLayout(); - } - } - - private bool m_closeButton = true; - public bool CloseButton - { - get { return m_closeButton; } - set - { - if (m_closeButton == value) - return; - - m_closeButton = value; - if (Pane != null) - if (Pane.ActiveContent.DockHandler == this) - Pane.RefreshChanges(); - } - } - - private bool m_closeButtonVisible = true; - /// - /// Determines whether the close button is visible on the content - /// - public bool CloseButtonVisible - { - get { return m_closeButtonVisible; } - set { m_closeButtonVisible = value; } - } - - private DockState DefaultDockState - { - get - { - if (ShowHint != DockState.Unknown && ShowHint != DockState.Hidden) - return ShowHint; - - if ((DockAreas & DockAreas.Document) != 0) - return DockState.Document; - if ((DockAreas & DockAreas.DockRight) != 0) - return DockState.DockRight; - if ((DockAreas & DockAreas.DockLeft) != 0) - return DockState.DockLeft; - if ((DockAreas & DockAreas.DockBottom) != 0) - return DockState.DockBottom; - if ((DockAreas & DockAreas.DockTop) != 0) - return DockState.DockTop; - - return DockState.Unknown; - } - } - - private DockState DefaultShowState - { - get - { - if (ShowHint != DockState.Unknown) - return ShowHint; - - if ((DockAreas & DockAreas.Document) != 0) - return DockState.Document; - if ((DockAreas & DockAreas.DockRight) != 0) - return DockState.DockRight; - if ((DockAreas & DockAreas.DockLeft) != 0) - return DockState.DockLeft; - if ((DockAreas & DockAreas.DockBottom) != 0) - return DockState.DockBottom; - if ((DockAreas & DockAreas.DockTop) != 0) - return DockState.DockTop; - if ((DockAreas & DockAreas.Float) != 0) - return DockState.Float; - - return DockState.Unknown; - } - } - - private DockAreas m_allowedAreas = DockAreas.DockLeft | DockAreas.DockRight | DockAreas.DockTop | DockAreas.DockBottom | DockAreas.Document | DockAreas.Float; - public DockAreas DockAreas - { - get { return m_allowedAreas; } - set - { - if (m_allowedAreas == value) - return; - - if (!DockHelper.IsDockStateValid(DockState, value)) - throw(new InvalidOperationException(Strings.DockContentHandler_DockAreas_InvalidValue)); - - m_allowedAreas = value; - - if (!DockHelper.IsDockStateValid(ShowHint, m_allowedAreas)) - ShowHint = DockState.Unknown; - } - } - - private DockState m_dockState = DockState.Unknown; - public DockState DockState - { - get { return m_dockState; } - set - { - if (m_dockState == value) - return; - - DockPanel.SuspendLayout(true); - - if (value == DockState.Hidden) - IsHidden = true; - else - SetDockState(false, value, Pane); - - DockPanel.ResumeLayout(true, true); - } - } - - private DockPanel m_dockPanel = null; - public DockPanel DockPanel - { - get { return m_dockPanel; } - set - { - if (m_dockPanel == value) - return; - - Pane = null; - - if (m_dockPanel != null) - m_dockPanel.RemoveContent(Content); - - if (m_tab != null) - { - m_tab.Dispose(); - m_tab = null; - } - - if (m_autoHideTab != null) - { - m_autoHideTab.Dispose(); - m_autoHideTab = null; - } - - m_dockPanel = value; - - if (m_dockPanel != null) - { - m_dockPanel.AddContent(Content); - Form.TopLevel = false; - Form.FormBorderStyle = FormBorderStyle.None; - Form.ShowInTaskbar = false; - Form.WindowState = FormWindowState.Normal; - NativeMethods.SetWindowPos(Form.Handle, IntPtr.Zero, 0, 0, 0, 0, - Win32.FlagsSetWindowPos.SWP_NOACTIVATE | - Win32.FlagsSetWindowPos.SWP_NOMOVE | - Win32.FlagsSetWindowPos.SWP_NOSIZE | - Win32.FlagsSetWindowPos.SWP_NOZORDER | - Win32.FlagsSetWindowPos.SWP_NOOWNERZORDER | - Win32.FlagsSetWindowPos.SWP_FRAMECHANGED); - } - } - } - - public Icon Icon - { - get { return Form.Icon; } - } - - public DockPane Pane - { - get { return IsFloat ? FloatPane : PanelPane; } - set - { - if (Pane == value) - return; - - DockPanel.SuspendLayout(true); - - DockPane oldPane = Pane; - - SuspendSetDockState(); - FloatPane = (value == null ? null : (value.IsFloat ? value : FloatPane)); - PanelPane = (value == null ? null : (value.IsFloat ? PanelPane : value)); - ResumeSetDockState(IsHidden, value != null ? value.DockState : DockState.Unknown, oldPane); - - DockPanel.ResumeLayout(true, true); - } - } - - private bool m_isHidden = true; - public bool IsHidden - { - get { return m_isHidden; } - set - { - if (m_isHidden == value) - return; - - SetDockState(value, VisibleState, Pane); - } - } - - private string m_tabText = null; - public string TabText - { - get { return m_tabText == null || m_tabText == "" ? Form.Text : m_tabText; } - set - { - if (m_tabText == value) - return; - - m_tabText = value; - if (Pane != null) - Pane.RefreshChanges(); - } - } - - private DockState m_visibleState = DockState.Unknown; - public DockState VisibleState - { - get { return m_visibleState; } - set - { - if (m_visibleState == value) - return; - - SetDockState(IsHidden, value, Pane); - } - } - - private bool m_isFloat = false; - public bool IsFloat - { - get { return m_isFloat; } - set - { - if (m_isFloat == value) - return; - - DockState visibleState = CheckDockState(value); - - if (visibleState == DockState.Unknown) - throw new InvalidOperationException(Strings.DockContentHandler_IsFloat_InvalidValue); - - SetDockState(IsHidden, visibleState, Pane); - } - } - - [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters")] - public DockState CheckDockState(bool isFloat) - { - DockState dockState; - - if (isFloat) - { - if (!IsDockStateValid(DockState.Float)) - dockState = DockState.Unknown; - else - dockState = DockState.Float; - } - else - { - dockState = (PanelPane != null) ? PanelPane.DockState : DefaultDockState; - if (dockState != DockState.Unknown && !IsDockStateValid(dockState)) - dockState = DockState.Unknown; - } - - return dockState; - } - - private DockPane m_panelPane = null; - public DockPane PanelPane - { - get { return m_panelPane; } - set - { - if (m_panelPane == value) - return; - - if (value != null) - { - if (value.IsFloat || value.DockPanel != DockPanel) - throw new InvalidOperationException(Strings.DockContentHandler_DockPane_InvalidValue); - } - - DockPane oldPane = Pane; - - if (m_panelPane != null) - RemoveFromPane(m_panelPane); - m_panelPane = value; - if (m_panelPane != null) - { - m_panelPane.AddContent(Content); - SetDockState(IsHidden, IsFloat ? DockState.Float : m_panelPane.DockState, oldPane); - } - else - SetDockState(IsHidden, DockState.Unknown, oldPane); - } - } - - private void RemoveFromPane(DockPane pane) - { - pane.RemoveContent(Content); - SetPane(null); - if (pane.Contents.Count == 0) - pane.Dispose(); - } - - private DockPane m_floatPane = null; - public DockPane FloatPane - { - get { return m_floatPane; } - set - { - if (m_floatPane == value) - return; - - if (value != null) - { - if (!value.IsFloat || value.DockPanel != DockPanel) - throw new InvalidOperationException(Strings.DockContentHandler_FloatPane_InvalidValue); - } - - DockPane oldPane = Pane; - - if (m_floatPane != null) - RemoveFromPane(m_floatPane); - m_floatPane = value; - if (m_floatPane != null) - { - m_floatPane.AddContent(Content); - SetDockState(IsHidden, IsFloat ? DockState.Float : VisibleState, oldPane); - } - else - SetDockState(IsHidden, DockState.Unknown, oldPane); - } - } - - private int m_countSetDockState = 0; - private void SuspendSetDockState() - { - m_countSetDockState ++; - } - - private void ResumeSetDockState() - { - m_countSetDockState --; - if (m_countSetDockState < 0) - m_countSetDockState = 0; - } - - internal bool IsSuspendSetDockState - { - get { return m_countSetDockState != 0; } - } - - private void ResumeSetDockState(bool isHidden, DockState visibleState, DockPane oldPane) - { - ResumeSetDockState(); - SetDockState(isHidden, visibleState, oldPane); - } - - internal void SetDockState(bool isHidden, DockState visibleState, DockPane oldPane) - { - if (IsSuspendSetDockState) - return; - - if (DockPanel == null && visibleState != DockState.Unknown) - throw new InvalidOperationException(Strings.DockContentHandler_SetDockState_NullPanel); - - if (visibleState == DockState.Hidden || (visibleState != DockState.Unknown && !IsDockStateValid(visibleState))) - throw new InvalidOperationException(Strings.DockContentHandler_SetDockState_InvalidState); - - DockPanel dockPanel = DockPanel; - if (dockPanel != null) - dockPanel.SuspendLayout(true); - - SuspendSetDockState(); - - DockState oldDockState = DockState; - - if (m_isHidden != isHidden || oldDockState == DockState.Unknown) - { - m_isHidden = isHidden; - } - m_visibleState = visibleState; - m_dockState = isHidden ? DockState.Hidden : visibleState; - - if (visibleState == DockState.Unknown) - Pane = null; - else - { - m_isFloat = (m_visibleState == DockState.Float); - - if (Pane == null) - Pane = DockPanel.DockPaneFactory.CreateDockPane(Content, visibleState, true); - else if (Pane.DockState != visibleState) - { - if (Pane.Contents.Count == 1) - Pane.SetDockState(visibleState); - else - Pane = DockPanel.DockPaneFactory.CreateDockPane(Content, visibleState, true); - } - } - - if (Form.ContainsFocus) - if (DockState == DockState.Hidden || DockState == DockState.Unknown) - DockPanel.ContentFocusManager.GiveUpFocus(Content); - - SetPaneAndVisible(Pane); - - if (oldPane != null && !oldPane.IsDisposed && oldDockState == oldPane.DockState) - RefreshDockPane(oldPane); - - if (Pane != null && DockState == Pane.DockState) - { - if ((Pane != oldPane) || - (Pane == oldPane && oldDockState != oldPane.DockState)) - // Avoid early refresh of hidden AutoHide panes - if ((Pane.DockWindow == null || Pane.DockWindow.Visible || Pane.IsHidden) && !Pane.IsAutoHide) - RefreshDockPane(Pane); - } - - if (oldDockState != DockState) - { - if (DockState == DockState.Hidden || DockState == DockState.Unknown || - DockHelper.IsDockStateAutoHide(DockState)) - DockPanel.ContentFocusManager.RemoveFromList(Content); - else - DockPanel.ContentFocusManager.AddToList(Content); - - OnDockStateChanged(EventArgs.Empty); - } - ResumeSetDockState(); - - if (dockPanel != null) - dockPanel.ResumeLayout(true, true); - } - - private static void RefreshDockPane(DockPane pane) - { - pane.RefreshChanges(); - pane.ValidateActiveContent(); - } - - internal string PersistString - { - get { return GetPersistStringCallback == null ? Form.GetType().ToString() : GetPersistStringCallback(); } - } - - private GetPersistStringCallback m_getPersistStringCallback = null; - public GetPersistStringCallback GetPersistStringCallback - { - get { return m_getPersistStringCallback; } - set { m_getPersistStringCallback = value; } - } - - - private bool m_hideOnClose = false; - public bool HideOnClose - { - get { return m_hideOnClose; } - set { m_hideOnClose = value; } - } - - private DockState m_showHint = DockState.Unknown; - public DockState ShowHint - { - get { return m_showHint; } - set - { - if (!DockHelper.IsDockStateValid(value, DockAreas)) - throw (new InvalidOperationException(Strings.DockContentHandler_ShowHint_InvalidValue)); - - if (m_showHint == value) - return; - - m_showHint = value; - } - } - - private bool m_isActivated = false; - public bool IsActivated - { - get { return m_isActivated; } - internal set - { - if (m_isActivated == value) - return; - - m_isActivated = value; - } - } - - public bool IsDockStateValid(DockState dockState) - { - if (DockPanel != null && dockState == DockState.Document && DockPanel.DocumentStyle == DocumentStyle.SystemMdi) - return false; - else - return DockHelper.IsDockStateValid(dockState, DockAreas); - } - - private ContextMenu m_tabPageContextMenu = null; - public ContextMenu TabPageContextMenu - { - get { return m_tabPageContextMenu; } - set { m_tabPageContextMenu = value; } - } - - private string m_toolTipText = null; - public string ToolTipText - { - get { return m_toolTipText; } - set { m_toolTipText = value; } - } - - public void Activate() - { - if (DockPanel == null) - Form.Activate(); - else if (Pane == null) - Show(DockPanel); - else - { - IsHidden = false; - Pane.ActiveContent = Content; - if (DockState == DockState.Document && DockPanel.DocumentStyle == DocumentStyle.SystemMdi) - { - Form.Activate(); - return; - } - else if (DockHelper.IsDockStateAutoHide(DockState)) - DockPanel.ActiveAutoHideContent = Content; - - if (!Form.ContainsFocus) - DockPanel.ContentFocusManager.Activate(Content); - } - } - - public void GiveUpFocus() - { - DockPanel.ContentFocusManager.GiveUpFocus(Content); - } - - private IntPtr m_activeWindowHandle = IntPtr.Zero; - internal IntPtr ActiveWindowHandle - { - get { return m_activeWindowHandle; } - set { m_activeWindowHandle = value; } - } - - public void Hide() - { - IsHidden = true; - } - - internal void SetPaneAndVisible(DockPane pane) - { - SetPane(pane); - SetVisible(); - } - - private void SetPane(DockPane pane) - { - if (pane != null && pane.DockState == DockState.Document && DockPanel.DocumentStyle == DocumentStyle.DockingMdi) - { - if (Form.Parent is DockPane) - SetParent(null); - if (Form.MdiParent != DockPanel.ParentForm) - { - FlagClipWindow = true; - Form.MdiParent = DockPanel.ParentForm; - } - } - else - { - FlagClipWindow = true; - if (Form.MdiParent != null) - Form.MdiParent = null; - if (Form.TopLevel) - Form.TopLevel = false; - SetParent(pane); - } - } - - internal void SetVisible() - { - bool visible; - - if (IsHidden) - visible = false; - else if (Pane != null && Pane.DockState == DockState.Document && DockPanel.DocumentStyle == DocumentStyle.DockingMdi) - visible = true; - else if (Pane != null && Pane.ActiveContent == Content) - visible = true; - else if (Pane != null && Pane.ActiveContent != Content) - visible = false; - else - visible = Form.Visible; - - if (Form.Visible != visible) - Form.Visible = visible; - } - - private void SetParent(Control value) - { - if (Form.Parent == value) - return; - - //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - // Workaround of .Net Framework bug: - // Change the parent of a control with focus may result in the first - // MDI child form get activated. - //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - bool bRestoreFocus = false; - if (Form.ContainsFocus) - { - //Suggested as a fix for a memory leak by bugreports - if (value == null && !IsFloat) - DockPanel.ContentFocusManager.GiveUpFocus(this.Content); - else - { - DockPanel.SaveFocus(); - bRestoreFocus = true; - } - } - //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - Form.Parent = value; - - //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - // Workaround of .Net Framework bug: - // Change the parent of a control with focus may result in the first - // MDI child form get activated. - //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - if (bRestoreFocus) - Activate(); - //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - } - - public void Show() - { - if (DockPanel == null) - Form.Show(); - else - Show(DockPanel); - } - - public void Show(DockPanel dockPanel) - { - if (dockPanel == null) - throw(new ArgumentNullException(Strings.DockContentHandler_Show_NullDockPanel)); - - if (DockState == DockState.Unknown) - Show(dockPanel, DefaultShowState); - else - Activate(); - } - - public void Show(DockPanel dockPanel, DockState dockState) - { - if (dockPanel == null) - throw(new ArgumentNullException(Strings.DockContentHandler_Show_NullDockPanel)); - - if (dockState == DockState.Unknown || dockState == DockState.Hidden) - throw(new ArgumentException(Strings.DockContentHandler_Show_InvalidDockState)); - - dockPanel.SuspendLayout(true); - - DockPanel = dockPanel; - - if (dockState == DockState.Float && FloatPane == null) - Pane = DockPanel.DockPaneFactory.CreateDockPane(Content, DockState.Float, true); - else if (PanelPane == null) - { - DockPane paneExisting = null; - foreach (DockPane pane in DockPanel.Panes) - if (pane.DockState == dockState) - { - paneExisting = pane; - break; - } - - if (paneExisting == null) - Pane = DockPanel.DockPaneFactory.CreateDockPane(Content, dockState, true); - else - Pane = paneExisting; - } - - DockState = dockState; - dockPanel.ResumeLayout(true, true); //we'll resume the layout before activating to ensure that the position - Activate(); //and size of the form are finally processed before the form is shown - } - - [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters")] - public void Show(DockPanel dockPanel, Rectangle floatWindowBounds) - { - if (dockPanel == null) - throw(new ArgumentNullException(Strings.DockContentHandler_Show_NullDockPanel)); - - dockPanel.SuspendLayout(true); - - DockPanel = dockPanel; - if (FloatPane == null) - { - IsHidden = true; // to reduce the screen flicker - FloatPane = DockPanel.DockPaneFactory.CreateDockPane(Content, DockState.Float, false); - FloatPane.FloatWindow.StartPosition = FormStartPosition.Manual; - } - - FloatPane.FloatWindow.Bounds = floatWindowBounds; - - Show(dockPanel, DockState.Float); - Activate(); - - dockPanel.ResumeLayout(true, true); - } - - public void Show(DockPane pane, IDockContent beforeContent) - { - if (pane == null) - throw(new ArgumentNullException(Strings.DockContentHandler_Show_NullPane)); - - if (beforeContent != null && pane.Contents.IndexOf(beforeContent) == -1) - throw(new ArgumentException(Strings.DockContentHandler_Show_InvalidBeforeContent)); - - pane.DockPanel.SuspendLayout(true); - - DockPanel = pane.DockPanel; - Pane = pane; - pane.SetContentIndex(Content, pane.Contents.IndexOf(beforeContent)); - Show(); - - pane.DockPanel.ResumeLayout(true, true); - } - - public void Show(DockPane previousPane, DockAlignment alignment, double proportion) - { - if (previousPane == null) - throw(new ArgumentException(Strings.DockContentHandler_Show_InvalidPrevPane)); - - if (DockHelper.IsDockStateAutoHide(previousPane.DockState)) - throw(new ArgumentException(Strings.DockContentHandler_Show_InvalidPrevPane)); - - previousPane.DockPanel.SuspendLayout(true); - - DockPanel = previousPane.DockPanel; - DockPanel.DockPaneFactory.CreateDockPane(Content, previousPane, alignment, proportion, true); - Show(); - - previousPane.DockPanel.ResumeLayout(true, true); - } - - public void Close() - { - DockPanel dockPanel = DockPanel; - if (dockPanel != null) - dockPanel.SuspendLayout(true); - Form.Close(); - if (dockPanel != null) - dockPanel.ResumeLayout(true, true); - - } - - private DockPaneStripBase.Tab m_tab = null; - internal DockPaneStripBase.Tab GetTab(DockPaneStripBase dockPaneStrip) - { - if (m_tab == null) - m_tab = dockPaneStrip.CreateTab(Content); - - return m_tab; - } - - private IDisposable m_autoHideTab = null; - internal IDisposable AutoHideTab - { - get { return m_autoHideTab; } - set { m_autoHideTab = value; } - } - - #region Events - private static readonly object DockStateChangedEvent = new object(); - public event EventHandler DockStateChanged - { - add { Events.AddHandler(DockStateChangedEvent, value); } - remove { Events.RemoveHandler(DockStateChangedEvent, value); } - } - protected virtual void OnDockStateChanged(EventArgs e) - { - EventHandler handler = (EventHandler)Events[DockStateChangedEvent]; - if (handler != null) - handler(this, e); - } - #endregion - - private void Form_Disposed(object sender, EventArgs e) - { - Dispose(); - } - - private void Form_TextChanged(object sender, EventArgs e) - { - if (DockHelper.IsDockStateAutoHide(DockState)) - DockPanel.RefreshAutoHideStrip(); - else if (Pane != null) - { - if (Pane.FloatWindow != null) - Pane.FloatWindow.SetText(); - Pane.RefreshChanges(); - } - } - - private bool m_flagClipWindow = false; - internal bool FlagClipWindow - { - get { return m_flagClipWindow; } - set - { - if (m_flagClipWindow == value) - return; - - m_flagClipWindow = value; - if (m_flagClipWindow) - Form.Region = new Region(Rectangle.Empty); - else - Form.Region = null; - } - } - - private ContextMenuStrip m_tabPageContextMenuStrip = null; - public ContextMenuStrip TabPageContextMenuStrip - { - get { return m_tabPageContextMenuStrip; } - set { m_tabPageContextMenuStrip = value; } - } - - #region IDockDragSource Members - - Control IDragSource.DragControl - { - get { return Form; } - } - - bool IDockDragSource.CanDockTo(DockPane pane) - { - if (!IsDockStateValid(pane.DockState)) - return false; - - if (Pane == pane && pane.DisplayingContents.Count == 1) - return false; - - return true; - } - - Rectangle IDockDragSource.BeginDrag(Point ptMouse) - { - Size size; - DockPane floatPane = this.FloatPane; - if (DockState == DockState.Float || floatPane == null || floatPane.FloatWindow.NestedPanes.Count != 1) - size = DockPanel.DefaultFloatWindowSize; - else - size = floatPane.FloatWindow.Size; - - Point location; - Rectangle rectPane = Pane.ClientRectangle; - if (DockState == DockState.Document) - { - if (Pane.DockPanel.DocumentTabStripLocation == DocumentTabStripLocation.Bottom) - location = new Point(rectPane.Left, rectPane.Bottom - size.Height); - else - location = new Point(rectPane.Left, rectPane.Top); - } - else - { - location = new Point(rectPane.Left, rectPane.Bottom); - location.Y -= size.Height; - } - location = Pane.PointToScreen(location); - - if (ptMouse.X > location.X + size.Width) - location.X += ptMouse.X - (location.X + size.Width) + Measures.SplitterSize; - - return new Rectangle(location, size); - } - - public void FloatAt(Rectangle floatWindowBounds) - { - DockPane pane = DockPanel.DockPaneFactory.CreateDockPane(Content, floatWindowBounds, true); - } - - public void DockTo(DockPane pane, DockStyle dockStyle, int contentIndex) - { - if (dockStyle == DockStyle.Fill) - { - bool samePane = (Pane == pane); - if (!samePane) - Pane = pane; - - if (contentIndex == -1 || !samePane) - pane.SetContentIndex(Content, contentIndex); - else - { - DockContentCollection contents = pane.Contents; - int oldIndex = contents.IndexOf(Content); - int newIndex = contentIndex; - if (oldIndex < newIndex) - { - newIndex += 1; - if (newIndex > contents.Count -1) - newIndex = -1; - } - pane.SetContentIndex(Content, newIndex); - } - } - else - { - DockPane paneFrom = DockPanel.DockPaneFactory.CreateDockPane(Content, pane.DockState, true); - INestedPanesContainer container = pane.NestedPanesContainer; - if (dockStyle == DockStyle.Left) - paneFrom.DockTo(container, pane, DockAlignment.Left, 0.5); - else if (dockStyle == DockStyle.Right) - paneFrom.DockTo(container, pane, DockAlignment.Right, 0.5); - else if (dockStyle == DockStyle.Top) - paneFrom.DockTo(container, pane, DockAlignment.Top, 0.5); - else if (dockStyle == DockStyle.Bottom) - paneFrom.DockTo(container, pane, DockAlignment.Bottom, 0.5); - - paneFrom.DockState = pane.DockState; - } - } - - public void DockTo(DockPanel panel, DockStyle dockStyle) - { - if (panel != DockPanel) - throw new ArgumentException(Strings.IDockDragSource_DockTo_InvalidPanel, "panel"); - - DockPane pane; - - if (dockStyle == DockStyle.Top) - pane = DockPanel.DockPaneFactory.CreateDockPane(Content, DockState.DockTop, true); - else if (dockStyle == DockStyle.Bottom) - pane = DockPanel.DockPaneFactory.CreateDockPane(Content, DockState.DockBottom, true); - else if (dockStyle == DockStyle.Left) - pane = DockPanel.DockPaneFactory.CreateDockPane(Content, DockState.DockLeft, true); - else if (dockStyle == DockStyle.Right) - pane = DockPanel.DockPaneFactory.CreateDockPane(Content, DockState.DockRight, true); - else if (dockStyle == DockStyle.Fill) - pane = DockPanel.DockPaneFactory.CreateDockPane(Content, DockState.Document, true); - else - return; - } - - #endregion - } -} +using System; +using System.Windows.Forms; +using System.Drawing; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; + +namespace LSLEditor.Docking +{ + public delegate string GetPersistStringCallback(); + + public class DockContentHandler : IDisposable, IDockDragSource + { + public DockContentHandler(Form form) : this(form, null) + { + } + + public DockContentHandler(Form form, GetPersistStringCallback getPersistStringCallback) + { + if (!(form is IDockContent)) + throw new ArgumentException(Strings.DockContent_Constructor_InvalidForm, "form"); + + m_form = form; + m_getPersistStringCallback = getPersistStringCallback; + + m_events = new EventHandlerList(); + Form.Disposed +=new EventHandler(Form_Disposed); + Form.TextChanged += new EventHandler(Form_TextChanged); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if(disposing) + { + lock(this) + { + DockPanel = null; + if (m_autoHideTab != null) + m_autoHideTab.Dispose(); + if (m_tab != null) + m_tab.Dispose(); + + Form.Disposed -= new EventHandler(Form_Disposed); + Form.TextChanged -= new EventHandler(Form_TextChanged); + m_events.Dispose(); + } + } + } + + private Form m_form; + public Form Form + { + get { return m_form; } + } + + public IDockContent Content + { + get { return Form as IDockContent; } + } + + private IDockContent m_previousActive = null; + public IDockContent PreviousActive + { + get { return m_previousActive; } + internal set { m_previousActive = value; } + } + + private IDockContent m_nextActive = null; + public IDockContent NextActive + { + get { return m_nextActive; } + internal set { m_nextActive = value; } + } + + private EventHandlerList m_events; + private EventHandlerList Events + { + get { return m_events; } + } + + private bool m_allowEndUserDocking = true; + public bool AllowEndUserDocking + { + get { return m_allowEndUserDocking; } + set { m_allowEndUserDocking = value; } + } + + private double m_autoHidePortion = 0.25; + public double AutoHidePortion + { + get { return m_autoHidePortion; } + set + { + if (value <= 0) + throw(new ArgumentOutOfRangeException(Strings.DockContentHandler_AutoHidePortion_OutOfRange)); + + if (m_autoHidePortion == value) + return; + + m_autoHidePortion = value; + + if (DockPanel == null) + return; + + if (DockPanel.ActiveAutoHideContent == Content) + DockPanel.PerformLayout(); + } + } + + private bool m_closeButton = true; + public bool CloseButton + { + get { return m_closeButton; } + set + { + if (m_closeButton == value) + return; + + m_closeButton = value; + if (Pane != null) + if (Pane.ActiveContent.DockHandler == this) + Pane.RefreshChanges(); + } + } + + private bool m_closeButtonVisible = true; + /// + /// Determines whether the close button is visible on the content + /// + public bool CloseButtonVisible + { + get { return m_closeButtonVisible; } + set { m_closeButtonVisible = value; } + } + + private DockState DefaultDockState + { + get + { + if (ShowHint != DockState.Unknown && ShowHint != DockState.Hidden) + return ShowHint; + + if ((DockAreas & DockAreas.Document) != 0) + return DockState.Document; + if ((DockAreas & DockAreas.DockRight) != 0) + return DockState.DockRight; + if ((DockAreas & DockAreas.DockLeft) != 0) + return DockState.DockLeft; + if ((DockAreas & DockAreas.DockBottom) != 0) + return DockState.DockBottom; + if ((DockAreas & DockAreas.DockTop) != 0) + return DockState.DockTop; + + return DockState.Unknown; + } + } + + private DockState DefaultShowState + { + get + { + if (ShowHint != DockState.Unknown) + return ShowHint; + + if ((DockAreas & DockAreas.Document) != 0) + return DockState.Document; + if ((DockAreas & DockAreas.DockRight) != 0) + return DockState.DockRight; + if ((DockAreas & DockAreas.DockLeft) != 0) + return DockState.DockLeft; + if ((DockAreas & DockAreas.DockBottom) != 0) + return DockState.DockBottom; + if ((DockAreas & DockAreas.DockTop) != 0) + return DockState.DockTop; + if ((DockAreas & DockAreas.Float) != 0) + return DockState.Float; + + return DockState.Unknown; + } + } + + private DockAreas m_allowedAreas = DockAreas.DockLeft | DockAreas.DockRight | DockAreas.DockTop | DockAreas.DockBottom | DockAreas.Document | DockAreas.Float; + public DockAreas DockAreas + { + get { return m_allowedAreas; } + set + { + if (m_allowedAreas == value) + return; + + if (!DockHelper.IsDockStateValid(DockState, value)) + throw(new InvalidOperationException(Strings.DockContentHandler_DockAreas_InvalidValue)); + + m_allowedAreas = value; + + if (!DockHelper.IsDockStateValid(ShowHint, m_allowedAreas)) + ShowHint = DockState.Unknown; + } + } + + private DockState m_dockState = DockState.Unknown; + public DockState DockState + { + get { return m_dockState; } + set + { + if (m_dockState == value) + return; + + DockPanel.SuspendLayout(true); + + if (value == DockState.Hidden) + IsHidden = true; + else + SetDockState(false, value, Pane); + + DockPanel.ResumeLayout(true, true); + } + } + + private DockPanel m_dockPanel = null; + public DockPanel DockPanel + { + get { return m_dockPanel; } + set + { + if (m_dockPanel == value) + return; + + Pane = null; + + if (m_dockPanel != null) + m_dockPanel.RemoveContent(Content); + + if (m_tab != null) + { + m_tab.Dispose(); + m_tab = null; + } + + if (m_autoHideTab != null) + { + m_autoHideTab.Dispose(); + m_autoHideTab = null; + } + + m_dockPanel = value; + + if (m_dockPanel != null) + { + m_dockPanel.AddContent(Content); + Form.TopLevel = false; + Form.FormBorderStyle = FormBorderStyle.None; + Form.ShowInTaskbar = false; + Form.WindowState = FormWindowState.Normal; + NativeMethods.SetWindowPos(Form.Handle, IntPtr.Zero, 0, 0, 0, 0, + Win32.FlagsSetWindowPos.SWP_NOACTIVATE | + Win32.FlagsSetWindowPos.SWP_NOMOVE | + Win32.FlagsSetWindowPos.SWP_NOSIZE | + Win32.FlagsSetWindowPos.SWP_NOZORDER | + Win32.FlagsSetWindowPos.SWP_NOOWNERZORDER | + Win32.FlagsSetWindowPos.SWP_FRAMECHANGED); + } + } + } + + public Icon Icon + { + get { return Form.Icon; } + } + + public DockPane Pane + { + get { return IsFloat ? FloatPane : PanelPane; } + set + { + if (Pane == value) + return; + + DockPanel.SuspendLayout(true); + + DockPane oldPane = Pane; + + SuspendSetDockState(); + FloatPane = (value == null ? null : (value.IsFloat ? value : FloatPane)); + PanelPane = (value == null ? null : (value.IsFloat ? PanelPane : value)); + ResumeSetDockState(IsHidden, value != null ? value.DockState : DockState.Unknown, oldPane); + + DockPanel.ResumeLayout(true, true); + } + } + + private bool m_isHidden = true; + public bool IsHidden + { + get { return m_isHidden; } + set + { + if (m_isHidden == value) + return; + + SetDockState(value, VisibleState, Pane); + } + } + + private string m_tabText = null; + public string TabText + { + get { return m_tabText == null || m_tabText == "" ? Form.Text : m_tabText; } + set + { + if (m_tabText == value) + return; + + m_tabText = value; + if (Pane != null) + Pane.RefreshChanges(); + } + } + + private DockState m_visibleState = DockState.Unknown; + public DockState VisibleState + { + get { return m_visibleState; } + set + { + if (m_visibleState == value) + return; + + SetDockState(IsHidden, value, Pane); + } + } + + private bool m_isFloat = false; + public bool IsFloat + { + get { return m_isFloat; } + set + { + if (m_isFloat == value) + return; + + DockState visibleState = CheckDockState(value); + + if (visibleState == DockState.Unknown) + throw new InvalidOperationException(Strings.DockContentHandler_IsFloat_InvalidValue); + + SetDockState(IsHidden, visibleState, Pane); + } + } + + [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters")] + public DockState CheckDockState(bool isFloat) + { + DockState dockState; + + if (isFloat) + { + if (!IsDockStateValid(DockState.Float)) + dockState = DockState.Unknown; + else + dockState = DockState.Float; + } + else + { + dockState = (PanelPane != null) ? PanelPane.DockState : DefaultDockState; + if (dockState != DockState.Unknown && !IsDockStateValid(dockState)) + dockState = DockState.Unknown; + } + + return dockState; + } + + private DockPane m_panelPane = null; + public DockPane PanelPane + { + get { return m_panelPane; } + set + { + if (m_panelPane == value) + return; + + if (value != null) + { + if (value.IsFloat || value.DockPanel != DockPanel) + throw new InvalidOperationException(Strings.DockContentHandler_DockPane_InvalidValue); + } + + DockPane oldPane = Pane; + + if (m_panelPane != null) + RemoveFromPane(m_panelPane); + m_panelPane = value; + if (m_panelPane != null) + { + m_panelPane.AddContent(Content); + SetDockState(IsHidden, IsFloat ? DockState.Float : m_panelPane.DockState, oldPane); + } + else + SetDockState(IsHidden, DockState.Unknown, oldPane); + } + } + + private void RemoveFromPane(DockPane pane) + { + pane.RemoveContent(Content); + SetPane(null); + if (pane.Contents.Count == 0) + pane.Dispose(); + } + + private DockPane m_floatPane = null; + public DockPane FloatPane + { + get { return m_floatPane; } + set + { + if (m_floatPane == value) + return; + + if (value != null) + { + if (!value.IsFloat || value.DockPanel != DockPanel) + throw new InvalidOperationException(Strings.DockContentHandler_FloatPane_InvalidValue); + } + + DockPane oldPane = Pane; + + if (m_floatPane != null) + RemoveFromPane(m_floatPane); + m_floatPane = value; + if (m_floatPane != null) + { + m_floatPane.AddContent(Content); + SetDockState(IsHidden, IsFloat ? DockState.Float : VisibleState, oldPane); + } + else + SetDockState(IsHidden, DockState.Unknown, oldPane); + } + } + + private int m_countSetDockState = 0; + private void SuspendSetDockState() + { + m_countSetDockState ++; + } + + private void ResumeSetDockState() + { + m_countSetDockState --; + if (m_countSetDockState < 0) + m_countSetDockState = 0; + } + + internal bool IsSuspendSetDockState + { + get { return m_countSetDockState != 0; } + } + + private void ResumeSetDockState(bool isHidden, DockState visibleState, DockPane oldPane) + { + ResumeSetDockState(); + SetDockState(isHidden, visibleState, oldPane); + } + + internal void SetDockState(bool isHidden, DockState visibleState, DockPane oldPane) + { + if (IsSuspendSetDockState) + return; + + if (DockPanel == null && visibleState != DockState.Unknown) + throw new InvalidOperationException(Strings.DockContentHandler_SetDockState_NullPanel); + + if (visibleState == DockState.Hidden || (visibleState != DockState.Unknown && !IsDockStateValid(visibleState))) + throw new InvalidOperationException(Strings.DockContentHandler_SetDockState_InvalidState); + + DockPanel dockPanel = DockPanel; + if (dockPanel != null) + dockPanel.SuspendLayout(true); + + SuspendSetDockState(); + + DockState oldDockState = DockState; + + if (m_isHidden != isHidden || oldDockState == DockState.Unknown) + { + m_isHidden = isHidden; + } + m_visibleState = visibleState; + m_dockState = isHidden ? DockState.Hidden : visibleState; + + if (visibleState == DockState.Unknown) + Pane = null; + else + { + m_isFloat = (m_visibleState == DockState.Float); + + if (Pane == null) + Pane = DockPanel.DockPaneFactory.CreateDockPane(Content, visibleState, true); + else if (Pane.DockState != visibleState) + { + if (Pane.Contents.Count == 1) + Pane.SetDockState(visibleState); + else + Pane = DockPanel.DockPaneFactory.CreateDockPane(Content, visibleState, true); + } + } + + if (Form.ContainsFocus) + if (DockState == DockState.Hidden || DockState == DockState.Unknown) + DockPanel.ContentFocusManager.GiveUpFocus(Content); + + SetPaneAndVisible(Pane); + + if (oldPane != null && !oldPane.IsDisposed && oldDockState == oldPane.DockState) + RefreshDockPane(oldPane); + + if (Pane != null && DockState == Pane.DockState) + { + if ((Pane != oldPane) || + (Pane == oldPane && oldDockState != oldPane.DockState)) + // Avoid early refresh of hidden AutoHide panes + if ((Pane.DockWindow == null || Pane.DockWindow.Visible || Pane.IsHidden) && !Pane.IsAutoHide) + RefreshDockPane(Pane); + } + + if (oldDockState != DockState) + { + if (DockState == DockState.Hidden || DockState == DockState.Unknown || + DockHelper.IsDockStateAutoHide(DockState)) + DockPanel.ContentFocusManager.RemoveFromList(Content); + else + DockPanel.ContentFocusManager.AddToList(Content); + + OnDockStateChanged(EventArgs.Empty); + } + ResumeSetDockState(); + + if (dockPanel != null) + dockPanel.ResumeLayout(true, true); + } + + private static void RefreshDockPane(DockPane pane) + { + pane.RefreshChanges(); + pane.ValidateActiveContent(); + } + + internal string PersistString + { + get { return GetPersistStringCallback == null ? Form.GetType().ToString() : GetPersistStringCallback(); } + } + + private GetPersistStringCallback m_getPersistStringCallback = null; + public GetPersistStringCallback GetPersistStringCallback + { + get { return m_getPersistStringCallback; } + set { m_getPersistStringCallback = value; } + } + + + private bool m_hideOnClose = false; + public bool HideOnClose + { + get { return m_hideOnClose; } + set { m_hideOnClose = value; } + } + + private DockState m_showHint = DockState.Unknown; + public DockState ShowHint + { + get { return m_showHint; } + set + { + if (!DockHelper.IsDockStateValid(value, DockAreas)) + throw (new InvalidOperationException(Strings.DockContentHandler_ShowHint_InvalidValue)); + + if (m_showHint == value) + return; + + m_showHint = value; + } + } + + private bool m_isActivated = false; + public bool IsActivated + { + get { return m_isActivated; } + internal set + { + if (m_isActivated == value) + return; + + m_isActivated = value; + } + } + + public bool IsDockStateValid(DockState dockState) + { + if (DockPanel != null && dockState == DockState.Document && DockPanel.DocumentStyle == DocumentStyle.SystemMdi) + return false; + else + return DockHelper.IsDockStateValid(dockState, DockAreas); + } + + private ContextMenu m_tabPageContextMenu = null; + public ContextMenu TabPageContextMenu + { + get { return m_tabPageContextMenu; } + set { m_tabPageContextMenu = value; } + } + + private string m_toolTipText = null; + public string ToolTipText + { + get { return m_toolTipText; } + set { m_toolTipText = value; } + } + + public void Activate() + { + if (DockPanel == null) + Form.Activate(); + else if (Pane == null) + Show(DockPanel); + else + { + IsHidden = false; + Pane.ActiveContent = Content; + if (DockState == DockState.Document && DockPanel.DocumentStyle == DocumentStyle.SystemMdi) + { + Form.Activate(); + return; + } + else if (DockHelper.IsDockStateAutoHide(DockState)) + DockPanel.ActiveAutoHideContent = Content; + + if (!Form.ContainsFocus) + DockPanel.ContentFocusManager.Activate(Content); + } + } + + public void GiveUpFocus() + { + DockPanel.ContentFocusManager.GiveUpFocus(Content); + } + + private IntPtr m_activeWindowHandle = IntPtr.Zero; + internal IntPtr ActiveWindowHandle + { + get { return m_activeWindowHandle; } + set { m_activeWindowHandle = value; } + } + + public void Hide() + { + IsHidden = true; + } + + internal void SetPaneAndVisible(DockPane pane) + { + SetPane(pane); + SetVisible(); + } + + private void SetPane(DockPane pane) + { + if (pane != null && pane.DockState == DockState.Document && DockPanel.DocumentStyle == DocumentStyle.DockingMdi) + { + if (Form.Parent is DockPane) + SetParent(null); + if (Form.MdiParent != DockPanel.ParentForm) + { + FlagClipWindow = true; + Form.MdiParent = DockPanel.ParentForm; + } + } + else + { + FlagClipWindow = true; + if (Form.MdiParent != null) + Form.MdiParent = null; + if (Form.TopLevel) + Form.TopLevel = false; + SetParent(pane); + } + } + + internal void SetVisible() + { + bool visible; + + if (IsHidden) + visible = false; + else if (Pane != null && Pane.DockState == DockState.Document && DockPanel.DocumentStyle == DocumentStyle.DockingMdi) + visible = true; + else if (Pane != null && Pane.ActiveContent == Content) + visible = true; + else if (Pane != null && Pane.ActiveContent != Content) + visible = false; + else + visible = Form.Visible; + + if (Form.Visible != visible) + Form.Visible = visible; + } + + private void SetParent(Control value) + { + if (Form.Parent == value) + return; + + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // Workaround of .Net Framework bug: + // Change the parent of a control with focus may result in the first + // MDI child form get activated. + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + bool bRestoreFocus = false; + if (Form.ContainsFocus) + { + //Suggested as a fix for a memory leak by bugreports + if (value == null && !IsFloat) + DockPanel.ContentFocusManager.GiveUpFocus(this.Content); + else + { + DockPanel.SaveFocus(); + bRestoreFocus = true; + } + } + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + Form.Parent = value; + + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // Workaround of .Net Framework bug: + // Change the parent of a control with focus may result in the first + // MDI child form get activated. + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + if (bRestoreFocus) + Activate(); + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + } + + public void Show() + { + if (DockPanel == null) + Form.Show(); + else + Show(DockPanel); + } + + public void Show(DockPanel dockPanel) + { + if (dockPanel == null) + throw(new ArgumentNullException(Strings.DockContentHandler_Show_NullDockPanel)); + + if (DockState == DockState.Unknown) + Show(dockPanel, DefaultShowState); + else + Activate(); + } + + public void Show(DockPanel dockPanel, DockState dockState) + { + if (dockPanel == null) + throw(new ArgumentNullException(Strings.DockContentHandler_Show_NullDockPanel)); + + if (dockState == DockState.Unknown || dockState == DockState.Hidden) + throw(new ArgumentException(Strings.DockContentHandler_Show_InvalidDockState)); + + dockPanel.SuspendLayout(true); + + DockPanel = dockPanel; + + if (dockState == DockState.Float && FloatPane == null) + Pane = DockPanel.DockPaneFactory.CreateDockPane(Content, DockState.Float, true); + else if (PanelPane == null) + { + DockPane paneExisting = null; + foreach (DockPane pane in DockPanel.Panes) + if (pane.DockState == dockState) + { + paneExisting = pane; + break; + } + + if (paneExisting == null) + Pane = DockPanel.DockPaneFactory.CreateDockPane(Content, dockState, true); + else + Pane = paneExisting; + } + + DockState = dockState; + dockPanel.ResumeLayout(true, true); //we'll resume the layout before activating to ensure that the position + Activate(); //and size of the form are finally processed before the form is shown + } + + [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters")] + public void Show(DockPanel dockPanel, Rectangle floatWindowBounds) + { + if (dockPanel == null) + throw(new ArgumentNullException(Strings.DockContentHandler_Show_NullDockPanel)); + + dockPanel.SuspendLayout(true); + + DockPanel = dockPanel; + if (FloatPane == null) + { + IsHidden = true; // to reduce the screen flicker + FloatPane = DockPanel.DockPaneFactory.CreateDockPane(Content, DockState.Float, false); + FloatPane.FloatWindow.StartPosition = FormStartPosition.Manual; + } + + FloatPane.FloatWindow.Bounds = floatWindowBounds; + + Show(dockPanel, DockState.Float); + Activate(); + + dockPanel.ResumeLayout(true, true); + } + + public void Show(DockPane pane, IDockContent beforeContent) + { + if (pane == null) + throw(new ArgumentNullException(Strings.DockContentHandler_Show_NullPane)); + + if (beforeContent != null && pane.Contents.IndexOf(beforeContent) == -1) + throw(new ArgumentException(Strings.DockContentHandler_Show_InvalidBeforeContent)); + + pane.DockPanel.SuspendLayout(true); + + DockPanel = pane.DockPanel; + Pane = pane; + pane.SetContentIndex(Content, pane.Contents.IndexOf(beforeContent)); + Show(); + + pane.DockPanel.ResumeLayout(true, true); + } + + public void Show(DockPane previousPane, DockAlignment alignment, double proportion) + { + if (previousPane == null) + throw(new ArgumentException(Strings.DockContentHandler_Show_InvalidPrevPane)); + + if (DockHelper.IsDockStateAutoHide(previousPane.DockState)) + throw(new ArgumentException(Strings.DockContentHandler_Show_InvalidPrevPane)); + + previousPane.DockPanel.SuspendLayout(true); + + DockPanel = previousPane.DockPanel; + DockPanel.DockPaneFactory.CreateDockPane(Content, previousPane, alignment, proportion, true); + Show(); + + previousPane.DockPanel.ResumeLayout(true, true); + } + + public void Close() + { + DockPanel dockPanel = DockPanel; + if (dockPanel != null) + dockPanel.SuspendLayout(true); + Form.Close(); + if (dockPanel != null) + dockPanel.ResumeLayout(true, true); + + } + + private DockPaneStripBase.Tab m_tab = null; + internal DockPaneStripBase.Tab GetTab(DockPaneStripBase dockPaneStrip) + { + if (m_tab == null) + m_tab = dockPaneStrip.CreateTab(Content); + + return m_tab; + } + + private IDisposable m_autoHideTab = null; + internal IDisposable AutoHideTab + { + get { return m_autoHideTab; } + set { m_autoHideTab = value; } + } + + #region Events + private static readonly object DockStateChangedEvent = new object(); + public event EventHandler DockStateChanged + { + add { Events.AddHandler(DockStateChangedEvent, value); } + remove { Events.RemoveHandler(DockStateChangedEvent, value); } + } + protected virtual void OnDockStateChanged(EventArgs e) + { + EventHandler handler = (EventHandler)Events[DockStateChangedEvent]; + if (handler != null) + handler(this, e); + } + #endregion + + private void Form_Disposed(object sender, EventArgs e) + { + Dispose(); + } + + private void Form_TextChanged(object sender, EventArgs e) + { + if (DockHelper.IsDockStateAutoHide(DockState)) + DockPanel.RefreshAutoHideStrip(); + else if (Pane != null) + { + if (Pane.FloatWindow != null) + Pane.FloatWindow.SetText(); + Pane.RefreshChanges(); + } + } + + private bool m_flagClipWindow = false; + internal bool FlagClipWindow + { + get { return m_flagClipWindow; } + set + { + if (m_flagClipWindow == value) + return; + + m_flagClipWindow = value; + if (m_flagClipWindow) + Form.Region = new Region(Rectangle.Empty); + else + Form.Region = null; + } + } + + private ContextMenuStrip m_tabPageContextMenuStrip = null; + public ContextMenuStrip TabPageContextMenuStrip + { + get { return m_tabPageContextMenuStrip; } + set { m_tabPageContextMenuStrip = value; } + } + + #region IDockDragSource Members + + Control IDragSource.DragControl + { + get { return Form; } + } + + bool IDockDragSource.CanDockTo(DockPane pane) + { + if (!IsDockStateValid(pane.DockState)) + return false; + + if (Pane == pane && pane.DisplayingContents.Count == 1) + return false; + + return true; + } + + Rectangle IDockDragSource.BeginDrag(Point ptMouse) + { + Size size; + DockPane floatPane = this.FloatPane; + if (DockState == DockState.Float || floatPane == null || floatPane.FloatWindow.NestedPanes.Count != 1) + size = DockPanel.DefaultFloatWindowSize; + else + size = floatPane.FloatWindow.Size; + + Point location; + Rectangle rectPane = Pane.ClientRectangle; + if (DockState == DockState.Document) + { + if (Pane.DockPanel.DocumentTabStripLocation == DocumentTabStripLocation.Bottom) + location = new Point(rectPane.Left, rectPane.Bottom - size.Height); + else + location = new Point(rectPane.Left, rectPane.Top); + } + else + { + location = new Point(rectPane.Left, rectPane.Bottom); + location.Y -= size.Height; + } + location = Pane.PointToScreen(location); + + if (ptMouse.X > location.X + size.Width) + location.X += ptMouse.X - (location.X + size.Width) + Measures.SplitterSize; + + return new Rectangle(location, size); + } + + public void FloatAt(Rectangle floatWindowBounds) + { + DockPane pane = DockPanel.DockPaneFactory.CreateDockPane(Content, floatWindowBounds, true); + } + + public void DockTo(DockPane pane, DockStyle dockStyle, int contentIndex) + { + if (dockStyle == DockStyle.Fill) + { + bool samePane = (Pane == pane); + if (!samePane) + Pane = pane; + + if (contentIndex == -1 || !samePane) + pane.SetContentIndex(Content, contentIndex); + else + { + DockContentCollection contents = pane.Contents; + int oldIndex = contents.IndexOf(Content); + int newIndex = contentIndex; + if (oldIndex < newIndex) + { + newIndex += 1; + if (newIndex > contents.Count -1) + newIndex = -1; + } + pane.SetContentIndex(Content, newIndex); + } + } + else + { + DockPane paneFrom = DockPanel.DockPaneFactory.CreateDockPane(Content, pane.DockState, true); + INestedPanesContainer container = pane.NestedPanesContainer; + if (dockStyle == DockStyle.Left) + paneFrom.DockTo(container, pane, DockAlignment.Left, 0.5); + else if (dockStyle == DockStyle.Right) + paneFrom.DockTo(container, pane, DockAlignment.Right, 0.5); + else if (dockStyle == DockStyle.Top) + paneFrom.DockTo(container, pane, DockAlignment.Top, 0.5); + else if (dockStyle == DockStyle.Bottom) + paneFrom.DockTo(container, pane, DockAlignment.Bottom, 0.5); + + paneFrom.DockState = pane.DockState; + } + } + + public void DockTo(DockPanel panel, DockStyle dockStyle) + { + if (panel != DockPanel) + throw new ArgumentException(Strings.IDockDragSource_DockTo_InvalidPanel, "panel"); + + DockPane pane; + + if (dockStyle == DockStyle.Top) + pane = DockPanel.DockPaneFactory.CreateDockPane(Content, DockState.DockTop, true); + else if (dockStyle == DockStyle.Bottom) + pane = DockPanel.DockPaneFactory.CreateDockPane(Content, DockState.DockBottom, true); + else if (dockStyle == DockStyle.Left) + pane = DockPanel.DockPaneFactory.CreateDockPane(Content, DockState.DockLeft, true); + else if (dockStyle == DockStyle.Right) + pane = DockPanel.DockPaneFactory.CreateDockPane(Content, DockState.DockRight, true); + else if (dockStyle == DockStyle.Fill) + pane = DockPanel.DockPaneFactory.CreateDockPane(Content, DockState.Document, true); + else + return; + } + + #endregion + } +} diff --git a/trunk/Docking/DockOutlineBase.cs b/source/Docking/DockOutlineBase.cs similarity index 96% rename from trunk/Docking/DockOutlineBase.cs rename to source/Docking/DockOutlineBase.cs index 9e56645..4f799bf 100644 --- a/trunk/Docking/DockOutlineBase.cs +++ b/source/Docking/DockOutlineBase.cs @@ -1,161 +1,161 @@ -using System; -using System.Drawing; -using System.Windows.Forms; - -namespace LSLEditor.Docking -{ - internal abstract class DockOutlineBase - { - public DockOutlineBase() - { - Init(); - } - - private void Init() - { - SetValues(Rectangle.Empty, null, DockStyle.None, -1); - SaveOldValues(); - } - - private Rectangle m_oldFloatWindowBounds; - protected Rectangle OldFloatWindowBounds - { - get { return m_oldFloatWindowBounds; } - } - - private Control m_oldDockTo; - protected Control OldDockTo - { - get { return m_oldDockTo; } - } - - private DockStyle m_oldDock; - protected DockStyle OldDock - { - get { return m_oldDock; } - } - - private int m_oldContentIndex; - protected int OldContentIndex - { - get { return m_oldContentIndex; } - } - - protected bool SameAsOldValue - { - get - { - return FloatWindowBounds == OldFloatWindowBounds && - DockTo == OldDockTo && - Dock == OldDock && - ContentIndex == OldContentIndex; - } - } - - private Rectangle m_floatWindowBounds; - public Rectangle FloatWindowBounds - { - get { return m_floatWindowBounds; } - } - - private Control m_dockTo; - public Control DockTo - { - get { return m_dockTo; } - } - - private DockStyle m_dock; - public DockStyle Dock - { - get { return m_dock; } - } - - private int m_contentIndex; - public int ContentIndex - { - get { return m_contentIndex; } - } - - public bool FlagFullEdge - { - get { return m_contentIndex != 0; } - } - - private bool m_flagTestDrop = false; - public bool FlagTestDrop - { - get { return m_flagTestDrop; } - set { m_flagTestDrop = value; } - } - - private void SaveOldValues() - { - m_oldDockTo = m_dockTo; - m_oldDock = m_dock; - m_oldContentIndex = m_contentIndex; - m_oldFloatWindowBounds = m_floatWindowBounds; - } - - protected abstract void OnShow(); - - protected abstract void OnClose(); - - private void SetValues(Rectangle floatWindowBounds, Control dockTo, DockStyle dock, int contentIndex) - { - m_floatWindowBounds = floatWindowBounds; - m_dockTo = dockTo; - m_dock = dock; - m_contentIndex = contentIndex; - FlagTestDrop = true; - } - - private void TestChange() - { - if (m_floatWindowBounds != m_oldFloatWindowBounds || - m_dockTo != m_oldDockTo || - m_dock != m_oldDock || - m_contentIndex != m_oldContentIndex) - OnShow(); - } - - public void Show() - { - SaveOldValues(); - SetValues(Rectangle.Empty, null, DockStyle.None, -1); - TestChange(); - } - - public void Show(DockPane pane, DockStyle dock) - { - SaveOldValues(); - SetValues(Rectangle.Empty, pane, dock, -1); - TestChange(); - } - - public void Show(DockPane pane, int contentIndex) - { - SaveOldValues(); - SetValues(Rectangle.Empty, pane, DockStyle.Fill, contentIndex); - TestChange(); - } - - public void Show(DockPanel dockPanel, DockStyle dock, bool fullPanelEdge) - { - SaveOldValues(); - SetValues(Rectangle.Empty, dockPanel, dock, fullPanelEdge ? -1 : 0); - TestChange(); - } - - public void Show(Rectangle floatWindowBounds) - { - SaveOldValues(); - SetValues(floatWindowBounds, null, DockStyle.None, -1); - TestChange(); - } - - public void Close() - { - OnClose(); - } - } -} +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace LSLEditor.Docking +{ + internal abstract class DockOutlineBase + { + public DockOutlineBase() + { + Init(); + } + + private void Init() + { + SetValues(Rectangle.Empty, null, DockStyle.None, -1); + SaveOldValues(); + } + + private Rectangle m_oldFloatWindowBounds; + protected Rectangle OldFloatWindowBounds + { + get { return m_oldFloatWindowBounds; } + } + + private Control m_oldDockTo; + protected Control OldDockTo + { + get { return m_oldDockTo; } + } + + private DockStyle m_oldDock; + protected DockStyle OldDock + { + get { return m_oldDock; } + } + + private int m_oldContentIndex; + protected int OldContentIndex + { + get { return m_oldContentIndex; } + } + + protected bool SameAsOldValue + { + get + { + return FloatWindowBounds == OldFloatWindowBounds && + DockTo == OldDockTo && + Dock == OldDock && + ContentIndex == OldContentIndex; + } + } + + private Rectangle m_floatWindowBounds; + public Rectangle FloatWindowBounds + { + get { return m_floatWindowBounds; } + } + + private Control m_dockTo; + public Control DockTo + { + get { return m_dockTo; } + } + + private DockStyle m_dock; + public DockStyle Dock + { + get { return m_dock; } + } + + private int m_contentIndex; + public int ContentIndex + { + get { return m_contentIndex; } + } + + public bool FlagFullEdge + { + get { return m_contentIndex != 0; } + } + + private bool m_flagTestDrop = false; + public bool FlagTestDrop + { + get { return m_flagTestDrop; } + set { m_flagTestDrop = value; } + } + + private void SaveOldValues() + { + m_oldDockTo = m_dockTo; + m_oldDock = m_dock; + m_oldContentIndex = m_contentIndex; + m_oldFloatWindowBounds = m_floatWindowBounds; + } + + protected abstract void OnShow(); + + protected abstract void OnClose(); + + private void SetValues(Rectangle floatWindowBounds, Control dockTo, DockStyle dock, int contentIndex) + { + m_floatWindowBounds = floatWindowBounds; + m_dockTo = dockTo; + m_dock = dock; + m_contentIndex = contentIndex; + FlagTestDrop = true; + } + + private void TestChange() + { + if (m_floatWindowBounds != m_oldFloatWindowBounds || + m_dockTo != m_oldDockTo || + m_dock != m_oldDock || + m_contentIndex != m_oldContentIndex) + OnShow(); + } + + public void Show() + { + SaveOldValues(); + SetValues(Rectangle.Empty, null, DockStyle.None, -1); + TestChange(); + } + + public void Show(DockPane pane, DockStyle dock) + { + SaveOldValues(); + SetValues(Rectangle.Empty, pane, dock, -1); + TestChange(); + } + + public void Show(DockPane pane, int contentIndex) + { + SaveOldValues(); + SetValues(Rectangle.Empty, pane, DockStyle.Fill, contentIndex); + TestChange(); + } + + public void Show(DockPanel dockPanel, DockStyle dock, bool fullPanelEdge) + { + SaveOldValues(); + SetValues(Rectangle.Empty, dockPanel, dock, fullPanelEdge ? -1 : 0); + TestChange(); + } + + public void Show(Rectangle floatWindowBounds) + { + SaveOldValues(); + SetValues(floatWindowBounds, null, DockStyle.None, -1); + TestChange(); + } + + public void Close() + { + OnClose(); + } + } +} diff --git a/trunk/Docking/DockPane.SplitterControl.cs b/source/Docking/DockPane.SplitterControl.cs similarity index 97% rename from trunk/Docking/DockPane.SplitterControl.cs rename to source/Docking/DockPane.SplitterControl.cs index da35ed2..04b669f 100644 --- a/trunk/Docking/DockPane.SplitterControl.cs +++ b/source/Docking/DockPane.SplitterControl.cs @@ -1,157 +1,157 @@ -using System; -using System.Collections; -using System.ComponentModel; -using System.Drawing; -using System.Windows.Forms; - -namespace LSLEditor.Docking -{ - partial class DockPane - { - private class SplitterControl : Control, ISplitterDragSource - { - DockPane m_pane; - - public SplitterControl(DockPane pane) - { - SetStyle(ControlStyles.Selectable, false); - m_pane = pane; - } - - public DockPane DockPane - { - get { return m_pane; } - } - - private DockAlignment m_alignment; - public DockAlignment Alignment - { - get { return m_alignment; } - set - { - m_alignment = value; - if (m_alignment == DockAlignment.Left || m_alignment == DockAlignment.Right) - Cursor = Cursors.VSplit; - else if (m_alignment == DockAlignment.Top || m_alignment == DockAlignment.Bottom) - Cursor = Cursors.HSplit; - else - Cursor = Cursors.Default; - - if (DockPane.DockState == DockState.Document) - Invalidate(); - } - } - - protected override void OnPaint(PaintEventArgs e) - { - base.OnPaint(e); - - if (DockPane.DockState != DockState.Document) - return; - - Graphics g = e.Graphics; - Rectangle rect = ClientRectangle; - if (Alignment == DockAlignment.Top || Alignment == DockAlignment.Bottom) - g.DrawLine(SystemPens.ControlDark, rect.Left, rect.Bottom - 1, rect.Right, rect.Bottom - 1); - else if (Alignment == DockAlignment.Left || Alignment == DockAlignment.Right) - g.DrawLine(SystemPens.ControlDarkDark, rect.Right - 1, rect.Top, rect.Right - 1, rect.Bottom); - } - - protected override void OnMouseDown(MouseEventArgs e) - { - base.OnMouseDown(e); - - if (e.Button != MouseButtons.Left) - return; - - DockPane.DockPanel.BeginDrag(this, Parent.RectangleToScreen(Bounds)); - } - - #region ISplitterDragSource Members - - void ISplitterDragSource.BeginDrag(Rectangle rectSplitter) - { - } - - void ISplitterDragSource.EndDrag() - { - } - - bool ISplitterDragSource.IsVertical - { - get - { - NestedDockingStatus status = DockPane.NestedDockingStatus; - return (status.DisplayingAlignment == DockAlignment.Left || - status.DisplayingAlignment == DockAlignment.Right); - } - } - - Rectangle ISplitterDragSource.DragLimitBounds - { - get - { - NestedDockingStatus status = DockPane.NestedDockingStatus; - Rectangle rectLimit = Parent.RectangleToScreen(status.LogicalBounds); - if (((ISplitterDragSource)this).IsVertical) - { - rectLimit.X += MeasurePane.MinSize; - rectLimit.Width -= 2 * MeasurePane.MinSize; - } - else - { - rectLimit.Y += MeasurePane.MinSize; - rectLimit.Height -= 2 * MeasurePane.MinSize; - } - - return rectLimit; - } - } - - void ISplitterDragSource.MoveSplitter(int offset) - { - NestedDockingStatus status = DockPane.NestedDockingStatus; - double proportion = status.Proportion; - if (status.LogicalBounds.Width <= 0 || status.LogicalBounds.Height <= 0) - return; - else if (status.DisplayingAlignment == DockAlignment.Left) - proportion += ((double)offset) / (double)status.LogicalBounds.Width; - else if (status.DisplayingAlignment == DockAlignment.Right) - proportion -= ((double)offset) / (double)status.LogicalBounds.Width; - else if (status.DisplayingAlignment == DockAlignment.Top) - proportion += ((double)offset) / (double)status.LogicalBounds.Height; - else - proportion -= ((double)offset) / (double)status.LogicalBounds.Height; - - DockPane.SetNestedDockingProportion(proportion); - } - - #region IDragSource Members - - Control IDragSource.DragControl - { - get { return this; } - } - - #endregion - - #endregion - } - - private SplitterControl m_splitter; - private SplitterControl Splitter - { - get { return m_splitter; } - } - - internal Rectangle SplitterBounds - { - set { Splitter.Bounds = value; } - } - - internal DockAlignment SplitterAlignment - { - set { Splitter.Alignment = value; } - } - } +using System; +using System.Collections; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace LSLEditor.Docking +{ + partial class DockPane + { + private class SplitterControl : Control, ISplitterDragSource + { + DockPane m_pane; + + public SplitterControl(DockPane pane) + { + SetStyle(ControlStyles.Selectable, false); + m_pane = pane; + } + + public DockPane DockPane + { + get { return m_pane; } + } + + private DockAlignment m_alignment; + public DockAlignment Alignment + { + get { return m_alignment; } + set + { + m_alignment = value; + if (m_alignment == DockAlignment.Left || m_alignment == DockAlignment.Right) + Cursor = Cursors.VSplit; + else if (m_alignment == DockAlignment.Top || m_alignment == DockAlignment.Bottom) + Cursor = Cursors.HSplit; + else + Cursor = Cursors.Default; + + if (DockPane.DockState == DockState.Document) + Invalidate(); + } + } + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + + if (DockPane.DockState != DockState.Document) + return; + + Graphics g = e.Graphics; + Rectangle rect = ClientRectangle; + if (Alignment == DockAlignment.Top || Alignment == DockAlignment.Bottom) + g.DrawLine(SystemPens.ControlDark, rect.Left, rect.Bottom - 1, rect.Right, rect.Bottom - 1); + else if (Alignment == DockAlignment.Left || Alignment == DockAlignment.Right) + g.DrawLine(SystemPens.ControlDarkDark, rect.Right - 1, rect.Top, rect.Right - 1, rect.Bottom); + } + + protected override void OnMouseDown(MouseEventArgs e) + { + base.OnMouseDown(e); + + if (e.Button != MouseButtons.Left) + return; + + DockPane.DockPanel.BeginDrag(this, Parent.RectangleToScreen(Bounds)); + } + + #region ISplitterDragSource Members + + void ISplitterDragSource.BeginDrag(Rectangle rectSplitter) + { + } + + void ISplitterDragSource.EndDrag() + { + } + + bool ISplitterDragSource.IsVertical + { + get + { + NestedDockingStatus status = DockPane.NestedDockingStatus; + return (status.DisplayingAlignment == DockAlignment.Left || + status.DisplayingAlignment == DockAlignment.Right); + } + } + + Rectangle ISplitterDragSource.DragLimitBounds + { + get + { + NestedDockingStatus status = DockPane.NestedDockingStatus; + Rectangle rectLimit = Parent.RectangleToScreen(status.LogicalBounds); + if (((ISplitterDragSource)this).IsVertical) + { + rectLimit.X += MeasurePane.MinSize; + rectLimit.Width -= 2 * MeasurePane.MinSize; + } + else + { + rectLimit.Y += MeasurePane.MinSize; + rectLimit.Height -= 2 * MeasurePane.MinSize; + } + + return rectLimit; + } + } + + void ISplitterDragSource.MoveSplitter(int offset) + { + NestedDockingStatus status = DockPane.NestedDockingStatus; + double proportion = status.Proportion; + if (status.LogicalBounds.Width <= 0 || status.LogicalBounds.Height <= 0) + return; + else if (status.DisplayingAlignment == DockAlignment.Left) + proportion += ((double)offset) / (double)status.LogicalBounds.Width; + else if (status.DisplayingAlignment == DockAlignment.Right) + proportion -= ((double)offset) / (double)status.LogicalBounds.Width; + else if (status.DisplayingAlignment == DockAlignment.Top) + proportion += ((double)offset) / (double)status.LogicalBounds.Height; + else + proportion -= ((double)offset) / (double)status.LogicalBounds.Height; + + DockPane.SetNestedDockingProportion(proportion); + } + + #region IDragSource Members + + Control IDragSource.DragControl + { + get { return this; } + } + + #endregion + + #endregion + } + + private SplitterControl m_splitter; + private SplitterControl Splitter + { + get { return m_splitter; } + } + + internal Rectangle SplitterBounds + { + set { Splitter.Bounds = value; } + } + + internal DockAlignment SplitterAlignment + { + set { Splitter.Alignment = value; } + } + } } \ No newline at end of file diff --git a/trunk/Docking/DockPane.cs b/source/Docking/DockPane.cs similarity index 96% rename from trunk/Docking/DockPane.cs rename to source/Docking/DockPane.cs index 83dd35c..ecb70dd 100644 --- a/trunk/Docking/DockPane.cs +++ b/source/Docking/DockPane.cs @@ -1,1288 +1,1288 @@ -using System; -using System.ComponentModel; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Windows.Forms; -using System.Runtime.InteropServices; -using System.Security.Permissions; -using System.Diagnostics.CodeAnalysis; - -namespace LSLEditor.Docking -{ - [ToolboxItem(false)] - public partial class DockPane : UserControl, IDockDragSource - { - public enum AppearanceStyle - { - ToolWindow, - Document - } - - private enum HitTestArea - { - Caption, - TabStrip, - Content, - None - } - - private struct HitTestResult - { - public HitTestArea HitArea; - public int Index; - - public HitTestResult(HitTestArea hitTestArea, int index) - { - HitArea = hitTestArea; - Index = index; - } - } - - private DockPaneCaptionBase m_captionControl; - private DockPaneCaptionBase CaptionControl - { - get { return m_captionControl; } - } - - private DockPaneStripBase m_tabStripControl; - internal DockPaneStripBase TabStripControl - { - get { return m_tabStripControl; } - } - - internal protected DockPane(IDockContent content, DockState visibleState, bool show) - { - InternalConstruct(content, visibleState, false, Rectangle.Empty, null, DockAlignment.Right, 0.5, show); - } - - [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters", MessageId = "1#")] - internal protected DockPane(IDockContent content, FloatWindow floatWindow, bool show) - { - if (floatWindow == null) - throw new ArgumentNullException("floatWindow"); - - InternalConstruct(content, DockState.Float, false, Rectangle.Empty, floatWindow.NestedPanes.GetDefaultPreviousPane(this), DockAlignment.Right, 0.5, show); - } - - internal protected DockPane(IDockContent content, DockPane previousPane, DockAlignment alignment, double proportion, bool show) - { - if (previousPane == null) - throw(new ArgumentNullException("previousPane")); - InternalConstruct(content, previousPane.DockState, false, Rectangle.Empty, previousPane, alignment, proportion, show); - } - - [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters", MessageId = "1#")] - internal protected DockPane(IDockContent content, Rectangle floatWindowBounds, bool show) - { - InternalConstruct(content, DockState.Float, true, floatWindowBounds, null, DockAlignment.Right, 0.5, show); - } - - private void InternalConstruct(IDockContent content, DockState dockState, bool flagBounds, Rectangle floatWindowBounds, DockPane prevPane, DockAlignment alignment, double proportion, bool show) - { - if (dockState == DockState.Hidden || dockState == DockState.Unknown) - throw new ArgumentException(Strings.DockPane_SetDockState_InvalidState); - - if (content == null) - throw new ArgumentNullException(Strings.DockPane_Constructor_NullContent); - - if (content.DockHandler.DockPanel == null) - throw new ArgumentException(Strings.DockPane_Constructor_NullDockPanel); - - - SuspendLayout(); - SetStyle(ControlStyles.Selectable, false); - - m_isFloat = (dockState == DockState.Float); - - m_contents = new DockContentCollection(); - m_displayingContents = new DockContentCollection(this); - m_dockPanel = content.DockHandler.DockPanel; - m_dockPanel.AddPane(this); - - m_splitter = new SplitterControl(this); - - m_nestedDockingStatus = new NestedDockingStatus(this); - - m_captionControl = DockPanel.DockPaneCaptionFactory.CreateDockPaneCaption(this); - m_tabStripControl = DockPanel.DockPaneStripFactory.CreateDockPaneStrip(this); - Controls.AddRange(new Control[] { m_captionControl, m_tabStripControl }); - - DockPanel.SuspendLayout(true); - if (flagBounds) - FloatWindow = DockPanel.FloatWindowFactory.CreateFloatWindow(DockPanel, this, floatWindowBounds); - else if (prevPane != null) - DockTo(prevPane.NestedPanesContainer, prevPane, alignment, proportion); - - SetDockState(dockState); - if (show) - content.DockHandler.Pane = this; - else if (this.IsFloat) - content.DockHandler.FloatPane = this; - else - content.DockHandler.PanelPane = this; - - ResumeLayout(); - DockPanel.ResumeLayout(true, true); - } - - protected override void Dispose(bool disposing) - { - if (disposing) - { - m_dockState = DockState.Unknown; - - if (NestedPanesContainer != null) - NestedPanesContainer.NestedPanes.Remove(this); - - if (DockPanel != null) - { - DockPanel.RemovePane(this); - m_dockPanel = null; - } - - Splitter.Dispose(); - if (m_autoHidePane != null) - m_autoHidePane.Dispose(); - } - base.Dispose(disposing); - } - - private IDockContent m_activeContent = null; - public virtual IDockContent ActiveContent - { - get { return m_activeContent; } - set - { - if (ActiveContent == value) - return; - - if (value != null) - { - if (!DisplayingContents.Contains(value)) - throw(new InvalidOperationException(Strings.DockPane_ActiveContent_InvalidValue)); - } - else - { - if (DisplayingContents.Count != 0) - throw(new InvalidOperationException(Strings.DockPane_ActiveContent_InvalidValue)); - } - - IDockContent oldValue = m_activeContent; - - if (DockPanel.ActiveAutoHideContent == oldValue) - DockPanel.ActiveAutoHideContent = null; - - m_activeContent = value; - - if (DockPanel.DocumentStyle == DocumentStyle.DockingMdi && DockState == DockState.Document) - { - if (m_activeContent != null) - m_activeContent.DockHandler.Form.BringToFront(); - } - else - { - if (m_activeContent != null) - m_activeContent.DockHandler.SetVisible(); - if (oldValue != null && DisplayingContents.Contains(oldValue)) - oldValue.DockHandler.SetVisible(); - if (IsActivated && m_activeContent != null) - m_activeContent.DockHandler.Activate(); - } - - if (FloatWindow != null) - FloatWindow.SetText(); - - if (DockPanel.DocumentStyle == DocumentStyle.DockingMdi && - DockState == DockState.Document) - RefreshChanges(false); // delayed layout to reduce screen flicker - else - RefreshChanges(); - - if (m_activeContent != null) - TabStripControl.EnsureTabVisible(m_activeContent); - } - } - - private bool m_allowDockDragAndDrop = true; - public virtual bool AllowDockDragAndDrop - { - get { return m_allowDockDragAndDrop; } - set { m_allowDockDragAndDrop = value; } - } - - private IDisposable m_autoHidePane = null; - internal IDisposable AutoHidePane - { - get { return m_autoHidePane; } - set { m_autoHidePane = value; } - } - - private object m_autoHideTabs = null; - internal object AutoHideTabs - { - get { return m_autoHideTabs; } - set { m_autoHideTabs = value; } - } - - private object TabPageContextMenu - { - get - { - IDockContent content = ActiveContent; - - if (content == null) - return null; - - if (content.DockHandler.TabPageContextMenuStrip != null) - return content.DockHandler.TabPageContextMenuStrip; - else if (content.DockHandler.TabPageContextMenu != null) - return content.DockHandler.TabPageContextMenu; - else - return null; - } - } - - internal bool HasTabPageContextMenu - { - get { return TabPageContextMenu != null; } - } - - internal void ShowTabPageContextMenu(Control control, Point position) - { - object menu = TabPageContextMenu; - - if (menu == null) - return; - - ContextMenuStrip contextMenuStrip = menu as ContextMenuStrip; - if (contextMenuStrip != null) - { - contextMenuStrip.Show(control, position); - return; - } - - ContextMenu contextMenu = menu as ContextMenu; - if (contextMenu != null) - contextMenu.Show(this, position); - } - - private Rectangle CaptionRectangle - { - get - { - if (!HasCaption) - return Rectangle.Empty; - - Rectangle rectWindow = DisplayingRectangle; - int x, y, width; - x = rectWindow.X; - y = rectWindow.Y; - width = rectWindow.Width; - int height = CaptionControl.MeasureHeight(); - - return new Rectangle(x, y, width, height); - } - } - - internal Rectangle ContentRectangle - { - get - { - Rectangle rectWindow = DisplayingRectangle; - Rectangle rectCaption = CaptionRectangle; - Rectangle rectTabStrip = TabStripRectangle; - - int x = rectWindow.X; - - int y = rectWindow.Y + (rectCaption.IsEmpty ? 0 : rectCaption.Height); - if (DockState == DockState.Document && DockPanel.DocumentTabStripLocation == DocumentTabStripLocation.Top) - y += rectTabStrip.Height; - - int width = rectWindow.Width; - int height = rectWindow.Height - rectCaption.Height - rectTabStrip.Height; - - return new Rectangle(x, y, width, height); - } - } - - internal Rectangle TabStripRectangle - { - get - { - if (Appearance == AppearanceStyle.ToolWindow) - return TabStripRectangle_ToolWindow; - else - return TabStripRectangle_Document; - } - } - - private Rectangle TabStripRectangle_ToolWindow - { - get - { - if (DisplayingContents.Count <= 1 || IsAutoHide) - return Rectangle.Empty; - - Rectangle rectWindow = DisplayingRectangle; - - int width = rectWindow.Width; - int height = TabStripControl.MeasureHeight(); - int x = rectWindow.X; - int y = rectWindow.Bottom - height; - Rectangle rectCaption = CaptionRectangle; - if (rectCaption.Contains(x, y)) - y = rectCaption.Y + rectCaption.Height; - - return new Rectangle(x, y, width, height); - } - } - - private Rectangle TabStripRectangle_Document - { - get - { - if (DisplayingContents.Count == 0) - return Rectangle.Empty; - - if (DisplayingContents.Count == 1 && DockPanel.DocumentStyle == DocumentStyle.DockingSdi) - return Rectangle.Empty; - - Rectangle rectWindow = DisplayingRectangle; - int x = rectWindow.X; - int width = rectWindow.Width; - int height = TabStripControl.MeasureHeight(); - - int y = 0; - if (DockPanel.DocumentTabStripLocation == DocumentTabStripLocation.Bottom) - y = rectWindow.Height - height; - else - y = rectWindow.Y; - - return new Rectangle(x, y, width, height); - } - } - - public virtual string CaptionText - { - get { return ActiveContent == null ? string.Empty : ActiveContent.DockHandler.TabText; } - } - - private DockContentCollection m_contents; - public DockContentCollection Contents - { - get { return m_contents; } - } - - private DockContentCollection m_displayingContents; - public DockContentCollection DisplayingContents - { - get { return m_displayingContents; } - } - - private DockPanel m_dockPanel; - public DockPanel DockPanel - { - get { return m_dockPanel; } - } - - private bool HasCaption - { - get - { - if (DockState == DockState.Document || - DockState == DockState.Hidden || - DockState == DockState.Unknown || - (DockState == DockState.Float && FloatWindow.VisibleNestedPanes.Count <= 1)) - return false; - else - return true; - } - } - - private bool m_isActivated = false; - public bool IsActivated - { - get { return m_isActivated; } - } - internal void SetIsActivated(bool value) - { - if (m_isActivated == value) - return; - - m_isActivated = value; - if (DockState != DockState.Document) - RefreshChanges(false); - OnIsActivatedChanged(EventArgs.Empty); - } - - private bool m_isActiveDocumentPane = false; - public bool IsActiveDocumentPane - { - get { return m_isActiveDocumentPane; } - } - internal void SetIsActiveDocumentPane(bool value) - { - if (m_isActiveDocumentPane == value) - return; - - m_isActiveDocumentPane = value; - if (DockState == DockState.Document) - RefreshChanges(); - OnIsActiveDocumentPaneChanged(EventArgs.Empty); - } - - public bool IsDockStateValid(DockState dockState) - { - foreach (IDockContent content in Contents) - if (!content.DockHandler.IsDockStateValid(dockState)) - return false; - - return true; - } - - public bool IsAutoHide - { - get { return DockHelper.IsDockStateAutoHide(DockState); } - } - - public AppearanceStyle Appearance - { - get { return (DockState == DockState.Document) ? AppearanceStyle.Document : AppearanceStyle.ToolWindow; } - } - - internal Rectangle DisplayingRectangle - { - get { return ClientRectangle; } - } - - public void Activate() - { - if (DockHelper.IsDockStateAutoHide(DockState) && DockPanel.ActiveAutoHideContent != ActiveContent) - DockPanel.ActiveAutoHideContent = ActiveContent; - else if (!IsActivated && ActiveContent != null) - ActiveContent.DockHandler.Activate(); - } - - internal void AddContent(IDockContent content) - { - if (Contents.Contains(content)) - return; - - Contents.Add(content); - } - - internal void Close() - { - Dispose(); - } - - public void CloseActiveContent() - { - CloseContent(ActiveContent); - } - - internal void CloseContent(IDockContent content) - { - DockPanel dockPanel = DockPanel; - dockPanel.SuspendLayout(true); - - if (content == null) - return; - - if (!content.DockHandler.CloseButton) - return; - - if (content.DockHandler.HideOnClose) - content.DockHandler.Hide(); - else - content.DockHandler.Close(); - - dockPanel.ResumeLayout(true, true); - } - - private HitTestResult GetHitTest(Point ptMouse) - { - Point ptMouseClient = PointToClient(ptMouse); - - Rectangle rectCaption = CaptionRectangle; - if (rectCaption.Contains(ptMouseClient)) - return new HitTestResult(HitTestArea.Caption, -1); - - Rectangle rectContent = ContentRectangle; - if (rectContent.Contains(ptMouseClient)) - return new HitTestResult(HitTestArea.Content, -1); - - Rectangle rectTabStrip = TabStripRectangle; - if (rectTabStrip.Contains(ptMouseClient)) - return new HitTestResult(HitTestArea.TabStrip, TabStripControl.HitTest(TabStripControl.PointToClient(ptMouse))); - - return new HitTestResult(HitTestArea.None, -1); - } - - private bool m_isHidden = true; - public bool IsHidden - { - get { return m_isHidden; } - } - private void SetIsHidden(bool value) - { - if (m_isHidden == value) - return; - - m_isHidden = value; - if (DockHelper.IsDockStateAutoHide(DockState)) - { - DockPanel.RefreshAutoHideStrip(); - DockPanel.PerformLayout(); - } - else if (NestedPanesContainer != null) - ((Control)NestedPanesContainer).PerformLayout(); - } - - protected override void OnLayout(LayoutEventArgs levent) - { - SetIsHidden(DisplayingContents.Count == 0); - if (!IsHidden) - { - CaptionControl.Bounds = CaptionRectangle; - TabStripControl.Bounds = TabStripRectangle; - - SetContentBounds(); - - foreach (IDockContent content in Contents) - { - if (DisplayingContents.Contains(content)) - if (content.DockHandler.FlagClipWindow && content.DockHandler.Form.Visible) - content.DockHandler.FlagClipWindow = false; - } - } - - base.OnLayout(levent); - } - - internal void SetContentBounds() - { - Rectangle rectContent = ContentRectangle; - if (DockState == DockState.Document && DockPanel.DocumentStyle == DocumentStyle.DockingMdi) - rectContent = DockPanel.RectangleToMdiClient(RectangleToScreen(rectContent)); - - Rectangle rectInactive = new Rectangle(-rectContent.Width, rectContent.Y, rectContent.Width, rectContent.Height); - foreach (IDockContent content in Contents) - if (content.DockHandler.Pane == this) - { - if (content == ActiveContent) - content.DockHandler.Form.Bounds = rectContent; - else - content.DockHandler.Form.Bounds = rectInactive; - } - } - - internal void RefreshChanges() - { - RefreshChanges(true); - } - - private void RefreshChanges(bool performLayout) - { - if (IsDisposed) - return; - - CaptionControl.RefreshChanges(); - TabStripControl.RefreshChanges(); - if (DockState == DockState.Float) - FloatWindow.RefreshChanges(); - if (DockHelper.IsDockStateAutoHide(DockState) && DockPanel != null) - { - DockPanel.RefreshAutoHideStrip(); - DockPanel.PerformLayout(); - } - - if (performLayout) - PerformLayout(); - } - - internal void RemoveContent(IDockContent content) - { - if (!Contents.Contains(content)) - return; - - Contents.Remove(content); - } - - public void SetContentIndex(IDockContent content, int index) - { - int oldIndex = Contents.IndexOf(content); - if (oldIndex == -1) - throw(new ArgumentException(Strings.DockPane_SetContentIndex_InvalidContent)); - - if (index < 0 || index > Contents.Count - 1) - if (index != -1) - throw(new ArgumentOutOfRangeException(Strings.DockPane_SetContentIndex_InvalidIndex)); - - if (oldIndex == index) - return; - if (oldIndex == Contents.Count - 1 && index == -1) - return; - - Contents.Remove(content); - if (index == -1) - Contents.Add(content); - else if (oldIndex < index) - Contents.AddAt(content, index - 1); - else - Contents.AddAt(content, index); - - RefreshChanges(); - } - - private void SetParent() - { - if (DockState == DockState.Unknown || DockState == DockState.Hidden) - { - SetParent(null); - Splitter.Parent = null; - } - else if (DockState == DockState.Float) - { - SetParent(FloatWindow); - Splitter.Parent = FloatWindow; - } - else if (DockHelper.IsDockStateAutoHide(DockState)) - { - SetParent(DockPanel.AutoHideControl); - Splitter.Parent = null; - } - else - { - SetParent(DockPanel.DockWindows[DockState]); - Splitter.Parent = Parent; - } - } - - private void SetParent(Control value) - { - if (Parent == value) - return; - - //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - // Workaround of .Net Framework bug: - // Change the parent of a control with focus may result in the first - // MDI child form get activated. - //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - IDockContent contentFocused = GetFocusedContent(); - if (contentFocused != null) - DockPanel.SaveFocus(); - - //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - Parent = value; - - //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - // Workaround of .Net Framework bug: - // Change the parent of a control with focus may result in the first - // MDI child form get activated. - //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - if (contentFocused != null) - contentFocused.DockHandler.Activate(); - //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - } - - public new void Show() - { - Activate(); - } - - internal void TestDrop(IDockDragSource dragSource, DockOutlineBase dockOutline) - { - if (!dragSource.CanDockTo(this)) - return; - - Point ptMouse = Control.MousePosition; - - HitTestResult hitTestResult = GetHitTest(ptMouse); - if (hitTestResult.HitArea == HitTestArea.Caption) - dockOutline.Show(this, -1); - else if (hitTestResult.HitArea == HitTestArea.TabStrip && hitTestResult.Index != -1) - dockOutline.Show(this, hitTestResult.Index); - } - - internal void ValidateActiveContent() - { - if (ActiveContent == null) - { - if (DisplayingContents.Count != 0) - ActiveContent = DisplayingContents[0]; - return; - } - - if (DisplayingContents.IndexOf(ActiveContent) >= 0) - return; - - IDockContent prevVisible = null; - for (int i=Contents.IndexOf(ActiveContent)-1; i>=0; i--) - if (Contents[i].DockHandler.DockState == DockState) - { - prevVisible = Contents[i]; - break; - } - - IDockContent nextVisible = null; - for (int i=Contents.IndexOf(ActiveContent)+1; i= 0); - DockPanel.ResumeLayout(true, true); - } - - private bool IsRefreshStateChangeSuspended - { - get { return m_countRefreshStateChange != 0; } - } - - private void ResumeRefreshStateChange(INestedPanesContainer oldContainer, DockState oldDockState) - { - ResumeRefreshStateChange(); - RefreshStateChange(oldContainer, oldDockState); - } - - private void RefreshStateChange(INestedPanesContainer oldContainer, DockState oldDockState) - { - lock (this) - { - if (IsRefreshStateChangeSuspended) - return; - - SuspendRefreshStateChange(); - } - - DockPanel.SuspendLayout(true); - - IDockContent contentFocused = GetFocusedContent(); - if (contentFocused != null) - DockPanel.SaveFocus(); - SetParent(); - - if (ActiveContent != null) - ActiveContent.DockHandler.SetDockState(ActiveContent.DockHandler.IsHidden, DockState, ActiveContent.DockHandler.Pane); - foreach (IDockContent content in Contents) - { - if (content.DockHandler.Pane == this) - content.DockHandler.SetDockState(content.DockHandler.IsHidden, DockState, content.DockHandler.Pane); - } - - if (oldContainer != null) - { - Control oldContainerControl = (Control)oldContainer; - if (oldContainer.DockState == oldDockState && !oldContainerControl.IsDisposed) - oldContainerControl.PerformLayout(); - } - if (DockHelper.IsDockStateAutoHide(oldDockState)) - DockPanel.RefreshActiveAutoHideContent(); - - if (NestedPanesContainer.DockState == DockState) - ((Control)NestedPanesContainer).PerformLayout(); - if (DockHelper.IsDockStateAutoHide(DockState)) - DockPanel.RefreshActiveAutoHideContent(); - - if (DockHelper.IsDockStateAutoHide(oldDockState) || - DockHelper.IsDockStateAutoHide(DockState)) - { - DockPanel.RefreshAutoHideStrip(); - DockPanel.PerformLayout(); - } - - ResumeRefreshStateChange(); - - if (contentFocused != null) - contentFocused.DockHandler.Activate(); - - DockPanel.ResumeLayout(true, true); - - if (oldDockState != DockState) - OnDockStateChanged(EventArgs.Empty); - } - - private IDockContent GetFocusedContent() - { - IDockContent contentFocused = null; - foreach (IDockContent content in Contents) - { - if (content.DockHandler.Form.ContainsFocus) - { - contentFocused = content; - break; - } - } - - return contentFocused; - } - - public DockPane DockTo(INestedPanesContainer container) - { - if (container == null) - throw new InvalidOperationException(Strings.DockPane_DockTo_NullContainer); - - DockAlignment alignment; - if (container.DockState == DockState.DockLeft || container.DockState == DockState.DockRight) - alignment = DockAlignment.Bottom; - else - alignment = DockAlignment.Right; - - return DockTo(container, container.NestedPanes.GetDefaultPreviousPane(this), alignment, 0.5); - } - - public DockPane DockTo(INestedPanesContainer container, DockPane previousPane, DockAlignment alignment, double proportion) - { - if (container == null) - throw new InvalidOperationException(Strings.DockPane_DockTo_NullContainer); - - if (container.IsFloat == this.IsFloat) - { - InternalAddToDockList(container, previousPane, alignment, proportion); - return this; - } - - IDockContent firstContent = GetFirstContent(container.DockState); - if (firstContent == null) - return null; - - DockPane pane; - DockPanel.DummyContent.DockPanel = DockPanel; - if (container.IsFloat) - pane = DockPanel.DockPaneFactory.CreateDockPane(DockPanel.DummyContent, (FloatWindow)container, true); - else - pane = DockPanel.DockPaneFactory.CreateDockPane(DockPanel.DummyContent, container.DockState, true); - - pane.DockTo(container, previousPane, alignment, proportion); - SetVisibleContentsToPane(pane); - DockPanel.DummyContent.DockPanel = null; - - return pane; - } - - private void SetVisibleContentsToPane(DockPane pane) - { - SetVisibleContentsToPane(pane, ActiveContent); - } - - private void SetVisibleContentsToPane(DockPane pane, IDockContent activeContent) - { - for (int i=0; i 0) - throw new InvalidOperationException(Strings.DockPane_DockTo_NullPrevPane); - - if (prevPane != null && !container.NestedPanes.Contains(prevPane)) - throw new InvalidOperationException(Strings.DockPane_DockTo_NoPrevPane); - - if (prevPane == this) - throw new InvalidOperationException(Strings.DockPane_DockTo_SelfPrevPane); - - INestedPanesContainer oldContainer = NestedPanesContainer; - DockState oldDockState = DockState; - container.NestedPanes.Add(this); - NestedDockingStatus.SetStatus(container.NestedPanes, prevPane, alignment, proportion); - - if (DockHelper.IsDockWindowState(DockState)) - m_dockState = container.DockState; - - RefreshStateChange(oldContainer, oldDockState); - } - - public void SetNestedDockingProportion(double proportion) - { - NestedDockingStatus.SetStatus(NestedDockingStatus.NestedPanes, NestedDockingStatus.PreviousPane, NestedDockingStatus.Alignment, proportion); - if (NestedPanesContainer != null) - ((Control)NestedPanesContainer).PerformLayout(); - } - - public DockPane Float() - { - DockPanel.SuspendLayout(true); - - IDockContent activeContent = ActiveContent; - - DockPane floatPane = GetFloatPaneFromContents(); - if (floatPane == null) - { - IDockContent firstContent = GetFirstContent(DockState.Float); - if (firstContent == null) - { - DockPanel.ResumeLayout(true, true); - return null; - } - floatPane = DockPanel.DockPaneFactory.CreateDockPane(firstContent,DockState.Float, true); - } - SetVisibleContentsToPane(floatPane, activeContent); - - DockPanel.ResumeLayout(true, true); - return floatPane; - } - - private DockPane GetFloatPaneFromContents() - { - DockPane floatPane = null; - for (int i=0; i=0; i--) - { - IDockContent content = DisplayingContents[i]; - if (content.DockHandler.CheckDockState(false) != DockState.Unknown) - content.DockHandler.IsFloat = false; - } - - DockPanel.ResumeLayout(true, true); - } - - [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] - protected override void WndProc(ref Message m) - { - if (m.Msg == (int)Win32.Msgs.WM_MOUSEACTIVATE) - Activate(); - - base.WndProc(ref m); - } - - #region IDockDragSource Members - - #region IDragSource Members - - Control IDragSource.DragControl - { - get { return this; } - } - - #endregion - - bool IDockDragSource.IsDockStateValid(DockState dockState) - { - return IsDockStateValid(dockState); - } - - bool IDockDragSource.CanDockTo(DockPane pane) - { - if (!IsDockStateValid(pane.DockState)) - return false; - - if (pane == this) - return false; - - return true; - } - - Rectangle IDockDragSource.BeginDrag(Point ptMouse) - { - Point location = PointToScreen(new Point(0, 0)); - Size size; - - DockPane floatPane = ActiveContent.DockHandler.FloatPane; - if (DockState == DockState.Float || floatPane == null || floatPane.FloatWindow.NestedPanes.Count != 1) - size = DockPanel.DefaultFloatWindowSize; - else - size = floatPane.FloatWindow.Size; - - if (ptMouse.X > location.X + size.Width) - location.X += ptMouse.X - (location.X + size.Width) + Measures.SplitterSize; - - return new Rectangle(location, size); - } - - public void FloatAt(Rectangle floatWindowBounds) - { - if (FloatWindow == null || FloatWindow.NestedPanes.Count != 1) - FloatWindow = DockPanel.FloatWindowFactory.CreateFloatWindow(DockPanel, this, floatWindowBounds); - else - FloatWindow.Bounds = floatWindowBounds; - - DockState = DockState.Float; - } - - public void DockTo(DockPane pane, DockStyle dockStyle, int contentIndex) - { - if (dockStyle == DockStyle.Fill) - { - IDockContent activeContent = ActiveContent; - for (int i = Contents.Count - 1; i >= 0; i--) - { - IDockContent c = Contents[i]; - if (c.DockHandler.DockState == DockState) - { - c.DockHandler.Pane = pane; - if (contentIndex != -1) - pane.SetContentIndex(c, contentIndex); - } - } - pane.ActiveContent = activeContent; - } - else - { - if (dockStyle == DockStyle.Left) - DockTo(pane.NestedPanesContainer, pane, DockAlignment.Left, 0.5); - else if (dockStyle == DockStyle.Right) - DockTo(pane.NestedPanesContainer, pane, DockAlignment.Right, 0.5); - else if (dockStyle == DockStyle.Top) - DockTo(pane.NestedPanesContainer, pane, DockAlignment.Top, 0.5); - else if (dockStyle == DockStyle.Bottom) - DockTo(pane.NestedPanesContainer, pane, DockAlignment.Bottom, 0.5); - - DockState = pane.DockState; - } - } - - public void DockTo(DockPanel panel, DockStyle dockStyle) - { - if (panel != DockPanel) - throw new ArgumentException(Strings.IDockDragSource_DockTo_InvalidPanel, "panel"); - - if (dockStyle == DockStyle.Top) - DockState = DockState.DockTop; - else if (dockStyle == DockStyle.Bottom) - DockState = DockState.DockBottom; - else if (dockStyle == DockStyle.Left) - DockState = DockState.DockLeft; - else if (dockStyle == DockStyle.Right) - DockState = DockState.DockRight; - else if (dockStyle == DockStyle.Fill) - DockState = DockState.Document; - } - - #endregion - } -} +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; +using System.Runtime.InteropServices; +using System.Security.Permissions; +using System.Diagnostics.CodeAnalysis; + +namespace LSLEditor.Docking +{ + [ToolboxItem(false)] + public partial class DockPane : UserControl, IDockDragSource + { + public enum AppearanceStyle + { + ToolWindow, + Document + } + + private enum HitTestArea + { + Caption, + TabStrip, + Content, + None + } + + private struct HitTestResult + { + public HitTestArea HitArea; + public int Index; + + public HitTestResult(HitTestArea hitTestArea, int index) + { + HitArea = hitTestArea; + Index = index; + } + } + + private DockPaneCaptionBase m_captionControl; + private DockPaneCaptionBase CaptionControl + { + get { return m_captionControl; } + } + + private DockPaneStripBase m_tabStripControl; + internal DockPaneStripBase TabStripControl + { + get { return m_tabStripControl; } + } + + internal protected DockPane(IDockContent content, DockState visibleState, bool show) + { + InternalConstruct(content, visibleState, false, Rectangle.Empty, null, DockAlignment.Right, 0.5, show); + } + + [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters", MessageId = "1#")] + internal protected DockPane(IDockContent content, FloatWindow floatWindow, bool show) + { + if (floatWindow == null) + throw new ArgumentNullException("floatWindow"); + + InternalConstruct(content, DockState.Float, false, Rectangle.Empty, floatWindow.NestedPanes.GetDefaultPreviousPane(this), DockAlignment.Right, 0.5, show); + } + + internal protected DockPane(IDockContent content, DockPane previousPane, DockAlignment alignment, double proportion, bool show) + { + if (previousPane == null) + throw(new ArgumentNullException("previousPane")); + InternalConstruct(content, previousPane.DockState, false, Rectangle.Empty, previousPane, alignment, proportion, show); + } + + [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters", MessageId = "1#")] + internal protected DockPane(IDockContent content, Rectangle floatWindowBounds, bool show) + { + InternalConstruct(content, DockState.Float, true, floatWindowBounds, null, DockAlignment.Right, 0.5, show); + } + + private void InternalConstruct(IDockContent content, DockState dockState, bool flagBounds, Rectangle floatWindowBounds, DockPane prevPane, DockAlignment alignment, double proportion, bool show) + { + if (dockState == DockState.Hidden || dockState == DockState.Unknown) + throw new ArgumentException(Strings.DockPane_SetDockState_InvalidState); + + if (content == null) + throw new ArgumentNullException(Strings.DockPane_Constructor_NullContent); + + if (content.DockHandler.DockPanel == null) + throw new ArgumentException(Strings.DockPane_Constructor_NullDockPanel); + + + SuspendLayout(); + SetStyle(ControlStyles.Selectable, false); + + m_isFloat = (dockState == DockState.Float); + + m_contents = new DockContentCollection(); + m_displayingContents = new DockContentCollection(this); + m_dockPanel = content.DockHandler.DockPanel; + m_dockPanel.AddPane(this); + + m_splitter = new SplitterControl(this); + + m_nestedDockingStatus = new NestedDockingStatus(this); + + m_captionControl = DockPanel.DockPaneCaptionFactory.CreateDockPaneCaption(this); + m_tabStripControl = DockPanel.DockPaneStripFactory.CreateDockPaneStrip(this); + Controls.AddRange(new Control[] { m_captionControl, m_tabStripControl }); + + DockPanel.SuspendLayout(true); + if (flagBounds) + FloatWindow = DockPanel.FloatWindowFactory.CreateFloatWindow(DockPanel, this, floatWindowBounds); + else if (prevPane != null) + DockTo(prevPane.NestedPanesContainer, prevPane, alignment, proportion); + + SetDockState(dockState); + if (show) + content.DockHandler.Pane = this; + else if (this.IsFloat) + content.DockHandler.FloatPane = this; + else + content.DockHandler.PanelPane = this; + + ResumeLayout(); + DockPanel.ResumeLayout(true, true); + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + m_dockState = DockState.Unknown; + + if (NestedPanesContainer != null) + NestedPanesContainer.NestedPanes.Remove(this); + + if (DockPanel != null) + { + DockPanel.RemovePane(this); + m_dockPanel = null; + } + + Splitter.Dispose(); + if (m_autoHidePane != null) + m_autoHidePane.Dispose(); + } + base.Dispose(disposing); + } + + private IDockContent m_activeContent = null; + public virtual IDockContent ActiveContent + { + get { return m_activeContent; } + set + { + if (ActiveContent == value) + return; + + if (value != null) + { + if (!DisplayingContents.Contains(value)) + throw(new InvalidOperationException(Strings.DockPane_ActiveContent_InvalidValue)); + } + else + { + if (DisplayingContents.Count != 0) + throw(new InvalidOperationException(Strings.DockPane_ActiveContent_InvalidValue)); + } + + IDockContent oldValue = m_activeContent; + + if (DockPanel.ActiveAutoHideContent == oldValue) + DockPanel.ActiveAutoHideContent = null; + + m_activeContent = value; + + if (DockPanel.DocumentStyle == DocumentStyle.DockingMdi && DockState == DockState.Document) + { + if (m_activeContent != null) + m_activeContent.DockHandler.Form.BringToFront(); + } + else + { + if (m_activeContent != null) + m_activeContent.DockHandler.SetVisible(); + if (oldValue != null && DisplayingContents.Contains(oldValue)) + oldValue.DockHandler.SetVisible(); + if (IsActivated && m_activeContent != null) + m_activeContent.DockHandler.Activate(); + } + + if (FloatWindow != null) + FloatWindow.SetText(); + + if (DockPanel.DocumentStyle == DocumentStyle.DockingMdi && + DockState == DockState.Document) + RefreshChanges(false); // delayed layout to reduce screen flicker + else + RefreshChanges(); + + if (m_activeContent != null) + TabStripControl.EnsureTabVisible(m_activeContent); + } + } + + private bool m_allowDockDragAndDrop = true; + public virtual bool AllowDockDragAndDrop + { + get { return m_allowDockDragAndDrop; } + set { m_allowDockDragAndDrop = value; } + } + + private IDisposable m_autoHidePane = null; + internal IDisposable AutoHidePane + { + get { return m_autoHidePane; } + set { m_autoHidePane = value; } + } + + private object m_autoHideTabs = null; + internal object AutoHideTabs + { + get { return m_autoHideTabs; } + set { m_autoHideTabs = value; } + } + + private object TabPageContextMenu + { + get + { + IDockContent content = ActiveContent; + + if (content == null) + return null; + + if (content.DockHandler.TabPageContextMenuStrip != null) + return content.DockHandler.TabPageContextMenuStrip; + else if (content.DockHandler.TabPageContextMenu != null) + return content.DockHandler.TabPageContextMenu; + else + return null; + } + } + + internal bool HasTabPageContextMenu + { + get { return TabPageContextMenu != null; } + } + + internal void ShowTabPageContextMenu(Control control, Point position) + { + object menu = TabPageContextMenu; + + if (menu == null) + return; + + ContextMenuStrip contextMenuStrip = menu as ContextMenuStrip; + if (contextMenuStrip != null) + { + contextMenuStrip.Show(control, position); + return; + } + + ContextMenu contextMenu = menu as ContextMenu; + if (contextMenu != null) + contextMenu.Show(this, position); + } + + private Rectangle CaptionRectangle + { + get + { + if (!HasCaption) + return Rectangle.Empty; + + Rectangle rectWindow = DisplayingRectangle; + int x, y, width; + x = rectWindow.X; + y = rectWindow.Y; + width = rectWindow.Width; + int height = CaptionControl.MeasureHeight(); + + return new Rectangle(x, y, width, height); + } + } + + internal Rectangle ContentRectangle + { + get + { + Rectangle rectWindow = DisplayingRectangle; + Rectangle rectCaption = CaptionRectangle; + Rectangle rectTabStrip = TabStripRectangle; + + int x = rectWindow.X; + + int y = rectWindow.Y + (rectCaption.IsEmpty ? 0 : rectCaption.Height); + if (DockState == DockState.Document && DockPanel.DocumentTabStripLocation == DocumentTabStripLocation.Top) + y += rectTabStrip.Height; + + int width = rectWindow.Width; + int height = rectWindow.Height - rectCaption.Height - rectTabStrip.Height; + + return new Rectangle(x, y, width, height); + } + } + + internal Rectangle TabStripRectangle + { + get + { + if (Appearance == AppearanceStyle.ToolWindow) + return TabStripRectangle_ToolWindow; + else + return TabStripRectangle_Document; + } + } + + private Rectangle TabStripRectangle_ToolWindow + { + get + { + if (DisplayingContents.Count <= 1 || IsAutoHide) + return Rectangle.Empty; + + Rectangle rectWindow = DisplayingRectangle; + + int width = rectWindow.Width; + int height = TabStripControl.MeasureHeight(); + int x = rectWindow.X; + int y = rectWindow.Bottom - height; + Rectangle rectCaption = CaptionRectangle; + if (rectCaption.Contains(x, y)) + y = rectCaption.Y + rectCaption.Height; + + return new Rectangle(x, y, width, height); + } + } + + private Rectangle TabStripRectangle_Document + { + get + { + if (DisplayingContents.Count == 0) + return Rectangle.Empty; + + if (DisplayingContents.Count == 1 && DockPanel.DocumentStyle == DocumentStyle.DockingSdi) + return Rectangle.Empty; + + Rectangle rectWindow = DisplayingRectangle; + int x = rectWindow.X; + int width = rectWindow.Width; + int height = TabStripControl.MeasureHeight(); + + int y = 0; + if (DockPanel.DocumentTabStripLocation == DocumentTabStripLocation.Bottom) + y = rectWindow.Height - height; + else + y = rectWindow.Y; + + return new Rectangle(x, y, width, height); + } + } + + public virtual string CaptionText + { + get { return ActiveContent == null ? string.Empty : ActiveContent.DockHandler.TabText; } + } + + private DockContentCollection m_contents; + public DockContentCollection Contents + { + get { return m_contents; } + } + + private DockContentCollection m_displayingContents; + public DockContentCollection DisplayingContents + { + get { return m_displayingContents; } + } + + private DockPanel m_dockPanel; + public DockPanel DockPanel + { + get { return m_dockPanel; } + } + + private bool HasCaption + { + get + { + if (DockState == DockState.Document || + DockState == DockState.Hidden || + DockState == DockState.Unknown || + (DockState == DockState.Float && FloatWindow.VisibleNestedPanes.Count <= 1)) + return false; + else + return true; + } + } + + private bool m_isActivated = false; + public bool IsActivated + { + get { return m_isActivated; } + } + internal void SetIsActivated(bool value) + { + if (m_isActivated == value) + return; + + m_isActivated = value; + if (DockState != DockState.Document) + RefreshChanges(false); + OnIsActivatedChanged(EventArgs.Empty); + } + + private bool m_isActiveDocumentPane = false; + public bool IsActiveDocumentPane + { + get { return m_isActiveDocumentPane; } + } + internal void SetIsActiveDocumentPane(bool value) + { + if (m_isActiveDocumentPane == value) + return; + + m_isActiveDocumentPane = value; + if (DockState == DockState.Document) + RefreshChanges(); + OnIsActiveDocumentPaneChanged(EventArgs.Empty); + } + + public bool IsDockStateValid(DockState dockState) + { + foreach (IDockContent content in Contents) + if (!content.DockHandler.IsDockStateValid(dockState)) + return false; + + return true; + } + + public bool IsAutoHide + { + get { return DockHelper.IsDockStateAutoHide(DockState); } + } + + public AppearanceStyle Appearance + { + get { return (DockState == DockState.Document) ? AppearanceStyle.Document : AppearanceStyle.ToolWindow; } + } + + internal Rectangle DisplayingRectangle + { + get { return ClientRectangle; } + } + + public void Activate() + { + if (DockHelper.IsDockStateAutoHide(DockState) && DockPanel.ActiveAutoHideContent != ActiveContent) + DockPanel.ActiveAutoHideContent = ActiveContent; + else if (!IsActivated && ActiveContent != null) + ActiveContent.DockHandler.Activate(); + } + + internal void AddContent(IDockContent content) + { + if (Contents.Contains(content)) + return; + + Contents.Add(content); + } + + internal void Close() + { + Dispose(); + } + + public void CloseActiveContent() + { + CloseContent(ActiveContent); + } + + internal void CloseContent(IDockContent content) + { + DockPanel dockPanel = DockPanel; + dockPanel.SuspendLayout(true); + + if (content == null) + return; + + if (!content.DockHandler.CloseButton) + return; + + if (content.DockHandler.HideOnClose) + content.DockHandler.Hide(); + else + content.DockHandler.Close(); + + dockPanel.ResumeLayout(true, true); + } + + private HitTestResult GetHitTest(Point ptMouse) + { + Point ptMouseClient = PointToClient(ptMouse); + + Rectangle rectCaption = CaptionRectangle; + if (rectCaption.Contains(ptMouseClient)) + return new HitTestResult(HitTestArea.Caption, -1); + + Rectangle rectContent = ContentRectangle; + if (rectContent.Contains(ptMouseClient)) + return new HitTestResult(HitTestArea.Content, -1); + + Rectangle rectTabStrip = TabStripRectangle; + if (rectTabStrip.Contains(ptMouseClient)) + return new HitTestResult(HitTestArea.TabStrip, TabStripControl.HitTest(TabStripControl.PointToClient(ptMouse))); + + return new HitTestResult(HitTestArea.None, -1); + } + + private bool m_isHidden = true; + public bool IsHidden + { + get { return m_isHidden; } + } + private void SetIsHidden(bool value) + { + if (m_isHidden == value) + return; + + m_isHidden = value; + if (DockHelper.IsDockStateAutoHide(DockState)) + { + DockPanel.RefreshAutoHideStrip(); + DockPanel.PerformLayout(); + } + else if (NestedPanesContainer != null) + ((Control)NestedPanesContainer).PerformLayout(); + } + + protected override void OnLayout(LayoutEventArgs levent) + { + SetIsHidden(DisplayingContents.Count == 0); + if (!IsHidden) + { + CaptionControl.Bounds = CaptionRectangle; + TabStripControl.Bounds = TabStripRectangle; + + SetContentBounds(); + + foreach (IDockContent content in Contents) + { + if (DisplayingContents.Contains(content)) + if (content.DockHandler.FlagClipWindow && content.DockHandler.Form.Visible) + content.DockHandler.FlagClipWindow = false; + } + } + + base.OnLayout(levent); + } + + internal void SetContentBounds() + { + Rectangle rectContent = ContentRectangle; + if (DockState == DockState.Document && DockPanel.DocumentStyle == DocumentStyle.DockingMdi) + rectContent = DockPanel.RectangleToMdiClient(RectangleToScreen(rectContent)); + + Rectangle rectInactive = new Rectangle(-rectContent.Width, rectContent.Y, rectContent.Width, rectContent.Height); + foreach (IDockContent content in Contents) + if (content.DockHandler.Pane == this) + { + if (content == ActiveContent) + content.DockHandler.Form.Bounds = rectContent; + else + content.DockHandler.Form.Bounds = rectInactive; + } + } + + internal void RefreshChanges() + { + RefreshChanges(true); + } + + private void RefreshChanges(bool performLayout) + { + if (IsDisposed) + return; + + CaptionControl.RefreshChanges(); + TabStripControl.RefreshChanges(); + if (DockState == DockState.Float) + FloatWindow.RefreshChanges(); + if (DockHelper.IsDockStateAutoHide(DockState) && DockPanel != null) + { + DockPanel.RefreshAutoHideStrip(); + DockPanel.PerformLayout(); + } + + if (performLayout) + PerformLayout(); + } + + internal void RemoveContent(IDockContent content) + { + if (!Contents.Contains(content)) + return; + + Contents.Remove(content); + } + + public void SetContentIndex(IDockContent content, int index) + { + int oldIndex = Contents.IndexOf(content); + if (oldIndex == -1) + throw(new ArgumentException(Strings.DockPane_SetContentIndex_InvalidContent)); + + if (index < 0 || index > Contents.Count - 1) + if (index != -1) + throw(new ArgumentOutOfRangeException(Strings.DockPane_SetContentIndex_InvalidIndex)); + + if (oldIndex == index) + return; + if (oldIndex == Contents.Count - 1 && index == -1) + return; + + Contents.Remove(content); + if (index == -1) + Contents.Add(content); + else if (oldIndex < index) + Contents.AddAt(content, index - 1); + else + Contents.AddAt(content, index); + + RefreshChanges(); + } + + private void SetParent() + { + if (DockState == DockState.Unknown || DockState == DockState.Hidden) + { + SetParent(null); + Splitter.Parent = null; + } + else if (DockState == DockState.Float) + { + SetParent(FloatWindow); + Splitter.Parent = FloatWindow; + } + else if (DockHelper.IsDockStateAutoHide(DockState)) + { + SetParent(DockPanel.AutoHideControl); + Splitter.Parent = null; + } + else + { + SetParent(DockPanel.DockWindows[DockState]); + Splitter.Parent = Parent; + } + } + + private void SetParent(Control value) + { + if (Parent == value) + return; + + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // Workaround of .Net Framework bug: + // Change the parent of a control with focus may result in the first + // MDI child form get activated. + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + IDockContent contentFocused = GetFocusedContent(); + if (contentFocused != null) + DockPanel.SaveFocus(); + + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + Parent = value; + + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // Workaround of .Net Framework bug: + // Change the parent of a control with focus may result in the first + // MDI child form get activated. + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + if (contentFocused != null) + contentFocused.DockHandler.Activate(); + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + } + + public new void Show() + { + Activate(); + } + + internal void TestDrop(IDockDragSource dragSource, DockOutlineBase dockOutline) + { + if (!dragSource.CanDockTo(this)) + return; + + Point ptMouse = Control.MousePosition; + + HitTestResult hitTestResult = GetHitTest(ptMouse); + if (hitTestResult.HitArea == HitTestArea.Caption) + dockOutline.Show(this, -1); + else if (hitTestResult.HitArea == HitTestArea.TabStrip && hitTestResult.Index != -1) + dockOutline.Show(this, hitTestResult.Index); + } + + internal void ValidateActiveContent() + { + if (ActiveContent == null) + { + if (DisplayingContents.Count != 0) + ActiveContent = DisplayingContents[0]; + return; + } + + if (DisplayingContents.IndexOf(ActiveContent) >= 0) + return; + + IDockContent prevVisible = null; + for (int i=Contents.IndexOf(ActiveContent)-1; i>=0; i--) + if (Contents[i].DockHandler.DockState == DockState) + { + prevVisible = Contents[i]; + break; + } + + IDockContent nextVisible = null; + for (int i=Contents.IndexOf(ActiveContent)+1; i= 0); + DockPanel.ResumeLayout(true, true); + } + + private bool IsRefreshStateChangeSuspended + { + get { return m_countRefreshStateChange != 0; } + } + + private void ResumeRefreshStateChange(INestedPanesContainer oldContainer, DockState oldDockState) + { + ResumeRefreshStateChange(); + RefreshStateChange(oldContainer, oldDockState); + } + + private void RefreshStateChange(INestedPanesContainer oldContainer, DockState oldDockState) + { + lock (this) + { + if (IsRefreshStateChangeSuspended) + return; + + SuspendRefreshStateChange(); + } + + DockPanel.SuspendLayout(true); + + IDockContent contentFocused = GetFocusedContent(); + if (contentFocused != null) + DockPanel.SaveFocus(); + SetParent(); + + if (ActiveContent != null) + ActiveContent.DockHandler.SetDockState(ActiveContent.DockHandler.IsHidden, DockState, ActiveContent.DockHandler.Pane); + foreach (IDockContent content in Contents) + { + if (content.DockHandler.Pane == this) + content.DockHandler.SetDockState(content.DockHandler.IsHidden, DockState, content.DockHandler.Pane); + } + + if (oldContainer != null) + { + Control oldContainerControl = (Control)oldContainer; + if (oldContainer.DockState == oldDockState && !oldContainerControl.IsDisposed) + oldContainerControl.PerformLayout(); + } + if (DockHelper.IsDockStateAutoHide(oldDockState)) + DockPanel.RefreshActiveAutoHideContent(); + + if (NestedPanesContainer.DockState == DockState) + ((Control)NestedPanesContainer).PerformLayout(); + if (DockHelper.IsDockStateAutoHide(DockState)) + DockPanel.RefreshActiveAutoHideContent(); + + if (DockHelper.IsDockStateAutoHide(oldDockState) || + DockHelper.IsDockStateAutoHide(DockState)) + { + DockPanel.RefreshAutoHideStrip(); + DockPanel.PerformLayout(); + } + + ResumeRefreshStateChange(); + + if (contentFocused != null) + contentFocused.DockHandler.Activate(); + + DockPanel.ResumeLayout(true, true); + + if (oldDockState != DockState) + OnDockStateChanged(EventArgs.Empty); + } + + private IDockContent GetFocusedContent() + { + IDockContent contentFocused = null; + foreach (IDockContent content in Contents) + { + if (content.DockHandler.Form.ContainsFocus) + { + contentFocused = content; + break; + } + } + + return contentFocused; + } + + public DockPane DockTo(INestedPanesContainer container) + { + if (container == null) + throw new InvalidOperationException(Strings.DockPane_DockTo_NullContainer); + + DockAlignment alignment; + if (container.DockState == DockState.DockLeft || container.DockState == DockState.DockRight) + alignment = DockAlignment.Bottom; + else + alignment = DockAlignment.Right; + + return DockTo(container, container.NestedPanes.GetDefaultPreviousPane(this), alignment, 0.5); + } + + public DockPane DockTo(INestedPanesContainer container, DockPane previousPane, DockAlignment alignment, double proportion) + { + if (container == null) + throw new InvalidOperationException(Strings.DockPane_DockTo_NullContainer); + + if (container.IsFloat == this.IsFloat) + { + InternalAddToDockList(container, previousPane, alignment, proportion); + return this; + } + + IDockContent firstContent = GetFirstContent(container.DockState); + if (firstContent == null) + return null; + + DockPane pane; + DockPanel.DummyContent.DockPanel = DockPanel; + if (container.IsFloat) + pane = DockPanel.DockPaneFactory.CreateDockPane(DockPanel.DummyContent, (FloatWindow)container, true); + else + pane = DockPanel.DockPaneFactory.CreateDockPane(DockPanel.DummyContent, container.DockState, true); + + pane.DockTo(container, previousPane, alignment, proportion); + SetVisibleContentsToPane(pane); + DockPanel.DummyContent.DockPanel = null; + + return pane; + } + + private void SetVisibleContentsToPane(DockPane pane) + { + SetVisibleContentsToPane(pane, ActiveContent); + } + + private void SetVisibleContentsToPane(DockPane pane, IDockContent activeContent) + { + for (int i=0; i 0) + throw new InvalidOperationException(Strings.DockPane_DockTo_NullPrevPane); + + if (prevPane != null && !container.NestedPanes.Contains(prevPane)) + throw new InvalidOperationException(Strings.DockPane_DockTo_NoPrevPane); + + if (prevPane == this) + throw new InvalidOperationException(Strings.DockPane_DockTo_SelfPrevPane); + + INestedPanesContainer oldContainer = NestedPanesContainer; + DockState oldDockState = DockState; + container.NestedPanes.Add(this); + NestedDockingStatus.SetStatus(container.NestedPanes, prevPane, alignment, proportion); + + if (DockHelper.IsDockWindowState(DockState)) + m_dockState = container.DockState; + + RefreshStateChange(oldContainer, oldDockState); + } + + public void SetNestedDockingProportion(double proportion) + { + NestedDockingStatus.SetStatus(NestedDockingStatus.NestedPanes, NestedDockingStatus.PreviousPane, NestedDockingStatus.Alignment, proportion); + if (NestedPanesContainer != null) + ((Control)NestedPanesContainer).PerformLayout(); + } + + public DockPane Float() + { + DockPanel.SuspendLayout(true); + + IDockContent activeContent = ActiveContent; + + DockPane floatPane = GetFloatPaneFromContents(); + if (floatPane == null) + { + IDockContent firstContent = GetFirstContent(DockState.Float); + if (firstContent == null) + { + DockPanel.ResumeLayout(true, true); + return null; + } + floatPane = DockPanel.DockPaneFactory.CreateDockPane(firstContent,DockState.Float, true); + } + SetVisibleContentsToPane(floatPane, activeContent); + + DockPanel.ResumeLayout(true, true); + return floatPane; + } + + private DockPane GetFloatPaneFromContents() + { + DockPane floatPane = null; + for (int i=0; i=0; i--) + { + IDockContent content = DisplayingContents[i]; + if (content.DockHandler.CheckDockState(false) != DockState.Unknown) + content.DockHandler.IsFloat = false; + } + + DockPanel.ResumeLayout(true, true); + } + + [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] + protected override void WndProc(ref Message m) + { + if (m.Msg == (int)Win32.Msgs.WM_MOUSEACTIVATE) + Activate(); + + base.WndProc(ref m); + } + + #region IDockDragSource Members + + #region IDragSource Members + + Control IDragSource.DragControl + { + get { return this; } + } + + #endregion + + bool IDockDragSource.IsDockStateValid(DockState dockState) + { + return IsDockStateValid(dockState); + } + + bool IDockDragSource.CanDockTo(DockPane pane) + { + if (!IsDockStateValid(pane.DockState)) + return false; + + if (pane == this) + return false; + + return true; + } + + Rectangle IDockDragSource.BeginDrag(Point ptMouse) + { + Point location = PointToScreen(new Point(0, 0)); + Size size; + + DockPane floatPane = ActiveContent.DockHandler.FloatPane; + if (DockState == DockState.Float || floatPane == null || floatPane.FloatWindow.NestedPanes.Count != 1) + size = DockPanel.DefaultFloatWindowSize; + else + size = floatPane.FloatWindow.Size; + + if (ptMouse.X > location.X + size.Width) + location.X += ptMouse.X - (location.X + size.Width) + Measures.SplitterSize; + + return new Rectangle(location, size); + } + + public void FloatAt(Rectangle floatWindowBounds) + { + if (FloatWindow == null || FloatWindow.NestedPanes.Count != 1) + FloatWindow = DockPanel.FloatWindowFactory.CreateFloatWindow(DockPanel, this, floatWindowBounds); + else + FloatWindow.Bounds = floatWindowBounds; + + DockState = DockState.Float; + } + + public void DockTo(DockPane pane, DockStyle dockStyle, int contentIndex) + { + if (dockStyle == DockStyle.Fill) + { + IDockContent activeContent = ActiveContent; + for (int i = Contents.Count - 1; i >= 0; i--) + { + IDockContent c = Contents[i]; + if (c.DockHandler.DockState == DockState) + { + c.DockHandler.Pane = pane; + if (contentIndex != -1) + pane.SetContentIndex(c, contentIndex); + } + } + pane.ActiveContent = activeContent; + } + else + { + if (dockStyle == DockStyle.Left) + DockTo(pane.NestedPanesContainer, pane, DockAlignment.Left, 0.5); + else if (dockStyle == DockStyle.Right) + DockTo(pane.NestedPanesContainer, pane, DockAlignment.Right, 0.5); + else if (dockStyle == DockStyle.Top) + DockTo(pane.NestedPanesContainer, pane, DockAlignment.Top, 0.5); + else if (dockStyle == DockStyle.Bottom) + DockTo(pane.NestedPanesContainer, pane, DockAlignment.Bottom, 0.5); + + DockState = pane.DockState; + } + } + + public void DockTo(DockPanel panel, DockStyle dockStyle) + { + if (panel != DockPanel) + throw new ArgumentException(Strings.IDockDragSource_DockTo_InvalidPanel, "panel"); + + if (dockStyle == DockStyle.Top) + DockState = DockState.DockTop; + else if (dockStyle == DockStyle.Bottom) + DockState = DockState.DockBottom; + else if (dockStyle == DockStyle.Left) + DockState = DockState.DockLeft; + else if (dockStyle == DockStyle.Right) + DockState = DockState.DockRight; + else if (dockStyle == DockStyle.Fill) + DockState = DockState.Document; + } + + #endregion + } +} diff --git a/trunk/Docking/DockPaneCaptionBase.cs b/source/Docking/DockPaneCaptionBase.cs similarity index 96% rename from trunk/Docking/DockPaneCaptionBase.cs rename to source/Docking/DockPaneCaptionBase.cs index 5c2c180..73d4c63 100644 --- a/trunk/Docking/DockPaneCaptionBase.cs +++ b/source/Docking/DockPaneCaptionBase.cs @@ -1,100 +1,100 @@ -using System; -using System.Windows.Forms; -using System.Drawing; -using System.Runtime.InteropServices; -using System.Security.Permissions; - -namespace LSLEditor.Docking -{ - public abstract class DockPaneCaptionBase : Control - { - protected internal DockPaneCaptionBase(DockPane pane) - { - m_dockPane = pane; - - SetStyle(ControlStyles.OptimizedDoubleBuffer | - ControlStyles.ResizeRedraw | - ControlStyles.UserPaint | - ControlStyles.AllPaintingInWmPaint, true); - SetStyle(ControlStyles.Selectable, false); - } - - private DockPane m_dockPane; - protected DockPane DockPane - { - get { return m_dockPane; } - } - - protected DockPane.AppearanceStyle Appearance - { - get { return DockPane.Appearance; } - } - - protected bool HasTabPageContextMenu - { - get { return DockPane.HasTabPageContextMenu; } - } - - protected void ShowTabPageContextMenu(Point position) - { - DockPane.ShowTabPageContextMenu(this, position); - } - - protected override void OnMouseUp(MouseEventArgs e) - { - base.OnMouseUp(e); - - if (e.Button == MouseButtons.Right) - ShowTabPageContextMenu(new Point(e.X, e.Y)); - } - - protected override void OnMouseDown(MouseEventArgs e) - { - base.OnMouseDown(e); - - if (e.Button == MouseButtons.Left && - DockPane.DockPanel.AllowEndUserDocking && - DockPane.AllowDockDragAndDrop && - !DockHelper.IsDockStateAutoHide(DockPane.DockState) && - DockPane.ActiveContent != null) - DockPane.DockPanel.BeginDrag(DockPane); - } - - [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] - protected override void WndProc(ref Message m) - { - if (m.Msg == (int)Win32.Msgs.WM_LBUTTONDBLCLK) - { - if (DockHelper.IsDockStateAutoHide(DockPane.DockState)) - { - DockPane.DockPanel.ActiveAutoHideContent = null; - return; - } - - if (DockPane.IsFloat) - DockPane.RestoreToPanel(); - else - DockPane.Float(); - } - base.WndProc(ref m); - } - - internal void RefreshChanges() - { - if (IsDisposed) - return; - - OnRefreshChanges(); - } - - protected virtual void OnRightToLeftLayoutChanged() - { - } - - protected virtual void OnRefreshChanges() - { - } - - protected internal abstract int MeasureHeight(); - } -} +using System; +using System.Windows.Forms; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Security.Permissions; + +namespace LSLEditor.Docking +{ + public abstract class DockPaneCaptionBase : Control + { + protected internal DockPaneCaptionBase(DockPane pane) + { + m_dockPane = pane; + + SetStyle(ControlStyles.OptimizedDoubleBuffer | + ControlStyles.ResizeRedraw | + ControlStyles.UserPaint | + ControlStyles.AllPaintingInWmPaint, true); + SetStyle(ControlStyles.Selectable, false); + } + + private DockPane m_dockPane; + protected DockPane DockPane + { + get { return m_dockPane; } + } + + protected DockPane.AppearanceStyle Appearance + { + get { return DockPane.Appearance; } + } + + protected bool HasTabPageContextMenu + { + get { return DockPane.HasTabPageContextMenu; } + } + + protected void ShowTabPageContextMenu(Point position) + { + DockPane.ShowTabPageContextMenu(this, position); + } + + protected override void OnMouseUp(MouseEventArgs e) + { + base.OnMouseUp(e); + + if (e.Button == MouseButtons.Right) + ShowTabPageContextMenu(new Point(e.X, e.Y)); + } + + protected override void OnMouseDown(MouseEventArgs e) + { + base.OnMouseDown(e); + + if (e.Button == MouseButtons.Left && + DockPane.DockPanel.AllowEndUserDocking && + DockPane.AllowDockDragAndDrop && + !DockHelper.IsDockStateAutoHide(DockPane.DockState) && + DockPane.ActiveContent != null) + DockPane.DockPanel.BeginDrag(DockPane); + } + + [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] + protected override void WndProc(ref Message m) + { + if (m.Msg == (int)Win32.Msgs.WM_LBUTTONDBLCLK) + { + if (DockHelper.IsDockStateAutoHide(DockPane.DockState)) + { + DockPane.DockPanel.ActiveAutoHideContent = null; + return; + } + + if (DockPane.IsFloat) + DockPane.RestoreToPanel(); + else + DockPane.Float(); + } + base.WndProc(ref m); + } + + internal void RefreshChanges() + { + if (IsDisposed) + return; + + OnRefreshChanges(); + } + + protected virtual void OnRightToLeftLayoutChanged() + { + } + + protected virtual void OnRefreshChanges() + { + } + + protected internal abstract int MeasureHeight(); + } +} diff --git a/trunk/Docking/DockPaneCollection.cs b/source/Docking/DockPaneCollection.cs similarity index 94% rename from trunk/Docking/DockPaneCollection.cs rename to source/Docking/DockPaneCollection.cs index 7896aec..84db71b 100644 --- a/trunk/Docking/DockPaneCollection.cs +++ b/source/Docking/DockPaneCollection.cs @@ -1,47 +1,47 @@ -using System; -using System.Collections.ObjectModel; -using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; - -namespace LSLEditor.Docking -{ - public class DockPaneCollection : ReadOnlyCollection - { - internal DockPaneCollection() - : base(new List()) - { - } - - internal int Add(DockPane pane) - { - if (Items.Contains(pane)) - return Items.IndexOf(pane); - - Items.Add(pane); - return Count - 1; - } - - internal void AddAt(DockPane pane, int index) - { - if (index < 0 || index > Items.Count - 1) - return; - - if (Contains(pane)) - return; - - Items.Insert(index, pane); - } - - internal void Dispose() - { - for (int i=Count - 1; i>=0; i--) - this[i].Close(); - } - - internal void Remove(DockPane pane) - { - Items.Remove(pane); - } - } -} +using System; +using System.Collections.ObjectModel; +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; + +namespace LSLEditor.Docking +{ + public class DockPaneCollection : ReadOnlyCollection + { + internal DockPaneCollection() + : base(new List()) + { + } + + internal int Add(DockPane pane) + { + if (Items.Contains(pane)) + return Items.IndexOf(pane); + + Items.Add(pane); + return Count - 1; + } + + internal void AddAt(DockPane pane, int index) + { + if (index < 0 || index > Items.Count - 1) + return; + + if (Contains(pane)) + return; + + Items.Insert(index, pane); + } + + internal void Dispose() + { + for (int i=Count - 1; i>=0; i--) + this[i].Close(); + } + + internal void Remove(DockPane pane) + { + Items.Remove(pane); + } + } +} diff --git a/trunk/Docking/DockPaneStripBase.cs b/source/Docking/DockPaneStripBase.cs similarity index 96% rename from trunk/Docking/DockPaneStripBase.cs rename to source/Docking/DockPaneStripBase.cs index 10b6368..db0524f 100644 --- a/trunk/Docking/DockPaneStripBase.cs +++ b/source/Docking/DockPaneStripBase.cs @@ -1,252 +1,252 @@ -using System; -using System.Windows.Forms; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Collections; -using System.Collections.Generic; -using System.Security.Permissions; -using System.Diagnostics.CodeAnalysis; - -namespace LSLEditor.Docking -{ - public abstract class DockPaneStripBase : Control - { - [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] - protected internal class Tab : IDisposable - { - private IDockContent m_content; - - public Tab(IDockContent content) - { - m_content = content; - } - - ~Tab() - { - Dispose(false); - } - - public IDockContent Content - { - get { return m_content; } - } - - public Form ContentForm - { - get { return m_content as Form; } - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - } - } - - [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] - protected sealed class TabCollection : IEnumerable - { - #region IEnumerable Members - IEnumerator IEnumerable.GetEnumerator() - { - for (int i = 0; i < Count; i++) - yield return this[i]; - } - - IEnumerator IEnumerable.GetEnumerator() - { - for (int i = 0; i < Count; i++) - yield return this[i]; - } - #endregion - - internal TabCollection(DockPane pane) - { - m_dockPane = pane; - } - - private DockPane m_dockPane; - public DockPane DockPane - { - get { return m_dockPane; } - } - - public int Count - { - get { return DockPane.DisplayingContents.Count; } - } - - public Tab this[int index] - { - get - { - IDockContent content = DockPane.DisplayingContents[index]; - if (content == null) - throw (new ArgumentOutOfRangeException("index")); - return content.DockHandler.GetTab(DockPane.TabStripControl); - } - } - - public bool Contains(Tab tab) - { - return (IndexOf(tab) != -1); - } - - public bool Contains(IDockContent content) - { - return (IndexOf(content) != -1); - } - - public int IndexOf(Tab tab) - { - if (tab == null) - return -1; - - return DockPane.DisplayingContents.IndexOf(tab.Content); - } - - public int IndexOf(IDockContent content) - { - return DockPane.DisplayingContents.IndexOf(content); - } - } - - protected DockPaneStripBase(DockPane pane) - { - m_dockPane = pane; - - SetStyle(ControlStyles.OptimizedDoubleBuffer, true); - SetStyle(ControlStyles.Selectable, false); - AllowDrop = true; - } - - private DockPane m_dockPane; - protected DockPane DockPane - { - get { return m_dockPane; } - } - - protected DockPane.AppearanceStyle Appearance - { - get { return DockPane.Appearance; } - } - - private TabCollection m_tabs = null; - protected TabCollection Tabs - { - get - { - if (m_tabs == null) - m_tabs = new TabCollection(DockPane); - - return m_tabs; - } - } - - internal void RefreshChanges() - { - if (IsDisposed) - return; - - OnRefreshChanges(); - } - - protected virtual void OnRefreshChanges() - { - } - - protected internal abstract int MeasureHeight(); - - protected internal abstract void EnsureTabVisible(IDockContent content); - - protected int HitTest() - { - return HitTest(PointToClient(Control.MousePosition)); - } - - protected internal abstract int HitTest(Point point); - - protected internal abstract GraphicsPath GetOutline(int index); - - protected internal virtual Tab CreateTab(IDockContent content) - { - return new Tab(content); - } - - protected override void OnMouseDown(MouseEventArgs e) - { - base.OnMouseDown(e); - - int index = HitTest(); - if (index != -1) - { - IDockContent content = Tabs[index].Content; - if (DockPane.ActiveContent != content) - DockPane.ActiveContent = content; - } - - if (e.Button == MouseButtons.Left) - { - if (DockPane.DockPanel.AllowEndUserDocking && DockPane.AllowDockDragAndDrop && DockPane.ActiveContent.DockHandler.AllowEndUserDocking) - DockPane.DockPanel.BeginDrag(DockPane.ActiveContent.DockHandler); - } - } - - protected bool HasTabPageContextMenu - { - get { return DockPane.HasTabPageContextMenu; } - } - - protected void ShowTabPageContextMenu(Point position) - { - DockPane.ShowTabPageContextMenu(this, position); - } - - protected override void OnMouseUp(MouseEventArgs e) - { - base.OnMouseUp(e); - - if (e.Button == MouseButtons.Right) - ShowTabPageContextMenu(new Point(e.X, e.Y)); - } - - [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] - protected override void WndProc(ref Message m) - { - if (m.Msg == (int)Win32.Msgs.WM_LBUTTONDBLCLK) - { - base.WndProc(ref m); - - int index = HitTest(); - if (DockPane.DockPanel.AllowEndUserDocking && index != -1) - { - IDockContent content = Tabs[index].Content; - if (content.DockHandler.CheckDockState(!content.DockHandler.IsFloat) != DockState.Unknown) - content.DockHandler.IsFloat = !content.DockHandler.IsFloat; - } - - return; - } - - base.WndProc(ref m); - return; - } - - protected override void OnDragOver(DragEventArgs drgevent) - { - base.OnDragOver(drgevent); - - int index = HitTest(); - if (index != -1) - { - IDockContent content = Tabs[index].Content; - if (DockPane.ActiveContent != content) - DockPane.ActiveContent = content; - } - } - } -} +using System; +using System.Windows.Forms; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Collections; +using System.Collections.Generic; +using System.Security.Permissions; +using System.Diagnostics.CodeAnalysis; + +namespace LSLEditor.Docking +{ + public abstract class DockPaneStripBase : Control + { + [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] + protected internal class Tab : IDisposable + { + private IDockContent m_content; + + public Tab(IDockContent content) + { + m_content = content; + } + + ~Tab() + { + Dispose(false); + } + + public IDockContent Content + { + get { return m_content; } + } + + public Form ContentForm + { + get { return m_content as Form; } + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + } + } + + [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] + protected sealed class TabCollection : IEnumerable + { + #region IEnumerable Members + IEnumerator IEnumerable.GetEnumerator() + { + for (int i = 0; i < Count; i++) + yield return this[i]; + } + + IEnumerator IEnumerable.GetEnumerator() + { + for (int i = 0; i < Count; i++) + yield return this[i]; + } + #endregion + + internal TabCollection(DockPane pane) + { + m_dockPane = pane; + } + + private DockPane m_dockPane; + public DockPane DockPane + { + get { return m_dockPane; } + } + + public int Count + { + get { return DockPane.DisplayingContents.Count; } + } + + public Tab this[int index] + { + get + { + IDockContent content = DockPane.DisplayingContents[index]; + if (content == null) + throw (new ArgumentOutOfRangeException("index")); + return content.DockHandler.GetTab(DockPane.TabStripControl); + } + } + + public bool Contains(Tab tab) + { + return (IndexOf(tab) != -1); + } + + public bool Contains(IDockContent content) + { + return (IndexOf(content) != -1); + } + + public int IndexOf(Tab tab) + { + if (tab == null) + return -1; + + return DockPane.DisplayingContents.IndexOf(tab.Content); + } + + public int IndexOf(IDockContent content) + { + return DockPane.DisplayingContents.IndexOf(content); + } + } + + protected DockPaneStripBase(DockPane pane) + { + m_dockPane = pane; + + SetStyle(ControlStyles.OptimizedDoubleBuffer, true); + SetStyle(ControlStyles.Selectable, false); + AllowDrop = true; + } + + private DockPane m_dockPane; + protected DockPane DockPane + { + get { return m_dockPane; } + } + + protected DockPane.AppearanceStyle Appearance + { + get { return DockPane.Appearance; } + } + + private TabCollection m_tabs = null; + protected TabCollection Tabs + { + get + { + if (m_tabs == null) + m_tabs = new TabCollection(DockPane); + + return m_tabs; + } + } + + internal void RefreshChanges() + { + if (IsDisposed) + return; + + OnRefreshChanges(); + } + + protected virtual void OnRefreshChanges() + { + } + + protected internal abstract int MeasureHeight(); + + protected internal abstract void EnsureTabVisible(IDockContent content); + + protected int HitTest() + { + return HitTest(PointToClient(Control.MousePosition)); + } + + protected internal abstract int HitTest(Point point); + + protected internal abstract GraphicsPath GetOutline(int index); + + protected internal virtual Tab CreateTab(IDockContent content) + { + return new Tab(content); + } + + protected override void OnMouseDown(MouseEventArgs e) + { + base.OnMouseDown(e); + + int index = HitTest(); + if (index != -1) + { + IDockContent content = Tabs[index].Content; + if (DockPane.ActiveContent != content) + DockPane.ActiveContent = content; + } + + if (e.Button == MouseButtons.Left) + { + if (DockPane.DockPanel.AllowEndUserDocking && DockPane.AllowDockDragAndDrop && DockPane.ActiveContent.DockHandler.AllowEndUserDocking) + DockPane.DockPanel.BeginDrag(DockPane.ActiveContent.DockHandler); + } + } + + protected bool HasTabPageContextMenu + { + get { return DockPane.HasTabPageContextMenu; } + } + + protected void ShowTabPageContextMenu(Point position) + { + DockPane.ShowTabPageContextMenu(this, position); + } + + protected override void OnMouseUp(MouseEventArgs e) + { + base.OnMouseUp(e); + + if (e.Button == MouseButtons.Right) + ShowTabPageContextMenu(new Point(e.X, e.Y)); + } + + [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] + protected override void WndProc(ref Message m) + { + if (m.Msg == (int)Win32.Msgs.WM_LBUTTONDBLCLK) + { + base.WndProc(ref m); + + int index = HitTest(); + if (DockPane.DockPanel.AllowEndUserDocking && index != -1) + { + IDockContent content = Tabs[index].Content; + if (content.DockHandler.CheckDockState(!content.DockHandler.IsFloat) != DockState.Unknown) + content.DockHandler.IsFloat = !content.DockHandler.IsFloat; + } + + return; + } + + base.WndProc(ref m); + return; + } + + protected override void OnDragOver(DragEventArgs drgevent) + { + base.OnDragOver(drgevent); + + int index = HitTest(); + if (index != -1) + { + IDockContent content = Tabs[index].Content; + if (DockPane.ActiveContent != content) + DockPane.ActiveContent = content; + } + } + } +} diff --git a/trunk/Docking/DockPanel.AutoHideWindow.cs b/source/Docking/DockPanel.AutoHideWindow.cs similarity index 97% rename from trunk/Docking/DockPanel.AutoHideWindow.cs rename to source/Docking/DockPanel.AutoHideWindow.cs index 062768a..99b950e 100644 --- a/trunk/Docking/DockPanel.AutoHideWindow.cs +++ b/source/Docking/DockPanel.AutoHideWindow.cs @@ -1,612 +1,612 @@ -using System; -using System.Windows.Forms; -using System.Drawing; -using System.Runtime.InteropServices; - -namespace LSLEditor.Docking -{ - partial class DockPanel - { - private class AutoHideWindowControl : Panel, ISplitterDragSource - { - private class SplitterControl : SplitterBase - { - public SplitterControl(AutoHideWindowControl autoHideWindow) - { - m_autoHideWindow = autoHideWindow; - } - - private AutoHideWindowControl m_autoHideWindow; - private AutoHideWindowControl AutoHideWindow - { - get { return m_autoHideWindow; } - } - - protected override int SplitterSize - { - get { return Measures.SplitterSize; } - } - - protected override void StartDrag() - { - AutoHideWindow.DockPanel.BeginDrag(AutoHideWindow, AutoHideWindow.RectangleToScreen(Bounds)); - } - } - - #region consts - private const int ANIMATE_TIME = 100; // in mini-seconds - #endregion - - private Timer m_timerMouseTrack; - private SplitterControl m_splitter; - - public AutoHideWindowControl(DockPanel dockPanel) - { - m_dockPanel = dockPanel; - - m_timerMouseTrack = new Timer(); - m_timerMouseTrack.Tick += new EventHandler(TimerMouseTrack_Tick); - - Visible = false; - m_splitter = new SplitterControl(this); - Controls.Add(m_splitter); - } - - protected override void Dispose(bool disposing) - { - if (disposing) - { - m_timerMouseTrack.Dispose(); - } - base.Dispose(disposing); - } - - private DockPanel m_dockPanel = null; - public DockPanel DockPanel - { - get { return m_dockPanel; } - } - - private DockPane m_activePane = null; - public DockPane ActivePane - { - get { return m_activePane; } - } - private void SetActivePane() - { - DockPane value = (ActiveContent == null ? null : ActiveContent.DockHandler.Pane); - - if (value == m_activePane) - return; - - m_activePane = value; - } - - private IDockContent m_activeContent = null; - public IDockContent ActiveContent - { - get { return m_activeContent; } - set - { - if (value == m_activeContent) - return; - - if (value != null) - { - if (!DockHelper.IsDockStateAutoHide(value.DockHandler.DockState) || value.DockHandler.DockPanel != DockPanel) - throw (new InvalidOperationException(Strings.DockPanel_ActiveAutoHideContent_InvalidValue)); - } - - DockPanel.SuspendLayout(); - - if (m_activeContent != null) - { - if (m_activeContent.DockHandler.Form.ContainsFocus) - DockPanel.ContentFocusManager.GiveUpFocus(m_activeContent); - AnimateWindow(false); - } - - m_activeContent = value; - SetActivePane(); - if (ActivePane != null) - ActivePane.ActiveContent = m_activeContent; - - if (m_activeContent != null) - AnimateWindow(true); - - DockPanel.ResumeLayout(); - DockPanel.RefreshAutoHideStrip(); - - SetTimerMouseTrack(); - } - } - - public DockState DockState - { - get { return ActiveContent == null ? DockState.Unknown : ActiveContent.DockHandler.DockState; } - } - - private bool m_flagAnimate = true; - private bool FlagAnimate - { - get { return m_flagAnimate; } - set { m_flagAnimate = value; } - } - - private bool m_flagDragging = false; - internal bool FlagDragging - { - get { return m_flagDragging; } - set - { - if (m_flagDragging == value) - return; - - m_flagDragging = value; - SetTimerMouseTrack(); - } - } - - private void AnimateWindow(bool show) - { - if (!FlagAnimate && Visible != show) - { - Visible = show; - return; - } - - Parent.SuspendLayout(); - - Rectangle rectSource = GetRectangle(!show); - Rectangle rectTarget = GetRectangle(show); - int dxLoc, dyLoc; - int dWidth, dHeight; - dxLoc = dyLoc = dWidth = dHeight = 0; - if (DockState == DockState.DockTopAutoHide) - dHeight = show ? 1 : -1; - else if (DockState == DockState.DockLeftAutoHide) - dWidth = show ? 1 : -1; - else if (DockState == DockState.DockRightAutoHide) - { - dxLoc = show ? -1 : 1; - dWidth = show ? 1 : -1; - } - else if (DockState == DockState.DockBottomAutoHide) - { - dyLoc = (show ? -1 : 1); - dHeight = (show ? 1 : -1); - } - - if (show) - { - Bounds = DockPanel.GetAutoHideWindowBounds(new Rectangle(-rectTarget.Width, -rectTarget.Height, rectTarget.Width, rectTarget.Height)); - if (Visible == false) - Visible = true; - PerformLayout(); - } - - SuspendLayout(); - - LayoutAnimateWindow(rectSource); - if (Visible == false) - Visible = true; - - int speedFactor = 1; - int totalPixels = (rectSource.Width != rectTarget.Width) ? - Math.Abs(rectSource.Width - rectTarget.Width) : - Math.Abs(rectSource.Height - rectTarget.Height); - int remainPixels = totalPixels; - DateTime startingTime = DateTime.Now; - while (rectSource != rectTarget) - { - DateTime startPerMove = DateTime.Now; - - rectSource.X += dxLoc * speedFactor; - rectSource.Y += dyLoc * speedFactor; - rectSource.Width += dWidth * speedFactor; - rectSource.Height += dHeight * speedFactor; - if (Math.Sign(rectTarget.X - rectSource.X) != Math.Sign(dxLoc)) - rectSource.X = rectTarget.X; - if (Math.Sign(rectTarget.Y - rectSource.Y) != Math.Sign(dyLoc)) - rectSource.Y = rectTarget.Y; - if (Math.Sign(rectTarget.Width - rectSource.Width) != Math.Sign(dWidth)) - rectSource.Width = rectTarget.Width; - if (Math.Sign(rectTarget.Height - rectSource.Height) != Math.Sign(dHeight)) - rectSource.Height = rectTarget.Height; - - LayoutAnimateWindow(rectSource); - if (Parent != null) - Parent.Update(); - - remainPixels -= speedFactor; - - while (true) - { - TimeSpan time = new TimeSpan(0, 0, 0, 0, ANIMATE_TIME); - TimeSpan elapsedPerMove = DateTime.Now - startPerMove; - TimeSpan elapsedTime = DateTime.Now - startingTime; - if (((int)((time - elapsedTime).TotalMilliseconds)) <= 0) - { - speedFactor = remainPixels; - break; - } - else - speedFactor = remainPixels * (int)elapsedPerMove.TotalMilliseconds / (int)((time - elapsedTime).TotalMilliseconds); - if (speedFactor >= 1) - break; - } - } - ResumeLayout(); - Parent.ResumeLayout(); - } - - private void LayoutAnimateWindow(Rectangle rect) - { - Bounds = DockPanel.GetAutoHideWindowBounds(rect); - - Rectangle rectClient = ClientRectangle; - - if (DockState == DockState.DockLeftAutoHide) - ActivePane.Location = new Point(rectClient.Right - 2 - Measures.SplitterSize - ActivePane.Width, ActivePane.Location.Y); - else if (DockState == DockState.DockTopAutoHide) - ActivePane.Location = new Point(ActivePane.Location.X, rectClient.Bottom - 2 - Measures.SplitterSize - ActivePane.Height); - } - - private Rectangle GetRectangle(bool show) - { - if (DockState == DockState.Unknown) - return Rectangle.Empty; - - Rectangle rect = DockPanel.AutoHideWindowRectangle; - - if (show) - return rect; - - if (DockState == DockState.DockLeftAutoHide) - rect.Width = 0; - else if (DockState == DockState.DockRightAutoHide) - { - rect.X += rect.Width; - rect.Width = 0; - } - else if (DockState == DockState.DockTopAutoHide) - rect.Height = 0; - else - { - rect.Y += rect.Height; - rect.Height = 0; - } - - return rect; - } - - private void SetTimerMouseTrack() - { - if (ActivePane == null || ActivePane.IsActivated || FlagDragging) - { - m_timerMouseTrack.Enabled = false; - return; - } - - // start the timer - int hovertime = SystemInformation.MouseHoverTime ; - - // assign a default value 400 in case of setting Timer.Interval invalid value exception - if (hovertime <= 0) - hovertime = 400; - - m_timerMouseTrack.Interval = 2 * (int)hovertime; - m_timerMouseTrack.Enabled = true; - } - - protected virtual Rectangle DisplayingRectangle - { - get - { - Rectangle rect = ClientRectangle; - - // exclude the border and the splitter - if (DockState == DockState.DockBottomAutoHide) - { - rect.Y += 2 + Measures.SplitterSize; - rect.Height -= 2 + Measures.SplitterSize; - } - else if (DockState == DockState.DockRightAutoHide) - { - rect.X += 2 + Measures.SplitterSize; - rect.Width -= 2 + Measures.SplitterSize; - } - else if (DockState == DockState.DockTopAutoHide) - rect.Height -= 2 + Measures.SplitterSize; - else if (DockState == DockState.DockLeftAutoHide) - rect.Width -= 2 + Measures.SplitterSize; - - return rect; - } - } - - protected override void OnLayout(LayoutEventArgs levent) - { - DockPadding.All = 0; - if (DockState == DockState.DockLeftAutoHide) - { - DockPadding.Right = 2; - m_splitter.Dock = DockStyle.Right; - } - else if (DockState == DockState.DockRightAutoHide) - { - DockPadding.Left = 2; - m_splitter.Dock = DockStyle.Left; - } - else if (DockState == DockState.DockTopAutoHide) - { - DockPadding.Bottom = 2; - m_splitter.Dock = DockStyle.Bottom; - } - else if (DockState == DockState.DockBottomAutoHide) - { - DockPadding.Top = 2; - m_splitter.Dock = DockStyle.Top; - } - - Rectangle rectDisplaying = DisplayingRectangle; - Rectangle rectHidden = new Rectangle(-rectDisplaying.Width, rectDisplaying.Y, rectDisplaying.Width, rectDisplaying.Height); - foreach (Control c in Controls) - { - DockPane pane = c as DockPane; - if (pane == null) - continue; - - - if (pane == ActivePane) - pane.Bounds = rectDisplaying; - else - pane.Bounds = rectHidden; - } - - base.OnLayout(levent); - } - - protected override void OnPaint(PaintEventArgs e) - { - // Draw the border - Graphics g = e.Graphics; - - if (DockState == DockState.DockBottomAutoHide) - g.DrawLine(SystemPens.ControlLightLight, 0, 1, ClientRectangle.Right, 1); - else if (DockState == DockState.DockRightAutoHide) - g.DrawLine(SystemPens.ControlLightLight, 1, 0, 1, ClientRectangle.Bottom); - else if (DockState == DockState.DockTopAutoHide) - { - g.DrawLine(SystemPens.ControlDark, 0, ClientRectangle.Height - 2, ClientRectangle.Right, ClientRectangle.Height - 2); - g.DrawLine(SystemPens.ControlDarkDark, 0, ClientRectangle.Height - 1, ClientRectangle.Right, ClientRectangle.Height - 1); - } - else if (DockState == DockState.DockLeftAutoHide) - { - g.DrawLine(SystemPens.ControlDark, ClientRectangle.Width - 2, 0, ClientRectangle.Width - 2, ClientRectangle.Bottom); - g.DrawLine(SystemPens.ControlDarkDark, ClientRectangle.Width - 1, 0, ClientRectangle.Width - 1, ClientRectangle.Bottom); - } - - base.OnPaint(e); - } - - public void RefreshActiveContent() - { - if (ActiveContent == null) - return; - - if (!DockHelper.IsDockStateAutoHide(ActiveContent.DockHandler.DockState)) - { - FlagAnimate = false; - ActiveContent = null; - FlagAnimate = true; - } - } - - public void RefreshActivePane() - { - SetTimerMouseTrack(); - } - - private void TimerMouseTrack_Tick(object sender, EventArgs e) - { - if (IsDisposed) - return; - - if (ActivePane == null || ActivePane.IsActivated) - { - m_timerMouseTrack.Enabled = false; - return; - } - - DockPane pane = ActivePane; - Point ptMouseInAutoHideWindow = PointToClient(Control.MousePosition); - Point ptMouseInDockPanel = DockPanel.PointToClient(Control.MousePosition); - - Rectangle rectTabStrip = DockPanel.GetTabStripRectangle(pane.DockState); - - if (!ClientRectangle.Contains(ptMouseInAutoHideWindow) && !rectTabStrip.Contains(ptMouseInDockPanel)) - { - ActiveContent = null; - m_timerMouseTrack.Enabled = false; - } - } - - #region ISplitterDragSource Members - - void ISplitterDragSource.BeginDrag(Rectangle rectSplitter) - { - FlagDragging = true; - } - - void ISplitterDragSource.EndDrag() - { - FlagDragging = false; - } - - bool ISplitterDragSource.IsVertical - { - get { return (DockState == DockState.DockLeftAutoHide || DockState == DockState.DockRightAutoHide); } - } - - Rectangle ISplitterDragSource.DragLimitBounds - { - get - { - Rectangle rectLimit = DockPanel.DockArea; - - if ((this as ISplitterDragSource).IsVertical) - { - rectLimit.X += MeasurePane.MinSize; - rectLimit.Width -= 2 * MeasurePane.MinSize; - } - else - { - rectLimit.Y += MeasurePane.MinSize; - rectLimit.Height -= 2 * MeasurePane.MinSize; - } - - return DockPanel.RectangleToScreen(rectLimit); - } - } - - void ISplitterDragSource.MoveSplitter(int offset) - { - Rectangle rectDockArea = DockPanel.DockArea; - IDockContent content = ActiveContent; - if (DockState == DockState.DockLeftAutoHide && rectDockArea.Width > 0) - { - if (content.DockHandler.AutoHidePortion < 1) - content.DockHandler.AutoHidePortion += ((double)offset) / (double)rectDockArea.Width; - else - content.DockHandler.AutoHidePortion = Width + offset; - } - else if (DockState == DockState.DockRightAutoHide && rectDockArea.Width > 0) - { - if (content.DockHandler.AutoHidePortion < 1) - content.DockHandler.AutoHidePortion -= ((double)offset) / (double)rectDockArea.Width; - else - content.DockHandler.AutoHidePortion = Width - offset; - } - else if (DockState == DockState.DockBottomAutoHide && rectDockArea.Height > 0) - { - if (content.DockHandler.AutoHidePortion < 1) - content.DockHandler.AutoHidePortion -= ((double)offset) / (double)rectDockArea.Height; - else - content.DockHandler.AutoHidePortion = Height - offset; - } - else if (DockState == DockState.DockTopAutoHide && rectDockArea.Height > 0) - { - if (content.DockHandler.AutoHidePortion < 1) - content.DockHandler.AutoHidePortion += ((double)offset) / (double)rectDockArea.Height; - else - content.DockHandler.AutoHidePortion = Height + offset; - } - } - - #region IDragSource Members - - Control IDragSource.DragControl - { - get { return this; } - } - - #endregion - - #endregion - } - - private AutoHideWindowControl AutoHideWindow - { - get { return m_autoHideWindow; } - } - - internal Control AutoHideControl - { - get { return m_autoHideWindow; } - } - - internal void RefreshActiveAutoHideContent() - { - AutoHideWindow.RefreshActiveContent(); - } - - internal Rectangle AutoHideWindowRectangle - { - get - { - DockState state = AutoHideWindow.DockState; - Rectangle rectDockArea = DockArea; - if (ActiveAutoHideContent == null) - return Rectangle.Empty; - - if (Parent == null) - return Rectangle.Empty; - - Rectangle rect = Rectangle.Empty; - double autoHideSize = ActiveAutoHideContent.DockHandler.AutoHidePortion; - if (state == DockState.DockLeftAutoHide) - { - if (autoHideSize < 1) - autoHideSize = rectDockArea.Width * autoHideSize; - if (autoHideSize > rectDockArea.Width - MeasurePane.MinSize) - autoHideSize = rectDockArea.Width - MeasurePane.MinSize; - rect.X = rectDockArea.X; - rect.Y = rectDockArea.Y; - rect.Width = (int)autoHideSize; - rect.Height = rectDockArea.Height; - } - else if (state == DockState.DockRightAutoHide) - { - if (autoHideSize < 1) - autoHideSize = rectDockArea.Width * autoHideSize; - if (autoHideSize > rectDockArea.Width - MeasurePane.MinSize) - autoHideSize = rectDockArea.Width - MeasurePane.MinSize; - rect.X = rectDockArea.X + rectDockArea.Width - (int)autoHideSize; - rect.Y = rectDockArea.Y; - rect.Width = (int)autoHideSize; - rect.Height = rectDockArea.Height; - } - else if (state == DockState.DockTopAutoHide) - { - if (autoHideSize < 1) - autoHideSize = rectDockArea.Height * autoHideSize; - if (autoHideSize > rectDockArea.Height - MeasurePane.MinSize) - autoHideSize = rectDockArea.Height - MeasurePane.MinSize; - rect.X = rectDockArea.X; - rect.Y = rectDockArea.Y; - rect.Width = rectDockArea.Width; - rect.Height = (int)autoHideSize; - } - else if (state == DockState.DockBottomAutoHide) - { - if (autoHideSize < 1) - autoHideSize = rectDockArea.Height * autoHideSize; - if (autoHideSize > rectDockArea.Height - MeasurePane.MinSize) - autoHideSize = rectDockArea.Height - MeasurePane.MinSize; - rect.X = rectDockArea.X; - rect.Y = rectDockArea.Y + rectDockArea.Height - (int)autoHideSize; - rect.Width = rectDockArea.Width; - rect.Height = (int)autoHideSize; - } - - return rect; - } - } - - internal Rectangle GetAutoHideWindowBounds(Rectangle rectAutoHideWindow) - { - if (DocumentStyle == DocumentStyle.SystemMdi || - DocumentStyle == DocumentStyle.DockingMdi) - return (Parent == null) ? Rectangle.Empty : Parent.RectangleToClient(RectangleToScreen(rectAutoHideWindow)); - else - return rectAutoHideWindow; - } - - internal void RefreshAutoHideStrip() - { - AutoHideStripControl.RefreshChanges(); - } - - } -} +using System; +using System.Windows.Forms; +using System.Drawing; +using System.Runtime.InteropServices; + +namespace LSLEditor.Docking +{ + partial class DockPanel + { + private class AutoHideWindowControl : Panel, ISplitterDragSource + { + private class SplitterControl : SplitterBase + { + public SplitterControl(AutoHideWindowControl autoHideWindow) + { + m_autoHideWindow = autoHideWindow; + } + + private AutoHideWindowControl m_autoHideWindow; + private AutoHideWindowControl AutoHideWindow + { + get { return m_autoHideWindow; } + } + + protected override int SplitterSize + { + get { return Measures.SplitterSize; } + } + + protected override void StartDrag() + { + AutoHideWindow.DockPanel.BeginDrag(AutoHideWindow, AutoHideWindow.RectangleToScreen(Bounds)); + } + } + + #region consts + private const int ANIMATE_TIME = 100; // in mini-seconds + #endregion + + private Timer m_timerMouseTrack; + private SplitterControl m_splitter; + + public AutoHideWindowControl(DockPanel dockPanel) + { + m_dockPanel = dockPanel; + + m_timerMouseTrack = new Timer(); + m_timerMouseTrack.Tick += new EventHandler(TimerMouseTrack_Tick); + + Visible = false; + m_splitter = new SplitterControl(this); + Controls.Add(m_splitter); + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + m_timerMouseTrack.Dispose(); + } + base.Dispose(disposing); + } + + private DockPanel m_dockPanel = null; + public DockPanel DockPanel + { + get { return m_dockPanel; } + } + + private DockPane m_activePane = null; + public DockPane ActivePane + { + get { return m_activePane; } + } + private void SetActivePane() + { + DockPane value = (ActiveContent == null ? null : ActiveContent.DockHandler.Pane); + + if (value == m_activePane) + return; + + m_activePane = value; + } + + private IDockContent m_activeContent = null; + public IDockContent ActiveContent + { + get { return m_activeContent; } + set + { + if (value == m_activeContent) + return; + + if (value != null) + { + if (!DockHelper.IsDockStateAutoHide(value.DockHandler.DockState) || value.DockHandler.DockPanel != DockPanel) + throw (new InvalidOperationException(Strings.DockPanel_ActiveAutoHideContent_InvalidValue)); + } + + DockPanel.SuspendLayout(); + + if (m_activeContent != null) + { + if (m_activeContent.DockHandler.Form.ContainsFocus) + DockPanel.ContentFocusManager.GiveUpFocus(m_activeContent); + AnimateWindow(false); + } + + m_activeContent = value; + SetActivePane(); + if (ActivePane != null) + ActivePane.ActiveContent = m_activeContent; + + if (m_activeContent != null) + AnimateWindow(true); + + DockPanel.ResumeLayout(); + DockPanel.RefreshAutoHideStrip(); + + SetTimerMouseTrack(); + } + } + + public DockState DockState + { + get { return ActiveContent == null ? DockState.Unknown : ActiveContent.DockHandler.DockState; } + } + + private bool m_flagAnimate = true; + private bool FlagAnimate + { + get { return m_flagAnimate; } + set { m_flagAnimate = value; } + } + + private bool m_flagDragging = false; + internal bool FlagDragging + { + get { return m_flagDragging; } + set + { + if (m_flagDragging == value) + return; + + m_flagDragging = value; + SetTimerMouseTrack(); + } + } + + private void AnimateWindow(bool show) + { + if (!FlagAnimate && Visible != show) + { + Visible = show; + return; + } + + Parent.SuspendLayout(); + + Rectangle rectSource = GetRectangle(!show); + Rectangle rectTarget = GetRectangle(show); + int dxLoc, dyLoc; + int dWidth, dHeight; + dxLoc = dyLoc = dWidth = dHeight = 0; + if (DockState == DockState.DockTopAutoHide) + dHeight = show ? 1 : -1; + else if (DockState == DockState.DockLeftAutoHide) + dWidth = show ? 1 : -1; + else if (DockState == DockState.DockRightAutoHide) + { + dxLoc = show ? -1 : 1; + dWidth = show ? 1 : -1; + } + else if (DockState == DockState.DockBottomAutoHide) + { + dyLoc = (show ? -1 : 1); + dHeight = (show ? 1 : -1); + } + + if (show) + { + Bounds = DockPanel.GetAutoHideWindowBounds(new Rectangle(-rectTarget.Width, -rectTarget.Height, rectTarget.Width, rectTarget.Height)); + if (Visible == false) + Visible = true; + PerformLayout(); + } + + SuspendLayout(); + + LayoutAnimateWindow(rectSource); + if (Visible == false) + Visible = true; + + int speedFactor = 1; + int totalPixels = (rectSource.Width != rectTarget.Width) ? + Math.Abs(rectSource.Width - rectTarget.Width) : + Math.Abs(rectSource.Height - rectTarget.Height); + int remainPixels = totalPixels; + DateTime startingTime = DateTime.Now; + while (rectSource != rectTarget) + { + DateTime startPerMove = DateTime.Now; + + rectSource.X += dxLoc * speedFactor; + rectSource.Y += dyLoc * speedFactor; + rectSource.Width += dWidth * speedFactor; + rectSource.Height += dHeight * speedFactor; + if (Math.Sign(rectTarget.X - rectSource.X) != Math.Sign(dxLoc)) + rectSource.X = rectTarget.X; + if (Math.Sign(rectTarget.Y - rectSource.Y) != Math.Sign(dyLoc)) + rectSource.Y = rectTarget.Y; + if (Math.Sign(rectTarget.Width - rectSource.Width) != Math.Sign(dWidth)) + rectSource.Width = rectTarget.Width; + if (Math.Sign(rectTarget.Height - rectSource.Height) != Math.Sign(dHeight)) + rectSource.Height = rectTarget.Height; + + LayoutAnimateWindow(rectSource); + if (Parent != null) + Parent.Update(); + + remainPixels -= speedFactor; + + while (true) + { + TimeSpan time = new TimeSpan(0, 0, 0, 0, ANIMATE_TIME); + TimeSpan elapsedPerMove = DateTime.Now - startPerMove; + TimeSpan elapsedTime = DateTime.Now - startingTime; + if (((int)((time - elapsedTime).TotalMilliseconds)) <= 0) + { + speedFactor = remainPixels; + break; + } + else + speedFactor = remainPixels * (int)elapsedPerMove.TotalMilliseconds / (int)((time - elapsedTime).TotalMilliseconds); + if (speedFactor >= 1) + break; + } + } + ResumeLayout(); + Parent.ResumeLayout(); + } + + private void LayoutAnimateWindow(Rectangle rect) + { + Bounds = DockPanel.GetAutoHideWindowBounds(rect); + + Rectangle rectClient = ClientRectangle; + + if (DockState == DockState.DockLeftAutoHide) + ActivePane.Location = new Point(rectClient.Right - 2 - Measures.SplitterSize - ActivePane.Width, ActivePane.Location.Y); + else if (DockState == DockState.DockTopAutoHide) + ActivePane.Location = new Point(ActivePane.Location.X, rectClient.Bottom - 2 - Measures.SplitterSize - ActivePane.Height); + } + + private Rectangle GetRectangle(bool show) + { + if (DockState == DockState.Unknown) + return Rectangle.Empty; + + Rectangle rect = DockPanel.AutoHideWindowRectangle; + + if (show) + return rect; + + if (DockState == DockState.DockLeftAutoHide) + rect.Width = 0; + else if (DockState == DockState.DockRightAutoHide) + { + rect.X += rect.Width; + rect.Width = 0; + } + else if (DockState == DockState.DockTopAutoHide) + rect.Height = 0; + else + { + rect.Y += rect.Height; + rect.Height = 0; + } + + return rect; + } + + private void SetTimerMouseTrack() + { + if (ActivePane == null || ActivePane.IsActivated || FlagDragging) + { + m_timerMouseTrack.Enabled = false; + return; + } + + // start the timer + int hovertime = SystemInformation.MouseHoverTime ; + + // assign a default value 400 in case of setting Timer.Interval invalid value exception + if (hovertime <= 0) + hovertime = 400; + + m_timerMouseTrack.Interval = 2 * (int)hovertime; + m_timerMouseTrack.Enabled = true; + } + + protected virtual Rectangle DisplayingRectangle + { + get + { + Rectangle rect = ClientRectangle; + + // exclude the border and the splitter + if (DockState == DockState.DockBottomAutoHide) + { + rect.Y += 2 + Measures.SplitterSize; + rect.Height -= 2 + Measures.SplitterSize; + } + else if (DockState == DockState.DockRightAutoHide) + { + rect.X += 2 + Measures.SplitterSize; + rect.Width -= 2 + Measures.SplitterSize; + } + else if (DockState == DockState.DockTopAutoHide) + rect.Height -= 2 + Measures.SplitterSize; + else if (DockState == DockState.DockLeftAutoHide) + rect.Width -= 2 + Measures.SplitterSize; + + return rect; + } + } + + protected override void OnLayout(LayoutEventArgs levent) + { + DockPadding.All = 0; + if (DockState == DockState.DockLeftAutoHide) + { + DockPadding.Right = 2; + m_splitter.Dock = DockStyle.Right; + } + else if (DockState == DockState.DockRightAutoHide) + { + DockPadding.Left = 2; + m_splitter.Dock = DockStyle.Left; + } + else if (DockState == DockState.DockTopAutoHide) + { + DockPadding.Bottom = 2; + m_splitter.Dock = DockStyle.Bottom; + } + else if (DockState == DockState.DockBottomAutoHide) + { + DockPadding.Top = 2; + m_splitter.Dock = DockStyle.Top; + } + + Rectangle rectDisplaying = DisplayingRectangle; + Rectangle rectHidden = new Rectangle(-rectDisplaying.Width, rectDisplaying.Y, rectDisplaying.Width, rectDisplaying.Height); + foreach (Control c in Controls) + { + DockPane pane = c as DockPane; + if (pane == null) + continue; + + + if (pane == ActivePane) + pane.Bounds = rectDisplaying; + else + pane.Bounds = rectHidden; + } + + base.OnLayout(levent); + } + + protected override void OnPaint(PaintEventArgs e) + { + // Draw the border + Graphics g = e.Graphics; + + if (DockState == DockState.DockBottomAutoHide) + g.DrawLine(SystemPens.ControlLightLight, 0, 1, ClientRectangle.Right, 1); + else if (DockState == DockState.DockRightAutoHide) + g.DrawLine(SystemPens.ControlLightLight, 1, 0, 1, ClientRectangle.Bottom); + else if (DockState == DockState.DockTopAutoHide) + { + g.DrawLine(SystemPens.ControlDark, 0, ClientRectangle.Height - 2, ClientRectangle.Right, ClientRectangle.Height - 2); + g.DrawLine(SystemPens.ControlDarkDark, 0, ClientRectangle.Height - 1, ClientRectangle.Right, ClientRectangle.Height - 1); + } + else if (DockState == DockState.DockLeftAutoHide) + { + g.DrawLine(SystemPens.ControlDark, ClientRectangle.Width - 2, 0, ClientRectangle.Width - 2, ClientRectangle.Bottom); + g.DrawLine(SystemPens.ControlDarkDark, ClientRectangle.Width - 1, 0, ClientRectangle.Width - 1, ClientRectangle.Bottom); + } + + base.OnPaint(e); + } + + public void RefreshActiveContent() + { + if (ActiveContent == null) + return; + + if (!DockHelper.IsDockStateAutoHide(ActiveContent.DockHandler.DockState)) + { + FlagAnimate = false; + ActiveContent = null; + FlagAnimate = true; + } + } + + public void RefreshActivePane() + { + SetTimerMouseTrack(); + } + + private void TimerMouseTrack_Tick(object sender, EventArgs e) + { + if (IsDisposed) + return; + + if (ActivePane == null || ActivePane.IsActivated) + { + m_timerMouseTrack.Enabled = false; + return; + } + + DockPane pane = ActivePane; + Point ptMouseInAutoHideWindow = PointToClient(Control.MousePosition); + Point ptMouseInDockPanel = DockPanel.PointToClient(Control.MousePosition); + + Rectangle rectTabStrip = DockPanel.GetTabStripRectangle(pane.DockState); + + if (!ClientRectangle.Contains(ptMouseInAutoHideWindow) && !rectTabStrip.Contains(ptMouseInDockPanel)) + { + ActiveContent = null; + m_timerMouseTrack.Enabled = false; + } + } + + #region ISplitterDragSource Members + + void ISplitterDragSource.BeginDrag(Rectangle rectSplitter) + { + FlagDragging = true; + } + + void ISplitterDragSource.EndDrag() + { + FlagDragging = false; + } + + bool ISplitterDragSource.IsVertical + { + get { return (DockState == DockState.DockLeftAutoHide || DockState == DockState.DockRightAutoHide); } + } + + Rectangle ISplitterDragSource.DragLimitBounds + { + get + { + Rectangle rectLimit = DockPanel.DockArea; + + if ((this as ISplitterDragSource).IsVertical) + { + rectLimit.X += MeasurePane.MinSize; + rectLimit.Width -= 2 * MeasurePane.MinSize; + } + else + { + rectLimit.Y += MeasurePane.MinSize; + rectLimit.Height -= 2 * MeasurePane.MinSize; + } + + return DockPanel.RectangleToScreen(rectLimit); + } + } + + void ISplitterDragSource.MoveSplitter(int offset) + { + Rectangle rectDockArea = DockPanel.DockArea; + IDockContent content = ActiveContent; + if (DockState == DockState.DockLeftAutoHide && rectDockArea.Width > 0) + { + if (content.DockHandler.AutoHidePortion < 1) + content.DockHandler.AutoHidePortion += ((double)offset) / (double)rectDockArea.Width; + else + content.DockHandler.AutoHidePortion = Width + offset; + } + else if (DockState == DockState.DockRightAutoHide && rectDockArea.Width > 0) + { + if (content.DockHandler.AutoHidePortion < 1) + content.DockHandler.AutoHidePortion -= ((double)offset) / (double)rectDockArea.Width; + else + content.DockHandler.AutoHidePortion = Width - offset; + } + else if (DockState == DockState.DockBottomAutoHide && rectDockArea.Height > 0) + { + if (content.DockHandler.AutoHidePortion < 1) + content.DockHandler.AutoHidePortion -= ((double)offset) / (double)rectDockArea.Height; + else + content.DockHandler.AutoHidePortion = Height - offset; + } + else if (DockState == DockState.DockTopAutoHide && rectDockArea.Height > 0) + { + if (content.DockHandler.AutoHidePortion < 1) + content.DockHandler.AutoHidePortion += ((double)offset) / (double)rectDockArea.Height; + else + content.DockHandler.AutoHidePortion = Height + offset; + } + } + + #region IDragSource Members + + Control IDragSource.DragControl + { + get { return this; } + } + + #endregion + + #endregion + } + + private AutoHideWindowControl AutoHideWindow + { + get { return m_autoHideWindow; } + } + + internal Control AutoHideControl + { + get { return m_autoHideWindow; } + } + + internal void RefreshActiveAutoHideContent() + { + AutoHideWindow.RefreshActiveContent(); + } + + internal Rectangle AutoHideWindowRectangle + { + get + { + DockState state = AutoHideWindow.DockState; + Rectangle rectDockArea = DockArea; + if (ActiveAutoHideContent == null) + return Rectangle.Empty; + + if (Parent == null) + return Rectangle.Empty; + + Rectangle rect = Rectangle.Empty; + double autoHideSize = ActiveAutoHideContent.DockHandler.AutoHidePortion; + if (state == DockState.DockLeftAutoHide) + { + if (autoHideSize < 1) + autoHideSize = rectDockArea.Width * autoHideSize; + if (autoHideSize > rectDockArea.Width - MeasurePane.MinSize) + autoHideSize = rectDockArea.Width - MeasurePane.MinSize; + rect.X = rectDockArea.X; + rect.Y = rectDockArea.Y; + rect.Width = (int)autoHideSize; + rect.Height = rectDockArea.Height; + } + else if (state == DockState.DockRightAutoHide) + { + if (autoHideSize < 1) + autoHideSize = rectDockArea.Width * autoHideSize; + if (autoHideSize > rectDockArea.Width - MeasurePane.MinSize) + autoHideSize = rectDockArea.Width - MeasurePane.MinSize; + rect.X = rectDockArea.X + rectDockArea.Width - (int)autoHideSize; + rect.Y = rectDockArea.Y; + rect.Width = (int)autoHideSize; + rect.Height = rectDockArea.Height; + } + else if (state == DockState.DockTopAutoHide) + { + if (autoHideSize < 1) + autoHideSize = rectDockArea.Height * autoHideSize; + if (autoHideSize > rectDockArea.Height - MeasurePane.MinSize) + autoHideSize = rectDockArea.Height - MeasurePane.MinSize; + rect.X = rectDockArea.X; + rect.Y = rectDockArea.Y; + rect.Width = rectDockArea.Width; + rect.Height = (int)autoHideSize; + } + else if (state == DockState.DockBottomAutoHide) + { + if (autoHideSize < 1) + autoHideSize = rectDockArea.Height * autoHideSize; + if (autoHideSize > rectDockArea.Height - MeasurePane.MinSize) + autoHideSize = rectDockArea.Height - MeasurePane.MinSize; + rect.X = rectDockArea.X; + rect.Y = rectDockArea.Y + rectDockArea.Height - (int)autoHideSize; + rect.Width = rectDockArea.Width; + rect.Height = (int)autoHideSize; + } + + return rect; + } + } + + internal Rectangle GetAutoHideWindowBounds(Rectangle rectAutoHideWindow) + { + if (DocumentStyle == DocumentStyle.SystemMdi || + DocumentStyle == DocumentStyle.DockingMdi) + return (Parent == null) ? Rectangle.Empty : Parent.RectangleToClient(RectangleToScreen(rectAutoHideWindow)); + else + return rectAutoHideWindow; + } + + internal void RefreshAutoHideStrip() + { + AutoHideStripControl.RefreshChanges(); + } + + } +} diff --git a/trunk/Docking/DockPanel.DockDragHandler.cs b/source/Docking/DockPanel.DockDragHandler.cs similarity index 97% rename from trunk/Docking/DockPanel.DockDragHandler.cs rename to source/Docking/DockPanel.DockDragHandler.cs index ebc2254..eb518ac 100644 --- a/trunk/Docking/DockPanel.DockDragHandler.cs +++ b/source/Docking/DockPanel.DockDragHandler.cs @@ -1,814 +1,814 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Windows.Forms; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.ComponentModel; - -namespace LSLEditor.Docking -{ - partial class DockPanel - { - private sealed class DockDragHandler : DragHandler - { - private class DockIndicator : DragForm - { - #region IHitTest - private interface IHitTest - { - DockStyle HitTest(Point pt); - DockStyle Status { get; set; } - } - #endregion - - #region PanelIndicator - private class PanelIndicator : PictureBox, IHitTest - { - private static Image _imagePanelLeft = Resources.DockIndicator_PanelLeft; - private static Image _imagePanelRight = Resources.DockIndicator_PanelRight; - private static Image _imagePanelTop = Resources.DockIndicator_PanelTop; - private static Image _imagePanelBottom = Resources.DockIndicator_PanelBottom; - private static Image _imagePanelFill = Resources.DockIndicator_PanelFill; - private static Image _imagePanelLeftActive = Resources.DockIndicator_PanelLeft_Active; - private static Image _imagePanelRightActive = Resources.DockIndicator_PanelRight_Active; - private static Image _imagePanelTopActive = Resources.DockIndicator_PanelTop_Active; - private static Image _imagePanelBottomActive = Resources.DockIndicator_PanelBottom_Active; - private static Image _imagePanelFillActive = Resources.DockIndicator_PanelFill_Active; - - public PanelIndicator(DockStyle dockStyle) - { - m_dockStyle = dockStyle; - SizeMode = PictureBoxSizeMode.AutoSize; - Image = ImageInactive; - } - - private DockStyle m_dockStyle; - private DockStyle DockStyle - { - get { return m_dockStyle; } - } - - private DockStyle m_status; - public DockStyle Status - { - get { return m_status; } - set - { - if (value != DockStyle && value != DockStyle.None) - throw new InvalidEnumArgumentException(); - - if (m_status == value) - return; - - m_status = value; - IsActivated = (m_status != DockStyle.None); - } - } - - private Image ImageInactive - { - get - { - if (DockStyle == DockStyle.Left) - return _imagePanelLeft; - else if (DockStyle == DockStyle.Right) - return _imagePanelRight; - else if (DockStyle == DockStyle.Top) - return _imagePanelTop; - else if (DockStyle == DockStyle.Bottom) - return _imagePanelBottom; - else if (DockStyle == DockStyle.Fill) - return _imagePanelFill; - else - return null; - } - } - - private Image ImageActive - { - get - { - if (DockStyle == DockStyle.Left) - return _imagePanelLeftActive; - else if (DockStyle == DockStyle.Right) - return _imagePanelRightActive; - else if (DockStyle == DockStyle.Top) - return _imagePanelTopActive; - else if (DockStyle == DockStyle.Bottom) - return _imagePanelBottomActive; - else if (DockStyle == DockStyle.Fill) - return _imagePanelFillActive; - else - return null; - } - } - - private bool m_isActivated = false; - private bool IsActivated - { - get { return m_isActivated; } - set - { - m_isActivated = value; - Image = IsActivated ? ImageActive : ImageInactive; - } - } - - public DockStyle HitTest(Point pt) - { - return this.Visible && ClientRectangle.Contains(PointToClient(pt)) ? DockStyle : DockStyle.None; - } - } - #endregion PanelIndicator - - #region PaneIndicator - private class PaneIndicator : PictureBox, IHitTest - { - private struct HotSpotIndex - { - public HotSpotIndex(int x, int y, DockStyle dockStyle) - { - m_x = x; - m_y = y; - m_dockStyle = dockStyle; - } - - private int m_x; - public int X - { - get { return m_x; } - } - - private int m_y; - public int Y - { - get { return m_y; } - } - - private DockStyle m_dockStyle; - public DockStyle DockStyle - { - get { return m_dockStyle; } - } - } - - private static Bitmap _bitmapPaneDiamond = Resources.DockIndicator_PaneDiamond; - private static Bitmap _bitmapPaneDiamondLeft = Resources.DockIndicator_PaneDiamond_Left; - private static Bitmap _bitmapPaneDiamondRight = Resources.DockIndicator_PaneDiamond_Right; - private static Bitmap _bitmapPaneDiamondTop = Resources.DockIndicator_PaneDiamond_Top; - private static Bitmap _bitmapPaneDiamondBottom = Resources.DockIndicator_PaneDiamond_Bottom; - private static Bitmap _bitmapPaneDiamondFill = Resources.DockIndicator_PaneDiamond_Fill; - private static Bitmap _bitmapPaneDiamondHotSpot = Resources.DockIndicator_PaneDiamond_HotSpot; - private static Bitmap _bitmapPaneDiamondHotSpotIndex = Resources.DockIndicator_PaneDiamond_HotSpotIndex; - private static HotSpotIndex[] _hotSpots = new HotSpotIndex[] - { - new HotSpotIndex(1, 0, DockStyle.Top), - new HotSpotIndex(0, 1, DockStyle.Left), - new HotSpotIndex(1, 1, DockStyle.Fill), - new HotSpotIndex(2, 1, DockStyle.Right), - new HotSpotIndex(1, 2, DockStyle.Bottom) - }; - private static GraphicsPath _displayingGraphicsPath = DrawHelper.CalculateGraphicsPathFromBitmap(_bitmapPaneDiamond); - - public PaneIndicator() - { - SizeMode = PictureBoxSizeMode.AutoSize; - Image = _bitmapPaneDiamond; - Region = new Region(DisplayingGraphicsPath); - } - - public static GraphicsPath DisplayingGraphicsPath - { - get { return _displayingGraphicsPath; } - } - - public DockStyle HitTest(Point pt) - { - if (!Visible) - return DockStyle.None; - - pt = PointToClient(pt); - if (!ClientRectangle.Contains(pt)) - return DockStyle.None; - - for (int i = _hotSpots.GetLowerBound(0); i <= _hotSpots.GetUpperBound(0); i++) - { - if (_bitmapPaneDiamondHotSpot.GetPixel(pt.X, pt.Y) == _bitmapPaneDiamondHotSpotIndex.GetPixel(_hotSpots[i].X, _hotSpots[i].Y)) - return _hotSpots[i].DockStyle; - } - - return DockStyle.None; - } - - private DockStyle m_status = DockStyle.None; - public DockStyle Status - { - get { return m_status; } - set - { - m_status = value; - if (m_status == DockStyle.None) - Image = _bitmapPaneDiamond; - else if (m_status == DockStyle.Left) - Image = _bitmapPaneDiamondLeft; - else if (m_status == DockStyle.Right) - Image = _bitmapPaneDiamondRight; - else if (m_status == DockStyle.Top) - Image = _bitmapPaneDiamondTop; - else if (m_status == DockStyle.Bottom) - Image = _bitmapPaneDiamondBottom; - else if (m_status == DockStyle.Fill) - Image = _bitmapPaneDiamondFill; - } - } - } - #endregion PaneIndicator - - #region consts - private int _PanelIndicatorMargin = 10; - #endregion - - private DockDragHandler m_dragHandler; - - public DockIndicator(DockDragHandler dragHandler) - { - m_dragHandler = dragHandler; - Controls.AddRange(new Control[] { - PaneDiamond, - PanelLeft, - PanelRight, - PanelTop, - PanelBottom, - PanelFill - }); - Region = new Region(Rectangle.Empty); - } - - private PaneIndicator m_paneDiamond = null; - private PaneIndicator PaneDiamond - { - get - { - if (m_paneDiamond == null) - m_paneDiamond = new PaneIndicator(); - - return m_paneDiamond; - } - } - - private PanelIndicator m_panelLeft = null; - private PanelIndicator PanelLeft - { - get - { - if (m_panelLeft == null) - m_panelLeft = new PanelIndicator(DockStyle.Left); - - return m_panelLeft; - } - } - - private PanelIndicator m_panelRight = null; - private PanelIndicator PanelRight - { - get - { - if (m_panelRight == null) - m_panelRight = new PanelIndicator(DockStyle.Right); - - return m_panelRight; - } - } - - private PanelIndicator m_panelTop = null; - private PanelIndicator PanelTop - { - get - { - if (m_panelTop == null) - m_panelTop = new PanelIndicator(DockStyle.Top); - - return m_panelTop; - } - } - - private PanelIndicator m_panelBottom = null; - private PanelIndicator PanelBottom - { - get - { - if (m_panelBottom == null) - m_panelBottom = new PanelIndicator(DockStyle.Bottom); - - return m_panelBottom; - } - } - - private PanelIndicator m_panelFill = null; - private PanelIndicator PanelFill - { - get - { - if (m_panelFill == null) - m_panelFill = new PanelIndicator(DockStyle.Fill); - - return m_panelFill; - } - } - - private bool m_fullPanelEdge = false; - public bool FullPanelEdge - { - get { return m_fullPanelEdge; } - set - { - if (m_fullPanelEdge == value) - return; - - m_fullPanelEdge = value; - RefreshChanges(); - } - } - - public DockDragHandler DragHandler - { - get { return m_dragHandler; } - } - - public DockPanel DockPanel - { - get { return DragHandler.DockPanel; } - } - - private DockPane m_dockPane = null; - public DockPane DockPane - { - get { return m_dockPane; } - internal set - { - if (m_dockPane == value) - return; - - DockPane oldDisplayingPane = DisplayingPane; - m_dockPane = value; - if (oldDisplayingPane != DisplayingPane) - RefreshChanges(); - } - } - - private IHitTest m_hitTest = null; - private IHitTest HitTestResult - { - get { return m_hitTest; } - set - { - if (m_hitTest == value) - return; - - if (m_hitTest != null) - m_hitTest.Status = DockStyle.None; - - m_hitTest = value; - } - } - - private DockPane DisplayingPane - { - get { return ShouldPaneDiamondVisible() ? DockPane : null; } - } - - private void RefreshChanges() - { - Region region = new Region(Rectangle.Empty); - Rectangle rectDockArea = FullPanelEdge ? DockPanel.DockArea : DockPanel.DocumentWindowBounds; - - rectDockArea = RectangleToClient(DockPanel.RectangleToScreen(rectDockArea)); - if (ShouldPanelIndicatorVisible(DockState.DockLeft)) - { - PanelLeft.Location = new Point(rectDockArea.X + _PanelIndicatorMargin, rectDockArea.Y + (rectDockArea.Height - PanelRight.Height) / 2); - PanelLeft.Visible = true; - region.Union(PanelLeft.Bounds); - } - else - PanelLeft.Visible = false; - - if (ShouldPanelIndicatorVisible(DockState.DockRight)) - { - PanelRight.Location = new Point(rectDockArea.X + rectDockArea.Width - PanelRight.Width - _PanelIndicatorMargin, rectDockArea.Y + (rectDockArea.Height - PanelRight.Height) / 2); - PanelRight.Visible = true; - region.Union(PanelRight.Bounds); - } - else - PanelRight.Visible = false; - - if (ShouldPanelIndicatorVisible(DockState.DockTop)) - { - PanelTop.Location = new Point(rectDockArea.X + (rectDockArea.Width - PanelTop.Width) / 2, rectDockArea.Y + _PanelIndicatorMargin); - PanelTop.Visible = true; - region.Union(PanelTop.Bounds); - } - else - PanelTop.Visible = false; - - if (ShouldPanelIndicatorVisible(DockState.DockBottom)) - { - PanelBottom.Location = new Point(rectDockArea.X + (rectDockArea.Width - PanelBottom.Width) / 2, rectDockArea.Y + rectDockArea.Height - PanelBottom.Height - _PanelIndicatorMargin); - PanelBottom.Visible = true; - region.Union(PanelBottom.Bounds); - } - else - PanelBottom.Visible = false; - - if (ShouldPanelIndicatorVisible(DockState.Document)) - { - Rectangle rectDocumentWindow = RectangleToClient(DockPanel.RectangleToScreen(DockPanel.DocumentWindowBounds)); - PanelFill.Location = new Point(rectDocumentWindow.X + (rectDocumentWindow.Width - PanelFill.Width) / 2, rectDocumentWindow.Y + (rectDocumentWindow.Height - PanelFill.Height) / 2); - PanelFill.Visible = true; - region.Union(PanelFill.Bounds); - } - else - PanelFill.Visible = false; - - if (ShouldPaneDiamondVisible()) - { - Rectangle rect = RectangleToClient(DockPane.RectangleToScreen(DockPane.ClientRectangle)); - PaneDiamond.Location = new Point(rect.Left + (rect.Width - PaneDiamond.Width) / 2, rect.Top + (rect.Height - PaneDiamond.Height) / 2); - PaneDiamond.Visible = true; - using (GraphicsPath graphicsPath = PaneIndicator.DisplayingGraphicsPath.Clone() as GraphicsPath) - { - Point[] pts = new Point[] - { - new Point(PaneDiamond.Left, PaneDiamond.Top), - new Point(PaneDiamond.Right, PaneDiamond.Top), - new Point(PaneDiamond.Left, PaneDiamond.Bottom) - }; - using (Matrix matrix = new Matrix(PaneDiamond.ClientRectangle, pts)) - { - graphicsPath.Transform(matrix); - } - region.Union(graphicsPath); - } - } - else - PaneDiamond.Visible = false; - - Region = region; - } - - private bool ShouldPanelIndicatorVisible(DockState dockState) - { - if (!Visible) - return false; - - if (DockPanel.DockWindows[dockState].Visible) - return false; - - return DragHandler.DragSource.IsDockStateValid(dockState); - } - - private bool ShouldPaneDiamondVisible() - { - if (DockPane == null) - return false; - - if (!DockPanel.AllowEndUserNestedDocking) - return false; - - return DragHandler.DragSource.CanDockTo(DockPane); - } - - public override void Show(bool bActivate) - { - base.Show(bActivate); - Bounds = SystemInformation.VirtualScreen; - RefreshChanges(); - } - - public void TestDrop() - { - Point pt = Control.MousePosition; - DockPane = DockHelper.PaneAtPoint(pt, DockPanel); - - if (TestDrop(PanelLeft, pt) != DockStyle.None) - HitTestResult = PanelLeft; - else if (TestDrop(PanelRight, pt) != DockStyle.None) - HitTestResult = PanelRight; - else if (TestDrop(PanelTop, pt) != DockStyle.None) - HitTestResult = PanelTop; - else if (TestDrop(PanelBottom, pt) != DockStyle.None) - HitTestResult = PanelBottom; - else if (TestDrop(PanelFill, pt) != DockStyle.None) - HitTestResult = PanelFill; - else if (TestDrop(PaneDiamond, pt) != DockStyle.None) - HitTestResult = PaneDiamond; - else - HitTestResult = null; - - if (HitTestResult != null) - { - if (HitTestResult is PaneIndicator) - DragHandler.Outline.Show(DockPane, HitTestResult.Status); - else - DragHandler.Outline.Show(DockPanel, HitTestResult.Status, FullPanelEdge); - } - } - - private static DockStyle TestDrop(IHitTest hitTest, Point pt) - { - return hitTest.Status = hitTest.HitTest(pt); - } - } - - private class DockOutline : DockOutlineBase - { - public DockOutline() - { - m_dragForm = new DragForm(); - SetDragForm(Rectangle.Empty); - DragForm.BackColor = SystemColors.ActiveCaption; - DragForm.Opacity = 0.5; - DragForm.Show(false); - } - - DragForm m_dragForm; - private DragForm DragForm - { - get { return m_dragForm; } - } - - protected override void OnShow() - { - CalculateRegion(); - } - - protected override void OnClose() - { - DragForm.Close(); - } - - private void CalculateRegion() - { - if (SameAsOldValue) - return; - - if (!FloatWindowBounds.IsEmpty) - SetOutline(FloatWindowBounds); - else if (DockTo is DockPanel) - SetOutline(DockTo as DockPanel, Dock, (ContentIndex != 0)); - else if (DockTo is DockPane) - SetOutline(DockTo as DockPane, Dock, ContentIndex); - else - SetOutline(); - } - - private void SetOutline() - { - SetDragForm(Rectangle.Empty); - } - - private void SetOutline(Rectangle floatWindowBounds) - { - SetDragForm(floatWindowBounds); - } - - private void SetOutline(DockPanel dockPanel, DockStyle dock, bool fullPanelEdge) - { - Rectangle rect = fullPanelEdge ? dockPanel.DockArea : dockPanel.DocumentWindowBounds; - rect.Location = dockPanel.PointToScreen(rect.Location); - if (dock == DockStyle.Top) - { - int height = dockPanel.GetDockWindowSize(DockState.DockTop); - rect = new Rectangle(rect.X, rect.Y, rect.Width, height); - } - else if (dock == DockStyle.Bottom) - { - int height = dockPanel.GetDockWindowSize(DockState.DockBottom); - rect = new Rectangle(rect.X, rect.Bottom - height, rect.Width, height); - } - else if (dock == DockStyle.Left) - { - int width = dockPanel.GetDockWindowSize(DockState.DockLeft); - rect = new Rectangle(rect.X, rect.Y, width, rect.Height); - } - else if (dock == DockStyle.Right) - { - int width = dockPanel.GetDockWindowSize(DockState.DockRight); - rect = new Rectangle(rect.Right - width, rect.Y, width, rect.Height); - } - else if (dock == DockStyle.Fill) - { - rect = dockPanel.DocumentWindowBounds; - rect.Location = dockPanel.PointToScreen(rect.Location); - } - - SetDragForm(rect); - } - - private void SetOutline(DockPane pane, DockStyle dock, int contentIndex) - { - if (dock != DockStyle.Fill) - { - Rectangle rect = pane.DisplayingRectangle; - if (dock == DockStyle.Right) - rect.X += rect.Width / 2; - if (dock == DockStyle.Bottom) - rect.Y += rect.Height / 2; - if (dock == DockStyle.Left || dock == DockStyle.Right) - rect.Width -= rect.Width / 2; - if (dock == DockStyle.Top || dock == DockStyle.Bottom) - rect.Height -= rect.Height / 2; - rect.Location = pane.PointToScreen(rect.Location); - - SetDragForm(rect); - } - else if (contentIndex == -1) - { - Rectangle rect = pane.DisplayingRectangle; - rect.Location = pane.PointToScreen(rect.Location); - SetDragForm(rect); - } - else - { - using (GraphicsPath path = pane.TabStripControl.GetOutline(contentIndex)) - { - RectangleF rectF = path.GetBounds(); - Rectangle rect = new Rectangle((int)rectF.X, (int)rectF.Y, (int)rectF.Width, (int)rectF.Height); - using (Matrix matrix = new Matrix(rect, new Point[] { new Point(0, 0), new Point(rect.Width, 0), new Point(0, rect.Height) })) - { - path.Transform(matrix); - } - Region region = new Region(path); - SetDragForm(rect, region); - } - } - } - - private void SetDragForm(Rectangle rect) - { - DragForm.Bounds = rect; - if (rect == Rectangle.Empty) - DragForm.Region = new Region(Rectangle.Empty); - else if (DragForm.Region != null) - DragForm.Region = null; - } - - private void SetDragForm(Rectangle rect, Region region) - { - DragForm.Bounds = rect; - DragForm.Region = region; - } - } - - public DockDragHandler(DockPanel panel) - : base(panel) - { - } - - public new IDockDragSource DragSource - { - get { return base.DragSource as IDockDragSource; } - set { base.DragSource = value; } - } - - private DockOutlineBase m_outline; - public DockOutlineBase Outline - { - get { return m_outline; } - private set { m_outline = value; } - } - - private DockIndicator m_indicator; - private DockIndicator Indicator - { - get { return m_indicator; } - set { m_indicator = value; } - } - - private Rectangle m_floatOutlineBounds; - private Rectangle FloatOutlineBounds - { - get { return m_floatOutlineBounds; } - set { m_floatOutlineBounds = value; } - } - - public void BeginDrag(IDockDragSource dragSource) - { - DragSource = dragSource; - - if (!BeginDrag()) - { - DragSource = null; - return; - } - - Outline = new DockOutline(); - Indicator = new DockIndicator(this); - Indicator.Show(false); - - FloatOutlineBounds = DragSource.BeginDrag(StartMousePosition); - } - - protected override void OnDragging() - { - TestDrop(); - } - - protected override void OnEndDrag(bool abort) - { - DockPanel.SuspendLayout(true); - - Outline.Close(); - Indicator.Close(); - - EndDrag(abort); - - // Queue a request to layout all children controls - DockPanel.PerformMdiClientLayout(); - - DockPanel.ResumeLayout(true, true); - - DragSource = null; - } - - private void TestDrop() - { - Outline.FlagTestDrop = false; - - Indicator.FullPanelEdge = ((Control.ModifierKeys & Keys.Shift) != 0); - - if ((Control.ModifierKeys & Keys.Control) == 0) - { - Indicator.TestDrop(); - - if (!Outline.FlagTestDrop) - { - DockPane pane = DockHelper.PaneAtPoint(Control.MousePosition, DockPanel); - if (pane != null && DragSource.IsDockStateValid(pane.DockState)) - pane.TestDrop(DragSource, Outline); - } - - if (!Outline.FlagTestDrop && DragSource.IsDockStateValid(DockState.Float)) - { - FloatWindow floatWindow = DockHelper.FloatWindowAtPoint(Control.MousePosition, DockPanel); - if (floatWindow != null) - floatWindow.TestDrop(DragSource, Outline); - } - } - else - Indicator.DockPane = DockHelper.PaneAtPoint(Control.MousePosition, DockPanel); - - if (!Outline.FlagTestDrop) - { - if (DragSource.IsDockStateValid(DockState.Float)) - { - Rectangle rect = FloatOutlineBounds; - rect.Offset(Control.MousePosition.X - StartMousePosition.X, Control.MousePosition.Y - StartMousePosition.Y); - Outline.Show(rect); - } - } - - if (!Outline.FlagTestDrop) - { - Cursor.Current = Cursors.No; - Outline.Show(); - } - else - Cursor.Current = DragControl.Cursor; - } - - private void EndDrag(bool abort) - { - if (abort) - return; - - if (!Outline.FloatWindowBounds.IsEmpty) - DragSource.FloatAt(Outline.FloatWindowBounds); - else if (Outline.DockTo is DockPane) - { - DockPane pane = Outline.DockTo as DockPane; - DragSource.DockTo(pane, Outline.Dock, Outline.ContentIndex); - } - else if (Outline.DockTo is DockPanel) - { - DockPanel panel = Outline.DockTo as DockPanel; - panel.UpdateDockWindowZOrder(Outline.Dock, Outline.FlagFullEdge); - DragSource.DockTo(panel, Outline.Dock); - } - } - } - - private DockDragHandler m_dockDragHandler = null; - private DockDragHandler GetDockDragHandler() - { - if (m_dockDragHandler == null) - m_dockDragHandler = new DockDragHandler(this); - return m_dockDragHandler; - } - - internal void BeginDrag(IDockDragSource dragSource) - { - GetDockDragHandler().BeginDrag(dragSource); - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.ComponentModel; + +namespace LSLEditor.Docking +{ + partial class DockPanel + { + private sealed class DockDragHandler : DragHandler + { + private class DockIndicator : DragForm + { + #region IHitTest + private interface IHitTest + { + DockStyle HitTest(Point pt); + DockStyle Status { get; set; } + } + #endregion + + #region PanelIndicator + private class PanelIndicator : PictureBox, IHitTest + { + private static Image _imagePanelLeft = Resources.DockIndicator_PanelLeft; + private static Image _imagePanelRight = Resources.DockIndicator_PanelRight; + private static Image _imagePanelTop = Resources.DockIndicator_PanelTop; + private static Image _imagePanelBottom = Resources.DockIndicator_PanelBottom; + private static Image _imagePanelFill = Resources.DockIndicator_PanelFill; + private static Image _imagePanelLeftActive = Resources.DockIndicator_PanelLeft_Active; + private static Image _imagePanelRightActive = Resources.DockIndicator_PanelRight_Active; + private static Image _imagePanelTopActive = Resources.DockIndicator_PanelTop_Active; + private static Image _imagePanelBottomActive = Resources.DockIndicator_PanelBottom_Active; + private static Image _imagePanelFillActive = Resources.DockIndicator_PanelFill_Active; + + public PanelIndicator(DockStyle dockStyle) + { + m_dockStyle = dockStyle; + SizeMode = PictureBoxSizeMode.AutoSize; + Image = ImageInactive; + } + + private DockStyle m_dockStyle; + private DockStyle DockStyle + { + get { return m_dockStyle; } + } + + private DockStyle m_status; + public DockStyle Status + { + get { return m_status; } + set + { + if (value != DockStyle && value != DockStyle.None) + throw new InvalidEnumArgumentException(); + + if (m_status == value) + return; + + m_status = value; + IsActivated = (m_status != DockStyle.None); + } + } + + private Image ImageInactive + { + get + { + if (DockStyle == DockStyle.Left) + return _imagePanelLeft; + else if (DockStyle == DockStyle.Right) + return _imagePanelRight; + else if (DockStyle == DockStyle.Top) + return _imagePanelTop; + else if (DockStyle == DockStyle.Bottom) + return _imagePanelBottom; + else if (DockStyle == DockStyle.Fill) + return _imagePanelFill; + else + return null; + } + } + + private Image ImageActive + { + get + { + if (DockStyle == DockStyle.Left) + return _imagePanelLeftActive; + else if (DockStyle == DockStyle.Right) + return _imagePanelRightActive; + else if (DockStyle == DockStyle.Top) + return _imagePanelTopActive; + else if (DockStyle == DockStyle.Bottom) + return _imagePanelBottomActive; + else if (DockStyle == DockStyle.Fill) + return _imagePanelFillActive; + else + return null; + } + } + + private bool m_isActivated = false; + private bool IsActivated + { + get { return m_isActivated; } + set + { + m_isActivated = value; + Image = IsActivated ? ImageActive : ImageInactive; + } + } + + public DockStyle HitTest(Point pt) + { + return this.Visible && ClientRectangle.Contains(PointToClient(pt)) ? DockStyle : DockStyle.None; + } + } + #endregion PanelIndicator + + #region PaneIndicator + private class PaneIndicator : PictureBox, IHitTest + { + private struct HotSpotIndex + { + public HotSpotIndex(int x, int y, DockStyle dockStyle) + { + m_x = x; + m_y = y; + m_dockStyle = dockStyle; + } + + private int m_x; + public int X + { + get { return m_x; } + } + + private int m_y; + public int Y + { + get { return m_y; } + } + + private DockStyle m_dockStyle; + public DockStyle DockStyle + { + get { return m_dockStyle; } + } + } + + private static Bitmap _bitmapPaneDiamond = Resources.DockIndicator_PaneDiamond; + private static Bitmap _bitmapPaneDiamondLeft = Resources.DockIndicator_PaneDiamond_Left; + private static Bitmap _bitmapPaneDiamondRight = Resources.DockIndicator_PaneDiamond_Right; + private static Bitmap _bitmapPaneDiamondTop = Resources.DockIndicator_PaneDiamond_Top; + private static Bitmap _bitmapPaneDiamondBottom = Resources.DockIndicator_PaneDiamond_Bottom; + private static Bitmap _bitmapPaneDiamondFill = Resources.DockIndicator_PaneDiamond_Fill; + private static Bitmap _bitmapPaneDiamondHotSpot = Resources.DockIndicator_PaneDiamond_HotSpot; + private static Bitmap _bitmapPaneDiamondHotSpotIndex = Resources.DockIndicator_PaneDiamond_HotSpotIndex; + private static HotSpotIndex[] _hotSpots = new HotSpotIndex[] + { + new HotSpotIndex(1, 0, DockStyle.Top), + new HotSpotIndex(0, 1, DockStyle.Left), + new HotSpotIndex(1, 1, DockStyle.Fill), + new HotSpotIndex(2, 1, DockStyle.Right), + new HotSpotIndex(1, 2, DockStyle.Bottom) + }; + private static GraphicsPath _displayingGraphicsPath = DrawHelper.CalculateGraphicsPathFromBitmap(_bitmapPaneDiamond); + + public PaneIndicator() + { + SizeMode = PictureBoxSizeMode.AutoSize; + Image = _bitmapPaneDiamond; + Region = new Region(DisplayingGraphicsPath); + } + + public static GraphicsPath DisplayingGraphicsPath + { + get { return _displayingGraphicsPath; } + } + + public DockStyle HitTest(Point pt) + { + if (!Visible) + return DockStyle.None; + + pt = PointToClient(pt); + if (!ClientRectangle.Contains(pt)) + return DockStyle.None; + + for (int i = _hotSpots.GetLowerBound(0); i <= _hotSpots.GetUpperBound(0); i++) + { + if (_bitmapPaneDiamondHotSpot.GetPixel(pt.X, pt.Y) == _bitmapPaneDiamondHotSpotIndex.GetPixel(_hotSpots[i].X, _hotSpots[i].Y)) + return _hotSpots[i].DockStyle; + } + + return DockStyle.None; + } + + private DockStyle m_status = DockStyle.None; + public DockStyle Status + { + get { return m_status; } + set + { + m_status = value; + if (m_status == DockStyle.None) + Image = _bitmapPaneDiamond; + else if (m_status == DockStyle.Left) + Image = _bitmapPaneDiamondLeft; + else if (m_status == DockStyle.Right) + Image = _bitmapPaneDiamondRight; + else if (m_status == DockStyle.Top) + Image = _bitmapPaneDiamondTop; + else if (m_status == DockStyle.Bottom) + Image = _bitmapPaneDiamondBottom; + else if (m_status == DockStyle.Fill) + Image = _bitmapPaneDiamondFill; + } + } + } + #endregion PaneIndicator + + #region consts + private int _PanelIndicatorMargin = 10; + #endregion + + private DockDragHandler m_dragHandler; + + public DockIndicator(DockDragHandler dragHandler) + { + m_dragHandler = dragHandler; + Controls.AddRange(new Control[] { + PaneDiamond, + PanelLeft, + PanelRight, + PanelTop, + PanelBottom, + PanelFill + }); + Region = new Region(Rectangle.Empty); + } + + private PaneIndicator m_paneDiamond = null; + private PaneIndicator PaneDiamond + { + get + { + if (m_paneDiamond == null) + m_paneDiamond = new PaneIndicator(); + + return m_paneDiamond; + } + } + + private PanelIndicator m_panelLeft = null; + private PanelIndicator PanelLeft + { + get + { + if (m_panelLeft == null) + m_panelLeft = new PanelIndicator(DockStyle.Left); + + return m_panelLeft; + } + } + + private PanelIndicator m_panelRight = null; + private PanelIndicator PanelRight + { + get + { + if (m_panelRight == null) + m_panelRight = new PanelIndicator(DockStyle.Right); + + return m_panelRight; + } + } + + private PanelIndicator m_panelTop = null; + private PanelIndicator PanelTop + { + get + { + if (m_panelTop == null) + m_panelTop = new PanelIndicator(DockStyle.Top); + + return m_panelTop; + } + } + + private PanelIndicator m_panelBottom = null; + private PanelIndicator PanelBottom + { + get + { + if (m_panelBottom == null) + m_panelBottom = new PanelIndicator(DockStyle.Bottom); + + return m_panelBottom; + } + } + + private PanelIndicator m_panelFill = null; + private PanelIndicator PanelFill + { + get + { + if (m_panelFill == null) + m_panelFill = new PanelIndicator(DockStyle.Fill); + + return m_panelFill; + } + } + + private bool m_fullPanelEdge = false; + public bool FullPanelEdge + { + get { return m_fullPanelEdge; } + set + { + if (m_fullPanelEdge == value) + return; + + m_fullPanelEdge = value; + RefreshChanges(); + } + } + + public DockDragHandler DragHandler + { + get { return m_dragHandler; } + } + + public DockPanel DockPanel + { + get { return DragHandler.DockPanel; } + } + + private DockPane m_dockPane = null; + public DockPane DockPane + { + get { return m_dockPane; } + internal set + { + if (m_dockPane == value) + return; + + DockPane oldDisplayingPane = DisplayingPane; + m_dockPane = value; + if (oldDisplayingPane != DisplayingPane) + RefreshChanges(); + } + } + + private IHitTest m_hitTest = null; + private IHitTest HitTestResult + { + get { return m_hitTest; } + set + { + if (m_hitTest == value) + return; + + if (m_hitTest != null) + m_hitTest.Status = DockStyle.None; + + m_hitTest = value; + } + } + + private DockPane DisplayingPane + { + get { return ShouldPaneDiamondVisible() ? DockPane : null; } + } + + private void RefreshChanges() + { + Region region = new Region(Rectangle.Empty); + Rectangle rectDockArea = FullPanelEdge ? DockPanel.DockArea : DockPanel.DocumentWindowBounds; + + rectDockArea = RectangleToClient(DockPanel.RectangleToScreen(rectDockArea)); + if (ShouldPanelIndicatorVisible(DockState.DockLeft)) + { + PanelLeft.Location = new Point(rectDockArea.X + _PanelIndicatorMargin, rectDockArea.Y + (rectDockArea.Height - PanelRight.Height) / 2); + PanelLeft.Visible = true; + region.Union(PanelLeft.Bounds); + } + else + PanelLeft.Visible = false; + + if (ShouldPanelIndicatorVisible(DockState.DockRight)) + { + PanelRight.Location = new Point(rectDockArea.X + rectDockArea.Width - PanelRight.Width - _PanelIndicatorMargin, rectDockArea.Y + (rectDockArea.Height - PanelRight.Height) / 2); + PanelRight.Visible = true; + region.Union(PanelRight.Bounds); + } + else + PanelRight.Visible = false; + + if (ShouldPanelIndicatorVisible(DockState.DockTop)) + { + PanelTop.Location = new Point(rectDockArea.X + (rectDockArea.Width - PanelTop.Width) / 2, rectDockArea.Y + _PanelIndicatorMargin); + PanelTop.Visible = true; + region.Union(PanelTop.Bounds); + } + else + PanelTop.Visible = false; + + if (ShouldPanelIndicatorVisible(DockState.DockBottom)) + { + PanelBottom.Location = new Point(rectDockArea.X + (rectDockArea.Width - PanelBottom.Width) / 2, rectDockArea.Y + rectDockArea.Height - PanelBottom.Height - _PanelIndicatorMargin); + PanelBottom.Visible = true; + region.Union(PanelBottom.Bounds); + } + else + PanelBottom.Visible = false; + + if (ShouldPanelIndicatorVisible(DockState.Document)) + { + Rectangle rectDocumentWindow = RectangleToClient(DockPanel.RectangleToScreen(DockPanel.DocumentWindowBounds)); + PanelFill.Location = new Point(rectDocumentWindow.X + (rectDocumentWindow.Width - PanelFill.Width) / 2, rectDocumentWindow.Y + (rectDocumentWindow.Height - PanelFill.Height) / 2); + PanelFill.Visible = true; + region.Union(PanelFill.Bounds); + } + else + PanelFill.Visible = false; + + if (ShouldPaneDiamondVisible()) + { + Rectangle rect = RectangleToClient(DockPane.RectangleToScreen(DockPane.ClientRectangle)); + PaneDiamond.Location = new Point(rect.Left + (rect.Width - PaneDiamond.Width) / 2, rect.Top + (rect.Height - PaneDiamond.Height) / 2); + PaneDiamond.Visible = true; + using (GraphicsPath graphicsPath = PaneIndicator.DisplayingGraphicsPath.Clone() as GraphicsPath) + { + Point[] pts = new Point[] + { + new Point(PaneDiamond.Left, PaneDiamond.Top), + new Point(PaneDiamond.Right, PaneDiamond.Top), + new Point(PaneDiamond.Left, PaneDiamond.Bottom) + }; + using (Matrix matrix = new Matrix(PaneDiamond.ClientRectangle, pts)) + { + graphicsPath.Transform(matrix); + } + region.Union(graphicsPath); + } + } + else + PaneDiamond.Visible = false; + + Region = region; + } + + private bool ShouldPanelIndicatorVisible(DockState dockState) + { + if (!Visible) + return false; + + if (DockPanel.DockWindows[dockState].Visible) + return false; + + return DragHandler.DragSource.IsDockStateValid(dockState); + } + + private bool ShouldPaneDiamondVisible() + { + if (DockPane == null) + return false; + + if (!DockPanel.AllowEndUserNestedDocking) + return false; + + return DragHandler.DragSource.CanDockTo(DockPane); + } + + public override void Show(bool bActivate) + { + base.Show(bActivate); + Bounds = SystemInformation.VirtualScreen; + RefreshChanges(); + } + + public void TestDrop() + { + Point pt = Control.MousePosition; + DockPane = DockHelper.PaneAtPoint(pt, DockPanel); + + if (TestDrop(PanelLeft, pt) != DockStyle.None) + HitTestResult = PanelLeft; + else if (TestDrop(PanelRight, pt) != DockStyle.None) + HitTestResult = PanelRight; + else if (TestDrop(PanelTop, pt) != DockStyle.None) + HitTestResult = PanelTop; + else if (TestDrop(PanelBottom, pt) != DockStyle.None) + HitTestResult = PanelBottom; + else if (TestDrop(PanelFill, pt) != DockStyle.None) + HitTestResult = PanelFill; + else if (TestDrop(PaneDiamond, pt) != DockStyle.None) + HitTestResult = PaneDiamond; + else + HitTestResult = null; + + if (HitTestResult != null) + { + if (HitTestResult is PaneIndicator) + DragHandler.Outline.Show(DockPane, HitTestResult.Status); + else + DragHandler.Outline.Show(DockPanel, HitTestResult.Status, FullPanelEdge); + } + } + + private static DockStyle TestDrop(IHitTest hitTest, Point pt) + { + return hitTest.Status = hitTest.HitTest(pt); + } + } + + private class DockOutline : DockOutlineBase + { + public DockOutline() + { + m_dragForm = new DragForm(); + SetDragForm(Rectangle.Empty); + DragForm.BackColor = SystemColors.ActiveCaption; + DragForm.Opacity = 0.5; + DragForm.Show(false); + } + + DragForm m_dragForm; + private DragForm DragForm + { + get { return m_dragForm; } + } + + protected override void OnShow() + { + CalculateRegion(); + } + + protected override void OnClose() + { + DragForm.Close(); + } + + private void CalculateRegion() + { + if (SameAsOldValue) + return; + + if (!FloatWindowBounds.IsEmpty) + SetOutline(FloatWindowBounds); + else if (DockTo is DockPanel) + SetOutline(DockTo as DockPanel, Dock, (ContentIndex != 0)); + else if (DockTo is DockPane) + SetOutline(DockTo as DockPane, Dock, ContentIndex); + else + SetOutline(); + } + + private void SetOutline() + { + SetDragForm(Rectangle.Empty); + } + + private void SetOutline(Rectangle floatWindowBounds) + { + SetDragForm(floatWindowBounds); + } + + private void SetOutline(DockPanel dockPanel, DockStyle dock, bool fullPanelEdge) + { + Rectangle rect = fullPanelEdge ? dockPanel.DockArea : dockPanel.DocumentWindowBounds; + rect.Location = dockPanel.PointToScreen(rect.Location); + if (dock == DockStyle.Top) + { + int height = dockPanel.GetDockWindowSize(DockState.DockTop); + rect = new Rectangle(rect.X, rect.Y, rect.Width, height); + } + else if (dock == DockStyle.Bottom) + { + int height = dockPanel.GetDockWindowSize(DockState.DockBottom); + rect = new Rectangle(rect.X, rect.Bottom - height, rect.Width, height); + } + else if (dock == DockStyle.Left) + { + int width = dockPanel.GetDockWindowSize(DockState.DockLeft); + rect = new Rectangle(rect.X, rect.Y, width, rect.Height); + } + else if (dock == DockStyle.Right) + { + int width = dockPanel.GetDockWindowSize(DockState.DockRight); + rect = new Rectangle(rect.Right - width, rect.Y, width, rect.Height); + } + else if (dock == DockStyle.Fill) + { + rect = dockPanel.DocumentWindowBounds; + rect.Location = dockPanel.PointToScreen(rect.Location); + } + + SetDragForm(rect); + } + + private void SetOutline(DockPane pane, DockStyle dock, int contentIndex) + { + if (dock != DockStyle.Fill) + { + Rectangle rect = pane.DisplayingRectangle; + if (dock == DockStyle.Right) + rect.X += rect.Width / 2; + if (dock == DockStyle.Bottom) + rect.Y += rect.Height / 2; + if (dock == DockStyle.Left || dock == DockStyle.Right) + rect.Width -= rect.Width / 2; + if (dock == DockStyle.Top || dock == DockStyle.Bottom) + rect.Height -= rect.Height / 2; + rect.Location = pane.PointToScreen(rect.Location); + + SetDragForm(rect); + } + else if (contentIndex == -1) + { + Rectangle rect = pane.DisplayingRectangle; + rect.Location = pane.PointToScreen(rect.Location); + SetDragForm(rect); + } + else + { + using (GraphicsPath path = pane.TabStripControl.GetOutline(contentIndex)) + { + RectangleF rectF = path.GetBounds(); + Rectangle rect = new Rectangle((int)rectF.X, (int)rectF.Y, (int)rectF.Width, (int)rectF.Height); + using (Matrix matrix = new Matrix(rect, new Point[] { new Point(0, 0), new Point(rect.Width, 0), new Point(0, rect.Height) })) + { + path.Transform(matrix); + } + Region region = new Region(path); + SetDragForm(rect, region); + } + } + } + + private void SetDragForm(Rectangle rect) + { + DragForm.Bounds = rect; + if (rect == Rectangle.Empty) + DragForm.Region = new Region(Rectangle.Empty); + else if (DragForm.Region != null) + DragForm.Region = null; + } + + private void SetDragForm(Rectangle rect, Region region) + { + DragForm.Bounds = rect; + DragForm.Region = region; + } + } + + public DockDragHandler(DockPanel panel) + : base(panel) + { + } + + public new IDockDragSource DragSource + { + get { return base.DragSource as IDockDragSource; } + set { base.DragSource = value; } + } + + private DockOutlineBase m_outline; + public DockOutlineBase Outline + { + get { return m_outline; } + private set { m_outline = value; } + } + + private DockIndicator m_indicator; + private DockIndicator Indicator + { + get { return m_indicator; } + set { m_indicator = value; } + } + + private Rectangle m_floatOutlineBounds; + private Rectangle FloatOutlineBounds + { + get { return m_floatOutlineBounds; } + set { m_floatOutlineBounds = value; } + } + + public void BeginDrag(IDockDragSource dragSource) + { + DragSource = dragSource; + + if (!BeginDrag()) + { + DragSource = null; + return; + } + + Outline = new DockOutline(); + Indicator = new DockIndicator(this); + Indicator.Show(false); + + FloatOutlineBounds = DragSource.BeginDrag(StartMousePosition); + } + + protected override void OnDragging() + { + TestDrop(); + } + + protected override void OnEndDrag(bool abort) + { + DockPanel.SuspendLayout(true); + + Outline.Close(); + Indicator.Close(); + + EndDrag(abort); + + // Queue a request to layout all children controls + DockPanel.PerformMdiClientLayout(); + + DockPanel.ResumeLayout(true, true); + + DragSource = null; + } + + private void TestDrop() + { + Outline.FlagTestDrop = false; + + Indicator.FullPanelEdge = ((Control.ModifierKeys & Keys.Shift) != 0); + + if ((Control.ModifierKeys & Keys.Control) == 0) + { + Indicator.TestDrop(); + + if (!Outline.FlagTestDrop) + { + DockPane pane = DockHelper.PaneAtPoint(Control.MousePosition, DockPanel); + if (pane != null && DragSource.IsDockStateValid(pane.DockState)) + pane.TestDrop(DragSource, Outline); + } + + if (!Outline.FlagTestDrop && DragSource.IsDockStateValid(DockState.Float)) + { + FloatWindow floatWindow = DockHelper.FloatWindowAtPoint(Control.MousePosition, DockPanel); + if (floatWindow != null) + floatWindow.TestDrop(DragSource, Outline); + } + } + else + Indicator.DockPane = DockHelper.PaneAtPoint(Control.MousePosition, DockPanel); + + if (!Outline.FlagTestDrop) + { + if (DragSource.IsDockStateValid(DockState.Float)) + { + Rectangle rect = FloatOutlineBounds; + rect.Offset(Control.MousePosition.X - StartMousePosition.X, Control.MousePosition.Y - StartMousePosition.Y); + Outline.Show(rect); + } + } + + if (!Outline.FlagTestDrop) + { + Cursor.Current = Cursors.No; + Outline.Show(); + } + else + Cursor.Current = DragControl.Cursor; + } + + private void EndDrag(bool abort) + { + if (abort) + return; + + if (!Outline.FloatWindowBounds.IsEmpty) + DragSource.FloatAt(Outline.FloatWindowBounds); + else if (Outline.DockTo is DockPane) + { + DockPane pane = Outline.DockTo as DockPane; + DragSource.DockTo(pane, Outline.Dock, Outline.ContentIndex); + } + else if (Outline.DockTo is DockPanel) + { + DockPanel panel = Outline.DockTo as DockPanel; + panel.UpdateDockWindowZOrder(Outline.Dock, Outline.FlagFullEdge); + DragSource.DockTo(panel, Outline.Dock); + } + } + } + + private DockDragHandler m_dockDragHandler = null; + private DockDragHandler GetDockDragHandler() + { + if (m_dockDragHandler == null) + m_dockDragHandler = new DockDragHandler(this); + return m_dockDragHandler; + } + + internal void BeginDrag(IDockDragSource dragSource) + { + GetDockDragHandler().BeginDrag(dragSource); + } + } +} diff --git a/trunk/Docking/DockPanel.DragHandler.cs b/source/Docking/DockPanel.DragHandler.cs similarity index 96% rename from trunk/Docking/DockPanel.DragHandler.cs rename to source/Docking/DockPanel.DragHandler.cs index 370572a..8f44aa0 100644 --- a/trunk/Docking/DockPanel.DragHandler.cs +++ b/source/Docking/DockPanel.DragHandler.cs @@ -1,135 +1,135 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Windows.Forms; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.ComponentModel; - -namespace LSLEditor.Docking -{ - partial class DockPanel - { - /// - /// DragHandlerBase is the base class for drag handlers. The derived class should: - /// 1. Define its public method BeginDrag. From within this public BeginDrag method, - /// DragHandlerBase.BeginDrag should be called to initialize the mouse capture - /// and message filtering. - /// 2. Override the OnDragging and OnEndDrag methods. - /// - private abstract class DragHandlerBase : NativeWindow, IMessageFilter - { - protected DragHandlerBase() - { - } - - protected abstract Control DragControl - { - get; - } - - private Point m_startMousePosition = Point.Empty; - protected Point StartMousePosition - { - get { return m_startMousePosition; } - private set { m_startMousePosition = value; } - } - - protected bool BeginDrag() - { - // Avoid re-entrance; - lock (this) - { - if (DragControl == null) - return false; - - StartMousePosition = Control.MousePosition; - - if (!NativeMethods.DragDetect(DragControl.Handle, StartMousePosition)) - return false; - - DragControl.FindForm().Capture = true; - AssignHandle(DragControl.FindForm().Handle); - Application.AddMessageFilter(this); - return true; - } - } - - protected abstract void OnDragging(); - - protected abstract void OnEndDrag(bool abort); - - private void EndDrag(bool abort) - { - ReleaseHandle(); - Application.RemoveMessageFilter(this); - DragControl.FindForm().Capture = false; - - OnEndDrag(abort); - } - - bool IMessageFilter.PreFilterMessage(ref Message m) - { - if (m.Msg == (int)Win32.Msgs.WM_MOUSEMOVE) - OnDragging(); - else if (m.Msg == (int)Win32.Msgs.WM_LBUTTONUP) - EndDrag(false); - else if (m.Msg == (int)Win32.Msgs.WM_CAPTURECHANGED) - EndDrag(true); - else if (m.Msg == (int)Win32.Msgs.WM_KEYDOWN && (int)m.WParam == (int)Keys.Escape) - EndDrag(true); - - return OnPreFilterMessage(ref m); - } - - protected virtual bool OnPreFilterMessage(ref Message m) - { - return false; - } - - protected sealed override void WndProc(ref Message m) - { - if (m.Msg == (int)Win32.Msgs.WM_CANCELMODE || m.Msg == (int)Win32.Msgs.WM_CAPTURECHANGED) - EndDrag(true); - - base.WndProc(ref m); - } - } - - private abstract class DragHandler : DragHandlerBase - { - private DockPanel m_dockPanel; - - protected DragHandler(DockPanel dockPanel) - { - m_dockPanel = dockPanel; - } - - public DockPanel DockPanel - { - get { return m_dockPanel; } - } - - private IDragSource m_dragSource; - protected IDragSource DragSource - { - get { return m_dragSource; } - set { m_dragSource = value; } - } - - protected sealed override Control DragControl - { - get { return DragSource == null ? null : DragSource.DragControl; } - } - - protected sealed override bool OnPreFilterMessage(ref Message m) - { - if ((m.Msg == (int)Win32.Msgs.WM_KEYDOWN || m.Msg == (int)Win32.Msgs.WM_KEYUP) && - ((int)m.WParam == (int)Keys.ControlKey || (int)m.WParam == (int)Keys.ShiftKey)) - OnDragging(); - - return base.OnPreFilterMessage(ref m); - } - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.ComponentModel; + +namespace LSLEditor.Docking +{ + partial class DockPanel + { + /// + /// DragHandlerBase is the base class for drag handlers. The derived class should: + /// 1. Define its public method BeginDrag. From within this public BeginDrag method, + /// DragHandlerBase.BeginDrag should be called to initialize the mouse capture + /// and message filtering. + /// 2. Override the OnDragging and OnEndDrag methods. + /// + private abstract class DragHandlerBase : NativeWindow, IMessageFilter + { + protected DragHandlerBase() + { + } + + protected abstract Control DragControl + { + get; + } + + private Point m_startMousePosition = Point.Empty; + protected Point StartMousePosition + { + get { return m_startMousePosition; } + private set { m_startMousePosition = value; } + } + + protected bool BeginDrag() + { + // Avoid re-entrance; + lock (this) + { + if (DragControl == null) + return false; + + StartMousePosition = Control.MousePosition; + + if (!NativeMethods.DragDetect(DragControl.Handle, StartMousePosition)) + return false; + + DragControl.FindForm().Capture = true; + AssignHandle(DragControl.FindForm().Handle); + Application.AddMessageFilter(this); + return true; + } + } + + protected abstract void OnDragging(); + + protected abstract void OnEndDrag(bool abort); + + private void EndDrag(bool abort) + { + ReleaseHandle(); + Application.RemoveMessageFilter(this); + DragControl.FindForm().Capture = false; + + OnEndDrag(abort); + } + + bool IMessageFilter.PreFilterMessage(ref Message m) + { + if (m.Msg == (int)Win32.Msgs.WM_MOUSEMOVE) + OnDragging(); + else if (m.Msg == (int)Win32.Msgs.WM_LBUTTONUP) + EndDrag(false); + else if (m.Msg == (int)Win32.Msgs.WM_CAPTURECHANGED) + EndDrag(true); + else if (m.Msg == (int)Win32.Msgs.WM_KEYDOWN && (int)m.WParam == (int)Keys.Escape) + EndDrag(true); + + return OnPreFilterMessage(ref m); + } + + protected virtual bool OnPreFilterMessage(ref Message m) + { + return false; + } + + protected sealed override void WndProc(ref Message m) + { + if (m.Msg == (int)Win32.Msgs.WM_CANCELMODE || m.Msg == (int)Win32.Msgs.WM_CAPTURECHANGED) + EndDrag(true); + + base.WndProc(ref m); + } + } + + private abstract class DragHandler : DragHandlerBase + { + private DockPanel m_dockPanel; + + protected DragHandler(DockPanel dockPanel) + { + m_dockPanel = dockPanel; + } + + public DockPanel DockPanel + { + get { return m_dockPanel; } + } + + private IDragSource m_dragSource; + protected IDragSource DragSource + { + get { return m_dragSource; } + set { m_dragSource = value; } + } + + protected sealed override Control DragControl + { + get { return DragSource == null ? null : DragSource.DragControl; } + } + + protected sealed override bool OnPreFilterMessage(ref Message m) + { + if ((m.Msg == (int)Win32.Msgs.WM_KEYDOWN || m.Msg == (int)Win32.Msgs.WM_KEYUP) && + ((int)m.WParam == (int)Keys.ControlKey || (int)m.WParam == (int)Keys.ShiftKey)) + OnDragging(); + + return base.OnPreFilterMessage(ref m); + } + } + } +} diff --git a/trunk/Docking/DockPanel.FocusManager.cs b/source/Docking/DockPanel.FocusManager.cs similarity index 97% rename from trunk/Docking/DockPanel.FocusManager.cs rename to source/Docking/DockPanel.FocusManager.cs index d967b58..b320dce 100644 --- a/trunk/Docking/DockPanel.FocusManager.cs +++ b/source/Docking/DockPanel.FocusManager.cs @@ -1,568 +1,568 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.ComponentModel; -using System.Runtime.InteropServices; -using System.Windows.Forms; -using System.Diagnostics.CodeAnalysis; - -namespace LSLEditor.Docking -{ - internal interface IContentFocusManager - { - void Activate(IDockContent content); - void GiveUpFocus(IDockContent content); - void AddToList(IDockContent content); - void RemoveFromList(IDockContent content); - } - - partial class DockPanel - { - private interface IFocusManager - { - void SuspendFocusTracking(); - void ResumeFocusTracking(); - bool IsFocusTrackingSuspended { get; } - IDockContent ActiveContent { get; } - DockPane ActivePane { get; } - IDockContent ActiveDocument { get; } - DockPane ActiveDocumentPane { get; } - } - - private class FocusManagerImpl : Component, IContentFocusManager, IFocusManager - { - private class HookEventArgs : EventArgs - { - [SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] - public int HookCode; - [SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] - public IntPtr wParam; - public IntPtr lParam; - } - - private class LocalWindowsHook : IDisposable - { - // Internal properties - private IntPtr m_hHook = IntPtr.Zero; - private NativeMethods.HookProc m_filterFunc = null; - private Win32.HookType m_hookType; - - // Event delegate - public delegate void HookEventHandler(object sender, HookEventArgs e); - - // Event: HookInvoked - public event HookEventHandler HookInvoked; - protected void OnHookInvoked(HookEventArgs e) - { - if (HookInvoked != null) - HookInvoked(this, e); - } - - public LocalWindowsHook(Win32.HookType hook) - { - m_hookType = hook; - m_filterFunc = new NativeMethods.HookProc(this.CoreHookProc); - } - - // Default filter function - public IntPtr CoreHookProc(int code, IntPtr wParam, IntPtr lParam) - { - if (code < 0) - return NativeMethods.CallNextHookEx(m_hHook, code, wParam, lParam); - - // Let clients determine what to do - HookEventArgs e = new HookEventArgs(); - e.HookCode = code; - e.wParam = wParam; - e.lParam = lParam; - OnHookInvoked(e); - - // Yield to the next hook in the chain - return NativeMethods.CallNextHookEx(m_hHook, code, wParam, lParam); - } - - // Install the hook - public void Install() - { - if (m_hHook != IntPtr.Zero) - Uninstall(); - - int threadId = NativeMethods.GetCurrentThreadId(); - m_hHook = NativeMethods.SetWindowsHookEx(m_hookType, m_filterFunc, IntPtr.Zero, threadId); - } - - // Uninstall the hook - public void Uninstall() - { - if (m_hHook != IntPtr.Zero) - { - NativeMethods.UnhookWindowsHookEx(m_hHook); - m_hHook = IntPtr.Zero; - } - } - - ~LocalWindowsHook() - { - Dispose(false); - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - Uninstall(); - } - } - - private LocalWindowsHook m_localWindowsHook; - private LocalWindowsHook.HookEventHandler m_hookEventHandler; - - public FocusManagerImpl(DockPanel dockPanel) - { - m_dockPanel = dockPanel; - m_localWindowsHook = new LocalWindowsHook(Win32.HookType.WH_CALLWNDPROCRET); - m_hookEventHandler = new LocalWindowsHook.HookEventHandler(HookEventHandler); - m_localWindowsHook.HookInvoked += m_hookEventHandler; - m_localWindowsHook.Install(); - } - - private DockPanel m_dockPanel; - public DockPanel DockPanel - { - get { return m_dockPanel; } - } - - private bool m_disposed = false; - protected override void Dispose(bool disposing) - { - lock (this) - { - if (!m_disposed && disposing) - { - m_localWindowsHook.Dispose(); - m_disposed = true; - } - - base.Dispose(disposing); - } - } - - private IDockContent m_contentActivating = null; - private IDockContent ContentActivating - { - get { return m_contentActivating; } - set { m_contentActivating = value; } - } - - public void Activate(IDockContent content) - { - if (IsFocusTrackingSuspended) - { - ContentActivating = content; - return; - } - - if (content == null) - return; - DockContentHandler handler = content.DockHandler; - if (handler.Form.IsDisposed) - return; // Should not reach here, but better than throwing an exception - if (ContentContains(content, handler.ActiveWindowHandle)) - NativeMethods.SetFocus(handler.ActiveWindowHandle); - if (!handler.Form.ContainsFocus) - { - if (!handler.Form.SelectNextControl(handler.Form.ActiveControl, true, true, true, true)) - // Since DockContent Form is not selectalbe, use Win32 SetFocus instead - NativeMethods.SetFocus(handler.Form.Handle); - } - } - - private List m_listContent = new List(); - private List ListContent - { - get { return m_listContent; } - } - public void AddToList(IDockContent content) - { - if (ListContent.Contains(content) || IsInActiveList(content)) - return; - - ListContent.Add(content); - } - - public void RemoveFromList(IDockContent content) - { - if (IsInActiveList(content)) - RemoveFromActiveList(content); - if (ListContent.Contains(content)) - ListContent.Remove(content); - } - - private IDockContent m_lastActiveContent = null; - private IDockContent LastActiveContent - { - get { return m_lastActiveContent; } - set { m_lastActiveContent = value; } - } - - private bool IsInActiveList(IDockContent content) - { - return !(content.DockHandler.NextActive == null && LastActiveContent != content); - } - - private void AddLastToActiveList(IDockContent content) - { - IDockContent last = LastActiveContent; - if (last == content) - return; - - DockContentHandler handler = content.DockHandler; - - if (IsInActiveList(content)) - RemoveFromActiveList(content); - - handler.PreviousActive = last; - handler.NextActive = null; - LastActiveContent = content; - if (last != null) - last.DockHandler.NextActive = LastActiveContent; - } - - private void RemoveFromActiveList(IDockContent content) - { - if (LastActiveContent == content) - LastActiveContent = content.DockHandler.PreviousActive; - - IDockContent prev = content.DockHandler.PreviousActive; - IDockContent next = content.DockHandler.NextActive; - if (prev != null) - prev.DockHandler.NextActive = next; - if (next != null) - next.DockHandler.PreviousActive = prev; - - content.DockHandler.PreviousActive = null; - content.DockHandler.NextActive = null; - } - - public void GiveUpFocus(IDockContent content) - { - DockContentHandler handler = content.DockHandler; - if (!handler.Form.ContainsFocus) - return; - - if (IsFocusTrackingSuspended) - DockPanel.DummyControl.Focus(); - - if (LastActiveContent == content) - { - IDockContent prev = handler.PreviousActive; - if (prev != null) - Activate(prev); - else if (ListContent.Count > 0) - Activate(ListContent[ListContent.Count - 1]); - } - else if (LastActiveContent != null) - Activate(LastActiveContent); - else if (ListContent.Count > 0) - Activate(ListContent[ListContent.Count - 1]); - } - - private static bool ContentContains(IDockContent content, IntPtr hWnd) - { - Control control = Control.FromChildHandle(hWnd); - for (Control parent = control; parent != null; parent = parent.Parent) - if (parent == content.DockHandler.Form) - return true; - - return false; - } - - private int m_countSuspendFocusTracking = 0; - public void SuspendFocusTracking() - { - m_countSuspendFocusTracking++; - m_localWindowsHook.HookInvoked -= m_hookEventHandler; - } - - public void ResumeFocusTracking() - { - if (m_countSuspendFocusTracking > 0) - m_countSuspendFocusTracking--; - - if (m_countSuspendFocusTracking == 0) - { - if (ContentActivating != null) - { - Activate(ContentActivating); - ContentActivating = null; - } - m_localWindowsHook.HookInvoked += m_hookEventHandler; - if (!InRefreshActiveWindow) - RefreshActiveWindow(); - } - } - - public bool IsFocusTrackingSuspended - { - get { return m_countSuspendFocusTracking != 0; } - } - - // Windows hook event handler - private void HookEventHandler(object sender, HookEventArgs e) - { - Win32.Msgs msg = (Win32.Msgs)Marshal.ReadInt32(e.lParam, IntPtr.Size * 3); - - if (msg == Win32.Msgs.WM_KILLFOCUS) - { - IntPtr wParam = Marshal.ReadIntPtr(e.lParam, IntPtr.Size * 2); - DockPane pane = GetPaneFromHandle(wParam); - if (pane == null) - RefreshActiveWindow(); - } - else if (msg == Win32.Msgs.WM_SETFOCUS) - RefreshActiveWindow(); - } - - private DockPane GetPaneFromHandle(IntPtr hWnd) - { - Control control = Control.FromChildHandle(hWnd); - - IDockContent content = null; - DockPane pane = null; - for (; control != null; control = control.Parent) - { - content = control as IDockContent; - if (content != null) - content.DockHandler.ActiveWindowHandle = hWnd; - - if (content != null && content.DockHandler.DockPanel == DockPanel) - return content.DockHandler.Pane; - - pane = control as DockPane; - if (pane != null && pane.DockPanel == DockPanel) - break; - } - - return pane; - } - - private bool m_inRefreshActiveWindow = false; - private bool InRefreshActiveWindow - { - get { return m_inRefreshActiveWindow; } - } - - private void RefreshActiveWindow() - { - SuspendFocusTracking(); - m_inRefreshActiveWindow = true; - - DockPane oldActivePane = ActivePane; - IDockContent oldActiveContent = ActiveContent; - IDockContent oldActiveDocument = ActiveDocument; - - SetActivePane(); - SetActiveContent(); - SetActiveDocumentPane(); - SetActiveDocument(); - DockPanel.AutoHideWindow.RefreshActivePane(); - - ResumeFocusTracking(); - m_inRefreshActiveWindow = false; - - if (oldActiveContent != ActiveContent) - DockPanel.OnActiveContentChanged(EventArgs.Empty); - if (oldActiveDocument != ActiveDocument) - DockPanel.OnActiveDocumentChanged(EventArgs.Empty); - if (oldActivePane != ActivePane) - DockPanel.OnActivePaneChanged(EventArgs.Empty); - } - - private DockPane m_activePane = null; - public DockPane ActivePane - { - get { return m_activePane; } - } - - private void SetActivePane() - { - DockPane value = GetPaneFromHandle(NativeMethods.GetFocus()); - if (m_activePane == value) - return; - - if (m_activePane != null) - m_activePane.SetIsActivated(false); - - m_activePane = value; - - if (m_activePane != null) - m_activePane.SetIsActivated(true); - } - - private IDockContent m_activeContent = null; - public IDockContent ActiveContent - { - get { return m_activeContent; } - } - - internal void SetActiveContent() - { - IDockContent value = ActivePane == null ? null : ActivePane.ActiveContent; - - if (m_activeContent == value) - return; - - if (m_activeContent != null) - m_activeContent.DockHandler.IsActivated = false; - - m_activeContent = value; - - if (m_activeContent != null) - { - m_activeContent.DockHandler.IsActivated = true; - if (!DockHelper.IsDockStateAutoHide((m_activeContent.DockHandler.DockState))) - AddLastToActiveList(m_activeContent); - } - } - - private DockPane m_activeDocumentPane = null; - public DockPane ActiveDocumentPane - { - get { return m_activeDocumentPane; } - } - - private void SetActiveDocumentPane() - { - DockPane value = null; - - if (ActivePane != null && ActivePane.DockState == DockState.Document) - value = ActivePane; - - if (value == null && DockPanel.DockWindows != null) - { - if (ActiveDocumentPane == null) - value = DockPanel.DockWindows[DockState.Document].DefaultPane; - else if (ActiveDocumentPane.DockPanel != DockPanel || ActiveDocumentPane.DockState != DockState.Document) - value = DockPanel.DockWindows[DockState.Document].DefaultPane; - else - value = ActiveDocumentPane; - } - - if (m_activeDocumentPane == value) - return; - - if (m_activeDocumentPane != null) - m_activeDocumentPane.SetIsActiveDocumentPane(false); - - m_activeDocumentPane = value; - - if (m_activeDocumentPane != null) - m_activeDocumentPane.SetIsActiveDocumentPane(true); - } - - private IDockContent m_activeDocument = null; - public IDockContent ActiveDocument - { - get { return m_activeDocument; } - } - - private void SetActiveDocument() - { - IDockContent value = ActiveDocumentPane == null ? null : ActiveDocumentPane.ActiveContent; - - if (m_activeDocument == value) - return; - - m_activeDocument = value; - } - } - - private IFocusManager FocusManager - { - get { return m_focusManager; } - } - - internal IContentFocusManager ContentFocusManager - { - get { return m_focusManager; } - } - - internal void SaveFocus() - { - DummyControl.Focus(); - } - - [Browsable(false)] - public IDockContent ActiveContent - { - get { return FocusManager.ActiveContent; } - } - - [Browsable(false)] - public DockPane ActivePane - { - get { return FocusManager.ActivePane; } - } - - [Browsable(false)] - public IDockContent ActiveDocument - { - get { return FocusManager.ActiveDocument; } - } - - [Browsable(false)] - public DockPane ActiveDocumentPane - { - get { return FocusManager.ActiveDocumentPane; } - } - - private static readonly object ActiveDocumentChangedEvent = new object(); - [LocalizedCategory("Category_PropertyChanged")] - [LocalizedDescription("DockPanel_ActiveDocumentChanged_Description")] - public event EventHandler ActiveDocumentChanged - { - add { Events.AddHandler(ActiveDocumentChangedEvent, value); } - remove { Events.RemoveHandler(ActiveDocumentChangedEvent, value); } - } - protected virtual void OnActiveDocumentChanged(EventArgs e) - { - EventHandler handler = (EventHandler)Events[ActiveDocumentChangedEvent]; - if (handler != null) - handler(this, e); - } - - private static readonly object ActiveContentChangedEvent = new object(); - [LocalizedCategory("Category_PropertyChanged")] - [LocalizedDescription("DockPanel_ActiveContentChanged_Description")] - public event EventHandler ActiveContentChanged - { - add { Events.AddHandler(ActiveContentChangedEvent, value); } - remove { Events.RemoveHandler(ActiveContentChangedEvent, value); } - } - protected void OnActiveContentChanged(EventArgs e) - { - EventHandler handler = (EventHandler)Events[ActiveContentChangedEvent]; - if (handler != null) - handler(this, e); - } - - private static readonly object ActivePaneChangedEvent = new object(); - [LocalizedCategory("Category_PropertyChanged")] - [LocalizedDescription("DockPanel_ActivePaneChanged_Description")] - public event EventHandler ActivePaneChanged - { - add { Events.AddHandler(ActivePaneChangedEvent, value); } - remove { Events.RemoveHandler(ActivePaneChangedEvent, value); } - } - protected virtual void OnActivePaneChanged(EventArgs e) - { - EventHandler handler = (EventHandler)Events[ActivePaneChangedEvent]; - if (handler != null) - handler(this, e); - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using System.Diagnostics.CodeAnalysis; + +namespace LSLEditor.Docking +{ + internal interface IContentFocusManager + { + void Activate(IDockContent content); + void GiveUpFocus(IDockContent content); + void AddToList(IDockContent content); + void RemoveFromList(IDockContent content); + } + + partial class DockPanel + { + private interface IFocusManager + { + void SuspendFocusTracking(); + void ResumeFocusTracking(); + bool IsFocusTrackingSuspended { get; } + IDockContent ActiveContent { get; } + DockPane ActivePane { get; } + IDockContent ActiveDocument { get; } + DockPane ActiveDocumentPane { get; } + } + + private class FocusManagerImpl : Component, IContentFocusManager, IFocusManager + { + private class HookEventArgs : EventArgs + { + [SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + public int HookCode; + [SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + public IntPtr wParam; + public IntPtr lParam; + } + + private class LocalWindowsHook : IDisposable + { + // Internal properties + private IntPtr m_hHook = IntPtr.Zero; + private NativeMethods.HookProc m_filterFunc = null; + private Win32.HookType m_hookType; + + // Event delegate + public delegate void HookEventHandler(object sender, HookEventArgs e); + + // Event: HookInvoked + public event HookEventHandler HookInvoked; + protected void OnHookInvoked(HookEventArgs e) + { + if (HookInvoked != null) + HookInvoked(this, e); + } + + public LocalWindowsHook(Win32.HookType hook) + { + m_hookType = hook; + m_filterFunc = new NativeMethods.HookProc(this.CoreHookProc); + } + + // Default filter function + public IntPtr CoreHookProc(int code, IntPtr wParam, IntPtr lParam) + { + if (code < 0) + return NativeMethods.CallNextHookEx(m_hHook, code, wParam, lParam); + + // Let clients determine what to do + HookEventArgs e = new HookEventArgs(); + e.HookCode = code; + e.wParam = wParam; + e.lParam = lParam; + OnHookInvoked(e); + + // Yield to the next hook in the chain + return NativeMethods.CallNextHookEx(m_hHook, code, wParam, lParam); + } + + // Install the hook + public void Install() + { + if (m_hHook != IntPtr.Zero) + Uninstall(); + + int threadId = NativeMethods.GetCurrentThreadId(); + m_hHook = NativeMethods.SetWindowsHookEx(m_hookType, m_filterFunc, IntPtr.Zero, threadId); + } + + // Uninstall the hook + public void Uninstall() + { + if (m_hHook != IntPtr.Zero) + { + NativeMethods.UnhookWindowsHookEx(m_hHook); + m_hHook = IntPtr.Zero; + } + } + + ~LocalWindowsHook() + { + Dispose(false); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + Uninstall(); + } + } + + private LocalWindowsHook m_localWindowsHook; + private LocalWindowsHook.HookEventHandler m_hookEventHandler; + + public FocusManagerImpl(DockPanel dockPanel) + { + m_dockPanel = dockPanel; + m_localWindowsHook = new LocalWindowsHook(Win32.HookType.WH_CALLWNDPROCRET); + m_hookEventHandler = new LocalWindowsHook.HookEventHandler(HookEventHandler); + m_localWindowsHook.HookInvoked += m_hookEventHandler; + m_localWindowsHook.Install(); + } + + private DockPanel m_dockPanel; + public DockPanel DockPanel + { + get { return m_dockPanel; } + } + + private bool m_disposed = false; + protected override void Dispose(bool disposing) + { + lock (this) + { + if (!m_disposed && disposing) + { + m_localWindowsHook.Dispose(); + m_disposed = true; + } + + base.Dispose(disposing); + } + } + + private IDockContent m_contentActivating = null; + private IDockContent ContentActivating + { + get { return m_contentActivating; } + set { m_contentActivating = value; } + } + + public void Activate(IDockContent content) + { + if (IsFocusTrackingSuspended) + { + ContentActivating = content; + return; + } + + if (content == null) + return; + DockContentHandler handler = content.DockHandler; + if (handler.Form.IsDisposed) + return; // Should not reach here, but better than throwing an exception + if (ContentContains(content, handler.ActiveWindowHandle)) + NativeMethods.SetFocus(handler.ActiveWindowHandle); + if (!handler.Form.ContainsFocus) + { + if (!handler.Form.SelectNextControl(handler.Form.ActiveControl, true, true, true, true)) + // Since DockContent Form is not selectalbe, use Win32 SetFocus instead + NativeMethods.SetFocus(handler.Form.Handle); + } + } + + private List m_listContent = new List(); + private List ListContent + { + get { return m_listContent; } + } + public void AddToList(IDockContent content) + { + if (ListContent.Contains(content) || IsInActiveList(content)) + return; + + ListContent.Add(content); + } + + public void RemoveFromList(IDockContent content) + { + if (IsInActiveList(content)) + RemoveFromActiveList(content); + if (ListContent.Contains(content)) + ListContent.Remove(content); + } + + private IDockContent m_lastActiveContent = null; + private IDockContent LastActiveContent + { + get { return m_lastActiveContent; } + set { m_lastActiveContent = value; } + } + + private bool IsInActiveList(IDockContent content) + { + return !(content.DockHandler.NextActive == null && LastActiveContent != content); + } + + private void AddLastToActiveList(IDockContent content) + { + IDockContent last = LastActiveContent; + if (last == content) + return; + + DockContentHandler handler = content.DockHandler; + + if (IsInActiveList(content)) + RemoveFromActiveList(content); + + handler.PreviousActive = last; + handler.NextActive = null; + LastActiveContent = content; + if (last != null) + last.DockHandler.NextActive = LastActiveContent; + } + + private void RemoveFromActiveList(IDockContent content) + { + if (LastActiveContent == content) + LastActiveContent = content.DockHandler.PreviousActive; + + IDockContent prev = content.DockHandler.PreviousActive; + IDockContent next = content.DockHandler.NextActive; + if (prev != null) + prev.DockHandler.NextActive = next; + if (next != null) + next.DockHandler.PreviousActive = prev; + + content.DockHandler.PreviousActive = null; + content.DockHandler.NextActive = null; + } + + public void GiveUpFocus(IDockContent content) + { + DockContentHandler handler = content.DockHandler; + if (!handler.Form.ContainsFocus) + return; + + if (IsFocusTrackingSuspended) + DockPanel.DummyControl.Focus(); + + if (LastActiveContent == content) + { + IDockContent prev = handler.PreviousActive; + if (prev != null) + Activate(prev); + else if (ListContent.Count > 0) + Activate(ListContent[ListContent.Count - 1]); + } + else if (LastActiveContent != null) + Activate(LastActiveContent); + else if (ListContent.Count > 0) + Activate(ListContent[ListContent.Count - 1]); + } + + private static bool ContentContains(IDockContent content, IntPtr hWnd) + { + Control control = Control.FromChildHandle(hWnd); + for (Control parent = control; parent != null; parent = parent.Parent) + if (parent == content.DockHandler.Form) + return true; + + return false; + } + + private int m_countSuspendFocusTracking = 0; + public void SuspendFocusTracking() + { + m_countSuspendFocusTracking++; + m_localWindowsHook.HookInvoked -= m_hookEventHandler; + } + + public void ResumeFocusTracking() + { + if (m_countSuspendFocusTracking > 0) + m_countSuspendFocusTracking--; + + if (m_countSuspendFocusTracking == 0) + { + if (ContentActivating != null) + { + Activate(ContentActivating); + ContentActivating = null; + } + m_localWindowsHook.HookInvoked += m_hookEventHandler; + if (!InRefreshActiveWindow) + RefreshActiveWindow(); + } + } + + public bool IsFocusTrackingSuspended + { + get { return m_countSuspendFocusTracking != 0; } + } + + // Windows hook event handler + private void HookEventHandler(object sender, HookEventArgs e) + { + Win32.Msgs msg = (Win32.Msgs)Marshal.ReadInt32(e.lParam, IntPtr.Size * 3); + + if (msg == Win32.Msgs.WM_KILLFOCUS) + { + IntPtr wParam = Marshal.ReadIntPtr(e.lParam, IntPtr.Size * 2); + DockPane pane = GetPaneFromHandle(wParam); + if (pane == null) + RefreshActiveWindow(); + } + else if (msg == Win32.Msgs.WM_SETFOCUS) + RefreshActiveWindow(); + } + + private DockPane GetPaneFromHandle(IntPtr hWnd) + { + Control control = Control.FromChildHandle(hWnd); + + IDockContent content = null; + DockPane pane = null; + for (; control != null; control = control.Parent) + { + content = control as IDockContent; + if (content != null) + content.DockHandler.ActiveWindowHandle = hWnd; + + if (content != null && content.DockHandler.DockPanel == DockPanel) + return content.DockHandler.Pane; + + pane = control as DockPane; + if (pane != null && pane.DockPanel == DockPanel) + break; + } + + return pane; + } + + private bool m_inRefreshActiveWindow = false; + private bool InRefreshActiveWindow + { + get { return m_inRefreshActiveWindow; } + } + + private void RefreshActiveWindow() + { + SuspendFocusTracking(); + m_inRefreshActiveWindow = true; + + DockPane oldActivePane = ActivePane; + IDockContent oldActiveContent = ActiveContent; + IDockContent oldActiveDocument = ActiveDocument; + + SetActivePane(); + SetActiveContent(); + SetActiveDocumentPane(); + SetActiveDocument(); + DockPanel.AutoHideWindow.RefreshActivePane(); + + ResumeFocusTracking(); + m_inRefreshActiveWindow = false; + + if (oldActiveContent != ActiveContent) + DockPanel.OnActiveContentChanged(EventArgs.Empty); + if (oldActiveDocument != ActiveDocument) + DockPanel.OnActiveDocumentChanged(EventArgs.Empty); + if (oldActivePane != ActivePane) + DockPanel.OnActivePaneChanged(EventArgs.Empty); + } + + private DockPane m_activePane = null; + public DockPane ActivePane + { + get { return m_activePane; } + } + + private void SetActivePane() + { + DockPane value = GetPaneFromHandle(NativeMethods.GetFocus()); + if (m_activePane == value) + return; + + if (m_activePane != null) + m_activePane.SetIsActivated(false); + + m_activePane = value; + + if (m_activePane != null) + m_activePane.SetIsActivated(true); + } + + private IDockContent m_activeContent = null; + public IDockContent ActiveContent + { + get { return m_activeContent; } + } + + internal void SetActiveContent() + { + IDockContent value = ActivePane == null ? null : ActivePane.ActiveContent; + + if (m_activeContent == value) + return; + + if (m_activeContent != null) + m_activeContent.DockHandler.IsActivated = false; + + m_activeContent = value; + + if (m_activeContent != null) + { + m_activeContent.DockHandler.IsActivated = true; + if (!DockHelper.IsDockStateAutoHide((m_activeContent.DockHandler.DockState))) + AddLastToActiveList(m_activeContent); + } + } + + private DockPane m_activeDocumentPane = null; + public DockPane ActiveDocumentPane + { + get { return m_activeDocumentPane; } + } + + private void SetActiveDocumentPane() + { + DockPane value = null; + + if (ActivePane != null && ActivePane.DockState == DockState.Document) + value = ActivePane; + + if (value == null && DockPanel.DockWindows != null) + { + if (ActiveDocumentPane == null) + value = DockPanel.DockWindows[DockState.Document].DefaultPane; + else if (ActiveDocumentPane.DockPanel != DockPanel || ActiveDocumentPane.DockState != DockState.Document) + value = DockPanel.DockWindows[DockState.Document].DefaultPane; + else + value = ActiveDocumentPane; + } + + if (m_activeDocumentPane == value) + return; + + if (m_activeDocumentPane != null) + m_activeDocumentPane.SetIsActiveDocumentPane(false); + + m_activeDocumentPane = value; + + if (m_activeDocumentPane != null) + m_activeDocumentPane.SetIsActiveDocumentPane(true); + } + + private IDockContent m_activeDocument = null; + public IDockContent ActiveDocument + { + get { return m_activeDocument; } + } + + private void SetActiveDocument() + { + IDockContent value = ActiveDocumentPane == null ? null : ActiveDocumentPane.ActiveContent; + + if (m_activeDocument == value) + return; + + m_activeDocument = value; + } + } + + private IFocusManager FocusManager + { + get { return m_focusManager; } + } + + internal IContentFocusManager ContentFocusManager + { + get { return m_focusManager; } + } + + internal void SaveFocus() + { + DummyControl.Focus(); + } + + [Browsable(false)] + public IDockContent ActiveContent + { + get { return FocusManager.ActiveContent; } + } + + [Browsable(false)] + public DockPane ActivePane + { + get { return FocusManager.ActivePane; } + } + + [Browsable(false)] + public IDockContent ActiveDocument + { + get { return FocusManager.ActiveDocument; } + } + + [Browsable(false)] + public DockPane ActiveDocumentPane + { + get { return FocusManager.ActiveDocumentPane; } + } + + private static readonly object ActiveDocumentChangedEvent = new object(); + [LocalizedCategory("Category_PropertyChanged")] + [LocalizedDescription("DockPanel_ActiveDocumentChanged_Description")] + public event EventHandler ActiveDocumentChanged + { + add { Events.AddHandler(ActiveDocumentChangedEvent, value); } + remove { Events.RemoveHandler(ActiveDocumentChangedEvent, value); } + } + protected virtual void OnActiveDocumentChanged(EventArgs e) + { + EventHandler handler = (EventHandler)Events[ActiveDocumentChangedEvent]; + if (handler != null) + handler(this, e); + } + + private static readonly object ActiveContentChangedEvent = new object(); + [LocalizedCategory("Category_PropertyChanged")] + [LocalizedDescription("DockPanel_ActiveContentChanged_Description")] + public event EventHandler ActiveContentChanged + { + add { Events.AddHandler(ActiveContentChangedEvent, value); } + remove { Events.RemoveHandler(ActiveContentChangedEvent, value); } + } + protected void OnActiveContentChanged(EventArgs e) + { + EventHandler handler = (EventHandler)Events[ActiveContentChangedEvent]; + if (handler != null) + handler(this, e); + } + + private static readonly object ActivePaneChangedEvent = new object(); + [LocalizedCategory("Category_PropertyChanged")] + [LocalizedDescription("DockPanel_ActivePaneChanged_Description")] + public event EventHandler ActivePaneChanged + { + add { Events.AddHandler(ActivePaneChangedEvent, value); } + remove { Events.RemoveHandler(ActivePaneChangedEvent, value); } + } + protected virtual void OnActivePaneChanged(EventArgs e) + { + EventHandler handler = (EventHandler)Events[ActivePaneChangedEvent]; + if (handler != null) + handler(this, e); + } + } +} diff --git a/trunk/Docking/DockPanel.MdiClientController.cs b/source/Docking/DockPanel.MdiClientController.cs similarity index 97% rename from trunk/Docking/DockPanel.MdiClientController.cs rename to source/Docking/DockPanel.MdiClientController.cs index 24fd0cf..cd3f7d1 100644 --- a/trunk/Docking/DockPanel.MdiClientController.cs +++ b/source/Docking/DockPanel.MdiClientController.cs @@ -1,430 +1,430 @@ -using System; -using System.Drawing; -using System.Windows.Forms; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Runtime.InteropServices; - -namespace LSLEditor.Docking -{ - partial class DockPanel - { - // This class comes from Jacob Slusser's MdiClientController class: - // http://www.codeproject.com/cs/miscctrl/mdiclientcontroller.asp - private class MdiClientController : NativeWindow, IComponent, IDisposable - { - private bool m_autoScroll = true; - private BorderStyle m_borderStyle = BorderStyle.Fixed3D; - private MdiClient m_mdiClient = null; - private Form m_parentForm = null; - private ISite m_site = null; - - public MdiClientController() - { - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - if (disposing) - { - lock (this) - { - if (Site != null && Site.Container != null) - Site.Container.Remove(this); - - if (Disposed != null) - Disposed(this, EventArgs.Empty); - } - } - } - - public bool AutoScroll - { - get { return m_autoScroll; } - set - { - // By default the MdiClient control scrolls. It can appear though that - // there are no scrollbars by turning them off when the non-client - // area is calculated. I decided to expose this method following - // the .NET vernacular of an AutoScroll property. - m_autoScroll = value; - if (MdiClient != null) - UpdateStyles(); - } - } - - public BorderStyle BorderStyle - { - set - { - // Error-check the enum. - if (!Enum.IsDefined(typeof(BorderStyle), value)) - throw new InvalidEnumArgumentException(); - - m_borderStyle = value; - - if (MdiClient == null) - return; - - // This property can actually be visible in design-mode, - // but to keep it consistent with the others, - // prevent this from being show at design-time. - if (Site != null && Site.DesignMode) - return; - - // There is no BorderStyle property exposed by the MdiClient class, - // but this can be controlled by Win32 functions. A Win32 ExStyle - // of WS_EX_CLIENTEDGE is equivalent to a Fixed3D border and a - // Style of WS_BORDER is equivalent to a FixedSingle border. - - // This code is inspired Jason Dori's article: - // "Adding designable borders to user controls". - // http://www.codeproject.com/cs/miscctrl/CsAddingBorders.asp - - // Get styles using Win32 calls - int style = NativeMethods.GetWindowLong(MdiClient.Handle, (int)Win32.GetWindowLongIndex.GWL_STYLE); - int exStyle = NativeMethods.GetWindowLong(MdiClient.Handle, (int)Win32.GetWindowLongIndex.GWL_EXSTYLE); - - // Add or remove style flags as necessary. - switch (m_borderStyle) - { - case BorderStyle.Fixed3D: - exStyle |= (int)Win32.WindowExStyles.WS_EX_CLIENTEDGE; - style &= ~((int)Win32.WindowStyles.WS_BORDER); - break; - - case BorderStyle.FixedSingle: - exStyle &= ~((int)Win32.WindowExStyles.WS_EX_CLIENTEDGE); - style |= (int)Win32.WindowStyles.WS_BORDER; - break; - - case BorderStyle.None: - style &= ~((int)Win32.WindowStyles.WS_BORDER); - exStyle &= ~((int)Win32.WindowExStyles.WS_EX_CLIENTEDGE); - break; - } - - // Set the styles using Win32 calls - NativeMethods.SetWindowLong(MdiClient.Handle, (int)Win32.GetWindowLongIndex.GWL_STYLE, style); - NativeMethods.SetWindowLong(MdiClient.Handle, (int)Win32.GetWindowLongIndex.GWL_EXSTYLE, exStyle); - - // Cause an update of the non-client area. - UpdateStyles(); - } - } - - public MdiClient MdiClient - { - get { return m_mdiClient; } - } - - [Browsable(false)] - public Form ParentForm - { - get { return m_parentForm; } - set - { - // If the ParentForm has previously been set, - // unwire events connected to the old parent. - if (m_parentForm != null) - { - m_parentForm.HandleCreated -= new EventHandler(ParentFormHandleCreated); - m_parentForm.MdiChildActivate -= new EventHandler(ParentFormMdiChildActivate); - } - - m_parentForm = value; - - if (m_parentForm == null) - return; - - // If the parent form has not been created yet, - // wait to initialize the MDI client until it is. - if (m_parentForm.IsHandleCreated) - { - InitializeMdiClient(); - RefreshProperties(); - } - else - m_parentForm.HandleCreated += new EventHandler(ParentFormHandleCreated); - - m_parentForm.MdiChildActivate += new EventHandler(ParentFormMdiChildActivate); - } - } - - public ISite Site - { - get { return m_site; } - set - { - m_site = value; - - if (m_site == null) - return; - - // If the component is dropped onto a form during design-time, - // set the ParentForm property. - IDesignerHost host = (value.GetService(typeof(IDesignerHost)) as IDesignerHost); - if (host != null) - { - Form parent = host.RootComponent as Form; - if (parent != null) - ParentForm = parent; - } - } - } - - public void RenewMdiClient() - { - // Reinitialize the MdiClient and its properties. - InitializeMdiClient(); - RefreshProperties(); - } - - public event EventHandler Disposed; - - public event EventHandler HandleAssigned; - - public event EventHandler MdiChildActivate; - - public event LayoutEventHandler Layout; - - protected virtual void OnHandleAssigned(EventArgs e) - { - // Raise the HandleAssigned event. - if (HandleAssigned != null) - HandleAssigned(this, e); - } - - protected virtual void OnMdiChildActivate(EventArgs e) - { - // Raise the MdiChildActivate event - if (MdiChildActivate != null) - MdiChildActivate(this, e); - } - - protected virtual void OnLayout(LayoutEventArgs e) - { - // Raise the Layout event - if (Layout != null) - Layout(this, e); - } - - public event PaintEventHandler Paint; - - protected virtual void OnPaint(PaintEventArgs e) - { - // Raise the Paint event. - if (Paint != null) - Paint(this, e); - } - - protected override void WndProc(ref Message m) - { - switch (m.Msg) - { - case (int)Win32.Msgs.WM_NCCALCSIZE: - // If AutoScroll is set to false, hide the scrollbars when the control - // calculates its non-client area. - if (!AutoScroll) - NativeMethods.ShowScrollBar(m.HWnd, (int)Win32.ScrollBars.SB_BOTH, 0 /*false*/); - break; - } - - base.WndProc(ref m); - } - - private void ParentFormHandleCreated(object sender, EventArgs e) - { - // The form has been created, unwire the event, and initialize the MdiClient. - this.m_parentForm.HandleCreated -= new EventHandler(ParentFormHandleCreated); - InitializeMdiClient(); - RefreshProperties(); - } - - private void ParentFormMdiChildActivate(object sender, EventArgs e) - { - OnMdiChildActivate(e); - } - - private void MdiClientLayout(object sender, LayoutEventArgs e) - { - OnLayout(e); - } - - private void MdiClientHandleDestroyed(object sender, EventArgs e) - { - // If the MdiClient handle has been released, drop the reference and - // release the handle. - if (m_mdiClient != null) - { - m_mdiClient.HandleDestroyed -= new EventHandler(MdiClientHandleDestroyed); - m_mdiClient = null; - } - - ReleaseHandle(); - } - - private void InitializeMdiClient() - { - // If the mdiClient has previously been set, unwire events connected - // to the old MDI. - if (MdiClient != null) - { - MdiClient.HandleDestroyed -= new EventHandler(MdiClientHandleDestroyed); - MdiClient.Layout -= new LayoutEventHandler(MdiClientLayout); - } - - if (ParentForm == null) - return; - - // Get the MdiClient from the parent form. - foreach (Control control in ParentForm.Controls) - { - // If the form is an MDI container, it will contain an MdiClient control - // just as it would any other control. - - m_mdiClient = control as MdiClient; - if (m_mdiClient == null) - continue; - - // Assign the MdiClient Handle to the NativeWindow. - ReleaseHandle(); - AssignHandle(MdiClient.Handle); - - // Raise the HandleAssigned event. - OnHandleAssigned(EventArgs.Empty); - - // Monitor the MdiClient for when its handle is destroyed. - MdiClient.HandleDestroyed += new EventHandler(MdiClientHandleDestroyed); - MdiClient.Layout += new LayoutEventHandler(MdiClientLayout); - - break; - } - } - - private void RefreshProperties() - { - // Refresh all the properties - BorderStyle = m_borderStyle; - AutoScroll = m_autoScroll; - } - - private void UpdateStyles() - { - // To show style changes, the non-client area must be repainted. Using the - // control's Invalidate method does not affect the non-client area. - // Instead use a Win32 call to signal the style has changed. - NativeMethods.SetWindowPos(MdiClient.Handle, IntPtr.Zero, 0, 0, 0, 0, - Win32.FlagsSetWindowPos.SWP_NOACTIVATE | - Win32.FlagsSetWindowPos.SWP_NOMOVE | - Win32.FlagsSetWindowPos.SWP_NOSIZE | - Win32.FlagsSetWindowPos.SWP_NOZORDER | - Win32.FlagsSetWindowPos.SWP_NOOWNERZORDER | - Win32.FlagsSetWindowPos.SWP_FRAMECHANGED); - } - } - - private MdiClientController m_mdiClientController = null; - private MdiClientController GetMdiClientController() - { - if (m_mdiClientController == null) - { - m_mdiClientController = new MdiClientController(); - m_mdiClientController.HandleAssigned += new EventHandler(MdiClientHandleAssigned); - m_mdiClientController.MdiChildActivate += new EventHandler(ParentFormMdiChildActivate); - m_mdiClientController.Layout += new LayoutEventHandler(MdiClient_Layout); - } - - return m_mdiClientController; - } - - private void ParentFormMdiChildActivate(object sender, EventArgs e) - { - if (GetMdiClientController().ParentForm == null) - return; - - IDockContent content = GetMdiClientController().ParentForm.ActiveMdiChild as IDockContent; - if (content == null) - return; - - if (content.DockHandler.DockPanel == this && content.DockHandler.Pane != null) - content.DockHandler.Pane.ActiveContent = content; - } - - private bool MdiClientExists - { - get { return GetMdiClientController().MdiClient != null; } - } - - private void SetMdiClientBounds(Rectangle bounds) - { - GetMdiClientController().MdiClient.Bounds = bounds; - } - - private void SuspendMdiClientLayout() - { - if (GetMdiClientController().MdiClient != null) - GetMdiClientController().MdiClient.SuspendLayout(); - } - - private void ResumeMdiClientLayout(bool perform) - { - if (GetMdiClientController().MdiClient != null) - GetMdiClientController().MdiClient.ResumeLayout(perform); - } - - private void PerformMdiClientLayout() - { - if (GetMdiClientController().MdiClient != null) - GetMdiClientController().MdiClient.PerformLayout(); - } - - // Called when: - // 1. DockPanel.DocumentStyle changed - // 2. DockPanel.Visible changed - // 3. MdiClientController.Handle assigned - private void SetMdiClient() - { - MdiClientController controller = GetMdiClientController(); - - if (this.DocumentStyle == DocumentStyle.DockingMdi) - { - controller.AutoScroll = false; - controller.BorderStyle = BorderStyle.None; - if (MdiClientExists) - controller.MdiClient.Dock = DockStyle.Fill; - } - else if (DocumentStyle == DocumentStyle.DockingSdi || DocumentStyle == DocumentStyle.DockingWindow) - { - controller.AutoScroll = true; - controller.BorderStyle = BorderStyle.Fixed3D; - if (MdiClientExists) - controller.MdiClient.Dock = DockStyle.Fill; - } - else if (this.DocumentStyle == DocumentStyle.SystemMdi) - { - controller.AutoScroll = true; - controller.BorderStyle = BorderStyle.Fixed3D; - if (controller.MdiClient != null) - { - controller.MdiClient.Dock = DockStyle.None; - controller.MdiClient.Bounds = SystemMdiClientBounds; - } - } - } - - internal Rectangle RectangleToMdiClient(Rectangle rect) - { - if (MdiClientExists) - return GetMdiClientController().MdiClient.RectangleToClient(rect); - else - return Rectangle.Empty; - } - } -} +using System; +using System.Drawing; +using System.Windows.Forms; +using System.ComponentModel; +using System.ComponentModel.Design; +using System.Runtime.InteropServices; + +namespace LSLEditor.Docking +{ + partial class DockPanel + { + // This class comes from Jacob Slusser's MdiClientController class: + // http://www.codeproject.com/cs/miscctrl/mdiclientcontroller.asp + private class MdiClientController : NativeWindow, IComponent, IDisposable + { + private bool m_autoScroll = true; + private BorderStyle m_borderStyle = BorderStyle.Fixed3D; + private MdiClient m_mdiClient = null; + private Form m_parentForm = null; + private ISite m_site = null; + + public MdiClientController() + { + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + lock (this) + { + if (Site != null && Site.Container != null) + Site.Container.Remove(this); + + if (Disposed != null) + Disposed(this, EventArgs.Empty); + } + } + } + + public bool AutoScroll + { + get { return m_autoScroll; } + set + { + // By default the MdiClient control scrolls. It can appear though that + // there are no scrollbars by turning them off when the non-client + // area is calculated. I decided to expose this method following + // the .NET vernacular of an AutoScroll property. + m_autoScroll = value; + if (MdiClient != null) + UpdateStyles(); + } + } + + public BorderStyle BorderStyle + { + set + { + // Error-check the enum. + if (!Enum.IsDefined(typeof(BorderStyle), value)) + throw new InvalidEnumArgumentException(); + + m_borderStyle = value; + + if (MdiClient == null) + return; + + // This property can actually be visible in design-mode, + // but to keep it consistent with the others, + // prevent this from being show at design-time. + if (Site != null && Site.DesignMode) + return; + + // There is no BorderStyle property exposed by the MdiClient class, + // but this can be controlled by Win32 functions. A Win32 ExStyle + // of WS_EX_CLIENTEDGE is equivalent to a Fixed3D border and a + // Style of WS_BORDER is equivalent to a FixedSingle border. + + // This code is inspired Jason Dori's article: + // "Adding designable borders to user controls". + // http://www.codeproject.com/cs/miscctrl/CsAddingBorders.asp + + // Get styles using Win32 calls + int style = NativeMethods.GetWindowLong(MdiClient.Handle, (int)Win32.GetWindowLongIndex.GWL_STYLE); + int exStyle = NativeMethods.GetWindowLong(MdiClient.Handle, (int)Win32.GetWindowLongIndex.GWL_EXSTYLE); + + // Add or remove style flags as necessary. + switch (m_borderStyle) + { + case BorderStyle.Fixed3D: + exStyle |= (int)Win32.WindowExStyles.WS_EX_CLIENTEDGE; + style &= ~((int)Win32.WindowStyles.WS_BORDER); + break; + + case BorderStyle.FixedSingle: + exStyle &= ~((int)Win32.WindowExStyles.WS_EX_CLIENTEDGE); + style |= (int)Win32.WindowStyles.WS_BORDER; + break; + + case BorderStyle.None: + style &= ~((int)Win32.WindowStyles.WS_BORDER); + exStyle &= ~((int)Win32.WindowExStyles.WS_EX_CLIENTEDGE); + break; + } + + // Set the styles using Win32 calls + NativeMethods.SetWindowLong(MdiClient.Handle, (int)Win32.GetWindowLongIndex.GWL_STYLE, style); + NativeMethods.SetWindowLong(MdiClient.Handle, (int)Win32.GetWindowLongIndex.GWL_EXSTYLE, exStyle); + + // Cause an update of the non-client area. + UpdateStyles(); + } + } + + public MdiClient MdiClient + { + get { return m_mdiClient; } + } + + [Browsable(false)] + public Form ParentForm + { + get { return m_parentForm; } + set + { + // If the ParentForm has previously been set, + // unwire events connected to the old parent. + if (m_parentForm != null) + { + m_parentForm.HandleCreated -= new EventHandler(ParentFormHandleCreated); + m_parentForm.MdiChildActivate -= new EventHandler(ParentFormMdiChildActivate); + } + + m_parentForm = value; + + if (m_parentForm == null) + return; + + // If the parent form has not been created yet, + // wait to initialize the MDI client until it is. + if (m_parentForm.IsHandleCreated) + { + InitializeMdiClient(); + RefreshProperties(); + } + else + m_parentForm.HandleCreated += new EventHandler(ParentFormHandleCreated); + + m_parentForm.MdiChildActivate += new EventHandler(ParentFormMdiChildActivate); + } + } + + public ISite Site + { + get { return m_site; } + set + { + m_site = value; + + if (m_site == null) + return; + + // If the component is dropped onto a form during design-time, + // set the ParentForm property. + IDesignerHost host = (value.GetService(typeof(IDesignerHost)) as IDesignerHost); + if (host != null) + { + Form parent = host.RootComponent as Form; + if (parent != null) + ParentForm = parent; + } + } + } + + public void RenewMdiClient() + { + // Reinitialize the MdiClient and its properties. + InitializeMdiClient(); + RefreshProperties(); + } + + public event EventHandler Disposed; + + public event EventHandler HandleAssigned; + + public event EventHandler MdiChildActivate; + + public event LayoutEventHandler Layout; + + protected virtual void OnHandleAssigned(EventArgs e) + { + // Raise the HandleAssigned event. + if (HandleAssigned != null) + HandleAssigned(this, e); + } + + protected virtual void OnMdiChildActivate(EventArgs e) + { + // Raise the MdiChildActivate event + if (MdiChildActivate != null) + MdiChildActivate(this, e); + } + + protected virtual void OnLayout(LayoutEventArgs e) + { + // Raise the Layout event + if (Layout != null) + Layout(this, e); + } + + public event PaintEventHandler Paint; + + protected virtual void OnPaint(PaintEventArgs e) + { + // Raise the Paint event. + if (Paint != null) + Paint(this, e); + } + + protected override void WndProc(ref Message m) + { + switch (m.Msg) + { + case (int)Win32.Msgs.WM_NCCALCSIZE: + // If AutoScroll is set to false, hide the scrollbars when the control + // calculates its non-client area. + if (!AutoScroll) + NativeMethods.ShowScrollBar(m.HWnd, (int)Win32.ScrollBars.SB_BOTH, 0 /*false*/); + break; + } + + base.WndProc(ref m); + } + + private void ParentFormHandleCreated(object sender, EventArgs e) + { + // The form has been created, unwire the event, and initialize the MdiClient. + this.m_parentForm.HandleCreated -= new EventHandler(ParentFormHandleCreated); + InitializeMdiClient(); + RefreshProperties(); + } + + private void ParentFormMdiChildActivate(object sender, EventArgs e) + { + OnMdiChildActivate(e); + } + + private void MdiClientLayout(object sender, LayoutEventArgs e) + { + OnLayout(e); + } + + private void MdiClientHandleDestroyed(object sender, EventArgs e) + { + // If the MdiClient handle has been released, drop the reference and + // release the handle. + if (m_mdiClient != null) + { + m_mdiClient.HandleDestroyed -= new EventHandler(MdiClientHandleDestroyed); + m_mdiClient = null; + } + + ReleaseHandle(); + } + + private void InitializeMdiClient() + { + // If the mdiClient has previously been set, unwire events connected + // to the old MDI. + if (MdiClient != null) + { + MdiClient.HandleDestroyed -= new EventHandler(MdiClientHandleDestroyed); + MdiClient.Layout -= new LayoutEventHandler(MdiClientLayout); + } + + if (ParentForm == null) + return; + + // Get the MdiClient from the parent form. + foreach (Control control in ParentForm.Controls) + { + // If the form is an MDI container, it will contain an MdiClient control + // just as it would any other control. + + m_mdiClient = control as MdiClient; + if (m_mdiClient == null) + continue; + + // Assign the MdiClient Handle to the NativeWindow. + ReleaseHandle(); + AssignHandle(MdiClient.Handle); + + // Raise the HandleAssigned event. + OnHandleAssigned(EventArgs.Empty); + + // Monitor the MdiClient for when its handle is destroyed. + MdiClient.HandleDestroyed += new EventHandler(MdiClientHandleDestroyed); + MdiClient.Layout += new LayoutEventHandler(MdiClientLayout); + + break; + } + } + + private void RefreshProperties() + { + // Refresh all the properties + BorderStyle = m_borderStyle; + AutoScroll = m_autoScroll; + } + + private void UpdateStyles() + { + // To show style changes, the non-client area must be repainted. Using the + // control's Invalidate method does not affect the non-client area. + // Instead use a Win32 call to signal the style has changed. + NativeMethods.SetWindowPos(MdiClient.Handle, IntPtr.Zero, 0, 0, 0, 0, + Win32.FlagsSetWindowPos.SWP_NOACTIVATE | + Win32.FlagsSetWindowPos.SWP_NOMOVE | + Win32.FlagsSetWindowPos.SWP_NOSIZE | + Win32.FlagsSetWindowPos.SWP_NOZORDER | + Win32.FlagsSetWindowPos.SWP_NOOWNERZORDER | + Win32.FlagsSetWindowPos.SWP_FRAMECHANGED); + } + } + + private MdiClientController m_mdiClientController = null; + private MdiClientController GetMdiClientController() + { + if (m_mdiClientController == null) + { + m_mdiClientController = new MdiClientController(); + m_mdiClientController.HandleAssigned += new EventHandler(MdiClientHandleAssigned); + m_mdiClientController.MdiChildActivate += new EventHandler(ParentFormMdiChildActivate); + m_mdiClientController.Layout += new LayoutEventHandler(MdiClient_Layout); + } + + return m_mdiClientController; + } + + private void ParentFormMdiChildActivate(object sender, EventArgs e) + { + if (GetMdiClientController().ParentForm == null) + return; + + IDockContent content = GetMdiClientController().ParentForm.ActiveMdiChild as IDockContent; + if (content == null) + return; + + if (content.DockHandler.DockPanel == this && content.DockHandler.Pane != null) + content.DockHandler.Pane.ActiveContent = content; + } + + private bool MdiClientExists + { + get { return GetMdiClientController().MdiClient != null; } + } + + private void SetMdiClientBounds(Rectangle bounds) + { + GetMdiClientController().MdiClient.Bounds = bounds; + } + + private void SuspendMdiClientLayout() + { + if (GetMdiClientController().MdiClient != null) + GetMdiClientController().MdiClient.SuspendLayout(); + } + + private void ResumeMdiClientLayout(bool perform) + { + if (GetMdiClientController().MdiClient != null) + GetMdiClientController().MdiClient.ResumeLayout(perform); + } + + private void PerformMdiClientLayout() + { + if (GetMdiClientController().MdiClient != null) + GetMdiClientController().MdiClient.PerformLayout(); + } + + // Called when: + // 1. DockPanel.DocumentStyle changed + // 2. DockPanel.Visible changed + // 3. MdiClientController.Handle assigned + private void SetMdiClient() + { + MdiClientController controller = GetMdiClientController(); + + if (this.DocumentStyle == DocumentStyle.DockingMdi) + { + controller.AutoScroll = false; + controller.BorderStyle = BorderStyle.None; + if (MdiClientExists) + controller.MdiClient.Dock = DockStyle.Fill; + } + else if (DocumentStyle == DocumentStyle.DockingSdi || DocumentStyle == DocumentStyle.DockingWindow) + { + controller.AutoScroll = true; + controller.BorderStyle = BorderStyle.Fixed3D; + if (MdiClientExists) + controller.MdiClient.Dock = DockStyle.Fill; + } + else if (this.DocumentStyle == DocumentStyle.SystemMdi) + { + controller.AutoScroll = true; + controller.BorderStyle = BorderStyle.Fixed3D; + if (controller.MdiClient != null) + { + controller.MdiClient.Dock = DockStyle.None; + controller.MdiClient.Bounds = SystemMdiClientBounds; + } + } + } + + internal Rectangle RectangleToMdiClient(Rectangle rect) + { + if (MdiClientExists) + return GetMdiClientController().MdiClient.RectangleToClient(rect); + else + return Rectangle.Empty; + } + } +} diff --git a/trunk/Docking/DockPanel.Persistor.cs b/source/Docking/DockPanel.Persistor.cs similarity index 98% rename from trunk/Docking/DockPanel.Persistor.cs rename to source/Docking/DockPanel.Persistor.cs index b51ea44..7f4d25d 100644 --- a/trunk/Docking/DockPanel.Persistor.cs +++ b/source/Docking/DockPanel.Persistor.cs @@ -1,781 +1,781 @@ -using System; -using System.ComponentModel; -using System.Windows.Forms; -using System.Drawing; -using LSLEditor.Docking; -using System.IO; -using System.Text; -using System.Xml; -using System.Globalization; - -namespace LSLEditor.Docking -{ - partial class DockPanel - { - private static class Persistor - { - private const string ConfigFileVersion = "1.0"; - private static string[] CompatibleConfigFileVersions = new string[] { }; - - private class DummyContent : DockContent - { - } - - private struct DockPanelStruct - { - private double m_dockLeftPortion; - public double DockLeftPortion - { - get { return m_dockLeftPortion; } - set { m_dockLeftPortion = value; } - } - - private double m_dockRightPortion; - public double DockRightPortion - { - get { return m_dockRightPortion; } - set { m_dockRightPortion = value; } - } - - private double m_dockTopPortion; - public double DockTopPortion - { - get { return m_dockTopPortion; } - set { m_dockTopPortion = value; } - } - - private double m_dockBottomPortion; - public double DockBottomPortion - { - get { return m_dockBottomPortion; } - set { m_dockBottomPortion = value; } - } - - private int m_indexActiveDocumentPane; - public int IndexActiveDocumentPane - { - get { return m_indexActiveDocumentPane; } - set { m_indexActiveDocumentPane = value; } - } - - private int m_indexActivePane; - public int IndexActivePane - { - get { return m_indexActivePane; } - set { m_indexActivePane = value; } - } - } - - private struct ContentStruct - { - private string m_persistString; - public string PersistString - { - get { return m_persistString; } - set { m_persistString = value; } - } - - private double m_autoHidePortion; - public double AutoHidePortion - { - get { return m_autoHidePortion; } - set { m_autoHidePortion = value; } - } - - private bool m_isHidden; - public bool IsHidden - { - get { return m_isHidden; } - set { m_isHidden = value; } - } - - private bool m_isFloat; - public bool IsFloat - { - get { return m_isFloat; } - set { m_isFloat = value; } - } - } - - private struct PaneStruct - { - private DockState m_dockState; - public DockState DockState - { - get { return m_dockState; } - set { m_dockState = value; } - } - - private int m_indexActiveContent; - public int IndexActiveContent - { - get { return m_indexActiveContent; } - set { m_indexActiveContent = value; } - } - - private int[] m_indexContents; - public int[] IndexContents - { - get { return m_indexContents; } - set { m_indexContents = value; } - } - - private int m_zOrderIndex; - public int ZOrderIndex - { - get { return m_zOrderIndex; } - set { m_zOrderIndex = value; } - } - } - - private struct NestedPane - { - private int m_indexPane; - public int IndexPane - { - get { return m_indexPane; } - set { m_indexPane = value; } - } - - private int m_indexPrevPane; - public int IndexPrevPane - { - get { return m_indexPrevPane; } - set { m_indexPrevPane = value; } - } - - private DockAlignment m_alignment; - public DockAlignment Alignment - { - get { return m_alignment; } - set { m_alignment = value; } - } - - private double m_proportion; - public double Proportion - { - get { return m_proportion; } - set { m_proportion = value; } - } - } - - private struct DockWindowStruct - { - private DockState m_dockState; - public DockState DockState - { - get { return m_dockState; } - set { m_dockState = value; } - } - - private int m_zOrderIndex; - public int ZOrderIndex - { - get { return m_zOrderIndex; } - set { m_zOrderIndex = value; } - } - - private NestedPane[] m_nestedPanes; - public NestedPane[] NestedPanes - { - get { return m_nestedPanes; } - set { m_nestedPanes = value; } - } - } - - private struct FloatWindowStruct - { - private Rectangle m_bounds; - public Rectangle Bounds - { - get { return m_bounds; } - set { m_bounds = value; } - } - - private int m_zOrderIndex; - public int ZOrderIndex - { - get { return m_zOrderIndex; } - set { m_zOrderIndex = value; } - } - - private NestedPane[] m_nestedPanes; - public NestedPane[] NestedPanes - { - get { return m_nestedPanes; } - set { m_nestedPanes = value; } - } - } - - public static void SaveAsXml(DockPanel dockPanel, string fileName) - { - SaveAsXml(dockPanel, fileName, Encoding.Unicode); - } - - public static void SaveAsXml(DockPanel dockPanel, string fileName, Encoding encoding) - { - FileStream fs = new FileStream(fileName, FileMode.Create); - try - { - SaveAsXml(dockPanel, fs, encoding); - } - finally - { - fs.Close(); - } - } - - public static void SaveAsXml(DockPanel dockPanel, Stream stream, Encoding encoding) - { - SaveAsXml(dockPanel, stream, encoding, false); - } - - public static void SaveAsXml(DockPanel dockPanel, Stream stream, Encoding encoding, bool upstream) - { - XmlTextWriter xmlOut = new XmlTextWriter(stream, encoding); - - // Use indenting for readability - xmlOut.Formatting = Formatting.Indented; - - if (!upstream) - xmlOut.WriteStartDocument(); - - // Always begin file with identification and warning - xmlOut.WriteComment(Strings.DockPanel_Persistor_XmlFileComment1); - xmlOut.WriteComment(Strings.DockPanel_Persistor_XmlFileComment2); - - // Associate a version number with the root element so that future version of the code - // will be able to be backwards compatible or at least recognise out of date versions - xmlOut.WriteStartElement("DockPanel"); - xmlOut.WriteAttributeString("FormatVersion", ConfigFileVersion); - xmlOut.WriteAttributeString("DockLeftPortion", dockPanel.DockLeftPortion.ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteAttributeString("DockRightPortion", dockPanel.DockRightPortion.ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteAttributeString("DockTopPortion", dockPanel.DockTopPortion.ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteAttributeString("DockBottomPortion", dockPanel.DockBottomPortion.ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteAttributeString("ActiveDocumentPane", dockPanel.Panes.IndexOf(dockPanel.ActiveDocumentPane).ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteAttributeString("ActivePane", dockPanel.Panes.IndexOf(dockPanel.ActivePane).ToString(CultureInfo.InvariantCulture)); - - // Contents - xmlOut.WriteStartElement("Contents"); - xmlOut.WriteAttributeString("Count", dockPanel.Contents.Count.ToString(CultureInfo.InvariantCulture)); - foreach (IDockContent content in dockPanel.Contents) - { - xmlOut.WriteStartElement("Content"); - xmlOut.WriteAttributeString("ID", dockPanel.Contents.IndexOf(content).ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteAttributeString("PersistString", content.DockHandler.PersistString); - xmlOut.WriteAttributeString("AutoHidePortion", content.DockHandler.AutoHidePortion.ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteAttributeString("IsHidden", content.DockHandler.IsHidden.ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteAttributeString("IsFloat", content.DockHandler.IsFloat.ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteEndElement(); - } - xmlOut.WriteEndElement(); - - // Panes - xmlOut.WriteStartElement("Panes"); - xmlOut.WriteAttributeString("Count", dockPanel.Panes.Count.ToString(CultureInfo.InvariantCulture)); - foreach (DockPane pane in dockPanel.Panes) - { - xmlOut.WriteStartElement("Pane"); - xmlOut.WriteAttributeString("ID", dockPanel.Panes.IndexOf(pane).ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteAttributeString("DockState", pane.DockState.ToString()); - xmlOut.WriteAttributeString("ActiveContent", dockPanel.Contents.IndexOf(pane.ActiveContent).ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteStartElement("Contents"); - xmlOut.WriteAttributeString("Count", pane.Contents.Count.ToString(CultureInfo.InvariantCulture)); - foreach (IDockContent content in pane.Contents) - { - xmlOut.WriteStartElement("Content"); - xmlOut.WriteAttributeString("ID", pane.Contents.IndexOf(content).ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteAttributeString("RefID", dockPanel.Contents.IndexOf(content).ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteEndElement(); - } - xmlOut.WriteEndElement(); - xmlOut.WriteEndElement(); - } - xmlOut.WriteEndElement(); - - // DockWindows - xmlOut.WriteStartElement("DockWindows"); - int dockWindowId = 0; - foreach (DockWindow dw in dockPanel.DockWindows) - { - xmlOut.WriteStartElement("DockWindow"); - xmlOut.WriteAttributeString("ID", dockWindowId.ToString(CultureInfo.InvariantCulture)); - dockWindowId++; - xmlOut.WriteAttributeString("DockState", dw.DockState.ToString()); - xmlOut.WriteAttributeString("ZOrderIndex", dockPanel.Controls.IndexOf(dw).ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteStartElement("NestedPanes"); - xmlOut.WriteAttributeString("Count", dw.NestedPanes.Count.ToString(CultureInfo.InvariantCulture)); - foreach (DockPane pane in dw.NestedPanes) - { - xmlOut.WriteStartElement("Pane"); - xmlOut.WriteAttributeString("ID", dw.NestedPanes.IndexOf(pane).ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteAttributeString("RefID", dockPanel.Panes.IndexOf(pane).ToString(CultureInfo.InvariantCulture)); - NestedDockingStatus status = pane.NestedDockingStatus; - xmlOut.WriteAttributeString("PrevPane", dockPanel.Panes.IndexOf(status.PreviousPane).ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteAttributeString("Alignment", status.Alignment.ToString()); - xmlOut.WriteAttributeString("Proportion", status.Proportion.ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteEndElement(); - } - xmlOut.WriteEndElement(); - xmlOut.WriteEndElement(); - } - xmlOut.WriteEndElement(); - - // FloatWindows - RectangleConverter rectConverter = new RectangleConverter(); - xmlOut.WriteStartElement("FloatWindows"); - xmlOut.WriteAttributeString("Count", dockPanel.FloatWindows.Count.ToString(CultureInfo.InvariantCulture)); - foreach (FloatWindow fw in dockPanel.FloatWindows) - { - xmlOut.WriteStartElement("FloatWindow"); - xmlOut.WriteAttributeString("ID", dockPanel.FloatWindows.IndexOf(fw).ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteAttributeString("Bounds", rectConverter.ConvertToInvariantString(fw.Bounds)); - xmlOut.WriteAttributeString("ZOrderIndex", fw.DockPanel.FloatWindows.IndexOf(fw).ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteStartElement("NestedPanes"); - xmlOut.WriteAttributeString("Count", fw.NestedPanes.Count.ToString(CultureInfo.InvariantCulture)); - foreach (DockPane pane in fw.NestedPanes) - { - xmlOut.WriteStartElement("Pane"); - xmlOut.WriteAttributeString("ID", fw.NestedPanes.IndexOf(pane).ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteAttributeString("RefID", dockPanel.Panes.IndexOf(pane).ToString(CultureInfo.InvariantCulture)); - NestedDockingStatus status = pane.NestedDockingStatus; - xmlOut.WriteAttributeString("PrevPane", dockPanel.Panes.IndexOf(status.PreviousPane).ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteAttributeString("Alignment", status.Alignment.ToString()); - xmlOut.WriteAttributeString("Proportion", status.Proportion.ToString(CultureInfo.InvariantCulture)); - xmlOut.WriteEndElement(); - } - xmlOut.WriteEndElement(); - xmlOut.WriteEndElement(); - } - xmlOut.WriteEndElement(); // - - xmlOut.WriteEndElement(); - - if (!upstream) - { - xmlOut.WriteEndDocument(); - xmlOut.Close(); - } - else - xmlOut.Flush(); - } - - public static void LoadFromXml(DockPanel dockPanel, string fileName, DeserializeDockContent deserializeContent) - { - FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); - try - { - LoadFromXml(dockPanel, fs, deserializeContent); - } - finally - { - fs.Close(); - } - } - - public static void LoadFromXml(DockPanel dockPanel, Stream stream, DeserializeDockContent deserializeContent) - { - LoadFromXml(dockPanel, stream, deserializeContent, true); - } - - private static ContentStruct[] LoadContents(XmlTextReader xmlIn) - { - int countOfContents = Convert.ToInt32(xmlIn.GetAttribute("Count"), CultureInfo.InvariantCulture); - ContentStruct[] contents = new ContentStruct[countOfContents]; - MoveToNextElement(xmlIn); - for (int i = 0; i < countOfContents; i++) - { - int id = Convert.ToInt32(xmlIn.GetAttribute("ID"), CultureInfo.InvariantCulture); - if (xmlIn.Name != "Content" || id != i) - throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); - - contents[i].PersistString = xmlIn.GetAttribute("PersistString"); - contents[i].AutoHidePortion = Convert.ToDouble(xmlIn.GetAttribute("AutoHidePortion"), CultureInfo.InvariantCulture); - contents[i].IsHidden = Convert.ToBoolean(xmlIn.GetAttribute("IsHidden"), CultureInfo.InvariantCulture); - contents[i].IsFloat = Convert.ToBoolean(xmlIn.GetAttribute("IsFloat"), CultureInfo.InvariantCulture); - MoveToNextElement(xmlIn); - } - - return contents; - } - - private static PaneStruct[] LoadPanes(XmlTextReader xmlIn) - { - EnumConverter dockStateConverter = new EnumConverter(typeof(DockState)); - int countOfPanes = Convert.ToInt32(xmlIn.GetAttribute("Count"), CultureInfo.InvariantCulture); - PaneStruct[] panes = new PaneStruct[countOfPanes]; - MoveToNextElement(xmlIn); - for (int i = 0; i < countOfPanes; i++) - { - int id = Convert.ToInt32(xmlIn.GetAttribute("ID"), CultureInfo.InvariantCulture); - if (xmlIn.Name != "Pane" || id != i) - throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); - - panes[i].DockState = (DockState)dockStateConverter.ConvertFrom(xmlIn.GetAttribute("DockState")); - panes[i].IndexActiveContent = Convert.ToInt32(xmlIn.GetAttribute("ActiveContent"), CultureInfo.InvariantCulture); - panes[i].ZOrderIndex = -1; - - MoveToNextElement(xmlIn); - if (xmlIn.Name != "Contents") - throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); - int countOfPaneContents = Convert.ToInt32(xmlIn.GetAttribute("Count"), CultureInfo.InvariantCulture); - panes[i].IndexContents = new int[countOfPaneContents]; - MoveToNextElement(xmlIn); - for (int j = 0; j < countOfPaneContents; j++) - { - int id2 = Convert.ToInt32(xmlIn.GetAttribute("ID"), CultureInfo.InvariantCulture); - if (xmlIn.Name != "Content" || id2 != j) - throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); - - panes[i].IndexContents[j] = Convert.ToInt32(xmlIn.GetAttribute("RefID"), CultureInfo.InvariantCulture); - MoveToNextElement(xmlIn); - } - } - - return panes; - } - - private static DockWindowStruct[] LoadDockWindows(XmlTextReader xmlIn, DockPanel dockPanel) - { - EnumConverter dockStateConverter = new EnumConverter(typeof(DockState)); - EnumConverter dockAlignmentConverter = new EnumConverter(typeof(DockAlignment)); - int countOfDockWindows = dockPanel.DockWindows.Count; - DockWindowStruct[] dockWindows = new DockWindowStruct[countOfDockWindows]; - MoveToNextElement(xmlIn); - for (int i = 0; i < countOfDockWindows; i++) - { - int id = Convert.ToInt32(xmlIn.GetAttribute("ID"), CultureInfo.InvariantCulture); - if (xmlIn.Name != "DockWindow" || id != i) - throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); - - dockWindows[i].DockState = (DockState)dockStateConverter.ConvertFrom(xmlIn.GetAttribute("DockState")); - dockWindows[i].ZOrderIndex = Convert.ToInt32(xmlIn.GetAttribute("ZOrderIndex"), CultureInfo.InvariantCulture); - MoveToNextElement(xmlIn); - if (xmlIn.Name != "DockList" && xmlIn.Name != "NestedPanes") - throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); - int countOfNestedPanes = Convert.ToInt32(xmlIn.GetAttribute("Count"), CultureInfo.InvariantCulture); - dockWindows[i].NestedPanes = new NestedPane[countOfNestedPanes]; - MoveToNextElement(xmlIn); - for (int j = 0; j < countOfNestedPanes; j++) - { - int id2 = Convert.ToInt32(xmlIn.GetAttribute("ID"), CultureInfo.InvariantCulture); - if (xmlIn.Name != "Pane" || id2 != j) - throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); - dockWindows[i].NestedPanes[j].IndexPane = Convert.ToInt32(xmlIn.GetAttribute("RefID"), CultureInfo.InvariantCulture); - dockWindows[i].NestedPanes[j].IndexPrevPane = Convert.ToInt32(xmlIn.GetAttribute("PrevPane"), CultureInfo.InvariantCulture); - dockWindows[i].NestedPanes[j].Alignment = (DockAlignment)dockAlignmentConverter.ConvertFrom(xmlIn.GetAttribute("Alignment")); - dockWindows[i].NestedPanes[j].Proportion = Convert.ToDouble(xmlIn.GetAttribute("Proportion"), CultureInfo.InvariantCulture); - MoveToNextElement(xmlIn); - } - } - - return dockWindows; - } - - private static FloatWindowStruct[] LoadFloatWindows(XmlTextReader xmlIn) - { - EnumConverter dockAlignmentConverter = new EnumConverter(typeof(DockAlignment)); - RectangleConverter rectConverter = new RectangleConverter(); - int countOfFloatWindows = Convert.ToInt32(xmlIn.GetAttribute("Count"), CultureInfo.InvariantCulture); - FloatWindowStruct[] floatWindows = new FloatWindowStruct[countOfFloatWindows]; - MoveToNextElement(xmlIn); - for (int i = 0; i < countOfFloatWindows; i++) - { - int id = Convert.ToInt32(xmlIn.GetAttribute("ID"), CultureInfo.InvariantCulture); - if (xmlIn.Name != "FloatWindow" || id != i) - throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); - - floatWindows[i].Bounds = (Rectangle)rectConverter.ConvertFromInvariantString(xmlIn.GetAttribute("Bounds")); - floatWindows[i].ZOrderIndex = Convert.ToInt32(xmlIn.GetAttribute("ZOrderIndex"), CultureInfo.InvariantCulture); - MoveToNextElement(xmlIn); - if (xmlIn.Name != "DockList" && xmlIn.Name != "NestedPanes") - throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); - int countOfNestedPanes = Convert.ToInt32(xmlIn.GetAttribute("Count"), CultureInfo.InvariantCulture); - floatWindows[i].NestedPanes = new NestedPane[countOfNestedPanes]; - MoveToNextElement(xmlIn); - for (int j = 0; j < countOfNestedPanes; j++) - { - int id2 = Convert.ToInt32(xmlIn.GetAttribute("ID"), CultureInfo.InvariantCulture); - if (xmlIn.Name != "Pane" || id2 != j) - throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); - floatWindows[i].NestedPanes[j].IndexPane = Convert.ToInt32(xmlIn.GetAttribute("RefID"), CultureInfo.InvariantCulture); - floatWindows[i].NestedPanes[j].IndexPrevPane = Convert.ToInt32(xmlIn.GetAttribute("PrevPane"), CultureInfo.InvariantCulture); - floatWindows[i].NestedPanes[j].Alignment = (DockAlignment)dockAlignmentConverter.ConvertFrom(xmlIn.GetAttribute("Alignment")); - floatWindows[i].NestedPanes[j].Proportion = Convert.ToDouble(xmlIn.GetAttribute("Proportion"), CultureInfo.InvariantCulture); - MoveToNextElement(xmlIn); - } - } - - return floatWindows; - } - - public static void LoadFromXml(DockPanel dockPanel, Stream stream, DeserializeDockContent deserializeContent, bool closeStream) - { - - if (dockPanel.Contents.Count != 0) - throw new InvalidOperationException(Strings.DockPanel_LoadFromXml_AlreadyInitialized); - - XmlTextReader xmlIn = new XmlTextReader(stream); - xmlIn.WhitespaceHandling = WhitespaceHandling.None; - xmlIn.MoveToContent(); - - while (!xmlIn.Name.Equals("DockPanel")) - { - if (!MoveToNextElement(xmlIn)) - throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); - } - - string formatVersion = xmlIn.GetAttribute("FormatVersion"); - if (!IsFormatVersionValid(formatVersion)) - throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidFormatVersion); - - DockPanelStruct dockPanelStruct = new DockPanelStruct(); - dockPanelStruct.DockLeftPortion = Convert.ToDouble(xmlIn.GetAttribute("DockLeftPortion"), CultureInfo.InvariantCulture); - dockPanelStruct.DockRightPortion = Convert.ToDouble(xmlIn.GetAttribute("DockRightPortion"), CultureInfo.InvariantCulture); - dockPanelStruct.DockTopPortion = Convert.ToDouble(xmlIn.GetAttribute("DockTopPortion"), CultureInfo.InvariantCulture); - dockPanelStruct.DockBottomPortion = Convert.ToDouble(xmlIn.GetAttribute("DockBottomPortion"), CultureInfo.InvariantCulture); - dockPanelStruct.IndexActiveDocumentPane = Convert.ToInt32(xmlIn.GetAttribute("ActiveDocumentPane"), CultureInfo.InvariantCulture); - dockPanelStruct.IndexActivePane = Convert.ToInt32(xmlIn.GetAttribute("ActivePane"), CultureInfo.InvariantCulture); - - // Load Contents - MoveToNextElement(xmlIn); - if (xmlIn.Name != "Contents") - throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); - ContentStruct[] contents = LoadContents(xmlIn); - - // Load Panes - if (xmlIn.Name != "Panes") - throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); - PaneStruct[] panes = LoadPanes(xmlIn); - - // Load DockWindows - if (xmlIn.Name != "DockWindows") - throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); - DockWindowStruct[] dockWindows = LoadDockWindows(xmlIn, dockPanel); - - // Load FloatWindows - if (xmlIn.Name != "FloatWindows") - throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); - FloatWindowStruct[] floatWindows = LoadFloatWindows(xmlIn); - - if (closeStream) - xmlIn.Close(); - - dockPanel.SuspendLayout(true); - - dockPanel.DockLeftPortion = dockPanelStruct.DockLeftPortion; - dockPanel.DockRightPortion = dockPanelStruct.DockRightPortion; - dockPanel.DockTopPortion = dockPanelStruct.DockTopPortion; - dockPanel.DockBottomPortion = dockPanelStruct.DockBottomPortion; - - // Set DockWindow ZOrders - int prevMaxDockWindowZOrder = int.MaxValue; - for (int i = 0; i < dockWindows.Length; i++) - { - int maxDockWindowZOrder = -1; - int index = -1; - for (int j = 0; j < dockWindows.Length; j++) - { - if (dockWindows[j].ZOrderIndex > maxDockWindowZOrder && dockWindows[j].ZOrderIndex < prevMaxDockWindowZOrder) - { - maxDockWindowZOrder = dockWindows[j].ZOrderIndex; - index = j; - } - } - - dockPanel.DockWindows[dockWindows[index].DockState].BringToFront(); - prevMaxDockWindowZOrder = maxDockWindowZOrder; - } - - // Create Contents - for (int i = 0; i < contents.Length; i++) - { - IDockContent content = deserializeContent(contents[i].PersistString); - if (content == null) - content = new DummyContent(); - content.DockHandler.DockPanel = dockPanel; - content.DockHandler.AutoHidePortion = contents[i].AutoHidePortion; - content.DockHandler.IsHidden = true; - content.DockHandler.IsFloat = contents[i].IsFloat; - } - - // Create panes - for (int i = 0; i < panes.Length; i++) - { - DockPane pane = null; - for (int j = 0; j < panes[i].IndexContents.Length; j++) - { - IDockContent content = dockPanel.Contents[panes[i].IndexContents[j]]; - if (j == 0) - pane = dockPanel.DockPaneFactory.CreateDockPane(content, panes[i].DockState, false); - else if (panes[i].DockState == DockState.Float) - content.DockHandler.FloatPane = pane; - else - content.DockHandler.PanelPane = pane; - } - } - - // Assign Panes to DockWindows - for (int i = 0; i < dockWindows.Length; i++) - { - for (int j = 0; j < dockWindows[i].NestedPanes.Length; j++) - { - DockWindow dw = dockPanel.DockWindows[dockWindows[i].DockState]; - int indexPane = dockWindows[i].NestedPanes[j].IndexPane; - DockPane pane = dockPanel.Panes[indexPane]; - int indexPrevPane = dockWindows[i].NestedPanes[j].IndexPrevPane; - DockPane prevPane = (indexPrevPane == -1) ? dw.NestedPanes.GetDefaultPreviousPane(pane) : dockPanel.Panes[indexPrevPane]; - DockAlignment alignment = dockWindows[i].NestedPanes[j].Alignment; - double proportion = dockWindows[i].NestedPanes[j].Proportion; - pane.DockTo(dw, prevPane, alignment, proportion); - if (panes[indexPane].DockState == dw.DockState) - panes[indexPane].ZOrderIndex = dockWindows[i].ZOrderIndex; - } - } - - // Create float windows - for (int i = 0; i < floatWindows.Length; i++) - { - FloatWindow fw = null; - for (int j = 0; j < floatWindows[i].NestedPanes.Length; j++) - { - int indexPane = floatWindows[i].NestedPanes[j].IndexPane; - DockPane pane = dockPanel.Panes[indexPane]; - if (j == 0) - fw = dockPanel.FloatWindowFactory.CreateFloatWindow(dockPanel, pane, floatWindows[i].Bounds); - else - { - int indexPrevPane = floatWindows[i].NestedPanes[j].IndexPrevPane; - DockPane prevPane = indexPrevPane == -1 ? null : dockPanel.Panes[indexPrevPane]; - DockAlignment alignment = floatWindows[i].NestedPanes[j].Alignment; - double proportion = floatWindows[i].NestedPanes[j].Proportion; - pane.DockTo(fw, prevPane, alignment, proportion); - } - - if (panes[indexPane].DockState == fw.DockState) - panes[indexPane].ZOrderIndex = floatWindows[i].ZOrderIndex; - } - } - - // sort IDockContent by its Pane's ZOrder - int[] sortedContents = null; - if (contents.Length > 0) - { - sortedContents = new int[contents.Length]; - for (int i = 0; i < contents.Length; i++) - sortedContents[i] = i; - - int lastDocument = contents.Length; - for (int i = 0; i < contents.Length - 1; i++) - { - for (int j = i + 1; j < contents.Length; j++) - { - DockPane pane1 = dockPanel.Contents[sortedContents[i]].DockHandler.Pane; - int ZOrderIndex1 = pane1 == null ? 0 : panes[dockPanel.Panes.IndexOf(pane1)].ZOrderIndex; - DockPane pane2 = dockPanel.Contents[sortedContents[j]].DockHandler.Pane; - int ZOrderIndex2 = pane2 == null ? 0 : panes[dockPanel.Panes.IndexOf(pane2)].ZOrderIndex; - if (ZOrderIndex1 > ZOrderIndex2) - { - int temp = sortedContents[i]; - sortedContents[i] = sortedContents[j]; - sortedContents[j] = temp; - } - } - } - } - - // show non-document IDockContent first to avoid screen flickers - for (int i = 0; i < contents.Length; i++) - { - IDockContent content = dockPanel.Contents[sortedContents[i]]; - if (content.DockHandler.Pane != null && content.DockHandler.Pane.DockState != DockState.Document) - content.DockHandler.IsHidden = contents[sortedContents[i]].IsHidden; - } - - // after all non-document IDockContent, show document IDockContent - for (int i = 0; i < contents.Length; i++) - { - IDockContent content = dockPanel.Contents[sortedContents[i]]; - if (content.DockHandler.Pane != null && content.DockHandler.Pane.DockState == DockState.Document) - content.DockHandler.IsHidden = contents[sortedContents[i]].IsHidden; - } - - for (int i = 0; i < panes.Length; i++) - dockPanel.Panes[i].ActiveContent = panes[i].IndexActiveContent == -1 ? null : dockPanel.Contents[panes[i].IndexActiveContent]; - - if (dockPanelStruct.IndexActiveDocumentPane != -1) - dockPanel.Panes[dockPanelStruct.IndexActiveDocumentPane].Activate(); - - if (dockPanelStruct.IndexActivePane != -1) - dockPanel.Panes[dockPanelStruct.IndexActivePane].Activate(); - - for (int i = dockPanel.Contents.Count - 1; i >= 0; i--) - if (dockPanel.Contents[i] is DummyContent) - dockPanel.Contents[i].DockHandler.Form.Close(); - - dockPanel.ResumeLayout(true, true); - } - - private static bool MoveToNextElement(XmlTextReader xmlIn) - { - if (!xmlIn.Read()) - return false; - - while (xmlIn.NodeType == XmlNodeType.EndElement) - { - if (!xmlIn.Read()) - return false; - } - - return true; - } - - private static bool IsFormatVersionValid(string formatVersion) - { - if (formatVersion == ConfigFileVersion) - return true; - - foreach (string s in CompatibleConfigFileVersions) - if (s == formatVersion) - return true; - - return false; - } - } - - public void SaveAsXml(string fileName) - { - Persistor.SaveAsXml(this, fileName); - } - - public void SaveAsXml(string fileName, Encoding encoding) - { - Persistor.SaveAsXml(this, fileName, encoding); - } - - public void SaveAsXml(Stream stream, Encoding encoding) - { - Persistor.SaveAsXml(this, stream, encoding); - } - - public void SaveAsXml(Stream stream, Encoding encoding, bool upstream) - { - Persistor.SaveAsXml(this, stream, encoding, upstream); - } - - public void LoadFromXml(string fileName, DeserializeDockContent deserializeContent) - { - Persistor.LoadFromXml(this, fileName, deserializeContent); - } - - public void LoadFromXml(Stream stream, DeserializeDockContent deserializeContent) - { - Persistor.LoadFromXml(this, stream, deserializeContent); - } - - public void LoadFromXml(Stream stream, DeserializeDockContent deserializeContent, bool closeStream) - { - Persistor.LoadFromXml(this, stream, deserializeContent, closeStream); - } - } -} +using System; +using System.ComponentModel; +using System.Windows.Forms; +using System.Drawing; +using LSLEditor.Docking; +using System.IO; +using System.Text; +using System.Xml; +using System.Globalization; + +namespace LSLEditor.Docking +{ + partial class DockPanel + { + private static class Persistor + { + private const string ConfigFileVersion = "1.0"; + private static string[] CompatibleConfigFileVersions = new string[] { }; + + private class DummyContent : DockContent + { + } + + private struct DockPanelStruct + { + private double m_dockLeftPortion; + public double DockLeftPortion + { + get { return m_dockLeftPortion; } + set { m_dockLeftPortion = value; } + } + + private double m_dockRightPortion; + public double DockRightPortion + { + get { return m_dockRightPortion; } + set { m_dockRightPortion = value; } + } + + private double m_dockTopPortion; + public double DockTopPortion + { + get { return m_dockTopPortion; } + set { m_dockTopPortion = value; } + } + + private double m_dockBottomPortion; + public double DockBottomPortion + { + get { return m_dockBottomPortion; } + set { m_dockBottomPortion = value; } + } + + private int m_indexActiveDocumentPane; + public int IndexActiveDocumentPane + { + get { return m_indexActiveDocumentPane; } + set { m_indexActiveDocumentPane = value; } + } + + private int m_indexActivePane; + public int IndexActivePane + { + get { return m_indexActivePane; } + set { m_indexActivePane = value; } + } + } + + private struct ContentStruct + { + private string m_persistString; + public string PersistString + { + get { return m_persistString; } + set { m_persistString = value; } + } + + private double m_autoHidePortion; + public double AutoHidePortion + { + get { return m_autoHidePortion; } + set { m_autoHidePortion = value; } + } + + private bool m_isHidden; + public bool IsHidden + { + get { return m_isHidden; } + set { m_isHidden = value; } + } + + private bool m_isFloat; + public bool IsFloat + { + get { return m_isFloat; } + set { m_isFloat = value; } + } + } + + private struct PaneStruct + { + private DockState m_dockState; + public DockState DockState + { + get { return m_dockState; } + set { m_dockState = value; } + } + + private int m_indexActiveContent; + public int IndexActiveContent + { + get { return m_indexActiveContent; } + set { m_indexActiveContent = value; } + } + + private int[] m_indexContents; + public int[] IndexContents + { + get { return m_indexContents; } + set { m_indexContents = value; } + } + + private int m_zOrderIndex; + public int ZOrderIndex + { + get { return m_zOrderIndex; } + set { m_zOrderIndex = value; } + } + } + + private struct NestedPane + { + private int m_indexPane; + public int IndexPane + { + get { return m_indexPane; } + set { m_indexPane = value; } + } + + private int m_indexPrevPane; + public int IndexPrevPane + { + get { return m_indexPrevPane; } + set { m_indexPrevPane = value; } + } + + private DockAlignment m_alignment; + public DockAlignment Alignment + { + get { return m_alignment; } + set { m_alignment = value; } + } + + private double m_proportion; + public double Proportion + { + get { return m_proportion; } + set { m_proportion = value; } + } + } + + private struct DockWindowStruct + { + private DockState m_dockState; + public DockState DockState + { + get { return m_dockState; } + set { m_dockState = value; } + } + + private int m_zOrderIndex; + public int ZOrderIndex + { + get { return m_zOrderIndex; } + set { m_zOrderIndex = value; } + } + + private NestedPane[] m_nestedPanes; + public NestedPane[] NestedPanes + { + get { return m_nestedPanes; } + set { m_nestedPanes = value; } + } + } + + private struct FloatWindowStruct + { + private Rectangle m_bounds; + public Rectangle Bounds + { + get { return m_bounds; } + set { m_bounds = value; } + } + + private int m_zOrderIndex; + public int ZOrderIndex + { + get { return m_zOrderIndex; } + set { m_zOrderIndex = value; } + } + + private NestedPane[] m_nestedPanes; + public NestedPane[] NestedPanes + { + get { return m_nestedPanes; } + set { m_nestedPanes = value; } + } + } + + public static void SaveAsXml(DockPanel dockPanel, string fileName) + { + SaveAsXml(dockPanel, fileName, Encoding.Unicode); + } + + public static void SaveAsXml(DockPanel dockPanel, string fileName, Encoding encoding) + { + FileStream fs = new FileStream(fileName, FileMode.Create); + try + { + SaveAsXml(dockPanel, fs, encoding); + } + finally + { + fs.Close(); + } + } + + public static void SaveAsXml(DockPanel dockPanel, Stream stream, Encoding encoding) + { + SaveAsXml(dockPanel, stream, encoding, false); + } + + public static void SaveAsXml(DockPanel dockPanel, Stream stream, Encoding encoding, bool upstream) + { + XmlTextWriter xmlOut = new XmlTextWriter(stream, encoding); + + // Use indenting for readability + xmlOut.Formatting = Formatting.Indented; + + if (!upstream) + xmlOut.WriteStartDocument(); + + // Always begin file with identification and warning + xmlOut.WriteComment(Strings.DockPanel_Persistor_XmlFileComment1); + xmlOut.WriteComment(Strings.DockPanel_Persistor_XmlFileComment2); + + // Associate a version number with the root element so that future version of the code + // will be able to be backwards compatible or at least recognise out of date versions + xmlOut.WriteStartElement("DockPanel"); + xmlOut.WriteAttributeString("FormatVersion", ConfigFileVersion); + xmlOut.WriteAttributeString("DockLeftPortion", dockPanel.DockLeftPortion.ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteAttributeString("DockRightPortion", dockPanel.DockRightPortion.ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteAttributeString("DockTopPortion", dockPanel.DockTopPortion.ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteAttributeString("DockBottomPortion", dockPanel.DockBottomPortion.ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteAttributeString("ActiveDocumentPane", dockPanel.Panes.IndexOf(dockPanel.ActiveDocumentPane).ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteAttributeString("ActivePane", dockPanel.Panes.IndexOf(dockPanel.ActivePane).ToString(CultureInfo.InvariantCulture)); + + // Contents + xmlOut.WriteStartElement("Contents"); + xmlOut.WriteAttributeString("Count", dockPanel.Contents.Count.ToString(CultureInfo.InvariantCulture)); + foreach (IDockContent content in dockPanel.Contents) + { + xmlOut.WriteStartElement("Content"); + xmlOut.WriteAttributeString("ID", dockPanel.Contents.IndexOf(content).ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteAttributeString("PersistString", content.DockHandler.PersistString); + xmlOut.WriteAttributeString("AutoHidePortion", content.DockHandler.AutoHidePortion.ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteAttributeString("IsHidden", content.DockHandler.IsHidden.ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteAttributeString("IsFloat", content.DockHandler.IsFloat.ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteEndElement(); + } + xmlOut.WriteEndElement(); + + // Panes + xmlOut.WriteStartElement("Panes"); + xmlOut.WriteAttributeString("Count", dockPanel.Panes.Count.ToString(CultureInfo.InvariantCulture)); + foreach (DockPane pane in dockPanel.Panes) + { + xmlOut.WriteStartElement("Pane"); + xmlOut.WriteAttributeString("ID", dockPanel.Panes.IndexOf(pane).ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteAttributeString("DockState", pane.DockState.ToString()); + xmlOut.WriteAttributeString("ActiveContent", dockPanel.Contents.IndexOf(pane.ActiveContent).ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteStartElement("Contents"); + xmlOut.WriteAttributeString("Count", pane.Contents.Count.ToString(CultureInfo.InvariantCulture)); + foreach (IDockContent content in pane.Contents) + { + xmlOut.WriteStartElement("Content"); + xmlOut.WriteAttributeString("ID", pane.Contents.IndexOf(content).ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteAttributeString("RefID", dockPanel.Contents.IndexOf(content).ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteEndElement(); + } + xmlOut.WriteEndElement(); + xmlOut.WriteEndElement(); + } + xmlOut.WriteEndElement(); + + // DockWindows + xmlOut.WriteStartElement("DockWindows"); + int dockWindowId = 0; + foreach (DockWindow dw in dockPanel.DockWindows) + { + xmlOut.WriteStartElement("DockWindow"); + xmlOut.WriteAttributeString("ID", dockWindowId.ToString(CultureInfo.InvariantCulture)); + dockWindowId++; + xmlOut.WriteAttributeString("DockState", dw.DockState.ToString()); + xmlOut.WriteAttributeString("ZOrderIndex", dockPanel.Controls.IndexOf(dw).ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteStartElement("NestedPanes"); + xmlOut.WriteAttributeString("Count", dw.NestedPanes.Count.ToString(CultureInfo.InvariantCulture)); + foreach (DockPane pane in dw.NestedPanes) + { + xmlOut.WriteStartElement("Pane"); + xmlOut.WriteAttributeString("ID", dw.NestedPanes.IndexOf(pane).ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteAttributeString("RefID", dockPanel.Panes.IndexOf(pane).ToString(CultureInfo.InvariantCulture)); + NestedDockingStatus status = pane.NestedDockingStatus; + xmlOut.WriteAttributeString("PrevPane", dockPanel.Panes.IndexOf(status.PreviousPane).ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteAttributeString("Alignment", status.Alignment.ToString()); + xmlOut.WriteAttributeString("Proportion", status.Proportion.ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteEndElement(); + } + xmlOut.WriteEndElement(); + xmlOut.WriteEndElement(); + } + xmlOut.WriteEndElement(); + + // FloatWindows + RectangleConverter rectConverter = new RectangleConverter(); + xmlOut.WriteStartElement("FloatWindows"); + xmlOut.WriteAttributeString("Count", dockPanel.FloatWindows.Count.ToString(CultureInfo.InvariantCulture)); + foreach (FloatWindow fw in dockPanel.FloatWindows) + { + xmlOut.WriteStartElement("FloatWindow"); + xmlOut.WriteAttributeString("ID", dockPanel.FloatWindows.IndexOf(fw).ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteAttributeString("Bounds", rectConverter.ConvertToInvariantString(fw.Bounds)); + xmlOut.WriteAttributeString("ZOrderIndex", fw.DockPanel.FloatWindows.IndexOf(fw).ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteStartElement("NestedPanes"); + xmlOut.WriteAttributeString("Count", fw.NestedPanes.Count.ToString(CultureInfo.InvariantCulture)); + foreach (DockPane pane in fw.NestedPanes) + { + xmlOut.WriteStartElement("Pane"); + xmlOut.WriteAttributeString("ID", fw.NestedPanes.IndexOf(pane).ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteAttributeString("RefID", dockPanel.Panes.IndexOf(pane).ToString(CultureInfo.InvariantCulture)); + NestedDockingStatus status = pane.NestedDockingStatus; + xmlOut.WriteAttributeString("PrevPane", dockPanel.Panes.IndexOf(status.PreviousPane).ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteAttributeString("Alignment", status.Alignment.ToString()); + xmlOut.WriteAttributeString("Proportion", status.Proportion.ToString(CultureInfo.InvariantCulture)); + xmlOut.WriteEndElement(); + } + xmlOut.WriteEndElement(); + xmlOut.WriteEndElement(); + } + xmlOut.WriteEndElement(); // + + xmlOut.WriteEndElement(); + + if (!upstream) + { + xmlOut.WriteEndDocument(); + xmlOut.Close(); + } + else + xmlOut.Flush(); + } + + public static void LoadFromXml(DockPanel dockPanel, string fileName, DeserializeDockContent deserializeContent) + { + FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); + try + { + LoadFromXml(dockPanel, fs, deserializeContent); + } + finally + { + fs.Close(); + } + } + + public static void LoadFromXml(DockPanel dockPanel, Stream stream, DeserializeDockContent deserializeContent) + { + LoadFromXml(dockPanel, stream, deserializeContent, true); + } + + private static ContentStruct[] LoadContents(XmlTextReader xmlIn) + { + int countOfContents = Convert.ToInt32(xmlIn.GetAttribute("Count"), CultureInfo.InvariantCulture); + ContentStruct[] contents = new ContentStruct[countOfContents]; + MoveToNextElement(xmlIn); + for (int i = 0; i < countOfContents; i++) + { + int id = Convert.ToInt32(xmlIn.GetAttribute("ID"), CultureInfo.InvariantCulture); + if (xmlIn.Name != "Content" || id != i) + throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); + + contents[i].PersistString = xmlIn.GetAttribute("PersistString"); + contents[i].AutoHidePortion = Convert.ToDouble(xmlIn.GetAttribute("AutoHidePortion"), CultureInfo.InvariantCulture); + contents[i].IsHidden = Convert.ToBoolean(xmlIn.GetAttribute("IsHidden"), CultureInfo.InvariantCulture); + contents[i].IsFloat = Convert.ToBoolean(xmlIn.GetAttribute("IsFloat"), CultureInfo.InvariantCulture); + MoveToNextElement(xmlIn); + } + + return contents; + } + + private static PaneStruct[] LoadPanes(XmlTextReader xmlIn) + { + EnumConverter dockStateConverter = new EnumConverter(typeof(DockState)); + int countOfPanes = Convert.ToInt32(xmlIn.GetAttribute("Count"), CultureInfo.InvariantCulture); + PaneStruct[] panes = new PaneStruct[countOfPanes]; + MoveToNextElement(xmlIn); + for (int i = 0; i < countOfPanes; i++) + { + int id = Convert.ToInt32(xmlIn.GetAttribute("ID"), CultureInfo.InvariantCulture); + if (xmlIn.Name != "Pane" || id != i) + throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); + + panes[i].DockState = (DockState)dockStateConverter.ConvertFrom(xmlIn.GetAttribute("DockState")); + panes[i].IndexActiveContent = Convert.ToInt32(xmlIn.GetAttribute("ActiveContent"), CultureInfo.InvariantCulture); + panes[i].ZOrderIndex = -1; + + MoveToNextElement(xmlIn); + if (xmlIn.Name != "Contents") + throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); + int countOfPaneContents = Convert.ToInt32(xmlIn.GetAttribute("Count"), CultureInfo.InvariantCulture); + panes[i].IndexContents = new int[countOfPaneContents]; + MoveToNextElement(xmlIn); + for (int j = 0; j < countOfPaneContents; j++) + { + int id2 = Convert.ToInt32(xmlIn.GetAttribute("ID"), CultureInfo.InvariantCulture); + if (xmlIn.Name != "Content" || id2 != j) + throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); + + panes[i].IndexContents[j] = Convert.ToInt32(xmlIn.GetAttribute("RefID"), CultureInfo.InvariantCulture); + MoveToNextElement(xmlIn); + } + } + + return panes; + } + + private static DockWindowStruct[] LoadDockWindows(XmlTextReader xmlIn, DockPanel dockPanel) + { + EnumConverter dockStateConverter = new EnumConverter(typeof(DockState)); + EnumConverter dockAlignmentConverter = new EnumConverter(typeof(DockAlignment)); + int countOfDockWindows = dockPanel.DockWindows.Count; + DockWindowStruct[] dockWindows = new DockWindowStruct[countOfDockWindows]; + MoveToNextElement(xmlIn); + for (int i = 0; i < countOfDockWindows; i++) + { + int id = Convert.ToInt32(xmlIn.GetAttribute("ID"), CultureInfo.InvariantCulture); + if (xmlIn.Name != "DockWindow" || id != i) + throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); + + dockWindows[i].DockState = (DockState)dockStateConverter.ConvertFrom(xmlIn.GetAttribute("DockState")); + dockWindows[i].ZOrderIndex = Convert.ToInt32(xmlIn.GetAttribute("ZOrderIndex"), CultureInfo.InvariantCulture); + MoveToNextElement(xmlIn); + if (xmlIn.Name != "DockList" && xmlIn.Name != "NestedPanes") + throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); + int countOfNestedPanes = Convert.ToInt32(xmlIn.GetAttribute("Count"), CultureInfo.InvariantCulture); + dockWindows[i].NestedPanes = new NestedPane[countOfNestedPanes]; + MoveToNextElement(xmlIn); + for (int j = 0; j < countOfNestedPanes; j++) + { + int id2 = Convert.ToInt32(xmlIn.GetAttribute("ID"), CultureInfo.InvariantCulture); + if (xmlIn.Name != "Pane" || id2 != j) + throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); + dockWindows[i].NestedPanes[j].IndexPane = Convert.ToInt32(xmlIn.GetAttribute("RefID"), CultureInfo.InvariantCulture); + dockWindows[i].NestedPanes[j].IndexPrevPane = Convert.ToInt32(xmlIn.GetAttribute("PrevPane"), CultureInfo.InvariantCulture); + dockWindows[i].NestedPanes[j].Alignment = (DockAlignment)dockAlignmentConverter.ConvertFrom(xmlIn.GetAttribute("Alignment")); + dockWindows[i].NestedPanes[j].Proportion = Convert.ToDouble(xmlIn.GetAttribute("Proportion"), CultureInfo.InvariantCulture); + MoveToNextElement(xmlIn); + } + } + + return dockWindows; + } + + private static FloatWindowStruct[] LoadFloatWindows(XmlTextReader xmlIn) + { + EnumConverter dockAlignmentConverter = new EnumConverter(typeof(DockAlignment)); + RectangleConverter rectConverter = new RectangleConverter(); + int countOfFloatWindows = Convert.ToInt32(xmlIn.GetAttribute("Count"), CultureInfo.InvariantCulture); + FloatWindowStruct[] floatWindows = new FloatWindowStruct[countOfFloatWindows]; + MoveToNextElement(xmlIn); + for (int i = 0; i < countOfFloatWindows; i++) + { + int id = Convert.ToInt32(xmlIn.GetAttribute("ID"), CultureInfo.InvariantCulture); + if (xmlIn.Name != "FloatWindow" || id != i) + throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); + + floatWindows[i].Bounds = (Rectangle)rectConverter.ConvertFromInvariantString(xmlIn.GetAttribute("Bounds")); + floatWindows[i].ZOrderIndex = Convert.ToInt32(xmlIn.GetAttribute("ZOrderIndex"), CultureInfo.InvariantCulture); + MoveToNextElement(xmlIn); + if (xmlIn.Name != "DockList" && xmlIn.Name != "NestedPanes") + throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); + int countOfNestedPanes = Convert.ToInt32(xmlIn.GetAttribute("Count"), CultureInfo.InvariantCulture); + floatWindows[i].NestedPanes = new NestedPane[countOfNestedPanes]; + MoveToNextElement(xmlIn); + for (int j = 0; j < countOfNestedPanes; j++) + { + int id2 = Convert.ToInt32(xmlIn.GetAttribute("ID"), CultureInfo.InvariantCulture); + if (xmlIn.Name != "Pane" || id2 != j) + throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); + floatWindows[i].NestedPanes[j].IndexPane = Convert.ToInt32(xmlIn.GetAttribute("RefID"), CultureInfo.InvariantCulture); + floatWindows[i].NestedPanes[j].IndexPrevPane = Convert.ToInt32(xmlIn.GetAttribute("PrevPane"), CultureInfo.InvariantCulture); + floatWindows[i].NestedPanes[j].Alignment = (DockAlignment)dockAlignmentConverter.ConvertFrom(xmlIn.GetAttribute("Alignment")); + floatWindows[i].NestedPanes[j].Proportion = Convert.ToDouble(xmlIn.GetAttribute("Proportion"), CultureInfo.InvariantCulture); + MoveToNextElement(xmlIn); + } + } + + return floatWindows; + } + + public static void LoadFromXml(DockPanel dockPanel, Stream stream, DeserializeDockContent deserializeContent, bool closeStream) + { + + if (dockPanel.Contents.Count != 0) + throw new InvalidOperationException(Strings.DockPanel_LoadFromXml_AlreadyInitialized); + + XmlTextReader xmlIn = new XmlTextReader(stream); + xmlIn.WhitespaceHandling = WhitespaceHandling.None; + xmlIn.MoveToContent(); + + while (!xmlIn.Name.Equals("DockPanel")) + { + if (!MoveToNextElement(xmlIn)) + throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); + } + + string formatVersion = xmlIn.GetAttribute("FormatVersion"); + if (!IsFormatVersionValid(formatVersion)) + throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidFormatVersion); + + DockPanelStruct dockPanelStruct = new DockPanelStruct(); + dockPanelStruct.DockLeftPortion = Convert.ToDouble(xmlIn.GetAttribute("DockLeftPortion"), CultureInfo.InvariantCulture); + dockPanelStruct.DockRightPortion = Convert.ToDouble(xmlIn.GetAttribute("DockRightPortion"), CultureInfo.InvariantCulture); + dockPanelStruct.DockTopPortion = Convert.ToDouble(xmlIn.GetAttribute("DockTopPortion"), CultureInfo.InvariantCulture); + dockPanelStruct.DockBottomPortion = Convert.ToDouble(xmlIn.GetAttribute("DockBottomPortion"), CultureInfo.InvariantCulture); + dockPanelStruct.IndexActiveDocumentPane = Convert.ToInt32(xmlIn.GetAttribute("ActiveDocumentPane"), CultureInfo.InvariantCulture); + dockPanelStruct.IndexActivePane = Convert.ToInt32(xmlIn.GetAttribute("ActivePane"), CultureInfo.InvariantCulture); + + // Load Contents + MoveToNextElement(xmlIn); + if (xmlIn.Name != "Contents") + throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); + ContentStruct[] contents = LoadContents(xmlIn); + + // Load Panes + if (xmlIn.Name != "Panes") + throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); + PaneStruct[] panes = LoadPanes(xmlIn); + + // Load DockWindows + if (xmlIn.Name != "DockWindows") + throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); + DockWindowStruct[] dockWindows = LoadDockWindows(xmlIn, dockPanel); + + // Load FloatWindows + if (xmlIn.Name != "FloatWindows") + throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat); + FloatWindowStruct[] floatWindows = LoadFloatWindows(xmlIn); + + if (closeStream) + xmlIn.Close(); + + dockPanel.SuspendLayout(true); + + dockPanel.DockLeftPortion = dockPanelStruct.DockLeftPortion; + dockPanel.DockRightPortion = dockPanelStruct.DockRightPortion; + dockPanel.DockTopPortion = dockPanelStruct.DockTopPortion; + dockPanel.DockBottomPortion = dockPanelStruct.DockBottomPortion; + + // Set DockWindow ZOrders + int prevMaxDockWindowZOrder = int.MaxValue; + for (int i = 0; i < dockWindows.Length; i++) + { + int maxDockWindowZOrder = -1; + int index = -1; + for (int j = 0; j < dockWindows.Length; j++) + { + if (dockWindows[j].ZOrderIndex > maxDockWindowZOrder && dockWindows[j].ZOrderIndex < prevMaxDockWindowZOrder) + { + maxDockWindowZOrder = dockWindows[j].ZOrderIndex; + index = j; + } + } + + dockPanel.DockWindows[dockWindows[index].DockState].BringToFront(); + prevMaxDockWindowZOrder = maxDockWindowZOrder; + } + + // Create Contents + for (int i = 0; i < contents.Length; i++) + { + IDockContent content = deserializeContent(contents[i].PersistString); + if (content == null) + content = new DummyContent(); + content.DockHandler.DockPanel = dockPanel; + content.DockHandler.AutoHidePortion = contents[i].AutoHidePortion; + content.DockHandler.IsHidden = true; + content.DockHandler.IsFloat = contents[i].IsFloat; + } + + // Create panes + for (int i = 0; i < panes.Length; i++) + { + DockPane pane = null; + for (int j = 0; j < panes[i].IndexContents.Length; j++) + { + IDockContent content = dockPanel.Contents[panes[i].IndexContents[j]]; + if (j == 0) + pane = dockPanel.DockPaneFactory.CreateDockPane(content, panes[i].DockState, false); + else if (panes[i].DockState == DockState.Float) + content.DockHandler.FloatPane = pane; + else + content.DockHandler.PanelPane = pane; + } + } + + // Assign Panes to DockWindows + for (int i = 0; i < dockWindows.Length; i++) + { + for (int j = 0; j < dockWindows[i].NestedPanes.Length; j++) + { + DockWindow dw = dockPanel.DockWindows[dockWindows[i].DockState]; + int indexPane = dockWindows[i].NestedPanes[j].IndexPane; + DockPane pane = dockPanel.Panes[indexPane]; + int indexPrevPane = dockWindows[i].NestedPanes[j].IndexPrevPane; + DockPane prevPane = (indexPrevPane == -1) ? dw.NestedPanes.GetDefaultPreviousPane(pane) : dockPanel.Panes[indexPrevPane]; + DockAlignment alignment = dockWindows[i].NestedPanes[j].Alignment; + double proportion = dockWindows[i].NestedPanes[j].Proportion; + pane.DockTo(dw, prevPane, alignment, proportion); + if (panes[indexPane].DockState == dw.DockState) + panes[indexPane].ZOrderIndex = dockWindows[i].ZOrderIndex; + } + } + + // Create float windows + for (int i = 0; i < floatWindows.Length; i++) + { + FloatWindow fw = null; + for (int j = 0; j < floatWindows[i].NestedPanes.Length; j++) + { + int indexPane = floatWindows[i].NestedPanes[j].IndexPane; + DockPane pane = dockPanel.Panes[indexPane]; + if (j == 0) + fw = dockPanel.FloatWindowFactory.CreateFloatWindow(dockPanel, pane, floatWindows[i].Bounds); + else + { + int indexPrevPane = floatWindows[i].NestedPanes[j].IndexPrevPane; + DockPane prevPane = indexPrevPane == -1 ? null : dockPanel.Panes[indexPrevPane]; + DockAlignment alignment = floatWindows[i].NestedPanes[j].Alignment; + double proportion = floatWindows[i].NestedPanes[j].Proportion; + pane.DockTo(fw, prevPane, alignment, proportion); + } + + if (panes[indexPane].DockState == fw.DockState) + panes[indexPane].ZOrderIndex = floatWindows[i].ZOrderIndex; + } + } + + // sort IDockContent by its Pane's ZOrder + int[] sortedContents = null; + if (contents.Length > 0) + { + sortedContents = new int[contents.Length]; + for (int i = 0; i < contents.Length; i++) + sortedContents[i] = i; + + int lastDocument = contents.Length; + for (int i = 0; i < contents.Length - 1; i++) + { + for (int j = i + 1; j < contents.Length; j++) + { + DockPane pane1 = dockPanel.Contents[sortedContents[i]].DockHandler.Pane; + int ZOrderIndex1 = pane1 == null ? 0 : panes[dockPanel.Panes.IndexOf(pane1)].ZOrderIndex; + DockPane pane2 = dockPanel.Contents[sortedContents[j]].DockHandler.Pane; + int ZOrderIndex2 = pane2 == null ? 0 : panes[dockPanel.Panes.IndexOf(pane2)].ZOrderIndex; + if (ZOrderIndex1 > ZOrderIndex2) + { + int temp = sortedContents[i]; + sortedContents[i] = sortedContents[j]; + sortedContents[j] = temp; + } + } + } + } + + // show non-document IDockContent first to avoid screen flickers + for (int i = 0; i < contents.Length; i++) + { + IDockContent content = dockPanel.Contents[sortedContents[i]]; + if (content.DockHandler.Pane != null && content.DockHandler.Pane.DockState != DockState.Document) + content.DockHandler.IsHidden = contents[sortedContents[i]].IsHidden; + } + + // after all non-document IDockContent, show document IDockContent + for (int i = 0; i < contents.Length; i++) + { + IDockContent content = dockPanel.Contents[sortedContents[i]]; + if (content.DockHandler.Pane != null && content.DockHandler.Pane.DockState == DockState.Document) + content.DockHandler.IsHidden = contents[sortedContents[i]].IsHidden; + } + + for (int i = 0; i < panes.Length; i++) + dockPanel.Panes[i].ActiveContent = panes[i].IndexActiveContent == -1 ? null : dockPanel.Contents[panes[i].IndexActiveContent]; + + if (dockPanelStruct.IndexActiveDocumentPane != -1) + dockPanel.Panes[dockPanelStruct.IndexActiveDocumentPane].Activate(); + + if (dockPanelStruct.IndexActivePane != -1) + dockPanel.Panes[dockPanelStruct.IndexActivePane].Activate(); + + for (int i = dockPanel.Contents.Count - 1; i >= 0; i--) + if (dockPanel.Contents[i] is DummyContent) + dockPanel.Contents[i].DockHandler.Form.Close(); + + dockPanel.ResumeLayout(true, true); + } + + private static bool MoveToNextElement(XmlTextReader xmlIn) + { + if (!xmlIn.Read()) + return false; + + while (xmlIn.NodeType == XmlNodeType.EndElement) + { + if (!xmlIn.Read()) + return false; + } + + return true; + } + + private static bool IsFormatVersionValid(string formatVersion) + { + if (formatVersion == ConfigFileVersion) + return true; + + foreach (string s in CompatibleConfigFileVersions) + if (s == formatVersion) + return true; + + return false; + } + } + + public void SaveAsXml(string fileName) + { + Persistor.SaveAsXml(this, fileName); + } + + public void SaveAsXml(string fileName, Encoding encoding) + { + Persistor.SaveAsXml(this, fileName, encoding); + } + + public void SaveAsXml(Stream stream, Encoding encoding) + { + Persistor.SaveAsXml(this, stream, encoding); + } + + public void SaveAsXml(Stream stream, Encoding encoding, bool upstream) + { + Persistor.SaveAsXml(this, stream, encoding, upstream); + } + + public void LoadFromXml(string fileName, DeserializeDockContent deserializeContent) + { + Persistor.LoadFromXml(this, fileName, deserializeContent); + } + + public void LoadFromXml(Stream stream, DeserializeDockContent deserializeContent) + { + Persistor.LoadFromXml(this, stream, deserializeContent); + } + + public void LoadFromXml(Stream stream, DeserializeDockContent deserializeContent, bool closeStream) + { + Persistor.LoadFromXml(this, stream, deserializeContent, closeStream); + } + } +} diff --git a/trunk/Docking/DockPanel.SplitterDragHandler.cs b/source/Docking/DockPanel.SplitterDragHandler.cs similarity index 96% rename from trunk/Docking/DockPanel.SplitterDragHandler.cs rename to source/Docking/DockPanel.SplitterDragHandler.cs index e6bab36..50b103d 100644 --- a/trunk/Docking/DockPanel.SplitterDragHandler.cs +++ b/source/Docking/DockPanel.SplitterDragHandler.cs @@ -1,165 +1,165 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Windows.Forms; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.ComponentModel; - -namespace LSLEditor.Docking -{ - partial class DockPanel - { - private sealed class SplitterDragHandler : DragHandler - { - private class SplitterOutline - { - public SplitterOutline() - { - m_dragForm = new DragForm(); - SetDragForm(Rectangle.Empty); - DragForm.BackColor = Color.Black; - DragForm.Opacity = 0.7; - DragForm.Show(false); - } - - DragForm m_dragForm; - private DragForm DragForm - { - get { return m_dragForm; } - } - - public void Show(Rectangle rect) - { - SetDragForm(rect); - } - - public void Close() - { - DragForm.Close(); - } - - private void SetDragForm(Rectangle rect) - { - DragForm.Bounds = rect; - if (rect == Rectangle.Empty) - DragForm.Region = new Region(Rectangle.Empty); - else if (DragForm.Region != null) - DragForm.Region = null; - } - } - - public SplitterDragHandler(DockPanel dockPanel) - : base(dockPanel) - { - } - - public new ISplitterDragSource DragSource - { - get { return base.DragSource as ISplitterDragSource; } - private set { base.DragSource = value; } - } - - private SplitterOutline m_outline; - private SplitterOutline Outline - { - get { return m_outline; } - set { m_outline = value; } - } - - private Rectangle m_rectSplitter; - private Rectangle RectSplitter - { - get { return m_rectSplitter; } - set { m_rectSplitter = value; } - } - - public void BeginDrag(ISplitterDragSource dragSource, Rectangle rectSplitter) - { - DragSource = dragSource; - RectSplitter = rectSplitter; - - if (!BeginDrag()) - { - DragSource = null; - return; - } - - Outline = new SplitterOutline(); - Outline.Show(rectSplitter); - DragSource.BeginDrag(rectSplitter); - } - - protected override void OnDragging() - { - Outline.Show(GetSplitterOutlineBounds(Control.MousePosition)); - } - - protected override void OnEndDrag(bool abort) - { - DockPanel.SuspendLayout(true); - - Outline.Close(); - - if (!abort) - DragSource.MoveSplitter(GetMovingOffset(Control.MousePosition)); - - DragSource.EndDrag(); - DockPanel.ResumeLayout(true, true); - } - - private int GetMovingOffset(Point ptMouse) - { - Rectangle rect = GetSplitterOutlineBounds(ptMouse); - if (DragSource.IsVertical) - return rect.X - RectSplitter.X; - else - return rect.Y - RectSplitter.Y; - } - - private Rectangle GetSplitterOutlineBounds(Point ptMouse) - { - Rectangle rectLimit = DragSource.DragLimitBounds; - - Rectangle rect = RectSplitter; - if (rectLimit.Width <= 0 || rectLimit.Height <= 0) - return rect; - - if (DragSource.IsVertical) - { - rect.X += ptMouse.X - StartMousePosition.X; - rect.Height = rectLimit.Height; - } - else - { - rect.Y += ptMouse.Y - StartMousePosition.Y; - rect.Width = rectLimit.Width; - } - - if (rect.Left < rectLimit.Left) - rect.X = rectLimit.X; - if (rect.Top < rectLimit.Top) - rect.Y = rectLimit.Y; - if (rect.Right > rectLimit.Right) - rect.X -= rect.Right - rectLimit.Right; - if (rect.Bottom > rectLimit.Bottom) - rect.Y -= rect.Bottom - rectLimit.Bottom; - - return rect; - } - } - - private SplitterDragHandler m_splitterDragHandler = null; - private SplitterDragHandler GetSplitterDragHandler() - { - if (m_splitterDragHandler == null) - m_splitterDragHandler = new SplitterDragHandler(this); - return m_splitterDragHandler; - } - - internal void BeginDrag(ISplitterDragSource dragSource, Rectangle rectSplitter) - { - GetSplitterDragHandler().BeginDrag(dragSource, rectSplitter); - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.ComponentModel; + +namespace LSLEditor.Docking +{ + partial class DockPanel + { + private sealed class SplitterDragHandler : DragHandler + { + private class SplitterOutline + { + public SplitterOutline() + { + m_dragForm = new DragForm(); + SetDragForm(Rectangle.Empty); + DragForm.BackColor = Color.Black; + DragForm.Opacity = 0.7; + DragForm.Show(false); + } + + DragForm m_dragForm; + private DragForm DragForm + { + get { return m_dragForm; } + } + + public void Show(Rectangle rect) + { + SetDragForm(rect); + } + + public void Close() + { + DragForm.Close(); + } + + private void SetDragForm(Rectangle rect) + { + DragForm.Bounds = rect; + if (rect == Rectangle.Empty) + DragForm.Region = new Region(Rectangle.Empty); + else if (DragForm.Region != null) + DragForm.Region = null; + } + } + + public SplitterDragHandler(DockPanel dockPanel) + : base(dockPanel) + { + } + + public new ISplitterDragSource DragSource + { + get { return base.DragSource as ISplitterDragSource; } + private set { base.DragSource = value; } + } + + private SplitterOutline m_outline; + private SplitterOutline Outline + { + get { return m_outline; } + set { m_outline = value; } + } + + private Rectangle m_rectSplitter; + private Rectangle RectSplitter + { + get { return m_rectSplitter; } + set { m_rectSplitter = value; } + } + + public void BeginDrag(ISplitterDragSource dragSource, Rectangle rectSplitter) + { + DragSource = dragSource; + RectSplitter = rectSplitter; + + if (!BeginDrag()) + { + DragSource = null; + return; + } + + Outline = new SplitterOutline(); + Outline.Show(rectSplitter); + DragSource.BeginDrag(rectSplitter); + } + + protected override void OnDragging() + { + Outline.Show(GetSplitterOutlineBounds(Control.MousePosition)); + } + + protected override void OnEndDrag(bool abort) + { + DockPanel.SuspendLayout(true); + + Outline.Close(); + + if (!abort) + DragSource.MoveSplitter(GetMovingOffset(Control.MousePosition)); + + DragSource.EndDrag(); + DockPanel.ResumeLayout(true, true); + } + + private int GetMovingOffset(Point ptMouse) + { + Rectangle rect = GetSplitterOutlineBounds(ptMouse); + if (DragSource.IsVertical) + return rect.X - RectSplitter.X; + else + return rect.Y - RectSplitter.Y; + } + + private Rectangle GetSplitterOutlineBounds(Point ptMouse) + { + Rectangle rectLimit = DragSource.DragLimitBounds; + + Rectangle rect = RectSplitter; + if (rectLimit.Width <= 0 || rectLimit.Height <= 0) + return rect; + + if (DragSource.IsVertical) + { + rect.X += ptMouse.X - StartMousePosition.X; + rect.Height = rectLimit.Height; + } + else + { + rect.Y += ptMouse.Y - StartMousePosition.Y; + rect.Width = rectLimit.Width; + } + + if (rect.Left < rectLimit.Left) + rect.X = rectLimit.X; + if (rect.Top < rectLimit.Top) + rect.Y = rectLimit.Y; + if (rect.Right > rectLimit.Right) + rect.X -= rect.Right - rectLimit.Right; + if (rect.Bottom > rectLimit.Bottom) + rect.Y -= rect.Bottom - rectLimit.Bottom; + + return rect; + } + } + + private SplitterDragHandler m_splitterDragHandler = null; + private SplitterDragHandler GetSplitterDragHandler() + { + if (m_splitterDragHandler == null) + m_splitterDragHandler = new SplitterDragHandler(this); + return m_splitterDragHandler; + } + + internal void BeginDrag(ISplitterDragSource dragSource, Rectangle rectSplitter) + { + GetSplitterDragHandler().BeginDrag(dragSource, rectSplitter); + } + } +} diff --git a/trunk/Docking/DockPanel.bmp b/source/Docking/DockPanel.bmp similarity index 100% rename from trunk/Docking/DockPanel.bmp rename to source/Docking/DockPanel.bmp diff --git a/trunk/Docking/DockPanel.cs b/source/Docking/DockPanel.cs similarity index 96% rename from trunk/Docking/DockPanel.cs rename to source/Docking/DockPanel.cs index c602dee..edefc53 100644 --- a/trunk/Docking/DockPanel.cs +++ b/source/Docking/DockPanel.cs @@ -1,1028 +1,1028 @@ -using System; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Windows.Forms; -using System.ComponentModel; -using System.Runtime.InteropServices; -using System.IO; -using System.Text; -using System.Diagnostics.CodeAnalysis; -using System.Collections.Generic; - -// To simplify the process of finding the toolbox bitmap resource: -// #1 Create an internal class called "resfinder" outside of the root namespace. -// #2 Use "resfinder" in the toolbox bitmap attribute instead of the control name. -// #3 use the "." string to locate the resource. -// See: http://www.bobpowell.net/toolboxbitmap.htm -internal class resfinder -{ -} - -namespace LSLEditor.Docking -{ - [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters", MessageId = "0#")] - public delegate IDockContent DeserializeDockContent(string persistString); - - [LocalizedDescription("DockPanel_Description")] - [Designer(typeof(System.Windows.Forms.Design.ControlDesigner))] - [ToolboxBitmap(typeof(resfinder), "LSLEditor.Docking.DockPanel.bmp")] - [DefaultProperty("DocumentStyle")] - [DefaultEvent("ActiveContentChanged")] - public partial class DockPanel : Panel - { - private FocusManagerImpl m_focusManager; - private DockPanelExtender m_extender; - private DockPaneCollection m_panes; - private FloatWindowCollection m_floatWindows; - private AutoHideWindowControl m_autoHideWindow; - private DockWindowCollection m_dockWindows; - private DockContent m_dummyContent; - private Control m_dummyControl; - - public DockPanel() - { - m_focusManager = new FocusManagerImpl(this); - m_extender = new DockPanelExtender(this); - m_panes = new DockPaneCollection(); - m_floatWindows = new FloatWindowCollection(); - - SuspendLayout(); - - m_autoHideWindow = new AutoHideWindowControl(this); - m_autoHideWindow.Visible = false; - SetAutoHideWindowParent(); - - m_dummyControl = new DummyControl(); - m_dummyControl.Bounds = new Rectangle(0, 0, 1, 1); - Controls.Add(m_dummyControl); - - m_dockWindows = new DockWindowCollection(this); - Controls.AddRange(new Control[] { - DockWindows[DockState.Document], - DockWindows[DockState.DockLeft], - DockWindows[DockState.DockRight], - DockWindows[DockState.DockTop], - DockWindows[DockState.DockBottom] - }); - - m_dummyContent = new DockContent(); - ResumeLayout(); - } - - private Color m_BackColor; - /// - /// Determines the color with which the client rectangle will be drawn. - /// If you take this property instead of the BackColor it will not have any influence on the borders to the surrounding controls (DockPane). - /// If you use BackColor the borders to the surrounding controls (DockPane) will also change there colors. - /// Alternatively you can use both of them (BackColor to draw the define the color of the borders and DockBackColor to define the color of the client rectangle). - /// For Backgroundimages: Set your prefered Image, then set the DockBackColor and the BackColor to the same Color (Control) - /// - public Color DockBackColor - { - get - { - return !m_BackColor.IsEmpty ? m_BackColor : base.BackColor; - } - set - { - m_BackColor = value; - } - } - - private AutoHideStripBase m_autoHideStripControl = null; - internal AutoHideStripBase AutoHideStripControl - { - get - { - if (m_autoHideStripControl == null) - { - m_autoHideStripControl = AutoHideStripFactory.CreateAutoHideStrip(this); - Controls.Add(m_autoHideStripControl); - } - return m_autoHideStripControl; - } - } - internal void ResetAutoHideStripControl() - { - if (m_autoHideStripControl != null) - m_autoHideStripControl.Dispose(); - - m_autoHideStripControl = null; - } - - private void MdiClientHandleAssigned(object sender, EventArgs e) - { - SetMdiClient(); - PerformLayout(); - } - - private void MdiClient_Layout(object sender, LayoutEventArgs e) - { - if (DocumentStyle != DocumentStyle.DockingMdi) - return; - - foreach (DockPane pane in Panes) - if (pane.DockState == DockState.Document) - pane.SetContentBounds(); - - InvalidateWindowRegion(); - } - - private bool m_disposed = false; - protected override void Dispose(bool disposing) - { - lock (this) - { - if (!m_disposed && disposing) - { - m_focusManager.Dispose(); - if (m_mdiClientController != null) - { - m_mdiClientController.HandleAssigned -= new EventHandler(MdiClientHandleAssigned); - m_mdiClientController.MdiChildActivate -= new EventHandler(ParentFormMdiChildActivate); - m_mdiClientController.Layout -= new LayoutEventHandler(MdiClient_Layout); - m_mdiClientController.Dispose(); - } - FloatWindows.Dispose(); - Panes.Dispose(); - DummyContent.Dispose(); - - m_disposed = true; - } - - base.Dispose(disposing); - } - } - - [Browsable(false)] - public IDockContent ActiveAutoHideContent - { - get { return AutoHideWindow.ActiveContent; } - set { AutoHideWindow.ActiveContent = value; } - } - - private bool m_allowEndUserDocking = true; - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockPanel_AllowEndUserDocking_Description")] - [DefaultValue(true)] - public bool AllowEndUserDocking - { - get { return m_allowEndUserDocking; } - set { m_allowEndUserDocking = value; } - } - - private bool m_allowEndUserNestedDocking = true; - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockPanel_AllowEndUserNestedDocking_Description")] - [DefaultValue(true)] - public bool AllowEndUserNestedDocking - { - get { return m_allowEndUserNestedDocking; } - set { m_allowEndUserNestedDocking = value; } - } - - private DockContentCollection m_contents = new DockContentCollection(); - [Browsable(false)] - public DockContentCollection Contents - { - get { return m_contents; } - } - - internal DockContent DummyContent - { - get { return m_dummyContent; } - } - - private bool m_rightToLeftLayout = false; - [DefaultValue(false)] - [LocalizedCategory("Appearance")] - [LocalizedDescription("DockPanel_RightToLeftLayout_Description")] - public bool RightToLeftLayout - { - get { return m_rightToLeftLayout; } - set - { - if (m_rightToLeftLayout == value) - return; - - m_rightToLeftLayout = value; - foreach (FloatWindow floatWindow in FloatWindows) - floatWindow.RightToLeftLayout = value; - } - } - - protected override void OnRightToLeftChanged(EventArgs e) - { - base.OnRightToLeftChanged(e); - foreach (FloatWindow floatWindow in FloatWindows) - { - if (floatWindow.RightToLeft != RightToLeft) - floatWindow.RightToLeft = RightToLeft; - } - } - - private bool m_showDocumentIcon = false; - [DefaultValue(false)] - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockPanel_ShowDocumentIcon_Description")] - public bool ShowDocumentIcon - { - get { return m_showDocumentIcon; } - set - { - if (m_showDocumentIcon == value) - return; - - m_showDocumentIcon = value; - Refresh(); - } - } - - private DockPanelSkin m_dockPanelSkin = new DockPanelSkin(); - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockPanel_DockPanelSkin")] - public DockPanelSkin Skin - { - get { return m_dockPanelSkin; } - set { m_dockPanelSkin = value; } - } - - private DocumentTabStripLocation m_documentTabStripLocation = DocumentTabStripLocation.Top; - [DefaultValue(DocumentTabStripLocation.Top)] - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockPanel_DocumentTabStripLocation")] - public DocumentTabStripLocation DocumentTabStripLocation - { - get { return m_documentTabStripLocation; } - set { m_documentTabStripLocation = value; } - } - - [Browsable(false)] - public DockPanelExtender Extender - { - get { return m_extender; } - } - - public DockPanelExtender.IDockPaneFactory DockPaneFactory - { - get { return Extender.DockPaneFactory; } - } - - public DockPanelExtender.IFloatWindowFactory FloatWindowFactory - { - get { return Extender.FloatWindowFactory; } - } - - internal DockPanelExtender.IDockPaneCaptionFactory DockPaneCaptionFactory - { - get { return Extender.DockPaneCaptionFactory; } - } - - internal DockPanelExtender.IDockPaneStripFactory DockPaneStripFactory - { - get { return Extender.DockPaneStripFactory; } - } - - internal DockPanelExtender.IAutoHideStripFactory AutoHideStripFactory - { - get { return Extender.AutoHideStripFactory; } - } - - [Browsable(false)] - public DockPaneCollection Panes - { - get { return m_panes; } - } - - internal Rectangle DockArea - { - get - { - return new Rectangle(DockPadding.Left, DockPadding.Top, - ClientRectangle.Width - DockPadding.Left - DockPadding.Right, - ClientRectangle.Height - DockPadding.Top - DockPadding.Bottom); - } - } - - private double m_dockBottomPortion = 0.25; - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockPanel_DockBottomPortion_Description")] - [DefaultValue(0.25)] - public double DockBottomPortion - { - get { return m_dockBottomPortion; } - set - { - if (value <= 0) - throw new ArgumentOutOfRangeException("value"); - - if (value == m_dockBottomPortion) - return; - - m_dockBottomPortion = value; - - if (m_dockBottomPortion < 1 && m_dockTopPortion < 1) - { - if (m_dockTopPortion + m_dockBottomPortion > 1) - m_dockTopPortion = 1 - m_dockBottomPortion; - } - - PerformLayout(); - } - } - - private double m_dockLeftPortion = 0.25; - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockPanel_DockLeftPortion_Description")] - [DefaultValue(0.25)] - public double DockLeftPortion - { - get { return m_dockLeftPortion; } - set - { - if (value <= 0) - throw new ArgumentOutOfRangeException("value"); - - if (value == m_dockLeftPortion) - return; - - m_dockLeftPortion = value; - - if (m_dockLeftPortion < 1 && m_dockRightPortion < 1) - { - if (m_dockLeftPortion + m_dockRightPortion > 1) - m_dockRightPortion = 1 - m_dockLeftPortion; - } - PerformLayout(); - } - } - - private double m_dockRightPortion = 0.25; - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockPanel_DockRightPortion_Description")] - [DefaultValue(0.25)] - public double DockRightPortion - { - get { return m_dockRightPortion; } - set - { - if (value <= 0) - throw new ArgumentOutOfRangeException("value"); - - if (value == m_dockRightPortion) - return; - - m_dockRightPortion = value; - - if (m_dockLeftPortion < 1 && m_dockRightPortion < 1) - { - if (m_dockLeftPortion + m_dockRightPortion > 1) - m_dockLeftPortion = 1 - m_dockRightPortion; - } - PerformLayout(); - } - } - - private double m_dockTopPortion = 0.25; - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockPanel_DockTopPortion_Description")] - [DefaultValue(0.25)] - public double DockTopPortion - { - get { return m_dockTopPortion; } - set - { - if (value <= 0) - throw new ArgumentOutOfRangeException("value"); - - if (value == m_dockTopPortion) - return; - - m_dockTopPortion = value; - - if (m_dockTopPortion < 1 && m_dockBottomPortion < 1) - { - if (m_dockTopPortion + m_dockBottomPortion > 1) - m_dockBottomPortion = 1 - m_dockTopPortion; - } - PerformLayout(); - } - } - - [Browsable(false)] - public DockWindowCollection DockWindows - { - get { return m_dockWindows; } - } - - public void UpdateDockWindowZOrder(DockStyle dockStyle, bool fullPanelEdge) - { - if (dockStyle == DockStyle.Left) - { - if (fullPanelEdge) - DockWindows[DockState.DockLeft].SendToBack(); - else - DockWindows[DockState.DockLeft].BringToFront(); - } - else if (dockStyle == DockStyle.Right) - { - if (fullPanelEdge) - DockWindows[DockState.DockRight].SendToBack(); - else - DockWindows[DockState.DockRight].BringToFront(); - } - else if (dockStyle == DockStyle.Top) - { - if (fullPanelEdge) - DockWindows[DockState.DockTop].SendToBack(); - else - DockWindows[DockState.DockTop].BringToFront(); - } - else if (dockStyle == DockStyle.Bottom) - { - if (fullPanelEdge) - DockWindows[DockState.DockBottom].SendToBack(); - else - DockWindows[DockState.DockBottom].BringToFront(); - } - } - - public int DocumentsCount - { - get - { - int count = 0; - foreach (IDockContent content in Documents) - count++; - - return count; - } - } - - public IDockContent[] DocumentsToArray() - { - int count = DocumentsCount; - IDockContent[] documents = new IDockContent[count]; - int i = 0; - foreach (IDockContent content in Documents) - { - documents[i] = content; - i++; - } - - return documents; - } - - public IEnumerable Documents - { - get - { - foreach (IDockContent content in Contents) - { - if (content.DockHandler.DockState == DockState.Document) - yield return content; - } - } - } - - private Rectangle DocumentRectangle - { - get - { - Rectangle rect = DockArea; - if (DockWindows[DockState.DockLeft].VisibleNestedPanes.Count != 0) - { - rect.X += (int)(DockArea.Width * DockLeftPortion); - rect.Width -= (int)(DockArea.Width * DockLeftPortion); - } - if (DockWindows[DockState.DockRight].VisibleNestedPanes.Count != 0) - rect.Width -= (int)(DockArea.Width * DockRightPortion); - if (DockWindows[DockState.DockTop].VisibleNestedPanes.Count != 0) - { - rect.Y += (int)(DockArea.Height * DockTopPortion); - rect.Height -= (int)(DockArea.Height * DockTopPortion); - } - if (DockWindows[DockState.DockBottom].VisibleNestedPanes.Count != 0) - rect.Height -= (int)(DockArea.Height * DockBottomPortion); - - return rect; - } - } - - private Control DummyControl - { - get { return m_dummyControl; } - } - - [Browsable(false)] - public FloatWindowCollection FloatWindows - { - get { return m_floatWindows; } - } - - private Size m_defaultFloatWindowSize = new Size(300, 300); - [Category("Layout")] - [LocalizedDescription("DockPanel_DefaultFloatWindowSize_Description")] - public Size DefaultFloatWindowSize - { - get { return m_defaultFloatWindowSize; } - set { m_defaultFloatWindowSize = value; } - } - private bool ShouldSerializeDefaultFloatWindowSize() - { - return DefaultFloatWindowSize != new Size(300, 300); - } - - private DocumentStyle m_documentStyle = DocumentStyle.DockingMdi; - [LocalizedCategory("Category_Docking")] - [LocalizedDescription("DockPanel_DocumentStyle_Description")] - [DefaultValue(DocumentStyle.DockingMdi)] - public DocumentStyle DocumentStyle - { - get { return m_documentStyle; } - set - { - if (value == m_documentStyle) - return; - - if (!Enum.IsDefined(typeof(DocumentStyle), value)) - throw new InvalidEnumArgumentException(); - - if (value == DocumentStyle.SystemMdi && DockWindows[DockState.Document].VisibleNestedPanes.Count > 0) - throw new InvalidEnumArgumentException(); - - m_documentStyle = value; - - SuspendLayout(true); - - SetAutoHideWindowParent(); - SetMdiClient(); - InvalidateWindowRegion(); - - foreach (IDockContent content in Contents) - { - if (content.DockHandler.DockState == DockState.Document) - content.DockHandler.SetPaneAndVisible(content.DockHandler.Pane); - } - - PerformMdiClientLayout(); - - ResumeLayout(true, true); - } - } - - private int GetDockWindowSize(DockState dockState) - { - if (dockState == DockState.DockLeft || dockState == DockState.DockRight) - { - int width = ClientRectangle.Width - DockPadding.Left - DockPadding.Right; - int dockLeftSize = m_dockLeftPortion >= 1 ? (int)m_dockLeftPortion : (int)(width * m_dockLeftPortion); - int dockRightSize = m_dockRightPortion >= 1 ? (int)m_dockRightPortion : (int)(width * m_dockRightPortion); - - if (dockLeftSize < MeasurePane.MinSize) - dockLeftSize = MeasurePane.MinSize; - if (dockRightSize < MeasurePane.MinSize) - dockRightSize = MeasurePane.MinSize; - - if (dockLeftSize + dockRightSize > width - MeasurePane.MinSize) - { - int adjust = (dockLeftSize + dockRightSize) - (width - MeasurePane.MinSize); - dockLeftSize -= adjust / 2; - dockRightSize -= adjust / 2; - } - - return dockState == DockState.DockLeft ? dockLeftSize : dockRightSize; - } - else if (dockState == DockState.DockTop || dockState == DockState.DockBottom) - { - int height = ClientRectangle.Height - DockPadding.Top - DockPadding.Bottom; - int dockTopSize = m_dockTopPortion >= 1 ? (int)m_dockTopPortion : (int)(height * m_dockTopPortion); - int dockBottomSize = m_dockBottomPortion >= 1 ? (int)m_dockBottomPortion : (int)(height * m_dockBottomPortion); - - if (dockTopSize < MeasurePane.MinSize) - dockTopSize = MeasurePane.MinSize; - if (dockBottomSize < MeasurePane.MinSize) - dockBottomSize = MeasurePane.MinSize; - - if (dockTopSize + dockBottomSize > height - MeasurePane.MinSize) - { - int adjust = (dockTopSize + dockBottomSize) - (height - MeasurePane.MinSize); - dockTopSize -= adjust / 2; - dockBottomSize -= adjust / 2; - } - - return dockState == DockState.DockTop ? dockTopSize : dockBottomSize; - } - else - return 0; - } - - protected override void OnLayout(LayoutEventArgs levent) - { - SuspendLayout(true); - - AutoHideStripControl.Bounds = ClientRectangle; - - CalculateDockPadding(); - - DockWindows[DockState.DockLeft].Width = GetDockWindowSize(DockState.DockLeft); - DockWindows[DockState.DockRight].Width = GetDockWindowSize(DockState.DockRight); - DockWindows[DockState.DockTop].Height = GetDockWindowSize(DockState.DockTop); - DockWindows[DockState.DockBottom].Height = GetDockWindowSize(DockState.DockBottom); - - AutoHideWindow.Bounds = GetAutoHideWindowBounds(AutoHideWindowRectangle); - - DockWindows[DockState.Document].BringToFront(); - AutoHideWindow.BringToFront(); - - base.OnLayout(levent); - - if (DocumentStyle == DocumentStyle.SystemMdi && MdiClientExists) - { - SetMdiClientBounds(SystemMdiClientBounds); - InvalidateWindowRegion(); - } - else if (DocumentStyle == DocumentStyle.DockingMdi) - InvalidateWindowRegion(); - - ResumeLayout(true, true); - } - - internal Rectangle GetTabStripRectangle(DockState dockState) - { - return AutoHideStripControl.GetTabStripRectangle(dockState); - } - - protected override void OnPaint(PaintEventArgs e) - { - base.OnPaint(e); - - if (DockBackColor == BackColor) return; - - Graphics g = e.Graphics; - SolidBrush bgBrush = new SolidBrush(DockBackColor); - g.FillRectangle(bgBrush, ClientRectangle); - } - - internal void AddContent(IDockContent content) - { - if (content == null) - throw(new ArgumentNullException()); - - if (!Contents.Contains(content)) - { - Contents.Add(content); - OnContentAdded(new DockContentEventArgs(content)); - } - } - - internal void AddPane(DockPane pane) - { - if (Panes.Contains(pane)) - return; - - Panes.Add(pane); - } - - internal void AddFloatWindow(FloatWindow floatWindow) - { - if (FloatWindows.Contains(floatWindow)) - return; - - FloatWindows.Add(floatWindow); - } - - private void CalculateDockPadding() - { - DockPadding.All = 0; - - int height = AutoHideStripControl.MeasureHeight(); - - if (AutoHideStripControl.GetNumberOfPanes(DockState.DockLeftAutoHide) > 0) - DockPadding.Left = height; - if (AutoHideStripControl.GetNumberOfPanes(DockState.DockRightAutoHide) > 0) - DockPadding.Right = height; - if (AutoHideStripControl.GetNumberOfPanes(DockState.DockTopAutoHide) > 0) - DockPadding.Top = height; - if (AutoHideStripControl.GetNumberOfPanes(DockState.DockBottomAutoHide) > 0) - DockPadding.Bottom = height; - } - - internal void RemoveContent(IDockContent content) - { - if (content == null) - throw(new ArgumentNullException()); - - if (Contents.Contains(content)) - { - Contents.Remove(content); - OnContentRemoved(new DockContentEventArgs(content)); - } - } - - internal void RemovePane(DockPane pane) - { - if (!Panes.Contains(pane)) - return; - - Panes.Remove(pane); - } - - internal void RemoveFloatWindow(FloatWindow floatWindow) - { - if (!FloatWindows.Contains(floatWindow)) - return; - - FloatWindows.Remove(floatWindow); - } - - public void SetPaneIndex(DockPane pane, int index) - { - int oldIndex = Panes.IndexOf(pane); - if (oldIndex == -1) - throw(new ArgumentException(Strings.DockPanel_SetPaneIndex_InvalidPane)); - - if (index < 0 || index > Panes.Count - 1) - if (index != -1) - throw(new ArgumentOutOfRangeException(Strings.DockPanel_SetPaneIndex_InvalidIndex)); - - if (oldIndex == index) - return; - if (oldIndex == Panes.Count - 1 && index == -1) - return; - - Panes.Remove(pane); - if (index == -1) - Panes.Add(pane); - else if (oldIndex < index) - Panes.AddAt(pane, index - 1); - else - Panes.AddAt(pane, index); - } - - public void SuspendLayout(bool allWindows) - { - FocusManager.SuspendFocusTracking(); - SuspendLayout(); - if (allWindows) - SuspendMdiClientLayout(); - } - - public void ResumeLayout(bool performLayout, bool allWindows) - { - FocusManager.ResumeFocusTracking(); - ResumeLayout(performLayout); - if (allWindows) - ResumeMdiClientLayout(performLayout); - } - - internal Form ParentForm - { - get - { - if (!IsParentFormValid()) - throw new InvalidOperationException(Strings.DockPanel_ParentForm_Invalid); - - return GetMdiClientController().ParentForm; - } - } - - private bool IsParentFormValid() - { - if (DocumentStyle == DocumentStyle.DockingSdi || DocumentStyle == DocumentStyle.DockingWindow) - return true; - - if (!MdiClientExists) - GetMdiClientController().RenewMdiClient(); - - return (MdiClientExists); - } - - protected override void OnParentChanged(EventArgs e) - { - SetAutoHideWindowParent(); - GetMdiClientController().ParentForm = (this.Parent as Form); - base.OnParentChanged (e); - } - - private void SetAutoHideWindowParent() - { - Control parent; - if (DocumentStyle == DocumentStyle.DockingMdi || - DocumentStyle == DocumentStyle.SystemMdi) - parent = this.Parent; - else - parent = this; - if (AutoHideWindow.Parent != parent) - { - AutoHideWindow.Parent = parent; - AutoHideWindow.BringToFront(); - } - } - - protected override void OnVisibleChanged(EventArgs e) - { - base.OnVisibleChanged (e); - - if (Visible) - SetMdiClient(); - } - - private Rectangle SystemMdiClientBounds - { - get - { - if (!IsParentFormValid() || !Visible) - return Rectangle.Empty; - - Rectangle rect = ParentForm.RectangleToClient(RectangleToScreen(DocumentWindowBounds)); - return rect; - } - } - - internal Rectangle DocumentWindowBounds - { - get - { - Rectangle rectDocumentBounds = DisplayRectangle; - if (DockWindows[DockState.DockLeft].Visible) - { - rectDocumentBounds.X += DockWindows[DockState.DockLeft].Width; - rectDocumentBounds.Width -= DockWindows[DockState.DockLeft].Width; - } - if (DockWindows[DockState.DockRight].Visible) - rectDocumentBounds.Width -= DockWindows[DockState.DockRight].Width; - if (DockWindows[DockState.DockTop].Visible) - { - rectDocumentBounds.Y += DockWindows[DockState.DockTop].Height; - rectDocumentBounds.Height -= DockWindows[DockState.DockTop].Height; - } - if (DockWindows[DockState.DockBottom].Visible) - rectDocumentBounds.Height -= DockWindows[DockState.DockBottom].Height; - - return rectDocumentBounds; - - } - } - - private PaintEventHandler m_dummyControlPaintEventHandler = null; - private void InvalidateWindowRegion() - { - if (DesignMode) - return; - - if (m_dummyControlPaintEventHandler == null) - m_dummyControlPaintEventHandler = new PaintEventHandler(DummyControl_Paint); - - DummyControl.Paint += m_dummyControlPaintEventHandler; - DummyControl.Invalidate(); - } - - void DummyControl_Paint(object sender, PaintEventArgs e) - { - DummyControl.Paint -= m_dummyControlPaintEventHandler; - UpdateWindowRegion(); - } - - private void UpdateWindowRegion() - { - if (this.DocumentStyle == DocumentStyle.DockingMdi) - UpdateWindowRegion_ClipContent(); - else if (this.DocumentStyle == DocumentStyle.DockingSdi || - this.DocumentStyle == DocumentStyle.DockingWindow) - UpdateWindowRegion_FullDocumentArea(); - else if (this.DocumentStyle == DocumentStyle.SystemMdi) - UpdateWindowRegion_EmptyDocumentArea(); - } - - private void UpdateWindowRegion_FullDocumentArea() - { - SetRegion(null); - } - - private void UpdateWindowRegion_EmptyDocumentArea() - { - Rectangle rect = DocumentWindowBounds; - SetRegion(new Rectangle[] { rect }); - } - - private void UpdateWindowRegion_ClipContent() - { - int count = 0; - foreach (DockPane pane in this.Panes) - { - if (!pane.Visible || pane.DockState != DockState.Document) - continue; - - count ++; - } - - if (count == 0) - { - SetRegion(null); - return; - } - - Rectangle[] rects = new Rectangle[count]; - int i = 0; - foreach (DockPane pane in this.Panes) - { - if (!pane.Visible || pane.DockState != DockState.Document) - continue; - - rects[i] = RectangleToClient(pane.RectangleToScreen(pane.ContentRectangle)); - i++; - } - - SetRegion(rects); - } - - private Rectangle[] m_clipRects = null; - private void SetRegion(Rectangle[] clipRects) - { - if (!IsClipRectsChanged(clipRects)) - return; - - m_clipRects = clipRects; - - if (m_clipRects == null || m_clipRects.GetLength(0) == 0) - Region = null; - else - { - Region region = new Region(new Rectangle(0, 0, this.Width, this.Height)); - foreach (Rectangle rect in m_clipRects) - region.Exclude(rect); - Region = region; - } - } - - private bool IsClipRectsChanged(Rectangle[] clipRects) - { - if (clipRects == null && m_clipRects == null) - return false; - else if ((clipRects == null) != (m_clipRects == null)) - return true; - - foreach (Rectangle rect in clipRects) - { - bool matched = false; - foreach (Rectangle rect2 in m_clipRects) - { - if (rect == rect2) - { - matched = true; - break; - } - } - if (!matched) - return true; - } - - foreach (Rectangle rect2 in m_clipRects) - { - bool matched = false; - foreach (Rectangle rect in clipRects) - { - if (rect == rect2) - { - matched = true; - break; - } - } - if (!matched) - return true; - } - return false; - } - - private static readonly object ContentAddedEvent = new object(); - [LocalizedCategory("Category_DockingNotification")] - [LocalizedDescription("DockPanel_ContentAdded_Description")] - public event EventHandler ContentAdded - { - add { Events.AddHandler(ContentAddedEvent, value); } - remove { Events.RemoveHandler(ContentAddedEvent, value); } - } - protected virtual void OnContentAdded(DockContentEventArgs e) - { - EventHandler handler = (EventHandler)Events[ContentAddedEvent]; - if (handler != null) - handler(this, e); - } - - private static readonly object ContentRemovedEvent = new object(); - [LocalizedCategory("Category_DockingNotification")] - [LocalizedDescription("DockPanel_ContentRemoved_Description")] - public event EventHandler ContentRemoved - { - add { Events.AddHandler(ContentRemovedEvent, value); } - remove { Events.RemoveHandler(ContentRemovedEvent, value); } - } - protected virtual void OnContentRemoved(DockContentEventArgs e) - { - EventHandler handler = (EventHandler)Events[ContentRemovedEvent]; - if (handler != null) - handler(this, e); - } - } +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; +using System.ComponentModel; +using System.Runtime.InteropServices; +using System.IO; +using System.Text; +using System.Diagnostics.CodeAnalysis; +using System.Collections.Generic; + +// To simplify the process of finding the toolbox bitmap resource: +// #1 Create an internal class called "resfinder" outside of the root namespace. +// #2 Use "resfinder" in the toolbox bitmap attribute instead of the control name. +// #3 use the "." string to locate the resource. +// See: http://www.bobpowell.net/toolboxbitmap.htm +internal class resfinder +{ +} + +namespace LSLEditor.Docking +{ + [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters", MessageId = "0#")] + public delegate IDockContent DeserializeDockContent(string persistString); + + [LocalizedDescription("DockPanel_Description")] + [Designer(typeof(System.Windows.Forms.Design.ControlDesigner))] + [ToolboxBitmap(typeof(resfinder), "LSLEditor.Docking.DockPanel.bmp")] + [DefaultProperty("DocumentStyle")] + [DefaultEvent("ActiveContentChanged")] + public partial class DockPanel : Panel + { + private FocusManagerImpl m_focusManager; + private DockPanelExtender m_extender; + private DockPaneCollection m_panes; + private FloatWindowCollection m_floatWindows; + private AutoHideWindowControl m_autoHideWindow; + private DockWindowCollection m_dockWindows; + private DockContent m_dummyContent; + private Control m_dummyControl; + + public DockPanel() + { + m_focusManager = new FocusManagerImpl(this); + m_extender = new DockPanelExtender(this); + m_panes = new DockPaneCollection(); + m_floatWindows = new FloatWindowCollection(); + + SuspendLayout(); + + m_autoHideWindow = new AutoHideWindowControl(this); + m_autoHideWindow.Visible = false; + SetAutoHideWindowParent(); + + m_dummyControl = new DummyControl(); + m_dummyControl.Bounds = new Rectangle(0, 0, 1, 1); + Controls.Add(m_dummyControl); + + m_dockWindows = new DockWindowCollection(this); + Controls.AddRange(new Control[] { + DockWindows[DockState.Document], + DockWindows[DockState.DockLeft], + DockWindows[DockState.DockRight], + DockWindows[DockState.DockTop], + DockWindows[DockState.DockBottom] + }); + + m_dummyContent = new DockContent(); + ResumeLayout(); + } + + private Color m_BackColor; + /// + /// Determines the color with which the client rectangle will be drawn. + /// If you take this property instead of the BackColor it will not have any influence on the borders to the surrounding controls (DockPane). + /// If you use BackColor the borders to the surrounding controls (DockPane) will also change there colors. + /// Alternatively you can use both of them (BackColor to draw the define the color of the borders and DockBackColor to define the color of the client rectangle). + /// For Backgroundimages: Set your prefered Image, then set the DockBackColor and the BackColor to the same Color (Control) + /// + public Color DockBackColor + { + get + { + return !m_BackColor.IsEmpty ? m_BackColor : base.BackColor; + } + set + { + m_BackColor = value; + } + } + + private AutoHideStripBase m_autoHideStripControl = null; + internal AutoHideStripBase AutoHideStripControl + { + get + { + if (m_autoHideStripControl == null) + { + m_autoHideStripControl = AutoHideStripFactory.CreateAutoHideStrip(this); + Controls.Add(m_autoHideStripControl); + } + return m_autoHideStripControl; + } + } + internal void ResetAutoHideStripControl() + { + if (m_autoHideStripControl != null) + m_autoHideStripControl.Dispose(); + + m_autoHideStripControl = null; + } + + private void MdiClientHandleAssigned(object sender, EventArgs e) + { + SetMdiClient(); + PerformLayout(); + } + + private void MdiClient_Layout(object sender, LayoutEventArgs e) + { + if (DocumentStyle != DocumentStyle.DockingMdi) + return; + + foreach (DockPane pane in Panes) + if (pane.DockState == DockState.Document) + pane.SetContentBounds(); + + InvalidateWindowRegion(); + } + + private bool m_disposed = false; + protected override void Dispose(bool disposing) + { + lock (this) + { + if (!m_disposed && disposing) + { + m_focusManager.Dispose(); + if (m_mdiClientController != null) + { + m_mdiClientController.HandleAssigned -= new EventHandler(MdiClientHandleAssigned); + m_mdiClientController.MdiChildActivate -= new EventHandler(ParentFormMdiChildActivate); + m_mdiClientController.Layout -= new LayoutEventHandler(MdiClient_Layout); + m_mdiClientController.Dispose(); + } + FloatWindows.Dispose(); + Panes.Dispose(); + DummyContent.Dispose(); + + m_disposed = true; + } + + base.Dispose(disposing); + } + } + + [Browsable(false)] + public IDockContent ActiveAutoHideContent + { + get { return AutoHideWindow.ActiveContent; } + set { AutoHideWindow.ActiveContent = value; } + } + + private bool m_allowEndUserDocking = true; + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockPanel_AllowEndUserDocking_Description")] + [DefaultValue(true)] + public bool AllowEndUserDocking + { + get { return m_allowEndUserDocking; } + set { m_allowEndUserDocking = value; } + } + + private bool m_allowEndUserNestedDocking = true; + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockPanel_AllowEndUserNestedDocking_Description")] + [DefaultValue(true)] + public bool AllowEndUserNestedDocking + { + get { return m_allowEndUserNestedDocking; } + set { m_allowEndUserNestedDocking = value; } + } + + private DockContentCollection m_contents = new DockContentCollection(); + [Browsable(false)] + public DockContentCollection Contents + { + get { return m_contents; } + } + + internal DockContent DummyContent + { + get { return m_dummyContent; } + } + + private bool m_rightToLeftLayout = false; + [DefaultValue(false)] + [LocalizedCategory("Appearance")] + [LocalizedDescription("DockPanel_RightToLeftLayout_Description")] + public bool RightToLeftLayout + { + get { return m_rightToLeftLayout; } + set + { + if (m_rightToLeftLayout == value) + return; + + m_rightToLeftLayout = value; + foreach (FloatWindow floatWindow in FloatWindows) + floatWindow.RightToLeftLayout = value; + } + } + + protected override void OnRightToLeftChanged(EventArgs e) + { + base.OnRightToLeftChanged(e); + foreach (FloatWindow floatWindow in FloatWindows) + { + if (floatWindow.RightToLeft != RightToLeft) + floatWindow.RightToLeft = RightToLeft; + } + } + + private bool m_showDocumentIcon = false; + [DefaultValue(false)] + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockPanel_ShowDocumentIcon_Description")] + public bool ShowDocumentIcon + { + get { return m_showDocumentIcon; } + set + { + if (m_showDocumentIcon == value) + return; + + m_showDocumentIcon = value; + Refresh(); + } + } + + private DockPanelSkin m_dockPanelSkin = new DockPanelSkin(); + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockPanel_DockPanelSkin")] + public DockPanelSkin Skin + { + get { return m_dockPanelSkin; } + set { m_dockPanelSkin = value; } + } + + private DocumentTabStripLocation m_documentTabStripLocation = DocumentTabStripLocation.Top; + [DefaultValue(DocumentTabStripLocation.Top)] + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockPanel_DocumentTabStripLocation")] + public DocumentTabStripLocation DocumentTabStripLocation + { + get { return m_documentTabStripLocation; } + set { m_documentTabStripLocation = value; } + } + + [Browsable(false)] + public DockPanelExtender Extender + { + get { return m_extender; } + } + + public DockPanelExtender.IDockPaneFactory DockPaneFactory + { + get { return Extender.DockPaneFactory; } + } + + public DockPanelExtender.IFloatWindowFactory FloatWindowFactory + { + get { return Extender.FloatWindowFactory; } + } + + internal DockPanelExtender.IDockPaneCaptionFactory DockPaneCaptionFactory + { + get { return Extender.DockPaneCaptionFactory; } + } + + internal DockPanelExtender.IDockPaneStripFactory DockPaneStripFactory + { + get { return Extender.DockPaneStripFactory; } + } + + internal DockPanelExtender.IAutoHideStripFactory AutoHideStripFactory + { + get { return Extender.AutoHideStripFactory; } + } + + [Browsable(false)] + public DockPaneCollection Panes + { + get { return m_panes; } + } + + internal Rectangle DockArea + { + get + { + return new Rectangle(DockPadding.Left, DockPadding.Top, + ClientRectangle.Width - DockPadding.Left - DockPadding.Right, + ClientRectangle.Height - DockPadding.Top - DockPadding.Bottom); + } + } + + private double m_dockBottomPortion = 0.25; + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockPanel_DockBottomPortion_Description")] + [DefaultValue(0.25)] + public double DockBottomPortion + { + get { return m_dockBottomPortion; } + set + { + if (value <= 0) + throw new ArgumentOutOfRangeException("value"); + + if (value == m_dockBottomPortion) + return; + + m_dockBottomPortion = value; + + if (m_dockBottomPortion < 1 && m_dockTopPortion < 1) + { + if (m_dockTopPortion + m_dockBottomPortion > 1) + m_dockTopPortion = 1 - m_dockBottomPortion; + } + + PerformLayout(); + } + } + + private double m_dockLeftPortion = 0.25; + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockPanel_DockLeftPortion_Description")] + [DefaultValue(0.25)] + public double DockLeftPortion + { + get { return m_dockLeftPortion; } + set + { + if (value <= 0) + throw new ArgumentOutOfRangeException("value"); + + if (value == m_dockLeftPortion) + return; + + m_dockLeftPortion = value; + + if (m_dockLeftPortion < 1 && m_dockRightPortion < 1) + { + if (m_dockLeftPortion + m_dockRightPortion > 1) + m_dockRightPortion = 1 - m_dockLeftPortion; + } + PerformLayout(); + } + } + + private double m_dockRightPortion = 0.25; + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockPanel_DockRightPortion_Description")] + [DefaultValue(0.25)] + public double DockRightPortion + { + get { return m_dockRightPortion; } + set + { + if (value <= 0) + throw new ArgumentOutOfRangeException("value"); + + if (value == m_dockRightPortion) + return; + + m_dockRightPortion = value; + + if (m_dockLeftPortion < 1 && m_dockRightPortion < 1) + { + if (m_dockLeftPortion + m_dockRightPortion > 1) + m_dockLeftPortion = 1 - m_dockRightPortion; + } + PerformLayout(); + } + } + + private double m_dockTopPortion = 0.25; + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockPanel_DockTopPortion_Description")] + [DefaultValue(0.25)] + public double DockTopPortion + { + get { return m_dockTopPortion; } + set + { + if (value <= 0) + throw new ArgumentOutOfRangeException("value"); + + if (value == m_dockTopPortion) + return; + + m_dockTopPortion = value; + + if (m_dockTopPortion < 1 && m_dockBottomPortion < 1) + { + if (m_dockTopPortion + m_dockBottomPortion > 1) + m_dockBottomPortion = 1 - m_dockTopPortion; + } + PerformLayout(); + } + } + + [Browsable(false)] + public DockWindowCollection DockWindows + { + get { return m_dockWindows; } + } + + public void UpdateDockWindowZOrder(DockStyle dockStyle, bool fullPanelEdge) + { + if (dockStyle == DockStyle.Left) + { + if (fullPanelEdge) + DockWindows[DockState.DockLeft].SendToBack(); + else + DockWindows[DockState.DockLeft].BringToFront(); + } + else if (dockStyle == DockStyle.Right) + { + if (fullPanelEdge) + DockWindows[DockState.DockRight].SendToBack(); + else + DockWindows[DockState.DockRight].BringToFront(); + } + else if (dockStyle == DockStyle.Top) + { + if (fullPanelEdge) + DockWindows[DockState.DockTop].SendToBack(); + else + DockWindows[DockState.DockTop].BringToFront(); + } + else if (dockStyle == DockStyle.Bottom) + { + if (fullPanelEdge) + DockWindows[DockState.DockBottom].SendToBack(); + else + DockWindows[DockState.DockBottom].BringToFront(); + } + } + + public int DocumentsCount + { + get + { + int count = 0; + foreach (IDockContent content in Documents) + count++; + + return count; + } + } + + public IDockContent[] DocumentsToArray() + { + int count = DocumentsCount; + IDockContent[] documents = new IDockContent[count]; + int i = 0; + foreach (IDockContent content in Documents) + { + documents[i] = content; + i++; + } + + return documents; + } + + public IEnumerable Documents + { + get + { + foreach (IDockContent content in Contents) + { + if (content.DockHandler.DockState == DockState.Document) + yield return content; + } + } + } + + private Rectangle DocumentRectangle + { + get + { + Rectangle rect = DockArea; + if (DockWindows[DockState.DockLeft].VisibleNestedPanes.Count != 0) + { + rect.X += (int)(DockArea.Width * DockLeftPortion); + rect.Width -= (int)(DockArea.Width * DockLeftPortion); + } + if (DockWindows[DockState.DockRight].VisibleNestedPanes.Count != 0) + rect.Width -= (int)(DockArea.Width * DockRightPortion); + if (DockWindows[DockState.DockTop].VisibleNestedPanes.Count != 0) + { + rect.Y += (int)(DockArea.Height * DockTopPortion); + rect.Height -= (int)(DockArea.Height * DockTopPortion); + } + if (DockWindows[DockState.DockBottom].VisibleNestedPanes.Count != 0) + rect.Height -= (int)(DockArea.Height * DockBottomPortion); + + return rect; + } + } + + private Control DummyControl + { + get { return m_dummyControl; } + } + + [Browsable(false)] + public FloatWindowCollection FloatWindows + { + get { return m_floatWindows; } + } + + private Size m_defaultFloatWindowSize = new Size(300, 300); + [Category("Layout")] + [LocalizedDescription("DockPanel_DefaultFloatWindowSize_Description")] + public Size DefaultFloatWindowSize + { + get { return m_defaultFloatWindowSize; } + set { m_defaultFloatWindowSize = value; } + } + private bool ShouldSerializeDefaultFloatWindowSize() + { + return DefaultFloatWindowSize != new Size(300, 300); + } + + private DocumentStyle m_documentStyle = DocumentStyle.DockingMdi; + [LocalizedCategory("Category_Docking")] + [LocalizedDescription("DockPanel_DocumentStyle_Description")] + [DefaultValue(DocumentStyle.DockingMdi)] + public DocumentStyle DocumentStyle + { + get { return m_documentStyle; } + set + { + if (value == m_documentStyle) + return; + + if (!Enum.IsDefined(typeof(DocumentStyle), value)) + throw new InvalidEnumArgumentException(); + + if (value == DocumentStyle.SystemMdi && DockWindows[DockState.Document].VisibleNestedPanes.Count > 0) + throw new InvalidEnumArgumentException(); + + m_documentStyle = value; + + SuspendLayout(true); + + SetAutoHideWindowParent(); + SetMdiClient(); + InvalidateWindowRegion(); + + foreach (IDockContent content in Contents) + { + if (content.DockHandler.DockState == DockState.Document) + content.DockHandler.SetPaneAndVisible(content.DockHandler.Pane); + } + + PerformMdiClientLayout(); + + ResumeLayout(true, true); + } + } + + private int GetDockWindowSize(DockState dockState) + { + if (dockState == DockState.DockLeft || dockState == DockState.DockRight) + { + int width = ClientRectangle.Width - DockPadding.Left - DockPadding.Right; + int dockLeftSize = m_dockLeftPortion >= 1 ? (int)m_dockLeftPortion : (int)(width * m_dockLeftPortion); + int dockRightSize = m_dockRightPortion >= 1 ? (int)m_dockRightPortion : (int)(width * m_dockRightPortion); + + if (dockLeftSize < MeasurePane.MinSize) + dockLeftSize = MeasurePane.MinSize; + if (dockRightSize < MeasurePane.MinSize) + dockRightSize = MeasurePane.MinSize; + + if (dockLeftSize + dockRightSize > width - MeasurePane.MinSize) + { + int adjust = (dockLeftSize + dockRightSize) - (width - MeasurePane.MinSize); + dockLeftSize -= adjust / 2; + dockRightSize -= adjust / 2; + } + + return dockState == DockState.DockLeft ? dockLeftSize : dockRightSize; + } + else if (dockState == DockState.DockTop || dockState == DockState.DockBottom) + { + int height = ClientRectangle.Height - DockPadding.Top - DockPadding.Bottom; + int dockTopSize = m_dockTopPortion >= 1 ? (int)m_dockTopPortion : (int)(height * m_dockTopPortion); + int dockBottomSize = m_dockBottomPortion >= 1 ? (int)m_dockBottomPortion : (int)(height * m_dockBottomPortion); + + if (dockTopSize < MeasurePane.MinSize) + dockTopSize = MeasurePane.MinSize; + if (dockBottomSize < MeasurePane.MinSize) + dockBottomSize = MeasurePane.MinSize; + + if (dockTopSize + dockBottomSize > height - MeasurePane.MinSize) + { + int adjust = (dockTopSize + dockBottomSize) - (height - MeasurePane.MinSize); + dockTopSize -= adjust / 2; + dockBottomSize -= adjust / 2; + } + + return dockState == DockState.DockTop ? dockTopSize : dockBottomSize; + } + else + return 0; + } + + protected override void OnLayout(LayoutEventArgs levent) + { + SuspendLayout(true); + + AutoHideStripControl.Bounds = ClientRectangle; + + CalculateDockPadding(); + + DockWindows[DockState.DockLeft].Width = GetDockWindowSize(DockState.DockLeft); + DockWindows[DockState.DockRight].Width = GetDockWindowSize(DockState.DockRight); + DockWindows[DockState.DockTop].Height = GetDockWindowSize(DockState.DockTop); + DockWindows[DockState.DockBottom].Height = GetDockWindowSize(DockState.DockBottom); + + AutoHideWindow.Bounds = GetAutoHideWindowBounds(AutoHideWindowRectangle); + + DockWindows[DockState.Document].BringToFront(); + AutoHideWindow.BringToFront(); + + base.OnLayout(levent); + + if (DocumentStyle == DocumentStyle.SystemMdi && MdiClientExists) + { + SetMdiClientBounds(SystemMdiClientBounds); + InvalidateWindowRegion(); + } + else if (DocumentStyle == DocumentStyle.DockingMdi) + InvalidateWindowRegion(); + + ResumeLayout(true, true); + } + + internal Rectangle GetTabStripRectangle(DockState dockState) + { + return AutoHideStripControl.GetTabStripRectangle(dockState); + } + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + + if (DockBackColor == BackColor) return; + + Graphics g = e.Graphics; + SolidBrush bgBrush = new SolidBrush(DockBackColor); + g.FillRectangle(bgBrush, ClientRectangle); + } + + internal void AddContent(IDockContent content) + { + if (content == null) + throw(new ArgumentNullException()); + + if (!Contents.Contains(content)) + { + Contents.Add(content); + OnContentAdded(new DockContentEventArgs(content)); + } + } + + internal void AddPane(DockPane pane) + { + if (Panes.Contains(pane)) + return; + + Panes.Add(pane); + } + + internal void AddFloatWindow(FloatWindow floatWindow) + { + if (FloatWindows.Contains(floatWindow)) + return; + + FloatWindows.Add(floatWindow); + } + + private void CalculateDockPadding() + { + DockPadding.All = 0; + + int height = AutoHideStripControl.MeasureHeight(); + + if (AutoHideStripControl.GetNumberOfPanes(DockState.DockLeftAutoHide) > 0) + DockPadding.Left = height; + if (AutoHideStripControl.GetNumberOfPanes(DockState.DockRightAutoHide) > 0) + DockPadding.Right = height; + if (AutoHideStripControl.GetNumberOfPanes(DockState.DockTopAutoHide) > 0) + DockPadding.Top = height; + if (AutoHideStripControl.GetNumberOfPanes(DockState.DockBottomAutoHide) > 0) + DockPadding.Bottom = height; + } + + internal void RemoveContent(IDockContent content) + { + if (content == null) + throw(new ArgumentNullException()); + + if (Contents.Contains(content)) + { + Contents.Remove(content); + OnContentRemoved(new DockContentEventArgs(content)); + } + } + + internal void RemovePane(DockPane pane) + { + if (!Panes.Contains(pane)) + return; + + Panes.Remove(pane); + } + + internal void RemoveFloatWindow(FloatWindow floatWindow) + { + if (!FloatWindows.Contains(floatWindow)) + return; + + FloatWindows.Remove(floatWindow); + } + + public void SetPaneIndex(DockPane pane, int index) + { + int oldIndex = Panes.IndexOf(pane); + if (oldIndex == -1) + throw(new ArgumentException(Strings.DockPanel_SetPaneIndex_InvalidPane)); + + if (index < 0 || index > Panes.Count - 1) + if (index != -1) + throw(new ArgumentOutOfRangeException(Strings.DockPanel_SetPaneIndex_InvalidIndex)); + + if (oldIndex == index) + return; + if (oldIndex == Panes.Count - 1 && index == -1) + return; + + Panes.Remove(pane); + if (index == -1) + Panes.Add(pane); + else if (oldIndex < index) + Panes.AddAt(pane, index - 1); + else + Panes.AddAt(pane, index); + } + + public void SuspendLayout(bool allWindows) + { + FocusManager.SuspendFocusTracking(); + SuspendLayout(); + if (allWindows) + SuspendMdiClientLayout(); + } + + public void ResumeLayout(bool performLayout, bool allWindows) + { + FocusManager.ResumeFocusTracking(); + ResumeLayout(performLayout); + if (allWindows) + ResumeMdiClientLayout(performLayout); + } + + internal Form ParentForm + { + get + { + if (!IsParentFormValid()) + throw new InvalidOperationException(Strings.DockPanel_ParentForm_Invalid); + + return GetMdiClientController().ParentForm; + } + } + + private bool IsParentFormValid() + { + if (DocumentStyle == DocumentStyle.DockingSdi || DocumentStyle == DocumentStyle.DockingWindow) + return true; + + if (!MdiClientExists) + GetMdiClientController().RenewMdiClient(); + + return (MdiClientExists); + } + + protected override void OnParentChanged(EventArgs e) + { + SetAutoHideWindowParent(); + GetMdiClientController().ParentForm = (this.Parent as Form); + base.OnParentChanged (e); + } + + private void SetAutoHideWindowParent() + { + Control parent; + if (DocumentStyle == DocumentStyle.DockingMdi || + DocumentStyle == DocumentStyle.SystemMdi) + parent = this.Parent; + else + parent = this; + if (AutoHideWindow.Parent != parent) + { + AutoHideWindow.Parent = parent; + AutoHideWindow.BringToFront(); + } + } + + protected override void OnVisibleChanged(EventArgs e) + { + base.OnVisibleChanged (e); + + if (Visible) + SetMdiClient(); + } + + private Rectangle SystemMdiClientBounds + { + get + { + if (!IsParentFormValid() || !Visible) + return Rectangle.Empty; + + Rectangle rect = ParentForm.RectangleToClient(RectangleToScreen(DocumentWindowBounds)); + return rect; + } + } + + internal Rectangle DocumentWindowBounds + { + get + { + Rectangle rectDocumentBounds = DisplayRectangle; + if (DockWindows[DockState.DockLeft].Visible) + { + rectDocumentBounds.X += DockWindows[DockState.DockLeft].Width; + rectDocumentBounds.Width -= DockWindows[DockState.DockLeft].Width; + } + if (DockWindows[DockState.DockRight].Visible) + rectDocumentBounds.Width -= DockWindows[DockState.DockRight].Width; + if (DockWindows[DockState.DockTop].Visible) + { + rectDocumentBounds.Y += DockWindows[DockState.DockTop].Height; + rectDocumentBounds.Height -= DockWindows[DockState.DockTop].Height; + } + if (DockWindows[DockState.DockBottom].Visible) + rectDocumentBounds.Height -= DockWindows[DockState.DockBottom].Height; + + return rectDocumentBounds; + + } + } + + private PaintEventHandler m_dummyControlPaintEventHandler = null; + private void InvalidateWindowRegion() + { + if (DesignMode) + return; + + if (m_dummyControlPaintEventHandler == null) + m_dummyControlPaintEventHandler = new PaintEventHandler(DummyControl_Paint); + + DummyControl.Paint += m_dummyControlPaintEventHandler; + DummyControl.Invalidate(); + } + + void DummyControl_Paint(object sender, PaintEventArgs e) + { + DummyControl.Paint -= m_dummyControlPaintEventHandler; + UpdateWindowRegion(); + } + + private void UpdateWindowRegion() + { + if (this.DocumentStyle == DocumentStyle.DockingMdi) + UpdateWindowRegion_ClipContent(); + else if (this.DocumentStyle == DocumentStyle.DockingSdi || + this.DocumentStyle == DocumentStyle.DockingWindow) + UpdateWindowRegion_FullDocumentArea(); + else if (this.DocumentStyle == DocumentStyle.SystemMdi) + UpdateWindowRegion_EmptyDocumentArea(); + } + + private void UpdateWindowRegion_FullDocumentArea() + { + SetRegion(null); + } + + private void UpdateWindowRegion_EmptyDocumentArea() + { + Rectangle rect = DocumentWindowBounds; + SetRegion(new Rectangle[] { rect }); + } + + private void UpdateWindowRegion_ClipContent() + { + int count = 0; + foreach (DockPane pane in this.Panes) + { + if (!pane.Visible || pane.DockState != DockState.Document) + continue; + + count ++; + } + + if (count == 0) + { + SetRegion(null); + return; + } + + Rectangle[] rects = new Rectangle[count]; + int i = 0; + foreach (DockPane pane in this.Panes) + { + if (!pane.Visible || pane.DockState != DockState.Document) + continue; + + rects[i] = RectangleToClient(pane.RectangleToScreen(pane.ContentRectangle)); + i++; + } + + SetRegion(rects); + } + + private Rectangle[] m_clipRects = null; + private void SetRegion(Rectangle[] clipRects) + { + if (!IsClipRectsChanged(clipRects)) + return; + + m_clipRects = clipRects; + + if (m_clipRects == null || m_clipRects.GetLength(0) == 0) + Region = null; + else + { + Region region = new Region(new Rectangle(0, 0, this.Width, this.Height)); + foreach (Rectangle rect in m_clipRects) + region.Exclude(rect); + Region = region; + } + } + + private bool IsClipRectsChanged(Rectangle[] clipRects) + { + if (clipRects == null && m_clipRects == null) + return false; + else if ((clipRects == null) != (m_clipRects == null)) + return true; + + foreach (Rectangle rect in clipRects) + { + bool matched = false; + foreach (Rectangle rect2 in m_clipRects) + { + if (rect == rect2) + { + matched = true; + break; + } + } + if (!matched) + return true; + } + + foreach (Rectangle rect2 in m_clipRects) + { + bool matched = false; + foreach (Rectangle rect in clipRects) + { + if (rect == rect2) + { + matched = true; + break; + } + } + if (!matched) + return true; + } + return false; + } + + private static readonly object ContentAddedEvent = new object(); + [LocalizedCategory("Category_DockingNotification")] + [LocalizedDescription("DockPanel_ContentAdded_Description")] + public event EventHandler ContentAdded + { + add { Events.AddHandler(ContentAddedEvent, value); } + remove { Events.RemoveHandler(ContentAddedEvent, value); } + } + protected virtual void OnContentAdded(DockContentEventArgs e) + { + EventHandler handler = (EventHandler)Events[ContentAddedEvent]; + if (handler != null) + handler(this, e); + } + + private static readonly object ContentRemovedEvent = new object(); + [LocalizedCategory("Category_DockingNotification")] + [LocalizedDescription("DockPanel_ContentRemoved_Description")] + public event EventHandler ContentRemoved + { + add { Events.AddHandler(ContentRemovedEvent, value); } + remove { Events.RemoveHandler(ContentRemovedEvent, value); } + } + protected virtual void OnContentRemoved(DockContentEventArgs e) + { + EventHandler handler = (EventHandler)Events[ContentRemovedEvent]; + if (handler != null) + handler(this, e); + } + } } \ No newline at end of file diff --git a/trunk/Docking/DockPanelExtender.cs b/source/Docking/DockPanelExtender.cs similarity index 96% rename from trunk/Docking/DockPanelExtender.cs rename to source/Docking/DockPanelExtender.cs index 08d431b..9053039 100644 --- a/trunk/Docking/DockPanelExtender.cs +++ b/source/Docking/DockPanelExtender.cs @@ -1,225 +1,225 @@ -using System; -using System.Drawing; -using System.Diagnostics.CodeAnalysis; - -namespace LSLEditor.Docking -{ - public sealed class DockPanelExtender - { - [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] - public interface IDockPaneFactory - { - DockPane CreateDockPane(IDockContent content, DockState visibleState, bool show); - [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters", MessageId = "1#")] - DockPane CreateDockPane(IDockContent content, FloatWindow floatWindow, bool show); - DockPane CreateDockPane(IDockContent content, DockPane previousPane, DockAlignment alignment, double proportion, bool show); - [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters", MessageId = "1#")] - DockPane CreateDockPane(IDockContent content, Rectangle floatWindowBounds, bool show); - } - - [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] - public interface IFloatWindowFactory - { - FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane); - FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane, Rectangle bounds); - } - - [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] - public interface IDockPaneCaptionFactory - { - DockPaneCaptionBase CreateDockPaneCaption(DockPane pane); - } - - [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] - public interface IDockPaneStripFactory - { - DockPaneStripBase CreateDockPaneStrip(DockPane pane); - } - - [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] - public interface IAutoHideStripFactory - { - AutoHideStripBase CreateAutoHideStrip(DockPanel panel); - } - - #region DefaultDockPaneFactory - private class DefaultDockPaneFactory : IDockPaneFactory - { - public DockPane CreateDockPane(IDockContent content, DockState visibleState, bool show) - { - return new DockPane(content, visibleState, show); - } - - public DockPane CreateDockPane(IDockContent content, FloatWindow floatWindow, bool show) - { - return new DockPane(content, floatWindow, show); - } - - public DockPane CreateDockPane(IDockContent content, DockPane prevPane, DockAlignment alignment, double proportion, bool show) - { - return new DockPane(content, prevPane, alignment, proportion, show); - } - - public DockPane CreateDockPane(IDockContent content, Rectangle floatWindowBounds, bool show) - { - return new DockPane(content, floatWindowBounds, show); - } - } - #endregion - - #region DefaultFloatWindowFactory - private class DefaultFloatWindowFactory : IFloatWindowFactory - { - public FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane) - { - return new FloatWindow(dockPanel, pane); - } - - public FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane, Rectangle bounds) - { - return new FloatWindow(dockPanel, pane, bounds); - } - } - #endregion - - #region DefaultDockPaneCaptionFactory - private class DefaultDockPaneCaptionFactory : IDockPaneCaptionFactory - { - public DockPaneCaptionBase CreateDockPaneCaption(DockPane pane) - { - return new VS2005DockPaneCaption(pane); - } - } - #endregion - - #region DefaultDockPaneTabStripFactory - private class DefaultDockPaneStripFactory : IDockPaneStripFactory - { - public DockPaneStripBase CreateDockPaneStrip(DockPane pane) - { - return new VS2005DockPaneStrip(pane); - } - } - #endregion - - #region DefaultAutoHideStripFactory - private class DefaultAutoHideStripFactory : IAutoHideStripFactory - { - public AutoHideStripBase CreateAutoHideStrip(DockPanel panel) - { - return new VS2005AutoHideStrip(panel); - } - } - #endregion - - internal DockPanelExtender(DockPanel dockPanel) - { - m_dockPanel = dockPanel; - } - - private DockPanel m_dockPanel; - private DockPanel DockPanel - { - get { return m_dockPanel; } - } - - private IDockPaneFactory m_dockPaneFactory = null; - public IDockPaneFactory DockPaneFactory - { - get - { - if (m_dockPaneFactory == null) - m_dockPaneFactory = new DefaultDockPaneFactory(); - - return m_dockPaneFactory; - } - set - { - if (DockPanel.Panes.Count > 0) - throw new InvalidOperationException(); - - m_dockPaneFactory = value; - } - } - - private IFloatWindowFactory m_floatWindowFactory = null; - public IFloatWindowFactory FloatWindowFactory - { - get - { - if (m_floatWindowFactory == null) - m_floatWindowFactory = new DefaultFloatWindowFactory(); - - return m_floatWindowFactory; - } - set - { - if (DockPanel.FloatWindows.Count > 0) - throw new InvalidOperationException(); - - m_floatWindowFactory = value; - } - } - - private IDockPaneCaptionFactory m_dockPaneCaptionFactory = null; - public IDockPaneCaptionFactory DockPaneCaptionFactory - { - get - { - if (m_dockPaneCaptionFactory == null) - m_dockPaneCaptionFactory = new DefaultDockPaneCaptionFactory(); - - return m_dockPaneCaptionFactory; - } - set - { - if (DockPanel.Panes.Count > 0) - throw new InvalidOperationException(); - - m_dockPaneCaptionFactory = value; - } - } - - private IDockPaneStripFactory m_dockPaneStripFactory = null; - public IDockPaneStripFactory DockPaneStripFactory - { - get - { - if (m_dockPaneStripFactory == null) - m_dockPaneStripFactory = new DefaultDockPaneStripFactory(); - - return m_dockPaneStripFactory; - } - set - { - if (DockPanel.Contents.Count > 0) - throw new InvalidOperationException(); - - m_dockPaneStripFactory = value; - } - } - - private IAutoHideStripFactory m_autoHideStripFactory = null; - public IAutoHideStripFactory AutoHideStripFactory - { - get - { - if (m_autoHideStripFactory == null) - m_autoHideStripFactory = new DefaultAutoHideStripFactory(); - - return m_autoHideStripFactory; - } - set - { - if (DockPanel.Contents.Count > 0) - throw new InvalidOperationException(); - - if (m_autoHideStripFactory == value) - return; - - m_autoHideStripFactory = value; - DockPanel.ResetAutoHideStripControl(); - } - } - } -} +using System; +using System.Drawing; +using System.Diagnostics.CodeAnalysis; + +namespace LSLEditor.Docking +{ + public sealed class DockPanelExtender + { + [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] + public interface IDockPaneFactory + { + DockPane CreateDockPane(IDockContent content, DockState visibleState, bool show); + [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters", MessageId = "1#")] + DockPane CreateDockPane(IDockContent content, FloatWindow floatWindow, bool show); + DockPane CreateDockPane(IDockContent content, DockPane previousPane, DockAlignment alignment, double proportion, bool show); + [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters", MessageId = "1#")] + DockPane CreateDockPane(IDockContent content, Rectangle floatWindowBounds, bool show); + } + + [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] + public interface IFloatWindowFactory + { + FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane); + FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane, Rectangle bounds); + } + + [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] + public interface IDockPaneCaptionFactory + { + DockPaneCaptionBase CreateDockPaneCaption(DockPane pane); + } + + [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] + public interface IDockPaneStripFactory + { + DockPaneStripBase CreateDockPaneStrip(DockPane pane); + } + + [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] + public interface IAutoHideStripFactory + { + AutoHideStripBase CreateAutoHideStrip(DockPanel panel); + } + + #region DefaultDockPaneFactory + private class DefaultDockPaneFactory : IDockPaneFactory + { + public DockPane CreateDockPane(IDockContent content, DockState visibleState, bool show) + { + return new DockPane(content, visibleState, show); + } + + public DockPane CreateDockPane(IDockContent content, FloatWindow floatWindow, bool show) + { + return new DockPane(content, floatWindow, show); + } + + public DockPane CreateDockPane(IDockContent content, DockPane prevPane, DockAlignment alignment, double proportion, bool show) + { + return new DockPane(content, prevPane, alignment, proportion, show); + } + + public DockPane CreateDockPane(IDockContent content, Rectangle floatWindowBounds, bool show) + { + return new DockPane(content, floatWindowBounds, show); + } + } + #endregion + + #region DefaultFloatWindowFactory + private class DefaultFloatWindowFactory : IFloatWindowFactory + { + public FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane) + { + return new FloatWindow(dockPanel, pane); + } + + public FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane, Rectangle bounds) + { + return new FloatWindow(dockPanel, pane, bounds); + } + } + #endregion + + #region DefaultDockPaneCaptionFactory + private class DefaultDockPaneCaptionFactory : IDockPaneCaptionFactory + { + public DockPaneCaptionBase CreateDockPaneCaption(DockPane pane) + { + return new VS2005DockPaneCaption(pane); + } + } + #endregion + + #region DefaultDockPaneTabStripFactory + private class DefaultDockPaneStripFactory : IDockPaneStripFactory + { + public DockPaneStripBase CreateDockPaneStrip(DockPane pane) + { + return new VS2005DockPaneStrip(pane); + } + } + #endregion + + #region DefaultAutoHideStripFactory + private class DefaultAutoHideStripFactory : IAutoHideStripFactory + { + public AutoHideStripBase CreateAutoHideStrip(DockPanel panel) + { + return new VS2005AutoHideStrip(panel); + } + } + #endregion + + internal DockPanelExtender(DockPanel dockPanel) + { + m_dockPanel = dockPanel; + } + + private DockPanel m_dockPanel; + private DockPanel DockPanel + { + get { return m_dockPanel; } + } + + private IDockPaneFactory m_dockPaneFactory = null; + public IDockPaneFactory DockPaneFactory + { + get + { + if (m_dockPaneFactory == null) + m_dockPaneFactory = new DefaultDockPaneFactory(); + + return m_dockPaneFactory; + } + set + { + if (DockPanel.Panes.Count > 0) + throw new InvalidOperationException(); + + m_dockPaneFactory = value; + } + } + + private IFloatWindowFactory m_floatWindowFactory = null; + public IFloatWindowFactory FloatWindowFactory + { + get + { + if (m_floatWindowFactory == null) + m_floatWindowFactory = new DefaultFloatWindowFactory(); + + return m_floatWindowFactory; + } + set + { + if (DockPanel.FloatWindows.Count > 0) + throw new InvalidOperationException(); + + m_floatWindowFactory = value; + } + } + + private IDockPaneCaptionFactory m_dockPaneCaptionFactory = null; + public IDockPaneCaptionFactory DockPaneCaptionFactory + { + get + { + if (m_dockPaneCaptionFactory == null) + m_dockPaneCaptionFactory = new DefaultDockPaneCaptionFactory(); + + return m_dockPaneCaptionFactory; + } + set + { + if (DockPanel.Panes.Count > 0) + throw new InvalidOperationException(); + + m_dockPaneCaptionFactory = value; + } + } + + private IDockPaneStripFactory m_dockPaneStripFactory = null; + public IDockPaneStripFactory DockPaneStripFactory + { + get + { + if (m_dockPaneStripFactory == null) + m_dockPaneStripFactory = new DefaultDockPaneStripFactory(); + + return m_dockPaneStripFactory; + } + set + { + if (DockPanel.Contents.Count > 0) + throw new InvalidOperationException(); + + m_dockPaneStripFactory = value; + } + } + + private IAutoHideStripFactory m_autoHideStripFactory = null; + public IAutoHideStripFactory AutoHideStripFactory + { + get + { + if (m_autoHideStripFactory == null) + m_autoHideStripFactory = new DefaultAutoHideStripFactory(); + + return m_autoHideStripFactory; + } + set + { + if (DockPanel.Contents.Count > 0) + throw new InvalidOperationException(); + + if (m_autoHideStripFactory == value) + return; + + m_autoHideStripFactory = value; + DockPanel.ResetAutoHideStripControl(); + } + } + } +} diff --git a/trunk/Docking/DockPanelSkin.cs b/source/Docking/DockPanelSkin.cs similarity index 97% rename from trunk/Docking/DockPanelSkin.cs rename to source/Docking/DockPanelSkin.cs index fedd9be..1d48efb 100644 --- a/trunk/Docking/DockPanelSkin.cs +++ b/source/Docking/DockPanelSkin.cs @@ -1,421 +1,421 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Drawing.Design; -using System.Windows.Forms.Design; -using System.ComponentModel; - -namespace LSLEditor.Docking -{ - #region DockPanelSkin classes - /// - /// The skin to use when displaying the DockPanel. - /// The skin allows custom gradient color schemes to be used when drawing the - /// DockStrips and Tabs. - /// - [TypeConverter(typeof(DockPanelSkinConverter))] - public class DockPanelSkin - { - private AutoHideStripSkin m_autoHideStripSkin; - private DockPaneStripSkin m_dockPaneStripSkin; - - public DockPanelSkin() - { - m_autoHideStripSkin = new AutoHideStripSkin(); - m_dockPaneStripSkin = new DockPaneStripSkin(); - } - - /// - /// The skin used to display the auto hide strips and tabs. - /// - public AutoHideStripSkin AutoHideStripSkin - { - get { return m_autoHideStripSkin; } - set { m_autoHideStripSkin = value; } - } - - /// - /// The skin used to display the Document and ToolWindow style DockStrips and Tabs. - /// - public DockPaneStripSkin DockPaneStripSkin - { - get { return m_dockPaneStripSkin; } - set { m_dockPaneStripSkin = value; } - } - } - - /// - /// The skin used to display the auto hide strip and tabs. - /// - [TypeConverter(typeof(AutoHideStripConverter))] - public class AutoHideStripSkin - { - private DockPanelGradient m_dockStripGradient; - private TabGradient m_TabGradient; - - public AutoHideStripSkin() - { - m_dockStripGradient = new DockPanelGradient(); - m_dockStripGradient.StartColor = SystemColors.ControlLight; - m_dockStripGradient.EndColor = SystemColors.ControlLight; - - m_TabGradient = new TabGradient(); - m_TabGradient.TextColor = SystemColors.ControlDarkDark; - } - - /// - /// The gradient color skin for the DockStrips. - /// - public DockPanelGradient DockStripGradient - { - get { return m_dockStripGradient; } - set { m_dockStripGradient = value; } - } - - /// - /// The gradient color skin for the Tabs. - /// - public TabGradient TabGradient - { - get { return m_TabGradient; } - set { m_TabGradient = value; } - } - } - - /// - /// The skin used to display the document and tool strips and tabs. - /// - [TypeConverter(typeof(DockPaneStripConverter))] - public class DockPaneStripSkin - { - private DockPaneStripGradient m_DocumentGradient; - private DockPaneStripToolWindowGradient m_ToolWindowGradient; - - public DockPaneStripSkin() - { - m_DocumentGradient = new DockPaneStripGradient(); - m_DocumentGradient.DockStripGradient.StartColor = SystemColors.Control; - m_DocumentGradient.DockStripGradient.EndColor = SystemColors.Control; - m_DocumentGradient.ActiveTabGradient.StartColor = SystemColors.ControlLightLight; - m_DocumentGradient.ActiveTabGradient.EndColor = SystemColors.ControlLightLight; - m_DocumentGradient.InactiveTabGradient.StartColor = SystemColors.ControlLight; - m_DocumentGradient.InactiveTabGradient.EndColor = SystemColors.ControlLight; - - m_ToolWindowGradient = new DockPaneStripToolWindowGradient(); - m_ToolWindowGradient.DockStripGradient.StartColor = SystemColors.ControlLight; - m_ToolWindowGradient.DockStripGradient.EndColor = SystemColors.ControlLight; - - m_ToolWindowGradient.ActiveTabGradient.StartColor = SystemColors.Control; - m_ToolWindowGradient.ActiveTabGradient.EndColor = SystemColors.Control; - - m_ToolWindowGradient.InactiveTabGradient.StartColor = Color.Transparent; - m_ToolWindowGradient.InactiveTabGradient.EndColor = Color.Transparent; - m_ToolWindowGradient.InactiveTabGradient.TextColor = SystemColors.ControlDarkDark; - - m_ToolWindowGradient.ActiveCaptionGradient.StartColor = SystemColors.GradientActiveCaption; - m_ToolWindowGradient.ActiveCaptionGradient.EndColor = SystemColors.ActiveCaption; - m_ToolWindowGradient.ActiveCaptionGradient.LinearGradientMode = LinearGradientMode.Vertical; - m_ToolWindowGradient.ActiveCaptionGradient.TextColor = SystemColors.ActiveCaptionText; - - m_ToolWindowGradient.InactiveCaptionGradient.StartColor = SystemColors.GradientInactiveCaption; - m_ToolWindowGradient.InactiveCaptionGradient.EndColor = SystemColors.GradientInactiveCaption; - m_ToolWindowGradient.InactiveCaptionGradient.LinearGradientMode = LinearGradientMode.Vertical; - m_ToolWindowGradient.InactiveCaptionGradient.TextColor = SystemColors.ControlText; - } - - /// - /// The skin used to display the Document style DockPane strip and tab. - /// - public DockPaneStripGradient DocumentGradient - { - get { return m_DocumentGradient; } - set { m_DocumentGradient = value; } - } - - /// - /// The skin used to display the ToolWindow style DockPane strip and tab. - /// - public DockPaneStripToolWindowGradient ToolWindowGradient - { - get { return m_ToolWindowGradient; } - set { m_ToolWindowGradient = value; } - } - } - - /// - /// The skin used to display the DockPane ToolWindow strip and tab. - /// - [TypeConverter(typeof(DockPaneStripGradientConverter))] - public class DockPaneStripToolWindowGradient : DockPaneStripGradient - { - private TabGradient m_activeCaptionGradient; - private TabGradient m_inactiveCaptionGradient; - - public DockPaneStripToolWindowGradient() - { - m_activeCaptionGradient = new TabGradient(); - m_inactiveCaptionGradient = new TabGradient(); - } - - /// - /// The skin used to display the active ToolWindow caption. - /// - public TabGradient ActiveCaptionGradient - { - get { return m_activeCaptionGradient; } - set { m_activeCaptionGradient = value; } - } - - /// - /// The skin used to display the inactive ToolWindow caption. - /// - public TabGradient InactiveCaptionGradient - { - get { return m_inactiveCaptionGradient; } - set { m_inactiveCaptionGradient = value; } - } - } - - /// - /// The skin used to display the DockPane strip and tab. - /// - [TypeConverter(typeof(DockPaneStripGradientConverter))] - public class DockPaneStripGradient - { - private DockPanelGradient m_dockStripGradient; - private TabGradient m_activeTabGradient; - private TabGradient m_inactiveTabGradient; - - public DockPaneStripGradient() - { - m_dockStripGradient = new DockPanelGradient(); - m_activeTabGradient = new TabGradient(); - m_inactiveTabGradient = new TabGradient(); - } - - /// - /// The gradient color skin for the DockStrip. - /// - public DockPanelGradient DockStripGradient - { - get { return m_dockStripGradient; } - set { m_dockStripGradient = value; } - } - - /// - /// The skin used to display the active DockPane tabs. - /// - public TabGradient ActiveTabGradient - { - get { return m_activeTabGradient; } - set { m_activeTabGradient = value; } - } - - /// - /// The skin used to display the inactive DockPane tabs. - /// - public TabGradient InactiveTabGradient - { - get { return m_inactiveTabGradient; } - set { m_inactiveTabGradient = value; } - } - } - - /// - /// The skin used to display the dock pane tab - /// - [TypeConverter(typeof(DockPaneTabGradientConverter))] - public class TabGradient : DockPanelGradient - { - private Color m_textColor; - - public TabGradient() - { - m_textColor = SystemColors.ControlText; - } - - /// - /// The text color. - /// - [DefaultValue(typeof(SystemColors), "ControlText")] - public Color TextColor - { - get { return m_textColor; } - set { m_textColor = value; } - } - } - - /// - /// The gradient color skin. - /// - [TypeConverter(typeof(DockPanelGradientConverter))] - public class DockPanelGradient - { - private Color m_startColor; - private Color m_endColor; - private LinearGradientMode m_linearGradientMode; - - public DockPanelGradient() - { - m_startColor = SystemColors.Control; - m_endColor = SystemColors.Control; - m_linearGradientMode = LinearGradientMode.Horizontal; - } - - /// - /// The beginning gradient color. - /// - [DefaultValue(typeof(SystemColors), "Control")] - public Color StartColor - { - get { return m_startColor; } - set { m_startColor = value; } - } - - /// - /// The ending gradient color. - /// - [DefaultValue(typeof(SystemColors), "Control")] - public Color EndColor - { - get { return m_endColor; } - set { m_endColor = value; } - } - - /// - /// The gradient mode to display the colors. - /// - [DefaultValue(LinearGradientMode.Horizontal)] - public LinearGradientMode LinearGradientMode - { - get { return m_linearGradientMode; } - set { m_linearGradientMode = value; } - } - } - - #endregion - - #region Converters - public class DockPanelSkinConverter : ExpandableObjectConverter - { - public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) - { - if (destinationType == typeof(DockPanelSkin)) - return true; - - return base.CanConvertTo(context, destinationType); - } - - public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) - { - if (destinationType == typeof(String) && value is DockPanelSkin) - { - return "DockPanelSkin"; - } - return base.ConvertTo(context, culture, value, destinationType); - } - } - - public class DockPanelGradientConverter : ExpandableObjectConverter - { - public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) - { - if (destinationType == typeof(DockPanelGradient)) - return true; - - return base.CanConvertTo(context, destinationType); - } - - public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) - { - if (destinationType == typeof(String) && value is DockPanelGradient) - { - return "DockPanelGradient"; - } - return base.ConvertTo(context, culture, value, destinationType); - } - } - - public class AutoHideStripConverter : ExpandableObjectConverter - { - public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) - { - if (destinationType == typeof(AutoHideStripSkin)) - return true; - - return base.CanConvertTo(context, destinationType); - } - - public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) - { - if (destinationType == typeof(String) && value is AutoHideStripSkin) - { - return "AutoHideStripSkin"; - } - return base.ConvertTo(context, culture, value, destinationType); - } - } - - public class DockPaneStripConverter : ExpandableObjectConverter - { - public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) - { - if (destinationType == typeof(DockPaneStripSkin)) - return true; - - return base.CanConvertTo(context, destinationType); - } - - public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) - { - if (destinationType == typeof(String) && value is DockPaneStripSkin) - { - return "DockPaneStripSkin"; - } - return base.ConvertTo(context, culture, value, destinationType); - } - } - - public class DockPaneStripGradientConverter : ExpandableObjectConverter - { - public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) - { - if (destinationType == typeof(DockPaneStripGradient)) - return true; - - return base.CanConvertTo(context, destinationType); - } - - public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) - { - if (destinationType == typeof(String) && value is DockPaneStripGradient) - { - return "DockPaneStripGradient"; - } - return base.ConvertTo(context, culture, value, destinationType); - } - } - - public class DockPaneTabGradientConverter : ExpandableObjectConverter - { - public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) - { - if (destinationType == typeof(TabGradient)) - return true; - - return base.CanConvertTo(context, destinationType); - } - - public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) - { - if (destinationType == typeof(String) && value is TabGradient) - { - return "DockPaneTabGradient"; - } - return base.ConvertTo(context, culture, value, destinationType); - } - } - #endregion -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Design; +using System.Windows.Forms.Design; +using System.ComponentModel; + +namespace LSLEditor.Docking +{ + #region DockPanelSkin classes + /// + /// The skin to use when displaying the DockPanel. + /// The skin allows custom gradient color schemes to be used when drawing the + /// DockStrips and Tabs. + /// + [TypeConverter(typeof(DockPanelSkinConverter))] + public class DockPanelSkin + { + private AutoHideStripSkin m_autoHideStripSkin; + private DockPaneStripSkin m_dockPaneStripSkin; + + public DockPanelSkin() + { + m_autoHideStripSkin = new AutoHideStripSkin(); + m_dockPaneStripSkin = new DockPaneStripSkin(); + } + + /// + /// The skin used to display the auto hide strips and tabs. + /// + public AutoHideStripSkin AutoHideStripSkin + { + get { return m_autoHideStripSkin; } + set { m_autoHideStripSkin = value; } + } + + /// + /// The skin used to display the Document and ToolWindow style DockStrips and Tabs. + /// + public DockPaneStripSkin DockPaneStripSkin + { + get { return m_dockPaneStripSkin; } + set { m_dockPaneStripSkin = value; } + } + } + + /// + /// The skin used to display the auto hide strip and tabs. + /// + [TypeConverter(typeof(AutoHideStripConverter))] + public class AutoHideStripSkin + { + private DockPanelGradient m_dockStripGradient; + private TabGradient m_TabGradient; + + public AutoHideStripSkin() + { + m_dockStripGradient = new DockPanelGradient(); + m_dockStripGradient.StartColor = SystemColors.ControlLight; + m_dockStripGradient.EndColor = SystemColors.ControlLight; + + m_TabGradient = new TabGradient(); + m_TabGradient.TextColor = SystemColors.ControlDarkDark; + } + + /// + /// The gradient color skin for the DockStrips. + /// + public DockPanelGradient DockStripGradient + { + get { return m_dockStripGradient; } + set { m_dockStripGradient = value; } + } + + /// + /// The gradient color skin for the Tabs. + /// + public TabGradient TabGradient + { + get { return m_TabGradient; } + set { m_TabGradient = value; } + } + } + + /// + /// The skin used to display the document and tool strips and tabs. + /// + [TypeConverter(typeof(DockPaneStripConverter))] + public class DockPaneStripSkin + { + private DockPaneStripGradient m_DocumentGradient; + private DockPaneStripToolWindowGradient m_ToolWindowGradient; + + public DockPaneStripSkin() + { + m_DocumentGradient = new DockPaneStripGradient(); + m_DocumentGradient.DockStripGradient.StartColor = SystemColors.Control; + m_DocumentGradient.DockStripGradient.EndColor = SystemColors.Control; + m_DocumentGradient.ActiveTabGradient.StartColor = SystemColors.ControlLightLight; + m_DocumentGradient.ActiveTabGradient.EndColor = SystemColors.ControlLightLight; + m_DocumentGradient.InactiveTabGradient.StartColor = SystemColors.ControlLight; + m_DocumentGradient.InactiveTabGradient.EndColor = SystemColors.ControlLight; + + m_ToolWindowGradient = new DockPaneStripToolWindowGradient(); + m_ToolWindowGradient.DockStripGradient.StartColor = SystemColors.ControlLight; + m_ToolWindowGradient.DockStripGradient.EndColor = SystemColors.ControlLight; + + m_ToolWindowGradient.ActiveTabGradient.StartColor = SystemColors.Control; + m_ToolWindowGradient.ActiveTabGradient.EndColor = SystemColors.Control; + + m_ToolWindowGradient.InactiveTabGradient.StartColor = Color.Transparent; + m_ToolWindowGradient.InactiveTabGradient.EndColor = Color.Transparent; + m_ToolWindowGradient.InactiveTabGradient.TextColor = SystemColors.ControlDarkDark; + + m_ToolWindowGradient.ActiveCaptionGradient.StartColor = SystemColors.GradientActiveCaption; + m_ToolWindowGradient.ActiveCaptionGradient.EndColor = SystemColors.ActiveCaption; + m_ToolWindowGradient.ActiveCaptionGradient.LinearGradientMode = LinearGradientMode.Vertical; + m_ToolWindowGradient.ActiveCaptionGradient.TextColor = SystemColors.ActiveCaptionText; + + m_ToolWindowGradient.InactiveCaptionGradient.StartColor = SystemColors.GradientInactiveCaption; + m_ToolWindowGradient.InactiveCaptionGradient.EndColor = SystemColors.GradientInactiveCaption; + m_ToolWindowGradient.InactiveCaptionGradient.LinearGradientMode = LinearGradientMode.Vertical; + m_ToolWindowGradient.InactiveCaptionGradient.TextColor = SystemColors.ControlText; + } + + /// + /// The skin used to display the Document style DockPane strip and tab. + /// + public DockPaneStripGradient DocumentGradient + { + get { return m_DocumentGradient; } + set { m_DocumentGradient = value; } + } + + /// + /// The skin used to display the ToolWindow style DockPane strip and tab. + /// + public DockPaneStripToolWindowGradient ToolWindowGradient + { + get { return m_ToolWindowGradient; } + set { m_ToolWindowGradient = value; } + } + } + + /// + /// The skin used to display the DockPane ToolWindow strip and tab. + /// + [TypeConverter(typeof(DockPaneStripGradientConverter))] + public class DockPaneStripToolWindowGradient : DockPaneStripGradient + { + private TabGradient m_activeCaptionGradient; + private TabGradient m_inactiveCaptionGradient; + + public DockPaneStripToolWindowGradient() + { + m_activeCaptionGradient = new TabGradient(); + m_inactiveCaptionGradient = new TabGradient(); + } + + /// + /// The skin used to display the active ToolWindow caption. + /// + public TabGradient ActiveCaptionGradient + { + get { return m_activeCaptionGradient; } + set { m_activeCaptionGradient = value; } + } + + /// + /// The skin used to display the inactive ToolWindow caption. + /// + public TabGradient InactiveCaptionGradient + { + get { return m_inactiveCaptionGradient; } + set { m_inactiveCaptionGradient = value; } + } + } + + /// + /// The skin used to display the DockPane strip and tab. + /// + [TypeConverter(typeof(DockPaneStripGradientConverter))] + public class DockPaneStripGradient + { + private DockPanelGradient m_dockStripGradient; + private TabGradient m_activeTabGradient; + private TabGradient m_inactiveTabGradient; + + public DockPaneStripGradient() + { + m_dockStripGradient = new DockPanelGradient(); + m_activeTabGradient = new TabGradient(); + m_inactiveTabGradient = new TabGradient(); + } + + /// + /// The gradient color skin for the DockStrip. + /// + public DockPanelGradient DockStripGradient + { + get { return m_dockStripGradient; } + set { m_dockStripGradient = value; } + } + + /// + /// The skin used to display the active DockPane tabs. + /// + public TabGradient ActiveTabGradient + { + get { return m_activeTabGradient; } + set { m_activeTabGradient = value; } + } + + /// + /// The skin used to display the inactive DockPane tabs. + /// + public TabGradient InactiveTabGradient + { + get { return m_inactiveTabGradient; } + set { m_inactiveTabGradient = value; } + } + } + + /// + /// The skin used to display the dock pane tab + /// + [TypeConverter(typeof(DockPaneTabGradientConverter))] + public class TabGradient : DockPanelGradient + { + private Color m_textColor; + + public TabGradient() + { + m_textColor = SystemColors.ControlText; + } + + /// + /// The text color. + /// + [DefaultValue(typeof(SystemColors), "ControlText")] + public Color TextColor + { + get { return m_textColor; } + set { m_textColor = value; } + } + } + + /// + /// The gradient color skin. + /// + [TypeConverter(typeof(DockPanelGradientConverter))] + public class DockPanelGradient + { + private Color m_startColor; + private Color m_endColor; + private LinearGradientMode m_linearGradientMode; + + public DockPanelGradient() + { + m_startColor = SystemColors.Control; + m_endColor = SystemColors.Control; + m_linearGradientMode = LinearGradientMode.Horizontal; + } + + /// + /// The beginning gradient color. + /// + [DefaultValue(typeof(SystemColors), "Control")] + public Color StartColor + { + get { return m_startColor; } + set { m_startColor = value; } + } + + /// + /// The ending gradient color. + /// + [DefaultValue(typeof(SystemColors), "Control")] + public Color EndColor + { + get { return m_endColor; } + set { m_endColor = value; } + } + + /// + /// The gradient mode to display the colors. + /// + [DefaultValue(LinearGradientMode.Horizontal)] + public LinearGradientMode LinearGradientMode + { + get { return m_linearGradientMode; } + set { m_linearGradientMode = value; } + } + } + + #endregion + + #region Converters + public class DockPanelSkinConverter : ExpandableObjectConverter + { + public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) + { + if (destinationType == typeof(DockPanelSkin)) + return true; + + return base.CanConvertTo(context, destinationType); + } + + public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) + { + if (destinationType == typeof(String) && value is DockPanelSkin) + { + return "DockPanelSkin"; + } + return base.ConvertTo(context, culture, value, destinationType); + } + } + + public class DockPanelGradientConverter : ExpandableObjectConverter + { + public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) + { + if (destinationType == typeof(DockPanelGradient)) + return true; + + return base.CanConvertTo(context, destinationType); + } + + public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) + { + if (destinationType == typeof(String) && value is DockPanelGradient) + { + return "DockPanelGradient"; + } + return base.ConvertTo(context, culture, value, destinationType); + } + } + + public class AutoHideStripConverter : ExpandableObjectConverter + { + public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) + { + if (destinationType == typeof(AutoHideStripSkin)) + return true; + + return base.CanConvertTo(context, destinationType); + } + + public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) + { + if (destinationType == typeof(String) && value is AutoHideStripSkin) + { + return "AutoHideStripSkin"; + } + return base.ConvertTo(context, culture, value, destinationType); + } + } + + public class DockPaneStripConverter : ExpandableObjectConverter + { + public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) + { + if (destinationType == typeof(DockPaneStripSkin)) + return true; + + return base.CanConvertTo(context, destinationType); + } + + public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) + { + if (destinationType == typeof(String) && value is DockPaneStripSkin) + { + return "DockPaneStripSkin"; + } + return base.ConvertTo(context, culture, value, destinationType); + } + } + + public class DockPaneStripGradientConverter : ExpandableObjectConverter + { + public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) + { + if (destinationType == typeof(DockPaneStripGradient)) + return true; + + return base.CanConvertTo(context, destinationType); + } + + public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) + { + if (destinationType == typeof(String) && value is DockPaneStripGradient) + { + return "DockPaneStripGradient"; + } + return base.ConvertTo(context, culture, value, destinationType); + } + } + + public class DockPaneTabGradientConverter : ExpandableObjectConverter + { + public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) + { + if (destinationType == typeof(TabGradient)) + return true; + + return base.CanConvertTo(context, destinationType); + } + + public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) + { + if (destinationType == typeof(String) && value is TabGradient) + { + return "DockPaneTabGradient"; + } + return base.ConvertTo(context, culture, value, destinationType); + } + } + #endregion +} diff --git a/trunk/Docking/DockWindow.SplitterControl.cs b/source/Docking/DockWindow.SplitterControl.cs similarity index 96% rename from trunk/Docking/DockWindow.SplitterControl.cs rename to source/Docking/DockWindow.SplitterControl.cs index 756668f..74978aa 100644 --- a/trunk/Docking/DockWindow.SplitterControl.cs +++ b/source/Docking/DockWindow.SplitterControl.cs @@ -1,28 +1,28 @@ -using System; -using System.Collections; -using System.ComponentModel; -using System.Drawing; -using System.Windows.Forms; - -namespace LSLEditor.Docking -{ - public partial class DockWindow - { - private class SplitterControl : SplitterBase - { - protected override int SplitterSize - { - get { return Measures.SplitterSize; } - } - - protected override void StartDrag() - { - DockWindow window = Parent as DockWindow; - if (window == null) - return; - - window.DockPanel.BeginDrag(window, window.RectangleToScreen(Bounds)); - } - } - } -} +using System; +using System.Collections; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace LSLEditor.Docking +{ + public partial class DockWindow + { + private class SplitterControl : SplitterBase + { + protected override int SplitterSize + { + get { return Measures.SplitterSize; } + } + + protected override void StartDrag() + { + DockWindow window = Parent as DockWindow; + if (window == null) + return; + + window.DockPanel.BeginDrag(window, window.RectangleToScreen(Bounds)); + } + } + } +} diff --git a/trunk/Docking/DockWindow.cs b/source/Docking/DockWindow.cs similarity index 96% rename from trunk/Docking/DockWindow.cs rename to source/Docking/DockWindow.cs index 71c6051..df8383a 100644 --- a/trunk/Docking/DockWindow.cs +++ b/source/Docking/DockWindow.cs @@ -1,243 +1,243 @@ -using System; -using System.Windows.Forms; -using System.Drawing; -using System.Runtime.InteropServices; -using System.ComponentModel; - -namespace LSLEditor.Docking -{ - [ToolboxItem(false)] - public partial class DockWindow : Panel, INestedPanesContainer, ISplitterDragSource - { - private DockPanel m_dockPanel; - private DockState m_dockState; - private SplitterControl m_splitter; - private NestedPaneCollection m_nestedPanes; - - internal DockWindow(DockPanel dockPanel, DockState dockState) - { - m_nestedPanes = new NestedPaneCollection(this); - m_dockPanel = dockPanel; - m_dockState = dockState; - Visible = false; - - SuspendLayout(); - - if (DockState == DockState.DockLeft || DockState == DockState.DockRight || - DockState == DockState.DockTop || DockState == DockState.DockBottom) - { - m_splitter = new SplitterControl(); - Controls.Add(m_splitter); - } - - if (DockState == DockState.DockLeft) - { - Dock = DockStyle.Left; - m_splitter.Dock = DockStyle.Right; - } - else if (DockState == DockState.DockRight) - { - Dock = DockStyle.Right; - m_splitter.Dock = DockStyle.Left; - } - else if (DockState == DockState.DockTop) - { - Dock = DockStyle.Top; - m_splitter.Dock = DockStyle.Bottom; - } - else if (DockState == DockState.DockBottom) - { - Dock = DockStyle.Bottom; - m_splitter.Dock = DockStyle.Top; - } - else if (DockState == DockState.Document) - { - Dock = DockStyle.Fill; - } - - ResumeLayout(); - } - - public VisibleNestedPaneCollection VisibleNestedPanes - { - get { return NestedPanes.VisibleNestedPanes; } - } - - public NestedPaneCollection NestedPanes - { - get { return m_nestedPanes; } - } - - public DockPanel DockPanel - { - get { return m_dockPanel; } - } - - public DockState DockState - { - get { return m_dockState; } - } - - public bool IsFloat - { - get { return DockState == DockState.Float; } - } - - internal DockPane DefaultPane - { - get { return VisibleNestedPanes.Count == 0 ? null : VisibleNestedPanes[0]; } - } - - public virtual Rectangle DisplayingRectangle - { - get - { - Rectangle rect = ClientRectangle; - // if DockWindow is document, exclude the border - if (DockState == DockState.Document) - { - rect.X += 1; - rect.Y += 1; - rect.Width -= 2; - rect.Height -= 2; - } - // exclude the splitter - else if (DockState == DockState.DockLeft) - rect.Width -= Measures.SplitterSize; - else if (DockState == DockState.DockRight) - { - rect.X += Measures.SplitterSize; - rect.Width -= Measures.SplitterSize; - } - else if (DockState == DockState.DockTop) - rect.Height -= Measures.SplitterSize; - else if (DockState == DockState.DockBottom) - { - rect.Y += Measures.SplitterSize; - rect.Height -= Measures.SplitterSize; - } - - return rect; - } - } - - protected override void OnPaint(PaintEventArgs e) - { - // if DockWindow is document, draw the border - if (DockState == DockState.Document) - e.Graphics.DrawRectangle(SystemPens.ControlDark, ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width - 1, ClientRectangle.Height - 1); - - base.OnPaint(e); - } - - protected override void OnLayout(LayoutEventArgs levent) - { - VisibleNestedPanes.Refresh(); - if (VisibleNestedPanes.Count == 0) - { - if (Visible) - Visible = false; - } - else if (!Visible) - { - Visible = true; - VisibleNestedPanes.Refresh(); - } - - base.OnLayout (levent); - } - - #region ISplitterDragSource Members - - void ISplitterDragSource.BeginDrag(Rectangle rectSplitter) - { - } - - void ISplitterDragSource.EndDrag() - { - } - - bool ISplitterDragSource.IsVertical - { - get { return (DockState == DockState.DockLeft || DockState == DockState.DockRight); } - } - - Rectangle ISplitterDragSource.DragLimitBounds - { - get - { - Rectangle rectLimit = DockPanel.DockArea; - Point location; - if ((Control.ModifierKeys & Keys.Shift) == 0) - location = Location; - else - location = DockPanel.DockArea.Location; - - if (((ISplitterDragSource)this).IsVertical) - { - rectLimit.X += MeasurePane.MinSize; - rectLimit.Width -= 2 * MeasurePane.MinSize; - rectLimit.Y = location.Y; - if ((Control.ModifierKeys & Keys.Shift) == 0) - rectLimit.Height = Height; - } - else - { - rectLimit.Y += MeasurePane.MinSize; - rectLimit.Height -= 2 * MeasurePane.MinSize; - rectLimit.X = location.X; - if ((Control.ModifierKeys & Keys.Shift) == 0) - rectLimit.Width = Width; - } - - return DockPanel.RectangleToScreen(rectLimit); - } - } - - void ISplitterDragSource.MoveSplitter(int offset) - { - if ((Control.ModifierKeys & Keys.Shift) != 0) - SendToBack(); - - Rectangle rectDockArea = DockPanel.DockArea; - if (DockState == DockState.DockLeft && rectDockArea.Width > 0) - { - if (DockPanel.DockLeftPortion > 1) - DockPanel.DockLeftPortion = Width + offset; - else - DockPanel.DockLeftPortion += ((double)offset) / (double)rectDockArea.Width; - } - else if (DockState == DockState.DockRight && rectDockArea.Width > 0) - { - if (DockPanel.DockRightPortion > 1) - DockPanel.DockRightPortion = Width - offset; - else - DockPanel.DockRightPortion -= ((double)offset) / (double)rectDockArea.Width; - } - else if (DockState == DockState.DockBottom && rectDockArea.Height > 0) - { - if (DockPanel.DockBottomPortion > 1) - DockPanel.DockBottomPortion = Height - offset; - else - DockPanel.DockBottomPortion -= ((double)offset) / (double)rectDockArea.Height; - } - else if (DockState == DockState.DockTop && rectDockArea.Height > 0) - { - if (DockPanel.DockTopPortion > 1) - DockPanel.DockTopPortion = Height + offset; - else - DockPanel.DockTopPortion += ((double)offset) / (double)rectDockArea.Height; - } - } - - #region IDragSource Members - - Control IDragSource.DragControl - { - get { return this; } - } - - #endregion - #endregion - } -} +using System; +using System.Windows.Forms; +using System.Drawing; +using System.Runtime.InteropServices; +using System.ComponentModel; + +namespace LSLEditor.Docking +{ + [ToolboxItem(false)] + public partial class DockWindow : Panel, INestedPanesContainer, ISplitterDragSource + { + private DockPanel m_dockPanel; + private DockState m_dockState; + private SplitterControl m_splitter; + private NestedPaneCollection m_nestedPanes; + + internal DockWindow(DockPanel dockPanel, DockState dockState) + { + m_nestedPanes = new NestedPaneCollection(this); + m_dockPanel = dockPanel; + m_dockState = dockState; + Visible = false; + + SuspendLayout(); + + if (DockState == DockState.DockLeft || DockState == DockState.DockRight || + DockState == DockState.DockTop || DockState == DockState.DockBottom) + { + m_splitter = new SplitterControl(); + Controls.Add(m_splitter); + } + + if (DockState == DockState.DockLeft) + { + Dock = DockStyle.Left; + m_splitter.Dock = DockStyle.Right; + } + else if (DockState == DockState.DockRight) + { + Dock = DockStyle.Right; + m_splitter.Dock = DockStyle.Left; + } + else if (DockState == DockState.DockTop) + { + Dock = DockStyle.Top; + m_splitter.Dock = DockStyle.Bottom; + } + else if (DockState == DockState.DockBottom) + { + Dock = DockStyle.Bottom; + m_splitter.Dock = DockStyle.Top; + } + else if (DockState == DockState.Document) + { + Dock = DockStyle.Fill; + } + + ResumeLayout(); + } + + public VisibleNestedPaneCollection VisibleNestedPanes + { + get { return NestedPanes.VisibleNestedPanes; } + } + + public NestedPaneCollection NestedPanes + { + get { return m_nestedPanes; } + } + + public DockPanel DockPanel + { + get { return m_dockPanel; } + } + + public DockState DockState + { + get { return m_dockState; } + } + + public bool IsFloat + { + get { return DockState == DockState.Float; } + } + + internal DockPane DefaultPane + { + get { return VisibleNestedPanes.Count == 0 ? null : VisibleNestedPanes[0]; } + } + + public virtual Rectangle DisplayingRectangle + { + get + { + Rectangle rect = ClientRectangle; + // if DockWindow is document, exclude the border + if (DockState == DockState.Document) + { + rect.X += 1; + rect.Y += 1; + rect.Width -= 2; + rect.Height -= 2; + } + // exclude the splitter + else if (DockState == DockState.DockLeft) + rect.Width -= Measures.SplitterSize; + else if (DockState == DockState.DockRight) + { + rect.X += Measures.SplitterSize; + rect.Width -= Measures.SplitterSize; + } + else if (DockState == DockState.DockTop) + rect.Height -= Measures.SplitterSize; + else if (DockState == DockState.DockBottom) + { + rect.Y += Measures.SplitterSize; + rect.Height -= Measures.SplitterSize; + } + + return rect; + } + } + + protected override void OnPaint(PaintEventArgs e) + { + // if DockWindow is document, draw the border + if (DockState == DockState.Document) + e.Graphics.DrawRectangle(SystemPens.ControlDark, ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width - 1, ClientRectangle.Height - 1); + + base.OnPaint(e); + } + + protected override void OnLayout(LayoutEventArgs levent) + { + VisibleNestedPanes.Refresh(); + if (VisibleNestedPanes.Count == 0) + { + if (Visible) + Visible = false; + } + else if (!Visible) + { + Visible = true; + VisibleNestedPanes.Refresh(); + } + + base.OnLayout (levent); + } + + #region ISplitterDragSource Members + + void ISplitterDragSource.BeginDrag(Rectangle rectSplitter) + { + } + + void ISplitterDragSource.EndDrag() + { + } + + bool ISplitterDragSource.IsVertical + { + get { return (DockState == DockState.DockLeft || DockState == DockState.DockRight); } + } + + Rectangle ISplitterDragSource.DragLimitBounds + { + get + { + Rectangle rectLimit = DockPanel.DockArea; + Point location; + if ((Control.ModifierKeys & Keys.Shift) == 0) + location = Location; + else + location = DockPanel.DockArea.Location; + + if (((ISplitterDragSource)this).IsVertical) + { + rectLimit.X += MeasurePane.MinSize; + rectLimit.Width -= 2 * MeasurePane.MinSize; + rectLimit.Y = location.Y; + if ((Control.ModifierKeys & Keys.Shift) == 0) + rectLimit.Height = Height; + } + else + { + rectLimit.Y += MeasurePane.MinSize; + rectLimit.Height -= 2 * MeasurePane.MinSize; + rectLimit.X = location.X; + if ((Control.ModifierKeys & Keys.Shift) == 0) + rectLimit.Width = Width; + } + + return DockPanel.RectangleToScreen(rectLimit); + } + } + + void ISplitterDragSource.MoveSplitter(int offset) + { + if ((Control.ModifierKeys & Keys.Shift) != 0) + SendToBack(); + + Rectangle rectDockArea = DockPanel.DockArea; + if (DockState == DockState.DockLeft && rectDockArea.Width > 0) + { + if (DockPanel.DockLeftPortion > 1) + DockPanel.DockLeftPortion = Width + offset; + else + DockPanel.DockLeftPortion += ((double)offset) / (double)rectDockArea.Width; + } + else if (DockState == DockState.DockRight && rectDockArea.Width > 0) + { + if (DockPanel.DockRightPortion > 1) + DockPanel.DockRightPortion = Width - offset; + else + DockPanel.DockRightPortion -= ((double)offset) / (double)rectDockArea.Width; + } + else if (DockState == DockState.DockBottom && rectDockArea.Height > 0) + { + if (DockPanel.DockBottomPortion > 1) + DockPanel.DockBottomPortion = Height - offset; + else + DockPanel.DockBottomPortion -= ((double)offset) / (double)rectDockArea.Height; + } + else if (DockState == DockState.DockTop && rectDockArea.Height > 0) + { + if (DockPanel.DockTopPortion > 1) + DockPanel.DockTopPortion = Height + offset; + else + DockPanel.DockTopPortion += ((double)offset) / (double)rectDockArea.Height; + } + } + + #region IDragSource Members + + Control IDragSource.DragControl + { + get { return this; } + } + + #endregion + #endregion + } +} diff --git a/trunk/Docking/DockWindowCollection.cs b/source/Docking/DockWindowCollection.cs similarity index 97% rename from trunk/Docking/DockWindowCollection.cs rename to source/Docking/DockWindowCollection.cs index ac41974..3894e07 100644 --- a/trunk/Docking/DockWindowCollection.cs +++ b/source/Docking/DockWindowCollection.cs @@ -1,38 +1,38 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; - -namespace LSLEditor.Docking -{ - public class DockWindowCollection : ReadOnlyCollection - { - internal DockWindowCollection(DockPanel dockPanel) - : base(new List()) - { - Items.Add(new DockWindow(dockPanel, DockState.Document)); - Items.Add(new DockWindow(dockPanel, DockState.DockLeft)); - Items.Add(new DockWindow(dockPanel, DockState.DockRight)); - Items.Add(new DockWindow(dockPanel, DockState.DockTop)); - Items.Add(new DockWindow(dockPanel, DockState.DockBottom)); - } - - public DockWindow this [DockState dockState] - { - get - { - if (dockState == DockState.Document) - return Items[0]; - else if (dockState == DockState.DockLeft || dockState == DockState.DockLeftAutoHide) - return Items[1]; - else if (dockState == DockState.DockRight || dockState == DockState.DockRightAutoHide) - return Items[2]; - else if (dockState == DockState.DockTop || dockState == DockState.DockTopAutoHide) - return Items[3]; - else if (dockState == DockState.DockBottom || dockState == DockState.DockBottomAutoHide) - return Items[4]; - - throw (new ArgumentOutOfRangeException()); - } - } - } -} +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; + +namespace LSLEditor.Docking +{ + public class DockWindowCollection : ReadOnlyCollection + { + internal DockWindowCollection(DockPanel dockPanel) + : base(new List()) + { + Items.Add(new DockWindow(dockPanel, DockState.Document)); + Items.Add(new DockWindow(dockPanel, DockState.DockLeft)); + Items.Add(new DockWindow(dockPanel, DockState.DockRight)); + Items.Add(new DockWindow(dockPanel, DockState.DockTop)); + Items.Add(new DockWindow(dockPanel, DockState.DockBottom)); + } + + public DockWindow this [DockState dockState] + { + get + { + if (dockState == DockState.Document) + return Items[0]; + else if (dockState == DockState.DockLeft || dockState == DockState.DockLeftAutoHide) + return Items[1]; + else if (dockState == DockState.DockRight || dockState == DockState.DockRightAutoHide) + return Items[2]; + else if (dockState == DockState.DockTop || dockState == DockState.DockTopAutoHide) + return Items[3]; + else if (dockState == DockState.DockBottom || dockState == DockState.DockBottomAutoHide) + return Items[4]; + + throw (new ArgumentOutOfRangeException()); + } + } + } +} diff --git a/trunk/Docking/DragForm.cs b/source/Docking/DragForm.cs similarity index 97% rename from trunk/Docking/DragForm.cs rename to source/Docking/DragForm.cs index 341ff96..08e7f3d 100644 --- a/trunk/Docking/DragForm.cs +++ b/source/Docking/DragForm.cs @@ -1,64 +1,64 @@ -using System; -using System.Windows.Forms; - -namespace LSLEditor.Docking -{ - // Inspired by Chris Sano's article: - // http://msdn.microsoft.com/smartclient/default.aspx?pull=/library/en-us/dnwinforms/html/colorpicker.asp - // In Sano's article, the DragForm needs to meet the following criteria: - // (1) it was not to show up in the task bar; - // ShowInTaskBar = false - // (2) it needed to be the top-most window; - // TopMost = true (not necessary here) - // (3) its icon could not show up in the ALT+TAB window if the user pressed ALT+TAB during a drag-and-drop; - // FormBorderStyle = FormBorderStyle.None; - // Create with WS_EX_TOOLWINDOW window style. - // Compares with the solution in the artile by setting FormBorderStyle as FixedToolWindow, - // and then clip the window caption and border, this way is much simplier. - // (4) it was not to steal focus from the application when displayed. - // User Win32 ShowWindow API with SW_SHOWNOACTIVATE - // In addition, this form should only for display and therefore should act as transparent, otherwise - // WindowFromPoint will return this form, instead of the control beneath. Need BOTH of the following to - // achieve this (don't know why, spent hours to try it out :( ): - // 1. Enabled = false; - // 2. WM_NCHITTEST returns HTTRANSPARENT - internal class DragForm : Form - { - public DragForm() - { - FormBorderStyle = FormBorderStyle.None; - ShowInTaskbar = false; - SetStyle(ControlStyles.Selectable, false); - Enabled = false; - } - - protected override CreateParams CreateParams - { - get - { - CreateParams createParams = base.CreateParams; - createParams.ExStyle |= (int)Win32.WindowExStyles.WS_EX_TOOLWINDOW; - return createParams; - } - } - - protected override void WndProc(ref Message m) - { - if (m.Msg == (int)Win32.Msgs.WM_NCHITTEST) - { - m.Result = (IntPtr)Win32.HitTest.HTTRANSPARENT; - return; - } - - base.WndProc (ref m); - } - - public virtual void Show(bool bActivate) - { - if (bActivate) - Show(); - else - NativeMethods.ShowWindow(Handle, (int)Win32.ShowWindowStyles.SW_SHOWNOACTIVATE); - } - } -} +using System; +using System.Windows.Forms; + +namespace LSLEditor.Docking +{ + // Inspired by Chris Sano's article: + // http://msdn.microsoft.com/smartclient/default.aspx?pull=/library/en-us/dnwinforms/html/colorpicker.asp + // In Sano's article, the DragForm needs to meet the following criteria: + // (1) it was not to show up in the task bar; + // ShowInTaskBar = false + // (2) it needed to be the top-most window; + // TopMost = true (not necessary here) + // (3) its icon could not show up in the ALT+TAB window if the user pressed ALT+TAB during a drag-and-drop; + // FormBorderStyle = FormBorderStyle.None; + // Create with WS_EX_TOOLWINDOW window style. + // Compares with the solution in the artile by setting FormBorderStyle as FixedToolWindow, + // and then clip the window caption and border, this way is much simplier. + // (4) it was not to steal focus from the application when displayed. + // User Win32 ShowWindow API with SW_SHOWNOACTIVATE + // In addition, this form should only for display and therefore should act as transparent, otherwise + // WindowFromPoint will return this form, instead of the control beneath. Need BOTH of the following to + // achieve this (don't know why, spent hours to try it out :( ): + // 1. Enabled = false; + // 2. WM_NCHITTEST returns HTTRANSPARENT + internal class DragForm : Form + { + public DragForm() + { + FormBorderStyle = FormBorderStyle.None; + ShowInTaskbar = false; + SetStyle(ControlStyles.Selectable, false); + Enabled = false; + } + + protected override CreateParams CreateParams + { + get + { + CreateParams createParams = base.CreateParams; + createParams.ExStyle |= (int)Win32.WindowExStyles.WS_EX_TOOLWINDOW; + return createParams; + } + } + + protected override void WndProc(ref Message m) + { + if (m.Msg == (int)Win32.Msgs.WM_NCHITTEST) + { + m.Result = (IntPtr)Win32.HitTest.HTTRANSPARENT; + return; + } + + base.WndProc (ref m); + } + + public virtual void Show(bool bActivate) + { + if (bActivate) + Show(); + else + NativeMethods.ShowWindow(Handle, (int)Win32.ShowWindowStyles.SW_SHOWNOACTIVATE); + } + } +} diff --git a/trunk/Docking/DummyControl.cs b/source/Docking/DummyControl.cs similarity index 93% rename from trunk/Docking/DummyControl.cs rename to source/Docking/DummyControl.cs index e74d091..25933e3 100644 --- a/trunk/Docking/DummyControl.cs +++ b/source/Docking/DummyControl.cs @@ -1,13 +1,13 @@ -using System; -using System.Windows.Forms; - -namespace LSLEditor.Docking -{ - internal class DummyControl : Control - { - public DummyControl() - { - SetStyle(ControlStyles.Selectable, false); - } - } -} +using System; +using System.Windows.Forms; + +namespace LSLEditor.Docking +{ + internal class DummyControl : Control + { + public DummyControl() + { + SetStyle(ControlStyles.Selectable, false); + } + } +} diff --git a/trunk/Docking/Enums.cs b/source/Docking/Enums.cs similarity index 93% rename from trunk/Docking/Enums.cs rename to source/Docking/Enums.cs index 4325288..8ae2502 100644 --- a/trunk/Docking/Enums.cs +++ b/source/Docking/Enums.cs @@ -1,60 +1,60 @@ -using System; -using System.ComponentModel; -using System.Windows.Forms; - -namespace LSLEditor.Docking -{ - [Flags] - [Serializable] - [Editor(typeof(DockAreasEditor), typeof(System.Drawing.Design.UITypeEditor))] - public enum DockAreas - { - Float = 1, - DockLeft = 2, - DockRight = 4, - DockTop = 8, - DockBottom = 16, - Document = 32 - } - - public enum DockState - { - Unknown = 0, - Float = 1, - DockTopAutoHide = 2, - DockLeftAutoHide = 3, - DockBottomAutoHide = 4, - DockRightAutoHide = 5, - Document = 6, - DockTop = 7, - DockLeft = 8, - DockBottom = 9, - DockRight = 10, - Hidden = 11 - } - - public enum DockAlignment - { - Left, - Right, - Top, - Bottom - } - - public enum DocumentStyle - { - DockingMdi, - DockingWindow, - DockingSdi, - SystemMdi, - } - - /// - /// The location to draw the DockPaneStrip for Document style windows. - /// - public enum DocumentTabStripLocation - { - Top, - Bottom - } -} +using System; +using System.ComponentModel; +using System.Windows.Forms; + +namespace LSLEditor.Docking +{ + [Flags] + [Serializable] + [Editor(typeof(DockAreasEditor), typeof(System.Drawing.Design.UITypeEditor))] + public enum DockAreas + { + Float = 1, + DockLeft = 2, + DockRight = 4, + DockTop = 8, + DockBottom = 16, + Document = 32 + } + + public enum DockState + { + Unknown = 0, + Float = 1, + DockTopAutoHide = 2, + DockLeftAutoHide = 3, + DockBottomAutoHide = 4, + DockRightAutoHide = 5, + Document = 6, + DockTop = 7, + DockLeft = 8, + DockBottom = 9, + DockRight = 10, + Hidden = 11 + } + + public enum DockAlignment + { + Left, + Right, + Top, + Bottom + } + + public enum DocumentStyle + { + DockingMdi, + DockingWindow, + DockingSdi, + SystemMdi, + } + + /// + /// The location to draw the DockPaneStrip for Document style windows. + /// + public enum DocumentTabStripLocation + { + Top, + Bottom + } +} diff --git a/trunk/Docking/FloatWindow.cs b/source/Docking/FloatWindow.cs similarity index 96% rename from trunk/Docking/FloatWindow.cs rename to source/Docking/FloatWindow.cs index 98f96e8..671d124 100644 --- a/trunk/Docking/FloatWindow.cs +++ b/source/Docking/FloatWindow.cs @@ -1,453 +1,453 @@ -using System; -using System.Collections; -using System.Drawing; -using System.Windows.Forms; -using System.Runtime.InteropServices; -using System.Security.Permissions; -using System.Diagnostics.CodeAnalysis; - -namespace LSLEditor.Docking -{ - public class FloatWindow : Form, INestedPanesContainer, IDockDragSource - { - private NestedPaneCollection m_nestedPanes; - internal const int WM_CHECKDISPOSE = (int)(Win32.Msgs.WM_USER + 1); - - internal protected FloatWindow(DockPanel dockPanel, DockPane pane) - { - InternalConstruct(dockPanel, pane, false, Rectangle.Empty); - } - - internal protected FloatWindow(DockPanel dockPanel, DockPane pane, Rectangle bounds) - { - InternalConstruct(dockPanel, pane, true, bounds); - } - - private void InternalConstruct(DockPanel dockPanel, DockPane pane, bool boundsSpecified, Rectangle bounds) - { - if (dockPanel == null) - throw(new ArgumentNullException(Strings.FloatWindow_Constructor_NullDockPanel)); - - m_nestedPanes = new NestedPaneCollection(this); - - FormBorderStyle = FormBorderStyle.SizableToolWindow; - ShowInTaskbar = false; - if (dockPanel.RightToLeft != RightToLeft) - RightToLeft = dockPanel.RightToLeft; - if (RightToLeftLayout != dockPanel.RightToLeftLayout) - RightToLeftLayout = dockPanel.RightToLeftLayout; - - SuspendLayout(); - if (boundsSpecified) - { - Bounds = bounds; - StartPosition = FormStartPosition.Manual; - } - else - { - StartPosition = FormStartPosition.WindowsDefaultLocation; - Size = dockPanel.DefaultFloatWindowSize; - } - - m_dockPanel = dockPanel; - Owner = DockPanel.FindForm(); - DockPanel.AddFloatWindow(this); - if (pane != null) - pane.FloatWindow = this; - - ResumeLayout(); - } - - protected override void Dispose(bool disposing) - { - if (disposing) - { - if (DockPanel != null) - DockPanel.RemoveFloatWindow(this); - m_dockPanel = null; - } - base.Dispose(disposing); - } - - private bool m_allowEndUserDocking = true; - public bool AllowEndUserDocking - { - get { return m_allowEndUserDocking; } - set { m_allowEndUserDocking = value; } - } - - public NestedPaneCollection NestedPanes - { - get { return m_nestedPanes; } - } - - public VisibleNestedPaneCollection VisibleNestedPanes - { - get { return NestedPanes.VisibleNestedPanes; } - } - - private DockPanel m_dockPanel; - public DockPanel DockPanel - { - get { return m_dockPanel; } - } - - public DockState DockState - { - get { return DockState.Float; } - } - - public bool IsFloat - { - get { return DockState == DockState.Float; } - } - - internal bool IsDockStateValid(DockState dockState) - { - foreach (DockPane pane in NestedPanes) - foreach (IDockContent content in pane.Contents) - if (!DockHelper.IsDockStateValid(dockState, content.DockHandler.DockAreas)) - return false; - - return true; - } - - protected override void OnActivated(EventArgs e) - { - DockPanel.FloatWindows.BringWindowToFront(this); - base.OnActivated (e); - // Propagate the Activated event to the visible panes content objects - foreach (DockPane pane in VisibleNestedPanes) - foreach (IDockContent content in pane.Contents) - content.OnActivated(e); - } - - protected override void OnDeactivate(EventArgs e) - { - base.OnDeactivate(e); - // Propagate the Deactivate event to the visible panes content objects - foreach (DockPane pane in VisibleNestedPanes) - foreach (IDockContent content in pane.Contents) - content.OnDeactivate(e); - } - - protected override void OnLayout(LayoutEventArgs levent) - { - VisibleNestedPanes.Refresh(); - RefreshChanges(); - Visible = (VisibleNestedPanes.Count > 0); - SetText(); - - base.OnLayout(levent); - } - - - [SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters", MessageId = "System.Windows.Forms.Control.set_Text(System.String)")] - internal void SetText() - { - DockPane theOnlyPane = (VisibleNestedPanes.Count == 1) ? VisibleNestedPanes[0] : null; - - if (theOnlyPane == null) - Text = " "; // use " " instead of string.Empty because the whole title bar will disappear when ControlBox is set to false. - else if (theOnlyPane.ActiveContent == null) - Text = " "; - else - Text = theOnlyPane.ActiveContent.DockHandler.TabText; - } - - protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified) - { - Rectangle rectWorkArea = SystemInformation.VirtualScreen; - - if (y + height > rectWorkArea.Bottom) - y -= (y + height) - rectWorkArea.Bottom; - - if (y < rectWorkArea.Top) - y += rectWorkArea.Top - y; - - base.SetBoundsCore (x, y, width, height, specified); - } - - [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] - protected override void WndProc(ref Message m) - { - if (m.Msg == (int)Win32.Msgs.WM_NCLBUTTONDOWN) - { - if (IsDisposed) - return; - - uint result = NativeMethods.SendMessage(this.Handle, (int)Win32.Msgs.WM_NCHITTEST, 0, (uint)m.LParam); - if (result == 2 && DockPanel.AllowEndUserDocking && this.AllowEndUserDocking) // HITTEST_CAPTION - { - Activate(); - m_dockPanel.BeginDrag(this); - } - else - base.WndProc(ref m); - - return; - } - else if (m.Msg == (int)Win32.Msgs.WM_NCRBUTTONDOWN) - { - uint result = NativeMethods.SendMessage(this.Handle, (int)Win32.Msgs.WM_NCHITTEST, 0, (uint)m.LParam); - if (result == 2) // HITTEST_CAPTION - { - DockPane theOnlyPane = (VisibleNestedPanes.Count == 1) ? VisibleNestedPanes[0] : null; - if (theOnlyPane != null && theOnlyPane.ActiveContent != null) - { - theOnlyPane.ShowTabPageContextMenu(this, PointToClient(Control.MousePosition)); - return; - } - } - - base.WndProc(ref m); - return; - } - else if (m.Msg == (int)Win32.Msgs.WM_CLOSE) - { - if (NestedPanes.Count == 0) - { - base.WndProc(ref m); - return; - } - - for (int i = NestedPanes.Count - 1; i >= 0; i--) - { - DockContentCollection contents = NestedPanes[i].Contents; - for (int j = contents.Count - 1; j >= 0; j--) - { - IDockContent content = contents[j]; - if (content.DockHandler.DockState != DockState.Float) - continue; - - if (!content.DockHandler.CloseButton) - continue; - - if (content.DockHandler.HideOnClose) - content.DockHandler.Hide(); - else - content.DockHandler.Close(); - } - } - - return; - } - else if (m.Msg == (int)Win32.Msgs.WM_NCLBUTTONDBLCLK) - { - uint result = NativeMethods.SendMessage(this.Handle, (int)Win32.Msgs.WM_NCHITTEST, 0, (uint)m.LParam); - if (result != 2) // HITTEST_CAPTION - { - base.WndProc(ref m); - return; - } - - DockPanel.SuspendLayout(true); - - // Restore to panel - foreach (DockPane pane in NestedPanes) - { - if (pane.DockState != DockState.Float) - continue; - pane.RestoreToPanel(); - } - - - DockPanel.ResumeLayout(true, true); - return; - } - else if (m.Msg == WM_CHECKDISPOSE) - { - if (NestedPanes.Count == 0) - Dispose(); - - return; - } - - base.WndProc(ref m); - } - - internal void RefreshChanges() - { - if (IsDisposed) - return; - - if (VisibleNestedPanes.Count == 0) - { - ControlBox = true; - return; - } - - for (int i=VisibleNestedPanes.Count - 1; i>=0; i--) - { - DockContentCollection contents = VisibleNestedPanes[i].Contents; - for (int j=contents.Count - 1; j>=0; j--) - { - IDockContent content = contents[j]; - if (content.DockHandler.DockState != DockState.Float) - continue; - - if (content.DockHandler.CloseButton && content.DockHandler.CloseButtonVisible) - { - ControlBox = true; - return; - } - } - } - //Only if there is a ControlBox do we turn it off - //old code caused a flash of the window. - if (ControlBox) - ControlBox = false; - } - - public virtual Rectangle DisplayingRectangle - { - get { return ClientRectangle; } - } - - internal void TestDrop(IDockDragSource dragSource, DockOutlineBase dockOutline) - { - if (VisibleNestedPanes.Count == 1) - { - DockPane pane = VisibleNestedPanes[0]; - if (!dragSource.CanDockTo(pane)) - return; - - Point ptMouse = Control.MousePosition; - uint lParam = Win32Helper.MakeLong(ptMouse.X, ptMouse.Y); - if (NativeMethods.SendMessage(Handle, (int)Win32.Msgs.WM_NCHITTEST, 0, lParam) == (uint)Win32.HitTest.HTCAPTION) - dockOutline.Show(VisibleNestedPanes[0], -1); - } - } - - #region IDockDragSource Members - - #region IDragSource Members - - Control IDragSource.DragControl - { - get { return this; } - } - - #endregion - - bool IDockDragSource.IsDockStateValid(DockState dockState) - { - return IsDockStateValid(dockState); - } - - bool IDockDragSource.CanDockTo(DockPane pane) - { - if (!IsDockStateValid(pane.DockState)) - return false; - - if (pane.FloatWindow == this) - return false; - - return true; - } - - Rectangle IDockDragSource.BeginDrag(Point ptMouse) - { - return Bounds; - } - - public void FloatAt(Rectangle floatWindowBounds) - { - Bounds = floatWindowBounds; - } - - public void DockTo(DockPane pane, DockStyle dockStyle, int contentIndex) - { - if (dockStyle == DockStyle.Fill) - { - for (int i = NestedPanes.Count - 1; i >= 0; i--) - { - DockPane paneFrom = NestedPanes[i]; - for (int j = paneFrom.Contents.Count - 1; j >= 0; j--) - { - IDockContent c = paneFrom.Contents[j]; - c.DockHandler.Pane = pane; - if (contentIndex != -1) - pane.SetContentIndex(c, contentIndex); - c.DockHandler.Activate(); - } - } - } - else - { - DockAlignment alignment = DockAlignment.Left; - if (dockStyle == DockStyle.Left) - alignment = DockAlignment.Left; - else if (dockStyle == DockStyle.Right) - alignment = DockAlignment.Right; - else if (dockStyle == DockStyle.Top) - alignment = DockAlignment.Top; - else if (dockStyle == DockStyle.Bottom) - alignment = DockAlignment.Bottom; - - MergeNestedPanes(VisibleNestedPanes, pane.NestedPanesContainer.NestedPanes, pane, alignment, 0.5); - } - } - - public void DockTo(DockPanel panel, DockStyle dockStyle) - { - if (panel != DockPanel) - throw new ArgumentException(Strings.IDockDragSource_DockTo_InvalidPanel, "panel"); - - NestedPaneCollection nestedPanesTo = null; - - if (dockStyle == DockStyle.Top) - nestedPanesTo = DockPanel.DockWindows[DockState.DockTop].NestedPanes; - else if (dockStyle == DockStyle.Bottom) - nestedPanesTo = DockPanel.DockWindows[DockState.DockBottom].NestedPanes; - else if (dockStyle == DockStyle.Left) - nestedPanesTo = DockPanel.DockWindows[DockState.DockLeft].NestedPanes; - else if (dockStyle == DockStyle.Right) - nestedPanesTo = DockPanel.DockWindows[DockState.DockRight].NestedPanes; - else if (dockStyle == DockStyle.Fill) - nestedPanesTo = DockPanel.DockWindows[DockState.Document].NestedPanes; - - DockPane prevPane = null; - for (int i = nestedPanesTo.Count - 1; i >= 0; i--) - if (nestedPanesTo[i] != VisibleNestedPanes[0]) - prevPane = nestedPanesTo[i]; - MergeNestedPanes(VisibleNestedPanes, nestedPanesTo, prevPane, DockAlignment.Left, 0.5); - } - - private static void MergeNestedPanes(VisibleNestedPaneCollection nestedPanesFrom, NestedPaneCollection nestedPanesTo, DockPane prevPane, DockAlignment alignment, double proportion) - { - if (nestedPanesFrom.Count == 0) - return; - - int count = nestedPanesFrom.Count; - DockPane[] panes = new DockPane[count]; - DockPane[] prevPanes = new DockPane[count]; - DockAlignment[] alignments = new DockAlignment[count]; - double[] proportions = new double[count]; - - for (int i = 0; i < count; i++) - { - panes[i] = nestedPanesFrom[i]; - prevPanes[i] = nestedPanesFrom[i].NestedDockingStatus.PreviousPane; - alignments[i] = nestedPanesFrom[i].NestedDockingStatus.Alignment; - proportions[i] = nestedPanesFrom[i].NestedDockingStatus.Proportion; - } - - DockPane pane = panes[0].DockTo(nestedPanesTo.Container, prevPane, alignment, proportion); - panes[0].DockState = nestedPanesTo.DockState; - - for (int i = 1; i < count; i++) - { - for (int j = i; j < count; j++) - { - if (prevPanes[j] == panes[i - 1]) - prevPanes[j] = pane; - } - pane = panes[i].DockTo(nestedPanesTo.Container, prevPanes[i], alignments[i], proportions[i]); - panes[i].DockState = nestedPanesTo.DockState; - } - } - - #endregion - } -} +using System; +using System.Collections; +using System.Drawing; +using System.Windows.Forms; +using System.Runtime.InteropServices; +using System.Security.Permissions; +using System.Diagnostics.CodeAnalysis; + +namespace LSLEditor.Docking +{ + public class FloatWindow : Form, INestedPanesContainer, IDockDragSource + { + private NestedPaneCollection m_nestedPanes; + internal const int WM_CHECKDISPOSE = (int)(Win32.Msgs.WM_USER + 1); + + internal protected FloatWindow(DockPanel dockPanel, DockPane pane) + { + InternalConstruct(dockPanel, pane, false, Rectangle.Empty); + } + + internal protected FloatWindow(DockPanel dockPanel, DockPane pane, Rectangle bounds) + { + InternalConstruct(dockPanel, pane, true, bounds); + } + + private void InternalConstruct(DockPanel dockPanel, DockPane pane, bool boundsSpecified, Rectangle bounds) + { + if (dockPanel == null) + throw(new ArgumentNullException(Strings.FloatWindow_Constructor_NullDockPanel)); + + m_nestedPanes = new NestedPaneCollection(this); + + FormBorderStyle = FormBorderStyle.SizableToolWindow; + ShowInTaskbar = false; + if (dockPanel.RightToLeft != RightToLeft) + RightToLeft = dockPanel.RightToLeft; + if (RightToLeftLayout != dockPanel.RightToLeftLayout) + RightToLeftLayout = dockPanel.RightToLeftLayout; + + SuspendLayout(); + if (boundsSpecified) + { + Bounds = bounds; + StartPosition = FormStartPosition.Manual; + } + else + { + StartPosition = FormStartPosition.WindowsDefaultLocation; + Size = dockPanel.DefaultFloatWindowSize; + } + + m_dockPanel = dockPanel; + Owner = DockPanel.FindForm(); + DockPanel.AddFloatWindow(this); + if (pane != null) + pane.FloatWindow = this; + + ResumeLayout(); + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (DockPanel != null) + DockPanel.RemoveFloatWindow(this); + m_dockPanel = null; + } + base.Dispose(disposing); + } + + private bool m_allowEndUserDocking = true; + public bool AllowEndUserDocking + { + get { return m_allowEndUserDocking; } + set { m_allowEndUserDocking = value; } + } + + public NestedPaneCollection NestedPanes + { + get { return m_nestedPanes; } + } + + public VisibleNestedPaneCollection VisibleNestedPanes + { + get { return NestedPanes.VisibleNestedPanes; } + } + + private DockPanel m_dockPanel; + public DockPanel DockPanel + { + get { return m_dockPanel; } + } + + public DockState DockState + { + get { return DockState.Float; } + } + + public bool IsFloat + { + get { return DockState == DockState.Float; } + } + + internal bool IsDockStateValid(DockState dockState) + { + foreach (DockPane pane in NestedPanes) + foreach (IDockContent content in pane.Contents) + if (!DockHelper.IsDockStateValid(dockState, content.DockHandler.DockAreas)) + return false; + + return true; + } + + protected override void OnActivated(EventArgs e) + { + DockPanel.FloatWindows.BringWindowToFront(this); + base.OnActivated (e); + // Propagate the Activated event to the visible panes content objects + foreach (DockPane pane in VisibleNestedPanes) + foreach (IDockContent content in pane.Contents) + content.OnActivated(e); + } + + protected override void OnDeactivate(EventArgs e) + { + base.OnDeactivate(e); + // Propagate the Deactivate event to the visible panes content objects + foreach (DockPane pane in VisibleNestedPanes) + foreach (IDockContent content in pane.Contents) + content.OnDeactivate(e); + } + + protected override void OnLayout(LayoutEventArgs levent) + { + VisibleNestedPanes.Refresh(); + RefreshChanges(); + Visible = (VisibleNestedPanes.Count > 0); + SetText(); + + base.OnLayout(levent); + } + + + [SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters", MessageId = "System.Windows.Forms.Control.set_Text(System.String)")] + internal void SetText() + { + DockPane theOnlyPane = (VisibleNestedPanes.Count == 1) ? VisibleNestedPanes[0] : null; + + if (theOnlyPane == null) + Text = " "; // use " " instead of string.Empty because the whole title bar will disappear when ControlBox is set to false. + else if (theOnlyPane.ActiveContent == null) + Text = " "; + else + Text = theOnlyPane.ActiveContent.DockHandler.TabText; + } + + protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified) + { + Rectangle rectWorkArea = SystemInformation.VirtualScreen; + + if (y + height > rectWorkArea.Bottom) + y -= (y + height) - rectWorkArea.Bottom; + + if (y < rectWorkArea.Top) + y += rectWorkArea.Top - y; + + base.SetBoundsCore (x, y, width, height, specified); + } + + [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] + protected override void WndProc(ref Message m) + { + if (m.Msg == (int)Win32.Msgs.WM_NCLBUTTONDOWN) + { + if (IsDisposed) + return; + + uint result = NativeMethods.SendMessage(this.Handle, (int)Win32.Msgs.WM_NCHITTEST, 0, (uint)m.LParam); + if (result == 2 && DockPanel.AllowEndUserDocking && this.AllowEndUserDocking) // HITTEST_CAPTION + { + Activate(); + m_dockPanel.BeginDrag(this); + } + else + base.WndProc(ref m); + + return; + } + else if (m.Msg == (int)Win32.Msgs.WM_NCRBUTTONDOWN) + { + uint result = NativeMethods.SendMessage(this.Handle, (int)Win32.Msgs.WM_NCHITTEST, 0, (uint)m.LParam); + if (result == 2) // HITTEST_CAPTION + { + DockPane theOnlyPane = (VisibleNestedPanes.Count == 1) ? VisibleNestedPanes[0] : null; + if (theOnlyPane != null && theOnlyPane.ActiveContent != null) + { + theOnlyPane.ShowTabPageContextMenu(this, PointToClient(Control.MousePosition)); + return; + } + } + + base.WndProc(ref m); + return; + } + else if (m.Msg == (int)Win32.Msgs.WM_CLOSE) + { + if (NestedPanes.Count == 0) + { + base.WndProc(ref m); + return; + } + + for (int i = NestedPanes.Count - 1; i >= 0; i--) + { + DockContentCollection contents = NestedPanes[i].Contents; + for (int j = contents.Count - 1; j >= 0; j--) + { + IDockContent content = contents[j]; + if (content.DockHandler.DockState != DockState.Float) + continue; + + if (!content.DockHandler.CloseButton) + continue; + + if (content.DockHandler.HideOnClose) + content.DockHandler.Hide(); + else + content.DockHandler.Close(); + } + } + + return; + } + else if (m.Msg == (int)Win32.Msgs.WM_NCLBUTTONDBLCLK) + { + uint result = NativeMethods.SendMessage(this.Handle, (int)Win32.Msgs.WM_NCHITTEST, 0, (uint)m.LParam); + if (result != 2) // HITTEST_CAPTION + { + base.WndProc(ref m); + return; + } + + DockPanel.SuspendLayout(true); + + // Restore to panel + foreach (DockPane pane in NestedPanes) + { + if (pane.DockState != DockState.Float) + continue; + pane.RestoreToPanel(); + } + + + DockPanel.ResumeLayout(true, true); + return; + } + else if (m.Msg == WM_CHECKDISPOSE) + { + if (NestedPanes.Count == 0) + Dispose(); + + return; + } + + base.WndProc(ref m); + } + + internal void RefreshChanges() + { + if (IsDisposed) + return; + + if (VisibleNestedPanes.Count == 0) + { + ControlBox = true; + return; + } + + for (int i=VisibleNestedPanes.Count - 1; i>=0; i--) + { + DockContentCollection contents = VisibleNestedPanes[i].Contents; + for (int j=contents.Count - 1; j>=0; j--) + { + IDockContent content = contents[j]; + if (content.DockHandler.DockState != DockState.Float) + continue; + + if (content.DockHandler.CloseButton && content.DockHandler.CloseButtonVisible) + { + ControlBox = true; + return; + } + } + } + //Only if there is a ControlBox do we turn it off + //old code caused a flash of the window. + if (ControlBox) + ControlBox = false; + } + + public virtual Rectangle DisplayingRectangle + { + get { return ClientRectangle; } + } + + internal void TestDrop(IDockDragSource dragSource, DockOutlineBase dockOutline) + { + if (VisibleNestedPanes.Count == 1) + { + DockPane pane = VisibleNestedPanes[0]; + if (!dragSource.CanDockTo(pane)) + return; + + Point ptMouse = Control.MousePosition; + uint lParam = Win32Helper.MakeLong(ptMouse.X, ptMouse.Y); + if (NativeMethods.SendMessage(Handle, (int)Win32.Msgs.WM_NCHITTEST, 0, lParam) == (uint)Win32.HitTest.HTCAPTION) + dockOutline.Show(VisibleNestedPanes[0], -1); + } + } + + #region IDockDragSource Members + + #region IDragSource Members + + Control IDragSource.DragControl + { + get { return this; } + } + + #endregion + + bool IDockDragSource.IsDockStateValid(DockState dockState) + { + return IsDockStateValid(dockState); + } + + bool IDockDragSource.CanDockTo(DockPane pane) + { + if (!IsDockStateValid(pane.DockState)) + return false; + + if (pane.FloatWindow == this) + return false; + + return true; + } + + Rectangle IDockDragSource.BeginDrag(Point ptMouse) + { + return Bounds; + } + + public void FloatAt(Rectangle floatWindowBounds) + { + Bounds = floatWindowBounds; + } + + public void DockTo(DockPane pane, DockStyle dockStyle, int contentIndex) + { + if (dockStyle == DockStyle.Fill) + { + for (int i = NestedPanes.Count - 1; i >= 0; i--) + { + DockPane paneFrom = NestedPanes[i]; + for (int j = paneFrom.Contents.Count - 1; j >= 0; j--) + { + IDockContent c = paneFrom.Contents[j]; + c.DockHandler.Pane = pane; + if (contentIndex != -1) + pane.SetContentIndex(c, contentIndex); + c.DockHandler.Activate(); + } + } + } + else + { + DockAlignment alignment = DockAlignment.Left; + if (dockStyle == DockStyle.Left) + alignment = DockAlignment.Left; + else if (dockStyle == DockStyle.Right) + alignment = DockAlignment.Right; + else if (dockStyle == DockStyle.Top) + alignment = DockAlignment.Top; + else if (dockStyle == DockStyle.Bottom) + alignment = DockAlignment.Bottom; + + MergeNestedPanes(VisibleNestedPanes, pane.NestedPanesContainer.NestedPanes, pane, alignment, 0.5); + } + } + + public void DockTo(DockPanel panel, DockStyle dockStyle) + { + if (panel != DockPanel) + throw new ArgumentException(Strings.IDockDragSource_DockTo_InvalidPanel, "panel"); + + NestedPaneCollection nestedPanesTo = null; + + if (dockStyle == DockStyle.Top) + nestedPanesTo = DockPanel.DockWindows[DockState.DockTop].NestedPanes; + else if (dockStyle == DockStyle.Bottom) + nestedPanesTo = DockPanel.DockWindows[DockState.DockBottom].NestedPanes; + else if (dockStyle == DockStyle.Left) + nestedPanesTo = DockPanel.DockWindows[DockState.DockLeft].NestedPanes; + else if (dockStyle == DockStyle.Right) + nestedPanesTo = DockPanel.DockWindows[DockState.DockRight].NestedPanes; + else if (dockStyle == DockStyle.Fill) + nestedPanesTo = DockPanel.DockWindows[DockState.Document].NestedPanes; + + DockPane prevPane = null; + for (int i = nestedPanesTo.Count - 1; i >= 0; i--) + if (nestedPanesTo[i] != VisibleNestedPanes[0]) + prevPane = nestedPanesTo[i]; + MergeNestedPanes(VisibleNestedPanes, nestedPanesTo, prevPane, DockAlignment.Left, 0.5); + } + + private static void MergeNestedPanes(VisibleNestedPaneCollection nestedPanesFrom, NestedPaneCollection nestedPanesTo, DockPane prevPane, DockAlignment alignment, double proportion) + { + if (nestedPanesFrom.Count == 0) + return; + + int count = nestedPanesFrom.Count; + DockPane[] panes = new DockPane[count]; + DockPane[] prevPanes = new DockPane[count]; + DockAlignment[] alignments = new DockAlignment[count]; + double[] proportions = new double[count]; + + for (int i = 0; i < count; i++) + { + panes[i] = nestedPanesFrom[i]; + prevPanes[i] = nestedPanesFrom[i].NestedDockingStatus.PreviousPane; + alignments[i] = nestedPanesFrom[i].NestedDockingStatus.Alignment; + proportions[i] = nestedPanesFrom[i].NestedDockingStatus.Proportion; + } + + DockPane pane = panes[0].DockTo(nestedPanesTo.Container, prevPane, alignment, proportion); + panes[0].DockState = nestedPanesTo.DockState; + + for (int i = 1; i < count; i++) + { + for (int j = i; j < count; j++) + { + if (prevPanes[j] == panes[i - 1]) + prevPanes[j] = pane; + } + pane = panes[i].DockTo(nestedPanesTo.Container, prevPanes[i], alignments[i], proportions[i]); + panes[i].DockState = nestedPanesTo.DockState; + } + } + + #endregion + } +} diff --git a/trunk/Docking/FloatWindowCollection.cs b/source/Docking/FloatWindowCollection.cs similarity index 94% rename from trunk/Docking/FloatWindowCollection.cs rename to source/Docking/FloatWindowCollection.cs index 9dc4f7c..e6078b2 100644 --- a/trunk/Docking/FloatWindowCollection.cs +++ b/source/Docking/FloatWindowCollection.cs @@ -1,42 +1,42 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Drawing; -using System.Windows.Forms; - -namespace LSLEditor.Docking -{ - public class FloatWindowCollection : ReadOnlyCollection - { - internal FloatWindowCollection() - : base(new List()) - { - } - - internal int Add(FloatWindow fw) - { - if (Items.Contains(fw)) - return Items.IndexOf(fw); - - Items.Add(fw); - return Count - 1; - } - - internal void Dispose() - { - for (int i=Count - 1; i>=0; i--) - this[i].Close(); - } - - internal void Remove(FloatWindow fw) - { - Items.Remove(fw); - } - - internal void BringWindowToFront(FloatWindow fw) - { - Items.Remove(fw); - Items.Add(fw); - } - } -} +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Drawing; +using System.Windows.Forms; + +namespace LSLEditor.Docking +{ + public class FloatWindowCollection : ReadOnlyCollection + { + internal FloatWindowCollection() + : base(new List()) + { + } + + internal int Add(FloatWindow fw) + { + if (Items.Contains(fw)) + return Items.IndexOf(fw); + + Items.Add(fw); + return Count - 1; + } + + internal void Dispose() + { + for (int i=Count - 1; i>=0; i--) + this[i].Close(); + } + + internal void Remove(FloatWindow fw) + { + Items.Remove(fw); + } + + internal void BringWindowToFront(FloatWindow fw) + { + Items.Remove(fw); + Items.Add(fw); + } + } +} diff --git a/trunk/Docking/Helpers/DockHelper.cs b/source/Docking/Helpers/DockHelper.cs similarity index 96% rename from trunk/Docking/Helpers/DockHelper.cs rename to source/Docking/Helpers/DockHelper.cs index ecbae43..c48b166 100644 --- a/trunk/Docking/Helpers/DockHelper.cs +++ b/source/Docking/Helpers/DockHelper.cs @@ -1,103 +1,103 @@ -using System; -using System.Drawing; -using System.Windows.Forms; - -namespace LSLEditor.Docking -{ - internal static class DockHelper - { - public static bool IsDockStateAutoHide(DockState dockState) - { - if (dockState == DockState.DockLeftAutoHide || - dockState == DockState.DockRightAutoHide || - dockState == DockState.DockTopAutoHide || - dockState == DockState.DockBottomAutoHide) - return true; - else - return false; - } - - public static bool IsDockStateValid(DockState dockState, DockAreas dockableAreas) - { - if (((dockableAreas & DockAreas.Float) == 0) && - (dockState == DockState.Float)) - return false; - else if (((dockableAreas & DockAreas.Document) == 0) && - (dockState == DockState.Document)) - return false; - else if (((dockableAreas & DockAreas.DockLeft) == 0) && - (dockState == DockState.DockLeft || dockState == DockState.DockLeftAutoHide)) - return false; - else if (((dockableAreas & DockAreas.DockRight) == 0) && - (dockState == DockState.DockRight || dockState == DockState.DockRightAutoHide)) - return false; - else if (((dockableAreas & DockAreas.DockTop) == 0) && - (dockState == DockState.DockTop || dockState == DockState.DockTopAutoHide)) - return false; - else if (((dockableAreas & DockAreas.DockBottom) == 0) && - (dockState == DockState.DockBottom || dockState == DockState.DockBottomAutoHide)) - return false; - else - return true; - } - - public static bool IsDockWindowState(DockState state) - { - if (state == DockState.DockTop || state == DockState.DockBottom || state == DockState.DockLeft || - state == DockState.DockRight || state == DockState.Document) - return true; - else - return false; - } - - public static DockState ToggleAutoHideState(DockState state) - { - if (state == DockState.DockLeft) - return DockState.DockLeftAutoHide; - else if (state == DockState.DockRight) - return DockState.DockRightAutoHide; - else if (state == DockState.DockTop) - return DockState.DockTopAutoHide; - else if (state == DockState.DockBottom) - return DockState.DockBottomAutoHide; - else if (state == DockState.DockLeftAutoHide) - return DockState.DockLeft; - else if (state == DockState.DockRightAutoHide) - return DockState.DockRight; - else if (state == DockState.DockTopAutoHide) - return DockState.DockTop; - else if (state == DockState.DockBottomAutoHide) - return DockState.DockBottom; - else - return state; - } - - public static DockPane PaneAtPoint(Point pt, DockPanel dockPanel) - { - for (Control control = Win32Helper.ControlAtPoint(pt); control != null; control = control.Parent) - { - IDockContent content = control as IDockContent; - if (content != null && content.DockHandler.DockPanel == dockPanel) - return content.DockHandler.Pane; - - DockPane pane = control as DockPane; - if (pane != null && pane.DockPanel == dockPanel) - return pane; - } - - return null; - } - - public static FloatWindow FloatWindowAtPoint(Point pt, DockPanel dockPanel) - { - for (Control control = Win32Helper.ControlAtPoint(pt); control != null; control = control.Parent) - { - FloatWindow floatWindow = control as FloatWindow; - if (floatWindow != null && floatWindow.DockPanel == dockPanel) - return floatWindow; - } - - return null; - } - } -} +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace LSLEditor.Docking +{ + internal static class DockHelper + { + public static bool IsDockStateAutoHide(DockState dockState) + { + if (dockState == DockState.DockLeftAutoHide || + dockState == DockState.DockRightAutoHide || + dockState == DockState.DockTopAutoHide || + dockState == DockState.DockBottomAutoHide) + return true; + else + return false; + } + + public static bool IsDockStateValid(DockState dockState, DockAreas dockableAreas) + { + if (((dockableAreas & DockAreas.Float) == 0) && + (dockState == DockState.Float)) + return false; + else if (((dockableAreas & DockAreas.Document) == 0) && + (dockState == DockState.Document)) + return false; + else if (((dockableAreas & DockAreas.DockLeft) == 0) && + (dockState == DockState.DockLeft || dockState == DockState.DockLeftAutoHide)) + return false; + else if (((dockableAreas & DockAreas.DockRight) == 0) && + (dockState == DockState.DockRight || dockState == DockState.DockRightAutoHide)) + return false; + else if (((dockableAreas & DockAreas.DockTop) == 0) && + (dockState == DockState.DockTop || dockState == DockState.DockTopAutoHide)) + return false; + else if (((dockableAreas & DockAreas.DockBottom) == 0) && + (dockState == DockState.DockBottom || dockState == DockState.DockBottomAutoHide)) + return false; + else + return true; + } + + public static bool IsDockWindowState(DockState state) + { + if (state == DockState.DockTop || state == DockState.DockBottom || state == DockState.DockLeft || + state == DockState.DockRight || state == DockState.Document) + return true; + else + return false; + } + + public static DockState ToggleAutoHideState(DockState state) + { + if (state == DockState.DockLeft) + return DockState.DockLeftAutoHide; + else if (state == DockState.DockRight) + return DockState.DockRightAutoHide; + else if (state == DockState.DockTop) + return DockState.DockTopAutoHide; + else if (state == DockState.DockBottom) + return DockState.DockBottomAutoHide; + else if (state == DockState.DockLeftAutoHide) + return DockState.DockLeft; + else if (state == DockState.DockRightAutoHide) + return DockState.DockRight; + else if (state == DockState.DockTopAutoHide) + return DockState.DockTop; + else if (state == DockState.DockBottomAutoHide) + return DockState.DockBottom; + else + return state; + } + + public static DockPane PaneAtPoint(Point pt, DockPanel dockPanel) + { + for (Control control = Win32Helper.ControlAtPoint(pt); control != null; control = control.Parent) + { + IDockContent content = control as IDockContent; + if (content != null && content.DockHandler.DockPanel == dockPanel) + return content.DockHandler.Pane; + + DockPane pane = control as DockPane; + if (pane != null && pane.DockPanel == dockPanel) + return pane; + } + + return null; + } + + public static FloatWindow FloatWindowAtPoint(Point pt, DockPanel dockPanel) + { + for (Control control = Win32Helper.ControlAtPoint(pt); control != null; control = control.Parent) + { + FloatWindow floatWindow = control as FloatWindow; + if (floatWindow != null && floatWindow.DockPanel == dockPanel) + return floatWindow; + } + + return null; + } + } +} diff --git a/trunk/Docking/Helpers/DrawHelper.cs b/source/Docking/Helpers/DrawHelper.cs similarity index 97% rename from trunk/Docking/Helpers/DrawHelper.cs rename to source/Docking/Helpers/DrawHelper.cs index b9759fa..058da2b 100644 --- a/trunk/Docking/Helpers/DrawHelper.cs +++ b/source/Docking/Helpers/DrawHelper.cs @@ -1,88 +1,88 @@ -using System; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Drawing.Imaging; -using System.Windows.Forms; - -namespace LSLEditor.Docking -{ - internal static class DrawHelper - { - public static Point RtlTransform(Control control, Point point) - { - if (control.RightToLeft != RightToLeft.Yes) - return point; - else - return new Point(control.Right - point.X, point.Y); - } - - public static Rectangle RtlTransform(Control control, Rectangle rectangle) - { - if (control.RightToLeft != RightToLeft.Yes) - return rectangle; - else - return new Rectangle(control.ClientRectangle.Right - rectangle.Right, rectangle.Y, rectangle.Width, rectangle.Height); - } - - public static GraphicsPath GetRoundedCornerTab(GraphicsPath graphicsPath, Rectangle rect, bool upCorner) - { - if (graphicsPath == null) - graphicsPath = new GraphicsPath(); - else - graphicsPath.Reset(); - - int curveSize = 6; - if (upCorner) - { - graphicsPath.AddLine(rect.Left, rect.Bottom, rect.Left, rect.Top + curveSize / 2); - graphicsPath.AddArc(new Rectangle(rect.Left, rect.Top, curveSize, curveSize), 180, 90); - graphicsPath.AddLine(rect.Left + curveSize / 2, rect.Top, rect.Right - curveSize / 2, rect.Top); - graphicsPath.AddArc(new Rectangle(rect.Right - curveSize, rect.Top, curveSize, curveSize), -90, 90); - graphicsPath.AddLine(rect.Right, rect.Top + curveSize / 2, rect.Right, rect.Bottom); - } - else - { - graphicsPath.AddLine(rect.Right, rect.Top, rect.Right, rect.Bottom - curveSize / 2); - graphicsPath.AddArc(new Rectangle(rect.Right - curveSize, rect.Bottom - curveSize, curveSize, curveSize), 0, 90); - graphicsPath.AddLine(rect.Right - curveSize / 2, rect.Bottom, rect.Left + curveSize / 2, rect.Bottom); - graphicsPath.AddArc(new Rectangle(rect.Left, rect.Bottom - curveSize, curveSize, curveSize), 90, 90); - graphicsPath.AddLine(rect.Left, rect.Bottom - curveSize / 2, rect.Left, rect.Top); - } - - return graphicsPath; - } - - public static GraphicsPath CalculateGraphicsPathFromBitmap(Bitmap bitmap) - { - return CalculateGraphicsPathFromBitmap(bitmap, Color.Empty); - } - - // From http://edu.cnzz.cn/show_3281.html - public static GraphicsPath CalculateGraphicsPathFromBitmap(Bitmap bitmap, Color colorTransparent) - { - GraphicsPath graphicsPath = new GraphicsPath(); - if (colorTransparent == Color.Empty) - colorTransparent = bitmap.GetPixel(0, 0); - - for(int row = 0; row < bitmap.Height; row ++) - { - int colOpaquePixel = 0; - for(int col = 0; col < bitmap.Width; col ++) - { - if(bitmap.GetPixel(col, row) != colorTransparent) - { - colOpaquePixel = col; - int colNext = col; - for(colNext = colOpaquePixel; colNext < bitmap.Width; colNext ++) - if(bitmap.GetPixel(colNext, row) == colorTransparent) - break; - - graphicsPath.AddRectangle(new Rectangle(colOpaquePixel, row, colNext - colOpaquePixel, 1)); - col = colNext; - } - } - } - return graphicsPath; - } - } -} +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.Windows.Forms; + +namespace LSLEditor.Docking +{ + internal static class DrawHelper + { + public static Point RtlTransform(Control control, Point point) + { + if (control.RightToLeft != RightToLeft.Yes) + return point; + else + return new Point(control.Right - point.X, point.Y); + } + + public static Rectangle RtlTransform(Control control, Rectangle rectangle) + { + if (control.RightToLeft != RightToLeft.Yes) + return rectangle; + else + return new Rectangle(control.ClientRectangle.Right - rectangle.Right, rectangle.Y, rectangle.Width, rectangle.Height); + } + + public static GraphicsPath GetRoundedCornerTab(GraphicsPath graphicsPath, Rectangle rect, bool upCorner) + { + if (graphicsPath == null) + graphicsPath = new GraphicsPath(); + else + graphicsPath.Reset(); + + int curveSize = 6; + if (upCorner) + { + graphicsPath.AddLine(rect.Left, rect.Bottom, rect.Left, rect.Top + curveSize / 2); + graphicsPath.AddArc(new Rectangle(rect.Left, rect.Top, curveSize, curveSize), 180, 90); + graphicsPath.AddLine(rect.Left + curveSize / 2, rect.Top, rect.Right - curveSize / 2, rect.Top); + graphicsPath.AddArc(new Rectangle(rect.Right - curveSize, rect.Top, curveSize, curveSize), -90, 90); + graphicsPath.AddLine(rect.Right, rect.Top + curveSize / 2, rect.Right, rect.Bottom); + } + else + { + graphicsPath.AddLine(rect.Right, rect.Top, rect.Right, rect.Bottom - curveSize / 2); + graphicsPath.AddArc(new Rectangle(rect.Right - curveSize, rect.Bottom - curveSize, curveSize, curveSize), 0, 90); + graphicsPath.AddLine(rect.Right - curveSize / 2, rect.Bottom, rect.Left + curveSize / 2, rect.Bottom); + graphicsPath.AddArc(new Rectangle(rect.Left, rect.Bottom - curveSize, curveSize, curveSize), 90, 90); + graphicsPath.AddLine(rect.Left, rect.Bottom - curveSize / 2, rect.Left, rect.Top); + } + + return graphicsPath; + } + + public static GraphicsPath CalculateGraphicsPathFromBitmap(Bitmap bitmap) + { + return CalculateGraphicsPathFromBitmap(bitmap, Color.Empty); + } + + // From http://edu.cnzz.cn/show_3281.html + public static GraphicsPath CalculateGraphicsPathFromBitmap(Bitmap bitmap, Color colorTransparent) + { + GraphicsPath graphicsPath = new GraphicsPath(); + if (colorTransparent == Color.Empty) + colorTransparent = bitmap.GetPixel(0, 0); + + for(int row = 0; row < bitmap.Height; row ++) + { + int colOpaquePixel = 0; + for(int col = 0; col < bitmap.Width; col ++) + { + if(bitmap.GetPixel(col, row) != colorTransparent) + { + colOpaquePixel = col; + int colNext = col; + for(colNext = colOpaquePixel; colNext < bitmap.Width; colNext ++) + if(bitmap.GetPixel(colNext, row) == colorTransparent) + break; + + graphicsPath.AddRectangle(new Rectangle(colOpaquePixel, row, colNext - colOpaquePixel, 1)); + col = colNext; + } + } + } + return graphicsPath; + } + } +} diff --git a/trunk/Docking/Helpers/ResourceHelper.cs b/source/Docking/Helpers/ResourceHelper.cs similarity index 95% rename from trunk/Docking/Helpers/ResourceHelper.cs rename to source/Docking/Helpers/ResourceHelper.cs index 24e8fef..ec9ce4d 100644 --- a/trunk/Docking/Helpers/ResourceHelper.cs +++ b/source/Docking/Helpers/ResourceHelper.cs @@ -1,29 +1,29 @@ -using System; -using System.Drawing; -using System.Reflection; -using System.Resources; -using System.Windows.Forms; - -namespace LSLEditor.Docking -{ - internal static class ResourceHelper - { - private static ResourceManager _resourceManager = null; - - private static ResourceManager ResourceManager - { - get - { - if (_resourceManager == null) - _resourceManager = new ResourceManager("LSLEditor.Docking.Strings", typeof(ResourceHelper).Assembly); - return _resourceManager; - } - - } - - public static string GetString(string name) - { - return ResourceManager.GetString(name); - } - } -} +using System; +using System.Drawing; +using System.Reflection; +using System.Resources; +using System.Windows.Forms; + +namespace LSLEditor.Docking +{ + internal static class ResourceHelper + { + private static ResourceManager _resourceManager = null; + + private static ResourceManager ResourceManager + { + get + { + if (_resourceManager == null) + _resourceManager = new ResourceManager("LSLEditor.Docking.Strings", typeof(ResourceHelper).Assembly); + return _resourceManager; + } + + } + + public static string GetString(string name) + { + return ResourceManager.GetString(name); + } + } +} diff --git a/trunk/Docking/Helpers/Win32Helper.cs b/source/Docking/Helpers/Win32Helper.cs similarity index 95% rename from trunk/Docking/Helpers/Win32Helper.cs rename to source/Docking/Helpers/Win32Helper.cs index 5d26655..3263f21 100644 --- a/trunk/Docking/Helpers/Win32Helper.cs +++ b/source/Docking/Helpers/Win32Helper.cs @@ -1,19 +1,19 @@ -using System; -using System.Drawing; -using System.Windows.Forms; - -namespace LSLEditor.Docking -{ - internal static class Win32Helper - { - public static Control ControlAtPoint(Point pt) - { - return Control.FromChildHandle(NativeMethods.WindowFromPoint(pt)); - } - - public static uint MakeLong(int low, int high) - { - return (uint)((high << 16) + low); - } - } -} +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace LSLEditor.Docking +{ + internal static class Win32Helper + { + public static Control ControlAtPoint(Point pt) + { + return Control.FromChildHandle(NativeMethods.WindowFromPoint(pt)); + } + + public static uint MakeLong(int low, int high) + { + return (uint)((high << 16) + low); + } + } +} diff --git a/trunk/Docking/InertButtonBase.cs b/source/Docking/InertButtonBase.cs similarity index 96% rename from trunk/Docking/InertButtonBase.cs rename to source/Docking/InertButtonBase.cs index c0859b7..fd43b84 100644 --- a/trunk/Docking/InertButtonBase.cs +++ b/source/Docking/InertButtonBase.cs @@ -1,115 +1,115 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Windows.Forms; -using System.Drawing; -using System.Drawing.Imaging; - -namespace LSLEditor.Docking -{ - internal abstract class InertButtonBase : Control - { - protected InertButtonBase() - { - SetStyle(ControlStyles.SupportsTransparentBackColor, true); - BackColor = Color.Transparent; - } - - public abstract Bitmap Image - { - get; - } - - private bool m_isMouseOver = false; - protected bool IsMouseOver - { - get { return m_isMouseOver; } - private set - { - if (m_isMouseOver == value) - return; - - m_isMouseOver = value; - Invalidate(); - } - } - - protected override Size DefaultSize - { - get { return Resources.DockPane_Close.Size; } - } - - protected override void OnMouseMove(MouseEventArgs e) - { - base.OnMouseMove(e); - bool over = ClientRectangle.Contains(e.X, e.Y); - if (IsMouseOver != over) - IsMouseOver = over; - } - - protected override void OnMouseEnter(EventArgs e) - { - base.OnMouseEnter(e); - if (!IsMouseOver) - IsMouseOver = true; - } - - protected override void OnMouseLeave(EventArgs e) - { - base.OnMouseLeave(e); - if (IsMouseOver) - IsMouseOver = false; - } - - protected override void OnPaint(PaintEventArgs e) - { - if (IsMouseOver && Enabled) - { - using (Pen pen = new Pen(ForeColor)) - { - e.Graphics.DrawRectangle(pen, Rectangle.Inflate(ClientRectangle, -1, -1)); - } - } - - using (ImageAttributes imageAttributes = new ImageAttributes()) - { - ColorMap[] colorMap = new ColorMap[2]; - colorMap[0] = new ColorMap(); - colorMap[0].OldColor = Color.FromArgb(0, 0, 0); - colorMap[0].NewColor = ForeColor; - colorMap[1] = new ColorMap(); - colorMap[1].OldColor = Image.GetPixel(0, 0); - colorMap[1].NewColor = Color.Transparent; - - imageAttributes.SetRemapTable(colorMap); - - e.Graphics.DrawImage( - Image, - new Rectangle(0, 0, Image.Width, Image.Height), - 0, 0, - Image.Width, - Image.Height, - GraphicsUnit.Pixel, - imageAttributes); - } - - base.OnPaint(e); - } - - public void RefreshChanges() - { - if (IsDisposed) - return; - - bool mouseOver = ClientRectangle.Contains(PointToClient(Control.MousePosition)); - if (mouseOver != IsMouseOver) - IsMouseOver = mouseOver; - - OnRefreshChanges(); - } - - protected virtual void OnRefreshChanges() - { - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.Drawing; +using System.Drawing.Imaging; + +namespace LSLEditor.Docking +{ + internal abstract class InertButtonBase : Control + { + protected InertButtonBase() + { + SetStyle(ControlStyles.SupportsTransparentBackColor, true); + BackColor = Color.Transparent; + } + + public abstract Bitmap Image + { + get; + } + + private bool m_isMouseOver = false; + protected bool IsMouseOver + { + get { return m_isMouseOver; } + private set + { + if (m_isMouseOver == value) + return; + + m_isMouseOver = value; + Invalidate(); + } + } + + protected override Size DefaultSize + { + get { return Resources.DockPane_Close.Size; } + } + + protected override void OnMouseMove(MouseEventArgs e) + { + base.OnMouseMove(e); + bool over = ClientRectangle.Contains(e.X, e.Y); + if (IsMouseOver != over) + IsMouseOver = over; + } + + protected override void OnMouseEnter(EventArgs e) + { + base.OnMouseEnter(e); + if (!IsMouseOver) + IsMouseOver = true; + } + + protected override void OnMouseLeave(EventArgs e) + { + base.OnMouseLeave(e); + if (IsMouseOver) + IsMouseOver = false; + } + + protected override void OnPaint(PaintEventArgs e) + { + if (IsMouseOver && Enabled) + { + using (Pen pen = new Pen(ForeColor)) + { + e.Graphics.DrawRectangle(pen, Rectangle.Inflate(ClientRectangle, -1, -1)); + } + } + + using (ImageAttributes imageAttributes = new ImageAttributes()) + { + ColorMap[] colorMap = new ColorMap[2]; + colorMap[0] = new ColorMap(); + colorMap[0].OldColor = Color.FromArgb(0, 0, 0); + colorMap[0].NewColor = ForeColor; + colorMap[1] = new ColorMap(); + colorMap[1].OldColor = Image.GetPixel(0, 0); + colorMap[1].NewColor = Color.Transparent; + + imageAttributes.SetRemapTable(colorMap); + + e.Graphics.DrawImage( + Image, + new Rectangle(0, 0, Image.Width, Image.Height), + 0, 0, + Image.Width, + Image.Height, + GraphicsUnit.Pixel, + imageAttributes); + } + + base.OnPaint(e); + } + + public void RefreshChanges() + { + if (IsDisposed) + return; + + bool mouseOver = ClientRectangle.Contains(PointToClient(Control.MousePosition)); + if (mouseOver != IsMouseOver) + IsMouseOver = mouseOver; + + OnRefreshChanges(); + } + + protected virtual void OnRefreshChanges() + { + } + } +} diff --git a/trunk/Docking/Interfaces.cs b/source/Docking/Interfaces.cs similarity index 96% rename from trunk/Docking/Interfaces.cs rename to source/Docking/Interfaces.cs index 96f02a9..d0d9ab6 100644 --- a/trunk/Docking/Interfaces.cs +++ b/source/Docking/Interfaces.cs @@ -1,46 +1,46 @@ -using System; -using System.Drawing; -using System.Windows.Forms; - -namespace LSLEditor.Docking -{ - public interface IDockContent - { - DockContentHandler DockHandler { get; } - void OnActivated(EventArgs e); - void OnDeactivate(EventArgs e); - } - - public interface INestedPanesContainer - { - DockState DockState { get; } - Rectangle DisplayingRectangle { get; } - NestedPaneCollection NestedPanes { get; } - VisibleNestedPaneCollection VisibleNestedPanes { get; } - bool IsFloat { get; } - } - - internal interface IDragSource - { - Control DragControl { get; } - } - - internal interface IDockDragSource : IDragSource - { - Rectangle BeginDrag(Point ptMouse); - bool IsDockStateValid(DockState dockState); - bool CanDockTo(DockPane pane); - void FloatAt(Rectangle floatWindowBounds); - void DockTo(DockPane pane, DockStyle dockStyle, int contentIndex); - void DockTo(DockPanel panel, DockStyle dockStyle); - } - - internal interface ISplitterDragSource : IDragSource - { - void BeginDrag(Rectangle rectSplitter); - void EndDrag(); - bool IsVertical { get; } - Rectangle DragLimitBounds { get; } - void MoveSplitter(int offset); - } -} +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace LSLEditor.Docking +{ + public interface IDockContent + { + DockContentHandler DockHandler { get; } + void OnActivated(EventArgs e); + void OnDeactivate(EventArgs e); + } + + public interface INestedPanesContainer + { + DockState DockState { get; } + Rectangle DisplayingRectangle { get; } + NestedPaneCollection NestedPanes { get; } + VisibleNestedPaneCollection VisibleNestedPanes { get; } + bool IsFloat { get; } + } + + internal interface IDragSource + { + Control DragControl { get; } + } + + internal interface IDockDragSource : IDragSource + { + Rectangle BeginDrag(Point ptMouse); + bool IsDockStateValid(DockState dockState); + bool CanDockTo(DockPane pane); + void FloatAt(Rectangle floatWindowBounds); + void DockTo(DockPane pane, DockStyle dockStyle, int contentIndex); + void DockTo(DockPanel panel, DockStyle dockStyle); + } + + internal interface ISplitterDragSource : IDragSource + { + void BeginDrag(Rectangle rectSplitter); + void EndDrag(); + bool IsVertical { get; } + Rectangle DragLimitBounds { get; } + void MoveSplitter(int offset); + } +} diff --git a/trunk/Docking/Localization.cs b/source/Docking/Localization.cs similarity index 95% rename from trunk/Docking/Localization.cs rename to source/Docking/Localization.cs index 03307dd..d0c89ab 100644 --- a/trunk/Docking/Localization.cs +++ b/source/Docking/Localization.cs @@ -1,46 +1,46 @@ -using System; -using System.ComponentModel; - -namespace LSLEditor.Docking -{ - [AttributeUsage(AttributeTargets.All)] - internal sealed class LocalizedDescriptionAttribute : DescriptionAttribute - { - private bool m_initialized = false; - - public LocalizedDescriptionAttribute(string key) : base(key) - { - } - - public override string Description - { - get - { - if (!m_initialized) - { - string key = base.Description; - DescriptionValue = ResourceHelper.GetString(key); - if (DescriptionValue == null) - DescriptionValue = String.Empty; - - m_initialized = true; - } - - return DescriptionValue; - } - } - } - - [AttributeUsage(AttributeTargets.All)] - internal sealed class LocalizedCategoryAttribute : CategoryAttribute - { - public LocalizedCategoryAttribute(string key) : base(key) - { - } - - protected override string GetLocalizedString(string key) - { - return ResourceHelper.GetString(key); - } - } -} +using System; +using System.ComponentModel; + +namespace LSLEditor.Docking +{ + [AttributeUsage(AttributeTargets.All)] + internal sealed class LocalizedDescriptionAttribute : DescriptionAttribute + { + private bool m_initialized = false; + + public LocalizedDescriptionAttribute(string key) : base(key) + { + } + + public override string Description + { + get + { + if (!m_initialized) + { + string key = base.Description; + DescriptionValue = ResourceHelper.GetString(key); + if (DescriptionValue == null) + DescriptionValue = String.Empty; + + m_initialized = true; + } + + return DescriptionValue; + } + } + } + + [AttributeUsage(AttributeTargets.All)] + internal sealed class LocalizedCategoryAttribute : CategoryAttribute + { + public LocalizedCategoryAttribute(string key) : base(key) + { + } + + protected override string GetLocalizedString(string key) + { + return ResourceHelper.GetString(key); + } + } +} diff --git a/trunk/Docking/Measures.cs b/source/Docking/Measures.cs similarity index 93% rename from trunk/Docking/Measures.cs rename to source/Docking/Measures.cs index cdc4c20..3526bcc 100644 --- a/trunk/Docking/Measures.cs +++ b/source/Docking/Measures.cs @@ -1,14 +1,14 @@ -using System; - -namespace LSLEditor.Docking -{ - internal static class Measures - { - public const int SplitterSize = 4; - } - - internal static class MeasurePane - { - public const int MinSize = 24; - } -} +using System; + +namespace LSLEditor.Docking +{ + internal static class Measures + { + public const int SplitterSize = 4; + } + + internal static class MeasurePane + { + public const int MinSize = 24; + } +} diff --git a/trunk/Docking/NestedDockingStatus.cs b/source/Docking/NestedDockingStatus.cs similarity index 95% rename from trunk/Docking/NestedDockingStatus.cs rename to source/Docking/NestedDockingStatus.cs index aa37220..362196d 100644 --- a/trunk/Docking/NestedDockingStatus.cs +++ b/source/Docking/NestedDockingStatus.cs @@ -1,108 +1,108 @@ -using System; -using System.Drawing; - -namespace LSLEditor.Docking -{ - public sealed class NestedDockingStatus - { - internal NestedDockingStatus(DockPane pane) - { - m_dockPane = pane; - } - - private DockPane m_dockPane = null; - public DockPane DockPane - { - get { return m_dockPane; } - } - - private NestedPaneCollection m_nestedPanes = null; - public NestedPaneCollection NestedPanes - { - get { return m_nestedPanes; } - } - - private DockPane m_previousPane = null; - public DockPane PreviousPane - { - get { return m_previousPane; } - } - - private DockAlignment m_alignment = DockAlignment.Left; - public DockAlignment Alignment - { - get { return m_alignment; } - } - - private double m_proportion = 0.5; - public double Proportion - { - get { return m_proportion; } - } - - private bool m_isDisplaying = false; - public bool IsDisplaying - { - get { return m_isDisplaying; } - } - - private DockPane m_displayingPreviousPane = null; - public DockPane DisplayingPreviousPane - { - get { return m_displayingPreviousPane; } - } - - private DockAlignment m_displayingAlignment = DockAlignment.Left; - public DockAlignment DisplayingAlignment - { - get { return m_displayingAlignment; } - } - - private double m_displayingProportion = 0.5; - public double DisplayingProportion - { - get { return m_displayingProportion; } - } - - private Rectangle m_logicalBounds = Rectangle.Empty; - public Rectangle LogicalBounds - { - get { return m_logicalBounds; } - } - - private Rectangle m_paneBounds = Rectangle.Empty; - public Rectangle PaneBounds - { - get { return m_paneBounds; } - } - - private Rectangle m_splitterBounds = Rectangle.Empty; - public Rectangle SplitterBounds - { - get { return m_splitterBounds; } - } - - internal void SetStatus(NestedPaneCollection nestedPanes, DockPane previousPane, DockAlignment alignment, double proportion) - { - m_nestedPanes = nestedPanes; - m_previousPane = previousPane; - m_alignment = alignment; - m_proportion = proportion; - } - - internal void SetDisplayingStatus(bool isDisplaying, DockPane displayingPreviousPane, DockAlignment displayingAlignment, double displayingProportion) - { - m_isDisplaying = isDisplaying; - m_displayingPreviousPane = displayingPreviousPane; - m_displayingAlignment = displayingAlignment; - m_displayingProportion = displayingProportion; - } - - internal void SetDisplayingBounds(Rectangle logicalBounds, Rectangle paneBounds, Rectangle splitterBounds) - { - m_logicalBounds = logicalBounds; - m_paneBounds = paneBounds; - m_splitterBounds = splitterBounds; - } - } -} +using System; +using System.Drawing; + +namespace LSLEditor.Docking +{ + public sealed class NestedDockingStatus + { + internal NestedDockingStatus(DockPane pane) + { + m_dockPane = pane; + } + + private DockPane m_dockPane = null; + public DockPane DockPane + { + get { return m_dockPane; } + } + + private NestedPaneCollection m_nestedPanes = null; + public NestedPaneCollection NestedPanes + { + get { return m_nestedPanes; } + } + + private DockPane m_previousPane = null; + public DockPane PreviousPane + { + get { return m_previousPane; } + } + + private DockAlignment m_alignment = DockAlignment.Left; + public DockAlignment Alignment + { + get { return m_alignment; } + } + + private double m_proportion = 0.5; + public double Proportion + { + get { return m_proportion; } + } + + private bool m_isDisplaying = false; + public bool IsDisplaying + { + get { return m_isDisplaying; } + } + + private DockPane m_displayingPreviousPane = null; + public DockPane DisplayingPreviousPane + { + get { return m_displayingPreviousPane; } + } + + private DockAlignment m_displayingAlignment = DockAlignment.Left; + public DockAlignment DisplayingAlignment + { + get { return m_displayingAlignment; } + } + + private double m_displayingProportion = 0.5; + public double DisplayingProportion + { + get { return m_displayingProportion; } + } + + private Rectangle m_logicalBounds = Rectangle.Empty; + public Rectangle LogicalBounds + { + get { return m_logicalBounds; } + } + + private Rectangle m_paneBounds = Rectangle.Empty; + public Rectangle PaneBounds + { + get { return m_paneBounds; } + } + + private Rectangle m_splitterBounds = Rectangle.Empty; + public Rectangle SplitterBounds + { + get { return m_splitterBounds; } + } + + internal void SetStatus(NestedPaneCollection nestedPanes, DockPane previousPane, DockAlignment alignment, double proportion) + { + m_nestedPanes = nestedPanes; + m_previousPane = previousPane; + m_alignment = alignment; + m_proportion = proportion; + } + + internal void SetDisplayingStatus(bool isDisplaying, DockPane displayingPreviousPane, DockAlignment displayingAlignment, double displayingProportion) + { + m_isDisplaying = isDisplaying; + m_displayingPreviousPane = displayingPreviousPane; + m_displayingAlignment = displayingAlignment; + m_displayingProportion = displayingProportion; + } + + internal void SetDisplayingBounds(Rectangle logicalBounds, Rectangle paneBounds, Rectangle splitterBounds) + { + m_logicalBounds = logicalBounds; + m_paneBounds = paneBounds; + m_splitterBounds = splitterBounds; + } + } +} diff --git a/trunk/Docking/NestedPaneCollection.cs b/source/Docking/NestedPaneCollection.cs similarity index 96% rename from trunk/Docking/NestedPaneCollection.cs rename to source/Docking/NestedPaneCollection.cs index d1b19ca..ed6144e 100644 --- a/trunk/Docking/NestedPaneCollection.cs +++ b/source/Docking/NestedPaneCollection.cs @@ -1,116 +1,116 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Drawing; - -namespace LSLEditor.Docking -{ - public sealed class NestedPaneCollection : ReadOnlyCollection - { - private INestedPanesContainer m_container; - private VisibleNestedPaneCollection m_visibleNestedPanes; - - internal NestedPaneCollection(INestedPanesContainer container) - : base(new List()) - { - m_container = container; - m_visibleNestedPanes = new VisibleNestedPaneCollection(this); - } - - public INestedPanesContainer Container - { - get { return m_container; } - } - - public VisibleNestedPaneCollection VisibleNestedPanes - { - get { return m_visibleNestedPanes; } - } - - public DockState DockState - { - get { return Container.DockState; } - } - - public bool IsFloat - { - get { return DockState == DockState.Float; } - } - - internal void Add(DockPane pane) - { - if (pane == null) - return; - - NestedPaneCollection oldNestedPanes = (pane.NestedPanesContainer == null) ? null : pane.NestedPanesContainer.NestedPanes; - if (oldNestedPanes != null) - oldNestedPanes.InternalRemove(pane); - Items.Add(pane); - if (oldNestedPanes != null) - oldNestedPanes.CheckFloatWindowDispose(); - } - - private void CheckFloatWindowDispose() - { - if (Count == 0 && Container.DockState == DockState.Float) - { - FloatWindow floatWindow = (FloatWindow)Container; - if (!floatWindow.Disposing && !floatWindow.IsDisposed) - NativeMethods.PostMessage(((FloatWindow)Container).Handle, FloatWindow.WM_CHECKDISPOSE, 0, 0); - } - } - - internal void Remove(DockPane pane) - { - InternalRemove(pane); - CheckFloatWindowDispose(); - } - - private void InternalRemove(DockPane pane) - { - if (!Contains(pane)) - return; - - NestedDockingStatus statusPane = pane.NestedDockingStatus; - DockPane lastNestedPane = null; - for (int i=Count - 1; i> IndexOf(pane); i--) - { - if (this[i].NestedDockingStatus.PreviousPane == pane) - { - lastNestedPane = this[i]; - break; - } - } - - if (lastNestedPane != null) - { - int indexLastNestedPane = IndexOf(lastNestedPane); - Items.Remove(lastNestedPane); - Items[IndexOf(pane)] = lastNestedPane; - NestedDockingStatus lastNestedDock = lastNestedPane.NestedDockingStatus; - lastNestedDock.SetStatus(this, statusPane.PreviousPane, statusPane.Alignment, statusPane.Proportion); - for (int i=indexLastNestedPane - 1; i>IndexOf(lastNestedPane); i--) - { - NestedDockingStatus status = this[i].NestedDockingStatus; - if (status.PreviousPane == pane) - status.SetStatus(this, lastNestedPane, status.Alignment, status.Proportion); - } - } - else - Items.Remove(pane); - - statusPane.SetStatus(null, null, DockAlignment.Left, 0.5); - statusPane.SetDisplayingStatus(false, null, DockAlignment.Left, 0.5); - statusPane.SetDisplayingBounds(Rectangle.Empty, Rectangle.Empty, Rectangle.Empty); - } - - public DockPane GetDefaultPreviousPane(DockPane pane) - { - for (int i=Count-1; i>=0; i--) - if (this[i] != pane) - return this[i]; - - return null; - } - } -} +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Drawing; + +namespace LSLEditor.Docking +{ + public sealed class NestedPaneCollection : ReadOnlyCollection + { + private INestedPanesContainer m_container; + private VisibleNestedPaneCollection m_visibleNestedPanes; + + internal NestedPaneCollection(INestedPanesContainer container) + : base(new List()) + { + m_container = container; + m_visibleNestedPanes = new VisibleNestedPaneCollection(this); + } + + public INestedPanesContainer Container + { + get { return m_container; } + } + + public VisibleNestedPaneCollection VisibleNestedPanes + { + get { return m_visibleNestedPanes; } + } + + public DockState DockState + { + get { return Container.DockState; } + } + + public bool IsFloat + { + get { return DockState == DockState.Float; } + } + + internal void Add(DockPane pane) + { + if (pane == null) + return; + + NestedPaneCollection oldNestedPanes = (pane.NestedPanesContainer == null) ? null : pane.NestedPanesContainer.NestedPanes; + if (oldNestedPanes != null) + oldNestedPanes.InternalRemove(pane); + Items.Add(pane); + if (oldNestedPanes != null) + oldNestedPanes.CheckFloatWindowDispose(); + } + + private void CheckFloatWindowDispose() + { + if (Count == 0 && Container.DockState == DockState.Float) + { + FloatWindow floatWindow = (FloatWindow)Container; + if (!floatWindow.Disposing && !floatWindow.IsDisposed) + NativeMethods.PostMessage(((FloatWindow)Container).Handle, FloatWindow.WM_CHECKDISPOSE, 0, 0); + } + } + + internal void Remove(DockPane pane) + { + InternalRemove(pane); + CheckFloatWindowDispose(); + } + + private void InternalRemove(DockPane pane) + { + if (!Contains(pane)) + return; + + NestedDockingStatus statusPane = pane.NestedDockingStatus; + DockPane lastNestedPane = null; + for (int i=Count - 1; i> IndexOf(pane); i--) + { + if (this[i].NestedDockingStatus.PreviousPane == pane) + { + lastNestedPane = this[i]; + break; + } + } + + if (lastNestedPane != null) + { + int indexLastNestedPane = IndexOf(lastNestedPane); + Items.Remove(lastNestedPane); + Items[IndexOf(pane)] = lastNestedPane; + NestedDockingStatus lastNestedDock = lastNestedPane.NestedDockingStatus; + lastNestedDock.SetStatus(this, statusPane.PreviousPane, statusPane.Alignment, statusPane.Proportion); + for (int i=indexLastNestedPane - 1; i>IndexOf(lastNestedPane); i--) + { + NestedDockingStatus status = this[i].NestedDockingStatus; + if (status.PreviousPane == pane) + status.SetStatus(this, lastNestedPane, status.Alignment, status.Proportion); + } + } + else + Items.Remove(pane); + + statusPane.SetStatus(null, null, DockAlignment.Left, 0.5); + statusPane.SetDisplayingStatus(false, null, DockAlignment.Left, 0.5); + statusPane.SetDisplayingBounds(Rectangle.Empty, Rectangle.Empty, Rectangle.Empty); + } + + public DockPane GetDefaultPreviousPane(DockPane pane) + { + for (int i=Count-1; i>=0; i--) + if (this[i] != pane) + return this[i]; + + return null; + } + } +} diff --git a/trunk/Docking/Resources.Designer.cs b/source/Docking/Resources.Designer.cs similarity index 97% rename from trunk/Docking/Resources.Designer.cs rename to source/Docking/Resources.Designer.cs index 90cc35c..18801de 100644 --- a/trunk/Docking/Resources.Designer.cs +++ b/source/Docking/Resources.Designer.cs @@ -1,225 +1,225 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:2.0.50727.3603 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace LSLEditor.Docking -{ - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LSLEditor.Docking.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - internal static System.Drawing.Bitmap DockIndicator_PaneDiamond { - get { - object obj = ResourceManager.GetObject("DockIndicator_PaneDiamond", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockIndicator_PaneDiamond_Bottom { - get { - object obj = ResourceManager.GetObject("DockIndicator_PaneDiamond_Bottom", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockIndicator_PaneDiamond_Fill { - get { - object obj = ResourceManager.GetObject("DockIndicator_PaneDiamond_Fill", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockIndicator_PaneDiamond_HotSpot { - get { - object obj = ResourceManager.GetObject("DockIndicator_PaneDiamond_HotSpot", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockIndicator_PaneDiamond_HotSpotIndex { - get { - object obj = ResourceManager.GetObject("DockIndicator_PaneDiamond_HotSpotIndex", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockIndicator_PaneDiamond_Left { - get { - object obj = ResourceManager.GetObject("DockIndicator_PaneDiamond_Left", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockIndicator_PaneDiamond_Right { - get { - object obj = ResourceManager.GetObject("DockIndicator_PaneDiamond_Right", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockIndicator_PaneDiamond_Top { - get { - object obj = ResourceManager.GetObject("DockIndicator_PaneDiamond_Top", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockIndicator_PanelBottom { - get { - object obj = ResourceManager.GetObject("DockIndicator_PanelBottom", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockIndicator_PanelBottom_Active { - get { - object obj = ResourceManager.GetObject("DockIndicator_PanelBottom_Active", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockIndicator_PanelFill { - get { - object obj = ResourceManager.GetObject("DockIndicator_PanelFill", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockIndicator_PanelFill_Active { - get { - object obj = ResourceManager.GetObject("DockIndicator_PanelFill_Active", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockIndicator_PanelLeft { - get { - object obj = ResourceManager.GetObject("DockIndicator_PanelLeft", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockIndicator_PanelLeft_Active { - get { - object obj = ResourceManager.GetObject("DockIndicator_PanelLeft_Active", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockIndicator_PanelRight { - get { - object obj = ResourceManager.GetObject("DockIndicator_PanelRight", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockIndicator_PanelRight_Active { - get { - object obj = ResourceManager.GetObject("DockIndicator_PanelRight_Active", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockIndicator_PanelTop { - get { - object obj = ResourceManager.GetObject("DockIndicator_PanelTop", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockIndicator_PanelTop_Active { - get { - object obj = ResourceManager.GetObject("DockIndicator_PanelTop_Active", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockPane_AutoHide { - get { - object obj = ResourceManager.GetObject("DockPane_AutoHide", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockPane_Close { - get { - object obj = ResourceManager.GetObject("DockPane_Close", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockPane_Dock { - get { - object obj = ResourceManager.GetObject("DockPane_Dock", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockPane_Option { - get { - object obj = ResourceManager.GetObject("DockPane_Option", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap DockPane_OptionOverflow { - get { - object obj = ResourceManager.GetObject("DockPane_OptionOverflow", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3603 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace LSLEditor.Docking +{ + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LSLEditor.Docking.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.Drawing.Bitmap DockIndicator_PaneDiamond { + get { + object obj = ResourceManager.GetObject("DockIndicator_PaneDiamond", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockIndicator_PaneDiamond_Bottom { + get { + object obj = ResourceManager.GetObject("DockIndicator_PaneDiamond_Bottom", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockIndicator_PaneDiamond_Fill { + get { + object obj = ResourceManager.GetObject("DockIndicator_PaneDiamond_Fill", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockIndicator_PaneDiamond_HotSpot { + get { + object obj = ResourceManager.GetObject("DockIndicator_PaneDiamond_HotSpot", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockIndicator_PaneDiamond_HotSpotIndex { + get { + object obj = ResourceManager.GetObject("DockIndicator_PaneDiamond_HotSpotIndex", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockIndicator_PaneDiamond_Left { + get { + object obj = ResourceManager.GetObject("DockIndicator_PaneDiamond_Left", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockIndicator_PaneDiamond_Right { + get { + object obj = ResourceManager.GetObject("DockIndicator_PaneDiamond_Right", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockIndicator_PaneDiamond_Top { + get { + object obj = ResourceManager.GetObject("DockIndicator_PaneDiamond_Top", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockIndicator_PanelBottom { + get { + object obj = ResourceManager.GetObject("DockIndicator_PanelBottom", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockIndicator_PanelBottom_Active { + get { + object obj = ResourceManager.GetObject("DockIndicator_PanelBottom_Active", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockIndicator_PanelFill { + get { + object obj = ResourceManager.GetObject("DockIndicator_PanelFill", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockIndicator_PanelFill_Active { + get { + object obj = ResourceManager.GetObject("DockIndicator_PanelFill_Active", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockIndicator_PanelLeft { + get { + object obj = ResourceManager.GetObject("DockIndicator_PanelLeft", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockIndicator_PanelLeft_Active { + get { + object obj = ResourceManager.GetObject("DockIndicator_PanelLeft_Active", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockIndicator_PanelRight { + get { + object obj = ResourceManager.GetObject("DockIndicator_PanelRight", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockIndicator_PanelRight_Active { + get { + object obj = ResourceManager.GetObject("DockIndicator_PanelRight_Active", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockIndicator_PanelTop { + get { + object obj = ResourceManager.GetObject("DockIndicator_PanelTop", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockIndicator_PanelTop_Active { + get { + object obj = ResourceManager.GetObject("DockIndicator_PanelTop_Active", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockPane_AutoHide { + get { + object obj = ResourceManager.GetObject("DockPane_AutoHide", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockPane_Close { + get { + object obj = ResourceManager.GetObject("DockPane_Close", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockPane_Dock { + get { + object obj = ResourceManager.GetObject("DockPane_Dock", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockPane_Option { + get { + object obj = ResourceManager.GetObject("DockPane_Option", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap DockPane_OptionOverflow { + get { + object obj = ResourceManager.GetObject("DockPane_OptionOverflow", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/trunk/Docking/Resources.resx b/source/Docking/Resources.resx similarity index 98% rename from trunk/Docking/Resources.resx rename to source/Docking/Resources.resx index bd5a077..0f8b146 100644 --- a/trunk/Docking/Resources.resx +++ b/source/Docking/Resources.resx @@ -1,190 +1,190 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - Resources\DockIndicator_PaneDiamond.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockIndicator_PaneDiamond_Bottom.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockIndicator_PaneDiamond_Fill.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockIndicator_PaneDiamond_HotSpot.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockIndicator_PaneDiamond_HotSpotIndex.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockIndicator_PaneDiamond_Left.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockIndicator_PaneDiamond_Right.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockIndicator_PaneDiamond_Top.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockIndicator_PanelBottom.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockIndicator_PanelBottom_Active.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockIndicator_PanelFill.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockIndicator_PanelFill_Active.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockIndicator_PanelLeft.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockIndicator_PanelLeft_Active.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockIndicator_PanelRight.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockIndicator_PanelRight_Active.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockIndicator_PanelTop.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockIndicator_PanelTop_Active.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockPane_AutoHide.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockPane_Close.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockPane_Dock.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockPane_Option.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\DockPane_OptionOverflow.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Resources\DockIndicator_PaneDiamond.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockIndicator_PaneDiamond_Bottom.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockIndicator_PaneDiamond_Fill.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockIndicator_PaneDiamond_HotSpot.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockIndicator_PaneDiamond_HotSpotIndex.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockIndicator_PaneDiamond_Left.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockIndicator_PaneDiamond_Right.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockIndicator_PaneDiamond_Top.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockIndicator_PanelBottom.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockIndicator_PanelBottom_Active.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockIndicator_PanelFill.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockIndicator_PanelFill_Active.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockIndicator_PanelLeft.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockIndicator_PanelLeft_Active.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockIndicator_PanelRight.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockIndicator_PanelRight_Active.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockIndicator_PanelTop.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockIndicator_PanelTop_Active.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockPane_AutoHide.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockPane_Close.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockPane_Dock.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockPane_Option.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\DockPane_OptionOverflow.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/trunk/Docking/Resources/DockIndicator_PaneDiamond.bmp b/source/Docking/Resources/DockIndicator_PaneDiamond.bmp similarity index 100% rename from trunk/Docking/Resources/DockIndicator_PaneDiamond.bmp rename to source/Docking/Resources/DockIndicator_PaneDiamond.bmp diff --git a/trunk/Docking/Resources/DockIndicator_PaneDiamond_Bottom.bmp b/source/Docking/Resources/DockIndicator_PaneDiamond_Bottom.bmp similarity index 100% rename from trunk/Docking/Resources/DockIndicator_PaneDiamond_Bottom.bmp rename to source/Docking/Resources/DockIndicator_PaneDiamond_Bottom.bmp diff --git a/trunk/Docking/Resources/DockIndicator_PaneDiamond_Hotspot.bmp b/source/Docking/Resources/DockIndicator_PaneDiamond_Hotspot.bmp similarity index 100% rename from trunk/Docking/Resources/DockIndicator_PaneDiamond_Hotspot.bmp rename to source/Docking/Resources/DockIndicator_PaneDiamond_Hotspot.bmp diff --git a/trunk/Docking/Resources/DockIndicator_PaneDiamond_HotspotIndex.bmp b/source/Docking/Resources/DockIndicator_PaneDiamond_HotspotIndex.bmp similarity index 100% rename from trunk/Docking/Resources/DockIndicator_PaneDiamond_HotspotIndex.bmp rename to source/Docking/Resources/DockIndicator_PaneDiamond_HotspotIndex.bmp diff --git a/trunk/Docking/Resources/DockIndicator_PaneDiamond_Left.bmp b/source/Docking/Resources/DockIndicator_PaneDiamond_Left.bmp similarity index 100% rename from trunk/Docking/Resources/DockIndicator_PaneDiamond_Left.bmp rename to source/Docking/Resources/DockIndicator_PaneDiamond_Left.bmp diff --git a/trunk/Docking/Resources/DockIndicator_PaneDiamond_Right.bmp b/source/Docking/Resources/DockIndicator_PaneDiamond_Right.bmp similarity index 100% rename from trunk/Docking/Resources/DockIndicator_PaneDiamond_Right.bmp rename to source/Docking/Resources/DockIndicator_PaneDiamond_Right.bmp diff --git a/trunk/Docking/Resources/DockIndicator_PaneDiamond_Top.bmp b/source/Docking/Resources/DockIndicator_PaneDiamond_Top.bmp similarity index 100% rename from trunk/Docking/Resources/DockIndicator_PaneDiamond_Top.bmp rename to source/Docking/Resources/DockIndicator_PaneDiamond_Top.bmp diff --git a/trunk/Docking/Resources/DockIndicator_PanelBottom.bmp b/source/Docking/Resources/DockIndicator_PanelBottom.bmp similarity index 100% rename from trunk/Docking/Resources/DockIndicator_PanelBottom.bmp rename to source/Docking/Resources/DockIndicator_PanelBottom.bmp diff --git a/trunk/Docking/Resources/DockIndicator_PanelBottom_Active.bmp b/source/Docking/Resources/DockIndicator_PanelBottom_Active.bmp similarity index 100% rename from trunk/Docking/Resources/DockIndicator_PanelBottom_Active.bmp rename to source/Docking/Resources/DockIndicator_PanelBottom_Active.bmp diff --git a/trunk/Docking/Resources/DockIndicator_PanelFill.bmp b/source/Docking/Resources/DockIndicator_PanelFill.bmp similarity index 100% rename from trunk/Docking/Resources/DockIndicator_PanelFill.bmp rename to source/Docking/Resources/DockIndicator_PanelFill.bmp diff --git a/trunk/Docking/Resources/DockIndicator_PanelFill_Active.bmp b/source/Docking/Resources/DockIndicator_PanelFill_Active.bmp similarity index 100% rename from trunk/Docking/Resources/DockIndicator_PanelFill_Active.bmp rename to source/Docking/Resources/DockIndicator_PanelFill_Active.bmp diff --git a/trunk/Docking/Resources/DockIndicator_PanelLeft.bmp b/source/Docking/Resources/DockIndicator_PanelLeft.bmp similarity index 100% rename from trunk/Docking/Resources/DockIndicator_PanelLeft.bmp rename to source/Docking/Resources/DockIndicator_PanelLeft.bmp diff --git a/trunk/Docking/Resources/DockIndicator_PanelLeft_Active.bmp b/source/Docking/Resources/DockIndicator_PanelLeft_Active.bmp similarity index 100% rename from trunk/Docking/Resources/DockIndicator_PanelLeft_Active.bmp rename to source/Docking/Resources/DockIndicator_PanelLeft_Active.bmp diff --git a/trunk/Docking/Resources/DockIndicator_PanelRight.bmp b/source/Docking/Resources/DockIndicator_PanelRight.bmp similarity index 100% rename from trunk/Docking/Resources/DockIndicator_PanelRight.bmp rename to source/Docking/Resources/DockIndicator_PanelRight.bmp diff --git a/trunk/Docking/Resources/DockIndicator_PanelRight_Active.bmp b/source/Docking/Resources/DockIndicator_PanelRight_Active.bmp similarity index 100% rename from trunk/Docking/Resources/DockIndicator_PanelRight_Active.bmp rename to source/Docking/Resources/DockIndicator_PanelRight_Active.bmp diff --git a/trunk/Docking/Resources/DockIndicator_PanelTop.bmp b/source/Docking/Resources/DockIndicator_PanelTop.bmp similarity index 100% rename from trunk/Docking/Resources/DockIndicator_PanelTop.bmp rename to source/Docking/Resources/DockIndicator_PanelTop.bmp diff --git a/trunk/Docking/Resources/DockIndicator_PanelTop_Active.bmp b/source/Docking/Resources/DockIndicator_PanelTop_Active.bmp similarity index 100% rename from trunk/Docking/Resources/DockIndicator_PanelTop_Active.bmp rename to source/Docking/Resources/DockIndicator_PanelTop_Active.bmp diff --git a/trunk/Docking/Resources/DockPane_AutoHide.bmp b/source/Docking/Resources/DockPane_AutoHide.bmp similarity index 100% rename from trunk/Docking/Resources/DockPane_AutoHide.bmp rename to source/Docking/Resources/DockPane_AutoHide.bmp diff --git a/trunk/Docking/Resources/DockPane_Close.bmp b/source/Docking/Resources/DockPane_Close.bmp similarity index 100% rename from trunk/Docking/Resources/DockPane_Close.bmp rename to source/Docking/Resources/DockPane_Close.bmp diff --git a/trunk/Docking/Resources/DockPane_Dock.bmp b/source/Docking/Resources/DockPane_Dock.bmp similarity index 100% rename from trunk/Docking/Resources/DockPane_Dock.bmp rename to source/Docking/Resources/DockPane_Dock.bmp diff --git a/trunk/Docking/Resources/DockPane_Option.bmp b/source/Docking/Resources/DockPane_Option.bmp similarity index 100% rename from trunk/Docking/Resources/DockPane_Option.bmp rename to source/Docking/Resources/DockPane_Option.bmp diff --git a/trunk/Docking/Resources/DockPane_OptionOverflow.bmp b/source/Docking/Resources/DockPane_OptionOverflow.bmp similarity index 100% rename from trunk/Docking/Resources/DockPane_OptionOverflow.bmp rename to source/Docking/Resources/DockPane_OptionOverflow.bmp diff --git a/trunk/Docking/Resources/Dockindicator_PaneDiamond_Fill.bmp b/source/Docking/Resources/Dockindicator_PaneDiamond_Fill.bmp similarity index 100% rename from trunk/Docking/Resources/Dockindicator_PaneDiamond_Fill.bmp rename to source/Docking/Resources/Dockindicator_PaneDiamond_Fill.bmp diff --git a/trunk/Docking/SplitterBase.cs b/source/Docking/SplitterBase.cs similarity index 95% rename from trunk/Docking/SplitterBase.cs rename to source/Docking/SplitterBase.cs index e6416fe..5ab85c7 100644 --- a/trunk/Docking/SplitterBase.cs +++ b/source/Docking/SplitterBase.cs @@ -1,70 +1,70 @@ -using System; -using System.Collections; -using System.ComponentModel; -using System.Drawing; -using System.Windows.Forms; - -namespace LSLEditor.Docking -{ - internal class SplitterBase : Control - { - public SplitterBase() - { - SetStyle(ControlStyles.Selectable, false); - } - - public override DockStyle Dock - { - get { return base.Dock; } - set - { - SuspendLayout(); - base.Dock = value; - - if (Dock == DockStyle.Left || Dock == DockStyle.Right) - Width = SplitterSize; - else if (Dock == DockStyle.Top || Dock == DockStyle.Bottom) - Height = SplitterSize; - else - Bounds = Rectangle.Empty; - - if (Dock == DockStyle.Left || Dock == DockStyle.Right) - Cursor = Cursors.VSplit; - else if (Dock == DockStyle.Top || Dock == DockStyle.Bottom) - Cursor = Cursors.HSplit; - else - Cursor = Cursors.Default; - - ResumeLayout(); - } - } - - protected virtual int SplitterSize - { - get { return 0; } - } - - protected override void OnMouseDown(MouseEventArgs e) - { - base.OnMouseDown(e); - - if (e.Button != MouseButtons.Left) - return; - - StartDrag(); - } - - protected virtual void StartDrag() - { - } - - protected override void WndProc(ref Message m) - { - // eat the WM_MOUSEACTIVATE message - if (m.Msg == (int)Win32.Msgs.WM_MOUSEACTIVATE) - return; - - base.WndProc(ref m); - } - } -} +using System; +using System.Collections; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace LSLEditor.Docking +{ + internal class SplitterBase : Control + { + public SplitterBase() + { + SetStyle(ControlStyles.Selectable, false); + } + + public override DockStyle Dock + { + get { return base.Dock; } + set + { + SuspendLayout(); + base.Dock = value; + + if (Dock == DockStyle.Left || Dock == DockStyle.Right) + Width = SplitterSize; + else if (Dock == DockStyle.Top || Dock == DockStyle.Bottom) + Height = SplitterSize; + else + Bounds = Rectangle.Empty; + + if (Dock == DockStyle.Left || Dock == DockStyle.Right) + Cursor = Cursors.VSplit; + else if (Dock == DockStyle.Top || Dock == DockStyle.Bottom) + Cursor = Cursors.HSplit; + else + Cursor = Cursors.Default; + + ResumeLayout(); + } + } + + protected virtual int SplitterSize + { + get { return 0; } + } + + protected override void OnMouseDown(MouseEventArgs e) + { + base.OnMouseDown(e); + + if (e.Button != MouseButtons.Left) + return; + + StartDrag(); + } + + protected virtual void StartDrag() + { + } + + protected override void WndProc(ref Message m) + { + // eat the WM_MOUSEACTIVATE message + if (m.Msg == (int)Win32.Msgs.WM_MOUSEACTIVATE) + return; + + base.WndProc(ref m); + } + } +} diff --git a/trunk/Docking/Strings.Designer.cs b/source/Docking/Strings.Designer.cs similarity index 97% rename from trunk/Docking/Strings.Designer.cs rename to source/Docking/Strings.Designer.cs index d21de31..05e9cf6 100644 --- a/trunk/Docking/Strings.Designer.cs +++ b/source/Docking/Strings.Designer.cs @@ -1,774 +1,774 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:2.0.50727.3603 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace LSLEditor.Docking { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Strings { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Strings() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LSLEditor.Docking.Strings", typeof(Strings).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Docking. - /// - internal static string Category_Docking { - get { - return ResourceManager.GetString("Category_Docking", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Docking Notification. - /// - internal static string Category_DockingNotification { - get { - return ResourceManager.GetString("Category_DockingNotification", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Property Changed. - /// - internal static string Category_PropertyChanged { - get { - return ResourceManager.GetString("Category_PropertyChanged", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to (Float). - /// - internal static string DockAreaEditor_FloatCheckBoxText { - get { - return ResourceManager.GetString("DockAreaEditor_FloatCheckBoxText", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Determines if end user drag and drop docking is allowed.. - /// - internal static string DockContent_AllowEndUserDocking_Description { - get { - return ResourceManager.GetString("DockContent_AllowEndUserDocking_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The size to display the content in auto hide mode. Value < 1 to specify the size in portion; value >= 1 to specify the size in pixel.. - /// - internal static string DockContent_AutoHidePortion_Description { - get { - return ResourceManager.GetString("DockContent_AutoHidePortion_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Enable/Disable the close button of the content.. - /// - internal static string DockContent_CloseButton_Description { - get { - return ResourceManager.GetString("DockContent_CloseButton_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Shows or hides the close button of the content. This property does not function with System MDI Document Style.. - /// - internal static string DockContent_CloseButtonVisible_Description { - get { - return ResourceManager.GetString("DockContent_CloseButtonVisible_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The form must be of type IDockContent.. - /// - internal static string DockContent_Constructor_InvalidForm { - get { - return ResourceManager.GetString("DockContent_Constructor_InvalidForm", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Gets or sets a value indicating in which area of the DockPanel the content allowed to show.. - /// - internal static string DockContent_DockAreas_Description { - get { - return ResourceManager.GetString("DockContent_DockAreas_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Occurs when the value of DockState property changed.. - /// - internal static string DockContent_DockStateChanged_Description { - get { - return ResourceManager.GetString("DockContent_DockStateChanged_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Indicates the content will be hidden instead of being closed.. - /// - internal static string DockContent_HideOnClose_Description { - get { - return ResourceManager.GetString("DockContent_HideOnClose_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The desired docking state when first showing.. - /// - internal static string DockContent_ShowHint_Description { - get { - return ResourceManager.GetString("DockContent_ShowHint_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Context menu displayed for the dock pane tab strip.. - /// - internal static string DockContent_TabPageContextMenu_Description { - get { - return ResourceManager.GetString("DockContent_TabPageContextMenu_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The tab text displayed in the dock pane. If not set, the Text property will be used.. - /// - internal static string DockContent_TabText_Description { - get { - return ResourceManager.GetString("DockContent_TabText_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The text displayed when mouse hovers over the tab.. - /// - internal static string DockContent_ToolTipText_Description { - get { - return ResourceManager.GetString("DockContent_ToolTipText_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The provided value is out of range.. - /// - internal static string DockContentHandler_AutoHidePortion_OutOfRange { - get { - return ResourceManager.GetString("DockContentHandler_AutoHidePortion_OutOfRange", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid Value: The value of DockAreas conflicts with current DockState.. - /// - internal static string DockContentHandler_DockAreas_InvalidValue { - get { - return ResourceManager.GetString("DockContentHandler_DockAreas_InvalidValue", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The pane is invalid. Check the IsFloat and DockPanel properties of this dock pane.. - /// - internal static string DockContentHandler_DockPane_InvalidValue { - get { - return ResourceManager.GetString("DockContentHandler_DockPane_InvalidValue", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The pane is invalid. Check the IsFloat and DockPanel properties of this dock pane.. - /// - internal static string DockContentHandler_FloatPane_InvalidValue { - get { - return ResourceManager.GetString("DockContentHandler_FloatPane_InvalidValue", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid value, conflicts with DockableAreas property.. - /// - internal static string DockContentHandler_IsFloat_InvalidValue { - get { - return ResourceManager.GetString("DockContentHandler_IsFloat_InvalidValue", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The dock state is invalid.. - /// - internal static string DockContentHandler_SetDockState_InvalidState { - get { - return ResourceManager.GetString("DockContentHandler_SetDockState_InvalidState", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The dock panel is null.. - /// - internal static string DockContentHandler_SetDockState_NullPanel { - get { - return ResourceManager.GetString("DockContentHandler_SetDockState_NullPanel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid beforeContent, it must be contained by the pane.. - /// - internal static string DockContentHandler_Show_InvalidBeforeContent { - get { - return ResourceManager.GetString("DockContentHandler_Show_InvalidBeforeContent", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid DockState: Content can not be showed as "Unknown" or "Hidden".. - /// - internal static string DockContentHandler_Show_InvalidDockState { - get { - return ResourceManager.GetString("DockContentHandler_Show_InvalidDockState", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The previous pane is invalid. It can not be null, and its docking state must not be auto-hide.. - /// - internal static string DockContentHandler_Show_InvalidPrevPane { - get { - return ResourceManager.GetString("DockContentHandler_Show_InvalidPrevPane", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to DockPanel can not be null.. - /// - internal static string DockContentHandler_Show_NullDockPanel { - get { - return ResourceManager.GetString("DockContentHandler_Show_NullDockPanel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The Pane can not be null.. - /// - internal static string DockContentHandler_Show_NullPane { - get { - return ResourceManager.GetString("DockContentHandler_Show_NullPane", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid value, check DockableAreas property.. - /// - internal static string DockContentHandler_ShowHint_InvalidValue { - get { - return ResourceManager.GetString("DockContentHandler_ShowHint_InvalidValue", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Context menu displayed for the dock pane tab strip.. - /// - internal static string DockHandler_TabPageContextMenuStrip_Description { - get { - return ResourceManager.GetString("DockHandler_TabPageContextMenuStrip_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Press SHIFT for docking to full side.. - /// - internal static string DockIndicator_ToolTipText { - get { - return ResourceManager.GetString("DockIndicator_ToolTipText", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid Content: ActiveContent must be one of the visible contents, or null if there is no visible content.. - /// - internal static string DockPane_ActiveContent_InvalidValue { - get { - return ResourceManager.GetString("DockPane_ActiveContent_InvalidValue", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid argument: Content can not be "null".. - /// - internal static string DockPane_Constructor_NullContent { - get { - return ResourceManager.GetString("DockPane_Constructor_NullContent", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid argument: The content's DockPanel can not be "null".. - /// - internal static string DockPane_Constructor_NullDockPanel { - get { - return ResourceManager.GetString("DockPane_Constructor_NullDockPanel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The specified container conflicts with the IsFloat property.. - /// - internal static string DockPane_DockTo_InvalidContainer { - get { - return ResourceManager.GetString("DockPane_DockTo_InvalidContainer", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The previous pane does not exist in the nested docking pane collection.. - /// - internal static string DockPane_DockTo_NoPrevPane { - get { - return ResourceManager.GetString("DockPane_DockTo_NoPrevPane", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The container can not be null.. - /// - internal static string DockPane_DockTo_NullContainer { - get { - return ResourceManager.GetString("DockPane_DockTo_NullContainer", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The previous pane can not be null when the nested docking pane collection is not empty.. - /// - internal static string DockPane_DockTo_NullPrevPane { - get { - return ResourceManager.GetString("DockPane_DockTo_NullPrevPane", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The previous pane can not be itself.. - /// - internal static string DockPane_DockTo_SelfPrevPane { - get { - return ResourceManager.GetString("DockPane_DockTo_SelfPrevPane", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to FloatWindow property can not be set to "null" when DockState is DockState.Float.. - /// - internal static string DockPane_FloatWindow_InvalidValue { - get { - return ResourceManager.GetString("DockPane_FloatWindow_InvalidValue", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid Content: Content not within the collection.. - /// - internal static string DockPane_SetContentIndex_InvalidContent { - get { - return ResourceManager.GetString("DockPane_SetContentIndex_InvalidContent", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid Index: The index is out of range.. - /// - internal static string DockPane_SetContentIndex_InvalidIndex { - get { - return ResourceManager.GetString("DockPane_SetContentIndex_InvalidIndex", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The state for the dock pane is invalid.. - /// - internal static string DockPane_SetDockState_InvalidState { - get { - return ResourceManager.GetString("DockPane_SetDockState_InvalidState", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Auto Hide. - /// - internal static string DockPaneCaption_ToolTipAutoHide { - get { - return ResourceManager.GetString("DockPaneCaption_ToolTipAutoHide", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Close. - /// - internal static string DockPaneCaption_ToolTipClose { - get { - return ResourceManager.GetString("DockPaneCaption_ToolTipClose", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Options. - /// - internal static string DockPaneCaption_ToolTipOptions { - get { - return ResourceManager.GetString("DockPaneCaption_ToolTipOptions", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid Content: The content must be auto-hide state and associates with this DockPanel.. - /// - internal static string DockPanel_ActiveAutoHideContent_InvalidValue { - get { - return ResourceManager.GetString("DockPanel_ActiveAutoHideContent_InvalidValue", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Occurs when the value of ActiveContentProperty changed.. - /// - internal static string DockPanel_ActiveContentChanged_Description { - get { - return ResourceManager.GetString("DockPanel_ActiveContentChanged_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Occurs when the value of ActiveDocument property changed.. - /// - internal static string DockPanel_ActiveDocumentChanged_Description { - get { - return ResourceManager.GetString("DockPanel_ActiveDocumentChanged_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Occurs when the value of ActivePane property changed.. - /// - internal static string DockPanel_ActivePaneChanged_Description { - get { - return ResourceManager.GetString("DockPanel_ActivePaneChanged_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Determines if the drag and drop docking is allowed.. - /// - internal static string DockPanel_AllowEndUserDocking_Description { - get { - return ResourceManager.GetString("DockPanel_AllowEndUserDocking_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Determines if the drag and drop nested docking is allowed.. - /// - internal static string DockPanel_AllowEndUserNestedDocking_Description { - get { - return ResourceManager.GetString("DockPanel_AllowEndUserNestedDocking_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Occurs when a content added to the DockPanel.. - /// - internal static string DockPanel_ContentAdded_Description { - get { - return ResourceManager.GetString("DockPanel_ContentAdded_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Occurs when a content removed from the DockPanel.. - /// - internal static string DockPanel_ContentRemoved_Description { - get { - return ResourceManager.GetString("DockPanel_ContentRemoved_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The default size of float window.. - /// - internal static string DockPanel_DefaultFloatWindowSize_Description { - get { - return ResourceManager.GetString("DockPanel_DefaultFloatWindowSize_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Provides Visual Studio .Net style docking.. - /// - internal static string DockPanel_Description { - get { - return ResourceManager.GetString("DockPanel_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Size of the bottom docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels.. - /// - internal static string DockPanel_DockBottomPortion_Description { - get { - return ResourceManager.GetString("DockPanel_DockBottomPortion_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Size of the left docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels.. - /// - internal static string DockPanel_DockLeftPortion_Description { - get { - return ResourceManager.GetString("DockPanel_DockLeftPortion_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The visual skin to use when displaying the docked windows.. - /// - internal static string DockPanel_DockPanelSkin { - get { - return ResourceManager.GetString("DockPanel_DockPanelSkin", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Size of the right docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels.. - /// - internal static string DockPanel_DockRightPortion_Description { - get { - return ResourceManager.GetString("DockPanel_DockRightPortion_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Size of the top docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels.. - /// - internal static string DockPanel_DockTopPortion_Description { - get { - return ResourceManager.GetString("DockPanel_DockTopPortion_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The style of the document window.. - /// - internal static string DockPanel_DocumentStyle_Description { - get { - return ResourceManager.GetString("DockPanel_DocumentStyle_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Determines where the tab strip for Document style content is drawn.. - /// - internal static string DockPanel_DocumentTabStripLocation { - get { - return ResourceManager.GetString("DockPanel_DocumentTabStripLocation", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The DockPanel has already been initialized.. - /// - internal static string DockPanel_LoadFromXml_AlreadyInitialized { - get { - return ResourceManager.GetString("DockPanel_LoadFromXml_AlreadyInitialized", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The configuration file's version is invalid.. - /// - internal static string DockPanel_LoadFromXml_InvalidFormatVersion { - get { - return ResourceManager.GetString("DockPanel_LoadFromXml_InvalidFormatVersion", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The XML file format is invalid.. - /// - internal static string DockPanel_LoadFromXml_InvalidXmlFormat { - get { - return ResourceManager.GetString("DockPanel_LoadFromXml_InvalidXmlFormat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid parent form. When using DockingMdi or SystemMdi document style, the DockPanel control must be the child control of the main MDI container form.. - /// - internal static string DockPanel_ParentForm_Invalid { - get { - return ResourceManager.GetString("DockPanel_ParentForm_Invalid", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to DockPanel configuration file. Author: Weifen Luo, all rights reserved.. - /// - internal static string DockPanel_Persistor_XmlFileComment1 { - get { - return ResourceManager.GetString("DockPanel_Persistor_XmlFileComment1", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to !!! AUTOMATICALLY GENERATED FILE. DO NOT MODIFY !!!. - /// - internal static string DockPanel_Persistor_XmlFileComment2 { - get { - return ResourceManager.GetString("DockPanel_Persistor_XmlFileComment2", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Indicates whether the control layout is right-to-left when the RightToLeft property is set to Yes.. - /// - internal static string DockPanel_RightToLeftLayout_Description { - get { - return ResourceManager.GetString("DockPanel_RightToLeftLayout_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid Index: The index is out of range.. - /// - internal static string DockPanel_SetPaneIndex_InvalidIndex { - get { - return ResourceManager.GetString("DockPanel_SetPaneIndex_InvalidIndex", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid Pane: DockPane not within the collection.. - /// - internal static string DockPanel_SetPaneIndex_InvalidPane { - get { - return ResourceManager.GetString("DockPanel_SetPaneIndex_InvalidPane", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Determines if the document icon will be displayed in the tab strip.. - /// - internal static string DockPanel_ShowDocumentIcon_Description { - get { - return ResourceManager.GetString("DockPanel_ShowDocumentIcon_Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Close. - /// - internal static string DockPaneStrip_ToolTipClose { - get { - return ResourceManager.GetString("DockPaneStrip_ToolTipClose", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Window List. - /// - internal static string DockPaneStrip_ToolTipWindowList { - get { - return ResourceManager.GetString("DockPaneStrip_ToolTipWindowList", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid argument: DockPanel can not be "null".. - /// - internal static string FloatWindow_Constructor_NullDockPanel { - get { - return ResourceManager.GetString("FloatWindow_Constructor_NullDockPanel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid Index: The index is out of range.. - /// - internal static string FloatWindow_SetPaneIndex_InvalidIndex { - get { - return ResourceManager.GetString("FloatWindow_SetPaneIndex_InvalidIndex", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid Pane: DockPane not within the collection.. - /// - internal static string FloatWindow_SetPaneIndex_InvalidPane { - get { - return ResourceManager.GetString("FloatWindow_SetPaneIndex_InvalidPane", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid DockPanel.. - /// - internal static string IDockDragSource_DockTo_InvalidPanel { - get { - return ResourceManager.GetString("IDockDragSource_DockTo_InvalidPanel", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3603 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace LSLEditor.Docking { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Strings { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Strings() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LSLEditor.Docking.Strings", typeof(Strings).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Docking. + /// + internal static string Category_Docking { + get { + return ResourceManager.GetString("Category_Docking", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Docking Notification. + /// + internal static string Category_DockingNotification { + get { + return ResourceManager.GetString("Category_DockingNotification", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Property Changed. + /// + internal static string Category_PropertyChanged { + get { + return ResourceManager.GetString("Category_PropertyChanged", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to (Float). + /// + internal static string DockAreaEditor_FloatCheckBoxText { + get { + return ResourceManager.GetString("DockAreaEditor_FloatCheckBoxText", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Determines if end user drag and drop docking is allowed.. + /// + internal static string DockContent_AllowEndUserDocking_Description { + get { + return ResourceManager.GetString("DockContent_AllowEndUserDocking_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The size to display the content in auto hide mode. Value < 1 to specify the size in portion; value >= 1 to specify the size in pixel.. + /// + internal static string DockContent_AutoHidePortion_Description { + get { + return ResourceManager.GetString("DockContent_AutoHidePortion_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Enable/Disable the close button of the content.. + /// + internal static string DockContent_CloseButton_Description { + get { + return ResourceManager.GetString("DockContent_CloseButton_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Shows or hides the close button of the content. This property does not function with System MDI Document Style.. + /// + internal static string DockContent_CloseButtonVisible_Description { + get { + return ResourceManager.GetString("DockContent_CloseButtonVisible_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The form must be of type IDockContent.. + /// + internal static string DockContent_Constructor_InvalidForm { + get { + return ResourceManager.GetString("DockContent_Constructor_InvalidForm", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Gets or sets a value indicating in which area of the DockPanel the content allowed to show.. + /// + internal static string DockContent_DockAreas_Description { + get { + return ResourceManager.GetString("DockContent_DockAreas_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Occurs when the value of DockState property changed.. + /// + internal static string DockContent_DockStateChanged_Description { + get { + return ResourceManager.GetString("DockContent_DockStateChanged_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Indicates the content will be hidden instead of being closed.. + /// + internal static string DockContent_HideOnClose_Description { + get { + return ResourceManager.GetString("DockContent_HideOnClose_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The desired docking state when first showing.. + /// + internal static string DockContent_ShowHint_Description { + get { + return ResourceManager.GetString("DockContent_ShowHint_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Context menu displayed for the dock pane tab strip.. + /// + internal static string DockContent_TabPageContextMenu_Description { + get { + return ResourceManager.GetString("DockContent_TabPageContextMenu_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The tab text displayed in the dock pane. If not set, the Text property will be used.. + /// + internal static string DockContent_TabText_Description { + get { + return ResourceManager.GetString("DockContent_TabText_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The text displayed when mouse hovers over the tab.. + /// + internal static string DockContent_ToolTipText_Description { + get { + return ResourceManager.GetString("DockContent_ToolTipText_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The provided value is out of range.. + /// + internal static string DockContentHandler_AutoHidePortion_OutOfRange { + get { + return ResourceManager.GetString("DockContentHandler_AutoHidePortion_OutOfRange", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid Value: The value of DockAreas conflicts with current DockState.. + /// + internal static string DockContentHandler_DockAreas_InvalidValue { + get { + return ResourceManager.GetString("DockContentHandler_DockAreas_InvalidValue", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The pane is invalid. Check the IsFloat and DockPanel properties of this dock pane.. + /// + internal static string DockContentHandler_DockPane_InvalidValue { + get { + return ResourceManager.GetString("DockContentHandler_DockPane_InvalidValue", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The pane is invalid. Check the IsFloat and DockPanel properties of this dock pane.. + /// + internal static string DockContentHandler_FloatPane_InvalidValue { + get { + return ResourceManager.GetString("DockContentHandler_FloatPane_InvalidValue", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid value, conflicts with DockableAreas property.. + /// + internal static string DockContentHandler_IsFloat_InvalidValue { + get { + return ResourceManager.GetString("DockContentHandler_IsFloat_InvalidValue", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The dock state is invalid.. + /// + internal static string DockContentHandler_SetDockState_InvalidState { + get { + return ResourceManager.GetString("DockContentHandler_SetDockState_InvalidState", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The dock panel is null.. + /// + internal static string DockContentHandler_SetDockState_NullPanel { + get { + return ResourceManager.GetString("DockContentHandler_SetDockState_NullPanel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid beforeContent, it must be contained by the pane.. + /// + internal static string DockContentHandler_Show_InvalidBeforeContent { + get { + return ResourceManager.GetString("DockContentHandler_Show_InvalidBeforeContent", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid DockState: Content can not be showed as "Unknown" or "Hidden".. + /// + internal static string DockContentHandler_Show_InvalidDockState { + get { + return ResourceManager.GetString("DockContentHandler_Show_InvalidDockState", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The previous pane is invalid. It can not be null, and its docking state must not be auto-hide.. + /// + internal static string DockContentHandler_Show_InvalidPrevPane { + get { + return ResourceManager.GetString("DockContentHandler_Show_InvalidPrevPane", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to DockPanel can not be null.. + /// + internal static string DockContentHandler_Show_NullDockPanel { + get { + return ResourceManager.GetString("DockContentHandler_Show_NullDockPanel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The Pane can not be null.. + /// + internal static string DockContentHandler_Show_NullPane { + get { + return ResourceManager.GetString("DockContentHandler_Show_NullPane", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid value, check DockableAreas property.. + /// + internal static string DockContentHandler_ShowHint_InvalidValue { + get { + return ResourceManager.GetString("DockContentHandler_ShowHint_InvalidValue", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Context menu displayed for the dock pane tab strip.. + /// + internal static string DockHandler_TabPageContextMenuStrip_Description { + get { + return ResourceManager.GetString("DockHandler_TabPageContextMenuStrip_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Press SHIFT for docking to full side.. + /// + internal static string DockIndicator_ToolTipText { + get { + return ResourceManager.GetString("DockIndicator_ToolTipText", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid Content: ActiveContent must be one of the visible contents, or null if there is no visible content.. + /// + internal static string DockPane_ActiveContent_InvalidValue { + get { + return ResourceManager.GetString("DockPane_ActiveContent_InvalidValue", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid argument: Content can not be "null".. + /// + internal static string DockPane_Constructor_NullContent { + get { + return ResourceManager.GetString("DockPane_Constructor_NullContent", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid argument: The content's DockPanel can not be "null".. + /// + internal static string DockPane_Constructor_NullDockPanel { + get { + return ResourceManager.GetString("DockPane_Constructor_NullDockPanel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The specified container conflicts with the IsFloat property.. + /// + internal static string DockPane_DockTo_InvalidContainer { + get { + return ResourceManager.GetString("DockPane_DockTo_InvalidContainer", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The previous pane does not exist in the nested docking pane collection.. + /// + internal static string DockPane_DockTo_NoPrevPane { + get { + return ResourceManager.GetString("DockPane_DockTo_NoPrevPane", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The container can not be null.. + /// + internal static string DockPane_DockTo_NullContainer { + get { + return ResourceManager.GetString("DockPane_DockTo_NullContainer", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The previous pane can not be null when the nested docking pane collection is not empty.. + /// + internal static string DockPane_DockTo_NullPrevPane { + get { + return ResourceManager.GetString("DockPane_DockTo_NullPrevPane", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The previous pane can not be itself.. + /// + internal static string DockPane_DockTo_SelfPrevPane { + get { + return ResourceManager.GetString("DockPane_DockTo_SelfPrevPane", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to FloatWindow property can not be set to "null" when DockState is DockState.Float.. + /// + internal static string DockPane_FloatWindow_InvalidValue { + get { + return ResourceManager.GetString("DockPane_FloatWindow_InvalidValue", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid Content: Content not within the collection.. + /// + internal static string DockPane_SetContentIndex_InvalidContent { + get { + return ResourceManager.GetString("DockPane_SetContentIndex_InvalidContent", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid Index: The index is out of range.. + /// + internal static string DockPane_SetContentIndex_InvalidIndex { + get { + return ResourceManager.GetString("DockPane_SetContentIndex_InvalidIndex", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The state for the dock pane is invalid.. + /// + internal static string DockPane_SetDockState_InvalidState { + get { + return ResourceManager.GetString("DockPane_SetDockState_InvalidState", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Auto Hide. + /// + internal static string DockPaneCaption_ToolTipAutoHide { + get { + return ResourceManager.GetString("DockPaneCaption_ToolTipAutoHide", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Close. + /// + internal static string DockPaneCaption_ToolTipClose { + get { + return ResourceManager.GetString("DockPaneCaption_ToolTipClose", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Options. + /// + internal static string DockPaneCaption_ToolTipOptions { + get { + return ResourceManager.GetString("DockPaneCaption_ToolTipOptions", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid Content: The content must be auto-hide state and associates with this DockPanel.. + /// + internal static string DockPanel_ActiveAutoHideContent_InvalidValue { + get { + return ResourceManager.GetString("DockPanel_ActiveAutoHideContent_InvalidValue", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Occurs when the value of ActiveContentProperty changed.. + /// + internal static string DockPanel_ActiveContentChanged_Description { + get { + return ResourceManager.GetString("DockPanel_ActiveContentChanged_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Occurs when the value of ActiveDocument property changed.. + /// + internal static string DockPanel_ActiveDocumentChanged_Description { + get { + return ResourceManager.GetString("DockPanel_ActiveDocumentChanged_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Occurs when the value of ActivePane property changed.. + /// + internal static string DockPanel_ActivePaneChanged_Description { + get { + return ResourceManager.GetString("DockPanel_ActivePaneChanged_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Determines if the drag and drop docking is allowed.. + /// + internal static string DockPanel_AllowEndUserDocking_Description { + get { + return ResourceManager.GetString("DockPanel_AllowEndUserDocking_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Determines if the drag and drop nested docking is allowed.. + /// + internal static string DockPanel_AllowEndUserNestedDocking_Description { + get { + return ResourceManager.GetString("DockPanel_AllowEndUserNestedDocking_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Occurs when a content added to the DockPanel.. + /// + internal static string DockPanel_ContentAdded_Description { + get { + return ResourceManager.GetString("DockPanel_ContentAdded_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Occurs when a content removed from the DockPanel.. + /// + internal static string DockPanel_ContentRemoved_Description { + get { + return ResourceManager.GetString("DockPanel_ContentRemoved_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The default size of float window.. + /// + internal static string DockPanel_DefaultFloatWindowSize_Description { + get { + return ResourceManager.GetString("DockPanel_DefaultFloatWindowSize_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Provides Visual Studio .Net style docking.. + /// + internal static string DockPanel_Description { + get { + return ResourceManager.GetString("DockPanel_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Size of the bottom docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels.. + /// + internal static string DockPanel_DockBottomPortion_Description { + get { + return ResourceManager.GetString("DockPanel_DockBottomPortion_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Size of the left docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels.. + /// + internal static string DockPanel_DockLeftPortion_Description { + get { + return ResourceManager.GetString("DockPanel_DockLeftPortion_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The visual skin to use when displaying the docked windows.. + /// + internal static string DockPanel_DockPanelSkin { + get { + return ResourceManager.GetString("DockPanel_DockPanelSkin", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Size of the right docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels.. + /// + internal static string DockPanel_DockRightPortion_Description { + get { + return ResourceManager.GetString("DockPanel_DockRightPortion_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Size of the top docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels.. + /// + internal static string DockPanel_DockTopPortion_Description { + get { + return ResourceManager.GetString("DockPanel_DockTopPortion_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The style of the document window.. + /// + internal static string DockPanel_DocumentStyle_Description { + get { + return ResourceManager.GetString("DockPanel_DocumentStyle_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Determines where the tab strip for Document style content is drawn.. + /// + internal static string DockPanel_DocumentTabStripLocation { + get { + return ResourceManager.GetString("DockPanel_DocumentTabStripLocation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The DockPanel has already been initialized.. + /// + internal static string DockPanel_LoadFromXml_AlreadyInitialized { + get { + return ResourceManager.GetString("DockPanel_LoadFromXml_AlreadyInitialized", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The configuration file's version is invalid.. + /// + internal static string DockPanel_LoadFromXml_InvalidFormatVersion { + get { + return ResourceManager.GetString("DockPanel_LoadFromXml_InvalidFormatVersion", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The XML file format is invalid.. + /// + internal static string DockPanel_LoadFromXml_InvalidXmlFormat { + get { + return ResourceManager.GetString("DockPanel_LoadFromXml_InvalidXmlFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid parent form. When using DockingMdi or SystemMdi document style, the DockPanel control must be the child control of the main MDI container form.. + /// + internal static string DockPanel_ParentForm_Invalid { + get { + return ResourceManager.GetString("DockPanel_ParentForm_Invalid", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to DockPanel configuration file. Author: Weifen Luo, all rights reserved.. + /// + internal static string DockPanel_Persistor_XmlFileComment1 { + get { + return ResourceManager.GetString("DockPanel_Persistor_XmlFileComment1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to !!! AUTOMATICALLY GENERATED FILE. DO NOT MODIFY !!!. + /// + internal static string DockPanel_Persistor_XmlFileComment2 { + get { + return ResourceManager.GetString("DockPanel_Persistor_XmlFileComment2", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Indicates whether the control layout is right-to-left when the RightToLeft property is set to Yes.. + /// + internal static string DockPanel_RightToLeftLayout_Description { + get { + return ResourceManager.GetString("DockPanel_RightToLeftLayout_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid Index: The index is out of range.. + /// + internal static string DockPanel_SetPaneIndex_InvalidIndex { + get { + return ResourceManager.GetString("DockPanel_SetPaneIndex_InvalidIndex", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid Pane: DockPane not within the collection.. + /// + internal static string DockPanel_SetPaneIndex_InvalidPane { + get { + return ResourceManager.GetString("DockPanel_SetPaneIndex_InvalidPane", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Determines if the document icon will be displayed in the tab strip.. + /// + internal static string DockPanel_ShowDocumentIcon_Description { + get { + return ResourceManager.GetString("DockPanel_ShowDocumentIcon_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Close. + /// + internal static string DockPaneStrip_ToolTipClose { + get { + return ResourceManager.GetString("DockPaneStrip_ToolTipClose", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Window List. + /// + internal static string DockPaneStrip_ToolTipWindowList { + get { + return ResourceManager.GetString("DockPaneStrip_ToolTipWindowList", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid argument: DockPanel can not be "null".. + /// + internal static string FloatWindow_Constructor_NullDockPanel { + get { + return ResourceManager.GetString("FloatWindow_Constructor_NullDockPanel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid Index: The index is out of range.. + /// + internal static string FloatWindow_SetPaneIndex_InvalidIndex { + get { + return ResourceManager.GetString("FloatWindow_SetPaneIndex_InvalidIndex", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid Pane: DockPane not within the collection.. + /// + internal static string FloatWindow_SetPaneIndex_InvalidPane { + get { + return ResourceManager.GetString("FloatWindow_SetPaneIndex_InvalidPane", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid DockPanel.. + /// + internal static string IDockDragSource_DockTo_InvalidPanel { + get { + return ResourceManager.GetString("IDockDragSource_DockTo_InvalidPanel", resourceCulture); + } + } + } +} diff --git a/trunk/Docking/Strings.resx b/source/Docking/Strings.resx similarity index 98% rename from trunk/Docking/Strings.resx rename to source/Docking/Strings.resx index d5ff49d..1500401 100644 --- a/trunk/Docking/Strings.resx +++ b/source/Docking/Strings.resx @@ -1,357 +1,357 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Docking - - - Docking Notification - - - Property Changed - - - (Float) - - - Determines if end user drag and drop docking is allowed. - - - The size to display the content in auto hide mode. Value < 1 to specify the size in portion; value >= 1 to specify the size in pixel. - - - Enable/Disable the close button of the content. - - - The form must be of type IDockContent. - - - Gets or sets a value indicating in which area of the DockPanel the content allowed to show. - - - Occurs when the value of DockState property changed. - - - Indicates the content will be hidden instead of being closed. - - - The desired docking state when first showing. - - - Context menu displayed for the dock pane tab strip. - - - The tab text displayed in the dock pane. If not set, the Text property will be used. - - - The text displayed when mouse hovers over the tab. - - - The provided value is out of range. - - - Invalid Value: The value of DockAreas conflicts with current DockState. - - - The pane is invalid. Check the IsFloat and DockPanel properties of this dock pane. - - - The pane is invalid. Check the IsFloat and DockPanel properties of this dock pane. - - - Invalid value, conflicts with DockableAreas property. - - - The dock state is invalid. - - - The dock panel is null. - - - Invalid beforeContent, it must be contained by the pane. - - - Invalid DockState: Content can not be showed as "Unknown" or "Hidden". - - - The previous pane is invalid. It can not be null, and its docking state must not be auto-hide. - - - DockPanel can not be null. - - - The Pane can not be null. - - - Invalid value, check DockableAreas property. - - - Context menu displayed for the dock pane tab strip. - - - Press SHIFT for docking to full side. - - - Invalid Content: ActiveContent must be one of the visible contents, or null if there is no visible content. - - - Invalid argument: Content can not be "null". - - - Invalid argument: The content's DockPanel can not be "null". - - - The specified container conflicts with the IsFloat property. - - - The previous pane does not exist in the nested docking pane collection. - - - The container can not be null. - - - The previous pane can not be null when the nested docking pane collection is not empty. - - - The previous pane can not be itself. - - - FloatWindow property can not be set to "null" when DockState is DockState.Float. - - - Invalid Content: Content not within the collection. - - - Invalid Index: The index is out of range. - - - The state for the dock pane is invalid. - - - Auto Hide - - - Close - - - Options - - - Invalid Content: The content must be auto-hide state and associates with this DockPanel. - - - Occurs when the value of ActiveContentProperty changed. - - - Occurs when the value of ActiveDocument property changed. - - - Occurs when the value of ActivePane property changed. - - - Determines if the drag and drop docking is allowed. - - - Determines if the drag and drop nested docking is allowed. - - - Occurs when a content added to the DockPanel. - - - Occurs when a content removed from the DockPanel. - - - The default size of float window. - - - Provides Visual Studio .Net style docking. - - - Size of the bottom docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels. - - - Size of the left docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels. - - - Size of the right docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels. - - - Size of the top docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels. - - - The style of the document window. - - - The DockPanel has already been initialized. - - - The configuration file's version is invalid. - - - The XML file format is invalid. - - - Invalid parent form. When using DockingMdi or SystemMdi document style, the DockPanel control must be the child control of the main MDI container form. - - - DockPanel configuration file. Author: Weifen Luo, all rights reserved. - - - !!! AUTOMATICALLY GENERATED FILE. DO NOT MODIFY !!! - - - Indicates whether the control layout is right-to-left when the RightToLeft property is set to Yes. - - - Invalid Index: The index is out of range. - - - Invalid Pane: DockPane not within the collection. - - - Determines if the document icon will be displayed in the tab strip. - - - Close - - - Window List - - - Invalid argument: DockPanel can not be "null". - - - Invalid Index: The index is out of range. - - - Invalid Pane: DockPane not within the collection. - - - Invalid DockPanel. - - - Shows or hides the close button of the content. This property does not function with System MDI Document Style. - - - The visual skin to use when displaying the docked windows. - - - Determines where the tab strip for Document style content is drawn. - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Docking + + + Docking Notification + + + Property Changed + + + (Float) + + + Determines if end user drag and drop docking is allowed. + + + The size to display the content in auto hide mode. Value < 1 to specify the size in portion; value >= 1 to specify the size in pixel. + + + Enable/Disable the close button of the content. + + + The form must be of type IDockContent. + + + Gets or sets a value indicating in which area of the DockPanel the content allowed to show. + + + Occurs when the value of DockState property changed. + + + Indicates the content will be hidden instead of being closed. + + + The desired docking state when first showing. + + + Context menu displayed for the dock pane tab strip. + + + The tab text displayed in the dock pane. If not set, the Text property will be used. + + + The text displayed when mouse hovers over the tab. + + + The provided value is out of range. + + + Invalid Value: The value of DockAreas conflicts with current DockState. + + + The pane is invalid. Check the IsFloat and DockPanel properties of this dock pane. + + + The pane is invalid. Check the IsFloat and DockPanel properties of this dock pane. + + + Invalid value, conflicts with DockableAreas property. + + + The dock state is invalid. + + + The dock panel is null. + + + Invalid beforeContent, it must be contained by the pane. + + + Invalid DockState: Content can not be showed as "Unknown" or "Hidden". + + + The previous pane is invalid. It can not be null, and its docking state must not be auto-hide. + + + DockPanel can not be null. + + + The Pane can not be null. + + + Invalid value, check DockableAreas property. + + + Context menu displayed for the dock pane tab strip. + + + Press SHIFT for docking to full side. + + + Invalid Content: ActiveContent must be one of the visible contents, or null if there is no visible content. + + + Invalid argument: Content can not be "null". + + + Invalid argument: The content's DockPanel can not be "null". + + + The specified container conflicts with the IsFloat property. + + + The previous pane does not exist in the nested docking pane collection. + + + The container can not be null. + + + The previous pane can not be null when the nested docking pane collection is not empty. + + + The previous pane can not be itself. + + + FloatWindow property can not be set to "null" when DockState is DockState.Float. + + + Invalid Content: Content not within the collection. + + + Invalid Index: The index is out of range. + + + The state for the dock pane is invalid. + + + Auto Hide + + + Close + + + Options + + + Invalid Content: The content must be auto-hide state and associates with this DockPanel. + + + Occurs when the value of ActiveContentProperty changed. + + + Occurs when the value of ActiveDocument property changed. + + + Occurs when the value of ActivePane property changed. + + + Determines if the drag and drop docking is allowed. + + + Determines if the drag and drop nested docking is allowed. + + + Occurs when a content added to the DockPanel. + + + Occurs when a content removed from the DockPanel. + + + The default size of float window. + + + Provides Visual Studio .Net style docking. + + + Size of the bottom docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels. + + + Size of the left docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels. + + + Size of the right docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels. + + + Size of the top docking window. Value < 1 to specify the size in portion; value > 1 to specify the size in pixels. + + + The style of the document window. + + + The DockPanel has already been initialized. + + + The configuration file's version is invalid. + + + The XML file format is invalid. + + + Invalid parent form. When using DockingMdi or SystemMdi document style, the DockPanel control must be the child control of the main MDI container form. + + + DockPanel configuration file. Author: Weifen Luo, all rights reserved. + + + !!! AUTOMATICALLY GENERATED FILE. DO NOT MODIFY !!! + + + Indicates whether the control layout is right-to-left when the RightToLeft property is set to Yes. + + + Invalid Index: The index is out of range. + + + Invalid Pane: DockPane not within the collection. + + + Determines if the document icon will be displayed in the tab strip. + + + Close + + + Window List + + + Invalid argument: DockPanel can not be "null". + + + Invalid Index: The index is out of range. + + + Invalid Pane: DockPane not within the collection. + + + Invalid DockPanel. + + + Shows or hides the close button of the content. This property does not function with System MDI Document Style. + + + The visual skin to use when displaying the docked windows. + + + Determines where the tab strip for Document style content is drawn. + \ No newline at end of file diff --git a/trunk/Docking/VS2005AutoHideStrip.cs b/source/Docking/VS2005AutoHideStrip.cs similarity index 96% rename from trunk/Docking/VS2005AutoHideStrip.cs rename to source/Docking/VS2005AutoHideStrip.cs index 1a78052..4f0afce 100644 --- a/trunk/Docking/VS2005AutoHideStrip.cs +++ b/source/Docking/VS2005AutoHideStrip.cs @@ -1,505 +1,505 @@ -using System; -using System.Drawing; -using System.Windows.Forms; -using System.Drawing.Drawing2D; -using System.ComponentModel; - -namespace LSLEditor.Docking -{ - internal class VS2005AutoHideStrip : AutoHideStripBase - { - private class TabVS2005 : Tab - { - internal TabVS2005(IDockContent content) - : base(content) - { - } - - private int m_tabX = 0; - public int TabX - { - get { return m_tabX; } - set { m_tabX = value; } - } - - private int m_tabWidth = 0; - public int TabWidth - { - get { return m_tabWidth; } - set { m_tabWidth = value; } - } - - } - - private const int _ImageHeight = 16; - private const int _ImageWidth = 16; - private const int _ImageGapTop = 2; - private const int _ImageGapLeft = 4; - private const int _ImageGapRight = 2; - private const int _ImageGapBottom = 2; - private const int _TextGapLeft = 0; - private const int _TextGapRight = 0; - private const int _TabGapTop = 3; - private const int _TabGapLeft = 4; - private const int _TabGapBetween = 10; - - #region Customizable Properties - private static Font TextFont - { - get { return SystemInformation.MenuFont; } - } - - private static StringFormat _stringFormatTabHorizontal; - private StringFormat StringFormatTabHorizontal - { - get - { - if (_stringFormatTabHorizontal == null) - { - _stringFormatTabHorizontal = new StringFormat(); - _stringFormatTabHorizontal.Alignment = StringAlignment.Near; - _stringFormatTabHorizontal.LineAlignment = StringAlignment.Center; - _stringFormatTabHorizontal.FormatFlags = StringFormatFlags.NoWrap; - _stringFormatTabHorizontal.Trimming = StringTrimming.None; - } - - if (RightToLeft == RightToLeft.Yes) - _stringFormatTabHorizontal.FormatFlags |= StringFormatFlags.DirectionRightToLeft; - else - _stringFormatTabHorizontal.FormatFlags &= ~StringFormatFlags.DirectionRightToLeft; - - return _stringFormatTabHorizontal; - } - } - - private static StringFormat _stringFormatTabVertical; - private StringFormat StringFormatTabVertical - { - get - { - if (_stringFormatTabVertical == null) - { - _stringFormatTabVertical = new StringFormat(); - _stringFormatTabVertical.Alignment = StringAlignment.Near; - _stringFormatTabVertical.LineAlignment = StringAlignment.Center; - _stringFormatTabVertical.FormatFlags = StringFormatFlags.NoWrap | StringFormatFlags.DirectionVertical; - _stringFormatTabVertical.Trimming = StringTrimming.None; - } - if (RightToLeft == RightToLeft.Yes) - _stringFormatTabVertical.FormatFlags |= StringFormatFlags.DirectionRightToLeft; - else - _stringFormatTabVertical.FormatFlags &= ~StringFormatFlags.DirectionRightToLeft; - - return _stringFormatTabVertical; - } - } - - private static int ImageHeight - { - get { return _ImageHeight; } - } - - private static int ImageWidth - { - get { return _ImageWidth; } - } - - private static int ImageGapTop - { - get { return _ImageGapTop; } - } - - private static int ImageGapLeft - { - get { return _ImageGapLeft; } - } - - private static int ImageGapRight - { - get { return _ImageGapRight; } - } - - private static int ImageGapBottom - { - get { return _ImageGapBottom; } - } - - private static int TextGapLeft - { - get { return _TextGapLeft; } - } - - private static int TextGapRight - { - get { return _TextGapRight; } - } - - private static int TabGapTop - { - get { return _TabGapTop; } - } - - private static int TabGapLeft - { - get { return _TabGapLeft; } - } - - private static int TabGapBetween - { - get { return _TabGapBetween; } - } - - private static Pen PenTabBorder - { - get { return SystemPens.GrayText; } - } - #endregion - - private static Matrix _matrixIdentity = new Matrix(); - private static Matrix MatrixIdentity - { - get { return _matrixIdentity; } - } - - private static DockState[] _dockStates; - private static DockState[] DockStates - { - get - { - if (_dockStates == null) - { - _dockStates = new DockState[4]; - _dockStates[0] = DockState.DockLeftAutoHide; - _dockStates[1] = DockState.DockRightAutoHide; - _dockStates[2] = DockState.DockTopAutoHide; - _dockStates[3] = DockState.DockBottomAutoHide; - } - return _dockStates; - } - } - - private static GraphicsPath _graphicsPath; - internal static GraphicsPath GraphicsPath - { - get - { - if (_graphicsPath == null) - _graphicsPath = new GraphicsPath(); - - return _graphicsPath; - } - } - - public VS2005AutoHideStrip(DockPanel panel) : base(panel) - { - SetStyle(ControlStyles.ResizeRedraw | - ControlStyles.UserPaint | - ControlStyles.AllPaintingInWmPaint | - ControlStyles.OptimizedDoubleBuffer, true); - BackColor = SystemColors.ControlLight; - } - - protected override void OnPaint(PaintEventArgs e) - { - Graphics g = e.Graphics; - - Color startColor = DockPanel.Skin.AutoHideStripSkin.DockStripGradient.StartColor; - Color endColor = DockPanel.Skin.AutoHideStripSkin.DockStripGradient.EndColor; - LinearGradientMode gradientMode = DockPanel.Skin.AutoHideStripSkin.DockStripGradient.LinearGradientMode; - using (LinearGradientBrush brush = new LinearGradientBrush(ClientRectangle, startColor, endColor, gradientMode)) - { - g.FillRectangle(brush, ClientRectangle); - } - - DrawTabStrip(g); - } - - protected override void OnLayout(LayoutEventArgs levent) - { - CalculateTabs(); - base.OnLayout (levent); - } - - private void DrawTabStrip(Graphics g) - { - DrawTabStrip(g, DockState.DockTopAutoHide); - DrawTabStrip(g, DockState.DockBottomAutoHide); - DrawTabStrip(g, DockState.DockLeftAutoHide); - DrawTabStrip(g, DockState.DockRightAutoHide); - } - - private void DrawTabStrip(Graphics g, DockState dockState) - { - Rectangle rectTabStrip = GetLogicalTabStripRectangle(dockState); - - if (rectTabStrip.IsEmpty) - return; - - Matrix matrixIdentity = g.Transform; - if (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockRightAutoHide) - { - Matrix matrixRotated = new Matrix(); - matrixRotated.RotateAt(90, new PointF((float)rectTabStrip.X + (float)rectTabStrip.Height / 2, - (float)rectTabStrip.Y + (float)rectTabStrip.Height / 2)); - g.Transform = matrixRotated; - } - - foreach (Pane pane in GetPanes(dockState)) - { - foreach (TabVS2005 tab in pane.AutoHideTabs) - DrawTab(g, tab); - } - g.Transform = matrixIdentity; - } - - private void CalculateTabs() - { - CalculateTabs(DockState.DockTopAutoHide); - CalculateTabs(DockState.DockBottomAutoHide); - CalculateTabs(DockState.DockLeftAutoHide); - CalculateTabs(DockState.DockRightAutoHide); - } - - private void CalculateTabs(DockState dockState) - { - Rectangle rectTabStrip = GetLogicalTabStripRectangle(dockState); - - int imageHeight = rectTabStrip.Height - ImageGapTop - ImageGapBottom; - int imageWidth = ImageWidth; - if (imageHeight > ImageHeight) - imageWidth = ImageWidth * (imageHeight / ImageHeight); - - int x = TabGapLeft + rectTabStrip.X; - foreach (Pane pane in GetPanes(dockState)) - { - foreach (TabVS2005 tab in pane.AutoHideTabs) - { - int width = imageWidth + ImageGapLeft + ImageGapRight + - TextRenderer.MeasureText(tab.Content.DockHandler.TabText, TextFont).Width + - TextGapLeft + TextGapRight; - tab.TabX = x; - tab.TabWidth = width; - x += width; - } - - x += TabGapBetween; - } - } - - private Rectangle RtlTransform(Rectangle rect, DockState dockState) - { - Rectangle rectTransformed; - if (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockRightAutoHide) - rectTransformed = rect; - else - rectTransformed = DrawHelper.RtlTransform(this, rect); - - return rectTransformed; - } - - private GraphicsPath GetTabOutline(TabVS2005 tab, bool transformed, bool rtlTransform) - { - DockState dockState = tab.Content.DockHandler.DockState; - Rectangle rectTab = GetTabRectangle(tab, transformed); - if (rtlTransform) - rectTab = RtlTransform(rectTab, dockState); - bool upTab = (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockBottomAutoHide); - DrawHelper.GetRoundedCornerTab(GraphicsPath, rectTab, upTab); - - return GraphicsPath; - } - - private void DrawTab(Graphics g, TabVS2005 tab) - { - Rectangle rectTabOrigin = GetTabRectangle(tab); - if (rectTabOrigin.IsEmpty) - return; - - DockState dockState = tab.Content.DockHandler.DockState; - IDockContent content = tab.Content; - - GraphicsPath path = GetTabOutline(tab, false, true); - - Color startColor = DockPanel.Skin.AutoHideStripSkin.TabGradient.StartColor; - Color endColor = DockPanel.Skin.AutoHideStripSkin.TabGradient.EndColor; - LinearGradientMode gradientMode = DockPanel.Skin.AutoHideStripSkin.TabGradient.LinearGradientMode; - g.FillPath(new LinearGradientBrush(rectTabOrigin, startColor, endColor, gradientMode), path); - g.DrawPath(PenTabBorder, path); - - // Set no rotate for drawing icon and text - Matrix matrixRotate = g.Transform; - g.Transform = MatrixIdentity; - - // Draw the icon - Rectangle rectImage = rectTabOrigin; - rectImage.X += ImageGapLeft; - rectImage.Y += ImageGapTop; - int imageHeight = rectTabOrigin.Height - ImageGapTop - ImageGapBottom; - int imageWidth = ImageWidth; - if (imageHeight > ImageHeight) - imageWidth = ImageWidth * (imageHeight/ImageHeight); - rectImage.Height = imageHeight; - rectImage.Width = imageWidth; - rectImage = GetTransformedRectangle(dockState, rectImage); - g.DrawIcon(((Form)content).Icon, RtlTransform(rectImage, dockState)); - - // Draw the text - Rectangle rectText = rectTabOrigin; - rectText.X += ImageGapLeft + imageWidth + ImageGapRight + TextGapLeft; - rectText.Width -= ImageGapLeft + imageWidth + ImageGapRight + TextGapLeft; - rectText = RtlTransform(GetTransformedRectangle(dockState, rectText), dockState); - - Color textColor = DockPanel.Skin.AutoHideStripSkin.TabGradient.TextColor; - - if (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockRightAutoHide) - g.DrawString(content.DockHandler.TabText, TextFont, new SolidBrush(textColor), rectText, StringFormatTabVertical); - else - g.DrawString(content.DockHandler.TabText, TextFont, new SolidBrush(textColor), rectText, StringFormatTabHorizontal); - - // Set rotate back - g.Transform = matrixRotate; - } - - private Rectangle GetLogicalTabStripRectangle(DockState dockState) - { - return GetLogicalTabStripRectangle(dockState, false); - } - - private Rectangle GetLogicalTabStripRectangle(DockState dockState, bool transformed) - { - if (!DockHelper.IsDockStateAutoHide(dockState)) - return Rectangle.Empty; - - int leftPanes = GetPanes(DockState.DockLeftAutoHide).Count; - int rightPanes = GetPanes(DockState.DockRightAutoHide).Count; - int topPanes = GetPanes(DockState.DockTopAutoHide).Count; - int bottomPanes = GetPanes(DockState.DockBottomAutoHide).Count; - - int x, y, width, height; - - height = MeasureHeight(); - if (dockState == DockState.DockLeftAutoHide && leftPanes > 0) - { - x = 0; - y = (topPanes == 0) ? 0 : height; - width = Height - (topPanes == 0 ? 0 : height) - (bottomPanes == 0 ? 0 :height); - } - else if (dockState == DockState.DockRightAutoHide && rightPanes > 0) - { - x = Width - height; - if (leftPanes != 0 && x < height) - x = height; - y = (topPanes == 0) ? 0 : height; - width = Height - (topPanes == 0 ? 0 : height) - (bottomPanes == 0 ? 0 :height); - } - else if (dockState == DockState.DockTopAutoHide && topPanes > 0) - { - x = leftPanes == 0 ? 0 : height; - y = 0; - width = Width - (leftPanes == 0 ? 0 : height) - (rightPanes == 0 ? 0 : height); - } - else if (dockState == DockState.DockBottomAutoHide && bottomPanes > 0) - { - x = leftPanes == 0 ? 0 : height; - y = Height - height; - if (topPanes != 0 && y < height) - y = height; - width = Width - (leftPanes == 0 ? 0 : height) - (rightPanes == 0 ? 0 : height); - } - else - return Rectangle.Empty; - - if (!transformed) - return new Rectangle(x, y, width, height); - else - return GetTransformedRectangle(dockState, new Rectangle(x, y, width, height)); - } - - private Rectangle GetTabRectangle(TabVS2005 tab) - { - return GetTabRectangle(tab, false); - } - - private Rectangle GetTabRectangle(TabVS2005 tab, bool transformed) - { - DockState dockState = tab.Content.DockHandler.DockState; - Rectangle rectTabStrip = GetLogicalTabStripRectangle(dockState); - - if (rectTabStrip.IsEmpty) - return Rectangle.Empty; - - int x = tab.TabX; - int y = rectTabStrip.Y + - (dockState == DockState.DockTopAutoHide || dockState == DockState.DockRightAutoHide ? - 0 : TabGapTop); - int width = tab.TabWidth; - int height = rectTabStrip.Height - TabGapTop; - - if (!transformed) - return new Rectangle(x, y, width, height); - else - return GetTransformedRectangle(dockState, new Rectangle(x, y, width, height)); - } - - private Rectangle GetTransformedRectangle(DockState dockState, Rectangle rect) - { - if (dockState != DockState.DockLeftAutoHide && dockState != DockState.DockRightAutoHide) - return rect; - - PointF[] pts = new PointF[1]; - // the center of the rectangle - pts[0].X = (float)rect.X + (float)rect.Width / 2; - pts[0].Y = (float)rect.Y + (float)rect.Height / 2; - Rectangle rectTabStrip = GetLogicalTabStripRectangle(dockState); - Matrix matrix = new Matrix(); - matrix.RotateAt(90, new PointF((float)rectTabStrip.X + (float)rectTabStrip.Height / 2, - (float)rectTabStrip.Y + (float)rectTabStrip.Height / 2)); - matrix.TransformPoints(pts); - - return new Rectangle((int)(pts[0].X - (float)rect.Height / 2 + .5F), - (int)(pts[0].Y - (float)rect.Width / 2 + .5F), - rect.Height, rect.Width); - } - - protected override IDockContent HitTest(Point ptMouse) - { - foreach(DockState state in DockStates) - { - Rectangle rectTabStrip = GetLogicalTabStripRectangle(state, true); - if (!rectTabStrip.Contains(ptMouse)) - continue; - - foreach(Pane pane in GetPanes(state)) - { - DockState dockState = pane.DockPane.DockState; - foreach(TabVS2005 tab in pane.AutoHideTabs) - { - GraphicsPath path = GetTabOutline(tab, true, true); - if (path.IsVisible(ptMouse)) - return tab.Content; - } - } - } - - return null; - } - - protected internal override int MeasureHeight() - { - return Math.Max(ImageGapBottom + - ImageGapTop + ImageHeight, - TextFont.Height) + TabGapTop; - } - - protected override void OnRefreshChanges() - { - CalculateTabs(); - Invalidate(); - } - - protected override AutoHideStripBase.Tab CreateTab(IDockContent content) - { - return new TabVS2005(content); - } - } -} +using System; +using System.Drawing; +using System.Windows.Forms; +using System.Drawing.Drawing2D; +using System.ComponentModel; + +namespace LSLEditor.Docking +{ + internal class VS2005AutoHideStrip : AutoHideStripBase + { + private class TabVS2005 : Tab + { + internal TabVS2005(IDockContent content) + : base(content) + { + } + + private int m_tabX = 0; + public int TabX + { + get { return m_tabX; } + set { m_tabX = value; } + } + + private int m_tabWidth = 0; + public int TabWidth + { + get { return m_tabWidth; } + set { m_tabWidth = value; } + } + + } + + private const int _ImageHeight = 16; + private const int _ImageWidth = 16; + private const int _ImageGapTop = 2; + private const int _ImageGapLeft = 4; + private const int _ImageGapRight = 2; + private const int _ImageGapBottom = 2; + private const int _TextGapLeft = 0; + private const int _TextGapRight = 0; + private const int _TabGapTop = 3; + private const int _TabGapLeft = 4; + private const int _TabGapBetween = 10; + + #region Customizable Properties + private static Font TextFont + { + get { return SystemInformation.MenuFont; } + } + + private static StringFormat _stringFormatTabHorizontal; + private StringFormat StringFormatTabHorizontal + { + get + { + if (_stringFormatTabHorizontal == null) + { + _stringFormatTabHorizontal = new StringFormat(); + _stringFormatTabHorizontal.Alignment = StringAlignment.Near; + _stringFormatTabHorizontal.LineAlignment = StringAlignment.Center; + _stringFormatTabHorizontal.FormatFlags = StringFormatFlags.NoWrap; + _stringFormatTabHorizontal.Trimming = StringTrimming.None; + } + + if (RightToLeft == RightToLeft.Yes) + _stringFormatTabHorizontal.FormatFlags |= StringFormatFlags.DirectionRightToLeft; + else + _stringFormatTabHorizontal.FormatFlags &= ~StringFormatFlags.DirectionRightToLeft; + + return _stringFormatTabHorizontal; + } + } + + private static StringFormat _stringFormatTabVertical; + private StringFormat StringFormatTabVertical + { + get + { + if (_stringFormatTabVertical == null) + { + _stringFormatTabVertical = new StringFormat(); + _stringFormatTabVertical.Alignment = StringAlignment.Near; + _stringFormatTabVertical.LineAlignment = StringAlignment.Center; + _stringFormatTabVertical.FormatFlags = StringFormatFlags.NoWrap | StringFormatFlags.DirectionVertical; + _stringFormatTabVertical.Trimming = StringTrimming.None; + } + if (RightToLeft == RightToLeft.Yes) + _stringFormatTabVertical.FormatFlags |= StringFormatFlags.DirectionRightToLeft; + else + _stringFormatTabVertical.FormatFlags &= ~StringFormatFlags.DirectionRightToLeft; + + return _stringFormatTabVertical; + } + } + + private static int ImageHeight + { + get { return _ImageHeight; } + } + + private static int ImageWidth + { + get { return _ImageWidth; } + } + + private static int ImageGapTop + { + get { return _ImageGapTop; } + } + + private static int ImageGapLeft + { + get { return _ImageGapLeft; } + } + + private static int ImageGapRight + { + get { return _ImageGapRight; } + } + + private static int ImageGapBottom + { + get { return _ImageGapBottom; } + } + + private static int TextGapLeft + { + get { return _TextGapLeft; } + } + + private static int TextGapRight + { + get { return _TextGapRight; } + } + + private static int TabGapTop + { + get { return _TabGapTop; } + } + + private static int TabGapLeft + { + get { return _TabGapLeft; } + } + + private static int TabGapBetween + { + get { return _TabGapBetween; } + } + + private static Pen PenTabBorder + { + get { return SystemPens.GrayText; } + } + #endregion + + private static Matrix _matrixIdentity = new Matrix(); + private static Matrix MatrixIdentity + { + get { return _matrixIdentity; } + } + + private static DockState[] _dockStates; + private static DockState[] DockStates + { + get + { + if (_dockStates == null) + { + _dockStates = new DockState[4]; + _dockStates[0] = DockState.DockLeftAutoHide; + _dockStates[1] = DockState.DockRightAutoHide; + _dockStates[2] = DockState.DockTopAutoHide; + _dockStates[3] = DockState.DockBottomAutoHide; + } + return _dockStates; + } + } + + private static GraphicsPath _graphicsPath; + internal static GraphicsPath GraphicsPath + { + get + { + if (_graphicsPath == null) + _graphicsPath = new GraphicsPath(); + + return _graphicsPath; + } + } + + public VS2005AutoHideStrip(DockPanel panel) : base(panel) + { + SetStyle(ControlStyles.ResizeRedraw | + ControlStyles.UserPaint | + ControlStyles.AllPaintingInWmPaint | + ControlStyles.OptimizedDoubleBuffer, true); + BackColor = SystemColors.ControlLight; + } + + protected override void OnPaint(PaintEventArgs e) + { + Graphics g = e.Graphics; + + Color startColor = DockPanel.Skin.AutoHideStripSkin.DockStripGradient.StartColor; + Color endColor = DockPanel.Skin.AutoHideStripSkin.DockStripGradient.EndColor; + LinearGradientMode gradientMode = DockPanel.Skin.AutoHideStripSkin.DockStripGradient.LinearGradientMode; + using (LinearGradientBrush brush = new LinearGradientBrush(ClientRectangle, startColor, endColor, gradientMode)) + { + g.FillRectangle(brush, ClientRectangle); + } + + DrawTabStrip(g); + } + + protected override void OnLayout(LayoutEventArgs levent) + { + CalculateTabs(); + base.OnLayout (levent); + } + + private void DrawTabStrip(Graphics g) + { + DrawTabStrip(g, DockState.DockTopAutoHide); + DrawTabStrip(g, DockState.DockBottomAutoHide); + DrawTabStrip(g, DockState.DockLeftAutoHide); + DrawTabStrip(g, DockState.DockRightAutoHide); + } + + private void DrawTabStrip(Graphics g, DockState dockState) + { + Rectangle rectTabStrip = GetLogicalTabStripRectangle(dockState); + + if (rectTabStrip.IsEmpty) + return; + + Matrix matrixIdentity = g.Transform; + if (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockRightAutoHide) + { + Matrix matrixRotated = new Matrix(); + matrixRotated.RotateAt(90, new PointF((float)rectTabStrip.X + (float)rectTabStrip.Height / 2, + (float)rectTabStrip.Y + (float)rectTabStrip.Height / 2)); + g.Transform = matrixRotated; + } + + foreach (Pane pane in GetPanes(dockState)) + { + foreach (TabVS2005 tab in pane.AutoHideTabs) + DrawTab(g, tab); + } + g.Transform = matrixIdentity; + } + + private void CalculateTabs() + { + CalculateTabs(DockState.DockTopAutoHide); + CalculateTabs(DockState.DockBottomAutoHide); + CalculateTabs(DockState.DockLeftAutoHide); + CalculateTabs(DockState.DockRightAutoHide); + } + + private void CalculateTabs(DockState dockState) + { + Rectangle rectTabStrip = GetLogicalTabStripRectangle(dockState); + + int imageHeight = rectTabStrip.Height - ImageGapTop - ImageGapBottom; + int imageWidth = ImageWidth; + if (imageHeight > ImageHeight) + imageWidth = ImageWidth * (imageHeight / ImageHeight); + + int x = TabGapLeft + rectTabStrip.X; + foreach (Pane pane in GetPanes(dockState)) + { + foreach (TabVS2005 tab in pane.AutoHideTabs) + { + int width = imageWidth + ImageGapLeft + ImageGapRight + + TextRenderer.MeasureText(tab.Content.DockHandler.TabText, TextFont).Width + + TextGapLeft + TextGapRight; + tab.TabX = x; + tab.TabWidth = width; + x += width; + } + + x += TabGapBetween; + } + } + + private Rectangle RtlTransform(Rectangle rect, DockState dockState) + { + Rectangle rectTransformed; + if (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockRightAutoHide) + rectTransformed = rect; + else + rectTransformed = DrawHelper.RtlTransform(this, rect); + + return rectTransformed; + } + + private GraphicsPath GetTabOutline(TabVS2005 tab, bool transformed, bool rtlTransform) + { + DockState dockState = tab.Content.DockHandler.DockState; + Rectangle rectTab = GetTabRectangle(tab, transformed); + if (rtlTransform) + rectTab = RtlTransform(rectTab, dockState); + bool upTab = (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockBottomAutoHide); + DrawHelper.GetRoundedCornerTab(GraphicsPath, rectTab, upTab); + + return GraphicsPath; + } + + private void DrawTab(Graphics g, TabVS2005 tab) + { + Rectangle rectTabOrigin = GetTabRectangle(tab); + if (rectTabOrigin.IsEmpty) + return; + + DockState dockState = tab.Content.DockHandler.DockState; + IDockContent content = tab.Content; + + GraphicsPath path = GetTabOutline(tab, false, true); + + Color startColor = DockPanel.Skin.AutoHideStripSkin.TabGradient.StartColor; + Color endColor = DockPanel.Skin.AutoHideStripSkin.TabGradient.EndColor; + LinearGradientMode gradientMode = DockPanel.Skin.AutoHideStripSkin.TabGradient.LinearGradientMode; + g.FillPath(new LinearGradientBrush(rectTabOrigin, startColor, endColor, gradientMode), path); + g.DrawPath(PenTabBorder, path); + + // Set no rotate for drawing icon and text + Matrix matrixRotate = g.Transform; + g.Transform = MatrixIdentity; + + // Draw the icon + Rectangle rectImage = rectTabOrigin; + rectImage.X += ImageGapLeft; + rectImage.Y += ImageGapTop; + int imageHeight = rectTabOrigin.Height - ImageGapTop - ImageGapBottom; + int imageWidth = ImageWidth; + if (imageHeight > ImageHeight) + imageWidth = ImageWidth * (imageHeight/ImageHeight); + rectImage.Height = imageHeight; + rectImage.Width = imageWidth; + rectImage = GetTransformedRectangle(dockState, rectImage); + g.DrawIcon(((Form)content).Icon, RtlTransform(rectImage, dockState)); + + // Draw the text + Rectangle rectText = rectTabOrigin; + rectText.X += ImageGapLeft + imageWidth + ImageGapRight + TextGapLeft; + rectText.Width -= ImageGapLeft + imageWidth + ImageGapRight + TextGapLeft; + rectText = RtlTransform(GetTransformedRectangle(dockState, rectText), dockState); + + Color textColor = DockPanel.Skin.AutoHideStripSkin.TabGradient.TextColor; + + if (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockRightAutoHide) + g.DrawString(content.DockHandler.TabText, TextFont, new SolidBrush(textColor), rectText, StringFormatTabVertical); + else + g.DrawString(content.DockHandler.TabText, TextFont, new SolidBrush(textColor), rectText, StringFormatTabHorizontal); + + // Set rotate back + g.Transform = matrixRotate; + } + + private Rectangle GetLogicalTabStripRectangle(DockState dockState) + { + return GetLogicalTabStripRectangle(dockState, false); + } + + private Rectangle GetLogicalTabStripRectangle(DockState dockState, bool transformed) + { + if (!DockHelper.IsDockStateAutoHide(dockState)) + return Rectangle.Empty; + + int leftPanes = GetPanes(DockState.DockLeftAutoHide).Count; + int rightPanes = GetPanes(DockState.DockRightAutoHide).Count; + int topPanes = GetPanes(DockState.DockTopAutoHide).Count; + int bottomPanes = GetPanes(DockState.DockBottomAutoHide).Count; + + int x, y, width, height; + + height = MeasureHeight(); + if (dockState == DockState.DockLeftAutoHide && leftPanes > 0) + { + x = 0; + y = (topPanes == 0) ? 0 : height; + width = Height - (topPanes == 0 ? 0 : height) - (bottomPanes == 0 ? 0 :height); + } + else if (dockState == DockState.DockRightAutoHide && rightPanes > 0) + { + x = Width - height; + if (leftPanes != 0 && x < height) + x = height; + y = (topPanes == 0) ? 0 : height; + width = Height - (topPanes == 0 ? 0 : height) - (bottomPanes == 0 ? 0 :height); + } + else if (dockState == DockState.DockTopAutoHide && topPanes > 0) + { + x = leftPanes == 0 ? 0 : height; + y = 0; + width = Width - (leftPanes == 0 ? 0 : height) - (rightPanes == 0 ? 0 : height); + } + else if (dockState == DockState.DockBottomAutoHide && bottomPanes > 0) + { + x = leftPanes == 0 ? 0 : height; + y = Height - height; + if (topPanes != 0 && y < height) + y = height; + width = Width - (leftPanes == 0 ? 0 : height) - (rightPanes == 0 ? 0 : height); + } + else + return Rectangle.Empty; + + if (!transformed) + return new Rectangle(x, y, width, height); + else + return GetTransformedRectangle(dockState, new Rectangle(x, y, width, height)); + } + + private Rectangle GetTabRectangle(TabVS2005 tab) + { + return GetTabRectangle(tab, false); + } + + private Rectangle GetTabRectangle(TabVS2005 tab, bool transformed) + { + DockState dockState = tab.Content.DockHandler.DockState; + Rectangle rectTabStrip = GetLogicalTabStripRectangle(dockState); + + if (rectTabStrip.IsEmpty) + return Rectangle.Empty; + + int x = tab.TabX; + int y = rectTabStrip.Y + + (dockState == DockState.DockTopAutoHide || dockState == DockState.DockRightAutoHide ? + 0 : TabGapTop); + int width = tab.TabWidth; + int height = rectTabStrip.Height - TabGapTop; + + if (!transformed) + return new Rectangle(x, y, width, height); + else + return GetTransformedRectangle(dockState, new Rectangle(x, y, width, height)); + } + + private Rectangle GetTransformedRectangle(DockState dockState, Rectangle rect) + { + if (dockState != DockState.DockLeftAutoHide && dockState != DockState.DockRightAutoHide) + return rect; + + PointF[] pts = new PointF[1]; + // the center of the rectangle + pts[0].X = (float)rect.X + (float)rect.Width / 2; + pts[0].Y = (float)rect.Y + (float)rect.Height / 2; + Rectangle rectTabStrip = GetLogicalTabStripRectangle(dockState); + Matrix matrix = new Matrix(); + matrix.RotateAt(90, new PointF((float)rectTabStrip.X + (float)rectTabStrip.Height / 2, + (float)rectTabStrip.Y + (float)rectTabStrip.Height / 2)); + matrix.TransformPoints(pts); + + return new Rectangle((int)(pts[0].X - (float)rect.Height / 2 + .5F), + (int)(pts[0].Y - (float)rect.Width / 2 + .5F), + rect.Height, rect.Width); + } + + protected override IDockContent HitTest(Point ptMouse) + { + foreach(DockState state in DockStates) + { + Rectangle rectTabStrip = GetLogicalTabStripRectangle(state, true); + if (!rectTabStrip.Contains(ptMouse)) + continue; + + foreach(Pane pane in GetPanes(state)) + { + DockState dockState = pane.DockPane.DockState; + foreach(TabVS2005 tab in pane.AutoHideTabs) + { + GraphicsPath path = GetTabOutline(tab, true, true); + if (path.IsVisible(ptMouse)) + return tab.Content; + } + } + } + + return null; + } + + protected internal override int MeasureHeight() + { + return Math.Max(ImageGapBottom + + ImageGapTop + ImageHeight, + TextFont.Height) + TabGapTop; + } + + protected override void OnRefreshChanges() + { + CalculateTabs(); + Invalidate(); + } + + protected override AutoHideStripBase.Tab CreateTab(IDockContent content) + { + return new TabVS2005(content); + } + } +} diff --git a/trunk/Docking/VS2005DockPaneCaption.cs b/source/Docking/VS2005DockPaneCaption.cs similarity index 96% rename from trunk/Docking/VS2005DockPaneCaption.cs rename to source/Docking/VS2005DockPaneCaption.cs index 1a738e5..7626bd6 100644 --- a/trunk/Docking/VS2005DockPaneCaption.cs +++ b/source/Docking/VS2005DockPaneCaption.cs @@ -1,478 +1,478 @@ -using System; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Windows.Forms; -using System.ComponentModel; -using System.Windows.Forms.VisualStyles; - -namespace LSLEditor.Docking -{ - internal class VS2005DockPaneCaption : DockPaneCaptionBase - { - private sealed class InertButton : InertButtonBase - { - private Bitmap m_image, m_imageAutoHide; - - public InertButton(VS2005DockPaneCaption dockPaneCaption, Bitmap image, Bitmap imageAutoHide) - : base() - { - m_dockPaneCaption = dockPaneCaption; - m_image = image; - m_imageAutoHide = imageAutoHide; - RefreshChanges(); - } - - private VS2005DockPaneCaption m_dockPaneCaption; - private VS2005DockPaneCaption DockPaneCaption - { - get { return m_dockPaneCaption; } - } - - public bool IsAutoHide - { - get { return DockPaneCaption.DockPane.IsAutoHide; } - } - - public override Bitmap Image - { - get { return IsAutoHide ? m_imageAutoHide : m_image; } - } - - protected override void OnRefreshChanges() - { - if (DockPaneCaption.DockPane.DockPanel != null) - { - if (DockPaneCaption.TextColor != ForeColor) - { - ForeColor = DockPaneCaption.TextColor; - Invalidate(); - } - } - } - } - - #region consts - private const int _TextGapTop = 2; - private const int _TextGapBottom = 0; - private const int _TextGapLeft = 3; - private const int _TextGapRight = 3; - private const int _ButtonGapTop = 2; - private const int _ButtonGapBottom = 1; - private const int _ButtonGapBetween = 1; - private const int _ButtonGapLeft = 1; - private const int _ButtonGapRight = 2; - #endregion - - private static Bitmap _imageButtonClose; - private static Bitmap ImageButtonClose - { - get - { - if (_imageButtonClose == null) - _imageButtonClose = Resources.DockPane_Close; - - return _imageButtonClose; - } - } - - private InertButton m_buttonClose; - private InertButton ButtonClose - { - get - { - if (m_buttonClose == null) - { - m_buttonClose = new InertButton(this, ImageButtonClose, ImageButtonClose); - m_toolTip.SetToolTip(m_buttonClose, ToolTipClose); - m_buttonClose.Click += new EventHandler(Close_Click); - Controls.Add(m_buttonClose); - } - - return m_buttonClose; - } - } - - private static Bitmap _imageButtonAutoHide; - private static Bitmap ImageButtonAutoHide - { - get - { - if (_imageButtonAutoHide == null) - _imageButtonAutoHide = Resources.DockPane_AutoHide; - - return _imageButtonAutoHide; - } - } - - private static Bitmap _imageButtonDock; - private static Bitmap ImageButtonDock - { - get - { - if (_imageButtonDock == null) - _imageButtonDock = Resources.DockPane_Dock; - - return _imageButtonDock; - } - } - - private InertButton m_buttonAutoHide; - private InertButton ButtonAutoHide - { - get - { - if (m_buttonAutoHide == null) - { - m_buttonAutoHide = new InertButton(this, ImageButtonDock, ImageButtonAutoHide); - m_toolTip.SetToolTip(m_buttonAutoHide, ToolTipAutoHide); - m_buttonAutoHide.Click += new EventHandler(AutoHide_Click); - Controls.Add(m_buttonAutoHide); - } - - return m_buttonAutoHide; - } - } - - private static Bitmap _imageButtonOptions; - private static Bitmap ImageButtonOptions - { - get - { - if (_imageButtonOptions == null) - _imageButtonOptions = Resources.DockPane_Option; - - return _imageButtonOptions; - } - } - - private InertButton m_buttonOptions; - private InertButton ButtonOptions - { - get - { - if (m_buttonOptions == null) - { - m_buttonOptions = new InertButton(this, ImageButtonOptions, ImageButtonOptions); - m_toolTip.SetToolTip(m_buttonOptions, ToolTipOptions); - m_buttonOptions.Click += new EventHandler(Options_Click); - Controls.Add(m_buttonOptions); - } - return m_buttonOptions; - } - } - - private IContainer m_components; - private IContainer Components - { - get { return m_components; } - } - - private ToolTip m_toolTip; - - public VS2005DockPaneCaption(DockPane pane) : base(pane) - { - SuspendLayout(); - - m_components = new Container(); - m_toolTip = new ToolTip(Components); - - ResumeLayout(); - } - - protected override void Dispose(bool disposing) - { - if (disposing) - Components.Dispose(); - base.Dispose(disposing); - } - - private static int TextGapTop - { - get { return _TextGapTop; } - } - - private static Font TextFont - { - get { return SystemInformation.MenuFont; } - } - - private static int TextGapBottom - { - get { return _TextGapBottom; } - } - - private static int TextGapLeft - { - get { return _TextGapLeft; } - } - - private static int TextGapRight - { - get { return _TextGapRight; } - } - - private static int ButtonGapTop - { - get { return _ButtonGapTop; } - } - - private static int ButtonGapBottom - { - get { return _ButtonGapBottom; } - } - - private static int ButtonGapLeft - { - get { return _ButtonGapLeft; } - } - - private static int ButtonGapRight - { - get { return _ButtonGapRight; } - } - - private static int ButtonGapBetween - { - get { return _ButtonGapBetween; } - } - - private static string _toolTipClose; - private static string ToolTipClose - { - get - { - if (_toolTipClose == null) - _toolTipClose = Strings.DockPaneCaption_ToolTipClose; - return _toolTipClose; - } - } - - private static string _toolTipOptions; - private static string ToolTipOptions - { - get - { - if (_toolTipOptions == null) - _toolTipOptions = Strings.DockPaneCaption_ToolTipOptions; - - return _toolTipOptions; - } - } - - private static string _toolTipAutoHide; - private static string ToolTipAutoHide - { - get - { - if (_toolTipAutoHide == null) - _toolTipAutoHide = Strings.DockPaneCaption_ToolTipAutoHide; - return _toolTipAutoHide; - } - } - - private static Blend _activeBackColorGradientBlend; - private static Blend ActiveBackColorGradientBlend - { - get - { - if (_activeBackColorGradientBlend == null) - { - Blend blend = new Blend(2); - - blend.Factors = new float[]{0.5F, 1.0F}; - blend.Positions = new float[]{0.0F, 1.0F}; - _activeBackColorGradientBlend = blend; - } - - return _activeBackColorGradientBlend; - } - } - - private Color TextColor - { - get - { - if (DockPane.IsActivated) - return DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.ActiveCaptionGradient.TextColor; - else - return DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.InactiveCaptionGradient.TextColor; - } - } - - private static TextFormatFlags _textFormat = - TextFormatFlags.SingleLine | - TextFormatFlags.EndEllipsis | - TextFormatFlags.VerticalCenter; - private TextFormatFlags TextFormat - { - get - { - if (RightToLeft == RightToLeft.No) - return _textFormat; - else - return _textFormat | TextFormatFlags.RightToLeft | TextFormatFlags.Right; - } - } - - protected internal override int MeasureHeight() - { - int height = TextFont.Height + TextGapTop + TextGapBottom; - - if (height < ButtonClose.Image.Height + ButtonGapTop + ButtonGapBottom) - height = ButtonClose.Image.Height + ButtonGapTop + ButtonGapBottom; - - return height; - } - - protected override void OnPaint(PaintEventArgs e) - { - base.OnPaint (e); - DrawCaption(e.Graphics); - } - - private void DrawCaption(Graphics g) - { - if (ClientRectangle.Width == 0 || ClientRectangle.Height == 0) - return; - - if (DockPane.IsActivated) - { - Color startColor = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.ActiveCaptionGradient.StartColor; - Color endColor = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.ActiveCaptionGradient.EndColor; - LinearGradientMode gradientMode = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.ActiveCaptionGradient.LinearGradientMode; - using (LinearGradientBrush brush = new LinearGradientBrush(ClientRectangle, startColor, endColor, gradientMode)) - { - brush.Blend = ActiveBackColorGradientBlend; - g.FillRectangle(brush, ClientRectangle); - } - } - else - { - Color startColor = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.InactiveCaptionGradient.StartColor; - Color endColor = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.InactiveCaptionGradient.EndColor; - LinearGradientMode gradientMode = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.InactiveCaptionGradient.LinearGradientMode; - using (LinearGradientBrush brush = new LinearGradientBrush(ClientRectangle, startColor, endColor, gradientMode)) - { - g.FillRectangle(brush, ClientRectangle); - } - } - - Rectangle rectCaption = ClientRectangle; - - Rectangle rectCaptionText = rectCaption; - rectCaptionText.X += TextGapLeft; - rectCaptionText.Width -= TextGapLeft + TextGapRight; - rectCaptionText.Width -= ButtonGapLeft + ButtonClose.Width + ButtonGapRight; - if (ShouldShowAutoHideButton) - rectCaptionText.Width -= ButtonAutoHide.Width + ButtonGapBetween; - if (HasTabPageContextMenu) - rectCaptionText.Width -= ButtonOptions.Width + ButtonGapBetween; - rectCaptionText.Y += TextGapTop; - rectCaptionText.Height -= TextGapTop + TextGapBottom; - - Color colorText; - if (DockPane.IsActivated) - colorText = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.ActiveCaptionGradient.TextColor; - else - colorText = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.InactiveCaptionGradient.TextColor; - - TextRenderer.DrawText(g, DockPane.CaptionText, TextFont, DrawHelper.RtlTransform(this, rectCaptionText), colorText, TextFormat); - } - - protected override void OnLayout(LayoutEventArgs levent) - { - SetButtonsPosition(); - base.OnLayout (levent); - } - - protected override void OnRefreshChanges() - { - SetButtons(); - Invalidate(); - } - - private bool CloseButtonEnabled - { - get { return (DockPane.ActiveContent != null)? DockPane.ActiveContent.DockHandler.CloseButton : false; } - } - - /// - /// Determines whether the close button is visible on the content - /// - private bool CloseButtonVisible - { - get { return (DockPane.ActiveContent != null) ? DockPane.ActiveContent.DockHandler.CloseButtonVisible : false; } - } - - private bool ShouldShowAutoHideButton - { - get { return !DockPane.IsFloat; } - } - - private void SetButtons() - { - ButtonClose.Enabled = CloseButtonEnabled; - ButtonClose.Visible = CloseButtonVisible; - ButtonAutoHide.Visible = ShouldShowAutoHideButton; - ButtonOptions.Visible = HasTabPageContextMenu; - ButtonClose.RefreshChanges(); - ButtonAutoHide.RefreshChanges(); - ButtonOptions.RefreshChanges(); - - SetButtonsPosition(); - } - - private void SetButtonsPosition() - { - // set the size and location for close and auto-hide buttons - Rectangle rectCaption = ClientRectangle; - int buttonWidth = ButtonClose.Image.Width; - int buttonHeight = ButtonClose.Image.Height; - int height = rectCaption.Height - ButtonGapTop - ButtonGapBottom; - if (buttonHeight < height) - { - buttonWidth = buttonWidth * (height / buttonHeight); - buttonHeight = height; - } - Size buttonSize = new Size(buttonWidth, buttonHeight); - int x = rectCaption.X + rectCaption.Width - 1 - ButtonGapRight - m_buttonClose.Width; - int y = rectCaption.Y + ButtonGapTop; - Point point = new Point(x, y); - ButtonClose.Bounds = DrawHelper.RtlTransform(this, new Rectangle(point, buttonSize)); - - // If the close button is not visible draw the auto hide button overtop. - // Otherwise it is drawn to the left of the close button. - if (CloseButtonVisible) - point.Offset(-(buttonWidth + ButtonGapBetween), 0); - - ButtonAutoHide.Bounds = DrawHelper.RtlTransform(this, new Rectangle(point, buttonSize)); - if (ShouldShowAutoHideButton) - point.Offset(-(buttonWidth + ButtonGapBetween), 0); - ButtonOptions.Bounds = DrawHelper.RtlTransform(this, new Rectangle(point, buttonSize)); - } - - private void Close_Click(object sender, EventArgs e) - { - DockPane.CloseActiveContent(); - } - - private void AutoHide_Click(object sender, EventArgs e) - { - DockPane.DockState = DockHelper.ToggleAutoHideState(DockPane.DockState); - if (DockHelper.IsDockStateAutoHide(DockPane.DockState)) - DockPane.DockPanel.ActiveAutoHideContent = null; - - } - - private void Options_Click(object sender, EventArgs e) - { - ShowTabPageContextMenu(PointToClient(Control.MousePosition)); - } - - protected override void OnRightToLeftChanged(EventArgs e) - { - base.OnRightToLeftChanged(e); - PerformLayout(); - } - } -} +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; +using System.ComponentModel; +using System.Windows.Forms.VisualStyles; + +namespace LSLEditor.Docking +{ + internal class VS2005DockPaneCaption : DockPaneCaptionBase + { + private sealed class InertButton : InertButtonBase + { + private Bitmap m_image, m_imageAutoHide; + + public InertButton(VS2005DockPaneCaption dockPaneCaption, Bitmap image, Bitmap imageAutoHide) + : base() + { + m_dockPaneCaption = dockPaneCaption; + m_image = image; + m_imageAutoHide = imageAutoHide; + RefreshChanges(); + } + + private VS2005DockPaneCaption m_dockPaneCaption; + private VS2005DockPaneCaption DockPaneCaption + { + get { return m_dockPaneCaption; } + } + + public bool IsAutoHide + { + get { return DockPaneCaption.DockPane.IsAutoHide; } + } + + public override Bitmap Image + { + get { return IsAutoHide ? m_imageAutoHide : m_image; } + } + + protected override void OnRefreshChanges() + { + if (DockPaneCaption.DockPane.DockPanel != null) + { + if (DockPaneCaption.TextColor != ForeColor) + { + ForeColor = DockPaneCaption.TextColor; + Invalidate(); + } + } + } + } + + #region consts + private const int _TextGapTop = 2; + private const int _TextGapBottom = 0; + private const int _TextGapLeft = 3; + private const int _TextGapRight = 3; + private const int _ButtonGapTop = 2; + private const int _ButtonGapBottom = 1; + private const int _ButtonGapBetween = 1; + private const int _ButtonGapLeft = 1; + private const int _ButtonGapRight = 2; + #endregion + + private static Bitmap _imageButtonClose; + private static Bitmap ImageButtonClose + { + get + { + if (_imageButtonClose == null) + _imageButtonClose = Resources.DockPane_Close; + + return _imageButtonClose; + } + } + + private InertButton m_buttonClose; + private InertButton ButtonClose + { + get + { + if (m_buttonClose == null) + { + m_buttonClose = new InertButton(this, ImageButtonClose, ImageButtonClose); + m_toolTip.SetToolTip(m_buttonClose, ToolTipClose); + m_buttonClose.Click += new EventHandler(Close_Click); + Controls.Add(m_buttonClose); + } + + return m_buttonClose; + } + } + + private static Bitmap _imageButtonAutoHide; + private static Bitmap ImageButtonAutoHide + { + get + { + if (_imageButtonAutoHide == null) + _imageButtonAutoHide = Resources.DockPane_AutoHide; + + return _imageButtonAutoHide; + } + } + + private static Bitmap _imageButtonDock; + private static Bitmap ImageButtonDock + { + get + { + if (_imageButtonDock == null) + _imageButtonDock = Resources.DockPane_Dock; + + return _imageButtonDock; + } + } + + private InertButton m_buttonAutoHide; + private InertButton ButtonAutoHide + { + get + { + if (m_buttonAutoHide == null) + { + m_buttonAutoHide = new InertButton(this, ImageButtonDock, ImageButtonAutoHide); + m_toolTip.SetToolTip(m_buttonAutoHide, ToolTipAutoHide); + m_buttonAutoHide.Click += new EventHandler(AutoHide_Click); + Controls.Add(m_buttonAutoHide); + } + + return m_buttonAutoHide; + } + } + + private static Bitmap _imageButtonOptions; + private static Bitmap ImageButtonOptions + { + get + { + if (_imageButtonOptions == null) + _imageButtonOptions = Resources.DockPane_Option; + + return _imageButtonOptions; + } + } + + private InertButton m_buttonOptions; + private InertButton ButtonOptions + { + get + { + if (m_buttonOptions == null) + { + m_buttonOptions = new InertButton(this, ImageButtonOptions, ImageButtonOptions); + m_toolTip.SetToolTip(m_buttonOptions, ToolTipOptions); + m_buttonOptions.Click += new EventHandler(Options_Click); + Controls.Add(m_buttonOptions); + } + return m_buttonOptions; + } + } + + private IContainer m_components; + private IContainer Components + { + get { return m_components; } + } + + private ToolTip m_toolTip; + + public VS2005DockPaneCaption(DockPane pane) : base(pane) + { + SuspendLayout(); + + m_components = new Container(); + m_toolTip = new ToolTip(Components); + + ResumeLayout(); + } + + protected override void Dispose(bool disposing) + { + if (disposing) + Components.Dispose(); + base.Dispose(disposing); + } + + private static int TextGapTop + { + get { return _TextGapTop; } + } + + private static Font TextFont + { + get { return SystemInformation.MenuFont; } + } + + private static int TextGapBottom + { + get { return _TextGapBottom; } + } + + private static int TextGapLeft + { + get { return _TextGapLeft; } + } + + private static int TextGapRight + { + get { return _TextGapRight; } + } + + private static int ButtonGapTop + { + get { return _ButtonGapTop; } + } + + private static int ButtonGapBottom + { + get { return _ButtonGapBottom; } + } + + private static int ButtonGapLeft + { + get { return _ButtonGapLeft; } + } + + private static int ButtonGapRight + { + get { return _ButtonGapRight; } + } + + private static int ButtonGapBetween + { + get { return _ButtonGapBetween; } + } + + private static string _toolTipClose; + private static string ToolTipClose + { + get + { + if (_toolTipClose == null) + _toolTipClose = Strings.DockPaneCaption_ToolTipClose; + return _toolTipClose; + } + } + + private static string _toolTipOptions; + private static string ToolTipOptions + { + get + { + if (_toolTipOptions == null) + _toolTipOptions = Strings.DockPaneCaption_ToolTipOptions; + + return _toolTipOptions; + } + } + + private static string _toolTipAutoHide; + private static string ToolTipAutoHide + { + get + { + if (_toolTipAutoHide == null) + _toolTipAutoHide = Strings.DockPaneCaption_ToolTipAutoHide; + return _toolTipAutoHide; + } + } + + private static Blend _activeBackColorGradientBlend; + private static Blend ActiveBackColorGradientBlend + { + get + { + if (_activeBackColorGradientBlend == null) + { + Blend blend = new Blend(2); + + blend.Factors = new float[]{0.5F, 1.0F}; + blend.Positions = new float[]{0.0F, 1.0F}; + _activeBackColorGradientBlend = blend; + } + + return _activeBackColorGradientBlend; + } + } + + private Color TextColor + { + get + { + if (DockPane.IsActivated) + return DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.ActiveCaptionGradient.TextColor; + else + return DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.InactiveCaptionGradient.TextColor; + } + } + + private static TextFormatFlags _textFormat = + TextFormatFlags.SingleLine | + TextFormatFlags.EndEllipsis | + TextFormatFlags.VerticalCenter; + private TextFormatFlags TextFormat + { + get + { + if (RightToLeft == RightToLeft.No) + return _textFormat; + else + return _textFormat | TextFormatFlags.RightToLeft | TextFormatFlags.Right; + } + } + + protected internal override int MeasureHeight() + { + int height = TextFont.Height + TextGapTop + TextGapBottom; + + if (height < ButtonClose.Image.Height + ButtonGapTop + ButtonGapBottom) + height = ButtonClose.Image.Height + ButtonGapTop + ButtonGapBottom; + + return height; + } + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint (e); + DrawCaption(e.Graphics); + } + + private void DrawCaption(Graphics g) + { + if (ClientRectangle.Width == 0 || ClientRectangle.Height == 0) + return; + + if (DockPane.IsActivated) + { + Color startColor = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.ActiveCaptionGradient.StartColor; + Color endColor = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.ActiveCaptionGradient.EndColor; + LinearGradientMode gradientMode = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.ActiveCaptionGradient.LinearGradientMode; + using (LinearGradientBrush brush = new LinearGradientBrush(ClientRectangle, startColor, endColor, gradientMode)) + { + brush.Blend = ActiveBackColorGradientBlend; + g.FillRectangle(brush, ClientRectangle); + } + } + else + { + Color startColor = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.InactiveCaptionGradient.StartColor; + Color endColor = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.InactiveCaptionGradient.EndColor; + LinearGradientMode gradientMode = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.InactiveCaptionGradient.LinearGradientMode; + using (LinearGradientBrush brush = new LinearGradientBrush(ClientRectangle, startColor, endColor, gradientMode)) + { + g.FillRectangle(brush, ClientRectangle); + } + } + + Rectangle rectCaption = ClientRectangle; + + Rectangle rectCaptionText = rectCaption; + rectCaptionText.X += TextGapLeft; + rectCaptionText.Width -= TextGapLeft + TextGapRight; + rectCaptionText.Width -= ButtonGapLeft + ButtonClose.Width + ButtonGapRight; + if (ShouldShowAutoHideButton) + rectCaptionText.Width -= ButtonAutoHide.Width + ButtonGapBetween; + if (HasTabPageContextMenu) + rectCaptionText.Width -= ButtonOptions.Width + ButtonGapBetween; + rectCaptionText.Y += TextGapTop; + rectCaptionText.Height -= TextGapTop + TextGapBottom; + + Color colorText; + if (DockPane.IsActivated) + colorText = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.ActiveCaptionGradient.TextColor; + else + colorText = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.InactiveCaptionGradient.TextColor; + + TextRenderer.DrawText(g, DockPane.CaptionText, TextFont, DrawHelper.RtlTransform(this, rectCaptionText), colorText, TextFormat); + } + + protected override void OnLayout(LayoutEventArgs levent) + { + SetButtonsPosition(); + base.OnLayout (levent); + } + + protected override void OnRefreshChanges() + { + SetButtons(); + Invalidate(); + } + + private bool CloseButtonEnabled + { + get { return (DockPane.ActiveContent != null)? DockPane.ActiveContent.DockHandler.CloseButton : false; } + } + + /// + /// Determines whether the close button is visible on the content + /// + private bool CloseButtonVisible + { + get { return (DockPane.ActiveContent != null) ? DockPane.ActiveContent.DockHandler.CloseButtonVisible : false; } + } + + private bool ShouldShowAutoHideButton + { + get { return !DockPane.IsFloat; } + } + + private void SetButtons() + { + ButtonClose.Enabled = CloseButtonEnabled; + ButtonClose.Visible = CloseButtonVisible; + ButtonAutoHide.Visible = ShouldShowAutoHideButton; + ButtonOptions.Visible = HasTabPageContextMenu; + ButtonClose.RefreshChanges(); + ButtonAutoHide.RefreshChanges(); + ButtonOptions.RefreshChanges(); + + SetButtonsPosition(); + } + + private void SetButtonsPosition() + { + // set the size and location for close and auto-hide buttons + Rectangle rectCaption = ClientRectangle; + int buttonWidth = ButtonClose.Image.Width; + int buttonHeight = ButtonClose.Image.Height; + int height = rectCaption.Height - ButtonGapTop - ButtonGapBottom; + if (buttonHeight < height) + { + buttonWidth = buttonWidth * (height / buttonHeight); + buttonHeight = height; + } + Size buttonSize = new Size(buttonWidth, buttonHeight); + int x = rectCaption.X + rectCaption.Width - 1 - ButtonGapRight - m_buttonClose.Width; + int y = rectCaption.Y + ButtonGapTop; + Point point = new Point(x, y); + ButtonClose.Bounds = DrawHelper.RtlTransform(this, new Rectangle(point, buttonSize)); + + // If the close button is not visible draw the auto hide button overtop. + // Otherwise it is drawn to the left of the close button. + if (CloseButtonVisible) + point.Offset(-(buttonWidth + ButtonGapBetween), 0); + + ButtonAutoHide.Bounds = DrawHelper.RtlTransform(this, new Rectangle(point, buttonSize)); + if (ShouldShowAutoHideButton) + point.Offset(-(buttonWidth + ButtonGapBetween), 0); + ButtonOptions.Bounds = DrawHelper.RtlTransform(this, new Rectangle(point, buttonSize)); + } + + private void Close_Click(object sender, EventArgs e) + { + DockPane.CloseActiveContent(); + } + + private void AutoHide_Click(object sender, EventArgs e) + { + DockPane.DockState = DockHelper.ToggleAutoHideState(DockPane.DockState); + if (DockHelper.IsDockStateAutoHide(DockPane.DockState)) + DockPane.DockPanel.ActiveAutoHideContent = null; + + } + + private void Options_Click(object sender, EventArgs e) + { + ShowTabPageContextMenu(PointToClient(Control.MousePosition)); + } + + protected override void OnRightToLeftChanged(EventArgs e) + { + base.OnRightToLeftChanged(e); + PerformLayout(); + } + } +} diff --git a/trunk/Docking/VS2005DockPaneStrip.cs b/source/Docking/VS2005DockPaneStrip.cs similarity index 97% rename from trunk/Docking/VS2005DockPaneStrip.cs rename to source/Docking/VS2005DockPaneStrip.cs index 042a906..8ec9e1e 100644 --- a/trunk/Docking/VS2005DockPaneStrip.cs +++ b/source/Docking/VS2005DockPaneStrip.cs @@ -1,1479 +1,1479 @@ -using System; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Windows.Forms; -using System.ComponentModel; -using System.Collections; -using System.Collections.Generic; - -namespace LSLEditor.Docking -{ - internal class VS2005DockPaneStrip : DockPaneStripBase - { - private class TabVS2005 : Tab - { - public TabVS2005(IDockContent content) - : base(content) - { - } - - private int m_tabX; - public int TabX - { - get { return m_tabX; } - set { m_tabX = value; } - } - - private int m_tabWidth; - public int TabWidth - { - get { return m_tabWidth; } - set { m_tabWidth = value; } - } - - private int m_maxWidth; - public int MaxWidth - { - get { return m_maxWidth; } - set { m_maxWidth = value; } - } - - private bool m_flag; - protected internal bool Flag - { - get { return m_flag; } - set { m_flag = value; } - } - } - - protected internal override DockPaneStripBase.Tab CreateTab(IDockContent content) - { - return new TabVS2005(content); - } - - private sealed class InertButton : InertButtonBase - { - private Bitmap m_image0, m_image1; - - public InertButton(Bitmap image0, Bitmap image1) - : base() - { - m_image0 = image0; - m_image1 = image1; - } - - private int m_imageCategory = 0; - public int ImageCategory - { - get { return m_imageCategory; } - set - { - if (m_imageCategory == value) - return; - - m_imageCategory = value; - Invalidate(); - } - } - - public override Bitmap Image - { - get { return ImageCategory == 0 ? m_image0 : m_image1; } - } - } - - #region consts - private const int _ToolWindowStripGapTop = 0; - private const int _ToolWindowStripGapBottom = 1; - private const int _ToolWindowStripGapLeft = 0; - private const int _ToolWindowStripGapRight = 0; - private const int _ToolWindowImageHeight = 16; - private const int _ToolWindowImageWidth = 16; - private const int _ToolWindowImageGapTop = 3; - private const int _ToolWindowImageGapBottom = 1; - private const int _ToolWindowImageGapLeft = 2; - private const int _ToolWindowImageGapRight = 0; - private const int _ToolWindowTextGapRight = 3; - private const int _ToolWindowTabSeperatorGapTop = 3; - private const int _ToolWindowTabSeperatorGapBottom = 3; - - private const int _DocumentStripGapTop = 0; - private const int _DocumentStripGapBottom = 1; - private const int _DocumentTabMaxWidth = 200; - private const int _DocumentButtonGapTop = 4; - private const int _DocumentButtonGapBottom = 4; - private const int _DocumentButtonGapBetween = 0; - private const int _DocumentButtonGapRight = 3; - private const int _DocumentTabGapTop = 3; - private const int _DocumentTabGapLeft = 3; - private const int _DocumentTabGapRight = 3; - private const int _DocumentIconGapBottom = 2; - private const int _DocumentIconGapLeft = 8; - private const int _DocumentIconGapRight = 0; - private const int _DocumentIconHeight = 16; - private const int _DocumentIconWidth = 16; - private const int _DocumentTextGapRight = 3; - #endregion - - private static Bitmap _imageButtonClose; - private static Bitmap ImageButtonClose - { - get - { - if (_imageButtonClose == null) - _imageButtonClose = Resources.DockPane_Close; - - return _imageButtonClose; - } - } - - private InertButton m_buttonClose; - private InertButton ButtonClose - { - get - { - if (m_buttonClose == null) - { - m_buttonClose = new InertButton(ImageButtonClose, ImageButtonClose); - m_toolTip.SetToolTip(m_buttonClose, ToolTipClose); - m_buttonClose.Click += new EventHandler(Close_Click); - Controls.Add(m_buttonClose); - } - - return m_buttonClose; - } - } - - private static Bitmap _imageButtonWindowList; - private static Bitmap ImageButtonWindowList - { - get - { - if (_imageButtonWindowList == null) - _imageButtonWindowList = Resources.DockPane_Option; - - return _imageButtonWindowList; - } - } - - private static Bitmap _imageButtonWindowListOverflow; - private static Bitmap ImageButtonWindowListOverflow - { - get - { - if (_imageButtonWindowListOverflow == null) - _imageButtonWindowListOverflow = Resources.DockPane_OptionOverflow; - - return _imageButtonWindowListOverflow; - } - } - - private InertButton m_buttonWindowList; - private InertButton ButtonWindowList - { - get - { - if (m_buttonWindowList == null) - { - m_buttonWindowList = new InertButton(ImageButtonWindowList, ImageButtonWindowListOverflow); - m_toolTip.SetToolTip(m_buttonWindowList, ToolTipSelect); - m_buttonWindowList.Click += new EventHandler(WindowList_Click); - Controls.Add(m_buttonWindowList); - } - - return m_buttonWindowList; - } - } - - private static GraphicsPath GraphicsPath - { - get { return VS2005AutoHideStrip.GraphicsPath; } - } - - private IContainer m_components; - private ToolTip m_toolTip; - private IContainer Components - { - get { return m_components; } - } - - #region Customizable Properties - private static int ToolWindowStripGapTop - { - get { return _ToolWindowStripGapTop; } - } - - private static int ToolWindowStripGapBottom - { - get { return _ToolWindowStripGapBottom; } - } - - private static int ToolWindowStripGapLeft - { - get { return _ToolWindowStripGapLeft; } - } - - private static int ToolWindowStripGapRight - { - get { return _ToolWindowStripGapRight; } - } - - private static int ToolWindowImageHeight - { - get { return _ToolWindowImageHeight; } - } - - private static int ToolWindowImageWidth - { - get { return _ToolWindowImageWidth; } - } - - private static int ToolWindowImageGapTop - { - get { return _ToolWindowImageGapTop; } - } - - private static int ToolWindowImageGapBottom - { - get { return _ToolWindowImageGapBottom; } - } - - private static int ToolWindowImageGapLeft - { - get { return _ToolWindowImageGapLeft; } - } - - private static int ToolWindowImageGapRight - { - get { return _ToolWindowImageGapRight; } - } - - private static int ToolWindowTextGapRight - { - get { return _ToolWindowTextGapRight; } - } - - private static int ToolWindowTabSeperatorGapTop - { - get { return _ToolWindowTabSeperatorGapTop; } - } - - private static int ToolWindowTabSeperatorGapBottom - { - get { return _ToolWindowTabSeperatorGapBottom; } - } - - private static string _toolTipClose; - private static string ToolTipClose - { - get - { - if (_toolTipClose == null) - _toolTipClose = Strings.DockPaneStrip_ToolTipClose; - return _toolTipClose; - } - } - - private static string _toolTipSelect; - private static string ToolTipSelect - { - get - { - if (_toolTipSelect == null) - _toolTipSelect = Strings.DockPaneStrip_ToolTipWindowList; - return _toolTipSelect; - } - } - - private TextFormatFlags ToolWindowTextFormat - { - get - { - TextFormatFlags textFormat = TextFormatFlags.EndEllipsis | - TextFormatFlags.HorizontalCenter | - TextFormatFlags.SingleLine | - TextFormatFlags.VerticalCenter; - if (RightToLeft == RightToLeft.Yes) - return textFormat | TextFormatFlags.RightToLeft | TextFormatFlags.Right; - else - return textFormat; - } - } - - private static int DocumentStripGapTop - { - get { return _DocumentStripGapTop; } - } - - private static int DocumentStripGapBottom - { - get { return _DocumentStripGapBottom; } - } - - private TextFormatFlags DocumentTextFormat - { - get - { - TextFormatFlags textFormat = TextFormatFlags.EndEllipsis | - TextFormatFlags.SingleLine | - TextFormatFlags.VerticalCenter | - TextFormatFlags.HorizontalCenter; - if (RightToLeft == RightToLeft.Yes) - return textFormat | TextFormatFlags.RightToLeft; - else - return textFormat; - } - } - - private static int DocumentTabMaxWidth - { - get { return _DocumentTabMaxWidth; } - } - - private static int DocumentButtonGapTop - { - get { return _DocumentButtonGapTop; } - } - - private static int DocumentButtonGapBottom - { - get { return _DocumentButtonGapBottom; } - } - - private static int DocumentButtonGapBetween - { - get { return _DocumentButtonGapBetween; } - } - - private static int DocumentButtonGapRight - { - get { return _DocumentButtonGapRight; } - } - - private static int DocumentTabGapTop - { - get { return _DocumentTabGapTop; } - } - - private static int DocumentTabGapLeft - { - get { return _DocumentTabGapLeft; } - } - - private static int DocumentTabGapRight - { - get { return _DocumentTabGapRight; } - } - - private static int DocumentIconGapBottom - { - get { return _DocumentIconGapBottom; } - } - - private static int DocumentIconGapLeft - { - get { return _DocumentIconGapLeft; } - } - - private static int DocumentIconGapRight - { - get { return _DocumentIconGapRight; } - } - - private static int DocumentIconWidth - { - get { return _DocumentIconWidth; } - } - - private static int DocumentIconHeight - { - get { return _DocumentIconHeight; } - } - - private static int DocumentTextGapRight - { - get { return _DocumentTextGapRight; } - } - - private static Pen PenToolWindowTabBorder - { - get { return SystemPens.GrayText; } - } - - private static Pen PenDocumentTabActiveBorder - { - get { return SystemPens.ControlDarkDark; } - } - - private static Pen PenDocumentTabInactiveBorder - { - get { return SystemPens.GrayText; } - } - #endregion - - public VS2005DockPaneStrip(DockPane pane) : base(pane) - { - SetStyle(ControlStyles.ResizeRedraw | - ControlStyles.UserPaint | - ControlStyles.AllPaintingInWmPaint | - ControlStyles.OptimizedDoubleBuffer, true); - - SuspendLayout(); - - m_components = new Container(); - m_toolTip = new ToolTip(Components); - m_selectMenu = new ContextMenuStrip(Components); - - ResumeLayout(); - } - - protected override void Dispose(bool disposing) - { - if (disposing) - { - Components.Dispose(); - if (m_boldFont != null) - { - m_boldFont.Dispose(); - m_boldFont = null; - } - } - base.Dispose (disposing); - } - - private static Font TextFont - { - get { return SystemInformation.MenuFont; } - } - - private Font m_font; - private Font m_boldFont; - private Font BoldFont - { - get - { - if (IsDisposed) - return null; - - if (m_boldFont == null) - { - m_font = TextFont; - m_boldFont = new Font(TextFont, FontStyle.Bold); - } - else if (m_font != TextFont) - { - m_boldFont.Dispose(); - m_font = TextFont; - m_boldFont = new Font(TextFont, FontStyle.Bold); - } - - return m_boldFont; - } - } - - private int m_startDisplayingTab = 0; - private int StartDisplayingTab - { - get { return m_startDisplayingTab; } - set - { - m_startDisplayingTab = value; - Invalidate(); - } - } - - private int m_endDisplayingTab = 0; - private int EndDisplayingTab - { - get { return m_endDisplayingTab; } - set { m_endDisplayingTab = value; } - } - - private int m_firstDisplayingTab = 0; - private int FirstDisplayingTab - { - get { return m_firstDisplayingTab; } - set { m_firstDisplayingTab = value; } - } - - private bool m_documentTabsOverflow = false; - private bool DocumentTabsOverflow - { - set - { - if (m_documentTabsOverflow == value) - return; - - m_documentTabsOverflow = value; - if (value) - ButtonWindowList.ImageCategory = 1; - else - ButtonWindowList.ImageCategory = 0; - } - } - - protected internal override int MeasureHeight() - { - if (Appearance == DockPane.AppearanceStyle.ToolWindow) - return MeasureHeight_ToolWindow(); - else - return MeasureHeight_Document(); - } - - private int MeasureHeight_ToolWindow() - { - if (DockPane.IsAutoHide || Tabs.Count <= 1) - return 0; - - int height = Math.Max(TextFont.Height, ToolWindowImageHeight + ToolWindowImageGapTop + ToolWindowImageGapBottom) - + ToolWindowStripGapTop + ToolWindowStripGapBottom; - - return height; - } - - private int MeasureHeight_Document() - { - int height = Math.Max(TextFont.Height + DocumentTabGapTop, - ButtonClose.Height + DocumentButtonGapTop + DocumentButtonGapBottom) - + DocumentStripGapBottom + DocumentStripGapTop; - - return height; - } - - protected override void OnPaint(PaintEventArgs e) - { - Rectangle rect = TabsRectangle; - - if (Appearance == DockPane.AppearanceStyle.Document) - { - rect.X -= DocumentTabGapLeft; - - // Add these values back in so that the DockStrip color is drawn - // beneath the close button and window list button. - rect.Width += DocumentTabGapLeft + - DocumentTabGapRight + - DocumentButtonGapRight + - ButtonClose.Width + - ButtonWindowList.Width; - - // It is possible depending on the DockPanel DocumentStyle to have - // a Document without a DockStrip. - if (rect.Width > 0 && rect.Height > 0) - { - Color startColor = DockPane.DockPanel.Skin.DockPaneStripSkin.DocumentGradient.DockStripGradient.StartColor; - Color endColor = DockPane.DockPanel.Skin.DockPaneStripSkin.DocumentGradient.DockStripGradient.EndColor; - LinearGradientMode gradientMode = DockPane.DockPanel.Skin.DockPaneStripSkin.DocumentGradient.DockStripGradient.LinearGradientMode; - using (LinearGradientBrush brush = new LinearGradientBrush(rect, startColor, endColor, gradientMode)) - { - e.Graphics.FillRectangle(brush, rect); - } - } - } - else - { - Color startColor = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.DockStripGradient.StartColor; - Color endColor = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.DockStripGradient.EndColor; - LinearGradientMode gradientMode = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.DockStripGradient.LinearGradientMode; - using (LinearGradientBrush brush = new LinearGradientBrush(rect, startColor, endColor, gradientMode)) - { - e.Graphics.FillRectangle(brush, rect); - } - } - base.OnPaint (e); - CalculateTabs(); - if (Appearance == DockPane.AppearanceStyle.Document && DockPane.ActiveContent != null) - { - if (EnsureDocumentTabVisible(DockPane.ActiveContent, false)) - CalculateTabs(); - } - - DrawTabStrip(e.Graphics); - } - - protected override void OnRefreshChanges() - { - SetInertButtons(); - Invalidate(); - } - - protected internal override GraphicsPath GetOutline(int index) - { - - if (Appearance == DockPane.AppearanceStyle.Document) - return GetOutline_Document(index); - else - return GetOutline_ToolWindow(index); - - } - - private GraphicsPath GetOutline_Document(int index) - { - Rectangle rectTab = GetTabRectangle(index); - rectTab.X -= rectTab.Height / 2; - rectTab.Intersect(TabsRectangle); - rectTab = RectangleToScreen(DrawHelper.RtlTransform(this, rectTab)); - Rectangle rectPaneClient = DockPane.RectangleToScreen(DockPane.ClientRectangle); - - GraphicsPath path = new GraphicsPath(); - GraphicsPath pathTab = GetTabOutline_Document(Tabs[index], true, true, true); - path.AddPath(pathTab, true); - - if (DockPane.DockPanel.DocumentTabStripLocation == DocumentTabStripLocation.Bottom) - { - path.AddLine(rectTab.Right, rectTab.Top, rectPaneClient.Right, rectTab.Top); - path.AddLine(rectPaneClient.Right, rectTab.Top, rectPaneClient.Right, rectPaneClient.Top); - path.AddLine(rectPaneClient.Right, rectPaneClient.Top, rectPaneClient.Left, rectPaneClient.Top); - path.AddLine(rectPaneClient.Left, rectPaneClient.Top, rectPaneClient.Left, rectTab.Top); - path.AddLine(rectPaneClient.Left, rectTab.Top, rectTab.Right, rectTab.Top); - } - else - { - path.AddLine(rectTab.Right, rectTab.Bottom, rectPaneClient.Right, rectTab.Bottom); - path.AddLine(rectPaneClient.Right, rectTab.Bottom, rectPaneClient.Right, rectPaneClient.Bottom); - path.AddLine(rectPaneClient.Right, rectPaneClient.Bottom, rectPaneClient.Left, rectPaneClient.Bottom); - path.AddLine(rectPaneClient.Left, rectPaneClient.Bottom, rectPaneClient.Left, rectTab.Bottom); - path.AddLine(rectPaneClient.Left, rectTab.Bottom, rectTab.Right, rectTab.Bottom); - } - return path; - } - - private GraphicsPath GetOutline_ToolWindow(int index) - { - Rectangle rectTab = GetTabRectangle(index); - rectTab.Intersect(TabsRectangle); - rectTab = RectangleToScreen(DrawHelper.RtlTransform(this, rectTab)); - int y = rectTab.Top; - Rectangle rectPaneClient = DockPane.RectangleToScreen(DockPane.ClientRectangle); - - GraphicsPath path = new GraphicsPath(); - GraphicsPath pathTab = GetTabOutline(Tabs[index], true, true); - path.AddPath(pathTab, true); - path.AddLine(rectTab.Left, rectTab.Top, rectPaneClient.Left, rectTab.Top); - path.AddLine(rectPaneClient.Left, rectTab.Top, rectPaneClient.Left, rectPaneClient.Top); - path.AddLine(rectPaneClient.Left, rectPaneClient.Top, rectPaneClient.Right, rectPaneClient.Top); - path.AddLine(rectPaneClient.Right, rectPaneClient.Top, rectPaneClient.Right, rectTab.Top); - path.AddLine(rectPaneClient.Right, rectTab.Top, rectTab.Right, rectTab.Top); - return path; - } - - private void CalculateTabs() - { - if (Appearance == DockPane.AppearanceStyle.ToolWindow) - CalculateTabs_ToolWindow(); - else - CalculateTabs_Document(); - } - - private void CalculateTabs_ToolWindow() - { - if (Tabs.Count <= 1 || DockPane.IsAutoHide) - return; - - Rectangle rectTabStrip = TabStripRectangle; - - // Calculate tab widths - int countTabs = Tabs.Count; - foreach (TabVS2005 tab in Tabs) - { - tab.MaxWidth = GetMaxTabWidth(Tabs.IndexOf(tab)); - tab.Flag = false; - } - - // Set tab whose max width less than average width - bool anyWidthWithinAverage = true; - int totalWidth = rectTabStrip.Width - ToolWindowStripGapLeft - ToolWindowStripGapRight; - int totalAllocatedWidth = 0; - int averageWidth = totalWidth / countTabs; - int remainedTabs = countTabs; - for (anyWidthWithinAverage=true; anyWidthWithinAverage && remainedTabs>0;) - { - anyWidthWithinAverage = false; - foreach (TabVS2005 tab in Tabs) - { - if (tab.Flag) - continue; - - if (tab.MaxWidth <= averageWidth) - { - tab.Flag = true; - tab.TabWidth = tab.MaxWidth; - totalAllocatedWidth += tab.TabWidth; - anyWidthWithinAverage = true; - remainedTabs--; - } - } - if (remainedTabs != 0) - averageWidth = (totalWidth - totalAllocatedWidth) / remainedTabs; - } - - // If any tab width not set yet, set it to the average width - if (remainedTabs > 0) - { - int roundUpWidth = (totalWidth - totalAllocatedWidth) - (averageWidth * remainedTabs); - foreach (TabVS2005 tab in Tabs) - { - if (tab.Flag) - continue; - - tab.Flag = true; - if (roundUpWidth > 0) - { - tab.TabWidth = averageWidth + 1; - roundUpWidth --; - } - else - tab.TabWidth = averageWidth; - } - } - - // Set the X position of the tabs - int x = rectTabStrip.X + ToolWindowStripGapLeft; - foreach (TabVS2005 tab in Tabs) - { - tab.TabX = x; - x += tab.TabWidth; - } - } - - private bool CalculateDocumentTab(Rectangle rectTabStrip, ref int x, int index) - { - bool overflow = false; - - TabVS2005 tab = Tabs[index] as TabVS2005; - tab.MaxWidth = GetMaxTabWidth(index); - int width = Math.Min(tab.MaxWidth, DocumentTabMaxWidth); - if (x + width < rectTabStrip.Right || index == StartDisplayingTab) - { - tab.TabX = x; - tab.TabWidth = width; - EndDisplayingTab = index; - } - else - { - tab.TabX = 0; - tab.TabWidth = 0; - overflow = true; - } - x += width; - - return overflow; - } - - /// - /// Calculate which tabs are displayed and in what order. - /// - private void CalculateTabs_Document() - { - if (m_startDisplayingTab >= Tabs.Count) - m_startDisplayingTab = 0; - - Rectangle rectTabStrip = TabsRectangle; - - int x = rectTabStrip.X + rectTabStrip.Height / 2; - bool overflow = false; - - // Originally all new documents that were considered overflow - // (not enough pane strip space to show all tabs) were added to - // the far left (assuming not right to left) and the tabs on the - // right were dropped from view. If StartDisplayingTab is not 0 - // then we are dealing with making sure a specific tab is kept in focus. - if (m_startDisplayingTab > 0) - { - int tempX = x; - TabVS2005 tab = Tabs[m_startDisplayingTab] as TabVS2005; - tab.MaxWidth = GetMaxTabWidth(m_startDisplayingTab); - int width = Math.Min(tab.MaxWidth, DocumentTabMaxWidth); - - // Add the active tab and tabs to the left - for (int i = StartDisplayingTab; i >= 0; i--) - CalculateDocumentTab(rectTabStrip, ref tempX, i); - - // Store which tab is the first one displayed so that it - // will be drawn correctly (without part of the tab cut off) - FirstDisplayingTab = EndDisplayingTab; - - tempX = x; // Reset X location because we are starting over - - // Start with the first tab displayed - name is a little misleading. - // Loop through each tab and set its location. If there is not enough - // room for all of them overflow will be returned. - for (int i = EndDisplayingTab; i < Tabs.Count; i++) - overflow = CalculateDocumentTab(rectTabStrip, ref tempX, i); - - // If not all tabs are shown then we have an overflow. - if (FirstDisplayingTab != 0) - overflow = true; - } - else - { - for (int i = StartDisplayingTab; i < Tabs.Count; i++) - overflow = CalculateDocumentTab(rectTabStrip, ref x, i); - for (int i = 0; i < StartDisplayingTab; i++) - overflow = CalculateDocumentTab(rectTabStrip, ref x, i); - - FirstDisplayingTab = StartDisplayingTab; - } - - if (!overflow) - { - m_startDisplayingTab = 0; - FirstDisplayingTab = 0; - x = rectTabStrip.X + rectTabStrip.Height / 2; - foreach (TabVS2005 tab in Tabs) - { - tab.TabX = x; - x += tab.TabWidth; - } - } - DocumentTabsOverflow = overflow; - } - - protected internal override void EnsureTabVisible(IDockContent content) - { - if (Appearance != DockPane.AppearanceStyle.Document || !Tabs.Contains(content)) - return; - - CalculateTabs(); - EnsureDocumentTabVisible(content, true); - } - - private bool EnsureDocumentTabVisible(IDockContent content, bool repaint) - { - int index = Tabs.IndexOf(content); - TabVS2005 tab = Tabs[index] as TabVS2005; - if (tab.TabWidth != 0) - return false; - - StartDisplayingTab = index; - if (repaint) - Invalidate(); - - return true; - } - - private int GetMaxTabWidth(int index) - { - if (Appearance == DockPane.AppearanceStyle.ToolWindow) - return GetMaxTabWidth_ToolWindow(index); - else - return GetMaxTabWidth_Document(index); - } - - private int GetMaxTabWidth_ToolWindow(int index) - { - IDockContent content = Tabs[index].Content; - Size sizeString = TextRenderer.MeasureText(content.DockHandler.TabText, TextFont); - return ToolWindowImageWidth + sizeString.Width + ToolWindowImageGapLeft - + ToolWindowImageGapRight + ToolWindowTextGapRight; - } - - private int GetMaxTabWidth_Document(int index) - { - IDockContent content = Tabs[index].Content; - - int height = GetTabRectangle_Document(index).Height; - - Size sizeText = TextRenderer.MeasureText(content.DockHandler.TabText, BoldFont, new Size(DocumentTabMaxWidth, height), DocumentTextFormat); - - if (DockPane.DockPanel.ShowDocumentIcon) - return sizeText.Width + DocumentIconWidth + DocumentIconGapLeft + DocumentIconGapRight + DocumentTextGapRight; - else - return sizeText.Width + DocumentIconGapLeft + DocumentTextGapRight; - } - - private void DrawTabStrip(Graphics g) - { - if (Appearance == DockPane.AppearanceStyle.Document) - DrawTabStrip_Document(g); - else - DrawTabStrip_ToolWindow(g); - } - - private void DrawTabStrip_Document(Graphics g) - { - int count = Tabs.Count; - if (count == 0) - return; - - Rectangle rectTabStrip = TabStripRectangle; - - // Draw the tabs - Rectangle rectTabOnly = TabsRectangle; - Rectangle rectTab = Rectangle.Empty; - TabVS2005 tabActive = null; - g.SetClip(DrawHelper.RtlTransform(this, rectTabOnly)); - for (int i=0; i
children = new List(); - //TODO: Find Child forms - //foreach (TabPage tabPage in this.tabControlExtended1.TabPages) - // children.Add(tabPage.Tag as Form); - return children.ToArray(); - } - } - - public Form ActiveMdiForm - { - get - { - Form form = null; - if (this.IsMdiContainer) { - form = this.ActiveMdiChild; - } else { - //TODO: Get Active Mdi Form - //return null; - //dockPanel.ActiveContent - // if (this.tabControlExtended1.SelectedTab == null) - // return null; - // return this.tabControlExtended1.SelectedTab.Tag as Form; - } - return form; - } - } - - public void ActivateMdiForm(Form form) - { - if (this.IsMdiContainer) { - this.ActivateMdiChild(form); - } else { - //TODO: Activate the right Mdi Form - /*for (int intI = 0; intI < this.tabControlExtended1.TabCount; intI++) - { - TabPage tabPage = this.tabControlExtended1.TabPages[intI]; - EditForm f = tabPage.Tag as EditForm; - if (f == form) - { - this.tabControlExtended1.SelectedIndex = intI; - tabPage.Focus(); - break; - } - }*/ - } - } - - public void AddForm(DockContent form) - { - if (this.IsMdiContainer) { - //form.MdiParent = this; - //form.Tag = null; - //form.Show(); - //ActivateMdiChild(form); - - //TODO: add form in the right way - form.Show(dockPanel); - } else { - //form.Visible = false; - //form.MdiParent = null; - //TabPage tabPage = new TabPage(form.Text+" "); - //tabPage.BackColor = Color.White; - //for(int intI=form.Controls.Count-1;intI>=0;intI--) - // tabPage.Controls.Add(form.Controls[intI]); - //tabPage.Tag = form; - //form.Tag = tabPage; - // Was already commented out //tabPage.Controls.Add(form.Controls[0]); - - - //this.tabControlExtended1.TabPages.Add(tabPage); - //this.tabControlExtended1.SelectedTab = tabPage; - } - } - - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main(string[] args) - { - Application.EnableVisualStyles(); - Application.DoEvents(); - Application.Run(new LSLEditorForm(args)); - } - - private void Start(string[] args) - { - string fileFilterNotes = "Notecard files (*.txt)|*.txt|All files (*.*)|*.*"; - string fileFilterScripts = "Secondlife script files (*.lsl;*.lsli)|*.lsl;*.lsli|All files (*.*)|*.*"; - string fileFilterSolutions = "LSLEditor Solution File (*.sol)|*.sol|All Files (*.*)|*.*"; - - this.ConfLSL = GetXmlFromResource(Properties.Settings.Default.ConfLSL); - this.ConfCSharp = GetXmlFromResource(Properties.Settings.Default.ConfCSharp); - - this.openNoteFilesDialog.FileName = ""; - this.openNoteFilesDialog.Filter = fileFilterNotes; - this.openNoteFilesDialog.InitialDirectory = Properties.Settings.Default.WorkingDirectory; - - this.saveNoteFilesDialog.FileName = ""; - this.saveNoteFilesDialog.Filter = fileFilterNotes; - this.saveNoteFilesDialog.InitialDirectory = Properties.Settings.Default.WorkingDirectory; - - - this.openScriptFilesDialog.FileName = ""; - this.openScriptFilesDialog.Filter = fileFilterScripts; - this.openScriptFilesDialog.InitialDirectory = Properties.Settings.Default.WorkingDirectory; - - this.saveScriptFilesDialog.FileName = ""; - this.saveScriptFilesDialog.Filter = fileFilterScripts; - this.saveScriptFilesDialog.InitialDirectory = Properties.Settings.Default.WorkingDirectory; - - this.openSolutionFilesDialog.FileName = ""; - this.openSolutionFilesDialog.Filter = fileFilterSolutions; - this.openSolutionFilesDialog.InitialDirectory = Properties.Settings.Default.ProjectLocation; - this.openSolutionFilesDialog.Multiselect = false; - - - Version version = Assembly.GetExecutingAssembly().GetName().Version; - this.Text += " " + version.Major + "." + version.Minor; - - if (System.Diagnostics.Debugger.IsAttached) { - this.Text += " (ALPHA)"; - } else { - if (Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location).Contains("beta")) { - this.Text += " (BETA)"; - } - } - - //TODO: Fix close buttons on tabs - // enables close buttons on tab - //this.tabControlExtended1.SetDrawMode(); - //this.tabControlExtended1.OnTabClose += new EventHandler(tabControl1_OnTabClose); - - if (args.Length == 0) { - NewFile(); - } else { - if (args[0] == "/reset") { - NewFile(); - } else { - if (Path.GetExtension(args[0]) == ".sol") { - this.SolutionExplorer.OpenSolution(args[0]); - } else { - bool blnRun = false; - foreach (string strFileName in args) { - if (strFileName == "/run") { - blnRun = true; - continue; - } - EditForm editForm = new EditForm(this); - editForm.LoadFile(strFileName); - editForm.TextBox.OnCursorPositionChanged += new SyntaxRichTextBox.CursorPositionChangedHandler(TextBox_OnCursorPositionChanged); - AddForm(editForm); - } - if (blnRun) { - this.stopToolStripMenuItem.Enabled = true; - StartSimulator(); - } - } - } - } - } - - void TextBox_OnCursorPositionChanged(object sender, SyntaxRichTextBox.CursorPositionEventArgs e) - { - EditForm editForm = (EditForm)this.ActiveMdiForm; - string expandedWarning = ""; - if (editForm != null && Helpers.LSLIPathHelper.IsExpandedLSL(editForm.ScriptName)) - { - expandedWarning = "Warning: Editing in included sections will be erased when collapsing/saving!"; - } - - this.toolStripStatusLabel1.Text = string.Format("Ln {0,-10} Col {1,-10} Ch {2,-20} Ttl {3,-10} {4,-10} {5,-10} {6}", - e.Line, e.Column, e.Char, e.Total, e.Insert ? "INS" : "OVR", e.Caps ? "CAP" : "", expandedWarning); - } - - private XmlDocument GetXmlFromResource(string strName) - { - XmlDocument xml = new XmlDocument(); - Stream resource = Assembly.GetExecutingAssembly().GetManifestResourceStream(this.GetType().Namespace + "." + strName); - - if (resource != null) { - xml.Load(resource); - } - return xml; - } - - private void NewNotecard() - { - EditForm editForm = new EditForm(this); - editForm.IsScript = false; - editForm.FullPathName = Properties.Settings.Default.ExampleNameNotecard; - editForm.TextBox.OnCursorPositionChanged += new SyntaxRichTextBox.CursorPositionChangedHandler(TextBox_OnCursorPositionChanged); - editForm.Dirty = false; - AddForm(editForm); - } - - private void NewFile(bool isLSLI = false) - { - EditForm editForm = new EditForm(this); - editForm.SourceCode = Helpers.GetTemplate.Source(); - editForm.TextBox.FormatDocument(); - editForm.TextBox.ClearUndoStack(); - if(isLSLI) - { - editForm.FullPathName = Properties.Settings.Default.ExampleNameLSLI; - } else - { - editForm.FullPathName = Properties.Settings.Default.ExampleName; - } - editForm.TextBox.OnCursorPositionChanged += new SyntaxRichTextBox.CursorPositionChangedHandler(TextBox_OnCursorPositionChanged); - AddForm(editForm); - } - - public EditForm OpenFile(string strPath, Guid guid, bool blnIsScript) - { - EditForm editForm = null; - if (this.Children.Length > 0) { - editForm = this.Children[0] as EditForm; - if (editForm != null && !editForm.IsDisposed) { - if (editForm.ScriptName != Properties.Settings.Default.ExampleName || editForm.Dirty) { - editForm = null; - } - } - } - - if (editForm == null) { - editForm = new EditForm(this); - editForm.TextBox.OnCursorPositionChanged += new SyntaxRichTextBox.CursorPositionChangedHandler(TextBox_OnCursorPositionChanged); - AddForm(editForm); - } - - editForm.guid = guid; - editForm.IsScript = blnIsScript; - editForm.LoadFile(strPath); - - // 23 oct 2007 - ActivateMdiForm(editForm); - - UpdateRecentFileList(strPath); - - if(Helpers.LSLIPathHelper.IsExpandedLSL(editForm.Text)) - { - editForm.Text = Helpers.LSLIPathHelper.GetExpandedTabName(editForm.Text); - } - - return editForm; - } - - public void OpenFile(string strPath, Guid guid) - { - OpenFile(strPath, guid, true); - } - - private void OpenFile(string strFileName) - { - OpenFile(strFileName, Guid.Empty, true); - } - - private string ClippedPath(string strPath) - { - string strResult = strPath; - if (Properties.Settings.Default.PathClipLength < strPath.Length) { - string strRoot = Path.GetPathRoot(strPath); - string strTmp = ""; - while (strTmp.Length < Properties.Settings.Default.PathClipLength) { - strTmp = Path.Combine(Path.GetFileName(strPath), strTmp); - strPath = Path.GetDirectoryName(strPath); - if (strPath == strRoot || strPath == null) { - break; - } - } - strResult = Path.Combine(Path.Combine(strRoot, "..."), strTmp); - } - return strPath; - } - - private void InitRecentFileList() - { - if (Properties.Settings.Default.RecentFileList == null) { - Properties.Settings.Default.RecentFileList = new System.Collections.Specialized.StringCollection(); - } - int intLen = Properties.Settings.Default.RecentFileList.Count; - for (int intI = 0; intI < intLen; intI++) { - ToolStripMenuItem tsmi = new ToolStripMenuItem(ClippedPath(Properties.Settings.Default.RecentFileList[intI])); - tsmi.Tag = Properties.Settings.Default.RecentFileList[intI]; - this.recentFileToolStripMenuItem.DropDownItems.Add(tsmi); - } - } - - private void InitRecentProjectList() - { - if (Properties.Settings.Default.RecentProjectList == null) { - Properties.Settings.Default.RecentProjectList = new System.Collections.Specialized.StringCollection(); - } - int intLen = Properties.Settings.Default.RecentProjectList.Count; - for (int intI = 0; intI < intLen; intI++) { - ToolStripMenuItem tsmi = new ToolStripMenuItem(ClippedPath(Properties.Settings.Default.RecentProjectList[intI])); - tsmi.Tag = Properties.Settings.Default.RecentProjectList[intI]; - this.recentProjectToolStripMenuItem.DropDownItems.Add(tsmi); - } - } - - private void InitPluginsList() - { - // erase old plugins - for (int intI = this.toolsStripMenuItem.DropDownItems.Count - 1; intI > 0; intI--) { - this.toolsStripMenuItem.DropDownItems.RemoveAt(intI); - } - - if (Properties.Settings.Default.Plugins != null) { - ToolStripMenuItem tsmi; - EventHandler handler = new EventHandler(this.PluginsHandler); - foreach (string strPlugin in Properties.Settings.Default.Plugins) { - if (strPlugin.ToLower().Contains("lslint")) { - tsmi = new ToolStripMenuItem(strPlugin, null, handler, Keys.F7); - } else { - tsmi = new ToolStripMenuItem(strPlugin, null, handler); - } - this.toolsStripMenuItem.DropDownItems.Add(tsmi); - } - } - } - - private void UpdateRecentFileList(string strPath) - { - ToolStripMenuItem tsmi = new ToolStripMenuItem(ClippedPath(strPath)); - tsmi.Tag = strPath; - this.recentFileToolStripMenuItem.DropDownItems.Insert(0, tsmi); - Properties.Settings.Default.RecentFileList.Insert(0, strPath); - int intListLen = Properties.Settings.Default.RecentFileList.Count; - for (int intI = intListLen - 1; intI > 0; intI--) { - if (strPath.ToLower() == Properties.Settings.Default.RecentFileList[intI].ToLower()) { - this.recentFileToolStripMenuItem.DropDownItems.RemoveAt(intI); - Properties.Settings.Default.RecentFileList.RemoveAt(intI); - } - } - int intLen = Properties.Settings.Default.RecentFileMax; - if (this.recentFileToolStripMenuItem.DropDownItems.Count > intLen) { - this.recentFileToolStripMenuItem.DropDownItems.RemoveAt(intLen); - Properties.Settings.Default.RecentFileList.RemoveAt(intLen); - } - } - - public void UpdateRecentProjectList(string strPath, bool AddToList) - { - ToolStripMenuItem tsmi = new ToolStripMenuItem(ClippedPath(strPath)); - tsmi.Tag = strPath; - - if (AddToList) { - this.recentProjectToolStripMenuItem.DropDownItems.Insert(0, tsmi); - Properties.Settings.Default.RecentProjectList.Insert(0, strPath); - } - - int intListLen = Properties.Settings.Default.RecentProjectList.Count; - for (int intI = intListLen - 1; intI > 0; intI--) { - if (strPath.ToLower() == Properties.Settings.Default.RecentProjectList[intI].ToLower()) { - this.recentProjectToolStripMenuItem.DropDownItems.RemoveAt(intI); - Properties.Settings.Default.RecentProjectList.RemoveAt(intI); - } - } - - int intLen = Properties.Settings.Default.RecentProjectMax; - if (this.recentProjectToolStripMenuItem.DropDownItems.Count > intLen) { - this.recentProjectToolStripMenuItem.DropDownItems.RemoveAt(intLen); - Properties.Settings.Default.RecentProjectList.RemoveAt(intLen); - } - - } - - private void ReadNoteFiles() - { - this.openNoteFilesDialog.Multiselect = true; - if (this.openNoteFilesDialog.ShowDialog() == DialogResult.OK) { - foreach (string strFileName in this.openNoteFilesDialog.FileNames) { - if (File.Exists(strFileName)) { - OpenFile(strFileName, Guid.NewGuid(), false); - UpdateRecentFileList(strFileName); - } - } - } - } - - private void ReadScriptFiles() - { - this.openScriptFilesDialog.Multiselect = true; - if (this.openScriptFilesDialog.ShowDialog() == DialogResult.OK) { - foreach (string strFileName in this.openScriptFilesDialog.FileNames) { - if (File.Exists(strFileName)) { - OpenFile(strFileName, Guid.NewGuid()); - UpdateRecentFileList(strFileName); - } - } - } - } - - private void importExampleToolStripMenuItem_Click(object sender, EventArgs e) - { - Browser browser = GetBrowser(); - browser.ShowWebBrowser("Import Examples", Properties.Settings.Default.Examples); - } - - /*** - * Return value indicate whether file was saved or not. - */ - public bool SaveFile(EditForm editForm, bool blnSaveAs) - { - DialogResult dialogresult = DialogResult.OK; - if (editForm.FullPathName == Properties.Settings.Default.ExampleName || blnSaveAs) { - SaveFileDialog saveDialog = editForm.IsScript ? this.saveScriptFilesDialog : this.saveNoteFilesDialog; - - // Save as LSLI when it's an expanded LSL - if (Helpers.LSLIPathHelper.IsExpandedLSL(editForm.ScriptName)) - { - saveDialog.FileName = Helpers.LSLIPathHelper.CreateCollapsedScriptName(editForm.ScriptName); - } else - { - saveDialog.FileName = editForm.ScriptName; - } - //saveDialog.FileName = editForm.FullPathName; - string strExtension = Path.GetExtension(editForm.FullPathName); - dialogresult = saveDialog.ShowDialog(); - if (dialogresult == DialogResult.OK) { - editForm.FullPathName = saveDialog.FileName; - } - } - if (dialogresult == DialogResult.OK) { - editForm.SaveCurrentFile(); - UpdateRecentFileList(editForm.FullPathName); - return true; - } - return false; - } - - // save file of active MDI child, if any - private bool SaveActiveFile() - { - bool blnResult = false; - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - // save as!! - // TODO: Refactor saveDialog to be a property of the form - SaveFileDialog saveDialog = editForm.IsScript ? this.saveScriptFilesDialog : this.saveNoteFilesDialog; - blnResult = SaveFile(editForm, true); - } - return blnResult; - } - - private void saveToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - editForm.SaveCurrentFile(); - this.Focus(); - } - } - - private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) - { - SaveActiveFile(); - } - - private Browser GetBrowser() - { - if (this.browser == null || this.browser.IsDisposed) { - this.browser = new Browser(this); - if (Properties.Settings.Default.BrowserLocation != Point.Empty) { - this.browser.StartPosition = FormStartPosition.Manual; - this.browser.Location = Properties.Settings.Default.BrowserLocation; - } - if (Properties.Settings.Default.BrowserSize != Size.Empty) { - this.browser.Size = Properties.Settings.Default.BrowserSize; - } - this.browser.SizeChanged += new EventHandler(browser_SizeChanged); - this.browser.LocationChanged += new EventHandler(browser_LocationChanged); - if (this.browserInWindowToolStripMenuItem.Checked) { - this.browser.MdiParent = null; - this.browser.Show(); - } else { - AddForm(this.browser); - //this.browser.MdiParent = this; - } - } - this.browser.Activate(); - - if (this.IsMdiContainer) { - this.ActivateMdiChild(this.browser); - } else { - //TODO: find browser in childs - /*for (int intI = 0; intI < this.tabControlExtended1.TabCount; intI++) - { - TabPage tabPage = this.tabControlExtended1.TabPages[intI]; - Browser b = tabPage.Tag as Browser; - if (b == this.browser) - { - this.tabControlExtended1.SelectedIndex = intI; - tabPage.Focus(); - break; - } - }*/ - } - - return this.browser; - } - - void browser_LocationChanged(object sender, EventArgs e) - { - Properties.Settings.Default.BrowserLocation = browser.Location; - } - - void browser_SizeChanged(object sender, EventArgs e) - { - Properties.Settings.Default.BrowserSize = browser.Size; - } - - #region printing - private void pageSettingsToolStripMenuItem_Click(object sender, EventArgs e) - { - // Initialize the dialog's PrinterSettings property to hold user - // defined printer settings. - pageSetupDialog1.PageSettings = new System.Drawing.Printing.PageSettings(); - - // Initialize dialog's PrinterSettings property to hold user - // set printer settings. - pageSetupDialog1.PrinterSettings = new System.Drawing.Printing.PrinterSettings(); - - //Do not show the network in the printer dialog. - pageSetupDialog1.ShowNetwork = false; - - //Show the dialog storing the result. - if (pageSetupDialog1.ShowDialog() != DialogResult.OK) { - pageSetupDialog1.PageSettings = null; - pageSetupDialog1.PrinterSettings = null; - } - } - - private void printPreviewtoolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - printerHelp(editForm); - printer.PrintPreviewEditForm(editForm); - } - } - - private void printToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - printerHelp(editForm); - printer.PrintEditForm(editForm); - } - } - - private void printerHelp(EditForm editForm) - { - printer = new Helpers.PrinterHelper(pageSetupDialog1); - printer.Title = editForm.FullPathName; - printer.SubTitle = DateTime.Now.ToString("s"); - printer.Footer = this.Text; - } - #endregion - - private void copyToClipboardToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - editForm.TextBox.ToClipBoard(); - } - } - - private void exitToolStripMenuItem_Click(object sender, EventArgs e) - { - // Check if a LSLI or expanded LSL open is, and close that one as well - this.Close(); - } - - private void undoToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - editForm.TextBox.Undo(); - } - } - - private void redoToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - editForm.TextBox.Redo(); - } - } - - private void cutToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - editForm.TextBox.Cut(); - } - } - - private void copyToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - editForm.TextBox.Copy(); - } - } - - private void pasteToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - editForm.TextBox.Paste(); - } - } - - private void deleteToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - editForm.TextBox.Delete(); - } - } - - private void selectAllToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - editForm.TextBox.SelectAll(); - } - } - - private void formatDocumentToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - editForm.TextBox.FormatDocument(); - } - } - - private void formatSelectedTextToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - editForm.TextBox.AutoFormatSelectedText(); - } - } - - - private void wordWrapToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - ToolStripMenuItem tsmi = sender as ToolStripMenuItem; - if (tsmi != null) { - tsmi.Checked = !tsmi.Checked; - editForm.TextBox.WordWrap = tsmi.Checked; - } - } - - } - - private void startToolStripMenuItem_Click(object sender, EventArgs e) - { - this.stopToolStripMenuItem.Enabled = true; - StartSimulator(); - } - - private void stopToolStripMenuItem_Click(object sender, EventArgs e) - { - this.stopToolStripMenuItem.Enabled = false; - StopSimulator(); - } - - private void aboutToolStripMenuItem_Click(object sender, EventArgs e) - { - About about = new About(this); - about.ShowDialog(this); - } - - public void OnDirtyChanged(bool blnEnableSave) - { - this.saveToolStripMenuItem.Enabled = blnEnableSave; - } - - private void SetFontsOnWindows() - { - Font listBoxFont; - Font toolTipFont; - - if (Properties.Settings.Default.FontEditor == null) { - Properties.Settings.Default.FontEditor = new Font("Courier New", 9.75F, FontStyle.Regular); - } - - if (Properties.Settings.Default.FontTooltips == null) { - Properties.Settings.Default.FontTooltips = new Font(SystemFonts.MessageBoxFont.Name, 9.75F, FontStyle.Regular); - } - - toolTipFont = Properties.Settings.Default.FontTooltips; - listBoxFont = Properties.Settings.Default.FontEditor; - - this.TooltipMouse.Font = toolTipFont; - this.TooltipKeyboard.Font = toolTipFont; - this.TooltipListBox.Font = toolTipFont; - this.GListBoxWindow.Font = listBoxFont; - - foreach (Form form in this.Children) { - EditForm editForm = form as EditForm; - if (editForm == null || editForm.IsDisposed) { - continue; - } - editForm.SetFont(); - } - } - - private void SetupChildForms() - { - Font listBoxFont = Properties.Settings.Default.FontEditor; - Font toolTipFont = Properties.Settings.Default.FontTooltips; - - this.TooltipMouse = new TooltipWindow(this); - this.TooltipKeyboard = new TooltipWindow(this); - this.TooltipListBox = new TooltipWindow(this); - this.GListBoxWindow = new GListBoxWindow(this); - - SetFontsOnWindows(); - - //TODO: Fix new file drop down - //this.solutionExplorer1.parent = this; - //this.solutionExplorer1.CreateNewFileDrowDownMenu(this.addNewFileToolStripMenuItem); - this.solutionExplorerToolStripMenuItem.Checked = Properties.Settings.Default.ShowSolutionExplorer; - ShowSolutionExplorer(this.solutionExplorerToolStripMenuItem.Checked); - - this.llDialogForms = new List(); - this.llTextBoxForms = new List(); - this.PermissionForms = new List(); - - this.TooltipMouse.Tag = ""; - this.TooltipKeyboard.Tag = ""; - this.TooltipListBox.Tag = ""; - this.TooltipListBox.XOffset = 200; // TODO, afhankelijk van toegepaste font - this.GListBoxWindow.Tag = ""; - - // This order equals with the KeyWordTypeEnum in KeyWords.cs - ImageList imageList = new ImageList(); - imageList.Images.Add(new Bitmap(this.GetType(), "Images.Unknown.gif")); - imageList.Images.Add(new Bitmap(this.GetType(), "Images.Functions.gif")); - imageList.Images.Add(new Bitmap(this.GetType(), "Images.Events.gif")); - imageList.Images.Add(new Bitmap(this.GetType(), "Images.Constants.gif")); - imageList.Images.Add(new Bitmap(this.GetType(), "Images.Class.gif")); - imageList.Images.Add(new Bitmap(this.GetType(), "Images.Vars.gif")); - imageList.Images.Add(new Bitmap(this.GetType(), "Images.Properties.gif")); - imageList.Images.Add(new Bitmap(this.GetType(), "Images.States.gif")); - - this.GListBoxWindow.GListBox.ImageList = imageList; - // this.tvOutline.ImageList = imageList; - - this.Move += new EventHandler(LSLEditorForm_SetPosition); - this.Resize += new EventHandler(LSLEditorForm_SetPosition); - - this.GListBoxWindow.GListBox.DoubleClick += new EventHandler(GListBox_DoubleClick); - this.GListBoxWindow.GListBox.SelectedIndexChanged += new EventHandler(GListBox_SelectedIndexChanged); - } - - void GListBox_SelectedIndexChanged(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - editForm.TextBox.ShowTooltipOnListBox(); - } - } - - void GListBox_DoubleClick(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - editForm.TextBox.InsertSelectedWord(); - } - - } - - private void LSLEditorForm_SetPosition(object sender, EventArgs e) - { - foreach (PermissionsForm pf in this.PermissionForms) { - pf.Top = this.Top + 30; - pf.Left = this.Right - pf.Width - 5; - } - foreach (llDialogForm df in this.llDialogForms) { - df.Top = this.Top + 30; - df.Left = this.Right - df.Width - 5; - } - foreach (llTextBoxForm tbf in this.llTextBoxForms) { - tbf.Left = this.Left + this.Width / 2 - tbf.Width / 2; - tbf.Top = this.Top + this.Height / 2 - tbf.Height / 2; - } - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - editForm.TextBox.SetPosition(Screen.PrimaryScreen.WorkingArea); - } - } - - private void LoadProperties() - { - try { - //TODO: hmmm? - //this.tabControlExtended1.Visible = false; - - // this.panel1.Visible = false; // Simulator - // this.panel2.Visible = false; // right pane - - //string strVersion = Properties.Settings.Default.Version; - - Size size = Properties.Settings.Default.LSLEditorSize; - Point location = Properties.Settings.Default.LSLEditorLocation; - Rectangle rect = new Rectangle(location, size); - if (Screen.PrimaryScreen.WorkingArea.Contains(rect)) { - if (size.Width > 100 && size.Height > 100) { - this.Location = location; - this.Size = size; - } - } - - this.browserInWindowToolStripMenuItem.Checked = Properties.Settings.Default.BrowserInWindow; - - this.WikiSepBrowserstoolStripMenuItem.Checked = Properties.Settings.Default.WikiSeperateBrowser; - - } catch (Exception exception) { - MessageBox.Show("Error Properties: " + OopsFormatter.ApplyFormatting(exception.Message), "Oops, but continue"); - } - } - - // TODO cleanup multiple return points - public bool CloseAllOpenWindows() - { - foreach (Form form in this.Children) { - EditForm editForm = form as EditForm; - if (editForm == null || editForm.IsDisposed) { - continue; - } - ActivateMdiForm(editForm); - if (editForm.Dirty) { - string scriptToSave = editForm.ScriptName; - if(Helpers.LSLIPathHelper.IsExpandedLSL(editForm.ScriptName)) - { - // Expanded scripts will always be saved as LSLI's - scriptToSave = Helpers.LSLIPathHelper.CreateCollapsedScriptName(scriptToSave); - } - - DialogResult dialogResult = MessageBox.Show(this, @"Save """ + scriptToSave + @"""?", "File has changed", MessageBoxButtons.YesNoCancel); - if (dialogResult == DialogResult.Cancel) { - return false; - } - if (dialogResult == DialogResult.Yes) { - // TODO: Refactor saveDialog to be a property of the form - SaveFileDialog saveDialog = editForm.IsScript ? this.saveScriptFilesDialog : this.saveNoteFilesDialog; - if (!SaveFile(editForm, false)) { - return false; - } - } - - if (dialogResult == DialogResult.No) { - editForm.Dirty = false; - } - - // Delete expanded file when closing - string expandedFile = Helpers.LSLIPathHelper.CreateExpandedPathAndScriptName(editForm.FullPathName); - if (File.Exists(expandedFile)) - { - File.Delete(expandedFile); - } - } - CloseActiveWindow(); - } - return true; - } - - // TODO cleanup multiple return points - private void LSLEditorForm_FormClosing(object sender, FormClosingEventArgs e) - { - try { - Properties.Settings.Default.LSLEditorSize = this.Size; - Properties.Settings.Default.LSLEditorLocation = this.Location; - - Properties.Settings.Default.Save(); - - if (this.IsMdiContainer) { - // this is set by any EditForm close - e.Cancel = this.CancelClosing; - return; - } - - if (this.SolutionExplorer != null & !this.SolutionExplorer.IsDisposed) { - this.SolutionExplorer.CloseSolution(); - } - - e.Cancel = !CloseAllOpenWindows(); - - } catch { } - } - - - private void helpKeywordToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - Point dummy; - string strKeyWord = editForm.TextBox.GetCurrentKeyWord(false, out dummy); - ShowHelpOnKeyWord(strKeyWord); - } - } - - // TODO cleanup multiple return points - private void ShowHelpOnKeyWord(string strKeyWord) - { - if (Properties.Settings.Default.HelpOffline) { - string strHelpFile = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), Properties.Settings.Default.HelpOfflineFile); - if (!File.Exists(strHelpFile)) { - if (MessageBox.Show("No Offline help, use Online Wiki?", "Offline Help fails", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK) - return; - } else { - if (strKeyWord == "") - Help.ShowHelp(this, strHelpFile); - else - Help.ShowHelp(this, strHelpFile, HelpNavigator.KeywordIndex, strKeyWord); - return; - } - } - - string strUrl = Properties.Settings.Default.Help + strKeyWord; - - if (strKeyWord == "") { - strKeyWord = "Help"; - } - - if (Properties.Settings.Default.WikiSeperateBrowser) { - System.Diagnostics.Process.Start(strUrl); - } else { - Browser browser = GetBrowser(); - browser.ShowWebBrowser(strKeyWord, strUrl); - } - } - - private void indexToolStripMenuItem_Click(object sender, EventArgs e) - { - string strKeyWord = "HomePage"; - ShowHelpOnKeyWord(strKeyWord); - } - - private void checkForUpdatesToolStripMenuItem_Click(object sender, EventArgs e) - { - Browser browser = GetBrowser(); - string strVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); - browser.ShowWebBrowser("Check for Updates", Properties.Settings.Default.Update + strVersion); - } - - private void browserInWindowToolStripMenuItem_Click(object sender, EventArgs e) - { - this.browserInWindowToolStripMenuItem.Checked = !this.browserInWindowToolStripMenuItem.Checked; - Properties.Settings.Default.BrowserInWindow = this.browserInWindowToolStripMenuItem.Checked; - } - - private void InitSyntaxError() - { - // information out of every script - if (this.SyntaxErrors == null) { - this.SyntaxErrors = new SyntaxError(); - this.SyntaxErrors.OnSyntaxError += new SyntaxError.SyntaxErrorHandler(SyntaxErrors_OnSyntaxError); - this.SyntaxErrors.Dock = DockStyle.Fill; - } - this.SyntaxErrors.Clear(); - } - - private void SyntaxErrors_OnSyntaxError(object sender, SyntaxError.SyntaxErrorEventArgs e) - { - EditForm editForm = null; - foreach (Form form in this.Children) { - editForm = form as EditForm; - if (editForm == null || editForm.IsDisposed) { - continue; - } - - if (editForm.FullPathName == e.FullPathName) { - if (!editForm.Visible) - { - if(Helpers.LSLIPathHelper.IsExpandedLSL(editForm.ScriptName) && GetForm(Helpers.LSLIPathHelper.CreateCollapsedScriptName(editForm.ScriptName)).Visible) - { - //SetReadOnly((EditForm) GetForm(Helpers.LSLIPathHelper.CreateCollapsedScriptName(editForm.ScriptName)), true); // Doesn't seem to work? Why? - EditForm LSLIForm = (EditForm)GetForm(Helpers.LSLIPathHelper.CreateCollapsedScriptName(editForm.ScriptName)); - LSLIForm.Close(); - } - editForm.Show(); - } - ActivateMdiForm(editForm); - editForm.TextBox.Goto(e.Line, e.Char); - editForm.Focus(); - return; - } - } - editForm = OpenFile(e.FullPathName, e.EditFormGuid, e.IsScript); - editForm.TextBox.Goto(e.Line, e.Char); - editForm.Focus(); - } - - private void StartSimulator() - { - if (SyntaxCheck(true)) { - this.SimulatorConsole = new SimulatorConsole(this.SolutionExplorer, this.Children); - - this.SimulatorConsole.Show(dockPanel); - - //TODO: Show Simulator Console somewhere - //this.panel1.Controls.Clear(); - //this.panel1.Controls.Add(this.SimulatorConsole); - //this.panel1.Visible = true; - //this.splitter1.SplitPosition = Properties.Settings.Default.SimulatorSize.Height; - } - } - - public void StopSimulator() - { - //TODO: Hide simulator? Or we could keep it like the debug output in VS - //this.panel1.Visible = false; - if (this.SimulatorConsole != null) { - this.SimulatorConsole.Stop(); - this.SimulatorConsole.Dispose(); - } - this.SimulatorConsole = null; - } - - /// - /// When running an LSLI script, a related expanded LSL script or LSLI readonly may be opened. These should not be ran/checked for syntax. - /// An LSLI script should also first be expanded to an LSL script before it checks for syntax. - /// - /// - /// - private EditForm SelectEditFormToRun(EditForm editForm) - { - if (Helpers.LSLIPathHelper.IsLSLI(editForm.ScriptName) && editForm.Visible && !IsReadOnly(editForm)) - { - // Open and hide or select the expanded LSLI form - EditForm expandedForm = (EditForm)GetForm(Helpers.LSLIPathHelper.GetExpandedTabName(editForm.ScriptName)); - if (expandedForm == null) - { - // Create the LSL - ExpandForm(editForm); - expandedForm = (EditForm)GetForm(Helpers.LSLIPathHelper.GetExpandedTabName(editForm.ScriptName)); - editForm = expandedForm; - } - else - { - ExpandForm(editForm); - editForm.Close(); - } - } - else if (Helpers.LSLIPathHelper.IsExpandedLSL(editForm.ScriptName)) - { - // NOTE: WAAROM COLLAPSED HIJ HEM EERST? ZO VERWIJDERD HIJ DE VERANDERINGEN IN DE EXPANDED INCLUDE SECTIONS - //CollapseForm(editForm); - //EditForm collapsedForm = (EditForm)GetForm(Helpers.LSLIPathHelper.CreateCollapsedScriptName(editForm.ScriptName)); - //ExpandForm(collapsedForm); - EditForm expandedForm = (EditForm)GetForm(Helpers.LSLIPathHelper.GetExpandedTabName(editForm.ScriptName)); - editForm = expandedForm; - } - return editForm; - } - - private bool SyntaxCheck(bool Silent) - { - //TODO: What do we hide on SyntaxCheck? - //this.panel1.Visible = false; - InitSyntaxError(); - - foreach (Form form in this.Children) { - EditForm editForm = form as EditForm; - editForm = SelectEditFormToRun(editForm); - - if (editForm == null || editForm.IsDisposed || !editForm.Visible || IsReadOnly(editForm)) { - continue; - } - if (Properties.Settings.Default.AutoSaveOnDebug) { - if (editForm.Dirty) { - editForm.SaveCurrentFile(); - } - } - editForm.SyntaxCheck(); - } - - bool blnResult = false; - if (this.SyntaxErrors.HasErrors) { - this.SyntaxErrors.Show(dockPanel); - //TODO: Show errors somewhere in an output - //this.panel1.Controls.Clear(); - //this.panel1.Controls.Add(this.SyntaxErrors); - //this.panel1.Visible = true; - //this.splitter1.SplitPosition = Properties.Settings.Default.SimulatorSize.Height; - } else { - if (!Silent) { - MessageBox.Show("LSL Syntax seems OK", "LSL Syntax Checker", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - blnResult = true; - } - return blnResult; - } - - private void releaseNotesToolStripMenuItem_Click(object sender, EventArgs e) - { - Browser browser = GetBrowser(); - string strExeFileName = Path.GetFileName(Assembly.GetExecutingAssembly().CodeBase); - browser.ShowWebBrowser("Release notes", "res://" + strExeFileName + "/" + Properties.Settings.Default.ReleaseNotes); - - } - - void findForm_LocationChanged(object sender, EventArgs e) - { - Properties.Settings.Default.FindLocation = findWindow.Location; - } - - void gotoForm_LocationChanged(object sender, EventArgs e) - { - Properties.Settings.Default.GotoLocation = GotoWindow.Location; - } - - private void splitter1_SplitterMoved(object sender, SplitterEventArgs e) - { - //TODO: Splitter moved? I Think this is depricated - //if( this.splitter1.SplitPosition>50) - // Properties.Settings.Default.SimulatorSize = new Size(this.splitter1.Width, this.splitter1.SplitPosition); - } - - void tabControl1_SelectedIndexChanged(object sender, EventArgs e) - { - this.GListBoxWindow.Visible = false; - this.TooltipMouse.Visible = false; - this.TooltipKeyboard.Visible = false; - this.TooltipListBox.Visible = false; - } - - private void tabControlExtended1_MouseDown(object sender, MouseEventArgs e) - { - TabControl tabControl = sender as TabControl; - if (tabControl != null) { - if (e.Button == MouseButtons.Right) { - for (int intI = 0; intI < tabControl.TabCount; intI++) { - Rectangle rt = tabControl.GetTabRect(intI); - if (e.X > rt.Left && e.X < rt.Right - && e.Y > rt.Top && e.Y < rt.Bottom) { - this.contextMenuStrip1.Tag = intI; - this.contextMenuStrip1.Show(tabControl, new Point(e.X, e.Y)); - } - } - } - } - } - - private bool IsInSolutionExplorer(Guid guid) - { - bool blnResult = true; - if (this.SolutionExplorer == null || this.SolutionExplorer.IsDisposed || this.SolutionExplorer.GetKey(guid) == null) { - blnResult = false; - } - return blnResult; - - } - - private void CloseTab(int intTabToDelete) - { - //TODO: Find a new way for closing tabs - /* - // reset toolstrip information - this.toolStripStatusLabel1.Text = ""; - - //int intTabToDelete = (int)this.contextMenuStrip1.Tag; - - if (intTabToDelete >= this.tabControlExtended1.TabCount) - return; - - TabPage tabPage = this.tabControlExtended1.TabPages[intTabToDelete]; - - if (tabPage.Text.Contains("Browser")) - { - this.browser.Dispose(); - this.browser = null; - GC.Collect(); - } - - EditForm editForm = tabPage.Tag as EditForm; - if (editForm != null && !editForm.IsDisposed) - { - if (editForm.Dirty) - { - this.ActivateMdiForm(editForm); - DialogResult dialogResult = MessageBox.Show(this, @"Save """ + editForm.ScriptName + @"""?", "File has changed", MessageBoxButtons.YesNoCancel); - if (dialogResult == DialogResult.Cancel) - return; - if (dialogResult == DialogResult.Yes) - { - if(IsInSolutionExplorer(editForm.guid)) - { - editForm.SaveCurrentFile(); - } - else - { - // save as - if(!SaveFile(editForm, true)) - return; - } - } - } - editForm.Dispose(); - editForm = null; - } - this.tabControlExtended1.TabPages[intTabToDelete].Dispose(); - */ - GC.Collect(); - } - - private void tabControl1_OnTabClose(object sender, EventArgs e) - { - int intTabToDelete = (int)sender; - CloseTab(intTabToDelete); - } - - private void closeTabToolStripMenuItem_Click(object sender, EventArgs e) - { - int intTabToDelete = (int)this.contextMenuStrip1.Tag; - CloseTab(intTabToDelete); - } - - private void toolStripMenuItem1_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - if (GotoWindow == null || GotoWindow.IsDisposed) { - GotoWindow = new GotoWindow(this); - if (Properties.Settings.Default.GotoLocation != Point.Empty) { - GotoWindow.StartPosition = FormStartPosition.Manual; - GotoWindow.Location = Properties.Settings.Default.GotoLocation; - } - GotoWindow.LocationChanged += new EventHandler(gotoForm_LocationChanged); - } - GotoWindow.Show(this); - } - } - - - public void CloseActiveWindow() - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (this.IsMdiContainer) { - if (this.ActiveMdiForm != null && !this.ActiveMdiForm.IsDisposed) { - this.ActiveMdiForm.Close(); - } - } else { - //TODO: Find a new way - /* - int intTabToClose = this.tabControlExtended1.SelectedIndex; - if (intTabToClose >= 0) - CloseTab(intTabToClose); - - */ - } - } - - private void closeActiveWindowToolStripMenuItem_Click(object sender, EventArgs e) - { - CloseActiveWindow(); - } - - private void WikiSepBrowserstoolStripMenuItem_Click(object sender, EventArgs e) - { - WikiSepBrowserstoolStripMenuItem.Checked = !WikiSepBrowserstoolStripMenuItem.Checked; - Properties.Settings.Default.WikiSeperateBrowser = this.WikiSepBrowserstoolStripMenuItem.Checked; - } - - private void LSLEditorForm_Load(object sender, EventArgs e) - { - LoadProperties(); - if (Properties.Settings.Default.CheckForUpdates) { - updateApplicationForm = new UpdateApplicationForm(); - updateApplicationForm.Icon = this.Icon; - updateApplicationForm.OnUpdateAvailable += new EventHandler(updateApplicationForm_OnUpdateAvailable); - updateApplicationForm.CheckForUpdate(false); - } - } - - void updateApplicationForm_OnUpdateAvailable(object sender, EventArgs e) - { - updateApplicationForm.ShowDialog(this); - } - - private void commentInToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - editForm.TextBox.MultiLineComment(true); - } - - } - - private void uncommentingSelectedTextToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - editForm.TextBox.MultiLineComment(false); - } - - } - - private void FindandReplace(bool blnReplaceAlso) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - if (findWindow == null || findWindow.IsDisposed) { - findWindow = new FindWindow(this); - findWindow.LocationChanged += new EventHandler(findForm_LocationChanged); - } - Rectangle rect = new Rectangle(this.Location, this.Size); - if (rect.Contains(Properties.Settings.Default.FindLocation)) { - findWindow.Location = Properties.Settings.Default.FindLocation; - } else { - findWindow.Location = this.Location; - } - Point dummy; - findWindow.ReplaceAlso = blnReplaceAlso; - findWindow.KeyWord = editForm.TextBox.GetCurrentKeyWord(false, out dummy); - if (findWindow.Visible == false) { - findWindow.Show(this); - } - findWindow.FindFocus(); - } - } - - private void replaceToolStripMenuItem_Click(object sender, EventArgs e) - { - FindandReplace(true); - } - - private void findToolStripMenuItem_Click(object sender, EventArgs e) - { - FindandReplace(false); - } - - private void findNextToolStripMenuItem_Click(object sender, EventArgs e) - { - if (findWindow != null && !findWindow.IsDisposed) { - findWindow.Find(); - } - } - - - public void ShowSolutionExplorer(bool blnVisible) - { - //TODO: We need another way to activate the Solution Explorer - //this.panel2.Visible = blnVisible; - if (blnVisible) { - m_SolutionExplorer.Show(dockPanel); - } else { - m_SolutionExplorer.Hide(); - } - this.solutionExplorerToolStripMenuItem.Checked = blnVisible; - //this.tabControlExtended1.Refresh(); - } - - private void solutionExplorerToolStripMenuItem_Click(object sender, EventArgs e) - { - this.solutionExplorerToolStripMenuItem.Checked = !this.solutionExplorerToolStripMenuItem.Checked; - Properties.Settings.Default.ShowSolutionExplorer = this.solutionExplorerToolStripMenuItem.Checked; - ShowSolutionExplorer(this.solutionExplorerToolStripMenuItem.Checked); - } - - private void newFileToolStripMenuItem_Click(object sender, EventArgs e) - { - NewFile(); - } - - public void SolutionItemsFileMenu(bool blnVisible) - { - this.addToolStripMenuItem.Visible = blnVisible; - this.addToolStripSeparator.Visible = blnVisible; - this.closeSolutiontoolStripMenuItem.Enabled = blnVisible; - this.addNewObjecttoolStripMenuItem.Enabled = blnVisible; - this.addNewFileToolStripMenuItem.Enabled = blnVisible; - this.newProjectToolStripMenuItem.Enabled = !blnVisible; - } - - private void openNoteFilesToolStripMenuItem_Click(object sender, EventArgs e) - { - ReadNoteFiles(); - } - - private void openScriptFilesToolStripMenuItem_Click(object sender, EventArgs e) - { - ReadScriptFiles(); - } - - private void closeFileToolStripMenuItem_Click(object sender, EventArgs e) - { - CloseActiveWindow(); - } - - private void recentFileToolStripMenuItem_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) - { - ToolStripMenuItem tsmi = e.ClickedItem as ToolStripMenuItem; - if (tsmi != null) { - this.fileStripMenuItem.HideDropDown(); - - string strPath = tsmi.Tag.ToString(); - OpenFile(strPath, Guid.NewGuid()); - UpdateRecentFileList(strPath); - } - } - - private void makeBugReporttoolStripMenuItem_Click(object sender, EventArgs e) - { - BugReport.BugReportForm bugReport = new BugReport.BugReportForm(this); - bugReport.Show(this); - } - - private void toolStripMenuItem4_Click(object sender, EventArgs e) - { - UpdateApplicationForm uaf = new UpdateApplicationForm(); - uaf.Icon = this.Icon; - uaf.CheckForUpdate(true); - uaf.ShowDialog(this); - } - - private void syntaxCheckerToolStripMenuItem_Click(object sender, EventArgs e) - { - SyntaxCheck(false); - } - - #region SolutionExplorer - private void openProjectSolutionToolStripMenuItem_Click(object sender, EventArgs e) - { - if (this.openSolutionFilesDialog.ShowDialog(this) == DialogResult.OK) { - if (File.Exists(this.openSolutionFilesDialog.FileName)) { - if (CloseAllOpenWindows()) { - this.SolutionExplorer.OpenSolution(this.openSolutionFilesDialog.FileName); - } - } - } - } - - private void newProjectToolStripMenuItem_Click(object sender, EventArgs e) - { - NewProject np = new NewProject(this); - if (np.ShowDialog(this) == DialogResult.OK) { - CloseAllOpenWindows(); - } - - } - - private void closeSolutiontoolStripMenuItem_Click(object sender, EventArgs e) - { - this.SolutionExplorer.CloseSolution(); - } - - private void newProjectToolStripMenuItem1_Click(object sender, EventArgs e) - { - this.SolutionExplorer.AddNewProjectAction(); - } - - private void existingProjectToolStripMenuItem_Click(object sender, EventArgs e) - { - this.SolutionExplorer.AddExistingProject(); - } - - private void addNewObjecttoolStripMenuItem_Click(object sender, EventArgs e) - { - this.SolutionExplorer.AddNewObject(); - } - #endregion SolutionExplorer - - private void recentProjectToolStripMenuItem_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) - { - ToolStripMenuItem tsmi = e.ClickedItem as ToolStripMenuItem; - if (tsmi != null) { - this.fileStripMenuItem.HideDropDown(); - - if (CloseAllOpenWindows()) { - string strPath = tsmi.Tag.ToString(); - this.SolutionExplorer.OpenSolution(strPath); - } - } - } - - private void LSLEditorForm_DragEnter(object sender, DragEventArgs e) - { - if (e.Data.GetDataPresent(DataFormats.FileDrop)) { - e.Effect = DragDropEffects.Copy; - } else { - e.Effect = DragDropEffects.None; - } - } - - private delegate void DelegateOpenFile(string s); - private void LSLEditorForm_DragDrop(object sender, DragEventArgs e) - { - try { - DelegateOpenFile delegateOpenFile = new DelegateOpenFile(OpenFile); - Array allFiles = (Array)e.Data.GetData(DataFormats.FileDrop); - if (allFiles != null) { - for (int intI = 0; intI < allFiles.Length; intI++) { - string strFileName = allFiles.GetValue(intI).ToString(); - this.BeginInvoke(delegateOpenFile, new object[] { strFileName }); - } - - this.Activate(); // in the case Explorer overlaps this form - } - } catch { - // Error in DragDrop function (dont show messagebox, explorer is waiting - } - } - - private void optionsToolStripMenuItem_Click(object sender, EventArgs e) - { - Tools.ToolsOptions to = new Tools.ToolsOptions(); - to.PropertiesChanged += new LSLEditor.Tools.ToolsOptions.PropertiesChangedHandler(to_PropertiesChanged); - to.Icon = this.Icon; - to.ShowDialog(this); - } - - private void to_PropertiesChanged() - { - this.browserInWindowToolStripMenuItem.Checked = Properties.Settings.Default.BrowserInWindow; - this.WikiSepBrowserstoolStripMenuItem.Checked = Properties.Settings.Default.WikiSeperateBrowser; - - SetFontsOnWindows(); - InitPluginsList(); - } - - private void toolStripMenuItem5_Click(object sender, EventArgs e) - { - Browser browser = GetBrowser(); - browser.ShowWebBrowser("Donate", Properties.Settings.Default.DonateUrl); - } - - private void LSLint() - { - InitSyntaxError(); - - Plugins.LSLint lslint = new Plugins.LSLint(); - - if (lslint.SyntaxCheck(this)) { - if (lslint.HasErrors) { - this.SyntaxErrors.Show(dockPanel); - } else { - MessageBox.Show("LSL Syntax seems OK", "LSLint Syntax Checker", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - } else { - MessageBox.Show("LSLint:" + lslint.ExceptionMessage, "LSLint plugin", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - - private void Particles() - { - Plugins.Particles particles = new Plugins.Particles(this); - } - - private void SvnPlugin() - { - if (File.Exists(Svn.Executable)) { - Properties.Settings.Default.VersionControl = true; - Properties.Settings.Default.VersionControlSVN = true; - Properties.Settings.Default.SvnExe = Svn.Executable; - MessageBox.Show("SVN is installed and can be used in the solution explorer", "SVN information", MessageBoxButtons.OK, MessageBoxIcon.Information); - } else { - Properties.Settings.Default.VersionControl = false; - Properties.Settings.Default.VersionControlSVN = false; - MessageBox.Show("SVN is NOT installed (can not find svn binary)", "SVN information", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - - private void GenericPlugin(string strPluginName) - { - Plugins.Generic generic = new Plugins.Generic(this, strPluginName); - } - - - private void PluginsHandler(object sender, EventArgs e) - { - //TODO: What do we hide here? - //this.panel1.Visible = false; - - ToolStripMenuItem tsmi = sender as ToolStripMenuItem; - if (tsmi != null) { - switch (tsmi.Text.ToLower()) { - case "lslint": - LSLint(); - break; - case "particles": - Particles(); - break; - case "svn (version control)": - SvnPlugin(); - break; - default: - GenericPlugin(tsmi.Text); - //MessageBox.Show("Unknown plugin", "LSLEditor plugins warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); - break; - } - } - } - - private void SaveAllToolStripMenuItem_Click(object sender, EventArgs e) - { - foreach (Form form in this.Children) { - EditForm editForm = form as EditForm; - if (editForm == null || editForm.IsDisposed) { - continue; - } - if (editForm.Dirty) { - editForm.SaveCurrentFile(); - } - } - // save it all, also solution explorer file - if (this.SolutionExplorer != null & !this.SolutionExplorer.IsDisposed) - this.SolutionExplorer.SaveSolutionFile(); - } - - private void SetupFileMenu() - { - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - this.saveToolStripMenuItem.Text = "Save " + editForm.ScriptName; - this.saveScriptFilesDialog.FileName = editForm.ScriptName; - this.saveToolStripMenuItem.Enabled = editForm.Dirty; - this.closeFileToolStripMenuItem.Enabled = true; - } else { - this.closeFileToolStripMenuItem.Enabled = false; - } - } - - private void tabControlExtended1_SelectedIndexChanged(object sender, EventArgs e) - { - SetupFileMenu(); - EditForm ef = this.ActiveMdiForm as EditForm; - if (ef != null) { - ef.SetFocus(); - } - } - - private void LSLEditorForm_MdiChildActivate(object sender, EventArgs e) - { - SetupFileMenu(); - } - - private void fileToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - - if (editForm != null) - { - if (Helpers.LSLIPathHelper.IsLSLI(editForm.ScriptName) || Helpers.LSLIPathHelper.IsExpandedLSL(editForm.ScriptName)) - { - toolStripMenuItem2.Enabled = true; - } - else - { - toolStripMenuItem2.Enabled = false; - } - } - - SetupFileMenu(); - } - - private void forumStripMenuItem_Click(object sender, EventArgs e) - { - Browser browser = GetBrowser(); - browser.ShowWebBrowser("LSLEditor Forum", Properties.Settings.Default.ForumLSLEditor); - } - - private void notecardToolStripMenuItem_Click(object sender, EventArgs e) - { - NewNotecard(); - } - - private void toolStripMenuItem7_Click(object sender, EventArgs e) - { - Browser browser = GetBrowser(); - browser.ShowWebBrowser("Contact Form", Properties.Settings.Default.ContactUrl); - } - - private void toolStripMenuItem8_Click(object sender, EventArgs e) - { - //NativeHelper.SendMyKeys.PasteTextToApp("hello", "SecondLife", null); - EditForm editForm = this.ActiveMdiForm as EditForm; - if (editForm != null) { - editForm.TextBox.ToClipBoard(); - NativeHelper.SendMyKeys.ClipBoardToApp("SecondLife", null); - } - } - - private void outlineToolStripMenuItem_Click(object sender, EventArgs e) - { - //old - } - - private void outlineToolStripMenuItem_CheckedChanged(object sender, EventArgs e) - { - foreach (Form k in this.Children) { - EditForm editForm = k as EditForm; - if (editForm == null) { - if (outlineToolStripMenuItem.Checked) { - editForm.splitContainer1.Panel2Collapsed = false; - } else { - editForm.splitContainer1.Panel2Collapsed = true; - } - } - } - } - - private void toolStripMenuItem9_Click_1(object sender, EventArgs e) - { - Browser browser = GetBrowser(); - browser.ShowWebBrowser("LSLEditor QA", Properties.Settings.Default.qasite); - } - - /// - /// Gets a form based on it's form.Text property. - /// - /// - /// Returns null if not found - public Form GetForm(string formName) - { - EditForm desirableForm = null; - for (int i = 0; i < Children.Length; i++) - { - Form form = Children[i]; - if (Helpers.LSLIPathHelper.TrimStarsAndWhiteSpace(form.Text) == formName) - { - desirableForm = (EditForm)form; - } - } - - return desirableForm; - } - - /// - /// Sets the readonly property of the textbox in the form - /// - /// - /// - public void SetReadOnly(EditForm form, bool isReadOnly) - { - foreach (Control c in form.tabControl.SelectedTab.Controls) - { - if (c.GetType() == typeof(SplitContainer)) - { - NumberedTextBox.NumberedTextBoxUC a = (NumberedTextBox.NumberedTextBoxUC)((SplitContainer)c).ActiveControl; - if(a != null) - { - a.TextBox.ReadOnly = isReadOnly; - } - } - } - } - - /// - /// Gets the forms readonly property and returns it. - /// - /// - /// - public bool IsReadOnly(EditForm form) - { - foreach (Control c in form.tabControl.SelectedTab.Controls) - { - if (c.GetType() == typeof(SplitContainer)) - { - NumberedTextBox.NumberedTextBoxUC a = (NumberedTextBox.NumberedTextBoxUC)((SplitContainer)c).ActiveControl; - if(a != null) - { - return a.TextBox.ReadOnly; - } else - { - return true; - } - } - } - return false; - } - - /// - /// Expands an editform and opens it. Hides the LSLI - /// - /// - public void ExpandForm(EditForm editForm) - { - if (editForm != null && Helpers.LSLIPathHelper.IsLSLI(editForm.ScriptName)) - { - Helpers.LSLIConverter converter = new Helpers.LSLIConverter(); - string lsl = converter.ExpandToLSL(editForm); - string file = Helpers.LSLIPathHelper.CreateExpandedPathAndScriptName(editForm.FullPathName); - EditForm oldExpandedForm = (EditForm)GetForm(Helpers.LSLIPathHelper.GetExpandedTabName(Helpers.LSLIPathHelper.CreateExpandedScriptName(editForm.ScriptName))); - - // Check if the expanded form is already open. If so, then overwrite the content of it. - if (oldExpandedForm != null)// - { - oldExpandedForm.SourceCode = lsl; - //oldExpandedForm.TabIndex = editForm.TabIndex; // TODO: Keep tabIndex when expanding/collapsing the same - oldExpandedForm.Show(); - SetReadOnly(oldExpandedForm, false); - oldExpandedForm.Dirty = editForm.Dirty; - } - else - { // If not already open - Helpers.LSLIPathHelper.DeleteFile(file); - - using (StreamWriter sw = new StreamWriter(file)) - { - sw.Write(lsl); - } - - Helpers.LSLIPathHelper.HideFile(file); - - EditForm expandedForm = (EditForm)GetForm(Helpers.LSLIPathHelper.CreateExpandedScriptName(Path.GetFileName(file))); - - if (expandedForm != null) - { - expandedForm.Close(); - } - - OpenFile(file); - EditForm lslForm = (EditForm)GetForm(Helpers.LSLIPathHelper.GetExpandedTabName(file)); - lslForm.Dirty = editForm.Dirty; - } - editForm.Hide(); - } - } - - // Expand to LSL button (F11) - private void expandToLSLToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - ExpandForm(editForm); - } - - public void CollapseForm(EditForm editForm) - { - if (editForm != null && Helpers.LSLIPathHelper.IsExpandedLSL(editForm.ScriptName)) - { - Helpers.LSLIConverter converter = new Helpers.LSLIConverter(); - - Helpers.LSLIPathHelper.DeleteFile(editForm.FullPathName); - - string lsli = converter.CollapseToLSLIFromEditform(editForm); - string file = Helpers.LSLIPathHelper.CreateCollapsedPathAndScriptName(editForm.FullPathName); - - // Check if the LSLI form is already open (but hidden) - if (GetForm(Path.GetFileName(file)) != null) - { - EditForm LSLIform = (EditForm)GetForm(Path.GetFileName(file)); - LSLIform.SourceCode = lsli; - LSLIform.Show(); - SetReadOnly(LSLIform, false); - - LSLIform.Dirty = editForm.Dirty; - } - else - { - OpenFile(file); - EditForm LSLIform = (EditForm)GetForm(Path.GetFileName(file)); - LSLIform.SourceCode = lsli; - LSLIform.Dirty = editForm.Dirty; - } - - if (GetForm(Path.GetFileName(file) + Helpers.LSLIPathHelper.READONLY_TAB_EXTENSION) != null) // if readonly is open, close it - { - GetForm(Path.GetFileName(file) + Helpers.LSLIPathHelper.READONLY_TAB_EXTENSION).Close(); - } - editForm.Hide(); - } - } - - // Collapse to LSLI button (F10) - private void CollapseToLSLIToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - CollapseForm(editForm); - } - - // View LSLI button (F12) - private void viewLSLIToolStripMenuItem_Click(object sender, EventArgs e) - { - EditForm editForm = this.ActiveMdiForm as EditForm; - - if(editForm != null) - { - if (Helpers.LSLIPathHelper.IsLSLI(editForm.Text)) - { - return; - } - - string pathOfLSLI = Helpers.LSLIPathHelper.CreateCollapsedPathAndScriptName(editForm.FullPathName); - - if (File.Exists(pathOfLSLI)) { - string tabText = Path.GetFileName(pathOfLSLI) + Helpers.LSLIPathHelper.READONLY_TAB_EXTENSION; - - // If old LSLI readonly is open - Form OldReadOnlyLSLIform = GetForm(tabText); - - if (OldReadOnlyLSLIform != null) - { - OldReadOnlyLSLIform.Close(); - } - - OpenFile(pathOfLSLI); - - EditForm lsliForm = (EditForm) GetForm(Path.GetFileName(pathOfLSLI)); - SetReadOnly(lsliForm, true); - lsliForm.AutoScroll = true; - lsliForm.Text = tabText; - } - else - { - MessageBox.Show("Error: No related LSLI file found. \n \"" + pathOfLSLI + "\"", "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - } - - // Export button (Ctrl+E) - private void toolStripMenuItem2_Click(object sender, EventArgs e) - { - StreamWriter streamWriter; - SaveFileDialog saveFileDialog1 = new SaveFileDialog(); - EditForm editForm = this.ActiveMdiForm as EditForm; - - saveFileDialog1.Filter = "Secondlife script files (*.lsl)|*.lsl"; - saveFileDialog1.FileName = Helpers.LSLIPathHelper.RemoveDotInFrontOfFilename(Helpers.LSLIPathHelper.RemoveExpandedSubExtension( - Path.GetFileNameWithoutExtension(editForm.ScriptName))) + Helpers.LSLIConverter.LSL_EXT; - saveFileDialog1.RestoreDirectory = true; - saveFileDialog1.Title = "Export to LSL"; - - if (saveFileDialog1.ShowDialog() == DialogResult.OK) - { - if ((streamWriter = new StreamWriter(saveFileDialog1.OpenFile())) != null) - { - Helpers.LSLIConverter lsliConverter = new Helpers.LSLIConverter(); - - bool showBeginEnd = Properties.Settings.Default.ShowIncludeMetaData; - streamWriter.Write(lsliConverter.ExpandToLSL(editForm, showBeginEnd)); - streamWriter.Close(); - OpenFile(Path.GetFullPath(saveFileDialog1.FileName)); - } - } - } - - // New LSLI script button (Ctrl+M) - private void lSLIScriptToolStripMenuItem_Click(object sender, EventArgs e) - { - NewFile(true); - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.IO; +using System.Xml; + +using System.Collections.Generic; + +using System.Drawing; +using System.Threading; +using System.Reflection; +using System.Globalization; +using System.Windows.Forms; +using System.Drawing.Printing; + +using LSLEditor.Docking; +// aximp is oude informatie, maar ik laat het er even instaan +// aximp %WINDIR%\System32\shdocvw.dll /out:"d:\temp\AxInterop.SHDocVw.dll" /keyfile:"D:\Documents and Settings\Administrator\Mijn documenten\Mijn keys\Test.snk" +// copieer de TWEE files AxInterop.SHDocVw.dll en SHDocVw.dll in de bin/Debug directory +// referentie maken naar die twee files + +// +// Pre build command for using a LSLEditor.rc file containing: About.htm HTML "Resource/About.htm" +// +// "$(DevEnvDir)..\..\SDK\v2.0\bin\rc.exe" /r "$(ProjectDir)$(TargetName).rc" +// +// Project properties Application, resource file + +// At the bottom of the form there are + +// 1) tabcontrol1 , holding tabbed documents +// 2) splitter1, for increasing simulator window +// 3) panel1 , holding simulator or listview for compiler errors + +// righthand side + +// 1) panel2 , for holding solution explorer + +namespace LSLEditor +{ + public partial class LSLEditorForm : Form + { + public XmlDocument ConfLSL; + public XmlDocument ConfCSharp; + + private Browser browser; + private SimulatorConsole SimulatorConsole; + + public bool CancelClosing = false; + + public Solution.SolutionExplorer m_SolutionExplorer; + + public GListBoxWindow GListBoxWindow; + public TooltipWindow TooltipMouse; + public TooltipWindow TooltipKeyboard; + public TooltipWindow TooltipListBox; + + public FindWindow findWindow; + public GotoWindow GotoWindow; + + public List llDialogForms; + public List llTextBoxForms; + public List PermissionForms; + + private UpdateApplicationForm updateApplicationForm; + private Helpers.PrinterHelper printer; + + public SyntaxError SyntaxErrors; + + private System.Diagnostics.Process curProc; + private const int WM_NCACTIVATE = 0x0086; + protected override void WndProc(ref Message m) + { + if (m.Msg == WM_NCACTIVATE) { + if (m.LParam != IntPtr.Zero) { + m.WParam = new IntPtr(1); + } + } else { + try { curProc.MaxWorkingSet = curProc.MaxWorkingSet; } catch { } + } + base.WndProc(ref m); + } + + public Solution.SolutionExplorer SolutionExplorer + { + get + { + return this.m_SolutionExplorer; + } + } + + private void SetDefaultProperties() + { + if (Properties.Settings.Default.FontEditor == null) { + Properties.Settings.Default.FontEditor = new Font("Courier New", 9.75F, FontStyle.Regular); + } + + if (Properties.Settings.Default.FontTooltips == null) { + Properties.Settings.Default.FontTooltips = new Font(SystemFonts.MessageBoxFont.Name, 9.75F, FontStyle.Regular); + } + + string strLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + if (Properties.Settings.Default.ProjectLocation == "") { + Properties.Settings.Default.ProjectLocation = strLocation; + } + } + + public LSLEditorForm(string[] args) + { + Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false); + Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US", false); + + if (args.Length == 1) { + if (args[0] == "/reset") { + Properties.Settings.Default.Reset(); + Properties.Settings.Default.CallUpgrade = false; + } + } + + if (Properties.Settings.Default.CallUpgrade) { + Properties.Settings.Default.Upgrade(); + Properties.Settings.Default.CallUpgrade = false; + } + + // set some normal values on some properties + SetDefaultProperties(); + + curProc = System.Diagnostics.Process.GetCurrentProcess(); + + InitializeComponent(); + + m_SolutionExplorer = new LSLEditor.Solution.SolutionExplorer(); + m_SolutionExplorer.parent = this; + + InitRecentFileList(); + InitRecentProjectList(); + InitPluginsList(); + + SetupChildForms(); + + try { + Start(args); + } catch (Exception exception) { + MessageBox.Show("Error: " + OopsFormatter.ApplyFormatting(exception.Message), "Oops"); + } + } + + public Form[] Children + { + get + { + if (this.IsMdiContainer) { + return this.MdiChildren; + } + + List children = new List(); + //TODO: Find Child forms + //foreach (TabPage tabPage in this.tabControlExtended1.TabPages) + // children.Add(tabPage.Tag as Form); + return children.ToArray(); + } + } + + public Form ActiveMdiForm + { + get + { + Form form = null; + if (this.IsMdiContainer) { + form = this.ActiveMdiChild; + } else { + //TODO: Get Active Mdi Form + //return null; + //dockPanel.ActiveContent + // if (this.tabControlExtended1.SelectedTab == null) + // return null; + // return this.tabControlExtended1.SelectedTab.Tag as Form; + } + return form; + } + } + + public void ActivateMdiForm(Form form) + { + if (this.IsMdiContainer) { + this.ActivateMdiChild(form); + } else { + //TODO: Activate the right Mdi Form + /*for (int intI = 0; intI < this.tabControlExtended1.TabCount; intI++) + { + TabPage tabPage = this.tabControlExtended1.TabPages[intI]; + EditForm f = tabPage.Tag as EditForm; + if (f == form) + { + this.tabControlExtended1.SelectedIndex = intI; + tabPage.Focus(); + break; + } + }*/ + } + } + + public void AddForm(DockContent form) + { + if (this.IsMdiContainer) { + //form.MdiParent = this; + //form.Tag = null; + //form.Show(); + //ActivateMdiChild(form); + + //TODO: add form in the right way + form.Show(dockPanel); + } else { + //form.Visible = false; + //form.MdiParent = null; + //TabPage tabPage = new TabPage(form.Text+" "); + //tabPage.BackColor = Color.White; + //for(int intI=form.Controls.Count-1;intI>=0;intI--) + // tabPage.Controls.Add(form.Controls[intI]); + //tabPage.Tag = form; + //form.Tag = tabPage; + // Was already commented out //tabPage.Controls.Add(form.Controls[0]); + + + //this.tabControlExtended1.TabPages.Add(tabPage); + //this.tabControlExtended1.SelectedTab = tabPage; + } + } + + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main(string[] args) + { + Application.EnableVisualStyles(); + Application.DoEvents(); + Application.Run(new LSLEditorForm(args)); + } + + private void Start(string[] args) + { + string fileFilterNotes = "Notecard files (*.txt)|*.txt|All files (*.*)|*.*"; + string fileFilterScripts = "Secondlife script files (*.lsl;*.lsli)|*.lsl;*.lsli|All files (*.*)|*.*"; + string fileFilterSolutions = "LSLEditor Solution File (*.sol)|*.sol|All Files (*.*)|*.*"; + + this.ConfLSL = GetXmlFromResource(Properties.Settings.Default.ConfLSL); + this.ConfCSharp = GetXmlFromResource(Properties.Settings.Default.ConfCSharp); + + this.openNoteFilesDialog.FileName = ""; + this.openNoteFilesDialog.Filter = fileFilterNotes; + this.openNoteFilesDialog.InitialDirectory = Properties.Settings.Default.WorkingDirectory; + + this.saveNoteFilesDialog.FileName = ""; + this.saveNoteFilesDialog.Filter = fileFilterNotes; + this.saveNoteFilesDialog.InitialDirectory = Properties.Settings.Default.WorkingDirectory; + + + this.openScriptFilesDialog.FileName = ""; + this.openScriptFilesDialog.Filter = fileFilterScripts; + this.openScriptFilesDialog.InitialDirectory = Properties.Settings.Default.WorkingDirectory; + + this.saveScriptFilesDialog.FileName = ""; + this.saveScriptFilesDialog.Filter = fileFilterScripts; + this.saveScriptFilesDialog.InitialDirectory = Properties.Settings.Default.WorkingDirectory; + + this.openSolutionFilesDialog.FileName = ""; + this.openSolutionFilesDialog.Filter = fileFilterSolutions; + this.openSolutionFilesDialog.InitialDirectory = Properties.Settings.Default.ProjectLocation; + this.openSolutionFilesDialog.Multiselect = false; + + + Version version = Assembly.GetExecutingAssembly().GetName().Version; + this.Text += " " + version.Major + "." + version.Minor; + + if (System.Diagnostics.Debugger.IsAttached) { + this.Text += " (ALPHA)"; + } else { + if (Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location).Contains("beta")) { + this.Text += " (BETA)"; + } + } + + //TODO: Fix close buttons on tabs + // enables close buttons on tab + //this.tabControlExtended1.SetDrawMode(); + //this.tabControlExtended1.OnTabClose += new EventHandler(tabControl1_OnTabClose); + + if (args.Length == 0) { + NewFile(); + } else { + if (args[0] == "/reset") { + NewFile(); + } else { + if (Path.GetExtension(args[0]) == ".sol") { + this.SolutionExplorer.OpenSolution(args[0]); + } else { + bool blnRun = false; + foreach (string strFileName in args) { + if (strFileName == "/run") { + blnRun = true; + continue; + } + EditForm editForm = new EditForm(this); + editForm.LoadFile(strFileName); + editForm.TextBox.OnCursorPositionChanged += new SyntaxRichTextBox.CursorPositionChangedHandler(TextBox_OnCursorPositionChanged); + AddForm(editForm); + } + if (blnRun) { + this.stopToolStripMenuItem.Enabled = true; + StartSimulator(); + } + } + } + } + } + + void TextBox_OnCursorPositionChanged(object sender, SyntaxRichTextBox.CursorPositionEventArgs e) + { + EditForm editForm = (EditForm)this.ActiveMdiForm; + string expandedWarning = ""; + if (editForm != null && Helpers.LSLIPathHelper.IsExpandedLSL(editForm.ScriptName)) + { + expandedWarning = "Warning: Editing in included sections will be erased when collapsing/saving!"; + } + + this.toolStripStatusLabel1.Text = string.Format("Ln {0,-10} Col {1,-10} Ch {2,-20} Ttl {3,-10} {4,-10} {5,-10} {6}", + e.Line, e.Column, e.Char, e.Total, e.Insert ? "INS" : "OVR", e.Caps ? "CAP" : "", expandedWarning); + } + + private XmlDocument GetXmlFromResource(string strName) + { + XmlDocument xml = new XmlDocument(); + Stream resource = Assembly.GetExecutingAssembly().GetManifestResourceStream(this.GetType().Namespace + "." + strName); + + if (resource != null) { + xml.Load(resource); + } + return xml; + } + + private void NewNotecard() + { + EditForm editForm = new EditForm(this); + editForm.IsScript = false; + editForm.FullPathName = Properties.Settings.Default.ExampleNameNotecard; + editForm.TextBox.OnCursorPositionChanged += new SyntaxRichTextBox.CursorPositionChangedHandler(TextBox_OnCursorPositionChanged); + editForm.Dirty = false; + AddForm(editForm); + } + + private void NewFile(bool isLSLI = false) + { + EditForm editForm = new EditForm(this); + editForm.SourceCode = Helpers.GetTemplate.Source(); + editForm.TextBox.FormatDocument(); + editForm.TextBox.ClearUndoStack(); + if(isLSLI) + { + editForm.FullPathName = Properties.Settings.Default.ExampleNameLSLI; + } else + { + editForm.FullPathName = Properties.Settings.Default.ExampleName; + } + editForm.TextBox.OnCursorPositionChanged += new SyntaxRichTextBox.CursorPositionChangedHandler(TextBox_OnCursorPositionChanged); + AddForm(editForm); + } + + public EditForm OpenFile(string strPath, Guid guid, bool blnIsScript) + { + EditForm editForm = null; + if (this.Children.Length > 0) { + editForm = this.Children[0] as EditForm; + if (editForm != null && !editForm.IsDisposed) { + if (editForm.ScriptName != Properties.Settings.Default.ExampleName || editForm.Dirty) { + editForm = null; + } + } + } + + if (editForm == null) { + editForm = new EditForm(this); + editForm.TextBox.OnCursorPositionChanged += new SyntaxRichTextBox.CursorPositionChangedHandler(TextBox_OnCursorPositionChanged); + AddForm(editForm); + } + + editForm.guid = guid; + editForm.IsScript = blnIsScript; + editForm.LoadFile(strPath); + + // 23 oct 2007 + ActivateMdiForm(editForm); + + UpdateRecentFileList(strPath); + + if(Helpers.LSLIPathHelper.IsExpandedLSL(editForm.Text)) + { + editForm.Text = Helpers.LSLIPathHelper.GetExpandedTabName(editForm.Text); + } + + return editForm; + } + + public void OpenFile(string strPath, Guid guid) + { + OpenFile(strPath, guid, true); + } + + private void OpenFile(string strFileName) + { + OpenFile(strFileName, Guid.Empty, true); + } + + private string ClippedPath(string strPath) + { + string strResult = strPath; + if (Properties.Settings.Default.PathClipLength < strPath.Length) { + string strRoot = Path.GetPathRoot(strPath); + string strTmp = ""; + while (strTmp.Length < Properties.Settings.Default.PathClipLength) { + strTmp = Path.Combine(Path.GetFileName(strPath), strTmp); + strPath = Path.GetDirectoryName(strPath); + if (strPath == strRoot || strPath == null) { + break; + } + } + strResult = Path.Combine(Path.Combine(strRoot, "..."), strTmp); + } + return strPath; + } + + private void InitRecentFileList() + { + if (Properties.Settings.Default.RecentFileList == null) { + Properties.Settings.Default.RecentFileList = new System.Collections.Specialized.StringCollection(); + } + int intLen = Properties.Settings.Default.RecentFileList.Count; + for (int intI = 0; intI < intLen; intI++) { + ToolStripMenuItem tsmi = new ToolStripMenuItem(ClippedPath(Properties.Settings.Default.RecentFileList[intI])); + tsmi.Tag = Properties.Settings.Default.RecentFileList[intI]; + this.recentFileToolStripMenuItem.DropDownItems.Add(tsmi); + } + } + + private void InitRecentProjectList() + { + if (Properties.Settings.Default.RecentProjectList == null) { + Properties.Settings.Default.RecentProjectList = new System.Collections.Specialized.StringCollection(); + } + int intLen = Properties.Settings.Default.RecentProjectList.Count; + for (int intI = 0; intI < intLen; intI++) { + ToolStripMenuItem tsmi = new ToolStripMenuItem(ClippedPath(Properties.Settings.Default.RecentProjectList[intI])); + tsmi.Tag = Properties.Settings.Default.RecentProjectList[intI]; + this.recentProjectToolStripMenuItem.DropDownItems.Add(tsmi); + } + } + + private void InitPluginsList() + { + // erase old plugins + for (int intI = this.toolsStripMenuItem.DropDownItems.Count - 1; intI > 0; intI--) { + this.toolsStripMenuItem.DropDownItems.RemoveAt(intI); + } + + if (Properties.Settings.Default.Plugins != null) { + ToolStripMenuItem tsmi; + EventHandler handler = new EventHandler(this.PluginsHandler); + foreach (string strPlugin in Properties.Settings.Default.Plugins) { + if (strPlugin.ToLower().Contains("lslint")) { + tsmi = new ToolStripMenuItem(strPlugin, null, handler, Keys.F7); + } else { + tsmi = new ToolStripMenuItem(strPlugin, null, handler); + } + this.toolsStripMenuItem.DropDownItems.Add(tsmi); + } + } + } + + private void UpdateRecentFileList(string strPath) + { + ToolStripMenuItem tsmi = new ToolStripMenuItem(ClippedPath(strPath)); + tsmi.Tag = strPath; + this.recentFileToolStripMenuItem.DropDownItems.Insert(0, tsmi); + Properties.Settings.Default.RecentFileList.Insert(0, strPath); + int intListLen = Properties.Settings.Default.RecentFileList.Count; + for (int intI = intListLen - 1; intI > 0; intI--) { + if (strPath.ToLower() == Properties.Settings.Default.RecentFileList[intI].ToLower()) { + this.recentFileToolStripMenuItem.DropDownItems.RemoveAt(intI); + Properties.Settings.Default.RecentFileList.RemoveAt(intI); + } + } + int intLen = Properties.Settings.Default.RecentFileMax; + if (this.recentFileToolStripMenuItem.DropDownItems.Count > intLen) { + this.recentFileToolStripMenuItem.DropDownItems.RemoveAt(intLen); + Properties.Settings.Default.RecentFileList.RemoveAt(intLen); + } + } + + public void UpdateRecentProjectList(string strPath, bool AddToList) + { + ToolStripMenuItem tsmi = new ToolStripMenuItem(ClippedPath(strPath)); + tsmi.Tag = strPath; + + if (AddToList) { + this.recentProjectToolStripMenuItem.DropDownItems.Insert(0, tsmi); + Properties.Settings.Default.RecentProjectList.Insert(0, strPath); + } + + int intListLen = Properties.Settings.Default.RecentProjectList.Count; + for (int intI = intListLen - 1; intI > 0; intI--) { + if (strPath.ToLower() == Properties.Settings.Default.RecentProjectList[intI].ToLower()) { + this.recentProjectToolStripMenuItem.DropDownItems.RemoveAt(intI); + Properties.Settings.Default.RecentProjectList.RemoveAt(intI); + } + } + + int intLen = Properties.Settings.Default.RecentProjectMax; + if (this.recentProjectToolStripMenuItem.DropDownItems.Count > intLen) { + this.recentProjectToolStripMenuItem.DropDownItems.RemoveAt(intLen); + Properties.Settings.Default.RecentProjectList.RemoveAt(intLen); + } + + } + + private void ReadNoteFiles() + { + this.openNoteFilesDialog.Multiselect = true; + if (this.openNoteFilesDialog.ShowDialog() == DialogResult.OK) { + foreach (string strFileName in this.openNoteFilesDialog.FileNames) { + if (File.Exists(strFileName)) { + OpenFile(strFileName, Guid.NewGuid(), false); + UpdateRecentFileList(strFileName); + } + } + } + } + + private void ReadScriptFiles() + { + this.openScriptFilesDialog.Multiselect = true; + if (this.openScriptFilesDialog.ShowDialog() == DialogResult.OK) { + foreach (string strFileName in this.openScriptFilesDialog.FileNames) { + if (File.Exists(strFileName)) { + OpenFile(strFileName, Guid.NewGuid()); + UpdateRecentFileList(strFileName); + } + } + } + } + + private void importExampleToolStripMenuItem_Click(object sender, EventArgs e) + { + Browser browser = GetBrowser(); + browser.ShowWebBrowser("Import Examples", Properties.Settings.Default.Examples); + } + + /*** + * Return value indicate whether file was saved or not. + */ + public bool SaveFile(EditForm editForm, bool blnSaveAs) + { + DialogResult dialogresult = DialogResult.OK; + if (editForm.FullPathName == Properties.Settings.Default.ExampleName || blnSaveAs) { + SaveFileDialog saveDialog = editForm.IsScript ? this.saveScriptFilesDialog : this.saveNoteFilesDialog; + + // Save as LSLI when it's an expanded LSL + if (Helpers.LSLIPathHelper.IsExpandedLSL(editForm.ScriptName)) + { + saveDialog.FileName = Helpers.LSLIPathHelper.CreateCollapsedScriptName(editForm.ScriptName); + } else + { + saveDialog.FileName = editForm.ScriptName; + } + //saveDialog.FileName = editForm.FullPathName; + string strExtension = Path.GetExtension(editForm.FullPathName); + dialogresult = saveDialog.ShowDialog(); + if (dialogresult == DialogResult.OK) { + editForm.FullPathName = saveDialog.FileName; + } + } + if (dialogresult == DialogResult.OK) { + editForm.SaveCurrentFile(); + UpdateRecentFileList(editForm.FullPathName); + return true; + } + return false; + } + + // save file of active MDI child, if any + private bool SaveActiveFile() + { + bool blnResult = false; + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + // save as!! + // TODO: Refactor saveDialog to be a property of the form + SaveFileDialog saveDialog = editForm.IsScript ? this.saveScriptFilesDialog : this.saveNoteFilesDialog; + blnResult = SaveFile(editForm, true); + } + return blnResult; + } + + private void saveToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + editForm.SaveCurrentFile(); + this.Focus(); + } + } + + private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) + { + SaveActiveFile(); + } + + private Browser GetBrowser() + { + if (this.browser == null || this.browser.IsDisposed) { + this.browser = new Browser(this); + if (Properties.Settings.Default.BrowserLocation != Point.Empty) { + this.browser.StartPosition = FormStartPosition.Manual; + this.browser.Location = Properties.Settings.Default.BrowserLocation; + } + if (Properties.Settings.Default.BrowserSize != Size.Empty) { + this.browser.Size = Properties.Settings.Default.BrowserSize; + } + this.browser.SizeChanged += new EventHandler(browser_SizeChanged); + this.browser.LocationChanged += new EventHandler(browser_LocationChanged); + if (this.browserInWindowToolStripMenuItem.Checked) { + this.browser.MdiParent = null; + this.browser.Show(); + } else { + AddForm(this.browser); + //this.browser.MdiParent = this; + } + } + this.browser.Activate(); + + if (this.IsMdiContainer) { + this.ActivateMdiChild(this.browser); + } else { + //TODO: find browser in childs + /*for (int intI = 0; intI < this.tabControlExtended1.TabCount; intI++) + { + TabPage tabPage = this.tabControlExtended1.TabPages[intI]; + Browser b = tabPage.Tag as Browser; + if (b == this.browser) + { + this.tabControlExtended1.SelectedIndex = intI; + tabPage.Focus(); + break; + } + }*/ + } + + return this.browser; + } + + void browser_LocationChanged(object sender, EventArgs e) + { + Properties.Settings.Default.BrowserLocation = browser.Location; + } + + void browser_SizeChanged(object sender, EventArgs e) + { + Properties.Settings.Default.BrowserSize = browser.Size; + } + + #region printing + private void pageSettingsToolStripMenuItem_Click(object sender, EventArgs e) + { + // Initialize the dialog's PrinterSettings property to hold user + // defined printer settings. + pageSetupDialog1.PageSettings = new System.Drawing.Printing.PageSettings(); + + // Initialize dialog's PrinterSettings property to hold user + // set printer settings. + pageSetupDialog1.PrinterSettings = new System.Drawing.Printing.PrinterSettings(); + + //Do not show the network in the printer dialog. + pageSetupDialog1.ShowNetwork = false; + + //Show the dialog storing the result. + if (pageSetupDialog1.ShowDialog() != DialogResult.OK) { + pageSetupDialog1.PageSettings = null; + pageSetupDialog1.PrinterSettings = null; + } + } + + private void printPreviewtoolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + printerHelp(editForm); + printer.PrintPreviewEditForm(editForm); + } + } + + private void printToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + printerHelp(editForm); + printer.PrintEditForm(editForm); + } + } + + private void printerHelp(EditForm editForm) + { + printer = new Helpers.PrinterHelper(pageSetupDialog1); + printer.Title = editForm.FullPathName; + printer.SubTitle = DateTime.Now.ToString("s"); + printer.Footer = this.Text; + } + #endregion + + private void copyToClipboardToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + editForm.TextBox.ToClipBoard(); + } + } + + private void exitToolStripMenuItem_Click(object sender, EventArgs e) + { + // Check if a LSLI or expanded LSL open is, and close that one as well + this.Close(); + } + + private void undoToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + editForm.TextBox.Undo(); + } + } + + private void redoToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + editForm.TextBox.Redo(); + } + } + + private void cutToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + editForm.TextBox.Cut(); + } + } + + private void copyToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + editForm.TextBox.Copy(); + } + } + + private void pasteToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + editForm.TextBox.Paste(); + } + } + + private void deleteToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + editForm.TextBox.Delete(); + } + } + + private void selectAllToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + editForm.TextBox.SelectAll(); + } + } + + private void formatDocumentToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + editForm.TextBox.FormatDocument(); + } + } + + private void formatSelectedTextToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + editForm.TextBox.AutoFormatSelectedText(); + } + } + + + private void wordWrapToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + ToolStripMenuItem tsmi = sender as ToolStripMenuItem; + if (tsmi != null) { + tsmi.Checked = !tsmi.Checked; + editForm.TextBox.WordWrap = tsmi.Checked; + } + } + + } + + private void startToolStripMenuItem_Click(object sender, EventArgs e) + { + this.stopToolStripMenuItem.Enabled = true; + StartSimulator(); + } + + private void stopToolStripMenuItem_Click(object sender, EventArgs e) + { + this.stopToolStripMenuItem.Enabled = false; + StopSimulator(); + } + + private void aboutToolStripMenuItem_Click(object sender, EventArgs e) + { + About about = new About(this); + about.ShowDialog(this); + } + + public void OnDirtyChanged(bool blnEnableSave) + { + this.saveToolStripMenuItem.Enabled = blnEnableSave; + } + + private void SetFontsOnWindows() + { + Font listBoxFont; + Font toolTipFont; + + if (Properties.Settings.Default.FontEditor == null) { + Properties.Settings.Default.FontEditor = new Font("Courier New", 9.75F, FontStyle.Regular); + } + + if (Properties.Settings.Default.FontTooltips == null) { + Properties.Settings.Default.FontTooltips = new Font(SystemFonts.MessageBoxFont.Name, 9.75F, FontStyle.Regular); + } + + toolTipFont = Properties.Settings.Default.FontTooltips; + listBoxFont = Properties.Settings.Default.FontEditor; + + this.TooltipMouse.Font = toolTipFont; + this.TooltipKeyboard.Font = toolTipFont; + this.TooltipListBox.Font = toolTipFont; + this.GListBoxWindow.Font = listBoxFont; + + foreach (Form form in this.Children) { + EditForm editForm = form as EditForm; + if (editForm == null || editForm.IsDisposed) { + continue; + } + editForm.SetFont(); + } + } + + private void SetupChildForms() + { + Font listBoxFont = Properties.Settings.Default.FontEditor; + Font toolTipFont = Properties.Settings.Default.FontTooltips; + + this.TooltipMouse = new TooltipWindow(this); + this.TooltipKeyboard = new TooltipWindow(this); + this.TooltipListBox = new TooltipWindow(this); + this.GListBoxWindow = new GListBoxWindow(this); + + SetFontsOnWindows(); + + //TODO: Fix new file drop down + //this.solutionExplorer1.parent = this; + //this.solutionExplorer1.CreateNewFileDrowDownMenu(this.addNewFileToolStripMenuItem); + this.solutionExplorerToolStripMenuItem.Checked = Properties.Settings.Default.ShowSolutionExplorer; + ShowSolutionExplorer(this.solutionExplorerToolStripMenuItem.Checked); + + this.llDialogForms = new List(); + this.llTextBoxForms = new List(); + this.PermissionForms = new List(); + + this.TooltipMouse.Tag = ""; + this.TooltipKeyboard.Tag = ""; + this.TooltipListBox.Tag = ""; + this.TooltipListBox.XOffset = 200; // TODO, afhankelijk van toegepaste font + this.GListBoxWindow.Tag = ""; + + // This order equals with the KeyWordTypeEnum in KeyWords.cs + ImageList imageList = new ImageList(); + imageList.Images.Add(new Bitmap(this.GetType(), "Images.Unknown.gif")); + imageList.Images.Add(new Bitmap(this.GetType(), "Images.Functions.gif")); + imageList.Images.Add(new Bitmap(this.GetType(), "Images.Events.gif")); + imageList.Images.Add(new Bitmap(this.GetType(), "Images.Constants.gif")); + imageList.Images.Add(new Bitmap(this.GetType(), "Images.Class.gif")); + imageList.Images.Add(new Bitmap(this.GetType(), "Images.Vars.gif")); + imageList.Images.Add(new Bitmap(this.GetType(), "Images.Properties.gif")); + imageList.Images.Add(new Bitmap(this.GetType(), "Images.States.gif")); + + this.GListBoxWindow.GListBox.ImageList = imageList; + // this.tvOutline.ImageList = imageList; + + this.Move += new EventHandler(LSLEditorForm_SetPosition); + this.Resize += new EventHandler(LSLEditorForm_SetPosition); + + this.GListBoxWindow.GListBox.DoubleClick += new EventHandler(GListBox_DoubleClick); + this.GListBoxWindow.GListBox.SelectedIndexChanged += new EventHandler(GListBox_SelectedIndexChanged); + } + + void GListBox_SelectedIndexChanged(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + editForm.TextBox.ShowTooltipOnListBox(); + } + } + + void GListBox_DoubleClick(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + editForm.TextBox.InsertSelectedWord(); + } + + } + + private void LSLEditorForm_SetPosition(object sender, EventArgs e) + { + foreach (PermissionsForm pf in this.PermissionForms) { + pf.Top = this.Top + 30; + pf.Left = this.Right - pf.Width - 5; + } + foreach (llDialogForm df in this.llDialogForms) { + df.Top = this.Top + 30; + df.Left = this.Right - df.Width - 5; + } + foreach (llTextBoxForm tbf in this.llTextBoxForms) { + tbf.Left = this.Left + this.Width / 2 - tbf.Width / 2; + tbf.Top = this.Top + this.Height / 2 - tbf.Height / 2; + } + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + editForm.TextBox.SetPosition(Screen.PrimaryScreen.WorkingArea); + } + } + + private void LoadProperties() + { + try { + //TODO: hmmm? + //this.tabControlExtended1.Visible = false; + + // this.panel1.Visible = false; // Simulator + // this.panel2.Visible = false; // right pane + + //string strVersion = Properties.Settings.Default.Version; + + Size size = Properties.Settings.Default.LSLEditorSize; + Point location = Properties.Settings.Default.LSLEditorLocation; + Rectangle rect = new Rectangle(location, size); + if (Screen.PrimaryScreen.WorkingArea.Contains(rect)) { + if (size.Width > 100 && size.Height > 100) { + this.Location = location; + this.Size = size; + } + } + + this.browserInWindowToolStripMenuItem.Checked = Properties.Settings.Default.BrowserInWindow; + + this.WikiSepBrowserstoolStripMenuItem.Checked = Properties.Settings.Default.WikiSeperateBrowser; + + } catch (Exception exception) { + MessageBox.Show("Error Properties: " + OopsFormatter.ApplyFormatting(exception.Message), "Oops, but continue"); + } + } + + // TODO cleanup multiple return points + public bool CloseAllOpenWindows() + { + foreach (Form form in this.Children) { + EditForm editForm = form as EditForm; + if (editForm == null || editForm.IsDisposed) { + continue; + } + ActivateMdiForm(editForm); + if (editForm.Dirty) { + string scriptToSave = editForm.ScriptName; + if(Helpers.LSLIPathHelper.IsExpandedLSL(editForm.ScriptName)) + { + // Expanded scripts will always be saved as LSLI's + scriptToSave = Helpers.LSLIPathHelper.CreateCollapsedScriptName(scriptToSave); + } + + DialogResult dialogResult = MessageBox.Show(this, @"Save """ + scriptToSave + @"""?", "File has changed", MessageBoxButtons.YesNoCancel); + if (dialogResult == DialogResult.Cancel) { + return false; + } + if (dialogResult == DialogResult.Yes) { + // TODO: Refactor saveDialog to be a property of the form + SaveFileDialog saveDialog = editForm.IsScript ? this.saveScriptFilesDialog : this.saveNoteFilesDialog; + if (!SaveFile(editForm, false)) { + return false; + } + } + + if (dialogResult == DialogResult.No) { + editForm.Dirty = false; + } + + // Delete expanded file when closing + string expandedFile = Helpers.LSLIPathHelper.CreateExpandedPathAndScriptName(editForm.FullPathName); + if (File.Exists(expandedFile)) + { + File.Delete(expandedFile); + } + } + CloseActiveWindow(); + } + return true; + } + + // TODO cleanup multiple return points + private void LSLEditorForm_FormClosing(object sender, FormClosingEventArgs e) + { + try { + Properties.Settings.Default.LSLEditorSize = this.Size; + Properties.Settings.Default.LSLEditorLocation = this.Location; + + Properties.Settings.Default.Save(); + + if (this.IsMdiContainer) { + // this is set by any EditForm close + e.Cancel = this.CancelClosing; + return; + } + + if (this.SolutionExplorer != null & !this.SolutionExplorer.IsDisposed) { + this.SolutionExplorer.CloseSolution(); + } + + e.Cancel = !CloseAllOpenWindows(); + + } catch { } + } + + + private void helpKeywordToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + Point dummy; + string strKeyWord = editForm.TextBox.GetCurrentKeyWord(false, out dummy); + ShowHelpOnKeyWord(strKeyWord); + } + } + + // TODO cleanup multiple return points + private void ShowHelpOnKeyWord(string strKeyWord) + { + if (Properties.Settings.Default.HelpOffline) { + string strHelpFile = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), Properties.Settings.Default.HelpOfflineFile); + if (!File.Exists(strHelpFile)) { + if (MessageBox.Show("No Offline help, use Online Wiki?", "Offline Help fails", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK) + return; + } else { + if (strKeyWord == "") + Help.ShowHelp(this, strHelpFile); + else + Help.ShowHelp(this, strHelpFile, HelpNavigator.KeywordIndex, strKeyWord); + return; + } + } + + string strUrl = Properties.Settings.Default.Help + strKeyWord; + + if (strKeyWord == "") { + strKeyWord = "Help"; + } + + if (Properties.Settings.Default.WikiSeperateBrowser) { + System.Diagnostics.Process.Start(strUrl); + } else { + Browser browser = GetBrowser(); + browser.ShowWebBrowser(strKeyWord, strUrl); + } + } + + private void indexToolStripMenuItem_Click(object sender, EventArgs e) + { + string strKeyWord = "HomePage"; + ShowHelpOnKeyWord(strKeyWord); + } + + private void checkForUpdatesToolStripMenuItem_Click(object sender, EventArgs e) + { + Browser browser = GetBrowser(); + string strVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); + browser.ShowWebBrowser("Check for Updates", Properties.Settings.Default.Update + strVersion); + } + + private void browserInWindowToolStripMenuItem_Click(object sender, EventArgs e) + { + this.browserInWindowToolStripMenuItem.Checked = !this.browserInWindowToolStripMenuItem.Checked; + Properties.Settings.Default.BrowserInWindow = this.browserInWindowToolStripMenuItem.Checked; + } + + private void InitSyntaxError() + { + // information out of every script + if (this.SyntaxErrors == null) { + this.SyntaxErrors = new SyntaxError(); + this.SyntaxErrors.OnSyntaxError += new SyntaxError.SyntaxErrorHandler(SyntaxErrors_OnSyntaxError); + this.SyntaxErrors.Dock = DockStyle.Fill; + } + this.SyntaxErrors.Clear(); + } + + private void SyntaxErrors_OnSyntaxError(object sender, SyntaxError.SyntaxErrorEventArgs e) + { + EditForm editForm = null; + foreach (Form form in this.Children) { + editForm = form as EditForm; + if (editForm == null || editForm.IsDisposed) { + continue; + } + + if (editForm.FullPathName == e.FullPathName) { + if (!editForm.Visible) + { + if(Helpers.LSLIPathHelper.IsExpandedLSL(editForm.ScriptName) && GetForm(Helpers.LSLIPathHelper.CreateCollapsedScriptName(editForm.ScriptName)).Visible) + { + //SetReadOnly((EditForm) GetForm(Helpers.LSLIPathHelper.CreateCollapsedScriptName(editForm.ScriptName)), true); // Doesn't seem to work? Why? + EditForm LSLIForm = (EditForm)GetForm(Helpers.LSLIPathHelper.CreateCollapsedScriptName(editForm.ScriptName)); + LSLIForm.Close(); + } + editForm.Show(); + } + ActivateMdiForm(editForm); + editForm.TextBox.Goto(e.Line, e.Char); + editForm.Focus(); + return; + } + } + editForm = OpenFile(e.FullPathName, e.EditFormGuid, e.IsScript); + editForm.TextBox.Goto(e.Line, e.Char); + editForm.Focus(); + } + + private void StartSimulator() + { + if (SyntaxCheck(true)) { + this.SimulatorConsole = new SimulatorConsole(this.SolutionExplorer, this.Children); + + this.SimulatorConsole.Show(dockPanel); + + //TODO: Show Simulator Console somewhere + //this.panel1.Controls.Clear(); + //this.panel1.Controls.Add(this.SimulatorConsole); + //this.panel1.Visible = true; + //this.splitter1.SplitPosition = Properties.Settings.Default.SimulatorSize.Height; + } + } + + public void StopSimulator() + { + //TODO: Hide simulator? Or we could keep it like the debug output in VS + //this.panel1.Visible = false; + if (this.SimulatorConsole != null) { + this.SimulatorConsole.Stop(); + this.SimulatorConsole.Dispose(); + } + this.SimulatorConsole = null; + } + + /// + /// When running an LSLI script, a related expanded LSL script or LSLI readonly may be opened. These should not be ran/checked for syntax. + /// An LSLI script should also first be expanded to an LSL script before it checks for syntax. + /// + /// + /// + private EditForm SelectEditFormToRun(EditForm editForm) + { + if (Helpers.LSLIPathHelper.IsLSLI(editForm.ScriptName) && editForm.Visible && !IsReadOnly(editForm)) + { + // Open and hide or select the expanded LSLI form + EditForm expandedForm = (EditForm)GetForm(Helpers.LSLIPathHelper.GetExpandedTabName(editForm.ScriptName)); + if (expandedForm == null) + { + // Create the LSL + ExpandForm(editForm); + expandedForm = (EditForm)GetForm(Helpers.LSLIPathHelper.GetExpandedTabName(editForm.ScriptName)); + editForm = expandedForm; + } + else + { + ExpandForm(editForm); + editForm.Close(); + } + } + else if (Helpers.LSLIPathHelper.IsExpandedLSL(editForm.ScriptName)) + { + // NOTE: WAAROM COLLAPSED HIJ HEM EERST? ZO VERWIJDERD HIJ DE VERANDERINGEN IN DE EXPANDED INCLUDE SECTIONS + //CollapseForm(editForm); + //EditForm collapsedForm = (EditForm)GetForm(Helpers.LSLIPathHelper.CreateCollapsedScriptName(editForm.ScriptName)); + //ExpandForm(collapsedForm); + EditForm expandedForm = (EditForm)GetForm(Helpers.LSLIPathHelper.GetExpandedTabName(editForm.ScriptName)); + editForm = expandedForm; + } + return editForm; + } + + private bool SyntaxCheck(bool Silent) + { + //TODO: What do we hide on SyntaxCheck? + //this.panel1.Visible = false; + InitSyntaxError(); + + foreach (Form form in this.Children) { + EditForm editForm = form as EditForm; + editForm = SelectEditFormToRun(editForm); + + if (editForm == null || editForm.IsDisposed || !editForm.Visible || IsReadOnly(editForm)) { + continue; + } + if (Properties.Settings.Default.AutoSaveOnDebug) { + if (editForm.Dirty) { + editForm.SaveCurrentFile(); + } + } + editForm.SyntaxCheck(); + } + + bool blnResult = false; + if (this.SyntaxErrors.HasErrors) { + this.SyntaxErrors.Show(dockPanel); + //TODO: Show errors somewhere in an output + //this.panel1.Controls.Clear(); + //this.panel1.Controls.Add(this.SyntaxErrors); + //this.panel1.Visible = true; + //this.splitter1.SplitPosition = Properties.Settings.Default.SimulatorSize.Height; + } else { + if (!Silent) { + MessageBox.Show("LSL Syntax seems OK", "LSL Syntax Checker", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + blnResult = true; + } + return blnResult; + } + + private void releaseNotesToolStripMenuItem_Click(object sender, EventArgs e) + { + Browser browser = GetBrowser(); + string strExeFileName = Path.GetFileName(Assembly.GetExecutingAssembly().CodeBase); + browser.ShowWebBrowser("Release notes", "res://" + strExeFileName + "/" + Properties.Settings.Default.ReleaseNotes); + + } + + void findForm_LocationChanged(object sender, EventArgs e) + { + Properties.Settings.Default.FindLocation = findWindow.Location; + } + + void gotoForm_LocationChanged(object sender, EventArgs e) + { + Properties.Settings.Default.GotoLocation = GotoWindow.Location; + } + + private void splitter1_SplitterMoved(object sender, SplitterEventArgs e) + { + //TODO: Splitter moved? I Think this is depricated + //if( this.splitter1.SplitPosition>50) + // Properties.Settings.Default.SimulatorSize = new Size(this.splitter1.Width, this.splitter1.SplitPosition); + } + + void tabControl1_SelectedIndexChanged(object sender, EventArgs e) + { + this.GListBoxWindow.Visible = false; + this.TooltipMouse.Visible = false; + this.TooltipKeyboard.Visible = false; + this.TooltipListBox.Visible = false; + } + + private void tabControlExtended1_MouseDown(object sender, MouseEventArgs e) + { + TabControl tabControl = sender as TabControl; + if (tabControl != null) { + if (e.Button == MouseButtons.Right) { + for (int intI = 0; intI < tabControl.TabCount; intI++) { + Rectangle rt = tabControl.GetTabRect(intI); + if (e.X > rt.Left && e.X < rt.Right + && e.Y > rt.Top && e.Y < rt.Bottom) { + this.contextMenuStrip1.Tag = intI; + this.contextMenuStrip1.Show(tabControl, new Point(e.X, e.Y)); + } + } + } + } + } + + private bool IsInSolutionExplorer(Guid guid) + { + bool blnResult = true; + if (this.SolutionExplorer == null || this.SolutionExplorer.IsDisposed || this.SolutionExplorer.GetKey(guid) == null) { + blnResult = false; + } + return blnResult; + + } + + private void CloseTab(int intTabToDelete) + { + //TODO: Find a new way for closing tabs + /* + // reset toolstrip information + this.toolStripStatusLabel1.Text = ""; + + //int intTabToDelete = (int)this.contextMenuStrip1.Tag; + + if (intTabToDelete >= this.tabControlExtended1.TabCount) + return; + + TabPage tabPage = this.tabControlExtended1.TabPages[intTabToDelete]; + + if (tabPage.Text.Contains("Browser")) + { + this.browser.Dispose(); + this.browser = null; + GC.Collect(); + } + + EditForm editForm = tabPage.Tag as EditForm; + if (editForm != null && !editForm.IsDisposed) + { + if (editForm.Dirty) + { + this.ActivateMdiForm(editForm); + DialogResult dialogResult = MessageBox.Show(this, @"Save """ + editForm.ScriptName + @"""?", "File has changed", MessageBoxButtons.YesNoCancel); + if (dialogResult == DialogResult.Cancel) + return; + if (dialogResult == DialogResult.Yes) + { + if(IsInSolutionExplorer(editForm.guid)) + { + editForm.SaveCurrentFile(); + } + else + { + // save as + if(!SaveFile(editForm, true)) + return; + } + } + } + editForm.Dispose(); + editForm = null; + } + this.tabControlExtended1.TabPages[intTabToDelete].Dispose(); + */ + GC.Collect(); + } + + private void tabControl1_OnTabClose(object sender, EventArgs e) + { + int intTabToDelete = (int)sender; + CloseTab(intTabToDelete); + } + + private void closeTabToolStripMenuItem_Click(object sender, EventArgs e) + { + int intTabToDelete = (int)this.contextMenuStrip1.Tag; + CloseTab(intTabToDelete); + } + + private void toolStripMenuItem1_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + if (GotoWindow == null || GotoWindow.IsDisposed) { + GotoWindow = new GotoWindow(this); + if (Properties.Settings.Default.GotoLocation != Point.Empty) { + GotoWindow.StartPosition = FormStartPosition.Manual; + GotoWindow.Location = Properties.Settings.Default.GotoLocation; + } + GotoWindow.LocationChanged += new EventHandler(gotoForm_LocationChanged); + } + GotoWindow.Show(this); + } + } + + + public void CloseActiveWindow() + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (this.IsMdiContainer) { + if (this.ActiveMdiForm != null && !this.ActiveMdiForm.IsDisposed) { + this.ActiveMdiForm.Close(); + } + } else { + //TODO: Find a new way + /* + int intTabToClose = this.tabControlExtended1.SelectedIndex; + if (intTabToClose >= 0) + CloseTab(intTabToClose); + + */ + } + } + + private void closeActiveWindowToolStripMenuItem_Click(object sender, EventArgs e) + { + CloseActiveWindow(); + } + + private void WikiSepBrowserstoolStripMenuItem_Click(object sender, EventArgs e) + { + WikiSepBrowserstoolStripMenuItem.Checked = !WikiSepBrowserstoolStripMenuItem.Checked; + Properties.Settings.Default.WikiSeperateBrowser = this.WikiSepBrowserstoolStripMenuItem.Checked; + } + + private void LSLEditorForm_Load(object sender, EventArgs e) + { + LoadProperties(); + if (Properties.Settings.Default.CheckForUpdates) { + updateApplicationForm = new UpdateApplicationForm(); + updateApplicationForm.Icon = this.Icon; + updateApplicationForm.OnUpdateAvailable += new EventHandler(updateApplicationForm_OnUpdateAvailable); + updateApplicationForm.CheckForUpdate(false); + } + } + + void updateApplicationForm_OnUpdateAvailable(object sender, EventArgs e) + { + updateApplicationForm.ShowDialog(this); + } + + private void commentInToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + editForm.TextBox.MultiLineComment(true); + } + + } + + private void uncommentingSelectedTextToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + editForm.TextBox.MultiLineComment(false); + } + + } + + private void FindandReplace(bool blnReplaceAlso) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + if (findWindow == null || findWindow.IsDisposed) { + findWindow = new FindWindow(this); + findWindow.LocationChanged += new EventHandler(findForm_LocationChanged); + } + Rectangle rect = new Rectangle(this.Location, this.Size); + if (rect.Contains(Properties.Settings.Default.FindLocation)) { + findWindow.Location = Properties.Settings.Default.FindLocation; + } else { + findWindow.Location = this.Location; + } + Point dummy; + findWindow.ReplaceAlso = blnReplaceAlso; + findWindow.KeyWord = editForm.TextBox.GetCurrentKeyWord(false, out dummy); + if (findWindow.Visible == false) { + findWindow.Show(this); + } + findWindow.FindFocus(); + } + } + + private void replaceToolStripMenuItem_Click(object sender, EventArgs e) + { + FindandReplace(true); + } + + private void findToolStripMenuItem_Click(object sender, EventArgs e) + { + FindandReplace(false); + } + + private void findNextToolStripMenuItem_Click(object sender, EventArgs e) + { + if (findWindow != null && !findWindow.IsDisposed) { + findWindow.Find(); + } + } + + + public void ShowSolutionExplorer(bool blnVisible) + { + //TODO: We need another way to activate the Solution Explorer + //this.panel2.Visible = blnVisible; + if (blnVisible) { + m_SolutionExplorer.Show(dockPanel); + } else { + m_SolutionExplorer.Hide(); + } + this.solutionExplorerToolStripMenuItem.Checked = blnVisible; + //this.tabControlExtended1.Refresh(); + } + + private void solutionExplorerToolStripMenuItem_Click(object sender, EventArgs e) + { + this.solutionExplorerToolStripMenuItem.Checked = !this.solutionExplorerToolStripMenuItem.Checked; + Properties.Settings.Default.ShowSolutionExplorer = this.solutionExplorerToolStripMenuItem.Checked; + ShowSolutionExplorer(this.solutionExplorerToolStripMenuItem.Checked); + } + + private void newFileToolStripMenuItem_Click(object sender, EventArgs e) + { + NewFile(); + } + + public void SolutionItemsFileMenu(bool blnVisible) + { + this.addToolStripMenuItem.Visible = blnVisible; + this.addToolStripSeparator.Visible = blnVisible; + this.closeSolutiontoolStripMenuItem.Enabled = blnVisible; + this.addNewObjecttoolStripMenuItem.Enabled = blnVisible; + this.addNewFileToolStripMenuItem.Enabled = blnVisible; + this.newProjectToolStripMenuItem.Enabled = !blnVisible; + } + + private void openNoteFilesToolStripMenuItem_Click(object sender, EventArgs e) + { + ReadNoteFiles(); + } + + private void openScriptFilesToolStripMenuItem_Click(object sender, EventArgs e) + { + ReadScriptFiles(); + } + + private void closeFileToolStripMenuItem_Click(object sender, EventArgs e) + { + CloseActiveWindow(); + } + + private void recentFileToolStripMenuItem_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) + { + ToolStripMenuItem tsmi = e.ClickedItem as ToolStripMenuItem; + if (tsmi != null) { + this.fileStripMenuItem.HideDropDown(); + + string strPath = tsmi.Tag.ToString(); + OpenFile(strPath, Guid.NewGuid()); + UpdateRecentFileList(strPath); + } + } + + private void makeBugReporttoolStripMenuItem_Click(object sender, EventArgs e) + { + BugReport.BugReportForm bugReport = new BugReport.BugReportForm(this); + bugReport.Show(this); + } + + private void toolStripMenuItem4_Click(object sender, EventArgs e) + { + UpdateApplicationForm uaf = new UpdateApplicationForm(); + uaf.Icon = this.Icon; + uaf.CheckForUpdate(true); + uaf.ShowDialog(this); + } + + private void syntaxCheckerToolStripMenuItem_Click(object sender, EventArgs e) + { + SyntaxCheck(false); + } + + #region SolutionExplorer + private void openProjectSolutionToolStripMenuItem_Click(object sender, EventArgs e) + { + if (this.openSolutionFilesDialog.ShowDialog(this) == DialogResult.OK) { + if (File.Exists(this.openSolutionFilesDialog.FileName)) { + if (CloseAllOpenWindows()) { + this.SolutionExplorer.OpenSolution(this.openSolutionFilesDialog.FileName); + } + } + } + } + + private void newProjectToolStripMenuItem_Click(object sender, EventArgs e) + { + NewProject np = new NewProject(this); + if (np.ShowDialog(this) == DialogResult.OK) { + CloseAllOpenWindows(); + } + + } + + private void closeSolutiontoolStripMenuItem_Click(object sender, EventArgs e) + { + this.SolutionExplorer.CloseSolution(); + } + + private void newProjectToolStripMenuItem1_Click(object sender, EventArgs e) + { + this.SolutionExplorer.AddNewProjectAction(); + } + + private void existingProjectToolStripMenuItem_Click(object sender, EventArgs e) + { + this.SolutionExplorer.AddExistingProject(); + } + + private void addNewObjecttoolStripMenuItem_Click(object sender, EventArgs e) + { + this.SolutionExplorer.AddNewObject(); + } + #endregion SolutionExplorer + + private void recentProjectToolStripMenuItem_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) + { + ToolStripMenuItem tsmi = e.ClickedItem as ToolStripMenuItem; + if (tsmi != null) { + this.fileStripMenuItem.HideDropDown(); + + if (CloseAllOpenWindows()) { + string strPath = tsmi.Tag.ToString(); + this.SolutionExplorer.OpenSolution(strPath); + } + } + } + + private void LSLEditorForm_DragEnter(object sender, DragEventArgs e) + { + if (e.Data.GetDataPresent(DataFormats.FileDrop)) { + e.Effect = DragDropEffects.Copy; + } else { + e.Effect = DragDropEffects.None; + } + } + + private delegate void DelegateOpenFile(string s); + private void LSLEditorForm_DragDrop(object sender, DragEventArgs e) + { + try { + DelegateOpenFile delegateOpenFile = new DelegateOpenFile(OpenFile); + Array allFiles = (Array)e.Data.GetData(DataFormats.FileDrop); + if (allFiles != null) { + for (int intI = 0; intI < allFiles.Length; intI++) { + string strFileName = allFiles.GetValue(intI).ToString(); + this.BeginInvoke(delegateOpenFile, new object[] { strFileName }); + } + + this.Activate(); // in the case Explorer overlaps this form + } + } catch { + // Error in DragDrop function (dont show messagebox, explorer is waiting + } + } + + private void optionsToolStripMenuItem_Click(object sender, EventArgs e) + { + Tools.ToolsOptions to = new Tools.ToolsOptions(); + to.PropertiesChanged += new LSLEditor.Tools.ToolsOptions.PropertiesChangedHandler(to_PropertiesChanged); + to.Icon = this.Icon; + to.ShowDialog(this); + } + + private void to_PropertiesChanged() + { + this.browserInWindowToolStripMenuItem.Checked = Properties.Settings.Default.BrowserInWindow; + this.WikiSepBrowserstoolStripMenuItem.Checked = Properties.Settings.Default.WikiSeperateBrowser; + + SetFontsOnWindows(); + InitPluginsList(); + } + + private void toolStripMenuItem5_Click(object sender, EventArgs e) + { + Browser browser = GetBrowser(); + browser.ShowWebBrowser("Donate", Properties.Settings.Default.DonateUrl); + } + + private void LSLint() + { + InitSyntaxError(); + + Plugins.LSLint lslint = new Plugins.LSLint(); + + if (lslint.SyntaxCheck(this)) { + if (lslint.HasErrors) { + this.SyntaxErrors.Show(dockPanel); + } else { + MessageBox.Show("LSL Syntax seems OK", "LSLint Syntax Checker", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } else { + MessageBox.Show("LSLint:" + lslint.ExceptionMessage, "LSLint plugin", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void Particles() + { + Plugins.Particles particles = new Plugins.Particles(this); + } + + private void SvnPlugin() + { + if (File.Exists(Svn.Executable)) { + Properties.Settings.Default.VersionControl = true; + Properties.Settings.Default.VersionControlSVN = true; + Properties.Settings.Default.SvnExe = Svn.Executable; + MessageBox.Show("SVN is installed and can be used in the solution explorer", "SVN information", MessageBoxButtons.OK, MessageBoxIcon.Information); + } else { + Properties.Settings.Default.VersionControl = false; + Properties.Settings.Default.VersionControlSVN = false; + MessageBox.Show("SVN is NOT installed (can not find svn binary)", "SVN information", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void GenericPlugin(string strPluginName) + { + Plugins.Generic generic = new Plugins.Generic(this, strPluginName); + } + + + private void PluginsHandler(object sender, EventArgs e) + { + //TODO: What do we hide here? + //this.panel1.Visible = false; + + ToolStripMenuItem tsmi = sender as ToolStripMenuItem; + if (tsmi != null) { + switch (tsmi.Text.ToLower()) { + case "lslint": + LSLint(); + break; + case "particles": + Particles(); + break; + case "svn (version control)": + SvnPlugin(); + break; + default: + GenericPlugin(tsmi.Text); + //MessageBox.Show("Unknown plugin", "LSLEditor plugins warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); + break; + } + } + } + + private void SaveAllToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (Form form in this.Children) { + EditForm editForm = form as EditForm; + if (editForm == null || editForm.IsDisposed) { + continue; + } + if (editForm.Dirty) { + editForm.SaveCurrentFile(); + } + } + // save it all, also solution explorer file + if (this.SolutionExplorer != null & !this.SolutionExplorer.IsDisposed) + this.SolutionExplorer.SaveSolutionFile(); + } + + private void SetupFileMenu() + { + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + this.saveToolStripMenuItem.Text = "Save " + editForm.ScriptName; + this.saveScriptFilesDialog.FileName = editForm.ScriptName; + this.saveToolStripMenuItem.Enabled = editForm.Dirty; + this.closeFileToolStripMenuItem.Enabled = true; + } else { + this.closeFileToolStripMenuItem.Enabled = false; + } + } + + private void tabControlExtended1_SelectedIndexChanged(object sender, EventArgs e) + { + SetupFileMenu(); + EditForm ef = this.ActiveMdiForm as EditForm; + if (ef != null) { + ef.SetFocus(); + } + } + + private void LSLEditorForm_MdiChildActivate(object sender, EventArgs e) + { + SetupFileMenu(); + } + + private void fileToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + + if (editForm != null) + { + if (Helpers.LSLIPathHelper.IsLSLI(editForm.ScriptName) || Helpers.LSLIPathHelper.IsExpandedLSL(editForm.ScriptName)) + { + toolStripMenuItem2.Enabled = true; + } + else + { + toolStripMenuItem2.Enabled = false; + } + } + + SetupFileMenu(); + } + + private void forumStripMenuItem_Click(object sender, EventArgs e) + { + Browser browser = GetBrowser(); + browser.ShowWebBrowser("LSLEditor Forum", Properties.Settings.Default.ForumLSLEditor); + } + + private void notecardToolStripMenuItem_Click(object sender, EventArgs e) + { + NewNotecard(); + } + + private void toolStripMenuItem7_Click(object sender, EventArgs e) + { + Browser browser = GetBrowser(); + browser.ShowWebBrowser("Contact Form", Properties.Settings.Default.ContactUrl); + } + + private void toolStripMenuItem8_Click(object sender, EventArgs e) + { + //NativeHelper.SendMyKeys.PasteTextToApp("hello", "SecondLife", null); + EditForm editForm = this.ActiveMdiForm as EditForm; + if (editForm != null) { + editForm.TextBox.ToClipBoard(); + NativeHelper.SendMyKeys.ClipBoardToApp("SecondLife", null); + } + } + + private void outlineToolStripMenuItem_Click(object sender, EventArgs e) + { + //old + } + + private void outlineToolStripMenuItem_CheckedChanged(object sender, EventArgs e) + { + foreach (Form k in this.Children) { + EditForm editForm = k as EditForm; + if (editForm == null) { + if (outlineToolStripMenuItem.Checked) { + editForm.splitContainer1.Panel2Collapsed = false; + } else { + editForm.splitContainer1.Panel2Collapsed = true; + } + } + } + } + + private void toolStripMenuItem9_Click_1(object sender, EventArgs e) + { + Browser browser = GetBrowser(); + browser.ShowWebBrowser("LSLEditor QA", Properties.Settings.Default.qasite); + } + + /// + /// Gets a form based on it's form.Text property. + /// + /// + /// Returns null if not found + public Form GetForm(string formName) + { + EditForm desirableForm = null; + for (int i = 0; i < Children.Length; i++) + { + Form form = Children[i]; + if (Helpers.LSLIPathHelper.TrimStarsAndWhiteSpace(form.Text) == formName) + { + desirableForm = (EditForm)form; + } + } + + return desirableForm; + } + + /// + /// Sets the readonly property of the textbox in the form + /// + /// + /// + public void SetReadOnly(EditForm form, bool isReadOnly) + { + foreach (Control c in form.tabControl.SelectedTab.Controls) + { + if (c.GetType() == typeof(SplitContainer)) + { + NumberedTextBox.NumberedTextBoxUC a = (NumberedTextBox.NumberedTextBoxUC)((SplitContainer)c).ActiveControl; + if(a != null) + { + a.TextBox.ReadOnly = isReadOnly; + } + } + } + } + + /// + /// Gets the forms readonly property and returns it. + /// + /// + /// + public bool IsReadOnly(EditForm form) + { + foreach (Control c in form.tabControl.SelectedTab.Controls) + { + if (c.GetType() == typeof(SplitContainer)) + { + NumberedTextBox.NumberedTextBoxUC a = (NumberedTextBox.NumberedTextBoxUC)((SplitContainer)c).ActiveControl; + if(a != null) + { + return a.TextBox.ReadOnly; + } else + { + return true; + } + } + } + return false; + } + + /// + /// Expands an editform and opens it. Hides the LSLI + /// + /// + public void ExpandForm(EditForm editForm) + { + if (editForm != null && Helpers.LSLIPathHelper.IsLSLI(editForm.ScriptName)) + { + Helpers.LSLIConverter converter = new Helpers.LSLIConverter(); + string lsl = converter.ExpandToLSL(editForm); + string file = Helpers.LSLIPathHelper.CreateExpandedPathAndScriptName(editForm.FullPathName); + EditForm oldExpandedForm = (EditForm)GetForm(Helpers.LSLIPathHelper.GetExpandedTabName(Helpers.LSLIPathHelper.CreateExpandedScriptName(editForm.ScriptName))); + + // Check if the expanded form is already open. If so, then overwrite the content of it. + if (oldExpandedForm != null)// + { + oldExpandedForm.SourceCode = lsl; + //oldExpandedForm.TabIndex = editForm.TabIndex; // TODO: Keep tabIndex when expanding/collapsing the same + oldExpandedForm.Show(); + SetReadOnly(oldExpandedForm, false); + oldExpandedForm.Dirty = editForm.Dirty; + } + else + { // If not already open + Helpers.LSLIPathHelper.DeleteFile(file); + + using (StreamWriter sw = new StreamWriter(file)) + { + sw.Write(lsl); + } + + Helpers.LSLIPathHelper.HideFile(file); + + EditForm expandedForm = (EditForm)GetForm(Helpers.LSLIPathHelper.CreateExpandedScriptName(Path.GetFileName(file))); + + if (expandedForm != null) + { + expandedForm.Close(); + } + + OpenFile(file); + EditForm lslForm = (EditForm)GetForm(Helpers.LSLIPathHelper.GetExpandedTabName(file)); + lslForm.Dirty = editForm.Dirty; + } + editForm.Hide(); + } + } + + // Expand to LSL button (F11) + private void expandToLSLToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + ExpandForm(editForm); + } + + public void CollapseForm(EditForm editForm) + { + if (editForm != null && Helpers.LSLIPathHelper.IsExpandedLSL(editForm.ScriptName)) + { + Helpers.LSLIConverter converter = new Helpers.LSLIConverter(); + + Helpers.LSLIPathHelper.DeleteFile(editForm.FullPathName); + + string lsli = converter.CollapseToLSLIFromEditform(editForm); + string file = Helpers.LSLIPathHelper.CreateCollapsedPathAndScriptName(editForm.FullPathName); + + // Check if the LSLI form is already open (but hidden) + if (GetForm(Path.GetFileName(file)) != null) + { + EditForm LSLIform = (EditForm)GetForm(Path.GetFileName(file)); + LSLIform.SourceCode = lsli; + LSLIform.Show(); + SetReadOnly(LSLIform, false); + + LSLIform.Dirty = editForm.Dirty; + } + else + { + OpenFile(file); + EditForm LSLIform = (EditForm)GetForm(Path.GetFileName(file)); + LSLIform.SourceCode = lsli; + LSLIform.Dirty = editForm.Dirty; + } + + if (GetForm(Path.GetFileName(file) + Helpers.LSLIPathHelper.READONLY_TAB_EXTENSION) != null) // if readonly is open, close it + { + GetForm(Path.GetFileName(file) + Helpers.LSLIPathHelper.READONLY_TAB_EXTENSION).Close(); + } + editForm.Hide(); + } + } + + // Collapse to LSLI button (F10) + private void CollapseToLSLIToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + CollapseForm(editForm); + } + + // View LSLI button (F12) + private void viewLSLIToolStripMenuItem_Click(object sender, EventArgs e) + { + EditForm editForm = this.ActiveMdiForm as EditForm; + + if(editForm != null) + { + if (Helpers.LSLIPathHelper.IsLSLI(editForm.Text)) + { + return; + } + + string pathOfLSLI = Helpers.LSLIPathHelper.CreateCollapsedPathAndScriptName(editForm.FullPathName); + + if (File.Exists(pathOfLSLI)) { + string tabText = Path.GetFileName(pathOfLSLI) + Helpers.LSLIPathHelper.READONLY_TAB_EXTENSION; + + // If old LSLI readonly is open + Form OldReadOnlyLSLIform = GetForm(tabText); + + if (OldReadOnlyLSLIform != null) + { + OldReadOnlyLSLIform.Close(); + } + + OpenFile(pathOfLSLI); + + EditForm lsliForm = (EditForm) GetForm(Path.GetFileName(pathOfLSLI)); + SetReadOnly(lsliForm, true); + lsliForm.AutoScroll = true; + lsliForm.Text = tabText; + } + else + { + MessageBox.Show("Error: No related LSLI file found. \n \"" + pathOfLSLI + "\"", "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + // Export button (Ctrl+E) + private void toolStripMenuItem2_Click(object sender, EventArgs e) + { + StreamWriter streamWriter; + SaveFileDialog saveFileDialog1 = new SaveFileDialog(); + EditForm editForm = this.ActiveMdiForm as EditForm; + + saveFileDialog1.Filter = "Secondlife script files (*.lsl)|*.lsl"; + saveFileDialog1.FileName = Helpers.LSLIPathHelper.RemoveDotInFrontOfFilename(Helpers.LSLIPathHelper.RemoveExpandedSubExtension( + Path.GetFileNameWithoutExtension(editForm.ScriptName))) + Helpers.LSLIConverter.LSL_EXT; + saveFileDialog1.RestoreDirectory = true; + saveFileDialog1.Title = "Export to LSL"; + + if (saveFileDialog1.ShowDialog() == DialogResult.OK) + { + if ((streamWriter = new StreamWriter(saveFileDialog1.OpenFile())) != null) + { + Helpers.LSLIConverter lsliConverter = new Helpers.LSLIConverter(); + + bool showBeginEnd = Properties.Settings.Default.ShowIncludeMetaData; + streamWriter.Write(lsliConverter.ExpandToLSL(editForm, showBeginEnd)); + streamWriter.Close(); + OpenFile(Path.GetFullPath(saveFileDialog1.FileName)); + } + } + } + + // New LSLI script button (Ctrl+M) + private void lSLIScriptToolStripMenuItem_Click(object sender, EventArgs e) + { + NewFile(true); + } + } +} diff --git a/trunk/LSLEditorForm.resx b/source/LSLEditorForm.resx similarity index 98% rename from trunk/LSLEditorForm.resx rename to source/LSLEditorForm.resx index ab92d48..dcb6669 100644 --- a/trunk/LSLEditorForm.resx +++ b/source/LSLEditorForm.resx @@ -1,357 +1,357 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 865, 17 - - - 699, 17 - - - 371, 17 - - - 17, 17 - - - 533, 17 - - - 324, 56 - - - 17, 56 - - - 172, 56 - - - 187, 17 - - - 440, 56 - - - 53 - - - - - AAABAAcAEBAQAAAAAAAoAQAAdgAAABAQAAAAAAAAaAUAAJ4BAAAYGAAAAAAAAMgGAAAGBwAAICAQAAAA - AADoAgAAzg0AACAgAAAAAAAAqAgAALYQAAAwMBAAAAAAAGgGAABeGQAAMDAAAAAAAACoDgAAxh8AACgA - AAAQAAAAIAAAAAEABAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAgAAAAACAAACA - gACAAIAAgICAAMDAwAAA/wAA/wAAAP//AAAAAP8AAP//AAAAAAD///8AERERERERERERERERERERERER - ERERERERERERERERERERAAAAAAABEXF//////wEREX+IiIiPgBF3F/f////wEREX+I//+PARdxf/d3d3 - +AEREX//////AXdxeqqqq7wBEREXd3d3d3ERERERERERERERERERERERERERERERERH//wAA//8AAP// - AAD//xERwAd4iEAHiIjAA4iIIAMREeADd/8gAf//8AH//xABERH4ARf//////////////xERKAAAABAA - AAAgAAAAAQAIAAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAALJOHQDfjScAeEQoAN+QLgCGUzkAtHU7ANSU - SQDnoEkA6KNOALF8WQBmZmYAtIprAICJiQC+oYwAlJSQAIuWlwCPlpcAmZydAKOlpAC2r6UAlKKsALay - rAC7tq4AuLaxAM3FugDJzMwAz9DNANDQ0ADO09MAy93hANbh5ADW5OgA1+frAOLp6wDn7O0A2OrvANnq - 7wDo8vUA6/T3APP29wAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgoKCgoKCgoKCgoKCgoKCgo - KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgKCgoKCgoKCgoKKCgoKCgAAAAAAAAAAAAAAAooKBco - CSMjIyMjIyMjIwAKKCgoKAkgHBkZGRkZGSUNAgooFhEoCR0QKSkpKSchJAUKKCgoKAkjFBspKSkpHiYL - CigTDigJHyMMDAwMDA8iGgUKKCgoKAkjIyMjIyMjIyMFChgVEigJAwEBAQEBCAcGBQQoKCgoKAAAAAAA - AAAAAAAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo//94iv// - AAD//zMV4AdrbsADAqNAA6OjwAFvkyABAADgAQAAIABnfvAApaQQAKSk+AGYjv//NgD//zEG//9RlCgA - AAAYAAAAMAAAAAEACAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwb+/APr5+QDQy8oA0szKAKGQ - iQCikIgA18jBAHdEKgB3Ri4AjlY5AKp0WQB1UkAAoXFZAHRSQQBxU0QAhmdYAK+MegCykYEAopKKALqy - rgDPy8kAe0gtAJFZOwCxeVkAtH5fAJ1uVQCeb1YAdFNBAIZmVQCGZ1YAu5mGALycigC6m4oAwKaXAJOA - dQCmlIoA3dLMALyzrgDAubUAp25MALJ6WQDBl30Awpl/ALOPegC7nIoAupuJAMCnmADCqZoAqJeNANzS - zADCurUArFITAL9oLgCUhHkArJuPAMrGwwChVxsAwp+DAMG3rwDEu7QA3GkAANaofgDTwK8AwLGkAMa4 - qwDebwAA3W8AANxtAADGuKoA0snAANDIwADpiiUA95w3AO+YPADgtogA37WIAN61iADftokA37eKANXL - wADXzcEA0ci8AOWsWwDotGUA6LVlAOu5aADpuGwA67tvAOq7cQDluHMA3bV2ALa2tQChpaQA2NzbANfb - 2gDg//8AkpubAJOZmQCgpaUAnaKiAKGvsACvuLkA3u7wANzs7gDd5eYA3vr/AOL7/wCdqqwAtbu8ALDA - wwDg6uwA2+XnAO7z9ADd8fYAv9HVAMLT1wC/0NQA2uzwANPk6ADk8PMA5e7wANzk5gDP09QA7fHyAN32 - /QDP4ucAz+HmANvt8gDa7PEA2OrvAN/q7QDl8PMA3ff/AN73/wDd9v4A3PX9ANrw9wDc8PYAwNHWANvs - 8QDa6/AA4/P4AODq7QDl7/IA5O7xAN31/QDg9/8A3PL6ANjq8ADb7PIA4fH3AN7m6QDY4OMA2/P9ANry - /ADb8/4A2vL9ANfv+gDa8/8A7vL0AO3x8wD4+PkA////AP39/QDp6ekAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4eHh4eHh4eHh4eHh0Q - NgAAAAAAAAAAAAsgIS4uLi4uLi4uLi0fCg8AAAAAAEAFEj9gfZKSkpKSkpKSkpJqaRc2AAAAAEcEByuI - goCMdoGBgYGBgYGNhTAMAAAAAAAAAClolXCRkI+Pj4+Pj4N5l14WAAAAAEATBRFRiWVte6ChoaGhoXx6 - eIoaIwAAAEYzFSUqa25dAQKjo6Ojo6Nxb5MiDgAAAAAAAAAZZ35hXKWkpKSkpKSimI5fCDYAAEExBgUR - UZRsYmNjY2NjY2NkZoRyGyMAAFA8JwMyKoZ/i3Nzc3Nzc3N1dHeHLxw2AAAAAAAAGJafnJycnJycnJyb - nZ6amQk2AEU3JAUFLFNWVVRUVFRUVFVZV1hbWjk2AFI7JhQ4ADU9REJDQ0NDQ0NKSEkNKDQ2AAAAAAAA - AAA6Pk9NTU1NTU1MTE5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////Kv///w7///8o////KP///yjwAB8o8AAPToAAB12AAAdD8AAHIIAA - Az2AAAM9+AABPYAAAT2AAABV/AAAXYAAAF2CAABd/wABVf///1X///9V////Vf///1X///9dKAAAACAA - AABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAICAAAAAAIAAAICAAIAA - gACAgIAAwMDAAAD/AAD/AAAA//8AAAAA/wAA//8AAAAAAP///wARERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERAAAAAAAAAAAAAAER - EREREXiIiIiIiIiIiIiAERERABF3////////////8BEREX9xF/////////////cBEREXcReP//////// - ///4AREREREXf/iIiIiIiIiP/wEREQABEX/4f4//////j/9wERF/9xF4+H+I//////j/gBERF3cRd/iH - 9//////4//ARERERERf/h/f/////+P/3ARFwAAEXj4d3d3d3d3eP+AERf//3F3+IiIiIiIiIiP8wERd3 - dxF/////////////cBEREREReP///////////4ARcAAAEXi7u7u7u7u7u7uyAX///3EXqqqqqqqqq6us - ygEXd3dxF6qqqqqqqqqqqqoBERERERF3d3d3d3d3d3d3ERERERERERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - EREREREREREREf//////////////////////////////////////////8AAAf/AAAD8wAAA/GAAAH5gA - AB/4AAAfHAAADwwAAA+MAAAP/gAABwYAAAcCAAADgwAAA/8AAAMDAAABAYAAAYGAAAH/wAAD//////// - ////////////////////////KAAAACAAAABAAAAAAQAIAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAJ44 - AACmQAAAsUsAANNtAADZcgAAmDcGAH4wCQB/MQoAlDoMAHAvDwCDNg8AcDEQAJ5CEwDBZRMAoEQVANN0 - FQCWQRYAl0IXAI9CHAChTCEAznQiANF4JgDzoScAXzsoAGpBKwCdUy4AnlMuAJ5VLwCiWDMAplw3AN+N - OwCjXjwArG5PALF0VQBeXl4As3tfALCIYwBmZmYAhHNoAG5ycgBwd3cAc3h3AHV5eAB2enkAeXt6AHl8 - egB6fHoAe317AH1+ewB+f3wAvJiEALmghgCKiooAkJCMAI6RkAD/zJkApaShAKWloQCmpaEAxLKlAKqq - qgChsLEAysG5AMC+uwDCwLwAury9AMXFwgDGxsMAvsLEANnQxQDNy8cA087JANbQyQDP0M0A4NfNAOnc - 0ADs4NEAv9DUANLa2wDO4OQA0uToAOjo6ADg6OoA6urqANnp7QDY6u8A2ervANvr8ADv8/QA6fP2APj4 - +AD7+/sA/f39AAAAAAA0b/8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d - XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d - XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d - XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dJSUlJSUlJSUl - JSUlJSUlJSUlJSUlXV1dXV1dXV1dXR8SCgcGBgYGBgYGBgYGBgYGBgYGByUmXV1dXV1dXV1dCDtGRkZG - RkZGRkZGRkZGRkZGRkY+BSVdXV1dXUI2XV0gM1VVVVVVVVVVVVVVVVVVVVVVVVUTJV1dXV1dQEA/XV0M - VVVVVVVVVVVVVVVVVVVVVVVVVTILJV1dXV1dXV1dXQ5JVV9fX19fX19fX19fX19fX19VTgUlXV1dXV1d - XV1dICRVVE1NTU1NTU1NTU1NTU1NX1ZVEyVdXV1dNS4qXV1dDFVVPShfPFFfX19fX19fX01YX1UyCyVd - XV1FRT8/XV0OSVU9KF84PF9fX19fX19fUk1fVU4FJV1dXV1dXV1dXSAkVU89KFsiU1pfX19fX19cTV9X - VRMlXV1dXV1dXV1dXQxVVT0oXzRTU19fX19fX19NX1lVMgslXV05MC0qJ11dDklVPSgoKCgoKCgoKCgo - KChNX1VOBSVdXUtLSENEP10gJFVQPT09PT09PT09PT09PT1NVVUTFyVdXV1dXV1dXV0MVVVVVVVVVVVV - VVVVVVVVVVVVVTIJJV1dXV1dXV1dXQ5JVVVVVVVVVVVVVVVVVVVVVVVVTgUlXToxLywrKV1dIw0WFhYW - FhYWFhYWFhYWFhYWFhYWARglTExKR0NBP11dAAQEBAQEBAQEBAQEBAQ3DzcPXg8DASVdXV1dXV1dXV0d - AhQVHh4eHh4eHh4eHh4eHh4eHgMFXV1dXV1dXV1dXV0hHBsaGRkZGRkZGRkZGRkZGRkQEV1dXV1dXV1d - XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d - XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d - XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d - XV1dXV1d//////////////////////////////////////gAAD/wAAAf8AAAHzAAAB8YAAAP+AAAD/gA - AA8cAAAHDAAAB/wAAAf+AAADBgAAAwIAAAH/AAAB/wAAAQMAAAABgAAA/4AAAf/AAAP///////////// - //////////////////8oAAAAMAAAAGAAAAABAAQAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACAAAAAgIAAAAAAgAAAgIAAgACAAICAgADAwMAAAP8AAP8AAAD//wAAAAD/AAD//wAAAAAA////ABER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERAAAAAAAAAAAAAA - AAAAAAABERERERERERd3d3d3d3d3d3d3d3d3d3cgERERERERERd///////////////////ggERERERAB - ERc///////////////////8wEREREX/wERF4//////////////////9yARERERd3ERF3//////////// - //////+CARERERERERFz///////////////////zAREREREREREXj//////////////////3IBERERER - EREXf/iIiIiIiIiIiIiIj//4IBERERAAAREXP/+If/h/////////j///MBEREX//8BEReP+IeP9///// - ////iP//cgERERd3dxERd//4d/94////////+P//ggERERERERERc//4h4+H////////+P//8wERERER - ERERF4/4h3/3////////+I//9yARERERERERF3//h3j4f///////+I//+CARERAAAAERFz//iHd3d3d3 - d3d3d4j//zAREX////AREXj/iIiIiIiIiIiIiIj//3IBERd3d3cREXf//////////////////4IBERER - EREREXP///////////////////MBEREREREREReP//////////////////cgERERERERERd///////// - //////////ggERAAAAABERd6qqqqqqqqqqqqqqqqqqowEX/////wERF6qqqqqqqqqqqqq7q7rMMyARd3 - d3d3ERF6qqqqqqqqqqqqqrqrp8cyAREREREREREXu7u7u7u7u7u7u7u7u7uyARERERERERERd3d3d3d3 - d3d3d3d3d3d3ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - EREREREREREREf///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP4AAAAB/wAA/gAAAAD/ - AAD+AAAAAP8AAJ4AAAAA/wAADwAAAAB/AACPAAAAAH8AAP8AAAAAfwAA/4AAAAA/AAD/gAAAAD8AAIeA - AAAAPwAAA8AAAAAfAACDwAAAAB8AAP/AAAAAHwAA/+AAAAAPAAD/4AAAAA8AAIHgAAAADwAAAPAAAAAH - AACA8AAAAAcAAP/wAAAABwAA//gAAAADAAD/+AAAAAMAAIB4AAAAAwAAADwAAAABAACAPAAAAAEAAP/+ - AAAAAQAA//8AAAADAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA////////AAD///////8AACgAAAAwAAAAYAAAAAEACAAAAAAAgAoAAAAA - AAAAAAAAAAAAAAAAAACQMAAAmTMAAKE7AACtRwAAu1UAAMNdAADMZgAA020AAN13AAD2kAAAoz0BAIYv - BACbNwQAzGkGAKNEDQBwMRAAnkITAHQ1FAAVFRUAaTIVAKBEFQDTdBUA4oMVAJhDGACgSh4Ao0sfAKFM - IQCaSyMAp08jAJ1NJQClUCUAXzsoAFw9LABhQS8AvHYxANB9MQDeijcAODg4AG5LOADaiTkAvHM9AOGQ - PwB5U0AA3I5AAKxqSQBNTU0AnWhNALN/YwBmZmYAtYRqAO+sagD1s2oAcXFxAHB3dwC4jncAdXp6APa7 - fwD6v38Ae4SEALyYhAB7aoYAh5KSAJOcnACXpaUAmaioAJqmqQCqqqoAra2rAJ+srACvr6wAq66uALSy - rgC3tbAAvLixAL24sQDBu7MAw720AMrCtwDLwrcApra4ANXJuwDXyrwArLy9ANnLvQDczr4A4NDAAOTT - wQDq18QA69jEAPLcxwD13sgAtMXJAM/QzQDGzc4AuszRALvN0gC/0NQAwtPWAMbV2QDJ19sA0trbANvb - 2wDJ2t4Ay9zgANfc4ADa3eEA3uHjAPjw4wDf4uQA2OLlAPjy5QDk5uYA3uLnAOXm5wDS5OgA3OXoAOzr - 6ADr6+kA7uzpAPn06QDq6uoA8u/rAPr16wDW6OwA9vLsAOPr7QD59O0A2OrvANnq7wDo7u8A2+vwAOvt - 8ADt7/AA3ezxAODu8gDv8fIA7vDzAPLz8wD19PMA5fH0APf29AD69/UA6fP2APz69gDt9fcA9/f3APX3 - +ADy+PkA+fz8AAAAAAA0b/8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMJWVlZWVlZWVlZWVlZWV - lQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQERMJWVlZWVlZWVlZWVlZWVlQEvNjY2NjY2NjY2 - NjY2NjY2NjY2NjY2NjY2NjY2NiwBITCVlZWVlZWVlZWVlZWVlQExf39/f39/f39/f39/f39/f39/f39/ - f39/f39/f2QBEzCVlZWVlZWVlTAwlZWVlRcQf39/f39/f39/f39/f39/f39/f39/f39/f39/f38aGDCV - lZWVlZWVa1RJMJWVlZUBXH9/f39/f39/f39/f39/f39/f39/f39/f39/f387ASAwlZWVlZWVlXZscJWV - lZUAMX9/f39/f39/f39/f39/f39/f39/f39/f39/f39kAQ8wlZWVlZWVlZWVlZWVlZUXEH9/f39/f39/ - f39/f39/f39/f39/f39/f39/f39/GgswlZWVlZWVlZWVlZWVlZWVAVx/f5eXl5eXl5eXl5eXl5eXl5eX - l5eXl5eXhX9/OwEfMJWVlZWVlZWVlZWVlZWVADF/f3I/T15eXl5eXl5eXl5eXl5eXl5eXl+XkH9/ZAEP - MJWVlZWVlTAwMDCVlZWVFxB/f38/QDVzc3Nzc3Nzc3Nzc3Nzc3NzbV6Bl39/fxoLMJWVlZWVblhRTEcw - lZWVlQFcf39hPzVGl5cSl5eXl5eXl5eXl5eXl2Bjl4Z/fzsBHzCVlZWVlXx0b2lwlZWVlQAxf397Pz41 - eJclZZeXl5eXl5eXl5eXl21el5N/f2QBDzCVlZWVlZWVlZWVlZWVlRcQf39/Uj81RpdCNJeXl5eXl5eX - l5eXl5JefZeAf38aGTCVlZWVlZWVlZWVlZWVlZUBXH9/Zj81N5eRLZeXl5eXl5eXl5eXl5dgYpeLf387 - AR8wlZWVlZWVlZWVlZWVlZUBMX9/fz89NUaXQkKXl5eXl5eXl5eXl5dBXpeUf39kAQ8wlZWVlTAwMDAw - MJWVlZUdEH9/f1I/NTU1NTU1NTU1NTU1NTU1NTU6W12Xgn9/GhkwlZWVd1lWU05KRTCVlZWVAVx/f2c/ - Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P0SXjn9/OwEfMJWVlX55dXFqaHCVlZWVATF/f39/f39/f39/f39/f39/ - f39/f39/f39/f39/ZAEPMJWVlZWVlZWVlZWVlZWVHRB/f39/f39/f39/f39/f39/f39/f39/f39/f39/ - fxoZMJWVlZWVlZWVlZWVlZWVlQFcf39/f39/f39/f39/f39/f39/f39/f39/f39/fzsBHzCVlZWVlZWV - lZWVlZWVlQExf39/f39/f39/f39/f39/f39/f39/f39/f39/f2QBDzCVlTAwMDAwMDAwlZWVlR0CCQkJ - CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkDHjCVelpXVVBNS0hDMJWVlZUBBwgICAgICAgICAgICAgI - CAgICAg5OQgzORaWliIEASYwlY+NjIqJh4SDiJWVlZUUDg0GBgYGBgYGBgYGBgYGBgYGBgYyOBUpOCku - ljwFASowlZWVlZWVlZWVlZWVlZWVAQojKyQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCcoATCVlZWVlZWV - lZWVlZWVlZWVlRwBAQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBG5WVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP8AAAAA/wAA/gAAAAD/AAD+AAAAAH8AAP4AAAAAfwAAngAAAAB/AAAPAAAAAD8AAI8A - AAAAPwAA/wAAAAA/AAD/gAAAAB8AAP+AAAAAHwAAh4AAAAAfAAADwAAAAA8AAIPAAAAADwAA/8AAAAAP - AAD/4AAAAAcAAP/gAAAABwAAgeAAAAAHAAAA8AAAAAMAAIDwAAAAAwAA//AAAAADAAD/+AAAAAEAAP/4 - AAAAAQAAgHgAAAABAAAAPAAAAAAAAIA8AAAAAAAA//4AAAABAAD//wAAAAMAAP///////wAA//////// - AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 865, 17 + + + 699, 17 + + + 371, 17 + + + 17, 17 + + + 533, 17 + + + 324, 56 + + + 17, 56 + + + 172, 56 + + + 187, 17 + + + 440, 56 + + + 53 + + + + + AAABAAcAEBAQAAAAAAAoAQAAdgAAABAQAAAAAAAAaAUAAJ4BAAAYGAAAAAAAAMgGAAAGBwAAICAQAAAA + AADoAgAAzg0AACAgAAAAAAAAqAgAALYQAAAwMBAAAAAAAGgGAABeGQAAMDAAAAAAAACoDgAAxh8AACgA + AAAQAAAAIAAAAAEABAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAgAAAAACAAACA + gACAAIAAgICAAMDAwAAA/wAA/wAAAP//AAAAAP8AAP//AAAAAAD///8AERERERERERERERERERERERER + ERERERERERERERERERERAAAAAAABEXF//////wEREX+IiIiPgBF3F/f////wEREX+I//+PARdxf/d3d3 + +AEREX//////AXdxeqqqq7wBEREXd3d3d3ERERERERERERERERERERERERERERERERH//wAA//8AAP// + AAD//xERwAd4iEAHiIjAA4iIIAMREeADd/8gAf//8AH//xABERH4ARf//////////////xERKAAAABAA + AAAgAAAAAQAIAAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAALJOHQDfjScAeEQoAN+QLgCGUzkAtHU7ANSU + SQDnoEkA6KNOALF8WQBmZmYAtIprAICJiQC+oYwAlJSQAIuWlwCPlpcAmZydAKOlpAC2r6UAlKKsALay + rAC7tq4AuLaxAM3FugDJzMwAz9DNANDQ0ADO09MAy93hANbh5ADW5OgA1+frAOLp6wDn7O0A2OrvANnq + 7wDo8vUA6/T3APP29wAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgoKCgoKCgoKCgoKCgoKCgo + KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgKCgoKCgoKCgoKKCgoKCgAAAAAAAAAAAAAAAooKBco + CSMjIyMjIyMjIwAKKCgoKAkgHBkZGRkZGSUNAgooFhEoCR0QKSkpKSchJAUKKCgoKAkjFBspKSkpHiYL + CigTDigJHyMMDAwMDA8iGgUKKCgoKAkjIyMjIyMjIyMFChgVEigJAwEBAQEBCAcGBQQoKCgoKAAAAAAA + AAAAAAAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo//94iv// + AAD//zMV4AdrbsADAqNAA6OjwAFvkyABAADgAQAAIABnfvAApaQQAKSk+AGYjv//NgD//zEG//9RlCgA + AAAYAAAAMAAAAAEACAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwb+/APr5+QDQy8oA0szKAKGQ + iQCikIgA18jBAHdEKgB3Ri4AjlY5AKp0WQB1UkAAoXFZAHRSQQBxU0QAhmdYAK+MegCykYEAopKKALqy + rgDPy8kAe0gtAJFZOwCxeVkAtH5fAJ1uVQCeb1YAdFNBAIZmVQCGZ1YAu5mGALycigC6m4oAwKaXAJOA + dQCmlIoA3dLMALyzrgDAubUAp25MALJ6WQDBl30Awpl/ALOPegC7nIoAupuJAMCnmADCqZoAqJeNANzS + zADCurUArFITAL9oLgCUhHkArJuPAMrGwwChVxsAwp+DAMG3rwDEu7QA3GkAANaofgDTwK8AwLGkAMa4 + qwDebwAA3W8AANxtAADGuKoA0snAANDIwADpiiUA95w3AO+YPADgtogA37WIAN61iADftokA37eKANXL + wADXzcEA0ci8AOWsWwDotGUA6LVlAOu5aADpuGwA67tvAOq7cQDluHMA3bV2ALa2tQChpaQA2NzbANfb + 2gDg//8AkpubAJOZmQCgpaUAnaKiAKGvsACvuLkA3u7wANzs7gDd5eYA3vr/AOL7/wCdqqwAtbu8ALDA + wwDg6uwA2+XnAO7z9ADd8fYAv9HVAMLT1wC/0NQA2uzwANPk6ADk8PMA5e7wANzk5gDP09QA7fHyAN32 + /QDP4ucAz+HmANvt8gDa7PEA2OrvAN/q7QDl8PMA3ff/AN73/wDd9v4A3PX9ANrw9wDc8PYAwNHWANvs + 8QDa6/AA4/P4AODq7QDl7/IA5O7xAN31/QDg9/8A3PL6ANjq8ADb7PIA4fH3AN7m6QDY4OMA2/P9ANry + /ADb8/4A2vL9ANfv+gDa8/8A7vL0AO3x8wD4+PkA////AP39/QDp6ekAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4eHh4eHh4eHh4eHh0Q + NgAAAAAAAAAAAAsgIS4uLi4uLi4uLi0fCg8AAAAAAEAFEj9gfZKSkpKSkpKSkpJqaRc2AAAAAEcEByuI + goCMdoGBgYGBgYGNhTAMAAAAAAAAAClolXCRkI+Pj4+Pj4N5l14WAAAAAEATBRFRiWVte6ChoaGhoXx6 + eIoaIwAAAEYzFSUqa25dAQKjo6Ojo6Nxb5MiDgAAAAAAAAAZZ35hXKWkpKSkpKSimI5fCDYAAEExBgUR + UZRsYmNjY2NjY2NkZoRyGyMAAFA8JwMyKoZ/i3Nzc3Nzc3N1dHeHLxw2AAAAAAAAGJafnJycnJycnJyb + nZ6amQk2AEU3JAUFLFNWVVRUVFRUVFVZV1hbWjk2AFI7JhQ4ADU9REJDQ0NDQ0NKSEkNKDQ2AAAAAAAA + AAA6Pk9NTU1NTU1MTE5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////Kv///w7///8o////KP///yjwAB8o8AAPToAAB12AAAdD8AAHIIAA + Az2AAAM9+AABPYAAAT2AAABV/AAAXYAAAF2CAABd/wABVf///1X///9V////Vf///1X///9dKAAAACAA + AABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAICAAAAAAIAAAICAAIAA + gACAgIAAwMDAAAD/AAD/AAAA//8AAAAA/wAA//8AAAAAAP///wARERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERAAAAAAAAAAAAAAER + EREREXiIiIiIiIiIiIiAERERABF3////////////8BEREX9xF/////////////cBEREXcReP//////// + ///4AREREREXf/iIiIiIiIiP/wEREQABEX/4f4//////j/9wERF/9xF4+H+I//////j/gBERF3cRd/iH + 9//////4//ARERERERf/h/f/////+P/3ARFwAAEXj4d3d3d3d3eP+AERf//3F3+IiIiIiIiIiP8wERd3 + dxF/////////////cBEREREReP///////////4ARcAAAEXi7u7u7u7u7u7uyAX///3EXqqqqqqqqq6us + ygEXd3dxF6qqqqqqqqqqqqoBERERERF3d3d3d3d3d3d3ERERERERERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + EREREREREREREf//////////////////////////////////////////8AAAf/AAAD8wAAA/GAAAH5gA + AB/4AAAfHAAADwwAAA+MAAAP/gAABwYAAAcCAAADgwAAA/8AAAMDAAABAYAAAYGAAAH/wAAD//////// + ////////////////////////KAAAACAAAABAAAAAAQAIAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAJ44 + AACmQAAAsUsAANNtAADZcgAAmDcGAH4wCQB/MQoAlDoMAHAvDwCDNg8AcDEQAJ5CEwDBZRMAoEQVANN0 + FQCWQRYAl0IXAI9CHAChTCEAznQiANF4JgDzoScAXzsoAGpBKwCdUy4AnlMuAJ5VLwCiWDMAplw3AN+N + OwCjXjwArG5PALF0VQBeXl4As3tfALCIYwBmZmYAhHNoAG5ycgBwd3cAc3h3AHV5eAB2enkAeXt6AHl8 + egB6fHoAe317AH1+ewB+f3wAvJiEALmghgCKiooAkJCMAI6RkAD/zJkApaShAKWloQCmpaEAxLKlAKqq + qgChsLEAysG5AMC+uwDCwLwAury9AMXFwgDGxsMAvsLEANnQxQDNy8cA087JANbQyQDP0M0A4NfNAOnc + 0ADs4NEAv9DUANLa2wDO4OQA0uToAOjo6ADg6OoA6urqANnp7QDY6u8A2ervANvr8ADv8/QA6fP2APj4 + +AD7+/sA/f39AAAAAAA0b/8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d + XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d + XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d + XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dJSUlJSUlJSUl + JSUlJSUlJSUlJSUlXV1dXV1dXV1dXR8SCgcGBgYGBgYGBgYGBgYGBgYGByUmXV1dXV1dXV1dCDtGRkZG + RkZGRkZGRkZGRkZGRkY+BSVdXV1dXUI2XV0gM1VVVVVVVVVVVVVVVVVVVVVVVVUTJV1dXV1dQEA/XV0M + VVVVVVVVVVVVVVVVVVVVVVVVVTILJV1dXV1dXV1dXQ5JVV9fX19fX19fX19fX19fX19VTgUlXV1dXV1d + XV1dICRVVE1NTU1NTU1NTU1NTU1NX1ZVEyVdXV1dNS4qXV1dDFVVPShfPFFfX19fX19fX01YX1UyCyVd + XV1FRT8/XV0OSVU9KF84PF9fX19fX19fUk1fVU4FJV1dXV1dXV1dXSAkVU89KFsiU1pfX19fX19cTV9X + VRMlXV1dXV1dXV1dXQxVVT0oXzRTU19fX19fX19NX1lVMgslXV05MC0qJ11dDklVPSgoKCgoKCgoKCgo + KChNX1VOBSVdXUtLSENEP10gJFVQPT09PT09PT09PT09PT1NVVUTFyVdXV1dXV1dXV0MVVVVVVVVVVVV + VVVVVVVVVVVVVTIJJV1dXV1dXV1dXQ5JVVVVVVVVVVVVVVVVVVVVVVVVTgUlXToxLywrKV1dIw0WFhYW + FhYWFhYWFhYWFhYWFhYWARglTExKR0NBP11dAAQEBAQEBAQEBAQEBAQ3DzcPXg8DASVdXV1dXV1dXV0d + AhQVHh4eHh4eHh4eHh4eHh4eHgMFXV1dXV1dXV1dXV0hHBsaGRkZGRkZGRkZGRkZGRkQEV1dXV1dXV1d + XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d + XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d + XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d + XV1dXV1d//////////////////////////////////////gAAD/wAAAf8AAAHzAAAB8YAAAP+AAAD/gA + AA8cAAAHDAAAB/wAAAf+AAADBgAAAwIAAAH/AAAB/wAAAQMAAAABgAAA/4AAAf/AAAP///////////// + //////////////////8oAAAAMAAAAGAAAAABAAQAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAgIAAAAAAgAAAgIAAgACAAICAgADAwMAAAP8AAP8AAAD//wAAAAD/AAD//wAAAAAA////ABER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERAAAAAAAAAAAAAA + AAAAAAABERERERERERd3d3d3d3d3d3d3d3d3d3cgERERERERERd///////////////////ggERERERAB + ERc///////////////////8wEREREX/wERF4//////////////////9yARERERd3ERF3//////////// + //////+CARERERERERFz///////////////////zAREREREREREXj//////////////////3IBERERER + EREXf/iIiIiIiIiIiIiIj//4IBERERAAAREXP/+If/h/////////j///MBEREX//8BEReP+IeP9///// + ////iP//cgERERd3dxERd//4d/94////////+P//ggERERERERERc//4h4+H////////+P//8wERERER + ERERF4/4h3/3////////+I//9yARERERERERF3//h3j4f///////+I//+CARERAAAAERFz//iHd3d3d3 + d3d3d4j//zAREX////AREXj/iIiIiIiIiIiIiIj//3IBERd3d3cREXf//////////////////4IBERER + EREREXP///////////////////MBEREREREREReP//////////////////cgERERERERERd///////// + //////////ggERAAAAABERd6qqqqqqqqqqqqqqqqqqowEX/////wERF6qqqqqqqqqqqqq7q7rMMyARd3 + d3d3ERF6qqqqqqqqqqqqqrqrp8cyAREREREREREXu7u7u7u7u7u7u7u7u7uyARERERERERERd3d3d3d3 + d3d3d3d3d3d3ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + EREREREREREREf///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP4AAAAB/wAA/gAAAAD/ + AAD+AAAAAP8AAJ4AAAAA/wAADwAAAAB/AACPAAAAAH8AAP8AAAAAfwAA/4AAAAA/AAD/gAAAAD8AAIeA + AAAAPwAAA8AAAAAfAACDwAAAAB8AAP/AAAAAHwAA/+AAAAAPAAD/4AAAAA8AAIHgAAAADwAAAPAAAAAH + AACA8AAAAAcAAP/wAAAABwAA//gAAAADAAD/+AAAAAMAAIB4AAAAAwAAADwAAAABAACAPAAAAAEAAP/+ + AAAAAQAA//8AAAADAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AACgAAAAwAAAAYAAAAAEACAAAAAAAgAoAAAAA + AAAAAAAAAAAAAAAAAACQMAAAmTMAAKE7AACtRwAAu1UAAMNdAADMZgAA020AAN13AAD2kAAAoz0BAIYv + BACbNwQAzGkGAKNEDQBwMRAAnkITAHQ1FAAVFRUAaTIVAKBEFQDTdBUA4oMVAJhDGACgSh4Ao0sfAKFM + IQCaSyMAp08jAJ1NJQClUCUAXzsoAFw9LABhQS8AvHYxANB9MQDeijcAODg4AG5LOADaiTkAvHM9AOGQ + PwB5U0AA3I5AAKxqSQBNTU0AnWhNALN/YwBmZmYAtYRqAO+sagD1s2oAcXFxAHB3dwC4jncAdXp6APa7 + fwD6v38Ae4SEALyYhAB7aoYAh5KSAJOcnACXpaUAmaioAJqmqQCqqqoAra2rAJ+srACvr6wAq66uALSy + rgC3tbAAvLixAL24sQDBu7MAw720AMrCtwDLwrcApra4ANXJuwDXyrwArLy9ANnLvQDczr4A4NDAAOTT + wQDq18QA69jEAPLcxwD13sgAtMXJAM/QzQDGzc4AuszRALvN0gC/0NQAwtPWAMbV2QDJ19sA0trbANvb + 2wDJ2t4Ay9zgANfc4ADa3eEA3uHjAPjw4wDf4uQA2OLlAPjy5QDk5uYA3uLnAOXm5wDS5OgA3OXoAOzr + 6ADr6+kA7uzpAPn06QDq6uoA8u/rAPr16wDW6OwA9vLsAOPr7QD59O0A2OrvANnq7wDo7u8A2+vwAOvt + 8ADt7/AA3ezxAODu8gDv8fIA7vDzAPLz8wD19PMA5fH0APf29AD69/UA6fP2APz69gDt9fcA9/f3APX3 + +ADy+PkA+fz8AAAAAAA0b/8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMJWVlZWVlZWVlZWVlZWV + lQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQERMJWVlZWVlZWVlZWVlZWVlQEvNjY2NjY2NjY2 + NjY2NjY2NjY2NjY2NjY2NjY2NiwBITCVlZWVlZWVlZWVlZWVlQExf39/f39/f39/f39/f39/f39/f39/ + f39/f39/f2QBEzCVlZWVlZWVlTAwlZWVlRcQf39/f39/f39/f39/f39/f39/f39/f39/f39/f38aGDCV + lZWVlZWVa1RJMJWVlZUBXH9/f39/f39/f39/f39/f39/f39/f39/f39/f387ASAwlZWVlZWVlXZscJWV + lZUAMX9/f39/f39/f39/f39/f39/f39/f39/f39/f39kAQ8wlZWVlZWVlZWVlZWVlZUXEH9/f39/f39/ + f39/f39/f39/f39/f39/f39/f39/GgswlZWVlZWVlZWVlZWVlZWVAVx/f5eXl5eXl5eXl5eXl5eXl5eX + l5eXl5eXhX9/OwEfMJWVlZWVlZWVlZWVlZWVADF/f3I/T15eXl5eXl5eXl5eXl5eXl5eXl+XkH9/ZAEP + MJWVlZWVlTAwMDCVlZWVFxB/f38/QDVzc3Nzc3Nzc3Nzc3Nzc3NzbV6Bl39/fxoLMJWVlZWVblhRTEcw + lZWVlQFcf39hPzVGl5cSl5eXl5eXl5eXl5eXl2Bjl4Z/fzsBHzCVlZWVlXx0b2lwlZWVlQAxf397Pz41 + eJclZZeXl5eXl5eXl5eXl21el5N/f2QBDzCVlZWVlZWVlZWVlZWVlRcQf39/Uj81RpdCNJeXl5eXl5eX + l5eXl5JefZeAf38aGTCVlZWVlZWVlZWVlZWVlZUBXH9/Zj81N5eRLZeXl5eXl5eXl5eXl5dgYpeLf387 + AR8wlZWVlZWVlZWVlZWVlZUBMX9/fz89NUaXQkKXl5eXl5eXl5eXl5dBXpeUf39kAQ8wlZWVlTAwMDAw + MJWVlZUdEH9/f1I/NTU1NTU1NTU1NTU1NTU1NTU6W12Xgn9/GhkwlZWVd1lWU05KRTCVlZWVAVx/f2c/ + Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P0SXjn9/OwEfMJWVlX55dXFqaHCVlZWVATF/f39/f39/f39/f39/f39/ + f39/f39/f39/f39/ZAEPMJWVlZWVlZWVlZWVlZWVHRB/f39/f39/f39/f39/f39/f39/f39/f39/f39/ + fxoZMJWVlZWVlZWVlZWVlZWVlQFcf39/f39/f39/f39/f39/f39/f39/f39/f39/fzsBHzCVlZWVlZWV + lZWVlZWVlQExf39/f39/f39/f39/f39/f39/f39/f39/f39/f2QBDzCVlTAwMDAwMDAwlZWVlR0CCQkJ + CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkDHjCVelpXVVBNS0hDMJWVlZUBBwgICAgICAgICAgICAgI + CAgICAg5OQgzORaWliIEASYwlY+NjIqJh4SDiJWVlZUUDg0GBgYGBgYGBgYGBgYGBgYGBgYyOBUpOCku + ljwFASowlZWVlZWVlZWVlZWVlZWVAQojKyQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCcoATCVlZWVlZWV + lZWVlZWVlZWVlRwBAQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBG5WVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP8AAAAA/wAA/gAAAAD/AAD+AAAAAH8AAP4AAAAAfwAAngAAAAB/AAAPAAAAAD8AAI8A + AAAAPwAA/wAAAAA/AAD/gAAAAB8AAP+AAAAAHwAAh4AAAAAfAAADwAAAAA8AAIPAAAAADwAA/8AAAAAP + AAD/4AAAAAcAAP/gAAAABwAAgeAAAAAHAAAA8AAAAAMAAIDwAAAAAwAA//AAAAADAAD/+AAAAAEAAP/4 + AAAAAQAAgHgAAAABAAAAPAAAAAAAAIA8AAAAAAAA//4AAAABAAD//wAAAAMAAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA + + \ No newline at end of file diff --git a/trunk/MakeZipFile.cmd b/source/MakeZipFile.cmd similarity index 97% rename from trunk/MakeZipFile.cmd rename to source/MakeZipFile.cmd index f7a1082..3b63157 100644 --- a/trunk/MakeZipFile.cmd +++ b/source/MakeZipFile.cmd @@ -1,13 +1,13 @@ -cd "C:\Documents and Settings\Alphons\Mijn documenten\Visual Studio 2005\Projects\LSLEditor\bin\Debug" - -copy LsLEditor.exe LsLEditor-beta.exe - -del d:\temp\LsLEditor-beta.zip -del d:\temp\LsLEditor-beta.exe.bz2 -del d:\temp\LsLEditor-beta.exe.gz - -"c:\Program Files\7-Zip\7z" a -tzip d:\temp\LsLEditor-beta.zip LsLEditor-beta.exe -"c:\Program Files\7-Zip\7z" a -tbzip2 d:\temp\LsLEditor-beta.exe.bz2 LsLEditor-beta.exe -"c:\Program Files\7-Zip\7z" a -tgzip d:\temp\LsLEditor-beta.exe.gz LsLEditor-beta.exe - -pause +cd "C:\Documents and Settings\Alphons\Mijn documenten\Visual Studio 2005\Projects\LSLEditor\bin\Debug" + +copy LsLEditor.exe LsLEditor-beta.exe + +del d:\temp\LsLEditor-beta.zip +del d:\temp\LsLEditor-beta.exe.bz2 +del d:\temp\LsLEditor-beta.exe.gz + +"c:\Program Files\7-Zip\7z" a -tzip d:\temp\LsLEditor-beta.zip LsLEditor-beta.exe +"c:\Program Files\7-Zip\7z" a -tbzip2 d:\temp\LsLEditor-beta.exe.bz2 LsLEditor-beta.exe +"c:\Program Files\7-Zip\7z" a -tgzip d:\temp\LsLEditor-beta.exe.gz LsLEditor-beta.exe + +pause diff --git a/trunk/PermissionsForm.Designer.cs b/source/PermissionsForm.Designer.cs similarity index 97% rename from trunk/PermissionsForm.Designer.cs rename to source/PermissionsForm.Designer.cs index 47b056a..2aee4b1 100644 --- a/trunk/PermissionsForm.Designer.cs +++ b/source/PermissionsForm.Designer.cs @@ -1,136 +1,136 @@ -namespace LSLEditor -{ - partial class PermissionsForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.button1 = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.button2 = new System.Windows.Forms.Button(); - this.label3 = new System.Windows.Forms.Label(); - this.panel1 = new System.Windows.Forms.Panel(); - this.panel1.SuspendLayout(); - this.SuspendLayout(); - // - // button1 - // - this.button1.BackColor = System.Drawing.Color.SlateBlue; - this.button1.ForeColor = System.Drawing.Color.White; - this.button1.Location = new System.Drawing.Point(48, 248); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(80, 23); - this.button1.TabIndex = 0; - this.button1.Text = "Yes"; - this.button1.UseVisualStyleBackColor = false; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(8, 8); - this.label1.MaximumSize = new System.Drawing.Size(260, 0); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(35, 13); - this.label1.TabIndex = 13; - this.label1.Text = "label1"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(8, 88); - this.label2.MaximumSize = new System.Drawing.Size(260, 0); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(35, 13); - this.label2.TabIndex = 14; - this.label2.Text = "label2"; - // - // button2 - // - this.button2.BackColor = System.Drawing.Color.SlateBlue; - this.button2.ForeColor = System.Drawing.Color.White; - this.button2.Location = new System.Drawing.Point(144, 248); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(80, 23); - this.button2.TabIndex = 15; - this.button2.Text = "No"; - this.button2.UseVisualStyleBackColor = false; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(16, 224); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(58, 13); - this.label3.TabIndex = 16; - this.label3.Text = "Is this OK?"; - // - // panel1 - // - this.panel1.AutoScroll = true; - this.panel1.Controls.Add(this.label1); - this.panel1.Controls.Add(this.label2); - this.panel1.Location = new System.Drawing.Point(16, 8); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(264, 200); - this.panel1.TabIndex = 17; - // - // PermissionsForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.Color.CornflowerBlue; - this.ClientSize = new System.Drawing.Size(290, 300); - this.Controls.Add(this.panel1); - this.Controls.Add(this.label3); - this.Controls.Add(this.button2); - this.Controls.Add(this.button1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "PermissionsForm"; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; - this.Text = "llDialogForm"; - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Panel panel1; - } +namespace LSLEditor +{ + partial class PermissionsForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.button1 = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.button2 = new System.Windows.Forms.Button(); + this.label3 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // button1 + // + this.button1.BackColor = System.Drawing.Color.SlateBlue; + this.button1.ForeColor = System.Drawing.Color.White; + this.button1.Location = new System.Drawing.Point(48, 248); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(80, 23); + this.button1.TabIndex = 0; + this.button1.Text = "Yes"; + this.button1.UseVisualStyleBackColor = false; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(8, 8); + this.label1.MaximumSize = new System.Drawing.Size(260, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(35, 13); + this.label1.TabIndex = 13; + this.label1.Text = "label1"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(8, 88); + this.label2.MaximumSize = new System.Drawing.Size(260, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(35, 13); + this.label2.TabIndex = 14; + this.label2.Text = "label2"; + // + // button2 + // + this.button2.BackColor = System.Drawing.Color.SlateBlue; + this.button2.ForeColor = System.Drawing.Color.White; + this.button2.Location = new System.Drawing.Point(144, 248); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(80, 23); + this.button2.TabIndex = 15; + this.button2.Text = "No"; + this.button2.UseVisualStyleBackColor = false; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(16, 224); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(58, 13); + this.label3.TabIndex = 16; + this.label3.Text = "Is this OK?"; + // + // panel1 + // + this.panel1.AutoScroll = true; + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.label2); + this.panel1.Location = new System.Drawing.Point(16, 8); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(264, 200); + this.panel1.TabIndex = 17; + // + // PermissionsForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.CornflowerBlue; + this.ClientSize = new System.Drawing.Size(290, 300); + this.Controls.Add(this.panel1); + this.Controls.Add(this.label3); + this.Controls.Add(this.button2); + this.Controls.Add(this.button1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "PermissionsForm"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Text = "llDialogForm"; + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Panel panel1; + } } \ No newline at end of file diff --git a/trunk/PermissionsForm.cs b/source/PermissionsForm.cs similarity index 97% rename from trunk/PermissionsForm.cs rename to source/PermissionsForm.cs index 52b537f..03a4149 100644 --- a/trunk/PermissionsForm.cs +++ b/source/PermissionsForm.cs @@ -1,115 +1,115 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Collections; -using System.ComponentModel; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace LSLEditor -{ - public partial class PermissionsForm : Form - { - private SecondLifeHost host; - private SecondLife.String ObjectName; - private SecondLife.String OwnerName; - private SecondLife.key id; - private SecondLife.key agent; - private SecondLife.integer intPermissions; - - public PermissionsForm(SecondLifeHost host, string strObjectName, SecondLife.key id, string strOwner, SecondLife.key agent, int intPermissions) - { - InitializeComponent(); - - this.host = host; - this.OwnerName = strOwner; - this.ObjectName = strObjectName; - this.agent = agent; - this.id = id; - this.intPermissions = intPermissions; - - StringBuilder sb = new StringBuilder(); - - if ((intPermissions & SecondLife.PERMISSION_DEBIT) == SecondLife.PERMISSION_DEBIT) { - sb.AppendLine("Take Linden dollars (L$) from you"); - } - - if ((intPermissions & SecondLife.PERMISSION_TAKE_CONTROLS) == SecondLife.PERMISSION_TAKE_CONTROLS) { - sb.AppendLine("Act on your control inputs"); - } - - if ((intPermissions & SecondLife.PERMISSION_TRIGGER_ANIMATION) == SecondLife.PERMISSION_TRIGGER_ANIMATION) { - sb.AppendLine("Animate your avatar"); - } - - if ((intPermissions & SecondLife.PERMISSION_ATTACH) == SecondLife.PERMISSION_ATTACH) { - sb.AppendLine("Attach to your avatar"); - } - - if ((intPermissions & SecondLife.PERMISSION_CHANGE_LINKS) == SecondLife.PERMISSION_CHANGE_LINKS) { - sb.AppendLine("Link and delink from other objects"); - } - - if ((intPermissions & SecondLife.PERMISSION_TRACK_CAMERA) == SecondLife.PERMISSION_TRACK_CAMERA) { - sb.AppendLine("Track your camera"); - } - - if ((intPermissions & SecondLife.PERMISSION_CONTROL_CAMERA) == SecondLife.PERMISSION_CONTROL_CAMERA) { - sb.AppendLine("Control your camera"); - } - - this.label1.Text = "'" + strObjectName + "', an object owned by '" + strOwner + "',\nwould like to:"; - this.label2.Text = sb.ToString(); - } - - private void button2_Click(object sender, EventArgs e) - { - this.host.SetPermissions(new SecondLife.integer(0)); - this.Close(); - } - - private void button1_Click(object sender, EventArgs e) - { - this.host.SetPermissions(this.intPermissions); - this.Close(); - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Collections; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace LSLEditor +{ + public partial class PermissionsForm : Form + { + private SecondLifeHost host; + private SecondLife.String ObjectName; + private SecondLife.String OwnerName; + private SecondLife.key id; + private SecondLife.key agent; + private SecondLife.integer intPermissions; + + public PermissionsForm(SecondLifeHost host, string strObjectName, SecondLife.key id, string strOwner, SecondLife.key agent, int intPermissions) + { + InitializeComponent(); + + this.host = host; + this.OwnerName = strOwner; + this.ObjectName = strObjectName; + this.agent = agent; + this.id = id; + this.intPermissions = intPermissions; + + StringBuilder sb = new StringBuilder(); + + if ((intPermissions & SecondLife.PERMISSION_DEBIT) == SecondLife.PERMISSION_DEBIT) { + sb.AppendLine("Take Linden dollars (L$) from you"); + } + + if ((intPermissions & SecondLife.PERMISSION_TAKE_CONTROLS) == SecondLife.PERMISSION_TAKE_CONTROLS) { + sb.AppendLine("Act on your control inputs"); + } + + if ((intPermissions & SecondLife.PERMISSION_TRIGGER_ANIMATION) == SecondLife.PERMISSION_TRIGGER_ANIMATION) { + sb.AppendLine("Animate your avatar"); + } + + if ((intPermissions & SecondLife.PERMISSION_ATTACH) == SecondLife.PERMISSION_ATTACH) { + sb.AppendLine("Attach to your avatar"); + } + + if ((intPermissions & SecondLife.PERMISSION_CHANGE_LINKS) == SecondLife.PERMISSION_CHANGE_LINKS) { + sb.AppendLine("Link and delink from other objects"); + } + + if ((intPermissions & SecondLife.PERMISSION_TRACK_CAMERA) == SecondLife.PERMISSION_TRACK_CAMERA) { + sb.AppendLine("Track your camera"); + } + + if ((intPermissions & SecondLife.PERMISSION_CONTROL_CAMERA) == SecondLife.PERMISSION_CONTROL_CAMERA) { + sb.AppendLine("Control your camera"); + } + + this.label1.Text = "'" + strObjectName + "', an object owned by '" + strOwner + "',\nwould like to:"; + this.label2.Text = sb.ToString(); + } + + private void button2_Click(object sender, EventArgs e) + { + this.host.SetPermissions(new SecondLife.integer(0)); + this.Close(); + } + + private void button1_Click(object sender, EventArgs e) + { + this.host.SetPermissions(this.intPermissions); + this.Close(); + } + } +} diff --git a/trunk/PermissionsForm.resx b/source/PermissionsForm.resx similarity index 97% rename from trunk/PermissionsForm.resx rename to source/PermissionsForm.resx index ff31a6d..19dc0dd 100644 --- a/trunk/PermissionsForm.resx +++ b/source/PermissionsForm.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/trunk/Plugins/Generic.cs b/source/Plugins/Generic.cs similarity index 97% rename from trunk/Plugins/Generic.cs rename to source/Plugins/Generic.cs index fa3d61c..72dda7e 100644 --- a/trunk/Plugins/Generic.cs +++ b/source/Plugins/Generic.cs @@ -1,106 +1,106 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.IO; -using System.Windows.Forms; -using System.Reflection; -using LSLEditor.Docking; - -namespace LSLEditor.Plugins -{ - class Generic - { - private delegate void RunDelegate(string strFilePath, RichTextBox tb); - - public Generic(LSLEditorForm parent, string strPluginName) - { - EditForm editForm = parent.ActiveMdiForm as EditForm; - if (editForm == null) - return; - - string strFilePath = editForm.FullPathName; - RichTextBox tb = editForm.TextBox as RichTextBox; - - string strDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); - string strPluginsDirectory = Path.Combine(strDirectory, "Plugins"); - string strProgram = Path.Combine(strPluginsDirectory, strPluginName + ".exe"); - - Assembly assembly = null; - - try - { - assembly = Assembly.LoadFrom(strProgram); - } - catch - { - MessageBox.Show("Not a valid plugin, see http://www.lsleditor.org/help/Plugins.aspx", "Plugins", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - - if (assembly == null) - return; - - object[] args = new object[] { strFilePath, tb }; - - foreach (Type t in assembly.GetTypes()) - { - if (t.BaseType.Name == "DockContent") - { - DockContent form = assembly.CreateInstance(t.FullName, false, - BindingFlags.Public|BindingFlags.Instance|BindingFlags.CreateInstance, - null, args, null, null) as DockContent; - if (form != null) - { - parent.AddForm(form); - return; - } - } - MethodInfo info = t.GetMethod("Run", - BindingFlags.Public | - BindingFlags.NonPublic | - BindingFlags.Static); - - if (info == null) - continue; - - info.Invoke(null, args); - } - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.IO; +using System.Windows.Forms; +using System.Reflection; +using LSLEditor.Docking; + +namespace LSLEditor.Plugins +{ + class Generic + { + private delegate void RunDelegate(string strFilePath, RichTextBox tb); + + public Generic(LSLEditorForm parent, string strPluginName) + { + EditForm editForm = parent.ActiveMdiForm as EditForm; + if (editForm == null) + return; + + string strFilePath = editForm.FullPathName; + RichTextBox tb = editForm.TextBox as RichTextBox; + + string strDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + string strPluginsDirectory = Path.Combine(strDirectory, "Plugins"); + string strProgram = Path.Combine(strPluginsDirectory, strPluginName + ".exe"); + + Assembly assembly = null; + + try + { + assembly = Assembly.LoadFrom(strProgram); + } + catch + { + MessageBox.Show("Not a valid plugin, see http://www.lsleditor.org/help/Plugins.aspx", "Plugins", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + if (assembly == null) + return; + + object[] args = new object[] { strFilePath, tb }; + + foreach (Type t in assembly.GetTypes()) + { + if (t.BaseType.Name == "DockContent") + { + DockContent form = assembly.CreateInstance(t.FullName, false, + BindingFlags.Public|BindingFlags.Instance|BindingFlags.CreateInstance, + null, args, null, null) as DockContent; + if (form != null) + { + parent.AddForm(form); + return; + } + } + MethodInfo info = t.GetMethod("Run", + BindingFlags.Public | + BindingFlags.NonPublic | + BindingFlags.Static); + + if (info == null) + continue; + + info.Invoke(null, args); + } + } + } +} diff --git a/trunk/Plugins/LSLint.cs b/source/Plugins/LSLint.cs similarity index 97% rename from trunk/Plugins/LSLint.cs rename to source/Plugins/LSLint.cs index 2b725e7..c4336c1 100644 --- a/trunk/Plugins/LSLint.cs +++ b/source/Plugins/LSLint.cs @@ -1,185 +1,185 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.IO; -using System.Reflection; -using System.Diagnostics; -using System.Collections.Generic; -using System.Windows.Forms; -using System.Text; -/* -

- - Added: Plugin support
- At this moment only lslint.exe is supported! (get the windows version from
http://w-hat.com/lslint/)
- Create a subdirectory 'plugins' in the directory where LSLEditor.exe resides
- Copy lslint.exe into this plugins directory
- Menu Tools - Options - Environment - Plugins - Check lslint checkbox
- When hitting the OK button, Menu - Tools - lslint should appear
-

- - */ -namespace LSLEditor.Plugins -{ - class LSLint - { - public string ExceptionMessage; - public bool HasErrors; - - public LSLint() - { - ExceptionMessage = ""; - } - private string Execute(string strSourceCode) - { - string strAll = ""; - try - { - string strPluginName = "lslint"; - string strArguments = ""; - Process process = new Process(); - - string strDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); - string strPluginsDirectory = Path.Combine(strDirectory, "Plugins"); - string strProgram = Path.Combine(strPluginsDirectory, strPluginName + ".exe"); - - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.RedirectStandardError = true; - process.StartInfo.RedirectStandardInput = true; - process.StartInfo.CreateNoWindow = true; - process.StartInfo.FileName = strProgram; - process.StartInfo.Arguments = strArguments; - process.Start(); - process.StandardInput.Write(strSourceCode); - process.StandardInput.Close(); - strAll = process.StandardError.ReadToEnd(); - process.WaitForExit(); - } - catch(Exception exception) - { - this.ExceptionMessage += exception.Message + "\r\n"; - } - return strAll; - } - - private void RunOnce(ListView listView, EditForm editForm) - { - // ProjectName, ScriptName, - string strErrors = Execute(editForm.SourceCode); - StringReader sr = new StringReader(strErrors); - int intNr = 1; - while (true) - { - string strLine = sr.ReadLine(); - if (strLine == null) - break; - strLine = strLine.Trim(); - - if (strLine.StartsWith("TOTAL")) - continue; - - string strLineNr = ""; - string strColumnNr = ""; - string strErrorNr = ""; - - int intImageIndex = -1; - if (strLine.StartsWith("WARN")) - intImageIndex = 1; - - if (strLine.StartsWith("ERR")) - intImageIndex = 0; - - int intI = strLine.IndexOf("::"); - if (intI > 0) - { - strLine = strLine.Substring(intI + 2).Trim(); - intI = strLine.IndexOf(":"); - if (intI > 0) - { - string strLineColumn = strLine.Substring(0, intI).Replace("(", "").Replace(")", "").Replace(" ", ""); - string[] LineColumn = strLineColumn.Split(new char[] { ',' }); - if (LineColumn.Length > 1) - { - int intLine = 0; - int intColumn = 0; - - int.TryParse(LineColumn[0], out intLine); - int.TryParse(LineColumn[1], out intColumn); - - strLineNr = intLine.ToString(); - strColumnNr = intColumn.ToString(); - strErrorNr = intNr.ToString(); - } - strLine = strLine.Substring(intI + 1).Trim(); - } - } - - ListViewItem lvi = new ListViewItem(new string[] { - "", // 0 - strErrorNr, // 1 - strLine, // 2 - editForm.ScriptName, // 3 - strLineNr, // 4 - strColumnNr, // 5 - editForm.ProjectName , // 6 - editForm.FullPathName, // 7 - editForm.guid.ToString(), // 8 - editForm.IsScript.ToString()// 9 - } , intImageIndex); - listView.Items.Add(lvi); - if(strErrorNr!="") - intNr++; - } - } - - public bool SyntaxCheck(LSLEditorForm parent) - { - foreach (Form form in parent.Children) - { - EditForm editForm = form as EditForm; - if (editForm == null || editForm.IsDisposed) - continue; - RunOnce(parent.SyntaxErrors.ListView, editForm); - } - this.HasErrors = (parent.SyntaxErrors.ListView.Items.Count != 0); - return (ExceptionMessage == ""); - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.IO; +using System.Reflection; +using System.Diagnostics; +using System.Collections.Generic; +using System.Windows.Forms; +using System.Text; +/* +

+ - Added: Plugin support
+ At this moment only lslint.exe is supported! (get the windows version from http://w-hat.com/lslint/)
+ Create a subdirectory 'plugins' in the directory where LSLEditor.exe resides
+ Copy lslint.exe into this plugins directory
+ Menu Tools - Options - Environment - Plugins - Check lslint checkbox
+ When hitting the OK button, Menu - Tools - lslint should appear
+

+ + */ +namespace LSLEditor.Plugins +{ + class LSLint + { + public string ExceptionMessage; + public bool HasErrors; + + public LSLint() + { + ExceptionMessage = ""; + } + private string Execute(string strSourceCode) + { + string strAll = ""; + try + { + string strPluginName = "lslint"; + string strArguments = ""; + Process process = new Process(); + + string strDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + string strPluginsDirectory = Path.Combine(strDirectory, "Plugins"); + string strProgram = Path.Combine(strPluginsDirectory, strPluginName + ".exe"); + + process.StartInfo.UseShellExecute = false; + process.StartInfo.RedirectStandardOutput = true; + process.StartInfo.RedirectStandardError = true; + process.StartInfo.RedirectStandardInput = true; + process.StartInfo.CreateNoWindow = true; + process.StartInfo.FileName = strProgram; + process.StartInfo.Arguments = strArguments; + process.Start(); + process.StandardInput.Write(strSourceCode); + process.StandardInput.Close(); + strAll = process.StandardError.ReadToEnd(); + process.WaitForExit(); + } + catch(Exception exception) + { + this.ExceptionMessage += exception.Message + "\r\n"; + } + return strAll; + } + + private void RunOnce(ListView listView, EditForm editForm) + { + // ProjectName, ScriptName, + string strErrors = Execute(editForm.SourceCode); + StringReader sr = new StringReader(strErrors); + int intNr = 1; + while (true) + { + string strLine = sr.ReadLine(); + if (strLine == null) + break; + strLine = strLine.Trim(); + + if (strLine.StartsWith("TOTAL")) + continue; + + string strLineNr = ""; + string strColumnNr = ""; + string strErrorNr = ""; + + int intImageIndex = -1; + if (strLine.StartsWith("WARN")) + intImageIndex = 1; + + if (strLine.StartsWith("ERR")) + intImageIndex = 0; + + int intI = strLine.IndexOf("::"); + if (intI > 0) + { + strLine = strLine.Substring(intI + 2).Trim(); + intI = strLine.IndexOf(":"); + if (intI > 0) + { + string strLineColumn = strLine.Substring(0, intI).Replace("(", "").Replace(")", "").Replace(" ", ""); + string[] LineColumn = strLineColumn.Split(new char[] { ',' }); + if (LineColumn.Length > 1) + { + int intLine = 0; + int intColumn = 0; + + int.TryParse(LineColumn[0], out intLine); + int.TryParse(LineColumn[1], out intColumn); + + strLineNr = intLine.ToString(); + strColumnNr = intColumn.ToString(); + strErrorNr = intNr.ToString(); + } + strLine = strLine.Substring(intI + 1).Trim(); + } + } + + ListViewItem lvi = new ListViewItem(new string[] { + "", // 0 + strErrorNr, // 1 + strLine, // 2 + editForm.ScriptName, // 3 + strLineNr, // 4 + strColumnNr, // 5 + editForm.ProjectName , // 6 + editForm.FullPathName, // 7 + editForm.guid.ToString(), // 8 + editForm.IsScript.ToString()// 9 + } , intImageIndex); + listView.Items.Add(lvi); + if(strErrorNr!="") + intNr++; + } + } + + public bool SyntaxCheck(LSLEditorForm parent) + { + foreach (Form form in parent.Children) + { + EditForm editForm = form as EditForm; + if (editForm == null || editForm.IsDisposed) + continue; + RunOnce(parent.SyntaxErrors.ListView, editForm); + } + this.HasErrors = (parent.SyntaxErrors.ListView.Items.Count != 0); + return (ExceptionMessage == ""); + } + } +} diff --git a/trunk/Plugins/Particles.cs b/source/Plugins/Particles.cs similarity index 97% rename from trunk/Plugins/Particles.cs rename to source/Plugins/Particles.cs index dc041d6..64dcb0a 100644 --- a/trunk/Plugins/Particles.cs +++ b/source/Plugins/Particles.cs @@ -1,71 +1,71 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.IO; -using System.Windows.Forms; -using System.Reflection; - -namespace LSLEditor.Plugins -{ - class Particles - { - public Particles(LSLEditorForm parent) - { - string strPluginName = "Particles"; - - string strDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); - string strPluginsDirectory = Path.Combine(strDirectory, "Plugins"); - string strProgram = Path.Combine(strPluginsDirectory, strPluginName + ".exe"); - - Assembly assembly = Assembly.LoadFrom(strProgram); - Form frmMain = assembly.CreateInstance("Particles.frmMain") as Form; - - /* if (parent.IsMdiContainer) - { - parent.AddForm(frmMain); - } - else - {*/ - //MessageBox.Show("This plugin does not run in tabbed mode", "Particles plugin", MessageBoxButtons.OK, MessageBoxIcon.Error); - frmMain.Show(); - //} - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.IO; +using System.Windows.Forms; +using System.Reflection; + +namespace LSLEditor.Plugins +{ + class Particles + { + public Particles(LSLEditorForm parent) + { + string strPluginName = "Particles"; + + string strDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + string strPluginsDirectory = Path.Combine(strDirectory, "Plugins"); + string strProgram = Path.Combine(strPluginsDirectory, strPluginName + ".exe"); + + Assembly assembly = Assembly.LoadFrom(strProgram); + Form frmMain = assembly.CreateInstance("Particles.frmMain") as Form; + + /* if (parent.IsMdiContainer) + { + parent.AddForm(frmMain); + } + else + {*/ + //MessageBox.Show("This plugin does not run in tabbed mode", "Particles plugin", MessageBoxButtons.OK, MessageBoxIcon.Error); + frmMain.Show(); + //} + } + } +} diff --git a/trunk/Plugins/Svn.cs b/source/Plugins/Svn.cs similarity index 96% rename from trunk/Plugins/Svn.cs rename to source/Plugins/Svn.cs index 43dc227..8f8142c 100644 --- a/trunk/Plugins/Svn.cs +++ b/source/Plugins/Svn.cs @@ -1,144 +1,144 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Collections.Generic; -using System.Text; - -using System.Windows.Forms; - -using Microsoft.Win32; - -using System.IO; -using System.Diagnostics; - -namespace LSLEditor -{ - class Svn - { - public string Output; - public string Error; - - // HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\App Paths\svn.exe - // HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\svn.exe - public static string Executable - { - get - { - try - { - string strKey = @"Software\Microsoft\Windows\CurrentVersion\App Paths\svn.exe"; - RegistryKey key = Registry.CurrentUser.OpenSubKey(strKey, false); - if (key == null) - return null; - string strExe = key.GetValue("").ToString(); - key.Close(); - return strExe; - } - catch - { - return null; - } - } - } - - public static bool IsInstalled - { - get - { - return (Svn.Executable != null); - } - } - - public bool Execute(string Arguments, bool ShowOutput, bool ShowError) - { - this.Error = ""; - this.Output = ""; - - Process p = new Process(); - StreamWriter sw; - StreamReader sr; - StreamReader err; - - p.StartInfo.FileName = Properties.Settings.Default.SvnExe; - p.StartInfo.Arguments = Arguments; - p.StartInfo.RedirectStandardError = true; - p.StartInfo.RedirectStandardInput = true; - p.StartInfo.RedirectStandardOutput = true; - p.StartInfo.UseShellExecute = false; - p.StartInfo.CreateNoWindow = true; - - p.Start(); - - sw = p.StandardInput; - sr = p.StandardOutput; - err = p.StandardError; - - sw.AutoFlush = true; - - StringBuilder sb = new StringBuilder(); - - while (sr.Peek() >= 0) - { - char[] buffer = new char[1024]; - sr.Read(buffer, 0, buffer.Length); - sb.Append(new string(buffer)); - } - sw.Close(); - this.Output = sb.ToString(); - - sb = new StringBuilder(); - while (err.Peek() >= 0) - { - char[] buffer = new char[4096]; - err.Read(buffer, 0, buffer.Length); - sb.Append(new string(buffer)); - } - this.Error = sb.ToString(); - - if (this.Error != "" && ShowError) - MessageBox.Show(this.Error, "SVN Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - - if (this.Output != "" && ShowOutput) - MessageBox.Show(this.Output, "SVN Information", MessageBoxButtons.OK, MessageBoxIcon.Information); - - return (this.Error == ""); - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Collections.Generic; +using System.Text; + +using System.Windows.Forms; + +using Microsoft.Win32; + +using System.IO; +using System.Diagnostics; + +namespace LSLEditor +{ + class Svn + { + public string Output; + public string Error; + + // HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\App Paths\svn.exe + // HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\svn.exe + public static string Executable + { + get + { + try + { + string strKey = @"Software\Microsoft\Windows\CurrentVersion\App Paths\svn.exe"; + RegistryKey key = Registry.CurrentUser.OpenSubKey(strKey, false); + if (key == null) + return null; + string strExe = key.GetValue("").ToString(); + key.Close(); + return strExe; + } + catch + { + return null; + } + } + } + + public static bool IsInstalled + { + get + { + return (Svn.Executable != null); + } + } + + public bool Execute(string Arguments, bool ShowOutput, bool ShowError) + { + this.Error = ""; + this.Output = ""; + + Process p = new Process(); + StreamWriter sw; + StreamReader sr; + StreamReader err; + + p.StartInfo.FileName = Properties.Settings.Default.SvnExe; + p.StartInfo.Arguments = Arguments; + p.StartInfo.RedirectStandardError = true; + p.StartInfo.RedirectStandardInput = true; + p.StartInfo.RedirectStandardOutput = true; + p.StartInfo.UseShellExecute = false; + p.StartInfo.CreateNoWindow = true; + + p.Start(); + + sw = p.StandardInput; + sr = p.StandardOutput; + err = p.StandardError; + + sw.AutoFlush = true; + + StringBuilder sb = new StringBuilder(); + + while (sr.Peek() >= 0) + { + char[] buffer = new char[1024]; + sr.Read(buffer, 0, buffer.Length); + sb.Append(new string(buffer)); + } + sw.Close(); + this.Output = sb.ToString(); + + sb = new StringBuilder(); + while (err.Peek() >= 0) + { + char[] buffer = new char[4096]; + err.Read(buffer, 0, buffer.Length); + sb.Append(new string(buffer)); + } + this.Error = sb.ToString(); + + if (this.Error != "" && ShowError) + MessageBox.Show(this.Error, "SVN Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + + if (this.Output != "" && ShowOutput) + MessageBox.Show(this.Output, "SVN Information", MessageBoxButtons.OK, MessageBoxIcon.Information); + + return (this.Error == ""); + } + } +} diff --git a/trunk/Properties/AssemblyInfo.cs b/source/Properties/AssemblyInfo.cs similarity index 97% rename from trunk/Properties/AssemblyInfo.cs rename to source/Properties/AssemblyInfo.cs index 3868fe1..2bf88af 100644 --- a/trunk/Properties/AssemblyInfo.cs +++ b/source/Properties/AssemblyInfo.cs @@ -1,103 +1,103 @@ -// /** -// ******** -// * -// * ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden -// * The code was donated on 4/28/2010 by Alphons van der Heijden -// * To Brandon 'Dimentox Travanti' Husbands & Malcolm J. Kudra, who in turn License under the GPLv2. -// * In agreement with Alphons van der Heijden's wishes. -// * -// * The community would like to thank Alphons for all of his hard work, blood sweat and tears. -// * Without his work the community would be stuck with crappy editors. -// * -// * The source code in this file ("Source Code") is provided by The LSLEditor Group -// * to you under the terms of the GNU General Public License, version 2.0 -// * ("GPL"), unless you have obtained a separate licensing agreement -// * ("Other License"), formally executed by you and The LSLEditor Group. Terms of -// * the GPL can be found in the gplv2.txt document. -// * -// ******** -// * GPLv2 Header -// ******** -// * LSLEditor, a External editor for the LSL Language. -// * Copyright (C) 2010 The LSLEditor Group. -// -// * This program is free software; you can redistribute it and/or -// * modify it under the terms of the GNU General Public License -// * as published by the Free Software Foundation; either version 2 -// * of the License, or (at your option) any later version. -// * -// * This program is distributed in the hope that it will be useful, -// * but WITHOUT ANY WARRANTY; without even the implied warranty of -// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// * GNU General Public License for more details. -// * -// * You should have received a copy of the GNU General Public License -// * along with this program; if not, write to the Free Software -// * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******** -// * -// * The above copyright notice and this permission notice shall be included in all -// * copies or substantial portions of the Software. -// * -// ******** -// */ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -// -[assembly: AssemblyTitle("LSL-Editor Community Edition")] -[assembly: AssemblyDescription("LSL-Editor for editing and compiling LSL scripts")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("LSL Editor")] -[assembly: AssemblyCopyright("2006 - 2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -// -[assembly: AssemblyVersion("2.56.0.0")] - -// -// In order to sign your assembly you must specify a key to use. Refer to the -// Microsoft .NET Framework documentation for more information on assembly signing. -// -// Use the attributes below to control which key is used for signing. -// -// Notes: -// (*) If no key is specified, the assembly is not signed. -// (*) KeyName refers to a key that has been installed in the Crypto Service -// Provider (CSP) on your machine. KeyFile refers to a file which contains -// a key. -// (*) If the KeyFile and the KeyName values are both specified, the -// following processing occurs: -// (1) If the KeyName can be found in the CSP, that key is used. -// (2) If the KeyName does not exist and the KeyFile does exist, the key -// in the KeyFile is installed into the CSP and used. -// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. -// When specifying the KeyFile, the location of the KeyFile should be -// relative to the project output directory which is -// %Project Directory%\obj\. For example, if your KeyFile is -// located in the project directory, you would specify the AssemblyKeyFile -// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] -// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework -// documentation for more information on this. -// -[assembly: AssemblyDelaySign(false)] -//[assembly: AssemblyKeyName("")] -[assembly: ComVisibleAttribute(false)] -[assembly: AssemblyFileVersionAttribute("2.56.0.0")] +// /** +// ******** +// * +// * ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden +// * The code was donated on 4/28/2010 by Alphons van der Heijden +// * To Brandon 'Dimentox Travanti' Husbands & Malcolm J. Kudra, who in turn License under the GPLv2. +// * In agreement with Alphons van der Heijden's wishes. +// * +// * The community would like to thank Alphons for all of his hard work, blood sweat and tears. +// * Without his work the community would be stuck with crappy editors. +// * +// * The source code in this file ("Source Code") is provided by The LSLEditor Group +// * to you under the terms of the GNU General Public License, version 2.0 +// * ("GPL"), unless you have obtained a separate licensing agreement +// * ("Other License"), formally executed by you and The LSLEditor Group. Terms of +// * the GPL can be found in the gplv2.txt document. +// * +// ******** +// * GPLv2 Header +// ******** +// * LSLEditor, a External editor for the LSL Language. +// * Copyright (C) 2010 The LSLEditor Group. +// +// * This program is free software; you can redistribute it and/or +// * modify it under the terms of the GNU General Public License +// * as published by the Free Software Foundation; either version 2 +// * of the License, or (at your option) any later version. +// * +// * This program is distributed in the hope that it will be useful, +// * but WITHOUT ANY WARRANTY; without even the implied warranty of +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// * GNU General Public License for more details. +// * +// * You should have received a copy of the GNU General Public License +// * along with this program; if not, write to the Free Software +// * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******** +// * +// * The above copyright notice and this permission notice shall be included in all +// * copies or substantial portions of the Software. +// * +// ******** +// */ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("LSL-Editor Community Edition")] +[assembly: AssemblyDescription("LSL-Editor for editing and compiling LSL scripts")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("LSL Editor")] +[assembly: AssemblyCopyright("2006 - 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +// +[assembly: AssemblyVersion("2.56.0.0")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +//[assembly: AssemblyKeyName("")] +[assembly: ComVisibleAttribute(false)] +[assembly: AssemblyFileVersionAttribute("2.56.0.0")] diff --git a/trunk/Properties/Resources.Designer.cs b/source/Properties/Resources.Designer.cs similarity index 97% rename from trunk/Properties/Resources.Designer.cs rename to source/Properties/Resources.Designer.cs index 654e376..d442504 100644 --- a/trunk/Properties/Resources.Designer.cs +++ b/source/Properties/Resources.Designer.cs @@ -1,283 +1,283 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace LSLEditor.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LSLEditor.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ADDITEM { - get { - object obj = ResourceManager.GetObject("ADDITEM", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap COPY { - get { - object obj = ResourceManager.GetObject("COPY", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap CUT { - get { - object obj = ResourceManager.GetObject("CUT", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap DEINDENT { - get { - object obj = ResourceManager.GetObject("DEINDENT", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap DELETE { - get { - object obj = ResourceManager.GetObject("DELETE", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap END { - get { - object obj = ResourceManager.GetObject("END", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap export_file_32 { - get { - object obj = ResourceManager.GetObject("export_file-32", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap FIND { - get { - object obj = ResourceManager.GetObject("FIND", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ININDENT { - get { - object obj = ResourceManager.GetObject("ININDENT", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap logo { - get { - object obj = ResourceManager.GetObject("logo", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap NEWDOC { - get { - object obj = ResourceManager.GetObject("NEWDOC", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap NEWPROJ { - get { - object obj = ResourceManager.GetObject("NEWPROJ", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap OPEN { - get { - object obj = ResourceManager.GetObject("OPEN", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap PASTE { - get { - object obj = ResourceManager.GetObject("PASTE", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap PRINT { - get { - object obj = ResourceManager.GetObject("PRINT", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap PROJECT { - get { - object obj = ResourceManager.GetObject("PROJECT", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap PROPS { - get { - object obj = ResourceManager.GetObject("PROPS", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap REDO { - get { - object obj = ResourceManager.GetObject("REDO", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap SAVE { - get { - object obj = ResourceManager.GetObject("SAVE", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap SAVEAS { - get { - object obj = ResourceManager.GetObject("SAVEAS", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap START { - get { - object obj = ResourceManager.GetObject("START", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap UNDO { - get { - object obj = ResourceManager.GetObject("UNDO", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace LSLEditor.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LSLEditor.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ADDITEM { + get { + object obj = ResourceManager.GetObject("ADDITEM", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap COPY { + get { + object obj = ResourceManager.GetObject("COPY", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CUT { + get { + object obj = ResourceManager.GetObject("CUT", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap DEINDENT { + get { + object obj = ResourceManager.GetObject("DEINDENT", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap DELETE { + get { + object obj = ResourceManager.GetObject("DELETE", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap END { + get { + object obj = ResourceManager.GetObject("END", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap export_file_32 { + get { + object obj = ResourceManager.GetObject("export_file-32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap FIND { + get { + object obj = ResourceManager.GetObject("FIND", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ININDENT { + get { + object obj = ResourceManager.GetObject("ININDENT", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap logo { + get { + object obj = ResourceManager.GetObject("logo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap NEWDOC { + get { + object obj = ResourceManager.GetObject("NEWDOC", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap NEWPROJ { + get { + object obj = ResourceManager.GetObject("NEWPROJ", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap OPEN { + get { + object obj = ResourceManager.GetObject("OPEN", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap PASTE { + get { + object obj = ResourceManager.GetObject("PASTE", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap PRINT { + get { + object obj = ResourceManager.GetObject("PRINT", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap PROJECT { + get { + object obj = ResourceManager.GetObject("PROJECT", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap PROPS { + get { + object obj = ResourceManager.GetObject("PROPS", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap REDO { + get { + object obj = ResourceManager.GetObject("REDO", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap SAVE { + get { + object obj = ResourceManager.GetObject("SAVE", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap SAVEAS { + get { + object obj = ResourceManager.GetObject("SAVEAS", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap START { + get { + object obj = ResourceManager.GetObject("START", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap UNDO { + get { + object obj = ResourceManager.GetObject("UNDO", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/trunk/Properties/Resources.resx b/source/Properties/Resources.resx similarity index 98% rename from trunk/Properties/Resources.resx rename to source/Properties/Resources.resx index 9c4b912..50e14a3 100644 --- a/trunk/Properties/Resources.resx +++ b/source/Properties/Resources.resx @@ -1,188 +1,188 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\icons\inindent.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\end.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\props.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\cut.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\find.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\undo.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\project.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\redo.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Images\logo.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\paste.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\save.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\delete.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\open.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\additem.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\newdoc.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\deindent.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\print.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\start.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\saveas.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\newproj.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\copy.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - - ..\Resources\export_file-32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\icons\inindent.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\end.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\props.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\cut.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\find.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\undo.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\project.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\redo.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\logo.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\paste.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\save.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\delete.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\open.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\additem.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\newdoc.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\deindent.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\print.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\start.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\saveas.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\newproj.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\copy.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + + ..\Resources\export_file-32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/trunk/Properties/Settings.Designer.cs b/source/Properties/Settings.Designer.cs similarity index 97% rename from trunk/Properties/Settings.Designer.cs rename to source/Properties/Settings.Designer.cs index daf917d..104c485 100644 --- a/trunk/Properties/Settings.Designer.cs +++ b/source/Properties/Settings.Designer.cs @@ -1,1296 +1,1296 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.296 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -using System.Collections.Generic; - -namespace LSLEditor.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("SecondLife Name")] - public string AvatarName { - get { - return ((string)(this["AvatarName"])); - } - set { - this["AvatarName"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool BrowserInWindow { - get { - return ((bool)(this["BrowserInWindow"])); - } - set { - this["BrowserInWindow"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string AvatarKey { - get { - return ((string)(this["AvatarKey"])); - } - set { - this["AvatarKey"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("LSLEditor Island")] - public string RegionName { - get { - return ((string)(this["RegionName"])); - } - set { - this["RegionName"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("smtp.emailserver.ext")] - public string EmailServer { - get { - return ((string)(this["EmailServer"])); - } - set { - this["EmailServer"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("youraddress@yourdomain.ext")] - public string EmailAddress { - get { - return ((string)(this["EmailAddress"])); - } - set { - this["EmailAddress"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string ProxyServer { - get { - return ((string)(this["ProxyServer"])); - } - set { - this["ProxyServer"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string ProxyUserid { - get { - return ((string)(this["ProxyUserid"])); - } - set { - this["ProxyUserid"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string ProxyPassword { - get { - return ((string)(this["ProxyPassword"])); - } - set { - this["ProxyPassword"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("0, 0")] - public global::System.Drawing.Point BrowserLocation { - get { - return ((global::System.Drawing.Point)(this["BrowserLocation"])); - } - set { - this["BrowserLocation"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("0, 0")] - public global::System.Drawing.Point FindLocation { - get { - return ((global::System.Drawing.Point)(this["FindLocation"])); - } - set { - this["FindLocation"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("0, 0")] - public global::System.Drawing.Size BrowserSize { - get { - return ((global::System.Drawing.Size)(this["BrowserSize"])); - } - set { - this["BrowserSize"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("http://www.lslwiki.net/lslwiki/wakka.php?wakka=")] - public string Help { - get { - return ((string)(this["Help"])); - } - set { - this["Help"] = value; - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("Resource.ConfLSL.xml")] - public string ConfLSL { - get { - return ((string)(this["ConfLSL"])); - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("0, 0")] - public global::System.Drawing.Point LSLEditorLocation { - get { - return ((global::System.Drawing.Point)(this["LSLEditorLocation"])); - } - set { - this["LSLEditorLocation"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("0, 0")] - public global::System.Drawing.Size LSLEditorSize { - get { - return ((global::System.Drawing.Size)(this["LSLEditorSize"])); - } - set { - this["LSLEditorSize"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("25")] - public double RegionFPS { - get { - return ((double)(this["RegionFPS"])); - } - set { - this["RegionFPS"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("0, 175")] - public global::System.Drawing.Size SimulatorSize { - get { - return ((global::System.Drawing.Size)(this["SimulatorSize"])); - } - set { - this["SimulatorSize"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("0, 0")] - public global::System.Drawing.Point SimulatorLocation { - get { - return ((global::System.Drawing.Point)(this["SimulatorLocation"])); - } - set { - this["SimulatorLocation"] = value; - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("new.lsl")] - public string ExampleName { - get { - return ((string)(this["ExampleName"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("new.lsli")] - public string ExampleNameLSLI - { - get - { - return ((string)(this["ExampleNameLSLI"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("ReleaseNotes.htm")] - public string ReleaseNotes { - get { - return ((string)(this["ReleaseNotes"])); - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("254464, 255232")] - public global::System.Drawing.Point RegionCorner { - get { - return ((global::System.Drawing.Point)(this["RegionCorner"])); - } - set { - this["RegionCorner"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("True")] - public bool TabbedDocument { - get { - return ((bool)(this["TabbedDocument"])); - } - set { - this["TabbedDocument"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool SLColorScheme { - get { - return ((bool)(this["SLColorScheme"])); - } - set { - this["SLColorScheme"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool SL4SpacesIndent { - get { - return ((bool)(this["SL4SpacesIndent"])); - } - set { - this["SL4SpacesIndent"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool AutoWordSelection { - get { - return ((bool)(this["AutoWordSelection"])); - } - set { - this["AutoWordSelection"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("0, 0")] - public global::System.Drawing.Point GotoLocation { - get { - return ((global::System.Drawing.Point)(this["GotoLocation"])); - } - set { - this["GotoLocation"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool WikiSeperateBrowser { - get { - return ((bool)(this["WikiSeperateBrowser"])); - } - set { - this["WikiSeperateBrowser"] = value; - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("About.htm")] - public string About { - get { - return ((string)(this["About"])); - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("224, 224, 224")] - public global::System.Drawing.Color BracketHighlight { - get { - return ((global::System.Drawing.Color)(this["BracketHighlight"])); - } - set { - this["BracketHighlight"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("175, 0")] - public global::System.Drawing.Size SolutionSize { - get { - return ((global::System.Drawing.Size)(this["SolutionSize"])); - } - set { - this["SolutionSize"] = value; - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("4")] - public int TabStops { - get { - return ((int)(this["TabStops"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("100")] - public int ToolTipDelay { - get { - return ((int)(this["ToolTipDelay"])); - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("True")] - public bool CallUpgrade { - get { - return ((bool)(this["CallUpgrade"])); - } - set { - this["CallUpgrade"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("15")] - public int RecentFileMax { - get { - return ((int)(this["RecentFileMax"])); - } - set { - this["RecentFileMax"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("True")] - public bool CheckForUpdates { - get { - return ((bool)(this["CheckForUpdates"])); - } - set { - this["CheckForUpdates"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("True")] - public bool CheckEveryDay { - get { - return ((bool)(this["CheckEveryDay"])); - } - set { - this["CheckEveryDay"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool CheckEveryWeek { - get { - return ((bool)(this["CheckEveryWeek"])); - } - set { - this["CheckEveryWeek"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("2010-01-01")] - public global::System.DateTime CheckDate { - get { - return ((global::System.DateTime)(this["CheckDate"])); - } - set { - this["CheckDate"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - public global::System.Collections.Specialized.StringCollection RecentProjectList { - get { - return ((global::System.Collections.Specialized.StringCollection)(this["RecentProjectList"])); - } - set { - this["RecentProjectList"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("15")] - public int RecentProjectMax { - get { - return ((int)(this["RecentProjectMax"])); - } - set { - this["RecentProjectMax"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - public global::System.Collections.Specialized.StringCollection RecentFileList { - get { - return ((global::System.Collections.Specialized.StringCollection)(this["RecentFileList"])); - } - set { - this["RecentFileList"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool IndentCursorPlacement { - get { - return ((bool)(this["IndentCursorPlacement"])); - } - set { - this["IndentCursorPlacement"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("True")] - public bool IndentFullAuto { - get { - return ((bool)(this["IndentFullAuto"])); - } - set { - this["IndentFullAuto"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("True")] - public bool Indent { - get { - return ((bool)(this["Indent"])); - } - set { - this["Indent"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - public global::System.Drawing.Font FontEditor { - get { - return ((global::System.Drawing.Font)(this["FontEditor"])); - } - set { - this["FontEditor"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - public global::System.Drawing.Font FontTooltips { - get { - return ((global::System.Drawing.Font)(this["FontTooltips"])); - } - set { - this["FontTooltips"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - public global::System.Collections.Specialized.StringCollection Bugreports { - get { - return ((global::System.Collections.Specialized.StringCollection)(this["Bugreports"])); - } - set { - this["Bugreports"] = value; - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("60")] - public int PathClipLength { - get { - return ((int)(this["PathClipLength"])); - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string SmtpUserid { - get { - return ((string)(this["SmtpUserid"])); - } - set { - this["SmtpUserid"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string SmtpPassword { - get { - return ((string)(this["SmtpPassword"])); - } - set { - this["SmtpPassword"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("PLAIN")] - public string SmtpAuth { - get { - return ((string)(this["SmtpAuth"])); - } - set { - this["SmtpAuth"] = value; - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("default.lsl")] - public string ExampleTemplate { - get { - return ((string)(this["ExampleTemplate"])); - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("True")] - public bool HelpOnline { - get { - return ((bool)(this["HelpOnline"])); - } - set { - this["HelpOnline"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool HelpOffline { - get { - return ((bool)(this["HelpOffline"])); - } - set { - this["HelpOffline"] = value; - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("LSLEditorHelp.chm")] - public string HelpOfflineFile { - get { - return ((string)(this["HelpOfflineFile"])); - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string CVSEXE { - get { - return ((string)(this["CVSEXE"])); - } - set { - this["CVSEXE"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string CVSROOT { - get { - return ((string)(this["CVSROOT"])); - } - set { - this["CVSROOT"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string ProjectLocation { - get { - return ((string)(this["ProjectLocation"])); - } - set { - this["ProjectLocation"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public List IncludeDirectories - { - get - { - return ((List)(this["IncludeDirectories"])); - } - set - { - this["IncludeDirectories"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool ShowIncludeMetaData - { - get - { - return ((bool)(this["ShowIncludeMetaData"])); - } - set - { - this["ShowIncludeMetaData"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool DeleteOldFiles { - get { - return ((bool)(this["DeleteOldFiles"])); - } - set { - this["DeleteOldFiles"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool CodeCompletionUserVar { - get { - return ((bool)(this["CodeCompletionUserVar"])); - } - set { - this["CodeCompletionUserVar"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("True")] - public bool CodeCompletion { - get { - return ((bool)(this["CodeCompletion"])); - } - set { - this["CodeCompletion"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool CommentCStyle { - get { - return ((bool)(this["CommentCStyle"])); - } - set { - this["CommentCStyle"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool SkipWarnings { - get { - return ((bool)(this["SkipWarnings"])); - } - set { - this["SkipWarnings"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool SingleQuote { - get { - return ((bool)(this["SingleQuote"])); - } - set { - this["SingleQuote"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool QuotesListVerbose { - get { - return ((bool)(this["QuotesListVerbose"])); - } - set { - this["QuotesListVerbose"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - public global::System.Collections.Specialized.StringCollection Plugins { - get { - return ((global::System.Collections.Specialized.StringCollection)(this["Plugins"])); - } - set { - this["Plugins"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("True")] - public bool CodeCompletionArguments { - get { - return ((bool)(this["CodeCompletionArguments"])); - } - set { - this["CodeCompletionArguments"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("True")] - public bool IndentWarning { - get { - return ((bool)(this["IndentWarning"])); - } - set { - this["IndentWarning"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool IndentAutoCorrect { - get { - return ((bool)(this["IndentAutoCorrect"])); - } - set { - this["IndentAutoCorrect"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string SvnExe { - get { - return ((string)(this["SvnExe"])); - } - set { - this["SvnExe"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string SvnUserid { - get { - return ((string)(this["SvnUserid"])); - } - set { - this["SvnUserid"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string SvnPassword { - get { - return ((string)(this["SvnPassword"])); - } - set { - this["SvnPassword"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool ShowSolutionExplorer { - get { - return ((bool)(this["ShowSolutionExplorer"])); - } - set { - this["ShowSolutionExplorer"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string WorkingDirectory { - get { - return ((string)(this["WorkingDirectory"])); - } - set { - this["WorkingDirectory"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("Production")] - public string XSecondLifeShard { - get { - return ((string)(this["XSecondLifeShard"])); - } - set { - this["XSecondLifeShard"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool AutoSaveOnDebug { - get { - return ((bool)(this["AutoSaveOnDebug"])); - } - set { - this["AutoSaveOnDebug"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("True")] - public bool ToolTip { - get { - return ((bool)(this["ToolTip"])); - } - set { - this["ToolTip"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("True")] - public bool HelpNewTab { - get { - return ((bool)(this["HelpNewTab"])); - } - set { - this["HelpNewTab"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("True")] - public bool CodeCompletionAnimation { - get { - return ((bool)(this["CodeCompletionAnimation"])); - } - set { - this["CodeCompletionAnimation"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("NoteCard.txt")] - public string ExampleNameNotecard { - get { - return ((string)(this["ExampleNameNotecard"])); - } - set { - this["ExampleNameNotecard"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool llGetScriptName { - get { - return ((bool)(this["llGetScriptName"])); - } - set { - this["llGetScriptName"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool StatesInGlobalFunctions { - get { - return ((bool)(this["StatesInGlobalFunctions"])); - } - set { - this["StatesInGlobalFunctions"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("LSLEditor parcel")] - public string ParcelName { - get { - return ((string)(this["ParcelName"])); - } - set { - this["ParcelName"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("Description of LSLEditor parcel")] - public string ParcelDescription { - get { - return ((string)(this["ParcelDescription"])); - } - set { - this["ParcelDescription"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("00000000-0000-0000-0000-000000000000")] - public string ParcelOwner { - get { - return ((string)(this["ParcelOwner"])); - } - set { - this["ParcelOwner"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("00000000-0000-0000-0000-000000000000")] - public string ParcelGroup { - get { - return ((string)(this["ParcelGroup"])); - } - set { - this["ParcelGroup"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("512")] - public int ParcelArea { - get { - return ((int)(this["ParcelArea"])); - } - set { - this["ParcelArea"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("00000000-0000-0000-0000-000000000000")] - public string ParcelID - { - get - { - return ((string)(this["ParcelID"])); - } - set - { - this["ParcelID"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("512")] - public int ParcelSeeAvatars - { - get - { - return ((int)(this["ParcelSeeAvatars"])); - } - set - { - this["ParcelSeeAvatars"] = value; - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - default - { - state_entry() - { - llSay(0, ""Hello, Avatar!""); - } - touch_start(integer total_number) - { - llSay(0, ""Touched: ""+(string)total_number); - } - } - ")] - public string Example { - get { - return ((string)(this["Example"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("http://www.lsleditor.org/examples/")] - public string Examples { - get { - return ((string)(this["Examples"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("http://www.lsleditor.org/uploadscript/")] - public string Upload { - get { - return ((string)(this["Upload"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("Resource.ConfCSharp.xml")] - public string ConfCSharp { - get { - return ((string)(this["ConfCSharp"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("Resource.ToolsOptions.xml")] - public string ToolsOptions { - get { - return ((string)(this["ToolsOptions"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("https://sourceforge.net/tracker/?group_id=319248")] - public string ContactUrl { - get { - return ((string)(this["ContactUrl"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("http://www.lsleditor.org/donate.htm")] - public string DonateUrl { - get { - return ((string)(this["DonateUrl"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("http://wiki.secondlife.com/wiki/Special:Search?go=Go&search=")] - public string Help2 { - get { - return ((string)(this["Help2"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("http://www.lslwiki.net/lslwiki/wakka.php?wakka=")] - public string Help1 { - get { - return ((string)(this["Help1"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("https://sourceforge.net/projects/lsleditor/forums")] - public string ForumLSLEditor { - get { - return ((string)(this["ForumLSLEditor"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("http://metaversegames.net/questions/lsl")] - public string qasite { - get { - return ((string)(this["qasite"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string svnloc { - get { - return ((string)(this["svnloc"])); - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("True")] - public bool VersionControl { - get { - return ((bool)(this["VersionControl"])); - } - set { - this["VersionControl"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("True")] - public bool VersionControlSVN { - get { - return ((bool)(this["VersionControlSVN"])); - } - set { - this["VersionControlSVN"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("UTF-8")] - public string OutputFormat { - get { - return ((string)(this["OutputFormat"])); - } - set { - this["OutputFormat"] = value; - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("http://lsleditor.sourceforge.net/check4update.php")] - public string Update { - get { - return ((string)(this["Update"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("http://lsleditor.sourceforge.net/update.php")] - public string UpdateManifest { - get { - return ((string)(this["UpdateManifest"])); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.296 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System.Collections.Generic; + +namespace LSLEditor.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("SecondLife Name")] + public string AvatarName { + get { + return ((string)(this["AvatarName"])); + } + set { + this["AvatarName"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool BrowserInWindow { + get { + return ((bool)(this["BrowserInWindow"])); + } + set { + this["BrowserInWindow"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string AvatarKey { + get { + return ((string)(this["AvatarKey"])); + } + set { + this["AvatarKey"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("LSLEditor Island")] + public string RegionName { + get { + return ((string)(this["RegionName"])); + } + set { + this["RegionName"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("smtp.emailserver.ext")] + public string EmailServer { + get { + return ((string)(this["EmailServer"])); + } + set { + this["EmailServer"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("youraddress@yourdomain.ext")] + public string EmailAddress { + get { + return ((string)(this["EmailAddress"])); + } + set { + this["EmailAddress"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string ProxyServer { + get { + return ((string)(this["ProxyServer"])); + } + set { + this["ProxyServer"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string ProxyUserid { + get { + return ((string)(this["ProxyUserid"])); + } + set { + this["ProxyUserid"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string ProxyPassword { + get { + return ((string)(this["ProxyPassword"])); + } + set { + this["ProxyPassword"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0, 0")] + public global::System.Drawing.Point BrowserLocation { + get { + return ((global::System.Drawing.Point)(this["BrowserLocation"])); + } + set { + this["BrowserLocation"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0, 0")] + public global::System.Drawing.Point FindLocation { + get { + return ((global::System.Drawing.Point)(this["FindLocation"])); + } + set { + this["FindLocation"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0, 0")] + public global::System.Drawing.Size BrowserSize { + get { + return ((global::System.Drawing.Size)(this["BrowserSize"])); + } + set { + this["BrowserSize"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("http://www.lslwiki.net/lslwiki/wakka.php?wakka=")] + public string Help { + get { + return ((string)(this["Help"])); + } + set { + this["Help"] = value; + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Resource.ConfLSL.xml")] + public string ConfLSL { + get { + return ((string)(this["ConfLSL"])); + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0, 0")] + public global::System.Drawing.Point LSLEditorLocation { + get { + return ((global::System.Drawing.Point)(this["LSLEditorLocation"])); + } + set { + this["LSLEditorLocation"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0, 0")] + public global::System.Drawing.Size LSLEditorSize { + get { + return ((global::System.Drawing.Size)(this["LSLEditorSize"])); + } + set { + this["LSLEditorSize"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("25")] + public double RegionFPS { + get { + return ((double)(this["RegionFPS"])); + } + set { + this["RegionFPS"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0, 175")] + public global::System.Drawing.Size SimulatorSize { + get { + return ((global::System.Drawing.Size)(this["SimulatorSize"])); + } + set { + this["SimulatorSize"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0, 0")] + public global::System.Drawing.Point SimulatorLocation { + get { + return ((global::System.Drawing.Point)(this["SimulatorLocation"])); + } + set { + this["SimulatorLocation"] = value; + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("new.lsl")] + public string ExampleName { + get { + return ((string)(this["ExampleName"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("new.lsli")] + public string ExampleNameLSLI + { + get + { + return ((string)(this["ExampleNameLSLI"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("ReleaseNotes.htm")] + public string ReleaseNotes { + get { + return ((string)(this["ReleaseNotes"])); + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("254464, 255232")] + public global::System.Drawing.Point RegionCorner { + get { + return ((global::System.Drawing.Point)(this["RegionCorner"])); + } + set { + this["RegionCorner"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool TabbedDocument { + get { + return ((bool)(this["TabbedDocument"])); + } + set { + this["TabbedDocument"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool SLColorScheme { + get { + return ((bool)(this["SLColorScheme"])); + } + set { + this["SLColorScheme"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool SL4SpacesIndent { + get { + return ((bool)(this["SL4SpacesIndent"])); + } + set { + this["SL4SpacesIndent"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool AutoWordSelection { + get { + return ((bool)(this["AutoWordSelection"])); + } + set { + this["AutoWordSelection"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0, 0")] + public global::System.Drawing.Point GotoLocation { + get { + return ((global::System.Drawing.Point)(this["GotoLocation"])); + } + set { + this["GotoLocation"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool WikiSeperateBrowser { + get { + return ((bool)(this["WikiSeperateBrowser"])); + } + set { + this["WikiSeperateBrowser"] = value; + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("About.htm")] + public string About { + get { + return ((string)(this["About"])); + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("224, 224, 224")] + public global::System.Drawing.Color BracketHighlight { + get { + return ((global::System.Drawing.Color)(this["BracketHighlight"])); + } + set { + this["BracketHighlight"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("175, 0")] + public global::System.Drawing.Size SolutionSize { + get { + return ((global::System.Drawing.Size)(this["SolutionSize"])); + } + set { + this["SolutionSize"] = value; + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("4")] + public int TabStops { + get { + return ((int)(this["TabStops"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("100")] + public int ToolTipDelay { + get { + return ((int)(this["ToolTipDelay"])); + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool CallUpgrade { + get { + return ((bool)(this["CallUpgrade"])); + } + set { + this["CallUpgrade"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("15")] + public int RecentFileMax { + get { + return ((int)(this["RecentFileMax"])); + } + set { + this["RecentFileMax"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool CheckForUpdates { + get { + return ((bool)(this["CheckForUpdates"])); + } + set { + this["CheckForUpdates"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool CheckEveryDay { + get { + return ((bool)(this["CheckEveryDay"])); + } + set { + this["CheckEveryDay"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool CheckEveryWeek { + get { + return ((bool)(this["CheckEveryWeek"])); + } + set { + this["CheckEveryWeek"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("2010-01-01")] + public global::System.DateTime CheckDate { + get { + return ((global::System.DateTime)(this["CheckDate"])); + } + set { + this["CheckDate"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Collections.Specialized.StringCollection RecentProjectList { + get { + return ((global::System.Collections.Specialized.StringCollection)(this["RecentProjectList"])); + } + set { + this["RecentProjectList"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("15")] + public int RecentProjectMax { + get { + return ((int)(this["RecentProjectMax"])); + } + set { + this["RecentProjectMax"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Collections.Specialized.StringCollection RecentFileList { + get { + return ((global::System.Collections.Specialized.StringCollection)(this["RecentFileList"])); + } + set { + this["RecentFileList"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool IndentCursorPlacement { + get { + return ((bool)(this["IndentCursorPlacement"])); + } + set { + this["IndentCursorPlacement"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool IndentFullAuto { + get { + return ((bool)(this["IndentFullAuto"])); + } + set { + this["IndentFullAuto"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool Indent { + get { + return ((bool)(this["Indent"])); + } + set { + this["Indent"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Drawing.Font FontEditor { + get { + return ((global::System.Drawing.Font)(this["FontEditor"])); + } + set { + this["FontEditor"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Drawing.Font FontTooltips { + get { + return ((global::System.Drawing.Font)(this["FontTooltips"])); + } + set { + this["FontTooltips"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Collections.Specialized.StringCollection Bugreports { + get { + return ((global::System.Collections.Specialized.StringCollection)(this["Bugreports"])); + } + set { + this["Bugreports"] = value; + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("60")] + public int PathClipLength { + get { + return ((int)(this["PathClipLength"])); + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string SmtpUserid { + get { + return ((string)(this["SmtpUserid"])); + } + set { + this["SmtpUserid"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string SmtpPassword { + get { + return ((string)(this["SmtpPassword"])); + } + set { + this["SmtpPassword"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("PLAIN")] + public string SmtpAuth { + get { + return ((string)(this["SmtpAuth"])); + } + set { + this["SmtpAuth"] = value; + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("default.lsl")] + public string ExampleTemplate { + get { + return ((string)(this["ExampleTemplate"])); + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool HelpOnline { + get { + return ((bool)(this["HelpOnline"])); + } + set { + this["HelpOnline"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool HelpOffline { + get { + return ((bool)(this["HelpOffline"])); + } + set { + this["HelpOffline"] = value; + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("LSLEditorHelp.chm")] + public string HelpOfflineFile { + get { + return ((string)(this["HelpOfflineFile"])); + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string CVSEXE { + get { + return ((string)(this["CVSEXE"])); + } + set { + this["CVSEXE"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string CVSROOT { + get { + return ((string)(this["CVSROOT"])); + } + set { + this["CVSROOT"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string ProjectLocation { + get { + return ((string)(this["ProjectLocation"])); + } + set { + this["ProjectLocation"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public List IncludeDirectories + { + get + { + return ((List)(this["IncludeDirectories"])); + } + set + { + this["IncludeDirectories"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool ShowIncludeMetaData + { + get + { + return ((bool)(this["ShowIncludeMetaData"])); + } + set + { + this["ShowIncludeMetaData"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool DeleteOldFiles { + get { + return ((bool)(this["DeleteOldFiles"])); + } + set { + this["DeleteOldFiles"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool CodeCompletionUserVar { + get { + return ((bool)(this["CodeCompletionUserVar"])); + } + set { + this["CodeCompletionUserVar"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool CodeCompletion { + get { + return ((bool)(this["CodeCompletion"])); + } + set { + this["CodeCompletion"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool CommentCStyle { + get { + return ((bool)(this["CommentCStyle"])); + } + set { + this["CommentCStyle"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool SkipWarnings { + get { + return ((bool)(this["SkipWarnings"])); + } + set { + this["SkipWarnings"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool SingleQuote { + get { + return ((bool)(this["SingleQuote"])); + } + set { + this["SingleQuote"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool QuotesListVerbose { + get { + return ((bool)(this["QuotesListVerbose"])); + } + set { + this["QuotesListVerbose"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Collections.Specialized.StringCollection Plugins { + get { + return ((global::System.Collections.Specialized.StringCollection)(this["Plugins"])); + } + set { + this["Plugins"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool CodeCompletionArguments { + get { + return ((bool)(this["CodeCompletionArguments"])); + } + set { + this["CodeCompletionArguments"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool IndentWarning { + get { + return ((bool)(this["IndentWarning"])); + } + set { + this["IndentWarning"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool IndentAutoCorrect { + get { + return ((bool)(this["IndentAutoCorrect"])); + } + set { + this["IndentAutoCorrect"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string SvnExe { + get { + return ((string)(this["SvnExe"])); + } + set { + this["SvnExe"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string SvnUserid { + get { + return ((string)(this["SvnUserid"])); + } + set { + this["SvnUserid"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string SvnPassword { + get { + return ((string)(this["SvnPassword"])); + } + set { + this["SvnPassword"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool ShowSolutionExplorer { + get { + return ((bool)(this["ShowSolutionExplorer"])); + } + set { + this["ShowSolutionExplorer"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string WorkingDirectory { + get { + return ((string)(this["WorkingDirectory"])); + } + set { + this["WorkingDirectory"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Production")] + public string XSecondLifeShard { + get { + return ((string)(this["XSecondLifeShard"])); + } + set { + this["XSecondLifeShard"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool AutoSaveOnDebug { + get { + return ((bool)(this["AutoSaveOnDebug"])); + } + set { + this["AutoSaveOnDebug"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool ToolTip { + get { + return ((bool)(this["ToolTip"])); + } + set { + this["ToolTip"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool HelpNewTab { + get { + return ((bool)(this["HelpNewTab"])); + } + set { + this["HelpNewTab"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool CodeCompletionAnimation { + get { + return ((bool)(this["CodeCompletionAnimation"])); + } + set { + this["CodeCompletionAnimation"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("NoteCard.txt")] + public string ExampleNameNotecard { + get { + return ((string)(this["ExampleNameNotecard"])); + } + set { + this["ExampleNameNotecard"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool llGetScriptName { + get { + return ((bool)(this["llGetScriptName"])); + } + set { + this["llGetScriptName"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool StatesInGlobalFunctions { + get { + return ((bool)(this["StatesInGlobalFunctions"])); + } + set { + this["StatesInGlobalFunctions"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("LSLEditor parcel")] + public string ParcelName { + get { + return ((string)(this["ParcelName"])); + } + set { + this["ParcelName"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Description of LSLEditor parcel")] + public string ParcelDescription { + get { + return ((string)(this["ParcelDescription"])); + } + set { + this["ParcelDescription"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("00000000-0000-0000-0000-000000000000")] + public string ParcelOwner { + get { + return ((string)(this["ParcelOwner"])); + } + set { + this["ParcelOwner"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("00000000-0000-0000-0000-000000000000")] + public string ParcelGroup { + get { + return ((string)(this["ParcelGroup"])); + } + set { + this["ParcelGroup"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("512")] + public int ParcelArea { + get { + return ((int)(this["ParcelArea"])); + } + set { + this["ParcelArea"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("00000000-0000-0000-0000-000000000000")] + public string ParcelID + { + get + { + return ((string)(this["ParcelID"])); + } + set + { + this["ParcelID"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("512")] + public int ParcelSeeAvatars + { + get + { + return ((int)(this["ParcelSeeAvatars"])); + } + set + { + this["ParcelSeeAvatars"] = value; + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute(@" + default + { + state_entry() + { + llSay(0, ""Hello, Avatar!""); + } + touch_start(integer total_number) + { + llSay(0, ""Touched: ""+(string)total_number); + } + } + ")] + public string Example { + get { + return ((string)(this["Example"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("http://www.lsleditor.org/examples/")] + public string Examples { + get { + return ((string)(this["Examples"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("http://www.lsleditor.org/uploadscript/")] + public string Upload { + get { + return ((string)(this["Upload"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Resource.ConfCSharp.xml")] + public string ConfCSharp { + get { + return ((string)(this["ConfCSharp"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Resource.ToolsOptions.xml")] + public string ToolsOptions { + get { + return ((string)(this["ToolsOptions"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("https://sourceforge.net/tracker/?group_id=319248")] + public string ContactUrl { + get { + return ((string)(this["ContactUrl"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("http://www.lsleditor.org/donate.htm")] + public string DonateUrl { + get { + return ((string)(this["DonateUrl"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("http://wiki.secondlife.com/wiki/Special:Search?go=Go&search=")] + public string Help2 { + get { + return ((string)(this["Help2"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("http://www.lslwiki.net/lslwiki/wakka.php?wakka=")] + public string Help1 { + get { + return ((string)(this["Help1"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("https://sourceforge.net/projects/lsleditor/forums")] + public string ForumLSLEditor { + get { + return ((string)(this["ForumLSLEditor"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("http://metaversegames.net/questions/lsl")] + public string qasite { + get { + return ((string)(this["qasite"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string svnloc { + get { + return ((string)(this["svnloc"])); + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool VersionControl { + get { + return ((bool)(this["VersionControl"])); + } + set { + this["VersionControl"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool VersionControlSVN { + get { + return ((bool)(this["VersionControlSVN"])); + } + set { + this["VersionControlSVN"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("UTF-8")] + public string OutputFormat { + get { + return ((string)(this["OutputFormat"])); + } + set { + this["OutputFormat"] = value; + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("http://lsleditor.sourceforge.net/check4update.php")] + public string Update { + get { + return ((string)(this["Update"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("http://lsleditor.sourceforge.net/update.php")] + public string UpdateManifest { + get { + return ((string)(this["UpdateManifest"])); + } + } + } +} diff --git a/trunk/Properties/Settings.settings b/source/Properties/Settings.settings similarity index 97% rename from trunk/Properties/Settings.settings rename to source/Properties/Settings.settings index 0f63942..c825aa4 100644 --- a/trunk/Properties/Settings.settings +++ b/source/Properties/Settings.settings @@ -1,342 +1,342 @@ - - - - - - SecondLife Name - - - False - - - - - - LSLEditor Island - - - smtp.emailserver.ext - - - youraddress@yourdomain.ext - - - - - - - - - - - - 0, 0 - - - 0, 0 - - - 0, 0 - - - http://www.lslwiki.net/lslwiki/wakka.php?wakka= - - - Resource.ConfLSL.xml - - - 0, 0 - - - 0, 0 - - - 25 - - - 0, 175 - - - 0, 0 - - - new.lsl - - - ReleaseNotes.htm - - - 254464, 255232 - - - True - - - False - - - False - - - False - - - 0, 0 - - - False - - - About.htm - - - 224, 224, 224 - - - 175, 0 - - - 4 - - - 100 - - - True - - - 15 - - - True - - - True - - - False - - - 2010-01-01 - - - - - - 15 - - - - - - False - - - True - - - True - - - - - - - - - - - - 60 - - - - - - - - - PLAIN - - - default.lsl - - - True - - - False - - - LSLEditorHelp.chm - - - - - - - - - - - - False - - - False - - - True - - - False - - - False - - - False - - - False - - - - - - True - - - True - - - False - - - - - - - - - - - - False - - - - - - Production - - - False - - - True - - - True - - - True - - - NoteCard.txt - - - False - - - False - - - LSLEditor parcel - - - Description of LSLEditor parcel - - - 00000000-0000-0000-0000-000000000000 - - - 00000000-0000-0000-0000-000000000000 - - - 512 - - - - default - { - state_entry() - { - llSay(0, "Hello, Avatar!"); - } - touch_start(integer total_number) - { - llSay(0, "Touched: "+(string)total_number); - } - } - - - - http://www.lsleditor.org/examples/ - - - http://www.lsleditor.org/uploadscript/ - - - Resource.ConfCSharp.xml - - - Resource.ToolsOptions.xml - - - https://sourceforge.net/tracker/?group_id=319248 - - - http://www.lsleditor.org/donate.htm - - - http://wiki.secondlife.com/wiki/Special:Search?go=Go&search= - - - http://www.lslwiki.net/lslwiki/wakka.php?wakka= - - - https://sourceforge.net/projects/lsleditor/forums - - - http://metaversegames.net/questions/lsl - - - - - - True - - - True - - - UTF-8 - -#ifndef DEBUG - - http://lsleditor.sourceforge.net/check4update.php - - - http://lsleditor.sourceforge.net/update.php - -#elseif - - http://a-w-d.dyndns.org:8080/lsleditor/check4update.php - - - http://a-w-d.dyndns.org:8080/lsleditor/update.php - -#endif - + + + + + + SecondLife Name + + + False + + + + + + LSLEditor Island + + + smtp.emailserver.ext + + + youraddress@yourdomain.ext + + + + + + + + + + + + 0, 0 + + + 0, 0 + + + 0, 0 + + + http://www.lslwiki.net/lslwiki/wakka.php?wakka= + + + Resource.ConfLSL.xml + + + 0, 0 + + + 0, 0 + + + 25 + + + 0, 175 + + + 0, 0 + + + new.lsl + + + ReleaseNotes.htm + + + 254464, 255232 + + + True + + + False + + + False + + + False + + + 0, 0 + + + False + + + About.htm + + + 224, 224, 224 + + + 175, 0 + + + 4 + + + 100 + + + True + + + 15 + + + True + + + True + + + False + + + 2010-01-01 + + + + + + 15 + + + + + + False + + + True + + + True + + + + + + + + + + + + 60 + + + + + + + + + PLAIN + + + default.lsl + + + True + + + False + + + LSLEditorHelp.chm + + + + + + + + + + + + False + + + False + + + True + + + False + + + False + + + False + + + False + + + + + + True + + + True + + + False + + + + + + + + + + + + False + + + + + + Production + + + False + + + True + + + True + + + True + + + NoteCard.txt + + + False + + + False + + + LSLEditor parcel + + + Description of LSLEditor parcel + + + 00000000-0000-0000-0000-000000000000 + + + 00000000-0000-0000-0000-000000000000 + + + 512 + + + + default + { + state_entry() + { + llSay(0, "Hello, Avatar!"); + } + touch_start(integer total_number) + { + llSay(0, "Touched: "+(string)total_number); + } + } + + + + http://www.lsleditor.org/examples/ + + + http://www.lsleditor.org/uploadscript/ + + + Resource.ConfCSharp.xml + + + Resource.ToolsOptions.xml + + + https://sourceforge.net/tracker/?group_id=319248 + + + http://www.lsleditor.org/donate.htm + + + http://wiki.secondlife.com/wiki/Special:Search?go=Go&search= + + + http://www.lslwiki.net/lslwiki/wakka.php?wakka= + + + https://sourceforge.net/projects/lsleditor/forums + + + http://metaversegames.net/questions/lsl + + + + + + True + + + True + + + UTF-8 + +#ifndef DEBUG + + http://lsleditor.sourceforge.net/check4update.php + + + http://lsleditor.sourceforge.net/update.php + +#elseif + + http://a-w-d.dyndns.org:8080/lsleditor/check4update.php + + + http://a-w-d.dyndns.org:8080/lsleditor/update.php + +#endif + \ No newline at end of file diff --git a/trunk/Resource/About.htm b/source/Resource/About.htm similarity index 95% rename from trunk/Resource/About.htm rename to source/Resource/About.htm index e7930bc..836f2d1 100644 --- a/trunk/Resource/About.htm +++ b/source/Resource/About.htm @@ -1,203 +1,203 @@ - - - About LSL-Editor - - - - Special thanks to:
-
- -
    -
  • Vlad Bjornson
  • -
  • Mazok Nishi
  • -
  • Sonja Manatiso
  • -
  • Hippi Hammerer
  • - -
  • Baron Hauptmann
  • -
  • Arfim Balut
  • -
  • Thelma Huet
  • - -
  • Rand Charleville
  • -
  • MeAm Okelly
  • -
  • krishna Kanik
  • -
  • Smoere Broek
  • - -
  • Frederick Zanzibar
  • -
  • Andon Beattie
  • -
  • Rejha Vuckovic
  • -
  • Alidar Moxie
  • -
  • Al Supercharge
  • - -
  • Krissmas Merryman
  • -
  • Jolan Fonda
  • - -
  • Chase Marellan
  • -
  • Dui Zhang
  • -
  • Scott Diener
  • -
  • Nakiakekai Heliosense
  • - -
  • Adalace Jewell
  • -
  • Dave Dennis
  • -
  • Scythe Elfenbeim
  • -
  • Rynnan Riggles
  • -
  • SynCere Talon
  • -
  • Maxis Neely
  • - -
  • Nightwind Redgrave
  • -
  • WaMark Basevi
  • -
  • Brett Henley
  • -
  • Wam7c Macchi
  • -
  • Wen Grian
  • -
  • Reno Folland
  • -
  • Deven Lefavre
  • -
  • Suepahfly Streeter
  • -
  • Hector Greenspan
  • - -
  • Ricky Lucero
  • -
  • Miguel Yesheyev
  • -
  • Lisa Flatley
  • -
  • Vico Torok
  • -
  • Indigo Mertel
  • -
  • JenniferD Noel
  • -
  • Tabitha Greenspan
  • -
  • Pol McLaglen
  • - -
  • Mitchmiester Slade
  • -
  • Murie Lynagh
  • - -
  • Madgeek Nixdorf
  • -
  • Alexin Auer
  • -
  • Trance Broek
  • -
  • Blackstone Market
  • -
  • Dana Mureaux
  • - -
  • Dig Somme
  • -
  • Ichiro Kiama
  • -
  • Theo Outlander
  • - -
  • Saul Kish
  • -
  • Sempronio Barbosa
  • -
  • Capt Blinker
  • -
  • Debbie Trilling
  • -
  • Nigel Beaumont
  • -
  • Billboard Kidd
  • - -
  • Ryder Dryke
  • -
  • Sylvia Baxter
  • - -
  • Wolt Amat
  • -
  • Matthew White
  • -
  • Ruth Chabay
  • -
  • Nico van Klaveren
  • -
  • SummerDale Beckstrand
  • - -
  • SK Decosta
  • -
  • Agathos Frascati
  • - -
  • Rhianne Darkstone
  • - -
  • Tarquin Janus
  • -
  • Costas Menico
  • -
  • Piet Garfield
  • -
  • Stephane Zugzwang
  • - -
  • Pencilsky Germi
  • -
  • Kii Lilliehook
  • - -
  • Metal Gynoid
  • -
  • Tee Tulip
  • -
  • Frans Carbaat
  • -
  • Orcian Longstaff
  • -
  • Salid Sewell
  • -
  • AnnMarie Coronet
  • -
  • constantin klein
  • -
  • Dan Hartshorn
  • -
  • Second Nature 3
  • -
  • Trevor Langdon
  • -
  • Lecalat Starbrook
  • -
  • Jesse Barnett
  • -
  • Daniel Quigley
  • -
  • Chavo Raven
  • -
  • Gerral Hubbard
  • -
  • DrDoug Pennell
  • -
  • Forest Klaar
  • -
  • Gearsawe Stonecutter
  • - -
  • Avian Islands
  • -
  • Bernard Davis
  • -
  • DangerDave Writer
  • -
  • Olivier Jeanjean
  • -
  • Mo Hax
  • -
  • Salahzar Stenvaag
  • - -
  • Kirrineth Dragonash
  • -
  • Rock Vacirca
  • -
  • Maeva Anatine
  • -
  • Lois Laughton
  • - -
  • Elizabeth Didier
  • -
  • Hiroshi Iuga
  • -
  • Susan Koltai
  • -
  • Klaus-E Klingner
  • -
  • Bimble
  • - -
  • Richard Collins
  • -
  • Ralph Brown
  • - -
  • Igorbar Barbosa
  • -
  • Fletcher Rock
  • - -
  • Zoe Gauvreau
  • -
  • Luca Peck
  • -
  • James Leach
  • -
  • Michael Schneider
  • - -
  • Basel Janus
  • -
  • Petersnow Hyun
  • -
  • Itsme Frederix
  • -
  • Moard Ling
  • - -
  • Diosnegro Bertolucci
  • -
  • Hiroza Hird
  • - -
  • Cale Vinson
  • -
  • Yenzo Cortes
  • -
  • Malcolm J. Kudra
  • -
  • Robert Hayden
  • -
  • John Stout
  • -
  • Jim McElhiney
  • -
  • Sergey Mirontsev
  • -
  • David S
  • -
  • Never 30
  • -
  • Maurice 'colorstonic'
  • -
  • Ricc Harding
  • -
  • Thomas 'Angeldust'
  • -
  • Sally LaSalle
  • -
  • Sebastian Fuentes
  • -
  • Sandra Lee
  • -
  • Dimentox Travanti
  • -
  • Peter Swales
  • -
  • Nicole Wells
  • -
  • Matthew Oberlin
  • -
  • Lee 'Sailer' Ponzu
  • -
  • Marco Piazza
  • -
  • Darek Deluca
  • -
  • Johannes Rajala
  • -
  • Till Stirling
  • -
  • CharlyM3 Foden
  • -
  • Thoys Pan
  • -
  • Gerry Woolfenden
  • -
  • Michael Powell
  • -
  • Ronin DeVinna www.slportugal.com
  • -
  • Toran Cult
  • -
  • Strife Onizuka
  • -
  • Sandra Tsure
  • -
  • Moundsa Mayo
  • -
  • Jasper Wiggerink
  • -
  • Ima Mechanique
  • -
-
- + + + About LSL-Editor + + + + Special thanks to:
+
+ +
    +
  • Vlad Bjornson
  • +
  • Mazok Nishi
  • +
  • Sonja Manatiso
  • +
  • Hippi Hammerer
  • + +
  • Baron Hauptmann
  • +
  • Arfim Balut
  • +
  • Thelma Huet
  • + +
  • Rand Charleville
  • +
  • MeAm Okelly
  • +
  • krishna Kanik
  • +
  • Smoere Broek
  • + +
  • Frederick Zanzibar
  • +
  • Andon Beattie
  • +
  • Rejha Vuckovic
  • +
  • Alidar Moxie
  • +
  • Al Supercharge
  • + +
  • Krissmas Merryman
  • +
  • Jolan Fonda
  • + +
  • Chase Marellan
  • +
  • Dui Zhang
  • +
  • Scott Diener
  • +
  • Nakiakekai Heliosense
  • + +
  • Adalace Jewell
  • +
  • Dave Dennis
  • +
  • Scythe Elfenbeim
  • +
  • Rynnan Riggles
  • +
  • SynCere Talon
  • +
  • Maxis Neely
  • + +
  • Nightwind Redgrave
  • +
  • WaMark Basevi
  • +
  • Brett Henley
  • +
  • Wam7c Macchi
  • +
  • Wen Grian
  • +
  • Reno Folland
  • +
  • Deven Lefavre
  • +
  • Suepahfly Streeter
  • +
  • Hector Greenspan
  • + +
  • Ricky Lucero
  • +
  • Miguel Yesheyev
  • +
  • Lisa Flatley
  • +
  • Vico Torok
  • +
  • Indigo Mertel
  • +
  • JenniferD Noel
  • +
  • Tabitha Greenspan
  • +
  • Pol McLaglen
  • + +
  • Mitchmiester Slade
  • +
  • Murie Lynagh
  • + +
  • Madgeek Nixdorf
  • +
  • Alexin Auer
  • +
  • Trance Broek
  • +
  • Blackstone Market
  • +
  • Dana Mureaux
  • + +
  • Dig Somme
  • +
  • Ichiro Kiama
  • +
  • Theo Outlander
  • + +
  • Saul Kish
  • +
  • Sempronio Barbosa
  • +
  • Capt Blinker
  • +
  • Debbie Trilling
  • +
  • Nigel Beaumont
  • +
  • Billboard Kidd
  • + +
  • Ryder Dryke
  • +
  • Sylvia Baxter
  • + +
  • Wolt Amat
  • +
  • Matthew White
  • +
  • Ruth Chabay
  • +
  • Nico van Klaveren
  • +
  • SummerDale Beckstrand
  • + +
  • SK Decosta
  • +
  • Agathos Frascati
  • + +
  • Rhianne Darkstone
  • + +
  • Tarquin Janus
  • +
  • Costas Menico
  • +
  • Piet Garfield
  • +
  • Stephane Zugzwang
  • + +
  • Pencilsky Germi
  • +
  • Kii Lilliehook
  • + +
  • Metal Gynoid
  • +
  • Tee Tulip
  • +
  • Frans Carbaat
  • +
  • Orcian Longstaff
  • +
  • Salid Sewell
  • +
  • AnnMarie Coronet
  • +
  • constantin klein
  • +
  • Dan Hartshorn
  • +
  • Second Nature 3
  • +
  • Trevor Langdon
  • +
  • Lecalat Starbrook
  • +
  • Jesse Barnett
  • +
  • Daniel Quigley
  • +
  • Chavo Raven
  • +
  • Gerral Hubbard
  • +
  • DrDoug Pennell
  • +
  • Forest Klaar
  • +
  • Gearsawe Stonecutter
  • + +
  • Avian Islands
  • +
  • Bernard Davis
  • +
  • DangerDave Writer
  • +
  • Olivier Jeanjean
  • +
  • Mo Hax
  • +
  • Salahzar Stenvaag
  • + +
  • Kirrineth Dragonash
  • +
  • Rock Vacirca
  • +
  • Maeva Anatine
  • +
  • Lois Laughton
  • + +
  • Elizabeth Didier
  • +
  • Hiroshi Iuga
  • +
  • Susan Koltai
  • +
  • Klaus-E Klingner
  • +
  • Bimble
  • + +
  • Richard Collins
  • +
  • Ralph Brown
  • + +
  • Igorbar Barbosa
  • +
  • Fletcher Rock
  • + +
  • Zoe Gauvreau
  • +
  • Luca Peck
  • +
  • James Leach
  • +
  • Michael Schneider
  • + +
  • Basel Janus
  • +
  • Petersnow Hyun
  • +
  • Itsme Frederix
  • +
  • Moard Ling
  • + +
  • Diosnegro Bertolucci
  • +
  • Hiroza Hird
  • + +
  • Cale Vinson
  • +
  • Yenzo Cortes
  • +
  • Malcolm J. Kudra
  • +
  • Robert Hayden
  • +
  • John Stout
  • +
  • Jim McElhiney
  • +
  • Sergey Mirontsev
  • +
  • David S
  • +
  • Never 30
  • +
  • Maurice 'colorstonic'
  • +
  • Ricc Harding
  • +
  • Thomas 'Angeldust'
  • +
  • Sally LaSalle
  • +
  • Sebastian Fuentes
  • +
  • Sandra Lee
  • +
  • Dimentox Travanti
  • +
  • Peter Swales
  • +
  • Nicole Wells
  • +
  • Matthew Oberlin
  • +
  • Lee 'Sailer' Ponzu
  • +
  • Marco Piazza
  • +
  • Darek Deluca
  • +
  • Johannes Rajala
  • +
  • Till Stirling
  • +
  • CharlyM3 Foden
  • +
  • Thoys Pan
  • +
  • Gerry Woolfenden
  • +
  • Michael Powell
  • +
  • Ronin DeVinna www.slportugal.com
  • +
  • Toran Cult
  • +
  • Strife Onizuka
  • +
  • Sandra Tsure
  • +
  • Moundsa Mayo
  • +
  • Jasper Wiggerink
  • +
  • Ima Mechanique
  • +
+
+ \ No newline at end of file diff --git a/trunk/Resource/App.ico b/source/Resource/App.ico similarity index 100% rename from trunk/Resource/App.ico rename to source/Resource/App.ico diff --git a/trunk/Resource/ConfCSharp.xml b/source/Resource/ConfCSharp.xml similarity index 96% rename from trunk/Resource/ConfCSharp.xml rename to source/Resource/ConfCSharp.xml index 4360f6c..6fa42ac 100644 --- a/trunk/Resource/ConfCSharp.xml +++ b/source/Resource/ConfCSharp.xml @@ -1,102 +1,102 @@ - - - - - //.* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + //.* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/Resource/ConfLSL.xml b/source/Resource/ConfLSL.xml similarity index 97% rename from trunk/Resource/ConfLSL.xml rename to source/Resource/ConfLSL.xml index 203a712..81515d8 100644 --- a/trunk/Resource/ConfLSL.xml +++ b/source/Resource/ConfLSL.xml @@ -1,6600 +1,6600 @@ - - - //.* - - - - - - "[^"\\]* (?>\\.[^"\\]*)*" - - - - - - - - - - - - - \+\+|\-\-|\<\<|\>\>|\<\=|\>\=|\=\=|\!\=|\&\&|\|\||\+\=|\-\=|\*\=|\/\=|\%\= - - - - - - - [+-]?0x[\da-fA-F.p]+ | [-+]?\d* \.?\d+([eE][-+]?\d+)? - - - - - - - - - - - - - - - - - All scripts must have a default state, which is the first state entered when the script starts. - If another state is defined before the default state, the compiler will report a syntax error. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Complete listing of the Linden Library function calls available in lsl. - - integer llAbs(integer val); - - Returns the absolute value of val. - - - - float llAcos(float val); - - Returns the arccosine in radians of val. - - - - llAddToLandBanList(key agent, float hours); - - Adds agent to the parcel ban list for the specified number of hours. - A value of 0 for hours will add agent indefinitely. - The smallest value hours will accept is 0.01; - anything smaller will be seen as 0. - When values that small are used, it seems the function bans - in 30 second increments (Probably 36 second increments, - as 0.01 of an hour is 36 seconds). - Residents teleporting to a parcel where they are banned - will be redirected to a neighboring parcel. - - - - llAddToLandPassList(key avatar, float hours); - - Add avatar to the land pass list for hours. - - - - llAdjustSoundVolume(float volume); - - Adjusts the volume of the currently playing attached sound started - with llPlaySound or llLoopSound. - This function Has no effect on sounds started with llTriggerSound. - - - - llAllowInventoryDrop(integer add); - - If add == TRUE, users that do no have object modify permissions can - still drop inventory items onto object. - - boolean, If TRUE allows anyone to drop inventory on prim, FALSE revokes. - - - - - float llAngleBetween(rotation a, rotation b); - - Returns the angle in radians between rotations a and b. - - - - llApplyImpulse(vector force, integer local); - - Applies the impulse in local coordinates if local == TRUE. - Otherwise the impulse is applied in global coordinates. - This function only works on physical objects. - - - boolean, if TRUE, force is treated as a local directional vector instead of region directional vector. - - - - - llApplyRotationalImpulse(vector force, integer local); - - Applies a rotational impulse force in local coordinates if local == TRUE. - Otherwise the impulse is applied in global coordinates. - This function only works on physical objects. - - - boolean, if TRUE, uses local axis, if FALSE, uses region axis. - - - - - float llAsin(float val); - - Returns the arcsine in radians of val. - - - - float llAtan2(float y, float x); - - returns the arctangent2 of y, x - - - - llAttachToAvatar(integer attachment); - - Attach to avatar at point attachment. - Requires the PERMISSION_ATTACH runtime permission. - - - - - void llAttachToAvatarTemp(integer AttachPoint); - - As llAttachToAvatar, with the exception that the object will not create new inventory for the user, and will disappear on detach or disconnect. - - - - - key llAvatarOnLinkSitTarget(integer iLinkNumber); - - Returns a key that is the UUID of the user seated on the specified link's prim. - - - - key llAvatarOnSitTarget(void); - - If an avatar is sitting on the sit target, return the avatars key, - NULL_KEY otherwise. This only will detect - avatars sitting on sit targets defined with llSitTarget. - - - - rotation llAxes2Rot(vector fwd, vector left, vector up); - - Returns the rotation represented by coordinate axes fwd, left, and up. - - - - rotation llAxisAngle2Rot(vector axis, float angle); - - Returns the rotation generated angle about axis. - - - - integer llBase64ToInteger(string str); - - Little endian decode the 8 character Base64 string str into an integer. - - - - string llBase64ToString(string str); - - Converts a Base 64 string to a conventional string. - If the conversion creates any unprintable characters, they are converted to question marks (this behavior is different then llUnescapeURL). - - - - llBreakAllLinks(void); - - Delinks all objects in the link set. - Requires the permission PERMISSION_CHANGE_LINKS be set. - - - - llBreakLink(integer linknum); - - Delinks the object with the given link number. - Requires permission PERMISSION_CHANGE_LINKS be set. - - - - list llCastRay( vector start, vector end, list options ); - - Return value: [UUID_1, {link_number_1}, hit_position_1, {hit_normal_1}, UUID_2, {link_number_2}, hit_position_2, {hit_normal_2}, ... , status_code] where {} indicates optional data. - - - - list llCSV2List(string src); - - Create a list from a string of comma separated values specified in src. - - - - integer llCeil(float val); - - Returns largest integer value >= val. - - - - llClearCameraParams(void); - - Resets all camera parameters to default values and turns off scripted camera control. - - - - integer llClearLinkMedia(integer Link, integer Face); - - Clears (deletes) the media and all parameters from the given prim face. - Returns an integer that is a STATUS_* flag which details the success/failure of the operation. - Link number - Face number - - - - integer llClearPrimMedia(integer Face ); - - Clears (deletes) the media and all params from the given Face. - Returns an integer that is a STATUS_* flag which details the success/failure of the operation. - Face number - - - - llCloseRemoteDataChannel(key channel); - - Closes XML-RPC channel. - - - - float llCloud(vector offset); - - Returns the cloud density at the object position + offset. - - - - llCollisionFilter(string name, key id, integer accept); - - If accept == TRUE, only accept collisions with objects name and id, - otherwise with objects not name or id. - Specify an empty string or NULL_KEY to not filter - on the corresponding parameter. - - - - If TRUE, only accept collisions with objects name AND id - (either is optional), otherwise with objects not name AND id - - - - - llCollisionSound(string impact_sound, float impact_volume); - - Suppress default collision sounds, replace default impact sounds - with impact_sound found in the object inventory. - Supply an empty string to suppress collision sounds. - - - - llCollisionSprite(string impact_sprite); - - Suppress default collision sprites, replace default impact sprite - with impact_sprite found in the object inventory. - Supply an empty string to just suppress. - - - - float llCos(float theta); - - Returns the cosine of thetaradians. - - - - void llCreateCharacter(list Options); - - Creates a path-finding entity, known as a "character", from the object containing the script. Required to activate use of path-finding functions. - Options is a list of key/value pairs. - - - - llCreateLink(key target, integer parent); - - Attempt to link object script is attached to and target. - Requires permission PERMISSION_CHANGE_LINKS be set. - If parent== TRUE, object script is attached to is the root. - - - - - - void llDeleteCharacter(void); - - Convert the current link-set back to a standard object, removing all path-finding properties. - - - - list llDeleteSubList(list src, integer start, integer end); - - Remove the slice from the list and return the remainder. - The start and end are inclusive, so 0, length -1 would delete the - entire list and 0,0 would delete the first list entry. - Using negative numbers for start and/or end causes the index to count - backwards from the length of the list, so 0,-1 would delete the entire - list. If start is larger than end the list deleted is the exclusion - of the entries, so 6,4 would delete the entire list except - for the 5th list entry. - - - - string llDeleteSubString(string src, integer start, integer end); - - Removes the indicated substring and returns the result. - The start and end are inclusive, so 0,length-1 would - delete the entire string and 0,0 would delete the first character. - Using negative numbers for start and/or end causes the index to - count backwards from the length of the string, so 0,-1 would - delete the entire string. If start is larger than end the sub string - is the exclusion of the entries, so 6,4 would delete the entire string - except for the 5th character. - - - - llDetachFromAvatar(void); - - Drop off of avatar. - - - - vector llDetectedGrab(integer number); - - Returns the grab offset of detected object number. - Returns <0,0,0> if number is not valid sensed object. - - - - integer llDetectedGroup(integer number); - - Returns TRUE if detected object or agent number has the same - user group active as this object. - It will return FALSE if the object or agent is in the group, - but the group is not active. - - - - key llDetectedKey(integer number); - - Returns the key of detected object number. - Returns NULL_KEY if number is not valid sensed object. - - - - integer llDetectedLinkNumber(integer number); - - Returns the link position of the triggered event for touches. - 0 for a non-linked object, 1 for the root of a linked - object, 2 for the first child, etc. - - - - string llDetectedName(integer number); - - Returns the name of detected object number. - Returns empty string if number is not valid sensed object. - - - - key llDetectedOwner(integer number); - - Returns the key of detected number objects owner. - Returns invalid key if number is not valid sensed object. - - - - vector llDetectedPos(integer number); - - Returns the position of detected object number. - Returns <0,0,0> if number is not valid sensed object. - - - - rotation llDetectedRot(integer number); - - Returns the rotation of detected object number. - Returns <0,0,0,1> if number is not valid sensed object. - - - - vector llDetectedTouchBinormal( integer index ); - - Returns a vector that is the surface binormal - (tangent to the surface) where the touch event was triggered. - - Index of detection information - - - - - integer llDetectedTouchFace( integer index ); - - Returns an integer that is the index of the face the avatar clicked on. - - Index of detection information - - - - - vector llDetectedTouchNormal( integer index ); - - Returns a vector that is the surface normal - (perpendicular to the surface) where the touch event was triggered. - - Index of detection information - - - - - vector llDetectedTouchPos( integer index ); - - Returns a vector that is the position where the object - was touched in region coordinates, unless it is attached to - the HUD, in which case it returns the position relative - to the attach point. - - Index of detection information - - - - - vector llDetectedTouchST( integer index ); - - Returns a vector that is the surface coordinates for where the prim was touched. - The x and y vector positions contain the horizontal (s) and vertical (t) face - coordinates respectively. - Each component is in the interval [0.0, 1.0]. - - TOUCH_INVALID_TEXCOORD is returned when the surface coordinates cannot be determined. - - Index of detection information - - - - - vector llDetectedTouchUV( integer index ); - - Returns a vector that is the texture coordinates for where - the prim was touched. The x and y vector positions contain - the u and v face coordinates respectively. - - TOUCH_INVALID_TEXCOORD is returned - when the touch UV coordinates cannot be determined. - - Index of detection information - - - - - integer llDetectedType(integer number); - - Returns the type (AGENT, ACTIVE, PASSIVE, SCRIPTED) of detected object - number. Returns 0 if number is not valid sensed object. - Note that number is a bitfield, so comparisons need to be a bitwise - and check. eg: - integer type = llDetectedType(0); - if (type and AGENT) - { - // ...do stuff with the agent - } - - - - vector llDetectedVel(integer number); - - Returns the velocity of detected object number. - Returns <0,0,0 and > - if number is not valid sensed object. - - - - llDialog(key avatar, string message, list buttons, integer channel); - - Opens a "notify box" in the top-right corner of the given avatars - screen displaying the message. Up to four - buttons can be specified in a list of strings. When the player - clicks a button, the name of the button is chatted on - the specified channel. Channels work just like llSay(), - so channel 0 can be heard by everyone. The chat - originates at the objects position, not the avatars position. e.g. - llDialog(who, "Are you a boy or a girl?", [ "Boy", "Girl" ], 4913); - llDialog(who, "This shows only an OK button.", [], 192); - llDialog(who, "This chats so you can hear it.", ["Hooray"], 0); - - - - llDie(void); - - Delete the object which holds the script. - - - - string llDumpList2String(list src, string separator); - - Write the list out in a single string using separator between values. - - - - integer llEdgeOfWorld(vector pos, vector dir); - - Returns TRUE if the line along dir from pos hits the edge - of the world in the current simulator and returns - FALSE if that edge crosses into another simulator. - - - - llEjectFromLand(key pest); - - Ejects pestfrom land that you own. - - - - llEmail(string address, string subject, string message); - - Sends email to address with subject and message. - - - - string llEscapeURL(string url); - - Returns the string that is the URL-escaped version of url - (replacing spaces with %20, etc). - This function returns the UTF-8 encoded escape codes - for selected characters. - - - - rotation llEuler2Rot(vector vec); - - Returns the rotation represented by Euler Angle vec. - - - - void llEvade(key TargetID, list Options); - - Characters will (roughly) try to hide from their pursuers if there is a good hiding spot along their fleeing path. Hiding means no direct line of sight from the head of the character (centre of the top of its physics bounding box) to the head of its pursuer and no direct path between the two on the navigation-mesh. - Agent or object to evade. - No options yet. - - - - void llExecCharacterCmd(integer Command, list Options); - - Send a command to the path system. - Currently only supports stopping the current path-finding operation or causing the character to jump. - Command to send. - Height for CHARACTER_CMD_JUMP. - - - - float llFabs(float val); - - Returns the absolute value of val. - - - - void llFleeFrom(vector Source, float Distance, list Options); - - Directs a character (llCreateCharacter) to keep away from a defined position in the region or adjacent regions. - Global coordinate from which to flee. - Distance in meters to flee from the source. - No options available at this time. - - - - integer llFloor(float val); - - Returns largest integer value<= val. - - - - llForceMouselook(integer mouselook); - - After calling this function with mouselook set to TRUE, - any agent sitting down on the prim will be forced into mouselook. - Just like llSitTarget, this changes a permanent property - of the prim (not the object) and needs to be reset by calling - this function with mouselook set to FALSE in order to disable it. - - boolean, if TRUE when an avatar sits on the prim, - the avatar will be forced into mouselook mode. - FALSE is the default setting and will undo - a previously set TRUE or do nothing. - - - - - float llFrand(float mag); - - Returns a pseudo-random number between [0, mag). - - - - key llGenerateKey(void); - - Generates a key (SHA-1 hash) using UUID generation to create a unique key.\n - As the UUID produced is versioned, it should never return a value of NULL_KEY.\nThe specific UUID version is an implementation detail that has changed in the past and may change again in the future. Do not depend upon the UUID that is returned to be version 5 SHA-1 hash. - - - - vector llGetAccel(void); - - Gets the acceleration. - - - - integer llGetAgentInfo(key id); - - Returns information about the given agent id. Returns a bitfield - of agent info constants. - - - - string llGetAgentLanguage( key avatar ); - - Returns a string that is the language code of the preferred interface language of the user avatar. - - - - list llGetAgentList( integer Scope, list Options ); - - Returns a list of agents from the specified scope (parcel, owner's parcel, region). - - - - vector llGetAgentSize(key id); - - If the agent id is in the same sim as the object, returns - the size of the avatar. - - - - float llGetAlpha(integer face); - - Returns the alpha of the given face. If face is ALL_SIDES - the value returned is the mean average of all faces. - - - - float llGetAndResetTime(void); - - Gets the time in seconds since creation and sets the time to zero. - - - - string llGetAnimation(key id); - - Returns the currently playing animation for avatar id. - - - - list llGetAnimationList(key id); - - Returns a list of keys of all playing animations for avatar id. - - - - string llGetAnimationOverride(string AnimationState); - - Returns the name of the animation used for specified animation state. - - - - integer llGetAttached(void); - - Returns the object attachment point or 0 if not attached. - - - - list llGetBoundingBox(key object); - - Returns the bounding box around the object or avatar with - the key object (including any linked prims) relative to the - root prim, in a list: [ (vector) min_corner, (vector) max_corner ] - - - - vector llGetCameraPos(void); - Returns the position of the camera of the user that granted the - script PERMISSION_TRACK_CAMERA. If no user has granted the permission, - it returns ZERO_VECTOR. - - - - rotation llGetCameraRot(void); - - Returns the rotation of the camera of the user who's granted - this script PERMISSION_TRACK_CAMERA. If no user has granted the - permission, it returns ZERO_ROTATION. The key of the user whose - camera is being tracked can be obtained using llGetPermissionsKey. - - - - vector llGetCenterOfMass(void); - - Returns the center of mass of the root object. - - - - list llGetClosestNavPoint(vector Point, list Options); - - The function accepts a point in region-local space (like all the other path-finding methods) and returns either an empty list or a list containing a single vector which is the closest point on the navigation-mesh to the point provided. - A point in region-local space. - No options at this time. - - - - vector llGetColor(integer face); - - Returns the color of face as a vector of red, green, and blue values - between 0 and 1. If face is ALL_SIDES - the color returned is the mean average of each channel. - - - - key llGetCreator(void); - - Returns the key of the object's original creator. Similar to llGetOwner. - - - - string llGetDate(void); - - Returns the current UTC date as YYYY-MM-DD. - - - - string llGetDisplayName( key id ); - - Returns a string that is the non-unique display name of the avatar specified by id. - • key id – avatar UUID that is in the same region or is otherwise known to the region - - id must specify a valid avatar key, present in or otherwise known to the sim in which the script is running, otherwise an empty - string is returned. This function will still return a valid display name if the avatar is a child agent of the sim - (i.e., in an adjacent sim, but presently able to see into the one the script is in), or for a short period after the avatar - leaves the sim (specifically, when the client completely disconnects from the sim, either as a main or child agent). - - - - float llGetEnergy(void); - - Returns how much energy is in the object as a percentage of maximum. - - - - string llGetEnv( string name ); - - Returns a string with the requested data about the region. - • string name – The name of the data to request - Table of valid name values. Name ↓ Description - "sim_channel" Get the current region's channel string, for example "Second Life Server" - "sim_version" Get the current region's version number string, for example "10.11.30.215699" - - - - vector llGetForce(void); - - Returns the current force if the script is physical. - - - - integer llGetFreeMemory(void); - - Returns the available heap space for the current script. - - - - integer llGetFreeURLs( ); - - Returns an integer that is the number of available URLs. - - - - vector llGetGeometricCenter(void); - - Returns the geometric center of the linked set the - script is in relative to the object's position - (the position of the root prim of a linked set). - To get the object's position, use llGetPos. - - - - float llGetGMTclock(void); - - Gets the time in seconds since midnight in GMT/UTC. - - - - string llGetHTTPHeader( key request_id, string header ); - - Returns a string that is the value for header for request_id. - A valid HTTP request key - Header value name - - - - key llGetInventoryCreator(string item); - - This function returns the UUID of the creator of item. - If item is not found in inventory, - the object says "No item named 'name' ". - - - - key llGetInventoryKey(string name); - - Returns the key of the inventory name. - - - - string llGetInventoryName(integer type, integer number); - - Get the name of the inventory item number of type. - Use the inventory constants to specify the type. - inventory item type - - inventory item number - - - - - integer llGetInventoryNumber(integer type); - - Get the number of items of type in the object inventory. - Use the inventory constants to specify the type. - inventory item type - - - - integer llGetInventoryPermMask(string item, integer mask); - - Returns the requested permission mask for the inventory - item defined by item. If item is not in the object's inventory, - llGetInventoryPermMask returns 0 and causes the object to - say "No item named '<item>'", where "<item>" is item. - If this is used to determine whether or not an inventory item - exists within the object, it will have the side effect of spamming chat. - inventory item - MASK_BASE, MASK_OWNER, MASK_GROUP, MASK_EVERYONE or MASK_NEXT - - - - integer llGetInventoryType(string name); - - Returns the type of the inventory item name. - Remember, like the other inventory functions, llGetInventoryType - is case-sensitive. - - - - key llGetKey(void); - - Get the key for the object which has this script. - - - - key llGetLandOwnerAt(vector pos); - - Returns the key of the land owner at pos or NULL_KEY if public. - - - - key llGetLinkKey(integer linknum); - - Returns the key of linknum in the link set. - - - - list llGetLinkMedia(integer LinkNumber, integer Face, list Parameters); - - Get the desired list of named media parameters, for a particular face, of a linked prim. - Returns a list of values in the order requested. - Link number (0: unlinked, 1: root prim, >1: child prims) or a LINK_* flag - The prim's side number - A list of PRIM_* property constants to return values of. - - - - string llGetLinkName(integer linknum); - - Returns the name of linknumin the link set. - - - - integer llGetLinkNumber(void); - - Returns what link number in a link set the for the object - which has this script. 0 means no link, 1 the root, 2 for - first child, etc. - - - - integer llGetLinkNumberOfSides( integer link ); - - Returns an integer that is the number of faces (or sides) of the prim link. - • integer link – Link number (0: unlinked, 1: root prim, >1: child prims) or a LINK_* flag - - - - list llGetLinkPrimitiveParams( integer link, list params ); - - Identical to llGetPrimitiveParams except that it acts on the prim specified by the link number given. - Returns the list of primitive attributes requested in the params list for link - • integer link – Link number (0: unlinked, 1: root prim, >1: child prims) or a LINK_* flag to get the parameters of - • list params – PRIM_* flags - - PRIM_* flags can be broken into three categories, face flags, prim flags, and object flags. - - * Supplying a prim or object flag will return that flags attributes. - * Face flags require the user to also supply a side parameter. - to get the parameters of - a list of PRIM_* flags - - - - integer llGetListEntryType(list src, integer index); - - Returns the type of the variable at index in src. - - - - integer llGetListLength(list src); - - Returns the number of elements in src. - - - - vector llGetLocalPos(void); - - Returns the local position of a child object relative to the root. - - - - rotation llGetLocalRot(void); - Returns the local rotation of a child object relative to the root. - - - - float llGetMass(void); - - Returns the scripted object's mass. When called from a script - in a linkset, the parent will return the sum of the linkset weights, - while a child will return just its own mass. When called from - a script inside an attachment, this function will return the mass - of the avatar it's attached to, not its own. - - - - float llGetMassMKS() - - Acts as llGetMass(), except that the units of the value returned are Kg. - - - - integer llGetMemoryLimit(void); - - Get the maximum memory a script can use. - Returns the integer amount of memory the script can use in bytes. - - - - llGetNextEmail(string address, string subject); - - Get the next waiting email with appropriate addressand/or subject. - If the parameters are blank, they are not used for filtering. - - - - key llGetNotecardLine(string name, integer line); - - This function fetches line number line of notecard name and returns - the data through the dataserver event. The line count starts at zero. - If the requested line is past the end of the notecard the dataserver - event will return the constant EOF string. - The key returned by this function is a unique identifier which will - be supplied to the dataserver event in the requested parameter. - - - - key llGetNumberOfNotecardLines(string name); - - Returns number of lines in the notecard name via the dataserver event. - (Cast the value returned by the dataserver to an integer.) - The key returned is a query id for identifying the dataserver reply. - - - - integer llGetNumberOfPrims(void); - - Returns the number of prims in (and avatars seated on) - the object the script is in. - - - - integer llGetNumberOfSides(void); - - Returns the number of sides of the current object which has the script. - - - - string llGetObjectDesc(void); - - Returns the description of the scripted object/prim. - You can set the description using llSetObjectDesc. - - - - list llGetObjectDetails(key id, list params); - - Returns a list of the details specified in params for the object with key id. - - prim or avatar UUID that is in the same region - - - list of OBJECT_* flags - - - - - float llGetObjectMass(key id); - - Gets the mass of the object or avatar corresponding to id. - - - - string llGetObjectName(void); - - Returns the name of the object which has the script. - - - - integer llGetObjectPermMask(integer mask); - - Returns the requested permission mask for the root object - the task is attached to. - - - - - integer llGetObjectPrimCount(key id); - - Returns the prim count for any object id in the same sim. - - - - vector llGetOmega(void); - - Returns the omega. - - - - key llGetOwner(void); - - Returns the owner of the object. - - - - key llGetOwnerKey(key id); - - Returns the owner of object id. - - - - list llGetParcelDetails(vector pos, list details); - - Returns of a list of the details in the order they are in the details list, - for the parcel at pos. pos is in absolute region coordinates. - - - - integer llGetParcelFlags(vector pos); - - Returns a bitfield specifying the parcel flags - (PARCEL_FLAG_*) for the parcel under the position pos. - - - - integer llGetParcelMaxPrims(vector pos, integer sim_wide); - - - - string llGetParcelMusicURL(void); - - Returns a string containing the parcel streaming audio URL. - The object owner (avatar or group) must also be the land owner. - - - - integer llGetParcelPrimCount(vector pos, integer category, integer sim_wide); - - Returns the number of prims used on the parcel at pos which are in category. - - If sim_wide is TRUE, it returns the number of objects - for the entire sim in the category specified. - If sim_wide is FALSE, it returns the number of objects - on this specific parcel in the category specified - region coordinate - - a PARCEL_COUNT_* flag - - Can be TRUE or FALSE - - - - list llGetParcelPrimOwners(vector pos); - - Returns a strided list of keys and integers of up to 100 - agents who own objects in the parcel at pos. - The list is formatted as - [ key agentKey1, integer agentCount1, key agentKey2, integer agentCount2, ... ], - sorted by agent key. - The integers are counts of the number of prims (not objects) - owned by the corresponding agents. - Sleeps the script for 2.0 seconds. - Function only works when the object owner is in the sim - (likely the reason it doesn't work when deeded to group). - - - - integer llGetPermissions(void); - - Returns what permissions have been enabled.eg: - - integer perm = llGetPermissions(); - if((perm and PERMISSION_DEBIT) == PERMISSION_DEBIT) - { - // code goes here - } - - - - key llGetPermissionsKey(void); - - Returns avatar that has enabled permissions. - Returns NULL_KEY if not enabled. - - - - list llGetPhysicsMaterial() - - Returns a list of the form [float gravity_multiplier, float restitution, float friction, float density]. - - - - vector llGetPos(void); - - Returns the position. - - - - list llGetPrimitiveParams(list params); - - Returns primitive parameters specified in the params list. - - - - list llGetPrimMediaParams( integer face, list params ); - - Get the media params for a particular face on an object, given the desired list of names. - - Returns a list of values in the order requested. - face number - a set of names (in no particular order) - - Returns an empty list if no media exists on the face. - - - - integer llGetRegionAgentCount(void); - - Returns an integer that is the number of avatars in the region. - - - - vector llGetRegionCorner(void); - - Returns the RegionCorner of the simulator containing the task. - - - - integer llGetRegionFlags(void); - - Returns a bitfield specifying the region flags - (REGION_FLAG_*) for the region the object is in. - - - - llGetRegionFPS(void); - - Returns the mean region frames per second. - - - - string llGetRegionName(void); - - Returns the current region name. - - - - float llGetRegionTimeDilation(void); - - Returns the current time dilation as a float between 0 and 1. - - - - vector llGetRootPosition(void); - - Gets the position (in region coordinates) - of the root/parent prim of the object containing the script. - This is used to allow a child prim to determine where the root is. - - - - rotation llGetRootRotation(void); - - Gets the global rotation of the root object of the - object script is attached to. - - - - rotation llGetRot(void); - - Returns the rotation. - - - - integer LlGetSPMaxMemory( ); - - Returns the integer of the most bytes used while llScriptProfiler was last active. - - - - vector llGetScale(void); - - Returns the scale. - - - - string llGetScriptName(void); - - Returns the name of this script. - - - - integer llGetScriptState(string name); - - Resets TRUE if script name is running - - - - float llGetSimStats(integer StatType); - - Returns a float that is the requested statistic. - Statistic type. Currently only SIM_STAT_PCT_CHARS_STEPPED is supported. - - - - string llGetSimulatorHostname(void); - - Returns the host name (server) of the sim - in which the scripted object is located. - For example, "sim225.agni.lindenlab.com". - - - - integer llGetStartParameter(void); - - Returns the start parameter passed to llRezObject. - If the object was created from agent inventory, this function - returns 0. - - - - list llGetStaticPath(vector Start, vector End, float Radius, list Parameters); - - Returns a list of position vectors indicating pathfinding waypoints between positions at start and end, for a character of a given radius. The waypoints this function returns are for the 'static' nav mesh, meaning that objects set to "movable obstacle" or "movable phantom" are ignored. - - - - integer llGetStatus(integer status); - - Returns the value of status. - The value will be one of the status constants. - - - - string llGetSubString(string src, integer start, integer end); - - Returns the indicated substring from src. The startand end are - inclusive, so 0,length-1 would capture the entire string and 0,0 - would capture the first character. Using negative numbers for - start and/or end causes the index to count backwards from the length - of the string, so 0,-1 would capture the entire string. - If start is larger than end the sub string is the exclusion of the - entries, so 6,4 would give the entire string - except for the 5th character. - - - - vector llGetSunDirection(void); - - Returns the sun direction on the simulator. - - - - string llGetTexture(integer face); - - Returns the texture of face if it is found in object inventory. - - - - vector llGetTextureOffset(integer side); - - Returns the texture offset of side in the x and y components of a vector. - - - - float llGetTextureRot(integer side); - - Returns the texture rotation of side. - - - - vector llGetTextureScale(integer side); - - Returns the texture scale of sidein the x and y components of a vector. - - - - float llGetTime(void); - - Returns the time in seconds since creation of this script. - - - - float llGetTimeOfDay(void); - - Gets the time in seconds since midnight in Second Life. - - - - string llGetTimestamp(void); - - Returns the current time-and-date (a timestamp) - in the format YYYY-MM-DDThh:mm:ss.ff..fZ, - for example: 2004-08-27T00:56:21.785886Z - The letter Z stands for Zulu, - the military time zone name for UTC. T is just - a separator between date and time. - - - - vector llGetTorque(void); - - Returns the torque if the script is physical. - - - - integer llGetUnixTime(void); - - Returns the number of seconds elapsed since 00:00 hours, - Jan 1, 1970 UTC from the system clock. - In UNIX terms, time_t. This is great for a monotonic - source of time that ticks once a second. - - - - integer llGetUsedMemory( ); - - Returns the integer of the number of bytes of memory currently in use by the script. - - - - string llGetUsername( key id ); - - Returns a string that is the unique username of the avatar specified by id. - • key id – avatar UUID that is in the same region or is otherwise known to the region - - id must specify a valid avatar key, present in or otherwise known to the sim in which the script is running, - otherwise an empty string is returned. This function will still return a valid username if the avatar is a child agent - of the sim (i.e., in an adjacent sim, but presently able to see into the one the script is in), or for a short period - after the avatar leaves the sim (specifically, when the client completely disconnects from the sim, either as a main - or child agent). - - - - vector llGetVel(void); - - Returns the velocity. - - - - float llGetWallclock(void); - - Returns the time in seconds since simulator timezone midnight. - - - - llGiveInventory(key destination, string inventory); - - Give the named inventory item to the keyed avatar or object in the - same simulator as the giver. If the recipient is an avatar, - the avatar then follows the normal procedure of accepting - or denying the offer. If the recipient is an object, - the same permissions apply as if you were dragging inventory - onto the object by hand, ie if llAllowInventoryDrop has been called - with TRUE, any other object can pass objects to its inventory. - - - - llGiveInventoryList(key destination, string category, list inventory); - - Give the list of named inventory items to the keyed avatar or object - in the same simulator as the giver. If the recipient is an avatar, - the avatar then follows the normal procedure of accepting or denying - the offer. The offered inventory is then placed in a folder named - category in the recipients inventory. If the recipient is an object, - the same permissions apply as if you were dragging inventory onto the - object by hand, ie if llAllowInventoryDrop has been called with TRUE, - any other object can pass objects to its inventory.If the - recipient is an object, the category parameter is ignored. - - - - llGiveMoney(key destination, integer amount); - - Transfer amount from the script owner to destination. - This call will fail if PERMISSION_DEBIT has not been set. - - - - float llGround(vector offset); - - Retuns the ground hieght at the object position + offset. - - - - vector llGroundContour(vector offset); - - Retuns the ground contour at the object position + offset. - - - - vector llGroundNormal(vector offset); - - Retuns the ground contour at the object position + offset. - - - - llGroundRepel(float height, integer water, float tau); - - Critically damps to height if within height* 0.5 of level. - The height is above ground level if water - is FALSE or above the higher of land and water if water is TRUE. - Do not use with vehicles. Only works in physics-enabled objects. - - Distance above the ground - - - boolean, if TRUE then hover above water too. - - - seconds to critically damp in - - - - - vector llGroundSlope(vector offset); - - Returns the ground slope at the object position + offset. - - - - key llHTTPRequest(string url, list parameters, string body); - - Sends HTTP request to url with the specified body and parameters. - - url must always be a valid HTTP or HTTPS URL, pointing to a - location outside the Linden Lab and Second Life servers. - - - - void llHTTPResponse( key request_id, integer status, string body ); - - Responds to request_id with status and body. - A valid HTTP request key - HTTP Status (200, 400, 404, etc) - Contents of the response - - - - string llInsertString(string dst, integer position, string src); - - Inserts src into dst at position and returns the result. - - - - llInstantMessage(key user, string message); - - Send message to the user as an instant message. - - - - string llIntegerToBase64(integer number); - - Encodes number as an 8-character Base64 string. - - - - list llJson2List( string sJSON ); - - This function takes a string representing JSON, and returns a list of the top level. - Returns a list made by parsing src, a string representing json. - - - - string llJsonGetValue( string sJSON, list lSpecifiers ); - - Gets the value indicated by specifiers from the json string. - Returns a string made by parsing json, a string representing json and traversing as specified by specifiers. - - - - string llJsonSetValue( string sJSON, list lSpecifiers, string sValue ); - - Returns a new JSON string which is string with the value indicated by specifiers set to value. - Returns a string - - - - string llJsonValueType( string sJSON, list lSpecifiers ); - - Gets the JSON type for the value in json at the location specifiers. - Returns the string specifying the type of the value at specifiers in json. - - - - string llKey2Name(key id); - - If object id is in the same simulator, return the name of the object. - - - - llLinkParticleSystem( integer link, list rules ); - - A particle system defined by a list of rules is set for the prim(s) link. - This is identical to llParticleSystem except that it applies to a - specified linked prim and not just the prim the script is in. - - Link number (0: unlinked, 1: root prim, >1: child prims) or a LINK_* flag - Particle system rules list in the format [ rule1, data1, rule2, data2 . . . ruleN, dataN ] - - - - llLinkSitTarget(integer iLinkNumber, vector vOffset, rotation rRotation); - - Set the sit location for the linked prim(s). The sit location is relative to the prim's position and rotation. - Link number (0: unlinked, 1: root prim, >1: child prims) or a LINK_* flag of the prim. - Position for the sit target, relative to the prim's position. - Rotation (relative to the prim's rotation) for the avatar. - - - - string llList2CSV(list src); - - Create a string of comma separated values from list. - - - - float llList2Float(list src, integer index); - - Returns the float at index in the list src. - - - - integer llList2Integer(list src, integer index); - - Returns the integer at index in the list src. - - - - string llList2Json( string sType, list lValues ); - - This function takes a list and returns a JSON string of that list as either a json object or json array. - Returns a string that is either values serialized as a JSON type, or if an error was encountered JSON_INVALID. - - - - key llList2Key(list src, integer index); - - Returns the key at index in the list src. - - - - list llList2List(list src, integer start, integer end); - - Returns the slice of the list from start to end of the list - src as a new list. The start and end parameters - are inclusive, so 0,length-1 would copy the entire list and 0,0 - would capture the first list entry. Using negative - numbers for startand/or end causes the index to count backwards - from the length of the list, so 0,-1 would - capture the entire list. If start is larger than end the list - returned is the exclusion of the entries, so 6,4 would - give the entire list except for the 5th entry. - - - - list llList2ListStrided(list src, integer start, integer end, integer stride); - - Copy the strided slice of src from start to end. - - - - rotation llList2Rot(list src, integer index); - - Returns the rotation at index in src. - - - - string llList2String(list src, integer index); - - Returns the string at index in src. - - - - llList2Vector(list src, integer index); - - Returns the vector at index in src. - - - - integer llListFindList(list src, list test); - - Returns the position of the first instance of testin src. - Returns -1 if test is not in src. - - - - list llListInsertList(list dest, list src, integer pos); - - Returns the list created by inserting src into dest at pos. - - - - list llListRandomize(list src, integer stride); - - Returns srcrandomized into blocks of size stride. - If the length of src divided by stride is non-zero, - this function does not randomize the list. - - - - list llListReplaceList(list dest, list src, integer start, integer end); - - Returns a list replacing the slice of the list dest from - start to end with the list src. start and end are inclusive, - so 0, 1 would replace the first two entries - and 0, 0 would replace only the first list entry. - - - - list llListSort(list src, integer stride, integer ascending); - - Returns src sorted into blocks of stride in ascending order if - ascending is TRUE. Note that sort only - works in the head of each sort block is the same type. - list to sort - - blocks of stride length - - - TRUE ascending sort result, FALSE = descending sort result - - - - - float llListStatistics(integer operation, list input); - - This function allows a script to perform a statistical - operation as defined by operation on a list composed - of integers and floats. - - One of LIST_STAT_* values - - - - - integer llListen(integer channel, string name, key id, string msg); - - Sets a listen event callback for msg on channel from name and - returns an identifier that can be used to - deactivate or remove the listen. The name, id and/or msg parameters - can be blank to indicate not to filter on - that argument. Channel 0 is the public chat channel that all avatars - see as chat text. Channels 1 to 2,147,483,648 - are hidden channels that are not sent to avatars. - - - - llListenControl(integer number, integer active); - - Make a listen event callback active or inactive. Pass in the value - returned from llListen to the number parameter - to specify which event you are controlling. - Use boolean values to spcify active - - - - llListenRemove(integer number); - - Removes a listen event callback. Pass in the value returned from - llListen to the number parameter to specify - which event you are removing. - - - - llLoadURL(key avatar_id, string message, string url); - - llLoadURL displays a dialog box to the user offering - to load a web page using the default web browser. - - - - float llLog(float val); - - Returns the base e (natural) logarithm of val (value). - - - - float llLog10(float val); - - Returns the base 10 (common) logarithm of val (value). - - - - llLookAt(vector target, float strength, float damping); - - Cause object to point the forward axis toward target. - Good strength values are around half the mass of the - object and good damping values are less than 1/10th of the strength. - Asymmetrical shapes require smaller - damping. A strength of 0.0 cancels the look at. - - - - llLoopSound(string sound, flaot volume); - - Similar to llPlaySound, this function plays a sound attached to an - object, but will continuously loop that sound - until llStopSound or llPlaySound is called. Only one sound may be - attached to an object at a time. A second call - to llLoopSound with the same key will not restart the sound, but the - new volume will be used. This allows - control over the volume of already playing sounds. Setting the - volumeto 0 is not the same as calling - llStopSound; a sound with 0 volume will continue to loop. - To restart the sound from the beginning, call - llStopSound before calling llLoopSound again. - - - - llLoopSoundMaster(string sound, flaot volume); - - Behavior is identical to llLoopSound, with the addition of marking - the source as a "Sync Master", causing - "Slave" sounds to sync to it. If there are multiple masters within - a viewers interest area, the most audible one (a - function of both distance and volume) will win out as the master. - The use of multiple masters within a small area - is unlikely to produce the desired effect. - - - - llLoopSoundSlave(string sound, flaot volume); - - Behavior is identical to llLoopSound, - unless there is a "Sync Master" present. If a Sync Master is already - playing the Slave sound will begin playing from the same point - the master is in its loop syncronizing the loop - points of both sounds. If a Sync Master is started when the Slave - is already playing, the Slave will skip to the - correct position to sync with the Master. - - - - string llMD5String(string src, integer nonce); - - Performs a RSA Data Security, Inc. MD5 Message-Digest - Algorithm on string with nonce (also known as salt). - Returns a 32-character hex string. (128-bit in binary.) - - - - - - integer llManageEstateAccess(integer Action, key AvatarID); - - Use to add or remove agents from the estate's agent access or ban lists or groups from the estate's group access list. - Returns an integer representing a boolean, TRUE if the call was successful; FALSE if throttled, invalid action, invalid or null id or object owner is not allowed to manage the estate. - One of the ESTATE_ACCESS_ALLOWED_* actions. - UUID of the avatar or group to act upon. - - - - llMapDestination(string simname, vector position, vector lookat); - - Shows a given location on the map. - Works in attachments, or during touch events. - Currently the function will open the map window whenever it is called. - There is no way to simply set the map position without - opening the window. - - - - llMessageLinked(integer linknum, integer num, string str, key id); - - Sends num, str, and id to members of the link set. - The linknum parameter is either the linked number - available through llGetLinkNumber or a link constant. - - - - llMinEventDelay(float delay); - - Set the minimum time between events being handled. - - - - integer llModPow(integer a, integer b, integer c); - - Returns a raised to the b power, mod c. ( (a ^ b)%c ). - b is capped at 0xFFFF (16 bits). - - - - llModifyLand(integer action, integer size); - - Modify land with action on size area. - The parameters can be chosen from the land constants. - - LAND_LEVEL, LAND_RAISE, LAND_LOWER, LAND_SMOOTH, LAND_NOISE or LAND_REVERT - - - LAND_SMALL_BRUSH, LAND_MEDIUM_BRUSH or LAND_LARGE_BRUSH - - - - - llMoveToTarget(vector target, float tau); - - Critically damp to position target in tau-seconds if the - script is physical. Good tau-values are greater than 0.2. - A tau of 0.0 stops the critical damping. - - - - void llNavigateTo(vector Location, list Options); - - Directs an object to travel to a defined position in the region or adjacent regions. - Region coordinates for the character to navigate to. - List of parameters to control the type of path-finding used. Currently only FORCE_DIRECT_PATH supported. - - - - llOffsetTexture(float offset_s, float offset_t, integer face); - - Sets the texture s and t offsets of face. - If face is ALL_SIDES this function sets the texture offsets for - all faces. - - - - llOpenRemoteDataChannel(void); - - Creates a channel to listen for XML-RPC calls. - Will trigger a remote_data event with type = REMOTE_DATA_CHANNEL - and a channel ID (key) once it is available. - This channel ID must be referenced in the XML-RPC call - to the script (from the outside internet)-- - so the key must somehow get to the scripter's XML-RPC client, - most often via llEmail, llHttpRequest or llLoadUrl. - - - - integer llOverMyLand(key id); - - Returns TRUE if id is over land owned by the object owner, - FALSE otherwise. - - - - llOwnerSay(string message); - - Says message to only the owner of the object running the script - if the owner has been within the object's simulator since - logging into Second Life, regardless of where they may be are in-world. - - - - llParcelMediaCommandList(list command_list); - - Playing QuickTime movies (you have to own the land). - - - - list llParcelMediaQuery(list query_list); - - Queries the texture and/or URL for QuickTime-playable - video on the land parcel. - This function will only work if the script is contained - within an object owned by the landowner (or if the land - is owned by a group, only if the object has been deeded - to the group). It will not work for group land if the - object owner is a member of the group. The object - actually has to be owned by the group. - - - - list llParseString2List(string src, list separators, list spacers); - - Breaks src into a list, discarding anything in separators, - keeping any entry in spacers. The - separators and spacers must be lists of strings with a maximum - of 8 entries each. So, if you had made the - call: - llParseString2List("Parsethisnow! I dare:you to.", ["this", "!", " "], [":"]); - You would get the list: - ["Parse", "now", "I", "dare", ":", "you", "to"] - - - - list llParseStringKeepNulls(string src, list separators, list spacers); - - llParseStringKeepNulls works almost exactly the same as - llParseString2List, except that if a null is found - it will add a null string instead of discarding it - like llParseString2List does. - - - - llParticleSystem(list parameters); - - Makes a particle system based on the parameter list. - The parametersare specified as an ordered list of - parameter and value. Valid parameters and their expected - values can be found in the particle system constants. - Here is a simple example: - llParticleSystem([PSYS_PART_FLAGS, PSYS_PART_WIND_MASK, - PSYS_PART_START_COLOR, <1,0,0>, - PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_EXPLODE]); - - - - llPassCollisions(integer pass); - - If pass is TRUE, land and object collisions are passed from - children on to parents. - The default is FALSE if there is no script to handle the collision events. - - boolean, if TRUE, collisions are passed from children on to parents - - - - - llPassTouches(integer pass); - - If pass is TRUE, touches are passed from children on to parents. - The default is TRUE if there is no script to handle the touch events. - - boolean, if TRUE, touches are passed from children on to parents - - - - - void llPatrolPoints(list Points, list Options); - - Sets the points for a character (llCreateCharacter) to patrol along. - A list of vectors for the character to travel through sequentially. The list must contain at least two entries. - No options available at this time. - - - - llPlaySound(string sound, float volume); - - Plays a sound once. The sound will be attached to an object and - follow object movement. Only one sound may - be attached to an object at a time, and attaching a new sound or - calling llStopSound will stop the previously - attached sound. A second call to llPlaySound with the same sound - will not restart the sound, but the new - volume will be used, which allows control over the volume - of already playing sounds. To restart the sound from - the beginning, call llStopSound before calling llPlaySound again. - - - - llPlaySoundSlave(string sound, float volume); - - Behavior is identical to llPlaySound, unless there is - a "Sync Master" present. If a Sync Master is already - playing the Slave sound will not be played until the Master - hits its loop point and returns to the beginning. - llPlaySoundSlave will play the sound exactly once; if it is - desired to have the sound play every time the Master - loops, either use llLoopSoundSlave with extra silence padded - on the end of the sound or ensure that - llPlaySoundSlave is called at least once per loop of the Master. - - - - - - llPow(float base, float exp); - - Returns base raised to the exp. - - - - llPreloadSound(string sound); - - Preloads sound from object inventory on nearby viewers. - - - - void llPursue(key TargetID, list Options); - - Causes the character (llCharacter) to pursue the target defined by TargetID. - Agent or object to pursue. - Parameters for pursuit. - - - - llPushObject(key id, vector impulse, vector angular_impulse, integer local); - - Applies impulse and angular_impulse to object id. - - - - llRegionSay(integer channel, string text); - - Says the string text on channel number channel that can be heard - anywhere in the region by a script listening on channel. - - Any integer value other than zero - - - Message to be transmitted - - - - - llRegionSayTo( key target, integer channel, string msg ); - - Says the text supplied in string msg on channel supplied in integer channel to the object or avatar specified by target - • key target - • integer channel – output channel, any integer value - • string msg – message to be transmitted - - - - llReleaseControls(void); - - Stop taking inputs from avatar. - - - - llReleaseURL( string url ); - - Releases the specified URL, it will no longer be usable. - URL to release - - - - llRemoteDataReply(key channel, key message_id, string sdata, integer idata); - - Send an XML-RPC reply to the request with message_id - on channel with payload of string sdata and integer idata. - The size of sdata is limited to 254 characters. - - - - - - llRemoteLoadScriptPin(key target, string name, integer pin, integer running, integer start_param); - - If the owner of the object containing this script can modify - the object identified by the key target, and if the pin matches - the PIN previously set using llSetRemoteScriptAccessPin - (on the target prim), then the script name will be copied into target. - - - - llRemoveFromLandBanList(key avatar); - - Remove avatar from the land parcel ban list. - - - - llRemoveFromLandPassList(key avatar); - - Remove avatar from the land parcel pass list. - - - - llRemoveInventory(string inventory); - - Remove the named inventory item from the object inventory. - - - - llRemoveVehicleFlags(integer flags); - - Sets the vehicle flags to FALSE. Valid parameters can be found in the vehicle flags constants section. - - - - key llRequestAgentData(key id, integer data); - - This function requests data about agent id. If and when the information - is collected, the dataserver event is - called with the returned key returned from this function passed in - the requested parameter. See the agent data - constants for details about valid values of data and what each will - return in the dataserver event. - - - - key llRequestDisplayName( key id ); - - Requests the Display Name of the agent identified by id. When the Display Name is available the dataserver event will be raised. - The agent identified by id does not need to be in the same region or online at the time of the request. - Returns the key that is used to identify the dataserver event when it is raised. - • key id – avatar UUID - - - - key llRequestInventoryData(string name); - - Requests data from object inventory item name. When data is available - the dataserver event will be raised with - the key returned from this function in the requested parameter. - The only request currently implemented is to - request data from landmarks, where the data returned is in the - form "<float, float, float>" which can be cast to a - vector. This position is in region local coordinates. - - - - llRequestPermissions(key avatar, integer perm); - - Ask avatar to allow the script to do perm. The perm parameter should - be a permission constant. Multiple - permissions can be requested simultaneously by ORing the - constants together. Many of the permissions requests - can only go to object owner. This call will not stop script - execution -if the specified avatar grants the requested - permissions, the run_time_permissions event will be called. - - - - key llRequestSecureURL( ); - - Requests one HTTPS:// (SSL) url for use by this object. The http_request event is tiggered with results. - - Returns a key that is the handle used for identifying the request in the http_request event. - - - - key llRequestSimulatorData(string simulator, integer data); - - Requests data about the sim with the name simulator. - simulator is case-insensitive. - Returns a dataserver query ID and triggers the dataserver - event when data is found. The sim name is usually not case-sensitive, - but sometimes will return data for a similarly-named sim - if the supplied case doesn't match the intended sim's actual name. - - - - key llRequestURL( ); - - Requests one HTTP:// url for use by this script. The http_request event is triggered with the result of the request. - - Returns a key that is the handle used for identifying the result in the http_request event. - - - - key llRequestUsername( key id ); - - Requests the Username of the agent identified by id. When Username is available the dataserver event will be raised. - The agent identified by id does not need to be in the same region or online at the time of the request. - Returns a key that is used to identify the dataserver event when it is raised. - • key id – avatar UUID - - - - void llResetAnimationOverride(string AnimationState); - - Resets the animation override of the specified animation state to the corresponding default value. - - - - llResetLandBanList(void) - - Removes all residents from the land ban list. - - - - llResetLandPassList(void) - - Removes all residents from the land access/pass list. - - - - llResetScript(void); - - Resets this script. - - - - llResetOtherScript(string name); - - Resets the script name. - - - - llResetTime(void); - - Sets the internal timer to zero. - - - - integer llReturnObjectsByID(list ObjectIDs); - - Return objects using their UUIDs - - - - integer llReturnObjectsByOwner(key ID, integer Scope); - - Return objects based upon their owner and a scope of parcel, parcel owner, or region. - - - - llRezAtRoot(string inventory, vector pos, vector vel, rotation rot, integer param); - - Rezzes object's inventory item named inventory at - pos with velocity vel and rotation rot with start parameter param. - - - - llRezObject(string inventory, vector pos, vector vel, rotation rot, integer param); - - Creates object's inventory object at position pos with velocity - vel and rotation rot. The param value - will be available to the newly created object in the on_rez - event or through the llGetStartParameter library - function. The vel parameter is ignored if the rezzed object - is not physical. - - - - float llRot2Angle(rotation rot); - - Returns the rotation angle represented by rot. - - - - vector llRot2Axis(rotation rot); - - Returns the rotation axis represented by rot. - - - - vector llRot2Euler(rotation rot); - - Returns the Euler Angle representation of rot. - - - - vector llRot2Fwd(rotation rot); - - Returns the forward axis represented by rot. - - - - vector llRot2Left(rotation rot); - - Returns the left axis represented by rot. - - - - vector llRot2Up(rotation rot); - - Returns the up axis represented by rot. - - - - rotation llRotBetween(vector a, vector b); - - Returns the rotation needed to rotate ato b. - - - - llRotLookAt(rotation rot, float strength, float damping); - - Cause object to rotate to rot. Good strength values are around - half the mass of the object and good - damping values are less than 1/10th of the strength. - Asymmetrical shapes require smaller damping.A - strengthof 0.0 cancels the look at. - - - - integer llRotTarget(rotation rot, float error); - - Set object rotation within error of rotation as a rotational - target and return an integer number for the - target. The number can be used in llRotTargetRemove. - - - - llRotTargetRemove(integer number); - - Remove rotational target number. - - - - llRotateTexture(float radians, integer face); - - Sets the texture rotation of face to radians. - If face ALL_SIDES, rotate the texture of all faces. - - - - integer llRound(float val); - - returns val rounded to the nearest integer. - - - - integer llSameGroup(key id); - - Returns TRUE if the object or agen id is in the same simulator - and has the same active group as this object. - Otherwise, returns FALSE. - - - - void llSay(integer channel, string text); - Say text on channel. - Channel 0 is the public chat channel that all - avatars see as chat text. Channels 1 to 2,147,483,648 are private - channels that are not sent to avatars but other scripts can listen - for through the llListen api. - - Channel to use to say text on - - Text to say - - - - llScaleTexture(float horizontal, float vertical, integer side); - - Sets the horizontal and vertical repeats per face on side. - If side == ALL_SIDES, all sides are set in one call. - Negative values for horizontal and vertical will flip the texture. - - - - integer llScriptDanger(vector pos); - - Returns true if pos is over public land, land that doesn't allow everyone - to edit and build, or land that doesn't allow outside scripts. - - - - void llScriptProfiler(integer iState); - - Enables or disables the scripts profiling state. - PROFILE_NONE or PROFILE_SCRIPT_MEMORY flags to control the state. - - - - key llSendRemoteData(key channel, string dest, integer idata, string sdata); - - Send an XML-RPC request to dest (probably an URL) - through channel with payload of channel (in a string), - integer idata and string sdata. - - - - llSensor(string name, key id, integer type, float range, float arc); - - Performs a single scan for name and id with type within - range meters and arc radians of forward vector. - Specifying a blank name or NULL_KEY id will not filter - results for any particular name or id A range of 0.0 - does not perform a scan. The type parameter should be an - object type constant vlaue. - - - - llSensorRemove(void); - - Removes the sensor. - - - - llSensorRepeat(string name, key id, integer type, float range, float arc, float rate); - - Performs a repeating sensor scan for name and id with type - (AGENT, ACTIVE, PASSIVE, and/or SCRIPTED) within range meters and arc - radians of forward vector (name and/or id can be empty or 0). - A range of 0.0m does perform a scan. The parameters have the same - function as llSensor, except rate, which defines the number of - seconds between repeated sensor or no_sensor event calls. - - - - llSetAlpha(float alpha, integer face); - - Sets the alpha value for face. If face is ALL_SIDES, - set the alpha to all faces. The alpha value is interpreted - as an opacity percentage -1.0 is fully opaque, and 0.2 is - mostly transparent. This api will clamp alpha values - less 0.1 to .1 and greater than 1.0 to 1. - - - - void llSetAngularVelocity(vector vForce, integer iLocal); - - Applies angular (rotational) velocity to a physical object. - The force to apply. - If TRUE, the vForce is treated as a local directional vector instead of a regional directional vector. - - - - void llSetAnimationOverride(string AnimationState, string Animation); - - Set the animation that will play for the given animation state. - - - - llSetBuoyancy(float buoyancy); - - Set the object buoyancy. A value of 0 is none, - less than 1.0 sinks, 1.0 floats, and greater than 1.0 rises. - - - - llSetCameraAtOffset(vector offset); - - Sets the camera at offset used in this object - if an avatar sits on it. - - - - llSetCameraEyeOffset(vector offset); - - Sets the camera eye offset used in this object if an avatar sits on it. - - - - llSetCameraParams(list rules); - - Sets multiple camera parameters at once. - List format is [rule1, value1, rule2, value2 . . . ruleN, valueN] - - - - llSetClickAction(integer action); - - Sets the action performed when a prim is clicked upon. - - a CLICK_ACTION_* flag - - - - - llSetColor(vector color, integer face); - - Sets the color of face. If face is ALL_SIDES, set the color to all faces. - - - - void llSetContentType(key kRequestID, integer iCcontentType); - - Set the Internet media type of an LSL HTTP server response. ContentType accepts the constants CONTENT_TYPE_ATOM, CONTENT_TYPE_FORM, CONTENT_TYPE_HTML, CONTENT_TYPE_JSON, CONTENT_TYPE_LLSD, CONTENT_TYPE_RSS, CONTENT_TYPE_TEXT, CONTENT_TYPE_XHTML, and CONTENT_TYPE_XML. - - - - llSetDamage(float damage); - - Sets the amount of damage that will be done to an object - that this object hits. This object will be destoyed on - damaging another object. - - - - llSetForce(vector force, integer local); - - If the object is physical, this function sets the force. - The vector is in local coordinates if local is TRUE, global if - FALSE. - - directional force - - - boolean, if TRUE uses local axis, if FALSE uses region axis. - - - - - llSetForceAndTorque(vector force, vector torque, integer local); - - If the object is physical, this function sets the force and - torque. The vectors are in loal coordinates if local is - TRUE, global if FALSE. - - directional force - - - torque force - - - boolean, if TRUE uses local axis, if FALSE uses region axis. - - - - - llSetHoverHeight(float height, integer water, float tau); - - Critically damps to a height. The height is above ground - and water if water is TRUE. Only works with physics-enabled objects. - Do not use with vehicles. Use llStopHover to stop hovering. - - Distance above the ground - - - boolean, if TRUE then hover above water too. - - - seconds to critically damp in - - - - - llSetKeyframedMotion(list lKeyframes, list lOptions); - - Specify a list of times, positions, and orientations to be followed by an object. The object will be smoothly moved between key-frames by the simulator. Collisions with other nonphysical or keyframed objects will be ignored (no script events will fire and collision processing will not occur). Collisions with physical objects will be computed and reported, but the keyframed object will be unaffected by those collisions. - Strided key-frame list of the form: position, orientation, time. Each key-frame is interpreted relative to the previous transform of the object. - - - - - - - llSetLinkAlpha(integer linknumber, float alpha, integer face); - - Sets the side number face on the linked child linknumber - to the transparency alpha. - - - - void llSetLinkCamera(integer iLink, vector vEyeOffset, vector vLookOffset); - - Sets the camera eye offset, and the offset that camera is looking at, for avatars that sit on the linked prim. - - - - llSetLinkColor(integer linknumber, vector color, integer face); - - Sets the color of the linked child specified by linknumber. - A value of 0 means no link, 1 the root, 2 for first - child, etc. If linknumber is ALL_SIDES, set the color - of all objects in the linked set. If face is - ALL_SIDES, set the color of all faces. - - - - integer llSetLinkMedia(integer iLink, integer iFace, list lParameters); - - Set the media parameters for a particular face on the linked prim(s) without a delay. - Link number (0: unlinked, 1: root prim, >1: child prims). - Face number. - A set of name/value pairs (in no particular order) - Returns an integer that is a STATUS_* flag which details the success/failure of the operation(s). - - - - void llSetLinkPrimitiveParams(integer linknumber, list rules); - - Sets the parameters (or properties) of any linked prim in none step - Link number (0: unlinked, 1: root prim, >1: child prims) or a LINK_* flag - - - - - llSetLinkPrimitiveParamsFast( integer linknumber, list rules ); - - Set primitive parameters for linknumber based on rules with no built-in script sleep. This function is identical to llSetLinkPrimitiveParams except without the delay. - Link number (0: unlinked, 1: root prim, >1: child prims) or a LINK_* flag - - - - - void llSetLinkTexture(integer linknumber, string texture, integer face); - - Sets the texture of linked prims - - - - llSetLinkTextureAnim( integer link, integer mode, integer face, integer sizex, integer sizey, float start, float length, float rate ); - - Animate the texture on the specified face/faces of the - specified prim/prims by setting the texture scale and offset. - Identical to llSetTextureAnim except able to modify any prim in the link set. - - Link number (0: unlinked, 1: root prim, >1: child prims) or a LINK_* flag to effect - mask of Mode flags - face number or ALL_SIDES - horizontal frames (ignored for ROTATE and SCALE) - vertical frames (ignored for ROTATE and SCALE) - Start position/frame number (or radians for ROTATE) - number of frames to display (or radians for ROTATE) - frames per second (must not be zero) - - - - llSetLocalRot(rotation rot); - - Sets the rotation of a child prim relative to the root prim. - - - - integer llSetMemoryLimit(integer iLimit); - - Request iLimit bytes to be reserved for this script. This function has no effect if the script is running in the LSO VM. - Return TRUE or FALSE indicating whether the limit was set successfully. - The amount to reserve, which must be less than the allowed maximum (currently 64KB) and not already have been exceeded. - - - - llSetObjectDesc(string name); - - Sets the description of the scripted prim to name. - You can get the description using llGetObjectDesc. - The description is limited to 127 characters. - - - - llSetObjectName(string name); - - Sets the object name to name. - - - - llSetParcelMusicURL(string url) - - Sets the streaming audio URL for the parcel the - scripted object is on (the object must be owned - by the owner of the parcel, if the parcel is group - owned the object must be owned by that group). - - - - llSetPayPrice(integer price, list quick_pay_buttons); - - Sets the values of the buttons and the text box default - for the Pay dialog -- when a user right-clicks on - the object and selects "Pay", llSetPayPrice will affect - what buttons exist, what their values are, and whether - or not there is a manual payment text entry box. - - - - void llSetPhysicsMaterial(integer MaterialBits, float GravityMultiplier, float Restitution, float Friction, float Density); - - No description available. - - - - llSetPos(vector pos); - - If the object is not physical, this function sets the position - in region coordinates. If the object is a child, the - position is treated as root relative and the linked set is adjusted. - - - - integer llSetPrimMediaParams( integer face, list params ); - - Set the media params for a particular face. - - Returns an integer that is a STATUS_* flag which details the success/failure of the operation(s). - face number - a set of name/value pairs (in no particular order) - - - - llSetPrimitiveParams(list rule); - - This function changes the many properties (or "parameters") - of a prim in one operation. The parameter is a list of changes. - (Don't confuse prim parameters with function parameters.) - - - - integer llSetRegionPos(vector vPosition) - - Tries to moves the entire object so that the root prim is within 0.1m of vPosition. - Returns TRUE on success, otherwise FALSE. - - - - llSetRemoteScriptAccessPin(integer pin); - - If pin is set to a non-zero number, the task will accept - remote script loads via llRemoteLoadScriptPin - if passed the matching PIN. - Otherwise llRemoteLoadScriptPin is ignored - - - - llSetRot(rotation rot); - - If the object is not physical, this function sets the rotation. - If the object is a child, the position is treated as root - relative and the linked set is adjusted. - - - - llSetScale(vector scale); - - Sets the object scale. - - - - llSetScriptState(string name, integer run); - - Control the state of a script on the object. - - - - llSetSitText(string text); - - Displays text rather than sit in viewer pie menu. - - - - llSetSoundQueueing(integer queue); - - Sets whether successive calls to llPlaySound, llLoopSound, - etc., (attached sounds) interrupt the playing sound. - The default for objects is FALSE. Setting this value to - TRUE will make the sound wait until the current playing - sound reaches its end. The queue is one level deep. - - boolean, sound queuing: TRUE enables, FALSE disables (default) - - - - - llSetSoundRadius(float radius); - - Establishes a hard cut-off radius for audibility of scripted - sounds (both attached and triggered) - - - - llSetStatus(integer status, integer value); - - Sets the status to value. Use status constants for the values of status. - - - - llSetText(string text, vector color, float alpha); - - Sets text that floats above object to text, - using the specified color and alpha. - - - - llSetTexture(string texture, integer face); - - Sets the texture from object inventory of face. - If face is ALL_SIDES, set the texture to all faces. - - - - llSetTextureAnim(integer mode, integer face, integer sizex, integer sizey, float start, float length, float rate); - - Animates a texture by setting the texture scale and offset. - mask of Mode flags - face number or ALL_SIDES - horizontal frames (ignored for ROTATE and SCALE) - vertical frames (ignored for ROTATE and SCALE) - Start position/frame number (or radians for ROTATE) - number of frames to display (or radians for ROTATE) - frames per second (must not be zero) - - - - llSetTimerEvent(float sec); - - Sets the timer event to be triggered every sec seconds. - Passing in 0.0 stops further timer events. - - - - llSetTorque(vector torque, integer local); - - If the object is physical, this function sets the torque. - The vector is in local coordinates if local is TRUE, global - if FALSE. - - torque force - - - boolean, if TRUE uses local axis, if FALSE uses region axis. - - - - - llSetTouchText(string text); - - Displays text in viewer pie menu that acts as a touch. - - - - llSetVehicleFlags(integer flags); - - Sets the vehicle flags to TRUE. - Valid parameters can be found in the vehicle flags constants section. - - - - llSetVehicleFloatParam(integer param_name, float param_value); - - Sets the vehicle floating point parameter param_name to param_value. - Valid parameters and their expected - values can be found in the vehicle parameter constants section. - - - - llSetVehicleType(integer type); - - Activates the vehicle action and choose vehicle type. - Valid types and an explination of their characteristeics - can be found in the vehicle type constants section. - - - - llSetVehicleRotationParam(integer param_name, rotation param_value); - - Sets the vehicle rotation parameter param_name to param_value. - Valid parameters can be found in the - vehicle parameter constants section. - - - - llSetVehicleVectorParam(integer param_name, vector param_value); - - Sets the vehicle vector parameter param_name to param_value. - Valid parameters can be found in the - vehicle parameter constants section. - - - - void llSetVelocity(vector vForce, integer iLocal); - - Applies velocity to a physical object. - The force to apply. - If TRUE, the vForce is treated as a local directional vector instead of a regional directional vector. - - - - string llSHA1String( string src ); - - *** Pre-release Documentation Warning *** - Returns a string of 40 hex characters that is the SHA1 security hash of src. - - - - llShout(integer channel, string text); - - Shout text on channel. Channel 0 is the public chat channel that - all avatars see as chat text. Channels 1 to - 2,147,483,648 are private channels that are not sent to - avatars but other scripts can listen for through the llListen api. - - - - float llSin(float theta); - - Returns the sine of theta in radians. - - - - llSitTarget(vector offset, rotation rot); - - Set the sit location for this object. If offset == ZERO_VECTOR - clear the sit target. - - - - llSleep(float sec); - - Puts the script to sleep for sec seconds. - - - - float llSqrt(float val); - - Returns the square root of val. If val is less than 0.0, - this function returns 0.0 and raises a math runtime error. - - - - llStartAnimation(string anim); - - This function starts animation anim for the avatar that owns the object. - - - - llStopAnimation(string anim); - - Stop animation animfor avatar that owns object. - - - - llStopHover(void); - - Stop hover to a height. - - - - llStopLookAt(void); - - Stop causing object to look at target. - - - - llStopMoveToTarget(void); - - Stops critically damped motion. - - - - - - llStopSound(void); - - Stops a currently playing attached sound started with - llPlaySound or llLoopSound. Has no effect on sounds - started with llTriggerSound. - - - - integer llStringLength(string src); - - Returns the number of characters in src. - - - - string llStringToBase64(string str); - - Converts a string to the Base 64 representation of the string. - - - - string llStringTrim(string text, integer trim_type); - - Outputs a string eliminating whitespace from the start and/or end of the specified string. - - Constants for trim_type: - STRING_TRIM_HEAD: trim all leading spaces in text - STRING_TRIM_TAIL: trim all trailing spaces in text - STRING_TRIM: trim all leading and trailing spaces in text - string to trim - - STRING_TRIM_HEAD,STRING_TRIM_TAIL or STRING_TRIM - - - - - integer llSubStringIndex(string source, string pattern); - - Finds index in source where pattern first appears. - Returns -1 if no match is found found. - - - - llTakeControls(integer controls, integer accept, integer pass_on); - - If ( accept == (controls and input) ), send input to object. - If the boolean pass_on is TRUE, also send input - to avatar. Requires the PERMISSION_TAKE_CONTROLS permission to run. - - bitfield of CONTROL_* flags - - - boolean, determines whether control events are generated - - - boolean, determines whether controls are disabled - - - - - float llTan(float theta); - - Returns the tangent of theta radians. - - - - - - integer llTarget(vector position, float range); - - Set object position within range of position as a target - and returns an integer ID for the target. - - - - llTargetOmega(vector axis, float spinrate, float gain); - - Attempt to spin at spinrate with strength gain on axis. - A spinrate of 0.0 cancels the spin. This - function always works in object local coordinates. - - - - llTargetRemove(integer tnumber); - - Remove target number tnumber. - - - - void llTeleportAgent(key AgentID, string LandmarkName, vector Position, vector LookAtPoint) - - Requests a teleport of avatar to a landmark stored in the object's inventory. If no landmark is provided (an empty string), the avatar is teleported to the location position in the current region. In either case, the avatar is turned to face the position given by look_at in local coordinates. - Requires the PERMISSION_TELEPORT permission. This function can only teleport the owner of the object. - UUID of avatar. - Name of landmark (in object contents), or empty string, to use. - The position within the local region to teleport the avatar to, if no landmark was provided. - The position within the target region that the avatar should be turned to face upon arrival. - - - - void llTeleportAgent(key AvatarID, string LandmarkName, vector Position, vector LookAtPoint) - - Teleports an agent to set of a region_coordinates within a region at the specified global_coordinates. The agent lands facing the position defined by look_at local coordinates. - UUID of avatar. - Global coordinates of the destination region. Can be retrieved by using llRequestSimulatorData(region_name, DATA_SIM_POS). - The position within the target region to teleport the avatar to, if no landmark was provided. - The position within the target region that the avatar should be turned to face upon arrival. - - - - llTeleportAgentHome(key id); - - Teleport agent on the owner's land to agent's home location. - - - - llTextBox( key avatar, string message, integer chat_channel ); - - *** Pre-release Documentation Warning *** - Shows a dialog box on avatar's screen with the text message. - It contains a text box for input, any text that is entered - is said on chat_channel when the "OK" button is clicked. - - - - string llToLower(string src); - - Returns src in all lower case. - - - - string llToUpper(string src); - - Returns src in all upper case. - - - - key llTransferLindenDollars(key AvatarID, integer Amount); - - Attempts to send the amount of money to the specified avatar, and trigger a transaction_result event identified by the returned key. - - - - llTriggerSound(string sound, float volume); - - Plays a transient sound NOT attached to an object. - The sound plays from a stationary position located at the - center of the object at the time of the trigger. - There is no limit to the number of triggered sounds which can be - generated by an object, and calling llTriggerSound does not affect - the attached sounds created by llPlaySound - and llLoopSound. This is very useful for things like collision noises, - explosions, etc. There is no way to stop or - alter the volume of a sound triggered by this function. - - - - llTriggerSoundLimited(string sound, float volume, vector tne, vector bsw); - - Plays a transient sound NOT attached to an object with its - audible range limited by the axis aligned bounding - box define by tne(top-north-eash) and bsw (bottom-south-west). - The sound plays from a stationary position - located at the center of the object at the time of the trigger. - There is no limit to the number of triggered sounds - which can be generated by an object, and calling llTriggerSound - does not affect the attached sounds created by - llPlaySound and llLoopSound. This is very useful for things - like collision noises, explosions, etc. There is no - way to stop or alter the volume of a sound triggered by this function. - - - - string llUnescapeURL(string url); - - Returns the string that is the URL unescaped version - of url, replacing "%20" with spaces, etc. - The function can output raw UTF-8 strings. - - - - llUnSit(key id); - - If agent identified by id is sitting on the object the script - is attached to or is over land owned by the objects - owner, the agent is forced to stand up. - - - - void llUpdateCharacter(list Options); - - Updates settings for a character. - Character configuration options. Takes the same constants as llCreateCharacter(). - - - - float llVecDist(vector a, vector b); - - Returns the distance from ato b - - - - float llVecMag(vector vec); - - Returns the magnitude of vec. - - - - vector llVecNorm(vector vec); - - Returns normalized vec. - - - - llVolumeDetect(integer detect); - - When detect = TRUE, this makes the entire link set the script - is attached to phantom but if another object - interpenetrates it, it will get a collision_start event. - When an object stops interpenetrating, a collision_end event - is generated. While the other is interpenetrating, - collision events are NOT generated. The script must be applied - to the root object of the link set to get the collision events. - Collision filters work normally. - - TRUE enables, FALSE disables - - - - - void llWanderWithin(vector Origin, float Distance, list Options); - - Sets a character to wander about a central spot within a specified radius. - Central point to wander about. - How far (radius) the character may wander from origin. - No options available at this time. - - - - float llWater(vector offset); - - Returns the water height at the object position + offset. - - - - void llWhisper(integer channel, string text); - - Whisper text on channel. Channel 0 is the public chat channel that - all avatars see as chat text. Channels 1 to 2,147,483,648 are - private channels that are not sent to avatars but other scripts - can listen for through the llListen api. - - - - vector llWind(vector offset); - - Returns the wind velocity below the object position + offset. - - - - string llXorBase64(string sText1, string sText2); - - Performs an XOR on two Base64 strings and returns a Base64 string. - sText2 repeats if it is shorter than sText1. - This function is for encrypting data. Put your data in s1 and - your key in s2 to encrypt or put the encrypted data into s1 - with the same key in s2 to decrypt again. - - - - - Complete listing of the OpenSim Library function calls available in lsl. - - key osAgentSaveAppearance(key avatarId, string notecard); - - Save an arbitrary avatar's appearance to a notecard in the prim's inventory. - This includes body part data, clothing items and attachments. If a - notecard with the same name already exists then it is replaced. - The avatar must be present in the region when this function is invoked. - The baked textures for the avatar (necessary to recreate appearance on - the NPC) are saved permanently. - - - string osAvatarName2Key(string firstname, string lastname); - - Returns an avatar's UUID, based on his/her first and last name. - - - void osAvatarPlayAnimation(key avatar, string animation); - - This function causes an animation to be played on the specified avatar. - The variable animation must be the name of an animation within the task - inventory. For security reasons, UUIDs are not allowed here. - Instead of the name of an animation in the prim's inventory, you can - also use the names of the viewer's built-in animations. - osAvatarPlayAnimation does not perform any security checks or request - animation permissions from the targeted avatar. - - - void osAvatarStopAnimation(key avatar, string animation); - - This function stops the specified animation if it is playing on the - avatar given. The value avatar is a UUID, and the animation value is - either the name of an animation in the task inventory or the UUID of - an animation. If the specified avatar is not logged in or on the - same sim as the script, then osAvatarStopAnimation silently fails. - - - void osCauseDamage(key avatar, float damage); - - - void osCauseHealing(key avatar, float healing); - - - void osDropAttachment(); - - - void osDropAttachmentAt(Vector3 pos, Quaternion rot); - - - integer osEjectFromGroup(key user); - - Eject the given user from the group the object is set to. - The object owner must have the right to eject users from the group the - object is set to. The group member who is ejected can be offline. - The user gets an instant message, that he/she has been ejected from - that group. The result is TRUE, if the user could be ejected, otherwise - FALSE. - - - void osForceAttachToAvatar(integer attachmentPoint); - - Works exactly like llAttachToAvatar() except that PERMISSION_ATTACH is - not required. - - - void osForceAttachToAvatarFromInventory(string itemName, integer attachmentPoint); - - Attach an inventory item in the object containing this script to any - avatar in the region without asking for PERMISSION_ATTACH. Nothing happens - if the avatar is not in the region. - itemName - The name of the item. If this is not found then a warning is - said to the owner. - attachmentPoint - The attachment point. For example, ATTACH_CHEST. - - - void osForceAttachToOtherAvatarFromInventory(string rawAvatarId, string itemName, integer attachmentPoint); - - Attach an inventory item in the object containing this script to any - avatar in the region without asking for PERMISSION_ATTACH. Nothing - happens if the avatar is not in the region. - rawAvatarId - The UUID of the avatar to which to attach. Nothing - happens if this is not a UUID. - itemName - The name of the item. If this is not found then a warning - is said to the owner. - attachmentPoint - The attachment point. For example, ATTACH_CHEST. - - - void osForceDetachFromAvatar(); - - Works exactly like llDetachFromAvatar() except that PERMISSION_ATTACH - is not required. - - - void osForceDropAttachment(); - - Drops an attachment like a user-triggered attachment drop without - checking if PERMISSION_ATTACH has been granted. - - - void osForceDropAttachmentAt(Vector3 pos, Quaternion rot); - - Drops an attachment at position pos with rotation rot without - checking if PERMISSION_ATTACH has been granted. - - - void osForceOtherSit(string avatar, [string target]); - - Forces a sit of targeted avatar onto prim. - avatar - The UUID of the avatar to which to attach. Nothing happens - if this is not a UUID. - target - The UUID of another prim to sit avatar on. Nothing happens - if this is not a UUID of prim in region. - - - string osGetAgentIP(key uuid); - - Requires: key uuid of agent to get IP address for. - Returns: string representing the IP address returned. - - - list osGetAgents(); - - Returns a list of all the agents names in the region. - - - string osGetAvatarHomeURI(string uuid); - - Returns an avatar's Home URI. - - - list osGetAvatarList(); - - Returns a strided list of the UUID, position, and name of each - avatar in the region except the owner. - This function is similar to osGetAgents but returns enough - info for a radar. - - - string osGetGender(key id); - - Returns a string with one of the following values: "male", - "female", or "unknown". This value is determined by the value - selected for the avatar shape in the appearance dialog in the - user's viewer. If that value cannot be found for any reason - (avatar is not in the region, improperly formatted key, etc.), - "unknown" is returned. - - - float osGetHealRate(key avatar); - - Gets the current automatic healing rate in % per second. - Default heal rate is now around 0.5% per second. - A value of zero can disable automatic heal, current maximum - value is 100 % per second. - - - float osGetHealth(string avatar); - - Gets an avatars health by key and returns the value as a float. - - - list osGetNumberOfAttachments(key avatar, list attachmentPoints); - - Returns a strided list of the specified attachment points and - the number of attachments on those points. - In OpenSimulator 0.7.5 development code only. - - - integer osInviteToGroup(key user); - - Invite the given user to the group the object is set to. - The group can be a closed user group. - The object owner must have the right to invite new users - to the group the object is set to. The user with the given - key has to be online in that region. This is a required - limitation to not make group invitation spam possible. - The user gets a normal group invitation, showing the - owner of the object as sender. The invitation can be accepted - or rejected and the user can open the corresponding group - window. - The result is TRUE, if the invitation could be sent, - otherwise FALSE. - - - void osKickAvatar(string FirstName, string SurName, string alert); - - - key osOwnerSaveAppearance(string notecard); - - Save the owner's current appearance to a notecard in the prim's - inventory. This includes body part data, clothing items and - attachments. If a notecard with the same name already exists then - it is replaced. The owner must be present in the region when this - function is invoked. The baked textures for the owner (necessary - to recreate appearance on the NPC) are saved permanently. - - - float osSetHealRate(key avatar, float healrate); - - Sets the automatic healing rate in % per second. - Default heal rate is now around 0.5% per second. - A value of zero can disable automatic heal, current maximum - value is 100 % per second. - - - float osSetHealth(string avatar, float health); - - Sets an avatars health by key to the specified float value. - - - void osTeleportAgent(key agent, integer regionX, integer regionY, vector position, vector lookat); - - void osTeleportAgent(key agent, string regionName, vector position, vector lookat); - - void osTeleportAgent(key agent, vector position, vector lookat); - - - void osTeleportOwner(integer regionX, integer regionY, vector position, vector lookat); - - void osTeleportOwner(string regionName, vector position, vector lookat); - - void osTeleportOwner(vector position, vector lookat); - - - integer osIsNpc(key npc); - - Returns NPC status on the provided key. - Returns TRUE (1) / FALSE (0) if key provided is an NPC. - Returns FALSE (0) if the key provided doesn't exist in - the scene. - - - key osNpcCreate(string firstname, string lastname, vector position, string cloneFrom, [integer options]); - - Creates an NPC named firstname lastname at position - from avatar appearance resource cloneFrom. - - - list osGetNpcList(); - - Returns a strided list of the UUID, position, and name of each NPC - in the region. - - - vector osNpcGetPos(key npc); - - Return the current position of the NPC. - - - rotation osNpcGetRot(key npc); - - Gets the rotation of the avatar. Only the rotation around the - Z plane in Euler rotation (horizontal rotation) has any meaning. - - - key osNpcGetOwner(key npc); - - Gets the NPC's owner's UUID. - - - void osNpcLoadAppearance(key npc, string notecard); - - Load appearance from a notecard. This notecard - must contain appearance data created with one of the save appearance - functions. - - - void osNpcMoveTo(key npc, vector position); - - Moves npc to the position. - - - osNpcMoveToTarget(key npc, vector target, integer options); - - Move the avatar to a given target over time. How the avatar - will get there depends on the following options. - - OS_NPC_FLY - Fly the avatar to the given position. The avatar will - not land unless the OS_NPC_LAND_AT_TARGET option is also given. - OS_NPC_NO_FLY - Do not fly to the target. The NPC will attempt to - walk to the location. If it's up in the air then the avatar will - keep bouncing hopeless until another move target is given or the move is stopped. - OS_NPC_LAND_AT_TARGET - If given and the avatar is flying, then it - will land when it reaches the target. If OS_NPC_NO_FLY is given then - this option has no effect. - OS_NPC_FLY and OS_NPC_NO_FLY are options that cannot be combined - the avatar - will end up doing one or the other. If you want the avatar to fly and land at - the target, then OS_NPC_LAND_AT_TARGET must be combined with OS_NPC_FLY. - OS_NPC_RUNNING - Run the avatar to the given position. - - - void osNpcPlayAnimation(key npc, string animation); - - Plays animation on the NPC identified by their key. - - - void osNpcRemove(key npc); - - Removes the NPC specified by key npc. - - - key osNpcSaveAppearance(key npc, string notecard); - - Save the NPC's current appearance to a notecard in the prim's - inventory. This includes body part data, clothing items and - attachments. If a notecard with the same name already exists then - it is replaced. The avatar must be present in the region when this - function is invoked. The baked textures for the avatar (necessary - to recreate appearance) are saved permanently. - - - void osNpcSay(key npc, string message); - - void osNpcSay(key npc, integer channel, string message); - - Npc says message. - - - void osNpcSetProfileAbout(key npc, string about); - - Set about in created NPC's profile. - - - void osNpcSetProfileImage(key npc, string image); - - Set image in created NPC's profile. - One can use UUID of the texture or name of texture included - in prim's inventory. - - - void osNpcSetRot(key npc, rotation rot); - - Set the rotation of the avatar. Only setting the rotation - in the Z plane in Euler rotation will have any meaningful effect - (turning the avatar to point in one direction or another). - Setting X or Y Euler values will result in the avatar - rotating in an undefined manner. - - - void osNpcShout(key npc, int channel, string message); - - Npc shouts message on the given channel. - - - void osNpcSit(key npc, key target, integer options); - - Makes an NPC sit on an object. - Options - OS_NPC_SIT_NOW. Makes the npc instantly sit on - the prim if possible. This is the only option available and - is currently always on no matter what is actually specified in - the options field. - If the prim has a sit target then sit always succeeds no matter - the distance between the NPC and the prim. - If the prim has no sit target then - If the prim is within 10 meters of the NPC then the sit will - always succeed. - At OpenSimulator 0.7.5 and later, if the prim is further than - 10 meters away then nothing will happen. - Before OpenSimulator 0.7.5, if the prim is further than 10 meters - away then the avatar will attempt to walk over to the prim - but will not sit when it reaches it. - - - void osNpcStand(key npc); - - Makes a sitting NPC stand up. - - - void osNpcStopMoveToTarget(key npc); - - Stop a current move to a target. - - - void osNpcStopAnimation(key npc, string animation); - - Stops animation on being played by the NPC identified by their key. - - - void osNpcTouch(key npcKey, key objectKey, integer linkNum); - - Only LINK_THIS and LINK_ROOT are valid for this function. Any other - of the LINK_* constants will be ignored and no touch takes place. - 1. If linkNum is LINK_THIS then the prim with the key objectKey will - be touched. - 2. If linkNum is LINK_ROOT or 0 then the root prim of the link set - will be touched, even if the root prim key is not objectKey - 3. For any other value of linkNum a search will be made through - the linkset for a prim with that link number. If found that prim - will be touched. If no prim is found for that link number the - function fails silently and no touch takes place. - The touch is fired as if it came from an old client that does not - support face touch detection or (probably) one of the text clients - like Metabolt. Since there is no mouse the llDetectedTouch* - functions will return the defaults (See the LSL Wiki for full details) - - llDetectedTouchBinormal TOUCH_INVALID_VECTOR - llDetectedTouchFace TOUCH_INVALID_FACE - llDetectedTouchNormal TOUCH_INVALID_VECTOR - llDetectedTouchPos TOUCH_INVALID_VECTOR - llDetectedTouchST TOUCH_INVALID_TEXCOORD - llDetectedTouchUV TOUCH_INVALID_TEXCOORD - - If the prim is not found or would not allow a normal client to touch - it then this function fails silently. - - - void osNpcWhisper(key npc, int channel, string message); - - Npc whispers message on the given channel. - - - void osClearInertia(); - - Clears the effect of osSetInertia* functions. Link set total mass, - center of mass and inertia will be the values estimated by default - from the link set parts. - - - void osForceBreakAllLinks(); - - Identical to llBreakAllLinks() except that it doesn't require the - link permission to be granted. - - - void osForceBreakLink(integer link); - - Identical to llBreakLink(integer link) except that it doesn't - require the link permission to be granted. - - - osForceCreateLink(key target, int parent); - - Idential to llCreateLink() except that it doesn't require the - link permission to be granted. - - - list osGetInertiaData(); - - - string osGetInventoryDesc(string name); - - Returns a string that is the description of inventory item "name". - - - integer osGetLinkNumber(string name); - - Returns the link number of the prim or sitting avatar with name - "name" on the link set or -1 if the name is not found. - If names are not unique, the one with lower link number should be return. - Names "Object" and "Primitive" are ignored - - - list osGetLinkPrimitiveParams(integer linknumber, list rules); - - Returns the primitive parameters for the linkset prim or prims - specified by linknumber. It is possible to use the linkset constants - (e.g. LINK_SET, LINK_ALL_CHILDREN) in place of a specific link number, - in which case the requested parameters of each relevant prim are - concatenated to the end of the list. Otherwise, the usage is identical - to llGetPrimitiveParams(). - - - list osGetPrimitiveParams(key prim, list rules); - - Gets the parameters for the prim specified by prim_uuid - according to rules. - This function has the same behave as llGetPrimitiveParams - except you can specify target prim anywhere in the scene. - For general information about rules, see llGetPrimitiveParams - in SecondLife Wiki. - Check llGetPrimitiveParams implementation status to see the - differences from llGetPrimitiveParams. - If there is no prim_uuid prim in the scene, or the owner of the - target prim is differ from the owner of the scripted prim, - it will fail without error. - - NOTE: As of OpenSimulator 0.7.1.1, this function doesn't work, results in - script error(#5560). It will able to do so on 0.7.2-dev or later. - - - string osGetRezzingObject(); - - Get the key of the object that rezzed this object. - Will return NULL_KEY if rezzed by agent or otherwise unknown source. - Should only be reliable inside the on_rez event. - - - integer osIsUUID(string thing); - - Returns 1 if the supplied string is a valid UUID, returns 0 otherwise. - - - integer osListenRegex(integer channelID, string name, string ID, string msg, integer regexBitfield); - - Allows the server to filter listen events by regular expressions. name or message parameters can be - regular expressions, these are behaviours are controlled via the regexBitField parameter using the - constants OS_LISTEN_REGEX_NAME and OS_LISTEN_REGEX_MESSAGE. - If the regex strings are invalid, an error will be shouted on the debug channel. - - - void osMessageAttachments(key avatar, string message, list attachmentPoints, integer options); - - Sends a specified message to the specified avatar's attachments on the specified attachment points. - Behaves as osMessageObject, without the sending script needing to know the attachment keys in advance. - - - void osMessageObject(key objectUUID, string message); - - Where objectUUID = the UUID of the object you are messaging. - Where message = The String of data you want to send. - Sends a message to to object identified by the given UUID, a script - in the object must implement the dataserver function the dataserver - function is passed the ID of the calling function and a string message. - - - void osSetInertia(float mass, vector centerOfMass, vector principalInertiaScaled, rotation InertiaRot); - - Allows creators to set the major physics dynamic proprieties, replacing the values estimated from the - linkset parts. Call osClearInertia to undo. - - Mass - total mass of link set - centerOfMass - location of center of mass relative to root prim in local frame - principalInertiaScaled - moment of inertia relative to principal axis and center of mass, - Ixx, Iyy, Izz divided by mass so it can be changed independently - InertiaRot - rotation of the inertia, relative to local axis - - - void osSetInertiaAsBox(float mass, vector boxSize, vector centerOfMass, rotation rot); - - Allows creators to set the link set total mass, center of mass and moment of inertia. - Moment of inertia will be the one of a box of size boxSize, placed at the center of - mass and rotated by rot in the root prim local frame. Call osClearInertia to undo. - - Mass - new total mass of link set - centerOfMass - new location of center of mass relative to root prim in local frame - boxSize - size of the box used to calculate the new inertia - rot - the rotation of that box in local frame - - - void osSetInertiaAsCylinder(float mass, float radius, float length, vector centerOfMass, rotation rot); - - Allows creators to set the link set total mass, center of mass and moment of inertia. Moment of - inertia will be the one of a cylinder of radius and length, placed at the center of mass and rotated - by rot in the root prim local frame. Call osClearInertia to undo. - - Mass - new total mass of link set - centerOfMass - new location of center of mass relative to root prim in local frame - radius - radius of a cylinder used to calculate the new inertia - length - length of a cylinder used to calculate the new inertia - rot - rotation of the cylinder in the root prim local frame. - - - void osSetInertiaAsSphere(float mass, float radius, vector centerOfMass); - - Allows creators to set the link set total mass, center of mass and - moment of inertia. Moment of inertia will be the one of a sphere of - radius radius, placed at the center of mass. Call osClearInertia to undo. - - Mass - new total mass of link set - centerOfMass - new location of center of mass relative to root prim in local frame - radius - radius of a sphere used to calculate the new inertia - - - void osSetPrimitiveParams(key prim, list rules); - - Sets the parameters for the prim specified by prim_uuid according to rules. - This function has the same behave as llSetPrimitiveParams except you can - specify target prim anywhere in the scene. - For general information about rules, see llSetPrimitiveParams in - SecondLife Wiki. Check llSetPrimitiveParams implementation status to see - the differences from llSetPrimitiveParams. - If there is no prim_uuid prim in the scene, or the owner of the target prim - is differ from the owner of the scripted prim, it will fail without error. - - NOTE: As of OpenSimulator 0.7.1.1, this function don't work, results in - script error (#5560). This is fixed on OpenSimulator 0.7.2 and later. - - - void osSetProjectionParams(integer projection, key texture, float fov, float focus, float amb); - - void osSetProjectionParams(key prim, integer projection, key texture, float fov, float focus, float amb); - - 2 Variations possible. - bool = TRUE / FALSE. - double = float. - - - void osSetSpeed(string UUID, float SpeedModifier); - - This allows for users to speed themselves up. It multiplies the running, - walking, rotating and flying of the avatar. - The default value for SpeedModifier is 1.0. - To be precise, it affects physical velocity. If you specify too large or - too small number for SpeedModifier, the target will be unmovable, showing - the following message in the region console: - [PHYSICS]: Got a NaN velocity from Scene in a Character - - - integer osTeleportObject(key objectUUID, vector targetPos, rotation rot, int flags); - - objectUUID - the id of the linkset to teleport - targetPos - target position - rot - a rotation - - Flags: - OSTPOBJ_NONE it is just 0 - OSTPOBJ_STOPATTARRGET object is stopped at destination - OSTPOBJ_STOPONFAIL stops at start point if tp fails (still does nothing) - OSTPOBJ_SETROT the rotation is the final object rotation, otherwise is a added rotation - - - string osDrawEllipse(string drawList, integer width, integer height); - - Appends an Ellipse drawing command to the string provided in drawList - and returns the result. The ellipse is drawn with the current pen - size and color, with the specified width and height (in pixels), - centered on a point which is (width/2) pixels to the right of the - pen's current X position, and (height/2) pixels below the pen's - current Y position. After the ellipse is drawn, the width and height - values are added to the pen's X and Y position, respectively. - - - string osDrawFilledEllipse(string drawList, integer width, integer height); - - Appends an FillEllipse drawing command to the string provided in drawList - and returns the result. - The filled ellipse is drawn with the current pen size and color, with - the specified width and height (in pixels), centered on a point which is - (width/2) pixels to the right of the pen's current X position, and - (height/2) pixels below the pen's current Y position. After the filled - ellipse is drawn, the width and height values are added to the pen's X - and Y position, respectively. - - - string osDrawFilledPolygon(string drawList, list xpoints, list ypoints); - - Appends a FillPolygon drawing command to the string provided in drawList - and returns the result. This fills in the interior of the specified polygon. - The polygon is drawn with the current pen size and filled with the - current color. So (x[0],y[0]),(x[1],y[1]),(x[2],y[2]) would be an example - of a polygon. - - - string osDrawFilledRectangle(string drawList, integer width, integer height); - - Appends a FillRectangle drawing command to the string provided in drawList - and returns the result. - The filled rectangle is drawn with the current pen size and color, at the - specified width and height (in pixels), with the upper left corner of the - rectangle placed at the pen's current position. After the rectangle is drawn, - the width and height values are added to the pen's X and Y position, - respectively (that is, the pen is positioned at the lower right corner of - the rectangle. - - - string osDrawImage(string drawList, integer width, integer height, string imageUrl); - - Appends an Image drawing command to the string provided in drawList and returns - the result. Retrieves an image specified by the imageUrl parameter and draws it - at the specified height and width, with the upper left corner of the image placed - at the pen's current position. After the image is drawn, the width and height - values are added to the pen's X and Y position, respectively (that is, the pen's - current position is set to the lower right corner of the image). - If imageUrl points to an invalid location, an image type not supported by libgdi, - or a non-image MIME type, nothing is drawn. If either or both of the width or - height parameters are zero or negative, nothing is drawn, but the image is still - retrieved. - - - string osDrawLine(string drawList, integer startX, integer startY, integer endX, integer endY); - - string osDrawLine(string drawList, integer endX, integer endY); - - Depending on the form, appends a LineTo drawing command, or MoveTo and LineTo commands, to the - string provided in drawList and returns the result. - In the longer form, draws a line using the current pen size and color from to the coordinates - indicated by startX and startY to the coordinates indicated by endX and endY. - In the shorter form, draws a line using the current pen size and color from the pen's current - position to the coordinates indicated by endX and endY. - After the line is drawn, the pen's X and Y coordinates are set to endX and endY, respectively. - - - string osDrawPolygon(string drawList, list xpoints, list ypoints); - - Appends a Polygon drawing command to the string provided in drawList - and returns the result. The polygon is drawn with the current pen - size and color on the x,y point pairs that comes from LSL list. - It will be converted into the drawing command - "Polygon x[0],y[0],x[1],y[1],x[2],y[2],...". - - - string osDrawRectangle(string drawList, integer width, integer height); - - Appends a Rectangle drawing command to the string provided in drawList - and returns the result. - The outline of a rectangle is drawn with the current pen size and color, - at the specified width and height (in pixels), with the upper left - corner of the rectangle placed at the pen's current position. After the - rectangle is drawn, the width and height values are added to the pen's X - and Y position, respectively (that is, the pen is positioned at the - lower right corner of the rectangle. - - - string osDrawResetTransform(string drawList); - - - string osDrawRotationTransform(string drawList, float x); - - - string osDrawScaleTransform(string drawList, float x, float y); - - - string osDrawText(string drawList, string text); - - Appends a Text drawing command to the string provided in drawList and returns - the result. The specified text will be drawn with the current pen color, - using the currently defined font, size and properties (which default to - regular 14-point Arial). The text will be drawn with the upper left corner of - the first glyph at the pen's current position (however, note that glyphs - within the font may be defined to extend to the left of their origin point). - If you need to include a semicolon in the text to be displayed, you will need - to directly manipulate the draw list string using the drawing commands rather - than the dynamic texture convenience functions, then specify an alternate data - delimiter in the extraParams parameter to the osSetDynamicTexture* functions. - The convenience functions (including osDrawImage) are hardcoded to terminate - each command with a semicolon. The text may or may not be antialiased, - depending on the system settings of the machine upon which the simulator is - running. Furthermore, if the system is configured to use LCD subpixel - antialiasing (e.g. ClearType), the text may have colored fringes on the smoothed - pixels, which may result in a less than optimum image. - Please note that the pen position is not updated after this call. - - - string osDrawTranslationTransform(string drawList, float x, float y); - - - vector osGetDrawStringSize(string contentType, string text, string fontName, integer fontSize); - - Returns a vector containing the horizontal and vertical dimensions in pixels of the specified - text, if drawn in the specified font and at the specified point size. The horizontal extent - is returned in the .x component of the vector, and the vertical extent is returned in .y. - The .z component is not used. - The contentType parameter should be "vector". - If the osSetFontSize() function has not been used, and neither the FontName nor FontProp - commands have been added to the draw list, specify "Arial" as the font name, and 14 as the font size. - - - string osMovePen(string drawList, integer x, integer y); - - Appends a MoveTo drawing command to the string provided in - drawList and returns the result. - This moves the pen's location to the coordinates specified - by the x and y parameters, without drawing anything. - - - string osSetFontName(string drawList, string fontName); - - - string osSetFontSize(string drawList, integer fontSize); - - Appends a FontSize drawing command to the string provided in - drawList and returns the result. - Sets the size of the font used by subsequent osDrawTextText() - calls. The fontSize parameter represents the font height in points. - Please note that the font height is given in points, not in - pixels. The resulting size of the font in pixels may vary - depending on the system settings, specifically the display - system's "dots per inch" metric. A system set to 96dpi will - produce differently sized text than a system set to 120dpi. If - precise text size is required, consider using the - osGetDrawStringSize() function to help calculate the proper - fontSize value to use. - If a negative fontSize parameter is specified, any text - subsequently added will be displayed upside down and to the - right of the point of origin. - Please note that the pen position is not updated after this call. - - - string osSetPenCap(string drawList, string direction, string type); - - *** This method works only on Windows for now. libgdi+ has a - fake implementation and will not draw it. *** - - Appends a PenCap drawing command to the string provided in drawList - and returns the result. This sets the pen's start or/and end cap to - either "diamond", "arrow", "round", or default "flat" shape. - It can set them in the "end" or "start" of the line, or "both". - - Possible values are (case insensitive): - Type: - "arrow" - "diamond" - "round" - "flat" - Direction: - "start" - "end" - "both" - - - string osSetPenColor(string drawList, string color); - - Appends a PenColor drawing command to the string provided in drawList - and returns the result. - This sets the pen's drawing color to either the specified named .NET color - or to a 32-bit color value (formatted as eight hexadecimal digits in - the format aarrggbb, representing the eight-bit alpha, red, green and - blue channels). - For full opacity, use an alpha value of FF (e.g. FFFF0000 for red); - for varying degrees of transparency, reduce the alpha value - (e.g. 800000FF for semi-transparent blue). - The color names and hexadecimal color representations are not case-sensitive. - - - string osSetPenSize(string drawList, integer penSize); - - Appends a PenSize drawing command to the string provided in drawList - and returns the result. - This sets the pen size to a square of penSize pixels by penSize pixels. - If penSize is an odd number, the pen will be exactly centered on the - coordinates provided in the various drawing commands; if it is an even - number, it will be centered slightly higher and to the left of the - actual coordinates. - - - string osSetDynamicTextureData(string dynamicID, string contentType, string data, string extraParams, integer timer); - - Renders a dynamically created texture on the prim containing the script and returns the UUID of the newly created texture. - If you use this feature, you have to turn on any cache. If not, you'll see complete white texture. Flotsam cache performs - better than cenome cache(default). - - - string osSetDynamicTextureDataBlend(string dynamicID, string contentType, string data, string extraParams, integer timer, integer alpha); - - - string osSetDynamicTextureDataBlendFace(string dynamicID, string contentType, string data, string extraParams, integer blend, integer disp, integer timer, integer alpha, integer face); - - Returns UUID of the generated texture. Intended to be used with subsequent calls to osSetDynamicTextureXXXX functions in order to modify the texture. - - - string osSetDynamicTextureDataFace(string dynamicID, string contentType, string data, string extraParams, int timer, int face); - - - string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, integer timer); - - Renders a web texture on the prim containing the script and returns the UUID of the newly created texture. - If you use this feature, you have to turn on any cache. If not, you'll see complete white texture. Flotsam cache - performs better than cenome cache(default). - - - string osSetDynamicTextureURLBlend(string dynamicID, string contentType, string url, string extraParams, integer timer, integer alpha); - - - string osSetDynamicTextureURLBlendFace(string dynamicID, string contentType, string url, string extraParams, integer blend, integer disp, integer timer, integer alpha, integer face); - - - string osGetNotecard(string name); - - This function directly reads the entire contents of a notecard if - it exists within the task inventory, and dumps it into a string. - It skips the dataserver event, thereby reducing code complexity. - - - string osGetNotecardLine(string name, integer line); - - This function directly reads a line of text from the - specified notecard, if it exists within the task inventory, - and returns the text as a string. It skips the dataserver - event, thereby reducing code complexity. - - - integer osGetNumberOfNotecardLines(string name); - - This function directly reads how many lines a notecard - has if the specified notecard exists within the task - inventory, bypassing the dataserver event to reduce - code complexity. - - - void osMakeNotecard(string notecardName, list contents); - - void osMakeNotecard(string notecardName, string contents); - - Creates a notecard with text in the prim that contains the - script. Contents can be either a list or a string. - - - void osRequestSecureURL(list options); - - Requests one HTTPS:// url (opensim version 0.9 or over) - Option supported : "allowXss" - Add 'Access-Control-Allow-Origin: *' to response header - - - void osRequestURL(list options); - - Requests one HTTP:// url (opensim version 0.9 or over) - Option supported : "allowXss" - Add 'Access-Control-Allow-Origin: *' to response header - - - void osParcelJoin(vector pos1, vector pos2); - - Joins two adjacent parcels within the same region. - - - void osParcelSubdivide(vector pos1, vector pos2); - - Subdivides a parcel into two adjacent parcels within the same region. - - - void osSetParcelDetails(vector pos, list rules); - - This function is the counterpart to llGetParcelDetails. - Currently PARCEL_DETAILS_NAME, PARCEL_DETAILS_DESC, - PARCEL_DETAILS_OWNER, PARCEL_DETAILS_GROUP, - PARCEL_DETAILS_CLAIMDATE are implemented. - Note that the threat levels for PARCEL_DETAILS_NAME - and PARCEL_DETAILS_DESC are "High", and those for - PARCEL_DETAILS_OWNER, PARCEL_DETAILS_GROUP and - PARCEL_DETAILS_CLAIMDATE are "VeryHigh". - - - float osGetTerrainHeight(integer x, integer y); - - - integer osSetTerrainHeight(integer x, integer y, float val); - - - void osSetTerrainTexture(integer level, key texture); - - Set the terrain texture of the estate to the texture - given as key. The level can be 0, 1, 2 or 3. - - - void osSetTerrainTextureHeight(integer corner, float low, float high); - - Set the terrain texture height of the estate. The level can be 0, 1, 2 or 3. - The values low and high are float values for the altitude measured in meters. - - - void osTerrainFlush(); - - Function updates terrain changes to OpenSimulator database. - This should be called after all the terrain-changes have - been done to update Terrain Data. - - - float osGetCurrentSunHour(); - - Returns a float value of the current sun hour (24 hour clock). Hour 0 is sunrise. - - - float osGetSunParam(string param); - - - float osGetWindParam(string plugin, string param); - - Gets the value of param property for plugin module. - - - void osSetEstateSunSettings(integer sunFixed, float sunHour); - - This function allows for an estate owner or manager to change - the sun settings for the entire estate. - - - void osSetRegionSunSettings(integer useEstateSun, integer sunFixed, float sunHour); - - Sets the Sun parameters for the Region. - The useEstateSun flag enables/disables synchronization with the Sun settings for the Estate. - sunFixed determines whether the Sun will remain fixed in place or proceed through its cycle. - sunHour determines the time of day the Sun will be set to. - - - void osSetRegionWaterHeight(float height); - - Sets the water height for the current region. - - - void osSetSunParam(string param, float value); - - - void osSetWindParam(string plugin, string param, float value); - - Sets value of param property for plugin module. - - See http://opensimulator.org/wiki/OsSetWindParam for the available parameters. - - - string osWindActiveModelPluginName(); - - Gets active wind plugin name, specified by "wind_plugin" - in OpenSim.ini ("SimpleRandomWind" or "ConfigurableWind"). - - - integer osCheckODE(); - - That it checks if physics engine is legacy ODE - and returns 1 ( TRUE ) it is, or 0 ( FALSE ) if not. - - - string osGetGridCustom(string key); - - Returns the value of the GridInfo key as a string. - - - string osGetGridGatekeeperURI(); - - Returns the current grid's Gatekeeper URI as a string. - - - string osGetGridHomeURI(); - - Returns the current grid's home URI as a string. - - - string osGetGridLoginURI(); - - Returns the current grid's login URI as a string. - - - string osGetGridName(); - - Returns the current grid's name as a string. - - - string osGetGridNick(); - - Returns the current grid's nickname as a string. - - - key osGetMapTexture(); - - Returns the UUID of the map texture of the current region. - - - string osGetPhysicsEngineName(); - - This function returns a string containing the name - and version number of the physics engine. - - - string osGetPhysicsEngineType(); - - This function returns a string containing the name of the Physics Engine. - - - key osGetRegionMapTexture(string regionName); - - This function retrieves the UUID of the texture used to - represent the named region on the world map, and returns it. - Using this function, you can place the map texture directly - onto a prim. - - - vector osGetRegionSize(); - - Returns the size of the region in meters. - Usually this function returns 256x256. However, when called - in a var/mega region it returns the size of the entire simulator. - - - list osGetRegionStats(); - - Returns a list of float values representing a number of region - statistics (many of the values shown in the "Stats Bar" of - LL-based clients). Provides similar functionality to llGetRegionFPS() - and llGetRegionTimeDilation(), but returns 21 statistics simultaneously. - - - string osGetScriptEngineName(); - - Returns the name of the script engine which is currently enabled on the server. - - - integer osGetSimulatorMemory(); - - - string osGetSimulatorVersion(); - - This function returns a string containing the current simulator version. - - - string osLoadedCreationDate(); - - This function returns a string containing the date that a sim - was first created. An example of the string returned is - "Monday, December 07, 2009". It will return empty string if the - region hasn't been created by oar import, or the region - uses SQLite for region database. - - - string osLoadedCreationID(); - - This function returns a string containing the UUID that a - sim was originally created with. - It will return empty string if the region hasn't been created - by oar import, or the region uses SQLite as region database. - - - string osLoadedCreationTime(); - - This function returns a string containing the time that a sim - was first created. An example of the string returned is "2:06:48 AM". - It will return empty string if the region hasn't been created - by oar import, or the region uses SQLite for region database. - - - integer osConsoleCommand(string command); - - This function allows an LSL script to directly execute a command - to opensim's console. Even if the function is available, only - administrators/gods can successfully execute it. - In addition, one can further restrict this function to only - certain administrators/gods. See Threat level for more information - on how to do this. - If the script owner does have the necessary permissions to call - this function, then they can do anything someone with direct access - to the command console could do, such as changing the - avatar passwords, deleting sims, changing the terrain, etc. - This command represents the highest security threat of any OSSL - function, giving it a threat level of Severe. - - Do not use or allow this function unless you are absolutely - sure of what you're doing! - - - void osRegionNotice(string msg); - - Sends a region notice to the entire current region. - - - integer osRegionRestart(float seconds); - - Restarts a region after a specified timeout. Only estate managers - and administrators can successfully execute this function. - - - void osSetParcelMediaURL(string url); - - Sets the Media URL for the parcel the scripted object is in. - - - void osSetParcelSIPAddress(string SIPAddress); - - - void osSetPrimFloatOnWater(integer float); - - - void osGrantScriptPermissions(key allowed_key, string function); - - Dynamically allow ossl execution to owner/creator/group by function name. - - - void osRevokeScriptPermissions(key revoked_key, string function); - - Dynamically allow/disallow ossl execution to owner/creator/group by function name. - - - void osCollisionSound(string impact_sound, double impact_volume); - - Sets collision sound to impact_sound with specified volume. - - - float osDie(key objectUUID); - - Deletes an object depending on the target uuid. - Note : Only allow osDie() on objects rezzed by the - script prim Group (linkset) or on it self. - - - string osFormatString(string format,list params); - - Return the string with parameters substituted into it. These parameters - need to be incrementing numbers, starting at zero, and surrounded by - single accolades (also known as curly brackets). - - - string osKey2Name(key id); - - Returns the avatar's name, based on their UUID. - - - float osList2Double(list src, integer index); - - This function converts a value in the specified index of the list src - to the double data type. However, OSSL does not have a double data type. - - - list osMatchString(string src, string pattern, integer start); - - This function returns a list containing the matches from the given string. - - - float osMax(Double a, Double b); - - Returns the larger of two numbers. Wraps to system Math.Max() - - - float osMin(Double a, Double b); - - Returns the smaller of two numbers. Wraps to the system Math.Min() function. - - - Hashtable osParseJSON(string JSON); - - - osParseJSONNew(string JSON); - - Returns osd deserialized JSON to object. - - - string osReplaceString(string src, string pattern, string replace, int count, int start); - - This function is for regular expression-based string replacement. The count parameter - specifies the total number of replacements to make where -1 makes all possible replacements. - - - integer osRegexIsMatch(string input, string pattern); - - Returns 1 if the input string matches the regular expression pattern. - - - void osSetContentType(key id, string type); - - Sets an arbitrary content return type for an llRequestUrl(). - - - void osSetStateEvents(integer events); - - - string osUnixTimeToTimestamp(integer epoch); - - This function allows an input Unix time to be converted to an llGetTimeStamp() - format. Please note that there will be no second fractions. This is because - the implementation works with seconds only. - - - void osVolumeDetect(integer detect); - - - - - Every state must have at least one handler. You can choose to - handle an event by defining one of the the reserved - event handlers named here. - - at_target(integer tnum, vector targetpos, vector ourpos); - - This event handler is triggered when the scripted object comes within - a defined range of the target position targetpos - (defined by the llTarget function call). - - - - at_rot_target(integer number, rotation target_rotation, rotation our_rotation); - - This event is triggered when a script comes within a defined - angle of a target rotation. The range is set by a call - to llRotTarget. - - - - attach(key attached); - - This event is triggered whenever a object with this script is - attached or detached from an avatar. If it is attached, - attached is the key of the avatar it is attached to, otherwise - attached is NULL_KEY. - - - - changed(integer change); - - Triggered when various events change the object. The change - argument will be a bitfield of change constants. - - - - collision(integer total_number); - - This event is raised while another object is colliding with - the object the script is attached to. The number of - detected objects is passed to the script. Information on - those objects may be gathered via the llDetected* library - functions. - (Collisions are also generated if a user walks into an object.) - - - - collision_end(integer total_number); - - This event is raised when another object stops colliding with - the object the script is attached to. The number of - detected objects is passed to the script. Information on those - objects may be gathered via the llDetected* library - functions. - (Collisions are also generated if a user walks into an object.) - - - - collision_start(integer total_number); - - This event is raised when another object begins to collide with - the object the script is attached to. The number of - detected objects is passed to the script. Information on - those objects may be gathered via the llDetected* library - functions. - (Collisions are also generated if a user walks into an object.) - - - - control(key name, integer levels, integer edges); - - Once a script has the ability to grab control inputs from the avatar, - this event will be used to pass the commands - into the script. The levelsand edgesare bitfields - of control constsants. - - - - dataserver(key requested, string data); - - This event is triggered when the requested data is returned - to the script. Data may be requested by the - llRequestAgentData, the llRequestInventoryData, - and the llGetNotecardLine function calls. - - - - email(string time, string address, string subject, string body, integer remaining); - - This event is triggered when an email sent to this script arrives. - The remaining tells how many more emails are known as still pending. - - - - http_request(key request_id, string method, string body); - - Triggered when task receives an HTTP request. - HTTP request id for response use, and function response identification. - GET, POST, PUT - Contents of the request. - - - - http_response(key request_id, integer status, list metadata, string body); - - This event handler is invoked when an HTTP response is received for - a pending llHTTPRequest request or if a pending request fails or times out. - - - - land_collision(vector position); - - This event is raised when the object the script is attached - to is colliding with the ground. - - - - land_collision_end(vector position); - - This event is raised when the object the script is attached - to stops colliding with the ground. - - - - land_collision_start(vector position); - - This event is raised when the object the script is attached - to begins to collide with the ground. - - - - link_message(integer sender_number, integer number, string message, key id); - - Triggered when object receives a link message via llMessageLinked - library function call. - - - - listen(integer channel, string name, key id, string message); - - This event is raised whenever a chat message matching the - constraints passed in the llListen command is heard. - The nameand id of the speaker as well as the messageare passed - in as parameters. Channel 0 is the public - chat channel that all avatars see as chat text. - Channels 1 through 2,147,483,648 are private channels that are not - sent to avatars but other scripts can listen on those channels. - - - - money(key giver, integer amount); - - This event is triggered when user giver has given an amount - of Linden dollars to the object. - - - - moving_end(void); - - Triggered whenever a object with this script stops moving. - - - - moving_start(void); - - Triggered whenever a object with this script starts moving. - - - - no_sensor(void); - - This event is raised when sensors are active - (via the llSensor library call) but are not sensing anything. - - - - not_at_rot_target(void); - - When a target is set via the llRotTarget library call, - but the script is outside the specified angle this event is raised. - - - - not_at_target(void); - - When a target is set via the llTarget library call, - but the script is outside the specified range this event is raised. - - - - object_rez(key id); - - Triggered when object rez-es in another object from its - inventory via the llRezObject api. The id is the globally - unique key for the object. - - - - on_rez(integer start_param); - - Triggered whenever a object is rez-ed from inventory - or by another object. The start_paramis the parameter - passed in from the call to llRezObject. - - - - path_update(integer Type, list Reserved) - - This event is called to inform the script of changes within the object's path-finding status. - One of the PU* (Path Update) constants. - - - - remote_data(integer event_type, key channel, key message_id, string sender, integer idata, string sdata); - - Triggered by various XML-RPC calls with event_type specifying the type of data. - - - - run_time_permissions(integer permissions); - - Scripts need permission from either the owner or the avatar - they wish to act on before they perform certain - functions, such as debiting money from their owners account, - triggering an animation on an avatar, or capturing - control inputs. The llRequestPermissions library - function is used to request these permissions and the various - permissions integer constants can be supplied. - The integer returned to this event handler contains the current set - of permissions flags, so if permissionseqal 0 then no permissions are set. - - - - sensor(integer total_number); - - This event is raised whenever objects matching the constraints - of the llSensor command are detected. - The number of detected objects is passed to the script - in the total_number parameter. Information on those - objects may be gathered via the llDetected* library functions. - - - - state_entry(void); - - The state_entry event occurs whenever a new state is entered, - including program start, and is always the first event handled. - - - - state_exit(void); - - The state_exit event occurs whenever the state command - is used to transition to another state. It is handled - before the new states state_entry event. - - - - timer(void); - - This event is raised at regular intervals set by the - llSetTimerEvent library function. - - - - touch(integer total_number); - - This event is raised while a user is touching the object - the script is attached to. The number of touching objects is - passed to the script in the total_number parameter. - Information on those objects may be gathered via the - llDetected* library functions. - - - - touch_end(integer total_number); - - This event is raised when a user stops touching the object - the script is attached to. The number of touching - objects is passed to the script in the total_number parameter. - Information on those objects may be gathered - via the llDetected* library functions. - - - - touch_start(integer total_number); - - This event is raised when a user first touches the object the script is - attached to. The number of touching objects is passed to the script in - the total_number parameter. Information on those objects may be gathered - via the llDetected() library functions. - - - - transaction_result(key RequestID, integer Success, string Text) - - Triggered by llTransferMoney() function. - The key returned by an llTransferMoney call to identify the specific request. - Boolean value, indicating success of the transfer - Message which depends on the result of the transaction. If iSuccess is true, this will contain <destination_id>,<amount> - - - - - - To ease scripting, many useful constants are defined by LSL. - - The boolean constants represent the values for TRUE and FALSE. - LSL represents booleans as integer values 1 - and 0 respectively. Since there is no boolean type these - constants act as a scripting aid usually employed for - testing variables which conceptually represent boolean values. - - An integer constant for boolean comparisons. Has the value '1'. - - - An integer constant for boolean comparisons. Has the value '0'. - - - - - The status constants are used in the llSetStatus and llGetStatus - library calls. These constants can be bitwise ORed - together when calling the library functions to set the same - value to more than one status flag - Status Constants - - Controls whether the object can be grabbed. - A grab is the default action when in third person, and is - available as the hand tool in build mode. - This is useful for physical objects that you don't want other - people to be able to trivially disturb. - The default if FALSE - - Prevent click-and-drag movement on all prims in the object. - Argument(s) passed to function had a bounds error. - - - Controls whether the object is returned to the owners - inventory if it wanders off the edge of the world. It is - useful to set this status TRUE for things like bullets - or rockets. The default is TRUE - - .An internal error occurred. - Function was called with malformed parameters. - .Object or other item was not found. - Feature not supported. - Result of function call was success. - - Controls whether the object moves physically. - This controls the same flag that the ui checkbox for - Physical controls. The default is FALSE. - - - Controls whether the object collides or not. - Setting the value to TRUE makes the object non-colliding with - all objects. It is a good idea to use this for most objects - that move or rotate, but are non-physical. It is also - useful for simulating volumetric lighting. The default is FALSE. - - - - - - Controls whether the object can physically rotate around - the specific axis or not. This flag has no meaning - for non-physical objects. Set the value to FALSE - if you want to disable rotation around that axis. The - default is TRUE for a physical object. - A useful example to think about when visualizing - the effect is a sit-and-spin device. They spin around the - Z axis (up) but not around the X or Y axis. - - - Controls whether the object can cross region boundaries - and move more than 20 meters from its creation - point. The default if FALSE. - - Argument(s) passed to function had a type mismatch. - Whitelist Failed. - - - - These constants can be combined using the binary | operator and are used in the llSensor and related calls. - Object Type Constants - - Objects in world that are running a script or - currently pysically moving. - - Objects in world that are agents. - - - Static in-world objects. - - Scripted in-world objects. - - - - - The permission constants are used for passing values - to llRequestPermissions, determing the value of - llGetPermissions, and explicitly passed to the - run_time_permissions event. For many of the basic library - functions to work, a specific permission must be enabled. - The permission constants can be ored together to be - used in conjunction. - - Permission Constants - - If this permission is enabled, the object can successfully - call llAttachToAvatar to attach to the given avatar. - - - If this permission is enabled, the object can successfully - call llCreateLink, llBreakLink, and - llBreakAllLinks to change links to other objects. - - - - If this permission is enabled, the object can successfully - call llGiveMoney to debit the owners account. - - - (not yet implemented) - - - (not yet implemented) - - - - (not yet implemented) - - - (not yet implemented) - - - If this permission enabled, the object can successfully - call the llTakeControls libray call. - - - - - If this permission is enabled, the object can successfully - call llStartAnimation for the avatar that owns this - object. - - - - - - These constants can be used to refer to a specific inventory - type in calls to llGetInventoryNumber - andllGetInventoryName. - Inventory Constants - - - - - - - - - - - - - - - - These constants are used to refer to attachment points - in calls to llAttachToAvatar. - Attachment Constants - - Attach to the avatar's geometric centre. - - - Attach to the avatar back. - - - Attach to the avatar belly. - - - Attach to the avatar chest. - - - Attach to the avatar chin. - - - Attach to the avatar head. - - - - Attach to the avatar left ear. - - - Attach to the avatar left eye. - - - Attach to the avatar left foot. - - - Attach to the avatar left hand. - - - Attach to the avatar left hip. - - - Attach to the avatar left lower arm. - - - Attach to the avatar lower left leg. - - - Attach to the avatar left pectoral. - - - Attach to the avatar left shoulder. - - - Attach to the avatar lower upper leg. - - - - Attach to the avatar mouth. - - - Attach to the avatar's neck. - - - Attach to the avatar nose. - - - Attach to the avatar pelvis. - - - - Attach to the avatar right upper arm. - - - Attach to the avatar right lower arm. - - - Attach to the avatar left upper arm. - - - Attach to the avatar right ear. - - - Attach to the avatar right eye. - - - Attach to the avatar right foot. - - - Attach to the avatar right hand. - - - Attach to the avatar right hip. - - - Attach to the avatar right lower leg. - - - Attach to the avatar right pectoral. - - - Attach to the avatar right shoulder. - - - Attach to the avatar right upper leg. - - - - - - - - - - - - - - These constants are only used in calls to llModifyLand. - The constants are equivalent to the similarly labelled - user interface elements for editing land in the viewer. - Land Constants - - Use a large brush size. - - - Action to level the land. - - - Action to lower the land. - - - Use a medium brush size. - - - - Action to raise the land. - - - - Use a small brush size. - - - - - - These constants are used in calls to llSetLinkColor and - llMessageLinked. - - Link Constants - - This targets every object except the root in the linked set. - - - This targets every object in the linked set except - the object with the script. - - - This targets the root of the linked set. - - - This targets every object in the linked set. - - - - - - These constants are used in llTakeControls as well - as the control event handler. - Control Constants - - Test for the avatar move forward control. - - - Test for the avatar move back control. - - - Test for the avatar move left control. - - - Test for the avatar move right control. - - - Test for the avatar rotate left control. - - - Test for the avatar rotate right control. - - - Test for the avatar move up control. - - - Test for the avatar move down control. - - - Test for the avatar left button control. - - - Test for the avatar left button control while in mouse look. - - - - - These constants are used in the changed event handler. - Change Constants - The object inventory has changed because an item was added through the llAllowInventoryDrop interface. - The object colour has changed. - The object inventory has changed. - The object has linked or its links were broken. - - - - - The object scale has changed. - The object shape has changed, e.g., a box to a cylinder. - - The texture offset, scale rotation, or simply the object texture has changed. - - - - These constants are used to determine the variable type - stored in a heterogenous list. The value returned from - llGetListEntryType can be used for comparison against - these constants. - Type Constants - The list entry is an integer. - The list entry is a float. - The list entry is a string. - The list entry is a key. - The list entry is a vector. - The list entry is a rotation. - The list entry is invalid. - - - - Each of these constants represents a bit in the integer - returned from the llGetAgentInfo function and can be used - in an expression to determine the specified information - about an agent. - Agent Info Constants - - The agent has attachments. - - - - - The agent is flying. - - - - - The agent has scripted attachments. - - - - - - These constants are used in the llSetTextureAnim api to - control the animation mode. - Texture Animation Constants - - Texture animation is on. - - - Loop the texture animation. - - - play animation going forwards, then backwards. - - - Play animation in reverse direction. - - - Animate texture rotation. - - - Animate the texture scale. - - - slide in the X direction, instead of playing separate frames. - - - - - These constants are used in calls to the llParticleSystem - api to specify parameters. - Particle System Parameters - - Particles bounce off of a plane at the objects Z height. - - - The particle glows. - - - a float which determines the ending alpha of the object. - - - a vector <r, g, b> which determines the ending - color of the object. - - - a vector <sx, sy, z>, which is the ending - size of the particle billboard in meters (z is ignored). - - - Each particle that is emitted by the particle system is - simulated based on the following flags. To use - multiple flags, bitwise or (|) them together. - PSYS_PART_FLAGS Values - - - The particle position is relative to the source objects position. - - - The particle orientation is rotated so the vertical - axis faces towards the particle velocity. - - - Interpolate both the color and alpha from the start - value to the end value. - - - Interpolate the particle scale from the start value - to the end value. - - - age in seconds of a particle at which it dies. - - - a float which determines the starting alpha of the object. - - - a vector <r, g, b> which determines the starting colour of the object. - - - a vector <sx, sy, z>, - which is the starting size of the particle billboard - in meters (z is ignored). - - - - The particle heads towards the location of the target - object as defined by PSYS_SRC_TARGET_KEY. - - - Particles have their velocity damped towards the wind velocity. - - - - A vector <x, y, z> which is the acceleration to apply on particles. - - - how often to release a particle burst (float seconds). - - - Area in radians specifying where particles - will NOT be created (for ANGLE patterns) - - - Area in radians filled with particles - (for ANGLE patterns) (if lower than PSYS_SRC_ANGLE_BEGIN, - acts as PSYS_SRC_ANGLE_BEGIN itself, - and PSYS_SRC_ANGLE_BEGIN acts as PSYS_SRC_ANGLE_END) - - - specifies the inner angle of the arc created - by the PSYS_PART_SRC_PATTERN_ANGLE or - PSYS_PART_SRC_PATTERN_ANGLE_CONE source pattern. - The area specified will not have particles - in it.. - - - how many particles to release in a burst. - - - what distance from the center of the object - to create the particles. - - - minimum speed that a particle should be moving. - - - maximum speed that a particle should be moving. - - - how long this particle system should last, - 0.0 menas forever. - - - Sets the angular velocity to rotate the axis - that SRC_PATTERN_ANGLE and - SRC_PATTERN_ANGLE_CONE use.. - - - specifies the outer angle of the arc created - by the PSYS_PART_SRC_PATTERN_ANGLE or - PSYS_PART_SRC_PATTERN_ANGLE_CONE source pattern. - The area between the outer and inner angle - will be filled with particles.. - - - The pattern which is used to generate particles. - Use one of the following values: - PSYS_SRC_PATTERN Values - - - - - - - - the key of a target object to move towards - if PSYS_PART_TARGET_POS_MASK is enabled. - - - an asset name for the texture to use for the particles. - - - - - These constants are used in calls to the - llRequestAgentData api to collect information about - an agent which will - be provided in the dataserver event. - - The date the agent was born returned in ISO 8601 format of YYYY-MM-DD. - - - The name of the agent. - - - "1" for online "0" for offline. - - - - Returns the agent ratings as a comma separated string - of six integers. They are: - - 1. Positive rated behavior - 2. Negative rated behavior - 3. Positive rated appearance - 4. Negative rated appearance - 5. Positive rated building - 6. Negative rated building - - - - - - - - - LSL provides a small collection of floating point - constants for use in float arithmetic. - These constants are usually - employed while performing trigonometric calculations, - but are sometimes useful for other applications such as - specifying arc radians to sensor or particle system functions. - Float Constants - - 0.01745329 - Number of radians per degree. - You can use this to convert degrees to radians by multiplying - the degrees by this number. - - - 3.14159265 - The radians of a hemicircle. - - - 1.57079633 - The radians of a quarter circle. - - - 57.2957795 - Number of degrees per radian. - You can use this number to convert radians to degrees by - multiplying the radians by this number. - - - 1.41421356 - The square root of 2. - - - 6.28318530 - The radians of a circle. - - - - - There is only one key constant which acts as an invalid key: NULL_KEY. - - - - - - - - - - - There is one uncategorized integer constant - which is used in some of the texturing and coloring api: ALL_SIDES - - - - - There is one uncategorized string constant - which is used in the dataserver event: EOF - - - - - There is only one vector constant which - acts as a zero vector: ZERO_VECTOR = <0,0,0>. - - - - - - There is only one rotation constant - which acts as a zero rotation: ZERO_ROTATION = <0,0,0,1>. - - - - - Parameters - - - - - A vector of timescales for exponential - decay of the vehicles linear velocity along its preferred axes of - motion (at, left, up). - Range = [0.07, inf) seconds for each element of the vector. - - - A vector of timescales for exponential - decay of the vehicles angular velocity about its preferred axes of - motion (at, left, up). - Range = [0.07, inf) seconds for each element of the vector. - - - The direction and magnitude (in preferred frame) - of the vehicles linear motor. The vehicle will accelerate - (or decelerate if necessary) to match its velocity to its motor. - Range of magnitude = [0, 30] meters/second. - - - The timescale for exponential approach to full linear motor velocity. - - - The timescale for exponential decay of the linear motors magnitude. - - - The direction and magnitude (in preferred frame) - of the vehicles angular motor.The vehicle will accelerate - (or decelerate if necessary) to match its velocity to its motor. - - - The timescale for exponential approach to full angular motor velocity. - - - The timescale for exponential decay of the angular motors magnitude. - - - The height (above the terrain or water, or global) - at which the vehicle will try to hover. - - - A slider between minimum (0.0) and maximum anti-gravity (1.0). - - - A slider between minimum (0.0) and maximum (1.0) - deflection of linear velocity. That is, its a simple - scalar for modulating the strength of linear deflection. - - - The timescale for exponential success of linear - deflection deflection. It is another way to specify how much - time it takes for the vehicles linear velocity - to be redirected to its preferred axis of motion. - - - A slider between minimum (0.0) and maximum (1.0) - deflection of angular orientation. That is, its a simple - scalar for modulating the strength of angular - deflection such that the vehicles preferred axis of motion - points toward its real velocity. - - - The timescale for exponential success of linear - deflection deflection. Its another way to specify the strength - of the vehicles tendency to reorient itself so - that its preferred axis of motion agrees with its true velocity. - - - A slider between minimum (0.0 = wobbly) and - maximum (1.0 = firm as possible) stability of the vehicle to - keep itself upright. - - - The period of wobble, or timescale for - exponential approach, of the vehicle to rotate such that its preferred - "up" axis is oriented along the worlds "up" axis. - - - A slider between anti (-1.0), none (0.0), - and maxmum (1.0) banking strength. - - - A slider between static (0.0) and dynamic (1.0) - banking. "Static" means the banking scales only with the - angle of roll, whereas "dynamic" is a term - that also scales with the vehicles linear speed. - - - The timescale for banking to exponentially - approach its maximum effect. This is another way to scale the - strength of the banking effect, however it affects the - term that is proportional to the difference between what - the banking behavior is trying to do, and what the - vehicle is actually doing. - - - A rotation of the vehicles preferred axes of - motion and orientation (at, left, up) with respect to the vehicles - local frame (x, y, z). - - - - - Flags - - - - - Old, changed to VEHICLE_FLAG_NO_DEFLECTION_UP - - - This flag prevents linear deflection parallel to world z-axis. - This is useful for preventing ground vehicles - with large linear deflection, like bumper cars, - from climbing their linear deflection into the sky. - - - For vehicles with vertical attractor - that want to be able to climb/dive, for instance, - airplanes that want to use the banking feature. - - - Ignore terrain height when hovering. - - - Ignore water height when hovering. - - - Hover at global height. - - - Hover doesnt push down. Use this flag for hovering vehicles - that should be able to jump above their hover - height. - - - Prevents ground vehicles from motoring into the sky. - - - - - Types - - Uses linear deflection for lift, no hover, and banking to turn. - // very little friction along forward-back axis - llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <200, 10, 5> ); - // uniform angular friction - llSetVehicleFloatParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, 20 ); - // linear motor - llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0> ); - llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 2 ); - llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 60 ); - // angular motor - llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0> ); - llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 4 ); - llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 8 ); - // no hover - llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, 0 ); - llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY, 0.5 ); - llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 1000 ); - llSetVehicleFloatParam( VEHICLE_BUOYANCY, 0 ); - // linear deflection - llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.5 ); - llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 0.5 ); - // angular deflection - llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 1.0 ); - llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 2.0 ); - // vertical attractor - llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.9 ); - llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 2 ); - // banking - llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, 1 ); - llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0.7 ); - llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 2 ); - // default rotation of local frame - llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> ); - // remove these flags - llRemoveVehicleFlags( VEHICLE_FLAG_NO_DEFLECTION_UP - | VEHICLE_FLAG_HOVER_WATER_ONLY - | VEHICLE_FLAG_HOVER_TERRAIN_ONLY - | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT - | VEHICLE_FLAG_HOVER_UP_ONLY - | VEHICLE_FLAG_LIMIT_MOTOR_UP ); - // set these flags - llSetVehicleFlags( VEHICLE_FLAG_LIMIT_ROLL_ONLY ); - - - Hover, and friction, but no deflection. - // uniform linear friction - llSetVehicleFloatParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, 5 ); - // uniform angular friction - llSetVehicleFloatParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, 10 ); - // linear motor - llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0> ); - llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 5 ); - llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 60 ); - // angular motor - llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0> ); - llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 6 ); - llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 10 ); - // hover - llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, 5 ); - llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY, 0.8 ); - llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 10 ); - llSetVehicleFloatParam( VEHICLE_BUOYANCY, 1 ); - // no linear deflection - llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0 ); - llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 5 ); - // no angular deflection - llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0 ); - llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 5 ); - // no vertical attractor - llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 1 ); - llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 1000 ); - // no banking - llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, 0 ); - llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0.7 ); - llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 5 ); - // default rotation of local frame - llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> ); - // remove all flags - llRemoveVehicleFlags( VEHICLE_FLAG_NO_DEFLECTION_UP - | VEHICLE_FLAG_HOVER_WATER_ONLY - | VEHICLE_FLAG_LIMIT_ROLL_ONLY - | VEHICLE_FLAG_HOVER_TERRAIN_ONLY - | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT - | VEHICLE_FLAG_HOVER_UP_ONLY - | VEHICLE_FLAG_LIMIT_MOTOR_UP ); - - - Hovers over water with lots of friction and some anglar deflection. - // least for forward-back, most friction for up-down - llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <10, 3, 2> ); - // uniform angular friction (setting it as a scalar rather than a vector) - llSetVehicleFloatParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, 10 ); - // linear motor wins after about five seconds, decays after about a minute - llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0> ); - llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 5 ); - llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 60 ); - // angular motor wins after four seconds, decays in same amount of time - llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0> ); - llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 4 ); - llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 4 ); - // hover - llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, 0 ); - llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY, 0.5 ); - llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 2.0 ); - llSetVehicleFloatParam( VEHICLE_BUOYANCY, 1 ); - // halfway linear deflection with timescale of 3 seconds - llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.5 ); - llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 3 ); - // angular deflection - llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.5 ); - llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 5 ); - // somewhat bounscy vertical attractor - llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.5 ); - llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 5 ); - // weak negative damped banking - llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, -0.3 ); - llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0.8 ); - llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 1 ); - // default rotation of local frame - llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> ); - // remove these flags - llRemoveVehicleFlags( VEHICLE_FLAG_HOVER_TERRAIN_ONLY - | VEHICLE_FLAG_LIMIT_ROLL_ONLY - | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT); - // set these flags - llSetVehicleFlags( VEHICLE_FLAG_NO_DEFLECTION_UP - | VEHICLE_FLAG_HOVER_WATER_ONLY - | VEHICLE_FLAG_HOVER_UP_ONLY - | VEHICLE_FLAG_LIMIT_MOTOR_UP ); - - - Another vehicle that bounces along the ground but needs - the motors to be driven from external controls or - timer events. - // most friction for left-right, least for up-down - llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <100, 2, 1000> ); - // no angular friction - llSetVehicleVectorParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, <1000, 1000, 1000> ); - // linear motor wins after about a second, decays after about a minute - llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0> ); - llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 1 ); - llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 60 ); - // angular motor wins after a second, decays in less time than that - llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0> ); - llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 1 ); - llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 0.8 ); - // no hover - llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, 0 ); - llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY, 0 ); - llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 1000 ); - llSetVehicleFloatParam( VEHICLE_BUOYANCY, 0 ); - // maximum linear deflection with timescale of 2 seconds - llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 1 ); - llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 2 ); - // no angular deflection - llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0 ); - llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 10 ); - // critically damped vertical attractor - llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 1 ); - llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 10 ); - // weak negative critically damped banking - llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, -0.2 ); - llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 1 ); - llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 1 ); - // default rotation of local frame - llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> ); - // remove these flags - llRemoveVehicleFlags( VEHICLE_FLAG_HOVER_WATER_ONLY - | VEHICLE_FLAG_HOVER_TERRAIN_ONLY - | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT); - // set these flags - llSetVehicleFlags( VEHICLE_FLAG_NO_DEFLECTION_UP - | VEHICLE_FLAG_LIMIT_ROLL_ONLY - | VEHICLE_FLAG_HOVER_UP_ONLY - | VEHICLE_FLAG_LIMIT_MOTOR_UP ); - - - - Simple vehicle that bumps along the ground, - and likes to move along its local x-axis. - // most friction for left-right, least for up-down - llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <30, 1, 1000> ); - // no angular friction - llSetVehicleVectorParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, <1000, 1000, 1000> ); - // no linear motor - llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0> ); - llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 1000 ); - llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 120 ); - // no angular motor - llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0> ); - llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 1000 ); - llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 120 ); - // no hover (but with timescale of 10 sec if enabled) - llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, 0 ); - llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY, 10 ); - llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 10 ); - llSetVehicleFloatParam( VEHICLE_BUOYANCY, 0 ); - // maximum linear deflection with timescale of 1 second - llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 1 ); - llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 1 ); - // no angular deflection - llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0 ); - llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 10 ); - // no vertical attractor (doesnt mind flipping over) - llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 1 ); - llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 1000 ); - // no banking - llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, 0 ); - llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 1 ); - llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 10 ); - // default rotation of local frame - llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> ); - // remove these flags - llRemoveVehicleFlags( VEHICLE_FLAG_HOVER_WATER_ONLY - | VEHICLE_FLAG_HOVER_TERRAIN_ONLY - | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT - | VEHICLE_FLAG_HOVER_UP_ONLY ); - // set these flags (the limit_roll flag will have no effect - // until banking is enabled, if ever) - llSetVehicleFlags( VEHICLE_FLAG_NO_DEFLECTION_UP - | VEHICLE_FLAG_LIMIT_ROLL_ONLY - | VEHICLE_FLAG_LIMIT_MOTOR_UP ); - - - - - - - - If set to false, character will not attempt to catch up on lost time when pathfinding performance is low, potentially providing more reliable movement (albeit while potentially appearing to be more stuttery). Default is true to match pre-existing behavior. - Allows you to specify that a character should not try to avoid other characters, should not try to avoid dynamic obstacles (relatively fast moving objects and avatars), or both. - Makes the character jump. Requires an additional parameter, the height to jump, between 0.1m and 2.0m. This must be provided as the first element of the llExecCharacterCmd option list. - - Stops any current pathfinding operation. - Speed of pursuit in meters per second. - The character's maximum speed while turning--note that this is only loosely enforced (i.e., a character may turn at higher speeds under certain conditions). - Set collision capsule length - cannot be less than two times the radius. - The character's maximum acceleration rate. - The character's maximum deceleration rate. - The character's maximum speed. - The character's turn radius when travelling at CHARACTER_MAX_TURN_SPEED. - Valid options are: VERTICAL, HORIZONTAL. - Set collision capsule radius. - Takes a boolean parameter. If TRUE, the character cannot voluntarilly leave the parcel, but can return to it. - Specifies which walk-ability coefficient will be used by this character. - - - - - - Makes character navigate in a straight line toward pos. May be set to TRUE or FALSE. - - - - One of TRAVERSAL_TYPE_FAST, TRAVERSAL_TYPE_SLOW, and TRAVERSAL_TYPE_NONE. - - - - - Selects a random destination near the offset. - Define whether the character attempts to predict the target's location. - Go to a position offset from the target. - Define whether the character needs a line-of-sight to give chase. - - - - - - - U+FDD2 - - U+FDD7 - U+FDD0 - U+FDD5 - U+FDD3 - U+FDD1 - U+FDD4 - >U+FDD6 - - - - - - - - - - - - - - - Constants that do not fit into any of the previously defined categories. - - - - - - - - - - - - - - - - - - - - - When the prim is touched, the buy dialog is opened - - - When the prim is touched, the web media dialog is opened" - - - Performs the default action: when the prim is touched, touch events are triggered" - - - When the prim is touched, the object inventory dialog is opened - - - When the prim is touched, the pay dialog is opened - - - When the prim is touched, html-on-a-prim is enabled? - - - When the prim is touched, the avatar sits upon it - - - When the prim is touched, touch events are triggered" - - - "application/atom+xml" - "application/x-www-form-urlencoded" - "text/html", only valid for embedded browsers on content owned by the person viewing. Falls back to "text/plain" otherwise. - "application/json" - "application/llsd+xml" - "application/rss+xml" - "text/plain" - "application/xhtml+xml" - "application/xml" - - - DEBUG_CHANNEL is an integer constant that, when passed to - llSay, llWhisper, or llShout as a channel parameter, - will print text to the Script Warning/Error Window. - It has the value '2147483647'. - - Used with llSetPhysicsMaterial to enable the density value. Must be between 1.0 and 22587.0 (in Kg/m^3 -- see if you can figure out what 22587 represents) - - Add the agent to this estate's Allowed Residents list. - Remove the agent from this estate's Allowed Residents list. - Add the group to this estate's Allowed groups list. - Remove the group from this estate's Allowed groups list. - Add the agent to this estate's Banned residents list. - Remove the agent from this estate's Banned residents list. - - Used with llSetPhysicsMaterial to enable the friction value. Must be between 0.0 and 255.0 - Used with llSetPhysicsMaterial to enable the gravity multiplier value. Must be between -1.0 and +28.0 - - - - Usage: 'HTTP_CUSTOM_HEADER, string, string'. Add an extra custom HTTP header to the request. The first string is the name of the parameter to change, e.g. "Pragma", and the second string is the value, e.g. "no-cache". - - - - Allows enabling/disbling of the "Pragma: no-cache" header. - - - - For use with KFM_COMMAND. - For use with KFM_COMMAND. - For use with KFM_COMMAND. - - - For use with KFM_MODE. - For use with KFM_MODE. - - For use with KFM_MODE. - For use with KFM_MODE. - For use with KFM_DATA. - For use with KFM_DATA. - - - - - - - - - - - - - Gets the attachment point to which the object is attached. - - Gets the object's creator key. - If id is an avatar, a NULL_KEY is returned. - - Gets the object's description. - If id is an avatar, an empty string is returned. - - Gets the prims's group key. - If id is an avatar, a NULL_KEY is returned. - - Gets the object's name. - Gets an object's owner's key. - If id is group owned, a NULL_KEY is returned. - - Returns the pathfinding setting of any object in the region. It returns an integer matching one of the OPT_* constants. - Returns boolean, detailing if phantom is enabled or disabled on the object. - If id is an avatar or attachment, 0 is returned. - Returns boolean, detailing if physics is enabled or disabled on the object. - If id is an avatar or attachment, 0 is returned. - Gets the object's position in region coordinates. - Gets the id of the root prim of the object requested. - Gets the object's rotation. - Returns boolean, detailing if temporary is enabled or disabled on the object. - Gets the object's velocity. - - - - - - - - - - - - - Returned for avatars. - Returned for pathfinding characters. - Returned for exclusion volumes. - Returned for movable obstacles, movable phantoms, physical, and volumedetect objects. - Returned for material volumes. - Returned for attachments, Linden trees, and grass. - Returned for static obstacles. - Returned for walkable objects. - - - - - - - - - - - - - - - - - - - - - The parcel's avatar visibility setting. (1 char.). - - - - - - - - - - - - - - - - - - - - - - - - - - Use this to get or set the parcel media description. - - - Used to get or set the parcel's media looping variable. - - - - - - Use this to get or set the parcel media pixel resolution. - - - - - - Use this to get or set the parcel media MIME type (e.g. "text/html"). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PRIM_GLOW is used to get or set the glow status of the face. - - - - - - - - - - - - - - - - - - - - - - Boolean. Gets/Sets the default image state (the image that the user sees before a piece of media is active) for the chosen face. The default image is specified by Second Life's server for that media type. - Boolean. Gets/Sets whether auto-looping is enabled. - Boolean. Gets/Sets whether the media auto-plays when a Resident can view it. - Boolean. Gets/Sets whether auto-scaling is enabled. Auto-scaling forces the media to the full size of the texture. - Boolean. Gets/Sets whether clicking the media triggers auto-zoom and auto-focus on the media. - Integer. Gets/Sets the style of controls. Can be either PRIM_MEDIA_CONTROLS_STANDARD or PRIM_MEDIA_CONTROLS_MINI. - Mini web navigation controls; does not include an address bar. - Standard web navigation controls. - String. Gets/Sets the current url displayed on the chosen face. Changing this URL causes navigation. 1024 characters Maximum. - Boolean. Gets/Sets whether the first click interaction is enabled. - Integer. Gets/Sets the height of the media in pixels. - String. Gets/Sets the home URL for the chosen face. 1024 characters maximum. - - - - - Integer. Gets/Sets the permissions mask that control who can see the media control bar above the object:: PRIM_MEDIA_PERM_ANYONE, PRIM_MEDIA_PERM_GROUP, PRIM_MEDIA_PERM_NONE, PRIM_MEDIA_PERM_OWNER - Integer. Gets/Sets the permissions mask that control who can interact with the object: PRIM_MEDIA_PERM_ANYONE, PRIM_MEDIA_PERM_GROUP, PRIM_MEDIA_PERM_NONE, PRIM_MEDIA_PERM_OWNER - String. Gets/Sets the whitelist as a string of escaped, comma-separated URLs. This string can hold up to 64 URLs or 1024 characters, whichever comes first. - Boolean. Gets/Sets whether navigation is restricted to URLs in PRIM_MEDIA_WHITELIST. - Integer. Gets/Sets the width of the media in pixels. - - - - - - - - Use the convex hull of the prim shape for physics (this is the default for mesh objects). - Ignore this prim in the physics shape. NB: This cannot be applied to the root prim. - Use the normal prim shape for physics (this is the default for all non-mesh objects). - Allows you to set the physics shape type of a prim via lsl. Permitted values are: - PRIM_PHYSICS_SHAPE_NONE, PRIM_PHYSICS_SHAPE_PRIM, PRIM_PHYSICS_SHAPE_CONVEX - - - - - - - - - Render inside out (inverts the normals). - Render an X axis mirror of the sculpty. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Disables profiling - Enables memory profiling - - Triggered when an llEvade character thinks it has hidden from its pursuer. - Triggered when an llEvade character switches from hiding to running - - Goal is not on the navigation-mesh and cannot be reached. - Character cannot navigate from the current location - e.g., the character is off the navmesh or too high above it. - This is a fatal error reported to a character when there is no navmesh for the region. This usually indicates a server failure and users should file a bug report and include the time and region in which they received this message. - There's no good place for the character to go - e.g., it is patrolling and all the patrol points are now unreachable. - - Target (for llPursue or llEvade) can no longer be tracked - e.g., it left the region or is an avatar that is now more than about 30m outside the region. - - Goal is no longer reachable for some reason - e.g., an obstacle blocks the path. - Character has reached the goal and will stop or choose a new goal (if wandering). - Character is near current goal. - - - PUBLIC_CHANNEL is an integer constant that, when passed to - llSay, llWhisper, or llShout as a channel parameter, - will print text to the publicly heard chat channel. Has the value '0'. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Used with llSetPhysicsMaterial to enable the density value. Must be between 0.0 and 1.0 - - Returns the % of pathfinding characters skipped each frame, averaged over the last minute. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + //.* + + + + + + "[^"\\]* (?>\\.[^"\\]*)*" + + + + + + + + + + + + + \+\+|\-\-|\<\<|\>\>|\<\=|\>\=|\=\=|\!\=|\&\&|\|\||\+\=|\-\=|\*\=|\/\=|\%\= + + + + + + + [+-]?0x[\da-fA-F.p]+ | [-+]?\d* \.?\d+([eE][-+]?\d+)? + + + + + + + + + + + + + + + + + All scripts must have a default state, which is the first state entered when the script starts. + If another state is defined before the default state, the compiler will report a syntax error. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Complete listing of the Linden Library function calls available in lsl. + + integer llAbs(integer val); + + Returns the absolute value of val. + + + + float llAcos(float val); + + Returns the arccosine in radians of val. + + + + llAddToLandBanList(key agent, float hours); + + Adds agent to the parcel ban list for the specified number of hours. + A value of 0 for hours will add agent indefinitely. + The smallest value hours will accept is 0.01; + anything smaller will be seen as 0. + When values that small are used, it seems the function bans + in 30 second increments (Probably 36 second increments, + as 0.01 of an hour is 36 seconds). + Residents teleporting to a parcel where they are banned + will be redirected to a neighboring parcel. + + + + llAddToLandPassList(key avatar, float hours); + + Add avatar to the land pass list for hours. + + + + llAdjustSoundVolume(float volume); + + Adjusts the volume of the currently playing attached sound started + with llPlaySound or llLoopSound. + This function Has no effect on sounds started with llTriggerSound. + + + + llAllowInventoryDrop(integer add); + + If add == TRUE, users that do no have object modify permissions can + still drop inventory items onto object. + + boolean, If TRUE allows anyone to drop inventory on prim, FALSE revokes. + + + + + float llAngleBetween(rotation a, rotation b); + + Returns the angle in radians between rotations a and b. + + + + llApplyImpulse(vector force, integer local); + + Applies the impulse in local coordinates if local == TRUE. + Otherwise the impulse is applied in global coordinates. + This function only works on physical objects. + + + boolean, if TRUE, force is treated as a local directional vector instead of region directional vector. + + + + + llApplyRotationalImpulse(vector force, integer local); + + Applies a rotational impulse force in local coordinates if local == TRUE. + Otherwise the impulse is applied in global coordinates. + This function only works on physical objects. + + + boolean, if TRUE, uses local axis, if FALSE, uses region axis. + + + + + float llAsin(float val); + + Returns the arcsine in radians of val. + + + + float llAtan2(float y, float x); + + returns the arctangent2 of y, x + + + + llAttachToAvatar(integer attachment); + + Attach to avatar at point attachment. + Requires the PERMISSION_ATTACH runtime permission. + + + + + void llAttachToAvatarTemp(integer AttachPoint); + + As llAttachToAvatar, with the exception that the object will not create new inventory for the user, and will disappear on detach or disconnect. + + + + + key llAvatarOnLinkSitTarget(integer iLinkNumber); + + Returns a key that is the UUID of the user seated on the specified link's prim. + + + + key llAvatarOnSitTarget(void); + + If an avatar is sitting on the sit target, return the avatars key, + NULL_KEY otherwise. This only will detect + avatars sitting on sit targets defined with llSitTarget. + + + + rotation llAxes2Rot(vector fwd, vector left, vector up); + + Returns the rotation represented by coordinate axes fwd, left, and up. + + + + rotation llAxisAngle2Rot(vector axis, float angle); + + Returns the rotation generated angle about axis. + + + + integer llBase64ToInteger(string str); + + Little endian decode the 8 character Base64 string str into an integer. + + + + string llBase64ToString(string str); + + Converts a Base 64 string to a conventional string. + If the conversion creates any unprintable characters, they are converted to question marks (this behavior is different then llUnescapeURL). + + + + llBreakAllLinks(void); + + Delinks all objects in the link set. + Requires the permission PERMISSION_CHANGE_LINKS be set. + + + + llBreakLink(integer linknum); + + Delinks the object with the given link number. + Requires permission PERMISSION_CHANGE_LINKS be set. + + + + list llCastRay( vector start, vector end, list options ); + + Return value: [UUID_1, {link_number_1}, hit_position_1, {hit_normal_1}, UUID_2, {link_number_2}, hit_position_2, {hit_normal_2}, ... , status_code] where {} indicates optional data. + + + + list llCSV2List(string src); + + Create a list from a string of comma separated values specified in src. + + + + integer llCeil(float val); + + Returns largest integer value >= val. + + + + llClearCameraParams(void); + + Resets all camera parameters to default values and turns off scripted camera control. + + + + integer llClearLinkMedia(integer Link, integer Face); + + Clears (deletes) the media and all parameters from the given prim face. + Returns an integer that is a STATUS_* flag which details the success/failure of the operation. + Link number + Face number + + + + integer llClearPrimMedia(integer Face ); + + Clears (deletes) the media and all params from the given Face. + Returns an integer that is a STATUS_* flag which details the success/failure of the operation. + Face number + + + + llCloseRemoteDataChannel(key channel); + + Closes XML-RPC channel. + + + + float llCloud(vector offset); + + Returns the cloud density at the object position + offset. + + + + llCollisionFilter(string name, key id, integer accept); + + If accept == TRUE, only accept collisions with objects name and id, + otherwise with objects not name or id. + Specify an empty string or NULL_KEY to not filter + on the corresponding parameter. + + + + If TRUE, only accept collisions with objects name AND id + (either is optional), otherwise with objects not name AND id + + + + + llCollisionSound(string impact_sound, float impact_volume); + + Suppress default collision sounds, replace default impact sounds + with impact_sound found in the object inventory. + Supply an empty string to suppress collision sounds. + + + + llCollisionSprite(string impact_sprite); + + Suppress default collision sprites, replace default impact sprite + with impact_sprite found in the object inventory. + Supply an empty string to just suppress. + + + + float llCos(float theta); + + Returns the cosine of thetaradians. + + + + void llCreateCharacter(list Options); + + Creates a path-finding entity, known as a "character", from the object containing the script. Required to activate use of path-finding functions. + Options is a list of key/value pairs. + + + + llCreateLink(key target, integer parent); + + Attempt to link object script is attached to and target. + Requires permission PERMISSION_CHANGE_LINKS be set. + If parent== TRUE, object script is attached to is the root. + + + + + + void llDeleteCharacter(void); + + Convert the current link-set back to a standard object, removing all path-finding properties. + + + + list llDeleteSubList(list src, integer start, integer end); + + Remove the slice from the list and return the remainder. + The start and end are inclusive, so 0, length -1 would delete the + entire list and 0,0 would delete the first list entry. + Using negative numbers for start and/or end causes the index to count + backwards from the length of the list, so 0,-1 would delete the entire + list. If start is larger than end the list deleted is the exclusion + of the entries, so 6,4 would delete the entire list except + for the 5th list entry. + + + + string llDeleteSubString(string src, integer start, integer end); + + Removes the indicated substring and returns the result. + The start and end are inclusive, so 0,length-1 would + delete the entire string and 0,0 would delete the first character. + Using negative numbers for start and/or end causes the index to + count backwards from the length of the string, so 0,-1 would + delete the entire string. If start is larger than end the sub string + is the exclusion of the entries, so 6,4 would delete the entire string + except for the 5th character. + + + + llDetachFromAvatar(void); + + Drop off of avatar. + + + + vector llDetectedGrab(integer number); + + Returns the grab offset of detected object number. + Returns <0,0,0> if number is not valid sensed object. + + + + integer llDetectedGroup(integer number); + + Returns TRUE if detected object or agent number has the same + user group active as this object. + It will return FALSE if the object or agent is in the group, + but the group is not active. + + + + key llDetectedKey(integer number); + + Returns the key of detected object number. + Returns NULL_KEY if number is not valid sensed object. + + + + integer llDetectedLinkNumber(integer number); + + Returns the link position of the triggered event for touches. + 0 for a non-linked object, 1 for the root of a linked + object, 2 for the first child, etc. + + + + string llDetectedName(integer number); + + Returns the name of detected object number. + Returns empty string if number is not valid sensed object. + + + + key llDetectedOwner(integer number); + + Returns the key of detected number objects owner. + Returns invalid key if number is not valid sensed object. + + + + vector llDetectedPos(integer number); + + Returns the position of detected object number. + Returns <0,0,0> if number is not valid sensed object. + + + + rotation llDetectedRot(integer number); + + Returns the rotation of detected object number. + Returns <0,0,0,1> if number is not valid sensed object. + + + + vector llDetectedTouchBinormal( integer index ); + + Returns a vector that is the surface binormal + (tangent to the surface) where the touch event was triggered. + + Index of detection information + + + + + integer llDetectedTouchFace( integer index ); + + Returns an integer that is the index of the face the avatar clicked on. + + Index of detection information + + + + + vector llDetectedTouchNormal( integer index ); + + Returns a vector that is the surface normal + (perpendicular to the surface) where the touch event was triggered. + + Index of detection information + + + + + vector llDetectedTouchPos( integer index ); + + Returns a vector that is the position where the object + was touched in region coordinates, unless it is attached to + the HUD, in which case it returns the position relative + to the attach point. + + Index of detection information + + + + + vector llDetectedTouchST( integer index ); + + Returns a vector that is the surface coordinates for where the prim was touched. + The x and y vector positions contain the horizontal (s) and vertical (t) face + coordinates respectively. + Each component is in the interval [0.0, 1.0]. + + TOUCH_INVALID_TEXCOORD is returned when the surface coordinates cannot be determined. + + Index of detection information + + + + + vector llDetectedTouchUV( integer index ); + + Returns a vector that is the texture coordinates for where + the prim was touched. The x and y vector positions contain + the u and v face coordinates respectively. + + TOUCH_INVALID_TEXCOORD is returned + when the touch UV coordinates cannot be determined. + + Index of detection information + + + + + integer llDetectedType(integer number); + + Returns the type (AGENT, ACTIVE, PASSIVE, SCRIPTED) of detected object + number. Returns 0 if number is not valid sensed object. + Note that number is a bitfield, so comparisons need to be a bitwise + and check. eg: + integer type = llDetectedType(0); + if (type and AGENT) + { + // ...do stuff with the agent + } + + + + vector llDetectedVel(integer number); + + Returns the velocity of detected object number. + Returns <0,0,0 and > + if number is not valid sensed object. + + + + llDialog(key avatar, string message, list buttons, integer channel); + + Opens a "notify box" in the top-right corner of the given avatars + screen displaying the message. Up to four + buttons can be specified in a list of strings. When the player + clicks a button, the name of the button is chatted on + the specified channel. Channels work just like llSay(), + so channel 0 can be heard by everyone. The chat + originates at the objects position, not the avatars position. e.g. + llDialog(who, "Are you a boy or a girl?", [ "Boy", "Girl" ], 4913); + llDialog(who, "This shows only an OK button.", [], 192); + llDialog(who, "This chats so you can hear it.", ["Hooray"], 0); + + + + llDie(void); + + Delete the object which holds the script. + + + + string llDumpList2String(list src, string separator); + + Write the list out in a single string using separator between values. + + + + integer llEdgeOfWorld(vector pos, vector dir); + + Returns TRUE if the line along dir from pos hits the edge + of the world in the current simulator and returns + FALSE if that edge crosses into another simulator. + + + + llEjectFromLand(key pest); + + Ejects pestfrom land that you own. + + + + llEmail(string address, string subject, string message); + + Sends email to address with subject and message. + + + + string llEscapeURL(string url); + + Returns the string that is the URL-escaped version of url + (replacing spaces with %20, etc). + This function returns the UTF-8 encoded escape codes + for selected characters. + + + + rotation llEuler2Rot(vector vec); + + Returns the rotation represented by Euler Angle vec. + + + + void llEvade(key TargetID, list Options); + + Characters will (roughly) try to hide from their pursuers if there is a good hiding spot along their fleeing path. Hiding means no direct line of sight from the head of the character (centre of the top of its physics bounding box) to the head of its pursuer and no direct path between the two on the navigation-mesh. + Agent or object to evade. + No options yet. + + + + void llExecCharacterCmd(integer Command, list Options); + + Send a command to the path system. + Currently only supports stopping the current path-finding operation or causing the character to jump. + Command to send. + Height for CHARACTER_CMD_JUMP. + + + + float llFabs(float val); + + Returns the absolute value of val. + + + + void llFleeFrom(vector Source, float Distance, list Options); + + Directs a character (llCreateCharacter) to keep away from a defined position in the region or adjacent regions. + Global coordinate from which to flee. + Distance in meters to flee from the source. + No options available at this time. + + + + integer llFloor(float val); + + Returns largest integer value<= val. + + + + llForceMouselook(integer mouselook); + + After calling this function with mouselook set to TRUE, + any agent sitting down on the prim will be forced into mouselook. + Just like llSitTarget, this changes a permanent property + of the prim (not the object) and needs to be reset by calling + this function with mouselook set to FALSE in order to disable it. + + boolean, if TRUE when an avatar sits on the prim, + the avatar will be forced into mouselook mode. + FALSE is the default setting and will undo + a previously set TRUE or do nothing. + + + + + float llFrand(float mag); + + Returns a pseudo-random number between [0, mag). + + + + key llGenerateKey(void); + + Generates a key (SHA-1 hash) using UUID generation to create a unique key.\n + As the UUID produced is versioned, it should never return a value of NULL_KEY.\nThe specific UUID version is an implementation detail that has changed in the past and may change again in the future. Do not depend upon the UUID that is returned to be version 5 SHA-1 hash. + + + + vector llGetAccel(void); + + Gets the acceleration. + + + + integer llGetAgentInfo(key id); + + Returns information about the given agent id. Returns a bitfield + of agent info constants. + + + + string llGetAgentLanguage( key avatar ); + + Returns a string that is the language code of the preferred interface language of the user avatar. + + + + list llGetAgentList( integer Scope, list Options ); + + Returns a list of agents from the specified scope (parcel, owner's parcel, region). + + + + vector llGetAgentSize(key id); + + If the agent id is in the same sim as the object, returns + the size of the avatar. + + + + float llGetAlpha(integer face); + + Returns the alpha of the given face. If face is ALL_SIDES + the value returned is the mean average of all faces. + + + + float llGetAndResetTime(void); + + Gets the time in seconds since creation and sets the time to zero. + + + + string llGetAnimation(key id); + + Returns the currently playing animation for avatar id. + + + + list llGetAnimationList(key id); + + Returns a list of keys of all playing animations for avatar id. + + + + string llGetAnimationOverride(string AnimationState); + + Returns the name of the animation used for specified animation state. + + + + integer llGetAttached(void); + + Returns the object attachment point or 0 if not attached. + + + + list llGetBoundingBox(key object); + + Returns the bounding box around the object or avatar with + the key object (including any linked prims) relative to the + root prim, in a list: [ (vector) min_corner, (vector) max_corner ] + + + + vector llGetCameraPos(void); + Returns the position of the camera of the user that granted the + script PERMISSION_TRACK_CAMERA. If no user has granted the permission, + it returns ZERO_VECTOR. + + + + rotation llGetCameraRot(void); + + Returns the rotation of the camera of the user who's granted + this script PERMISSION_TRACK_CAMERA. If no user has granted the + permission, it returns ZERO_ROTATION. The key of the user whose + camera is being tracked can be obtained using llGetPermissionsKey. + + + + vector llGetCenterOfMass(void); + + Returns the center of mass of the root object. + + + + list llGetClosestNavPoint(vector Point, list Options); + + The function accepts a point in region-local space (like all the other path-finding methods) and returns either an empty list or a list containing a single vector which is the closest point on the navigation-mesh to the point provided. + A point in region-local space. + No options at this time. + + + + vector llGetColor(integer face); + + Returns the color of face as a vector of red, green, and blue values + between 0 and 1. If face is ALL_SIDES + the color returned is the mean average of each channel. + + + + key llGetCreator(void); + + Returns the key of the object's original creator. Similar to llGetOwner. + + + + string llGetDate(void); + + Returns the current UTC date as YYYY-MM-DD. + + + + string llGetDisplayName( key id ); + + Returns a string that is the non-unique display name of the avatar specified by id. + • key id – avatar UUID that is in the same region or is otherwise known to the region + + id must specify a valid avatar key, present in or otherwise known to the sim in which the script is running, otherwise an empty + string is returned. This function will still return a valid display name if the avatar is a child agent of the sim + (i.e., in an adjacent sim, but presently able to see into the one the script is in), or for a short period after the avatar + leaves the sim (specifically, when the client completely disconnects from the sim, either as a main or child agent). + + + + float llGetEnergy(void); + + Returns how much energy is in the object as a percentage of maximum. + + + + string llGetEnv( string name ); + + Returns a string with the requested data about the region. + • string name – The name of the data to request + Table of valid name values. Name ↓ Description + "sim_channel" Get the current region's channel string, for example "Second Life Server" + "sim_version" Get the current region's version number string, for example "10.11.30.215699" + + + + vector llGetForce(void); + + Returns the current force if the script is physical. + + + + integer llGetFreeMemory(void); + + Returns the available heap space for the current script. + + + + integer llGetFreeURLs( ); + + Returns an integer that is the number of available URLs. + + + + vector llGetGeometricCenter(void); + + Returns the geometric center of the linked set the + script is in relative to the object's position + (the position of the root prim of a linked set). + To get the object's position, use llGetPos. + + + + float llGetGMTclock(void); + + Gets the time in seconds since midnight in GMT/UTC. + + + + string llGetHTTPHeader( key request_id, string header ); + + Returns a string that is the value for header for request_id. + A valid HTTP request key + Header value name + + + + key llGetInventoryCreator(string item); + + This function returns the UUID of the creator of item. + If item is not found in inventory, + the object says "No item named 'name' ". + + + + key llGetInventoryKey(string name); + + Returns the key of the inventory name. + + + + string llGetInventoryName(integer type, integer number); + + Get the name of the inventory item number of type. + Use the inventory constants to specify the type. + inventory item type + + inventory item number + + + + + integer llGetInventoryNumber(integer type); + + Get the number of items of type in the object inventory. + Use the inventory constants to specify the type. + inventory item type + + + + integer llGetInventoryPermMask(string item, integer mask); + + Returns the requested permission mask for the inventory + item defined by item. If item is not in the object's inventory, + llGetInventoryPermMask returns 0 and causes the object to + say "No item named '<item>'", where "<item>" is item. + If this is used to determine whether or not an inventory item + exists within the object, it will have the side effect of spamming chat. + inventory item + MASK_BASE, MASK_OWNER, MASK_GROUP, MASK_EVERYONE or MASK_NEXT + + + + integer llGetInventoryType(string name); + + Returns the type of the inventory item name. + Remember, like the other inventory functions, llGetInventoryType + is case-sensitive. + + + + key llGetKey(void); + + Get the key for the object which has this script. + + + + key llGetLandOwnerAt(vector pos); + + Returns the key of the land owner at pos or NULL_KEY if public. + + + + key llGetLinkKey(integer linknum); + + Returns the key of linknum in the link set. + + + + list llGetLinkMedia(integer LinkNumber, integer Face, list Parameters); + + Get the desired list of named media parameters, for a particular face, of a linked prim. + Returns a list of values in the order requested. + Link number (0: unlinked, 1: root prim, >1: child prims) or a LINK_* flag + The prim's side number + A list of PRIM_* property constants to return values of. + + + + string llGetLinkName(integer linknum); + + Returns the name of linknumin the link set. + + + + integer llGetLinkNumber(void); + + Returns what link number in a link set the for the object + which has this script. 0 means no link, 1 the root, 2 for + first child, etc. + + + + integer llGetLinkNumberOfSides( integer link ); + + Returns an integer that is the number of faces (or sides) of the prim link. + • integer link – Link number (0: unlinked, 1: root prim, >1: child prims) or a LINK_* flag + + + + list llGetLinkPrimitiveParams( integer link, list params ); + + Identical to llGetPrimitiveParams except that it acts on the prim specified by the link number given. + Returns the list of primitive attributes requested in the params list for link + • integer link – Link number (0: unlinked, 1: root prim, >1: child prims) or a LINK_* flag to get the parameters of + • list params – PRIM_* flags + + PRIM_* flags can be broken into three categories, face flags, prim flags, and object flags. + + * Supplying a prim or object flag will return that flags attributes. + * Face flags require the user to also supply a side parameter. + to get the parameters of + a list of PRIM_* flags + + + + integer llGetListEntryType(list src, integer index); + + Returns the type of the variable at index in src. + + + + integer llGetListLength(list src); + + Returns the number of elements in src. + + + + vector llGetLocalPos(void); + + Returns the local position of a child object relative to the root. + + + + rotation llGetLocalRot(void); + Returns the local rotation of a child object relative to the root. + + + + float llGetMass(void); + + Returns the scripted object's mass. When called from a script + in a linkset, the parent will return the sum of the linkset weights, + while a child will return just its own mass. When called from + a script inside an attachment, this function will return the mass + of the avatar it's attached to, not its own. + + + + float llGetMassMKS() + + Acts as llGetMass(), except that the units of the value returned are Kg. + + + + integer llGetMemoryLimit(void); + + Get the maximum memory a script can use. + Returns the integer amount of memory the script can use in bytes. + + + + llGetNextEmail(string address, string subject); + + Get the next waiting email with appropriate addressand/or subject. + If the parameters are blank, they are not used for filtering. + + + + key llGetNotecardLine(string name, integer line); + + This function fetches line number line of notecard name and returns + the data through the dataserver event. The line count starts at zero. + If the requested line is past the end of the notecard the dataserver + event will return the constant EOF string. + The key returned by this function is a unique identifier which will + be supplied to the dataserver event in the requested parameter. + + + + key llGetNumberOfNotecardLines(string name); + + Returns number of lines in the notecard name via the dataserver event. + (Cast the value returned by the dataserver to an integer.) + The key returned is a query id for identifying the dataserver reply. + + + + integer llGetNumberOfPrims(void); + + Returns the number of prims in (and avatars seated on) + the object the script is in. + + + + integer llGetNumberOfSides(void); + + Returns the number of sides of the current object which has the script. + + + + string llGetObjectDesc(void); + + Returns the description of the scripted object/prim. + You can set the description using llSetObjectDesc. + + + + list llGetObjectDetails(key id, list params); + + Returns a list of the details specified in params for the object with key id. + + prim or avatar UUID that is in the same region + + + list of OBJECT_* flags + + + + + float llGetObjectMass(key id); + + Gets the mass of the object or avatar corresponding to id. + + + + string llGetObjectName(void); + + Returns the name of the object which has the script. + + + + integer llGetObjectPermMask(integer mask); + + Returns the requested permission mask for the root object + the task is attached to. + + + + + integer llGetObjectPrimCount(key id); + + Returns the prim count for any object id in the same sim. + + + + vector llGetOmega(void); + + Returns the omega. + + + + key llGetOwner(void); + + Returns the owner of the object. + + + + key llGetOwnerKey(key id); + + Returns the owner of object id. + + + + list llGetParcelDetails(vector pos, list details); + + Returns of a list of the details in the order they are in the details list, + for the parcel at pos. pos is in absolute region coordinates. + + + + integer llGetParcelFlags(vector pos); + + Returns a bitfield specifying the parcel flags + (PARCEL_FLAG_*) for the parcel under the position pos. + + + + integer llGetParcelMaxPrims(vector pos, integer sim_wide); + + + + string llGetParcelMusicURL(void); + + Returns a string containing the parcel streaming audio URL. + The object owner (avatar or group) must also be the land owner. + + + + integer llGetParcelPrimCount(vector pos, integer category, integer sim_wide); + + Returns the number of prims used on the parcel at pos which are in category. + + If sim_wide is TRUE, it returns the number of objects + for the entire sim in the category specified. + If sim_wide is FALSE, it returns the number of objects + on this specific parcel in the category specified + region coordinate + + a PARCEL_COUNT_* flag + + Can be TRUE or FALSE + + + + list llGetParcelPrimOwners(vector pos); + + Returns a strided list of keys and integers of up to 100 + agents who own objects in the parcel at pos. + The list is formatted as + [ key agentKey1, integer agentCount1, key agentKey2, integer agentCount2, ... ], + sorted by agent key. + The integers are counts of the number of prims (not objects) + owned by the corresponding agents. + Sleeps the script for 2.0 seconds. + Function only works when the object owner is in the sim + (likely the reason it doesn't work when deeded to group). + + + + integer llGetPermissions(void); + + Returns what permissions have been enabled.eg: + + integer perm = llGetPermissions(); + if((perm and PERMISSION_DEBIT) == PERMISSION_DEBIT) + { + // code goes here + } + + + + key llGetPermissionsKey(void); + + Returns avatar that has enabled permissions. + Returns NULL_KEY if not enabled. + + + + list llGetPhysicsMaterial() + + Returns a list of the form [float gravity_multiplier, float restitution, float friction, float density]. + + + + vector llGetPos(void); + + Returns the position. + + + + list llGetPrimitiveParams(list params); + + Returns primitive parameters specified in the params list. + + + + list llGetPrimMediaParams( integer face, list params ); + + Get the media params for a particular face on an object, given the desired list of names. + + Returns a list of values in the order requested. + face number + a set of names (in no particular order) + + Returns an empty list if no media exists on the face. + + + + integer llGetRegionAgentCount(void); + + Returns an integer that is the number of avatars in the region. + + + + vector llGetRegionCorner(void); + + Returns the RegionCorner of the simulator containing the task. + + + + integer llGetRegionFlags(void); + + Returns a bitfield specifying the region flags + (REGION_FLAG_*) for the region the object is in. + + + + llGetRegionFPS(void); + + Returns the mean region frames per second. + + + + string llGetRegionName(void); + + Returns the current region name. + + + + float llGetRegionTimeDilation(void); + + Returns the current time dilation as a float between 0 and 1. + + + + vector llGetRootPosition(void); + + Gets the position (in region coordinates) + of the root/parent prim of the object containing the script. + This is used to allow a child prim to determine where the root is. + + + + rotation llGetRootRotation(void); + + Gets the global rotation of the root object of the + object script is attached to. + + + + rotation llGetRot(void); + + Returns the rotation. + + + + integer LlGetSPMaxMemory( ); + + Returns the integer of the most bytes used while llScriptProfiler was last active. + + + + vector llGetScale(void); + + Returns the scale. + + + + string llGetScriptName(void); + + Returns the name of this script. + + + + integer llGetScriptState(string name); + + Resets TRUE if script name is running + + + + float llGetSimStats(integer StatType); + + Returns a float that is the requested statistic. + Statistic type. Currently only SIM_STAT_PCT_CHARS_STEPPED is supported. + + + + string llGetSimulatorHostname(void); + + Returns the host name (server) of the sim + in which the scripted object is located. + For example, "sim225.agni.lindenlab.com". + + + + integer llGetStartParameter(void); + + Returns the start parameter passed to llRezObject. + If the object was created from agent inventory, this function + returns 0. + + + + list llGetStaticPath(vector Start, vector End, float Radius, list Parameters); + + Returns a list of position vectors indicating pathfinding waypoints between positions at start and end, for a character of a given radius. The waypoints this function returns are for the 'static' nav mesh, meaning that objects set to "movable obstacle" or "movable phantom" are ignored. + + + + integer llGetStatus(integer status); + + Returns the value of status. + The value will be one of the status constants. + + + + string llGetSubString(string src, integer start, integer end); + + Returns the indicated substring from src. The startand end are + inclusive, so 0,length-1 would capture the entire string and 0,0 + would capture the first character. Using negative numbers for + start and/or end causes the index to count backwards from the length + of the string, so 0,-1 would capture the entire string. + If start is larger than end the sub string is the exclusion of the + entries, so 6,4 would give the entire string + except for the 5th character. + + + + vector llGetSunDirection(void); + + Returns the sun direction on the simulator. + + + + string llGetTexture(integer face); + + Returns the texture of face if it is found in object inventory. + + + + vector llGetTextureOffset(integer side); + + Returns the texture offset of side in the x and y components of a vector. + + + + float llGetTextureRot(integer side); + + Returns the texture rotation of side. + + + + vector llGetTextureScale(integer side); + + Returns the texture scale of sidein the x and y components of a vector. + + + + float llGetTime(void); + + Returns the time in seconds since creation of this script. + + + + float llGetTimeOfDay(void); + + Gets the time in seconds since midnight in Second Life. + + + + string llGetTimestamp(void); + + Returns the current time-and-date (a timestamp) + in the format YYYY-MM-DDThh:mm:ss.ff..fZ, + for example: 2004-08-27T00:56:21.785886Z + The letter Z stands for Zulu, + the military time zone name for UTC. T is just + a separator between date and time. + + + + vector llGetTorque(void); + + Returns the torque if the script is physical. + + + + integer llGetUnixTime(void); + + Returns the number of seconds elapsed since 00:00 hours, + Jan 1, 1970 UTC from the system clock. + In UNIX terms, time_t. This is great for a monotonic + source of time that ticks once a second. + + + + integer llGetUsedMemory( ); + + Returns the integer of the number of bytes of memory currently in use by the script. + + + + string llGetUsername( key id ); + + Returns a string that is the unique username of the avatar specified by id. + • key id – avatar UUID that is in the same region or is otherwise known to the region + + id must specify a valid avatar key, present in or otherwise known to the sim in which the script is running, + otherwise an empty string is returned. This function will still return a valid username if the avatar is a child agent + of the sim (i.e., in an adjacent sim, but presently able to see into the one the script is in), or for a short period + after the avatar leaves the sim (specifically, when the client completely disconnects from the sim, either as a main + or child agent). + + + + vector llGetVel(void); + + Returns the velocity. + + + + float llGetWallclock(void); + + Returns the time in seconds since simulator timezone midnight. + + + + llGiveInventory(key destination, string inventory); + + Give the named inventory item to the keyed avatar or object in the + same simulator as the giver. If the recipient is an avatar, + the avatar then follows the normal procedure of accepting + or denying the offer. If the recipient is an object, + the same permissions apply as if you were dragging inventory + onto the object by hand, ie if llAllowInventoryDrop has been called + with TRUE, any other object can pass objects to its inventory. + + + + llGiveInventoryList(key destination, string category, list inventory); + + Give the list of named inventory items to the keyed avatar or object + in the same simulator as the giver. If the recipient is an avatar, + the avatar then follows the normal procedure of accepting or denying + the offer. The offered inventory is then placed in a folder named + category in the recipients inventory. If the recipient is an object, + the same permissions apply as if you were dragging inventory onto the + object by hand, ie if llAllowInventoryDrop has been called with TRUE, + any other object can pass objects to its inventory.If the + recipient is an object, the category parameter is ignored. + + + + llGiveMoney(key destination, integer amount); + + Transfer amount from the script owner to destination. + This call will fail if PERMISSION_DEBIT has not been set. + + + + float llGround(vector offset); + + Retuns the ground hieght at the object position + offset. + + + + vector llGroundContour(vector offset); + + Retuns the ground contour at the object position + offset. + + + + vector llGroundNormal(vector offset); + + Retuns the ground contour at the object position + offset. + + + + llGroundRepel(float height, integer water, float tau); + + Critically damps to height if within height* 0.5 of level. + The height is above ground level if water + is FALSE or above the higher of land and water if water is TRUE. + Do not use with vehicles. Only works in physics-enabled objects. + + Distance above the ground + + + boolean, if TRUE then hover above water too. + + + seconds to critically damp in + + + + + vector llGroundSlope(vector offset); + + Returns the ground slope at the object position + offset. + + + + key llHTTPRequest(string url, list parameters, string body); + + Sends HTTP request to url with the specified body and parameters. + + url must always be a valid HTTP or HTTPS URL, pointing to a + location outside the Linden Lab and Second Life servers. + + + + void llHTTPResponse( key request_id, integer status, string body ); + + Responds to request_id with status and body. + A valid HTTP request key + HTTP Status (200, 400, 404, etc) + Contents of the response + + + + string llInsertString(string dst, integer position, string src); + + Inserts src into dst at position and returns the result. + + + + llInstantMessage(key user, string message); + + Send message to the user as an instant message. + + + + string llIntegerToBase64(integer number); + + Encodes number as an 8-character Base64 string. + + + + list llJson2List( string sJSON ); + + This function takes a string representing JSON, and returns a list of the top level. + Returns a list made by parsing src, a string representing json. + + + + string llJsonGetValue( string sJSON, list lSpecifiers ); + + Gets the value indicated by specifiers from the json string. + Returns a string made by parsing json, a string representing json and traversing as specified by specifiers. + + + + string llJsonSetValue( string sJSON, list lSpecifiers, string sValue ); + + Returns a new JSON string which is string with the value indicated by specifiers set to value. + Returns a string + + + + string llJsonValueType( string sJSON, list lSpecifiers ); + + Gets the JSON type for the value in json at the location specifiers. + Returns the string specifying the type of the value at specifiers in json. + + + + string llKey2Name(key id); + + If object id is in the same simulator, return the name of the object. + + + + llLinkParticleSystem( integer link, list rules ); + + A particle system defined by a list of rules is set for the prim(s) link. + This is identical to llParticleSystem except that it applies to a + specified linked prim and not just the prim the script is in. + + Link number (0: unlinked, 1: root prim, >1: child prims) or a LINK_* flag + Particle system rules list in the format [ rule1, data1, rule2, data2 . . . ruleN, dataN ] + + + + llLinkSitTarget(integer iLinkNumber, vector vOffset, rotation rRotation); + + Set the sit location for the linked prim(s). The sit location is relative to the prim's position and rotation. + Link number (0: unlinked, 1: root prim, >1: child prims) or a LINK_* flag of the prim. + Position for the sit target, relative to the prim's position. + Rotation (relative to the prim's rotation) for the avatar. + + + + string llList2CSV(list src); + + Create a string of comma separated values from list. + + + + float llList2Float(list src, integer index); + + Returns the float at index in the list src. + + + + integer llList2Integer(list src, integer index); + + Returns the integer at index in the list src. + + + + string llList2Json( string sType, list lValues ); + + This function takes a list and returns a JSON string of that list as either a json object or json array. + Returns a string that is either values serialized as a JSON type, or if an error was encountered JSON_INVALID. + + + + key llList2Key(list src, integer index); + + Returns the key at index in the list src. + + + + list llList2List(list src, integer start, integer end); + + Returns the slice of the list from start to end of the list + src as a new list. The start and end parameters + are inclusive, so 0,length-1 would copy the entire list and 0,0 + would capture the first list entry. Using negative + numbers for startand/or end causes the index to count backwards + from the length of the list, so 0,-1 would + capture the entire list. If start is larger than end the list + returned is the exclusion of the entries, so 6,4 would + give the entire list except for the 5th entry. + + + + list llList2ListStrided(list src, integer start, integer end, integer stride); + + Copy the strided slice of src from start to end. + + + + rotation llList2Rot(list src, integer index); + + Returns the rotation at index in src. + + + + string llList2String(list src, integer index); + + Returns the string at index in src. + + + + llList2Vector(list src, integer index); + + Returns the vector at index in src. + + + + integer llListFindList(list src, list test); + + Returns the position of the first instance of testin src. + Returns -1 if test is not in src. + + + + list llListInsertList(list dest, list src, integer pos); + + Returns the list created by inserting src into dest at pos. + + + + list llListRandomize(list src, integer stride); + + Returns srcrandomized into blocks of size stride. + If the length of src divided by stride is non-zero, + this function does not randomize the list. + + + + list llListReplaceList(list dest, list src, integer start, integer end); + + Returns a list replacing the slice of the list dest from + start to end with the list src. start and end are inclusive, + so 0, 1 would replace the first two entries + and 0, 0 would replace only the first list entry. + + + + list llListSort(list src, integer stride, integer ascending); + + Returns src sorted into blocks of stride in ascending order if + ascending is TRUE. Note that sort only + works in the head of each sort block is the same type. + list to sort + + blocks of stride length + + + TRUE ascending sort result, FALSE = descending sort result + + + + + float llListStatistics(integer operation, list input); + + This function allows a script to perform a statistical + operation as defined by operation on a list composed + of integers and floats. + + One of LIST_STAT_* values + + + + + integer llListen(integer channel, string name, key id, string msg); + + Sets a listen event callback for msg on channel from name and + returns an identifier that can be used to + deactivate or remove the listen. The name, id and/or msg parameters + can be blank to indicate not to filter on + that argument. Channel 0 is the public chat channel that all avatars + see as chat text. Channels 1 to 2,147,483,648 + are hidden channels that are not sent to avatars. + + + + llListenControl(integer number, integer active); + + Make a listen event callback active or inactive. Pass in the value + returned from llListen to the number parameter + to specify which event you are controlling. + Use boolean values to spcify active + + + + llListenRemove(integer number); + + Removes a listen event callback. Pass in the value returned from + llListen to the number parameter to specify + which event you are removing. + + + + llLoadURL(key avatar_id, string message, string url); + + llLoadURL displays a dialog box to the user offering + to load a web page using the default web browser. + + + + float llLog(float val); + + Returns the base e (natural) logarithm of val (value). + + + + float llLog10(float val); + + Returns the base 10 (common) logarithm of val (value). + + + + llLookAt(vector target, float strength, float damping); + + Cause object to point the forward axis toward target. + Good strength values are around half the mass of the + object and good damping values are less than 1/10th of the strength. + Asymmetrical shapes require smaller + damping. A strength of 0.0 cancels the look at. + + + + llLoopSound(string sound, flaot volume); + + Similar to llPlaySound, this function plays a sound attached to an + object, but will continuously loop that sound + until llStopSound or llPlaySound is called. Only one sound may be + attached to an object at a time. A second call + to llLoopSound with the same key will not restart the sound, but the + new volume will be used. This allows + control over the volume of already playing sounds. Setting the + volumeto 0 is not the same as calling + llStopSound; a sound with 0 volume will continue to loop. + To restart the sound from the beginning, call + llStopSound before calling llLoopSound again. + + + + llLoopSoundMaster(string sound, flaot volume); + + Behavior is identical to llLoopSound, with the addition of marking + the source as a "Sync Master", causing + "Slave" sounds to sync to it. If there are multiple masters within + a viewers interest area, the most audible one (a + function of both distance and volume) will win out as the master. + The use of multiple masters within a small area + is unlikely to produce the desired effect. + + + + llLoopSoundSlave(string sound, flaot volume); + + Behavior is identical to llLoopSound, + unless there is a "Sync Master" present. If a Sync Master is already + playing the Slave sound will begin playing from the same point + the master is in its loop syncronizing the loop + points of both sounds. If a Sync Master is started when the Slave + is already playing, the Slave will skip to the + correct position to sync with the Master. + + + + string llMD5String(string src, integer nonce); + + Performs a RSA Data Security, Inc. MD5 Message-Digest + Algorithm on string with nonce (also known as salt). + Returns a 32-character hex string. (128-bit in binary.) + + + + + + integer llManageEstateAccess(integer Action, key AvatarID); + + Use to add or remove agents from the estate's agent access or ban lists or groups from the estate's group access list. + Returns an integer representing a boolean, TRUE if the call was successful; FALSE if throttled, invalid action, invalid or null id or object owner is not allowed to manage the estate. + One of the ESTATE_ACCESS_ALLOWED_* actions. + UUID of the avatar or group to act upon. + + + + llMapDestination(string simname, vector position, vector lookat); + + Shows a given location on the map. + Works in attachments, or during touch events. + Currently the function will open the map window whenever it is called. + There is no way to simply set the map position without + opening the window. + + + + llMessageLinked(integer linknum, integer num, string str, key id); + + Sends num, str, and id to members of the link set. + The linknum parameter is either the linked number + available through llGetLinkNumber or a link constant. + + + + llMinEventDelay(float delay); + + Set the minimum time between events being handled. + + + + integer llModPow(integer a, integer b, integer c); + + Returns a raised to the b power, mod c. ( (a ^ b)%c ). + b is capped at 0xFFFF (16 bits). + + + + llModifyLand(integer action, integer size); + + Modify land with action on size area. + The parameters can be chosen from the land constants. + + LAND_LEVEL, LAND_RAISE, LAND_LOWER, LAND_SMOOTH, LAND_NOISE or LAND_REVERT + + + LAND_SMALL_BRUSH, LAND_MEDIUM_BRUSH or LAND_LARGE_BRUSH + + + + + llMoveToTarget(vector target, float tau); + + Critically damp to position target in tau-seconds if the + script is physical. Good tau-values are greater than 0.2. + A tau of 0.0 stops the critical damping. + + + + void llNavigateTo(vector Location, list Options); + + Directs an object to travel to a defined position in the region or adjacent regions. + Region coordinates for the character to navigate to. + List of parameters to control the type of path-finding used. Currently only FORCE_DIRECT_PATH supported. + + + + llOffsetTexture(float offset_s, float offset_t, integer face); + + Sets the texture s and t offsets of face. + If face is ALL_SIDES this function sets the texture offsets for + all faces. + + + + llOpenRemoteDataChannel(void); + + Creates a channel to listen for XML-RPC calls. + Will trigger a remote_data event with type = REMOTE_DATA_CHANNEL + and a channel ID (key) once it is available. + This channel ID must be referenced in the XML-RPC call + to the script (from the outside internet)-- + so the key must somehow get to the scripter's XML-RPC client, + most often via llEmail, llHttpRequest or llLoadUrl. + + + + integer llOverMyLand(key id); + + Returns TRUE if id is over land owned by the object owner, + FALSE otherwise. + + + + llOwnerSay(string message); + + Says message to only the owner of the object running the script + if the owner has been within the object's simulator since + logging into Second Life, regardless of where they may be are in-world. + + + + llParcelMediaCommandList(list command_list); + + Playing QuickTime movies (you have to own the land). + + + + list llParcelMediaQuery(list query_list); + + Queries the texture and/or URL for QuickTime-playable + video on the land parcel. + This function will only work if the script is contained + within an object owned by the landowner (or if the land + is owned by a group, only if the object has been deeded + to the group). It will not work for group land if the + object owner is a member of the group. The object + actually has to be owned by the group. + + + + list llParseString2List(string src, list separators, list spacers); + + Breaks src into a list, discarding anything in separators, + keeping any entry in spacers. The + separators and spacers must be lists of strings with a maximum + of 8 entries each. So, if you had made the + call: + llParseString2List("Parsethisnow! I dare:you to.", ["this", "!", " "], [":"]); + You would get the list: + ["Parse", "now", "I", "dare", ":", "you", "to"] + + + + list llParseStringKeepNulls(string src, list separators, list spacers); + + llParseStringKeepNulls works almost exactly the same as + llParseString2List, except that if a null is found + it will add a null string instead of discarding it + like llParseString2List does. + + + + llParticleSystem(list parameters); + + Makes a particle system based on the parameter list. + The parametersare specified as an ordered list of + parameter and value. Valid parameters and their expected + values can be found in the particle system constants. + Here is a simple example: + llParticleSystem([PSYS_PART_FLAGS, PSYS_PART_WIND_MASK, + PSYS_PART_START_COLOR, <1,0,0>, + PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_EXPLODE]); + + + + llPassCollisions(integer pass); + + If pass is TRUE, land and object collisions are passed from + children on to parents. + The default is FALSE if there is no script to handle the collision events. + + boolean, if TRUE, collisions are passed from children on to parents + + + + + llPassTouches(integer pass); + + If pass is TRUE, touches are passed from children on to parents. + The default is TRUE if there is no script to handle the touch events. + + boolean, if TRUE, touches are passed from children on to parents + + + + + void llPatrolPoints(list Points, list Options); + + Sets the points for a character (llCreateCharacter) to patrol along. + A list of vectors for the character to travel through sequentially. The list must contain at least two entries. + No options available at this time. + + + + llPlaySound(string sound, float volume); + + Plays a sound once. The sound will be attached to an object and + follow object movement. Only one sound may + be attached to an object at a time, and attaching a new sound or + calling llStopSound will stop the previously + attached sound. A second call to llPlaySound with the same sound + will not restart the sound, but the new + volume will be used, which allows control over the volume + of already playing sounds. To restart the sound from + the beginning, call llStopSound before calling llPlaySound again. + + + + llPlaySoundSlave(string sound, float volume); + + Behavior is identical to llPlaySound, unless there is + a "Sync Master" present. If a Sync Master is already + playing the Slave sound will not be played until the Master + hits its loop point and returns to the beginning. + llPlaySoundSlave will play the sound exactly once; if it is + desired to have the sound play every time the Master + loops, either use llLoopSoundSlave with extra silence padded + on the end of the sound or ensure that + llPlaySoundSlave is called at least once per loop of the Master. + + + + + + llPow(float base, float exp); + + Returns base raised to the exp. + + + + llPreloadSound(string sound); + + Preloads sound from object inventory on nearby viewers. + + + + void llPursue(key TargetID, list Options); + + Causes the character (llCharacter) to pursue the target defined by TargetID. + Agent or object to pursue. + Parameters for pursuit. + + + + llPushObject(key id, vector impulse, vector angular_impulse, integer local); + + Applies impulse and angular_impulse to object id. + + + + llRegionSay(integer channel, string text); + + Says the string text on channel number channel that can be heard + anywhere in the region by a script listening on channel. + + Any integer value other than zero + + + Message to be transmitted + + + + + llRegionSayTo( key target, integer channel, string msg ); + + Says the text supplied in string msg on channel supplied in integer channel to the object or avatar specified by target + • key target + • integer channel – output channel, any integer value + • string msg – message to be transmitted + + + + llReleaseControls(void); + + Stop taking inputs from avatar. + + + + llReleaseURL( string url ); + + Releases the specified URL, it will no longer be usable. + URL to release + + + + llRemoteDataReply(key channel, key message_id, string sdata, integer idata); + + Send an XML-RPC reply to the request with message_id + on channel with payload of string sdata and integer idata. + The size of sdata is limited to 254 characters. + + + + + + llRemoteLoadScriptPin(key target, string name, integer pin, integer running, integer start_param); + + If the owner of the object containing this script can modify + the object identified by the key target, and if the pin matches + the PIN previously set using llSetRemoteScriptAccessPin + (on the target prim), then the script name will be copied into target. + + + + llRemoveFromLandBanList(key avatar); + + Remove avatar from the land parcel ban list. + + + + llRemoveFromLandPassList(key avatar); + + Remove avatar from the land parcel pass list. + + + + llRemoveInventory(string inventory); + + Remove the named inventory item from the object inventory. + + + + llRemoveVehicleFlags(integer flags); + + Sets the vehicle flags to FALSE. Valid parameters can be found in the vehicle flags constants section. + + + + key llRequestAgentData(key id, integer data); + + This function requests data about agent id. If and when the information + is collected, the dataserver event is + called with the returned key returned from this function passed in + the requested parameter. See the agent data + constants for details about valid values of data and what each will + return in the dataserver event. + + + + key llRequestDisplayName( key id ); + + Requests the Display Name of the agent identified by id. When the Display Name is available the dataserver event will be raised. + The agent identified by id does not need to be in the same region or online at the time of the request. + Returns the key that is used to identify the dataserver event when it is raised. + • key id – avatar UUID + + + + key llRequestInventoryData(string name); + + Requests data from object inventory item name. When data is available + the dataserver event will be raised with + the key returned from this function in the requested parameter. + The only request currently implemented is to + request data from landmarks, where the data returned is in the + form "<float, float, float>" which can be cast to a + vector. This position is in region local coordinates. + + + + llRequestPermissions(key avatar, integer perm); + + Ask avatar to allow the script to do perm. The perm parameter should + be a permission constant. Multiple + permissions can be requested simultaneously by ORing the + constants together. Many of the permissions requests + can only go to object owner. This call will not stop script + execution -if the specified avatar grants the requested + permissions, the run_time_permissions event will be called. + + + + key llRequestSecureURL( ); + + Requests one HTTPS:// (SSL) url for use by this object. The http_request event is tiggered with results. + + Returns a key that is the handle used for identifying the request in the http_request event. + + + + key llRequestSimulatorData(string simulator, integer data); + + Requests data about the sim with the name simulator. + simulator is case-insensitive. + Returns a dataserver query ID and triggers the dataserver + event when data is found. The sim name is usually not case-sensitive, + but sometimes will return data for a similarly-named sim + if the supplied case doesn't match the intended sim's actual name. + + + + key llRequestURL( ); + + Requests one HTTP:// url for use by this script. The http_request event is triggered with the result of the request. + + Returns a key that is the handle used for identifying the result in the http_request event. + + + + key llRequestUsername( key id ); + + Requests the Username of the agent identified by id. When Username is available the dataserver event will be raised. + The agent identified by id does not need to be in the same region or online at the time of the request. + Returns a key that is used to identify the dataserver event when it is raised. + • key id – avatar UUID + + + + void llResetAnimationOverride(string AnimationState); + + Resets the animation override of the specified animation state to the corresponding default value. + + + + llResetLandBanList(void) + + Removes all residents from the land ban list. + + + + llResetLandPassList(void) + + Removes all residents from the land access/pass list. + + + + llResetScript(void); + + Resets this script. + + + + llResetOtherScript(string name); + + Resets the script name. + + + + llResetTime(void); + + Sets the internal timer to zero. + + + + integer llReturnObjectsByID(list ObjectIDs); + + Return objects using their UUIDs + + + + integer llReturnObjectsByOwner(key ID, integer Scope); + + Return objects based upon their owner and a scope of parcel, parcel owner, or region. + + + + llRezAtRoot(string inventory, vector pos, vector vel, rotation rot, integer param); + + Rezzes object's inventory item named inventory at + pos with velocity vel and rotation rot with start parameter param. + + + + llRezObject(string inventory, vector pos, vector vel, rotation rot, integer param); + + Creates object's inventory object at position pos with velocity + vel and rotation rot. The param value + will be available to the newly created object in the on_rez + event or through the llGetStartParameter library + function. The vel parameter is ignored if the rezzed object + is not physical. + + + + float llRot2Angle(rotation rot); + + Returns the rotation angle represented by rot. + + + + vector llRot2Axis(rotation rot); + + Returns the rotation axis represented by rot. + + + + vector llRot2Euler(rotation rot); + + Returns the Euler Angle representation of rot. + + + + vector llRot2Fwd(rotation rot); + + Returns the forward axis represented by rot. + + + + vector llRot2Left(rotation rot); + + Returns the left axis represented by rot. + + + + vector llRot2Up(rotation rot); + + Returns the up axis represented by rot. + + + + rotation llRotBetween(vector a, vector b); + + Returns the rotation needed to rotate ato b. + + + + llRotLookAt(rotation rot, float strength, float damping); + + Cause object to rotate to rot. Good strength values are around + half the mass of the object and good + damping values are less than 1/10th of the strength. + Asymmetrical shapes require smaller damping.A + strengthof 0.0 cancels the look at. + + + + integer llRotTarget(rotation rot, float error); + + Set object rotation within error of rotation as a rotational + target and return an integer number for the + target. The number can be used in llRotTargetRemove. + + + + llRotTargetRemove(integer number); + + Remove rotational target number. + + + + llRotateTexture(float radians, integer face); + + Sets the texture rotation of face to radians. + If face ALL_SIDES, rotate the texture of all faces. + + + + integer llRound(float val); + + returns val rounded to the nearest integer. + + + + integer llSameGroup(key id); + + Returns TRUE if the object or agen id is in the same simulator + and has the same active group as this object. + Otherwise, returns FALSE. + + + + void llSay(integer channel, string text); + Say text on channel. + Channel 0 is the public chat channel that all + avatars see as chat text. Channels 1 to 2,147,483,648 are private + channels that are not sent to avatars but other scripts can listen + for through the llListen api. + + Channel to use to say text on + + Text to say + + + + llScaleTexture(float horizontal, float vertical, integer side); + + Sets the horizontal and vertical repeats per face on side. + If side == ALL_SIDES, all sides are set in one call. + Negative values for horizontal and vertical will flip the texture. + + + + integer llScriptDanger(vector pos); + + Returns true if pos is over public land, land that doesn't allow everyone + to edit and build, or land that doesn't allow outside scripts. + + + + void llScriptProfiler(integer iState); + + Enables or disables the scripts profiling state. + PROFILE_NONE or PROFILE_SCRIPT_MEMORY flags to control the state. + + + + key llSendRemoteData(key channel, string dest, integer idata, string sdata); + + Send an XML-RPC request to dest (probably an URL) + through channel with payload of channel (in a string), + integer idata and string sdata. + + + + llSensor(string name, key id, integer type, float range, float arc); + + Performs a single scan for name and id with type within + range meters and arc radians of forward vector. + Specifying a blank name or NULL_KEY id will not filter + results for any particular name or id A range of 0.0 + does not perform a scan. The type parameter should be an + object type constant vlaue. + + + + llSensorRemove(void); + + Removes the sensor. + + + + llSensorRepeat(string name, key id, integer type, float range, float arc, float rate); + + Performs a repeating sensor scan for name and id with type + (AGENT, ACTIVE, PASSIVE, and/or SCRIPTED) within range meters and arc + radians of forward vector (name and/or id can be empty or 0). + A range of 0.0m does perform a scan. The parameters have the same + function as llSensor, except rate, which defines the number of + seconds between repeated sensor or no_sensor event calls. + + + + llSetAlpha(float alpha, integer face); + + Sets the alpha value for face. If face is ALL_SIDES, + set the alpha to all faces. The alpha value is interpreted + as an opacity percentage -1.0 is fully opaque, and 0.2 is + mostly transparent. This api will clamp alpha values + less 0.1 to .1 and greater than 1.0 to 1. + + + + void llSetAngularVelocity(vector vForce, integer iLocal); + + Applies angular (rotational) velocity to a physical object. + The force to apply. + If TRUE, the vForce is treated as a local directional vector instead of a regional directional vector. + + + + void llSetAnimationOverride(string AnimationState, string Animation); + + Set the animation that will play for the given animation state. + + + + llSetBuoyancy(float buoyancy); + + Set the object buoyancy. A value of 0 is none, + less than 1.0 sinks, 1.0 floats, and greater than 1.0 rises. + + + + llSetCameraAtOffset(vector offset); + + Sets the camera at offset used in this object + if an avatar sits on it. + + + + llSetCameraEyeOffset(vector offset); + + Sets the camera eye offset used in this object if an avatar sits on it. + + + + llSetCameraParams(list rules); + + Sets multiple camera parameters at once. + List format is [rule1, value1, rule2, value2 . . . ruleN, valueN] + + + + llSetClickAction(integer action); + + Sets the action performed when a prim is clicked upon. + + a CLICK_ACTION_* flag + + + + + llSetColor(vector color, integer face); + + Sets the color of face. If face is ALL_SIDES, set the color to all faces. + + + + void llSetContentType(key kRequestID, integer iCcontentType); + + Set the Internet media type of an LSL HTTP server response. ContentType accepts the constants CONTENT_TYPE_ATOM, CONTENT_TYPE_FORM, CONTENT_TYPE_HTML, CONTENT_TYPE_JSON, CONTENT_TYPE_LLSD, CONTENT_TYPE_RSS, CONTENT_TYPE_TEXT, CONTENT_TYPE_XHTML, and CONTENT_TYPE_XML. + + + + llSetDamage(float damage); + + Sets the amount of damage that will be done to an object + that this object hits. This object will be destoyed on + damaging another object. + + + + llSetForce(vector force, integer local); + + If the object is physical, this function sets the force. + The vector is in local coordinates if local is TRUE, global if + FALSE. + + directional force + + + boolean, if TRUE uses local axis, if FALSE uses region axis. + + + + + llSetForceAndTorque(vector force, vector torque, integer local); + + If the object is physical, this function sets the force and + torque. The vectors are in loal coordinates if local is + TRUE, global if FALSE. + + directional force + + + torque force + + + boolean, if TRUE uses local axis, if FALSE uses region axis. + + + + + llSetHoverHeight(float height, integer water, float tau); + + Critically damps to a height. The height is above ground + and water if water is TRUE. Only works with physics-enabled objects. + Do not use with vehicles. Use llStopHover to stop hovering. + + Distance above the ground + + + boolean, if TRUE then hover above water too. + + + seconds to critically damp in + + + + + llSetKeyframedMotion(list lKeyframes, list lOptions); + + Specify a list of times, positions, and orientations to be followed by an object. The object will be smoothly moved between key-frames by the simulator. Collisions with other nonphysical or keyframed objects will be ignored (no script events will fire and collision processing will not occur). Collisions with physical objects will be computed and reported, but the keyframed object will be unaffected by those collisions. + Strided key-frame list of the form: position, orientation, time. Each key-frame is interpreted relative to the previous transform of the object. + + + + + + + llSetLinkAlpha(integer linknumber, float alpha, integer face); + + Sets the side number face on the linked child linknumber + to the transparency alpha. + + + + void llSetLinkCamera(integer iLink, vector vEyeOffset, vector vLookOffset); + + Sets the camera eye offset, and the offset that camera is looking at, for avatars that sit on the linked prim. + + + + llSetLinkColor(integer linknumber, vector color, integer face); + + Sets the color of the linked child specified by linknumber. + A value of 0 means no link, 1 the root, 2 for first + child, etc. If linknumber is ALL_SIDES, set the color + of all objects in the linked set. If face is + ALL_SIDES, set the color of all faces. + + + + integer llSetLinkMedia(integer iLink, integer iFace, list lParameters); + + Set the media parameters for a particular face on the linked prim(s) without a delay. + Link number (0: unlinked, 1: root prim, >1: child prims). + Face number. + A set of name/value pairs (in no particular order) + Returns an integer that is a STATUS_* flag which details the success/failure of the operation(s). + + + + void llSetLinkPrimitiveParams(integer linknumber, list rules); + + Sets the parameters (or properties) of any linked prim in none step + Link number (0: unlinked, 1: root prim, >1: child prims) or a LINK_* flag + + + + + llSetLinkPrimitiveParamsFast( integer linknumber, list rules ); + + Set primitive parameters for linknumber based on rules with no built-in script sleep. This function is identical to llSetLinkPrimitiveParams except without the delay. + Link number (0: unlinked, 1: root prim, >1: child prims) or a LINK_* flag + + + + + void llSetLinkTexture(integer linknumber, string texture, integer face); + + Sets the texture of linked prims + + + + llSetLinkTextureAnim( integer link, integer mode, integer face, integer sizex, integer sizey, float start, float length, float rate ); + + Animate the texture on the specified face/faces of the + specified prim/prims by setting the texture scale and offset. + Identical to llSetTextureAnim except able to modify any prim in the link set. + + Link number (0: unlinked, 1: root prim, >1: child prims) or a LINK_* flag to effect + mask of Mode flags + face number or ALL_SIDES + horizontal frames (ignored for ROTATE and SCALE) + vertical frames (ignored for ROTATE and SCALE) + Start position/frame number (or radians for ROTATE) + number of frames to display (or radians for ROTATE) + frames per second (must not be zero) + + + + llSetLocalRot(rotation rot); + + Sets the rotation of a child prim relative to the root prim. + + + + integer llSetMemoryLimit(integer iLimit); + + Request iLimit bytes to be reserved for this script. This function has no effect if the script is running in the LSO VM. + Return TRUE or FALSE indicating whether the limit was set successfully. + The amount to reserve, which must be less than the allowed maximum (currently 64KB) and not already have been exceeded. + + + + llSetObjectDesc(string name); + + Sets the description of the scripted prim to name. + You can get the description using llGetObjectDesc. + The description is limited to 127 characters. + + + + llSetObjectName(string name); + + Sets the object name to name. + + + + llSetParcelMusicURL(string url) + + Sets the streaming audio URL for the parcel the + scripted object is on (the object must be owned + by the owner of the parcel, if the parcel is group + owned the object must be owned by that group). + + + + llSetPayPrice(integer price, list quick_pay_buttons); + + Sets the values of the buttons and the text box default + for the Pay dialog -- when a user right-clicks on + the object and selects "Pay", llSetPayPrice will affect + what buttons exist, what their values are, and whether + or not there is a manual payment text entry box. + + + + void llSetPhysicsMaterial(integer MaterialBits, float GravityMultiplier, float Restitution, float Friction, float Density); + + No description available. + + + + llSetPos(vector pos); + + If the object is not physical, this function sets the position + in region coordinates. If the object is a child, the + position is treated as root relative and the linked set is adjusted. + + + + integer llSetPrimMediaParams( integer face, list params ); + + Set the media params for a particular face. + + Returns an integer that is a STATUS_* flag which details the success/failure of the operation(s). + face number + a set of name/value pairs (in no particular order) + + + + llSetPrimitiveParams(list rule); + + This function changes the many properties (or "parameters") + of a prim in one operation. The parameter is a list of changes. + (Don't confuse prim parameters with function parameters.) + + + + integer llSetRegionPos(vector vPosition) + + Tries to moves the entire object so that the root prim is within 0.1m of vPosition. + Returns TRUE on success, otherwise FALSE. + + + + llSetRemoteScriptAccessPin(integer pin); + + If pin is set to a non-zero number, the task will accept + remote script loads via llRemoteLoadScriptPin + if passed the matching PIN. + Otherwise llRemoteLoadScriptPin is ignored + + + + llSetRot(rotation rot); + + If the object is not physical, this function sets the rotation. + If the object is a child, the position is treated as root + relative and the linked set is adjusted. + + + + llSetScale(vector scale); + + Sets the object scale. + + + + llSetScriptState(string name, integer run); + + Control the state of a script on the object. + + + + llSetSitText(string text); + + Displays text rather than sit in viewer pie menu. + + + + llSetSoundQueueing(integer queue); + + Sets whether successive calls to llPlaySound, llLoopSound, + etc., (attached sounds) interrupt the playing sound. + The default for objects is FALSE. Setting this value to + TRUE will make the sound wait until the current playing + sound reaches its end. The queue is one level deep. + + boolean, sound queuing: TRUE enables, FALSE disables (default) + + + + + llSetSoundRadius(float radius); + + Establishes a hard cut-off radius for audibility of scripted + sounds (both attached and triggered) + + + + llSetStatus(integer status, integer value); + + Sets the status to value. Use status constants for the values of status. + + + + llSetText(string text, vector color, float alpha); + + Sets text that floats above object to text, + using the specified color and alpha. + + + + llSetTexture(string texture, integer face); + + Sets the texture from object inventory of face. + If face is ALL_SIDES, set the texture to all faces. + + + + llSetTextureAnim(integer mode, integer face, integer sizex, integer sizey, float start, float length, float rate); + + Animates a texture by setting the texture scale and offset. + mask of Mode flags + face number or ALL_SIDES + horizontal frames (ignored for ROTATE and SCALE) + vertical frames (ignored for ROTATE and SCALE) + Start position/frame number (or radians for ROTATE) + number of frames to display (or radians for ROTATE) + frames per second (must not be zero) + + + + llSetTimerEvent(float sec); + + Sets the timer event to be triggered every sec seconds. + Passing in 0.0 stops further timer events. + + + + llSetTorque(vector torque, integer local); + + If the object is physical, this function sets the torque. + The vector is in local coordinates if local is TRUE, global + if FALSE. + + torque force + + + boolean, if TRUE uses local axis, if FALSE uses region axis. + + + + + llSetTouchText(string text); + + Displays text in viewer pie menu that acts as a touch. + + + + llSetVehicleFlags(integer flags); + + Sets the vehicle flags to TRUE. + Valid parameters can be found in the vehicle flags constants section. + + + + llSetVehicleFloatParam(integer param_name, float param_value); + + Sets the vehicle floating point parameter param_name to param_value. + Valid parameters and their expected + values can be found in the vehicle parameter constants section. + + + + llSetVehicleType(integer type); + + Activates the vehicle action and choose vehicle type. + Valid types and an explination of their characteristeics + can be found in the vehicle type constants section. + + + + llSetVehicleRotationParam(integer param_name, rotation param_value); + + Sets the vehicle rotation parameter param_name to param_value. + Valid parameters can be found in the + vehicle parameter constants section. + + + + llSetVehicleVectorParam(integer param_name, vector param_value); + + Sets the vehicle vector parameter param_name to param_value. + Valid parameters can be found in the + vehicle parameter constants section. + + + + void llSetVelocity(vector vForce, integer iLocal); + + Applies velocity to a physical object. + The force to apply. + If TRUE, the vForce is treated as a local directional vector instead of a regional directional vector. + + + + string llSHA1String( string src ); + + *** Pre-release Documentation Warning *** + Returns a string of 40 hex characters that is the SHA1 security hash of src. + + + + llShout(integer channel, string text); + + Shout text on channel. Channel 0 is the public chat channel that + all avatars see as chat text. Channels 1 to + 2,147,483,648 are private channels that are not sent to + avatars but other scripts can listen for through the llListen api. + + + + float llSin(float theta); + + Returns the sine of theta in radians. + + + + llSitTarget(vector offset, rotation rot); + + Set the sit location for this object. If offset == ZERO_VECTOR + clear the sit target. + + + + llSleep(float sec); + + Puts the script to sleep for sec seconds. + + + + float llSqrt(float val); + + Returns the square root of val. If val is less than 0.0, + this function returns 0.0 and raises a math runtime error. + + + + llStartAnimation(string anim); + + This function starts animation anim for the avatar that owns the object. + + + + llStopAnimation(string anim); + + Stop animation animfor avatar that owns object. + + + + llStopHover(void); + + Stop hover to a height. + + + + llStopLookAt(void); + + Stop causing object to look at target. + + + + llStopMoveToTarget(void); + + Stops critically damped motion. + + + + + + llStopSound(void); + + Stops a currently playing attached sound started with + llPlaySound or llLoopSound. Has no effect on sounds + started with llTriggerSound. + + + + integer llStringLength(string src); + + Returns the number of characters in src. + + + + string llStringToBase64(string str); + + Converts a string to the Base 64 representation of the string. + + + + string llStringTrim(string text, integer trim_type); + + Outputs a string eliminating whitespace from the start and/or end of the specified string. + + Constants for trim_type: + STRING_TRIM_HEAD: trim all leading spaces in text + STRING_TRIM_TAIL: trim all trailing spaces in text + STRING_TRIM: trim all leading and trailing spaces in text + string to trim + + STRING_TRIM_HEAD,STRING_TRIM_TAIL or STRING_TRIM + + + + + integer llSubStringIndex(string source, string pattern); + + Finds index in source where pattern first appears. + Returns -1 if no match is found found. + + + + llTakeControls(integer controls, integer accept, integer pass_on); + + If ( accept == (controls and input) ), send input to object. + If the boolean pass_on is TRUE, also send input + to avatar. Requires the PERMISSION_TAKE_CONTROLS permission to run. + + bitfield of CONTROL_* flags + + + boolean, determines whether control events are generated + + + boolean, determines whether controls are disabled + + + + + float llTan(float theta); + + Returns the tangent of theta radians. + + + + + + integer llTarget(vector position, float range); + + Set object position within range of position as a target + and returns an integer ID for the target. + + + + llTargetOmega(vector axis, float spinrate, float gain); + + Attempt to spin at spinrate with strength gain on axis. + A spinrate of 0.0 cancels the spin. This + function always works in object local coordinates. + + + + llTargetRemove(integer tnumber); + + Remove target number tnumber. + + + + void llTeleportAgent(key AgentID, string LandmarkName, vector Position, vector LookAtPoint) + + Requests a teleport of avatar to a landmark stored in the object's inventory. If no landmark is provided (an empty string), the avatar is teleported to the location position in the current region. In either case, the avatar is turned to face the position given by look_at in local coordinates. + Requires the PERMISSION_TELEPORT permission. This function can only teleport the owner of the object. + UUID of avatar. + Name of landmark (in object contents), or empty string, to use. + The position within the local region to teleport the avatar to, if no landmark was provided. + The position within the target region that the avatar should be turned to face upon arrival. + + + + void llTeleportAgent(key AvatarID, string LandmarkName, vector Position, vector LookAtPoint) + + Teleports an agent to set of a region_coordinates within a region at the specified global_coordinates. The agent lands facing the position defined by look_at local coordinates. + UUID of avatar. + Global coordinates of the destination region. Can be retrieved by using llRequestSimulatorData(region_name, DATA_SIM_POS). + The position within the target region to teleport the avatar to, if no landmark was provided. + The position within the target region that the avatar should be turned to face upon arrival. + + + + llTeleportAgentHome(key id); + + Teleport agent on the owner's land to agent's home location. + + + + llTextBox( key avatar, string message, integer chat_channel ); + + *** Pre-release Documentation Warning *** + Shows a dialog box on avatar's screen with the text message. + It contains a text box for input, any text that is entered + is said on chat_channel when the "OK" button is clicked. + + + + string llToLower(string src); + + Returns src in all lower case. + + + + string llToUpper(string src); + + Returns src in all upper case. + + + + key llTransferLindenDollars(key AvatarID, integer Amount); + + Attempts to send the amount of money to the specified avatar, and trigger a transaction_result event identified by the returned key. + + + + llTriggerSound(string sound, float volume); + + Plays a transient sound NOT attached to an object. + The sound plays from a stationary position located at the + center of the object at the time of the trigger. + There is no limit to the number of triggered sounds which can be + generated by an object, and calling llTriggerSound does not affect + the attached sounds created by llPlaySound + and llLoopSound. This is very useful for things like collision noises, + explosions, etc. There is no way to stop or + alter the volume of a sound triggered by this function. + + + + llTriggerSoundLimited(string sound, float volume, vector tne, vector bsw); + + Plays a transient sound NOT attached to an object with its + audible range limited by the axis aligned bounding + box define by tne(top-north-eash) and bsw (bottom-south-west). + The sound plays from a stationary position + located at the center of the object at the time of the trigger. + There is no limit to the number of triggered sounds + which can be generated by an object, and calling llTriggerSound + does not affect the attached sounds created by + llPlaySound and llLoopSound. This is very useful for things + like collision noises, explosions, etc. There is no + way to stop or alter the volume of a sound triggered by this function. + + + + string llUnescapeURL(string url); + + Returns the string that is the URL unescaped version + of url, replacing "%20" with spaces, etc. + The function can output raw UTF-8 strings. + + + + llUnSit(key id); + + If agent identified by id is sitting on the object the script + is attached to or is over land owned by the objects + owner, the agent is forced to stand up. + + + + void llUpdateCharacter(list Options); + + Updates settings for a character. + Character configuration options. Takes the same constants as llCreateCharacter(). + + + + float llVecDist(vector a, vector b); + + Returns the distance from ato b + + + + float llVecMag(vector vec); + + Returns the magnitude of vec. + + + + vector llVecNorm(vector vec); + + Returns normalized vec. + + + + llVolumeDetect(integer detect); + + When detect = TRUE, this makes the entire link set the script + is attached to phantom but if another object + interpenetrates it, it will get a collision_start event. + When an object stops interpenetrating, a collision_end event + is generated. While the other is interpenetrating, + collision events are NOT generated. The script must be applied + to the root object of the link set to get the collision events. + Collision filters work normally. + + TRUE enables, FALSE disables + + + + + void llWanderWithin(vector Origin, float Distance, list Options); + + Sets a character to wander about a central spot within a specified radius. + Central point to wander about. + How far (radius) the character may wander from origin. + No options available at this time. + + + + float llWater(vector offset); + + Returns the water height at the object position + offset. + + + + void llWhisper(integer channel, string text); + + Whisper text on channel. Channel 0 is the public chat channel that + all avatars see as chat text. Channels 1 to 2,147,483,648 are + private channels that are not sent to avatars but other scripts + can listen for through the llListen api. + + + + vector llWind(vector offset); + + Returns the wind velocity below the object position + offset. + + + + string llXorBase64(string sText1, string sText2); + + Performs an XOR on two Base64 strings and returns a Base64 string. + sText2 repeats if it is shorter than sText1. + This function is for encrypting data. Put your data in s1 and + your key in s2 to encrypt or put the encrypted data into s1 + with the same key in s2 to decrypt again. + + + + + Complete listing of the OpenSim Library function calls available in lsl. + + key osAgentSaveAppearance(key avatarId, string notecard); + + Save an arbitrary avatar's appearance to a notecard in the prim's inventory. + This includes body part data, clothing items and attachments. If a + notecard with the same name already exists then it is replaced. + The avatar must be present in the region when this function is invoked. + The baked textures for the avatar (necessary to recreate appearance on + the NPC) are saved permanently. + + + string osAvatarName2Key(string firstname, string lastname); + + Returns an avatar's UUID, based on his/her first and last name. + + + void osAvatarPlayAnimation(key avatar, string animation); + + This function causes an animation to be played on the specified avatar. + The variable animation must be the name of an animation within the task + inventory. For security reasons, UUIDs are not allowed here. + Instead of the name of an animation in the prim's inventory, you can + also use the names of the viewer's built-in animations. + osAvatarPlayAnimation does not perform any security checks or request + animation permissions from the targeted avatar. + + + void osAvatarStopAnimation(key avatar, string animation); + + This function stops the specified animation if it is playing on the + avatar given. The value avatar is a UUID, and the animation value is + either the name of an animation in the task inventory or the UUID of + an animation. If the specified avatar is not logged in or on the + same sim as the script, then osAvatarStopAnimation silently fails. + + + void osCauseDamage(key avatar, float damage); + + + void osCauseHealing(key avatar, float healing); + + + void osDropAttachment(); + + + void osDropAttachmentAt(Vector3 pos, Quaternion rot); + + + integer osEjectFromGroup(key user); + + Eject the given user from the group the object is set to. + The object owner must have the right to eject users from the group the + object is set to. The group member who is ejected can be offline. + The user gets an instant message, that he/she has been ejected from + that group. The result is TRUE, if the user could be ejected, otherwise + FALSE. + + + void osForceAttachToAvatar(integer attachmentPoint); + + Works exactly like llAttachToAvatar() except that PERMISSION_ATTACH is + not required. + + + void osForceAttachToAvatarFromInventory(string itemName, integer attachmentPoint); + + Attach an inventory item in the object containing this script to any + avatar in the region without asking for PERMISSION_ATTACH. Nothing happens + if the avatar is not in the region. + itemName - The name of the item. If this is not found then a warning is + said to the owner. + attachmentPoint - The attachment point. For example, ATTACH_CHEST. + + + void osForceAttachToOtherAvatarFromInventory(string rawAvatarId, string itemName, integer attachmentPoint); + + Attach an inventory item in the object containing this script to any + avatar in the region without asking for PERMISSION_ATTACH. Nothing + happens if the avatar is not in the region. + rawAvatarId - The UUID of the avatar to which to attach. Nothing + happens if this is not a UUID. + itemName - The name of the item. If this is not found then a warning + is said to the owner. + attachmentPoint - The attachment point. For example, ATTACH_CHEST. + + + void osForceDetachFromAvatar(); + + Works exactly like llDetachFromAvatar() except that PERMISSION_ATTACH + is not required. + + + void osForceDropAttachment(); + + Drops an attachment like a user-triggered attachment drop without + checking if PERMISSION_ATTACH has been granted. + + + void osForceDropAttachmentAt(Vector3 pos, Quaternion rot); + + Drops an attachment at position pos with rotation rot without + checking if PERMISSION_ATTACH has been granted. + + + void osForceOtherSit(string avatar, [string target]); + + Forces a sit of targeted avatar onto prim. + avatar - The UUID of the avatar to which to attach. Nothing happens + if this is not a UUID. + target - The UUID of another prim to sit avatar on. Nothing happens + if this is not a UUID of prim in region. + + + string osGetAgentIP(key uuid); + + Requires: key uuid of agent to get IP address for. + Returns: string representing the IP address returned. + + + list osGetAgents(); + + Returns a list of all the agents names in the region. + + + string osGetAvatarHomeURI(string uuid); + + Returns an avatar's Home URI. + + + list osGetAvatarList(); + + Returns a strided list of the UUID, position, and name of each + avatar in the region except the owner. + This function is similar to osGetAgents but returns enough + info for a radar. + + + string osGetGender(key id); + + Returns a string with one of the following values: "male", + "female", or "unknown". This value is determined by the value + selected for the avatar shape in the appearance dialog in the + user's viewer. If that value cannot be found for any reason + (avatar is not in the region, improperly formatted key, etc.), + "unknown" is returned. + + + float osGetHealRate(key avatar); + + Gets the current automatic healing rate in % per second. + Default heal rate is now around 0.5% per second. + A value of zero can disable automatic heal, current maximum + value is 100 % per second. + + + float osGetHealth(string avatar); + + Gets an avatars health by key and returns the value as a float. + + + list osGetNumberOfAttachments(key avatar, list attachmentPoints); + + Returns a strided list of the specified attachment points and + the number of attachments on those points. + In OpenSimulator 0.7.5 development code only. + + + integer osInviteToGroup(key user); + + Invite the given user to the group the object is set to. + The group can be a closed user group. + The object owner must have the right to invite new users + to the group the object is set to. The user with the given + key has to be online in that region. This is a required + limitation to not make group invitation spam possible. + The user gets a normal group invitation, showing the + owner of the object as sender. The invitation can be accepted + or rejected and the user can open the corresponding group + window. + The result is TRUE, if the invitation could be sent, + otherwise FALSE. + + + void osKickAvatar(string FirstName, string SurName, string alert); + + + key osOwnerSaveAppearance(string notecard); + + Save the owner's current appearance to a notecard in the prim's + inventory. This includes body part data, clothing items and + attachments. If a notecard with the same name already exists then + it is replaced. The owner must be present in the region when this + function is invoked. The baked textures for the owner (necessary + to recreate appearance on the NPC) are saved permanently. + + + float osSetHealRate(key avatar, float healrate); + + Sets the automatic healing rate in % per second. + Default heal rate is now around 0.5% per second. + A value of zero can disable automatic heal, current maximum + value is 100 % per second. + + + float osSetHealth(string avatar, float health); + + Sets an avatars health by key to the specified float value. + + + void osTeleportAgent(key agent, integer regionX, integer regionY, vector position, vector lookat); + + void osTeleportAgent(key agent, string regionName, vector position, vector lookat); + + void osTeleportAgent(key agent, vector position, vector lookat); + + + void osTeleportOwner(integer regionX, integer regionY, vector position, vector lookat); + + void osTeleportOwner(string regionName, vector position, vector lookat); + + void osTeleportOwner(vector position, vector lookat); + + + integer osIsNpc(key npc); + + Returns NPC status on the provided key. + Returns TRUE (1) / FALSE (0) if key provided is an NPC. + Returns FALSE (0) if the key provided doesn't exist in + the scene. + + + key osNpcCreate(string firstname, string lastname, vector position, string cloneFrom, [integer options]); + + Creates an NPC named firstname lastname at position + from avatar appearance resource cloneFrom. + + + list osGetNpcList(); + + Returns a strided list of the UUID, position, and name of each NPC + in the region. + + + vector osNpcGetPos(key npc); + + Return the current position of the NPC. + + + rotation osNpcGetRot(key npc); + + Gets the rotation of the avatar. Only the rotation around the + Z plane in Euler rotation (horizontal rotation) has any meaning. + + + key osNpcGetOwner(key npc); + + Gets the NPC's owner's UUID. + + + void osNpcLoadAppearance(key npc, string notecard); + + Load appearance from a notecard. This notecard + must contain appearance data created with one of the save appearance + functions. + + + void osNpcMoveTo(key npc, vector position); + + Moves npc to the position. + + + osNpcMoveToTarget(key npc, vector target, integer options); + + Move the avatar to a given target over time. How the avatar + will get there depends on the following options. + + OS_NPC_FLY - Fly the avatar to the given position. The avatar will + not land unless the OS_NPC_LAND_AT_TARGET option is also given. + OS_NPC_NO_FLY - Do not fly to the target. The NPC will attempt to + walk to the location. If it's up in the air then the avatar will + keep bouncing hopeless until another move target is given or the move is stopped. + OS_NPC_LAND_AT_TARGET - If given and the avatar is flying, then it + will land when it reaches the target. If OS_NPC_NO_FLY is given then + this option has no effect. + OS_NPC_FLY and OS_NPC_NO_FLY are options that cannot be combined - the avatar + will end up doing one or the other. If you want the avatar to fly and land at + the target, then OS_NPC_LAND_AT_TARGET must be combined with OS_NPC_FLY. + OS_NPC_RUNNING - Run the avatar to the given position. + + + void osNpcPlayAnimation(key npc, string animation); + + Plays animation on the NPC identified by their key. + + + void osNpcRemove(key npc); + + Removes the NPC specified by key npc. + + + key osNpcSaveAppearance(key npc, string notecard); + + Save the NPC's current appearance to a notecard in the prim's + inventory. This includes body part data, clothing items and + attachments. If a notecard with the same name already exists then + it is replaced. The avatar must be present in the region when this + function is invoked. The baked textures for the avatar (necessary + to recreate appearance) are saved permanently. + + + void osNpcSay(key npc, string message); + + void osNpcSay(key npc, integer channel, string message); + + Npc says message. + + + void osNpcSetProfileAbout(key npc, string about); + + Set about in created NPC's profile. + + + void osNpcSetProfileImage(key npc, string image); + + Set image in created NPC's profile. + One can use UUID of the texture or name of texture included + in prim's inventory. + + + void osNpcSetRot(key npc, rotation rot); + + Set the rotation of the avatar. Only setting the rotation + in the Z plane in Euler rotation will have any meaningful effect + (turning the avatar to point in one direction or another). + Setting X or Y Euler values will result in the avatar + rotating in an undefined manner. + + + void osNpcShout(key npc, int channel, string message); + + Npc shouts message on the given channel. + + + void osNpcSit(key npc, key target, integer options); + + Makes an NPC sit on an object. + Options - OS_NPC_SIT_NOW. Makes the npc instantly sit on + the prim if possible. This is the only option available and + is currently always on no matter what is actually specified in + the options field. + If the prim has a sit target then sit always succeeds no matter + the distance between the NPC and the prim. + If the prim has no sit target then + If the prim is within 10 meters of the NPC then the sit will + always succeed. + At OpenSimulator 0.7.5 and later, if the prim is further than + 10 meters away then nothing will happen. + Before OpenSimulator 0.7.5, if the prim is further than 10 meters + away then the avatar will attempt to walk over to the prim + but will not sit when it reaches it. + + + void osNpcStand(key npc); + + Makes a sitting NPC stand up. + + + void osNpcStopMoveToTarget(key npc); + + Stop a current move to a target. + + + void osNpcStopAnimation(key npc, string animation); + + Stops animation on being played by the NPC identified by their key. + + + void osNpcTouch(key npcKey, key objectKey, integer linkNum); + + Only LINK_THIS and LINK_ROOT are valid for this function. Any other + of the LINK_* constants will be ignored and no touch takes place. + 1. If linkNum is LINK_THIS then the prim with the key objectKey will + be touched. + 2. If linkNum is LINK_ROOT or 0 then the root prim of the link set + will be touched, even if the root prim key is not objectKey + 3. For any other value of linkNum a search will be made through + the linkset for a prim with that link number. If found that prim + will be touched. If no prim is found for that link number the + function fails silently and no touch takes place. + The touch is fired as if it came from an old client that does not + support face touch detection or (probably) one of the text clients + like Metabolt. Since there is no mouse the llDetectedTouch* + functions will return the defaults (See the LSL Wiki for full details) + + llDetectedTouchBinormal TOUCH_INVALID_VECTOR + llDetectedTouchFace TOUCH_INVALID_FACE + llDetectedTouchNormal TOUCH_INVALID_VECTOR + llDetectedTouchPos TOUCH_INVALID_VECTOR + llDetectedTouchST TOUCH_INVALID_TEXCOORD + llDetectedTouchUV TOUCH_INVALID_TEXCOORD + + If the prim is not found or would not allow a normal client to touch + it then this function fails silently. + + + void osNpcWhisper(key npc, int channel, string message); + + Npc whispers message on the given channel. + + + void osClearInertia(); + + Clears the effect of osSetInertia* functions. Link set total mass, + center of mass and inertia will be the values estimated by default + from the link set parts. + + + void osForceBreakAllLinks(); + + Identical to llBreakAllLinks() except that it doesn't require the + link permission to be granted. + + + void osForceBreakLink(integer link); + + Identical to llBreakLink(integer link) except that it doesn't + require the link permission to be granted. + + + osForceCreateLink(key target, int parent); + + Idential to llCreateLink() except that it doesn't require the + link permission to be granted. + + + list osGetInertiaData(); + + + string osGetInventoryDesc(string name); + + Returns a string that is the description of inventory item "name". + + + integer osGetLinkNumber(string name); + + Returns the link number of the prim or sitting avatar with name + "name" on the link set or -1 if the name is not found. + If names are not unique, the one with lower link number should be return. + Names "Object" and "Primitive" are ignored + + + list osGetLinkPrimitiveParams(integer linknumber, list rules); + + Returns the primitive parameters for the linkset prim or prims + specified by linknumber. It is possible to use the linkset constants + (e.g. LINK_SET, LINK_ALL_CHILDREN) in place of a specific link number, + in which case the requested parameters of each relevant prim are + concatenated to the end of the list. Otherwise, the usage is identical + to llGetPrimitiveParams(). + + + list osGetPrimitiveParams(key prim, list rules); + + Gets the parameters for the prim specified by prim_uuid + according to rules. + This function has the same behave as llGetPrimitiveParams + except you can specify target prim anywhere in the scene. + For general information about rules, see llGetPrimitiveParams + in SecondLife Wiki. + Check llGetPrimitiveParams implementation status to see the + differences from llGetPrimitiveParams. + If there is no prim_uuid prim in the scene, or the owner of the + target prim is differ from the owner of the scripted prim, + it will fail without error. + + NOTE: As of OpenSimulator 0.7.1.1, this function doesn't work, results in + script error(#5560). It will able to do so on 0.7.2-dev or later. + + + string osGetRezzingObject(); + + Get the key of the object that rezzed this object. + Will return NULL_KEY if rezzed by agent or otherwise unknown source. + Should only be reliable inside the on_rez event. + + + integer osIsUUID(string thing); + + Returns 1 if the supplied string is a valid UUID, returns 0 otherwise. + + + integer osListenRegex(integer channelID, string name, string ID, string msg, integer regexBitfield); + + Allows the server to filter listen events by regular expressions. name or message parameters can be + regular expressions, these are behaviours are controlled via the regexBitField parameter using the + constants OS_LISTEN_REGEX_NAME and OS_LISTEN_REGEX_MESSAGE. + If the regex strings are invalid, an error will be shouted on the debug channel. + + + void osMessageAttachments(key avatar, string message, list attachmentPoints, integer options); + + Sends a specified message to the specified avatar's attachments on the specified attachment points. + Behaves as osMessageObject, without the sending script needing to know the attachment keys in advance. + + + void osMessageObject(key objectUUID, string message); + + Where objectUUID = the UUID of the object you are messaging. + Where message = The String of data you want to send. + Sends a message to to object identified by the given UUID, a script + in the object must implement the dataserver function the dataserver + function is passed the ID of the calling function and a string message. + + + void osSetInertia(float mass, vector centerOfMass, vector principalInertiaScaled, rotation InertiaRot); + + Allows creators to set the major physics dynamic proprieties, replacing the values estimated from the + linkset parts. Call osClearInertia to undo. + + Mass - total mass of link set + centerOfMass - location of center of mass relative to root prim in local frame + principalInertiaScaled - moment of inertia relative to principal axis and center of mass, + Ixx, Iyy, Izz divided by mass so it can be changed independently + InertiaRot - rotation of the inertia, relative to local axis + + + void osSetInertiaAsBox(float mass, vector boxSize, vector centerOfMass, rotation rot); + + Allows creators to set the link set total mass, center of mass and moment of inertia. + Moment of inertia will be the one of a box of size boxSize, placed at the center of + mass and rotated by rot in the root prim local frame. Call osClearInertia to undo. + + Mass - new total mass of link set + centerOfMass - new location of center of mass relative to root prim in local frame + boxSize - size of the box used to calculate the new inertia + rot - the rotation of that box in local frame + + + void osSetInertiaAsCylinder(float mass, float radius, float length, vector centerOfMass, rotation rot); + + Allows creators to set the link set total mass, center of mass and moment of inertia. Moment of + inertia will be the one of a cylinder of radius and length, placed at the center of mass and rotated + by rot in the root prim local frame. Call osClearInertia to undo. + + Mass - new total mass of link set + centerOfMass - new location of center of mass relative to root prim in local frame + radius - radius of a cylinder used to calculate the new inertia + length - length of a cylinder used to calculate the new inertia + rot - rotation of the cylinder in the root prim local frame. + + + void osSetInertiaAsSphere(float mass, float radius, vector centerOfMass); + + Allows creators to set the link set total mass, center of mass and + moment of inertia. Moment of inertia will be the one of a sphere of + radius radius, placed at the center of mass. Call osClearInertia to undo. + + Mass - new total mass of link set + centerOfMass - new location of center of mass relative to root prim in local frame + radius - radius of a sphere used to calculate the new inertia + + + void osSetPrimitiveParams(key prim, list rules); + + Sets the parameters for the prim specified by prim_uuid according to rules. + This function has the same behave as llSetPrimitiveParams except you can + specify target prim anywhere in the scene. + For general information about rules, see llSetPrimitiveParams in + SecondLife Wiki. Check llSetPrimitiveParams implementation status to see + the differences from llSetPrimitiveParams. + If there is no prim_uuid prim in the scene, or the owner of the target prim + is differ from the owner of the scripted prim, it will fail without error. + + NOTE: As of OpenSimulator 0.7.1.1, this function don't work, results in + script error (#5560). This is fixed on OpenSimulator 0.7.2 and later. + + + void osSetProjectionParams(integer projection, key texture, float fov, float focus, float amb); + + void osSetProjectionParams(key prim, integer projection, key texture, float fov, float focus, float amb); + + 2 Variations possible. + bool = TRUE / FALSE. + double = float. + + + void osSetSpeed(string UUID, float SpeedModifier); + + This allows for users to speed themselves up. It multiplies the running, + walking, rotating and flying of the avatar. + The default value for SpeedModifier is 1.0. + To be precise, it affects physical velocity. If you specify too large or + too small number for SpeedModifier, the target will be unmovable, showing + the following message in the region console: + [PHYSICS]: Got a NaN velocity from Scene in a Character + + + integer osTeleportObject(key objectUUID, vector targetPos, rotation rot, int flags); + + objectUUID - the id of the linkset to teleport + targetPos - target position + rot - a rotation + + Flags: + OSTPOBJ_NONE it is just 0 + OSTPOBJ_STOPATTARRGET object is stopped at destination + OSTPOBJ_STOPONFAIL stops at start point if tp fails (still does nothing) + OSTPOBJ_SETROT the rotation is the final object rotation, otherwise is a added rotation + + + string osDrawEllipse(string drawList, integer width, integer height); + + Appends an Ellipse drawing command to the string provided in drawList + and returns the result. The ellipse is drawn with the current pen + size and color, with the specified width and height (in pixels), + centered on a point which is (width/2) pixels to the right of the + pen's current X position, and (height/2) pixels below the pen's + current Y position. After the ellipse is drawn, the width and height + values are added to the pen's X and Y position, respectively. + + + string osDrawFilledEllipse(string drawList, integer width, integer height); + + Appends an FillEllipse drawing command to the string provided in drawList + and returns the result. + The filled ellipse is drawn with the current pen size and color, with + the specified width and height (in pixels), centered on a point which is + (width/2) pixels to the right of the pen's current X position, and + (height/2) pixels below the pen's current Y position. After the filled + ellipse is drawn, the width and height values are added to the pen's X + and Y position, respectively. + + + string osDrawFilledPolygon(string drawList, list xpoints, list ypoints); + + Appends a FillPolygon drawing command to the string provided in drawList + and returns the result. This fills in the interior of the specified polygon. + The polygon is drawn with the current pen size and filled with the + current color. So (x[0],y[0]),(x[1],y[1]),(x[2],y[2]) would be an example + of a polygon. + + + string osDrawFilledRectangle(string drawList, integer width, integer height); + + Appends a FillRectangle drawing command to the string provided in drawList + and returns the result. + The filled rectangle is drawn with the current pen size and color, at the + specified width and height (in pixels), with the upper left corner of the + rectangle placed at the pen's current position. After the rectangle is drawn, + the width and height values are added to the pen's X and Y position, + respectively (that is, the pen is positioned at the lower right corner of + the rectangle. + + + string osDrawImage(string drawList, integer width, integer height, string imageUrl); + + Appends an Image drawing command to the string provided in drawList and returns + the result. Retrieves an image specified by the imageUrl parameter and draws it + at the specified height and width, with the upper left corner of the image placed + at the pen's current position. After the image is drawn, the width and height + values are added to the pen's X and Y position, respectively (that is, the pen's + current position is set to the lower right corner of the image). + If imageUrl points to an invalid location, an image type not supported by libgdi, + or a non-image MIME type, nothing is drawn. If either or both of the width or + height parameters are zero or negative, nothing is drawn, but the image is still + retrieved. + + + string osDrawLine(string drawList, integer startX, integer startY, integer endX, integer endY); + + string osDrawLine(string drawList, integer endX, integer endY); + + Depending on the form, appends a LineTo drawing command, or MoveTo and LineTo commands, to the + string provided in drawList and returns the result. + In the longer form, draws a line using the current pen size and color from to the coordinates + indicated by startX and startY to the coordinates indicated by endX and endY. + In the shorter form, draws a line using the current pen size and color from the pen's current + position to the coordinates indicated by endX and endY. + After the line is drawn, the pen's X and Y coordinates are set to endX and endY, respectively. + + + string osDrawPolygon(string drawList, list xpoints, list ypoints); + + Appends a Polygon drawing command to the string provided in drawList + and returns the result. The polygon is drawn with the current pen + size and color on the x,y point pairs that comes from LSL list. + It will be converted into the drawing command + "Polygon x[0],y[0],x[1],y[1],x[2],y[2],...". + + + string osDrawRectangle(string drawList, integer width, integer height); + + Appends a Rectangle drawing command to the string provided in drawList + and returns the result. + The outline of a rectangle is drawn with the current pen size and color, + at the specified width and height (in pixels), with the upper left + corner of the rectangle placed at the pen's current position. After the + rectangle is drawn, the width and height values are added to the pen's X + and Y position, respectively (that is, the pen is positioned at the + lower right corner of the rectangle. + + + string osDrawResetTransform(string drawList); + + + string osDrawRotationTransform(string drawList, float x); + + + string osDrawScaleTransform(string drawList, float x, float y); + + + string osDrawText(string drawList, string text); + + Appends a Text drawing command to the string provided in drawList and returns + the result. The specified text will be drawn with the current pen color, + using the currently defined font, size and properties (which default to + regular 14-point Arial). The text will be drawn with the upper left corner of + the first glyph at the pen's current position (however, note that glyphs + within the font may be defined to extend to the left of their origin point). + If you need to include a semicolon in the text to be displayed, you will need + to directly manipulate the draw list string using the drawing commands rather + than the dynamic texture convenience functions, then specify an alternate data + delimiter in the extraParams parameter to the osSetDynamicTexture* functions. + The convenience functions (including osDrawImage) are hardcoded to terminate + each command with a semicolon. The text may or may not be antialiased, + depending on the system settings of the machine upon which the simulator is + running. Furthermore, if the system is configured to use LCD subpixel + antialiasing (e.g. ClearType), the text may have colored fringes on the smoothed + pixels, which may result in a less than optimum image. + Please note that the pen position is not updated after this call. + + + string osDrawTranslationTransform(string drawList, float x, float y); + + + vector osGetDrawStringSize(string contentType, string text, string fontName, integer fontSize); + + Returns a vector containing the horizontal and vertical dimensions in pixels of the specified + text, if drawn in the specified font and at the specified point size. The horizontal extent + is returned in the .x component of the vector, and the vertical extent is returned in .y. + The .z component is not used. + The contentType parameter should be "vector". + If the osSetFontSize() function has not been used, and neither the FontName nor FontProp + commands have been added to the draw list, specify "Arial" as the font name, and 14 as the font size. + + + string osMovePen(string drawList, integer x, integer y); + + Appends a MoveTo drawing command to the string provided in + drawList and returns the result. + This moves the pen's location to the coordinates specified + by the x and y parameters, without drawing anything. + + + string osSetFontName(string drawList, string fontName); + + + string osSetFontSize(string drawList, integer fontSize); + + Appends a FontSize drawing command to the string provided in + drawList and returns the result. + Sets the size of the font used by subsequent osDrawTextText() + calls. The fontSize parameter represents the font height in points. + Please note that the font height is given in points, not in + pixels. The resulting size of the font in pixels may vary + depending on the system settings, specifically the display + system's "dots per inch" metric. A system set to 96dpi will + produce differently sized text than a system set to 120dpi. If + precise text size is required, consider using the + osGetDrawStringSize() function to help calculate the proper + fontSize value to use. + If a negative fontSize parameter is specified, any text + subsequently added will be displayed upside down and to the + right of the point of origin. + Please note that the pen position is not updated after this call. + + + string osSetPenCap(string drawList, string direction, string type); + + *** This method works only on Windows for now. libgdi+ has a + fake implementation and will not draw it. *** + + Appends a PenCap drawing command to the string provided in drawList + and returns the result. This sets the pen's start or/and end cap to + either "diamond", "arrow", "round", or default "flat" shape. + It can set them in the "end" or "start" of the line, or "both". + + Possible values are (case insensitive): + Type: + "arrow" + "diamond" + "round" + "flat" + Direction: + "start" + "end" + "both" + + + string osSetPenColor(string drawList, string color); + + Appends a PenColor drawing command to the string provided in drawList + and returns the result. + This sets the pen's drawing color to either the specified named .NET color + or to a 32-bit color value (formatted as eight hexadecimal digits in + the format aarrggbb, representing the eight-bit alpha, red, green and + blue channels). + For full opacity, use an alpha value of FF (e.g. FFFF0000 for red); + for varying degrees of transparency, reduce the alpha value + (e.g. 800000FF for semi-transparent blue). + The color names and hexadecimal color representations are not case-sensitive. + + + string osSetPenSize(string drawList, integer penSize); + + Appends a PenSize drawing command to the string provided in drawList + and returns the result. + This sets the pen size to a square of penSize pixels by penSize pixels. + If penSize is an odd number, the pen will be exactly centered on the + coordinates provided in the various drawing commands; if it is an even + number, it will be centered slightly higher and to the left of the + actual coordinates. + + + string osSetDynamicTextureData(string dynamicID, string contentType, string data, string extraParams, integer timer); + + Renders a dynamically created texture on the prim containing the script and returns the UUID of the newly created texture. + If you use this feature, you have to turn on any cache. If not, you'll see complete white texture. Flotsam cache performs + better than cenome cache(default). + + + string osSetDynamicTextureDataBlend(string dynamicID, string contentType, string data, string extraParams, integer timer, integer alpha); + + + string osSetDynamicTextureDataBlendFace(string dynamicID, string contentType, string data, string extraParams, integer blend, integer disp, integer timer, integer alpha, integer face); + + Returns UUID of the generated texture. Intended to be used with subsequent calls to osSetDynamicTextureXXXX functions in order to modify the texture. + + + string osSetDynamicTextureDataFace(string dynamicID, string contentType, string data, string extraParams, int timer, int face); + + + string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, integer timer); + + Renders a web texture on the prim containing the script and returns the UUID of the newly created texture. + If you use this feature, you have to turn on any cache. If not, you'll see complete white texture. Flotsam cache + performs better than cenome cache(default). + + + string osSetDynamicTextureURLBlend(string dynamicID, string contentType, string url, string extraParams, integer timer, integer alpha); + + + string osSetDynamicTextureURLBlendFace(string dynamicID, string contentType, string url, string extraParams, integer blend, integer disp, integer timer, integer alpha, integer face); + + + string osGetNotecard(string name); + + This function directly reads the entire contents of a notecard if + it exists within the task inventory, and dumps it into a string. + It skips the dataserver event, thereby reducing code complexity. + + + string osGetNotecardLine(string name, integer line); + + This function directly reads a line of text from the + specified notecard, if it exists within the task inventory, + and returns the text as a string. It skips the dataserver + event, thereby reducing code complexity. + + + integer osGetNumberOfNotecardLines(string name); + + This function directly reads how many lines a notecard + has if the specified notecard exists within the task + inventory, bypassing the dataserver event to reduce + code complexity. + + + void osMakeNotecard(string notecardName, list contents); + + void osMakeNotecard(string notecardName, string contents); + + Creates a notecard with text in the prim that contains the + script. Contents can be either a list or a string. + + + void osRequestSecureURL(list options); + + Requests one HTTPS:// url (opensim version 0.9 or over) + Option supported : "allowXss" - Add 'Access-Control-Allow-Origin: *' to response header + + + void osRequestURL(list options); + + Requests one HTTP:// url (opensim version 0.9 or over) + Option supported : "allowXss" - Add 'Access-Control-Allow-Origin: *' to response header + + + void osParcelJoin(vector pos1, vector pos2); + + Joins two adjacent parcels within the same region. + + + void osParcelSubdivide(vector pos1, vector pos2); + + Subdivides a parcel into two adjacent parcels within the same region. + + + void osSetParcelDetails(vector pos, list rules); + + This function is the counterpart to llGetParcelDetails. + Currently PARCEL_DETAILS_NAME, PARCEL_DETAILS_DESC, + PARCEL_DETAILS_OWNER, PARCEL_DETAILS_GROUP, + PARCEL_DETAILS_CLAIMDATE are implemented. + Note that the threat levels for PARCEL_DETAILS_NAME + and PARCEL_DETAILS_DESC are "High", and those for + PARCEL_DETAILS_OWNER, PARCEL_DETAILS_GROUP and + PARCEL_DETAILS_CLAIMDATE are "VeryHigh". + + + float osGetTerrainHeight(integer x, integer y); + + + integer osSetTerrainHeight(integer x, integer y, float val); + + + void osSetTerrainTexture(integer level, key texture); + + Set the terrain texture of the estate to the texture + given as key. The level can be 0, 1, 2 or 3. + + + void osSetTerrainTextureHeight(integer corner, float low, float high); + + Set the terrain texture height of the estate. The level can be 0, 1, 2 or 3. + The values low and high are float values for the altitude measured in meters. + + + void osTerrainFlush(); + + Function updates terrain changes to OpenSimulator database. + This should be called after all the terrain-changes have + been done to update Terrain Data. + + + float osGetCurrentSunHour(); + + Returns a float value of the current sun hour (24 hour clock). Hour 0 is sunrise. + + + float osGetSunParam(string param); + + + float osGetWindParam(string plugin, string param); + + Gets the value of param property for plugin module. + + + void osSetEstateSunSettings(integer sunFixed, float sunHour); + + This function allows for an estate owner or manager to change + the sun settings for the entire estate. + + + void osSetRegionSunSettings(integer useEstateSun, integer sunFixed, float sunHour); + + Sets the Sun parameters for the Region. + The useEstateSun flag enables/disables synchronization with the Sun settings for the Estate. + sunFixed determines whether the Sun will remain fixed in place or proceed through its cycle. + sunHour determines the time of day the Sun will be set to. + + + void osSetRegionWaterHeight(float height); + + Sets the water height for the current region. + + + void osSetSunParam(string param, float value); + + + void osSetWindParam(string plugin, string param, float value); + + Sets value of param property for plugin module. + + See http://opensimulator.org/wiki/OsSetWindParam for the available parameters. + + + string osWindActiveModelPluginName(); + + Gets active wind plugin name, specified by "wind_plugin" + in OpenSim.ini ("SimpleRandomWind" or "ConfigurableWind"). + + + integer osCheckODE(); + + That it checks if physics engine is legacy ODE + and returns 1 ( TRUE ) it is, or 0 ( FALSE ) if not. + + + string osGetGridCustom(string key); + + Returns the value of the GridInfo key as a string. + + + string osGetGridGatekeeperURI(); + + Returns the current grid's Gatekeeper URI as a string. + + + string osGetGridHomeURI(); + + Returns the current grid's home URI as a string. + + + string osGetGridLoginURI(); + + Returns the current grid's login URI as a string. + + + string osGetGridName(); + + Returns the current grid's name as a string. + + + string osGetGridNick(); + + Returns the current grid's nickname as a string. + + + key osGetMapTexture(); + + Returns the UUID of the map texture of the current region. + + + string osGetPhysicsEngineName(); + + This function returns a string containing the name + and version number of the physics engine. + + + string osGetPhysicsEngineType(); + + This function returns a string containing the name of the Physics Engine. + + + key osGetRegionMapTexture(string regionName); + + This function retrieves the UUID of the texture used to + represent the named region on the world map, and returns it. + Using this function, you can place the map texture directly + onto a prim. + + + vector osGetRegionSize(); + + Returns the size of the region in meters. + Usually this function returns 256x256. However, when called + in a var/mega region it returns the size of the entire simulator. + + + list osGetRegionStats(); + + Returns a list of float values representing a number of region + statistics (many of the values shown in the "Stats Bar" of + LL-based clients). Provides similar functionality to llGetRegionFPS() + and llGetRegionTimeDilation(), but returns 21 statistics simultaneously. + + + string osGetScriptEngineName(); + + Returns the name of the script engine which is currently enabled on the server. + + + integer osGetSimulatorMemory(); + + + string osGetSimulatorVersion(); + + This function returns a string containing the current simulator version. + + + string osLoadedCreationDate(); + + This function returns a string containing the date that a sim + was first created. An example of the string returned is + "Monday, December 07, 2009". It will return empty string if the + region hasn't been created by oar import, or the region + uses SQLite for region database. + + + string osLoadedCreationID(); + + This function returns a string containing the UUID that a + sim was originally created with. + It will return empty string if the region hasn't been created + by oar import, or the region uses SQLite as region database. + + + string osLoadedCreationTime(); + + This function returns a string containing the time that a sim + was first created. An example of the string returned is "2:06:48 AM". + It will return empty string if the region hasn't been created + by oar import, or the region uses SQLite for region database. + + + integer osConsoleCommand(string command); + + This function allows an LSL script to directly execute a command + to opensim's console. Even if the function is available, only + administrators/gods can successfully execute it. + In addition, one can further restrict this function to only + certain administrators/gods. See Threat level for more information + on how to do this. + If the script owner does have the necessary permissions to call + this function, then they can do anything someone with direct access + to the command console could do, such as changing the + avatar passwords, deleting sims, changing the terrain, etc. + This command represents the highest security threat of any OSSL + function, giving it a threat level of Severe. + + Do not use or allow this function unless you are absolutely + sure of what you're doing! + + + void osRegionNotice(string msg); + + Sends a region notice to the entire current region. + + + integer osRegionRestart(float seconds); + + Restarts a region after a specified timeout. Only estate managers + and administrators can successfully execute this function. + + + void osSetParcelMediaURL(string url); + + Sets the Media URL for the parcel the scripted object is in. + + + void osSetParcelSIPAddress(string SIPAddress); + + + void osSetPrimFloatOnWater(integer float); + + + void osGrantScriptPermissions(key allowed_key, string function); + + Dynamically allow ossl execution to owner/creator/group by function name. + + + void osRevokeScriptPermissions(key revoked_key, string function); + + Dynamically allow/disallow ossl execution to owner/creator/group by function name. + + + void osCollisionSound(string impact_sound, double impact_volume); + + Sets collision sound to impact_sound with specified volume. + + + float osDie(key objectUUID); + + Deletes an object depending on the target uuid. + Note : Only allow osDie() on objects rezzed by the + script prim Group (linkset) or on it self. + + + string osFormatString(string format,list params); + + Return the string with parameters substituted into it. These parameters + need to be incrementing numbers, starting at zero, and surrounded by + single accolades (also known as curly brackets). + + + string osKey2Name(key id); + + Returns the avatar's name, based on their UUID. + + + float osList2Double(list src, integer index); + + This function converts a value in the specified index of the list src + to the double data type. However, OSSL does not have a double data type. + + + list osMatchString(string src, string pattern, integer start); + + This function returns a list containing the matches from the given string. + + + float osMax(Double a, Double b); + + Returns the larger of two numbers. Wraps to system Math.Max() + + + float osMin(Double a, Double b); + + Returns the smaller of two numbers. Wraps to the system Math.Min() function. + + + Hashtable osParseJSON(string JSON); + + + osParseJSONNew(string JSON); + + Returns osd deserialized JSON to object. + + + string osReplaceString(string src, string pattern, string replace, int count, int start); + + This function is for regular expression-based string replacement. The count parameter + specifies the total number of replacements to make where -1 makes all possible replacements. + + + integer osRegexIsMatch(string input, string pattern); + + Returns 1 if the input string matches the regular expression pattern. + + + void osSetContentType(key id, string type); + + Sets an arbitrary content return type for an llRequestUrl(). + + + void osSetStateEvents(integer events); + + + string osUnixTimeToTimestamp(integer epoch); + + This function allows an input Unix time to be converted to an llGetTimeStamp() + format. Please note that there will be no second fractions. This is because + the implementation works with seconds only. + + + void osVolumeDetect(integer detect); + + + + + Every state must have at least one handler. You can choose to + handle an event by defining one of the the reserved + event handlers named here. + + at_target(integer tnum, vector targetpos, vector ourpos); + + This event handler is triggered when the scripted object comes within + a defined range of the target position targetpos + (defined by the llTarget function call). + + + + at_rot_target(integer number, rotation target_rotation, rotation our_rotation); + + This event is triggered when a script comes within a defined + angle of a target rotation. The range is set by a call + to llRotTarget. + + + + attach(key attached); + + This event is triggered whenever a object with this script is + attached or detached from an avatar. If it is attached, + attached is the key of the avatar it is attached to, otherwise + attached is NULL_KEY. + + + + changed(integer change); + + Triggered when various events change the object. The change + argument will be a bitfield of change constants. + + + + collision(integer total_number); + + This event is raised while another object is colliding with + the object the script is attached to. The number of + detected objects is passed to the script. Information on + those objects may be gathered via the llDetected* library + functions. + (Collisions are also generated if a user walks into an object.) + + + + collision_end(integer total_number); + + This event is raised when another object stops colliding with + the object the script is attached to. The number of + detected objects is passed to the script. Information on those + objects may be gathered via the llDetected* library + functions. + (Collisions are also generated if a user walks into an object.) + + + + collision_start(integer total_number); + + This event is raised when another object begins to collide with + the object the script is attached to. The number of + detected objects is passed to the script. Information on + those objects may be gathered via the llDetected* library + functions. + (Collisions are also generated if a user walks into an object.) + + + + control(key name, integer levels, integer edges); + + Once a script has the ability to grab control inputs from the avatar, + this event will be used to pass the commands + into the script. The levelsand edgesare bitfields + of control constsants. + + + + dataserver(key requested, string data); + + This event is triggered when the requested data is returned + to the script. Data may be requested by the + llRequestAgentData, the llRequestInventoryData, + and the llGetNotecardLine function calls. + + + + email(string time, string address, string subject, string body, integer remaining); + + This event is triggered when an email sent to this script arrives. + The remaining tells how many more emails are known as still pending. + + + + http_request(key request_id, string method, string body); + + Triggered when task receives an HTTP request. + HTTP request id for response use, and function response identification. + GET, POST, PUT + Contents of the request. + + + + http_response(key request_id, integer status, list metadata, string body); + + This event handler is invoked when an HTTP response is received for + a pending llHTTPRequest request or if a pending request fails or times out. + + + + land_collision(vector position); + + This event is raised when the object the script is attached + to is colliding with the ground. + + + + land_collision_end(vector position); + + This event is raised when the object the script is attached + to stops colliding with the ground. + + + + land_collision_start(vector position); + + This event is raised when the object the script is attached + to begins to collide with the ground. + + + + link_message(integer sender_number, integer number, string message, key id); + + Triggered when object receives a link message via llMessageLinked + library function call. + + + + listen(integer channel, string name, key id, string message); + + This event is raised whenever a chat message matching the + constraints passed in the llListen command is heard. + The nameand id of the speaker as well as the messageare passed + in as parameters. Channel 0 is the public + chat channel that all avatars see as chat text. + Channels 1 through 2,147,483,648 are private channels that are not + sent to avatars but other scripts can listen on those channels. + + + + money(key giver, integer amount); + + This event is triggered when user giver has given an amount + of Linden dollars to the object. + + + + moving_end(void); + + Triggered whenever a object with this script stops moving. + + + + moving_start(void); + + Triggered whenever a object with this script starts moving. + + + + no_sensor(void); + + This event is raised when sensors are active + (via the llSensor library call) but are not sensing anything. + + + + not_at_rot_target(void); + + When a target is set via the llRotTarget library call, + but the script is outside the specified angle this event is raised. + + + + not_at_target(void); + + When a target is set via the llTarget library call, + but the script is outside the specified range this event is raised. + + + + object_rez(key id); + + Triggered when object rez-es in another object from its + inventory via the llRezObject api. The id is the globally + unique key for the object. + + + + on_rez(integer start_param); + + Triggered whenever a object is rez-ed from inventory + or by another object. The start_paramis the parameter + passed in from the call to llRezObject. + + + + path_update(integer Type, list Reserved) + + This event is called to inform the script of changes within the object's path-finding status. + One of the PU* (Path Update) constants. + + + + remote_data(integer event_type, key channel, key message_id, string sender, integer idata, string sdata); + + Triggered by various XML-RPC calls with event_type specifying the type of data. + + + + run_time_permissions(integer permissions); + + Scripts need permission from either the owner or the avatar + they wish to act on before they perform certain + functions, such as debiting money from their owners account, + triggering an animation on an avatar, or capturing + control inputs. The llRequestPermissions library + function is used to request these permissions and the various + permissions integer constants can be supplied. + The integer returned to this event handler contains the current set + of permissions flags, so if permissionseqal 0 then no permissions are set. + + + + sensor(integer total_number); + + This event is raised whenever objects matching the constraints + of the llSensor command are detected. + The number of detected objects is passed to the script + in the total_number parameter. Information on those + objects may be gathered via the llDetected* library functions. + + + + state_entry(void); + + The state_entry event occurs whenever a new state is entered, + including program start, and is always the first event handled. + + + + state_exit(void); + + The state_exit event occurs whenever the state command + is used to transition to another state. It is handled + before the new states state_entry event. + + + + timer(void); + + This event is raised at regular intervals set by the + llSetTimerEvent library function. + + + + touch(integer total_number); + + This event is raised while a user is touching the object + the script is attached to. The number of touching objects is + passed to the script in the total_number parameter. + Information on those objects may be gathered via the + llDetected* library functions. + + + + touch_end(integer total_number); + + This event is raised when a user stops touching the object + the script is attached to. The number of touching + objects is passed to the script in the total_number parameter. + Information on those objects may be gathered + via the llDetected* library functions. + + + + touch_start(integer total_number); + + This event is raised when a user first touches the object the script is + attached to. The number of touching objects is passed to the script in + the total_number parameter. Information on those objects may be gathered + via the llDetected() library functions. + + + + transaction_result(key RequestID, integer Success, string Text) + + Triggered by llTransferMoney() function. + The key returned by an llTransferMoney call to identify the specific request. + Boolean value, indicating success of the transfer + Message which depends on the result of the transaction. If iSuccess is true, this will contain <destination_id>,<amount> + + + + + + To ease scripting, many useful constants are defined by LSL. + + The boolean constants represent the values for TRUE and FALSE. + LSL represents booleans as integer values 1 + and 0 respectively. Since there is no boolean type these + constants act as a scripting aid usually employed for + testing variables which conceptually represent boolean values. + + An integer constant for boolean comparisons. Has the value '1'. + + + An integer constant for boolean comparisons. Has the value '0'. + + + + + The status constants are used in the llSetStatus and llGetStatus + library calls. These constants can be bitwise ORed + together when calling the library functions to set the same + value to more than one status flag + Status Constants + + Controls whether the object can be grabbed. + A grab is the default action when in third person, and is + available as the hand tool in build mode. + This is useful for physical objects that you don't want other + people to be able to trivially disturb. + The default if FALSE + + Prevent click-and-drag movement on all prims in the object. + Argument(s) passed to function had a bounds error. + + + Controls whether the object is returned to the owners + inventory if it wanders off the edge of the world. It is + useful to set this status TRUE for things like bullets + or rockets. The default is TRUE + + .An internal error occurred. + Function was called with malformed parameters. + .Object or other item was not found. + Feature not supported. + Result of function call was success. + + Controls whether the object moves physically. + This controls the same flag that the ui checkbox for + Physical controls. The default is FALSE. + + + Controls whether the object collides or not. + Setting the value to TRUE makes the object non-colliding with + all objects. It is a good idea to use this for most objects + that move or rotate, but are non-physical. It is also + useful for simulating volumetric lighting. The default is FALSE. + + + + + + Controls whether the object can physically rotate around + the specific axis or not. This flag has no meaning + for non-physical objects. Set the value to FALSE + if you want to disable rotation around that axis. The + default is TRUE for a physical object. + A useful example to think about when visualizing + the effect is a sit-and-spin device. They spin around the + Z axis (up) but not around the X or Y axis. + + + Controls whether the object can cross region boundaries + and move more than 20 meters from its creation + point. The default if FALSE. + + Argument(s) passed to function had a type mismatch. + Whitelist Failed. + + + + These constants can be combined using the binary | operator and are used in the llSensor and related calls. + Object Type Constants + + Objects in world that are running a script or + currently pysically moving. + + Objects in world that are agents. + + + Static in-world objects. + + Scripted in-world objects. + + + + + The permission constants are used for passing values + to llRequestPermissions, determing the value of + llGetPermissions, and explicitly passed to the + run_time_permissions event. For many of the basic library + functions to work, a specific permission must be enabled. + The permission constants can be ored together to be + used in conjunction. + + Permission Constants + + If this permission is enabled, the object can successfully + call llAttachToAvatar to attach to the given avatar. + + + If this permission is enabled, the object can successfully + call llCreateLink, llBreakLink, and + llBreakAllLinks to change links to other objects. + + + + If this permission is enabled, the object can successfully + call llGiveMoney to debit the owners account. + + + (not yet implemented) + + + (not yet implemented) + + + + (not yet implemented) + + + (not yet implemented) + + + If this permission enabled, the object can successfully + call the llTakeControls libray call. + + + + + If this permission is enabled, the object can successfully + call llStartAnimation for the avatar that owns this + object. + + + + + + These constants can be used to refer to a specific inventory + type in calls to llGetInventoryNumber + andllGetInventoryName. + Inventory Constants + + + + + + + + + + + + + + + + These constants are used to refer to attachment points + in calls to llAttachToAvatar. + Attachment Constants + + Attach to the avatar's geometric centre. + + + Attach to the avatar back. + + + Attach to the avatar belly. + + + Attach to the avatar chest. + + + Attach to the avatar chin. + + + Attach to the avatar head. + + + + Attach to the avatar left ear. + + + Attach to the avatar left eye. + + + Attach to the avatar left foot. + + + Attach to the avatar left hand. + + + Attach to the avatar left hip. + + + Attach to the avatar left lower arm. + + + Attach to the avatar lower left leg. + + + Attach to the avatar left pectoral. + + + Attach to the avatar left shoulder. + + + Attach to the avatar lower upper leg. + + + + Attach to the avatar mouth. + + + Attach to the avatar's neck. + + + Attach to the avatar nose. + + + Attach to the avatar pelvis. + + + + Attach to the avatar right upper arm. + + + Attach to the avatar right lower arm. + + + Attach to the avatar left upper arm. + + + Attach to the avatar right ear. + + + Attach to the avatar right eye. + + + Attach to the avatar right foot. + + + Attach to the avatar right hand. + + + Attach to the avatar right hip. + + + Attach to the avatar right lower leg. + + + Attach to the avatar right pectoral. + + + Attach to the avatar right shoulder. + + + Attach to the avatar right upper leg. + + + + + + + + + + + + + + These constants are only used in calls to llModifyLand. + The constants are equivalent to the similarly labelled + user interface elements for editing land in the viewer. + Land Constants + + Use a large brush size. + + + Action to level the land. + + + Action to lower the land. + + + Use a medium brush size. + + + + Action to raise the land. + + + + Use a small brush size. + + + + + + These constants are used in calls to llSetLinkColor and + llMessageLinked. + + Link Constants + + This targets every object except the root in the linked set. + + + This targets every object in the linked set except + the object with the script. + + + This targets the root of the linked set. + + + This targets every object in the linked set. + + + + + + These constants are used in llTakeControls as well + as the control event handler. + Control Constants + + Test for the avatar move forward control. + + + Test for the avatar move back control. + + + Test for the avatar move left control. + + + Test for the avatar move right control. + + + Test for the avatar rotate left control. + + + Test for the avatar rotate right control. + + + Test for the avatar move up control. + + + Test for the avatar move down control. + + + Test for the avatar left button control. + + + Test for the avatar left button control while in mouse look. + + + + + These constants are used in the changed event handler. + Change Constants + The object inventory has changed because an item was added through the llAllowInventoryDrop interface. + The object colour has changed. + The object inventory has changed. + The object has linked or its links were broken. + + + + + The object scale has changed. + The object shape has changed, e.g., a box to a cylinder. + + The texture offset, scale rotation, or simply the object texture has changed. + + + + These constants are used to determine the variable type + stored in a heterogenous list. The value returned from + llGetListEntryType can be used for comparison against + these constants. + Type Constants + The list entry is an integer. + The list entry is a float. + The list entry is a string. + The list entry is a key. + The list entry is a vector. + The list entry is a rotation. + The list entry is invalid. + + + + Each of these constants represents a bit in the integer + returned from the llGetAgentInfo function and can be used + in an expression to determine the specified information + about an agent. + Agent Info Constants + + The agent has attachments. + + + + + The agent is flying. + + + + + The agent has scripted attachments. + + + + + + These constants are used in the llSetTextureAnim api to + control the animation mode. + Texture Animation Constants + + Texture animation is on. + + + Loop the texture animation. + + + play animation going forwards, then backwards. + + + Play animation in reverse direction. + + + Animate texture rotation. + + + Animate the texture scale. + + + slide in the X direction, instead of playing separate frames. + + + + + These constants are used in calls to the llParticleSystem + api to specify parameters. + Particle System Parameters + + Particles bounce off of a plane at the objects Z height. + + + The particle glows. + + + a float which determines the ending alpha of the object. + + + a vector <r, g, b> which determines the ending + color of the object. + + + a vector <sx, sy, z>, which is the ending + size of the particle billboard in meters (z is ignored). + + + Each particle that is emitted by the particle system is + simulated based on the following flags. To use + multiple flags, bitwise or (|) them together. + PSYS_PART_FLAGS Values + + + The particle position is relative to the source objects position. + + + The particle orientation is rotated so the vertical + axis faces towards the particle velocity. + + + Interpolate both the color and alpha from the start + value to the end value. + + + Interpolate the particle scale from the start value + to the end value. + + + age in seconds of a particle at which it dies. + + + a float which determines the starting alpha of the object. + + + a vector <r, g, b> which determines the starting colour of the object. + + + a vector <sx, sy, z>, + which is the starting size of the particle billboard + in meters (z is ignored). + + + + The particle heads towards the location of the target + object as defined by PSYS_SRC_TARGET_KEY. + + + Particles have their velocity damped towards the wind velocity. + + + + A vector <x, y, z> which is the acceleration to apply on particles. + + + how often to release a particle burst (float seconds). + + + Area in radians specifying where particles + will NOT be created (for ANGLE patterns) + + + Area in radians filled with particles + (for ANGLE patterns) (if lower than PSYS_SRC_ANGLE_BEGIN, + acts as PSYS_SRC_ANGLE_BEGIN itself, + and PSYS_SRC_ANGLE_BEGIN acts as PSYS_SRC_ANGLE_END) + + + specifies the inner angle of the arc created + by the PSYS_PART_SRC_PATTERN_ANGLE or + PSYS_PART_SRC_PATTERN_ANGLE_CONE source pattern. + The area specified will not have particles + in it.. + + + how many particles to release in a burst. + + + what distance from the center of the object + to create the particles. + + + minimum speed that a particle should be moving. + + + maximum speed that a particle should be moving. + + + how long this particle system should last, + 0.0 menas forever. + + + Sets the angular velocity to rotate the axis + that SRC_PATTERN_ANGLE and + SRC_PATTERN_ANGLE_CONE use.. + + + specifies the outer angle of the arc created + by the PSYS_PART_SRC_PATTERN_ANGLE or + PSYS_PART_SRC_PATTERN_ANGLE_CONE source pattern. + The area between the outer and inner angle + will be filled with particles.. + + + The pattern which is used to generate particles. + Use one of the following values: + PSYS_SRC_PATTERN Values + + + + + + + + the key of a target object to move towards + if PSYS_PART_TARGET_POS_MASK is enabled. + + + an asset name for the texture to use for the particles. + + + + + These constants are used in calls to the + llRequestAgentData api to collect information about + an agent which will + be provided in the dataserver event. + + The date the agent was born returned in ISO 8601 format of YYYY-MM-DD. + + + The name of the agent. + + + "1" for online "0" for offline. + + + + Returns the agent ratings as a comma separated string + of six integers. They are: + + 1. Positive rated behavior + 2. Negative rated behavior + 3. Positive rated appearance + 4. Negative rated appearance + 5. Positive rated building + 6. Negative rated building + + + + + + + + + LSL provides a small collection of floating point + constants for use in float arithmetic. + These constants are usually + employed while performing trigonometric calculations, + but are sometimes useful for other applications such as + specifying arc radians to sensor or particle system functions. + Float Constants + + 0.01745329 - Number of radians per degree. + You can use this to convert degrees to radians by multiplying + the degrees by this number. + + + 3.14159265 - The radians of a hemicircle. + + + 1.57079633 - The radians of a quarter circle. + + + 57.2957795 - Number of degrees per radian. + You can use this number to convert radians to degrees by + multiplying the radians by this number. + + + 1.41421356 - The square root of 2. + + + 6.28318530 - The radians of a circle. + + + + + There is only one key constant which acts as an invalid key: NULL_KEY. + + + + + + + + + + + There is one uncategorized integer constant + which is used in some of the texturing and coloring api: ALL_SIDES + + + + + There is one uncategorized string constant + which is used in the dataserver event: EOF + + + + + There is only one vector constant which + acts as a zero vector: ZERO_VECTOR = <0,0,0>. + + + + + + There is only one rotation constant + which acts as a zero rotation: ZERO_ROTATION = <0,0,0,1>. + + + + + Parameters + + + + + A vector of timescales for exponential + decay of the vehicles linear velocity along its preferred axes of + motion (at, left, up). + Range = [0.07, inf) seconds for each element of the vector. + + + A vector of timescales for exponential + decay of the vehicles angular velocity about its preferred axes of + motion (at, left, up). + Range = [0.07, inf) seconds for each element of the vector. + + + The direction and magnitude (in preferred frame) + of the vehicles linear motor. The vehicle will accelerate + (or decelerate if necessary) to match its velocity to its motor. + Range of magnitude = [0, 30] meters/second. + + + The timescale for exponential approach to full linear motor velocity. + + + The timescale for exponential decay of the linear motors magnitude. + + + The direction and magnitude (in preferred frame) + of the vehicles angular motor.The vehicle will accelerate + (or decelerate if necessary) to match its velocity to its motor. + + + The timescale for exponential approach to full angular motor velocity. + + + The timescale for exponential decay of the angular motors magnitude. + + + The height (above the terrain or water, or global) + at which the vehicle will try to hover. + + + A slider between minimum (0.0) and maximum anti-gravity (1.0). + + + A slider between minimum (0.0) and maximum (1.0) + deflection of linear velocity. That is, its a simple + scalar for modulating the strength of linear deflection. + + + The timescale for exponential success of linear + deflection deflection. It is another way to specify how much + time it takes for the vehicles linear velocity + to be redirected to its preferred axis of motion. + + + A slider between minimum (0.0) and maximum (1.0) + deflection of angular orientation. That is, its a simple + scalar for modulating the strength of angular + deflection such that the vehicles preferred axis of motion + points toward its real velocity. + + + The timescale for exponential success of linear + deflection deflection. Its another way to specify the strength + of the vehicles tendency to reorient itself so + that its preferred axis of motion agrees with its true velocity. + + + A slider between minimum (0.0 = wobbly) and + maximum (1.0 = firm as possible) stability of the vehicle to + keep itself upright. + + + The period of wobble, or timescale for + exponential approach, of the vehicle to rotate such that its preferred + "up" axis is oriented along the worlds "up" axis. + + + A slider between anti (-1.0), none (0.0), + and maxmum (1.0) banking strength. + + + A slider between static (0.0) and dynamic (1.0) + banking. "Static" means the banking scales only with the + angle of roll, whereas "dynamic" is a term + that also scales with the vehicles linear speed. + + + The timescale for banking to exponentially + approach its maximum effect. This is another way to scale the + strength of the banking effect, however it affects the + term that is proportional to the difference between what + the banking behavior is trying to do, and what the + vehicle is actually doing. + + + A rotation of the vehicles preferred axes of + motion and orientation (at, left, up) with respect to the vehicles + local frame (x, y, z). + + + + + Flags + + + + + Old, changed to VEHICLE_FLAG_NO_DEFLECTION_UP + + + This flag prevents linear deflection parallel to world z-axis. + This is useful for preventing ground vehicles + with large linear deflection, like bumper cars, + from climbing their linear deflection into the sky. + + + For vehicles with vertical attractor + that want to be able to climb/dive, for instance, + airplanes that want to use the banking feature. + + + Ignore terrain height when hovering. + + + Ignore water height when hovering. + + + Hover at global height. + + + Hover doesnt push down. Use this flag for hovering vehicles + that should be able to jump above their hover + height. + + + Prevents ground vehicles from motoring into the sky. + + + + + Types + + Uses linear deflection for lift, no hover, and banking to turn. + // very little friction along forward-back axis + llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <200, 10, 5> ); + // uniform angular friction + llSetVehicleFloatParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, 20 ); + // linear motor + llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0> ); + llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 2 ); + llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 60 ); + // angular motor + llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0> ); + llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 4 ); + llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 8 ); + // no hover + llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, 0 ); + llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY, 0.5 ); + llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 1000 ); + llSetVehicleFloatParam( VEHICLE_BUOYANCY, 0 ); + // linear deflection + llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.5 ); + llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 0.5 ); + // angular deflection + llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 1.0 ); + llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 2.0 ); + // vertical attractor + llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.9 ); + llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 2 ); + // banking + llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, 1 ); + llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0.7 ); + llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 2 ); + // default rotation of local frame + llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> ); + // remove these flags + llRemoveVehicleFlags( VEHICLE_FLAG_NO_DEFLECTION_UP + | VEHICLE_FLAG_HOVER_WATER_ONLY + | VEHICLE_FLAG_HOVER_TERRAIN_ONLY + | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT + | VEHICLE_FLAG_HOVER_UP_ONLY + | VEHICLE_FLAG_LIMIT_MOTOR_UP ); + // set these flags + llSetVehicleFlags( VEHICLE_FLAG_LIMIT_ROLL_ONLY ); + + + Hover, and friction, but no deflection. + // uniform linear friction + llSetVehicleFloatParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, 5 ); + // uniform angular friction + llSetVehicleFloatParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, 10 ); + // linear motor + llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0> ); + llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 5 ); + llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 60 ); + // angular motor + llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0> ); + llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 6 ); + llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 10 ); + // hover + llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, 5 ); + llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY, 0.8 ); + llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 10 ); + llSetVehicleFloatParam( VEHICLE_BUOYANCY, 1 ); + // no linear deflection + llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0 ); + llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 5 ); + // no angular deflection + llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0 ); + llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 5 ); + // no vertical attractor + llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 1 ); + llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 1000 ); + // no banking + llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, 0 ); + llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0.7 ); + llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 5 ); + // default rotation of local frame + llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> ); + // remove all flags + llRemoveVehicleFlags( VEHICLE_FLAG_NO_DEFLECTION_UP + | VEHICLE_FLAG_HOVER_WATER_ONLY + | VEHICLE_FLAG_LIMIT_ROLL_ONLY + | VEHICLE_FLAG_HOVER_TERRAIN_ONLY + | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT + | VEHICLE_FLAG_HOVER_UP_ONLY + | VEHICLE_FLAG_LIMIT_MOTOR_UP ); + + + Hovers over water with lots of friction and some anglar deflection. + // least for forward-back, most friction for up-down + llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <10, 3, 2> ); + // uniform angular friction (setting it as a scalar rather than a vector) + llSetVehicleFloatParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, 10 ); + // linear motor wins after about five seconds, decays after about a minute + llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0> ); + llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 5 ); + llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 60 ); + // angular motor wins after four seconds, decays in same amount of time + llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0> ); + llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 4 ); + llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 4 ); + // hover + llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, 0 ); + llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY, 0.5 ); + llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 2.0 ); + llSetVehicleFloatParam( VEHICLE_BUOYANCY, 1 ); + // halfway linear deflection with timescale of 3 seconds + llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.5 ); + llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 3 ); + // angular deflection + llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.5 ); + llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 5 ); + // somewhat bounscy vertical attractor + llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.5 ); + llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 5 ); + // weak negative damped banking + llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, -0.3 ); + llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0.8 ); + llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 1 ); + // default rotation of local frame + llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> ); + // remove these flags + llRemoveVehicleFlags( VEHICLE_FLAG_HOVER_TERRAIN_ONLY + | VEHICLE_FLAG_LIMIT_ROLL_ONLY + | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT); + // set these flags + llSetVehicleFlags( VEHICLE_FLAG_NO_DEFLECTION_UP + | VEHICLE_FLAG_HOVER_WATER_ONLY + | VEHICLE_FLAG_HOVER_UP_ONLY + | VEHICLE_FLAG_LIMIT_MOTOR_UP ); + + + Another vehicle that bounces along the ground but needs + the motors to be driven from external controls or + timer events. + // most friction for left-right, least for up-down + llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <100, 2, 1000> ); + // no angular friction + llSetVehicleVectorParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, <1000, 1000, 1000> ); + // linear motor wins after about a second, decays after about a minute + llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0> ); + llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 1 ); + llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 60 ); + // angular motor wins after a second, decays in less time than that + llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0> ); + llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 1 ); + llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 0.8 ); + // no hover + llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, 0 ); + llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY, 0 ); + llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 1000 ); + llSetVehicleFloatParam( VEHICLE_BUOYANCY, 0 ); + // maximum linear deflection with timescale of 2 seconds + llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 1 ); + llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 2 ); + // no angular deflection + llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0 ); + llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 10 ); + // critically damped vertical attractor + llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 1 ); + llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 10 ); + // weak negative critically damped banking + llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, -0.2 ); + llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 1 ); + llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 1 ); + // default rotation of local frame + llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> ); + // remove these flags + llRemoveVehicleFlags( VEHICLE_FLAG_HOVER_WATER_ONLY + | VEHICLE_FLAG_HOVER_TERRAIN_ONLY + | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT); + // set these flags + llSetVehicleFlags( VEHICLE_FLAG_NO_DEFLECTION_UP + | VEHICLE_FLAG_LIMIT_ROLL_ONLY + | VEHICLE_FLAG_HOVER_UP_ONLY + | VEHICLE_FLAG_LIMIT_MOTOR_UP ); + + + + Simple vehicle that bumps along the ground, + and likes to move along its local x-axis. + // most friction for left-right, least for up-down + llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <30, 1, 1000> ); + // no angular friction + llSetVehicleVectorParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, <1000, 1000, 1000> ); + // no linear motor + llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0> ); + llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 1000 ); + llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 120 ); + // no angular motor + llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0> ); + llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 1000 ); + llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 120 ); + // no hover (but with timescale of 10 sec if enabled) + llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, 0 ); + llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY, 10 ); + llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 10 ); + llSetVehicleFloatParam( VEHICLE_BUOYANCY, 0 ); + // maximum linear deflection with timescale of 1 second + llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 1 ); + llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 1 ); + // no angular deflection + llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0 ); + llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 10 ); + // no vertical attractor (doesnt mind flipping over) + llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 1 ); + llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 1000 ); + // no banking + llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, 0 ); + llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 1 ); + llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 10 ); + // default rotation of local frame + llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> ); + // remove these flags + llRemoveVehicleFlags( VEHICLE_FLAG_HOVER_WATER_ONLY + | VEHICLE_FLAG_HOVER_TERRAIN_ONLY + | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT + | VEHICLE_FLAG_HOVER_UP_ONLY ); + // set these flags (the limit_roll flag will have no effect + // until banking is enabled, if ever) + llSetVehicleFlags( VEHICLE_FLAG_NO_DEFLECTION_UP + | VEHICLE_FLAG_LIMIT_ROLL_ONLY + | VEHICLE_FLAG_LIMIT_MOTOR_UP ); + + + + + + + + If set to false, character will not attempt to catch up on lost time when pathfinding performance is low, potentially providing more reliable movement (albeit while potentially appearing to be more stuttery). Default is true to match pre-existing behavior. + Allows you to specify that a character should not try to avoid other characters, should not try to avoid dynamic obstacles (relatively fast moving objects and avatars), or both. + Makes the character jump. Requires an additional parameter, the height to jump, between 0.1m and 2.0m. This must be provided as the first element of the llExecCharacterCmd option list. + + Stops any current pathfinding operation. + Speed of pursuit in meters per second. + The character's maximum speed while turning--note that this is only loosely enforced (i.e., a character may turn at higher speeds under certain conditions). + Set collision capsule length - cannot be less than two times the radius. + The character's maximum acceleration rate. + The character's maximum deceleration rate. + The character's maximum speed. + The character's turn radius when travelling at CHARACTER_MAX_TURN_SPEED. + Valid options are: VERTICAL, HORIZONTAL. + Set collision capsule radius. + Takes a boolean parameter. If TRUE, the character cannot voluntarilly leave the parcel, but can return to it. + Specifies which walk-ability coefficient will be used by this character. + + + + + + Makes character navigate in a straight line toward pos. May be set to TRUE or FALSE. + + + + One of TRAVERSAL_TYPE_FAST, TRAVERSAL_TYPE_SLOW, and TRAVERSAL_TYPE_NONE. + + + + + Selects a random destination near the offset. + Define whether the character attempts to predict the target's location. + Go to a position offset from the target. + Define whether the character needs a line-of-sight to give chase. + + + + + + + U+FDD2 + + U+FDD7 + U+FDD0 + U+FDD5 + U+FDD3 + U+FDD1 + U+FDD4 + >U+FDD6 + + + + + + + + + + + + + + + Constants that do not fit into any of the previously defined categories. + + + + + + + + + + + + + + + + + + + + + When the prim is touched, the buy dialog is opened + + + When the prim is touched, the web media dialog is opened" + + + Performs the default action: when the prim is touched, touch events are triggered" + + + When the prim is touched, the object inventory dialog is opened + + + When the prim is touched, the pay dialog is opened + + + When the prim is touched, html-on-a-prim is enabled? + + + When the prim is touched, the avatar sits upon it + + + When the prim is touched, touch events are triggered" + + + "application/atom+xml" + "application/x-www-form-urlencoded" + "text/html", only valid for embedded browsers on content owned by the person viewing. Falls back to "text/plain" otherwise. + "application/json" + "application/llsd+xml" + "application/rss+xml" + "text/plain" + "application/xhtml+xml" + "application/xml" + + + DEBUG_CHANNEL is an integer constant that, when passed to + llSay, llWhisper, or llShout as a channel parameter, + will print text to the Script Warning/Error Window. + It has the value '2147483647'. + + Used with llSetPhysicsMaterial to enable the density value. Must be between 1.0 and 22587.0 (in Kg/m^3 -- see if you can figure out what 22587 represents) + + Add the agent to this estate's Allowed Residents list. + Remove the agent from this estate's Allowed Residents list. + Add the group to this estate's Allowed groups list. + Remove the group from this estate's Allowed groups list. + Add the agent to this estate's Banned residents list. + Remove the agent from this estate's Banned residents list. + + Used with llSetPhysicsMaterial to enable the friction value. Must be between 0.0 and 255.0 + Used with llSetPhysicsMaterial to enable the gravity multiplier value. Must be between -1.0 and +28.0 + + + + Usage: 'HTTP_CUSTOM_HEADER, string, string'. Add an extra custom HTTP header to the request. The first string is the name of the parameter to change, e.g. "Pragma", and the second string is the value, e.g. "no-cache". + + + + Allows enabling/disbling of the "Pragma: no-cache" header. + + + + For use with KFM_COMMAND. + For use with KFM_COMMAND. + For use with KFM_COMMAND. + + + For use with KFM_MODE. + For use with KFM_MODE. + + For use with KFM_MODE. + For use with KFM_MODE. + For use with KFM_DATA. + For use with KFM_DATA. + + + + + + + + + + + + + Gets the attachment point to which the object is attached. + + Gets the object's creator key. + If id is an avatar, a NULL_KEY is returned. + + Gets the object's description. + If id is an avatar, an empty string is returned. + + Gets the prims's group key. + If id is an avatar, a NULL_KEY is returned. + + Gets the object's name. + Gets an object's owner's key. + If id is group owned, a NULL_KEY is returned. + + Returns the pathfinding setting of any object in the region. It returns an integer matching one of the OPT_* constants. + Returns boolean, detailing if phantom is enabled or disabled on the object. + If id is an avatar or attachment, 0 is returned. + Returns boolean, detailing if physics is enabled or disabled on the object. + If id is an avatar or attachment, 0 is returned. + Gets the object's position in region coordinates. + Gets the id of the root prim of the object requested. + Gets the object's rotation. + Returns boolean, detailing if temporary is enabled or disabled on the object. + Gets the object's velocity. + + + + + + + + + + + + + Returned for avatars. + Returned for pathfinding characters. + Returned for exclusion volumes. + Returned for movable obstacles, movable phantoms, physical, and volumedetect objects. + Returned for material volumes. + Returned for attachments, Linden trees, and grass. + Returned for static obstacles. + Returned for walkable objects. + + + + + + + + + + + + + + + + + + + + + The parcel's avatar visibility setting. (1 char.). + + + + + + + + + + + + + + + + + + + + + + + + + + Use this to get or set the parcel media description. + + + Used to get or set the parcel's media looping variable. + + + + + + Use this to get or set the parcel media pixel resolution. + + + + + + Use this to get or set the parcel media MIME type (e.g. "text/html"). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PRIM_GLOW is used to get or set the glow status of the face. + + + + + + + + + + + + + + + + + + + + + + Boolean. Gets/Sets the default image state (the image that the user sees before a piece of media is active) for the chosen face. The default image is specified by Second Life's server for that media type. + Boolean. Gets/Sets whether auto-looping is enabled. + Boolean. Gets/Sets whether the media auto-plays when a Resident can view it. + Boolean. Gets/Sets whether auto-scaling is enabled. Auto-scaling forces the media to the full size of the texture. + Boolean. Gets/Sets whether clicking the media triggers auto-zoom and auto-focus on the media. + Integer. Gets/Sets the style of controls. Can be either PRIM_MEDIA_CONTROLS_STANDARD or PRIM_MEDIA_CONTROLS_MINI. + Mini web navigation controls; does not include an address bar. + Standard web navigation controls. + String. Gets/Sets the current url displayed on the chosen face. Changing this URL causes navigation. 1024 characters Maximum. + Boolean. Gets/Sets whether the first click interaction is enabled. + Integer. Gets/Sets the height of the media in pixels. + String. Gets/Sets the home URL for the chosen face. 1024 characters maximum. + + + + + Integer. Gets/Sets the permissions mask that control who can see the media control bar above the object:: PRIM_MEDIA_PERM_ANYONE, PRIM_MEDIA_PERM_GROUP, PRIM_MEDIA_PERM_NONE, PRIM_MEDIA_PERM_OWNER + Integer. Gets/Sets the permissions mask that control who can interact with the object: PRIM_MEDIA_PERM_ANYONE, PRIM_MEDIA_PERM_GROUP, PRIM_MEDIA_PERM_NONE, PRIM_MEDIA_PERM_OWNER + String. Gets/Sets the whitelist as a string of escaped, comma-separated URLs. This string can hold up to 64 URLs or 1024 characters, whichever comes first. + Boolean. Gets/Sets whether navigation is restricted to URLs in PRIM_MEDIA_WHITELIST. + Integer. Gets/Sets the width of the media in pixels. + + + + + + + + Use the convex hull of the prim shape for physics (this is the default for mesh objects). + Ignore this prim in the physics shape. NB: This cannot be applied to the root prim. + Use the normal prim shape for physics (this is the default for all non-mesh objects). + Allows you to set the physics shape type of a prim via lsl. Permitted values are: + PRIM_PHYSICS_SHAPE_NONE, PRIM_PHYSICS_SHAPE_PRIM, PRIM_PHYSICS_SHAPE_CONVEX + + + + + + + + + Render inside out (inverts the normals). + Render an X axis mirror of the sculpty. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Disables profiling + Enables memory profiling + + Triggered when an llEvade character thinks it has hidden from its pursuer. + Triggered when an llEvade character switches from hiding to running + + Goal is not on the navigation-mesh and cannot be reached. + Character cannot navigate from the current location - e.g., the character is off the navmesh or too high above it. + This is a fatal error reported to a character when there is no navmesh for the region. This usually indicates a server failure and users should file a bug report and include the time and region in which they received this message. + There's no good place for the character to go - e.g., it is patrolling and all the patrol points are now unreachable. + + Target (for llPursue or llEvade) can no longer be tracked - e.g., it left the region or is an avatar that is now more than about 30m outside the region. + + Goal is no longer reachable for some reason - e.g., an obstacle blocks the path. + Character has reached the goal and will stop or choose a new goal (if wandering). + Character is near current goal. + + + PUBLIC_CHANNEL is an integer constant that, when passed to + llSay, llWhisper, or llShout as a channel parameter, + will print text to the publicly heard chat channel. Has the value '0'. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Used with llSetPhysicsMaterial to enable the density value. Must be between 0.0 and 1.0 + + Returns the % of pathfinding characters skipped each frame, averaged over the last minute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/Resource/ReleaseNotes.htm b/source/Resource/ReleaseNotes.htm similarity index 97% rename from trunk/Resource/ReleaseNotes.htm rename to source/Resource/ReleaseNotes.htm index 6071a74..58094b7 100644 --- a/trunk/Resource/ReleaseNotes.htm +++ b/source/Resource/ReleaseNotes.htm @@ -1,1982 +1,1982 @@ - - - Release Notes - - - -
-
-

2018-01-15 - Release 2.56.0

-
- * Added all functions of the OSSL library (http://opensimulator.org/wiki/Category:OSSL_Functions). -
* Added the include functionality. -
    -
  • The LSLI extension has been created and is required for the use of the include function.
  • -
  • Scripts can now be included using '//#include("<path>/<file>")' inside an LSLI script.
  • -
  • LSLI scripts can be directly interpreted by the debugger inside the LSL Editor.
  • -
  • LSLI scripts can be exported to LSL scripts.
  • -
- For more information about the include functionality, - please visit - - https://docs.google.com/document/d/1gEkeY4rk-x06PPRPlxVbiPdXS1NDiaiQxZRrVfzwFjA/edit?usp=sharing - -
-

2013-10-18 - Release 2.55.0

-
- * Constants Added: -
    -
  • JSON_DELETE
  • -
-
-
- * Fixes -
    -
  • Auto-complete should now be consistent for functions having no arguments. This was a configuration issue with older tool-tip entries.
  • -
-
-

2013-07-15 - Release 2.54.0

-
- * Constants Added: -
    -
  • AVOID_NONE
  • -
  • JSON_APPEND
  • -
  • OBJECT_CHARACTER_TIME
  • -
  • PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED
  • -
  • PU_FAILURE_PARCEL_UNREACHABLE
  • -
-
-
- * Functions Added: -
    -
  • llGetStaticPath
  • -
  • llXorBase64
  • -
-
-

2013-07-07 - Release 2.53.1

-
- * Fixes -
    -
  • Fixed print dialogue box not opening on AMD64 CPUs
  • -
-
-

2013-07-02 - Release 2.53.0

-
- * Constants Added: -
    -
  • CHARACTER_STAY_WITHIN_PARCEL
  • -
  • ERR_GENERIC
  • -
  • ERR_MALFORMED_PARAMS
  • -
  • ERR_PARCEL_PERMISSIONS
  • -
  • ERR_RUNTIME_PERMISSIONS
  • -
  • ERR_THROTTLED
  • -
  • OBJECT_RETURN_PARCEL
  • -
  • OBJECT_RETURN_PARCEL_OWNER
  • -
  • OBJECT_RETURN_REGION
  • -
  • PERMISSION_RETURN_OBJECTS
  • -
-
- * Functions added: -
-
    -
  • llReturnObjectsByID
  • -
  • llReturnObjectsByOwner
  • -
  • -
-
-

2013-06-22 - Release 2.52.0

-

Added the JSON related constants and functions.

-
- * Constants Added: -
    -
  • JSON_ARRAY
  • -
  • JSON_FALSE
  • -
  • JSON_INVALID
  • -
  • JSON_NULL
  • -
  • JSON_NUMBER
  • -
  • JSON_OBJECT
  • -
  • JSON_STRING
  • -
  • JSON_TRUE
  • -
  • -
- -
-
- * Functions added: -
    -
  • llList2Json
  • -
  • llJson2List
  • -
  • llJsonGetValue
  • -
  • llJsonSetValue
  • -
  • llJsonValueType
  • -
-
-

2013-05-16 - Release 2.51.0

-
- * Constants Added: -
    -
  • CONTENT_TYPE_ATOM
  • -
  • CONTENT_TYPE_FORM
  • -
  • CONTENT_TYPE_JSON
  • -
  • CONTENT_TYPE_LLSD
  • -
  • CONTENT_TYPE_RSS
  • -
  • CONTENT_TYPE_XHTML
  • -
  • CONTENT_TYPE_XML
  • -
  • PERMISSION_OVERRIDE_ANIMATIONS
  • -
-
-
- * Functions added: -
    -
  • llGetAnimationOverride()
  • -
  • llResetAnimationOverride()
  • -
  • llSetAnimationOverride()
  • -
-
-
-
-

2013-03-04 - Release 2.50.0

-
- * Function added: -
    -
  • llGenerate()
  • -
-
-
-
-

2013-02-14 - Release 2.49.0

-
- * Constants Added: -
    -
  • ATTACH_AVATAR_CENTER
  • -
  • ATTACH_NECK
  • -
-
-
-
-

2013-01-01 - Release 2.48.0

-
- * Constants Added (thanks to Lucia Nightfire): -
    -
  • OBJECT_PHANTOM
  • -
  • OBJECT_PHYSICS
  • -
  • OBJECT_TEMP_ON_REZ
  • -
-
-
-
-

2012-12-25 - Release 2.47.2

-
- * Fixed: -
    -
  • Accidentally added the Link parameter to llClearPrimMedia when correcting llClearLinkMedia.
  • -
  • llWanderWithin - Corrected second argument to be vector instead of float.
  • -
  • Bug 28 - Alt-F4 or File-Exit does not close unsaved documents.
  • -
  • Bug 29 - llAngleBetween returns wrong values. Still not 100% accurate. Uses the improved code from the LSL Portal.
  • -
-
-
-
-

2012-11-26 - Release 2.47.1

-
- * Functions Added: -
    -
  • llAttachToAvatarTemp
  • -
  • llGetSimStats
  • -
  • llTeleportAgent
  • -
  • llTeleportAgentGlobalCoords
  • -
-
-
- * Constants Added: -
    -
  • ATTACH_LEFT_PEC
  • -
  • ATTACH_RIGHT_PEC
  • -
  • CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES
  • -
  • CHARACTER_MAX_SPEED
  • -
  • CHARACTER_MAX_TURN_RADIUS
  • -
  • HTTP_CUSTOM_HEADER
  • -
  • HTTP_PRAGMA_NO_CACHE
  • -
  • HORIZONTAL
  • -
  • OBJECT_ATTACHED_POINT
  • -
  • OBJECT_PATHFINDING_TYPE
  • -
  • OBJECT_ROOT
  • -
  • PERMISSION_TELEPORT
  • -
  • VERTICAL
  • -
  • OPT_AVATAR
  • -
  • OPT_CHARACTER
  • -
  • OPT_EXCLUSION_VOLUME
  • -
  • OPT_LEGACY_LINKSET
  • -
  • OPT_MATERIAL_VOLUME
  • -
  • OPT_OTHER
  • -
  • OPT_STATIC_OBSTACLE
  • -
  • OPT_WALKABLE
  • -
  • SIM_STAT_PCT_CHARS_STEPPED
  • -
-
-
- * Constants Removed: -
    -
  • CHARACTER_TURN_SPEED_MULTIPLIER
  • -
  • -
  • -
  • -
-
-
- * Constants Updated: -
    -
  • PURSUIT_GOAL_TOLERANCE
  • -
  • REQUIRE_LINE_OF_SIGHT
  • -
  • WANDER_PAUSE_AT_WAYPOINTS
  • -
  • -
-
-
- * Fixed: -
    -
  • Removed several duplicate names from the Help => About dialogue.
  • -
-
-
-
-

2012-11-18 - Release 2.47.0

-
- * Made note and script files conceptually different. Giving each their own open/save dialogues etc. Notes will always be UTF-8 encoded (without BOM), just as in SL. -
-
- * Added Path-finding constants: -
    -
  • CHARACTER_CMD_SMOOTH_STOP
  • -
  • CHARACTER_MAX_SPEED
  • -
  • CHARACTER_MAX_TURN_SPEED
  • -
  • CHARACTER_MAX_TURN_RADIUS
  • -
  • CHARACTER_ORIENTATION
  • -
  • FORCE_DIRECT_PATH
  • -
  • GET_NAV_POINT_RADIUS
  • -
  • HORIZONTAL
  • -
  • PATROL_PAUSE_AT_WAYPOINTS
  • -
  • PU_FAILURE_NO_NAVMESH
  • -
  • PURSUIT_GOAL_TOLERANCE
  • -
  • REQUIRE_LINE_OF_SIGHT
  • -
  • VERTICAL
  • -
  • WANDER_PAUSE_AT_WAYPOINTS
  • -
-
-
- * Removed renamed/deleted constants: -
    -
  • CHARACTER_MAX_ANGULAR_ACCEL
  • -
  • CHARACTER_MAX_ANGULAR_SPEED
  • -
  • CHARACTER_TURN_SPEED_MULTIPLIER
  • -
-
-
- * Changed: -
    -
  • llWanderWithin() - function signature and description are changed.
  • -
-
-
- * Fixed: -
    -
  • llClearLinkMedia() - added the missing Link parameter (to the emulation stub and highlighting).
  • -
-
-
-
-

2012-04-24 - Release 2.46.0

- * Added constants/function currently on the Magnum RC. -
- * Constants: -
    -
  • AGENT_LIST_PARCEL
  • -
  • AGENT_LIST_PARCEL_OWNER
  • -
  • AGENT_LIST_REGION
  • -
  • PRIM_SLICE
  • -
-
-
- * Functions: -
    -
  • llGetAgentList
  • -
-
-
- * Fixed: -
    -
  • SF ID: 3072580 - HTTP Request response returned gzip compressed string. (Thanks to Akkarin Dryke).
  • -
  • Also fixed HTTP Request response to return UTF-8 (instead of ASCII).
  • -
-
-
-
-

2012-03-18 - Release 2.45.1

-
* Fixed: Problem with updater. Our BZip2 decompression code did not work, which prevented the updater creating the new file.
-
-
-

2012-03-14 - Release 2.45.0

- - Added new constants, event, and functions for the character/path-finding feature in testing on aditi. NOTE: these are still in alpha testing and not finalised, so they may change without notice. More info available here Pathfinding in Second Life -
- - Constants: -
    -
  • AVOID_CHARACTERS
  • -
  • AVOID_DYNAMIC_OBSTACLES
  • -
  • CHARACTER_AVOIDANCE_MODE
  • -
  • CHARACTER_CMD_JUMP
  • -
  • CHARACTER_CMD_STOP
  • -
  • CHARACTER_DESIRED_SPEED
  • -
  • CHARACTER_LENGTH
  • -
  • CHARACTER_TYPE
  • -
  • CHARACTER_MAX_ACCEL
  • -
  • CHARACTER_MAX_ANGULAR_ACCEL
  • -
  • CHARACTER_MAX_ANGULAR_SPEED
  • -
  • CHARACTER_MAX_DECEL
  • -
  • CHARACTER_RADIUS
  • -
  • CHARACTER_TURN_SPEED_MULTIPLIER
  • -
  • CHARACTER_TYPE_A
  • -
  • CHARACTER_TYPE_B
  • -
  • CHARACTER_TYPE_C
  • -
  • CHARACTER_TYPE_D
  • -
  • CHARACTER_TYPE_NONE
  • -
  • PU_EVADE_HIDDEN
  • -
  • PU_EVADE_SPOTTED
  • -
  • PU_FAILURE_INVALID_GOAL
  • -
  • PU_FAILURE_INVALID_START
  • -
  • PU_FAILURE_NO_VALID_DESTINATION
  • -
  • PU_FAILURE_OTHER
  • -
  • PU_FAILURE_TARGET_GONE
  • -
  • PU_FAILURE_UNREACHABLE
  • -
  • PU_GOAL_REACHED
  • -
  • PU_SLOWDOWN_DISTANCE_REACHED
  • -
  • PURSUIT_INTERCEPT
  • -
  • PURSUIT_FUZZ_FACTOR
  • -
  • PURSUIT_OFFSET
  • -
  • REQUIRE_LINE_OF_SIGHT
  • -
  • TRAVERSAL_TYPE
  • -
  • TRAVERSAL_TYPE_NONE
  • -
  • TRAVERSAL_TYPE_FAST
  • -
  • TRAVERSAL_TYPE_SLOW
  • -
- - Event: -
    -
  • path_update
  • -
- - Functions: -
    -
  • llCreateCharacter
  • -
  • llDeleteCharacter
  • -
  • llEvade
  • -
  • llExecCharacterCmd
  • -
  • llFleeFrom
  • -
  • llGetClosestNavPoint
  • -
  • llNavigateTo
  • -
  • llPatrolPoints
  • -
  • llPursue
  • -
  • llUpdateCharacter
  • -
  • llWanderWithin
  • -
-
- - Changed: -
-
    -
  • Changed the way version numbers are created for the release. They should now show as 2.45.0.x in all parts of the program.
  • -
  • Updated copyright on about dialogue.
  • -
  • Fixed some bad constant/function entries.
  • -
-
-
-
-

2012-02-08 - Release 2.44.1

- - Added: constants: -
    -
  • AGENT_AUTOPILOT
  • -
  • AGENT_BY_LEGACY_NAME
  • -
  • AGENT_BY_USERNAME
  • -
  • CHANGED_MEDIA
  • -
  • OBJECT_RUNNING_SCRIPT_COUNT
  • -
  • OBJECT_SCRIPT_MEMORY
  • -
  • OBJECT_SCRIPT_TIME
  • -
  • OBJECT_TOTAL_SCRIPT_COUNT
  • -
  • OBJECT_UNKNOWN_DETAIL
  • -
  • PRIM_LINK_TARGET
  • -
  • PRIM_SCULPT_TYPE_MASK
  • -
  • RC_DATA_FLAGS
  • -
  • RC_DETECT_PHANTOM
  • -
  • RC_GET_LINK_NUM
  • -
  • RC_GET_NORMAL
  • -
  • RC_GET_ROOT_KEY
  • -
  • RC_MAX_HITS
  • -
  • RC_REJECT_AGENTS
  • -
  • RC_REJECT_LAND
  • -
  • RC_REJECT_NONPHYSICAL
  • -
  • RC_REJECT_PHYSICAL
  • -
  • RC_REJECT_TYPES
  • -
  • RCERR_CAST_TIME_EXCEEDED
  • -
  • RCERR_SIM_PERF_LOW
  • -
  • RCERR_UNKNOWN
  • -
  • TOUCH_INVALID_FACE
  • -
  • TOUCH_INVALID_VECTOR
  • -
- - Added: functions: -
    -
  • llAvatarOnLinkSitTarget
  • -
  • llGetParcelMusicURL
  • -
  • llSetContentType
  • -
  • llSetLinkCamera
  • -
  • llSetRegionPos
  • -
- - Changed: -
    -
  • Opening files no longer assumes ANSI format. Instead, we attempt to detect file encoding and default to UTF-8 if no encoding is obvious.
  • -
  • Removed ANSI as an output format option.
  • -
  • Fixed updater to disallow accidental updating with older files. This only affects testing latest version before public release.
  • -
-
-
-

2012-01-01 - Release 2.44.0

- - Added -
    -
  • "Release Notes..." to help menu.
  • -
- - - Changed -
    -
  • Updated About.htm
  • -
  • Tools => Options => Text Editor => General - Changed labels to properly reflect the output file format.
  • -
  • UTF-8 output no longer prefixes the B.O.M. character.
  • -
  • UTF-8 is now the default file output format. ANSI is deprecated and will be removed at a later date.
  • -
- - - Fixed: -
    -
  • SF ID: 2995296 - Search | Comment Line (Ctl+K) Breaks Line After Search Term.
  • -
  • SF ID: 3461546 - ReleaseNotes.htm in source, but never used
  • -
  • SF ID: none - Fix for state change without state name passing syntax-check.
  • -
  • SF ID: 3465488 - lslint does not show errors.
  • -
  • SF ID: 2999054 - Unicode characters do not paste correctly.
  • -
  • SF ID: none - Fixed typo in Font/Colour options dialogue.
  • -
-
- -
-

2011-12-12 - Release 2.43.1

- - Added: constants -
    -
  • CONTENT_TYPE_HTML
  • -
  • DENSITY
  • -
  • ESTATE_ACCESS_ALLOWED_AGENT_ADD
  • -
  • ESTATE_ACCESS_ALLOWED_AGENT_REMOVE
  • -
  • ESTATE_ACCESS_ALLOWED_GROUP_ADD
  • -
  • ESTATE_ACCESS_ALLOWED_GROUP_REMOVE
  • -
  • ESTATE_ACCESS_BANNED_AGENT_ADD
  • -
  • ESTATE_ACCESS_BANNED_AGENT_REMOVE
  • -
  • FRICTION
  • -
  • GRAVITY_MULTIPLIER
  • -
  • HTTP_VERBOSE_THROTTLE
  • -
  • KFM_CMD_PAUSE
  • -
  • KFM_CMD_PLAY
  • -
  • KFM_CMD_STOP
  • -
  • KFM_COMMAND
  • -
  • KFM_DATA
  • -
  • KFM_FORWARD
  • -
  • KFM_LOOP
  • -
  • KFM_MODE
  • -
  • KFM_PING_PONG
  • -
  • KFM_REVERSE
  • -
  • KFM_ROTATION
  • -
  • KFM_TRANSLATION
  • -
  • OBJECT_PHYSICS_COST
  • -
  • OBJECT_PRIM_EQUIVALENCE
  • -
  • OBJECT_SERVER_COST
  • -
  • OBJECT_STREAMING_COST
  • -
  • PARCEL_DETAILS_SEE_AVATARS
  • -
  • PRIM_MATERIAL
  • -
  • PRIM_MEDIA_ALT_IMAGE_ENABLE
  • -
  • PRIM_MEDIA_AUTO_LOOP
  • -
  • PRIM_MEDIA_AUTO_PLAY
  • -
  • PRIM_MEDIA_AUTO_SCALE
  • -
  • PRIM_MEDIA_AUTO_ZOOM
  • -
  • PRIM_MEDIA_CONTROLS
  • -
  • PRIM_MEDIA_CONTROLS_MINI
  • -
  • PRIM_MEDIA_CONTROLS_STANDARD
  • -
  • PRIM_MEDIA_CURRENT_URL
  • -
  • PRIM_MEDIA_FIRST_CLICK_INTERACT
  • -
  • PRIM_MEDIA_HEIGHT_PIXELS
  • -
  • PRIM_MEDIA_HOME_URL
  • -
  • PRIM_MEDIA_PERMS_CONTROL
  • -
  • PRIM_MEDIA_PERMS_INTERACT
  • -
  • PRIM_MEDIA_PERM_ANYONE
  • -
  • PRIM_MEDIA_PERM_GROUP
  • -
  • PRIM_MEDIA_PERM_NONE
  • -
  • PRIM_MEDIA_PERM_OWNER
  • -
  • PRIM_MEDIA_WHITELIST
  • -
  • PRIM_MEDIA_WHITELIST_ENABLE
  • -
  • PRIM_MEDIA_WIDTH_PIXELS
  • -
  • PRIM_OMEGA
  • -
  • PRIM_PHYSICS_MATERIAL
  • -
  • PRIM_PHYSICS_SHAPE_CONVEX
  • -
  • PRIM_PHYSICS_SHAPE_NONE
  • -
  • PRIM_PHYSICS_SHAPE_PRIM
  • -
  • PRIM_PHYSICS_SHAPE_TYPE
  • -
  • PRIM_POS_LOCAL
  • -
  • PRIM_ROT_LOCAL
  • -
  • PRIM_SCULPT_FLAG_INVERT
  • -
  • PRIM_SCULPT_FLAG_MIRROR
  • -
  • PROFILE_NONE
  • -
  • PROFILE_SCRIPT_MEMORY
  • -
  • RESTITUTION
  • -
  • STATUS_BLOCK_GRAB_OBJECT
  • -
  • STATUS_BOUNDS_ERROR
  • -
  • STATUS_INTERNAL_ERROR
  • -
  • STATUS_MALFORMED_PARAMS
  • -
  • STATUS_NOT_FOUND
  • -
  • STATUS_NOT_SUPPORTED
  • -
  • STATUS_OK
  • -
  • STATUS_TYPE_MISMATCH
  • -
  • STATUS_WHITELIST_FAILED
  • -
  • TEXTURE_BLANK
  • -
  • TEXTURE_DEFAULT
  • -
  • TEXTURE_MEDIA
  • -
  • TEXTURE_PLYWOOD
  • -
  • TEXTURE_TRANSPARENT
  • -
  • TOUCH_INVALID_TEXCOORD
  • -
- - other changes: Cleaned up parts of the highlighting XML file generally, and reordered some entries. -
- -
-

2011-12-06 - Release 2.43

- - Added: event -
    -
  • transaction_result
  • -
- - Added: functions: -
    -
  • llCastRay - syntax-checker only, highlighting added previously.
  • -
  • llClearLinkMedia - syntax-checker only, highlighting added previously.
  • -
  • llGetDisplayName
  • -
  • llGetLinkMedia
  • -
  • llGetMassMKS
  • -
  • llGetMemoryLimit
  • -
  • llGetPhysicsMaterial
  • -
  • llLinkSitTarget - syntax-checker only, highlighting added previously.
  • -
  • llManageEstateAccess
  • -
  • llScriptProfiler
  • -
  • llSetAngularVelocity
  • -
  • llSetKeyframedMotion
  • -
  • llSetLinkMedia
  • -
  • llSetMemoryLimit
  • -
  • llSetPhysicsMaterial
  • -
  • llSetVelocity
  • -
  • llTransferLindenDollars
  • -
- - Fixed UTF-8 file format from prefixing with a BOM. While not invalid, it confuses some apps. -
-
- - -
-

2011-04-21 - Release 2.42

- * Added: constants -
    -
  • CHANGED_REGION_START
  • -
  • PRIM_DESC
  • -
  • PRIM_NAME
  • -
- * Added: functions (highlighting only): -
    -
  • llCastRay
  • -
  • llGetLinkNumberOfSides
  • -
  • llGetSPMaxMemory
  • -
  • llGetUsedMemory
  • -
  • llGetUsername
  • -
  • llRequestDisplayName
  • -
  • llRequestUsername
  • -
-
- - -
-

2010 - Release 2.41

-
- - -
-

April 17 2010 14:51 (local time) Release 2.40

- - Added: stub functions for: -
    -
  • llGetFreeURLs
  • -
  • llRequestURL
  • -
  • llRequestSecureURL
  • -
  • llReleaseURL
  • -
  • llHTTPResponse
  • -
  • llGetHTTPHeader
  • -
-
- - -
-

October 28 2008 11:28 (local time) Release 2.39

- - Added: stub functions for: -
    -
  • llTextBox
  • -
  • llGetAgentLanguage
  • -
  • llDetectedTouchUV
  • -
  • llDetectedTouchFace
  • -
  • llDetectedTouchPos
  • -
  • llDetectedTouchNormal
  • -
  • llDetectedTouchBinormal
  • -
  • llDetectedTouchST
  • -
  • llSHA1String
  • -
-
- - -
-

July 28 2008 14:10 (local time) Release 2.38

- - Changed: Key cache file changed, so did lsleditor (??? who made the xml file, it uses siblings, not parent-child relations????) -
- -
Summer break ;-)
- -
May 18 2008 18:37 (local time) - - Changed: Ctrl-Shft-A uses 4-spaces intdent when (auto)pasting in SL -
- -
May 13 2008 13:21 (local time) - - Changed: Adding duplicate items in solution explorer starts numbering at 1
- - Fixed: focus when switching tabs
- - Fixed: Save All (Ctrl Shft S), does not save Solution
-
- - -
-

May 2 2008 19:00 (local time)> Release 2.37

- - Added: PRIM_GLOW
- - Added: llSetClickAction (and constants)
- - Fixed: & in dialogue box
- - Fixed: Permission dialogue box text messed up when the script name is too long
-
- - -
-

Apr 3 2008 12:47 (local time) Release 2.36

- - Fixed: llAbs throws error on large numbers
-
- -
Mar 28 2008 12:47 (local time) - - Fixed: llListen should also listen when using "" keys
- - Added: Basic authentication to llHTTPRequest, eg. http: //userid:password@domain.name/path
- - Added: llEmail shows error responses from smtp server when in error
-
- -

Mar 27 2008 13:33 (local time)

- - Added (experimental): 'Ctrl Shift A' pastes active LSLEditor script to SecondLife (has to open script editor in SL first)
-
- -
Mar 21 2008 12:12 (local time)
- - Fixed: Shift Home crashes editor when nothing is selected
-
- - -
-

Mar 16 2008 15:22 (local time) Release 2.35

- - Added: llGetParcelDetails (see also menu - tools - options - debugging internal)
- - Added: Alt-Backspace alternative for Ctrl-Z
- - Fixed: Some focus issue on the find window
- - Added: PARCEL_MEDIA_COMMAND_TYPE, PARCEL_MEDIA_COMMAND_SIZE, PARCEL_MEDIA_COMMAND_DESC, PARCEL_MEDIA_COMMAND_LOOP_SET
- - Added: Contact item on menu Help
- - Removed: some compression code
-
- -

Feb 29 2008 12:40 (local time)

- - Fixed: NULL_KEY was no key
-
- - -
-

Feb 23 2008 19:45 (local time) Release 2.34

- - Added: First generic plugin support
- - Added: integer multiply operator for float operand
- - Added: minus operator to rotation
- - Fixed: Internals to pass more language tests, e.g. bool on ZERO_ROTATION and NULL_KEY, adding items to list
-
- -

Feb 22 2008 23:38 (local time)

-

- - Fixed: Browser status hides bottom scrollbar
- - Fixed: Switching between Tabbed document and Windowed document, browser disappears
- - Fixed: (key)"" == False
- - Added: state changes allowed in global functions (when set in Debugging - General menu)
- - Fixed: info on llInsertString was missing a few spaces
- - Added: Debug windows have context menu, Copy, Select All and Clear
- - Added: File - New - New notecard
- - Changed: llGetScriptName returns scriptname without extension (when set in Debugging - General menu)
- - Fixed: Don't send empty bugreports
- - Fixed: tabs are presented in SL as 4 spaces, for example llStringLength("\t") == 4
- - Fixed: remove old files after Autoupdate
- - Fixed: autoupdate menu was readonly
-

- -

Release 2.33

- -

Feb 12 2008 08:12 (local time)

-

- - Fixed: llLog and llLog10
-

- -

Feb 04 2008 16:30 (local time)

-

- - Added: Shortcut key for lslint, F7 ;-)
- - Fixed: llMessageLinked using LINK_THIS works also when NOT using solution explorer
- - Fixed: default value of key type is wrong
- - Added: All animation / expression names are added to the autocompletion function (as strings)
- - Added: Autocompletion of animation names can be switched on/off by menu Tools - Options - Text Editor - Code completion
- - Fixed: crash of lsleditor on llHTTPRequest when errors occur
- - Changed: Information on llSensorRepeat()
- - Added: llResetLandPassList()
-

- -

Release 2.32

- -

Jan 27 2008 14:00 (local time)

-

- - Added: open multiple files from menu 'File - Open - File...' or Ctrl-O
- - Fixed: global functions do not parse when using multiple brackets on 1 line
- - Fixed: renaming files and directories in solution explorer sometimes crashes lsleditor
- - Changed: 'Recent Projects' in 'Recent Solutions'
- - Changed: 'Add new Project' changed into 'Add new Solution'
-

- -

Release 2.31

- -

Jan 14 2008 16:28 (local time)

-

- - Changed: llUnescapeURL and llEscapeURL using UTF8 encoding
- - Changed: llBase64ToString and llStringToBase64 using UTF8 encoding
- - Changed: improved label parsing
-

- - -

Jan 12 2008 10:43 (local time)

-

- - Fixed: llDialog does not show OK button, using no buttons
-

- -

Jan 09 2008 17:18 (local time)

-

- - Added: Online Help browser, New tab for every search can be unchecked in menu Tools - Options - Environment - Help
- - Fixed: No scrolling when using Autoformat (Ctrl-D)
-

- -

Jan 06 2008 13:31 (local time)

-

- - Fixed: llGetListEntryType does not work on negative index
- - Added: missing operators on integer
- - Fixed: wrong parsing and casting of large hex numbers
-

- -

Jan 05 2008 12:44 (local time)

-

- - Added: show status of capslock
-

- -

Release 2.30

- -

Dec 29 2007 12:27 (local time)

-

- - Fixed: llParseString2List loops when using empty strings on spacers
-

- -

Dec 27 2007 22:57 (local time)

-

- - Added: Disable tooltip user-setting, menu Tools - Options - Help
- - Added: Link to the LSLEditor forum, menu Help - Forum
- - Added: Auto save on menu Tools - Options - Debugging - General - Auto save
- - Fixed: sending/retrieving bugreports crashes lsleditor when internet connection is not available
- - Fixed: turning off autoindent errors on braces
- - Fixed: line number issue on scrolling
- - Fixed: cast error using llList2Vector for strings
-

- -

Release 2.29

- -

Dec 18 2007 16:38 (local time)

-

- - Added: when nothing is selected, Shift-Delete, copies entire line to clipboard and deletes it
- - Fixed: Ctrl-X is not undo-able
- - Fixed: jump labels containing '_' give error
- - Added: ATTACH_HUD_* constants
-

- -

Dec 14 2007 17:51 (local time)

-

- - Fixed: Unchecking Check-For-Updates, does check for updates, thats wrong
-

- -

Release 2.28

- -

Dec 14 2007 00:40 (local time)

-

- - Added: INS (insert) / OVR (override) on status bar, changes when hitting Insert key
- - Changed: Tab on notecards shows 'Text', where scripts shows 'Script'
-

- - -

Dec 13 2007 23:52 (local time)

-

- - Added: When changing to a non existing state, show warning
- - Changed: llGetWallclock and llGetGMTclock
-

- -

Dec 09 2007 02:30 (local time)

-

- - Fixed: certain conditions the tab-stops at 4 chars goes to 6 chars wide
-

- -

Dec 08 2007 15:55 (local time)

-

- - Changed: Some Internals to pass more tests from http://wiki.secondlife.com/wiki/LSL_Language_Test
- Some tests fail due to known issues. http://www.lsleditor.org/help/knownissues.htm
- - Fixed: shift-home and shift-end selects from 'start' cq. 'end' of selection (only forward selection supported)
-

- -

Dec 07 2007 02:44 (local time)

-

- - Fixed: lsleditor crashes when using lslint plugin
- - Added: Total char count
- - Added: Last modified on SolutionExplorer items properties
- - Changed: new implementation of llHTTPRequest, returns http status
- - Changed: float shows 6 digits behind the decimal point (like SL)
-

- -

Dec 06 2007 14:38 (local time)

-

- - Fixed: Version 2.24 an above were broken on simple Verbose messages!!
-

- -

Release 2.27

- -

Dec 05 2007 17:35 (local time)

-

- - Fixed: llModPow gives wrong answer using large numbers
- - Fixed: Crash when clicked on errors, when script edit windows are closed
- - Fixed: Oops Renaming files and objects in Solutionexplorer using same name but upper/lower case chars
- - Fixed: Oops from llGetObjectDetails (only OBJECT_NAME and OBJECT_DESC implemented)
- - Fixed: comments having unballanced string quotes do not compile
-

- -

Release 2.26

- -

Nov 28 2007 19:31 (local time)

-

- - Changed: llBase64ToInteger , needs testings
- - Changed: paint line numbers only when they are changed
- - Changed: doubleclick selects whole words (including '_')
-

- -

Nov 26 2007 13:33 (local time)

-

- - Added: random return when failing to parse string in llBase64ToInteger
- - Fixed: list constructor and large signed/unsigned integer problem
-

- -

Nov 24 2007 19:16 (local time)

-

- - Fixed: llListenRemove does not work
- - Fixed: llMessageLinked adds 1 extra event when compiling
-

- -

Release 2.25

- -

Nov 22 2007 23:59 (local time)

-

- - Added: true/false operators on vector and rotation
- - Fixed: llRequestAgentData(uuid, DATA_BORN) has wrong date notation
- - Fixed: listen event always gets the wrong sender id
-

- -

Nov 20 2007 09:20 (local time)

-

- - Fixed: typo on llRemoveSensor
-

- -

Nov 19 2007 10:09 (local time)

-

- - Fixed: llGetWallclock gives also fraction of seconds
- - Added: X-SecondLife-Shard header in http request can be configured via menu - Tools - Options - Debugging - Internal (default = Production)
- - Fixed: X-SecondLife-Region header in http request uses int coords.
- - Fixed: notecards don't care about 'autocorrect indent'
-

- -

Nov 15 2007 00:19 (local time)

-

- - Fixed: Find and Find Replace window pushes editor to background when goes invisible
- - Fixed: Find and Find Replace window does not focus text search box
-

- -

Nov 14 2007 17:10 (local time)

-

- - Added: X-SecondLife-* headers in http request
-

- - -

Release 2.24

- -

Nov 13 2007 01:33 (local time)

-

- - Added: llResetLandBanList
-

- -

Nov 10 2007 03:12 (local time)

-

- - Fixed: Editing notecards is broken
-

- -

Nov 09 2007 01:21 (local time)

-

- - Fixed: CONTROL_ML_LBUTTON was missssspelleddd
-

- -

Nov 07 2007 14:19 (local time)

-

- - Fixed: info on llDetachFromAvatar() shows argument
-

- -

Release 2.23

- -

Nov 02 2007 15:53 (local time)

-

- - Added: PRIM_SCULPT_TYPE_* constants
-

- -

Oct 30 2007 11:53 (local time)

-

- - Added: Findwindow uses F3 for next find
-

- -

Oct 26 2007 10:57 (local time)

-

- - Fixed: Some menu items use online wiki (if available), others use offline wiki
-

- -

Oct 24 2007 14:53 (local time)

-

- - Fixed: clicking Errors located on last line looses control on edit window
- - Added: Shortcut keys to solution explorer
- - Fixed: New script in solution explorer does not use indent user setting
-

- -

Oct 23 2007 20:13 (local time)

-

- - Changed: Shift-End, does not select the newline char
- - Changed: LSLEditor remembers workingdirectory
- - Changed: 'View Solutionexplorer' made persistent
-

- -

Release 2.22

- -

Oct 23 2007 20:13 (local time)

-

- - Changed: When importing script, make form active.
- - Changed: combox box for listening channels set to first channel by default
- - Fixed: llScaleTexture has wrong arguments (and description)
- - Changed: Menu item, "File - New - File" changed to File - New - Script"
- - Fixed: llResetScript has to go directly to state_entry (and resetting vars)
-

- -

Oct 22 2007 04:00 (local time)

-

- - Changed: vars don't have to be initialised before usage
-

- -

Oct 21 2007 20:18 (local time)

-
- - Changed: Solution explorer, files are opened only once at a time
- - Changed: Solution explorer, changed Prim entity to Object
- - Changed: Solution explorer, Objects can be added to Objects
- - Added: llMessageLinked can use linknum in solution explorer(needs testing)
-
    -
  • LINK_ROOT
  • -
  • LINK_SET
  • -
  • LINK_ALL_OTHERS
  • -
  • LINK_ALL_CHILDREN
  • -
  • LINK_THIS
  • -
- Relationship is defined by place in solution explorer tree (no need to use llCreateLink)

- - Fixed: the dialog is missing several buttons when using long text
- - Changed: llDialog and llRequestPermissions removed topmost property
-
- -

Oct 20 2007 12:09 (local time)

-

- - Added: Contextmenu on error list, Copy or Copy Description only
- - Fixed: plugin, lslint, possible crash on multiple line error output
-

- -

Oct 18 2007 11:46 (local time)

-

- - Fixed: possible crash on not initialized string
- - Fixed: reading notecards outside solution explorer was broken
- - Added: llGetObjectDetails (supported OBJECT_NAME, OBJECT_DESC)
- - Added: llSensor / llSensorRepeat / llSensorRemove() / sensor (event)
- (only simple event trigger, num_detected is always 1)
- - Fixed: llRequestPermissions is broken
-

- -

Oct 16 2007 23:29 (local time)

-

- - Fixed: Old bug on multiple changed scripts saving using Ctrl-S shortcut only saves first script
- - Fixed: Rename objects do not set object-name correctly
-

- -

Release 2.21

- -

Oct 16 2007 13:46 (local time)

-

- - Changed: Find/Replace window hides when pressing Escape
- - Changed: Find/Replace window keeps focus
-

- -

Oct 15 2007 23:10 (local time)

-
- - Changed: Tools menu, starts at top node
- - Added: LSLEditor goes unicode
- menu - tools - options - text editor - general - output format -
    -
  • ANSI (default)
  • -
  • Unicode
  • -
  • Unicode big endian
  • -
  • UTF-8
  • -
- - Fixed: Save on new.lsl file crashes LSLEditor
- - Changed: bugreport, Highlight entry in left pane (also when lost focus)
- - Fixed: bugreport, 'check all / uncheck all' button has wrong initial state
- - Changed: autocompletion on ll-functions having zero arguments (or single void argument) completes with ')' char
- - Added: double-clicking on an error message after compile, line in edit window is highlighted
-
- -

Oct 10 2007 10:59 (local time)

-
- - Changed: In respect to solution explorer -
    -
  • llGetObjectDesc
  • -
  • llSetObjectDesc
  • -
  • llGetObjectName
  • -
  • llSetObjectName
  • -
-
- -

Release 2.20

- -

Oct 09 2007 16:12 (local time)

-

- - Added: Plugin support
- - Fixed: llList2Key crash
-

- -

Oct 08 2007 23:55 (local time)

-

- - Changed: Opened files in solution explorer are asked to save when closed
- - Changed: bugreport, files to be included are unchecked by default
-

- -

Oct 03 2007 19:22 (local time)

-

- - Added: bool operators on list
- - Fixed: Multiple 'if' indent (only on autoformat document)
- - Added: integer operator + and - (overrides internal operators)
- - Fixed: llParseStringKeepNulls last empty element is not added
- - Fixed: llListSort on non string items
- - Fixed: Sometimes scrolling is disabled when moving the cursor
- - Fixed: Multiline comments on highlighted chars gives colored results
- - Fixed: llList2XXX functions for negative index
- - Added: explicit string operator on bool
-

-

Oct 02 2007 18:25 (local time)

-

- - Added: Menu - Tools - Options - Text editor - warning on different indent scheme (on by default)
- - Added: Menu - Tools - Options - Text editor - autocorrect indent on file loading (off by default)
- - Fixed: changing guid on items in solutionexplorer reflects on opened script windows
- - Changed: Wildcard autocompletion on argument, changed to show only pulldown menu (example llGetInventoryName)
- - Added: llRot2Fwd / llRot2Up / llRot2Left
-

- -

Release 2.19

- -

Oct 01 2007 16:30 (local time)

-

- - Changed: Make text bold on active tab
- - Fixed: llUnescapeURL returns UTF8 strings, for example: llOwnerSay(llUnescapeURL("pr%c3%aate"));
- - Fixed: Syntax errors are on column - 1
- - Added: Command line option /run starts debugging after loading scripts (if any)
- - Fixed: Syntax errors on scripts having same name are clickable
- - Fixed: Copy / Paste gives wrong colors in editor
-

- -

Sep 29 2007 21:35 (local time)

-

- - Added: Changing Guid of any item in solution explorer
- - Changed: manual listen event trigger, channel is combobox
- (listen filter does only work on normal chat messages, not on manual event trigger)
- - Added: Ctrl-C copies selected errors to clipboard
- - Added: Ctrl-A selects all text errors list
- - Added: Ctrl-A selects all text in debug and simulator console
- - Added: Line, Column and Char position of cursor (added Column)
- - Fixed: "There are 0 instances, replace them all?"
- - Fixed: var names containing 'jump' are wrongly parsed
- - Fixed: llAttachToAvatar wrong description
-

- -

Sep 22 2007 19:29 (local time)

-

- - Fixed: Selection from last line does not work
-

- -

Release 2.18

- -

Sep 21 2007 19:09 (local time)

-

- - Fixed: SaveAs was broken
- - Fixed: autocompletion on 'default', only when there is no default state
- - Fixed: state change to same state, acts like a return
- - Changed: Ctrl-D (format document) keeps cursor on line
- - Changed: Ctrl-E (format selection) keeps text selected
- - Added: Tools - Options - Debugging - General - Quoted strings in list output (default = none)
- - Changed: Major change to the list object (needs testing)
- - Fixed: Some minor indent bug on outermost braces when typing
- - Changed: Verbose output gives more readable lists
- - Fixed: llParseString2List and llParseStringKeepNulls (needs testing)
-

- -

Sep 19 2007 16:47 (local time)

-

- - Added: http 'ContentLength' on llHTTPRequest POST requests
-

- -

Release 2.17

- -

Sep 19 2007 12:47 (local time)

-

- - Fixed: Closing LSLEditor saves (all) changed files using its own name, example files (new.lsl) shows dialog
-

- -

Sep 18 2007 12:47 (local time)

-

- - Fixed: Labels can have whitespace between @ and label name
-

- -

Sep 17 2007 14:41 (local time)

-

- - Added: Tools - Options - Debugging - General - Single Quote char allowed outside strings
-

- -

Sep 16 2007 14:41 (local time)

-

- - Fixed: Typing many '}' on same lines, gives weird autoformatting
- - Fixed: Bracket highlighting when typing braces (curly brackets)
- - Fixed: Rotation '/' operator
-

- -

Sep 15 2007 17:45 (local time)

-

- - Added: Update application supports 'gzip','zip' and 'bzip2'
- - Changed: Richlabel has some extra right margin
- - Fixed: 4-Spaces indent was broken on tools menu
- - Fixed: Annoying scroll when bracket highligthing and code formatting
- - Fixed: 'If you see this, something is wrong' on state change and llResetScript
- - Fixed: Die button kills runaway processes like 'while(TRUE);'
- - Added: Icons for errors and warnings
- - Added: Compiler generates warnings (can be switched off in menu Tools - Options - Debugging - General)
-

- -

Sep 14 2007 10:52 (local time)

-

- - Fixed: llOwnerSay talks only to the owner, preventing possible loops
-

- -

Sep 13 2007 16:39 (local time)

-

- - Added: Date/time on printed output
- - Changed: Case insensitive on ECC
-

- -

Release 2.16

- -

Sep 13 2007 12:10 (local time)

-

- - Added: Experimental Code Completion (ECC) on user defined variable names, menu - tools - options - Text Editor - Code Completion
- - Changed: Escape toggles on/off autocompletion and tooltips
-

- -

Sep 12 2007 16:28 (local time)

-

- - Added: Pagesetup margins on printed documents
- - Added: header and footer on printed documents
- - Added: Print selection
- - Fixed: llList2ListStrided crashed for nonsense (<= 0) strides
-

- -

Sep 11 2007 17:07 (local time)

-

- - Added: Ctrl-Del removes whitespace/word
- - Fixed: llToUpper / llToLower gives wrong hint
-

- -

Sep 06 2007 13:35 (local time)

-

- - Fixed: First users see only a small window
-

- -

Release 2.15

- -

Sep 03 2007 17:00 (local time)

-

- - Fixed: Renaming of non scripts and non notecards
- - Added: Solution Explorer, changing filetype of items
- - Changed: Solution Explorer, project and inventory paths are saved as a relative path to solution file (if possible)
- - Changed: Solution Explorer, "Add New File -> Script" , have it use the default.lsl file, same as "new.lsl" when opening.
- - Fixed: 0xFFFFFFFF parsed as integer
- - Fixed: capitalization of 'string' and 'float'
- - Added: PRIM_TYPE_SCULPT constant
-

- -

Aug 31 2007 12:07 (local time)

-

- - Fixed: Recent projects menu blocks when dirty script has to be saved
- - Added: Menu - Tools - Options - Environment - General - delete old files after update
-

- -

Release 2.14

- -

Aug 27 2007 12:07 (local time)

-

- - Fixed: Crash in Renaming files containing illegal chars in Solutionexplorer
- - Fixed: Find / Replace broken
- - Fixed: Labels are broken
-

- -

Aug 24 2007 15:30 (local time)

-

- - Added: Menu - Project - Add New File , add new file to active Prim in SolutionExplorer (if Any)
- - Added: Check if solution file already exist when Create new solution
- - Added: F3 shortcut for 'Find Next'
- - Fixed: Pressing Ctrl-H twice crashes program
- - Added: Multiline strings
- - Fixed: String (capital S) can be used as a var
- - Added: Explicit string operator on internal integer
- - Added: File Association for .lsl and .sol files (Menu-Tools)
-

- -

Aug 23 2007 23:02 (local time)

-

- - Fixed: Linenumbers incorrect after scrolling
- - Fixed: default state has not to be on column 0
- - Fixed: When user clicks 'No' on llRequestPermissions, do trigger run_time_permissions
- - Fixed: Brackets highlighting now skips comments
- - Changed: Online Wiki Address can be changed
- - Changed: Bugreport shows unique number and date/time
- - Changed: Bugreport uploadservice can handle normal filenames, spaces included ;-)
- - Added: llGetInventoryType (when using solution explorer)
- - Changed: Blockcommenting Ctrl-K and Ctrl-L (also on non selected line)
-

- -

Release 2.13

- -

Aug 22 2007 17:57 (local time)

-

- - Fixed: Crash on making default state
- - Fixed: Linenumbers only appear when scrolling
- - Fixed: Crash on some debug code, writing to D drive
- - Fixed: float parsing on lists does Oops...
- - Added: Experimental wildcard argument completion (for example llListStatistics)
- - Fixed: Tooltip on codecompletion can not get outside client area
- - Fixed: Coloring when typing strings
- - Fixed: indenting fails on strings containing // chars
-

- -

Aug 21 2007 19:28 (local time)

-

- - Changed: Reading scripts using default codepage
- - Added: llListStatistics (needs more testing)
- - fixed: llCSV2List escapes angle brackets
-

- -

Aug 20 2007 23:48 (local time)

-

- - Fixed: Find / Find and Replace window mixes up settings
- - Fixed: Sending bugreport crashes editor when offline
-

- -

Aug 18 2007 21:19 (local time)

-

- - Changed: new Tools Options menu
- - Fixed: Single quotation char in comment breaks parsing
-

- -

Aug 17 2007 19:22 (local time)

-

- - Fixed: Quad and Vector parsing breaks at certain conditions
- - Fixed: some changes to text do not set dirty flag
-

- -

Aug 16 2007 23:57 (local time)

-

- - Fixed: changing state into same state goes into loop
- - Fixed: llCSV2List is not really inverse to llList2CSV (llCSV2List does not parse rotations and vectors, yet)
- - Fixed: labels without ';' does not give syntax error
- - Fixed: jump @label; does not give syntax error
- - Fixed: floats getting truncated on non-English systems
- - Changed: Position and Size of editor window are only restored when in workingarea of Primary screen
- - Fixed: Script error on download HTML Help file
-

- -

Aug 15 2007 17:51 (local time)

-

- - Fixed: Don't compile nor syntax check notecards using solution explorer
- - Added: llInsertString
- - Fixed: llGiveInventoryList has wrong ref argument (syntax check breaks)
- - Fixed: Tab and Shift Tab on selected text
- - Added: Toggle button check / uncheck attached scripts on the bugreport form
- - Fixed: Argument of event changed(integer change)
- - Changed: Sending bugreports can be canceled
- - Changed: implicit float to integer operator to explicit
-

- -

Release 2.12

- -

Aug 10 2007 13:13 (local time)

-

- - Added: LSLEditorHelp offline wiki (Tools - Editor properties)
- - Changed: Find window keeps search entries
-

- -

Aug 05 2007 00:30 (local time)

-

- - Fixed: Cursor position on backspace
-

- -

Aug 03 2007 16:50 (local time)

-

- - Added: Ctrl-F (find) uses keyword on cursor position
- - Added: Ctrl-Up / Ctrl-Down history scrolling on chat box
- - Fixed: llSetLinkTexture() do not take texture uuids
- - Fixed: llParseString2List refuse to take keys as strings
- - Added: Solution Explorer, F2 for rename
- - Added: default.lsl in LSL-Editor directory will be used as 'new.lsl' template
- - Fixed: llSetColor tooltip is wrong
-

- -

Aug 02 2007 23:42 (local time)

-

- - Added: Smtp Authentication for llEmail (Tools, Runtime Properties, External, Email)
-

- -

Release 2.11

- -

Jul 30 2007 16:19 (local time)

-

- - Added: Home key works also on white-space lines
- - Fixed: After sending two bugreports, button is disabled
- - Added: POST method to llHttpRequest (untested)
-

- -

Jul 28 2007 12:05 (local time)

-

- - Fixed: Richtext label inserts spaces after color change
- - Added: Sound support (simple) use llPlaySound and .wav file in solution explorer
-

- -

Jul 26 2007 13:29 (local time)

-

- - Added: PageUp and PageDown on intellisense dropdown menu
- - Fixed: Editor crash when closing project having browser window open
- - Added: llGetLocalPos()
-

- -

Release 2.10

- -

Jul 25 2007 14:30 (local time)

-
- - Added: Solution Explorer (first look)
-
    -
  • llGetObjectName
  • -
  • llGetScriptName
  • -
  • llGetKey
  • -
  • llGetInventoryName
  • -
  • llGetInventoryKey
  • -
  • llGetInventoryNumber
  • -
  • llGetNumberOfNotecardLines
  • -
  • llGetNotecardLine
  • -
- - Added: Reset option on Editor properties
- - Added: mod operator (%) on integer
-
- -

Jul 24 2007 11:55 (local time)

-

- - Changed: Recent file list is clipped (showing ...)
- - Fixed: Syntax error on negative line numbers (?!) breaks editor
-

- -

Jul 20 2007 10:55 (local time)

-

- - Added: Checkbox on Edit tab to Disable compile / syntaxcheck
- - Added: Allow scripts to open by Drag and Drop on LSL-Editor
- - Fixed: Indent on return when in middle of a line
- - Added: llGetDate
- - Fixed: llDie in script does not work, throws an error
- - Changed: id in llMessageLinked / message_link accepts strings
-

- -

Jul 19 2007 15:27 (local time)

-

- - Added: Bugtracker to Menu Help , Bugreport
- - Changed: Home button toggles between start of line, and first non whitespace
-

- -

Release 2.9

- -

Jul 16 2007 11:25 (local time)

-

- - Changed: Autocompletion images scale on changing fonts
- - Changed: Tab alignement on changing fonts
-

- -

Jul 15 2007 23:51 (local time)

-

- - Added: Editor Properties, Font selector for editor and tooltips
- - Fixed: Ctrl-X does not have paste
-

- -

Jul 13 2007 15:20 (local time)

-

- - Changed: Bugreport name and email adres made sticky
- - Fixed: Bugreport window looses focus when tooltip shows
- - Added: Shift-Delete
- - Fixed: Ctrl-X can not undo
- - Fixed: Ctrl-Home does not go to line 1, column 1
- - Fixed: Shift-Home does not appear to select text
-

- -

Jul 12 2007 12:59 (local time)

-

- - Fixed: Tooltip shows bold on some High-Resolution machines (David IOU1)
-

- -

Release 2.8

- -

Jul 10 2007 08:41 (local time)

-

- - Fixed: Runtime properties, incorrect key from cache (xor)
-

- -

Jul 9 2007 14:51 (local time)

-

- - Added: Editor properties: Auto update frequency
- - Added: Editor properties: Indent settings
-

- -

Jul 8 2007 23:59 (local time)

-

- - Changed: Tooltip font is SystemFonts.MessageBoxFont
- - Fixed: llRot2Up returns void....
-

- -

Jul 6 2007 13:13 (local time)

-

- - Fixed: MD5 checksum on update function breaks
- - Added: Boundary checks on list functions
- - Fixed: jump statement gives error (_goto)
-

- -

Release 2.7

- -

Jul 4 2007 12:12 (local time)

-

- - Added: Bitwise Xor operator on integer (^)
-

- - -

Jul 3 2007 20:56 (local time)

-

- - Fixed: XML-RPC server not closed when closing LSL-Editor
-

- -

Jul 2 2007 14:41 (local time)

-

- - Fixed: Size of Simulator resets to default
- - Changed: Vector and Rotation parser
- - Changed: Vector and Rotation fields changed from double to float
- - Added: Preprocessor processes all internal reserved words
- - Changed: llDialog / llRequestPermissions / link_message / llMessageLinked uses new TaskQueue
-

- -

Jul 1 2007 23:55 (local time)

-
- - Added: Smart indenting on closing parenthesis (experimental)
- - Revised: (Needs testing!!) -
    -
  • llGetSubString
  • -
  • llDeleteSubString
  • -
  • llList2List
  • -
  • llDeleteSubList
  • -
- - Added: -
    -
  • llIntegerToBase64
  • -
  • llBase64ToInteger
  • -
  • llStringToBase64
  • -
  • llBase64ToString
  • -
  • llXorBase64StringsCorrect
  • -
-
- -

Jun 30 2007 11:41 (local time)

-

- - Fixed: Can't close tabs when in Windows Classic mode
- - Changed: Internal, state / event has its own TaskQueue (needs testing)
-

- -

Jun 29 2007 16:38 (local time)

-

- - Fixed: Integer '~' operator works only on TRUE/FALSE
- - Added: Syntax checker button F6 (no compile / execute)
- - Changed: Internal, Simulator / Compiler as usercontrols
-

- -

Jun 28 2007 12:18 (local time)

-

- - Added: Ctr-Shft-S to Save as...
- - Added: AutoUpdate check (daily) / Manual update on Help menu
- - Added: Double click on compiler error goes to error line / column
- - Changed: Compiler errors shows on listview
- - Changed: Tab / Shift Tab , toggles indent block of text
- - Changed: Home button sets cursor to beginning of line, after whitespace
-

- -

Release 2.6

- -

Jun 27 2007 18:20 (local time)

-

- - Fixed: Editor crashes on error in dataserver script
- - Changed: synchronized llGetNumberOfNotecardLines / llGetNotecardLine dataserver requests
-

- -

Jun 26 2007 11:49 (local time)

-

- - Fixed: llDialog does not talk anymore
-

- -

Jun 25 2007 21:08 (local time)

-
- - Fixed: Indent adds tab on lines ending in comment or whitespace
- - Added: XML-RPC listening base port 50888
-
    -
  • remote_data (event)
  • -
  • llOpenRemoteDataChannel
  • -
  • llCloseRemoteDataChannel
  • -
  • llRemoteDataReply
  • -
  • llSendRemoteData (untested)
  • -
- - Fixed: Tooltips shows 'lt;' and 'gt;'
- - Added: Bugreport to Menu Help
- - Added: llLoadURL
- - Added: listen callbacks are removed on state change
- - Added: llListenControl
-
-

Jun 24 2007 13:11 (local time)

-

- - Added: Print preview
- - Fixed: Editor only prints 1 page
- - Added: ReplaceAll
- - Fixed: Find and Replace issues
-

-

Jun 22 2007 18:59 (local time)

-

- - Added: The ~ (complement) operator to integer
- - Fixed: global functions containing whitespace gives compile error
- - Added: Keep user settings between LSLEditor updates
- - Added: llGetNumberOfNotecardLines / llGetNotecardLine
- - Added: Recent files list in the File menu
-

- -

Jun 21 2007 13:41 (local time)

-

- - Fixed: Compiles empty documents and/or absent default state
-

- -

Release 2.5

- -

Jun 20 2007 22:41 (local time)

-

- - Fixed: Menu Tools does not work
- - Added: llStringTrim
-

- -

Jun 18 2007 14:50 (local time)

-

- - Fixed: Backspace / Delete issues when brackets highlighted
-

- -

Jun 14 2007 23:59 (local time)

-

- - Fixed: Backspace unreliable when brackets highlighted
- - Changed: Tab-characters have same width as 4 spaces
- - Changed: auto indent on typing if/else
- - Changed: format document indent if/else
- - Fixed: timer stops after state change
- - Fixed: llList2Integer broken
- - Added: llMessageLinked / link_message
- - Fixed: llListReplaceList gives wrong answer
-

- -

Jun 13 2007 20:21 (local time)

-

- - Fixed: key problem (breaks listen and more)
-

- -

Release 2.4

- -

Jun 13 2007 12:12 (local time)

-

- - Release 2.4
-

- -

Jun 12 2007 16:43 (local time)

-

- - Fixed: llSetTimerEvent broken
- - Added: Redo
- - Changed: Linenumbers stops at and-of-document
- - Fixed: Cursorposition shows on closed tab
- - Changed: Close button on tab shows on mouse hover
- - Fixed: Argument typing shows wrong color
- - Fixed: Slow brackets matching
- - Fixed: Slow editing large documents / long lines
-

- -

Jun 11 2007 11:36 (local time)

-

- - Fixed: Line numbers incorrect after delete all
- - Fixed: Cursor position does not show on non primary script
- - Fixed: Undo eats memory
- - Fixed: Undo slow on large documents
-

-

Jun 09 2007 11:44 (local time)

-
- - Added: brackets matching
-
    -
  • parentheses or round brackets: ( )
  • -
  • box brackets or square brackets: [ ]
  • -
  • curly brackets or braces: { }
  • -
  • angle brackets or chevrons: < >
  • -
-
-

Jun 08 2007 19:35 (local time)

-

- - Fixed: Undo after find / replace
- - Fixed: Undo does nothing
- - Added: Color scheme for tooltips
- - Fixed: Missing spaces in tooltips
- - Fixed: Keyboard hint vertical position changes
- - Fixed: Mouse Tooltip shows on EOL
-

- -

Jun 07 2007 13:41 (local time)

-

- - Added: Find and Replace
-

- -

Release 2.3

- -

Jun 06 2007 17:01 (local time)

-

- - Fixed: Editor does not show on taskbar
- - Added: bool operators on key
- - - Added: Operator vector / rotation
- - Fixed: Save Ctrl-S in debug session
-

-

Jun 05 2007 23:33 (local time)

-

- - Fixed: A lot of operators
- - Fixed: llDeleteSubString
- - Added: Block commenting Ctrl-K Ctrl-L
- - Fixed: Compiler errors hide internal types
- - Improved: parsing strings, including escape chars
- - Changed: No codecompletion nor hints typing within strings
- - Changed: No codecompletion nor hints typing within comments
- - Fixed: blind tabs showing again on XP without VisualStyles
- - Added: Shortcutkeys for formatting
-

-

Jun 04 2007 21:52 (local time)

-

- - Changed: replaced double by float
- - Fixed: Parsing long files takes to much time
- - Fixed: Line-numbers frozen
- - Fixed: compile error on 'state' between quotes
- - Fixed: AutoWordSelection problem appears to be an insolvable Microsoft bug, ... i solved it
- - Added: Showing Line / Character position of cursor on statusbar
-

-

Jun 03 2007 20:54 (local time)

-

- - Fixed: AutoWordSelection off, and stay off
- - Fixed: indent whitespace can be a mix of tab and spaces
- - Added: default / state to autocompletion ;-)
- - Added: operators + and - for rotation / rotation
- - Added: operators multiplication of vector / rotation
- - Added: operators multiplication and division of rotation / rotation
-

-

Jun 02 2007 18:58 (local time)

-

- - Added: llAxisAngle2Rot
- - Added: some vector operators
- - Fixed: codecompletion tooltip disappears when hitting arrow keys
- - Fixed: blind tabs showing again on XP without VisualStyles
-

-

Jun 01 2007 23:34 (local time)

-

- - Added: at_target, http_response and remote_data events
- - Added: Goto form acts on return key
- - Added: First implementation of llDialog
- - Fixed: VisualStyleRenderer crash on startup
- - Fixed: Indent was broken
- - Added: implicit string operator on key
- - Added: implicit bool operators to string class
-

- -

May 31 2007 23:55 (local time)

-

- - Added: llSleep
- - Added: Editor Goto Line (Ctrl-G)
- - Added: Ctrl-F4 closes active window/tab
- - Added: Editor option Wiki-pages in Seperate browser
- - Fixed: Linenumber drawing double-buffered in editor
- - Added: Close button to Tab pages
- - Fixed: 'Tab' key inserts a tab character or 4-space characters, depending on the Editor-settings
- - Fixed: timer problem when changing states
-

- -

May 29 2007 16:41 (local time)

-

- - Improved: parenthesis indenting old 'C' style accepted
- - Added Editor options: Auto Word Selection (off by default)
- - Fixed: Linenumber drawing double-buffered in editor
- - Added a 'Die' button to the compiler
- - Added Editor options: SL (ugly) color-scheme / SL 4-spaces indent
- - Fixed: crash on editing end-of-document
- - Fixed: void argument on events
-

- -

May 28 2007 23:34 (local time)

-

- - Autocompletion including arguments on 'events'
- - Fixed: incorrect color on pasting text
- - Fixed: autoformatting on selected text
- - Fixed: incorrect old argument list on non-functions
-

- -

May 27 2007 13:15 (local time)

-

- - llListFindList bug fixed
- - added comparison operators for list,key,float,integer,vector and rotation
- - when opening an existing document, the untouched 'new.lsl' example is destroyed
-

- -

Release 2.2

- -

May 26 2007 18:00 (local time)

-

- - Tooltipping / Codecompletion hitting the boundaries of parent window
-

- -

May 25 2007 11:28 (local time)

-

- - Explicit cast 'list' implemented for string,integer,key,float,vector and rotation
-

- -

May 24 2007 19:34 (local time)

-

- - Compiler error shows correct line numbers
- - Debug tab only visible when there are no compile errors
- - Removed C# tab
- - Small bug fixed, on empty information, when using codecompletion
- - Codecompletion shows ALL keywords
- - Shows '*' after filename when document is changed
-

- -

May 23 2007 21:03 (local time)

-

- - Compiler starts at Output tab, on error shows C# tab
- - Tabbed documents!!
- Thanks to Darek and Marco for their bug reports:
- - Fixed: Operator '+' is ambiguous on operands of type 'LSLEditor.SecondLife.integer' and 'LSLEditor.SecondLife.integer'
- - Fixed: Operator '+=' cannot be applied to operands of type 'LSLEditor.SecondLife.list' and 'double'
- - Fixed: Operator '+=' cannot be applied to operands of type 'LSLEditor.SecondLife.list' and 'LSLEditor.SecondLife.key'
- - Copy from the debug window enabled
-

- -

May 22 2007 23:46 (local time)

-

- - Bug fix on empty key in Sim properties
- - Show function arguments while typing
-

- - -

May 16 2007 13:07 (local time)

-

- - Simulator docks at bottom
-

- -

Release 2.1

- -

May 14 2007 22:47 (local time)

-

- - Release 2.1 (Multiple document interface)
- - Running multiple LSL scripts concurrent
- - Chat/listen implementation between LSL scripts
- - First implementation of a 'find' (Ctrl-F) option
-

-

May 08 2007 16:37 (local time)

-

- - llListRandomize
- - llListSort
- - llListReplaceList (to be tested)
- - llParseString2List (todo spacers)
- - llParseStringKeepNulls (todo spacers)
-

- -

May 07 2007 19:53 (local time)

-

- - llMD5String implemented - - Implemented a lot of list functions (see examples)
- - Fixed state bug
- - llResetScript()
- - Tooltip improved
-

- -

May 06 2007 13:03 (local time)

-

- - Parser improved a lot!!
-

- -

May 04 2007 17:15 (local time)

-

- - LSL keywords updated 19 Dec 2006 for LSL 1.13
-

-

May 03 2007 18:49 (local time)

-

- - Execution is more stable, and useful error reports :-)
- - Implemented listen filter (llListen / llListenRemove)
- - some minor bugfixes
-

-

May 02 2007 19:41 (local time)

-

- - llListFindList implemented
- - KEY_NULL implemented
- - key compare
- - llGetOwnerKey returns key in compiler properties
- - llToLower / llToUpper
- - llEuler2Rot / llRot2Euler
- - Code completion shows function arguments when typing
- - Cleaned the resource files
- - Updated a lot more, can't remember ;-)
-

- -

May 01 2007 13:47 (local time)

-

- - Manual Chat works, on different channels (listen) -

-

Apr 30 2007 23:57 (local time)

-

- - Format document (Edit -> Advanced -> Format Document)
- - llFrand seeding
- - casting bug fixed (parser)
- - run_time_permissions event bug fixed
- - llDialog shows messagebox (no buttons)
- - Did some testing on "Shippou Oud - Fruit machine"
- - Import Examples
- - Timer bug fixed
- - Al lot of internal base class changes
-

- -

Apr 29 2007 15:29 (local time)

-

First implementation of linenumbers

- -

Release 2.0

- -

Apr 28 2007 14:01 (local time)

-

Changed project to .NET 2.0

- -

Mar 30 2007 12:54 (local time)

-

- changed wiki adres

- -

Jan 2007 - Mar 2007

-

- Sabbatical :-), doing nothing....

- -

Dec 26 2006 12:54 (local time)

-

- first implementation of printing

-

Nov 21 2006 23:22 (local time)

-

- delete key bug fixed

-

Nov 08 2006 00:40 (local time)

-

- got Strife _double back in place
- - some C# coloring

-

Nov 05 2006 14:54 (local time)

-

- Just some minor updates, lack of time at the moment

-

Oct 29 2006 01:00 (local time)

-

- State change fires state_exit and state_entry
- - compiler on tabcontrole

-

Oct 28 2006 02:00 (local time)

-

- Float2Hex example compiles (thanx to Strife Onizuka)

-

Oct 27 2006 21:59 (local time)

-

- Global class compiles correctly on vars (static) and user defined - functions (void and non void)

-

Oct 26 2006 01:07 (local time)

-

- code completion, tab/return and contains icons for different types
- - other type of tooltipping.... not nice.
- - override & , to make it bool answer...

-

Oct 25 2006 01:46 (local time)

-

- http can use proxy
- - smtp
- - properties windows for compiler
- - integer made out of struct, to override (string) explicit operator

-

Oct 22 2006 21:43 (local time)

-

- first implementation of llHTTPRequest / http_response
- - made a lot of lists functions
- - more lists on one line (not lists within lists)

-

Oct 20 2006 21:00 (local time)

-

- State change, shows correct events

-

Oct 20 2006 0:03 (local time)

-

- Implemented (almost) all Math functions
- - Timer works

-

Oct 19 2006 03:00 (local time)

-

- some edit improvements
- - states work!!

-

Oct 16 2006 23:50 (local time)

-

- Improvement parsing script, vector,rotation, simple list (one line)
- - Global vars, wrapped in global class
- - Checkupdate function in the program
- - First attempt multiple state (only default state executes, have patients - my friends...)

-

Oct 14 2006 18:36 (local time)

-

- User argument input for events like touch_start (see picture above)

-

Oct 8, 2006 18:36 (local time)

-

- Code highlighting
- - Code completion
- - Code info, took the old LSLguide, and used Appendix, i can do better i - know
- - F1 , on a keyword, does show up the LSLWiki page on the keyword
- - Compile, the hello world example should work on state_entry event
- - Open/Save and edit lsl script files

-

Oct 2, 2006 (local time)

- -

Release 1.0

- -

First idea and prototype

- -

Oct 1, 2006 (local time)

- -
- - + + + Release Notes + + + +
+
+

2018-01-15 - Release 2.56.0

+
+ * Added all functions of the OSSL library (http://opensimulator.org/wiki/Category:OSSL_Functions). +
* Added the include functionality. +
    +
  • The LSLI extension has been created and is required for the use of the include function.
  • +
  • Scripts can now be included using '//#include("<path>/<file>")' inside an LSLI script.
  • +
  • LSLI scripts can be directly interpreted by the debugger inside the LSL Editor.
  • +
  • LSLI scripts can be exported to LSL scripts.
  • +
+ For more information about the include functionality, + please visit + + https://docs.google.com/document/d/1gEkeY4rk-x06PPRPlxVbiPdXS1NDiaiQxZRrVfzwFjA/edit?usp=sharing + +
+

2013-10-18 - Release 2.55.0

+
+ * Constants Added: +
    +
  • JSON_DELETE
  • +
+
+
+ * Fixes +
    +
  • Auto-complete should now be consistent for functions having no arguments. This was a configuration issue with older tool-tip entries.
  • +
+
+

2013-07-15 - Release 2.54.0

+
+ * Constants Added: +
    +
  • AVOID_NONE
  • +
  • JSON_APPEND
  • +
  • OBJECT_CHARACTER_TIME
  • +
  • PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED
  • +
  • PU_FAILURE_PARCEL_UNREACHABLE
  • +
+
+
+ * Functions Added: +
    +
  • llGetStaticPath
  • +
  • llXorBase64
  • +
+
+

2013-07-07 - Release 2.53.1

+
+ * Fixes +
    +
  • Fixed print dialogue box not opening on AMD64 CPUs
  • +
+
+

2013-07-02 - Release 2.53.0

+
+ * Constants Added: +
    +
  • CHARACTER_STAY_WITHIN_PARCEL
  • +
  • ERR_GENERIC
  • +
  • ERR_MALFORMED_PARAMS
  • +
  • ERR_PARCEL_PERMISSIONS
  • +
  • ERR_RUNTIME_PERMISSIONS
  • +
  • ERR_THROTTLED
  • +
  • OBJECT_RETURN_PARCEL
  • +
  • OBJECT_RETURN_PARCEL_OWNER
  • +
  • OBJECT_RETURN_REGION
  • +
  • PERMISSION_RETURN_OBJECTS
  • +
+
+ * Functions added: +
+
    +
  • llReturnObjectsByID
  • +
  • llReturnObjectsByOwner
  • +
  • +
+
+

2013-06-22 - Release 2.52.0

+

Added the JSON related constants and functions.

+
+ * Constants Added: +
    +
  • JSON_ARRAY
  • +
  • JSON_FALSE
  • +
  • JSON_INVALID
  • +
  • JSON_NULL
  • +
  • JSON_NUMBER
  • +
  • JSON_OBJECT
  • +
  • JSON_STRING
  • +
  • JSON_TRUE
  • +
  • +
+ +
+
+ * Functions added: +
    +
  • llList2Json
  • +
  • llJson2List
  • +
  • llJsonGetValue
  • +
  • llJsonSetValue
  • +
  • llJsonValueType
  • +
+
+

2013-05-16 - Release 2.51.0

+
+ * Constants Added: +
    +
  • CONTENT_TYPE_ATOM
  • +
  • CONTENT_TYPE_FORM
  • +
  • CONTENT_TYPE_JSON
  • +
  • CONTENT_TYPE_LLSD
  • +
  • CONTENT_TYPE_RSS
  • +
  • CONTENT_TYPE_XHTML
  • +
  • CONTENT_TYPE_XML
  • +
  • PERMISSION_OVERRIDE_ANIMATIONS
  • +
+
+
+ * Functions added: +
    +
  • llGetAnimationOverride()
  • +
  • llResetAnimationOverride()
  • +
  • llSetAnimationOverride()
  • +
+
+
+
+

2013-03-04 - Release 2.50.0

+
+ * Function added: +
    +
  • llGenerate()
  • +
+
+
+
+

2013-02-14 - Release 2.49.0

+
+ * Constants Added: +
    +
  • ATTACH_AVATAR_CENTER
  • +
  • ATTACH_NECK
  • +
+
+
+
+

2013-01-01 - Release 2.48.0

+
+ * Constants Added (thanks to Lucia Nightfire): +
    +
  • OBJECT_PHANTOM
  • +
  • OBJECT_PHYSICS
  • +
  • OBJECT_TEMP_ON_REZ
  • +
+
+
+
+

2012-12-25 - Release 2.47.2

+
+ * Fixed: +
    +
  • Accidentally added the Link parameter to llClearPrimMedia when correcting llClearLinkMedia.
  • +
  • llWanderWithin - Corrected second argument to be vector instead of float.
  • +
  • Bug 28 - Alt-F4 or File-Exit does not close unsaved documents.
  • +
  • Bug 29 - llAngleBetween returns wrong values. Still not 100% accurate. Uses the improved code from the LSL Portal.
  • +
+
+
+
+

2012-11-26 - Release 2.47.1

+
+ * Functions Added: +
    +
  • llAttachToAvatarTemp
  • +
  • llGetSimStats
  • +
  • llTeleportAgent
  • +
  • llTeleportAgentGlobalCoords
  • +
+
+
+ * Constants Added: +
    +
  • ATTACH_LEFT_PEC
  • +
  • ATTACH_RIGHT_PEC
  • +
  • CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES
  • +
  • CHARACTER_MAX_SPEED
  • +
  • CHARACTER_MAX_TURN_RADIUS
  • +
  • HTTP_CUSTOM_HEADER
  • +
  • HTTP_PRAGMA_NO_CACHE
  • +
  • HORIZONTAL
  • +
  • OBJECT_ATTACHED_POINT
  • +
  • OBJECT_PATHFINDING_TYPE
  • +
  • OBJECT_ROOT
  • +
  • PERMISSION_TELEPORT
  • +
  • VERTICAL
  • +
  • OPT_AVATAR
  • +
  • OPT_CHARACTER
  • +
  • OPT_EXCLUSION_VOLUME
  • +
  • OPT_LEGACY_LINKSET
  • +
  • OPT_MATERIAL_VOLUME
  • +
  • OPT_OTHER
  • +
  • OPT_STATIC_OBSTACLE
  • +
  • OPT_WALKABLE
  • +
  • SIM_STAT_PCT_CHARS_STEPPED
  • +
+
+
+ * Constants Removed: +
    +
  • CHARACTER_TURN_SPEED_MULTIPLIER
  • +
  • +
  • +
  • +
+
+
+ * Constants Updated: +
    +
  • PURSUIT_GOAL_TOLERANCE
  • +
  • REQUIRE_LINE_OF_SIGHT
  • +
  • WANDER_PAUSE_AT_WAYPOINTS
  • +
  • +
+
+
+ * Fixed: +
    +
  • Removed several duplicate names from the Help => About dialogue.
  • +
+
+
+
+

2012-11-18 - Release 2.47.0

+
+ * Made note and script files conceptually different. Giving each their own open/save dialogues etc. Notes will always be UTF-8 encoded (without BOM), just as in SL. +
+
+ * Added Path-finding constants: +
    +
  • CHARACTER_CMD_SMOOTH_STOP
  • +
  • CHARACTER_MAX_SPEED
  • +
  • CHARACTER_MAX_TURN_SPEED
  • +
  • CHARACTER_MAX_TURN_RADIUS
  • +
  • CHARACTER_ORIENTATION
  • +
  • FORCE_DIRECT_PATH
  • +
  • GET_NAV_POINT_RADIUS
  • +
  • HORIZONTAL
  • +
  • PATROL_PAUSE_AT_WAYPOINTS
  • +
  • PU_FAILURE_NO_NAVMESH
  • +
  • PURSUIT_GOAL_TOLERANCE
  • +
  • REQUIRE_LINE_OF_SIGHT
  • +
  • VERTICAL
  • +
  • WANDER_PAUSE_AT_WAYPOINTS
  • +
+
+
+ * Removed renamed/deleted constants: +
    +
  • CHARACTER_MAX_ANGULAR_ACCEL
  • +
  • CHARACTER_MAX_ANGULAR_SPEED
  • +
  • CHARACTER_TURN_SPEED_MULTIPLIER
  • +
+
+
+ * Changed: +
    +
  • llWanderWithin() - function signature and description are changed.
  • +
+
+
+ * Fixed: +
    +
  • llClearLinkMedia() - added the missing Link parameter (to the emulation stub and highlighting).
  • +
+
+
+
+

2012-04-24 - Release 2.46.0

+ * Added constants/function currently on the Magnum RC. +
+ * Constants: +
    +
  • AGENT_LIST_PARCEL
  • +
  • AGENT_LIST_PARCEL_OWNER
  • +
  • AGENT_LIST_REGION
  • +
  • PRIM_SLICE
  • +
+
+
+ * Functions: +
    +
  • llGetAgentList
  • +
+
+
+ * Fixed: +
    +
  • SF ID: 3072580 - HTTP Request response returned gzip compressed string. (Thanks to Akkarin Dryke).
  • +
  • Also fixed HTTP Request response to return UTF-8 (instead of ASCII).
  • +
+
+
+
+

2012-03-18 - Release 2.45.1

+
* Fixed: Problem with updater. Our BZip2 decompression code did not work, which prevented the updater creating the new file.
+
+
+

2012-03-14 - Release 2.45.0

+ - Added new constants, event, and functions for the character/path-finding feature in testing on aditi. NOTE: these are still in alpha testing and not finalised, so they may change without notice. More info available here Pathfinding in Second Life +
+ - Constants: +
    +
  • AVOID_CHARACTERS
  • +
  • AVOID_DYNAMIC_OBSTACLES
  • +
  • CHARACTER_AVOIDANCE_MODE
  • +
  • CHARACTER_CMD_JUMP
  • +
  • CHARACTER_CMD_STOP
  • +
  • CHARACTER_DESIRED_SPEED
  • +
  • CHARACTER_LENGTH
  • +
  • CHARACTER_TYPE
  • +
  • CHARACTER_MAX_ACCEL
  • +
  • CHARACTER_MAX_ANGULAR_ACCEL
  • +
  • CHARACTER_MAX_ANGULAR_SPEED
  • +
  • CHARACTER_MAX_DECEL
  • +
  • CHARACTER_RADIUS
  • +
  • CHARACTER_TURN_SPEED_MULTIPLIER
  • +
  • CHARACTER_TYPE_A
  • +
  • CHARACTER_TYPE_B
  • +
  • CHARACTER_TYPE_C
  • +
  • CHARACTER_TYPE_D
  • +
  • CHARACTER_TYPE_NONE
  • +
  • PU_EVADE_HIDDEN
  • +
  • PU_EVADE_SPOTTED
  • +
  • PU_FAILURE_INVALID_GOAL
  • +
  • PU_FAILURE_INVALID_START
  • +
  • PU_FAILURE_NO_VALID_DESTINATION
  • +
  • PU_FAILURE_OTHER
  • +
  • PU_FAILURE_TARGET_GONE
  • +
  • PU_FAILURE_UNREACHABLE
  • +
  • PU_GOAL_REACHED
  • +
  • PU_SLOWDOWN_DISTANCE_REACHED
  • +
  • PURSUIT_INTERCEPT
  • +
  • PURSUIT_FUZZ_FACTOR
  • +
  • PURSUIT_OFFSET
  • +
  • REQUIRE_LINE_OF_SIGHT
  • +
  • TRAVERSAL_TYPE
  • +
  • TRAVERSAL_TYPE_NONE
  • +
  • TRAVERSAL_TYPE_FAST
  • +
  • TRAVERSAL_TYPE_SLOW
  • +
+ - Event: +
    +
  • path_update
  • +
+ - Functions: +
    +
  • llCreateCharacter
  • +
  • llDeleteCharacter
  • +
  • llEvade
  • +
  • llExecCharacterCmd
  • +
  • llFleeFrom
  • +
  • llGetClosestNavPoint
  • +
  • llNavigateTo
  • +
  • llPatrolPoints
  • +
  • llPursue
  • +
  • llUpdateCharacter
  • +
  • llWanderWithin
  • +
+
+ - Changed: +
+
    +
  • Changed the way version numbers are created for the release. They should now show as 2.45.0.x in all parts of the program.
  • +
  • Updated copyright on about dialogue.
  • +
  • Fixed some bad constant/function entries.
  • +
+
+
+
+

2012-02-08 - Release 2.44.1

+ - Added: constants: +
    +
  • AGENT_AUTOPILOT
  • +
  • AGENT_BY_LEGACY_NAME
  • +
  • AGENT_BY_USERNAME
  • +
  • CHANGED_MEDIA
  • +
  • OBJECT_RUNNING_SCRIPT_COUNT
  • +
  • OBJECT_SCRIPT_MEMORY
  • +
  • OBJECT_SCRIPT_TIME
  • +
  • OBJECT_TOTAL_SCRIPT_COUNT
  • +
  • OBJECT_UNKNOWN_DETAIL
  • +
  • PRIM_LINK_TARGET
  • +
  • PRIM_SCULPT_TYPE_MASK
  • +
  • RC_DATA_FLAGS
  • +
  • RC_DETECT_PHANTOM
  • +
  • RC_GET_LINK_NUM
  • +
  • RC_GET_NORMAL
  • +
  • RC_GET_ROOT_KEY
  • +
  • RC_MAX_HITS
  • +
  • RC_REJECT_AGENTS
  • +
  • RC_REJECT_LAND
  • +
  • RC_REJECT_NONPHYSICAL
  • +
  • RC_REJECT_PHYSICAL
  • +
  • RC_REJECT_TYPES
  • +
  • RCERR_CAST_TIME_EXCEEDED
  • +
  • RCERR_SIM_PERF_LOW
  • +
  • RCERR_UNKNOWN
  • +
  • TOUCH_INVALID_FACE
  • +
  • TOUCH_INVALID_VECTOR
  • +
+ - Added: functions: +
    +
  • llAvatarOnLinkSitTarget
  • +
  • llGetParcelMusicURL
  • +
  • llSetContentType
  • +
  • llSetLinkCamera
  • +
  • llSetRegionPos
  • +
+ - Changed: +
    +
  • Opening files no longer assumes ANSI format. Instead, we attempt to detect file encoding and default to UTF-8 if no encoding is obvious.
  • +
  • Removed ANSI as an output format option.
  • +
  • Fixed updater to disallow accidental updating with older files. This only affects testing latest version before public release.
  • +
+
+
+

2012-01-01 - Release 2.44.0

+ - Added +
    +
  • "Release Notes..." to help menu.
  • +
+ + - Changed +
    +
  • Updated About.htm
  • +
  • Tools => Options => Text Editor => General - Changed labels to properly reflect the output file format.
  • +
  • UTF-8 output no longer prefixes the B.O.M. character.
  • +
  • UTF-8 is now the default file output format. ANSI is deprecated and will be removed at a later date.
  • +
+ + - Fixed: +
    +
  • SF ID: 2995296 - Search | Comment Line (Ctl+K) Breaks Line After Search Term.
  • +
  • SF ID: 3461546 - ReleaseNotes.htm in source, but never used
  • +
  • SF ID: none - Fix for state change without state name passing syntax-check.
  • +
  • SF ID: 3465488 - lslint does not show errors.
  • +
  • SF ID: 2999054 - Unicode characters do not paste correctly.
  • +
  • SF ID: none - Fixed typo in Font/Colour options dialogue.
  • +
+
+ +
+

2011-12-12 - Release 2.43.1

+ - Added: constants +
    +
  • CONTENT_TYPE_HTML
  • +
  • DENSITY
  • +
  • ESTATE_ACCESS_ALLOWED_AGENT_ADD
  • +
  • ESTATE_ACCESS_ALLOWED_AGENT_REMOVE
  • +
  • ESTATE_ACCESS_ALLOWED_GROUP_ADD
  • +
  • ESTATE_ACCESS_ALLOWED_GROUP_REMOVE
  • +
  • ESTATE_ACCESS_BANNED_AGENT_ADD
  • +
  • ESTATE_ACCESS_BANNED_AGENT_REMOVE
  • +
  • FRICTION
  • +
  • GRAVITY_MULTIPLIER
  • +
  • HTTP_VERBOSE_THROTTLE
  • +
  • KFM_CMD_PAUSE
  • +
  • KFM_CMD_PLAY
  • +
  • KFM_CMD_STOP
  • +
  • KFM_COMMAND
  • +
  • KFM_DATA
  • +
  • KFM_FORWARD
  • +
  • KFM_LOOP
  • +
  • KFM_MODE
  • +
  • KFM_PING_PONG
  • +
  • KFM_REVERSE
  • +
  • KFM_ROTATION
  • +
  • KFM_TRANSLATION
  • +
  • OBJECT_PHYSICS_COST
  • +
  • OBJECT_PRIM_EQUIVALENCE
  • +
  • OBJECT_SERVER_COST
  • +
  • OBJECT_STREAMING_COST
  • +
  • PARCEL_DETAILS_SEE_AVATARS
  • +
  • PRIM_MATERIAL
  • +
  • PRIM_MEDIA_ALT_IMAGE_ENABLE
  • +
  • PRIM_MEDIA_AUTO_LOOP
  • +
  • PRIM_MEDIA_AUTO_PLAY
  • +
  • PRIM_MEDIA_AUTO_SCALE
  • +
  • PRIM_MEDIA_AUTO_ZOOM
  • +
  • PRIM_MEDIA_CONTROLS
  • +
  • PRIM_MEDIA_CONTROLS_MINI
  • +
  • PRIM_MEDIA_CONTROLS_STANDARD
  • +
  • PRIM_MEDIA_CURRENT_URL
  • +
  • PRIM_MEDIA_FIRST_CLICK_INTERACT
  • +
  • PRIM_MEDIA_HEIGHT_PIXELS
  • +
  • PRIM_MEDIA_HOME_URL
  • +
  • PRIM_MEDIA_PERMS_CONTROL
  • +
  • PRIM_MEDIA_PERMS_INTERACT
  • +
  • PRIM_MEDIA_PERM_ANYONE
  • +
  • PRIM_MEDIA_PERM_GROUP
  • +
  • PRIM_MEDIA_PERM_NONE
  • +
  • PRIM_MEDIA_PERM_OWNER
  • +
  • PRIM_MEDIA_WHITELIST
  • +
  • PRIM_MEDIA_WHITELIST_ENABLE
  • +
  • PRIM_MEDIA_WIDTH_PIXELS
  • +
  • PRIM_OMEGA
  • +
  • PRIM_PHYSICS_MATERIAL
  • +
  • PRIM_PHYSICS_SHAPE_CONVEX
  • +
  • PRIM_PHYSICS_SHAPE_NONE
  • +
  • PRIM_PHYSICS_SHAPE_PRIM
  • +
  • PRIM_PHYSICS_SHAPE_TYPE
  • +
  • PRIM_POS_LOCAL
  • +
  • PRIM_ROT_LOCAL
  • +
  • PRIM_SCULPT_FLAG_INVERT
  • +
  • PRIM_SCULPT_FLAG_MIRROR
  • +
  • PROFILE_NONE
  • +
  • PROFILE_SCRIPT_MEMORY
  • +
  • RESTITUTION
  • +
  • STATUS_BLOCK_GRAB_OBJECT
  • +
  • STATUS_BOUNDS_ERROR
  • +
  • STATUS_INTERNAL_ERROR
  • +
  • STATUS_MALFORMED_PARAMS
  • +
  • STATUS_NOT_FOUND
  • +
  • STATUS_NOT_SUPPORTED
  • +
  • STATUS_OK
  • +
  • STATUS_TYPE_MISMATCH
  • +
  • STATUS_WHITELIST_FAILED
  • +
  • TEXTURE_BLANK
  • +
  • TEXTURE_DEFAULT
  • +
  • TEXTURE_MEDIA
  • +
  • TEXTURE_PLYWOOD
  • +
  • TEXTURE_TRANSPARENT
  • +
  • TOUCH_INVALID_TEXCOORD
  • +
+ - other changes: Cleaned up parts of the highlighting XML file generally, and reordered some entries. +
+ +
+

2011-12-06 - Release 2.43

+ - Added: event +
    +
  • transaction_result
  • +
+ - Added: functions: +
    +
  • llCastRay - syntax-checker only, highlighting added previously.
  • +
  • llClearLinkMedia - syntax-checker only, highlighting added previously.
  • +
  • llGetDisplayName
  • +
  • llGetLinkMedia
  • +
  • llGetMassMKS
  • +
  • llGetMemoryLimit
  • +
  • llGetPhysicsMaterial
  • +
  • llLinkSitTarget - syntax-checker only, highlighting added previously.
  • +
  • llManageEstateAccess
  • +
  • llScriptProfiler
  • +
  • llSetAngularVelocity
  • +
  • llSetKeyframedMotion
  • +
  • llSetLinkMedia
  • +
  • llSetMemoryLimit
  • +
  • llSetPhysicsMaterial
  • +
  • llSetVelocity
  • +
  • llTransferLindenDollars
  • +
+ - Fixed UTF-8 file format from prefixing with a BOM. While not invalid, it confuses some apps. +
+
+ + +
+

2011-04-21 - Release 2.42

+ * Added: constants +
    +
  • CHANGED_REGION_START
  • +
  • PRIM_DESC
  • +
  • PRIM_NAME
  • +
+ * Added: functions (highlighting only): +
    +
  • llCastRay
  • +
  • llGetLinkNumberOfSides
  • +
  • llGetSPMaxMemory
  • +
  • llGetUsedMemory
  • +
  • llGetUsername
  • +
  • llRequestDisplayName
  • +
  • llRequestUsername
  • +
+
+ + +
+

2010 - Release 2.41

+
+ + +
+

April 17 2010 14:51 (local time) Release 2.40

+ - Added: stub functions for: +
    +
  • llGetFreeURLs
  • +
  • llRequestURL
  • +
  • llRequestSecureURL
  • +
  • llReleaseURL
  • +
  • llHTTPResponse
  • +
  • llGetHTTPHeader
  • +
+
+ + +
+

October 28 2008 11:28 (local time) Release 2.39

+ - Added: stub functions for: +
    +
  • llTextBox
  • +
  • llGetAgentLanguage
  • +
  • llDetectedTouchUV
  • +
  • llDetectedTouchFace
  • +
  • llDetectedTouchPos
  • +
  • llDetectedTouchNormal
  • +
  • llDetectedTouchBinormal
  • +
  • llDetectedTouchST
  • +
  • llSHA1String
  • +
+
+ + +
+

July 28 2008 14:10 (local time) Release 2.38

+ - Changed: Key cache file changed, so did lsleditor (??? who made the xml file, it uses siblings, not parent-child relations????) +
+ +
Summer break ;-)
+ +
May 18 2008 18:37 (local time) + - Changed: Ctrl-Shft-A uses 4-spaces intdent when (auto)pasting in SL +
+ +
May 13 2008 13:21 (local time) + - Changed: Adding duplicate items in solution explorer starts numbering at 1
+ - Fixed: focus when switching tabs
+ - Fixed: Save All (Ctrl Shft S), does not save Solution
+
+ + +
+

May 2 2008 19:00 (local time)> Release 2.37

+ - Added: PRIM_GLOW
+ - Added: llSetClickAction (and constants)
+ - Fixed: & in dialogue box
+ - Fixed: Permission dialogue box text messed up when the script name is too long
+
+ + +
+

Apr 3 2008 12:47 (local time) Release 2.36

+ - Fixed: llAbs throws error on large numbers
+
+ +
Mar 28 2008 12:47 (local time) + - Fixed: llListen should also listen when using "" keys
+ - Added: Basic authentication to llHTTPRequest, eg. http: //userid:password@domain.name/path
+ - Added: llEmail shows error responses from smtp server when in error
+
+ +

Mar 27 2008 13:33 (local time)

+ - Added (experimental): 'Ctrl Shift A' pastes active LSLEditor script to SecondLife (has to open script editor in SL first)
+
+ +
Mar 21 2008 12:12 (local time)
+ - Fixed: Shift Home crashes editor when nothing is selected
+
+ + +
+

Mar 16 2008 15:22 (local time) Release 2.35

+ - Added: llGetParcelDetails (see also menu - tools - options - debugging internal)
+ - Added: Alt-Backspace alternative for Ctrl-Z
+ - Fixed: Some focus issue on the find window
+ - Added: PARCEL_MEDIA_COMMAND_TYPE, PARCEL_MEDIA_COMMAND_SIZE, PARCEL_MEDIA_COMMAND_DESC, PARCEL_MEDIA_COMMAND_LOOP_SET
+ - Added: Contact item on menu Help
+ - Removed: some compression code
+
+ +

Feb 29 2008 12:40 (local time)

+ - Fixed: NULL_KEY was no key
+
+ + +
+

Feb 23 2008 19:45 (local time) Release 2.34

+ - Added: First generic plugin support
+ - Added: integer multiply operator for float operand
+ - Added: minus operator to rotation
+ - Fixed: Internals to pass more language tests, e.g. bool on ZERO_ROTATION and NULL_KEY, adding items to list
+
+ +

Feb 22 2008 23:38 (local time)

+

+ - Fixed: Browser status hides bottom scrollbar
+ - Fixed: Switching between Tabbed document and Windowed document, browser disappears
+ - Fixed: (key)"" == False
+ - Added: state changes allowed in global functions (when set in Debugging - General menu)
+ - Fixed: info on llInsertString was missing a few spaces
+ - Added: Debug windows have context menu, Copy, Select All and Clear
+ - Added: File - New - New notecard
+ - Changed: llGetScriptName returns scriptname without extension (when set in Debugging - General menu)
+ - Fixed: Don't send empty bugreports
+ - Fixed: tabs are presented in SL as 4 spaces, for example llStringLength("\t") == 4
+ - Fixed: remove old files after Autoupdate
+ - Fixed: autoupdate menu was readonly
+

+ +

Release 2.33

+ +

Feb 12 2008 08:12 (local time)

+

+ - Fixed: llLog and llLog10
+

+ +

Feb 04 2008 16:30 (local time)

+

+ - Added: Shortcut key for lslint, F7 ;-)
+ - Fixed: llMessageLinked using LINK_THIS works also when NOT using solution explorer
+ - Fixed: default value of key type is wrong
+ - Added: All animation / expression names are added to the autocompletion function (as strings)
+ - Added: Autocompletion of animation names can be switched on/off by menu Tools - Options - Text Editor - Code completion
+ - Fixed: crash of lsleditor on llHTTPRequest when errors occur
+ - Changed: Information on llSensorRepeat()
+ - Added: llResetLandPassList()
+

+ +

Release 2.32

+ +

Jan 27 2008 14:00 (local time)

+

+ - Added: open multiple files from menu 'File - Open - File...' or Ctrl-O
+ - Fixed: global functions do not parse when using multiple brackets on 1 line
+ - Fixed: renaming files and directories in solution explorer sometimes crashes lsleditor
+ - Changed: 'Recent Projects' in 'Recent Solutions'
+ - Changed: 'Add new Project' changed into 'Add new Solution'
+

+ +

Release 2.31

+ +

Jan 14 2008 16:28 (local time)

+

+ - Changed: llUnescapeURL and llEscapeURL using UTF8 encoding
+ - Changed: llBase64ToString and llStringToBase64 using UTF8 encoding
+ - Changed: improved label parsing
+

+ + +

Jan 12 2008 10:43 (local time)

+

+ - Fixed: llDialog does not show OK button, using no buttons
+

+ +

Jan 09 2008 17:18 (local time)

+

+ - Added: Online Help browser, New tab for every search can be unchecked in menu Tools - Options - Environment - Help
+ - Fixed: No scrolling when using Autoformat (Ctrl-D)
+

+ +

Jan 06 2008 13:31 (local time)

+

+ - Fixed: llGetListEntryType does not work on negative index
+ - Added: missing operators on integer
+ - Fixed: wrong parsing and casting of large hex numbers
+

+ +

Jan 05 2008 12:44 (local time)

+

+ - Added: show status of capslock
+

+ +

Release 2.30

+ +

Dec 29 2007 12:27 (local time)

+

+ - Fixed: llParseString2List loops when using empty strings on spacers
+

+ +

Dec 27 2007 22:57 (local time)

+

+ - Added: Disable tooltip user-setting, menu Tools - Options - Help
+ - Added: Link to the LSLEditor forum, menu Help - Forum
+ - Added: Auto save on menu Tools - Options - Debugging - General - Auto save
+ - Fixed: sending/retrieving bugreports crashes lsleditor when internet connection is not available
+ - Fixed: turning off autoindent errors on braces
+ - Fixed: line number issue on scrolling
+ - Fixed: cast error using llList2Vector for strings
+

+ +

Release 2.29

+ +

Dec 18 2007 16:38 (local time)

+

+ - Added: when nothing is selected, Shift-Delete, copies entire line to clipboard and deletes it
+ - Fixed: Ctrl-X is not undo-able
+ - Fixed: jump labels containing '_' give error
+ - Added: ATTACH_HUD_* constants
+

+ +

Dec 14 2007 17:51 (local time)

+

+ - Fixed: Unchecking Check-For-Updates, does check for updates, thats wrong
+

+ +

Release 2.28

+ +

Dec 14 2007 00:40 (local time)

+

+ - Added: INS (insert) / OVR (override) on status bar, changes when hitting Insert key
+ - Changed: Tab on notecards shows 'Text', where scripts shows 'Script'
+

+ + +

Dec 13 2007 23:52 (local time)

+

+ - Added: When changing to a non existing state, show warning
+ - Changed: llGetWallclock and llGetGMTclock
+

+ +

Dec 09 2007 02:30 (local time)

+

+ - Fixed: certain conditions the tab-stops at 4 chars goes to 6 chars wide
+

+ +

Dec 08 2007 15:55 (local time)

+

+ - Changed: Some Internals to pass more tests from http://wiki.secondlife.com/wiki/LSL_Language_Test
+ Some tests fail due to known issues. http://www.lsleditor.org/help/knownissues.htm
+ - Fixed: shift-home and shift-end selects from 'start' cq. 'end' of selection (only forward selection supported)
+

+ +

Dec 07 2007 02:44 (local time)

+

+ - Fixed: lsleditor crashes when using lslint plugin
+ - Added: Total char count
+ - Added: Last modified on SolutionExplorer items properties
+ - Changed: new implementation of llHTTPRequest, returns http status
+ - Changed: float shows 6 digits behind the decimal point (like SL)
+

+ +

Dec 06 2007 14:38 (local time)

+

+ - Fixed: Version 2.24 an above were broken on simple Verbose messages!!
+

+ +

Release 2.27

+ +

Dec 05 2007 17:35 (local time)

+

+ - Fixed: llModPow gives wrong answer using large numbers
+ - Fixed: Crash when clicked on errors, when script edit windows are closed
+ - Fixed: Oops Renaming files and objects in Solutionexplorer using same name but upper/lower case chars
+ - Fixed: Oops from llGetObjectDetails (only OBJECT_NAME and OBJECT_DESC implemented)
+ - Fixed: comments having unballanced string quotes do not compile
+

+ +

Release 2.26

+ +

Nov 28 2007 19:31 (local time)

+

+ - Changed: llBase64ToInteger , needs testings
+ - Changed: paint line numbers only when they are changed
+ - Changed: doubleclick selects whole words (including '_')
+

+ +

Nov 26 2007 13:33 (local time)

+

+ - Added: random return when failing to parse string in llBase64ToInteger
+ - Fixed: list constructor and large signed/unsigned integer problem
+

+ +

Nov 24 2007 19:16 (local time)

+

+ - Fixed: llListenRemove does not work
+ - Fixed: llMessageLinked adds 1 extra event when compiling
+

+ +

Release 2.25

+ +

Nov 22 2007 23:59 (local time)

+

+ - Added: true/false operators on vector and rotation
+ - Fixed: llRequestAgentData(uuid, DATA_BORN) has wrong date notation
+ - Fixed: listen event always gets the wrong sender id
+

+ +

Nov 20 2007 09:20 (local time)

+

+ - Fixed: typo on llRemoveSensor
+

+ +

Nov 19 2007 10:09 (local time)

+

+ - Fixed: llGetWallclock gives also fraction of seconds
+ - Added: X-SecondLife-Shard header in http request can be configured via menu - Tools - Options - Debugging - Internal (default = Production)
+ - Fixed: X-SecondLife-Region header in http request uses int coords.
+ - Fixed: notecards don't care about 'autocorrect indent'
+

+ +

Nov 15 2007 00:19 (local time)

+

+ - Fixed: Find and Find Replace window pushes editor to background when goes invisible
+ - Fixed: Find and Find Replace window does not focus text search box
+

+ +

Nov 14 2007 17:10 (local time)

+

+ - Added: X-SecondLife-* headers in http request
+

+ + +

Release 2.24

+ +

Nov 13 2007 01:33 (local time)

+

+ - Added: llResetLandBanList
+

+ +

Nov 10 2007 03:12 (local time)

+

+ - Fixed: Editing notecards is broken
+

+ +

Nov 09 2007 01:21 (local time)

+

+ - Fixed: CONTROL_ML_LBUTTON was missssspelleddd
+

+ +

Nov 07 2007 14:19 (local time)

+

+ - Fixed: info on llDetachFromAvatar() shows argument
+

+ +

Release 2.23

+ +

Nov 02 2007 15:53 (local time)

+

+ - Added: PRIM_SCULPT_TYPE_* constants
+

+ +

Oct 30 2007 11:53 (local time)

+

+ - Added: Findwindow uses F3 for next find
+

+ +

Oct 26 2007 10:57 (local time)

+

+ - Fixed: Some menu items use online wiki (if available), others use offline wiki
+

+ +

Oct 24 2007 14:53 (local time)

+

+ - Fixed: clicking Errors located on last line looses control on edit window
+ - Added: Shortcut keys to solution explorer
+ - Fixed: New script in solution explorer does not use indent user setting
+

+ +

Oct 23 2007 20:13 (local time)

+

+ - Changed: Shift-End, does not select the newline char
+ - Changed: LSLEditor remembers workingdirectory
+ - Changed: 'View Solutionexplorer' made persistent
+

+ +

Release 2.22

+ +

Oct 23 2007 20:13 (local time)

+

+ - Changed: When importing script, make form active.
+ - Changed: combox box for listening channels set to first channel by default
+ - Fixed: llScaleTexture has wrong arguments (and description)
+ - Changed: Menu item, "File - New - File" changed to File - New - Script"
+ - Fixed: llResetScript has to go directly to state_entry (and resetting vars)
+

+ +

Oct 22 2007 04:00 (local time)

+

+ - Changed: vars don't have to be initialised before usage
+

+ +

Oct 21 2007 20:18 (local time)

+
+ - Changed: Solution explorer, files are opened only once at a time
+ - Changed: Solution explorer, changed Prim entity to Object
+ - Changed: Solution explorer, Objects can be added to Objects
+ - Added: llMessageLinked can use linknum in solution explorer(needs testing)
+
    +
  • LINK_ROOT
  • +
  • LINK_SET
  • +
  • LINK_ALL_OTHERS
  • +
  • LINK_ALL_CHILDREN
  • +
  • LINK_THIS
  • +
+ Relationship is defined by place in solution explorer tree (no need to use llCreateLink)

+ - Fixed: the dialog is missing several buttons when using long text
+ - Changed: llDialog and llRequestPermissions removed topmost property
+
+ +

Oct 20 2007 12:09 (local time)

+

+ - Added: Contextmenu on error list, Copy or Copy Description only
+ - Fixed: plugin, lslint, possible crash on multiple line error output
+

+ +

Oct 18 2007 11:46 (local time)

+

+ - Fixed: possible crash on not initialized string
+ - Fixed: reading notecards outside solution explorer was broken
+ - Added: llGetObjectDetails (supported OBJECT_NAME, OBJECT_DESC)
+ - Added: llSensor / llSensorRepeat / llSensorRemove() / sensor (event)
+ (only simple event trigger, num_detected is always 1)
+ - Fixed: llRequestPermissions is broken
+

+ +

Oct 16 2007 23:29 (local time)

+

+ - Fixed: Old bug on multiple changed scripts saving using Ctrl-S shortcut only saves first script
+ - Fixed: Rename objects do not set object-name correctly
+

+ +

Release 2.21

+ +

Oct 16 2007 13:46 (local time)

+

+ - Changed: Find/Replace window hides when pressing Escape
+ - Changed: Find/Replace window keeps focus
+

+ +

Oct 15 2007 23:10 (local time)

+
+ - Changed: Tools menu, starts at top node
+ - Added: LSLEditor goes unicode
+ menu - tools - options - text editor - general - output format +
    +
  • ANSI (default)
  • +
  • Unicode
  • +
  • Unicode big endian
  • +
  • UTF-8
  • +
+ - Fixed: Save on new.lsl file crashes LSLEditor
+ - Changed: bugreport, Highlight entry in left pane (also when lost focus)
+ - Fixed: bugreport, 'check all / uncheck all' button has wrong initial state
+ - Changed: autocompletion on ll-functions having zero arguments (or single void argument) completes with ')' char
+ - Added: double-clicking on an error message after compile, line in edit window is highlighted
+
+ +

Oct 10 2007 10:59 (local time)

+
+ - Changed: In respect to solution explorer +
    +
  • llGetObjectDesc
  • +
  • llSetObjectDesc
  • +
  • llGetObjectName
  • +
  • llSetObjectName
  • +
+
+ +

Release 2.20

+ +

Oct 09 2007 16:12 (local time)

+

+ - Added: Plugin support
+ - Fixed: llList2Key crash
+

+ +

Oct 08 2007 23:55 (local time)

+

+ - Changed: Opened files in solution explorer are asked to save when closed
+ - Changed: bugreport, files to be included are unchecked by default
+

+ +

Oct 03 2007 19:22 (local time)

+

+ - Added: bool operators on list
+ - Fixed: Multiple 'if' indent (only on autoformat document)
+ - Added: integer operator + and - (overrides internal operators)
+ - Fixed: llParseStringKeepNulls last empty element is not added
+ - Fixed: llListSort on non string items
+ - Fixed: Sometimes scrolling is disabled when moving the cursor
+ - Fixed: Multiline comments on highlighted chars gives colored results
+ - Fixed: llList2XXX functions for negative index
+ - Added: explicit string operator on bool
+

+

Oct 02 2007 18:25 (local time)

+

+ - Added: Menu - Tools - Options - Text editor - warning on different indent scheme (on by default)
+ - Added: Menu - Tools - Options - Text editor - autocorrect indent on file loading (off by default)
+ - Fixed: changing guid on items in solutionexplorer reflects on opened script windows
+ - Changed: Wildcard autocompletion on argument, changed to show only pulldown menu (example llGetInventoryName)
+ - Added: llRot2Fwd / llRot2Up / llRot2Left
+

+ +

Release 2.19

+ +

Oct 01 2007 16:30 (local time)

+

+ - Changed: Make text bold on active tab
+ - Fixed: llUnescapeURL returns UTF8 strings, for example: llOwnerSay(llUnescapeURL("pr%c3%aate"));
+ - Fixed: Syntax errors are on column - 1
+ - Added: Command line option /run starts debugging after loading scripts (if any)
+ - Fixed: Syntax errors on scripts having same name are clickable
+ - Fixed: Copy / Paste gives wrong colors in editor
+

+ +

Sep 29 2007 21:35 (local time)

+

+ - Added: Changing Guid of any item in solution explorer
+ - Changed: manual listen event trigger, channel is combobox
+ (listen filter does only work on normal chat messages, not on manual event trigger)
+ - Added: Ctrl-C copies selected errors to clipboard
+ - Added: Ctrl-A selects all text errors list
+ - Added: Ctrl-A selects all text in debug and simulator console
+ - Added: Line, Column and Char position of cursor (added Column)
+ - Fixed: "There are 0 instances, replace them all?"
+ - Fixed: var names containing 'jump' are wrongly parsed
+ - Fixed: llAttachToAvatar wrong description
+

+ +

Sep 22 2007 19:29 (local time)

+

+ - Fixed: Selection from last line does not work
+

+ +

Release 2.18

+ +

Sep 21 2007 19:09 (local time)

+

+ - Fixed: SaveAs was broken
+ - Fixed: autocompletion on 'default', only when there is no default state
+ - Fixed: state change to same state, acts like a return
+ - Changed: Ctrl-D (format document) keeps cursor on line
+ - Changed: Ctrl-E (format selection) keeps text selected
+ - Added: Tools - Options - Debugging - General - Quoted strings in list output (default = none)
+ - Changed: Major change to the list object (needs testing)
+ - Fixed: Some minor indent bug on outermost braces when typing
+ - Changed: Verbose output gives more readable lists
+ - Fixed: llParseString2List and llParseStringKeepNulls (needs testing)
+

+ +

Sep 19 2007 16:47 (local time)

+

+ - Added: http 'ContentLength' on llHTTPRequest POST requests
+

+ +

Release 2.17

+ +

Sep 19 2007 12:47 (local time)

+

+ - Fixed: Closing LSLEditor saves (all) changed files using its own name, example files (new.lsl) shows dialog
+

+ +

Sep 18 2007 12:47 (local time)

+

+ - Fixed: Labels can have whitespace between @ and label name
+

+ +

Sep 17 2007 14:41 (local time)

+

+ - Added: Tools - Options - Debugging - General - Single Quote char allowed outside strings
+

+ +

Sep 16 2007 14:41 (local time)

+

+ - Fixed: Typing many '}' on same lines, gives weird autoformatting
+ - Fixed: Bracket highlighting when typing braces (curly brackets)
+ - Fixed: Rotation '/' operator
+

+ +

Sep 15 2007 17:45 (local time)

+

+ - Added: Update application supports 'gzip','zip' and 'bzip2'
+ - Changed: Richlabel has some extra right margin
+ - Fixed: 4-Spaces indent was broken on tools menu
+ - Fixed: Annoying scroll when bracket highligthing and code formatting
+ - Fixed: 'If you see this, something is wrong' on state change and llResetScript
+ - Fixed: Die button kills runaway processes like 'while(TRUE);'
+ - Added: Icons for errors and warnings
+ - Added: Compiler generates warnings (can be switched off in menu Tools - Options - Debugging - General)
+

+ +

Sep 14 2007 10:52 (local time)

+

+ - Fixed: llOwnerSay talks only to the owner, preventing possible loops
+

+ +

Sep 13 2007 16:39 (local time)

+

+ - Added: Date/time on printed output
+ - Changed: Case insensitive on ECC
+

+ +

Release 2.16

+ +

Sep 13 2007 12:10 (local time)

+

+ - Added: Experimental Code Completion (ECC) on user defined variable names, menu - tools - options - Text Editor - Code Completion
+ - Changed: Escape toggles on/off autocompletion and tooltips
+

+ +

Sep 12 2007 16:28 (local time)

+

+ - Added: Pagesetup margins on printed documents
+ - Added: header and footer on printed documents
+ - Added: Print selection
+ - Fixed: llList2ListStrided crashed for nonsense (<= 0) strides
+

+ +

Sep 11 2007 17:07 (local time)

+

+ - Added: Ctrl-Del removes whitespace/word
+ - Fixed: llToUpper / llToLower gives wrong hint
+

+ +

Sep 06 2007 13:35 (local time)

+

+ - Fixed: First users see only a small window
+

+ +

Release 2.15

+ +

Sep 03 2007 17:00 (local time)

+

+ - Fixed: Renaming of non scripts and non notecards
+ - Added: Solution Explorer, changing filetype of items
+ - Changed: Solution Explorer, project and inventory paths are saved as a relative path to solution file (if possible)
+ - Changed: Solution Explorer, "Add New File -> Script" , have it use the default.lsl file, same as "new.lsl" when opening.
+ - Fixed: 0xFFFFFFFF parsed as integer
+ - Fixed: capitalization of 'string' and 'float'
+ - Added: PRIM_TYPE_SCULPT constant
+

+ +

Aug 31 2007 12:07 (local time)

+

+ - Fixed: Recent projects menu blocks when dirty script has to be saved
+ - Added: Menu - Tools - Options - Environment - General - delete old files after update
+

+ +

Release 2.14

+ +

Aug 27 2007 12:07 (local time)

+

+ - Fixed: Crash in Renaming files containing illegal chars in Solutionexplorer
+ - Fixed: Find / Replace broken
+ - Fixed: Labels are broken
+

+ +

Aug 24 2007 15:30 (local time)

+

+ - Added: Menu - Project - Add New File , add new file to active Prim in SolutionExplorer (if Any)
+ - Added: Check if solution file already exist when Create new solution
+ - Added: F3 shortcut for 'Find Next'
+ - Fixed: Pressing Ctrl-H twice crashes program
+ - Added: Multiline strings
+ - Fixed: String (capital S) can be used as a var
+ - Added: Explicit string operator on internal integer
+ - Added: File Association for .lsl and .sol files (Menu-Tools)
+

+ +

Aug 23 2007 23:02 (local time)

+

+ - Fixed: Linenumbers incorrect after scrolling
+ - Fixed: default state has not to be on column 0
+ - Fixed: When user clicks 'No' on llRequestPermissions, do trigger run_time_permissions
+ - Fixed: Brackets highlighting now skips comments
+ - Changed: Online Wiki Address can be changed
+ - Changed: Bugreport shows unique number and date/time
+ - Changed: Bugreport uploadservice can handle normal filenames, spaces included ;-)
+ - Added: llGetInventoryType (when using solution explorer)
+ - Changed: Blockcommenting Ctrl-K and Ctrl-L (also on non selected line)
+

+ +

Release 2.13

+ +

Aug 22 2007 17:57 (local time)

+

+ - Fixed: Crash on making default state
+ - Fixed: Linenumbers only appear when scrolling
+ - Fixed: Crash on some debug code, writing to D drive
+ - Fixed: float parsing on lists does Oops...
+ - Added: Experimental wildcard argument completion (for example llListStatistics)
+ - Fixed: Tooltip on codecompletion can not get outside client area
+ - Fixed: Coloring when typing strings
+ - Fixed: indenting fails on strings containing // chars
+

+ +

Aug 21 2007 19:28 (local time)

+

+ - Changed: Reading scripts using default codepage
+ - Added: llListStatistics (needs more testing)
+ - fixed: llCSV2List escapes angle brackets
+

+ +

Aug 20 2007 23:48 (local time)

+

+ - Fixed: Find / Find and Replace window mixes up settings
+ - Fixed: Sending bugreport crashes editor when offline
+

+ +

Aug 18 2007 21:19 (local time)

+

+ - Changed: new Tools Options menu
+ - Fixed: Single quotation char in comment breaks parsing
+

+ +

Aug 17 2007 19:22 (local time)

+

+ - Fixed: Quad and Vector parsing breaks at certain conditions
+ - Fixed: some changes to text do not set dirty flag
+

+ +

Aug 16 2007 23:57 (local time)

+

+ - Fixed: changing state into same state goes into loop
+ - Fixed: llCSV2List is not really inverse to llList2CSV (llCSV2List does not parse rotations and vectors, yet)
+ - Fixed: labels without ';' does not give syntax error
+ - Fixed: jump @label; does not give syntax error
+ - Fixed: floats getting truncated on non-English systems
+ - Changed: Position and Size of editor window are only restored when in workingarea of Primary screen
+ - Fixed: Script error on download HTML Help file
+

+ +

Aug 15 2007 17:51 (local time)

+

+ - Fixed: Don't compile nor syntax check notecards using solution explorer
+ - Added: llInsertString
+ - Fixed: llGiveInventoryList has wrong ref argument (syntax check breaks)
+ - Fixed: Tab and Shift Tab on selected text
+ - Added: Toggle button check / uncheck attached scripts on the bugreport form
+ - Fixed: Argument of event changed(integer change)
+ - Changed: Sending bugreports can be canceled
+ - Changed: implicit float to integer operator to explicit
+

+ +

Release 2.12

+ +

Aug 10 2007 13:13 (local time)

+

+ - Added: LSLEditorHelp offline wiki (Tools - Editor properties)
+ - Changed: Find window keeps search entries
+

+ +

Aug 05 2007 00:30 (local time)

+

+ - Fixed: Cursor position on backspace
+

+ +

Aug 03 2007 16:50 (local time)

+

+ - Added: Ctrl-F (find) uses keyword on cursor position
+ - Added: Ctrl-Up / Ctrl-Down history scrolling on chat box
+ - Fixed: llSetLinkTexture() do not take texture uuids
+ - Fixed: llParseString2List refuse to take keys as strings
+ - Added: Solution Explorer, F2 for rename
+ - Added: default.lsl in LSL-Editor directory will be used as 'new.lsl' template
+ - Fixed: llSetColor tooltip is wrong
+

+ +

Aug 02 2007 23:42 (local time)

+

+ - Added: Smtp Authentication for llEmail (Tools, Runtime Properties, External, Email)
+

+ +

Release 2.11

+ +

Jul 30 2007 16:19 (local time)

+

+ - Added: Home key works also on white-space lines
+ - Fixed: After sending two bugreports, button is disabled
+ - Added: POST method to llHttpRequest (untested)
+

+ +

Jul 28 2007 12:05 (local time)

+

+ - Fixed: Richtext label inserts spaces after color change
+ - Added: Sound support (simple) use llPlaySound and .wav file in solution explorer
+

+ +

Jul 26 2007 13:29 (local time)

+

+ - Added: PageUp and PageDown on intellisense dropdown menu
+ - Fixed: Editor crash when closing project having browser window open
+ - Added: llGetLocalPos()
+

+ +

Release 2.10

+ +

Jul 25 2007 14:30 (local time)

+
+ - Added: Solution Explorer (first look)
+
    +
  • llGetObjectName
  • +
  • llGetScriptName
  • +
  • llGetKey
  • +
  • llGetInventoryName
  • +
  • llGetInventoryKey
  • +
  • llGetInventoryNumber
  • +
  • llGetNumberOfNotecardLines
  • +
  • llGetNotecardLine
  • +
+ - Added: Reset option on Editor properties
+ - Added: mod operator (%) on integer
+
+ +

Jul 24 2007 11:55 (local time)

+

+ - Changed: Recent file list is clipped (showing ...)
+ - Fixed: Syntax error on negative line numbers (?!) breaks editor
+

+ +

Jul 20 2007 10:55 (local time)

+

+ - Added: Checkbox on Edit tab to Disable compile / syntaxcheck
+ - Added: Allow scripts to open by Drag and Drop on LSL-Editor
+ - Fixed: Indent on return when in middle of a line
+ - Added: llGetDate
+ - Fixed: llDie in script does not work, throws an error
+ - Changed: id in llMessageLinked / message_link accepts strings
+

+ +

Jul 19 2007 15:27 (local time)

+

+ - Added: Bugtracker to Menu Help , Bugreport
+ - Changed: Home button toggles between start of line, and first non whitespace
+

+ +

Release 2.9

+ +

Jul 16 2007 11:25 (local time)

+

+ - Changed: Autocompletion images scale on changing fonts
+ - Changed: Tab alignement on changing fonts
+

+ +

Jul 15 2007 23:51 (local time)

+

+ - Added: Editor Properties, Font selector for editor and tooltips
+ - Fixed: Ctrl-X does not have paste
+

+ +

Jul 13 2007 15:20 (local time)

+

+ - Changed: Bugreport name and email adres made sticky
+ - Fixed: Bugreport window looses focus when tooltip shows
+ - Added: Shift-Delete
+ - Fixed: Ctrl-X can not undo
+ - Fixed: Ctrl-Home does not go to line 1, column 1
+ - Fixed: Shift-Home does not appear to select text
+

+ +

Jul 12 2007 12:59 (local time)

+

+ - Fixed: Tooltip shows bold on some High-Resolution machines (David IOU1)
+

+ +

Release 2.8

+ +

Jul 10 2007 08:41 (local time)

+

+ - Fixed: Runtime properties, incorrect key from cache (xor)
+

+ +

Jul 9 2007 14:51 (local time)

+

+ - Added: Editor properties: Auto update frequency
+ - Added: Editor properties: Indent settings
+

+ +

Jul 8 2007 23:59 (local time)

+

+ - Changed: Tooltip font is SystemFonts.MessageBoxFont
+ - Fixed: llRot2Up returns void....
+

+ +

Jul 6 2007 13:13 (local time)

+

+ - Fixed: MD5 checksum on update function breaks
+ - Added: Boundary checks on list functions
+ - Fixed: jump statement gives error (_goto)
+

+ +

Release 2.7

+ +

Jul 4 2007 12:12 (local time)

+

+ - Added: Bitwise Xor operator on integer (^)
+

+ + +

Jul 3 2007 20:56 (local time)

+

+ - Fixed: XML-RPC server not closed when closing LSL-Editor
+

+ +

Jul 2 2007 14:41 (local time)

+

+ - Fixed: Size of Simulator resets to default
+ - Changed: Vector and Rotation parser
+ - Changed: Vector and Rotation fields changed from double to float
+ - Added: Preprocessor processes all internal reserved words
+ - Changed: llDialog / llRequestPermissions / link_message / llMessageLinked uses new TaskQueue
+

+ +

Jul 1 2007 23:55 (local time)

+
+ - Added: Smart indenting on closing parenthesis (experimental)
+ - Revised: (Needs testing!!) +
    +
  • llGetSubString
  • +
  • llDeleteSubString
  • +
  • llList2List
  • +
  • llDeleteSubList
  • +
+ - Added: +
    +
  • llIntegerToBase64
  • +
  • llBase64ToInteger
  • +
  • llStringToBase64
  • +
  • llBase64ToString
  • +
  • llXorBase64StringsCorrect
  • +
+
+ +

Jun 30 2007 11:41 (local time)

+

+ - Fixed: Can't close tabs when in Windows Classic mode
+ - Changed: Internal, state / event has its own TaskQueue (needs testing)
+

+ +

Jun 29 2007 16:38 (local time)

+

+ - Fixed: Integer '~' operator works only on TRUE/FALSE
+ - Added: Syntax checker button F6 (no compile / execute)
+ - Changed: Internal, Simulator / Compiler as usercontrols
+

+ +

Jun 28 2007 12:18 (local time)

+

+ - Added: Ctr-Shft-S to Save as...
+ - Added: AutoUpdate check (daily) / Manual update on Help menu
+ - Added: Double click on compiler error goes to error line / column
+ - Changed: Compiler errors shows on listview
+ - Changed: Tab / Shift Tab , toggles indent block of text
+ - Changed: Home button sets cursor to beginning of line, after whitespace
+

+ +

Release 2.6

+ +

Jun 27 2007 18:20 (local time)

+

+ - Fixed: Editor crashes on error in dataserver script
+ - Changed: synchronized llGetNumberOfNotecardLines / llGetNotecardLine dataserver requests
+

+ +

Jun 26 2007 11:49 (local time)

+

+ - Fixed: llDialog does not talk anymore
+

+ +

Jun 25 2007 21:08 (local time)

+
+ - Fixed: Indent adds tab on lines ending in comment or whitespace
+ - Added: XML-RPC listening base port 50888
+
    +
  • remote_data (event)
  • +
  • llOpenRemoteDataChannel
  • +
  • llCloseRemoteDataChannel
  • +
  • llRemoteDataReply
  • +
  • llSendRemoteData (untested)
  • +
+ - Fixed: Tooltips shows 'lt;' and 'gt;'
+ - Added: Bugreport to Menu Help
+ - Added: llLoadURL
+ - Added: listen callbacks are removed on state change
+ - Added: llListenControl
+
+

Jun 24 2007 13:11 (local time)

+

+ - Added: Print preview
+ - Fixed: Editor only prints 1 page
+ - Added: ReplaceAll
+ - Fixed: Find and Replace issues
+

+

Jun 22 2007 18:59 (local time)

+

+ - Added: The ~ (complement) operator to integer
+ - Fixed: global functions containing whitespace gives compile error
+ - Added: Keep user settings between LSLEditor updates
+ - Added: llGetNumberOfNotecardLines / llGetNotecardLine
+ - Added: Recent files list in the File menu
+

+ +

Jun 21 2007 13:41 (local time)

+

+ - Fixed: Compiles empty documents and/or absent default state
+

+ +

Release 2.5

+ +

Jun 20 2007 22:41 (local time)

+

+ - Fixed: Menu Tools does not work
+ - Added: llStringTrim
+

+ +

Jun 18 2007 14:50 (local time)

+

+ - Fixed: Backspace / Delete issues when brackets highlighted
+

+ +

Jun 14 2007 23:59 (local time)

+

+ - Fixed: Backspace unreliable when brackets highlighted
+ - Changed: Tab-characters have same width as 4 spaces
+ - Changed: auto indent on typing if/else
+ - Changed: format document indent if/else
+ - Fixed: timer stops after state change
+ - Fixed: llList2Integer broken
+ - Added: llMessageLinked / link_message
+ - Fixed: llListReplaceList gives wrong answer
+

+ +

Jun 13 2007 20:21 (local time)

+

+ - Fixed: key problem (breaks listen and more)
+

+ +

Release 2.4

+ +

Jun 13 2007 12:12 (local time)

+

+ - Release 2.4
+

+ +

Jun 12 2007 16:43 (local time)

+

+ - Fixed: llSetTimerEvent broken
+ - Added: Redo
+ - Changed: Linenumbers stops at and-of-document
+ - Fixed: Cursorposition shows on closed tab
+ - Changed: Close button on tab shows on mouse hover
+ - Fixed: Argument typing shows wrong color
+ - Fixed: Slow brackets matching
+ - Fixed: Slow editing large documents / long lines
+

+ +

Jun 11 2007 11:36 (local time)

+

+ - Fixed: Line numbers incorrect after delete all
+ - Fixed: Cursor position does not show on non primary script
+ - Fixed: Undo eats memory
+ - Fixed: Undo slow on large documents
+

+

Jun 09 2007 11:44 (local time)

+
+ - Added: brackets matching
+
    +
  • parentheses or round brackets: ( )
  • +
  • box brackets or square brackets: [ ]
  • +
  • curly brackets or braces: { }
  • +
  • angle brackets or chevrons: < >
  • +
+
+

Jun 08 2007 19:35 (local time)

+

+ - Fixed: Undo after find / replace
+ - Fixed: Undo does nothing
+ - Added: Color scheme for tooltips
+ - Fixed: Missing spaces in tooltips
+ - Fixed: Keyboard hint vertical position changes
+ - Fixed: Mouse Tooltip shows on EOL
+

+ +

Jun 07 2007 13:41 (local time)

+

+ - Added: Find and Replace
+

+ +

Release 2.3

+ +

Jun 06 2007 17:01 (local time)

+

+ - Fixed: Editor does not show on taskbar
+ - Added: bool operators on key
+ + - Added: Operator vector / rotation
+ - Fixed: Save Ctrl-S in debug session
+

+

Jun 05 2007 23:33 (local time)

+

+ - Fixed: A lot of operators
+ - Fixed: llDeleteSubString
+ - Added: Block commenting Ctrl-K Ctrl-L
+ - Fixed: Compiler errors hide internal types
+ - Improved: parsing strings, including escape chars
+ - Changed: No codecompletion nor hints typing within strings
+ - Changed: No codecompletion nor hints typing within comments
+ - Fixed: blind tabs showing again on XP without VisualStyles
+ - Added: Shortcutkeys for formatting
+

+

Jun 04 2007 21:52 (local time)

+

+ - Changed: replaced double by float
+ - Fixed: Parsing long files takes to much time
+ - Fixed: Line-numbers frozen
+ - Fixed: compile error on 'state' between quotes
+ - Fixed: AutoWordSelection problem appears to be an insolvable Microsoft bug, ... i solved it
+ - Added: Showing Line / Character position of cursor on statusbar
+

+

Jun 03 2007 20:54 (local time)

+

+ - Fixed: AutoWordSelection off, and stay off
+ - Fixed: indent whitespace can be a mix of tab and spaces
+ - Added: default / state to autocompletion ;-)
+ - Added: operators + and - for rotation / rotation
+ - Added: operators multiplication of vector / rotation
+ - Added: operators multiplication and division of rotation / rotation
+

+

Jun 02 2007 18:58 (local time)

+

+ - Added: llAxisAngle2Rot
+ - Added: some vector operators
+ - Fixed: codecompletion tooltip disappears when hitting arrow keys
+ - Fixed: blind tabs showing again on XP without VisualStyles
+

+

Jun 01 2007 23:34 (local time)

+

+ - Added: at_target, http_response and remote_data events
+ - Added: Goto form acts on return key
+ - Added: First implementation of llDialog
+ - Fixed: VisualStyleRenderer crash on startup
+ - Fixed: Indent was broken
+ - Added: implicit string operator on key
+ - Added: implicit bool operators to string class
+

+ +

May 31 2007 23:55 (local time)

+

+ - Added: llSleep
+ - Added: Editor Goto Line (Ctrl-G)
+ - Added: Ctrl-F4 closes active window/tab
+ - Added: Editor option Wiki-pages in Seperate browser
+ - Fixed: Linenumber drawing double-buffered in editor
+ - Added: Close button to Tab pages
+ - Fixed: 'Tab' key inserts a tab character or 4-space characters, depending on the Editor-settings
+ - Fixed: timer problem when changing states
+

+ +

May 29 2007 16:41 (local time)

+

+ - Improved: parenthesis indenting old 'C' style accepted
+ - Added Editor options: Auto Word Selection (off by default)
+ - Fixed: Linenumber drawing double-buffered in editor
+ - Added a 'Die' button to the compiler
+ - Added Editor options: SL (ugly) color-scheme / SL 4-spaces indent
+ - Fixed: crash on editing end-of-document
+ - Fixed: void argument on events
+

+ +

May 28 2007 23:34 (local time)

+

+ - Autocompletion including arguments on 'events'
+ - Fixed: incorrect color on pasting text
+ - Fixed: autoformatting on selected text
+ - Fixed: incorrect old argument list on non-functions
+

+ +

May 27 2007 13:15 (local time)

+

+ - llListFindList bug fixed
+ - added comparison operators for list,key,float,integer,vector and rotation
+ - when opening an existing document, the untouched 'new.lsl' example is destroyed
+

+ +

Release 2.2

+ +

May 26 2007 18:00 (local time)

+

+ - Tooltipping / Codecompletion hitting the boundaries of parent window
+

+ +

May 25 2007 11:28 (local time)

+

+ - Explicit cast 'list' implemented for string,integer,key,float,vector and rotation
+

+ +

May 24 2007 19:34 (local time)

+

+ - Compiler error shows correct line numbers
+ - Debug tab only visible when there are no compile errors
+ - Removed C# tab
+ - Small bug fixed, on empty information, when using codecompletion
+ - Codecompletion shows ALL keywords
+ - Shows '*' after filename when document is changed
+

+ +

May 23 2007 21:03 (local time)

+

+ - Compiler starts at Output tab, on error shows C# tab
+ - Tabbed documents!!
+ Thanks to Darek and Marco for their bug reports:
+ - Fixed: Operator '+' is ambiguous on operands of type 'LSLEditor.SecondLife.integer' and 'LSLEditor.SecondLife.integer'
+ - Fixed: Operator '+=' cannot be applied to operands of type 'LSLEditor.SecondLife.list' and 'double'
+ - Fixed: Operator '+=' cannot be applied to operands of type 'LSLEditor.SecondLife.list' and 'LSLEditor.SecondLife.key'
+ - Copy from the debug window enabled
+

+ +

May 22 2007 23:46 (local time)

+

+ - Bug fix on empty key in Sim properties
+ - Show function arguments while typing
+

+ + +

May 16 2007 13:07 (local time)

+

+ - Simulator docks at bottom
+

+ +

Release 2.1

+ +

May 14 2007 22:47 (local time)

+

+ - Release 2.1 (Multiple document interface)
+ - Running multiple LSL scripts concurrent
+ - Chat/listen implementation between LSL scripts
+ - First implementation of a 'find' (Ctrl-F) option
+

+

May 08 2007 16:37 (local time)

+

+ - llListRandomize
+ - llListSort
+ - llListReplaceList (to be tested)
+ - llParseString2List (todo spacers)
+ - llParseStringKeepNulls (todo spacers)
+

+ +

May 07 2007 19:53 (local time)

+

+ - llMD5String implemented + - Implemented a lot of list functions (see examples)
+ - Fixed state bug
+ - llResetScript()
+ - Tooltip improved
+

+ +

May 06 2007 13:03 (local time)

+

+ - Parser improved a lot!!
+

+ +

May 04 2007 17:15 (local time)

+

+ - LSL keywords updated 19 Dec 2006 for LSL 1.13
+

+

May 03 2007 18:49 (local time)

+

+ - Execution is more stable, and useful error reports :-)
+ - Implemented listen filter (llListen / llListenRemove)
+ - some minor bugfixes
+

+

May 02 2007 19:41 (local time)

+

+ - llListFindList implemented
+ - KEY_NULL implemented
+ - key compare
+ - llGetOwnerKey returns key in compiler properties
+ - llToLower / llToUpper
+ - llEuler2Rot / llRot2Euler
+ - Code completion shows function arguments when typing
+ - Cleaned the resource files
+ - Updated a lot more, can't remember ;-)
+

+ +

May 01 2007 13:47 (local time)

+

+ - Manual Chat works, on different channels (listen) +

+

Apr 30 2007 23:57 (local time)

+

+ - Format document (Edit -> Advanced -> Format Document)
+ - llFrand seeding
+ - casting bug fixed (parser)
+ - run_time_permissions event bug fixed
+ - llDialog shows messagebox (no buttons)
+ - Did some testing on "Shippou Oud - Fruit machine"
+ - Import Examples
+ - Timer bug fixed
+ - Al lot of internal base class changes
+

+ +

Apr 29 2007 15:29 (local time)

+

First implementation of linenumbers

+ +

Release 2.0

+ +

Apr 28 2007 14:01 (local time)

+

Changed project to .NET 2.0

+ +

Mar 30 2007 12:54 (local time)

+

- changed wiki adres

+ +

Jan 2007 - Mar 2007

+

- Sabbatical :-), doing nothing....

+ +

Dec 26 2006 12:54 (local time)

+

- first implementation of printing

+

Nov 21 2006 23:22 (local time)

+

- delete key bug fixed

+

Nov 08 2006 00:40 (local time)

+

- got Strife _double back in place
+ - some C# coloring

+

Nov 05 2006 14:54 (local time)

+

- Just some minor updates, lack of time at the moment

+

Oct 29 2006 01:00 (local time)

+

- State change fires state_exit and state_entry
+ - compiler on tabcontrole

+

Oct 28 2006 02:00 (local time)

+

- Float2Hex example compiles (thanx to Strife Onizuka)

+

Oct 27 2006 21:59 (local time)

+

- Global class compiles correctly on vars (static) and user defined + functions (void and non void)

+

Oct 26 2006 01:07 (local time)

+

- code completion, tab/return and contains icons for different types
+ - other type of tooltipping.... not nice.
+ - override & , to make it bool answer...

+

Oct 25 2006 01:46 (local time)

+

- http can use proxy
+ - smtp
+ - properties windows for compiler
+ - integer made out of struct, to override (string) explicit operator

+

Oct 22 2006 21:43 (local time)

+

- first implementation of llHTTPRequest / http_response
+ - made a lot of lists functions
+ - more lists on one line (not lists within lists)

+

Oct 20 2006 21:00 (local time)

+

- State change, shows correct events

+

Oct 20 2006 0:03 (local time)

+

- Implemented (almost) all Math functions
+ - Timer works

+

Oct 19 2006 03:00 (local time)

+

- some edit improvements
+ - states work!!

+

Oct 16 2006 23:50 (local time)

+

- Improvement parsing script, vector,rotation, simple list (one line)
+ - Global vars, wrapped in global class
+ - Checkupdate function in the program
+ - First attempt multiple state (only default state executes, have patients + my friends...)

+

Oct 14 2006 18:36 (local time)

+

- User argument input for events like touch_start (see picture above)

+

Oct 8, 2006 18:36 (local time)

+

- Code highlighting
+ - Code completion
+ - Code info, took the old LSLguide, and used Appendix, i can do better i + know
+ - F1 , on a keyword, does show up the LSLWiki page on the keyword
+ - Compile, the hello world example should work on state_entry event
+ - Open/Save and edit lsl script files

+

Oct 2, 2006 (local time)

+ +

Release 1.0

+ +

First idea and prototype

+ +

Oct 1, 2006 (local time)

+ +
+ + diff --git a/trunk/Resource/ToolsOptions.xml b/source/Resource/ToolsOptions.xml similarity index 97% rename from trunk/Resource/ToolsOptions.xml rename to source/Resource/ToolsOptions.xml index 2b12553..b06ee17 100644 --- a/trunk/Resource/ToolsOptions.xml +++ b/source/Resource/ToolsOptions.xml @@ -1,31 +1,31 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/Resource/app.config b/source/Resource/app.config similarity index 97% rename from trunk/Resource/app.config rename to source/Resource/app.config index e477526..13ad350 100644 --- a/trunk/Resource/app.config +++ b/source/Resource/app.config @@ -1,144 +1,144 @@ - - - - - -
- - -
- - - - - - - http://www.lsleditor.org/UploadExampleService/Service1.asmx - - - - - // LSL-Editor by Alphons (Jano) van der Heijden - default - { - state_entry() - { - llSay(0, "Hello, Avatar!"); - } - touch_start(integer total_number) - { - llSay(0, "Touched: "+(string)total_number); - } - } - - - - - http://www.lslwiki.net/lslwiki/wakka.php?wakka= - - - - - http://lsleditor.sourceforge.net/check4update.php? - - - - - http://www.lsleditor.org/examples/ - - - - - http://www.lsleditor.org/uploadscript/ - - - - Resource.ConfLSL.xml - - - - Resource.ConfCSharp.xml - - - - 25 - - - new.lsl - - - - res://LSLEditor.exe/ReleaseNotes.htm - - - - - - - - SecondLife Name - - - 2.0.1 - - - False - - - - - - LSLEditor Island - - - smtp.emailserver.ext - - - - youraddress@yourdomain.ext - - - - - - - - - - - - - 0, 0 - - - 0, 0 - - - 0, 0 - - - 0, 0 - - - 0, 0 - - - 25 - - - 0, 100 - - - 0, 0 - - - 254464, 255232 - - - - http://metaversegames.net/questions/lsl - - - - + + + + + +
+ + +
+ + + + + + + http://www.lsleditor.org/UploadExampleService/Service1.asmx + + + + + // LSL-Editor by Alphons (Jano) van der Heijden + default + { + state_entry() + { + llSay(0, "Hello, Avatar!"); + } + touch_start(integer total_number) + { + llSay(0, "Touched: "+(string)total_number); + } + } + + + + + http://www.lslwiki.net/lslwiki/wakka.php?wakka= + + + + + http://lsleditor.sourceforge.net/check4update.php? + + + + + http://www.lsleditor.org/examples/ + + + + + http://www.lsleditor.org/uploadscript/ + + + + Resource.ConfLSL.xml + + + + Resource.ConfCSharp.xml + + + + 25 + + + new.lsl + + + + res://LSLEditor.exe/ReleaseNotes.htm + + + + + + + + SecondLife Name + + + 2.0.1 + + + False + + + + + + LSLEditor Island + + + smtp.emailserver.ext + + + + youraddress@yourdomain.ext + + + + + + + + + + + + + 0, 0 + + + 0, 0 + + + 0, 0 + + + 0, 0 + + + 0, 0 + + + 25 + + + 0, 100 + + + 0, 0 + + + 254464, 255232 + + + + http://metaversegames.net/questions/lsl + + + + \ No newline at end of file diff --git a/trunk/Resource/thanks.gif b/source/Resource/thanks.gif similarity index 100% rename from trunk/Resource/thanks.gif rename to source/Resource/thanks.gif diff --git a/trunk/Resources/export_file-32.png b/source/Resources/export_file-32.png similarity index 100% rename from trunk/Resources/export_file-32.png rename to source/Resources/export_file-32.png diff --git a/trunk/RuntimeConsole.Designer.cs b/source/RuntimeConsole.Designer.cs similarity index 97% rename from trunk/RuntimeConsole.Designer.cs rename to source/RuntimeConsole.Designer.cs index 65bbad9..f2e29b2 100644 --- a/trunk/RuntimeConsole.Designer.cs +++ b/source/RuntimeConsole.Designer.cs @@ -1,228 +1,228 @@ -namespace LSLEditor -{ - partial class RuntimeConsole - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing) - { - if (this.SecondLifeHost != null) - { - this.SecondLifeHost.Dispose(); - this.SecondLifeHost = null; - } - if ((components != null)) - { - components.Dispose(); - } - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.panel1 = new System.Windows.Forms.Panel(); - this.panel4 = new System.Windows.Forms.Panel(); - this.panel3 = new System.Windows.Forms.Panel(); - this.button1 = new System.Windows.Forms.Button(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.comboBox1 = new System.Windows.Forms.ComboBox(); - this.panel2 = new System.Windows.Forms.Panel(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.selectAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.clearToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.panel1.SuspendLayout(); - this.panel3.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.panel2.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.contextMenuStrip1.SuspendLayout(); - this.SuspendLayout(); - // - // panel1 - // - this.panel1.Controls.Add(this.panel4); - this.panel1.Controls.Add(this.panel3); - this.panel1.Dock = System.Windows.Forms.DockStyle.Right; - this.panel1.Location = new System.Drawing.Point(294, 0); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(205, 300); - this.panel1.TabIndex = 0; - // - // panel4 - // - this.panel4.AutoScroll = true; - this.panel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel4.Location = new System.Drawing.Point(0, 64); - this.panel4.Name = "panel4"; - this.panel4.Size = new System.Drawing.Size(205, 236); - this.panel4.TabIndex = 1; - // - // panel3 - // - this.panel3.Controls.Add(this.button1); - this.panel3.Controls.Add(this.groupBox1); - this.panel3.Dock = System.Windows.Forms.DockStyle.Top; - this.panel3.Location = new System.Drawing.Point(0, 0); - this.panel3.Name = "panel3"; - this.panel3.Size = new System.Drawing.Size(205, 64); - this.panel3.TabIndex = 0; - // - // button1 - // - this.button1.Location = new System.Drawing.Point(168, 24); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(32, 23); - this.button1.TabIndex = 1; - this.button1.Text = "Die"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.comboBox1); - this.groupBox1.Location = new System.Drawing.Point(8, 8); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(152, 48); - this.groupBox1.TabIndex = 0; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "state"; - // - // comboBox1 - // - this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBox1.FormattingEnabled = true; - this.comboBox1.Location = new System.Drawing.Point(8, 16); - this.comboBox1.Name = "comboBox1"; - this.comboBox1.Size = new System.Drawing.Size(136, 21); - this.comboBox1.TabIndex = 0; - this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged); - // - // panel2 - // - this.panel2.Controls.Add(this.groupBox2); - this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel2.Location = new System.Drawing.Point(0, 0); - this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(294, 300); - this.panel2.TabIndex = 1; - // - // groupBox2 - // - this.groupBox2.Controls.Add(this.textBox2); - this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox2.Location = new System.Drawing.Point(0, 0); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(294, 300); - this.groupBox2.TabIndex = 0; - this.groupBox2.TabStop = false; - this.groupBox2.Text = "Verbose"; - // - // textBox2 - // - this.textBox2.AcceptsReturn = true; - this.textBox2.AcceptsTab = true; - this.textBox2.ContextMenuStrip = this.contextMenuStrip1; - this.textBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox2.Location = new System.Drawing.Point(3, 16); - this.textBox2.Multiline = true; - this.textBox2.Name = "textBox2"; - this.textBox2.ReadOnly = true; - this.textBox2.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.textBox2.Size = new System.Drawing.Size(288, 281); - this.textBox2.TabIndex = 0; - this.textBox2.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox2_KeyDown); - // - // contextMenuStrip1 - // - this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.copyToolStripMenuItem, - this.selectAllToolStripMenuItem, - this.toolStripSeparator1, - this.clearToolStripMenuItem}); - this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(153, 98); - // - // selectAllToolStripMenuItem - // - this.selectAllToolStripMenuItem.Name = "selectAllToolStripMenuItem"; - this.selectAllToolStripMenuItem.Size = new System.Drawing.Size(176, 22); - this.selectAllToolStripMenuItem.Text = "Select All"; - this.selectAllToolStripMenuItem.Click += new System.EventHandler(this.selectAllToolStripMenuItem_Click); - // - // copyToolStripMenuItem - // - this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; - this.copyToolStripMenuItem.Size = new System.Drawing.Size(152, 22); - this.copyToolStripMenuItem.Text = "Copy"; - this.copyToolStripMenuItem.Click += new System.EventHandler(this.copyToolStripMenuItem_Click); - // - // toolStripSeparator1 - // - this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(149, 6); - // - // clearToolStripMenuItem - // - this.clearToolStripMenuItem.Name = "clearToolStripMenuItem"; - this.clearToolStripMenuItem.Size = new System.Drawing.Size(152, 22); - this.clearToolStripMenuItem.Text = "Clear"; - this.clearToolStripMenuItem.Click += new System.EventHandler(this.clearToolStripMenuItem_Click); - // - // RuntimeConsole - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.panel2); - this.Controls.Add(this.panel1); - this.Name = "RuntimeConsole"; - this.Size = new System.Drawing.Size(499, 300); - this.panel1.ResumeLayout(false); - this.panel3.ResumeLayout(false); - this.groupBox1.ResumeLayout(false); - this.panel2.ResumeLayout(false); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - this.contextMenuStrip1.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.Panel panel3; - private System.Windows.Forms.Panel panel4; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.ComboBox comboBox1; - private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; - private System.Windows.Forms.ToolStripMenuItem selectAllToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - private System.Windows.Forms.ToolStripMenuItem clearToolStripMenuItem; - } -} +namespace LSLEditor +{ + partial class RuntimeConsole + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (this.SecondLifeHost != null) + { + this.SecondLifeHost.Dispose(); + this.SecondLifeHost = null; + } + if ((components != null)) + { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel4 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.button1 = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.panel2 = new System.Windows.Forms.Panel(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.selectAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.clearToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.panel1.SuspendLayout(); + this.panel3.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.panel2.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.contextMenuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Controls.Add(this.panel4); + this.panel1.Controls.Add(this.panel3); + this.panel1.Dock = System.Windows.Forms.DockStyle.Right; + this.panel1.Location = new System.Drawing.Point(294, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(205, 300); + this.panel1.TabIndex = 0; + // + // panel4 + // + this.panel4.AutoScroll = true; + this.panel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel4.Location = new System.Drawing.Point(0, 64); + this.panel4.Name = "panel4"; + this.panel4.Size = new System.Drawing.Size(205, 236); + this.panel4.TabIndex = 1; + // + // panel3 + // + this.panel3.Controls.Add(this.button1); + this.panel3.Controls.Add(this.groupBox1); + this.panel3.Dock = System.Windows.Forms.DockStyle.Top; + this.panel3.Location = new System.Drawing.Point(0, 0); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(205, 64); + this.panel3.TabIndex = 0; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(168, 24); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(32, 23); + this.button1.TabIndex = 1; + this.button1.Text = "Die"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.comboBox1); + this.groupBox1.Location = new System.Drawing.Point(8, 8); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(152, 48); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "state"; + // + // comboBox1 + // + this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Location = new System.Drawing.Point(8, 16); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(136, 21); + this.comboBox1.TabIndex = 0; + this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged); + // + // panel2 + // + this.panel2.Controls.Add(this.groupBox2); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(294, 300); + this.panel2.TabIndex = 1; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.textBox2); + this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox2.Location = new System.Drawing.Point(0, 0); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(294, 300); + this.groupBox2.TabIndex = 0; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Verbose"; + // + // textBox2 + // + this.textBox2.AcceptsReturn = true; + this.textBox2.AcceptsTab = true; + this.textBox2.ContextMenuStrip = this.contextMenuStrip1; + this.textBox2.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox2.Location = new System.Drawing.Point(3, 16); + this.textBox2.Multiline = true; + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBox2.Size = new System.Drawing.Size(288, 281); + this.textBox2.TabIndex = 0; + this.textBox2.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox2_KeyDown); + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.copyToolStripMenuItem, + this.selectAllToolStripMenuItem, + this.toolStripSeparator1, + this.clearToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(153, 98); + // + // selectAllToolStripMenuItem + // + this.selectAllToolStripMenuItem.Name = "selectAllToolStripMenuItem"; + this.selectAllToolStripMenuItem.Size = new System.Drawing.Size(176, 22); + this.selectAllToolStripMenuItem.Text = "Select All"; + this.selectAllToolStripMenuItem.Click += new System.EventHandler(this.selectAllToolStripMenuItem_Click); + // + // copyToolStripMenuItem + // + this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; + this.copyToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.copyToolStripMenuItem.Text = "Copy"; + this.copyToolStripMenuItem.Click += new System.EventHandler(this.copyToolStripMenuItem_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(149, 6); + // + // clearToolStripMenuItem + // + this.clearToolStripMenuItem.Name = "clearToolStripMenuItem"; + this.clearToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.clearToolStripMenuItem.Text = "Clear"; + this.clearToolStripMenuItem.Click += new System.EventHandler(this.clearToolStripMenuItem_Click); + // + // RuntimeConsole + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.panel2); + this.Controls.Add(this.panel1); + this.Name = "RuntimeConsole"; + this.Size = new System.Drawing.Size(499, 300); + this.panel1.ResumeLayout(false); + this.panel3.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.contextMenuStrip1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Panel panel4; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem selectAllToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem clearToolStripMenuItem; + } +} diff --git a/trunk/RuntimeConsole.cs b/source/RuntimeConsole.cs similarity index 96% rename from trunk/RuntimeConsole.cs rename to source/RuntimeConsole.cs index a27f5aa..4f57508 100644 --- a/trunk/RuntimeConsole.cs +++ b/source/RuntimeConsole.cs @@ -1,421 +1,421 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.IO; -using System.Xml; -using System.Text; -using System.Drawing; -using System.Reflection; -using System.Windows.Forms; - -using System.Threading; -using LSLEditor.Helpers; - -namespace LSLEditor -{ - public partial class RuntimeConsole : UserControl - { - private LSLEditorForm mainForm; - - public RuntimeConsole(LSLEditorForm mainForm) - { - InitializeComponent(); - this.mainForm = mainForm; - this.Dock = DockStyle.Fill; - } - - private Thread ResetScriptWatcher; - private AutoResetEvent ResetScriptEvent; - public SecondLifeHost SecondLifeHost; - - private string CSharpCode; - private EditForm editForm; - - private bool GetNewHost() - { - bool blnResult = false; - Assembly assembly = null; - assembly = CompilerHelper.CompileCSharp(editForm, CSharpCode); - - if (assembly != null) { - if (SecondLifeHost != null) { - SecondLifeHost.Dispose(); - } - SecondLifeHost = null; - - SecondLifeHost = new SecondLifeHost(this.mainForm, assembly, editForm.FullPathName, editForm.guid); - SecondLifeHost.OnChat += editForm.ChatHandler; - SecondLifeHost.OnMessageLinked += editForm.MessageLinkedHandler; - SecondLifeHost.OnDie += new EventHandler(host_OnDie); - SecondLifeHost.OnReset += new EventHandler(SecondLifeHost_OnReset); - SecondLifeHost.OnListenChannelsChanged += new EventHandler(SecondLifeHost_OnListenChannelsChanged); - - SecondLifeHost.OnVerboseMessage += new SecondLifeHost.SecondLifeHostMessageHandler(host_OnVerboseMessage); - SecondLifeHost.OnStateChange += new SecondLifeHost.SecondLifeHostMessageHandler(host_OnStateChange); - - SecondLifeHost.State("default", true); - - blnResult = true; - } - return blnResult; - } - - /// - /// Converts this script (when it's LSLI) to expanded lsl and writes it. - /// - /// - private string ConvertLSLI() - { - LSLIConverter lsliConverter = new LSLIConverter(); - string lsl = lsliConverter.ExpandToLSL(editForm); - string nameExpanded = LSLIPathHelper.CreateExpandedScriptName(editForm.FullPathName); - string path = LSLIPathHelper.CreateExpandedPathAndScriptName(editForm.FullPathName); - - LSLIPathHelper.DeleteFile(path); - - using (StreamWriter sw = new StreamWriter(path)) - { - sw.Write(lsl); - } - - LSLIPathHelper.HideFile(path); - return lsl; - } - - public bool Compile(EditForm editForm) - { - this.editForm = editForm; - - ResetScriptEvent = new AutoResetEvent(false); - ResetScriptWatcher = new Thread(new ThreadStart(ResetScriptWatch)); - ResetScriptWatcher.Name = "ResetScriptWatch"; - ResetScriptWatcher.IsBackground = true; - ResetScriptWatcher.Start(); - - string lsl = editForm.SourceCode; - - // If not hidden and not readonly - if (!editForm.IsHidden && !this.mainForm.IsReadOnly(editForm)) - { - if (LSLIPathHelper.IsLSLI(editForm.ScriptName)) // Expand LSLI to LSL - { - lsl = ConvertLSLI(); - } - } else - { - this.editForm.StopCompiler(); - return false; - } - - CSharpCode = MakeSharp(editForm.ConfLSL, lsl); - - return GetNewHost(); - } - - private void SecondLifeHost_OnReset(object sender, EventArgs e) - { - this.ResetScriptEvent.Set(); - } - - private void ResetScriptWatch() - { - while (true) { - this.ResetScriptEvent.WaitOne(); - - SecondLifeHost.Dispose(); - GetNewHost(); - } - } - - private delegate void AddListenChannelsDelegate(ComboBox comboBox, string[] channels); - private void AddListenChannelsToComboxBox(ComboBox comboBox, string[] channels) - { - if (comboBox.InvokeRequired) { - comboBox.Invoke(new AddListenChannelsDelegate(AddListenChannelsToComboxBox), - new object[] { comboBox, channels }); - } else { - comboBox.Items.Clear(); - comboBox.Items.AddRange(channels); - comboBox.SelectedIndex = 0; - } - } - private void SecondLifeHost_OnListenChannelsChanged(object sender, EventArgs e) - { - foreach (Control control in this.panel4.Controls) { - GroupboxEvent gbe = control as GroupboxEvent; - if (gbe == null) { - continue; - } - foreach (Control control1 in gbe.Controls) { - GroupBox gb = control1 as GroupBox; - if (gb == null) { - continue; - } - if (gb.Name != "listen_0") { - continue; - } - ComboBox comboBox = gb.Controls[0] as ComboBox; - AddListenChannelsToComboxBox(comboBox, SecondLifeHost.GetListenChannels()); - } - } - } - - void host_OnDie(object sender, EventArgs e) - { - if (this.panel1.InvokeRequired) { - // using Evenhandler definition as a delegate - this.panel1.Invoke(new EventHandler(host_OnDie)); - } else { - this.panel1.Enabled = false; - } - } - - private void host_OnStateChange(object sender, SecondLifeHostEventArgs e) - { - ShowLifeEvents(); - SetStateCombobox(e.Message); - } - - private delegate void SetStateComboboxDelegate(string strName); - public void SetStateCombobox(string strName) - { - if (this.comboBox1.InvokeRequired) { - this.comboBox1.Invoke(new SetStateComboboxDelegate(SetStateCombobox), new object[] { strName }); - } else { - for (int intI = 0; intI < this.comboBox1.Items.Count; intI++) { - if (this.comboBox1.Items[intI].ToString() == strName) { - this.comboBox1.SelectedIndex = intI; - break; - } - } - } - } - - private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e) - { - if (SecondLifeHost != null) { - string strStateName = (string)this.comboBox1.Items[this.comboBox1.SelectedIndex]; - if (strStateName != "") { - if (SecondLifeHost.CurrentStateName != strStateName) { - SecondLifeHost.State(strStateName, true); - } - } - } - } - - private void host_OnVerboseMessage(object sender, SecondLifeHostEventArgs e) - { - VerboseConsole(e.Message); - } - - private string MakeSharp(XmlDocument xml, string strC) - { - this.comboBox1.Items.Clear(); - this.comboBox1.Items.Add(""); - this.comboBox1.SelectedIndex = 0; - - // xml is needed for making events buttons - LSL2CSharp translator = new LSL2CSharp(xml); - - strC = translator.Parse(strC); - - foreach (string strState in translator.States) { - this.comboBox1.Items.Add(strState); - } - return strC; - } - - private delegate void ShowLifeEventsDelegate(); - private void ShowLifeEvents() - { - if (this.panel4.InvokeRequired) { - this.panel4.Invoke(new ShowLifeEventsDelegate(ShowLifeEvents), null); - } else { - int intX = 8; - int intY = 0; - - this.panel4.Controls.Clear(); - foreach (string strEventName in SecondLifeHost.GetEvents()) { - string strArgs = SecondLifeHost.GetArgumentsFromMethod(strEventName); - GroupboxEvent ge = new GroupboxEvent(new Point(intX, intY), strEventName, strArgs, new System.EventHandler(this.buttonEvent_Click)); - this.panel4.Controls.Add(ge); - intY += ge.Height; - } - } - } - - private delegate void AppendTextDelegate(string strLine); - - // Verbose - public void VerboseConsole(string strLine) - { - if (!this.textBox2.IsDisposed) { - if (this.textBox2.InvokeRequired) { - this.textBox2.Invoke(new AppendTextDelegate(VerboseConsole), new object[] { strLine }); - } else { - this.textBox2.AppendText(strLine.Replace("\n", "\r\n") + "\r\n"); - } - } - } - - private string GetArgumentValue(string strName) - { - foreach (Control parent in this.panel4.Controls) { - if (parent.Name == "GroupboxTextbox") { - foreach (Control c in parent.Controls) { - if (c.Name == strName) { - return c.Controls[0].Text; - } - } - } - } - return ""; - } - - private object[] GetArguments(string strName, string strArgs) - { - object[] objResult = new object[0]; - if (strArgs != "") { - try { - string[] args = strArgs.Trim().Split(new char[] { ',' }); - object[] argobjects = new object[args.Length]; - for (int intI = 0; intI < argobjects.Length; intI++) { - string[] argument = args[intI].Trim().Split(new char[] { ' ' }); - if (argument.Length == 2) { - string[] arArgs; - string strArgumentValue = GetArgumentValue(strName + "_" + intI); - string strArgumentName = argument[1]; - string strArgumentType = argument[0]; - switch (strArgumentType) { - case "System.String": - argobjects[intI] = strArgumentValue; - break; - case "System.Int32": - argobjects[intI] = int.Parse(strArgumentValue); - break; - case "LSLEditor.SecondLife+Float": - argobjects[intI] = new SecondLife.Float(strArgumentValue); - break; - case "LSLEditor.SecondLife+integer": - argobjects[intI] = new SecondLife.integer(int.Parse(strArgumentValue)); - break; - case "LSLEditor.SecondLife+String": - argobjects[intI] = new SecondLife.String(strArgumentValue); - break; - case "LSLEditor.SecondLife+key": - argobjects[intI] = new SecondLife.key(strArgumentValue); - break; - case "LSLEditor.SecondLife+list": - argobjects[intI] = new SecondLife.list(new string[] { strArgumentValue }); - break; - case "LSLEditor.SecondLife+rotation": - arArgs = strArgumentValue.Replace("<", "").Replace(">", "").Replace(" ", "").Split(new char[] { ',' }); - argobjects[intI] = new SecondLife.rotation(double.Parse(arArgs[0]), double.Parse(arArgs[1]), double.Parse(arArgs[2]), double.Parse(arArgs[3])); - break; - case "LSLEditor.SecondLife+vector": - arArgs = strArgumentValue.Replace("<", "").Replace(">", "").Replace(" ", "").Split(new char[] { ',' }); - argobjects[intI] = new SecondLife.vector(double.Parse(arArgs[0]), double.Parse(arArgs[1]), double.Parse(arArgs[2])); - break; - default: - MessageBox.Show("Compiler->GetArguments->[" + strArgumentType + "][" + strArgumentName + "]"); - argobjects[intI] = null; - break; - } - } else { - MessageBox.Show("Argument must be 'type name' [" + args[intI] + "]"); - break; - } - } - objResult = argobjects; - } catch { } - } - return objResult; - } - - private void buttonEvent_Click(object sender, System.EventArgs e) - { - Button button = (Button)sender; - string strName = button.Text; - string strArgs = SecondLifeHost.GetArgumentsFromMethod(strName); - object[] args = GetArguments(strName, strArgs); - //SecondLifeHost.VerboseEvent(strName, args); - SecondLifeHost.ExecuteSecondLife(strName, args); - } - - private void Die() - { - if (this.SecondLifeHost != null) { - this.SecondLifeHost.Die(); - } - } - - // Die - private void button1_Click(object sender, EventArgs e) - { - Die(); - } - - private void textBox2_KeyDown(object sender, KeyEventArgs e) - { - if (e.Control && e.KeyCode == Keys.A) { - this.textBox2.SelectAll(); - } - } - - private void selectAllToolStripMenuItem_Click(object sender, EventArgs e) - { - this.textBox2.Focus(); - this.textBox2.SelectAll(); - } - - private void copyToolStripMenuItem_Click(object sender, EventArgs e) - { - this.textBox2.Focus(); - this.textBox2.Copy(); - } - - private void clearToolStripMenuItem_Click(object sender, EventArgs e) - { - this.textBox2.Focus(); - this.textBox2.Clear(); - } - - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.IO; +using System.Xml; +using System.Text; +using System.Drawing; +using System.Reflection; +using System.Windows.Forms; + +using System.Threading; +using LSLEditor.Helpers; + +namespace LSLEditor +{ + public partial class RuntimeConsole : UserControl + { + private LSLEditorForm mainForm; + + public RuntimeConsole(LSLEditorForm mainForm) + { + InitializeComponent(); + this.mainForm = mainForm; + this.Dock = DockStyle.Fill; + } + + private Thread ResetScriptWatcher; + private AutoResetEvent ResetScriptEvent; + public SecondLifeHost SecondLifeHost; + + private string CSharpCode; + private EditForm editForm; + + private bool GetNewHost() + { + bool blnResult = false; + Assembly assembly = null; + assembly = CompilerHelper.CompileCSharp(editForm, CSharpCode); + + if (assembly != null) { + if (SecondLifeHost != null) { + SecondLifeHost.Dispose(); + } + SecondLifeHost = null; + + SecondLifeHost = new SecondLifeHost(this.mainForm, assembly, editForm.FullPathName, editForm.guid); + SecondLifeHost.OnChat += editForm.ChatHandler; + SecondLifeHost.OnMessageLinked += editForm.MessageLinkedHandler; + SecondLifeHost.OnDie += new EventHandler(host_OnDie); + SecondLifeHost.OnReset += new EventHandler(SecondLifeHost_OnReset); + SecondLifeHost.OnListenChannelsChanged += new EventHandler(SecondLifeHost_OnListenChannelsChanged); + + SecondLifeHost.OnVerboseMessage += new SecondLifeHost.SecondLifeHostMessageHandler(host_OnVerboseMessage); + SecondLifeHost.OnStateChange += new SecondLifeHost.SecondLifeHostMessageHandler(host_OnStateChange); + + SecondLifeHost.State("default", true); + + blnResult = true; + } + return blnResult; + } + + /// + /// Converts this script (when it's LSLI) to expanded lsl and writes it. + /// + /// + private string ConvertLSLI() + { + LSLIConverter lsliConverter = new LSLIConverter(); + string lsl = lsliConverter.ExpandToLSL(editForm); + string nameExpanded = LSLIPathHelper.CreateExpandedScriptName(editForm.FullPathName); + string path = LSLIPathHelper.CreateExpandedPathAndScriptName(editForm.FullPathName); + + LSLIPathHelper.DeleteFile(path); + + using (StreamWriter sw = new StreamWriter(path)) + { + sw.Write(lsl); + } + + LSLIPathHelper.HideFile(path); + return lsl; + } + + public bool Compile(EditForm editForm) + { + this.editForm = editForm; + + ResetScriptEvent = new AutoResetEvent(false); + ResetScriptWatcher = new Thread(new ThreadStart(ResetScriptWatch)); + ResetScriptWatcher.Name = "ResetScriptWatch"; + ResetScriptWatcher.IsBackground = true; + ResetScriptWatcher.Start(); + + string lsl = editForm.SourceCode; + + // If not hidden and not readonly + if (!editForm.IsHidden && !this.mainForm.IsReadOnly(editForm)) + { + if (LSLIPathHelper.IsLSLI(editForm.ScriptName)) // Expand LSLI to LSL + { + lsl = ConvertLSLI(); + } + } else + { + this.editForm.StopCompiler(); + return false; + } + + CSharpCode = MakeSharp(editForm.ConfLSL, lsl); + + return GetNewHost(); + } + + private void SecondLifeHost_OnReset(object sender, EventArgs e) + { + this.ResetScriptEvent.Set(); + } + + private void ResetScriptWatch() + { + while (true) { + this.ResetScriptEvent.WaitOne(); + + SecondLifeHost.Dispose(); + GetNewHost(); + } + } + + private delegate void AddListenChannelsDelegate(ComboBox comboBox, string[] channels); + private void AddListenChannelsToComboxBox(ComboBox comboBox, string[] channels) + { + if (comboBox.InvokeRequired) { + comboBox.Invoke(new AddListenChannelsDelegate(AddListenChannelsToComboxBox), + new object[] { comboBox, channels }); + } else { + comboBox.Items.Clear(); + comboBox.Items.AddRange(channels); + comboBox.SelectedIndex = 0; + } + } + private void SecondLifeHost_OnListenChannelsChanged(object sender, EventArgs e) + { + foreach (Control control in this.panel4.Controls) { + GroupboxEvent gbe = control as GroupboxEvent; + if (gbe == null) { + continue; + } + foreach (Control control1 in gbe.Controls) { + GroupBox gb = control1 as GroupBox; + if (gb == null) { + continue; + } + if (gb.Name != "listen_0") { + continue; + } + ComboBox comboBox = gb.Controls[0] as ComboBox; + AddListenChannelsToComboxBox(comboBox, SecondLifeHost.GetListenChannels()); + } + } + } + + void host_OnDie(object sender, EventArgs e) + { + if (this.panel1.InvokeRequired) { + // using Evenhandler definition as a delegate + this.panel1.Invoke(new EventHandler(host_OnDie)); + } else { + this.panel1.Enabled = false; + } + } + + private void host_OnStateChange(object sender, SecondLifeHostEventArgs e) + { + ShowLifeEvents(); + SetStateCombobox(e.Message); + } + + private delegate void SetStateComboboxDelegate(string strName); + public void SetStateCombobox(string strName) + { + if (this.comboBox1.InvokeRequired) { + this.comboBox1.Invoke(new SetStateComboboxDelegate(SetStateCombobox), new object[] { strName }); + } else { + for (int intI = 0; intI < this.comboBox1.Items.Count; intI++) { + if (this.comboBox1.Items[intI].ToString() == strName) { + this.comboBox1.SelectedIndex = intI; + break; + } + } + } + } + + private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e) + { + if (SecondLifeHost != null) { + string strStateName = (string)this.comboBox1.Items[this.comboBox1.SelectedIndex]; + if (strStateName != "") { + if (SecondLifeHost.CurrentStateName != strStateName) { + SecondLifeHost.State(strStateName, true); + } + } + } + } + + private void host_OnVerboseMessage(object sender, SecondLifeHostEventArgs e) + { + VerboseConsole(e.Message); + } + + private string MakeSharp(XmlDocument xml, string strC) + { + this.comboBox1.Items.Clear(); + this.comboBox1.Items.Add(""); + this.comboBox1.SelectedIndex = 0; + + // xml is needed for making events buttons + LSL2CSharp translator = new LSL2CSharp(xml); + + strC = translator.Parse(strC); + + foreach (string strState in translator.States) { + this.comboBox1.Items.Add(strState); + } + return strC; + } + + private delegate void ShowLifeEventsDelegate(); + private void ShowLifeEvents() + { + if (this.panel4.InvokeRequired) { + this.panel4.Invoke(new ShowLifeEventsDelegate(ShowLifeEvents), null); + } else { + int intX = 8; + int intY = 0; + + this.panel4.Controls.Clear(); + foreach (string strEventName in SecondLifeHost.GetEvents()) { + string strArgs = SecondLifeHost.GetArgumentsFromMethod(strEventName); + GroupboxEvent ge = new GroupboxEvent(new Point(intX, intY), strEventName, strArgs, new System.EventHandler(this.buttonEvent_Click)); + this.panel4.Controls.Add(ge); + intY += ge.Height; + } + } + } + + private delegate void AppendTextDelegate(string strLine); + + // Verbose + public void VerboseConsole(string strLine) + { + if (!this.textBox2.IsDisposed) { + if (this.textBox2.InvokeRequired) { + this.textBox2.Invoke(new AppendTextDelegate(VerboseConsole), new object[] { strLine }); + } else { + this.textBox2.AppendText(strLine.Replace("\n", "\r\n") + "\r\n"); + } + } + } + + private string GetArgumentValue(string strName) + { + foreach (Control parent in this.panel4.Controls) { + if (parent.Name == "GroupboxTextbox") { + foreach (Control c in parent.Controls) { + if (c.Name == strName) { + return c.Controls[0].Text; + } + } + } + } + return ""; + } + + private object[] GetArguments(string strName, string strArgs) + { + object[] objResult = new object[0]; + if (strArgs != "") { + try { + string[] args = strArgs.Trim().Split(new char[] { ',' }); + object[] argobjects = new object[args.Length]; + for (int intI = 0; intI < argobjects.Length; intI++) { + string[] argument = args[intI].Trim().Split(new char[] { ' ' }); + if (argument.Length == 2) { + string[] arArgs; + string strArgumentValue = GetArgumentValue(strName + "_" + intI); + string strArgumentName = argument[1]; + string strArgumentType = argument[0]; + switch (strArgumentType) { + case "System.String": + argobjects[intI] = strArgumentValue; + break; + case "System.Int32": + argobjects[intI] = int.Parse(strArgumentValue); + break; + case "LSLEditor.SecondLife+Float": + argobjects[intI] = new SecondLife.Float(strArgumentValue); + break; + case "LSLEditor.SecondLife+integer": + argobjects[intI] = new SecondLife.integer(int.Parse(strArgumentValue)); + break; + case "LSLEditor.SecondLife+String": + argobjects[intI] = new SecondLife.String(strArgumentValue); + break; + case "LSLEditor.SecondLife+key": + argobjects[intI] = new SecondLife.key(strArgumentValue); + break; + case "LSLEditor.SecondLife+list": + argobjects[intI] = new SecondLife.list(new string[] { strArgumentValue }); + break; + case "LSLEditor.SecondLife+rotation": + arArgs = strArgumentValue.Replace("<", "").Replace(">", "").Replace(" ", "").Split(new char[] { ',' }); + argobjects[intI] = new SecondLife.rotation(double.Parse(arArgs[0]), double.Parse(arArgs[1]), double.Parse(arArgs[2]), double.Parse(arArgs[3])); + break; + case "LSLEditor.SecondLife+vector": + arArgs = strArgumentValue.Replace("<", "").Replace(">", "").Replace(" ", "").Split(new char[] { ',' }); + argobjects[intI] = new SecondLife.vector(double.Parse(arArgs[0]), double.Parse(arArgs[1]), double.Parse(arArgs[2])); + break; + default: + MessageBox.Show("Compiler->GetArguments->[" + strArgumentType + "][" + strArgumentName + "]"); + argobjects[intI] = null; + break; + } + } else { + MessageBox.Show("Argument must be 'type name' [" + args[intI] + "]"); + break; + } + } + objResult = argobjects; + } catch { } + } + return objResult; + } + + private void buttonEvent_Click(object sender, System.EventArgs e) + { + Button button = (Button)sender; + string strName = button.Text; + string strArgs = SecondLifeHost.GetArgumentsFromMethod(strName); + object[] args = GetArguments(strName, strArgs); + //SecondLifeHost.VerboseEvent(strName, args); + SecondLifeHost.ExecuteSecondLife(strName, args); + } + + private void Die() + { + if (this.SecondLifeHost != null) { + this.SecondLifeHost.Die(); + } + } + + // Die + private void button1_Click(object sender, EventArgs e) + { + Die(); + } + + private void textBox2_KeyDown(object sender, KeyEventArgs e) + { + if (e.Control && e.KeyCode == Keys.A) { + this.textBox2.SelectAll(); + } + } + + private void selectAllToolStripMenuItem_Click(object sender, EventArgs e) + { + this.textBox2.Focus(); + this.textBox2.SelectAll(); + } + + private void copyToolStripMenuItem_Click(object sender, EventArgs e) + { + this.textBox2.Focus(); + this.textBox2.Copy(); + } + + private void clearToolStripMenuItem_Click(object sender, EventArgs e) + { + this.textBox2.Focus(); + this.textBox2.Clear(); + } + + } +} diff --git a/trunk/RuntimeConsole.resx b/source/RuntimeConsole.resx similarity index 97% rename from trunk/RuntimeConsole.resx rename to source/RuntimeConsole.resx index ee8866e..6fab886 100644 --- a/trunk/RuntimeConsole.resx +++ b/source/RuntimeConsole.resx @@ -1,123 +1,123 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + \ No newline at end of file diff --git a/trunk/SecondLife/Float.cs b/source/SecondLife/Float.cs similarity index 96% rename from trunk/SecondLife/Float.cs rename to source/SecondLife/Float.cs index 65feb26..3a3b8c6 100644 --- a/trunk/SecondLife/Float.cs +++ b/source/SecondLife/Float.cs @@ -1,413 +1,413 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// Float.cs -// -// - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Text.RegularExpressions; - -namespace LSLEditor -{ - /// - /// This part of the SecondLife class defines the Float struct. - /// - [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1642:ConstructorSummaryDocumentationMustBeginWithStandardText", Justification = "Reviewed.")] - public partial class SecondLife - { - /// - /// A struct for Float objects. - /// - public struct Float - { - /// - /// Stores the Float value. - /// - private object objValue; - - /// - /// Gets or sets the value of the Float. - /// - /// Gets or sets the objValue data member. - private Double value - { - get - { - if (objValue == null) { - objValue = (Double)0; - } - return (Double)objValue; - } - - set - { - objValue = value; - } - } - - /// - /// Initialises a new instance of the struct. - /// - /// - public Float(Double a) - { - this.objValue = a; - } - - #region public Float(string s) - /// - /// Initialises a new instance of the struct. - /// - /// - public Float(string s) - { - Regex r = new Regex( - @"\A[ ]*(?[+-]?) - (?: - (?: - 0x - (?: - (?: - (?[0-9a-f]*) - (?: - (?:\. - (?[0-9a-f]*) - ) - | - ) - ) - (?: - (?:p - (?[-+]?[\d]*) - ) - | - ) - ) - ) - | - (? - [\d]*[.]?[\d]* - (?: - (?: - e[+-]?[\d]* - ) - | - ) - ) - )", - RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); - Match m = r.Match(s); - Double mantissa = 0.0; - if (r.Match(s).Groups["dec"].Value.Length > 0) { - mantissa = Convert.ToDouble(r.Match(s).Groups["dec"].Value); - } - if (m.Groups["int"].Success) { - if (m.Groups["int"].Value.Length > 0) { - ////System.Console.WriteLine("i:\t" + m.Groups["int"].Value); - mantissa = Convert.ToInt64(m.Groups["int"].Value, 16); - } - if (m.Groups["frac"].Value.Length > 0) { - ////System.Console.WriteLine("f:\t"+m.Groups["frac"].Value); - mantissa += Convert.ToInt64(m.Groups["frac"].Value, 16) / Math.Pow(16.0, m.Groups["frac"].Value.Length); - } - if (m.Groups["exp"].Value.Length > 0) { - ////System.Console.WriteLine("e:\t" + m.Groups["exp"].Value); - mantissa *= Math.Pow(2.0, Convert.ToInt64(m.Groups["exp"].Value, 10)); - } - } - if (m.Groups["sign"].Value == "-") { - this.objValue = -mantissa; - } else { - this.objValue = mantissa; - } - } - #endregion - - /// - /// No idea of the intention here ;-). - /// - /// The Float value as a 32 bit number. - public override int GetHashCode() - { - return (int)this.value % System.Int32.MaxValue; - } - - /// - /// Converts the Float to a string representation. - /// - /// String representation of the Float. - public override string ToString() - { - return string.Format("{0:0.000000}", this.value); - } - - /// - /// Converts the Float to a string representation. - /// - /// - /// String representation of the Float. - public static explicit operator String(Float x) - { - return x.ToString(); - } - - /// - /// Converts the Float to a string representation. - /// - /// - /// String representation of the Float. - public static implicit operator Double(Float x) - { - return x.value; - } - - ////public static implicit operator integer(Float x) - ////{ - //// return (int)x.value; - ////} - - /// - /// Creates a new instance of a Float from a string. - /// - /// - /// A new Float instance. - public static explicit operator Float(string s) - { - return new Float(s); - } - - /// - /// Creates a new instance of a Float from a String. - /// - /// - /// A new Float instance. - public static explicit operator Float(String s) - { - return new Float(s.ToString()); - } - - /// - /// Creates a new instance of a Float from an Int32 . - /// - /// - /// A new Float instance. - public static implicit operator Float(Int32 x) - { - return new Float((Double)x); - } - - /// - /// Creates a new instance of a Float from a long. - /// - /// - /// A new Float instance. - public static implicit operator Float(long x) - { - return new Float((int)(uint)x); // 6 jan 2008 , does this work???? - } - - /// - /// Creates a new instance of a Float from a Double. - /// - /// - /// A new Float instance. - public static implicit operator Float(Double x) - { - return new Float(x); - } - - /// - /// Creates a new instance of a Float from an integer type. - /// - /// - /// A new Float instance. - public static implicit operator Float(integer x) - { - return new Float((Double)x); - } - - /// - /// Calculates the result of multiplying a and b. - /// - /// - /// - /// The product of a and b. - public static Float operator *(Float a, Float b) - { - return new Float(a.value * b.value); - } - - /// - /// Calculates the result of dividing a by b. - /// - /// - /// - /// The result of dividing a by b. - public static Float operator /(Float a, Float b) - { - return new Float(a.value / b.value); - } - - /// - /// Calculates the result of incrementing the Float's value. - /// - /// - /// The result of incrementing the Float's value. - public static Float operator ++(Float a) - { - return new Float(a.value + 1.0); - } - - /// - /// Calculates the result of decrementing the Float's value. - /// - /// - /// The result of decrementing the Float's value. - public static Float operator --(Float a) - { - return new Float(a.value - 1.0); - } - - /// - /// Calculates the result of adding a to b. - /// - /// - /// - /// The result of adding a to b. - public static Float operator +(Float a, Float b) - { - return new Float(a.value + b.value); - } - - /// - /// Calculates the result of subtracting a from b. - /// - /// - /// - /// The result of subtracting a from b. - public static Float operator -(Float a, Float b) - { - return new Float(a.value - b.value); - } - - /// - /// Casts the Float to a boolean. - /// - /// - /// A boolean value. - public static explicit operator bool(Float a) - { - return Math.Abs(a.value) >= Double.Epsilon; - } - - /// - /// Defines a boolean true value. - /// - /// - /// A boolean indicating whether the value is considered true. - public static bool operator true(Float a) - { - return Math.Abs(a.value) >= Double.Epsilon; - } - - /// - /// Defines a boolean false value. - /// - /// - /// A boolean indicating whether the value is considered false. - public static bool operator false(Float a) - { - return Math.Abs(a.value) < Double.Epsilon; - } - - /// - /// Defines the equality operator. - /// - /// First operand. - /// Second operand. - /// A boolean value indicating equality. - public static bool operator ==(Float x, Float y) - { - return Math.Abs(x.value - y.value) < Double.Epsilon; - } - - /// - /// Defines the inequality operator. - /// - /// First operand. - /// Second operand. - /// A boolean value indicating inequality. - public static bool operator !=(Float x, Float y) - { - return !(x == y); - } - - /// - /// Compares two Floats. - /// - /// First operand. - /// Second operand. - /// An integer (-1, 0, or 1), indicating whether the first item is less than, same as, or greater than the second. - public static int Compare(Float a, Float b) - { - int intResult = 0; - if (a.value < b.value) { - intResult = -1; - } else if (a.value > b.value) { - intResult = 1; - } - return intResult; - } - - /// - /// Defines the Equals operator. - /// - /// - /// A boolean value indicating equality. - public override bool Equals(object o) - { - bool blnResult; - try { - blnResult = (bool)(this == (Float)o); - } catch { - blnResult = false; - } - return blnResult; - } - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// Float.cs +// +// + +using System; +using System.Diagnostics.CodeAnalysis; +using System.Text.RegularExpressions; + +namespace LSLEditor +{ + /// + /// This part of the SecondLife class defines the Float struct. + /// + [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1642:ConstructorSummaryDocumentationMustBeginWithStandardText", Justification = "Reviewed.")] + public partial class SecondLife + { + /// + /// A struct for Float objects. + /// + public struct Float + { + /// + /// Stores the Float value. + /// + private object objValue; + + /// + /// Gets or sets the value of the Float. + /// + /// Gets or sets the objValue data member. + private Double value + { + get + { + if (objValue == null) { + objValue = (Double)0; + } + return (Double)objValue; + } + + set + { + objValue = value; + } + } + + /// + /// Initialises a new instance of the struct. + /// + /// + public Float(Double a) + { + this.objValue = a; + } + + #region public Float(string s) + /// + /// Initialises a new instance of the struct. + /// + /// + public Float(string s) + { + Regex r = new Regex( + @"\A[ ]*(?[+-]?) + (?: + (?: + 0x + (?: + (?: + (?[0-9a-f]*) + (?: + (?:\. + (?[0-9a-f]*) + ) + | + ) + ) + (?: + (?:p + (?[-+]?[\d]*) + ) + | + ) + ) + ) + | + (? + [\d]*[.]?[\d]* + (?: + (?: + e[+-]?[\d]* + ) + | + ) + ) + )", + RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); + Match m = r.Match(s); + Double mantissa = 0.0; + if (r.Match(s).Groups["dec"].Value.Length > 0) { + mantissa = Convert.ToDouble(r.Match(s).Groups["dec"].Value); + } + if (m.Groups["int"].Success) { + if (m.Groups["int"].Value.Length > 0) { + ////System.Console.WriteLine("i:\t" + m.Groups["int"].Value); + mantissa = Convert.ToInt64(m.Groups["int"].Value, 16); + } + if (m.Groups["frac"].Value.Length > 0) { + ////System.Console.WriteLine("f:\t"+m.Groups["frac"].Value); + mantissa += Convert.ToInt64(m.Groups["frac"].Value, 16) / Math.Pow(16.0, m.Groups["frac"].Value.Length); + } + if (m.Groups["exp"].Value.Length > 0) { + ////System.Console.WriteLine("e:\t" + m.Groups["exp"].Value); + mantissa *= Math.Pow(2.0, Convert.ToInt64(m.Groups["exp"].Value, 10)); + } + } + if (m.Groups["sign"].Value == "-") { + this.objValue = -mantissa; + } else { + this.objValue = mantissa; + } + } + #endregion + + /// + /// No idea of the intention here ;-). + /// + /// The Float value as a 32 bit number. + public override int GetHashCode() + { + return (int)this.value % System.Int32.MaxValue; + } + + /// + /// Converts the Float to a string representation. + /// + /// String representation of the Float. + public override string ToString() + { + return string.Format("{0:0.000000}", this.value); + } + + /// + /// Converts the Float to a string representation. + /// + /// + /// String representation of the Float. + public static explicit operator String(Float x) + { + return x.ToString(); + } + + /// + /// Converts the Float to a string representation. + /// + /// + /// String representation of the Float. + public static implicit operator Double(Float x) + { + return x.value; + } + + ////public static implicit operator integer(Float x) + ////{ + //// return (int)x.value; + ////} + + /// + /// Creates a new instance of a Float from a string. + /// + /// + /// A new Float instance. + public static explicit operator Float(string s) + { + return new Float(s); + } + + /// + /// Creates a new instance of a Float from a String. + /// + /// + /// A new Float instance. + public static explicit operator Float(String s) + { + return new Float(s.ToString()); + } + + /// + /// Creates a new instance of a Float from an Int32 . + /// + /// + /// A new Float instance. + public static implicit operator Float(Int32 x) + { + return new Float((Double)x); + } + + /// + /// Creates a new instance of a Float from a long. + /// + /// + /// A new Float instance. + public static implicit operator Float(long x) + { + return new Float((int)(uint)x); // 6 jan 2008 , does this work???? + } + + /// + /// Creates a new instance of a Float from a Double. + /// + /// + /// A new Float instance. + public static implicit operator Float(Double x) + { + return new Float(x); + } + + /// + /// Creates a new instance of a Float from an integer type. + /// + /// + /// A new Float instance. + public static implicit operator Float(integer x) + { + return new Float((Double)x); + } + + /// + /// Calculates the result of multiplying a and b. + /// + /// + /// + /// The product of a and b. + public static Float operator *(Float a, Float b) + { + return new Float(a.value * b.value); + } + + /// + /// Calculates the result of dividing a by b. + /// + /// + /// + /// The result of dividing a by b. + public static Float operator /(Float a, Float b) + { + return new Float(a.value / b.value); + } + + /// + /// Calculates the result of incrementing the Float's value. + /// + /// + /// The result of incrementing the Float's value. + public static Float operator ++(Float a) + { + return new Float(a.value + 1.0); + } + + /// + /// Calculates the result of decrementing the Float's value. + /// + /// + /// The result of decrementing the Float's value. + public static Float operator --(Float a) + { + return new Float(a.value - 1.0); + } + + /// + /// Calculates the result of adding a to b. + /// + /// + /// + /// The result of adding a to b. + public static Float operator +(Float a, Float b) + { + return new Float(a.value + b.value); + } + + /// + /// Calculates the result of subtracting a from b. + /// + /// + /// + /// The result of subtracting a from b. + public static Float operator -(Float a, Float b) + { + return new Float(a.value - b.value); + } + + /// + /// Casts the Float to a boolean. + /// + /// + /// A boolean value. + public static explicit operator bool(Float a) + { + return Math.Abs(a.value) >= Double.Epsilon; + } + + /// + /// Defines a boolean true value. + /// + /// + /// A boolean indicating whether the value is considered true. + public static bool operator true(Float a) + { + return Math.Abs(a.value) >= Double.Epsilon; + } + + /// + /// Defines a boolean false value. + /// + /// + /// A boolean indicating whether the value is considered false. + public static bool operator false(Float a) + { + return Math.Abs(a.value) < Double.Epsilon; + } + + /// + /// Defines the equality operator. + /// + /// First operand. + /// Second operand. + /// A boolean value indicating equality. + public static bool operator ==(Float x, Float y) + { + return Math.Abs(x.value - y.value) < Double.Epsilon; + } + + /// + /// Defines the inequality operator. + /// + /// First operand. + /// Second operand. + /// A boolean value indicating inequality. + public static bool operator !=(Float x, Float y) + { + return !(x == y); + } + + /// + /// Compares two Floats. + /// + /// First operand. + /// Second operand. + /// An integer (-1, 0, or 1), indicating whether the first item is less than, same as, or greater than the second. + public static int Compare(Float a, Float b) + { + int intResult = 0; + if (a.value < b.value) { + intResult = -1; + } else if (a.value > b.value) { + intResult = 1; + } + return intResult; + } + + /// + /// Defines the Equals operator. + /// + /// + /// A boolean value indicating equality. + public override bool Equals(object o) + { + bool blnResult; + try { + blnResult = (bool)(this == (Float)o); + } catch { + blnResult = false; + } + return blnResult; + } + } + } +} diff --git a/trunk/SecondLife/LSL_Constants.cs b/source/SecondLife/LSL_Constants.cs similarity index 97% rename from trunk/SecondLife/LSL_Constants.cs rename to source/SecondLife/LSL_Constants.cs index b65f055..7f1551f 100644 --- a/trunk/SecondLife/LSL_Constants.cs +++ b/source/SecondLife/LSL_Constants.cs @@ -1,765 +1,765 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// LSL_Constants.cs -// -// - -using System; -using System.Diagnostics.CodeAnalysis; - -namespace LSLEditor -{ - /// - /// This part of the SecondLife class initialises the constants for LSL. - /// - [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1310:FieldNamesMustNotContainUnderscore", Justification = "Reviewed.")] - [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented", Justification = "Reviewed.")] - public partial class SecondLife - { - public const int TRUE = 1; - public const int FALSE = 0; - - public const int DENSITY = 1; - public const int FRICTION = 2; - public const int GRAVITY_MULTIPLIER = 8; - public const int RESTITUTION = 4; - - public const int AGENT = 1; - public const int ACTIVE = 2; - public const int PASSIVE = 4; - public const int SCRIPTED = 8; - - public const int ANIM_ON = 1; - public const int LOOP = 2; - public const int REVERSE = 4; - public const int PING_PONG = 8; - public const int SMOOTH = 16; - public const int ROTATE = 32; - public const int SCALE = 64; - - public const int ALL_SIDES = -1; - - public const int DEBUG_CHANNEL = 2147483647; - public const string EOF = "\n\n\n"; - - public const int AGENT_FLYING = 1; - public const int AGENT_ATTACHMENTS = 2; - public const int AGENT_SCRIPTED = 4; - public const int AGENT_MOUSELOOK = 8; - public const int AGENT_SITTING = 16; - public const int AGENT_ON_OBJECT = 32; - public const int AGENT_AWAY = 64; - public const int AGENT_WALKING = 128; - public const int AGENT_IN_AIR = 256; - public const int AGENT_TYPING = 512; - public const int AGENT_CROUCHING = 1024; - public const int AGENT_BUSY = 2048; - public const int AGENT_ALWAYS_RUN = 4096; - public const int AGENT_AUTOPILOT = 0x2000; - public const int AGENT_BY_LEGACY_NAME = 0x1; - public const int AGENT_BY_USERNAME = 0x10; - - public const int AGENT_LIST_PARCEL = 0x01; - public const int AGENT_LIST_PARCEL_OWNER = 0x02; - public const int AGENT_LIST_REGION = 0x04; - - public const int ATTACH_AVATAR_CENTER = 40; - public const int ATTACH_BACK = 9; - public const int ATTACH_CHEST = 1; - public const int ATTACH_CHIN = 12; - public const int ATTACH_HEAD = 2; - public const int ATTACH_LSHOULDER = 3; - public const int ATTACH_RSHOULDER = 4; - public const int ATTACH_LHAND = 5; - public const int ATTACH_RHAND = 6; - public const int ATTACH_LFOOT = 7; - public const int ATTACH_RFOOT = 8; - public const int ATTACH_PELVIS = 10; - public const int ATTACH_MOUTH = 11; - public const int ATTACH_NECK = 39; - public const int ATTACH_LEAR = 13; - public const int ATTACH_LEFT_PEC = 29; - public const int ATTACH_REAR = 14; - public const int ATTACH_LEYE = 15; - public const int ATTACH_REYE = 16; - public const int ATTACH_NOSE = 17; - public const int ATTACH_RUARM = 18; - public const int ATTACH_RLARM = 19; - public const int ATTACH_LUARM = 20; - public const int ATTACH_LLARM = 21; - public const int ATTACH_RHIP = 22; - public const int ATTACH_RIGHT_PEC = 30; - public const int ATTACH_RULEG = 23; - public const int ATTACH_RLLEG = 24; - public const int ATTACH_LHIP = 25; - public const int ATTACH_LULEG = 26; - public const int ATTACH_LLLEG = 27; - public const int ATTACH_BELLY = 28; - public const int ATTACH_RPEC = 29; - public const int ATTACH_LPEC = 30; - - public const int ATTACH_HUD_CENTER_2 = 31; - public const int ATTACH_HUD_TOP_RIGHT = 32; - public const int ATTACH_HUD_TOP_CENTER = 33; - public const int ATTACH_HUD_TOP_LEFT = 34; - public const int ATTACH_HUD_CENTER_1 = 35; - public const int ATTACH_HUD_BOTTOM_LEFT = 36; - public const int ATTACH_HUD_BOTTOM = 37; - public const int ATTACH_HUD_BOTTOM_RIGHT = 38; - - public const int AVOID_NONE = 0; - public const int AVOID_CHARACTERS = 1; - public const int AVOID_DYNAMIC_OBSTACLES = 2; - - public const int CAMERA_PITCH = 0; - public const int CAMERA_FOCUS_OFFSET = 1; - public const int CAMERA_POSITION_LAG = 5; - public const int CAMERA_FOCUS_LAG = 6; - public const int CAMERA_DISTANCE = 7; - public const int CAMERA_BEHINDNESS_ANGLE = 8; - public const int CAMERA_BEHINDNESS_LAG = 9; - public const int CAMERA_POSITION_THRESHOLD = 10; - public const int CAMERA_FOCUS_THRESHOLD = 11; - public const int CAMERA_ACTIVE = 12; - public const int CAMERA_POSITION = 13; - public const int CAMERA_FOCUS = 17; - public const int CAMERA_FOCUS_LOCKED = 22; - public const int CAMERA_POSITION_LOCKED = 21; - - public const int CHANGED_INVENTORY = 1; - public const int CHANGED_COLOR = 2; - public const int CHANGED_SHAPE = 4; - public const int CHANGED_SCALE = 8; - public const int CHANGED_TEXTURE = 16; - public const int CHANGED_LINK = 32; - public const int CHANGED_ALLOWED_DROP = 64; - public const int CHANGED_OWNER = 128; - public const int CHANGED_REGION = 256; - public const int CHANGED_TELEPORT = 512; - public const int CHANGED_REGION_START = 1024; - public const int CHANGED_MEDIA = 2048; - - public const int CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES = 14; - public const int CHARACTER_AVOIDANCE_MODE = 5; - public const int CHARACTER_CMD_JUMP = 0x01; - public const int CHARACTER_CMD_STOP = 0x00; - public const int CHARACTER_DESIRED_SPEED = 1; - public const int CHARACTER_LENGTH = 3; - public const int CHARACTER_TYPE = 6; - public const int CHARACTER_MAX_ACCEL = 8; - public const int CHARACTER_MAX_DECEL = 9; - public const int CHARACTER_MAX_SPEED = 13; - public const int CHARACTER_MAX_TURN_RADIUS = 10; - public const int CHARACTER_ORIENTATION = 4; - public const int CHARACTER_RADIUS = 2; - public const int CHARACTER_STAY_WITHIN_PARCEL = 15; - public const int CHARACTER_TYPE_A = 0; - public const int CHARACTER_TYPE_B = 1; - public const int CHARACTER_TYPE_C = 2; - public const int CHARACTER_TYPE_D = 3; - public const int CHARACTER_TYPE_NONE = 4; - - public const int CLICK_ACTION_NONE = 0; - public const int CLICK_ACTION_TOUCH = 0; - public const int CLICK_ACTION_SIT = 1; - public const int CLICK_ACTION_BUY = 2; - public const int CLICK_ACTION_PAY = 3; - public const int CLICK_ACTION_OPEN = 4; - public const int CLICK_ACTION_PLAY = 5; - public const int CLICK_ACTION_OPEN_MEDIA = 6; - - public const string CONTENT_TYPE_ATOM = "application/atom+xml"; - public const string CONTENT_TYPE_FORM = "application/x-www-form-urlencoded"; - public const string CONTENT_TYPE_HTML = "text/html"; - public const string CONTENT_TYPE_JSON = "application/json"; - public const string CONTENT_TYPE_LLSD = "application/llsd+xml"; - public const string CONTENT_TYPE_RSS = "application/rss+xml"; - public const string CONTENT_TYPE_TEXT = "text/plain"; - public const string CONTENT_TYPE_XHTML = "application/xhtml+xml"; - public const string CONTENT_TYPE_XML = "application/xml"; - - public const int CONTROL_FWD = 1; - public const int CONTROL_BACK = 2; - public const int CONTROL_LEFT = 4; - public const int CONTROL_RIGHT = 8; - public const int CONTROL_ROT_LEFT = 256; - public const int CONTROL_ROT_RIGHT = 512; - public const int CONTROL_UP = 16; - public const int CONTROL_DOWN = 32; - public const int CONTROL_LBUTTON = 268435456; - public const int CONTROL_ML_LBUTTON = 1073741824; - - public const int DATA_ONLINE = 1; - public const int DATA_NAME = 2; - public const int DATA_BORN = 3; - public const int DATA_RATING = 4; - - public const int DATA_SIM_POS = 5; - public const int DATA_SIM_STATUS = 6; - public const int DATA_SIM_RATING = 7; - - public const int DATA_PAYINFO = 8; - - public const int ERR_GENERIC = -1; - public const int ERR_MALFORMED_PARAMS = -3; - public const int ERR_PARCEL_PERMISSIONS = -2; - public const int ERR_RUNTIME_PERMISSIONS = -4; - public const int ERR_THROTTLED = -5; - - public const int ESTATE_ACCESS_ALLOWED_AGENT_ADD = 4; - public const int ESTATE_ACCESS_ALLOWED_AGENT_REMOVE = 8; - public const int ESTATE_ACCESS_ALLOWED_GROUP_ADD = 16; - public const int ESTATE_ACCESS_ALLOWED_GROUP_REMOVE = 32; - public const int ESTATE_ACCESS_BANNED_AGENT_ADD = 64; - public const int ESTATE_ACCESS_BANNED_AGENT_REMOVE = 128; - - public const int FORCE_DIRECT_PATH = 1; - - public const int HTTP_BODY_MAXLENGTH = 2; - public const int HTTP_BODY_TRUNCATED = 0; - public const int HTTP_METHOD = 0; - public const int HTTP_MIMETYPE = 1; - public const int HTTP_PRAGMA_NO_CACHE = 6; - public const int HTTP_VERBOSE_THROTTLE = 4; - public const int HTTP_VERIFY_CERT = 3; - - public const int HORIZONTAL = 1; - - public const int INVENTORY_ALL = -1; - public const int INVENTORY_NONE = -1; - public const int INVENTORY_TEXTURE = 0; - public const int INVENTORY_SOUND = 1; - public const int INVENTORY_LANDMARK = 3; - public const int INVENTORY_CLOTHING = 5; - public const int INVENTORY_OBJECT = 6; - public const int INVENTORY_NOTECARD = 7; - public const int INVENTORY_SCRIPT = 10; - public const int INVENTORY_BODYPART = 13; - public const int INVENTORY_ANIMATION = 20; - public const int INVENTORY_GESTURE = 21; - - public const int JSON_APPEND = -1; - public const string JSON_ARRAY = "\uFDD2"; - public const string JSON_DELETE = "\uFDD8"; - public const string JSON_FALSE = "\uFDD7"; - public const string JSON_INVALID = "\uFDD0"; - public const string JSON_NULL = "\uFDD5"; - public const string JSON_NUMBER = "\uFDD3"; - public const string JSON_OBJECT = "\uFDD1"; - public const string JSON_STRING = "\uFDD4"; - public const string JSON_TRUE = "\uFDD6"; - - public const int KFM_CMD_PAUSE = 2; - public const int KFM_CMD_PLAY = 0; - public const int KFM_CMD_STOP = 1; - public const int KFM_COMMAND = 0; - public const int KFM_DATA = 2; - public const int KFM_FORWARD = 0; - public const int KFM_LOOP = 1; - public const int KFM_MODE = 1; - public const int KFM_PING_PONG = 2; - public const int KFM_REVERSE = 2; - public const int KFM_ROTATION = 1; - public const int KFM_TRANSLATION = 2; - - public const int LAND_LEVEL = 0; - public const int LAND_RAISE = 1; - public const int LAND_LOWER = 2; - public const int LAND_SMOOTH = 3; - public const int LAND_NOISE = 4; - public const int LAND_REVERT = 5; - - public const int LAND_LARGE_BRUSH = 3; - public const int LAND_MEDIUM_BRUSH = 2; - public const int LAND_SMALL_BRUSH = 1; - - public const int LINK_ROOT = 1; - public const int LINK_SET = -1; - public const int LINK_ALL_OTHERS = -2; - public const int LINK_ALL_CHILDREN = -3; - public const int LINK_THIS = -4; - - public const int LIST_STAT_RANGE = 0; - public const int LIST_STAT_MIN = 1; - public const int LIST_STAT_MAX = 2; - public const int LIST_STAT_MEAN = 3; - public const int LIST_STAT_MEDIAN = 4; - public const int LIST_STAT_STD_DEV = 5; - public const int LIST_STAT_SUM = 6; - public const int LIST_STAT_SUM_SQUARES = 7; - public const int LIST_STAT_NUM_COUNT = 8; - public const int LIST_STAT_GEOMETRIC_MEAN = 9; - - public const int MASK_BASE = 0; - public const int MASK_EVERYONE = 3; - public const int MASK_GROUP = 2; - public const int MASK_NEXT = 4; - public const int MASK_OWNER = 1; - - public const int OBJECT_ATTACHED_POINT = 19; - public const int OBJECT_CHARACTER_TIME = 17; - public const int OBJECT_NAME = 1; - public const int OBJECT_DESC = 2; - public const int OBJECT_POS = 3; - public const int OBJECT_ROOT = 18; - public const int OBJECT_ROT = 4; - public const int OBJECT_VELOCITY = 5; - public const int OBJECT_OWNER = 6; - public const int OBJECT_PATHFINDING_TYPE = 20; - public const int OBJECT_GROUP = 7; - public const int OBJECT_CREATOR = 8; - public const int OBJECT_PHYSICS = 21; - public const int OBJECT_PHANTOM = 22; - public const int OBJECT_TEMP_ON_REZ = 23; - - public const int OBJECT_STREAMING_COST = 15; - public const int OBJECT_PHYSICS_COST = 16; - public const int OBJECT_SERVER_COST = 14; - public const int OBJECT_PRIM_EQUIVALENCE = 13; - - public const int OBJECT_RUNNING_SCRIPT_COUNT = 9; - public const int OBJECT_SCRIPT_MEMORY = 11; - public const int OBJECT_SCRIPT_TIME = 12; - public const int OBJECT_TOTAL_SCRIPT_COUNT = 10; - public const int OBJECT_UNKNOWN_DETAIL = -1; - - public const int OPT_AVATAR = 1; - public const int OPT_CHARACTER = 2; - public const int OPT_EXCLUSION_VOLUME = 6; - public const int OPT_LEGACY_LINKSET = 0; - public const int OPT_MATERIAL_VOLUME = 5; - public const int OPT_OTHER = -1; - public const int OPT_STATIC_OBSTACLE = 4; - public const int OPT_WALKABLE = 3; - - public const int OBJECT_RETURN_PARCEL = 1; - public const int OBJECT_RETURN_PARCEL_OWNER = 2; - public const int OBJECT_RETURN_REGION = 4; - - public const int PARCEL_COUNT_TOTAL = 0; - public const int PARCEL_COUNT_OWNER = 1; - public const int PARCEL_COUNT_GROUP = 2; - public const int PARCEL_COUNT_OTHER = 3; - public const int PARCEL_COUNT_SELECTED = 4; - public const int PARCEL_COUNT_TEMP = 5; - - public const int PARCEL_DETAILS_AREA = 4; - public const int PARCEL_DETAILS_DESC = 1; - public const int PARCEL_DETAILS_GROUP = 3; - public const int PARCEL_DETAILS_ID = 5; - public const int PARCEL_DETAILS_NAME = 0; - public const int PARCEL_DETAILS_OWNER = 2; - public const int PARCEL_DETAILS_SEE_AVATARS = 6; - - public const int PARCEL_FLAG_ALLOW_FLY = 0x0000001; - public const int PARCEL_FLAG_ALLOW_SCRIPTS = 0x0000002; - public const int PARCEL_FLAG_ALLOW_LANDMARK = 0x0000008; - public const int PARCEL_FLAG_ALLOW_TERRAFORM = 0x0000010; - public const int PARCEL_FLAG_ALLOW_DAMAGE = 0x0000020; - public const int PARCEL_FLAG_ALLOW_CREATE_OBJECTS = 0x0000040; - public const int PARCEL_FLAG_USE_ACCESS_GROUP = 0x0000100; - public const int PARCEL_FLAG_USE_ACCESS_LIST = 0x0000200; - public const int PARCEL_FLAG_USE_BAN_LIST = 0x0000400; - public const int PARCEL_FLAG_USE_LAND_PASS_LIST = 0x0000800; - public const int PARCEL_FLAG_LOCAL_SOUND_ONLY = 0x0008000; - public const int PARCEL_FLAG_RESTRICT_PUSHOBJECT = 0x0200000; - public const int PARCEL_FLAG_ALLOW_GROUP_SCRIPTS = 0x2000000; - - public const int PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS = 0x4000000; - public const int PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY = 0x8000000; - public const int PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY = 0x10000000; - - public const int PARCEL_MEDIA_COMMAND_STOP = 0; - public const int PARCEL_MEDIA_COMMAND_PAUSE = 1; - public const int PARCEL_MEDIA_COMMAND_PLAY = 2; - public const int PARCEL_MEDIA_COMMAND_LOOP = 3; - public const int PARCEL_MEDIA_COMMAND_TEXTURE = 4; - public const int PARCEL_MEDIA_COMMAND_URL = 5; - public const int PARCEL_MEDIA_COMMAND_TIME = 6; - public const int PARCEL_MEDIA_COMMAND_AGENT = 7; - public const int PARCEL_MEDIA_COMMAND_UNLOAD = 8; - public const int PARCEL_MEDIA_COMMAND_AUTO_ALIGN = 9; - - public const int PARCEL_MEDIA_COMMAND_TYPE = 10; - public const int PARCEL_MEDIA_COMMAND_SIZE = 11; - public const int PARCEL_MEDIA_COMMAND_DESC = 12; - public const int PARCEL_MEDIA_COMMAND_LOOP_SET = 13; - - public const int PAY_DEFAULT = -2; - public const int PAY_HIDE = -1; - - public const int PAYMENT_INFO_ON_FILE = 1; - public const int PAYMENT_INFO_USED = 2; - - public const int PERM_ALL = 2147483647; - public const int PERM_COPY = 32768; - public const int PERM_MODIFY = 16384; - public const int PERM_MOVE = 524288; - public const int PERM_TRANSFER = 8192; - - public const int PERMISSION_DEBIT = 2; - public const int PERMISSION_TAKE_CONTROLS = 4; - public const int PERMISSION_REMAP_CONTROLS = 8; - public const int PERMISSION_TRIGGER_ANIMATION = 16; - public const int PERMISSION_ATTACH = 32; - public const int PERMISSION_RELEASE_OWNERSHIP = 64; - public const int PERMISSION_CHANGE_LINKS = 128; - public const int PERMISSION_CHANGE_JOINTS = 256; - public const int PERMISSION_CHANGE_PERMISSIONS = 512; - public const int PERMISSION_CONTROL_CAMERA = 2048; - public const int PERMISSION_OVERRIDE_ANIMATIONS = 0x8000; - public const int PERMISSION_TRACK_CAMERA = 1024; - public const int PERMISSION_RETURN_OBJECTS = 65536; - - public const int PRIM_BUMP_BARK = 4; - public const int PRIM_BUMP_BLOBS = 12; - public const int PRIM_BUMP_BRICKS = 5; - public const int PRIM_BUMP_BRIGHT = 1; - public const int PRIM_BUMP_CHECKER = 6; - public const int PRIM_BUMP_CONCRETE = 7; - public const int PRIM_BUMP_DARK = 2; - public const int PRIM_BUMP_DISKS = 10; - public const int PRIM_BUMP_GRAVEL = 11; - public const int PRIM_BUMP_LARGETILE = 14; - public const int PRIM_BUMP_NONE = 0; - public const int PRIM_BUMP_SHINY = 19; - public const int PRIM_BUMP_SIDING = 13; - public const int PRIM_BUMP_STONE = 9; - public const int PRIM_BUMP_STUCCO = 15; - public const int PRIM_BUMP_SUCTION = 16; - public const int PRIM_BUMP_TILE = 8; - public const int PRIM_BUMP_WEAVE = 17; - public const int PRIM_BUMP_WOOD = 3; - - public const int PRIM_CAST_SHADOWS = 24; - public const int PRIM_COLOR = 18; - public const int PRIM_DESC = 28; - public const int PRIM_FLEXIBLE = 21; - public const int PRIM_FULLBRIGHT = 20; - public const int PRIM_HOLE_CIRCLE = 16; - public const int PRIM_HOLE_DEFAULT = 0; - public const int PRIM_HOLE_SQUARE = 32; - public const int PRIM_HOLE_TRIANGLE = 48; - public const int PRIM_LINK_TARGET = 34; - public const int PRIM_MATERIAL = 2; - public const int PRIM_MATERIAL_FLESH = 4; - public const int PRIM_MATERIAL_GLASS = 2; - public const int PRIM_MATERIAL_LIGHT = 7; - public const int PRIM_MATERIAL_METAL = 1; - public const int PRIM_MATERIAL_PLASTIC = 5; - public const int PRIM_MATERIAL_RUBBER = 6; - public const int PRIM_MATERIAL_STONE = 0; - public const int PRIM_MATERIAL_WOOD = 3; - - public const int PRIM_MEDIA_ALT_IMAGE_ENABLE = 0; - public const int PRIM_MEDIA_AUTO_LOOP = 4; - public const int PRIM_MEDIA_AUTO_PLAY = 5; - public const int PRIM_MEDIA_AUTO_SCALE = 6; - public const int PRIM_MEDIA_AUTO_ZOOM = 7; - public const int PRIM_MEDIA_CONTROLS = 1; - public const int PRIM_MEDIA_CONTROLS_MINI = 1; - public const int PRIM_MEDIA_CONTROLS_STANDARD = 0; - public const int PRIM_MEDIA_CURRENT_URL = 2; - public const int PRIM_MEDIA_FIRST_CLICK_INTERACT = 8; - public const int PRIM_MEDIA_HEIGHT_PIXELS = 10; - public const int PRIM_MEDIA_HOME_URL = 3; - public const int PRIM_MEDIA_PERM_ANYONE = 4; - public const int PRIM_MEDIA_PERM_GROUP = 2; - public const int PRIM_MEDIA_PERM_NONE = 0; - public const int PRIM_MEDIA_PERM_OWNER = 1; - public const int PRIM_MEDIA_PERMS_CONTROL = 14; - public const int PRIM_MEDIA_PERMS_INTERACT = 13; - public const int PRIM_MEDIA_WHITELIST = 12; - public const int PRIM_MEDIA_WHITELIST_ENABLE = 11; - public const int PRIM_MEDIA_WIDTH_PIXELS = 9; - - public const int PRIM_NAME = 27; - public const int PRIM_OMEGA = 32; - public const int PRIM_PHANTOM = 5; - public const int PRIM_PHYSICS = 3; - public const int PRIM_PHYSICS_MATERIAL = 31; - public const int PRIM_PHYSICS_SHAPE_CONVEX = 2; - public const int PRIM_PHYSICS_SHAPE_NONE = 1; - public const int PRIM_PHYSICS_SHAPE_PRIM = 0; - public const int PRIM_PHYSICS_SHAPE_TYPE = 30; - public const int PRIM_POINT_LIGHT = 23; - public const int PRIM_POSITION = 6; - public const int PRIM_POS_LOCAL = 33; - public const int PRIM_ROTATION = 8; - public const int PRIM_ROT_LOCAL = 29; - public const int PRIM_SCULPT_FLAG_INVERT = 64; - public const int PRIM_SCULPT_FLAG_MIRROR = 128; - public const int PRIM_SHINY_HIGH = 3; - public const int PRIM_SHINY_LOW = 1; - public const int PRIM_SHINY_MEDIUM = 2; - public const int PRIM_SHINY_NONE = 0; - public const int PRIM_SIZE = 7; - public const int PRIM_SLICE = 35; - public const int PRIM_TEMP_ON_REZ = 4; - public const int PRIM_TEXGEN = 22; - public const int PRIM_TEXGEN_DEFAULT = 0; - public const int PRIM_TEXGEN_PLANAR = 1; - public const int PRIM_TEXT = 26; - public const int PRIM_TEXTURE = 17; - public const int PRIM_TYPE = 9; - - public const int PRIM_TYPE_BOX = 0; - public const int PRIM_TYPE_CYLINDER = 1; - public const int PRIM_TYPE_PRISM = 2; - public const int PRIM_TYPE_SPHERE = 3; - public const int PRIM_TYPE_TORUS = 4; - public const int PRIM_TYPE_TUBE = 5; - public const int PRIM_TYPE_RING = 6; - public const int PRIM_TYPE_SCULPT = 7; - - public const int PRIM_GLOW = 25; - - public const int PRIM_SCULPT_TYPE_MASK = 7; - public const int PRIM_SCULPT_TYPE_SPHERE = 1; - public const int PRIM_SCULPT_TYPE_TORUS = 2; - public const int PRIM_SCULPT_TYPE_PLANE = 3; - public const int PRIM_SCULPT_TYPE_CYLINDER = 4; - - public const int PROFILE_NONE = 0; - public const int PROFILE_SCRIPT_MEMORY = 1; - - public const int PSYS_PART_FLAGS = 0; - public const int PSYS_PART_INTERP_COLOR_MASK = 1; - public const int PSYS_PART_INTERP_SCALE_MASK = 2; - public const int PSYS_PART_BOUNCE_MASK = 4; - public const int PSYS_PART_WIND_MASK = 8; - public const int PSYS_PART_FOLLOW_SRC_MASK = 16; - public const int PSYS_PART_FOLLOW_VELOCITY_MASK = 32; - public const int PSYS_PART_TARGET_POS_MASK = 64; - public const int PSYS_PART_TARGET_LINEAR_MASK = 128; - public const int PSYS_PART_EMISSIVE_MASK = 256; - - public const int PSYS_PART_SRC_PATTERN_ANGLE = 0x04; - public const int PSYS_PART_SRC_PATTERN_ANGLE_CONE = 0x08; - public const int PSYS_PART_SRC_PATTERN_DROP = 0x01; - public const int PSYS_PART_SRC_PATTERN_EXPLODE = 0x02; - - public const int PSYS_PART_START_COLOR = 1; - public const int PSYS_PART_START_ALPHA = 2; - public const int PSYS_PART_END_COLOR = 3; - public const int PSYS_PART_END_ALPHA = 4; - public const int PSYS_PART_START_SCALE = 5; - public const int PSYS_PART_END_SCALE = 6; - public const int PSYS_PART_MAX_AGE = 7; - - public const int PSYS_SRC_ACCEL = 8; - public const int PSYS_SRC_PATTERN = 9; - public const int PSYS_SRC_INNERANGLE = 10; - public const int PSYS_SRC_OUTERANGLE = 11; - public const int PSYS_SRC_TEXTURE = 12; - public const int PSYS_SRC_BURST_RATE = 13; - public const int PSYS_SRC_BURST_PART_COUNT = 15; - public const int PSYS_SRC_BURST_RADIUS = 16; - public const int PSYS_SRC_BURST_SPEED_MIN = 17; - public const int PSYS_SRC_BURST_SPEED_MAX = 18; - public const int PSYS_SRC_MAX_AGE = 19; - public const int PSYS_SRC_TARGET_KEY = 20; - public const int PSYS_SRC_OMEGA = 21; - public const int PSYS_SRC_ANGLE_BEGIN = 22; - public const int PSYS_SRC_ANGLE_END = 23; - - public const int PSYS_SRC_PATTERN_DROP = 1; - public const int PSYS_SRC_PATTERN_EXPLODE = 2; - public const int PSYS_SRC_PATTERN_ANGLE = 4; - public const int PSYS_SRC_PATTERN_ANGLE_CONE = 8; - public const int PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY = 16; - - public const int PU_EVADE_HIDDEN = 0x07; - public const int PU_EVADE_SPOTTED = 0x08; - public const int PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED = 10; - public const int PU_FAILURE_PARCEL_UNREACHABLE = 11; - public const int PU_FAILURE_INVALID_GOAL = 0x03; - public const int PU_FAILURE_INVALID_START = 0x02; - public const int PU_FAILURE_NO_VALID_DESTINATION = 0x06; - public const int PU_FAILURE_OTHER = 1000000; - public const int PU_FAILURE_TARGET_GONE = 0x05; - public const int PU_FAILURE_UNREACHABLE = 0x04; - public const int PU_GOAL_REACHED = 0x01; - public const int PU_SLOWDOWN_DISTANCE_REACHED = 0x00; - - public const int PUBLIC_CHANNEL = 0; - - public const int PURSUIT_FUZZ_FACTOR = 3; - public const int PURSUIT_INTERCEPT = 4; - public const int PURSUIT_OFFSET = 1; - - public const int RC_DATA_FLAGS = 2; - public const int RC_DETECT_PHANTOM = 1; - public const int RC_GET_LINK_NUM = 4; - public const int RC_GET_NORMAL = 1; - public const int RC_GET_ROOT_KEY = 2; - public const int RC_MAX_HITS = 3; - public const int RC_REJECT_AGENTS = 1; - public const int RC_REJECT_LAND = 8; - public const int RC_REJECT_NONPHYSICAL = 4; - public const int RC_REJECT_PHYSICAL = 2; - public const int RC_REJECT_TYPES = 2; - public const int RCERR_CAST_TIME_EXCEEDED = -3; - public const int RCERR_SIM_PERF_LOW = -2; - public const int RCERR_UNKNOWN = -1; - - public const int REGION_FLAG_ALLOW_DAMAGE = 1; - public const int REGION_FLAG_FIXED_SUN = 16; - public const int REGION_FLAG_BLOCK_TERRAFORM = 64; - public const int REGION_FLAG_SANDBOX = 256; - public const int REGION_FLAG_DISABLE_COLLISIONS = 4096; - public const int REGION_FLAG_DISABLE_PHYSICS = 16384; - public const int REGION_FLAG_BLOCK_FLY = 524288; - public const int REGION_FLAG_ALLOW_DIRECT_TELEPORT = 1048576; - public const int REGION_FLAG_RESTRICT_PUSHOBJECT = 4194304; - - public const int REMOTE_DATA_CHANNEL = 1; - public const int REMOTE_DATA_REQUEST = 2; - public const int REMOTE_DATA_REPLY = 3; - - public const int REQUIRE_LINE_OF_SIGHT = 2; - - public const int SIM_STAT_PCT_CHARS_STEPPED = 0; - - public const int STATUS_PHYSICS = 1; - public const int STATUS_ROTATE_X = 2; - public const int STATUS_ROTATE_Y = 4; - public const int STATUS_ROTATE_Z = 8; - public const int STATUS_PHANTOM = 16; - public const int STATUS_SANDBOX = 32; - public const int STATUS_BLOCK_GRAB = 64; - public const int STATUS_BLOCK_GRAB_OBJECT = 1024; - public const int STATUS_DIE_AT_EDGE = 128; - public const int STATUS_RETURN_AT_EDGE = 256; - public const int STATUS_CAST_SHADOWS = 512; - public const int STATUS_BOUNDS_ERROR = 1002; - public const int STATUS_INTERNAL_ERROR = 1999; - public const int STATUS_MALFORMED_PARAMS = 1000; - public const int STATUS_NOT_FOUND = 1003; - public const int STATUS_NOT_SUPPORTED = 1004; - public const int STATUS_OK = 0; - public const int STATUS_TYPE_MISMATCH = 1001; - public const int STATUS_WHITELIST_FAILED = 2001; - - public const int STRING_TRIM_HEAD = 1; - public const int STRING_TRIM_TAIL = 2; - public const int STRING_TRIM = 3; - - public const string TEXTURE_BLANK = "5748decc-f629-461c-9a36-a35a221fe21f"; - public const string TEXTURE_DEFAULT = "89556747-24cb-43ed-920b-47caed15465f"; - public const string TEXTURE_PLYWOOD = "89556747-24cb-43ed-920b-47caed15465f"; - public const string TEXTURE_TRANSPARENT = "8dcd4a48-2d37-4909-9f78-f7a9eb4ef903"; - public const string TEXTURE_MEDIA = "8b5fec65-8d8d-9dc5-cda8-8fdf2716e361"; - - public const int TOUCH_INVALID_FACE = -1; - - public const int TRAVERSAL_TYPE = 7; - public const int TRAVERSAL_TYPE_FAST = 1; - public const int TRAVERSAL_TYPE_NONE = 2; - public const int TRAVERSAL_TYPE_SLOW = 0; - - public const int TYPE_INTEGER = 1; - public const int TYPE_FLOAT = 2; - public const int TYPE_STRING = 3; - public const int TYPE_KEY = 4; - public const int TYPE_VECTOR = 5; - public const int TYPE_ROTATION = 6; - public const int TYPE_INVALID = 0; - - public const string URL_REQUEST_GRANTED = "URL_REQUEST_GRANTED"; - public const string URL_REQUEST_DENIED = "URL_REQUEST_DENIED"; - - public const int VEHICLE_TYPE_NONE = 0; - - public const int VEHICLE_LINEAR_FRICTION_TIMESCALE = 16; - public const int VEHICLE_ANGULAR_FRICTION_TIMESCALE = 17; - public const int VEHICLE_LINEAR_MOTOR_DIRECTION = 18; - public const int VEHICLE_ANGULAR_MOTOR_DIRECTION = 19; - public const int VEHICLE_LINEAR_MOTOR_OFFSET = 20; - public const int VEHICLE_HOVER_HEIGHT = 24; - public const int VEHICLE_HOVER_EFFICIENCY = 25; - public const int VEHICLE_HOVER_TIMESCALE = 26; - public const int VEHICLE_BUOYANCY = 27; - public const int VEHICLE_LINEAR_DEFLECTION_EFFICIENCY = 28; - public const int VEHICLE_LINEAR_DEFLECTION_TIMESCALE = 29; - public const int VEHICLE_LINEAR_MOTOR_TIMESCALE = 30; - public const int VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE = 31; - public const int VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY = 32; - public const int VEHICLE_ANGULAR_DEFLECTION_TIMESCALE = 33; - public const int VEHICLE_ANGULAR_MOTOR_TIMESCALE = 34; - public const int VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE = 35; - public const int VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY = 36; - public const int VEHICLE_VERTICAL_ATTRACTION_TIMESCALE = 37; - public const int VEHICLE_BANKING_EFFICIENCY = 38; - public const int VEHICLE_BANKING_MIX = 39; - public const int VEHICLE_BANKING_TIMESCALE = 40; - public const int VEHICLE_REFERENCE_FRAME = 44; - - public const int VEHICLE_FLAG_NO_FLY_UP = 1; - - public const int VEHICLE_FLAG_NO_DEFLECTION_UP = 1; - public const int VEHICLE_FLAG_LIMIT_ROLL_ONLY = 2; - public const int VEHICLE_FLAG_HOVER_WATER_ONLY = 4; - public const int VEHICLE_FLAG_HOVER_TERRAIN_ONLY = 8; - public const int VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT = 16; - public const int VEHICLE_FLAG_HOVER_UP_ONLY = 32; - public const int VEHICLE_FLAG_LIMIT_MOTOR_UP = 64; - public const int VEHICLE_FLAG_MOUSELOOK_STEER = 128; - public const int VEHICLE_FLAG_MOUSELOOK_BANK = 256; - public const int VEHICLE_FLAG_CAMERA_DECOUPLED = 512; - - public const int VEHICLE_TYPE_SLED = 1; - public const int VEHICLE_TYPE_CAR = 2; - public const int VEHICLE_TYPE_BOAT = 3; - public const int VEHICLE_TYPE_AIRPLANE = 4; - public const int VEHICLE_TYPE_BALLOON = 5; - - public const int VERTICAL = 0; - - public static readonly Float PI = 3.1415926535897932384626; - public static readonly Float TWO_PI = 2.0 * PI; - public static readonly Float PI_BY_TWO = 1.570796; - public static readonly Float DEG_TO_RAD = 0.017453; - public static readonly Float RAD_TO_DEG = 57.295780; - public static readonly Float SQRT2 = 1.414214; - - public static readonly key NULL_KEY = key.NULL_KEY; - public static readonly vector TOUCH_INVALID_TEXCOORD = new vector(-1.0, -1.0, 0.0); - public static readonly vector TOUCH_INVALID_VECTOR = new vector(0.0, 0.0, 0.0); - public static readonly rotation ZERO_ROTATION = rotation.ZERO_ROTATION; - public static readonly vector ZERO_VECTOR = vector.ZERO_VECTOR; - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// LSL_Constants.cs +// +// + +using System; +using System.Diagnostics.CodeAnalysis; + +namespace LSLEditor +{ + /// + /// This part of the SecondLife class initialises the constants for LSL. + /// + [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1310:FieldNamesMustNotContainUnderscore", Justification = "Reviewed.")] + [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented", Justification = "Reviewed.")] + public partial class SecondLife + { + public const int TRUE = 1; + public const int FALSE = 0; + + public const int DENSITY = 1; + public const int FRICTION = 2; + public const int GRAVITY_MULTIPLIER = 8; + public const int RESTITUTION = 4; + + public const int AGENT = 1; + public const int ACTIVE = 2; + public const int PASSIVE = 4; + public const int SCRIPTED = 8; + + public const int ANIM_ON = 1; + public const int LOOP = 2; + public const int REVERSE = 4; + public const int PING_PONG = 8; + public const int SMOOTH = 16; + public const int ROTATE = 32; + public const int SCALE = 64; + + public const int ALL_SIDES = -1; + + public const int DEBUG_CHANNEL = 2147483647; + public const string EOF = "\n\n\n"; + + public const int AGENT_FLYING = 1; + public const int AGENT_ATTACHMENTS = 2; + public const int AGENT_SCRIPTED = 4; + public const int AGENT_MOUSELOOK = 8; + public const int AGENT_SITTING = 16; + public const int AGENT_ON_OBJECT = 32; + public const int AGENT_AWAY = 64; + public const int AGENT_WALKING = 128; + public const int AGENT_IN_AIR = 256; + public const int AGENT_TYPING = 512; + public const int AGENT_CROUCHING = 1024; + public const int AGENT_BUSY = 2048; + public const int AGENT_ALWAYS_RUN = 4096; + public const int AGENT_AUTOPILOT = 0x2000; + public const int AGENT_BY_LEGACY_NAME = 0x1; + public const int AGENT_BY_USERNAME = 0x10; + + public const int AGENT_LIST_PARCEL = 0x01; + public const int AGENT_LIST_PARCEL_OWNER = 0x02; + public const int AGENT_LIST_REGION = 0x04; + + public const int ATTACH_AVATAR_CENTER = 40; + public const int ATTACH_BACK = 9; + public const int ATTACH_CHEST = 1; + public const int ATTACH_CHIN = 12; + public const int ATTACH_HEAD = 2; + public const int ATTACH_LSHOULDER = 3; + public const int ATTACH_RSHOULDER = 4; + public const int ATTACH_LHAND = 5; + public const int ATTACH_RHAND = 6; + public const int ATTACH_LFOOT = 7; + public const int ATTACH_RFOOT = 8; + public const int ATTACH_PELVIS = 10; + public const int ATTACH_MOUTH = 11; + public const int ATTACH_NECK = 39; + public const int ATTACH_LEAR = 13; + public const int ATTACH_LEFT_PEC = 29; + public const int ATTACH_REAR = 14; + public const int ATTACH_LEYE = 15; + public const int ATTACH_REYE = 16; + public const int ATTACH_NOSE = 17; + public const int ATTACH_RUARM = 18; + public const int ATTACH_RLARM = 19; + public const int ATTACH_LUARM = 20; + public const int ATTACH_LLARM = 21; + public const int ATTACH_RHIP = 22; + public const int ATTACH_RIGHT_PEC = 30; + public const int ATTACH_RULEG = 23; + public const int ATTACH_RLLEG = 24; + public const int ATTACH_LHIP = 25; + public const int ATTACH_LULEG = 26; + public const int ATTACH_LLLEG = 27; + public const int ATTACH_BELLY = 28; + public const int ATTACH_RPEC = 29; + public const int ATTACH_LPEC = 30; + + public const int ATTACH_HUD_CENTER_2 = 31; + public const int ATTACH_HUD_TOP_RIGHT = 32; + public const int ATTACH_HUD_TOP_CENTER = 33; + public const int ATTACH_HUD_TOP_LEFT = 34; + public const int ATTACH_HUD_CENTER_1 = 35; + public const int ATTACH_HUD_BOTTOM_LEFT = 36; + public const int ATTACH_HUD_BOTTOM = 37; + public const int ATTACH_HUD_BOTTOM_RIGHT = 38; + + public const int AVOID_NONE = 0; + public const int AVOID_CHARACTERS = 1; + public const int AVOID_DYNAMIC_OBSTACLES = 2; + + public const int CAMERA_PITCH = 0; + public const int CAMERA_FOCUS_OFFSET = 1; + public const int CAMERA_POSITION_LAG = 5; + public const int CAMERA_FOCUS_LAG = 6; + public const int CAMERA_DISTANCE = 7; + public const int CAMERA_BEHINDNESS_ANGLE = 8; + public const int CAMERA_BEHINDNESS_LAG = 9; + public const int CAMERA_POSITION_THRESHOLD = 10; + public const int CAMERA_FOCUS_THRESHOLD = 11; + public const int CAMERA_ACTIVE = 12; + public const int CAMERA_POSITION = 13; + public const int CAMERA_FOCUS = 17; + public const int CAMERA_FOCUS_LOCKED = 22; + public const int CAMERA_POSITION_LOCKED = 21; + + public const int CHANGED_INVENTORY = 1; + public const int CHANGED_COLOR = 2; + public const int CHANGED_SHAPE = 4; + public const int CHANGED_SCALE = 8; + public const int CHANGED_TEXTURE = 16; + public const int CHANGED_LINK = 32; + public const int CHANGED_ALLOWED_DROP = 64; + public const int CHANGED_OWNER = 128; + public const int CHANGED_REGION = 256; + public const int CHANGED_TELEPORT = 512; + public const int CHANGED_REGION_START = 1024; + public const int CHANGED_MEDIA = 2048; + + public const int CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES = 14; + public const int CHARACTER_AVOIDANCE_MODE = 5; + public const int CHARACTER_CMD_JUMP = 0x01; + public const int CHARACTER_CMD_STOP = 0x00; + public const int CHARACTER_DESIRED_SPEED = 1; + public const int CHARACTER_LENGTH = 3; + public const int CHARACTER_TYPE = 6; + public const int CHARACTER_MAX_ACCEL = 8; + public const int CHARACTER_MAX_DECEL = 9; + public const int CHARACTER_MAX_SPEED = 13; + public const int CHARACTER_MAX_TURN_RADIUS = 10; + public const int CHARACTER_ORIENTATION = 4; + public const int CHARACTER_RADIUS = 2; + public const int CHARACTER_STAY_WITHIN_PARCEL = 15; + public const int CHARACTER_TYPE_A = 0; + public const int CHARACTER_TYPE_B = 1; + public const int CHARACTER_TYPE_C = 2; + public const int CHARACTER_TYPE_D = 3; + public const int CHARACTER_TYPE_NONE = 4; + + public const int CLICK_ACTION_NONE = 0; + public const int CLICK_ACTION_TOUCH = 0; + public const int CLICK_ACTION_SIT = 1; + public const int CLICK_ACTION_BUY = 2; + public const int CLICK_ACTION_PAY = 3; + public const int CLICK_ACTION_OPEN = 4; + public const int CLICK_ACTION_PLAY = 5; + public const int CLICK_ACTION_OPEN_MEDIA = 6; + + public const string CONTENT_TYPE_ATOM = "application/atom+xml"; + public const string CONTENT_TYPE_FORM = "application/x-www-form-urlencoded"; + public const string CONTENT_TYPE_HTML = "text/html"; + public const string CONTENT_TYPE_JSON = "application/json"; + public const string CONTENT_TYPE_LLSD = "application/llsd+xml"; + public const string CONTENT_TYPE_RSS = "application/rss+xml"; + public const string CONTENT_TYPE_TEXT = "text/plain"; + public const string CONTENT_TYPE_XHTML = "application/xhtml+xml"; + public const string CONTENT_TYPE_XML = "application/xml"; + + public const int CONTROL_FWD = 1; + public const int CONTROL_BACK = 2; + public const int CONTROL_LEFT = 4; + public const int CONTROL_RIGHT = 8; + public const int CONTROL_ROT_LEFT = 256; + public const int CONTROL_ROT_RIGHT = 512; + public const int CONTROL_UP = 16; + public const int CONTROL_DOWN = 32; + public const int CONTROL_LBUTTON = 268435456; + public const int CONTROL_ML_LBUTTON = 1073741824; + + public const int DATA_ONLINE = 1; + public const int DATA_NAME = 2; + public const int DATA_BORN = 3; + public const int DATA_RATING = 4; + + public const int DATA_SIM_POS = 5; + public const int DATA_SIM_STATUS = 6; + public const int DATA_SIM_RATING = 7; + + public const int DATA_PAYINFO = 8; + + public const int ERR_GENERIC = -1; + public const int ERR_MALFORMED_PARAMS = -3; + public const int ERR_PARCEL_PERMISSIONS = -2; + public const int ERR_RUNTIME_PERMISSIONS = -4; + public const int ERR_THROTTLED = -5; + + public const int ESTATE_ACCESS_ALLOWED_AGENT_ADD = 4; + public const int ESTATE_ACCESS_ALLOWED_AGENT_REMOVE = 8; + public const int ESTATE_ACCESS_ALLOWED_GROUP_ADD = 16; + public const int ESTATE_ACCESS_ALLOWED_GROUP_REMOVE = 32; + public const int ESTATE_ACCESS_BANNED_AGENT_ADD = 64; + public const int ESTATE_ACCESS_BANNED_AGENT_REMOVE = 128; + + public const int FORCE_DIRECT_PATH = 1; + + public const int HTTP_BODY_MAXLENGTH = 2; + public const int HTTP_BODY_TRUNCATED = 0; + public const int HTTP_METHOD = 0; + public const int HTTP_MIMETYPE = 1; + public const int HTTP_PRAGMA_NO_CACHE = 6; + public const int HTTP_VERBOSE_THROTTLE = 4; + public const int HTTP_VERIFY_CERT = 3; + + public const int HORIZONTAL = 1; + + public const int INVENTORY_ALL = -1; + public const int INVENTORY_NONE = -1; + public const int INVENTORY_TEXTURE = 0; + public const int INVENTORY_SOUND = 1; + public const int INVENTORY_LANDMARK = 3; + public const int INVENTORY_CLOTHING = 5; + public const int INVENTORY_OBJECT = 6; + public const int INVENTORY_NOTECARD = 7; + public const int INVENTORY_SCRIPT = 10; + public const int INVENTORY_BODYPART = 13; + public const int INVENTORY_ANIMATION = 20; + public const int INVENTORY_GESTURE = 21; + + public const int JSON_APPEND = -1; + public const string JSON_ARRAY = "\uFDD2"; + public const string JSON_DELETE = "\uFDD8"; + public const string JSON_FALSE = "\uFDD7"; + public const string JSON_INVALID = "\uFDD0"; + public const string JSON_NULL = "\uFDD5"; + public const string JSON_NUMBER = "\uFDD3"; + public const string JSON_OBJECT = "\uFDD1"; + public const string JSON_STRING = "\uFDD4"; + public const string JSON_TRUE = "\uFDD6"; + + public const int KFM_CMD_PAUSE = 2; + public const int KFM_CMD_PLAY = 0; + public const int KFM_CMD_STOP = 1; + public const int KFM_COMMAND = 0; + public const int KFM_DATA = 2; + public const int KFM_FORWARD = 0; + public const int KFM_LOOP = 1; + public const int KFM_MODE = 1; + public const int KFM_PING_PONG = 2; + public const int KFM_REVERSE = 2; + public const int KFM_ROTATION = 1; + public const int KFM_TRANSLATION = 2; + + public const int LAND_LEVEL = 0; + public const int LAND_RAISE = 1; + public const int LAND_LOWER = 2; + public const int LAND_SMOOTH = 3; + public const int LAND_NOISE = 4; + public const int LAND_REVERT = 5; + + public const int LAND_LARGE_BRUSH = 3; + public const int LAND_MEDIUM_BRUSH = 2; + public const int LAND_SMALL_BRUSH = 1; + + public const int LINK_ROOT = 1; + public const int LINK_SET = -1; + public const int LINK_ALL_OTHERS = -2; + public const int LINK_ALL_CHILDREN = -3; + public const int LINK_THIS = -4; + + public const int LIST_STAT_RANGE = 0; + public const int LIST_STAT_MIN = 1; + public const int LIST_STAT_MAX = 2; + public const int LIST_STAT_MEAN = 3; + public const int LIST_STAT_MEDIAN = 4; + public const int LIST_STAT_STD_DEV = 5; + public const int LIST_STAT_SUM = 6; + public const int LIST_STAT_SUM_SQUARES = 7; + public const int LIST_STAT_NUM_COUNT = 8; + public const int LIST_STAT_GEOMETRIC_MEAN = 9; + + public const int MASK_BASE = 0; + public const int MASK_EVERYONE = 3; + public const int MASK_GROUP = 2; + public const int MASK_NEXT = 4; + public const int MASK_OWNER = 1; + + public const int OBJECT_ATTACHED_POINT = 19; + public const int OBJECT_CHARACTER_TIME = 17; + public const int OBJECT_NAME = 1; + public const int OBJECT_DESC = 2; + public const int OBJECT_POS = 3; + public const int OBJECT_ROOT = 18; + public const int OBJECT_ROT = 4; + public const int OBJECT_VELOCITY = 5; + public const int OBJECT_OWNER = 6; + public const int OBJECT_PATHFINDING_TYPE = 20; + public const int OBJECT_GROUP = 7; + public const int OBJECT_CREATOR = 8; + public const int OBJECT_PHYSICS = 21; + public const int OBJECT_PHANTOM = 22; + public const int OBJECT_TEMP_ON_REZ = 23; + + public const int OBJECT_STREAMING_COST = 15; + public const int OBJECT_PHYSICS_COST = 16; + public const int OBJECT_SERVER_COST = 14; + public const int OBJECT_PRIM_EQUIVALENCE = 13; + + public const int OBJECT_RUNNING_SCRIPT_COUNT = 9; + public const int OBJECT_SCRIPT_MEMORY = 11; + public const int OBJECT_SCRIPT_TIME = 12; + public const int OBJECT_TOTAL_SCRIPT_COUNT = 10; + public const int OBJECT_UNKNOWN_DETAIL = -1; + + public const int OPT_AVATAR = 1; + public const int OPT_CHARACTER = 2; + public const int OPT_EXCLUSION_VOLUME = 6; + public const int OPT_LEGACY_LINKSET = 0; + public const int OPT_MATERIAL_VOLUME = 5; + public const int OPT_OTHER = -1; + public const int OPT_STATIC_OBSTACLE = 4; + public const int OPT_WALKABLE = 3; + + public const int OBJECT_RETURN_PARCEL = 1; + public const int OBJECT_RETURN_PARCEL_OWNER = 2; + public const int OBJECT_RETURN_REGION = 4; + + public const int PARCEL_COUNT_TOTAL = 0; + public const int PARCEL_COUNT_OWNER = 1; + public const int PARCEL_COUNT_GROUP = 2; + public const int PARCEL_COUNT_OTHER = 3; + public const int PARCEL_COUNT_SELECTED = 4; + public const int PARCEL_COUNT_TEMP = 5; + + public const int PARCEL_DETAILS_AREA = 4; + public const int PARCEL_DETAILS_DESC = 1; + public const int PARCEL_DETAILS_GROUP = 3; + public const int PARCEL_DETAILS_ID = 5; + public const int PARCEL_DETAILS_NAME = 0; + public const int PARCEL_DETAILS_OWNER = 2; + public const int PARCEL_DETAILS_SEE_AVATARS = 6; + + public const int PARCEL_FLAG_ALLOW_FLY = 0x0000001; + public const int PARCEL_FLAG_ALLOW_SCRIPTS = 0x0000002; + public const int PARCEL_FLAG_ALLOW_LANDMARK = 0x0000008; + public const int PARCEL_FLAG_ALLOW_TERRAFORM = 0x0000010; + public const int PARCEL_FLAG_ALLOW_DAMAGE = 0x0000020; + public const int PARCEL_FLAG_ALLOW_CREATE_OBJECTS = 0x0000040; + public const int PARCEL_FLAG_USE_ACCESS_GROUP = 0x0000100; + public const int PARCEL_FLAG_USE_ACCESS_LIST = 0x0000200; + public const int PARCEL_FLAG_USE_BAN_LIST = 0x0000400; + public const int PARCEL_FLAG_USE_LAND_PASS_LIST = 0x0000800; + public const int PARCEL_FLAG_LOCAL_SOUND_ONLY = 0x0008000; + public const int PARCEL_FLAG_RESTRICT_PUSHOBJECT = 0x0200000; + public const int PARCEL_FLAG_ALLOW_GROUP_SCRIPTS = 0x2000000; + + public const int PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS = 0x4000000; + public const int PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY = 0x8000000; + public const int PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY = 0x10000000; + + public const int PARCEL_MEDIA_COMMAND_STOP = 0; + public const int PARCEL_MEDIA_COMMAND_PAUSE = 1; + public const int PARCEL_MEDIA_COMMAND_PLAY = 2; + public const int PARCEL_MEDIA_COMMAND_LOOP = 3; + public const int PARCEL_MEDIA_COMMAND_TEXTURE = 4; + public const int PARCEL_MEDIA_COMMAND_URL = 5; + public const int PARCEL_MEDIA_COMMAND_TIME = 6; + public const int PARCEL_MEDIA_COMMAND_AGENT = 7; + public const int PARCEL_MEDIA_COMMAND_UNLOAD = 8; + public const int PARCEL_MEDIA_COMMAND_AUTO_ALIGN = 9; + + public const int PARCEL_MEDIA_COMMAND_TYPE = 10; + public const int PARCEL_MEDIA_COMMAND_SIZE = 11; + public const int PARCEL_MEDIA_COMMAND_DESC = 12; + public const int PARCEL_MEDIA_COMMAND_LOOP_SET = 13; + + public const int PAY_DEFAULT = -2; + public const int PAY_HIDE = -1; + + public const int PAYMENT_INFO_ON_FILE = 1; + public const int PAYMENT_INFO_USED = 2; + + public const int PERM_ALL = 2147483647; + public const int PERM_COPY = 32768; + public const int PERM_MODIFY = 16384; + public const int PERM_MOVE = 524288; + public const int PERM_TRANSFER = 8192; + + public const int PERMISSION_DEBIT = 2; + public const int PERMISSION_TAKE_CONTROLS = 4; + public const int PERMISSION_REMAP_CONTROLS = 8; + public const int PERMISSION_TRIGGER_ANIMATION = 16; + public const int PERMISSION_ATTACH = 32; + public const int PERMISSION_RELEASE_OWNERSHIP = 64; + public const int PERMISSION_CHANGE_LINKS = 128; + public const int PERMISSION_CHANGE_JOINTS = 256; + public const int PERMISSION_CHANGE_PERMISSIONS = 512; + public const int PERMISSION_CONTROL_CAMERA = 2048; + public const int PERMISSION_OVERRIDE_ANIMATIONS = 0x8000; + public const int PERMISSION_TRACK_CAMERA = 1024; + public const int PERMISSION_RETURN_OBJECTS = 65536; + + public const int PRIM_BUMP_BARK = 4; + public const int PRIM_BUMP_BLOBS = 12; + public const int PRIM_BUMP_BRICKS = 5; + public const int PRIM_BUMP_BRIGHT = 1; + public const int PRIM_BUMP_CHECKER = 6; + public const int PRIM_BUMP_CONCRETE = 7; + public const int PRIM_BUMP_DARK = 2; + public const int PRIM_BUMP_DISKS = 10; + public const int PRIM_BUMP_GRAVEL = 11; + public const int PRIM_BUMP_LARGETILE = 14; + public const int PRIM_BUMP_NONE = 0; + public const int PRIM_BUMP_SHINY = 19; + public const int PRIM_BUMP_SIDING = 13; + public const int PRIM_BUMP_STONE = 9; + public const int PRIM_BUMP_STUCCO = 15; + public const int PRIM_BUMP_SUCTION = 16; + public const int PRIM_BUMP_TILE = 8; + public const int PRIM_BUMP_WEAVE = 17; + public const int PRIM_BUMP_WOOD = 3; + + public const int PRIM_CAST_SHADOWS = 24; + public const int PRIM_COLOR = 18; + public const int PRIM_DESC = 28; + public const int PRIM_FLEXIBLE = 21; + public const int PRIM_FULLBRIGHT = 20; + public const int PRIM_HOLE_CIRCLE = 16; + public const int PRIM_HOLE_DEFAULT = 0; + public const int PRIM_HOLE_SQUARE = 32; + public const int PRIM_HOLE_TRIANGLE = 48; + public const int PRIM_LINK_TARGET = 34; + public const int PRIM_MATERIAL = 2; + public const int PRIM_MATERIAL_FLESH = 4; + public const int PRIM_MATERIAL_GLASS = 2; + public const int PRIM_MATERIAL_LIGHT = 7; + public const int PRIM_MATERIAL_METAL = 1; + public const int PRIM_MATERIAL_PLASTIC = 5; + public const int PRIM_MATERIAL_RUBBER = 6; + public const int PRIM_MATERIAL_STONE = 0; + public const int PRIM_MATERIAL_WOOD = 3; + + public const int PRIM_MEDIA_ALT_IMAGE_ENABLE = 0; + public const int PRIM_MEDIA_AUTO_LOOP = 4; + public const int PRIM_MEDIA_AUTO_PLAY = 5; + public const int PRIM_MEDIA_AUTO_SCALE = 6; + public const int PRIM_MEDIA_AUTO_ZOOM = 7; + public const int PRIM_MEDIA_CONTROLS = 1; + public const int PRIM_MEDIA_CONTROLS_MINI = 1; + public const int PRIM_MEDIA_CONTROLS_STANDARD = 0; + public const int PRIM_MEDIA_CURRENT_URL = 2; + public const int PRIM_MEDIA_FIRST_CLICK_INTERACT = 8; + public const int PRIM_MEDIA_HEIGHT_PIXELS = 10; + public const int PRIM_MEDIA_HOME_URL = 3; + public const int PRIM_MEDIA_PERM_ANYONE = 4; + public const int PRIM_MEDIA_PERM_GROUP = 2; + public const int PRIM_MEDIA_PERM_NONE = 0; + public const int PRIM_MEDIA_PERM_OWNER = 1; + public const int PRIM_MEDIA_PERMS_CONTROL = 14; + public const int PRIM_MEDIA_PERMS_INTERACT = 13; + public const int PRIM_MEDIA_WHITELIST = 12; + public const int PRIM_MEDIA_WHITELIST_ENABLE = 11; + public const int PRIM_MEDIA_WIDTH_PIXELS = 9; + + public const int PRIM_NAME = 27; + public const int PRIM_OMEGA = 32; + public const int PRIM_PHANTOM = 5; + public const int PRIM_PHYSICS = 3; + public const int PRIM_PHYSICS_MATERIAL = 31; + public const int PRIM_PHYSICS_SHAPE_CONVEX = 2; + public const int PRIM_PHYSICS_SHAPE_NONE = 1; + public const int PRIM_PHYSICS_SHAPE_PRIM = 0; + public const int PRIM_PHYSICS_SHAPE_TYPE = 30; + public const int PRIM_POINT_LIGHT = 23; + public const int PRIM_POSITION = 6; + public const int PRIM_POS_LOCAL = 33; + public const int PRIM_ROTATION = 8; + public const int PRIM_ROT_LOCAL = 29; + public const int PRIM_SCULPT_FLAG_INVERT = 64; + public const int PRIM_SCULPT_FLAG_MIRROR = 128; + public const int PRIM_SHINY_HIGH = 3; + public const int PRIM_SHINY_LOW = 1; + public const int PRIM_SHINY_MEDIUM = 2; + public const int PRIM_SHINY_NONE = 0; + public const int PRIM_SIZE = 7; + public const int PRIM_SLICE = 35; + public const int PRIM_TEMP_ON_REZ = 4; + public const int PRIM_TEXGEN = 22; + public const int PRIM_TEXGEN_DEFAULT = 0; + public const int PRIM_TEXGEN_PLANAR = 1; + public const int PRIM_TEXT = 26; + public const int PRIM_TEXTURE = 17; + public const int PRIM_TYPE = 9; + + public const int PRIM_TYPE_BOX = 0; + public const int PRIM_TYPE_CYLINDER = 1; + public const int PRIM_TYPE_PRISM = 2; + public const int PRIM_TYPE_SPHERE = 3; + public const int PRIM_TYPE_TORUS = 4; + public const int PRIM_TYPE_TUBE = 5; + public const int PRIM_TYPE_RING = 6; + public const int PRIM_TYPE_SCULPT = 7; + + public const int PRIM_GLOW = 25; + + public const int PRIM_SCULPT_TYPE_MASK = 7; + public const int PRIM_SCULPT_TYPE_SPHERE = 1; + public const int PRIM_SCULPT_TYPE_TORUS = 2; + public const int PRIM_SCULPT_TYPE_PLANE = 3; + public const int PRIM_SCULPT_TYPE_CYLINDER = 4; + + public const int PROFILE_NONE = 0; + public const int PROFILE_SCRIPT_MEMORY = 1; + + public const int PSYS_PART_FLAGS = 0; + public const int PSYS_PART_INTERP_COLOR_MASK = 1; + public const int PSYS_PART_INTERP_SCALE_MASK = 2; + public const int PSYS_PART_BOUNCE_MASK = 4; + public const int PSYS_PART_WIND_MASK = 8; + public const int PSYS_PART_FOLLOW_SRC_MASK = 16; + public const int PSYS_PART_FOLLOW_VELOCITY_MASK = 32; + public const int PSYS_PART_TARGET_POS_MASK = 64; + public const int PSYS_PART_TARGET_LINEAR_MASK = 128; + public const int PSYS_PART_EMISSIVE_MASK = 256; + + public const int PSYS_PART_SRC_PATTERN_ANGLE = 0x04; + public const int PSYS_PART_SRC_PATTERN_ANGLE_CONE = 0x08; + public const int PSYS_PART_SRC_PATTERN_DROP = 0x01; + public const int PSYS_PART_SRC_PATTERN_EXPLODE = 0x02; + + public const int PSYS_PART_START_COLOR = 1; + public const int PSYS_PART_START_ALPHA = 2; + public const int PSYS_PART_END_COLOR = 3; + public const int PSYS_PART_END_ALPHA = 4; + public const int PSYS_PART_START_SCALE = 5; + public const int PSYS_PART_END_SCALE = 6; + public const int PSYS_PART_MAX_AGE = 7; + + public const int PSYS_SRC_ACCEL = 8; + public const int PSYS_SRC_PATTERN = 9; + public const int PSYS_SRC_INNERANGLE = 10; + public const int PSYS_SRC_OUTERANGLE = 11; + public const int PSYS_SRC_TEXTURE = 12; + public const int PSYS_SRC_BURST_RATE = 13; + public const int PSYS_SRC_BURST_PART_COUNT = 15; + public const int PSYS_SRC_BURST_RADIUS = 16; + public const int PSYS_SRC_BURST_SPEED_MIN = 17; + public const int PSYS_SRC_BURST_SPEED_MAX = 18; + public const int PSYS_SRC_MAX_AGE = 19; + public const int PSYS_SRC_TARGET_KEY = 20; + public const int PSYS_SRC_OMEGA = 21; + public const int PSYS_SRC_ANGLE_BEGIN = 22; + public const int PSYS_SRC_ANGLE_END = 23; + + public const int PSYS_SRC_PATTERN_DROP = 1; + public const int PSYS_SRC_PATTERN_EXPLODE = 2; + public const int PSYS_SRC_PATTERN_ANGLE = 4; + public const int PSYS_SRC_PATTERN_ANGLE_CONE = 8; + public const int PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY = 16; + + public const int PU_EVADE_HIDDEN = 0x07; + public const int PU_EVADE_SPOTTED = 0x08; + public const int PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED = 10; + public const int PU_FAILURE_PARCEL_UNREACHABLE = 11; + public const int PU_FAILURE_INVALID_GOAL = 0x03; + public const int PU_FAILURE_INVALID_START = 0x02; + public const int PU_FAILURE_NO_VALID_DESTINATION = 0x06; + public const int PU_FAILURE_OTHER = 1000000; + public const int PU_FAILURE_TARGET_GONE = 0x05; + public const int PU_FAILURE_UNREACHABLE = 0x04; + public const int PU_GOAL_REACHED = 0x01; + public const int PU_SLOWDOWN_DISTANCE_REACHED = 0x00; + + public const int PUBLIC_CHANNEL = 0; + + public const int PURSUIT_FUZZ_FACTOR = 3; + public const int PURSUIT_INTERCEPT = 4; + public const int PURSUIT_OFFSET = 1; + + public const int RC_DATA_FLAGS = 2; + public const int RC_DETECT_PHANTOM = 1; + public const int RC_GET_LINK_NUM = 4; + public const int RC_GET_NORMAL = 1; + public const int RC_GET_ROOT_KEY = 2; + public const int RC_MAX_HITS = 3; + public const int RC_REJECT_AGENTS = 1; + public const int RC_REJECT_LAND = 8; + public const int RC_REJECT_NONPHYSICAL = 4; + public const int RC_REJECT_PHYSICAL = 2; + public const int RC_REJECT_TYPES = 2; + public const int RCERR_CAST_TIME_EXCEEDED = -3; + public const int RCERR_SIM_PERF_LOW = -2; + public const int RCERR_UNKNOWN = -1; + + public const int REGION_FLAG_ALLOW_DAMAGE = 1; + public const int REGION_FLAG_FIXED_SUN = 16; + public const int REGION_FLAG_BLOCK_TERRAFORM = 64; + public const int REGION_FLAG_SANDBOX = 256; + public const int REGION_FLAG_DISABLE_COLLISIONS = 4096; + public const int REGION_FLAG_DISABLE_PHYSICS = 16384; + public const int REGION_FLAG_BLOCK_FLY = 524288; + public const int REGION_FLAG_ALLOW_DIRECT_TELEPORT = 1048576; + public const int REGION_FLAG_RESTRICT_PUSHOBJECT = 4194304; + + public const int REMOTE_DATA_CHANNEL = 1; + public const int REMOTE_DATA_REQUEST = 2; + public const int REMOTE_DATA_REPLY = 3; + + public const int REQUIRE_LINE_OF_SIGHT = 2; + + public const int SIM_STAT_PCT_CHARS_STEPPED = 0; + + public const int STATUS_PHYSICS = 1; + public const int STATUS_ROTATE_X = 2; + public const int STATUS_ROTATE_Y = 4; + public const int STATUS_ROTATE_Z = 8; + public const int STATUS_PHANTOM = 16; + public const int STATUS_SANDBOX = 32; + public const int STATUS_BLOCK_GRAB = 64; + public const int STATUS_BLOCK_GRAB_OBJECT = 1024; + public const int STATUS_DIE_AT_EDGE = 128; + public const int STATUS_RETURN_AT_EDGE = 256; + public const int STATUS_CAST_SHADOWS = 512; + public const int STATUS_BOUNDS_ERROR = 1002; + public const int STATUS_INTERNAL_ERROR = 1999; + public const int STATUS_MALFORMED_PARAMS = 1000; + public const int STATUS_NOT_FOUND = 1003; + public const int STATUS_NOT_SUPPORTED = 1004; + public const int STATUS_OK = 0; + public const int STATUS_TYPE_MISMATCH = 1001; + public const int STATUS_WHITELIST_FAILED = 2001; + + public const int STRING_TRIM_HEAD = 1; + public const int STRING_TRIM_TAIL = 2; + public const int STRING_TRIM = 3; + + public const string TEXTURE_BLANK = "5748decc-f629-461c-9a36-a35a221fe21f"; + public const string TEXTURE_DEFAULT = "89556747-24cb-43ed-920b-47caed15465f"; + public const string TEXTURE_PLYWOOD = "89556747-24cb-43ed-920b-47caed15465f"; + public const string TEXTURE_TRANSPARENT = "8dcd4a48-2d37-4909-9f78-f7a9eb4ef903"; + public const string TEXTURE_MEDIA = "8b5fec65-8d8d-9dc5-cda8-8fdf2716e361"; + + public const int TOUCH_INVALID_FACE = -1; + + public const int TRAVERSAL_TYPE = 7; + public const int TRAVERSAL_TYPE_FAST = 1; + public const int TRAVERSAL_TYPE_NONE = 2; + public const int TRAVERSAL_TYPE_SLOW = 0; + + public const int TYPE_INTEGER = 1; + public const int TYPE_FLOAT = 2; + public const int TYPE_STRING = 3; + public const int TYPE_KEY = 4; + public const int TYPE_VECTOR = 5; + public const int TYPE_ROTATION = 6; + public const int TYPE_INVALID = 0; + + public const string URL_REQUEST_GRANTED = "URL_REQUEST_GRANTED"; + public const string URL_REQUEST_DENIED = "URL_REQUEST_DENIED"; + + public const int VEHICLE_TYPE_NONE = 0; + + public const int VEHICLE_LINEAR_FRICTION_TIMESCALE = 16; + public const int VEHICLE_ANGULAR_FRICTION_TIMESCALE = 17; + public const int VEHICLE_LINEAR_MOTOR_DIRECTION = 18; + public const int VEHICLE_ANGULAR_MOTOR_DIRECTION = 19; + public const int VEHICLE_LINEAR_MOTOR_OFFSET = 20; + public const int VEHICLE_HOVER_HEIGHT = 24; + public const int VEHICLE_HOVER_EFFICIENCY = 25; + public const int VEHICLE_HOVER_TIMESCALE = 26; + public const int VEHICLE_BUOYANCY = 27; + public const int VEHICLE_LINEAR_DEFLECTION_EFFICIENCY = 28; + public const int VEHICLE_LINEAR_DEFLECTION_TIMESCALE = 29; + public const int VEHICLE_LINEAR_MOTOR_TIMESCALE = 30; + public const int VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE = 31; + public const int VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY = 32; + public const int VEHICLE_ANGULAR_DEFLECTION_TIMESCALE = 33; + public const int VEHICLE_ANGULAR_MOTOR_TIMESCALE = 34; + public const int VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE = 35; + public const int VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY = 36; + public const int VEHICLE_VERTICAL_ATTRACTION_TIMESCALE = 37; + public const int VEHICLE_BANKING_EFFICIENCY = 38; + public const int VEHICLE_BANKING_MIX = 39; + public const int VEHICLE_BANKING_TIMESCALE = 40; + public const int VEHICLE_REFERENCE_FRAME = 44; + + public const int VEHICLE_FLAG_NO_FLY_UP = 1; + + public const int VEHICLE_FLAG_NO_DEFLECTION_UP = 1; + public const int VEHICLE_FLAG_LIMIT_ROLL_ONLY = 2; + public const int VEHICLE_FLAG_HOVER_WATER_ONLY = 4; + public const int VEHICLE_FLAG_HOVER_TERRAIN_ONLY = 8; + public const int VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT = 16; + public const int VEHICLE_FLAG_HOVER_UP_ONLY = 32; + public const int VEHICLE_FLAG_LIMIT_MOTOR_UP = 64; + public const int VEHICLE_FLAG_MOUSELOOK_STEER = 128; + public const int VEHICLE_FLAG_MOUSELOOK_BANK = 256; + public const int VEHICLE_FLAG_CAMERA_DECOUPLED = 512; + + public const int VEHICLE_TYPE_SLED = 1; + public const int VEHICLE_TYPE_CAR = 2; + public const int VEHICLE_TYPE_BOAT = 3; + public const int VEHICLE_TYPE_AIRPLANE = 4; + public const int VEHICLE_TYPE_BALLOON = 5; + + public const int VERTICAL = 0; + + public static readonly Float PI = 3.1415926535897932384626; + public static readonly Float TWO_PI = 2.0 * PI; + public static readonly Float PI_BY_TWO = 1.570796; + public static readonly Float DEG_TO_RAD = 0.017453; + public static readonly Float RAD_TO_DEG = 57.295780; + public static readonly Float SQRT2 = 1.414214; + + public static readonly key NULL_KEY = key.NULL_KEY; + public static readonly vector TOUCH_INVALID_TEXCOORD = new vector(-1.0, -1.0, 0.0); + public static readonly vector TOUCH_INVALID_VECTOR = new vector(0.0, 0.0, 0.0); + public static readonly rotation ZERO_ROTATION = rotation.ZERO_ROTATION; + public static readonly vector ZERO_VECTOR = vector.ZERO_VECTOR; + } +} diff --git a/trunk/SecondLife/LSL_Events.cs b/source/SecondLife/LSL_Events.cs similarity index 97% rename from trunk/SecondLife/LSL_Events.cs rename to source/SecondLife/LSL_Events.cs index c9ccec8..b3bf643 100644 --- a/trunk/SecondLife/LSL_Events.cs +++ b/source/SecondLife/LSL_Events.cs @@ -1,128 +1,128 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// LSL_Events.cs -// -// - -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text; - -namespace LSLEditor -{ - /// - /// This part of the SecondLife class contains the Event definitions. - /// - [SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1502:ElementMustNotBeOnSingleLine", Justification = "Reviewed.")] - [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented", Justification = "These are all LSL functions, the documentation is in the LSL Wiki.")] - public partial class SecondLife - { - #region events as virtuals, if one is used, use override - public virtual void at_rot_target(integer iHandle, rotation rTargetRotation, rotation rCurrentRotation) { } - - public virtual void at_target(integer iHandle, vector vTargetPosition, vector vCurrrentPosition) { } - - public virtual void attach(key kAttached) { } - - public virtual void changed(integer iChangedFlags) { } - - public virtual void collision(integer iCollisionCount) { } - - public virtual void collision_end(integer iCollisionCount) { } - - public virtual void collision_start(integer iCollisionCount) { } - - public virtual void control(key kID, integer iLevels, integer iEdges) { } - - public virtual void dataserver(key kRequestID, String sData) { } - - public virtual void email(String sTime, String sAddress, String sSubject, String sBody, integer iRemaining) { } - - public virtual void http_response(key kRequestID, integer iStatus, list lMetadata, String sBody) { } - - public virtual void http_request(key kRequestID, String sMethod, String sBody) { } - - public virtual void land_collision(vector vPosition) { } - - public virtual void land_collision_end(vector vPosition) { } - - public virtual void land_collision_start(vector vPosition) { } - - public virtual void link_message(integer iSenderLinkIndex, integer iNumber, String sText, key kID) { } - - public virtual void listen(integer iChannel, String sName, key kID, String sText) { } - - public virtual void money(key kPayerID, integer iAmount) { } - - public virtual void moving_end() { } - - public virtual void moving_start() { } - - public virtual void no_sensor() { } - - public virtual void not_at_rot_target() { } - - public virtual void not_at_target() { } - - public virtual void object_rez(key kID) { } - - public virtual void on_rez(integer iStartParameter) { } - - public virtual void path_update(integer iType, list lReserved) { } - - public virtual void remote_data(integer iEventType, key kChannelID, key kMessageID, String sSender, integer iData, String sData) { } - - public virtual void run_time_permissions(integer iPermissionsFlags) { } - - public virtual void sensor(integer iSensedCount) { } - - public virtual void state_entry() { } - - public virtual void state_exit() { } - - public virtual void timer() { } - - public virtual void touch(integer iTouchesCount) { } - - public virtual void touch_end(integer iTouchesCount) { } - - public virtual void touch_start(integer iTouchesCount) { } - - public virtual void transaction_result(key kID, integer iSuccess, String sMessage) { } - #endregion - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// LSL_Events.cs +// +// + +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text; + +namespace LSLEditor +{ + /// + /// This part of the SecondLife class contains the Event definitions. + /// + [SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1502:ElementMustNotBeOnSingleLine", Justification = "Reviewed.")] + [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented", Justification = "These are all LSL functions, the documentation is in the LSL Wiki.")] + public partial class SecondLife + { + #region events as virtuals, if one is used, use override + public virtual void at_rot_target(integer iHandle, rotation rTargetRotation, rotation rCurrentRotation) { } + + public virtual void at_target(integer iHandle, vector vTargetPosition, vector vCurrrentPosition) { } + + public virtual void attach(key kAttached) { } + + public virtual void changed(integer iChangedFlags) { } + + public virtual void collision(integer iCollisionCount) { } + + public virtual void collision_end(integer iCollisionCount) { } + + public virtual void collision_start(integer iCollisionCount) { } + + public virtual void control(key kID, integer iLevels, integer iEdges) { } + + public virtual void dataserver(key kRequestID, String sData) { } + + public virtual void email(String sTime, String sAddress, String sSubject, String sBody, integer iRemaining) { } + + public virtual void http_response(key kRequestID, integer iStatus, list lMetadata, String sBody) { } + + public virtual void http_request(key kRequestID, String sMethod, String sBody) { } + + public virtual void land_collision(vector vPosition) { } + + public virtual void land_collision_end(vector vPosition) { } + + public virtual void land_collision_start(vector vPosition) { } + + public virtual void link_message(integer iSenderLinkIndex, integer iNumber, String sText, key kID) { } + + public virtual void listen(integer iChannel, String sName, key kID, String sText) { } + + public virtual void money(key kPayerID, integer iAmount) { } + + public virtual void moving_end() { } + + public virtual void moving_start() { } + + public virtual void no_sensor() { } + + public virtual void not_at_rot_target() { } + + public virtual void not_at_target() { } + + public virtual void object_rez(key kID) { } + + public virtual void on_rez(integer iStartParameter) { } + + public virtual void path_update(integer iType, list lReserved) { } + + public virtual void remote_data(integer iEventType, key kChannelID, key kMessageID, String sSender, integer iData, String sData) { } + + public virtual void run_time_permissions(integer iPermissionsFlags) { } + + public virtual void sensor(integer iSensedCount) { } + + public virtual void state_entry() { } + + public virtual void state_exit() { } + + public virtual void timer() { } + + public virtual void touch(integer iTouchesCount) { } + + public virtual void touch_end(integer iTouchesCount) { } + + public virtual void touch_start(integer iTouchesCount) { } + + public virtual void transaction_result(key kID, integer iSuccess, String sMessage) { } + #endregion + } +} diff --git a/trunk/SecondLife/LSL_Functions.cs b/source/SecondLife/LSL_Functions.cs similarity index 96% rename from trunk/SecondLife/LSL_Functions.cs rename to source/SecondLife/LSL_Functions.cs index b5c39a6..6ec40dc 100644 --- a/trunk/SecondLife/LSL_Functions.cs +++ b/source/SecondLife/LSL_Functions.cs @@ -1,3402 +1,3402 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// LSL_Functions.cs -// -// - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text; - -namespace LSLEditor -{ - /// - /// This part of the SecondLife class contains the LSL function definitions. - /// - [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented", Justification = "These are all LSL functions, the documentation is in the LSL Wiki.")] - public partial class SecondLife - { - public integer llAbs(integer fValue) - { - int intA = (int)Math.Abs((long)fValue); - Verbose("llAbs({0})={1}", fValue, intA); - return intA; - } - - public Float llAcos(Float fValue) - { - double dblA = Math.Acos(fValue); - Verbose("llAcos({0})={1}", fValue, dblA); - return dblA; - } - - public void llAddToLandBanList(key kID, Float fHours) - { - Verbose("llAddToLandBanList({0}, {1})", kID, fHours); - if (htLandBanList.ContainsKey(kID)) { - htLandBanList.Remove(kID); - } - htLandBanList.Add(kID, fHours); - } - - public void llAddToLandPassList(key kID, Float fHours) - { - Verbose("llAddToLandPassList({0}, {1})", kID, fHours); - if (htLandPassList.ContainsKey(kID)) { - htLandPassList.Remove(kID); - } - htLandPassList.Add(kID, fHours); - } - - public void llAdjustSoundVolume(Float fVolume) - { - Verbose("llAdjustSoundVolume({0}), fVolume"); - this.fVolume = fVolume; - } - - public void llAllowInventoryDrop(integer iAllowDrop) - { - Verbose("llAllowInventoryDrop({0})", iAllowDrop); - blnAllowDrop = (Boolean)iAllowDrop; - } - - public Float llAngleBetween(rotation a, rotation b) - { - Float fResult = 0.0F; - rotation r = b / a; // calculate the rotation between the two arguments as quaternion - double s2 = r.s * r.s; // square of the s-element - double v2 = (r.x * r.x) + (r.y * r.y) + (r.z * r.z); // sum of the squares of the v-elements - - if (s2 < v2) { // compare the s-component to the v-component - fResult = 2.0 * Math.Acos(Math.Sqrt(s2 / (s2 + v2))); // use arccos if the v-component is dominant - } else if (v2 != 0) { // make sure the v-component is non-zero - fResult = 2.0 * Math.Asin(Math.Sqrt(v2 / (s2 + v2))); // use arcsin if the s-component is dominant - } - return fResult; // one or both arguments are scaled too small to be meaningful, or the values are the same, so return zero - // implementation taken from LSL Portal. http://wiki.secondlife.com/w/index.php?title=LlAngleBetween - } - - public void llApplyImpulse(vector vForce, integer iLocal) - { - Verbose("llApplyImpulse({0}, {1}", vForce, iLocal); - } - - public void llApplyRotationalImpulse(vector vForce, integer iLocal) - { - Verbose("llApplyRotationalImpulse({0}, {1})", vForce, iLocal); - } - - public Float llAsin(Float fValue) - { - double dblA = Math.Asin(fValue); - Verbose("llAsin({0})={1}", fValue, dblA); - return dblA; - } - - public Float llAtan2(Float y, Float x) - { - double dblA = Math.Atan2(y, x); - Verbose("llAtan2({0}, {1})={2}", y, x, dblA); - return dblA; - } - - public void llAttachToAvatar(integer iAttachPoint) - { - Verbose("llAttachToAvatar({0})", iAttachPoint); - } - - public void llAttachToAvatarTemp(integer iAttachPoint) - { - Verbose("llAttachToAvatarTemp({0})", iAttachPoint); - } - - public key llAvatarOnLinkSitTarget(integer iLinkIndex) - { - key kLinkUUID = new key(Guid.NewGuid()); - Verbose("llAvatarOnLinkSitTarget({0}))={1}", iLinkIndex, kLinkUUID); - return kLinkUUID; - } - - public key llAvatarOnSitTarget() - { - key kLinkUUID = new key(Guid.NewGuid()); - Verbose("llAvatarOnSitTarget()={0}", kLinkUUID); - return kLinkUUID; - } - - public rotation llAxes2Rot(vector vForward, vector vLeft, vector vUp) - { - rotation rRot = rotation.ZERO_ROTATION; - Verbose("llAxes2Rot({0}, {1}, {2})={3}", vForward, vLeft, +vUp, rRot); - return rRot; - } - - public rotation llAxisAngle2Rot(vector vAxis, Float fAngle) - { - vector vUnitAxis = llVecNorm(vAxis); - double dSineHalfAngle = Math.Sin(fAngle / 2); - double dCosineHalfAngle = Math.Cos(fAngle / 2); - - rotation rResult = new rotation( - dSineHalfAngle * vUnitAxis.x, - dSineHalfAngle * vUnitAxis.y, - dSineHalfAngle * vUnitAxis.z, - dCosineHalfAngle); - - Verbose("llAxisAngle2Rot({0}, {1})={2}", vAxis, fAngle, rResult); - return rResult; - } - - public integer llBase64ToInteger(String sString) - { - int iResult; - - try { - string s = sString; - byte[] data = new byte[4]; - - if (s.Length > 1) { - data[3] = (byte)(LookupBase64(s, 0) << 2); - data[3] |= (byte)(LookupBase64(s, 1) >> 4); - } - - if (s.Length > 2) { - data[2] = (byte)((LookupBase64(s, 1) & 0xf) << 4); - data[2] |= (byte)(LookupBase64(s, 2) >> 2); - } - - if (s.Length > 3) { - data[1] = (byte)((LookupBase64(s, 2) & 0x7) << 6); - data[1] |= (byte)LookupBase64(s, 3); - } - - if (s.Length > 5) { - data[0] = (byte)(LookupBase64(s, 4) << 2); - data[0] |= (byte)(LookupBase64(s, 5) >> 4); - } - - iResult = BitConverter.ToInt32(data, 0); - - // 0 12 34 56 - // 1 78 12 34 - // 2 56 78 12 - // 3 34 56 78 - - // 4 12 34 56 - // 5 78 12 34 - // 6 56 78 12 - // 7 34 56 78 - } catch { - iResult = (new Random()).Next(); - } - Verbose(@"llBase64ToInteger(""{0}"")={1}", sString, iResult); - return iResult; - } - - public String llBase64ToString(String sString) - { - string sResult = Base64ToString(sString.ToString()); - Verbose(@"llBase64ToString(""{0}"")=""{1}""", sString, sResult); - return sResult; - } - - public void llBreakAllLinks() - { - host.llBreakAllLinks(); - Verbose("llBreakAllLinks()"); - } - - public void llBreakLink(integer iLinkIndex) - { - host.llBreakLink(iLinkIndex); - Verbose("llBreakLink({0})", iLinkIndex); - } - - public list llCSV2List(String sString) - { - string sSource = sString; - list lResult = new list(); - StringBuilder sb = new StringBuilder(); - int intWithinAngelBracket = 0; - for (int intI = 0; intI < sSource.Length; intI++) { - char chrC = sSource[intI]; - if (chrC == '<') { - intWithinAngelBracket++; - } else if (chrC == '>') { - intWithinAngelBracket--; - } - - if (intWithinAngelBracket == 0 && chrC == ',') { - lResult.Add(sb.ToString()); - sb = new StringBuilder(); - } else { - sb.Append(sSource[intI]); - } - } - - // dont forget the last one - lResult.Add(sb.ToString()); - - // remove the first space, if any - for (int intI = 0; intI < lResult.Count; intI++) { - string strValue = lResult[intI].ToString(); - if (strValue == "") { - continue; - } - if (strValue[0] == ' ') { - lResult[intI] = strValue.Substring(1); - } - } - - Verbose(@"llCSV2List(""{0}"")={1}", sSource, lResult.ToVerboseString()); - - return lResult; - } - - public list llCastRay(vector vStart, vector vEnd, list lOptions) - { - list lResult = new list(); - Verbose("llCastRay({0}, {1}, {2})={3}", vStart, vEnd, lOptions.ToVerboseString(), lResult.ToVerboseString()); - return lResult; - } - - public integer llCeil(Float fValue) - { - int intA = (int)Math.Ceiling(fValue); - Verbose("llCeiling({0})={1}", fValue, intA); - return intA; - } - - public void llClearCameraParams() - { - Verbose("llClearCameraParams()"); - } - - public integer llClearLinkMedia(integer iLink, integer iFace) - { - Verbose("llClearLinkMedia({0}, {1})={2}", iLink, iFace, true); - return true; - } - - public integer llClearPrimMedia(integer iFace) - { - integer iResult = 0; - Verbose("llClearPrimMedia({0})={1}", iFace, iResult); - return iResult; - } - - public void llCloseRemoteDataChannel(key kChannel) - { - host.llCloseRemoteDataChannel(kChannel); - Verbose("llCloseRemoteDataChannel({0})", kChannel); - } - - public Float llCloud(vector vOffset) - { - Float fResult = 0.0F; - Verbose("llCloud({0})={1}", vOffset, fResult); - return fResult; - } - - public void llCollisionFilter(String sName, key kID, integer iAccept) - { - Verbose(@"llCollisionFilter(""{0}"", {1}, {2})", sName, kID, iAccept); - } - - public void llCollisionSound(String sImpactSound, Float fImpactVolume) - { - Verbose(@"llCollisionSound(""{0}"", {1})", sImpactSound, +fImpactVolume); - } - - public void llCollisionSprite(String sImpactSprite) - { - Verbose(@"llCollisionSprite(""{0}"")", sImpactSprite); - } - - public Float llCos(Float fTheta) - { - double dblA = Math.Cos(fTheta); - Verbose("llCos({0})={1}", fTheta, dblA); - return dblA; - } - - public void llCreateCharacter(list lOptions) - { - Verbose("llCreateCharacter({0})", lOptions.ToVerboseString()); - } - - public void llCreateLink(key kID, integer iSimulator) - { - Verbose("llCreateLink({0}, {1})", kID, iSimulator); - } - - public void llDeleteCharacter() - { - Verbose("llDeleteCharacter()"); - } - - public list llDeleteSubList(list lSource, integer iStart, integer iEnd) - { - int intLength = lSource.Count; - - int start = iStart; - int end = iEnd; - - list src = new list(lSource); - - if (CorrectIt(intLength, ref start, ref end)) { - if (start <= end) { - for (int intI = start; intI <= end; intI++) { - src[intI] = null; - } - } else { // excluding - for (int intI = 0; intI <= end; intI++) { - src[intI] = null; - } - for (int intI = start; intI < intLength; intI++) { - src[intI] = null; - } - } - } - list lResult = new list(); - for (int intI = 0; intI < src.Count; intI++) { - if (src[intI] != null) { - lResult.Add(src[intI]); - } - } - Verbose(string.Format("llDeleteSubList({0}, {1}, {2})={3}", lSource.ToVerboseString(), iStart, iEnd, lResult.ToVerboseString())); - return lResult; - } - - public String llDeleteSubString(String sSource, integer iStart, integer iEnd) - { - char[] src = sSource.ToString().ToCharArray(); - int start = iStart; - int end = iEnd; - - int intLength = src.Length; - - if (CorrectIt(intLength, ref start, ref end)) { - if (start <= end) { - for (int intI = start; intI <= end; intI++) { - src[intI] = '\0'; - } - } else { // excluding - for (int intI = 0; intI <= end; intI++) { - src[intI] = '\0'; - } - for (int intI = start; intI < intLength; intI++) { - src[intI] = '\0'; - } - } - } - StringBuilder result = new StringBuilder(); - for (int intI = 0; intI < src.Length; intI++) { - if (src[intI] != '\0') { - result.Append(src[intI]); - } - } - - Verbose(string.Format(@"llDeleteSubString(""{0}"", {1}, {2})=""{3}""", sSource, iStart, iEnd, result)); - return result.ToString(); - } - - public void llDetachFromAvatar() - { - Verbose("llDetachFromAvatar()"); - } - - public vector llDetectedGrab(integer iIndex) - { - vector vCoords = vector.ZERO_VECTOR; - Verbose("llDetectedGrab({0})={1}", iIndex, vCoords); - return vCoords; - } - - public integer llDetectedGroup(integer iIndex) - { - integer iDetected = 0; - Verbose("llDetectedGroup({0})={1}", iIndex, iDetected); - return iDetected; - } - - public key llDetectedKey(integer iIndex) - { - key kID = new key(Properties.Settings.Default.AvatarKey); - Verbose("llDetectedKey({0})={1}", iIndex, kID); - return kID; - } - - public integer llDetectedLinkNumber(integer iLinkIndex) - { - integer iDetected = 0; - Verbose("llDetectedLinkNumber({0})={1}", iLinkIndex, iDetected); - return iDetected; - } - - public String llDetectedName(integer iIndex) - { - string sResult = Properties.Settings.Default.AvatarName; - Verbose(@"llDetectedName({0})=""{1}""", iIndex, sResult); - return sResult; - } - - public key llDetectedOwner(integer iIndex) - { - key kID = new key(Properties.Settings.Default.AvatarKey); - Verbose("llDetectedOwner({0})={1}", iIndex, kID); - return kID; - } - - public vector llDetectedPos(integer iIndex) - { - vector vCoords = vector.ZERO_VECTOR; - Verbose("llDetectedPos({0})={1}", iIndex, vCoords); - return vCoords; - } - - public rotation llDetectedRot(integer iIndex) - { - rotation rRotation = rotation.ZERO_ROTATION; - Verbose("llDetectedRot({0})={1}", iIndex, rRotation); - return rRotation; - } - - public vector llDetectedTouchBinormal(integer iIndex) - { - vector vCoords = new vector(); - Verbose("llDetectedTouchBinormal({0})={1}", iIndex, vCoords); - return vCoords; - } - - public integer llDetectedTouchFace(integer iIndex) - { - integer iFace = 0; - Verbose("llDetectedTouchFace({0})={1}", iIndex, iFace); - return iFace; - } - - public vector llDetectedTouchNormal(integer iIndex) - { - vector vNormal = new vector(); - Verbose("llDetectedTouchNormal({0})={1}", iIndex, vNormal); - return vNormal; - } - - public vector llDetectedTouchPos(integer iIndex) - { - vector vCoords = vector.ZERO_VECTOR; - Verbose("llDetectedTouchPos({0})={1}", iIndex, vCoords); - return vCoords; - } - - public vector llDetectedTouchST(integer iIndex) - { - vector vCoords = vector.ZERO_VECTOR; - Verbose("llDetectedTouchST({0})={1}", iIndex, vCoords); - return vCoords; - } - - public vector llDetectedTouchUV(integer iIndex) - { - vector vUV = vector.ZERO_VECTOR; - Verbose("llDetectedTouchUV({0})={1}", iIndex, vUV); - return vUV; - } - - public integer llDetectedType(integer iIndex) - { - integer iResult = AGENT; - Verbose("llDetectedType({0})={1}", iIndex, iResult); - return iResult; - } - - public vector llDetectedVel(integer iIndex) - { - vector vVelocity = vector.ZERO_VECTOR; - Verbose("llDetectedVel({0})={1}", iIndex, vVelocity); - return vVelocity; - } - - public void llDialog(key kID, String sMessage, list lButtons, integer iChannel) - { - Verbose(@"llDialog({0}, ""{1}"", {2}, {3})", kID, sMessage, lButtons.ToVerboseString(), iChannel); - host.llDialog(kID, sMessage, lButtons, iChannel); - } - - public void llDie() - { - Verbose("llDie()"); - host.Die(); - } - - public String llDumpList2String(list lSource, String sSeparator) - { - StringBuilder result = new StringBuilder(); - for (int intI = 0; intI < lSource.Count; intI++) { - if (intI > 0) { - result.Append(sSeparator.ToString()); - } - result.Append(lSource[intI].ToString()); - } - Verbose(@"llDumpList2String({0},""{1}"")=""{2}""", lSource.ToVerboseString(), sSeparator, result.ToString()); - return result.ToString(); - } - - public integer llEdgeOfWorld(vector vPosition, vector vDirection) - { - integer iResult = 0; - Verbose("llEdgeOfWorld({0}, {1})={2}", vPosition, vDirection, iResult); - return iResult; - } - - public void llEjectFromLand(key kID) - { - Verbose("llEjectFromLand({0})", kID); - } - - public void llEmail(String sAddress, String sSubject, String sMessage) - { - Verbose(@"llEmail(""{0}"", ""{1}"", ""{2}"")", sAddress, sSubject, sMessage); - host.Email(sAddress, sSubject, sMessage); - } - - public String llEscapeURL(String sURL) - { - StringBuilder sb = new StringBuilder(); - byte[] data = Encoding.UTF8.GetBytes(sURL.ToString()); - for (int intI = 0; intI < data.Length; intI++) { - byte chrC = data[intI]; - if ((chrC >= 'a' && chrC <= 'z') || (chrC >= 'A' && chrC <= 'Z') || (chrC >= '0' && chrC <= '9')) { - sb.Append((char)chrC); - } else { - sb.AppendFormat("%{0:X2}", (int)chrC); - } - } - Verbose(string.Format(@"EscapeURL(""{0}"")=""{1}""", sURL, sb.ToString())); - return sb.ToString(); - } - - public rotation llEuler2Rot(vector v) - { - v /= 2.0; - double ax = Math.Sin(v.x); - double aw = Math.Cos(v.x); - double by = Math.Sin(v.y); - double bw = Math.Cos(v.y); - double cz = Math.Sin(v.z); - double cw = Math.Cos(v.z); - rotation rRotation = new rotation( - (aw * by * cz) + (ax * bw * cw), - (aw * by * cw) - (ax * bw * cz), - (aw * bw * cz) + (ax * by * cw), - (aw * bw * cw) - (ax * by * cz)); - Verbose("llEuler2Rot({0})={1}", v, rRotation); - return rRotation; - } - - public void llEvade(key kTargetID, list lOptions) - { - Verbose("llEvade({0}, {1})", kTargetID, lOptions); - } - - public void llExecCharacterCmd(integer iCommand, list lOptions) - { - Verbose("llExecCharacterCmd({0}, {1})", iCommand, lOptions.ToVerboseString()); - } - - public Float llFabs(Float fValue) - { - double dblA = Math.Abs(fValue); - Verbose("llFabs({0})={1}", fValue, dblA); - return dblA; - } - - public void llFleeFrom(vector vSource, Float fDistance, list lOptions) - { - Verbose("llFleeFrom({0}, {1}, {2})", vSource, fDistance, lOptions.ToVerboseString()); - } - - public integer llFloor(Float fValue) - { - int intA = (int)Math.Floor(fValue); - Verbose("llFloor({0})={1}", fValue, intA); - return intA; - } - - public void llForceMouselook(integer iMouselook) - { - Verbose("llForceMouselook({0})", iMouselook); - } - - public Float llFrand(Float fMaximum) - { - double dblValue = fMaximum * rdmRandom.NextDouble(); - Verbose("llFrand({0})={1}", fMaximum, dblValue); - return dblValue; - } - - public key llGenerateKey() - { - key kID = new key(Guid.NewGuid()); - Verbose("llGenerateKey()={0}", kID); - return kID; - } - - public vector llGetAccel() - { - vector vAcceleration = vector.ZERO_VECTOR; - Verbose("llGetAccel()={0}", vAcceleration); - return vAcceleration; - } - - public integer llGetAgentInfo(key kID) - { - integer iAgentFlags = 0; - Verbose("llGetAgentInfo({0})={1}", kID, iAgentFlags); - return iAgentFlags; - } - - public String llGetAgentLanguage(key kID) - { - string sLanguageCode = "en-us"; - Verbose(@"llGetAgentLanguage({0})=""{1}""", kID, sLanguageCode); - return sLanguageCode; - } - - public list llGetAgentList(integer iScope, list lOptions) - { - list lAgents = new list(); - Verbose("llGetAgentList({0}, [{1}])={2}", iScope, lOptions, lAgents.ToVerboseString()); - return lAgents; - } - - public vector llGetAgentSize(key kID) - { - vector vAgentSize = vector.ZERO_VECTOR; - Verbose("llGetAgentSize({0})={1}", kID, vAgentSize); - return vAgentSize; - } - - public Float llGetAlpha(integer iFace) - { - Float fOpacity = 1.0F; - Verbose("llGetAlpha({0})={1}", iFace, fOpacity); - return fOpacity; - } - - public Float llGetAndResetTime() - { - // get time - double dblTime = llGetTime(); - Verbose("llGetAndResetTime()=" + dblTime); - - // reset time - llResetTime(); - return dblTime; - } - - public String llGetAnimation(key kID) - { - String sAnimation = ""; - Verbose(@"llGetAnimation({0})=""{1}""", kID, sAnimation); - return sAnimation; - } - - public list llGetAnimationList(key kID) - { - list lAnimationList = new list(); - Verbose("llGetAnimationList({0})={1}", kID, lAnimationList.ToVerboseString()); - return lAnimationList; - } - - public String llGetAnimationOverride(String sAnimationState) - { - String sAnimation = ""; - Verbose(@"llGetAnimationOverride(""{0}"")=""{1}""", sAnimationState, sAnimation); - return sAnimation; - } - - public integer llGetAttached() - { - integer iAttachPoint = 0; - Verbose("llGetAttached()={0}", iAttachPoint); - return iAttachPoint; - } - - public list llGetBoundingBox(key kID) - { - list lBoundingCoords = new list(); - Verbose("llGetBoundingBox({0})={1}", kID, lBoundingCoords.ToVerboseString()); - return lBoundingCoords; - } - - public vector llGetCameraPos() - { - vector vCameraCoords = vector.ZERO_VECTOR; - Verbose("llGetCameraPos()={0}", vCameraCoords); - return vCameraCoords; - } - - public rotation llGetCameraRot() - { - rotation rCameraRotation = rotation.ZERO_ROTATION; - Verbose("llGetCameraRot()={0}", rCameraRotation); - return rCameraRotation; - } - - public vector llGetCenterOfMass() - { - vector vCenterOfMass = vector.ZERO_VECTOR; - Verbose("llGetCenterOfMass()={0}", vCenterOfMass); - return vCenterOfMass; - } - - public list llGetClosestNavPoint(vector lPoint, list lOptions) - { - list lClosetNavPoint = new list(); - Verbose("llGetClosestNavPoint({0}, {1})={2}", lPoint, lOptions.ToVerboseString(), lClosetNavPoint.ToVerboseString()); - return lClosetNavPoint; - } - - public vector llGetColor(integer iFace) - { - vector vColour = vector.ZERO_VECTOR; - Verbose("llGetColor({0})={1}", iFace, vColour); - return vColour; - } - - public key llGetCreator() - { - key kResult = Properties.Settings.Default.AvatarKey; - Verbose("llGetCreator()={0}", kResult); - return kResult; - } - - public String llGetDate() - { - string sResult = DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd"); - Verbose("llGetDate()={0}", sResult); - return sResult; - } - - public string llGetDisplayName(key kAvatarID) - { - string sResult = ""; - Verbose("llGetDisplayName({0})={1}", kAvatarID, sResult); - return sResult; - } - - public Float llGetEnergy() - { - Float fResult = 1.23; - Verbose("llGetEnergy()={0}", fResult); - return fResult; - } - - public string llGetEnv(string sDataRequest) - { - string sResult; - switch (sDataRequest) { - case "sim_channel": - sResult = "Second Life Server"; - break; - case "sim_version": - sResult = "11.11.09.244706"; - break; - default: - sResult = ""; - break; - } - Verbose(@"llGetEnv(""{0}"")=""{1}""", sDataRequest, sResult); - return sResult; - } - - public vector llGetForce() - { - vector vForce = vector.ZERO_VECTOR; - Verbose("llGetForce()={0}", vForce); - return vForce; - } - - public integer llGetFreeMemory() - { - integer iFreeMemory = 16000; - Verbose("llGetFreeMemory()={0}", iFreeMemory); - return iFreeMemory; - } - - public integer llGetFreeURLs() - { - integer iFreeURLs = 0; - Verbose("llGetFreeURLs()={0}", iFreeURLs); - return iFreeURLs; - } - - public Float llGetGMTclock() - { - Float fResult = DateTime.Now.ToUniversalTime().TimeOfDay.TotalSeconds; - Verbose("llGetGMTclock()={0}", fResult); - return fResult; - } - - public vector llGetGeometricCenter() - { - vector vResult = ZERO_VECTOR; - Verbose("llGetGeometricCenter()={0}", vResult); - return vResult; - } - - public String llGetHTTPHeader(key kRequestID, String sDesiredHeader) - { - String sResult = "not-implemented"; - Verbose(@"llGetHTTPHeader({0}, ""{1}"")=""{2}""", kRequestID, sDesiredHeader, sResult); - return sResult; - } - - public key llGetInventoryCreator(String sItem) - { - key kAvatarID = Properties.Settings.Default.AvatarKey; - Verbose(@"llGetInventoryCreator(""{0}"")={1}", sItem, kAvatarID); - return kAvatarID; - } - - public key llGetInventoryKey(String sItemName) - { - key kID = host.GetInventoryKey(sItemName); - Verbose(@"llGetInventoryKey(""{0}"")={1}", sItemName, kID); - return kID; - } - - public String llGetInventoryName(integer iItemType, integer iItemIndex) - { - string sItemName = host.GetInventoryName(iItemType, iItemIndex); - Verbose(@"llGetInventoryName({0}, {1})=""{2}""", iItemType, iItemIndex, sItemName); - return sItemName; - } - - public integer llGetInventoryNumber(integer iType) - { - int iTypeCount = host.GetInventoryNumber(iType); - Verbose("llGetInventoryNumber({0})={1}", iType, iTypeCount); - return iTypeCount; - } - - public integer llGetInventoryPermMask(String sItemName, integer iPermMask) - { - integer iPermissionState = 0; - Verbose(@"llGetInventoryPermMask(""{0}"", {1})={2}", sItemName, iPermMask, iPermissionState); - return iPermissionState; - } - - public integer llGetInventoryType(String sItemName) - { - integer iItemType = host.GetInventoryType(sItemName); - Verbose(@"llGetInventoryType(""{0}"")={1}", sItemName, iItemType); - return iItemType; - } - - public key llGetKey() - { - key kID = host.GetKey(); - Verbose(@"llGetKey()=""{0}""", kID.ToString()); - return kID; - } - - public key llGetLandOwnerAt(vector vPosition) - { - key kAvatarID = new key(Guid.NewGuid()); - Verbose("llGetLandOwnerAt({0})={1}", vPosition, kAvatarID); - return kAvatarID; - } - - public key llGetLinkKey(integer iLinkIndex) - { - key kID = new key(Guid.NewGuid()); - Verbose("llGetLinkKey({0})={1}", iLinkIndex, kID); - return kID; - } - - public list llGetLinkMedia(integer iLinkIndex, integer iFace, list lParameters) - { - list lMediaList = new list(); - Verbose("llGetLinkMedia({0}, {1}, {2})={3}", iLinkIndex, iFace, lParameters.ToVerboseString(), lMediaList.ToVerboseString()); - return lMediaList; - } - - public String llGetLinkName(integer iLinkIndex) - { - String sLinkName = ""; - Verbose(@"llGetLinkName({0})=""{1}""", iLinkIndex, sLinkName); - return sLinkName; - } - - public integer llGetLinkNumber() - { - integer iLinkIndex = 0; - Verbose("llGetLinkNumber()={0}", iLinkIndex); - return iLinkIndex; - } - - public integer llGetLinkNumberOfSides(integer iLinkIndex) - { - integer iSides = 6; - Verbose("llGetLinkNumberOfSides({0})={1}", iLinkIndex, iSides); - return iSides; - } - - public list llGetLinkPrimitiveParams(integer iLinkIndex, list lParametersRequested) - { - list lParametersReturned = new list(); - Verbose("llGetLinkPrimitiveParams({0}, {1})={2}", iLinkIndex, lParametersRequested.ToVerboseString(), lParametersReturned); - return lParametersReturned; - } - - public integer llGetListEntryType(list lSource, integer iIndex) - { - integer iEntryType; - - if (iIndex < 0) { - iIndex = lSource.Count + iIndex; - } - if (iIndex >= lSource.Count || iIndex < 0) { - iEntryType = 0; - } else { - switch (lSource[iIndex].GetType().ToString().Replace("LSLEditor.SecondLife+", "")) { - case "System.Double": - case "Float": - iEntryType = TYPE_FLOAT; - break; - case "System.String": - case "String": - iEntryType = TYPE_STRING; - break; - case "System.Int32": - case "integer": - iEntryType = TYPE_INTEGER; - break; - case "key": - iEntryType = TYPE_KEY; - break; - case "vector": - iEntryType = TYPE_VECTOR; - break; - case "rotation": - iEntryType = TYPE_ROTATION; - break; - default: - iEntryType = TYPE_INVALID; - break; - } - } - Verbose("llGetListEntryType({0}, {1})={2}", lSource.ToVerboseString(), iIndex, iEntryType); - return iEntryType; - } - - public integer llGetListLength(list lSource) - { - integer iLength = lSource.Count; - Verbose("llGetListLength({0})={1}", lSource.ToVerboseString(), iLength); - return iLength; - } - - public vector llGetLocalPos() - { - Verbose("llGetLocalPos()={0}", vPosition); - return vPosition; - } - - public rotation llGetLocalRot() - { - Verbose("llGetLocalRot()={0}", rRotationlocal); - return rRotationlocal; - } - - public Float llGetMass() - { - Float fMass = 1.23; - Verbose("llGetMass()={0}", fMass); - return fMass; - } - - public Float llGetMassMKS() - { - Float fMass = 1.23; - Verbose("llGetMassMKS()={0}", fMass); - return fMass; - } - - public integer llGetMemoryLimit() - { - integer iMaxMemory = 65536; - Verbose("llGetMemoryLimit()={0}", iMaxMemory); - return iMaxMemory; - } - - public void llGetNextEmail(String sAddress, String sSubject) - { - Verbose(@"llGetNextEmail(""{0}"", ""{1}"")", sAddress, sSubject); - } - - public key llGetNotecardLine(String sNoteName, integer iLineIndex) - { - key kID = host.GetNotecardLine(sNoteName, iLineIndex); - Verbose(@"llGetNotecardLine(""{0}"", {1})={2}", sNoteName, iLineIndex, kID); - return kID; - } - - public key llGetNumberOfNotecardLines(String sNoteName) - { - key kID = host.GetNumberOfNotecardLines(sNoteName); - Verbose(@"llGetNumberOfNotecardLines(""{0}"")={1}", sNoteName, kID); - return kID; - } - - public integer llGetNumberOfPrims() - { - integer iPrimCount = 10; - Verbose("llGetNumberOfPrims()={0}", iPrimCount); - return iPrimCount; - } - - public integer llGetNumberOfSides() - { - integer iSideCount = 6; - Verbose("llGetNumberOfSides()={0}", iSideCount); - return iSideCount; - } - - public String llGetObjectDesc() - { - string sDescription = host.GetObjectDescription(); - Verbose(@"llGetObjectDesc()=""{0}""", sDescription); - return sDescription; - } - - public list llGetObjectDetails(key kID, list lObjectFlags) - { - list lObjectDetails = new list(); - for (int intI = 0; intI < lObjectFlags.Count; intI++) { - if (!(lObjectFlags[intI] is integer)) { - continue; - } - switch ((int)(integer)lObjectFlags[intI]) { - case OBJECT_NAME: - lObjectDetails.Add((SecondLife.String)host.GetObjectName(new Guid(kID.guid))); - break; - case OBJECT_DESC: - lObjectDetails.Add((SecondLife.String)host.GetObjectDescription(new Guid(kID.guid))); - break; - case OBJECT_POS: - lObjectDetails.Add(llGetPos()); - break; - case OBJECT_ROT: - lObjectDetails.Add(llGetRot()); - break; - case OBJECT_VELOCITY: - lObjectDetails.Add(llGetVel()); - break; - case OBJECT_OWNER: - lObjectDetails.Add(llGetOwner()); - break; - case OBJECT_GROUP: - lObjectDetails.Add(OBJECT_UNKNOWN_DETAIL); - break; - case OBJECT_CREATOR: - lObjectDetails.Add(llGetCreator()); - break; - default: - lObjectDetails.Add(OBJECT_UNKNOWN_DETAIL); - break; - } - } - Verbose(@"llGetObjectDetails({0}, {1})={2}", kID, lObjectFlags, lObjectDetails); - return lObjectDetails; - } - - public Float llGetObjectMass(key kID) - { - Float fMass = 0.0F; - Verbose("llGetObjectMass({0})={1}", kID, fMass); - return fMass; - } - - public String llGetObjectName() - { - string sObjectName = host.GetObjectName(); - Verbose(@"llGetObjectName()=""{0}""", sObjectName); - return sObjectName; - } - - public integer llGetObjectPermMask(integer iRequestedMask) - { - integer iRetunedMaskState = 0; - Verbose("llGetObjectPermMask({0})={1}", iRequestedMask, iRetunedMaskState); - return iRetunedMaskState; - } - - // added 4 mei 2007 - public integer llGetObjectPrimCount(key kID) - { - integer iPrimCount = 0; - Verbose("llGetObjectPrimCount({0})={1}", kID, iPrimCount); - return iPrimCount; - } - - public vector llGetOmega() - { - vector vOmega = vector.ZERO_VECTOR; - Verbose("llGetOmega()={0}", vOmega); - return vOmega; - } - - public key llGetOwner() - { - key kID = new key(Properties.Settings.Default.AvatarKey); - Verbose("llGetOwner()={0}", kID); - return kID; - } - - public key llGetOwnerKey(key kID) - { - key kAvatarID = llGetOwner(); // This is incorrect, as the owner of this object may not be the owner of kID - Verbose("llGetOwnerKey({0})={1}", kID, kAvatarID); - return kAvatarID; - } - - /* - PARCEL_DETAILS_NAME 0 The name of the parcel. 63 Characters string - PARCEL_DETAILS_DESC 1 The description of the parcel. 127 Characters string - PARCEL_DETAILS_OWNER 2 The parcel owner's key. (36 Characters) key - PARCEL_DETAILS_GROUP 3 The parcel group's key. (36 Characters) key - PARCEL_DETAILS_AREA 4 The parcel's area, in sqm. (5 Characters) integer - */ - public list llGetParcelDetails(vector vPosition, list lRequestedDetails) - { - list lReturnedDetails = new list(); - for (int intI = 0; intI < lRequestedDetails.Count; intI++) { - if (lRequestedDetails[intI] is integer) { - switch ((int)(integer)lRequestedDetails[intI]) { - case PARCEL_DETAILS_NAME: - lReturnedDetails.Add(Properties.Settings.Default.ParcelName); - break; - case PARCEL_DETAILS_DESC: - lReturnedDetails.Add(Properties.Settings.Default.ParcelDescription); - break; - case PARCEL_DETAILS_OWNER: - lReturnedDetails.Add(new key(Properties.Settings.Default.ParcelOwner)); - break; - case PARCEL_DETAILS_GROUP: - lReturnedDetails.Add(new key(Properties.Settings.Default.ParcelGroup)); - break; - case PARCEL_DETAILS_AREA: - lReturnedDetails.Add(new integer(Properties.Settings.Default.ParcelArea)); - break; - case PARCEL_DETAILS_ID: - lReturnedDetails.Add(new integer(Properties.Settings.Default.ParcelID)); - break; - case PARCEL_DETAILS_SEE_AVATARS: - lReturnedDetails.Add(new integer(Properties.Settings.Default.ParcelSeeAvatars)); - break; - default: - break; - } - } - } - Verbose("llGetParcelDetails({0}, {1})={2}", vPosition, lRequestedDetails.ToVerboseString(), lReturnedDetails.ToVerboseString()); - return lReturnedDetails; - } - - public integer llGetParcelFlags(vector vPosition) - { - integer iReturnedFlags = 0; - Verbose("llGetParcelFlags({0})={1}", vPosition, iReturnedFlags); - return iReturnedFlags; - } - - public integer llGetParcelMaxPrims(vector vPosition, integer iSimWide) - { - integer iMaxPrims = 0; - Verbose("llGetParcelMaxPrims({0}, {1})={2}", vPosition, iSimWide, iMaxPrims); - return iMaxPrims; - } - - public string llGetParcelMusicURL() - { - Verbose(@"llGetParcelMaxPrims()=""{0}""", sParcelMusicURL); - return sParcelMusicURL; - } - - public integer llGetParcelPrimCount(vector vPosition, integer iCategory, integer iSimWide) - { - integer iPrimCount = 0; - Verbose("llGetParcelPrimCount({0}, {1}, {2})={3}", vPosition, iCategory, iSimWide, iPrimCount); - return iPrimCount; - } - - public list llGetParcelPrimOwners(vector vPosition) - { - list lOwners = new list(new object[] { Properties.Settings.Default.AvatarKey, 10 }); - Verbose("llGetParcelPrimOwners({0})={1}", vPosition, lOwners); - return lOwners; - } - - public integer llGetPermissions() - { - integer iPermissions = 0; - Verbose("llGetPermissions()={0}", iPermissions); - return iPermissions; - } - - public key llGetPermissionsKey() - { - key kID = key.NULL_KEY; - Verbose("llGetPermissionsKey()={0}", kID); - return kID; - } - - public list llGetPhysicsMaterial() - { - list lMaterials = new list(); - Verbose("llGetPhysicalMaterial()={0}", lMaterials); - return lMaterials; - } - - public vector llGetPos() - { - Verbose("llGetPos()={0}", vPosition); - return vPosition; - } - - public list llGetPrimMediaParams(integer iFace, list lDesiredParams) - { - list lReturnedParams = new list(); - Verbose("llGetPrimMediaParams({0}, {1})={2}", iFace, lDesiredParams.ToVerboseString(), lReturnedParams.ToVerboseString()); - return lReturnedParams; - } - - public list llGetPrimitiveParams(list lDesiredParams) - { - list lReturnedParams = new list(); - Verbose("llGetPrimitiveParams({0})={1}", lDesiredParams.ToVerboseString(), lReturnedParams.ToVerboseString()); - return lReturnedParams; - } - - // 334 - public integer llGetRegionAgentCount() - { - integer iAgentCount = 0; - Verbose("llGetRegionAgentCount()={0}", iAgentCount); - return iAgentCount; - } - - public vector llGetRegionCorner() - { - System.Drawing.Point pRegionCorner = Properties.Settings.Default.RegionCorner; - vector vRegionCorner = new vector(pRegionCorner.X, pRegionCorner.Y, 0); - Verbose("llGetRegionCorner()={0}", vRegionCorner); - return vRegionCorner; - } - - public Float llGetRegionFPS() - { - Float fRegionFPS = Properties.Settings.Default.RegionFPS; - Verbose("llGetRegionFPS()={0}", fRegionFPS); - return fRegionFPS; - } - - public integer llGetRegionFlags() - { - integer iRegionFlags = 0; - Verbose("llGetRegionFlags()={0}", iRegionFlags); - return iRegionFlags; - } - - public String llGetRegionName() - { - String sRegionName = Properties.Settings.Default.RegionName; - Verbose("llGetRegionName()={0}", sRegionName); - return sRegionName; - } - - public Float llGetRegionTimeDilation() - { - Float fTimeDilation = 0.9F; - Verbose("llGetRegionTimeDilation()={0}", fTimeDilation); - return fTimeDilation; - } - - public vector llGetRootPosition() - { - vector vRootPosition = vector.ZERO_VECTOR; - Verbose("llGetRootPosition()={0}", vRootPosition); - return vRootPosition; - } - - public rotation llGetRootRotation() - { - rotation vRootRotation = rotation.ZERO_ROTATION; - Verbose("llGetRootRotation()={0}", vRootRotation); - return vRootRotation; - } - - public rotation llGetRot() - { - Verbose("llGetRot()={0}", rRotation); - return rRotation; - } - - public integer llGetSPMaxMemory() - { - integer iMaxSPMemory = 65536; - Verbose("llGetSPMaxMemory()={0}", iMaxSPMemory); - return iMaxSPMemory; - } - - public vector llGetScale() - { - Verbose("llGetScale()=" + vScale); - return vScale; - } - - public String llGetScriptName() - { - string sScriptName = host.GetScriptName(); - Verbose("llGetScriptName()={0}", sScriptName); - return sScriptName; - } - - public integer llGetScriptState(String sScriptName) - { - integer iScriptState = 0; - Verbose(@"llGetScriptState(""{0}"")={1}", sScriptName, iScriptState); - return iScriptState; - } - - public float llGetSimStats(integer iStatType) - { - float iSimStat = 0.0F; - Verbose("llGetSimStats({0})={1}", iStatType, iSimStat); - return iSimStat; - } - - public String llGetSimulatorHostname() - { - String sSimHostName = ""; - Verbose(@"llGetSimulatorHostname()=""{0}""", sSimHostName); - return sSimHostName; - } - - public integer llGetStartParameter() - { - Verbose("llGetStartParameter()={0}" + iStartParameter); - return iStartParameter; - } - - public list llGetStaticPath(vector vStart, vector vEnd, Float fRadius, list lParameters) - { - list lReturn = new list(); - Verbose("llGetStaticPath({0}, {1}, {2}, {3})={4}", vStart, vEnd, fRadius, lParameters.ToVerboseString(), lReturn.ToVerboseString()); - return lReturn; - } - - public integer llGetStatus(integer iRequestedStatus) - { - integer iStatus = 0; - Verbose("llGetStatus({0})={1}", iRequestedStatus, iStatus); - return iStatus; - } - - public String llGetSubString(String sSource, integer iStart, integer iEnd) - { - string src = sSource; - int start = iStart; - int end = iEnd; - - StringBuilder sResult = new StringBuilder(); - - int intLength = src.Length; - - if (CorrectIt(intLength, ref start, ref end)) { - if (start <= end) { - for (int intI = start; intI <= end; intI++) { - sResult.Append(src[intI]); - } - } else { // excluding - for (int intI = 0; intI <= end; intI++) { - sResult.Append(src[intI]); - } - for (int intI = start; intI < intLength; intI++) { - sResult.Append(src[intI]); - } - } - } - Verbose(string.Format(@"GetSubString(""{0}"", {1}, {2})=""{3}""", sSource, iStart, iEnd, sResult)); - return sResult.ToString(); - } - - public vector llGetSunDirection() - { - vector vSunDirection = vector.ZERO_VECTOR; - Verbose("llGetSunDirection()={0}", vSunDirection); - return vSunDirection; - } - - public String llGetTexture(integer iFace) - { - String sTexture = ""; - Verbose(@"llGetTexture({0})=""{1}""", iFace, sTexture); - return sTexture; - } - - public vector llGetTextureOffset(integer iFace) - { - vector vOffset = vector.ZERO_VECTOR; - Verbose("llGetTextureOffset({0})={1}", iFace, vOffset); - return vOffset; - } - - public Float llGetTextureRot(integer iFace) - { - Float fTextureRot = 0.0; - Verbose("llGetTextureRot({0})={1}", iFace, fTextureRot); - return fTextureRot; - } - - public vector llGetTextureScale(integer iFace) - { - vector vScale = vector.ZERO_VECTOR; - Verbose("llGetTextureScale({0})={1}", iFace, vScale); - return vScale; - } - - public Float llGetTime() - { - TimeSpan span = DateTime.Now.ToUniversalTime() - dtDateTimeScriptStarted; - Verbose("llGetTime()={0}", span.TotalSeconds); - return span.TotalSeconds; - } - - public Float llGetTimeOfDay() - { - // dummy - Float fSeconds = llGetTime(); - Verbose("llGetTimeOfDay()={0}", fSeconds); - return fSeconds; - } - - public string llGetTimestamp() - { - string sTimestamp = DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.ffffffZ", System.Globalization.DateTimeFormatInfo.InvariantInfo); - Verbose(@"llGetTimestamp()=""{0}""", sTimestamp); - return sTimestamp; - } - - public vector llGetTorque() - { - vector vTorque = vector.ZERO_VECTOR; - Verbose("llGetTorque()={0}", vTorque); - return vTorque; - } - - public integer llGetUnixTime() - { - DateTime dtUnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0); - TimeSpan tsSeconds = DateTime.Now.ToUniversalTime() - dtUnixEpoch; - Verbose("llGetUnixTime()={0}", (int)tsSeconds.TotalSeconds); - return (int)tsSeconds.TotalSeconds; - } - - public integer llGetUsedMemory() - { - integer iUsedMemory = 65536; - Verbose("llGetUsedMemory()={0}", iUsedMemory); - return iUsedMemory; - } - - public string llGetUsername(key kAvatarID) - { - // TODO Find a dummy username. - string sUserName = ""; - Verbose(@"llGetUsername({0})=""{1}""", kAvatarID, sUserName); - return sUserName; - } - - public vector llGetVel() - { - vector vVelocity = vector.ZERO_VECTOR; - Verbose("llGetVel()={0}", vVelocity); - return vVelocity; - } - - public Float llGetWallclock() - { - Float fSeconds = (int)DateTime.Now.AddHours(-9.0).TimeOfDay.TotalSeconds; - Verbose("llGetWallclock()={0}", fSeconds); - return fSeconds; - } - - public void llGiveInventory(key kID, String sItemName) - { - Verbose(@"llGiveInventory({0}, ""{1}"")", kID, sItemName); - } - - public void llGiveInventoryList(key kID, String sDirectory, list lInventory) - { - Verbose(@"llGiveInventoryList({0}, ""{1}"", {2})", kID, sDirectory, lInventory.ToVerboseString()); - } - - public integer llGiveMoney(key kAvatarID, integer iAmount) - { - Verbose("llGiveMoney({0}, {1})=0", kAvatarID, iAmount); - return 0; - } - - public Float llGround(vector vOffset) - { - Float fHeight = 25.0; - Verbose("llGround({0})={1}", vOffset, fHeight); - return fHeight; - } - - public vector llGroundContour(vector vOffset) - { - vector vContour = vector.ZERO_VECTOR; - Verbose("llGroundContour({0})={1}", vOffset, vContour); - return vContour; - } - - public vector llGroundNormal(vector vOffset) - { - vector vGroundNormal = new vector(0.0, 0.0, 1.0); - Verbose("llGroundNormal({0})={1}", vOffset, vGroundNormal); - return vGroundNormal; - } - - public void llGroundRepel(Float fHeight, integer iWater, Float fTau) - { - Verbose("llGroundRepel({0}, {1}, {2})", fHeight, iWater, fTau); - } - - public vector llGroundSlope(vector vOffset) - { - vector vSlope = vector.ZERO_VECTOR; - Verbose("llGroundSlope({0})={1}" + vOffset, vSlope); - return vSlope; - } - - public key llHTTPRequest(String sURL, list lParameters, String sBody) - { - key kRequestID = host.Http(sURL, lParameters, sBody); - Verbose(@"llHTTPRequest(""{0}"", {1}, ""{2}"")=""{3}""", sURL, lParameters.ToVerboseString(), sBody, kRequestID); - return kRequestID; - } - - public void llHTTPResponse(key kRequestID, integer iStatus, String sBody) - { - Verbose(@"llHTTPResponse({0}, {1}, ""{2}"")", kRequestID, iStatus, sBody); - } - - public String llInsertString(String sDestination, integer iIndex, String sSource) - { - string strDestination = sDestination; - string strSource = sSource; - int intPosition = iIndex; - string sResult; - - if (intPosition < strDestination.Length) { - sResult = strDestination.Substring(0, intPosition) + strSource + strDestination.Substring(intPosition); - } else if (intPosition >= 0) { - sResult = strDestination + strSource; - } else { - sResult = "**ERROR**"; - } - Verbose(@"llInsertString(""{0}"", {1}, ""{2}"")=""{3}""", sDestination, iIndex, sSource, sResult); - return sResult; - } - - public void llInstantMessage(key kAvatarID, String sMessage) - { - Verbose(@"llInstantMessage({0}, ""{1}"")", kAvatarID, sMessage); - } - - public String llIntegerToBase64(integer iNumber) - { - byte[] data = new byte[4]; - data[3] = (byte)(iNumber & 0xff); - data[2] = (byte)((iNumber >> 8) & 0xff); - data[1] = (byte)((iNumber >> 16) & 0xff); - data[0] = (byte)((iNumber >> 24) & 0xff); - string sResult = Convert.ToBase64String(data); - Verbose(@"llIntegerToBase64({0})=""{1}""", iNumber, sResult); - return sResult; - } - - public list llJson2List(string sJSON) - { - // TODO implement conversion to list - list lJSON = new list(); - Verbose("llJson2List({0})={1}", sJSON, lJSON); - return lJSON; - } - - public string llJsonGetValue(string sJSON, list lSpecifiers) - { - // TODO determine return value from list - string sReturn = JSON_INVALID; - Verbose("llJsonGetValue({0}, {1})= {2}", sJSON, lSpecifiers, sReturn); - return sReturn; - } - - public string llJsonSetValue(string sJSON, list lSpecifiers, string sValue) - { - // TODO determine return value - string sReturn = JSON_INVALID; - Verbose("llJsonGetValue({0}, {1}, {2})= {3}", sJSON, lSpecifiers, sValue, sReturn); - return sReturn; - } - - public string llJsonValueType(string sJSON, list lSpecifiers) - { - // TODO determine return value - string sReturn = JSON_INVALID; - Verbose("llJsonGetValue({0}, {1})= {2}", sJSON, lSpecifiers, sReturn); - return sReturn; - } - - public String llKey2Name(key kID) - { - string sAvatarName = ""; - if (Properties.Settings.Default.AvatarKey == kID) { - sAvatarName = Properties.Settings.Default.AvatarName; - } - Verbose(@"llKey2Name({0})=""{1}""", kID, sAvatarName); - return sAvatarName; - } - - public void llLinkParticleSystem(integer iLink, list lParameters) - { - Verbose("llLinkParticleSystem({0}, {1})", iLink, lParameters.ToVerboseString()); - } - - public void llLinkSitTarget(integer iLinkIndex, vector vOffset, rotation rRotation) - { - Verbose("llLinkSitTarget({0}, {1}, {2})", iLinkIndex, vOffset, rRotation); - } - - public String llList2CSV(list lSource) - { - StringBuilder sCSV = new StringBuilder(); - for (int intI = 0; intI < lSource.Count; intI++) { - if (intI > 0) { - sCSV.Append(", "); - } - sCSV.Append(lSource[intI].ToString()); - } - Verbose(@"llList2CSV({0})=""{1}""", lSource.ToVerboseString(), sCSV.ToString()); - return sCSV.ToString(); - } - - public Float llList2Float(list lSource, integer iIndex) - { - Float fResult; - if (iIndex < 0) { - iIndex = lSource.Count + iIndex; - } - if (iIndex >= lSource.Count || iIndex < 0) { - fResult = 0.0; - } else { - fResult = (Float)lSource[iIndex].ToString(); - } - Verbose("llList2Float({0}, {1})={2}", lSource.ToVerboseString(), iIndex, fResult); - return fResult; - } - - public integer llList2Integer(list lSrc, integer iIndex) - { - integer iResult; - if (iIndex < 0) { - iIndex = lSrc.Count + iIndex; - } - if (iIndex >= lSrc.Count || iIndex < 0) { - iResult = 0; - } else { - iResult = (integer)lSrc[iIndex].ToString(); - } - Verbose("llList2Integer({0}, {1})={2}", lSrc.ToVerboseString(), iIndex, iResult); - return iResult; - } - - public string llList2Json(string sType, list lValues) - { - // TODO determine return value - string sReturn = JSON_INVALID; - Verbose(@"llList2Json({0}, {1})=""{2}""", sType, lValues.ToVerboseString(), sReturn); - return sReturn; - } - - public key llList2Key(list lSource, integer iIndex) - { - key kResult; - if (iIndex < 0) { - iIndex = lSource.Count + iIndex; - } - if (iIndex >= lSource.Count || iIndex < 0) { - kResult = key.NULL_KEY; - } else { - kResult = (key)lSource[iIndex].ToString(); - } - Verbose("llList2Key({0}, {1})={2}", lSource.ToVerboseString(), iIndex, kResult); - return kResult; - } - - public list llList2List(list lSource, integer iStart, integer iEnd) - { - int iLength = lSource.Count; - - int start = iStart; - int end = iEnd; - - list lResult = new list(); - - if (CorrectIt(iLength, ref start, ref end)) { - if (start <= end) { - for (int intI = start; intI <= end; intI++) { - lResult.Add(lSource[intI]); - } - } else { // excluding - for (int intI = 0; intI <= end; intI++) { - lResult.Add(lSource[intI]); - } - for (int intI = start; intI < iLength; intI++) { - lResult.Add(lSource[intI]); - } - } - } - - Verbose(string.Format("List2List({0}, {1}, {2})={3}", lSource.ToVerboseString(), iStart, iEnd, lResult.ToVerboseString())); - return lResult; - } - - public list llList2ListStrided(list lSource, integer iStart, integer iEnd, integer iStride) - { - int iLength = lSource.Count; - - int intStart = iStart; - int intEnd = iEnd; - - list lTemp = new list(); - - if (CorrectIt(iLength, ref intStart, ref intEnd)) { - if (intStart <= intEnd) { - for (int intI = intStart; intI <= intEnd; intI++) { - lTemp.Add(lSource[intI]); - } - } else { // excluding - for (int intI = 0; intI <= intEnd; intI++) { - lTemp.Add(lSource[intI]); - } - for (int intI = intStart; intI < iLength; intI++) { - lTemp.Add(lSource[intI]); - } - } - } - list lResult = new list(); - string sRemark = ""; - if (iStride <= 0) { - sRemark = " ** stride must be > 0 **"; - } else { - if (intStart == 0) { - for (int intI = 0; intI < lTemp.Count; intI += iStride) { - lResult.Add(lTemp[intI]); - } - } else { - for (int intI = iStride - 1; intI < lTemp.Count; intI += iStride) { - lResult.Add(lTemp[intI]); - } - } - } - Verbose(@"llList2ListStrided({0}, {1}, {2}, {3})={4}{5}", lSource.ToVerboseString(), intStart, intEnd, iStride, lResult.ToVerboseString(), sRemark); - return lResult; - } - - public rotation llList2Rot(list lSource, integer iIndex) - { - rotation rResult; - if (iIndex < 0) { - iIndex = lSource.Count + iIndex; - } - if (iIndex >= lSource.Count || iIndex < 0) { - rResult = ZERO_ROTATION; - } else { - if (lSource[iIndex] is rotation) { - rResult = (rotation)lSource[iIndex]; - } else { - rResult = rotation.ZERO_ROTATION; - } - } - Verbose("llList2Rot({0}, {1})={2}", lSource.ToVerboseString(), iIndex, rResult); - return rResult; - } - - public String llList2String(list lSource, integer iIndex) - { - String sResult; - if (iIndex < 0) { - iIndex = lSource.Count + iIndex; - } - if (iIndex >= lSource.Count || iIndex < 0) { - sResult = ""; - } else { - sResult = (String)lSource[iIndex].ToString(); - } - Verbose(@"llList2String({0}, {1})=""{2}""", lSource.ToVerboseString(), iIndex, sResult); - return sResult; - } - - public vector llList2Vector(list lSource, integer iIndex) - { - vector vResult; - if (iIndex < 0) { - iIndex = lSource.Count + iIndex; - } - if (iIndex >= lSource.Count || iIndex < 0) { - vResult = ZERO_VECTOR; - } else { - if (lSource[iIndex] is vector) { - vResult = (vector)lSource[iIndex]; - } else { - vResult = vector.ZERO_VECTOR; - } - } - Verbose("llList2Vector({0}, {1})={2}", lSource.ToVerboseString(), iIndex, vResult); - return vResult; - } - - public integer llListFindList(list lSource, list lMatch) - { - if (lSource.Count == 0) { - return -1; - } - if (lMatch.Count == 0) { - return 0; - } - if (lMatch.Count > lSource.Count) { - return -1; - } - - int iReturn = -1; - for (int intI = 0; intI <= (lSource.Count - lMatch.Count); intI++) { - if (lMatch[0].Equals(lSource[intI])) { - bool blnOkay = true; - for (int intJ = 1; intJ < lMatch.Count; intJ++) { - if (!lMatch[intJ].Equals(lSource[intI + intJ])) { - blnOkay = false; - break; - } - } - if (blnOkay) { - iReturn = intI; - break; - } - } - } - Verbose("llListFindList({0}, {1}={2}", lSource.ToVerboseString(), lMatch.ToVerboseString(), iReturn); - return iReturn; - } - - public list llListInsertList(list lDestination, list lSource, integer iIndex) - { - int intLength = lDestination.Count; - list lResult = new list(); - if (iIndex < 0) { - iIndex = lDestination.Count + iIndex; - } - - for (int intI = 0; intI < Math.Min(iIndex, intLength); intI++) { - lResult.Add(lDestination[intI]); - } - - lResult.AddRange(lSource); - - for (int intI = Math.Max(0, iIndex); intI < intLength; intI++) { - lResult.Add(lDestination[intI]); - } - - Verbose("llListInsertList({0}, {1}, {2})={3}", lDestination.ToVerboseString(), lSource.ToVerboseString(), iIndex, lResult.ToVerboseString()); - return lResult; - } - - public list llListRandomize(list lSource, integer iStride) - { - list lResult; - ArrayList buckets = List2Buckets(lSource, iStride); - if (buckets == null) { - lResult = new list(lSource); - } else { - lResult = Buckets2List(RandomShuffle(buckets), iStride); - } - Verbose("llListRandomize({0}, {1})={2}", lSource.ToVerboseString(), iStride, lResult.ToVerboseString()); - return lResult; - } - - // TODO check this!!! - public list llListReplaceList(list lDestination, list lSource, integer iStart, integer iEnd) - { - int intLength = lDestination.Count; - - int intStart = iStart; - int intEnd = iEnd; - CorrectIt(intLength, ref intStart, ref intEnd); - - list lResult = new list(); - if (intStart <= intEnd) { - for (int intI = 0; intI < intStart; intI++) { - lResult.Add(lDestination[intI]); - } - lResult.AddRange(lSource); - for (int intI = intEnd + 1; intI < intLength; intI++) { - lResult.Add(lDestination[intI]); - } - } else { - // where to add src????? - for (int intI = intEnd; intI <= intStart; intI++) { - lResult.Add(lDestination[intI]); - } - } - Verbose("llListReplaceList({0}, {1}, {2}, {3}={4}", lDestination.ToVerboseString(), lSource.ToVerboseString(), intStart, intEnd, lResult.ToVerboseString()); - return lResult; - } - - public list llListSort(list lSource, integer iStride, integer iAscending) - { - int intAscending = iAscending; - int intStride = iStride; - list lResult; - ArrayList buckets = List2Buckets(lSource, intStride); - if (buckets == null) { - lResult = new list(lSource); - } else { - buckets.Sort(new BucketComparer(intAscending)); - lResult = Buckets2List(buckets, intStride); - } - Verbose("llListSort({0}, {1}, {2})={3}", lSource.ToVerboseString(), iStride, iAscending, lResult.ToVerboseString()); - return lResult; - } - - /* -0 LIST_STAT_RANGE Returns the range. -1 LIST_STAT_MIN Retrieves the smallest number. -2 LIST_STAT_MAX Retrieves the largest number. -3 LIST_STAT_MEAN Retrieves the mean (average). -4 LIST_STAT_MEDIAN Retrieves the median number. -5 LIST_STAT_STD_DEV Calculates the standard deviation. -6 LIST_STAT_SUM Calculates the sum. -7 LIST_STAT_SUM_SQUARES Calculates the sum of the squares. -8 LIST_STAT_NUM_COUNT Retrieves the amount of float and integer elements. Theoretically similar to llGetListLength, except LL states that this function ignores all non-integer and non-float elements. Therefore, this is a useful tool for mixed lists of numbers and non-numbers. -9 LIST_STAT_GEOMETRIC_MEAN Calculates the geometric mean. All numbers must be greater than zero for this to work, according to LL. - */ - public Float llListStatistics(integer iOperation, list lInput) - { - double dResult = 0.0; - double rmin, rmax; - int operation = iOperation; - List input = GetListOfNumbers(lInput); - if (input.Count > 0) { - switch (operation) { - case LIST_STAT_RANGE: - rmin = double.MaxValue; - rmax = double.MinValue; - for (int intI = 0; intI < input.Count; intI++) { - if (input[intI] < rmin) { - rmin = input[intI]; - } - if (input[intI] > rmax) { - rmax = input[intI]; - } - } - dResult = rmax - rmin; - break; - case LIST_STAT_MIN: - dResult = double.MaxValue; - for (int intI = 0; intI < input.Count; intI++) { - if (input[intI] < dResult) { - dResult = input[intI]; - } - } - break; - case LIST_STAT_MAX: - dResult = double.MinValue; - for (int intI = 0; intI < input.Count; intI++) { - if (input[intI] > dResult) { - dResult = input[intI]; - } - } - break; - case LIST_STAT_MEAN: - for (int intI = 0; intI < input.Count; intI++) { - dResult += input[intI]; - } - dResult = dResult / input.Count; - break; - case LIST_STAT_MEDIAN: - input.Sort(); - if (Math.Ceiling(input.Count * 0.5) == input.Count * 0.5) { - dResult = input[(int)((input.Count * 0.5) - 1)] + (input[(int)(input.Count * 0.5)] / 2); - } else { - dResult = input[((int)(Math.Ceiling(input.Count * 0.5))) - 1]; - } - break; - case LIST_STAT_STD_DEV: - dResult = GetStandardDeviation(input.ToArray()); - break; - case LIST_STAT_SUM: - for (int intI = 0; intI < input.Count; intI++) { - dResult += input[intI]; - } - break; - case LIST_STAT_SUM_SQUARES: - for (int intI = 0; intI < input.Count; intI++) { - dResult += input[intI] * input[intI]; - } - ////double av = GetAverage(input.ToArray()); - ////for (int intI = 0; intI < input.Count; intI++) - // result += (av - input[intI]) * (av - input[intI]); - break; - case LIST_STAT_NUM_COUNT: - dResult = input.Count; - break; - case LIST_STAT_GEOMETRIC_MEAN: - for (int intI = 0; intI < input.Count; intI++) { - input[intI] = Math.Log(input[intI]); - } - dResult = Math.Exp(GetAverage(input.ToArray())); - break; - default: - break; - } - } - Verbose("llListStatistics({0}, {1})={2}", iOperation, lInput.ToVerboseString(), dResult); - return dResult; - } - - public integer llListen(integer iChannel, String sName, key kID, String sText) - { - int intHandle = host.llListen(iChannel, sName, kID, sText); - Verbose(@"llListen({0}, ""{1}"", {2}, {3})={4}", iChannel, sName, kID, sText, intHandle); - return intHandle; - } - - public void llListenControl(integer iHandle, integer iActive) - { - Verbose("llListenControl({0}, {1})", iHandle, iActive); - host.llListenControl(iHandle, iActive); - } - - public void llListenRemove(integer iHandle) - { - Verbose("llListenRemove({0})", iHandle); - host.llListenRemove(iHandle); - } - - public void llLoadURL(key kAvatarID, String sText, String sURL) - { - Verbose(@"llLoadURL({0}, ""{1}"", ""{2}"")", kAvatarID, sText, sURL); - string strUrl = sURL.ToString(); - if (strUrl.StartsWith("http://")) { - System.Diagnostics.Process.Start(strUrl); - } - } - - public Float llLog(Float fValue) - { - double dblA = 0.0; - if (fValue > 0.0) { - dblA = Math.Log(fValue); - } - Verbose("llLog({0})={1}", fValue, dblA); - return dblA; - } - - public Float llLog10(Float fValue) - { - double dblA = 0.0; - if (fValue > 0.0) { - dblA = Math.Log10(fValue); - } - Verbose("llLog10({0})={1}", fValue, dblA); - return dblA; - } - - public void llLookAt(vector vTarget, Float fStrength, Float fDamping) - { - Verbose("llLookAt({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7})", vTarget, fStrength, fDamping); - } - - public void llLoopSound(String sSound, Float sVolume) - { - try { - System.Media.SoundPlayer sp = host.GetSoundPlayer(sSound); - sp.PlayLooping(); - } catch { - } - Verbose("llLoopSound({0}, {1})", sSound, sVolume); - } - - public void llLoopSoundMaster(String sSound, Float fVolume) - { - try { - System.Media.SoundPlayer sp = host.GetSoundPlayer(sSound); - sp.PlayLooping(); - } catch { - } - Verbose("llLoopSoundMaster({0}, {1})", sSound, fVolume); - } - - public void llLoopSoundSlave(String sSound, Float fVolume) - { - try { - System.Media.SoundPlayer sp = host.GetSoundPlayer(sSound); - sp.PlayLooping(); - } catch { - } - Verbose("llLoopSoundSlave({0}, {1})", sSound, fVolume); - } - - // ok - public String llMD5String(String sSource, integer iNonce) - { - System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); - byte[] hash = md5.ComputeHash(Encoding.ASCII.GetBytes(sSource + ":" + iNonce.ToString())); - StringBuilder sbResult = new StringBuilder(); - foreach (byte hex in hash) { - sbResult.Append(hex.ToString("x2")); // convert to standard MD5 form - } - Verbose("llMD5String({0}, {1})={2}", sSource, iNonce, sbResult); - return sbResult.ToString(); - } - - public void llMakeExplosion(integer iParticles, Float fScale, Float fVelocity, Float fLifetime, Float fArc, String sTexture, vector vOffset) - { - Verbose(@"llMakeExplosion({0}, {1}, {2}, {3}, {4}, ""{5}"", {6})", iParticles, fScale, fVelocity, fLifetime, fArc, sTexture, vOffset); - } - - public void llMakeFire(integer iParticles, Float fScale, Float fVelocity, Float fLifetime, Float fArc, String sTexture, vector vOffset) - { - Verbose(@"llMakeFire({0}, {1}, {2}, {3}, {4}, ""{5}"", {6})", iParticles, fScale, fVelocity, fLifetime, fArc, sTexture, vOffset); - } - - public void llMakeFountain(integer iParticles, Float fScale, Float fVelocity, Float fLifetime, Float fArc, String sTexture, vector vOffset) - { - Verbose(@"llMakeFountain({0}, {1}, {2}, {3}, {4}, ""{5}"", {6})", iParticles, fScale, fVelocity, fLifetime, fArc, sTexture, vOffset); - } - - public void llMakeSmoke(integer iParticles, Float fScale, Float fVelocity, Float fLifetime, Float fArc, String sTexture, vector vOffset) - { - Verbose(@"llMakeSmoke({0}, {1}, {2}, {3}, {4}, ""{5}"", {6})", iParticles, fScale, fVelocity, fLifetime, fArc, sTexture, vOffset); - } - - public void llManageEstateAccess(integer iAction, key kID) - { - Verbose("llManageEstateAccess({0}, {1}", iAction, kID); - } - - public void llMapDestination(String sLandmark, vector vPosition, vector vLookat) - { - Verbose(@"llMapDestination({0}, {1}, {2})", sLandmark, vPosition, vLookat); - } - - public void llMessageLinked(integer iLink, integer iValue, String sText, key kID) - { - Verbose(@"llMessageLinked({0}, {1}, ""{2}"", {3})", iLink, iValue, sText, kID); - host.MessageLinked(iLink, iValue, sText, kID); - } - - public void llMinEventDelay(Float fDelay) - { - Verbose("llMinEventDelay({0}", fDelay); - } - - public integer llModPow(integer iValue1, integer iValue2, integer iModulus) - { - integer iResult = ModPow2(iValue1, iValue2, iModulus); - Verbose("llModPow({0}, {1}, {2})={3}", iValue1, iValue2, iModulus, iResult); - return iResult; - } - - public void llModifyLand(integer iAction, integer iSize) - { - Verbose("llModifyLand({0}, {1})", iAction, iSize); - } - - public void llMoveToTarget(vector vTarget, Float fTau) - { - Verbose("llMoveToTarget({0}, {1})", vTarget, fTau); - } - - public void llNavigateTo(vector vLocation, list lOptions) - { - Verbose("llNavigateTo({0}, {1})", vLocation, lOptions); - } - - public void llOffsetTexture(Float fOffsetS, Float fOffsetT, integer iFace) - { - Verbose("llOffsetTexture({0}, {1}, {2})", fOffsetS, fOffsetT, iFace); - } - - public void llOpenRemoteDataChannel() - { - host.llOpenRemoteDataChannel(); - Verbose("llOpenRemoteDataChannel()"); - } - - public integer llOverMyLand(key kID) - { - integer iResult = integer.TRUE; - Verbose("llOverMyLand({0})={1}", kID, iResult); - return iResult; - } - - public void llOwnerSay(String sText) - { - Chat(0, sText, CommunicationType.OwnerSay); - } - - public void llParcelMediaCommandList(list lCommands) - { - Verbose("llParcelMediaCommandList({0})", lCommands.ToVerboseString()); - } - - public list llParcelMediaQuery(list lQuery) - { - list lResult = new list(); - Verbose("llParcelMediaQuery({0})={1})", lQuery.ToVerboseString(), lResult.ToVerboseString()); - return lResult; - } - - // 21 sep 2007, check this - public list llParseString2List(String sSource, list lSseparators, list lSpacers) - { - list lResult = ParseString(sSource, lSseparators, lSpacers, false); - Verbose(@"llParseString2List(""{0}"", {1}, {2})={3}", sSource, lSseparators.ToVerboseString(), lSpacers.ToVerboseString(), lResult.ToVerboseString()); - return lResult; - } - - // 21 sep 2007, check this, first check 3 oct 2007, last element=="" is added also - public list llParseStringKeepNulls(String sSource, list lSeparators, list lSpacers) - { - list lResult = ParseString(sSource, lSeparators, lSpacers, true); - Verbose(@"llParseStringKeepNulls(""{0}"", {1}, {2})={3}", sSource, lSeparators.ToVerboseString(), lSpacers.ToVerboseString(), lResult.ToVerboseString()); - return lResult; - } - - public void llParticleSystem(list lParameters) - { - Verbose("llParticleSystem({0})", lParameters.ToVerboseString()); - } - - public void llPassCollisions(integer iPassFlag) - { - Verbose("llPassCollisions({0})", iPassFlag); - } - - public void llPassTouches(integer iPassFlag) - { - Verbose("llPassTouches({0})", iPassFlag); - } - - public void llPatrolPoints(list lPoints, list lOptions) - { - Verbose("llPatrolPoints({0}, {1})", lPoints, lOptions); - } - - public void llPlaySound(String sSoundName, Float fVolume) - { - try { - System.Media.SoundPlayer sp = host.GetSoundPlayer(sSoundName); - sp.Play(); - Verbose("llPlaySound({0}, {1})", sSoundName, fVolume); - } catch (Exception exception) { - Verbose("llPlaySound({0}, {1}) **{2}", sSoundName, fVolume, exception.Message); - } - } - - public void llPlaySoundSlave(String sSoundName, Float fVolume) - { - try { - System.Media.SoundPlayer sp = host.GetSoundPlayer(sSoundName); - sp.Play(); - } catch { - } - Verbose("llPlaySoundSlave({0}, {1})", sSoundName, fVolume); - } - - public void llPointAt(vector vTarget) - { - Verbose("llPointAt({0})", vTarget); - } - - public Float llPow(Float fBase, Float fExponent) - { - double dblA = Math.Pow(fBase, fExponent); - Verbose("llPow({0}, {1})={2}", fBase, fExponent, dblA); - return dblA; - } - - public void llPreloadSound(String sSoundName) - { - Verbose("llPreloadSound({0})", sSoundName); - } - - public void llPursue(key kTargetID, list lOptions) - { - Verbose("llPursue({0}, {1})", kTargetID, lOptions); - } - - public void llPushObject(key kID, vector vImpulse, vector vAngularImpulse, integer iLocalFlag) - { - Verbose("llPushObject({0}, {1}, {2}, {3})", kID, vImpulse, vAngularImpulse, iLocalFlag); - } - - public void llRegionSay(integer iChannel, String sText) - { - if (iChannel != 0) { - Chat(iChannel, sText, CommunicationType.RegionSay); - } - Verbose(@"llRegionSay({0}, ""{1}"")", iChannel, sText); - } - - public void llRegionSayTo(key kTargetID, integer iChannel, String sText) - { - Verbose(@"llRegionSayTo({0}, {1}, ""{2}"")", kTargetID, iChannel, sText); - } - - public void llReleaseCamera(key kID) - { - Verbose("llReleaseCamera({0})", kID); - } - - public void llReleaseControls() - { - Verbose("llReleaseControls()"); - this.host.ReleaseControls(); - } - - public void llReleaseControls(key kAvatarID) - { - Verbose("llReleaseControls({0})", kAvatarID); - } - - public void llReleaseURL(string sURL) - { - Verbose(@"llReleaseURL(""{0}"")", sURL); - } - - public void llRemoteDataReply(key kChannel, key kMessageID, String sData, integer iData) - { - host.llRemoteDataReply(kChannel, kMessageID, sData, iData); - Verbose("llRemoteDataReply({0}, {1}, {2}, {3})", kChannel, kMessageID, sData, iData); - } - - public void llRemoteDataSetRegion() - { - Verbose("llRemoteDataSetRegion()"); - } - - public void llRemoteLoadScript(key kTargetID, String sName, integer iRunningFlag, integer iStartParameter) - { - Verbose(@"llRemoteLoadScript({0}, ""{1}"", {2}, {3})", kTargetID, sName, iRunningFlag, iStartParameter); - } - - public void llRemoteLoadScriptPin(key kTargetID, String sName, integer iPIN, integer iRunningFlag, integer iStartParameter) - { - Verbose(@"llRemoteLoadScriptPin({0}, ""{1}"", {2}, {3}, {4})", kTargetID, sName, iPIN, iRunningFlag, iStartParameter); - } - - public void llRemoveFromLandBanList(key kAvatarID) - { - Verbose("llRemoveFromLandBanList({0})", kAvatarID); - if (htLandBanList.ContainsKey(kAvatarID)) { - htLandBanList.Remove(kAvatarID); - } - } - - public void llRemoveFromLandPassList(key kAvatarID) - { - Verbose("llRemoveFromLandPassList({0})", kAvatarID); - if (htLandPassList.ContainsKey(kAvatarID)) { - htLandPassList.Remove(kAvatarID); - } - } - - public void llRemoveInventory(String sInventoryItem) - { - host.RemoveInventory(sInventoryItem); - Verbose("llRemoveInventory({0})", sInventoryItem); - } - - public void llRemoveVehicleFlags(integer iFlags) - { - Verbose("llRemoveVehicleFlags({0})", iFlags); - } - - public key llRequestAgentData(key kID, integer iDataConstant) - { - key kResult = new key(Guid.NewGuid()); - - string strData = "***"; - switch ((int)iDataConstant) { - case DATA_ONLINE: - break; - case DATA_NAME: - strData = Properties.Settings.Default.AvatarName; - break; - case DATA_BORN: - strData = DateTime.Now.ToString("yyyy-MM-dd"); - break; - case DATA_RATING: - break; - case DATA_PAYINFO: - break; - default: - break; - } - host.ExecuteSecondLife("dataserver", kResult, (SecondLife.String)strData); - return kResult; - } - - public key llRequestDisplayName(key kAvatarID) - { - key kID = new key(Guid.NewGuid()); - string strData = "dummyDisplay Name"; - host.ExecuteSecondLife("dataserver", kID, (SecondLife.String)strData); - Verbose("llRequestDisplayName({0})={1}", kAvatarID, kID); - return kID; - } - - public key llRequestInventoryData(String sName) - { - key kResult = new key(Guid.NewGuid()); - Verbose(@"llRequestInventoryData(""{0}"")={1}", sName, kResult); - return kResult; - } - - public void llRequestPermissions(key kAvatarID, integer iPermissionFlags) - { - Verbose("llRequestPermissions({0}, {1})", kAvatarID, iPermissionFlags); - this.host.llRequestPermissions(kAvatarID, iPermissionFlags); - } - - public key llRequestSecureURL() - { - key kResult = new key(Guid.NewGuid()); - Verbose("llRequestPermissions()={0}", kResult); - return kResult; - } - - public key llRequestSimulatorData(String sSimulator, integer iData) - { - key kResult = new key(Guid.NewGuid()); - Verbose(@"llRequestSimulatorData(""{0}"", {1})={2}", sSimulator, iData, kResult); - return kResult; - } - - public key llRequestURL() - { - key kResult = new key(Guid.NewGuid()); - Verbose("llRequestURL()={0}", kResult); - return kResult; - } - - public key llRequestUsername(key kAvatarID) - { - key kID = new key(Guid.NewGuid()); - string strData = "dummyUser Name"; - Verbose("llRequestDisplayName({0})={1}", kAvatarID, kID); - host.ExecuteSecondLife("dataserver", kID, (SecondLife.String)strData); - return kID; - } - - public void llResetAnimationOverride(String sAnimationState) - { - Verbose("llResetAnimationOverride({0})", sAnimationState); - } - - public void llResetLandBanList() - { - htLandBanList = new Hashtable(); - Verbose("llResetLandBanList()"); - } - - public void llResetLandPassList() - { - htLandPassList = new Hashtable(); - Verbose("llResetLandPassList()"); - } - - public void llResetOtherScript(String sScriptName) - { - Verbose("llResetOtherScript({0})", sScriptName); - } - - public void llResetScript() - { - Verbose("llResetScript()"); - host.Reset(); - System.Threading.Thread.Sleep(1000); - System.Windows.Forms.MessageBox.Show("If you see this, something wrong in llResetScript()", "Oops..."); - } - - public void llResetTime() - { - Verbose("llResetTime()"); - dtDateTimeScriptStarted = DateTime.Now.ToUniversalTime(); - } - - public integer llReturnObjectsByID(list lObjects) - { - integer iReturned = ERR_GENERIC; - Verbose("llReturnObjectsByID({0})={1}", lObjects, iReturned); - return iReturned; - } - - public integer llReturnObjectsByOwner(key kID, integer iScope) - { - integer iReturned = ERR_GENERIC; - Verbose("llReturnObjectsByOwner({0}, {1})={2}", kID, iScope, iReturned); - return iReturned; - } - - public void llRezAtRoot(String sInventoryItem, vector vPosition, vector vVelocity, rotation rRotation, integer iParameter) - { - Verbose(@"llRezAtRoot(""{0}"", {1}, {2}, {3}, {4})", sInventoryItem, vPosition, vVelocity, rRotation, iParameter); - } - - public void llRezObject(String sInventoryItem, vector vPosition, vector vVelocity, rotation rRotation, integer iParameter) - { - Verbose(@"llRezObject(""{0}"", {1}, {2}, {3}, {4})", sInventoryItem, vPosition, vVelocity, rRotation, iParameter); - object_rez(new key(Guid.NewGuid())); - on_rez(iParameter); - } - - public Float llRot2Angle(rotation rRotation) - { - Float fAngle = 0.0F; - Verbose("llRot2Angle({0})={1}", rRotation, fAngle); - return fAngle; - } - - public vector llRot2Axis(rotation rRotation) - { - vector vAxis = vector.ZERO_VECTOR; - Verbose("llRot2Axis({0})={1})", rRotation, vAxis); - return vAxis; - } - - public vector llRot2Euler(rotation rRotation) - { - // http://rpgstats.com/wiki/index.php?title=LibraryRotationFunctions - rotation t = new rotation(rRotation.x * rRotation.x, rRotation.y * rRotation.y, rRotation.z * rRotation.z, rRotation.s * rRotation.s); - double m = t.x + t.y + t.z + t.s; - vector vEuler = new vector(0, 0, 0); - if (m != 0) { - double n = 2 * ((rRotation.y * rRotation.s) + (rRotation.x * rRotation.z)); - double p = (m * m) - (n * n); - if (p > 0) { - vEuler = new vector( - Math.Atan2(2.0 * ((rRotation.x * rRotation.s) - (rRotation.y * rRotation.z)), -t.x - t.y + t.z + t.s), - Math.Atan2(n, Math.Sqrt(p)), - Math.Atan2(2.0 * ((rRotation.z * rRotation.s) - (rRotation.x * rRotation.y)), t.x - t.y - t.z + t.s)); - } else if (n > 0) { - vEuler = new vector(0, PI_BY_TWO, Math.Atan2((rRotation.z * rRotation.s) + (rRotation.x * rRotation.y), 0.5 - t.x - t.z)); - } else { - vEuler = new vector(0, -PI_BY_TWO, Math.Atan2((rRotation.z * rRotation.s) + (rRotation.x * rRotation.y), 0.5 - t.x - t.z)); - } - } - Verbose("llRot2Euler({0})={1}", rRotation, vEuler); - return vEuler; - } - - public vector llRot2Fwd(rotation rRotation) - { - vector v = new vector(1.0 / ((rRotation.x * rRotation.x) + (rRotation.y * rRotation.y) + (rRotation.z * rRotation.z) + (rRotation.s * rRotation.s)), 0, 0); - vector vResult = v * rRotation; - Verbose("llRot2Fwd({0})={1}", rRotation, vResult); - return vResult; - } - - public vector llRot2Left(rotation rRotation) - { - vector v = new vector(0, 1.0 / ((rRotation.x * rRotation.x) + (rRotation.y * rRotation.y) + (rRotation.z * rRotation.z) + (rRotation.s * rRotation.s)), 0); - vector vResult = v * rRotation; - Verbose("llRot2Left({0})={1}", rRotation, vResult); - return vResult; - } - - public vector llRot2Up(rotation rRotation) - { - vector v = new vector(0, 0, 1.0 / ((rRotation.x * rRotation.x) + (rRotation.y * rRotation.y) + (rRotation.z * rRotation.z) + (rRotation.s * rRotation.s))); - vector vResult = v * rRotation; - Verbose("llRot2Left({0})={1}", rRotation, vResult); - return vResult; - } - - public void llRotateTexture(Float fRadians, integer iFace) - { - Verbose("llRotateTexture({0}, {1})", fRadians, iFace); - } - - public rotation llRotBetween(vector vDirection1, vector vDirection2) - { - rotation rResult = rotation.ZERO_ROTATION; - Verbose("llRotBetween({0}, {1})={2}", vDirection1, vDirection2, rResult); - return rResult; - } - - public void llRotLookAt(rotation rRotation, Float fStrength, Float fDamping) - { - Verbose("llRotLookAt({0}, {1}, {2})", rRotation, fStrength, fDamping); - } - - public integer llRotTarget(rotation rRotation, Float fError) - { - integer iHandle = 0; - Verbose("llRotTarget({0}, {1})={2})", rRotation, fError, iHandle); - return iHandle; - } - - public void llRotTargetRemove(integer iHandle) - { - Verbose("llRotTargetRemove({0})", iHandle); - } - - public integer llRound(Float fValue) - { - int intA = (int)Math.Round(fValue); - Verbose("llRound({0})={1})=", fValue, intA); - return intA; - } - - public integer llSameGroup(key kID) - { - integer iFlag = 0; - Verbose("llSameGroup({0})={1})", kID, iFlag); - return iFlag; - } - - public void llSay(integer iChannel, String sText) - { - Chat(iChannel, sText, CommunicationType.Say); - } - - public void llScaleTexture(Float fScaleS, Float fScaleT, integer iFace) - { - Verbose("llScaleTexture({0}, {1}, {2})", fScaleS, fScaleT, iFace); - } - - public integer llScriptDanger(vector vPosition) - { - integer iFlag = 0; - Verbose("llScriptDanger({0})={1}", vPosition, iFlag); - return iFlag; - } - - public void llScriptProfiler(integer iState) - { - Verbose("llScriptProfiler({0})", iState); - } - - public key llSendRemoteData(key kChannel, String sDestination, integer iData, String sData) - { - key kID = host.llSendRemoteData(kChannel, sDestination, iData, sData); - Verbose("llSendRemoteData({0}, {1}, {2}, {3})={4}", kChannel, sDestination, iData, sData, kID); - return kID; - } - - public void llSensor(String sName, key kID, integer iType, Float fRange, Float fArc) - { - Verbose(@"llSensor(""{0}"", {1}, {2}, {3}, {4})", sName, kID, iType, fRange, fArc); - host.SensorTimer.Stop(); - integer iTotalNumber = 1; - host.ExecuteSecondLife("sensor", iTotalNumber); - } - - public void llSensorRemove() - { - Verbose("llSensorRemove()"); - host.SensorTimer.Stop(); - } - - public void llSensorRepeat(String sName, key kID, integer iType, Float fRange, Float fArc, Float fRate) - { - Verbose(@"llSensorRepeat(""{0}"", {1}, {2}, {3}, {4}, {5})", sName, kID, iType, fRange, fArc, fRate); - host.SensorTimer.Stop(); - if (fRate > 0) { - host.SensorTimer.Interval = (int)Math.Round(fRate * 1000); - host.SensorTimer.Start(); - } - } - - public void llSetAlpha(Float fOpacity, integer iFace) - { - Verbose("llSetAlpha({0}, {1})", fOpacity, iFace); - } - - public void llSetAngularVelocity(vector vForce, integer iLocal) - { - Verbose("llSetAngularVelocity({0}, {1})", vForce, iLocal); - } - - public void llSetAnimationOverride(String sAnimationState, String sAnimation) - { - Verbose("llSetAnimationOverride({0}, {1})", sAnimationState, sAnimation); - } - - public void llSetBuoyancy(Float fBuoyancy) - { - Verbose("llSetBuoyancy({0})", fBuoyancy); - } - - public void llSetCameraAtOffset(vector vOffset) - { - Verbose("llSetCameraAtOffset({0})", vOffset); - } - - public void llSetCameraEyeOffset(vector vOffset) - { - Verbose("llSetCameraEyeOffset({0})", vOffset); - } - - public void llSetCameraParams(list lRules) - { - Verbose("llSetCameraParams({0})", lRules.ToVerboseString()); - } - - public void llSetClickAction(integer iAction) - { - Verbose("llSetClickAction({0})", iAction); - } - - public void llSetColor(vector vColour, integer iFace) - { - Verbose("llSetColor({0}, {1})", vColour, iFace); - } - - public void llSetContentType(key kHTTPRequestID, integer iContentType) - { - Verbose("llSetContentType({0}, {1})", kHTTPRequestID, iContentType); - } - - public void llSetDamage(Float fDamage) - { - Verbose("llSetDamage({0})", fDamage); - } - - public void llSetForce(vector vForce, integer iLocal) - { - Verbose("llSetForce({0}, {1})", vForce, iLocal); - } - - public void llSetForceAndTorque(vector vForce, vector vTorque, integer iLocal) - { - Verbose("llSetForceAndTorque({0}, {1}, {2})", vForce, vTorque, iLocal); - } - - public void llSetHoverHeight(Float fHeight, Float fWater, Float fTau) - { - Verbose("llSetHoverHeight({0}, {1}, {2})", fHeight, fWater, fTau); - } - - public void llSetInventoryPermMask(String sItem, integer iMask, integer iValue) - { - Verbose(@"llSetInventoryPermMask(""{0}"", {1}, {2})", sItem, iMask, iValue); - } - - public void llSetKeyframedMotion(list lKeyframes, list lOptions) - { - Verbose("llSetKeyframedMotion({0}, {1})", lKeyframes.ToVerboseString(), lOptions.ToVerboseString()); - } - - public void llSetLinkAlpha(integer iLinkIndex, Float fAlpha, integer iFace) - { - Verbose("llSetLinkAlpha({0}, {1}, {2})", iLinkIndex, fAlpha, iFace); - } - - public void llSetLinkCamera(integer iLinkIndex, vector vEyeOffset, vector vLookOffset) - { - Verbose("llSetLinkCamera({0}, {1}, {2})", iLinkIndex, vEyeOffset, vLookOffset); - } - - public void llSetLinkColor(integer iLinkIndex, vector vColour, integer iFace) - { - Verbose("llSetLinkColor({0}, {1}, {2})", iLinkIndex, vColour, iFace); - } - - public integer llSetLinkMedia(integer iLinkIndex, integer iFace, list lParameters) - { - integer iResult = STATUS_OK; - Verbose("llSetLinkMedia({0}, {1}, {2})={3}", iLinkIndex, iFace, lParameters.ToVerboseString(), iResult); - return iResult; - } - - public void llSetLinkPrimitiveParams(integer iLinkIndex, list lRules) - { - Verbose("llSetLinkPrimitiveParams({0}, {1})", iLinkIndex, lRules.ToVerboseString()); - } - - public void llSetLinkPrimitiveParamsFast(integer iLinkIndex, list lRules) - { - Verbose("llSetLinkPrimitiveParamsFast({0}, {1})", iLinkIndex, lRules.ToVerboseString()); - } - - public void llSetLinkTexture(integer iLinkIndex, String sTexture, integer iFace) - { - Verbose(@"llSetLinkTexture({0}, ""{1}"", {2})", iLinkIndex, sTexture, iFace); - } - - public void llSetLinkTextureAnim(integer iLinkIndex, integer iMode, integer iFace, integer iSizeX, integer iSizeY, Float fStart, Float fLength, Float fRate) - { - Verbose("llSetLinkTextureAnim({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7})", iLinkIndex, iMode, iFace, iSizeX, iSizeY, fStart, fLength, fRate); - } - - public void llSetLocalRot(rotation rRotation) - { - this.rRotationlocal = rRotation; - Verbose("llSetLocalRot({0})", rRotation); - } - - public integer llSetMemoryLimit(integer iLimit) - { - integer iResult = true; - Verbose("llSetMemoryLimit({0})=(1)", iLimit, iResult); - return iResult; - } - - public void llSetObjectDesc(String sDescription) - { - Verbose(@"llSetObjectDesc(""{0}"")", sDescription); - host.SetObjectDescription(sDescription); - } - - public void llSetObjectName(String sName) - { - Verbose(@"llSetObjectName(""{0}"")", sName); - host.SetObjectName(sName); - } - - public void llSetObjectPermMask(integer iMaskConstant, integer iValue) - { - Verbose("llSetObjectPermMask({0}, {1})", iMaskConstant, iValue); - } - - public void llSetParcelMusicURL(String sURL) - { - Verbose(@"llSetParcelMusicURL(""{0}"")", sURL); - sParcelMusicURL = sURL; - } - - public void llSetPayPrice(integer iPrice, list lButtons) - { - Verbose("llSetPayPrice({0}, {1})", iPrice, lButtons.ToVerboseString()); - } - - public void llSetPhysicsMaterial(integer iMaterialBits, Float fGravityMultiplier, Float fRestitution, Float fFriction, Float fDensity) - { - Verbose("llSetPhysicsMaterial({0}, {1}, {2}, {3}, {4})", iMaterialBits, fGravityMultiplier, fRestitution, fFriction, fDensity); - } - - public void llSetPos(vector vPosition) - { - Verbose("llSetPos({0})", vPosition); - this.vPosition = vPosition; - } - - public integer llSetPrimMediaParams(integer iFace, list lParameters) - { - integer iResult = 0; - Verbose("llSetPrimMediaParams({0}, {1})={2}", iFace, lParameters.ToVerboseString(), iResult); - return iResult; - } - - public void llSetPrimitiveParams(list lRule) - { - Verbose("llSetPrimitiveParams({0})", lRule.ToVerboseString()); - } - - public integer llSetRegionPos(vector vPosition) - { - integer iResult = true; - Verbose("llSetRegionPos({0})={1}", vPosition, iResult); - this.vPosition = vPosition; - return iResult; - } - - public void llSetRemoteScriptAccessPin(integer iPIN) - { - Verbose("llSetRemoteScriptAccessPin({0})", iPIN); - } - - public void llSetRot(rotation rRotation) - { - Verbose("llSetRot({0})", rRotation); - this.rRotation = rRotation; - } - - public void llSetScale(vector vScale) - { - Verbose("llSetScale({0})", vScale); - this.vScale = vScale; - } - - public void llSetScriptState(String sName, integer iRunState) - { - Verbose(@"llSetScriptState(""{0}"", {1})", sName, iRunState); - } - - public void llSetSitText(String sText) - { - Verbose(@"llSetSitText(""{0}"")", sText); - sSitText = sText; - } - - public void llSetSoundQueueing(integer iQueueFlag) - { - Verbose("llSetSoundQueueing({0})", iQueueFlag); - } - - public void llSetSoundRadius(Float fRadius) - { - fSoundRadius = fRadius; - Verbose("llSetSoundRadius({0})", fRadius); - } - - public void llSetStatus(integer iStatusConstant, integer iValue) - { - Verbose("llSetStatus({0}, {1})", iStatusConstant, iValue); - } - - public void llSetText(String sText, vector vColour, Float fOpacity) - { - Verbose(@"llSetText(""{0}"", {1}, {2})", sText, vColour, fOpacity); - } - - public void llSetTexture(String sTextureName, integer iFace) - { - Verbose(@"llSetTexture(""{0}"", {1})", sTextureName, iFace); - } - - public void llSetTextureAnim(integer iMode, integer iFace, integer iSizeX, integer iSizeY, Float fStart, Float fLength, Float fRate) - { - Verbose("llSetTextureAnim({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7})", iMode, iFace, iSizeX, iSizeY, fStart, fLength, fRate); - } - - public void llSetTimerEvent(Float fSeconds) - { - Verbose("llSetTimerEvent({0})", fSeconds); - host.Timer.Stop(); - if (fSeconds > 0) { - host.Timer.Interval = (int)Math.Round(fSeconds * 1000); - host.Timer.Start(); - } - } - - public void llSetTorque(vector vTorque, integer iLocal) - { - Verbose("llSetTorque({0}, {1})", vTorque, iLocal); - } - - public void llSetTouchText(String sText) - { - Verbose(@"llSetTouchText(""{0}"")", sText); - } - - public void llSetVehicleFlags(integer iVehicleFlagConstants) - { - Verbose("llSetVehicleFlags({0})", iVehicleFlagConstants); - } - - public void llSetVehicleFloatParam(integer iParameterName, Float fParameterValue) - { - Verbose("llSetVehicledoubleParam({0}, {1})", iParameterName, fParameterValue); - } - - public void llSetVehicleRotationParam(integer iParameterName, rotation fParameterValue) - { - Verbose("llSetVehicleRotationParam({0}, {1})", iParameterName, fParameterValue); - } - - public void llSetVehicleType(integer iTypeConstant) - { - Verbose("llSetVehicleType({0})", iTypeConstant); - } - - public void llSetVehicleVectorParam(integer iParameterName, vector vParameterValue) - { - Verbose("llSetVehicleVectorParam({0}, {1})", iParameterName, vParameterValue); - } - - public void llSetVelocity(vector vForce, integer iLocal) - { - Verbose("llSetVelocity({0}, {1})", vForce, iLocal); - } - - public String llSHA1String(String sSource) - { - byte[] buffer = System.Text.Encoding.UTF8.GetBytes(sSource.ToString()); - System.Security.Cryptography.SHA1CryptoServiceProvider cryptoTransformSHA1 = new System.Security.Cryptography.SHA1CryptoServiceProvider(); - string sHash = BitConverter.ToString(cryptoTransformSHA1.ComputeHash(buffer)).Replace("-", ""); - Verbose(@"llSHA1String(""{0"")=""{1}""", sSource, sHash); - return sHash; - } - - public void llShout(integer iChannel, String sText) - { - Chat(iChannel, sText, CommunicationType.Shout); - } - - public Float llSin(Float fTheta) - { - double dblA = Math.Sin(fTheta); - Verbose("llSin({0})={1}", fTheta, dblA); - return dblA; - } - - public void llSitTarget(vector vOffset, rotation rRotation) - { - Verbose("llSitTarget({0}, {1})", vOffset, rRotation); - } - - public void llSleep(Float fSeconds) - { - Verbose("llSleep({0})", fSeconds); - System.Threading.Thread.Sleep((int)Math.Round(fSeconds * 1000)); - } - - public Float llSqrt(Float fValue) - { - double dblA = Math.Sqrt(fValue); - Verbose("llSqrt({0})={1}", fValue, dblA); - return dblA; - } - - public void llStartAnimation(String sAnimationName) - { - Verbose(@"llStartAnimation(""{0}"")", sAnimationName); - } - - public void llStopAnimation(String sAnimationName) - { - Verbose(@"llStopAnimation(""{0}"")", sAnimationName); - } - - public void llStopHover() - { - Verbose("llStopHover()"); - } - - public void llStopLookAt() - { - Verbose("llStopLookAt()"); - } - - public void llStopMoveToTarget() - { - Verbose("llStopMoveToTarget()"); - } - - public void llStopPointAt() - { - Verbose("llStopPointAt()"); - } - - public void llStopSound() - { - Verbose("llStopSound()"); - } - - public integer llStringLength(String sSource) - { - int intLength = ((string)sSource).Length; - Verbose(@"llStringLength(""{0}"")={1}", sSource, intLength); - return intLength; - } - - public String llStringToBase64(String sText) - { - string sResult = StringToBase64(sText.ToString()); - Verbose(@"llStringToBase64(""{0}"")=""{1}""", sText, sResult); - return sResult; - } - - public String llStringTrim(String sText, integer iTrimType) - { - string strResult = sText.ToString(); - - if ((iTrimType & STRING_TRIM_HEAD) != 0) { - strResult = strResult.TrimStart(); - } - - if ((iTrimType & STRING_TRIM_TAIL) != 0) { - strResult = strResult.TrimEnd(); - } - - Verbose(@"llStringTrim(""{0}"", {1})=""{2}""", sText, iTrimType, strResult); - return strResult; - } - - public integer llSubStringIndex(String sSource, String sPattern) - { - int intIndex = ((string)sSource).IndexOf((string)sPattern); - Verbose("llSubStringIndex({0}, {1})={2}", sSource, sPattern, intIndex); - return intIndex; - } - - public void llTakeCamera(key kAvatarID) - { - Verbose("llTakeCamera({0})", kAvatarID); - } - - public void llTakeControls(integer iControls, integer iAcceptFlag, integer iPassOnFlag) - { - Verbose("llTakeControls({0}, {1}), {2})", iControls, iAcceptFlag, iPassOnFlag); - this.host.TakeControls(iControls, iAcceptFlag, iPassOnFlag); - } - - public Float llTan(Float fTheta) - { - double dblA = Math.Tan(fTheta); - Verbose("llTan({0})={1}", fTheta, dblA); - return dblA; - } - - public integer llTarget(vector vPosition, Float fRange) - { - integer iResult = 0; - Verbose("llTarget({0}, {1})={2}", vPosition, fRange, iResult); - return iResult; - } - - public void llTargetOmega(vector vAxis, Float fSpinRate, Float fGain) - { - Verbose("llTargetOmega({0}, {1}, {2})", vAxis, fSpinRate, fGain); - } - - public void llTargetRemove(integer iTargetHandle) - { - Verbose("llTargetRemove({0})", iTargetHandle); - } - - public void llTeleportAgent(key kAvatarID, String sLandmarkName, vector vLandingPoint, vector vLookAtPoint) - { - Verbose(@"llTeleportAgentHome({0}, ""{1}"", {2}, {3})", kAvatarID, sLandmarkName, vLandingPoint, vLookAtPoint); - } - - public void llTeleportAgentGlobalCoords(key kAvatarID, vector vGlobalPosition, vector vRegionPosition, vector iLookAtPoint) - { - Verbose("llTeleportAgentHome({0}, {1}, {2}, {3})", kAvatarID, vGlobalPosition, vRegionPosition, iLookAtPoint); - } - - public void llTeleportAgentHome(key kAvatarID) - { - Verbose("llTeleportAgentHome({0})", kAvatarID); - } - - public void llTextBox(key kAvatar, String sText, integer iChannel) - { - Verbose(@"llTextBox({0}, ""{1}"", {2})", kAvatar, sText, iChannel); - host.llTextBox(kAvatar, sText, iChannel); - } - - public String llToLower(String sText) - { - string strTemp = ((string)sText).ToLower(); - Verbose(@"llToLower(""{0}"")=""{1}""", sText, strTemp); - return strTemp; - } - - public String llToUpper(String sText) - { - string strTemp = ((string)sText).ToUpper(); - Verbose(@"llToUpper(""{0}"")=""{1}""", sText, strTemp); - return strTemp; - } - - public key llTransferLindenDollars(key kPayee, integer iAmount) - { - key kID = new key(Guid.NewGuid()); - string strData = kPayee.ToString() + "," + iAmount.ToString(); - Verbose("llTransferLindenDollars({0}, {1})", kPayee, iAmount); - host.ExecuteSecondLife("transaction_result", kID, true, (SecondLife.String)strData); - return kID; - } - - public void llTriggerSound(String sSoundName, Float fVolume) - { - Verbose(@"llTriggerSound(""{0}"", {1})", sSoundName, fVolume); - } - - public void llTriggerSoundLimited(String sSoundName, Float fVolume, vector vBoxNE, vector vBoxSW) - { - Verbose("llTriggerSoundLimited({0}, {1}, {2}, {3})", sSoundName, fVolume, vBoxNE, vBoxSW); - } - - public String llUnescapeURL(String sURL) - { - byte[] data = Encoding.UTF8.GetBytes(sURL.ToString()); - List list = new List(); - for (int intI = 0; intI < data.Length; intI++) { - byte chrC = data[intI]; - if (chrC == (byte)'%') { - if (intI < (data.Length - 2)) { - list.Add((byte) - (HexToInt(data[intI + 1]) << 4 - | HexToInt(data[intI + 2]))); - } - intI += 2; - } else { - list.Add(chrC); - } - } - data = list.ToArray(); - int intLen = Array.IndexOf(data, (byte)0x0); - if (intLen < 0) { - intLen = data.Length; - } - string strTmp = Encoding.UTF8.GetString(data, 0, intLen); - Verbose(string.Format(@"llUnescapeURL(""{0}"")=""{1}""", sURL, strTmp)); - return strTmp; - } - - public void llUnSit(key kAvatarID) - { - Verbose("llUnSit({0})", kAvatarID); - } - - public void llUpdateCharacter(list lOptions) - { - Verbose("llUpdateCharacter({0})", lOptions.ToVerboseString()); - } - - public Float llVecDist(vector vPostionA, vector vPositionB) - { - vector vecValue = new vector(vPostionA.x - vPositionB.x, vPostionA.y - vPositionB.y, vPostionA.z - vPositionB.z); - double dblMag = llVecMag(vecValue); - Verbose("llVecDist({0}, {1})={2}", vPostionA, vPositionB, dblMag); - return dblMag; - } - - public Float llVecMag(vector vVector) - { - double dblValue = Math.Sqrt((vVector.x * vVector.x) + (vVector.y * vVector.y) + (vVector.z * vVector.z)); - Verbose("llVecMag({0})={1}", vVector, dblValue); - return dblValue; - } - - public vector llVecNorm(vector vVector) - { - double dblMag = llVecMag(vVector); - vector vecValue = new vector(vVector.x / dblMag, vVector.y / dblMag, vVector.z / dblMag); - Verbose("llVecNorm({0})={1}", vVector, vecValue); - return vecValue; - } - - public void llVolumeDetect(integer iDetectFlag) - { - Verbose("llVolumeDetect({0})", iDetectFlag); - } - - public void llWanderWithin(vector vOrigin, vector vDistance, list lOptions) - { - Verbose("llWanderWithin({0}, {1}, {2})", vOrigin, vDistance, lOptions.ToVerboseString()); - } - - public Float llWater(vector vOffset) - { - Float fWaterLevel = 0.0F; - Verbose("llWater({0})={1}", vOffset, fWaterLevel); - return fWaterLevel; - } - - public void llWhisper(integer iChannel, String sText) - { - Chat(iChannel, sText, CommunicationType.Whisper); - } - - public vector llWind(vector vOffset) - { - vector vDirection = vector.ZERO_VECTOR; - Verbose("llWind({0})={1}", vOffset, vDirection); - return vDirection; - } - - public String llXorBase64(String sText1, String sText2) - { - string sResult = ""; - Verbose(@"llXorBase64(""{0}"",""{1}"")=""{2}""", sText1, sText2, sResult); - return sResult; - } - - public String llXorBase64Strings(String sText1, String sText2) - { - string sResult = ""; - Verbose(@"llXorBase64Strings(""{0}"",""{1}"")=""{2}""", sText1, sText2, sResult); - return sResult; - } - - public String llXorBase64StringsCorrect(String sText1, String sText2) - { - string strS1 = Base64ToString(sText1.ToString()); - string strS2 = Base64ToString(sText2.ToString()); - int intLength = strS1.Length; - if (strS2.Length == 0) { - strS2 = " "; - } - while (strS2.Length < intLength) { - strS2 += strS2; - } - strS2 = strS2.Substring(0, intLength); - StringBuilder sb = new StringBuilder(); - for (int intI = 0; intI < intLength; intI++) { - sb.Append((char)(strS1[intI] ^ strS2[intI])); - } - string sResult = StringToBase64(sb.ToString()); - Verbose(@"llXorBase64StringsCorrect(""{0}"",""{1}"")=""{2}""", sText1, sText2, sResult); - return sResult; - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// LSL_Functions.cs +// +// + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text; + +namespace LSLEditor +{ + /// + /// This part of the SecondLife class contains the LSL function definitions. + /// + [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented", Justification = "These are all LSL functions, the documentation is in the LSL Wiki.")] + public partial class SecondLife + { + public integer llAbs(integer fValue) + { + int intA = (int)Math.Abs((long)fValue); + Verbose("llAbs({0})={1}", fValue, intA); + return intA; + } + + public Float llAcos(Float fValue) + { + double dblA = Math.Acos(fValue); + Verbose("llAcos({0})={1}", fValue, dblA); + return dblA; + } + + public void llAddToLandBanList(key kID, Float fHours) + { + Verbose("llAddToLandBanList({0}, {1})", kID, fHours); + if (htLandBanList.ContainsKey(kID)) { + htLandBanList.Remove(kID); + } + htLandBanList.Add(kID, fHours); + } + + public void llAddToLandPassList(key kID, Float fHours) + { + Verbose("llAddToLandPassList({0}, {1})", kID, fHours); + if (htLandPassList.ContainsKey(kID)) { + htLandPassList.Remove(kID); + } + htLandPassList.Add(kID, fHours); + } + + public void llAdjustSoundVolume(Float fVolume) + { + Verbose("llAdjustSoundVolume({0}), fVolume"); + this.fVolume = fVolume; + } + + public void llAllowInventoryDrop(integer iAllowDrop) + { + Verbose("llAllowInventoryDrop({0})", iAllowDrop); + blnAllowDrop = (Boolean)iAllowDrop; + } + + public Float llAngleBetween(rotation a, rotation b) + { + Float fResult = 0.0F; + rotation r = b / a; // calculate the rotation between the two arguments as quaternion + double s2 = r.s * r.s; // square of the s-element + double v2 = (r.x * r.x) + (r.y * r.y) + (r.z * r.z); // sum of the squares of the v-elements + + if (s2 < v2) { // compare the s-component to the v-component + fResult = 2.0 * Math.Acos(Math.Sqrt(s2 / (s2 + v2))); // use arccos if the v-component is dominant + } else if (v2 != 0) { // make sure the v-component is non-zero + fResult = 2.0 * Math.Asin(Math.Sqrt(v2 / (s2 + v2))); // use arcsin if the s-component is dominant + } + return fResult; // one or both arguments are scaled too small to be meaningful, or the values are the same, so return zero + // implementation taken from LSL Portal. http://wiki.secondlife.com/w/index.php?title=LlAngleBetween + } + + public void llApplyImpulse(vector vForce, integer iLocal) + { + Verbose("llApplyImpulse({0}, {1}", vForce, iLocal); + } + + public void llApplyRotationalImpulse(vector vForce, integer iLocal) + { + Verbose("llApplyRotationalImpulse({0}, {1})", vForce, iLocal); + } + + public Float llAsin(Float fValue) + { + double dblA = Math.Asin(fValue); + Verbose("llAsin({0})={1}", fValue, dblA); + return dblA; + } + + public Float llAtan2(Float y, Float x) + { + double dblA = Math.Atan2(y, x); + Verbose("llAtan2({0}, {1})={2}", y, x, dblA); + return dblA; + } + + public void llAttachToAvatar(integer iAttachPoint) + { + Verbose("llAttachToAvatar({0})", iAttachPoint); + } + + public void llAttachToAvatarTemp(integer iAttachPoint) + { + Verbose("llAttachToAvatarTemp({0})", iAttachPoint); + } + + public key llAvatarOnLinkSitTarget(integer iLinkIndex) + { + key kLinkUUID = new key(Guid.NewGuid()); + Verbose("llAvatarOnLinkSitTarget({0}))={1}", iLinkIndex, kLinkUUID); + return kLinkUUID; + } + + public key llAvatarOnSitTarget() + { + key kLinkUUID = new key(Guid.NewGuid()); + Verbose("llAvatarOnSitTarget()={0}", kLinkUUID); + return kLinkUUID; + } + + public rotation llAxes2Rot(vector vForward, vector vLeft, vector vUp) + { + rotation rRot = rotation.ZERO_ROTATION; + Verbose("llAxes2Rot({0}, {1}, {2})={3}", vForward, vLeft, +vUp, rRot); + return rRot; + } + + public rotation llAxisAngle2Rot(vector vAxis, Float fAngle) + { + vector vUnitAxis = llVecNorm(vAxis); + double dSineHalfAngle = Math.Sin(fAngle / 2); + double dCosineHalfAngle = Math.Cos(fAngle / 2); + + rotation rResult = new rotation( + dSineHalfAngle * vUnitAxis.x, + dSineHalfAngle * vUnitAxis.y, + dSineHalfAngle * vUnitAxis.z, + dCosineHalfAngle); + + Verbose("llAxisAngle2Rot({0}, {1})={2}", vAxis, fAngle, rResult); + return rResult; + } + + public integer llBase64ToInteger(String sString) + { + int iResult; + + try { + string s = sString; + byte[] data = new byte[4]; + + if (s.Length > 1) { + data[3] = (byte)(LookupBase64(s, 0) << 2); + data[3] |= (byte)(LookupBase64(s, 1) >> 4); + } + + if (s.Length > 2) { + data[2] = (byte)((LookupBase64(s, 1) & 0xf) << 4); + data[2] |= (byte)(LookupBase64(s, 2) >> 2); + } + + if (s.Length > 3) { + data[1] = (byte)((LookupBase64(s, 2) & 0x7) << 6); + data[1] |= (byte)LookupBase64(s, 3); + } + + if (s.Length > 5) { + data[0] = (byte)(LookupBase64(s, 4) << 2); + data[0] |= (byte)(LookupBase64(s, 5) >> 4); + } + + iResult = BitConverter.ToInt32(data, 0); + + // 0 12 34 56 + // 1 78 12 34 + // 2 56 78 12 + // 3 34 56 78 + + // 4 12 34 56 + // 5 78 12 34 + // 6 56 78 12 + // 7 34 56 78 + } catch { + iResult = (new Random()).Next(); + } + Verbose(@"llBase64ToInteger(""{0}"")={1}", sString, iResult); + return iResult; + } + + public String llBase64ToString(String sString) + { + string sResult = Base64ToString(sString.ToString()); + Verbose(@"llBase64ToString(""{0}"")=""{1}""", sString, sResult); + return sResult; + } + + public void llBreakAllLinks() + { + host.llBreakAllLinks(); + Verbose("llBreakAllLinks()"); + } + + public void llBreakLink(integer iLinkIndex) + { + host.llBreakLink(iLinkIndex); + Verbose("llBreakLink({0})", iLinkIndex); + } + + public list llCSV2List(String sString) + { + string sSource = sString; + list lResult = new list(); + StringBuilder sb = new StringBuilder(); + int intWithinAngelBracket = 0; + for (int intI = 0; intI < sSource.Length; intI++) { + char chrC = sSource[intI]; + if (chrC == '<') { + intWithinAngelBracket++; + } else if (chrC == '>') { + intWithinAngelBracket--; + } + + if (intWithinAngelBracket == 0 && chrC == ',') { + lResult.Add(sb.ToString()); + sb = new StringBuilder(); + } else { + sb.Append(sSource[intI]); + } + } + + // dont forget the last one + lResult.Add(sb.ToString()); + + // remove the first space, if any + for (int intI = 0; intI < lResult.Count; intI++) { + string strValue = lResult[intI].ToString(); + if (strValue == "") { + continue; + } + if (strValue[0] == ' ') { + lResult[intI] = strValue.Substring(1); + } + } + + Verbose(@"llCSV2List(""{0}"")={1}", sSource, lResult.ToVerboseString()); + + return lResult; + } + + public list llCastRay(vector vStart, vector vEnd, list lOptions) + { + list lResult = new list(); + Verbose("llCastRay({0}, {1}, {2})={3}", vStart, vEnd, lOptions.ToVerboseString(), lResult.ToVerboseString()); + return lResult; + } + + public integer llCeil(Float fValue) + { + int intA = (int)Math.Ceiling(fValue); + Verbose("llCeiling({0})={1}", fValue, intA); + return intA; + } + + public void llClearCameraParams() + { + Verbose("llClearCameraParams()"); + } + + public integer llClearLinkMedia(integer iLink, integer iFace) + { + Verbose("llClearLinkMedia({0}, {1})={2}", iLink, iFace, true); + return true; + } + + public integer llClearPrimMedia(integer iFace) + { + integer iResult = 0; + Verbose("llClearPrimMedia({0})={1}", iFace, iResult); + return iResult; + } + + public void llCloseRemoteDataChannel(key kChannel) + { + host.llCloseRemoteDataChannel(kChannel); + Verbose("llCloseRemoteDataChannel({0})", kChannel); + } + + public Float llCloud(vector vOffset) + { + Float fResult = 0.0F; + Verbose("llCloud({0})={1}", vOffset, fResult); + return fResult; + } + + public void llCollisionFilter(String sName, key kID, integer iAccept) + { + Verbose(@"llCollisionFilter(""{0}"", {1}, {2})", sName, kID, iAccept); + } + + public void llCollisionSound(String sImpactSound, Float fImpactVolume) + { + Verbose(@"llCollisionSound(""{0}"", {1})", sImpactSound, +fImpactVolume); + } + + public void llCollisionSprite(String sImpactSprite) + { + Verbose(@"llCollisionSprite(""{0}"")", sImpactSprite); + } + + public Float llCos(Float fTheta) + { + double dblA = Math.Cos(fTheta); + Verbose("llCos({0})={1}", fTheta, dblA); + return dblA; + } + + public void llCreateCharacter(list lOptions) + { + Verbose("llCreateCharacter({0})", lOptions.ToVerboseString()); + } + + public void llCreateLink(key kID, integer iSimulator) + { + Verbose("llCreateLink({0}, {1})", kID, iSimulator); + } + + public void llDeleteCharacter() + { + Verbose("llDeleteCharacter()"); + } + + public list llDeleteSubList(list lSource, integer iStart, integer iEnd) + { + int intLength = lSource.Count; + + int start = iStart; + int end = iEnd; + + list src = new list(lSource); + + if (CorrectIt(intLength, ref start, ref end)) { + if (start <= end) { + for (int intI = start; intI <= end; intI++) { + src[intI] = null; + } + } else { // excluding + for (int intI = 0; intI <= end; intI++) { + src[intI] = null; + } + for (int intI = start; intI < intLength; intI++) { + src[intI] = null; + } + } + } + list lResult = new list(); + for (int intI = 0; intI < src.Count; intI++) { + if (src[intI] != null) { + lResult.Add(src[intI]); + } + } + Verbose(string.Format("llDeleteSubList({0}, {1}, {2})={3}", lSource.ToVerboseString(), iStart, iEnd, lResult.ToVerboseString())); + return lResult; + } + + public String llDeleteSubString(String sSource, integer iStart, integer iEnd) + { + char[] src = sSource.ToString().ToCharArray(); + int start = iStart; + int end = iEnd; + + int intLength = src.Length; + + if (CorrectIt(intLength, ref start, ref end)) { + if (start <= end) { + for (int intI = start; intI <= end; intI++) { + src[intI] = '\0'; + } + } else { // excluding + for (int intI = 0; intI <= end; intI++) { + src[intI] = '\0'; + } + for (int intI = start; intI < intLength; intI++) { + src[intI] = '\0'; + } + } + } + StringBuilder result = new StringBuilder(); + for (int intI = 0; intI < src.Length; intI++) { + if (src[intI] != '\0') { + result.Append(src[intI]); + } + } + + Verbose(string.Format(@"llDeleteSubString(""{0}"", {1}, {2})=""{3}""", sSource, iStart, iEnd, result)); + return result.ToString(); + } + + public void llDetachFromAvatar() + { + Verbose("llDetachFromAvatar()"); + } + + public vector llDetectedGrab(integer iIndex) + { + vector vCoords = vector.ZERO_VECTOR; + Verbose("llDetectedGrab({0})={1}", iIndex, vCoords); + return vCoords; + } + + public integer llDetectedGroup(integer iIndex) + { + integer iDetected = 0; + Verbose("llDetectedGroup({0})={1}", iIndex, iDetected); + return iDetected; + } + + public key llDetectedKey(integer iIndex) + { + key kID = new key(Properties.Settings.Default.AvatarKey); + Verbose("llDetectedKey({0})={1}", iIndex, kID); + return kID; + } + + public integer llDetectedLinkNumber(integer iLinkIndex) + { + integer iDetected = 0; + Verbose("llDetectedLinkNumber({0})={1}", iLinkIndex, iDetected); + return iDetected; + } + + public String llDetectedName(integer iIndex) + { + string sResult = Properties.Settings.Default.AvatarName; + Verbose(@"llDetectedName({0})=""{1}""", iIndex, sResult); + return sResult; + } + + public key llDetectedOwner(integer iIndex) + { + key kID = new key(Properties.Settings.Default.AvatarKey); + Verbose("llDetectedOwner({0})={1}", iIndex, kID); + return kID; + } + + public vector llDetectedPos(integer iIndex) + { + vector vCoords = vector.ZERO_VECTOR; + Verbose("llDetectedPos({0})={1}", iIndex, vCoords); + return vCoords; + } + + public rotation llDetectedRot(integer iIndex) + { + rotation rRotation = rotation.ZERO_ROTATION; + Verbose("llDetectedRot({0})={1}", iIndex, rRotation); + return rRotation; + } + + public vector llDetectedTouchBinormal(integer iIndex) + { + vector vCoords = new vector(); + Verbose("llDetectedTouchBinormal({0})={1}", iIndex, vCoords); + return vCoords; + } + + public integer llDetectedTouchFace(integer iIndex) + { + integer iFace = 0; + Verbose("llDetectedTouchFace({0})={1}", iIndex, iFace); + return iFace; + } + + public vector llDetectedTouchNormal(integer iIndex) + { + vector vNormal = new vector(); + Verbose("llDetectedTouchNormal({0})={1}", iIndex, vNormal); + return vNormal; + } + + public vector llDetectedTouchPos(integer iIndex) + { + vector vCoords = vector.ZERO_VECTOR; + Verbose("llDetectedTouchPos({0})={1}", iIndex, vCoords); + return vCoords; + } + + public vector llDetectedTouchST(integer iIndex) + { + vector vCoords = vector.ZERO_VECTOR; + Verbose("llDetectedTouchST({0})={1}", iIndex, vCoords); + return vCoords; + } + + public vector llDetectedTouchUV(integer iIndex) + { + vector vUV = vector.ZERO_VECTOR; + Verbose("llDetectedTouchUV({0})={1}", iIndex, vUV); + return vUV; + } + + public integer llDetectedType(integer iIndex) + { + integer iResult = AGENT; + Verbose("llDetectedType({0})={1}", iIndex, iResult); + return iResult; + } + + public vector llDetectedVel(integer iIndex) + { + vector vVelocity = vector.ZERO_VECTOR; + Verbose("llDetectedVel({0})={1}", iIndex, vVelocity); + return vVelocity; + } + + public void llDialog(key kID, String sMessage, list lButtons, integer iChannel) + { + Verbose(@"llDialog({0}, ""{1}"", {2}, {3})", kID, sMessage, lButtons.ToVerboseString(), iChannel); + host.llDialog(kID, sMessage, lButtons, iChannel); + } + + public void llDie() + { + Verbose("llDie()"); + host.Die(); + } + + public String llDumpList2String(list lSource, String sSeparator) + { + StringBuilder result = new StringBuilder(); + for (int intI = 0; intI < lSource.Count; intI++) { + if (intI > 0) { + result.Append(sSeparator.ToString()); + } + result.Append(lSource[intI].ToString()); + } + Verbose(@"llDumpList2String({0},""{1}"")=""{2}""", lSource.ToVerboseString(), sSeparator, result.ToString()); + return result.ToString(); + } + + public integer llEdgeOfWorld(vector vPosition, vector vDirection) + { + integer iResult = 0; + Verbose("llEdgeOfWorld({0}, {1})={2}", vPosition, vDirection, iResult); + return iResult; + } + + public void llEjectFromLand(key kID) + { + Verbose("llEjectFromLand({0})", kID); + } + + public void llEmail(String sAddress, String sSubject, String sMessage) + { + Verbose(@"llEmail(""{0}"", ""{1}"", ""{2}"")", sAddress, sSubject, sMessage); + host.Email(sAddress, sSubject, sMessage); + } + + public String llEscapeURL(String sURL) + { + StringBuilder sb = new StringBuilder(); + byte[] data = Encoding.UTF8.GetBytes(sURL.ToString()); + for (int intI = 0; intI < data.Length; intI++) { + byte chrC = data[intI]; + if ((chrC >= 'a' && chrC <= 'z') || (chrC >= 'A' && chrC <= 'Z') || (chrC >= '0' && chrC <= '9')) { + sb.Append((char)chrC); + } else { + sb.AppendFormat("%{0:X2}", (int)chrC); + } + } + Verbose(string.Format(@"EscapeURL(""{0}"")=""{1}""", sURL, sb.ToString())); + return sb.ToString(); + } + + public rotation llEuler2Rot(vector v) + { + v /= 2.0; + double ax = Math.Sin(v.x); + double aw = Math.Cos(v.x); + double by = Math.Sin(v.y); + double bw = Math.Cos(v.y); + double cz = Math.Sin(v.z); + double cw = Math.Cos(v.z); + rotation rRotation = new rotation( + (aw * by * cz) + (ax * bw * cw), + (aw * by * cw) - (ax * bw * cz), + (aw * bw * cz) + (ax * by * cw), + (aw * bw * cw) - (ax * by * cz)); + Verbose("llEuler2Rot({0})={1}", v, rRotation); + return rRotation; + } + + public void llEvade(key kTargetID, list lOptions) + { + Verbose("llEvade({0}, {1})", kTargetID, lOptions); + } + + public void llExecCharacterCmd(integer iCommand, list lOptions) + { + Verbose("llExecCharacterCmd({0}, {1})", iCommand, lOptions.ToVerboseString()); + } + + public Float llFabs(Float fValue) + { + double dblA = Math.Abs(fValue); + Verbose("llFabs({0})={1}", fValue, dblA); + return dblA; + } + + public void llFleeFrom(vector vSource, Float fDistance, list lOptions) + { + Verbose("llFleeFrom({0}, {1}, {2})", vSource, fDistance, lOptions.ToVerboseString()); + } + + public integer llFloor(Float fValue) + { + int intA = (int)Math.Floor(fValue); + Verbose("llFloor({0})={1}", fValue, intA); + return intA; + } + + public void llForceMouselook(integer iMouselook) + { + Verbose("llForceMouselook({0})", iMouselook); + } + + public Float llFrand(Float fMaximum) + { + double dblValue = fMaximum * rdmRandom.NextDouble(); + Verbose("llFrand({0})={1}", fMaximum, dblValue); + return dblValue; + } + + public key llGenerateKey() + { + key kID = new key(Guid.NewGuid()); + Verbose("llGenerateKey()={0}", kID); + return kID; + } + + public vector llGetAccel() + { + vector vAcceleration = vector.ZERO_VECTOR; + Verbose("llGetAccel()={0}", vAcceleration); + return vAcceleration; + } + + public integer llGetAgentInfo(key kID) + { + integer iAgentFlags = 0; + Verbose("llGetAgentInfo({0})={1}", kID, iAgentFlags); + return iAgentFlags; + } + + public String llGetAgentLanguage(key kID) + { + string sLanguageCode = "en-us"; + Verbose(@"llGetAgentLanguage({0})=""{1}""", kID, sLanguageCode); + return sLanguageCode; + } + + public list llGetAgentList(integer iScope, list lOptions) + { + list lAgents = new list(); + Verbose("llGetAgentList({0}, [{1}])={2}", iScope, lOptions, lAgents.ToVerboseString()); + return lAgents; + } + + public vector llGetAgentSize(key kID) + { + vector vAgentSize = vector.ZERO_VECTOR; + Verbose("llGetAgentSize({0})={1}", kID, vAgentSize); + return vAgentSize; + } + + public Float llGetAlpha(integer iFace) + { + Float fOpacity = 1.0F; + Verbose("llGetAlpha({0})={1}", iFace, fOpacity); + return fOpacity; + } + + public Float llGetAndResetTime() + { + // get time + double dblTime = llGetTime(); + Verbose("llGetAndResetTime()=" + dblTime); + + // reset time + llResetTime(); + return dblTime; + } + + public String llGetAnimation(key kID) + { + String sAnimation = ""; + Verbose(@"llGetAnimation({0})=""{1}""", kID, sAnimation); + return sAnimation; + } + + public list llGetAnimationList(key kID) + { + list lAnimationList = new list(); + Verbose("llGetAnimationList({0})={1}", kID, lAnimationList.ToVerboseString()); + return lAnimationList; + } + + public String llGetAnimationOverride(String sAnimationState) + { + String sAnimation = ""; + Verbose(@"llGetAnimationOverride(""{0}"")=""{1}""", sAnimationState, sAnimation); + return sAnimation; + } + + public integer llGetAttached() + { + integer iAttachPoint = 0; + Verbose("llGetAttached()={0}", iAttachPoint); + return iAttachPoint; + } + + public list llGetBoundingBox(key kID) + { + list lBoundingCoords = new list(); + Verbose("llGetBoundingBox({0})={1}", kID, lBoundingCoords.ToVerboseString()); + return lBoundingCoords; + } + + public vector llGetCameraPos() + { + vector vCameraCoords = vector.ZERO_VECTOR; + Verbose("llGetCameraPos()={0}", vCameraCoords); + return vCameraCoords; + } + + public rotation llGetCameraRot() + { + rotation rCameraRotation = rotation.ZERO_ROTATION; + Verbose("llGetCameraRot()={0}", rCameraRotation); + return rCameraRotation; + } + + public vector llGetCenterOfMass() + { + vector vCenterOfMass = vector.ZERO_VECTOR; + Verbose("llGetCenterOfMass()={0}", vCenterOfMass); + return vCenterOfMass; + } + + public list llGetClosestNavPoint(vector lPoint, list lOptions) + { + list lClosetNavPoint = new list(); + Verbose("llGetClosestNavPoint({0}, {1})={2}", lPoint, lOptions.ToVerboseString(), lClosetNavPoint.ToVerboseString()); + return lClosetNavPoint; + } + + public vector llGetColor(integer iFace) + { + vector vColour = vector.ZERO_VECTOR; + Verbose("llGetColor({0})={1}", iFace, vColour); + return vColour; + } + + public key llGetCreator() + { + key kResult = Properties.Settings.Default.AvatarKey; + Verbose("llGetCreator()={0}", kResult); + return kResult; + } + + public String llGetDate() + { + string sResult = DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd"); + Verbose("llGetDate()={0}", sResult); + return sResult; + } + + public string llGetDisplayName(key kAvatarID) + { + string sResult = ""; + Verbose("llGetDisplayName({0})={1}", kAvatarID, sResult); + return sResult; + } + + public Float llGetEnergy() + { + Float fResult = 1.23; + Verbose("llGetEnergy()={0}", fResult); + return fResult; + } + + public string llGetEnv(string sDataRequest) + { + string sResult; + switch (sDataRequest) { + case "sim_channel": + sResult = "Second Life Server"; + break; + case "sim_version": + sResult = "11.11.09.244706"; + break; + default: + sResult = ""; + break; + } + Verbose(@"llGetEnv(""{0}"")=""{1}""", sDataRequest, sResult); + return sResult; + } + + public vector llGetForce() + { + vector vForce = vector.ZERO_VECTOR; + Verbose("llGetForce()={0}", vForce); + return vForce; + } + + public integer llGetFreeMemory() + { + integer iFreeMemory = 16000; + Verbose("llGetFreeMemory()={0}", iFreeMemory); + return iFreeMemory; + } + + public integer llGetFreeURLs() + { + integer iFreeURLs = 0; + Verbose("llGetFreeURLs()={0}", iFreeURLs); + return iFreeURLs; + } + + public Float llGetGMTclock() + { + Float fResult = DateTime.Now.ToUniversalTime().TimeOfDay.TotalSeconds; + Verbose("llGetGMTclock()={0}", fResult); + return fResult; + } + + public vector llGetGeometricCenter() + { + vector vResult = ZERO_VECTOR; + Verbose("llGetGeometricCenter()={0}", vResult); + return vResult; + } + + public String llGetHTTPHeader(key kRequestID, String sDesiredHeader) + { + String sResult = "not-implemented"; + Verbose(@"llGetHTTPHeader({0}, ""{1}"")=""{2}""", kRequestID, sDesiredHeader, sResult); + return sResult; + } + + public key llGetInventoryCreator(String sItem) + { + key kAvatarID = Properties.Settings.Default.AvatarKey; + Verbose(@"llGetInventoryCreator(""{0}"")={1}", sItem, kAvatarID); + return kAvatarID; + } + + public key llGetInventoryKey(String sItemName) + { + key kID = host.GetInventoryKey(sItemName); + Verbose(@"llGetInventoryKey(""{0}"")={1}", sItemName, kID); + return kID; + } + + public String llGetInventoryName(integer iItemType, integer iItemIndex) + { + string sItemName = host.GetInventoryName(iItemType, iItemIndex); + Verbose(@"llGetInventoryName({0}, {1})=""{2}""", iItemType, iItemIndex, sItemName); + return sItemName; + } + + public integer llGetInventoryNumber(integer iType) + { + int iTypeCount = host.GetInventoryNumber(iType); + Verbose("llGetInventoryNumber({0})={1}", iType, iTypeCount); + return iTypeCount; + } + + public integer llGetInventoryPermMask(String sItemName, integer iPermMask) + { + integer iPermissionState = 0; + Verbose(@"llGetInventoryPermMask(""{0}"", {1})={2}", sItemName, iPermMask, iPermissionState); + return iPermissionState; + } + + public integer llGetInventoryType(String sItemName) + { + integer iItemType = host.GetInventoryType(sItemName); + Verbose(@"llGetInventoryType(""{0}"")={1}", sItemName, iItemType); + return iItemType; + } + + public key llGetKey() + { + key kID = host.GetKey(); + Verbose(@"llGetKey()=""{0}""", kID.ToString()); + return kID; + } + + public key llGetLandOwnerAt(vector vPosition) + { + key kAvatarID = new key(Guid.NewGuid()); + Verbose("llGetLandOwnerAt({0})={1}", vPosition, kAvatarID); + return kAvatarID; + } + + public key llGetLinkKey(integer iLinkIndex) + { + key kID = new key(Guid.NewGuid()); + Verbose("llGetLinkKey({0})={1}", iLinkIndex, kID); + return kID; + } + + public list llGetLinkMedia(integer iLinkIndex, integer iFace, list lParameters) + { + list lMediaList = new list(); + Verbose("llGetLinkMedia({0}, {1}, {2})={3}", iLinkIndex, iFace, lParameters.ToVerboseString(), lMediaList.ToVerboseString()); + return lMediaList; + } + + public String llGetLinkName(integer iLinkIndex) + { + String sLinkName = ""; + Verbose(@"llGetLinkName({0})=""{1}""", iLinkIndex, sLinkName); + return sLinkName; + } + + public integer llGetLinkNumber() + { + integer iLinkIndex = 0; + Verbose("llGetLinkNumber()={0}", iLinkIndex); + return iLinkIndex; + } + + public integer llGetLinkNumberOfSides(integer iLinkIndex) + { + integer iSides = 6; + Verbose("llGetLinkNumberOfSides({0})={1}", iLinkIndex, iSides); + return iSides; + } + + public list llGetLinkPrimitiveParams(integer iLinkIndex, list lParametersRequested) + { + list lParametersReturned = new list(); + Verbose("llGetLinkPrimitiveParams({0}, {1})={2}", iLinkIndex, lParametersRequested.ToVerboseString(), lParametersReturned); + return lParametersReturned; + } + + public integer llGetListEntryType(list lSource, integer iIndex) + { + integer iEntryType; + + if (iIndex < 0) { + iIndex = lSource.Count + iIndex; + } + if (iIndex >= lSource.Count || iIndex < 0) { + iEntryType = 0; + } else { + switch (lSource[iIndex].GetType().ToString().Replace("LSLEditor.SecondLife+", "")) { + case "System.Double": + case "Float": + iEntryType = TYPE_FLOAT; + break; + case "System.String": + case "String": + iEntryType = TYPE_STRING; + break; + case "System.Int32": + case "integer": + iEntryType = TYPE_INTEGER; + break; + case "key": + iEntryType = TYPE_KEY; + break; + case "vector": + iEntryType = TYPE_VECTOR; + break; + case "rotation": + iEntryType = TYPE_ROTATION; + break; + default: + iEntryType = TYPE_INVALID; + break; + } + } + Verbose("llGetListEntryType({0}, {1})={2}", lSource.ToVerboseString(), iIndex, iEntryType); + return iEntryType; + } + + public integer llGetListLength(list lSource) + { + integer iLength = lSource.Count; + Verbose("llGetListLength({0})={1}", lSource.ToVerboseString(), iLength); + return iLength; + } + + public vector llGetLocalPos() + { + Verbose("llGetLocalPos()={0}", vPosition); + return vPosition; + } + + public rotation llGetLocalRot() + { + Verbose("llGetLocalRot()={0}", rRotationlocal); + return rRotationlocal; + } + + public Float llGetMass() + { + Float fMass = 1.23; + Verbose("llGetMass()={0}", fMass); + return fMass; + } + + public Float llGetMassMKS() + { + Float fMass = 1.23; + Verbose("llGetMassMKS()={0}", fMass); + return fMass; + } + + public integer llGetMemoryLimit() + { + integer iMaxMemory = 65536; + Verbose("llGetMemoryLimit()={0}", iMaxMemory); + return iMaxMemory; + } + + public void llGetNextEmail(String sAddress, String sSubject) + { + Verbose(@"llGetNextEmail(""{0}"", ""{1}"")", sAddress, sSubject); + } + + public key llGetNotecardLine(String sNoteName, integer iLineIndex) + { + key kID = host.GetNotecardLine(sNoteName, iLineIndex); + Verbose(@"llGetNotecardLine(""{0}"", {1})={2}", sNoteName, iLineIndex, kID); + return kID; + } + + public key llGetNumberOfNotecardLines(String sNoteName) + { + key kID = host.GetNumberOfNotecardLines(sNoteName); + Verbose(@"llGetNumberOfNotecardLines(""{0}"")={1}", sNoteName, kID); + return kID; + } + + public integer llGetNumberOfPrims() + { + integer iPrimCount = 10; + Verbose("llGetNumberOfPrims()={0}", iPrimCount); + return iPrimCount; + } + + public integer llGetNumberOfSides() + { + integer iSideCount = 6; + Verbose("llGetNumberOfSides()={0}", iSideCount); + return iSideCount; + } + + public String llGetObjectDesc() + { + string sDescription = host.GetObjectDescription(); + Verbose(@"llGetObjectDesc()=""{0}""", sDescription); + return sDescription; + } + + public list llGetObjectDetails(key kID, list lObjectFlags) + { + list lObjectDetails = new list(); + for (int intI = 0; intI < lObjectFlags.Count; intI++) { + if (!(lObjectFlags[intI] is integer)) { + continue; + } + switch ((int)(integer)lObjectFlags[intI]) { + case OBJECT_NAME: + lObjectDetails.Add((SecondLife.String)host.GetObjectName(new Guid(kID.guid))); + break; + case OBJECT_DESC: + lObjectDetails.Add((SecondLife.String)host.GetObjectDescription(new Guid(kID.guid))); + break; + case OBJECT_POS: + lObjectDetails.Add(llGetPos()); + break; + case OBJECT_ROT: + lObjectDetails.Add(llGetRot()); + break; + case OBJECT_VELOCITY: + lObjectDetails.Add(llGetVel()); + break; + case OBJECT_OWNER: + lObjectDetails.Add(llGetOwner()); + break; + case OBJECT_GROUP: + lObjectDetails.Add(OBJECT_UNKNOWN_DETAIL); + break; + case OBJECT_CREATOR: + lObjectDetails.Add(llGetCreator()); + break; + default: + lObjectDetails.Add(OBJECT_UNKNOWN_DETAIL); + break; + } + } + Verbose(@"llGetObjectDetails({0}, {1})={2}", kID, lObjectFlags, lObjectDetails); + return lObjectDetails; + } + + public Float llGetObjectMass(key kID) + { + Float fMass = 0.0F; + Verbose("llGetObjectMass({0})={1}", kID, fMass); + return fMass; + } + + public String llGetObjectName() + { + string sObjectName = host.GetObjectName(); + Verbose(@"llGetObjectName()=""{0}""", sObjectName); + return sObjectName; + } + + public integer llGetObjectPermMask(integer iRequestedMask) + { + integer iRetunedMaskState = 0; + Verbose("llGetObjectPermMask({0})={1}", iRequestedMask, iRetunedMaskState); + return iRetunedMaskState; + } + + // added 4 mei 2007 + public integer llGetObjectPrimCount(key kID) + { + integer iPrimCount = 0; + Verbose("llGetObjectPrimCount({0})={1}", kID, iPrimCount); + return iPrimCount; + } + + public vector llGetOmega() + { + vector vOmega = vector.ZERO_VECTOR; + Verbose("llGetOmega()={0}", vOmega); + return vOmega; + } + + public key llGetOwner() + { + key kID = new key(Properties.Settings.Default.AvatarKey); + Verbose("llGetOwner()={0}", kID); + return kID; + } + + public key llGetOwnerKey(key kID) + { + key kAvatarID = llGetOwner(); // This is incorrect, as the owner of this object may not be the owner of kID + Verbose("llGetOwnerKey({0})={1}", kID, kAvatarID); + return kAvatarID; + } + + /* + PARCEL_DETAILS_NAME 0 The name of the parcel. 63 Characters string + PARCEL_DETAILS_DESC 1 The description of the parcel. 127 Characters string + PARCEL_DETAILS_OWNER 2 The parcel owner's key. (36 Characters) key + PARCEL_DETAILS_GROUP 3 The parcel group's key. (36 Characters) key + PARCEL_DETAILS_AREA 4 The parcel's area, in sqm. (5 Characters) integer + */ + public list llGetParcelDetails(vector vPosition, list lRequestedDetails) + { + list lReturnedDetails = new list(); + for (int intI = 0; intI < lRequestedDetails.Count; intI++) { + if (lRequestedDetails[intI] is integer) { + switch ((int)(integer)lRequestedDetails[intI]) { + case PARCEL_DETAILS_NAME: + lReturnedDetails.Add(Properties.Settings.Default.ParcelName); + break; + case PARCEL_DETAILS_DESC: + lReturnedDetails.Add(Properties.Settings.Default.ParcelDescription); + break; + case PARCEL_DETAILS_OWNER: + lReturnedDetails.Add(new key(Properties.Settings.Default.ParcelOwner)); + break; + case PARCEL_DETAILS_GROUP: + lReturnedDetails.Add(new key(Properties.Settings.Default.ParcelGroup)); + break; + case PARCEL_DETAILS_AREA: + lReturnedDetails.Add(new integer(Properties.Settings.Default.ParcelArea)); + break; + case PARCEL_DETAILS_ID: + lReturnedDetails.Add(new integer(Properties.Settings.Default.ParcelID)); + break; + case PARCEL_DETAILS_SEE_AVATARS: + lReturnedDetails.Add(new integer(Properties.Settings.Default.ParcelSeeAvatars)); + break; + default: + break; + } + } + } + Verbose("llGetParcelDetails({0}, {1})={2}", vPosition, lRequestedDetails.ToVerboseString(), lReturnedDetails.ToVerboseString()); + return lReturnedDetails; + } + + public integer llGetParcelFlags(vector vPosition) + { + integer iReturnedFlags = 0; + Verbose("llGetParcelFlags({0})={1}", vPosition, iReturnedFlags); + return iReturnedFlags; + } + + public integer llGetParcelMaxPrims(vector vPosition, integer iSimWide) + { + integer iMaxPrims = 0; + Verbose("llGetParcelMaxPrims({0}, {1})={2}", vPosition, iSimWide, iMaxPrims); + return iMaxPrims; + } + + public string llGetParcelMusicURL() + { + Verbose(@"llGetParcelMaxPrims()=""{0}""", sParcelMusicURL); + return sParcelMusicURL; + } + + public integer llGetParcelPrimCount(vector vPosition, integer iCategory, integer iSimWide) + { + integer iPrimCount = 0; + Verbose("llGetParcelPrimCount({0}, {1}, {2})={3}", vPosition, iCategory, iSimWide, iPrimCount); + return iPrimCount; + } + + public list llGetParcelPrimOwners(vector vPosition) + { + list lOwners = new list(new object[] { Properties.Settings.Default.AvatarKey, 10 }); + Verbose("llGetParcelPrimOwners({0})={1}", vPosition, lOwners); + return lOwners; + } + + public integer llGetPermissions() + { + integer iPermissions = 0; + Verbose("llGetPermissions()={0}", iPermissions); + return iPermissions; + } + + public key llGetPermissionsKey() + { + key kID = key.NULL_KEY; + Verbose("llGetPermissionsKey()={0}", kID); + return kID; + } + + public list llGetPhysicsMaterial() + { + list lMaterials = new list(); + Verbose("llGetPhysicalMaterial()={0}", lMaterials); + return lMaterials; + } + + public vector llGetPos() + { + Verbose("llGetPos()={0}", vPosition); + return vPosition; + } + + public list llGetPrimMediaParams(integer iFace, list lDesiredParams) + { + list lReturnedParams = new list(); + Verbose("llGetPrimMediaParams({0}, {1})={2}", iFace, lDesiredParams.ToVerboseString(), lReturnedParams.ToVerboseString()); + return lReturnedParams; + } + + public list llGetPrimitiveParams(list lDesiredParams) + { + list lReturnedParams = new list(); + Verbose("llGetPrimitiveParams({0})={1}", lDesiredParams.ToVerboseString(), lReturnedParams.ToVerboseString()); + return lReturnedParams; + } + + // 334 + public integer llGetRegionAgentCount() + { + integer iAgentCount = 0; + Verbose("llGetRegionAgentCount()={0}", iAgentCount); + return iAgentCount; + } + + public vector llGetRegionCorner() + { + System.Drawing.Point pRegionCorner = Properties.Settings.Default.RegionCorner; + vector vRegionCorner = new vector(pRegionCorner.X, pRegionCorner.Y, 0); + Verbose("llGetRegionCorner()={0}", vRegionCorner); + return vRegionCorner; + } + + public Float llGetRegionFPS() + { + Float fRegionFPS = Properties.Settings.Default.RegionFPS; + Verbose("llGetRegionFPS()={0}", fRegionFPS); + return fRegionFPS; + } + + public integer llGetRegionFlags() + { + integer iRegionFlags = 0; + Verbose("llGetRegionFlags()={0}", iRegionFlags); + return iRegionFlags; + } + + public String llGetRegionName() + { + String sRegionName = Properties.Settings.Default.RegionName; + Verbose("llGetRegionName()={0}", sRegionName); + return sRegionName; + } + + public Float llGetRegionTimeDilation() + { + Float fTimeDilation = 0.9F; + Verbose("llGetRegionTimeDilation()={0}", fTimeDilation); + return fTimeDilation; + } + + public vector llGetRootPosition() + { + vector vRootPosition = vector.ZERO_VECTOR; + Verbose("llGetRootPosition()={0}", vRootPosition); + return vRootPosition; + } + + public rotation llGetRootRotation() + { + rotation vRootRotation = rotation.ZERO_ROTATION; + Verbose("llGetRootRotation()={0}", vRootRotation); + return vRootRotation; + } + + public rotation llGetRot() + { + Verbose("llGetRot()={0}", rRotation); + return rRotation; + } + + public integer llGetSPMaxMemory() + { + integer iMaxSPMemory = 65536; + Verbose("llGetSPMaxMemory()={0}", iMaxSPMemory); + return iMaxSPMemory; + } + + public vector llGetScale() + { + Verbose("llGetScale()=" + vScale); + return vScale; + } + + public String llGetScriptName() + { + string sScriptName = host.GetScriptName(); + Verbose("llGetScriptName()={0}", sScriptName); + return sScriptName; + } + + public integer llGetScriptState(String sScriptName) + { + integer iScriptState = 0; + Verbose(@"llGetScriptState(""{0}"")={1}", sScriptName, iScriptState); + return iScriptState; + } + + public float llGetSimStats(integer iStatType) + { + float iSimStat = 0.0F; + Verbose("llGetSimStats({0})={1}", iStatType, iSimStat); + return iSimStat; + } + + public String llGetSimulatorHostname() + { + String sSimHostName = ""; + Verbose(@"llGetSimulatorHostname()=""{0}""", sSimHostName); + return sSimHostName; + } + + public integer llGetStartParameter() + { + Verbose("llGetStartParameter()={0}" + iStartParameter); + return iStartParameter; + } + + public list llGetStaticPath(vector vStart, vector vEnd, Float fRadius, list lParameters) + { + list lReturn = new list(); + Verbose("llGetStaticPath({0}, {1}, {2}, {3})={4}", vStart, vEnd, fRadius, lParameters.ToVerboseString(), lReturn.ToVerboseString()); + return lReturn; + } + + public integer llGetStatus(integer iRequestedStatus) + { + integer iStatus = 0; + Verbose("llGetStatus({0})={1}", iRequestedStatus, iStatus); + return iStatus; + } + + public String llGetSubString(String sSource, integer iStart, integer iEnd) + { + string src = sSource; + int start = iStart; + int end = iEnd; + + StringBuilder sResult = new StringBuilder(); + + int intLength = src.Length; + + if (CorrectIt(intLength, ref start, ref end)) { + if (start <= end) { + for (int intI = start; intI <= end; intI++) { + sResult.Append(src[intI]); + } + } else { // excluding + for (int intI = 0; intI <= end; intI++) { + sResult.Append(src[intI]); + } + for (int intI = start; intI < intLength; intI++) { + sResult.Append(src[intI]); + } + } + } + Verbose(string.Format(@"GetSubString(""{0}"", {1}, {2})=""{3}""", sSource, iStart, iEnd, sResult)); + return sResult.ToString(); + } + + public vector llGetSunDirection() + { + vector vSunDirection = vector.ZERO_VECTOR; + Verbose("llGetSunDirection()={0}", vSunDirection); + return vSunDirection; + } + + public String llGetTexture(integer iFace) + { + String sTexture = ""; + Verbose(@"llGetTexture({0})=""{1}""", iFace, sTexture); + return sTexture; + } + + public vector llGetTextureOffset(integer iFace) + { + vector vOffset = vector.ZERO_VECTOR; + Verbose("llGetTextureOffset({0})={1}", iFace, vOffset); + return vOffset; + } + + public Float llGetTextureRot(integer iFace) + { + Float fTextureRot = 0.0; + Verbose("llGetTextureRot({0})={1}", iFace, fTextureRot); + return fTextureRot; + } + + public vector llGetTextureScale(integer iFace) + { + vector vScale = vector.ZERO_VECTOR; + Verbose("llGetTextureScale({0})={1}", iFace, vScale); + return vScale; + } + + public Float llGetTime() + { + TimeSpan span = DateTime.Now.ToUniversalTime() - dtDateTimeScriptStarted; + Verbose("llGetTime()={0}", span.TotalSeconds); + return span.TotalSeconds; + } + + public Float llGetTimeOfDay() + { + // dummy + Float fSeconds = llGetTime(); + Verbose("llGetTimeOfDay()={0}", fSeconds); + return fSeconds; + } + + public string llGetTimestamp() + { + string sTimestamp = DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.ffffffZ", System.Globalization.DateTimeFormatInfo.InvariantInfo); + Verbose(@"llGetTimestamp()=""{0}""", sTimestamp); + return sTimestamp; + } + + public vector llGetTorque() + { + vector vTorque = vector.ZERO_VECTOR; + Verbose("llGetTorque()={0}", vTorque); + return vTorque; + } + + public integer llGetUnixTime() + { + DateTime dtUnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0); + TimeSpan tsSeconds = DateTime.Now.ToUniversalTime() - dtUnixEpoch; + Verbose("llGetUnixTime()={0}", (int)tsSeconds.TotalSeconds); + return (int)tsSeconds.TotalSeconds; + } + + public integer llGetUsedMemory() + { + integer iUsedMemory = 65536; + Verbose("llGetUsedMemory()={0}", iUsedMemory); + return iUsedMemory; + } + + public string llGetUsername(key kAvatarID) + { + // TODO Find a dummy username. + string sUserName = ""; + Verbose(@"llGetUsername({0})=""{1}""", kAvatarID, sUserName); + return sUserName; + } + + public vector llGetVel() + { + vector vVelocity = vector.ZERO_VECTOR; + Verbose("llGetVel()={0}", vVelocity); + return vVelocity; + } + + public Float llGetWallclock() + { + Float fSeconds = (int)DateTime.Now.AddHours(-9.0).TimeOfDay.TotalSeconds; + Verbose("llGetWallclock()={0}", fSeconds); + return fSeconds; + } + + public void llGiveInventory(key kID, String sItemName) + { + Verbose(@"llGiveInventory({0}, ""{1}"")", kID, sItemName); + } + + public void llGiveInventoryList(key kID, String sDirectory, list lInventory) + { + Verbose(@"llGiveInventoryList({0}, ""{1}"", {2})", kID, sDirectory, lInventory.ToVerboseString()); + } + + public integer llGiveMoney(key kAvatarID, integer iAmount) + { + Verbose("llGiveMoney({0}, {1})=0", kAvatarID, iAmount); + return 0; + } + + public Float llGround(vector vOffset) + { + Float fHeight = 25.0; + Verbose("llGround({0})={1}", vOffset, fHeight); + return fHeight; + } + + public vector llGroundContour(vector vOffset) + { + vector vContour = vector.ZERO_VECTOR; + Verbose("llGroundContour({0})={1}", vOffset, vContour); + return vContour; + } + + public vector llGroundNormal(vector vOffset) + { + vector vGroundNormal = new vector(0.0, 0.0, 1.0); + Verbose("llGroundNormal({0})={1}", vOffset, vGroundNormal); + return vGroundNormal; + } + + public void llGroundRepel(Float fHeight, integer iWater, Float fTau) + { + Verbose("llGroundRepel({0}, {1}, {2})", fHeight, iWater, fTau); + } + + public vector llGroundSlope(vector vOffset) + { + vector vSlope = vector.ZERO_VECTOR; + Verbose("llGroundSlope({0})={1}" + vOffset, vSlope); + return vSlope; + } + + public key llHTTPRequest(String sURL, list lParameters, String sBody) + { + key kRequestID = host.Http(sURL, lParameters, sBody); + Verbose(@"llHTTPRequest(""{0}"", {1}, ""{2}"")=""{3}""", sURL, lParameters.ToVerboseString(), sBody, kRequestID); + return kRequestID; + } + + public void llHTTPResponse(key kRequestID, integer iStatus, String sBody) + { + Verbose(@"llHTTPResponse({0}, {1}, ""{2}"")", kRequestID, iStatus, sBody); + } + + public String llInsertString(String sDestination, integer iIndex, String sSource) + { + string strDestination = sDestination; + string strSource = sSource; + int intPosition = iIndex; + string sResult; + + if (intPosition < strDestination.Length) { + sResult = strDestination.Substring(0, intPosition) + strSource + strDestination.Substring(intPosition); + } else if (intPosition >= 0) { + sResult = strDestination + strSource; + } else { + sResult = "**ERROR**"; + } + Verbose(@"llInsertString(""{0}"", {1}, ""{2}"")=""{3}""", sDestination, iIndex, sSource, sResult); + return sResult; + } + + public void llInstantMessage(key kAvatarID, String sMessage) + { + Verbose(@"llInstantMessage({0}, ""{1}"")", kAvatarID, sMessage); + } + + public String llIntegerToBase64(integer iNumber) + { + byte[] data = new byte[4]; + data[3] = (byte)(iNumber & 0xff); + data[2] = (byte)((iNumber >> 8) & 0xff); + data[1] = (byte)((iNumber >> 16) & 0xff); + data[0] = (byte)((iNumber >> 24) & 0xff); + string sResult = Convert.ToBase64String(data); + Verbose(@"llIntegerToBase64({0})=""{1}""", iNumber, sResult); + return sResult; + } + + public list llJson2List(string sJSON) + { + // TODO implement conversion to list + list lJSON = new list(); + Verbose("llJson2List({0})={1}", sJSON, lJSON); + return lJSON; + } + + public string llJsonGetValue(string sJSON, list lSpecifiers) + { + // TODO determine return value from list + string sReturn = JSON_INVALID; + Verbose("llJsonGetValue({0}, {1})= {2}", sJSON, lSpecifiers, sReturn); + return sReturn; + } + + public string llJsonSetValue(string sJSON, list lSpecifiers, string sValue) + { + // TODO determine return value + string sReturn = JSON_INVALID; + Verbose("llJsonGetValue({0}, {1}, {2})= {3}", sJSON, lSpecifiers, sValue, sReturn); + return sReturn; + } + + public string llJsonValueType(string sJSON, list lSpecifiers) + { + // TODO determine return value + string sReturn = JSON_INVALID; + Verbose("llJsonGetValue({0}, {1})= {2}", sJSON, lSpecifiers, sReturn); + return sReturn; + } + + public String llKey2Name(key kID) + { + string sAvatarName = ""; + if (Properties.Settings.Default.AvatarKey == kID) { + sAvatarName = Properties.Settings.Default.AvatarName; + } + Verbose(@"llKey2Name({0})=""{1}""", kID, sAvatarName); + return sAvatarName; + } + + public void llLinkParticleSystem(integer iLink, list lParameters) + { + Verbose("llLinkParticleSystem({0}, {1})", iLink, lParameters.ToVerboseString()); + } + + public void llLinkSitTarget(integer iLinkIndex, vector vOffset, rotation rRotation) + { + Verbose("llLinkSitTarget({0}, {1}, {2})", iLinkIndex, vOffset, rRotation); + } + + public String llList2CSV(list lSource) + { + StringBuilder sCSV = new StringBuilder(); + for (int intI = 0; intI < lSource.Count; intI++) { + if (intI > 0) { + sCSV.Append(", "); + } + sCSV.Append(lSource[intI].ToString()); + } + Verbose(@"llList2CSV({0})=""{1}""", lSource.ToVerboseString(), sCSV.ToString()); + return sCSV.ToString(); + } + + public Float llList2Float(list lSource, integer iIndex) + { + Float fResult; + if (iIndex < 0) { + iIndex = lSource.Count + iIndex; + } + if (iIndex >= lSource.Count || iIndex < 0) { + fResult = 0.0; + } else { + fResult = (Float)lSource[iIndex].ToString(); + } + Verbose("llList2Float({0}, {1})={2}", lSource.ToVerboseString(), iIndex, fResult); + return fResult; + } + + public integer llList2Integer(list lSrc, integer iIndex) + { + integer iResult; + if (iIndex < 0) { + iIndex = lSrc.Count + iIndex; + } + if (iIndex >= lSrc.Count || iIndex < 0) { + iResult = 0; + } else { + iResult = (integer)lSrc[iIndex].ToString(); + } + Verbose("llList2Integer({0}, {1})={2}", lSrc.ToVerboseString(), iIndex, iResult); + return iResult; + } + + public string llList2Json(string sType, list lValues) + { + // TODO determine return value + string sReturn = JSON_INVALID; + Verbose(@"llList2Json({0}, {1})=""{2}""", sType, lValues.ToVerboseString(), sReturn); + return sReturn; + } + + public key llList2Key(list lSource, integer iIndex) + { + key kResult; + if (iIndex < 0) { + iIndex = lSource.Count + iIndex; + } + if (iIndex >= lSource.Count || iIndex < 0) { + kResult = key.NULL_KEY; + } else { + kResult = (key)lSource[iIndex].ToString(); + } + Verbose("llList2Key({0}, {1})={2}", lSource.ToVerboseString(), iIndex, kResult); + return kResult; + } + + public list llList2List(list lSource, integer iStart, integer iEnd) + { + int iLength = lSource.Count; + + int start = iStart; + int end = iEnd; + + list lResult = new list(); + + if (CorrectIt(iLength, ref start, ref end)) { + if (start <= end) { + for (int intI = start; intI <= end; intI++) { + lResult.Add(lSource[intI]); + } + } else { // excluding + for (int intI = 0; intI <= end; intI++) { + lResult.Add(lSource[intI]); + } + for (int intI = start; intI < iLength; intI++) { + lResult.Add(lSource[intI]); + } + } + } + + Verbose(string.Format("List2List({0}, {1}, {2})={3}", lSource.ToVerboseString(), iStart, iEnd, lResult.ToVerboseString())); + return lResult; + } + + public list llList2ListStrided(list lSource, integer iStart, integer iEnd, integer iStride) + { + int iLength = lSource.Count; + + int intStart = iStart; + int intEnd = iEnd; + + list lTemp = new list(); + + if (CorrectIt(iLength, ref intStart, ref intEnd)) { + if (intStart <= intEnd) { + for (int intI = intStart; intI <= intEnd; intI++) { + lTemp.Add(lSource[intI]); + } + } else { // excluding + for (int intI = 0; intI <= intEnd; intI++) { + lTemp.Add(lSource[intI]); + } + for (int intI = intStart; intI < iLength; intI++) { + lTemp.Add(lSource[intI]); + } + } + } + list lResult = new list(); + string sRemark = ""; + if (iStride <= 0) { + sRemark = " ** stride must be > 0 **"; + } else { + if (intStart == 0) { + for (int intI = 0; intI < lTemp.Count; intI += iStride) { + lResult.Add(lTemp[intI]); + } + } else { + for (int intI = iStride - 1; intI < lTemp.Count; intI += iStride) { + lResult.Add(lTemp[intI]); + } + } + } + Verbose(@"llList2ListStrided({0}, {1}, {2}, {3})={4}{5}", lSource.ToVerboseString(), intStart, intEnd, iStride, lResult.ToVerboseString(), sRemark); + return lResult; + } + + public rotation llList2Rot(list lSource, integer iIndex) + { + rotation rResult; + if (iIndex < 0) { + iIndex = lSource.Count + iIndex; + } + if (iIndex >= lSource.Count || iIndex < 0) { + rResult = ZERO_ROTATION; + } else { + if (lSource[iIndex] is rotation) { + rResult = (rotation)lSource[iIndex]; + } else { + rResult = rotation.ZERO_ROTATION; + } + } + Verbose("llList2Rot({0}, {1})={2}", lSource.ToVerboseString(), iIndex, rResult); + return rResult; + } + + public String llList2String(list lSource, integer iIndex) + { + String sResult; + if (iIndex < 0) { + iIndex = lSource.Count + iIndex; + } + if (iIndex >= lSource.Count || iIndex < 0) { + sResult = ""; + } else { + sResult = (String)lSource[iIndex].ToString(); + } + Verbose(@"llList2String({0}, {1})=""{2}""", lSource.ToVerboseString(), iIndex, sResult); + return sResult; + } + + public vector llList2Vector(list lSource, integer iIndex) + { + vector vResult; + if (iIndex < 0) { + iIndex = lSource.Count + iIndex; + } + if (iIndex >= lSource.Count || iIndex < 0) { + vResult = ZERO_VECTOR; + } else { + if (lSource[iIndex] is vector) { + vResult = (vector)lSource[iIndex]; + } else { + vResult = vector.ZERO_VECTOR; + } + } + Verbose("llList2Vector({0}, {1})={2}", lSource.ToVerboseString(), iIndex, vResult); + return vResult; + } + + public integer llListFindList(list lSource, list lMatch) + { + if (lSource.Count == 0) { + return -1; + } + if (lMatch.Count == 0) { + return 0; + } + if (lMatch.Count > lSource.Count) { + return -1; + } + + int iReturn = -1; + for (int intI = 0; intI <= (lSource.Count - lMatch.Count); intI++) { + if (lMatch[0].Equals(lSource[intI])) { + bool blnOkay = true; + for (int intJ = 1; intJ < lMatch.Count; intJ++) { + if (!lMatch[intJ].Equals(lSource[intI + intJ])) { + blnOkay = false; + break; + } + } + if (blnOkay) { + iReturn = intI; + break; + } + } + } + Verbose("llListFindList({0}, {1}={2}", lSource.ToVerboseString(), lMatch.ToVerboseString(), iReturn); + return iReturn; + } + + public list llListInsertList(list lDestination, list lSource, integer iIndex) + { + int intLength = lDestination.Count; + list lResult = new list(); + if (iIndex < 0) { + iIndex = lDestination.Count + iIndex; + } + + for (int intI = 0; intI < Math.Min(iIndex, intLength); intI++) { + lResult.Add(lDestination[intI]); + } + + lResult.AddRange(lSource); + + for (int intI = Math.Max(0, iIndex); intI < intLength; intI++) { + lResult.Add(lDestination[intI]); + } + + Verbose("llListInsertList({0}, {1}, {2})={3}", lDestination.ToVerboseString(), lSource.ToVerboseString(), iIndex, lResult.ToVerboseString()); + return lResult; + } + + public list llListRandomize(list lSource, integer iStride) + { + list lResult; + ArrayList buckets = List2Buckets(lSource, iStride); + if (buckets == null) { + lResult = new list(lSource); + } else { + lResult = Buckets2List(RandomShuffle(buckets), iStride); + } + Verbose("llListRandomize({0}, {1})={2}", lSource.ToVerboseString(), iStride, lResult.ToVerboseString()); + return lResult; + } + + // TODO check this!!! + public list llListReplaceList(list lDestination, list lSource, integer iStart, integer iEnd) + { + int intLength = lDestination.Count; + + int intStart = iStart; + int intEnd = iEnd; + CorrectIt(intLength, ref intStart, ref intEnd); + + list lResult = new list(); + if (intStart <= intEnd) { + for (int intI = 0; intI < intStart; intI++) { + lResult.Add(lDestination[intI]); + } + lResult.AddRange(lSource); + for (int intI = intEnd + 1; intI < intLength; intI++) { + lResult.Add(lDestination[intI]); + } + } else { + // where to add src????? + for (int intI = intEnd; intI <= intStart; intI++) { + lResult.Add(lDestination[intI]); + } + } + Verbose("llListReplaceList({0}, {1}, {2}, {3}={4}", lDestination.ToVerboseString(), lSource.ToVerboseString(), intStart, intEnd, lResult.ToVerboseString()); + return lResult; + } + + public list llListSort(list lSource, integer iStride, integer iAscending) + { + int intAscending = iAscending; + int intStride = iStride; + list lResult; + ArrayList buckets = List2Buckets(lSource, intStride); + if (buckets == null) { + lResult = new list(lSource); + } else { + buckets.Sort(new BucketComparer(intAscending)); + lResult = Buckets2List(buckets, intStride); + } + Verbose("llListSort({0}, {1}, {2})={3}", lSource.ToVerboseString(), iStride, iAscending, lResult.ToVerboseString()); + return lResult; + } + + /* +0 LIST_STAT_RANGE Returns the range. +1 LIST_STAT_MIN Retrieves the smallest number. +2 LIST_STAT_MAX Retrieves the largest number. +3 LIST_STAT_MEAN Retrieves the mean (average). +4 LIST_STAT_MEDIAN Retrieves the median number. +5 LIST_STAT_STD_DEV Calculates the standard deviation. +6 LIST_STAT_SUM Calculates the sum. +7 LIST_STAT_SUM_SQUARES Calculates the sum of the squares. +8 LIST_STAT_NUM_COUNT Retrieves the amount of float and integer elements. Theoretically similar to llGetListLength, except LL states that this function ignores all non-integer and non-float elements. Therefore, this is a useful tool for mixed lists of numbers and non-numbers. +9 LIST_STAT_GEOMETRIC_MEAN Calculates the geometric mean. All numbers must be greater than zero for this to work, according to LL. + */ + public Float llListStatistics(integer iOperation, list lInput) + { + double dResult = 0.0; + double rmin, rmax; + int operation = iOperation; + List input = GetListOfNumbers(lInput); + if (input.Count > 0) { + switch (operation) { + case LIST_STAT_RANGE: + rmin = double.MaxValue; + rmax = double.MinValue; + for (int intI = 0; intI < input.Count; intI++) { + if (input[intI] < rmin) { + rmin = input[intI]; + } + if (input[intI] > rmax) { + rmax = input[intI]; + } + } + dResult = rmax - rmin; + break; + case LIST_STAT_MIN: + dResult = double.MaxValue; + for (int intI = 0; intI < input.Count; intI++) { + if (input[intI] < dResult) { + dResult = input[intI]; + } + } + break; + case LIST_STAT_MAX: + dResult = double.MinValue; + for (int intI = 0; intI < input.Count; intI++) { + if (input[intI] > dResult) { + dResult = input[intI]; + } + } + break; + case LIST_STAT_MEAN: + for (int intI = 0; intI < input.Count; intI++) { + dResult += input[intI]; + } + dResult = dResult / input.Count; + break; + case LIST_STAT_MEDIAN: + input.Sort(); + if (Math.Ceiling(input.Count * 0.5) == input.Count * 0.5) { + dResult = input[(int)((input.Count * 0.5) - 1)] + (input[(int)(input.Count * 0.5)] / 2); + } else { + dResult = input[((int)(Math.Ceiling(input.Count * 0.5))) - 1]; + } + break; + case LIST_STAT_STD_DEV: + dResult = GetStandardDeviation(input.ToArray()); + break; + case LIST_STAT_SUM: + for (int intI = 0; intI < input.Count; intI++) { + dResult += input[intI]; + } + break; + case LIST_STAT_SUM_SQUARES: + for (int intI = 0; intI < input.Count; intI++) { + dResult += input[intI] * input[intI]; + } + ////double av = GetAverage(input.ToArray()); + ////for (int intI = 0; intI < input.Count; intI++) + // result += (av - input[intI]) * (av - input[intI]); + break; + case LIST_STAT_NUM_COUNT: + dResult = input.Count; + break; + case LIST_STAT_GEOMETRIC_MEAN: + for (int intI = 0; intI < input.Count; intI++) { + input[intI] = Math.Log(input[intI]); + } + dResult = Math.Exp(GetAverage(input.ToArray())); + break; + default: + break; + } + } + Verbose("llListStatistics({0}, {1})={2}", iOperation, lInput.ToVerboseString(), dResult); + return dResult; + } + + public integer llListen(integer iChannel, String sName, key kID, String sText) + { + int intHandle = host.llListen(iChannel, sName, kID, sText); + Verbose(@"llListen({0}, ""{1}"", {2}, {3})={4}", iChannel, sName, kID, sText, intHandle); + return intHandle; + } + + public void llListenControl(integer iHandle, integer iActive) + { + Verbose("llListenControl({0}, {1})", iHandle, iActive); + host.llListenControl(iHandle, iActive); + } + + public void llListenRemove(integer iHandle) + { + Verbose("llListenRemove({0})", iHandle); + host.llListenRemove(iHandle); + } + + public void llLoadURL(key kAvatarID, String sText, String sURL) + { + Verbose(@"llLoadURL({0}, ""{1}"", ""{2}"")", kAvatarID, sText, sURL); + string strUrl = sURL.ToString(); + if (strUrl.StartsWith("http://")) { + System.Diagnostics.Process.Start(strUrl); + } + } + + public Float llLog(Float fValue) + { + double dblA = 0.0; + if (fValue > 0.0) { + dblA = Math.Log(fValue); + } + Verbose("llLog({0})={1}", fValue, dblA); + return dblA; + } + + public Float llLog10(Float fValue) + { + double dblA = 0.0; + if (fValue > 0.0) { + dblA = Math.Log10(fValue); + } + Verbose("llLog10({0})={1}", fValue, dblA); + return dblA; + } + + public void llLookAt(vector vTarget, Float fStrength, Float fDamping) + { + Verbose("llLookAt({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7})", vTarget, fStrength, fDamping); + } + + public void llLoopSound(String sSound, Float sVolume) + { + try { + System.Media.SoundPlayer sp = host.GetSoundPlayer(sSound); + sp.PlayLooping(); + } catch { + } + Verbose("llLoopSound({0}, {1})", sSound, sVolume); + } + + public void llLoopSoundMaster(String sSound, Float fVolume) + { + try { + System.Media.SoundPlayer sp = host.GetSoundPlayer(sSound); + sp.PlayLooping(); + } catch { + } + Verbose("llLoopSoundMaster({0}, {1})", sSound, fVolume); + } + + public void llLoopSoundSlave(String sSound, Float fVolume) + { + try { + System.Media.SoundPlayer sp = host.GetSoundPlayer(sSound); + sp.PlayLooping(); + } catch { + } + Verbose("llLoopSoundSlave({0}, {1})", sSound, fVolume); + } + + // ok + public String llMD5String(String sSource, integer iNonce) + { + System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); + byte[] hash = md5.ComputeHash(Encoding.ASCII.GetBytes(sSource + ":" + iNonce.ToString())); + StringBuilder sbResult = new StringBuilder(); + foreach (byte hex in hash) { + sbResult.Append(hex.ToString("x2")); // convert to standard MD5 form + } + Verbose("llMD5String({0}, {1})={2}", sSource, iNonce, sbResult); + return sbResult.ToString(); + } + + public void llMakeExplosion(integer iParticles, Float fScale, Float fVelocity, Float fLifetime, Float fArc, String sTexture, vector vOffset) + { + Verbose(@"llMakeExplosion({0}, {1}, {2}, {3}, {4}, ""{5}"", {6})", iParticles, fScale, fVelocity, fLifetime, fArc, sTexture, vOffset); + } + + public void llMakeFire(integer iParticles, Float fScale, Float fVelocity, Float fLifetime, Float fArc, String sTexture, vector vOffset) + { + Verbose(@"llMakeFire({0}, {1}, {2}, {3}, {4}, ""{5}"", {6})", iParticles, fScale, fVelocity, fLifetime, fArc, sTexture, vOffset); + } + + public void llMakeFountain(integer iParticles, Float fScale, Float fVelocity, Float fLifetime, Float fArc, String sTexture, vector vOffset) + { + Verbose(@"llMakeFountain({0}, {1}, {2}, {3}, {4}, ""{5}"", {6})", iParticles, fScale, fVelocity, fLifetime, fArc, sTexture, vOffset); + } + + public void llMakeSmoke(integer iParticles, Float fScale, Float fVelocity, Float fLifetime, Float fArc, String sTexture, vector vOffset) + { + Verbose(@"llMakeSmoke({0}, {1}, {2}, {3}, {4}, ""{5}"", {6})", iParticles, fScale, fVelocity, fLifetime, fArc, sTexture, vOffset); + } + + public void llManageEstateAccess(integer iAction, key kID) + { + Verbose("llManageEstateAccess({0}, {1}", iAction, kID); + } + + public void llMapDestination(String sLandmark, vector vPosition, vector vLookat) + { + Verbose(@"llMapDestination({0}, {1}, {2})", sLandmark, vPosition, vLookat); + } + + public void llMessageLinked(integer iLink, integer iValue, String sText, key kID) + { + Verbose(@"llMessageLinked({0}, {1}, ""{2}"", {3})", iLink, iValue, sText, kID); + host.MessageLinked(iLink, iValue, sText, kID); + } + + public void llMinEventDelay(Float fDelay) + { + Verbose("llMinEventDelay({0}", fDelay); + } + + public integer llModPow(integer iValue1, integer iValue2, integer iModulus) + { + integer iResult = ModPow2(iValue1, iValue2, iModulus); + Verbose("llModPow({0}, {1}, {2})={3}", iValue1, iValue2, iModulus, iResult); + return iResult; + } + + public void llModifyLand(integer iAction, integer iSize) + { + Verbose("llModifyLand({0}, {1})", iAction, iSize); + } + + public void llMoveToTarget(vector vTarget, Float fTau) + { + Verbose("llMoveToTarget({0}, {1})", vTarget, fTau); + } + + public void llNavigateTo(vector vLocation, list lOptions) + { + Verbose("llNavigateTo({0}, {1})", vLocation, lOptions); + } + + public void llOffsetTexture(Float fOffsetS, Float fOffsetT, integer iFace) + { + Verbose("llOffsetTexture({0}, {1}, {2})", fOffsetS, fOffsetT, iFace); + } + + public void llOpenRemoteDataChannel() + { + host.llOpenRemoteDataChannel(); + Verbose("llOpenRemoteDataChannel()"); + } + + public integer llOverMyLand(key kID) + { + integer iResult = integer.TRUE; + Verbose("llOverMyLand({0})={1}", kID, iResult); + return iResult; + } + + public void llOwnerSay(String sText) + { + Chat(0, sText, CommunicationType.OwnerSay); + } + + public void llParcelMediaCommandList(list lCommands) + { + Verbose("llParcelMediaCommandList({0})", lCommands.ToVerboseString()); + } + + public list llParcelMediaQuery(list lQuery) + { + list lResult = new list(); + Verbose("llParcelMediaQuery({0})={1})", lQuery.ToVerboseString(), lResult.ToVerboseString()); + return lResult; + } + + // 21 sep 2007, check this + public list llParseString2List(String sSource, list lSseparators, list lSpacers) + { + list lResult = ParseString(sSource, lSseparators, lSpacers, false); + Verbose(@"llParseString2List(""{0}"", {1}, {2})={3}", sSource, lSseparators.ToVerboseString(), lSpacers.ToVerboseString(), lResult.ToVerboseString()); + return lResult; + } + + // 21 sep 2007, check this, first check 3 oct 2007, last element=="" is added also + public list llParseStringKeepNulls(String sSource, list lSeparators, list lSpacers) + { + list lResult = ParseString(sSource, lSeparators, lSpacers, true); + Verbose(@"llParseStringKeepNulls(""{0}"", {1}, {2})={3}", sSource, lSeparators.ToVerboseString(), lSpacers.ToVerboseString(), lResult.ToVerboseString()); + return lResult; + } + + public void llParticleSystem(list lParameters) + { + Verbose("llParticleSystem({0})", lParameters.ToVerboseString()); + } + + public void llPassCollisions(integer iPassFlag) + { + Verbose("llPassCollisions({0})", iPassFlag); + } + + public void llPassTouches(integer iPassFlag) + { + Verbose("llPassTouches({0})", iPassFlag); + } + + public void llPatrolPoints(list lPoints, list lOptions) + { + Verbose("llPatrolPoints({0}, {1})", lPoints, lOptions); + } + + public void llPlaySound(String sSoundName, Float fVolume) + { + try { + System.Media.SoundPlayer sp = host.GetSoundPlayer(sSoundName); + sp.Play(); + Verbose("llPlaySound({0}, {1})", sSoundName, fVolume); + } catch (Exception exception) { + Verbose("llPlaySound({0}, {1}) **{2}", sSoundName, fVolume, exception.Message); + } + } + + public void llPlaySoundSlave(String sSoundName, Float fVolume) + { + try { + System.Media.SoundPlayer sp = host.GetSoundPlayer(sSoundName); + sp.Play(); + } catch { + } + Verbose("llPlaySoundSlave({0}, {1})", sSoundName, fVolume); + } + + public void llPointAt(vector vTarget) + { + Verbose("llPointAt({0})", vTarget); + } + + public Float llPow(Float fBase, Float fExponent) + { + double dblA = Math.Pow(fBase, fExponent); + Verbose("llPow({0}, {1})={2}", fBase, fExponent, dblA); + return dblA; + } + + public void llPreloadSound(String sSoundName) + { + Verbose("llPreloadSound({0})", sSoundName); + } + + public void llPursue(key kTargetID, list lOptions) + { + Verbose("llPursue({0}, {1})", kTargetID, lOptions); + } + + public void llPushObject(key kID, vector vImpulse, vector vAngularImpulse, integer iLocalFlag) + { + Verbose("llPushObject({0}, {1}, {2}, {3})", kID, vImpulse, vAngularImpulse, iLocalFlag); + } + + public void llRegionSay(integer iChannel, String sText) + { + if (iChannel != 0) { + Chat(iChannel, sText, CommunicationType.RegionSay); + } + Verbose(@"llRegionSay({0}, ""{1}"")", iChannel, sText); + } + + public void llRegionSayTo(key kTargetID, integer iChannel, String sText) + { + Verbose(@"llRegionSayTo({0}, {1}, ""{2}"")", kTargetID, iChannel, sText); + } + + public void llReleaseCamera(key kID) + { + Verbose("llReleaseCamera({0})", kID); + } + + public void llReleaseControls() + { + Verbose("llReleaseControls()"); + this.host.ReleaseControls(); + } + + public void llReleaseControls(key kAvatarID) + { + Verbose("llReleaseControls({0})", kAvatarID); + } + + public void llReleaseURL(string sURL) + { + Verbose(@"llReleaseURL(""{0}"")", sURL); + } + + public void llRemoteDataReply(key kChannel, key kMessageID, String sData, integer iData) + { + host.llRemoteDataReply(kChannel, kMessageID, sData, iData); + Verbose("llRemoteDataReply({0}, {1}, {2}, {3})", kChannel, kMessageID, sData, iData); + } + + public void llRemoteDataSetRegion() + { + Verbose("llRemoteDataSetRegion()"); + } + + public void llRemoteLoadScript(key kTargetID, String sName, integer iRunningFlag, integer iStartParameter) + { + Verbose(@"llRemoteLoadScript({0}, ""{1}"", {2}, {3})", kTargetID, sName, iRunningFlag, iStartParameter); + } + + public void llRemoteLoadScriptPin(key kTargetID, String sName, integer iPIN, integer iRunningFlag, integer iStartParameter) + { + Verbose(@"llRemoteLoadScriptPin({0}, ""{1}"", {2}, {3}, {4})", kTargetID, sName, iPIN, iRunningFlag, iStartParameter); + } + + public void llRemoveFromLandBanList(key kAvatarID) + { + Verbose("llRemoveFromLandBanList({0})", kAvatarID); + if (htLandBanList.ContainsKey(kAvatarID)) { + htLandBanList.Remove(kAvatarID); + } + } + + public void llRemoveFromLandPassList(key kAvatarID) + { + Verbose("llRemoveFromLandPassList({0})", kAvatarID); + if (htLandPassList.ContainsKey(kAvatarID)) { + htLandPassList.Remove(kAvatarID); + } + } + + public void llRemoveInventory(String sInventoryItem) + { + host.RemoveInventory(sInventoryItem); + Verbose("llRemoveInventory({0})", sInventoryItem); + } + + public void llRemoveVehicleFlags(integer iFlags) + { + Verbose("llRemoveVehicleFlags({0})", iFlags); + } + + public key llRequestAgentData(key kID, integer iDataConstant) + { + key kResult = new key(Guid.NewGuid()); + + string strData = "***"; + switch ((int)iDataConstant) { + case DATA_ONLINE: + break; + case DATA_NAME: + strData = Properties.Settings.Default.AvatarName; + break; + case DATA_BORN: + strData = DateTime.Now.ToString("yyyy-MM-dd"); + break; + case DATA_RATING: + break; + case DATA_PAYINFO: + break; + default: + break; + } + host.ExecuteSecondLife("dataserver", kResult, (SecondLife.String)strData); + return kResult; + } + + public key llRequestDisplayName(key kAvatarID) + { + key kID = new key(Guid.NewGuid()); + string strData = "dummyDisplay Name"; + host.ExecuteSecondLife("dataserver", kID, (SecondLife.String)strData); + Verbose("llRequestDisplayName({0})={1}", kAvatarID, kID); + return kID; + } + + public key llRequestInventoryData(String sName) + { + key kResult = new key(Guid.NewGuid()); + Verbose(@"llRequestInventoryData(""{0}"")={1}", sName, kResult); + return kResult; + } + + public void llRequestPermissions(key kAvatarID, integer iPermissionFlags) + { + Verbose("llRequestPermissions({0}, {1})", kAvatarID, iPermissionFlags); + this.host.llRequestPermissions(kAvatarID, iPermissionFlags); + } + + public key llRequestSecureURL() + { + key kResult = new key(Guid.NewGuid()); + Verbose("llRequestPermissions()={0}", kResult); + return kResult; + } + + public key llRequestSimulatorData(String sSimulator, integer iData) + { + key kResult = new key(Guid.NewGuid()); + Verbose(@"llRequestSimulatorData(""{0}"", {1})={2}", sSimulator, iData, kResult); + return kResult; + } + + public key llRequestURL() + { + key kResult = new key(Guid.NewGuid()); + Verbose("llRequestURL()={0}", kResult); + return kResult; + } + + public key llRequestUsername(key kAvatarID) + { + key kID = new key(Guid.NewGuid()); + string strData = "dummyUser Name"; + Verbose("llRequestDisplayName({0})={1}", kAvatarID, kID); + host.ExecuteSecondLife("dataserver", kID, (SecondLife.String)strData); + return kID; + } + + public void llResetAnimationOverride(String sAnimationState) + { + Verbose("llResetAnimationOverride({0})", sAnimationState); + } + + public void llResetLandBanList() + { + htLandBanList = new Hashtable(); + Verbose("llResetLandBanList()"); + } + + public void llResetLandPassList() + { + htLandPassList = new Hashtable(); + Verbose("llResetLandPassList()"); + } + + public void llResetOtherScript(String sScriptName) + { + Verbose("llResetOtherScript({0})", sScriptName); + } + + public void llResetScript() + { + Verbose("llResetScript()"); + host.Reset(); + System.Threading.Thread.Sleep(1000); + System.Windows.Forms.MessageBox.Show("If you see this, something wrong in llResetScript()", "Oops..."); + } + + public void llResetTime() + { + Verbose("llResetTime()"); + dtDateTimeScriptStarted = DateTime.Now.ToUniversalTime(); + } + + public integer llReturnObjectsByID(list lObjects) + { + integer iReturned = ERR_GENERIC; + Verbose("llReturnObjectsByID({0})={1}", lObjects, iReturned); + return iReturned; + } + + public integer llReturnObjectsByOwner(key kID, integer iScope) + { + integer iReturned = ERR_GENERIC; + Verbose("llReturnObjectsByOwner({0}, {1})={2}", kID, iScope, iReturned); + return iReturned; + } + + public void llRezAtRoot(String sInventoryItem, vector vPosition, vector vVelocity, rotation rRotation, integer iParameter) + { + Verbose(@"llRezAtRoot(""{0}"", {1}, {2}, {3}, {4})", sInventoryItem, vPosition, vVelocity, rRotation, iParameter); + } + + public void llRezObject(String sInventoryItem, vector vPosition, vector vVelocity, rotation rRotation, integer iParameter) + { + Verbose(@"llRezObject(""{0}"", {1}, {2}, {3}, {4})", sInventoryItem, vPosition, vVelocity, rRotation, iParameter); + object_rez(new key(Guid.NewGuid())); + on_rez(iParameter); + } + + public Float llRot2Angle(rotation rRotation) + { + Float fAngle = 0.0F; + Verbose("llRot2Angle({0})={1}", rRotation, fAngle); + return fAngle; + } + + public vector llRot2Axis(rotation rRotation) + { + vector vAxis = vector.ZERO_VECTOR; + Verbose("llRot2Axis({0})={1})", rRotation, vAxis); + return vAxis; + } + + public vector llRot2Euler(rotation rRotation) + { + // http://rpgstats.com/wiki/index.php?title=LibraryRotationFunctions + rotation t = new rotation(rRotation.x * rRotation.x, rRotation.y * rRotation.y, rRotation.z * rRotation.z, rRotation.s * rRotation.s); + double m = t.x + t.y + t.z + t.s; + vector vEuler = new vector(0, 0, 0); + if (m != 0) { + double n = 2 * ((rRotation.y * rRotation.s) + (rRotation.x * rRotation.z)); + double p = (m * m) - (n * n); + if (p > 0) { + vEuler = new vector( + Math.Atan2(2.0 * ((rRotation.x * rRotation.s) - (rRotation.y * rRotation.z)), -t.x - t.y + t.z + t.s), + Math.Atan2(n, Math.Sqrt(p)), + Math.Atan2(2.0 * ((rRotation.z * rRotation.s) - (rRotation.x * rRotation.y)), t.x - t.y - t.z + t.s)); + } else if (n > 0) { + vEuler = new vector(0, PI_BY_TWO, Math.Atan2((rRotation.z * rRotation.s) + (rRotation.x * rRotation.y), 0.5 - t.x - t.z)); + } else { + vEuler = new vector(0, -PI_BY_TWO, Math.Atan2((rRotation.z * rRotation.s) + (rRotation.x * rRotation.y), 0.5 - t.x - t.z)); + } + } + Verbose("llRot2Euler({0})={1}", rRotation, vEuler); + return vEuler; + } + + public vector llRot2Fwd(rotation rRotation) + { + vector v = new vector(1.0 / ((rRotation.x * rRotation.x) + (rRotation.y * rRotation.y) + (rRotation.z * rRotation.z) + (rRotation.s * rRotation.s)), 0, 0); + vector vResult = v * rRotation; + Verbose("llRot2Fwd({0})={1}", rRotation, vResult); + return vResult; + } + + public vector llRot2Left(rotation rRotation) + { + vector v = new vector(0, 1.0 / ((rRotation.x * rRotation.x) + (rRotation.y * rRotation.y) + (rRotation.z * rRotation.z) + (rRotation.s * rRotation.s)), 0); + vector vResult = v * rRotation; + Verbose("llRot2Left({0})={1}", rRotation, vResult); + return vResult; + } + + public vector llRot2Up(rotation rRotation) + { + vector v = new vector(0, 0, 1.0 / ((rRotation.x * rRotation.x) + (rRotation.y * rRotation.y) + (rRotation.z * rRotation.z) + (rRotation.s * rRotation.s))); + vector vResult = v * rRotation; + Verbose("llRot2Left({0})={1}", rRotation, vResult); + return vResult; + } + + public void llRotateTexture(Float fRadians, integer iFace) + { + Verbose("llRotateTexture({0}, {1})", fRadians, iFace); + } + + public rotation llRotBetween(vector vDirection1, vector vDirection2) + { + rotation rResult = rotation.ZERO_ROTATION; + Verbose("llRotBetween({0}, {1})={2}", vDirection1, vDirection2, rResult); + return rResult; + } + + public void llRotLookAt(rotation rRotation, Float fStrength, Float fDamping) + { + Verbose("llRotLookAt({0}, {1}, {2})", rRotation, fStrength, fDamping); + } + + public integer llRotTarget(rotation rRotation, Float fError) + { + integer iHandle = 0; + Verbose("llRotTarget({0}, {1})={2})", rRotation, fError, iHandle); + return iHandle; + } + + public void llRotTargetRemove(integer iHandle) + { + Verbose("llRotTargetRemove({0})", iHandle); + } + + public integer llRound(Float fValue) + { + int intA = (int)Math.Round(fValue); + Verbose("llRound({0})={1})=", fValue, intA); + return intA; + } + + public integer llSameGroup(key kID) + { + integer iFlag = 0; + Verbose("llSameGroup({0})={1})", kID, iFlag); + return iFlag; + } + + public void llSay(integer iChannel, String sText) + { + Chat(iChannel, sText, CommunicationType.Say); + } + + public void llScaleTexture(Float fScaleS, Float fScaleT, integer iFace) + { + Verbose("llScaleTexture({0}, {1}, {2})", fScaleS, fScaleT, iFace); + } + + public integer llScriptDanger(vector vPosition) + { + integer iFlag = 0; + Verbose("llScriptDanger({0})={1}", vPosition, iFlag); + return iFlag; + } + + public void llScriptProfiler(integer iState) + { + Verbose("llScriptProfiler({0})", iState); + } + + public key llSendRemoteData(key kChannel, String sDestination, integer iData, String sData) + { + key kID = host.llSendRemoteData(kChannel, sDestination, iData, sData); + Verbose("llSendRemoteData({0}, {1}, {2}, {3})={4}", kChannel, sDestination, iData, sData, kID); + return kID; + } + + public void llSensor(String sName, key kID, integer iType, Float fRange, Float fArc) + { + Verbose(@"llSensor(""{0}"", {1}, {2}, {3}, {4})", sName, kID, iType, fRange, fArc); + host.SensorTimer.Stop(); + integer iTotalNumber = 1; + host.ExecuteSecondLife("sensor", iTotalNumber); + } + + public void llSensorRemove() + { + Verbose("llSensorRemove()"); + host.SensorTimer.Stop(); + } + + public void llSensorRepeat(String sName, key kID, integer iType, Float fRange, Float fArc, Float fRate) + { + Verbose(@"llSensorRepeat(""{0}"", {1}, {2}, {3}, {4}, {5})", sName, kID, iType, fRange, fArc, fRate); + host.SensorTimer.Stop(); + if (fRate > 0) { + host.SensorTimer.Interval = (int)Math.Round(fRate * 1000); + host.SensorTimer.Start(); + } + } + + public void llSetAlpha(Float fOpacity, integer iFace) + { + Verbose("llSetAlpha({0}, {1})", fOpacity, iFace); + } + + public void llSetAngularVelocity(vector vForce, integer iLocal) + { + Verbose("llSetAngularVelocity({0}, {1})", vForce, iLocal); + } + + public void llSetAnimationOverride(String sAnimationState, String sAnimation) + { + Verbose("llSetAnimationOverride({0}, {1})", sAnimationState, sAnimation); + } + + public void llSetBuoyancy(Float fBuoyancy) + { + Verbose("llSetBuoyancy({0})", fBuoyancy); + } + + public void llSetCameraAtOffset(vector vOffset) + { + Verbose("llSetCameraAtOffset({0})", vOffset); + } + + public void llSetCameraEyeOffset(vector vOffset) + { + Verbose("llSetCameraEyeOffset({0})", vOffset); + } + + public void llSetCameraParams(list lRules) + { + Verbose("llSetCameraParams({0})", lRules.ToVerboseString()); + } + + public void llSetClickAction(integer iAction) + { + Verbose("llSetClickAction({0})", iAction); + } + + public void llSetColor(vector vColour, integer iFace) + { + Verbose("llSetColor({0}, {1})", vColour, iFace); + } + + public void llSetContentType(key kHTTPRequestID, integer iContentType) + { + Verbose("llSetContentType({0}, {1})", kHTTPRequestID, iContentType); + } + + public void llSetDamage(Float fDamage) + { + Verbose("llSetDamage({0})", fDamage); + } + + public void llSetForce(vector vForce, integer iLocal) + { + Verbose("llSetForce({0}, {1})", vForce, iLocal); + } + + public void llSetForceAndTorque(vector vForce, vector vTorque, integer iLocal) + { + Verbose("llSetForceAndTorque({0}, {1}, {2})", vForce, vTorque, iLocal); + } + + public void llSetHoverHeight(Float fHeight, Float fWater, Float fTau) + { + Verbose("llSetHoverHeight({0}, {1}, {2})", fHeight, fWater, fTau); + } + + public void llSetInventoryPermMask(String sItem, integer iMask, integer iValue) + { + Verbose(@"llSetInventoryPermMask(""{0}"", {1}, {2})", sItem, iMask, iValue); + } + + public void llSetKeyframedMotion(list lKeyframes, list lOptions) + { + Verbose("llSetKeyframedMotion({0}, {1})", lKeyframes.ToVerboseString(), lOptions.ToVerboseString()); + } + + public void llSetLinkAlpha(integer iLinkIndex, Float fAlpha, integer iFace) + { + Verbose("llSetLinkAlpha({0}, {1}, {2})", iLinkIndex, fAlpha, iFace); + } + + public void llSetLinkCamera(integer iLinkIndex, vector vEyeOffset, vector vLookOffset) + { + Verbose("llSetLinkCamera({0}, {1}, {2})", iLinkIndex, vEyeOffset, vLookOffset); + } + + public void llSetLinkColor(integer iLinkIndex, vector vColour, integer iFace) + { + Verbose("llSetLinkColor({0}, {1}, {2})", iLinkIndex, vColour, iFace); + } + + public integer llSetLinkMedia(integer iLinkIndex, integer iFace, list lParameters) + { + integer iResult = STATUS_OK; + Verbose("llSetLinkMedia({0}, {1}, {2})={3}", iLinkIndex, iFace, lParameters.ToVerboseString(), iResult); + return iResult; + } + + public void llSetLinkPrimitiveParams(integer iLinkIndex, list lRules) + { + Verbose("llSetLinkPrimitiveParams({0}, {1})", iLinkIndex, lRules.ToVerboseString()); + } + + public void llSetLinkPrimitiveParamsFast(integer iLinkIndex, list lRules) + { + Verbose("llSetLinkPrimitiveParamsFast({0}, {1})", iLinkIndex, lRules.ToVerboseString()); + } + + public void llSetLinkTexture(integer iLinkIndex, String sTexture, integer iFace) + { + Verbose(@"llSetLinkTexture({0}, ""{1}"", {2})", iLinkIndex, sTexture, iFace); + } + + public void llSetLinkTextureAnim(integer iLinkIndex, integer iMode, integer iFace, integer iSizeX, integer iSizeY, Float fStart, Float fLength, Float fRate) + { + Verbose("llSetLinkTextureAnim({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7})", iLinkIndex, iMode, iFace, iSizeX, iSizeY, fStart, fLength, fRate); + } + + public void llSetLocalRot(rotation rRotation) + { + this.rRotationlocal = rRotation; + Verbose("llSetLocalRot({0})", rRotation); + } + + public integer llSetMemoryLimit(integer iLimit) + { + integer iResult = true; + Verbose("llSetMemoryLimit({0})=(1)", iLimit, iResult); + return iResult; + } + + public void llSetObjectDesc(String sDescription) + { + Verbose(@"llSetObjectDesc(""{0}"")", sDescription); + host.SetObjectDescription(sDescription); + } + + public void llSetObjectName(String sName) + { + Verbose(@"llSetObjectName(""{0}"")", sName); + host.SetObjectName(sName); + } + + public void llSetObjectPermMask(integer iMaskConstant, integer iValue) + { + Verbose("llSetObjectPermMask({0}, {1})", iMaskConstant, iValue); + } + + public void llSetParcelMusicURL(String sURL) + { + Verbose(@"llSetParcelMusicURL(""{0}"")", sURL); + sParcelMusicURL = sURL; + } + + public void llSetPayPrice(integer iPrice, list lButtons) + { + Verbose("llSetPayPrice({0}, {1})", iPrice, lButtons.ToVerboseString()); + } + + public void llSetPhysicsMaterial(integer iMaterialBits, Float fGravityMultiplier, Float fRestitution, Float fFriction, Float fDensity) + { + Verbose("llSetPhysicsMaterial({0}, {1}, {2}, {3}, {4})", iMaterialBits, fGravityMultiplier, fRestitution, fFriction, fDensity); + } + + public void llSetPos(vector vPosition) + { + Verbose("llSetPos({0})", vPosition); + this.vPosition = vPosition; + } + + public integer llSetPrimMediaParams(integer iFace, list lParameters) + { + integer iResult = 0; + Verbose("llSetPrimMediaParams({0}, {1})={2}", iFace, lParameters.ToVerboseString(), iResult); + return iResult; + } + + public void llSetPrimitiveParams(list lRule) + { + Verbose("llSetPrimitiveParams({0})", lRule.ToVerboseString()); + } + + public integer llSetRegionPos(vector vPosition) + { + integer iResult = true; + Verbose("llSetRegionPos({0})={1}", vPosition, iResult); + this.vPosition = vPosition; + return iResult; + } + + public void llSetRemoteScriptAccessPin(integer iPIN) + { + Verbose("llSetRemoteScriptAccessPin({0})", iPIN); + } + + public void llSetRot(rotation rRotation) + { + Verbose("llSetRot({0})", rRotation); + this.rRotation = rRotation; + } + + public void llSetScale(vector vScale) + { + Verbose("llSetScale({0})", vScale); + this.vScale = vScale; + } + + public void llSetScriptState(String sName, integer iRunState) + { + Verbose(@"llSetScriptState(""{0}"", {1})", sName, iRunState); + } + + public void llSetSitText(String sText) + { + Verbose(@"llSetSitText(""{0}"")", sText); + sSitText = sText; + } + + public void llSetSoundQueueing(integer iQueueFlag) + { + Verbose("llSetSoundQueueing({0})", iQueueFlag); + } + + public void llSetSoundRadius(Float fRadius) + { + fSoundRadius = fRadius; + Verbose("llSetSoundRadius({0})", fRadius); + } + + public void llSetStatus(integer iStatusConstant, integer iValue) + { + Verbose("llSetStatus({0}, {1})", iStatusConstant, iValue); + } + + public void llSetText(String sText, vector vColour, Float fOpacity) + { + Verbose(@"llSetText(""{0}"", {1}, {2})", sText, vColour, fOpacity); + } + + public void llSetTexture(String sTextureName, integer iFace) + { + Verbose(@"llSetTexture(""{0}"", {1})", sTextureName, iFace); + } + + public void llSetTextureAnim(integer iMode, integer iFace, integer iSizeX, integer iSizeY, Float fStart, Float fLength, Float fRate) + { + Verbose("llSetTextureAnim({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7})", iMode, iFace, iSizeX, iSizeY, fStart, fLength, fRate); + } + + public void llSetTimerEvent(Float fSeconds) + { + Verbose("llSetTimerEvent({0})", fSeconds); + host.Timer.Stop(); + if (fSeconds > 0) { + host.Timer.Interval = (int)Math.Round(fSeconds * 1000); + host.Timer.Start(); + } + } + + public void llSetTorque(vector vTorque, integer iLocal) + { + Verbose("llSetTorque({0}, {1})", vTorque, iLocal); + } + + public void llSetTouchText(String sText) + { + Verbose(@"llSetTouchText(""{0}"")", sText); + } + + public void llSetVehicleFlags(integer iVehicleFlagConstants) + { + Verbose("llSetVehicleFlags({0})", iVehicleFlagConstants); + } + + public void llSetVehicleFloatParam(integer iParameterName, Float fParameterValue) + { + Verbose("llSetVehicledoubleParam({0}, {1})", iParameterName, fParameterValue); + } + + public void llSetVehicleRotationParam(integer iParameterName, rotation fParameterValue) + { + Verbose("llSetVehicleRotationParam({0}, {1})", iParameterName, fParameterValue); + } + + public void llSetVehicleType(integer iTypeConstant) + { + Verbose("llSetVehicleType({0})", iTypeConstant); + } + + public void llSetVehicleVectorParam(integer iParameterName, vector vParameterValue) + { + Verbose("llSetVehicleVectorParam({0}, {1})", iParameterName, vParameterValue); + } + + public void llSetVelocity(vector vForce, integer iLocal) + { + Verbose("llSetVelocity({0}, {1})", vForce, iLocal); + } + + public String llSHA1String(String sSource) + { + byte[] buffer = System.Text.Encoding.UTF8.GetBytes(sSource.ToString()); + System.Security.Cryptography.SHA1CryptoServiceProvider cryptoTransformSHA1 = new System.Security.Cryptography.SHA1CryptoServiceProvider(); + string sHash = BitConverter.ToString(cryptoTransformSHA1.ComputeHash(buffer)).Replace("-", ""); + Verbose(@"llSHA1String(""{0"")=""{1}""", sSource, sHash); + return sHash; + } + + public void llShout(integer iChannel, String sText) + { + Chat(iChannel, sText, CommunicationType.Shout); + } + + public Float llSin(Float fTheta) + { + double dblA = Math.Sin(fTheta); + Verbose("llSin({0})={1}", fTheta, dblA); + return dblA; + } + + public void llSitTarget(vector vOffset, rotation rRotation) + { + Verbose("llSitTarget({0}, {1})", vOffset, rRotation); + } + + public void llSleep(Float fSeconds) + { + Verbose("llSleep({0})", fSeconds); + System.Threading.Thread.Sleep((int)Math.Round(fSeconds * 1000)); + } + + public Float llSqrt(Float fValue) + { + double dblA = Math.Sqrt(fValue); + Verbose("llSqrt({0})={1}", fValue, dblA); + return dblA; + } + + public void llStartAnimation(String sAnimationName) + { + Verbose(@"llStartAnimation(""{0}"")", sAnimationName); + } + + public void llStopAnimation(String sAnimationName) + { + Verbose(@"llStopAnimation(""{0}"")", sAnimationName); + } + + public void llStopHover() + { + Verbose("llStopHover()"); + } + + public void llStopLookAt() + { + Verbose("llStopLookAt()"); + } + + public void llStopMoveToTarget() + { + Verbose("llStopMoveToTarget()"); + } + + public void llStopPointAt() + { + Verbose("llStopPointAt()"); + } + + public void llStopSound() + { + Verbose("llStopSound()"); + } + + public integer llStringLength(String sSource) + { + int intLength = ((string)sSource).Length; + Verbose(@"llStringLength(""{0}"")={1}", sSource, intLength); + return intLength; + } + + public String llStringToBase64(String sText) + { + string sResult = StringToBase64(sText.ToString()); + Verbose(@"llStringToBase64(""{0}"")=""{1}""", sText, sResult); + return sResult; + } + + public String llStringTrim(String sText, integer iTrimType) + { + string strResult = sText.ToString(); + + if ((iTrimType & STRING_TRIM_HEAD) != 0) { + strResult = strResult.TrimStart(); + } + + if ((iTrimType & STRING_TRIM_TAIL) != 0) { + strResult = strResult.TrimEnd(); + } + + Verbose(@"llStringTrim(""{0}"", {1})=""{2}""", sText, iTrimType, strResult); + return strResult; + } + + public integer llSubStringIndex(String sSource, String sPattern) + { + int intIndex = ((string)sSource).IndexOf((string)sPattern); + Verbose("llSubStringIndex({0}, {1})={2}", sSource, sPattern, intIndex); + return intIndex; + } + + public void llTakeCamera(key kAvatarID) + { + Verbose("llTakeCamera({0})", kAvatarID); + } + + public void llTakeControls(integer iControls, integer iAcceptFlag, integer iPassOnFlag) + { + Verbose("llTakeControls({0}, {1}), {2})", iControls, iAcceptFlag, iPassOnFlag); + this.host.TakeControls(iControls, iAcceptFlag, iPassOnFlag); + } + + public Float llTan(Float fTheta) + { + double dblA = Math.Tan(fTheta); + Verbose("llTan({0})={1}", fTheta, dblA); + return dblA; + } + + public integer llTarget(vector vPosition, Float fRange) + { + integer iResult = 0; + Verbose("llTarget({0}, {1})={2}", vPosition, fRange, iResult); + return iResult; + } + + public void llTargetOmega(vector vAxis, Float fSpinRate, Float fGain) + { + Verbose("llTargetOmega({0}, {1}, {2})", vAxis, fSpinRate, fGain); + } + + public void llTargetRemove(integer iTargetHandle) + { + Verbose("llTargetRemove({0})", iTargetHandle); + } + + public void llTeleportAgent(key kAvatarID, String sLandmarkName, vector vLandingPoint, vector vLookAtPoint) + { + Verbose(@"llTeleportAgentHome({0}, ""{1}"", {2}, {3})", kAvatarID, sLandmarkName, vLandingPoint, vLookAtPoint); + } + + public void llTeleportAgentGlobalCoords(key kAvatarID, vector vGlobalPosition, vector vRegionPosition, vector iLookAtPoint) + { + Verbose("llTeleportAgentHome({0}, {1}, {2}, {3})", kAvatarID, vGlobalPosition, vRegionPosition, iLookAtPoint); + } + + public void llTeleportAgentHome(key kAvatarID) + { + Verbose("llTeleportAgentHome({0})", kAvatarID); + } + + public void llTextBox(key kAvatar, String sText, integer iChannel) + { + Verbose(@"llTextBox({0}, ""{1}"", {2})", kAvatar, sText, iChannel); + host.llTextBox(kAvatar, sText, iChannel); + } + + public String llToLower(String sText) + { + string strTemp = ((string)sText).ToLower(); + Verbose(@"llToLower(""{0}"")=""{1}""", sText, strTemp); + return strTemp; + } + + public String llToUpper(String sText) + { + string strTemp = ((string)sText).ToUpper(); + Verbose(@"llToUpper(""{0}"")=""{1}""", sText, strTemp); + return strTemp; + } + + public key llTransferLindenDollars(key kPayee, integer iAmount) + { + key kID = new key(Guid.NewGuid()); + string strData = kPayee.ToString() + "," + iAmount.ToString(); + Verbose("llTransferLindenDollars({0}, {1})", kPayee, iAmount); + host.ExecuteSecondLife("transaction_result", kID, true, (SecondLife.String)strData); + return kID; + } + + public void llTriggerSound(String sSoundName, Float fVolume) + { + Verbose(@"llTriggerSound(""{0}"", {1})", sSoundName, fVolume); + } + + public void llTriggerSoundLimited(String sSoundName, Float fVolume, vector vBoxNE, vector vBoxSW) + { + Verbose("llTriggerSoundLimited({0}, {1}, {2}, {3})", sSoundName, fVolume, vBoxNE, vBoxSW); + } + + public String llUnescapeURL(String sURL) + { + byte[] data = Encoding.UTF8.GetBytes(sURL.ToString()); + List list = new List(); + for (int intI = 0; intI < data.Length; intI++) { + byte chrC = data[intI]; + if (chrC == (byte)'%') { + if (intI < (data.Length - 2)) { + list.Add((byte) + (HexToInt(data[intI + 1]) << 4 + | HexToInt(data[intI + 2]))); + } + intI += 2; + } else { + list.Add(chrC); + } + } + data = list.ToArray(); + int intLen = Array.IndexOf(data, (byte)0x0); + if (intLen < 0) { + intLen = data.Length; + } + string strTmp = Encoding.UTF8.GetString(data, 0, intLen); + Verbose(string.Format(@"llUnescapeURL(""{0}"")=""{1}""", sURL, strTmp)); + return strTmp; + } + + public void llUnSit(key kAvatarID) + { + Verbose("llUnSit({0})", kAvatarID); + } + + public void llUpdateCharacter(list lOptions) + { + Verbose("llUpdateCharacter({0})", lOptions.ToVerboseString()); + } + + public Float llVecDist(vector vPostionA, vector vPositionB) + { + vector vecValue = new vector(vPostionA.x - vPositionB.x, vPostionA.y - vPositionB.y, vPostionA.z - vPositionB.z); + double dblMag = llVecMag(vecValue); + Verbose("llVecDist({0}, {1})={2}", vPostionA, vPositionB, dblMag); + return dblMag; + } + + public Float llVecMag(vector vVector) + { + double dblValue = Math.Sqrt((vVector.x * vVector.x) + (vVector.y * vVector.y) + (vVector.z * vVector.z)); + Verbose("llVecMag({0})={1}", vVector, dblValue); + return dblValue; + } + + public vector llVecNorm(vector vVector) + { + double dblMag = llVecMag(vVector); + vector vecValue = new vector(vVector.x / dblMag, vVector.y / dblMag, vVector.z / dblMag); + Verbose("llVecNorm({0})={1}", vVector, vecValue); + return vecValue; + } + + public void llVolumeDetect(integer iDetectFlag) + { + Verbose("llVolumeDetect({0})", iDetectFlag); + } + + public void llWanderWithin(vector vOrigin, vector vDistance, list lOptions) + { + Verbose("llWanderWithin({0}, {1}, {2})", vOrigin, vDistance, lOptions.ToVerboseString()); + } + + public Float llWater(vector vOffset) + { + Float fWaterLevel = 0.0F; + Verbose("llWater({0})={1}", vOffset, fWaterLevel); + return fWaterLevel; + } + + public void llWhisper(integer iChannel, String sText) + { + Chat(iChannel, sText, CommunicationType.Whisper); + } + + public vector llWind(vector vOffset) + { + vector vDirection = vector.ZERO_VECTOR; + Verbose("llWind({0})={1}", vOffset, vDirection); + return vDirection; + } + + public String llXorBase64(String sText1, String sText2) + { + string sResult = ""; + Verbose(@"llXorBase64(""{0}"",""{1}"")=""{2}""", sText1, sText2, sResult); + return sResult; + } + + public String llXorBase64Strings(String sText1, String sText2) + { + string sResult = ""; + Verbose(@"llXorBase64Strings(""{0}"",""{1}"")=""{2}""", sText1, sText2, sResult); + return sResult; + } + + public String llXorBase64StringsCorrect(String sText1, String sText2) + { + string strS1 = Base64ToString(sText1.ToString()); + string strS2 = Base64ToString(sText2.ToString()); + int intLength = strS1.Length; + if (strS2.Length == 0) { + strS2 = " "; + } + while (strS2.Length < intLength) { + strS2 += strS2; + } + strS2 = strS2.Substring(0, intLength); + StringBuilder sb = new StringBuilder(); + for (int intI = 0; intI < intLength; intI++) { + sb.Append((char)(strS1[intI] ^ strS2[intI])); + } + string sResult = StringToBase64(sb.ToString()); + Verbose(@"llXorBase64StringsCorrect(""{0}"",""{1}"")=""{2}""", sText1, sText2, sResult); + return sResult; + } + } +} diff --git a/trunk/SecondLife/OSSL_Functions.cs b/source/SecondLife/OSSL_Functions.cs similarity index 100% rename from trunk/SecondLife/OSSL_Functions.cs rename to source/SecondLife/OSSL_Functions.cs diff --git a/trunk/SecondLife/SecondLifeHost.cs b/source/SecondLife/SecondLifeHost.cs similarity index 96% rename from trunk/SecondLife/SecondLifeHost.cs rename to source/SecondLife/SecondLifeHost.cs index 7ed52b4..c13487b 100644 --- a/trunk/SecondLife/SecondLifeHost.cs +++ b/source/SecondLife/SecondLifeHost.cs @@ -1,1542 +1,1542 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// SecondLifeHost.cs -// -// - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Reflection; -using System.Text; -using System.Threading; -using System.Windows.Forms; - -using LSLEditor.Helpers; - -[module: SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:FileMayOnlyContainASingleClass", Justification = "Reviewed.")] - -namespace LSLEditor -{ - /// - /// Represents an event with a single string argument. - /// - public class SecondLifeHostEventArgs : EventArgs - { - /// - /// Stores the text of the message. - /// - public string Message; - - /// - /// Initialises a new instance of the class. - /// - /// String Text. - public SecondLifeHostEventArgs(string strMessage) - { - this.Message = strMessage; - } - } - - /// - /// Represents a linked message event. - /// - public class SecondLifeHostMessageLinkedEventArgs : EventArgs - { - /// - /// Stores the index of the sending link. - /// - public SecondLife.integer LinkIndex; - - /// - /// Stores a 32 bit numerical value. - /// - public SecondLife.integer Number; - - /// - /// Stores a text string. - /// - public SecondLife.String Text; - - /// - /// Stores a key. - /// - public SecondLife.key ID; - - /// - /// Initialises a new instance of the class. - /// - /// - /// - /// - /// - public SecondLifeHostMessageLinkedEventArgs(SecondLife.integer iLinkIndex, SecondLife.integer iNumber, SecondLife.String sText, SecondLife.key kID) - { - this.LinkIndex = iLinkIndex; - this.Number = iNumber; - this.Text = sText; - this.ID = kID; - } - } - - /// - /// Represents a chat event. - /// - public class SecondLifeHostChatEventArgs : EventArgs - { - /// - /// Stores the 32-bit number of the channel. - /// - public SecondLife.integer Channel; - - /// - /// Stores the name of the object/avatar. - /// - public SecondLife.String Name; - - /// - /// Stores the key of the objewct/avatar. - /// - public SecondLife.key ID; - - /// - /// Stores the text of the message. - /// - public SecondLife.String Message; - - /// - /// Stores the type of communication the event represents. - /// - public CommunicationType How; - - /// - /// Initialises a new instance of the class. - /// - /// Channel to communicate on. Some communication types have channel limitations. - /// Name of object/avatar. - /// UUID of object/avatar. - /// Text of message. - /// Type of communication (CommunicationType enum). - public SecondLifeHostChatEventArgs(SecondLife.integer channel, SecondLife.String name, SecondLife.key id, SecondLife.String message, CommunicationType how) - { - this.Channel = channel; - this.Name = name; - this.ID = id; - this.Message = message; - this.How = how; - } - } - - /// - /// SecondLifeHost class. - /// - public class SecondLifeHost : IDisposable - { - /// - /// Stores a list of ListenFilters - /// - private List lstListenFilter; - - /// - /// Stores a list of the links in an object. - /// - private List lstLinks; - - /// - /// Stores the SecondLife object representing the script. - /// - private SecondLife slSecondLife; - - /// - /// not sure? - /// - private TaskQueue tqTaskQueue; - - /// - /// Flag indicating an event has occurred. - /// - private AutoResetEvent areStateChanged; - - /// - /// Stores and controls a thread?. - /// - private Thread tStateWatcher; - - /// - /// An editor form? - /// - public LSLEditorForm efMainForm; - - /// - /// A compiled assembly of the LSL script. - /// - private Assembly assCompiledAssembly; - - /// - /// Stores the path to the script (including script name). - /// - public string FullPath; - - /// - /// Stores globally unique ID. - /// - public Guid GUID; - - /// - /// Stores SecondLifeHostMessageHandler function. - /// - /// Sender of message. - /// SecondLifeHostEventArgs object. - public delegate void SecondLifeHostMessageHandler(object sender, SecondLifeHostEventArgs e); - - /// - /// OnVerboseMessage event handler. - /// - public event SecondLifeHostMessageHandler OnVerboseMessage; - - /// - /// OnStateChange event handler. - /// - public event SecondLifeHostMessageHandler OnStateChange; - - /// - /// Stores SecondLifeHostChatHandler function. - /// - /// The sender. - /// SecondLifeHostChatEventArgs object. - public delegate void SecondLifeHostChatHandler(object sender, SecondLifeHostChatEventArgs e); - - /// - /// OnChat event handler. - /// - public event SecondLifeHostChatHandler OnChat; - - /// - /// Stores SecondLifeHostMessageLinkedHandler function. - /// - /// The caller. - /// SecondLifeHostMessageLinkedEventArgs object. - public delegate void SecondLifeHostMessageLinkedHandler(object sender, SecondLifeHostMessageLinkedEventArgs e); - - /// - /// OnMessageLinked event handler. - /// - public event SecondLifeHostMessageLinkedHandler OnMessageLinked; - - /// - /// OnDie event handler. - /// - public event EventHandler OnDie; - - /// - /// OnReset event handler. - /// - public event EventHandler OnReset; - - /// - /// OnListenChannelsChanged event handler. - /// - public event EventHandler OnListenChannelsChanged; - - /// - /// Stores a timer. - /// - public System.Timers.Timer Timer; - - /// - /// Stores the timer for a Sensor event. - /// - public System.Timers.Timer SensorTimer; - - /// - /// Name of currently active state. - /// - public string CurrentStateName; - - /// - /// Name of state to switch to. - /// - private string strNewStateName; - - /// - /// Name of the containing object/prim. - /// - private string strObjectName; - - /// - /// Description of the containing object/prim. - /// - private string strObjectDescription; - - /// - /// Initialises a new instance of the class. - /// - /// Editor form this host is atached to. - /// Assembly of the compiled script. - /// Full path (including file name) to the script. - /// UUID of the containing object? - public SecondLifeHost(LSLEditorForm mainForm, Assembly assCompiledAssembly, string strFullPath, Guid guid) - { - this.lstListenFilter = null; - this.lstLinks = null; - this.slSecondLife = null; - this.tqTaskQueue = new TaskQueue(); - this.areStateChanged = new AutoResetEvent(false); - this.tStateWatcher = new Thread(new ThreadStart(StateWatch)); - this.tStateWatcher.Name = "StateWatch"; - this.tStateWatcher.IsBackground = true; - this.tStateWatcher.Start(); - - this.efMainForm = mainForm; - this.assCompiledAssembly = assCompiledAssembly; - this.FullPath = strFullPath; - this.GUID = guid; - - this.strObjectName = Path.GetFileNameWithoutExtension(this.FullPath); - this.strObjectDescription = ""; - - this.Timer = new System.Timers.Timer(); - this.Timer.AutoReset = true; - this.Timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); - - this.SensorTimer = new System.Timers.Timer(); - this.SensorTimer.AutoReset = true; - this.SensorTimer.Elapsed += new System.Timers.ElapsedEventHandler(sensor_timer_Elapsed); - - this.strNewStateName = "default"; - this.CurrentStateName = ""; - } - - /// - /// Performs the timer event? - /// - /// The caller. - /// ElapsedEventArgs object. - private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) - { - ExecuteSecondLife("timer"); - } - - /// - /// Watches for the flag to switch state, and enacts the change when needed. - /// - private void StateWatch() - { - while (true) { - this.areStateChanged.WaitOne(); - this.tqTaskQueue.Start(); // is implicit Stop() old Queue - if (this.CurrentStateName != this.strNewStateName) { - this.CurrentStateName = this.strNewStateName; - ExecuteSecondLife("state_exit"); - // TODO: EXECUTE OPENSIM FUNCTION HERE - - // Changing to CurrentStateName on this thread! (not ExecuteSecondLife) - this.tqTaskQueue.Invoke(this, "SetState"); - } - } - } - - /// - /// Raises the flag for switching state. If the Force argument is true it ensures a state change. - /// - /// - /// - public void State(string strStateName, bool blnForce) - { - if (this.assCompiledAssembly != null) { - if (blnForce) { - this.CurrentStateName = ""; - } - this.strNewStateName = strStateName; - this.areStateChanged.Set(); - } - } - - /// - /// Initialises a new state. - /// - private void SetState() - { - if (assCompiledAssembly != null) { - slSecondLife = assCompiledAssembly.CreateInstance("LSLEditor.State_" + CurrentStateName) as SecondLife; - - if (slSecondLife == null) { - MessageBox.Show("State " + CurrentStateName + " does not exist!"); - return; - } - - lstListenFilter = new List(); - - lstLinks = new List(); - - // Make friends - slSecondLife.host = this; - - // Update runtime userinterface by calling event handler - if (OnStateChange != null) { - OnStateChange(this, new SecondLifeHostEventArgs(CurrentStateName)); - } - - ExecuteSecondLife("state_entry"); - } - } - - /// - /// Gets a methods arguments using reflection. - /// - /// - /// - public string GetArgumentsFromMethod(string strName) - { - string strArgs = ""; - if (this.slSecondLife != null) { - MethodInfo mi = slSecondLife.GetType().GetMethod(strName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); - if (mi != null) { - int intI = 0; - foreach (ParameterInfo pi in mi.GetParameters()) { - if (intI > 0) { - strArgs += ","; - } - strArgs += pi.ParameterType.ToString() + " " + pi.Name; - intI++; - } - } - } - return strArgs; - } - - /// - /// Runtime output of LSL event info. - /// - /// - /// - public void VerboseEvent(string strEventName, object[] args) - { - StringBuilder sb = new StringBuilder(); - sb.Append("*** "); - sb.Append(strEventName); - sb.Append('('); - for (int intI = 0; intI < args.Length; intI++) { - if (intI > 0) { - sb.Append(','); - } - sb.Append(args[intI].ToString()); - } - sb.Append(")"); - VerboseMessage(sb.ToString()); - } - - /// - /// Queue the method for execution. - /// - /// Some method (is it event or state?). - /// Array of arguments for the method. - public void ExecuteSecondLife(string strName, params object[] args) - { - if (slSecondLife != null) { - VerboseEvent(strName, args); - - this.tqTaskQueue.Invoke(slSecondLife, strName, args); - } - } - - /// - /// Fetches the names of all events (limited to current state?) in the script. - /// - /// List of events. - public ArrayList GetEvents() - { - ArrayList ar = new ArrayList(); - if (slSecondLife != null) { - foreach (MethodInfo mi in slSecondLife.GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)) { - ar.Add(mi.Name); - } - } - ar.Sort(); - return ar; - } - - /// - /// Reset the script? - /// - public void Reset() - { - if (OnReset != null) { - OnReset(this, new EventArgs()); - } - } - - /// - /// Stop executing the script. Resets the queue, timer etc. first. - /// - public void Die() - { - if (OnDie != null) { - OnDie(this, new EventArgs()); - } - - if (slSecondLife != null) { - // stop all timers - this.Timer.Stop(); - this.SensorTimer.Stop(); - - this.tqTaskQueue.Stop(); - this.tqTaskQueue.Dispose(); - this.tqTaskQueue = null; - - this.slSecondLife = null; - } - } - - /// - /// Disposal method. Resets the Queue, Sensor, Timer, XMLRPC, etc. - /// - public void Dispose() - { - if (tqTaskQueue != null) { - this.tqTaskQueue.Stop(); - this.tqTaskQueue.Dispose(); - this.tqTaskQueue = null; - } - if (listXmlRpc != null) { - foreach (XMLRPC xmlRpc in listXmlRpc) { - xmlRpc.CloseChannel(); - } - } - if (slSecondLife != null) { - this.Timer.Stop(); - this.SensorTimer.Stop(); - this.efMainForm = null; - this.slSecondLife = null; - } - } - - #region Link functions - /// - /// The Link structure holds data used in Link Messaging. - /// - private struct Link - { - /// - /// Data - 32 bit integer. - /// - public int Number; - - /// - /// Data - string. - /// - public string Text; - - /// - /// Data - SL key. - /// - public SecondLife.key ID; - - /// - /// Destination for the data. - /// - public SecondLife.key Target; - - /// - /// Initialises a new instance of the type. - /// - /// 32 bit integer data. - /// string data. - /// SL key data. - /// Destination for the message. - public Link(int number, string name, SecondLife.key id, SecondLife.key target) - { - this.Number = number; - this.Text = name; - this.ID = id; - this.Target = target; - } - } - - /// - /// Resets the link list, "breaking" them. - /// - public void llBreakAllLinks() - { - lstLinks = new List(); - } - - /// - /// Removes the specified Link from the list. - /// - /// The index number of the link to remove. - public void llBreakLink(int iLinkIndex) - { - foreach (Link link in this.lstLinks) { - if (link.Number == iLinkIndex) { - this.lstLinks.Remove(link); - break; - } - } - } - - #endregion - - #region Listen functions - - /// - /// Fetches the names of the ListenFilters. - /// - /// Array of ListenFilter names. - public string[] GetListenChannels() // for GroupboxEvent - { - List list = new List(); - foreach (ListenFilter lf in lstListenFilter) { - list.Add(lf.Channel.ToString()); - } - return list.ToArray(); - } - - /// - /// ListenFilter type structure. - /// - private struct ListenFilter - { - /// - /// Channel to listen on. - /// - public int Channel; - - /// - /// Name of object/avatar to listen for. - /// - public string Name; - - /// - /// Key of object/avatar to listen for. - /// - public SecondLife.key ID; - - /// - /// Text from object/avatar to listen for. - /// - public string Message; - - /// - /// Flag indicating whether this filter is enabled or not. - /// - public bool Active; - - /// - /// Initialises a new instance of the type. - /// - /// Channel to listen to (required). - /// Name to listen for (can be empty). - /// UUID to listen for (can be empty/null). - /// Text to listen for (can be empty). - public ListenFilter(int channel, string name, SecondLife.key id, string message) - { - this.Channel = channel; - this.Name = name; - this.ID = id; - this.Message = message; - this.Active = true; - } - } - - /// - /// Control for a ListenFilter - /// - /// 32 bit integer handle of the ListenFilter. - /// Flag indicating whether to enable or disable. - public void llListenControl(int number, int active) - { - for (int intI = 0; intI < lstListenFilter.Count; intI++) { - ListenFilter lf = lstListenFilter[intI]; - if (lf.GetHashCode() == number) { - lf.Active = (bool)(active == 1); - lstListenFilter[intI] = lf; - break; - } - } - } - - /// - /// Removes a ListenFilter from the list. - /// - /// 32 bit integer handle of the ListenFilter. - public void llListenRemove(int intHandle) - { - for (int intI = 0; intI < lstListenFilter.Count; intI++) { - ListenFilter lf = lstListenFilter[intI]; - if (lf.GetHashCode() == intHandle) { - lstListenFilter.RemoveAt(intI); - break; - } - } - } - - /// - /// Creates a ListenFilter from the llListen paramters. - /// - /// Channel to listen ot. - /// Name of object/avatar to listen for. - /// Key of object/avatar to listen for. - /// Text from object/avatar to listen for. - /// 32 bit integer handle. - public int llListen(int channel, string name, SecondLife.key id, string message) - { - if (lstListenFilter.Count >= 64) { - Chat(this, 0, "LSLEditor", SecondLife.NULL_KEY, "Maximum of 64 listens!!!", CommunicationType.Shout); - return 0; - } - ListenFilter lf = new ListenFilter(channel, name, id, message); - lstListenFilter.Add(lf); - if (OnListenChannelsChanged != null) { - OnListenChannelsChanged(this, null); - } - return lf.GetHashCode(); - } - - /// - /// Determines whether paremeters have a matching ListenFilter entry. - /// - /// - /// - /// - /// - /// True if a matche is found, otherwise false. - private bool CheckListenFilter(int channel, string name, SecondLife.key id, string message) - { - ListenFilter lfToCheck = new ListenFilter(channel, name, id, message); - - foreach (ListenFilter lf in lstListenFilter) { - if (!lf.Active) { - continue; - } - if (lf.Channel != lfToCheck.Channel) { - continue; - } - if (lf.Name != "" && lf.Name != lfToCheck.Name) { - continue; - } - if (lf.ID != Guid.Empty.ToString() && lf.ID != "" && lf.ID != lfToCheck.ID) { - continue; - } - if (lf.Message != "" && lf.Message != lfToCheck.Message) { - continue; - } - return true; - } - return false; - } - - /// - /// // sink listen - /// - /// SecondLifeHostChatEventArgs object. - public void Listen(SecondLifeHostChatEventArgs e) - { - if (slSecondLife != null) { - if (CheckListenFilter(e.Channel, e.Name, e.ID, e.Message)) { - ExecuteSecondLife("listen", e.Channel, e.Name, e.ID, e.Message); - } - } - } - - #endregion - - /// - /// Raise a chat event. - /// - /// - /// Channel to send message on. - /// Name of sender. - /// Key of sender. - /// Message to send. - /// CommunicatioType enumerator value. - public void Chat(object sender, int channel, string name, SecondLife.key id, string message, CommunicationType how) - { - if (OnChat != null) { - OnChat(sender, new SecondLifeHostChatEventArgs(channel, name, id, message, how)); - } - } - - /// - /// Raise a linked message event. - /// - /// - /// - /// - /// - public void MessageLinked(SecondLife.integer iLlinkIndex, SecondLife.integer iNumber, SecondLife.String sText, SecondLife.key kID) - { - if (OnMessageLinked != null) { - OnMessageLinked(this, new SecondLifeHostMessageLinkedEventArgs(iLlinkIndex, iNumber, sText, kID)); - } - } - - /// - /// // sink - /// - /// - public void LinkMessage(SecondLifeHostMessageLinkedEventArgs e) - { - ExecuteSecondLife("link_message", e.LinkIndex, e.Number, e.Text, e.ID); - } - - /// - /// - /// - /// - /// - /// - /// - public SecondLife.key Http(string strURL, SecondLife.list lParameters, string strBody) - { - SecondLife.key kID = SecondLife.NULL_KEY; - if (slSecondLife != null) { - System.Net.WebProxy proxy = null; - if (Properties.Settings.Default.ProxyServer != "") { - proxy = new System.Net.WebProxy(Properties.Settings.Default.ProxyServer.Replace("http://", "")); - } - - if (Properties.Settings.Default.ProxyUserid != "" && proxy != null) { - proxy.Credentials = new System.Net.NetworkCredential(Properties.Settings.Default.ProxyUserid, Properties.Settings.Default.ProxyPassword); - } - - kID = new SecondLife.key(Guid.NewGuid()); - ////WebRequestClass a = new WebRequestClass(proxy, secondLife, Url, Parameters, Body, Key); - try { - HTTPRequest.Request(proxy, slSecondLife, strURL, lParameters, strBody, kID); - } catch (Exception exception) { - VerboseMessage(exception.Message); - } - } - return kID; - } - - /// - /// - /// - /// - /// - /// - public void Email(string strRecipient, string strSubject, string strBody) - { - if (slSecondLife != null) { - SmtpClient client = new SmtpClient(); - client.SmtpServer = Properties.Settings.Default.EmailServer; - - string strName = GetObjectName(); - string strObjectName = string.Format("Object-Name: {0}", strName); - - SecondLife.vector vRegionCorner = slSecondLife.llGetRegionCorner(); - string strRegionName = slSecondLife.llGetRegionName(); - string strRegion = string.Format("Region: {0} ({1},{2})", strRegionName, vRegionCorner.x, vRegionCorner.y); - - SecondLife.vector pos = slSecondLife.llGetPos(); - string strPosition = string.Format("Local-Position: ({0},{1},{2})", (int)pos.x, (int)pos.y, (int)pos.z); - - string strPrefix = strObjectName + "\r\n"; - strPrefix += strRegion + "\r\n"; - strPrefix += strPosition + "\r\n\r\n"; - - MailMessage msg = new MailMessage(); - msg.To = strRecipient; - msg.Subject = strSubject; - msg.Body = strPrefix + strBody; - msg.From = Properties.Settings.Default.EmailAddress; - msg.Headers.Add("Reply-to", msg.From); - - ////MailAttachment myAttachment = new MailAttachment(strAttachmentFile); - ////msg.Attachments.Add(myAttachment); - - VerboseMessage(client.Send(msg)); - } - } - - /// - /// - /// - /// - public void VerboseMessage(string strMessage) - { - if (OnVerboseMessage != null) { - OnVerboseMessage(this, new SecondLifeHostEventArgs(strMessage)); - } - } - - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - public delegate void ShowDialogDelegate( - SecondLifeHost host, - SecondLife.String objectName, - SecondLife.key k, - SecondLife.String name, - SecondLife.String message, - SecondLife.list buttons, - SecondLife.integer channel); - - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void Dialog( - SecondLifeHost host, - SecondLife.String objectName, - SecondLife.key k, - SecondLife.String name, - SecondLife.String message, - SecondLife.list buttons, - SecondLife.integer channel) - { - llDialogForm lldfDialogForm = new llDialogForm(host, objectName, k, name, message, buttons, channel); - lldfDialogForm.Left = this.efMainForm.Right - lldfDialogForm.Width - 5; - lldfDialogForm.Top = this.efMainForm.Top + 30; - lldfDialogForm.Show(this.efMainForm); - this.efMainForm.llDialogForms.Add(lldfDialogForm); - } - - /// - /// - /// - /// - /// - /// - /// - public void llDialog(SecondLife.key avatar, SecondLife.String message, SecondLife.list buttons, SecondLife.integer channel) - { - if (message.ToString().Length >= 512) { - VerboseMessage("llDialog: message too long, must be less than 512 characters"); - return; - } - if (message.ToString().Length == 0) { - VerboseMessage("llDialog: must supply a message"); - return; - } - for (int intI = 0; intI < buttons.Count; intI++) { - if (buttons[intI].ToString() == "") { - VerboseMessage("llDialog: all buttons must have label strings"); - return; - } - if (buttons[intI].ToString().Length > 24) { - VerboseMessage("llDialog:Button Labels can not have more than 24 characters"); - return; - } - } - - if (buttons.Count == 0) { - buttons = new SecondLife.list(new string[] { "OK" }); - } - - this.efMainForm.Invoke(new ShowDialogDelegate(Dialog), this, (SecondLife.String)GetObjectName(), slSecondLife.llGetOwner(), (SecondLife.String)Properties.Settings.Default.AvatarName, message, buttons, channel); - } - - /// - /// - /// - /// - /// - /// - /// - /// - /// - public delegate void ShowTextBoxDelegate( - SecondLifeHost host, - SecondLife.String objectName, - SecondLife.key k, - SecondLife.String name, - SecondLife.String message, - SecondLife.integer channel); - - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void TextBox( - SecondLifeHost host, - SecondLife.String objectName, - SecondLife.key k, - SecondLife.String name, - SecondLife.String message, - SecondLife.integer channel) - { - llTextBoxForm tbfTextBoxForm = new llTextBoxForm(host, objectName, k, name, message, channel); - tbfTextBoxForm.Left = this.efMainForm.Left + (this.efMainForm.Width / 2) - (tbfTextBoxForm.Width / 2); - tbfTextBoxForm.Top = this.efMainForm.Top + (this.efMainForm.Height / 2) - (tbfTextBoxForm.Height / 2); - tbfTextBoxForm.Show(this.efMainForm); - this.efMainForm.llTextBoxForms.Add(tbfTextBoxForm); - } - - /// - /// - /// - /// - /// - /// - public void llTextBox(SecondLife.key avatar, SecondLife.String message, SecondLife.integer channel) - { - if (message.ToString().Length >= 512) { - VerboseMessage("llTextBox: message too long, must be less than 512 characters"); - return; - } - if (message.ToString().Length == 0) { - VerboseMessage("llTextBos: must supply a message"); - return; - } - this.efMainForm.Invoke(new ShowTextBoxDelegate(TextBox), this, (SecondLife.String)GetObjectName(), slSecondLife.llGetOwner(), (SecondLife.String)Properties.Settings.Default.AvatarName, message, channel); - } - - /// - /// - /// - /// - public void SetPermissions(SecondLife.integer intPermissions) - { - ExecuteSecondLife("run_time_permissions", intPermissions); - } - - /// - /// - /// - /// - /// - /// - /// - /// - /// - private delegate void RequestPermissionsDelegate( - SecondLifeHost host, - SecondLife.String objectName, - SecondLife.key k, - SecondLife.String name, - SecondLife.key agent, - SecondLife.integer intPermissions); - - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void RequestPermissions( - SecondLifeHost host, - SecondLife.String objectName, - SecondLife.key k, - SecondLife.String name, - SecondLife.key agent, - SecondLife.integer intPermissions) - { - PermissionsForm pfPermissionForm = new PermissionsForm(this, GetObjectName(), slSecondLife.llGetOwner(), Properties.Settings.Default.AvatarName, agent, intPermissions); - pfPermissionForm.Left = this.efMainForm.Right - pfPermissionForm.Width - 5; - pfPermissionForm.Top = this.efMainForm.Top + 30; - pfPermissionForm.Show(this.efMainForm); - this.efMainForm.PermissionForms.Add(pfPermissionForm); - } - - /// - /// - /// - /// - /// - public void llRequestPermissions(SecondLife.key agent, SecondLife.integer intPermissions) - { - this.efMainForm.Invoke( - new RequestPermissionsDelegate(RequestPermissions), - this, - (SecondLife.String)GetObjectName(), - slSecondLife.llGetOwner(), - (SecondLife.String)Properties.Settings.Default.AvatarName, - agent, - intPermissions); - } - - /// - /// - /// - private int intControls = -1; - - /// - /// - /// - /// - public void SendControl(Keys keys) - { - if (intControls >= 0 || this.slSecondLife != null) { - // check againt m_intControls TODO!!!!! - int held = 0; - int change = 0; - - if ((keys & Keys.Up) == Keys.Up) { - held |= SecondLife.CONTROL_UP; - } - if ((keys & Keys.Down) == Keys.Down) { - held |= SecondLife.CONTROL_DOWN; - } - if ((keys & Keys.Left) == Keys.Left) { - held |= SecondLife.CONTROL_LEFT; - } - if ((keys & Keys.Right) == Keys.Right) { - held |= SecondLife.CONTROL_RIGHT; - } - - ExecuteSecondLife("control", (SecondLife.key)Properties.Settings.Default.AvatarKey, (SecondLife.integer)held, (SecondLife.integer)change); - } - } - - /// - /// - /// - /// - /// - /// - public void TakeControls(int intControls, int accept, int pass_on) - { - this.intControls = intControls; - } - - /// - /// - /// - public void ReleaseControls() - { - this.intControls = -1; - } - - #region Notecards - /// - /// - /// - /// - /// - /// - private void GetNotecardLineWorker(SecondLife.key k, string strPath, int line) - { - StreamReader sr = new StreamReader(strPath); - int intI = 0; - string strData = SecondLife.EOF; - while (!sr.EndOfStream) { - string strLine = sr.ReadLine(); - if (intI == line) { - strData = strLine; - break; - } - intI++; - } - sr.Close(); - ExecuteSecondLife("dataserver", k, (SecondLife.String)strData); - } - - /// - /// - /// - /// - /// - /// - public SecondLife.key GetNotecardLine(string name, int line) - { - string strPath = efMainForm.SolutionExplorer.GetPath(this.GUID, name); - if (strPath == string.Empty) { - strPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), name); - } - if (!File.Exists(strPath)) { - VerboseMessage("Notecard: " + strPath + " not found"); - tqTaskQueue.Invoke(slSecondLife, "llSay", (SecondLife.integer)0, (SecondLife.String)("Couldn't find notecard " + name)); - return SecondLife.NULL_KEY; - } - SecondLife.key k = new SecondLife.key(Guid.NewGuid()); - tqTaskQueue.Invoke(this, "GetNotecardLineWorker", k, strPath, line); - return k; - } - - /// - /// - /// - /// - /// - private void GetNumberOfNotecardLinesWorker(SecondLife.key k, string strPath) - { - StreamReader sr = new StreamReader(strPath); - int intI = 0; - while (!sr.EndOfStream) { - string strLine = sr.ReadLine(); - intI++; - } - sr.Close(); - ExecuteSecondLife("dataserver", k, (SecondLife.String)intI.ToString()); - } - - /// - /// - /// - /// - /// - public SecondLife.key GetNumberOfNotecardLines(string name) - { - string strPath = efMainForm.SolutionExplorer.GetPath(this.GUID, name); - if (strPath == string.Empty) { - strPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), name); - } - - if (!File.Exists(strPath)) { - VerboseMessage("Notecard: " + strPath + " not found"); - tqTaskQueue.Invoke(slSecondLife, "llSay", (SecondLife.integer)0, (SecondLife.String)("Couldn't find notecard " + name)); - return SecondLife.NULL_KEY; - } - SecondLife.key k = new SecondLife.key(Guid.NewGuid()); - tqTaskQueue.Invoke(this, "GetNumberOfNotecardLinesWorker", k, strPath); - return k; - } - #endregion - - #region XML-RPC - - /// - /// - /// - private List listXmlRpc; - - /// - /// - /// - public void llOpenRemoteDataChannel() - { - if (listXmlRpc == null) { - listXmlRpc = new List(); - } - XMLRPC xmlRpc = new XMLRPC(); - xmlRpc.OnRequest += new XMLRPC.RequestEventHandler(xmlRpc_OnRequest); - xmlRpc.OpenChannel(listXmlRpc.Count); - listXmlRpc.Add(xmlRpc); - ExecuteSecondLife( - "remote_data", - SecondLife.REMOTE_DATA_CHANNEL, - xmlRpc.guid, - new SecondLife.key(Guid.NewGuid()), - (SecondLife.String)"LSLEditor", - (SecondLife.integer)0, - (SecondLife.String)("Listening on " + xmlRpc.Prefix)); - } - - /// - /// - /// - /// - /// - private void xmlRpc_OnRequest(object sender, XmlRpcRequestEventArgs e) - { - XMLRPC xmlRpc = sender as XMLRPC; - - ExecuteSecondLife( - "remote_data", - SecondLife.REMOTE_DATA_REQUEST, - e.channel, - e.message_id, - e.sender, - e.iData, - e.sData); - } - - /// - /// - /// - /// - public void llCloseRemoteDataChannel(SecondLife.key channel) - { - if (listXmlRpc != null) { - foreach (XMLRPC xmlRpc in listXmlRpc) { - if (xmlRpc.guid == channel.guid) { - xmlRpc.CloseChannel(); - break; - } - } - } - } - - /// - /// - /// - /// - /// - /// - /// - public void llRemoteDataReply(SecondLife.key channel, SecondLife.key message_id, string sdata, int idata) - { - if (listXmlRpc != null) { - foreach (XMLRPC xmlRpc in listXmlRpc) { - if (xmlRpc.guid == channel.guid) { - xmlRpc.RemoteDataReply(channel.guid, message_id.guid, sdata, idata); - break; - } - } - } - } - - /// - /// // Wiki sais this is not working in InWorld - /// - /// - /// - /// - /// - /// - public SecondLife.key llSendRemoteData(SecondLife.key kChannelID, string dest, int idata, string sdata) - { - XMLRPC xmlRpc = new XMLRPC(); - xmlRpc.OnReply += new XMLRPC.RequestEventHandler(xmlRpc_OnReply); - SecondLife.key message_id = xmlRpc.SendRemoteData(kChannelID, dest, idata, sdata); - return message_id; - } - - /// - /// // Wiki sais currently disabled - /// - /// - /// - private void xmlRpc_OnReply(object sender, XmlRpcRequestEventArgs e) - { - ExecuteSecondLife( - "remote_data", - SecondLife.REMOTE_DATA_REPLY, - e.channel, - e.message_id, - (SecondLife.String)"", // Wiki - e.iData, - e.sData); - } - #endregion - - /// - /// - /// - /// - /// - public string GetObjectName(Guid guid) - { - string strObjectName = efMainForm.SolutionExplorer.GetObjectName(guid); - return strObjectName != string.Empty ? strObjectName : this.strObjectName; - } - - /// - /// - /// - /// - public string GetObjectName() - { - return GetObjectName(this.GUID); - } - - /// - /// - /// - /// - public void SetObjectName(string name) - { - if (!efMainForm.SolutionExplorer.SetObjectName(this.GUID, name)) { - strObjectName = name; - } - } - - /// - /// - /// - /// - /// - public string GetObjectDescription(Guid guid) - { - string strObjectDescription = efMainForm.SolutionExplorer.GetObjectDescription(guid); - if (strObjectDescription != string.Empty) { - return strObjectDescription; - } else { - return this.strObjectDescription; - } - } - - /// - /// - /// - /// - public string GetObjectDescription() - { - return GetObjectDescription(this.GUID); - } - - /// - /// - /// - /// - public void SetObjectDescription(string description) - { - if (!efMainForm.SolutionExplorer.SetObjectDescription(this.GUID, description)) { - this.strObjectDescription = description; - } - } - - /// - /// - /// - /// - public string GetScriptName() - { - string strScriptName = efMainForm.SolutionExplorer.GetScriptName(this.GUID); - if (strScriptName == string.Empty) { - strScriptName = this.FullPath; - } - if (Properties.Settings.Default.llGetScriptName) { - strScriptName = Path.GetFileNameWithoutExtension(strScriptName); - } else { - strScriptName = Path.GetFileName(strScriptName); - } - return strScriptName; - } - - /// - /// - /// - /// - public SecondLife.key GetKey() - { - string strGuid = efMainForm.SolutionExplorer.GetKey(this.GUID); - if (strGuid == string.Empty) { - return new SecondLife.key(this.GUID); - } - return new SecondLife.key(strGuid); - } - - /// - /// - /// - /// - /// - /// - public SecondLife.String GetInventoryName(SecondLife.integer type, SecondLife.integer number) - { - string strInventoryName = efMainForm.SolutionExplorer.GetInventoryName(this.GUID, type, number); - if (strInventoryName == string.Empty) { - return "**GetInventoryName only works in SolutionExplorer**"; - } - return strInventoryName; - } - - /// - /// - /// - /// - /// - public SecondLife.key GetInventoryKey(SecondLife.String name) - { - string strInventoryKey = efMainForm.SolutionExplorer.GetInventoryKey(this.GUID, name); - if (strInventoryKey == string.Empty) { - return new SecondLife.key(Guid.Empty); - } - return new SecondLife.key(strInventoryKey); - } - - /// - /// - /// - /// - /// - public SecondLife.integer GetInventoryNumber(SecondLife.integer type) - { - return efMainForm.SolutionExplorer.GetInventoryNumber(this.GUID, type); - } - - /// - /// - /// - /// - /// - public SecondLife.integer GetInventoryType(SecondLife.String name) - { - return efMainForm.SolutionExplorer.GetInventoryType(this.GUID, name); - } - - /// - /// - /// - /// - public void RemoveInventory(SecondLife.String name) - { - efMainForm.SolutionExplorer.RemoveInventory(this.GUID, name); - } - - /// - /// - /// - /// - /// - public System.Media.SoundPlayer GetSoundPlayer(string sound) - { - string strPath = efMainForm.SolutionExplorer.GetPath(this.GUID, sound); - if (strPath == string.Empty) { - strPath = sound; - } - return new System.Media.SoundPlayer(strPath); - } - - /// - /// - /// - /// - /// - private void sensor_timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) - { - SecondLife.integer total_number = 1; - ExecuteSecondLife("sensor", total_number); - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// SecondLifeHost.cs +// +// + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.IO; +using System.Reflection; +using System.Text; +using System.Threading; +using System.Windows.Forms; + +using LSLEditor.Helpers; + +[module: SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:FileMayOnlyContainASingleClass", Justification = "Reviewed.")] + +namespace LSLEditor +{ + /// + /// Represents an event with a single string argument. + /// + public class SecondLifeHostEventArgs : EventArgs + { + /// + /// Stores the text of the message. + /// + public string Message; + + /// + /// Initialises a new instance of the class. + /// + /// String Text. + public SecondLifeHostEventArgs(string strMessage) + { + this.Message = strMessage; + } + } + + /// + /// Represents a linked message event. + /// + public class SecondLifeHostMessageLinkedEventArgs : EventArgs + { + /// + /// Stores the index of the sending link. + /// + public SecondLife.integer LinkIndex; + + /// + /// Stores a 32 bit numerical value. + /// + public SecondLife.integer Number; + + /// + /// Stores a text string. + /// + public SecondLife.String Text; + + /// + /// Stores a key. + /// + public SecondLife.key ID; + + /// + /// Initialises a new instance of the class. + /// + /// + /// + /// + /// + public SecondLifeHostMessageLinkedEventArgs(SecondLife.integer iLinkIndex, SecondLife.integer iNumber, SecondLife.String sText, SecondLife.key kID) + { + this.LinkIndex = iLinkIndex; + this.Number = iNumber; + this.Text = sText; + this.ID = kID; + } + } + + /// + /// Represents a chat event. + /// + public class SecondLifeHostChatEventArgs : EventArgs + { + /// + /// Stores the 32-bit number of the channel. + /// + public SecondLife.integer Channel; + + /// + /// Stores the name of the object/avatar. + /// + public SecondLife.String Name; + + /// + /// Stores the key of the objewct/avatar. + /// + public SecondLife.key ID; + + /// + /// Stores the text of the message. + /// + public SecondLife.String Message; + + /// + /// Stores the type of communication the event represents. + /// + public CommunicationType How; + + /// + /// Initialises a new instance of the class. + /// + /// Channel to communicate on. Some communication types have channel limitations. + /// Name of object/avatar. + /// UUID of object/avatar. + /// Text of message. + /// Type of communication (CommunicationType enum). + public SecondLifeHostChatEventArgs(SecondLife.integer channel, SecondLife.String name, SecondLife.key id, SecondLife.String message, CommunicationType how) + { + this.Channel = channel; + this.Name = name; + this.ID = id; + this.Message = message; + this.How = how; + } + } + + /// + /// SecondLifeHost class. + /// + public class SecondLifeHost : IDisposable + { + /// + /// Stores a list of ListenFilters + /// + private List lstListenFilter; + + /// + /// Stores a list of the links in an object. + /// + private List lstLinks; + + /// + /// Stores the SecondLife object representing the script. + /// + private SecondLife slSecondLife; + + /// + /// not sure? + /// + private TaskQueue tqTaskQueue; + + /// + /// Flag indicating an event has occurred. + /// + private AutoResetEvent areStateChanged; + + /// + /// Stores and controls a thread?. + /// + private Thread tStateWatcher; + + /// + /// An editor form? + /// + public LSLEditorForm efMainForm; + + /// + /// A compiled assembly of the LSL script. + /// + private Assembly assCompiledAssembly; + + /// + /// Stores the path to the script (including script name). + /// + public string FullPath; + + /// + /// Stores globally unique ID. + /// + public Guid GUID; + + /// + /// Stores SecondLifeHostMessageHandler function. + /// + /// Sender of message. + /// SecondLifeHostEventArgs object. + public delegate void SecondLifeHostMessageHandler(object sender, SecondLifeHostEventArgs e); + + /// + /// OnVerboseMessage event handler. + /// + public event SecondLifeHostMessageHandler OnVerboseMessage; + + /// + /// OnStateChange event handler. + /// + public event SecondLifeHostMessageHandler OnStateChange; + + /// + /// Stores SecondLifeHostChatHandler function. + /// + /// The sender. + /// SecondLifeHostChatEventArgs object. + public delegate void SecondLifeHostChatHandler(object sender, SecondLifeHostChatEventArgs e); + + /// + /// OnChat event handler. + /// + public event SecondLifeHostChatHandler OnChat; + + /// + /// Stores SecondLifeHostMessageLinkedHandler function. + /// + /// The caller. + /// SecondLifeHostMessageLinkedEventArgs object. + public delegate void SecondLifeHostMessageLinkedHandler(object sender, SecondLifeHostMessageLinkedEventArgs e); + + /// + /// OnMessageLinked event handler. + /// + public event SecondLifeHostMessageLinkedHandler OnMessageLinked; + + /// + /// OnDie event handler. + /// + public event EventHandler OnDie; + + /// + /// OnReset event handler. + /// + public event EventHandler OnReset; + + /// + /// OnListenChannelsChanged event handler. + /// + public event EventHandler OnListenChannelsChanged; + + /// + /// Stores a timer. + /// + public System.Timers.Timer Timer; + + /// + /// Stores the timer for a Sensor event. + /// + public System.Timers.Timer SensorTimer; + + /// + /// Name of currently active state. + /// + public string CurrentStateName; + + /// + /// Name of state to switch to. + /// + private string strNewStateName; + + /// + /// Name of the containing object/prim. + /// + private string strObjectName; + + /// + /// Description of the containing object/prim. + /// + private string strObjectDescription; + + /// + /// Initialises a new instance of the class. + /// + /// Editor form this host is atached to. + /// Assembly of the compiled script. + /// Full path (including file name) to the script. + /// UUID of the containing object? + public SecondLifeHost(LSLEditorForm mainForm, Assembly assCompiledAssembly, string strFullPath, Guid guid) + { + this.lstListenFilter = null; + this.lstLinks = null; + this.slSecondLife = null; + this.tqTaskQueue = new TaskQueue(); + this.areStateChanged = new AutoResetEvent(false); + this.tStateWatcher = new Thread(new ThreadStart(StateWatch)); + this.tStateWatcher.Name = "StateWatch"; + this.tStateWatcher.IsBackground = true; + this.tStateWatcher.Start(); + + this.efMainForm = mainForm; + this.assCompiledAssembly = assCompiledAssembly; + this.FullPath = strFullPath; + this.GUID = guid; + + this.strObjectName = Path.GetFileNameWithoutExtension(this.FullPath); + this.strObjectDescription = ""; + + this.Timer = new System.Timers.Timer(); + this.Timer.AutoReset = true; + this.Timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); + + this.SensorTimer = new System.Timers.Timer(); + this.SensorTimer.AutoReset = true; + this.SensorTimer.Elapsed += new System.Timers.ElapsedEventHandler(sensor_timer_Elapsed); + + this.strNewStateName = "default"; + this.CurrentStateName = ""; + } + + /// + /// Performs the timer event? + /// + /// The caller. + /// ElapsedEventArgs object. + private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + ExecuteSecondLife("timer"); + } + + /// + /// Watches for the flag to switch state, and enacts the change when needed. + /// + private void StateWatch() + { + while (true) { + this.areStateChanged.WaitOne(); + this.tqTaskQueue.Start(); // is implicit Stop() old Queue + if (this.CurrentStateName != this.strNewStateName) { + this.CurrentStateName = this.strNewStateName; + ExecuteSecondLife("state_exit"); + // TODO: EXECUTE OPENSIM FUNCTION HERE + + // Changing to CurrentStateName on this thread! (not ExecuteSecondLife) + this.tqTaskQueue.Invoke(this, "SetState"); + } + } + } + + /// + /// Raises the flag for switching state. If the Force argument is true it ensures a state change. + /// + /// + /// + public void State(string strStateName, bool blnForce) + { + if (this.assCompiledAssembly != null) { + if (blnForce) { + this.CurrentStateName = ""; + } + this.strNewStateName = strStateName; + this.areStateChanged.Set(); + } + } + + /// + /// Initialises a new state. + /// + private void SetState() + { + if (assCompiledAssembly != null) { + slSecondLife = assCompiledAssembly.CreateInstance("LSLEditor.State_" + CurrentStateName) as SecondLife; + + if (slSecondLife == null) { + MessageBox.Show("State " + CurrentStateName + " does not exist!"); + return; + } + + lstListenFilter = new List(); + + lstLinks = new List(); + + // Make friends + slSecondLife.host = this; + + // Update runtime userinterface by calling event handler + if (OnStateChange != null) { + OnStateChange(this, new SecondLifeHostEventArgs(CurrentStateName)); + } + + ExecuteSecondLife("state_entry"); + } + } + + /// + /// Gets a methods arguments using reflection. + /// + /// + /// + public string GetArgumentsFromMethod(string strName) + { + string strArgs = ""; + if (this.slSecondLife != null) { + MethodInfo mi = slSecondLife.GetType().GetMethod(strName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); + if (mi != null) { + int intI = 0; + foreach (ParameterInfo pi in mi.GetParameters()) { + if (intI > 0) { + strArgs += ","; + } + strArgs += pi.ParameterType.ToString() + " " + pi.Name; + intI++; + } + } + } + return strArgs; + } + + /// + /// Runtime output of LSL event info. + /// + /// + /// + public void VerboseEvent(string strEventName, object[] args) + { + StringBuilder sb = new StringBuilder(); + sb.Append("*** "); + sb.Append(strEventName); + sb.Append('('); + for (int intI = 0; intI < args.Length; intI++) { + if (intI > 0) { + sb.Append(','); + } + sb.Append(args[intI].ToString()); + } + sb.Append(")"); + VerboseMessage(sb.ToString()); + } + + /// + /// Queue the method for execution. + /// + /// Some method (is it event or state?). + /// Array of arguments for the method. + public void ExecuteSecondLife(string strName, params object[] args) + { + if (slSecondLife != null) { + VerboseEvent(strName, args); + + this.tqTaskQueue.Invoke(slSecondLife, strName, args); + } + } + + /// + /// Fetches the names of all events (limited to current state?) in the script. + /// + /// List of events. + public ArrayList GetEvents() + { + ArrayList ar = new ArrayList(); + if (slSecondLife != null) { + foreach (MethodInfo mi in slSecondLife.GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)) { + ar.Add(mi.Name); + } + } + ar.Sort(); + return ar; + } + + /// + /// Reset the script? + /// + public void Reset() + { + if (OnReset != null) { + OnReset(this, new EventArgs()); + } + } + + /// + /// Stop executing the script. Resets the queue, timer etc. first. + /// + public void Die() + { + if (OnDie != null) { + OnDie(this, new EventArgs()); + } + + if (slSecondLife != null) { + // stop all timers + this.Timer.Stop(); + this.SensorTimer.Stop(); + + this.tqTaskQueue.Stop(); + this.tqTaskQueue.Dispose(); + this.tqTaskQueue = null; + + this.slSecondLife = null; + } + } + + /// + /// Disposal method. Resets the Queue, Sensor, Timer, XMLRPC, etc. + /// + public void Dispose() + { + if (tqTaskQueue != null) { + this.tqTaskQueue.Stop(); + this.tqTaskQueue.Dispose(); + this.tqTaskQueue = null; + } + if (listXmlRpc != null) { + foreach (XMLRPC xmlRpc in listXmlRpc) { + xmlRpc.CloseChannel(); + } + } + if (slSecondLife != null) { + this.Timer.Stop(); + this.SensorTimer.Stop(); + this.efMainForm = null; + this.slSecondLife = null; + } + } + + #region Link functions + /// + /// The Link structure holds data used in Link Messaging. + /// + private struct Link + { + /// + /// Data - 32 bit integer. + /// + public int Number; + + /// + /// Data - string. + /// + public string Text; + + /// + /// Data - SL key. + /// + public SecondLife.key ID; + + /// + /// Destination for the data. + /// + public SecondLife.key Target; + + /// + /// Initialises a new instance of the type. + /// + /// 32 bit integer data. + /// string data. + /// SL key data. + /// Destination for the message. + public Link(int number, string name, SecondLife.key id, SecondLife.key target) + { + this.Number = number; + this.Text = name; + this.ID = id; + this.Target = target; + } + } + + /// + /// Resets the link list, "breaking" them. + /// + public void llBreakAllLinks() + { + lstLinks = new List(); + } + + /// + /// Removes the specified Link from the list. + /// + /// The index number of the link to remove. + public void llBreakLink(int iLinkIndex) + { + foreach (Link link in this.lstLinks) { + if (link.Number == iLinkIndex) { + this.lstLinks.Remove(link); + break; + } + } + } + + #endregion + + #region Listen functions + + /// + /// Fetches the names of the ListenFilters. + /// + /// Array of ListenFilter names. + public string[] GetListenChannels() // for GroupboxEvent + { + List list = new List(); + foreach (ListenFilter lf in lstListenFilter) { + list.Add(lf.Channel.ToString()); + } + return list.ToArray(); + } + + /// + /// ListenFilter type structure. + /// + private struct ListenFilter + { + /// + /// Channel to listen on. + /// + public int Channel; + + /// + /// Name of object/avatar to listen for. + /// + public string Name; + + /// + /// Key of object/avatar to listen for. + /// + public SecondLife.key ID; + + /// + /// Text from object/avatar to listen for. + /// + public string Message; + + /// + /// Flag indicating whether this filter is enabled or not. + /// + public bool Active; + + /// + /// Initialises a new instance of the type. + /// + /// Channel to listen to (required). + /// Name to listen for (can be empty). + /// UUID to listen for (can be empty/null). + /// Text to listen for (can be empty). + public ListenFilter(int channel, string name, SecondLife.key id, string message) + { + this.Channel = channel; + this.Name = name; + this.ID = id; + this.Message = message; + this.Active = true; + } + } + + /// + /// Control for a ListenFilter + /// + /// 32 bit integer handle of the ListenFilter. + /// Flag indicating whether to enable or disable. + public void llListenControl(int number, int active) + { + for (int intI = 0; intI < lstListenFilter.Count; intI++) { + ListenFilter lf = lstListenFilter[intI]; + if (lf.GetHashCode() == number) { + lf.Active = (bool)(active == 1); + lstListenFilter[intI] = lf; + break; + } + } + } + + /// + /// Removes a ListenFilter from the list. + /// + /// 32 bit integer handle of the ListenFilter. + public void llListenRemove(int intHandle) + { + for (int intI = 0; intI < lstListenFilter.Count; intI++) { + ListenFilter lf = lstListenFilter[intI]; + if (lf.GetHashCode() == intHandle) { + lstListenFilter.RemoveAt(intI); + break; + } + } + } + + /// + /// Creates a ListenFilter from the llListen paramters. + /// + /// Channel to listen ot. + /// Name of object/avatar to listen for. + /// Key of object/avatar to listen for. + /// Text from object/avatar to listen for. + /// 32 bit integer handle. + public int llListen(int channel, string name, SecondLife.key id, string message) + { + if (lstListenFilter.Count >= 64) { + Chat(this, 0, "LSLEditor", SecondLife.NULL_KEY, "Maximum of 64 listens!!!", CommunicationType.Shout); + return 0; + } + ListenFilter lf = new ListenFilter(channel, name, id, message); + lstListenFilter.Add(lf); + if (OnListenChannelsChanged != null) { + OnListenChannelsChanged(this, null); + } + return lf.GetHashCode(); + } + + /// + /// Determines whether paremeters have a matching ListenFilter entry. + /// + /// + /// + /// + /// + /// True if a matche is found, otherwise false. + private bool CheckListenFilter(int channel, string name, SecondLife.key id, string message) + { + ListenFilter lfToCheck = new ListenFilter(channel, name, id, message); + + foreach (ListenFilter lf in lstListenFilter) { + if (!lf.Active) { + continue; + } + if (lf.Channel != lfToCheck.Channel) { + continue; + } + if (lf.Name != "" && lf.Name != lfToCheck.Name) { + continue; + } + if (lf.ID != Guid.Empty.ToString() && lf.ID != "" && lf.ID != lfToCheck.ID) { + continue; + } + if (lf.Message != "" && lf.Message != lfToCheck.Message) { + continue; + } + return true; + } + return false; + } + + /// + /// // sink listen + /// + /// SecondLifeHostChatEventArgs object. + public void Listen(SecondLifeHostChatEventArgs e) + { + if (slSecondLife != null) { + if (CheckListenFilter(e.Channel, e.Name, e.ID, e.Message)) { + ExecuteSecondLife("listen", e.Channel, e.Name, e.ID, e.Message); + } + } + } + + #endregion + + /// + /// Raise a chat event. + /// + /// + /// Channel to send message on. + /// Name of sender. + /// Key of sender. + /// Message to send. + /// CommunicatioType enumerator value. + public void Chat(object sender, int channel, string name, SecondLife.key id, string message, CommunicationType how) + { + if (OnChat != null) { + OnChat(sender, new SecondLifeHostChatEventArgs(channel, name, id, message, how)); + } + } + + /// + /// Raise a linked message event. + /// + /// + /// + /// + /// + public void MessageLinked(SecondLife.integer iLlinkIndex, SecondLife.integer iNumber, SecondLife.String sText, SecondLife.key kID) + { + if (OnMessageLinked != null) { + OnMessageLinked(this, new SecondLifeHostMessageLinkedEventArgs(iLlinkIndex, iNumber, sText, kID)); + } + } + + /// + /// // sink + /// + /// + public void LinkMessage(SecondLifeHostMessageLinkedEventArgs e) + { + ExecuteSecondLife("link_message", e.LinkIndex, e.Number, e.Text, e.ID); + } + + /// + /// + /// + /// + /// + /// + /// + public SecondLife.key Http(string strURL, SecondLife.list lParameters, string strBody) + { + SecondLife.key kID = SecondLife.NULL_KEY; + if (slSecondLife != null) { + System.Net.WebProxy proxy = null; + if (Properties.Settings.Default.ProxyServer != "") { + proxy = new System.Net.WebProxy(Properties.Settings.Default.ProxyServer.Replace("http://", "")); + } + + if (Properties.Settings.Default.ProxyUserid != "" && proxy != null) { + proxy.Credentials = new System.Net.NetworkCredential(Properties.Settings.Default.ProxyUserid, Properties.Settings.Default.ProxyPassword); + } + + kID = new SecondLife.key(Guid.NewGuid()); + ////WebRequestClass a = new WebRequestClass(proxy, secondLife, Url, Parameters, Body, Key); + try { + HTTPRequest.Request(proxy, slSecondLife, strURL, lParameters, strBody, kID); + } catch (Exception exception) { + VerboseMessage(exception.Message); + } + } + return kID; + } + + /// + /// + /// + /// + /// + /// + public void Email(string strRecipient, string strSubject, string strBody) + { + if (slSecondLife != null) { + SmtpClient client = new SmtpClient(); + client.SmtpServer = Properties.Settings.Default.EmailServer; + + string strName = GetObjectName(); + string strObjectName = string.Format("Object-Name: {0}", strName); + + SecondLife.vector vRegionCorner = slSecondLife.llGetRegionCorner(); + string strRegionName = slSecondLife.llGetRegionName(); + string strRegion = string.Format("Region: {0} ({1},{2})", strRegionName, vRegionCorner.x, vRegionCorner.y); + + SecondLife.vector pos = slSecondLife.llGetPos(); + string strPosition = string.Format("Local-Position: ({0},{1},{2})", (int)pos.x, (int)pos.y, (int)pos.z); + + string strPrefix = strObjectName + "\r\n"; + strPrefix += strRegion + "\r\n"; + strPrefix += strPosition + "\r\n\r\n"; + + MailMessage msg = new MailMessage(); + msg.To = strRecipient; + msg.Subject = strSubject; + msg.Body = strPrefix + strBody; + msg.From = Properties.Settings.Default.EmailAddress; + msg.Headers.Add("Reply-to", msg.From); + + ////MailAttachment myAttachment = new MailAttachment(strAttachmentFile); + ////msg.Attachments.Add(myAttachment); + + VerboseMessage(client.Send(msg)); + } + } + + /// + /// + /// + /// + public void VerboseMessage(string strMessage) + { + if (OnVerboseMessage != null) { + OnVerboseMessage(this, new SecondLifeHostEventArgs(strMessage)); + } + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public delegate void ShowDialogDelegate( + SecondLifeHost host, + SecondLife.String objectName, + SecondLife.key k, + SecondLife.String name, + SecondLife.String message, + SecondLife.list buttons, + SecondLife.integer channel); + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + private void Dialog( + SecondLifeHost host, + SecondLife.String objectName, + SecondLife.key k, + SecondLife.String name, + SecondLife.String message, + SecondLife.list buttons, + SecondLife.integer channel) + { + llDialogForm lldfDialogForm = new llDialogForm(host, objectName, k, name, message, buttons, channel); + lldfDialogForm.Left = this.efMainForm.Right - lldfDialogForm.Width - 5; + lldfDialogForm.Top = this.efMainForm.Top + 30; + lldfDialogForm.Show(this.efMainForm); + this.efMainForm.llDialogForms.Add(lldfDialogForm); + } + + /// + /// + /// + /// + /// + /// + /// + public void llDialog(SecondLife.key avatar, SecondLife.String message, SecondLife.list buttons, SecondLife.integer channel) + { + if (message.ToString().Length >= 512) { + VerboseMessage("llDialog: message too long, must be less than 512 characters"); + return; + } + if (message.ToString().Length == 0) { + VerboseMessage("llDialog: must supply a message"); + return; + } + for (int intI = 0; intI < buttons.Count; intI++) { + if (buttons[intI].ToString() == "") { + VerboseMessage("llDialog: all buttons must have label strings"); + return; + } + if (buttons[intI].ToString().Length > 24) { + VerboseMessage("llDialog:Button Labels can not have more than 24 characters"); + return; + } + } + + if (buttons.Count == 0) { + buttons = new SecondLife.list(new string[] { "OK" }); + } + + this.efMainForm.Invoke(new ShowDialogDelegate(Dialog), this, (SecondLife.String)GetObjectName(), slSecondLife.llGetOwner(), (SecondLife.String)Properties.Settings.Default.AvatarName, message, buttons, channel); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public delegate void ShowTextBoxDelegate( + SecondLifeHost host, + SecondLife.String objectName, + SecondLife.key k, + SecondLife.String name, + SecondLife.String message, + SecondLife.integer channel); + + /// + /// + /// + /// + /// + /// + /// + /// + /// + private void TextBox( + SecondLifeHost host, + SecondLife.String objectName, + SecondLife.key k, + SecondLife.String name, + SecondLife.String message, + SecondLife.integer channel) + { + llTextBoxForm tbfTextBoxForm = new llTextBoxForm(host, objectName, k, name, message, channel); + tbfTextBoxForm.Left = this.efMainForm.Left + (this.efMainForm.Width / 2) - (tbfTextBoxForm.Width / 2); + tbfTextBoxForm.Top = this.efMainForm.Top + (this.efMainForm.Height / 2) - (tbfTextBoxForm.Height / 2); + tbfTextBoxForm.Show(this.efMainForm); + this.efMainForm.llTextBoxForms.Add(tbfTextBoxForm); + } + + /// + /// + /// + /// + /// + /// + public void llTextBox(SecondLife.key avatar, SecondLife.String message, SecondLife.integer channel) + { + if (message.ToString().Length >= 512) { + VerboseMessage("llTextBox: message too long, must be less than 512 characters"); + return; + } + if (message.ToString().Length == 0) { + VerboseMessage("llTextBos: must supply a message"); + return; + } + this.efMainForm.Invoke(new ShowTextBoxDelegate(TextBox), this, (SecondLife.String)GetObjectName(), slSecondLife.llGetOwner(), (SecondLife.String)Properties.Settings.Default.AvatarName, message, channel); + } + + /// + /// + /// + /// + public void SetPermissions(SecondLife.integer intPermissions) + { + ExecuteSecondLife("run_time_permissions", intPermissions); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + private delegate void RequestPermissionsDelegate( + SecondLifeHost host, + SecondLife.String objectName, + SecondLife.key k, + SecondLife.String name, + SecondLife.key agent, + SecondLife.integer intPermissions); + + /// + /// + /// + /// + /// + /// + /// + /// + /// + private void RequestPermissions( + SecondLifeHost host, + SecondLife.String objectName, + SecondLife.key k, + SecondLife.String name, + SecondLife.key agent, + SecondLife.integer intPermissions) + { + PermissionsForm pfPermissionForm = new PermissionsForm(this, GetObjectName(), slSecondLife.llGetOwner(), Properties.Settings.Default.AvatarName, agent, intPermissions); + pfPermissionForm.Left = this.efMainForm.Right - pfPermissionForm.Width - 5; + pfPermissionForm.Top = this.efMainForm.Top + 30; + pfPermissionForm.Show(this.efMainForm); + this.efMainForm.PermissionForms.Add(pfPermissionForm); + } + + /// + /// + /// + /// + /// + public void llRequestPermissions(SecondLife.key agent, SecondLife.integer intPermissions) + { + this.efMainForm.Invoke( + new RequestPermissionsDelegate(RequestPermissions), + this, + (SecondLife.String)GetObjectName(), + slSecondLife.llGetOwner(), + (SecondLife.String)Properties.Settings.Default.AvatarName, + agent, + intPermissions); + } + + /// + /// + /// + private int intControls = -1; + + /// + /// + /// + /// + public void SendControl(Keys keys) + { + if (intControls >= 0 || this.slSecondLife != null) { + // check againt m_intControls TODO!!!!! + int held = 0; + int change = 0; + + if ((keys & Keys.Up) == Keys.Up) { + held |= SecondLife.CONTROL_UP; + } + if ((keys & Keys.Down) == Keys.Down) { + held |= SecondLife.CONTROL_DOWN; + } + if ((keys & Keys.Left) == Keys.Left) { + held |= SecondLife.CONTROL_LEFT; + } + if ((keys & Keys.Right) == Keys.Right) { + held |= SecondLife.CONTROL_RIGHT; + } + + ExecuteSecondLife("control", (SecondLife.key)Properties.Settings.Default.AvatarKey, (SecondLife.integer)held, (SecondLife.integer)change); + } + } + + /// + /// + /// + /// + /// + /// + public void TakeControls(int intControls, int accept, int pass_on) + { + this.intControls = intControls; + } + + /// + /// + /// + public void ReleaseControls() + { + this.intControls = -1; + } + + #region Notecards + /// + /// + /// + /// + /// + /// + private void GetNotecardLineWorker(SecondLife.key k, string strPath, int line) + { + StreamReader sr = new StreamReader(strPath); + int intI = 0; + string strData = SecondLife.EOF; + while (!sr.EndOfStream) { + string strLine = sr.ReadLine(); + if (intI == line) { + strData = strLine; + break; + } + intI++; + } + sr.Close(); + ExecuteSecondLife("dataserver", k, (SecondLife.String)strData); + } + + /// + /// + /// + /// + /// + /// + public SecondLife.key GetNotecardLine(string name, int line) + { + string strPath = efMainForm.SolutionExplorer.GetPath(this.GUID, name); + if (strPath == string.Empty) { + strPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), name); + } + if (!File.Exists(strPath)) { + VerboseMessage("Notecard: " + strPath + " not found"); + tqTaskQueue.Invoke(slSecondLife, "llSay", (SecondLife.integer)0, (SecondLife.String)("Couldn't find notecard " + name)); + return SecondLife.NULL_KEY; + } + SecondLife.key k = new SecondLife.key(Guid.NewGuid()); + tqTaskQueue.Invoke(this, "GetNotecardLineWorker", k, strPath, line); + return k; + } + + /// + /// + /// + /// + /// + private void GetNumberOfNotecardLinesWorker(SecondLife.key k, string strPath) + { + StreamReader sr = new StreamReader(strPath); + int intI = 0; + while (!sr.EndOfStream) { + string strLine = sr.ReadLine(); + intI++; + } + sr.Close(); + ExecuteSecondLife("dataserver", k, (SecondLife.String)intI.ToString()); + } + + /// + /// + /// + /// + /// + public SecondLife.key GetNumberOfNotecardLines(string name) + { + string strPath = efMainForm.SolutionExplorer.GetPath(this.GUID, name); + if (strPath == string.Empty) { + strPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), name); + } + + if (!File.Exists(strPath)) { + VerboseMessage("Notecard: " + strPath + " not found"); + tqTaskQueue.Invoke(slSecondLife, "llSay", (SecondLife.integer)0, (SecondLife.String)("Couldn't find notecard " + name)); + return SecondLife.NULL_KEY; + } + SecondLife.key k = new SecondLife.key(Guid.NewGuid()); + tqTaskQueue.Invoke(this, "GetNumberOfNotecardLinesWorker", k, strPath); + return k; + } + #endregion + + #region XML-RPC + + /// + /// + /// + private List listXmlRpc; + + /// + /// + /// + public void llOpenRemoteDataChannel() + { + if (listXmlRpc == null) { + listXmlRpc = new List(); + } + XMLRPC xmlRpc = new XMLRPC(); + xmlRpc.OnRequest += new XMLRPC.RequestEventHandler(xmlRpc_OnRequest); + xmlRpc.OpenChannel(listXmlRpc.Count); + listXmlRpc.Add(xmlRpc); + ExecuteSecondLife( + "remote_data", + SecondLife.REMOTE_DATA_CHANNEL, + xmlRpc.guid, + new SecondLife.key(Guid.NewGuid()), + (SecondLife.String)"LSLEditor", + (SecondLife.integer)0, + (SecondLife.String)("Listening on " + xmlRpc.Prefix)); + } + + /// + /// + /// + /// + /// + private void xmlRpc_OnRequest(object sender, XmlRpcRequestEventArgs e) + { + XMLRPC xmlRpc = sender as XMLRPC; + + ExecuteSecondLife( + "remote_data", + SecondLife.REMOTE_DATA_REQUEST, + e.channel, + e.message_id, + e.sender, + e.iData, + e.sData); + } + + /// + /// + /// + /// + public void llCloseRemoteDataChannel(SecondLife.key channel) + { + if (listXmlRpc != null) { + foreach (XMLRPC xmlRpc in listXmlRpc) { + if (xmlRpc.guid == channel.guid) { + xmlRpc.CloseChannel(); + break; + } + } + } + } + + /// + /// + /// + /// + /// + /// + /// + public void llRemoteDataReply(SecondLife.key channel, SecondLife.key message_id, string sdata, int idata) + { + if (listXmlRpc != null) { + foreach (XMLRPC xmlRpc in listXmlRpc) { + if (xmlRpc.guid == channel.guid) { + xmlRpc.RemoteDataReply(channel.guid, message_id.guid, sdata, idata); + break; + } + } + } + } + + /// + /// // Wiki sais this is not working in InWorld + /// + /// + /// + /// + /// + /// + public SecondLife.key llSendRemoteData(SecondLife.key kChannelID, string dest, int idata, string sdata) + { + XMLRPC xmlRpc = new XMLRPC(); + xmlRpc.OnReply += new XMLRPC.RequestEventHandler(xmlRpc_OnReply); + SecondLife.key message_id = xmlRpc.SendRemoteData(kChannelID, dest, idata, sdata); + return message_id; + } + + /// + /// // Wiki sais currently disabled + /// + /// + /// + private void xmlRpc_OnReply(object sender, XmlRpcRequestEventArgs e) + { + ExecuteSecondLife( + "remote_data", + SecondLife.REMOTE_DATA_REPLY, + e.channel, + e.message_id, + (SecondLife.String)"", // Wiki + e.iData, + e.sData); + } + #endregion + + /// + /// + /// + /// + /// + public string GetObjectName(Guid guid) + { + string strObjectName = efMainForm.SolutionExplorer.GetObjectName(guid); + return strObjectName != string.Empty ? strObjectName : this.strObjectName; + } + + /// + /// + /// + /// + public string GetObjectName() + { + return GetObjectName(this.GUID); + } + + /// + /// + /// + /// + public void SetObjectName(string name) + { + if (!efMainForm.SolutionExplorer.SetObjectName(this.GUID, name)) { + strObjectName = name; + } + } + + /// + /// + /// + /// + /// + public string GetObjectDescription(Guid guid) + { + string strObjectDescription = efMainForm.SolutionExplorer.GetObjectDescription(guid); + if (strObjectDescription != string.Empty) { + return strObjectDescription; + } else { + return this.strObjectDescription; + } + } + + /// + /// + /// + /// + public string GetObjectDescription() + { + return GetObjectDescription(this.GUID); + } + + /// + /// + /// + /// + public void SetObjectDescription(string description) + { + if (!efMainForm.SolutionExplorer.SetObjectDescription(this.GUID, description)) { + this.strObjectDescription = description; + } + } + + /// + /// + /// + /// + public string GetScriptName() + { + string strScriptName = efMainForm.SolutionExplorer.GetScriptName(this.GUID); + if (strScriptName == string.Empty) { + strScriptName = this.FullPath; + } + if (Properties.Settings.Default.llGetScriptName) { + strScriptName = Path.GetFileNameWithoutExtension(strScriptName); + } else { + strScriptName = Path.GetFileName(strScriptName); + } + return strScriptName; + } + + /// + /// + /// + /// + public SecondLife.key GetKey() + { + string strGuid = efMainForm.SolutionExplorer.GetKey(this.GUID); + if (strGuid == string.Empty) { + return new SecondLife.key(this.GUID); + } + return new SecondLife.key(strGuid); + } + + /// + /// + /// + /// + /// + /// + public SecondLife.String GetInventoryName(SecondLife.integer type, SecondLife.integer number) + { + string strInventoryName = efMainForm.SolutionExplorer.GetInventoryName(this.GUID, type, number); + if (strInventoryName == string.Empty) { + return "**GetInventoryName only works in SolutionExplorer**"; + } + return strInventoryName; + } + + /// + /// + /// + /// + /// + public SecondLife.key GetInventoryKey(SecondLife.String name) + { + string strInventoryKey = efMainForm.SolutionExplorer.GetInventoryKey(this.GUID, name); + if (strInventoryKey == string.Empty) { + return new SecondLife.key(Guid.Empty); + } + return new SecondLife.key(strInventoryKey); + } + + /// + /// + /// + /// + /// + public SecondLife.integer GetInventoryNumber(SecondLife.integer type) + { + return efMainForm.SolutionExplorer.GetInventoryNumber(this.GUID, type); + } + + /// + /// + /// + /// + /// + public SecondLife.integer GetInventoryType(SecondLife.String name) + { + return efMainForm.SolutionExplorer.GetInventoryType(this.GUID, name); + } + + /// + /// + /// + /// + public void RemoveInventory(SecondLife.String name) + { + efMainForm.SolutionExplorer.RemoveInventory(this.GUID, name); + } + + /// + /// + /// + /// + /// + public System.Media.SoundPlayer GetSoundPlayer(string sound) + { + string strPath = efMainForm.SolutionExplorer.GetPath(this.GUID, sound); + if (strPath == string.Empty) { + strPath = sound; + } + return new System.Media.SoundPlayer(strPath); + } + + /// + /// + /// + /// + /// + private void sensor_timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + SecondLife.integer total_number = 1; + ExecuteSecondLife("sensor", total_number); + } + } +} diff --git a/trunk/SecondLife/SecondLifeMain.cs b/source/SecondLife/SecondLifeMain.cs similarity index 96% rename from trunk/SecondLife/SecondLifeMain.cs rename to source/SecondLife/SecondLifeMain.cs index e06fbd5..04b6824 100644 --- a/trunk/SecondLife/SecondLifeMain.cs +++ b/source/SecondLife/SecondLifeMain.cs @@ -1,713 +1,713 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// SecondLifeMain.cs -// -// - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text; -using System.Text.RegularExpressions; - -/* -// (C) 2006,2007 Alphons van der Heijden -// mail: alphons@heijden.com - */ -[module: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1650:ElementDocumentationMustBeSpelledCorrectly", Justification = "Reviewed.")] -[module: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1642:ConstructorSummaryDocumentationMustBeginWithStandardText", Justification = "Reviewed.")] - -namespace LSLEditor -{ - /// - /// Enumeration of Communication Types that the host understands. - /// - public enum CommunicationType - { - /// - /// Indicates the message can be heard only within 5m. - /// - Whisper, - - /// - /// Indicates the message can be heard only within 20m. - /// - Say, - - /// - /// Indicates the message can be heard only within 100m. - /// - Shout, - - /// - /// Indicates the message can be only heard by the owner any where within the same simulator. - /// - OwnerSay, - - /// - /// Indicates the message can be heard any where within the same simulator. - /// - RegionSay, - - /// - /// Indicates the message can be heard any where within the same simulator, by a specific object. - /// - RegionSayTo - } - - /// - /// Partial definition of SecondLife class to handle running scripts. - /// - public partial class SecondLife - { - /// - /// Holds the host object. - /// - private SecondLifeHost slhHost; - - #region members - /// - /// Random generator. - /// - private Random rdmRandom; - - /// - /// Holds the time of the script starting execution. - /// - private DateTime dtDateTimeScriptStarted; - - /// - /// Contains a boolean value indicating whether this object accepts other items to be dropped into it. - /// - private bool blnAllowDrop = false; - - /// - /// Contains a list of keys of avatars that may enter a parcel. - /// - private Hashtable htLandPassList; - - /// - /// Contains a list of keys of avatars that may NOT enter a parcel. - /// - private Hashtable htLandBanList; - - /// - /// Volume of sound played by this prim. - /// - private Float fVolume; - - /// - /// Name of the object/prim. - /// - private String sObjectName; - - /// - /// URL for parcel's music stream. - /// - private String sParcelMusicURL; - - /// - /// Position of object/prim placement in a simulator. - /// - private vector vPosition; - - /// - /// Rotation of the object/prim's placement in the simulator. - /// - private rotation rRotation; - - /// - /// Local rotation of the prim with respect to the object root. - /// - private rotation rRotationlocal; - - /// - /// Scale of the object/prim. - /// - private vector vScale; - - /// - /// Text for the "Sit" entry on object menu. - /// - private String sSitText; - - /// - /// Radius that sound may be heard around the object/prim. - /// - private Float fSoundRadius; - - /// - /// Region Coordinates of the simulator's bottom-left corner. - /// - private vector vRegionCorner; - - /// - /// Parameter passed to the script on start up. - /// - private integer iStartParameter; - - #endregion - - #region Constructor - /// - /// Initialises a new instance of the class. - /// - public SecondLife() - { - this.host = null; - rdmRandom = new Random(); - dtDateTimeScriptStarted = DateTime.Now.ToUniversalTime(); - htLandPassList = new Hashtable(); - htLandBanList = new Hashtable(); - fVolume = 0.0; - sObjectName = null; - vPosition = new vector(127, 128, 20); - rRotation = rotation.ZERO_ROTATION; - rRotationlocal = rotation.ZERO_ROTATION; - vScale = vector.ZERO_VECTOR; - sSitText = "sittext"; - fSoundRadius = 1.0; - iStartParameter = 0; - - vRegionCorner = vector.ZERO_VECTOR; - } - #endregion - - #region Properties - - /// - /// Gets the position of the object within the simulator. - /// - /// Gets the vPosition data member. - public vector GetLocalPos - { - // TODO change this to use a call to llGetLocalPos specifying NOT to be Verbose. After all functions have been changed to allow verbose/silent option. - get { return vPosition; } - } - - /// - /// Gets or sets the SecondLifeHost object. - /// - /// The host property gets/sets the slhHost data member. - public SecondLifeHost host - { - get { return this.slhHost; } - set { this.slhHost = value; } - } - #endregion - - #region internal routines - /// - /// Outputs messages during execution of the script. - /// - /// The text (with possible placeholders) to be output. - /// Values to be put into corresponding placeholders. - private void Verbose(string strLine, params object[] parameters) - { - if (parameters.Length == 0) { - host.VerboseMessage(strLine); - } else { - this.host.VerboseMessage(string.Format(strLine, parameters)); - } - } - - /// - /// Wrapper to call the SecondLifeHost.Chat method. - /// - /// Channel for message to be sent on. - /// Text of message to send. - /// Type of communication (from CommunicationType enumerator). - private void Chat(integer iChannel, string sText, CommunicationType ctHow) - { - this.host.Chat(this.host, iChannel, this.host.GetObjectName(), this.host.GetKey(), sText, ctHow); - } - - /// - /// Method to trigger change in script state. - /// - /// Name of state to switch to. - public void state(string strStateName) - { - Verbose("state->" + strStateName); - host.State(strStateName, false); - System.Threading.Thread.Sleep(1000); - System.Windows.Forms.MessageBox.Show("If you see this, something is wrong", "Oops..."); - } - #endregion - - #region Helper Functions - - #region List Functions - /// - /// Takes the possibly negative value list indexes and corrects them to be absolute indexes. - /// - /// Length of list. - /// Start index. - /// End index. - /// True, unless an error occurred, then false. - private bool CorrectIt(int intLength, ref int intStart, ref int intEnd) - { - bool bResult = true; - if (intStart < 0) { - intStart = intLength + intStart; - } - - if (intEnd < 0) { - intEnd = intLength + intEnd; - } - - if (intStart <= intEnd) { - if (intStart >= intLength) { - bResult = false; - } - if (intEnd < 0) { - bResult = false; - } - } - - intStart = Math.Max(0, intStart); - intEnd = Math.Min(intLength - 1, intEnd); - - return bResult; - } - - /// - /// Randomly rearranges the list of items. - /// - /// List to shuffle. - /// The reordered list. - public ArrayList RandomShuffle(ArrayList alCollection) - { - /* We have to copy all items anyway, and there isn't a way to produce the items - on the fly that is linear. So copying to an array and shuffling it is as efficient as we can get. - */ - - if (alCollection == null) { - throw new ArgumentNullException("collection"); - } - - int intCount = alCollection.Count; - for (int i = intCount - 1; i >= 1; --i) { - // Pick an random number 0 through i inclusive. - int j = rdmRandom.Next(i + 1); - - // Swap array[i] and array[j] - object temp = alCollection[i]; - alCollection[i] = alCollection[j]; - alCollection[j] = temp; - } - return alCollection; - } - - /// - /// Convert a list into an array of buckets containing Stride elements. - /// - /// List of items. - /// Number of element for each bucket. - /// The list separated into elements of Stride length. - private ArrayList List2Buckets(list lSource, int intStride) - { - ArrayList alBuckets = null; - if ((lSource.Count % intStride) == 0 && intStride <= lSource.Count) { - alBuckets = new ArrayList(); - for (int intI = 0; intI < lSource.Count; intI += intStride) { - object[] bucket = new object[intStride]; - for (int intJ = 0; intJ < intStride; intJ++) { - bucket[intJ] = lSource[intI + intJ]; - } - alBuckets.Add(bucket); - } - } - return alBuckets; - } - - /// - /// Converts buckets back into a list. - /// - /// Array of buckets. - /// Stride value. - /// The items recombined into a simple list. - private list Buckets2List(ArrayList alBuckets, int intStride) - { - object[] items = new object[alBuckets.Count * intStride]; - for (int intI = 0; intI < alBuckets.Count; intI++) { - for (int intJ = 0; intJ < intStride; intJ++) { - items[(intI * intStride) + intJ] = ((object[])alBuckets[intI])[intJ]; - } - } - return new list(items); - } - - /// - /// Implements the Comparer Interface for our custom types (Float, Integer, and String). - /// - private class BucketComparer : IComparer - { - /// - /// True/false parameter indicating whether the comparison should be done in ascending or descending order. - /// - private integer iAscending; - - /// - /// Initialises a new instance of the class. - /// - /// - [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1642:ConstructorSummaryDocumentationMustBeginWithStandardText", Justification = "Reviewed.")] - public BucketComparer(integer ascending) - { - this.iAscending = ascending; - } - - /// - /// Perform the comparison between two objects. - /// - /// First object. - /// Second object. - /// An integer (-1, 0, or 1), indicating whether the first item is less than, same as, or greater than the second. - public int Compare(object x, object y) - { - int iResult = 0; - object objA, objB; - - object[] xx = x as object[]; - object[] yy = y as object[]; - - if (iAscending == TRUE) { - objA = xx[0]; - objB = yy[0]; - } else { - objB = xx[0]; - objA = yy[0]; - } - - string strType = objA.GetType().ToString(); - - if (((objA is string) && (objB is string)) || ((objA is SecondLife.String) && (objB is SecondLife.String))) { - iResult = string.Compare(objA.ToString(), objB.ToString()); - } else if ((objA is SecondLife.integer) && (objB is SecondLife.integer)) { - iResult = SecondLife.integer.Compare((SecondLife.integer)objA, (SecondLife.integer)objB); - } else if ((objA is SecondLife.Float) && (objB is SecondLife.Float)) { - iResult = SecondLife.Float.Compare((SecondLife.Float)objA, (SecondLife.Float)objB); - } - - return iResult; - } - } - #endregion - - #region String Functions - - /// - /// Takes a string and splits it into a list based upon separators (which are not kept) and spacers (which are). - /// - /// The source text. - /// Separators to split on. - /// Spacers to split on. - /// True/false indicating whether nulls are kept in the resulting list. - /// A new list of the split string. - private list ParseString(String sSource, list lSeparators, list lSpacers, bool blnKeepNulls) - { - list lResult = new list(); - int intFrom = 0; - string s = sSource; - for (int intI = 0; intI < s.Length; intI++) { - string strTmp = s.Substring(intI); - bool blnFound = false; - for (int intJ = 0; intJ < lSeparators.Count; intJ++) { - string strSeparator = lSeparators[intJ].ToString(); - if (strSeparator.Length == 0) { - continue; // check this - } - if (strTmp.IndexOf(strSeparator) == 0) { - string strBefore = s.Substring(intFrom, intI - intFrom); - if (strBefore != "" || blnKeepNulls) { - lResult.Add(strBefore); - } - intI += strSeparator.Length - 1; - intFrom = intI + 1; - blnFound = true; - break; - } - } - - if (blnFound) { - continue; - } - - for (int intJ = 0; intJ < lSpacers.Count; intJ++) { - string strSpacer = lSpacers[intJ].ToString(); - if (strSpacer.Length == 0) { - continue; // check this - } - if (strTmp.IndexOf(strSpacer) == 0) { - string strBefore = s.Substring(intFrom, intI - intFrom); - if (strBefore != "" || blnKeepNulls) { - lResult.Add(strBefore); - } - lResult.Add(strSpacer); - intI += strSpacer.Length - 1; - intFrom = intI + 1; - break; - } - } - } - string strLast = s.Substring(intFrom); - if (strLast != "" || blnKeepNulls) { - lResult.Add(strLast); - } - return lResult; - } - - /// - /// Convert string to Base64 representation. - /// - /// Source string. - /// Base64 encoding of the source string. - private string StringToBase64(string strText) - { - byte[] data = Encoding.UTF8.GetBytes(strText); - return Convert.ToBase64String(data); - } - - /// - /// Converts Base64 encoded string back to UTF-8. - /// - /// Base64 encoded string. - /// UTF-8 string. - private string Base64ToString(string strText) - { - byte[] data = Convert.FromBase64String(strText); - int intLen = Array.IndexOf(data, (byte)0x00); - if (intLen < 0) { - intLen = data.Length; - } - return Encoding.UTF8.GetString(data, 0, intLen); - } - - /// - /// Performs the lookup. - /// - /// String source. - /// Byte within string. - /// The Base64 value of the element. - private int LookupBase64(string s, int intIndex) - { - int intReturn = 0; - if (intIndex < s.Length) { - intReturn = FastLookupBase64[s[intIndex]]; - if (intReturn == 0) { - if (s[intIndex] != 'A') { - throw new Exception(); - } - } - } else { - intReturn = 0; - } - return intReturn; - } - - /// - /// Pre-generated matrix for quicker lookup. - /// -////[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1204:StaticElementsMustAppearBeforeInstanceElements", Justification = "Stays with other string functions.")] - private static readonly int[] FastLookupBase64 = - { // 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 00 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 10 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, // 20 - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, // 30 - 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, // 40 - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, // 50 - 0, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, // 60 - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, // 70 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 80 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 90 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // A0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // B0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // C0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // D0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // E0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // F0 - #endregion - - #region Math Functions - - /// - /// Performs (iA ** iB) % iC. - /// - /// Base value. - /// Exponent value . - /// Modulus value. - /// The calculated result. - private integer ModPow1(integer iA, integer iB, integer iC) - { - return (int)Math.Pow((int)iA, (int)iB & (int)0xffff) % (int)iC; - } - - /// - /// Performs the llModPow2() function. - /// - /// Value one. - /// Value two. - /// The modulus value. - /// The calculated result. - private integer ModPow2(integer iValueX, integer iValueY, integer iModulus) - { - integer iResult = 0; - if (iValueX != 0) { - integer k = 1 + (int)Math.Ceiling(Math.Log(Math.Abs(iValueX)) / 0.69314718055994530941723212145818); // ceil(log2(x)) - integer w = 32; - integer p = w / k; - integer r = iValueY / p; - integer f = iValueY % p; - integer z = 1; - if (r) { - z = ModPow2(ModPow1(iValueX, p, iModulus), r, iModulus); - } - if (f) { - z = (z * ModPow1(iValueX, f, iModulus)) % iModulus; - } - iResult = z; - } - return iResult; - } - #endregion Math Functions - - /// - /// Used by llListStatistics in generating the statistics. - /// - /// List of numbers (mixed types possible) to use. - /// The numbers added together as a Float type. - private List GetListOfNumbers(list lInput) - { - List lResult = new List(); - for (int intI = 0; intI < lInput.Count; intI++) { - object objI = lInput[intI]; - string strType = objI.GetType().ToString().Replace("LSLEditor.SecondLife+", ""); - switch (strType) { - case "Float": - lResult.Add(Convert.ToDouble((Float)objI)); - break; - case "System.Int32": - lResult.Add(Convert.ToDouble((int)objI)); - break; - case "System.Double": - lResult.Add(Convert.ToDouble((double)objI)); - break; - case "integer": - lResult.Add(Convert.ToDouble((integer)objI)); - break; - default: - break; - } - } - return lResult; - } - - /// - /// Calculates the mean of the supplied numbers. - /// - /// Array of numbers. - /// The mean of the supplied numbers as a double type. - private double GetAverage(double[] data) - { - try { - double dblDataTotal = 0; - for (int i = 0; i < data.Length; i++) { - dblDataTotal += data[i]; - } - return SafeDivide(dblDataTotal, data.Length); - } catch (Exception) { - throw; - } - } - - /// - /// Calculates standard deviation. - /// - /// Array of numbers to work with. - /// The standard deviation of the supplied numbers as a double type. - public double GetStandardDeviation(double[] dblNumbers) - { - double dblSum = 0.0, dblSumOfSqrs = 0.0; - for (int i = 0; i < dblNumbers.Length; i++) { - dblSum += dblNumbers[i]; - dblSumOfSqrs += Math.Pow(dblNumbers[i], 2); - } - double dblTopSum = (dblNumbers.Length * dblSumOfSqrs) - Math.Pow(dblSum, 2); - double dblN = (double)dblNumbers.Length; - return Math.Sqrt(dblTopSum / (dblN * (dblN - 1))); - } - - /// - /// Performs division, only if both values are non-zero. - /// - /// First number. - /// Second number. - /// The result of the division, or zero if not performed. - private double SafeDivide(double dblValue1, double dblValue2) - { - double dblResult = 0.0F; - try { - if ((dblValue1 != 0) && (dblValue2 != 0)) { - dblResult = dblValue1 / dblValue2; - } - } catch { - } - return dblResult; - } - - /// - /// Takes a hexadecimal representation of a number and coverts it to an integer. - /// - /// Byte to convert. - /// Integer value of the supplied byte. - private byte HexToInt(byte b) - { - byte bResult; - if (b >= '0' && b <= '9') { - bResult = (byte)(b - '0'); - } else if ((b >= 'a' && b <= 'f') || (b >= 'A' && b <= 'F')) { - bResult = (byte)((b & 0x5f) - 0x37); - } else { - bResult = 0; // error - } - return bResult; - } - #endregion - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// SecondLifeMain.cs +// +// + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text; +using System.Text.RegularExpressions; + +/* +// (C) 2006,2007 Alphons van der Heijden +// mail: alphons@heijden.com + */ +[module: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1650:ElementDocumentationMustBeSpelledCorrectly", Justification = "Reviewed.")] +[module: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1642:ConstructorSummaryDocumentationMustBeginWithStandardText", Justification = "Reviewed.")] + +namespace LSLEditor +{ + /// + /// Enumeration of Communication Types that the host understands. + /// + public enum CommunicationType + { + /// + /// Indicates the message can be heard only within 5m. + /// + Whisper, + + /// + /// Indicates the message can be heard only within 20m. + /// + Say, + + /// + /// Indicates the message can be heard only within 100m. + /// + Shout, + + /// + /// Indicates the message can be only heard by the owner any where within the same simulator. + /// + OwnerSay, + + /// + /// Indicates the message can be heard any where within the same simulator. + /// + RegionSay, + + /// + /// Indicates the message can be heard any where within the same simulator, by a specific object. + /// + RegionSayTo + } + + /// + /// Partial definition of SecondLife class to handle running scripts. + /// + public partial class SecondLife + { + /// + /// Holds the host object. + /// + private SecondLifeHost slhHost; + + #region members + /// + /// Random generator. + /// + private Random rdmRandom; + + /// + /// Holds the time of the script starting execution. + /// + private DateTime dtDateTimeScriptStarted; + + /// + /// Contains a boolean value indicating whether this object accepts other items to be dropped into it. + /// + private bool blnAllowDrop = false; + + /// + /// Contains a list of keys of avatars that may enter a parcel. + /// + private Hashtable htLandPassList; + + /// + /// Contains a list of keys of avatars that may NOT enter a parcel. + /// + private Hashtable htLandBanList; + + /// + /// Volume of sound played by this prim. + /// + private Float fVolume; + + /// + /// Name of the object/prim. + /// + private String sObjectName; + + /// + /// URL for parcel's music stream. + /// + private String sParcelMusicURL; + + /// + /// Position of object/prim placement in a simulator. + /// + private vector vPosition; + + /// + /// Rotation of the object/prim's placement in the simulator. + /// + private rotation rRotation; + + /// + /// Local rotation of the prim with respect to the object root. + /// + private rotation rRotationlocal; + + /// + /// Scale of the object/prim. + /// + private vector vScale; + + /// + /// Text for the "Sit" entry on object menu. + /// + private String sSitText; + + /// + /// Radius that sound may be heard around the object/prim. + /// + private Float fSoundRadius; + + /// + /// Region Coordinates of the simulator's bottom-left corner. + /// + private vector vRegionCorner; + + /// + /// Parameter passed to the script on start up. + /// + private integer iStartParameter; + + #endregion + + #region Constructor + /// + /// Initialises a new instance of the class. + /// + public SecondLife() + { + this.host = null; + rdmRandom = new Random(); + dtDateTimeScriptStarted = DateTime.Now.ToUniversalTime(); + htLandPassList = new Hashtable(); + htLandBanList = new Hashtable(); + fVolume = 0.0; + sObjectName = null; + vPosition = new vector(127, 128, 20); + rRotation = rotation.ZERO_ROTATION; + rRotationlocal = rotation.ZERO_ROTATION; + vScale = vector.ZERO_VECTOR; + sSitText = "sittext"; + fSoundRadius = 1.0; + iStartParameter = 0; + + vRegionCorner = vector.ZERO_VECTOR; + } + #endregion + + #region Properties + + /// + /// Gets the position of the object within the simulator. + /// + /// Gets the vPosition data member. + public vector GetLocalPos + { + // TODO change this to use a call to llGetLocalPos specifying NOT to be Verbose. After all functions have been changed to allow verbose/silent option. + get { return vPosition; } + } + + /// + /// Gets or sets the SecondLifeHost object. + /// + /// The host property gets/sets the slhHost data member. + public SecondLifeHost host + { + get { return this.slhHost; } + set { this.slhHost = value; } + } + #endregion + + #region internal routines + /// + /// Outputs messages during execution of the script. + /// + /// The text (with possible placeholders) to be output. + /// Values to be put into corresponding placeholders. + private void Verbose(string strLine, params object[] parameters) + { + if (parameters.Length == 0) { + host.VerboseMessage(strLine); + } else { + this.host.VerboseMessage(string.Format(strLine, parameters)); + } + } + + /// + /// Wrapper to call the SecondLifeHost.Chat method. + /// + /// Channel for message to be sent on. + /// Text of message to send. + /// Type of communication (from CommunicationType enumerator). + private void Chat(integer iChannel, string sText, CommunicationType ctHow) + { + this.host.Chat(this.host, iChannel, this.host.GetObjectName(), this.host.GetKey(), sText, ctHow); + } + + /// + /// Method to trigger change in script state. + /// + /// Name of state to switch to. + public void state(string strStateName) + { + Verbose("state->" + strStateName); + host.State(strStateName, false); + System.Threading.Thread.Sleep(1000); + System.Windows.Forms.MessageBox.Show("If you see this, something is wrong", "Oops..."); + } + #endregion + + #region Helper Functions + + #region List Functions + /// + /// Takes the possibly negative value list indexes and corrects them to be absolute indexes. + /// + /// Length of list. + /// Start index. + /// End index. + /// True, unless an error occurred, then false. + private bool CorrectIt(int intLength, ref int intStart, ref int intEnd) + { + bool bResult = true; + if (intStart < 0) { + intStart = intLength + intStart; + } + + if (intEnd < 0) { + intEnd = intLength + intEnd; + } + + if (intStart <= intEnd) { + if (intStart >= intLength) { + bResult = false; + } + if (intEnd < 0) { + bResult = false; + } + } + + intStart = Math.Max(0, intStart); + intEnd = Math.Min(intLength - 1, intEnd); + + return bResult; + } + + /// + /// Randomly rearranges the list of items. + /// + /// List to shuffle. + /// The reordered list. + public ArrayList RandomShuffle(ArrayList alCollection) + { + /* We have to copy all items anyway, and there isn't a way to produce the items + on the fly that is linear. So copying to an array and shuffling it is as efficient as we can get. + */ + + if (alCollection == null) { + throw new ArgumentNullException("collection"); + } + + int intCount = alCollection.Count; + for (int i = intCount - 1; i >= 1; --i) { + // Pick an random number 0 through i inclusive. + int j = rdmRandom.Next(i + 1); + + // Swap array[i] and array[j] + object temp = alCollection[i]; + alCollection[i] = alCollection[j]; + alCollection[j] = temp; + } + return alCollection; + } + + /// + /// Convert a list into an array of buckets containing Stride elements. + /// + /// List of items. + /// Number of element for each bucket. + /// The list separated into elements of Stride length. + private ArrayList List2Buckets(list lSource, int intStride) + { + ArrayList alBuckets = null; + if ((lSource.Count % intStride) == 0 && intStride <= lSource.Count) { + alBuckets = new ArrayList(); + for (int intI = 0; intI < lSource.Count; intI += intStride) { + object[] bucket = new object[intStride]; + for (int intJ = 0; intJ < intStride; intJ++) { + bucket[intJ] = lSource[intI + intJ]; + } + alBuckets.Add(bucket); + } + } + return alBuckets; + } + + /// + /// Converts buckets back into a list. + /// + /// Array of buckets. + /// Stride value. + /// The items recombined into a simple list. + private list Buckets2List(ArrayList alBuckets, int intStride) + { + object[] items = new object[alBuckets.Count * intStride]; + for (int intI = 0; intI < alBuckets.Count; intI++) { + for (int intJ = 0; intJ < intStride; intJ++) { + items[(intI * intStride) + intJ] = ((object[])alBuckets[intI])[intJ]; + } + } + return new list(items); + } + + /// + /// Implements the Comparer Interface for our custom types (Float, Integer, and String). + /// + private class BucketComparer : IComparer + { + /// + /// True/false parameter indicating whether the comparison should be done in ascending or descending order. + /// + private integer iAscending; + + /// + /// Initialises a new instance of the class. + /// + /// + [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1642:ConstructorSummaryDocumentationMustBeginWithStandardText", Justification = "Reviewed.")] + public BucketComparer(integer ascending) + { + this.iAscending = ascending; + } + + /// + /// Perform the comparison between two objects. + /// + /// First object. + /// Second object. + /// An integer (-1, 0, or 1), indicating whether the first item is less than, same as, or greater than the second. + public int Compare(object x, object y) + { + int iResult = 0; + object objA, objB; + + object[] xx = x as object[]; + object[] yy = y as object[]; + + if (iAscending == TRUE) { + objA = xx[0]; + objB = yy[0]; + } else { + objB = xx[0]; + objA = yy[0]; + } + + string strType = objA.GetType().ToString(); + + if (((objA is string) && (objB is string)) || ((objA is SecondLife.String) && (objB is SecondLife.String))) { + iResult = string.Compare(objA.ToString(), objB.ToString()); + } else if ((objA is SecondLife.integer) && (objB is SecondLife.integer)) { + iResult = SecondLife.integer.Compare((SecondLife.integer)objA, (SecondLife.integer)objB); + } else if ((objA is SecondLife.Float) && (objB is SecondLife.Float)) { + iResult = SecondLife.Float.Compare((SecondLife.Float)objA, (SecondLife.Float)objB); + } + + return iResult; + } + } + #endregion + + #region String Functions + + /// + /// Takes a string and splits it into a list based upon separators (which are not kept) and spacers (which are). + /// + /// The source text. + /// Separators to split on. + /// Spacers to split on. + /// True/false indicating whether nulls are kept in the resulting list. + /// A new list of the split string. + private list ParseString(String sSource, list lSeparators, list lSpacers, bool blnKeepNulls) + { + list lResult = new list(); + int intFrom = 0; + string s = sSource; + for (int intI = 0; intI < s.Length; intI++) { + string strTmp = s.Substring(intI); + bool blnFound = false; + for (int intJ = 0; intJ < lSeparators.Count; intJ++) { + string strSeparator = lSeparators[intJ].ToString(); + if (strSeparator.Length == 0) { + continue; // check this + } + if (strTmp.IndexOf(strSeparator) == 0) { + string strBefore = s.Substring(intFrom, intI - intFrom); + if (strBefore != "" || blnKeepNulls) { + lResult.Add(strBefore); + } + intI += strSeparator.Length - 1; + intFrom = intI + 1; + blnFound = true; + break; + } + } + + if (blnFound) { + continue; + } + + for (int intJ = 0; intJ < lSpacers.Count; intJ++) { + string strSpacer = lSpacers[intJ].ToString(); + if (strSpacer.Length == 0) { + continue; // check this + } + if (strTmp.IndexOf(strSpacer) == 0) { + string strBefore = s.Substring(intFrom, intI - intFrom); + if (strBefore != "" || blnKeepNulls) { + lResult.Add(strBefore); + } + lResult.Add(strSpacer); + intI += strSpacer.Length - 1; + intFrom = intI + 1; + break; + } + } + } + string strLast = s.Substring(intFrom); + if (strLast != "" || blnKeepNulls) { + lResult.Add(strLast); + } + return lResult; + } + + /// + /// Convert string to Base64 representation. + /// + /// Source string. + /// Base64 encoding of the source string. + private string StringToBase64(string strText) + { + byte[] data = Encoding.UTF8.GetBytes(strText); + return Convert.ToBase64String(data); + } + + /// + /// Converts Base64 encoded string back to UTF-8. + /// + /// Base64 encoded string. + /// UTF-8 string. + private string Base64ToString(string strText) + { + byte[] data = Convert.FromBase64String(strText); + int intLen = Array.IndexOf(data, (byte)0x00); + if (intLen < 0) { + intLen = data.Length; + } + return Encoding.UTF8.GetString(data, 0, intLen); + } + + /// + /// Performs the lookup. + /// + /// String source. + /// Byte within string. + /// The Base64 value of the element. + private int LookupBase64(string s, int intIndex) + { + int intReturn = 0; + if (intIndex < s.Length) { + intReturn = FastLookupBase64[s[intIndex]]; + if (intReturn == 0) { + if (s[intIndex] != 'A') { + throw new Exception(); + } + } + } else { + intReturn = 0; + } + return intReturn; + } + + /// + /// Pre-generated matrix for quicker lookup. + /// +////[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1204:StaticElementsMustAppearBeforeInstanceElements", Justification = "Stays with other string functions.")] + private static readonly int[] FastLookupBase64 = + { // 0 1 2 3 4 5 6 7 8 9 A B C D E F + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 00 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 10 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, // 20 + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, // 30 + 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, // 40 + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, // 50 + 0, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, // 60 + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, // 70 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 80 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 90 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // A0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // B0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // C0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // D0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // E0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // F0 + #endregion + + #region Math Functions + + /// + /// Performs (iA ** iB) % iC. + /// + /// Base value. + /// Exponent value . + /// Modulus value. + /// The calculated result. + private integer ModPow1(integer iA, integer iB, integer iC) + { + return (int)Math.Pow((int)iA, (int)iB & (int)0xffff) % (int)iC; + } + + /// + /// Performs the llModPow2() function. + /// + /// Value one. + /// Value two. + /// The modulus value. + /// The calculated result. + private integer ModPow2(integer iValueX, integer iValueY, integer iModulus) + { + integer iResult = 0; + if (iValueX != 0) { + integer k = 1 + (int)Math.Ceiling(Math.Log(Math.Abs(iValueX)) / 0.69314718055994530941723212145818); // ceil(log2(x)) + integer w = 32; + integer p = w / k; + integer r = iValueY / p; + integer f = iValueY % p; + integer z = 1; + if (r) { + z = ModPow2(ModPow1(iValueX, p, iModulus), r, iModulus); + } + if (f) { + z = (z * ModPow1(iValueX, f, iModulus)) % iModulus; + } + iResult = z; + } + return iResult; + } + #endregion Math Functions + + /// + /// Used by llListStatistics in generating the statistics. + /// + /// List of numbers (mixed types possible) to use. + /// The numbers added together as a Float type. + private List GetListOfNumbers(list lInput) + { + List lResult = new List(); + for (int intI = 0; intI < lInput.Count; intI++) { + object objI = lInput[intI]; + string strType = objI.GetType().ToString().Replace("LSLEditor.SecondLife+", ""); + switch (strType) { + case "Float": + lResult.Add(Convert.ToDouble((Float)objI)); + break; + case "System.Int32": + lResult.Add(Convert.ToDouble((int)objI)); + break; + case "System.Double": + lResult.Add(Convert.ToDouble((double)objI)); + break; + case "integer": + lResult.Add(Convert.ToDouble((integer)objI)); + break; + default: + break; + } + } + return lResult; + } + + /// + /// Calculates the mean of the supplied numbers. + /// + /// Array of numbers. + /// The mean of the supplied numbers as a double type. + private double GetAverage(double[] data) + { + try { + double dblDataTotal = 0; + for (int i = 0; i < data.Length; i++) { + dblDataTotal += data[i]; + } + return SafeDivide(dblDataTotal, data.Length); + } catch (Exception) { + throw; + } + } + + /// + /// Calculates standard deviation. + /// + /// Array of numbers to work with. + /// The standard deviation of the supplied numbers as a double type. + public double GetStandardDeviation(double[] dblNumbers) + { + double dblSum = 0.0, dblSumOfSqrs = 0.0; + for (int i = 0; i < dblNumbers.Length; i++) { + dblSum += dblNumbers[i]; + dblSumOfSqrs += Math.Pow(dblNumbers[i], 2); + } + double dblTopSum = (dblNumbers.Length * dblSumOfSqrs) - Math.Pow(dblSum, 2); + double dblN = (double)dblNumbers.Length; + return Math.Sqrt(dblTopSum / (dblN * (dblN - 1))); + } + + /// + /// Performs division, only if both values are non-zero. + /// + /// First number. + /// Second number. + /// The result of the division, or zero if not performed. + private double SafeDivide(double dblValue1, double dblValue2) + { + double dblResult = 0.0F; + try { + if ((dblValue1 != 0) && (dblValue2 != 0)) { + dblResult = dblValue1 / dblValue2; + } + } catch { + } + return dblResult; + } + + /// + /// Takes a hexadecimal representation of a number and coverts it to an integer. + /// + /// Byte to convert. + /// Integer value of the supplied byte. + private byte HexToInt(byte b) + { + byte bResult; + if (b >= '0' && b <= '9') { + bResult = (byte)(b - '0'); + } else if ((b >= 'a' && b <= 'f') || (b >= 'A' && b <= 'F')) { + bResult = (byte)((b & 0x5f) - 0x37); + } else { + bResult = 0; // error + } + return bResult; + } + #endregion + } +} diff --git a/trunk/SecondLife/String.cs b/source/SecondLife/String.cs similarity index 96% rename from trunk/SecondLife/String.cs rename to source/SecondLife/String.cs index 7d973d1..e9f720d 100644 --- a/trunk/SecondLife/String.cs +++ b/source/SecondLife/String.cs @@ -1,128 +1,128 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; - -namespace LSLEditor -{ - public partial class SecondLife - { - public struct String - { - private string value; - - public String(string s) - { - this.value = s; - } - - public static implicit operator String(string s) - { - return new String(s); - } - - // 3 oct 2007 - public static explicit operator String(bool a) - { - return a ? "1" : "0"; - } - - // 24 augustus 2007 - public static explicit operator String(int i) - { - return new String(i.ToString()); - } - - public static explicit operator String(long i) - { - return new String(((int)(uint)i).ToString()); - } - - public static explicit operator String(float i) - { - return new String(string.Format("{0:0.000000}", i)); - } - - public static implicit operator string(String s) - { - return s.ToString(); - } - - public static implicit operator bool(String s) - { - return (s.value == null) ? false : (s.value.Length != 0); - } - - public static bool operator ==(String x, String y) - { - return (x.ToString() == y.ToString()); - } - - public static bool operator !=(String x, String y) - { - return !(x == y); - } - - // Public overrides - - public override bool Equals(object o) - { - try { - return (bool)(this.value == o.ToString()); - } catch { - return false; - } - } - - public override int GetHashCode() - { - return base.GetHashCode(); - } - - public override string ToString() - { - if (this.value == null) { - this.value = ""; - } - return this.value; - } - - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; + +namespace LSLEditor +{ + public partial class SecondLife + { + public struct String + { + private string value; + + public String(string s) + { + this.value = s; + } + + public static implicit operator String(string s) + { + return new String(s); + } + + // 3 oct 2007 + public static explicit operator String(bool a) + { + return a ? "1" : "0"; + } + + // 24 augustus 2007 + public static explicit operator String(int i) + { + return new String(i.ToString()); + } + + public static explicit operator String(long i) + { + return new String(((int)(uint)i).ToString()); + } + + public static explicit operator String(float i) + { + return new String(string.Format("{0:0.000000}", i)); + } + + public static implicit operator string(String s) + { + return s.ToString(); + } + + public static implicit operator bool(String s) + { + return (s.value == null) ? false : (s.value.Length != 0); + } + + public static bool operator ==(String x, String y) + { + return (x.ToString() == y.ToString()); + } + + public static bool operator !=(String x, String y) + { + return !(x == y); + } + + // Public overrides + + public override bool Equals(object o) + { + try { + return (bool)(this.value == o.ToString()); + } catch { + return false; + } + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + public override string ToString() + { + if (this.value == null) { + this.value = ""; + } + return this.value; + } + + } + } +} diff --git a/trunk/SecondLife/integer.cs b/source/SecondLife/integer.cs similarity index 96% rename from trunk/SecondLife/integer.cs rename to source/SecondLife/integer.cs index 4923040..6987f4c 100644 --- a/trunk/SecondLife/integer.cs +++ b/source/SecondLife/integer.cs @@ -1,285 +1,285 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; - -namespace LSLEditor -{ - public partial class SecondLife - { - public struct integer - { - public static readonly integer FALSE = new integer(0); - public static readonly integer TRUE = new integer(1); - - private object m_value; - private Int32 value - { - get - { - if (m_value == null) m_value = (Int32)0; - return (Int32)m_value; - } - set - { - m_value = value; - } - } - - // Constructor. - public integer(Int32 value) - { - this.m_value = value; - } - - public integer(string s) - { - Float f = new Float(s); - this.m_value = (Int32)f; - } - - // Implicit conversion from bool to integer. Maps true to - // integer.TRUE and false to integer.FALSE: - public static implicit operator integer(Boolean x) - { - return x ? TRUE : FALSE; - } - - public static implicit operator integer(int x) - { - return new integer(x); - } - - public static implicit operator integer(uint x) - { - return new integer((int)x); - } - - // 3 oct 2007 - public static implicit operator integer(long x) - { - return new integer((int)(uint)x); - } - - // 15 aug 2007 made explicit - public static explicit operator integer(Double x) - { - return new integer((int)x); - } - - // 15 aug 2007 made explicit - public static explicit operator integer(Float x) - { - return new integer((int)x); - } - - public static explicit operator integer(String x) - { - return new integer(x.ToString()); - } - - // 6 jan 2008, BlandWanderer thingy - public static explicit operator integer(string x) - { - Float f = new Float(x); - return new integer((int)(uint)f); - } - - - // Explicit conversion from integer to bool. - // returns true when non zero else false - public static explicit operator bool(integer x) - { - return (x.value != 0); - } - - // Logical negation (NOT) operator - public static integer operator !(integer x) - { - return x.value == 0 ? TRUE : FALSE; - } - - // Bitwise AND operator - public static integer operator &(integer x, integer y) - { - return new integer(x.value & y.value); - } - - // Bitwise OR operator - public static integer operator |(integer x, integer y) - { - return new integer(x.value | y.value); - } - - // Bitwise Not operator - public static integer operator ~(integer a) - { - return new integer(~a.value); - } - - // Bitwise Xor operator - public static integer operator ^(integer a, integer b) - { - return new integer(a.value ^ b.value); - } - - // Bitwise Shift right (b must be int) - public static integer operator >>(integer a, int b) - { - return new integer(a.value >> b); - } - - // Bitwise Shift left (b must be int) - public static integer operator <<(integer a, int b) - { - return new integer(a.value << b); - } - - public static integer operator %(integer a, integer b) - { - return new integer(a.value % b.value); - } - - - // Definitely true operator. Returns true if the operand is - // !=0, false otherwise: - public static bool operator true(integer x) - { - return (x.value != 0); - } - - // Definitely false operator. Returns true if the operand is - // ==0, false otherwise: - public static bool operator false(integer x) - { - return (x.value == 0); - } - - public static explicit operator String(integer x) - { - return x.value.ToString(); - } - - // this one is needed by the compiler - public static implicit operator Int32(integer x) - { - return x.value; - } - - public static integer operator +(integer a, integer b) - { - return new integer(a.value + b.value); - } - - public static integer operator -(integer a, integer b) - { - return new integer(a.value - b.value); - } - - public static integer operator -(integer a, bool b) - { - return a - (integer)b; - } - - public static integer operator +(integer a, bool b) - { - return a + (integer)b; - } - - // 6 jan 2008 - public static integer operator *(integer a, integer b) - { - return new integer(a.value * b.value); - } - - // 23 feb 2008 - public static integer operator *(integer a, Float b) - { - Float result = (Float)a.value * b; - return new integer((int)result); - } - - // 6 jan 2008 - public static bool operator ==(integer a, integer b) - { - return (a.value == b.value); - } - - // 6 jan 2008 - public static bool operator !=(integer a, integer b) - { - return (a.value != b.value); - } - - public static int Compare(integer a, integer b) - { - int intResult = 0; - if (a.value < b.value) { - intResult = -1; - } else if (a.value > b.value) { - intResult = 1; - } - return intResult; - } - - // Override the Object.Equals(object o) method: - public override bool Equals(object o) - { - try { - return (bool)(this == (integer)o); - } catch { - return false; - } - } - - // Override the Object.GetHashCode() method: - public override int GetHashCode() - { - return value; - } - - // Override the ToString method to convert integer to a string: - public override string ToString() - { - return value.ToString(); - } - - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; + +namespace LSLEditor +{ + public partial class SecondLife + { + public struct integer + { + public static readonly integer FALSE = new integer(0); + public static readonly integer TRUE = new integer(1); + + private object m_value; + private Int32 value + { + get + { + if (m_value == null) m_value = (Int32)0; + return (Int32)m_value; + } + set + { + m_value = value; + } + } + + // Constructor. + public integer(Int32 value) + { + this.m_value = value; + } + + public integer(string s) + { + Float f = new Float(s); + this.m_value = (Int32)f; + } + + // Implicit conversion from bool to integer. Maps true to + // integer.TRUE and false to integer.FALSE: + public static implicit operator integer(Boolean x) + { + return x ? TRUE : FALSE; + } + + public static implicit operator integer(int x) + { + return new integer(x); + } + + public static implicit operator integer(uint x) + { + return new integer((int)x); + } + + // 3 oct 2007 + public static implicit operator integer(long x) + { + return new integer((int)(uint)x); + } + + // 15 aug 2007 made explicit + public static explicit operator integer(Double x) + { + return new integer((int)x); + } + + // 15 aug 2007 made explicit + public static explicit operator integer(Float x) + { + return new integer((int)x); + } + + public static explicit operator integer(String x) + { + return new integer(x.ToString()); + } + + // 6 jan 2008, BlandWanderer thingy + public static explicit operator integer(string x) + { + Float f = new Float(x); + return new integer((int)(uint)f); + } + + + // Explicit conversion from integer to bool. + // returns true when non zero else false + public static explicit operator bool(integer x) + { + return (x.value != 0); + } + + // Logical negation (NOT) operator + public static integer operator !(integer x) + { + return x.value == 0 ? TRUE : FALSE; + } + + // Bitwise AND operator + public static integer operator &(integer x, integer y) + { + return new integer(x.value & y.value); + } + + // Bitwise OR operator + public static integer operator |(integer x, integer y) + { + return new integer(x.value | y.value); + } + + // Bitwise Not operator + public static integer operator ~(integer a) + { + return new integer(~a.value); + } + + // Bitwise Xor operator + public static integer operator ^(integer a, integer b) + { + return new integer(a.value ^ b.value); + } + + // Bitwise Shift right (b must be int) + public static integer operator >>(integer a, int b) + { + return new integer(a.value >> b); + } + + // Bitwise Shift left (b must be int) + public static integer operator <<(integer a, int b) + { + return new integer(a.value << b); + } + + public static integer operator %(integer a, integer b) + { + return new integer(a.value % b.value); + } + + + // Definitely true operator. Returns true if the operand is + // !=0, false otherwise: + public static bool operator true(integer x) + { + return (x.value != 0); + } + + // Definitely false operator. Returns true if the operand is + // ==0, false otherwise: + public static bool operator false(integer x) + { + return (x.value == 0); + } + + public static explicit operator String(integer x) + { + return x.value.ToString(); + } + + // this one is needed by the compiler + public static implicit operator Int32(integer x) + { + return x.value; + } + + public static integer operator +(integer a, integer b) + { + return new integer(a.value + b.value); + } + + public static integer operator -(integer a, integer b) + { + return new integer(a.value - b.value); + } + + public static integer operator -(integer a, bool b) + { + return a - (integer)b; + } + + public static integer operator +(integer a, bool b) + { + return a + (integer)b; + } + + // 6 jan 2008 + public static integer operator *(integer a, integer b) + { + return new integer(a.value * b.value); + } + + // 23 feb 2008 + public static integer operator *(integer a, Float b) + { + Float result = (Float)a.value * b; + return new integer((int)result); + } + + // 6 jan 2008 + public static bool operator ==(integer a, integer b) + { + return (a.value == b.value); + } + + // 6 jan 2008 + public static bool operator !=(integer a, integer b) + { + return (a.value != b.value); + } + + public static int Compare(integer a, integer b) + { + int intResult = 0; + if (a.value < b.value) { + intResult = -1; + } else if (a.value > b.value) { + intResult = 1; + } + return intResult; + } + + // Override the Object.Equals(object o) method: + public override bool Equals(object o) + { + try { + return (bool)(this == (integer)o); + } catch { + return false; + } + } + + // Override the Object.GetHashCode() method: + public override int GetHashCode() + { + return value; + } + + // Override the ToString method to convert integer to a string: + public override string ToString() + { + return value.ToString(); + } + + } + } +} diff --git a/trunk/SecondLife/key.cs b/source/SecondLife/key.cs similarity index 96% rename from trunk/SecondLife/key.cs rename to source/SecondLife/key.cs index 0f1a9f0..9b9aa07 100644 --- a/trunk/SecondLife/key.cs +++ b/source/SecondLife/key.cs @@ -1,152 +1,152 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; - -namespace LSLEditor -{ - public partial class SecondLife - { - public struct key - { - private string m_value; - - public string guid - { - get - { - if (m_value == null) - m_value = ""; - return m_value; - } - set - { - m_value = value; - } - } - - public key(Guid guid) - { - this.m_value = guid.ToString(); - } - - public key(string strGuid) - { - this.m_value = strGuid; - } - - public static readonly key NULL_KEY; - static key() - { - NULL_KEY = new key("00000000-0000-0000-0000-000000000000"); - } - - // This is the one-and-only implicit typecasting in SecondLife - public static implicit operator key(string strGuid) - { - return strGuid == null ? new key("") : new key(strGuid); - } - - public static implicit operator key(String _strGuid) - { - string strGuid = _strGuid; - return strGuid == null ? new key("") : new key(strGuid); - } - - public override string ToString() - { - if (this.guid == null) this.guid = ""; - return this.guid.ToString(); - } - - //public static explicit operator String(key k) - //{ - // return k.ToString(); - //} - - // Check this!!!! - public static implicit operator String(key k) - { - return k.ToString(); - } - - public static bool operator ==(key key1, key key2) - { - return (key1.guid == key2.guid); - } - - public static bool operator !=(key key1, key key2) - { - return !(key1.guid == key2.guid); - } - - public static bool operator true(key k) - { - bool bResult = true; - if ((object)k == null || k.guid == NULL_KEY || k.guid == "") { - bResult = false; - } - return bResult; - } - - public static bool operator false(key k) - { - bool bResult = false; - if ((object)k == null || k.guid == NULL_KEY || k.guid == "") { - bResult = true; - } - return bResult; - } - - public override bool Equals(object obj) - { - try { - return (this == (key)obj); - } catch { - return false; - } - } - - public override int GetHashCode() - { - return base.GetHashCode(); - } - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; + +namespace LSLEditor +{ + public partial class SecondLife + { + public struct key + { + private string m_value; + + public string guid + { + get + { + if (m_value == null) + m_value = ""; + return m_value; + } + set + { + m_value = value; + } + } + + public key(Guid guid) + { + this.m_value = guid.ToString(); + } + + public key(string strGuid) + { + this.m_value = strGuid; + } + + public static readonly key NULL_KEY; + static key() + { + NULL_KEY = new key("00000000-0000-0000-0000-000000000000"); + } + + // This is the one-and-only implicit typecasting in SecondLife + public static implicit operator key(string strGuid) + { + return strGuid == null ? new key("") : new key(strGuid); + } + + public static implicit operator key(String _strGuid) + { + string strGuid = _strGuid; + return strGuid == null ? new key("") : new key(strGuid); + } + + public override string ToString() + { + if (this.guid == null) this.guid = ""; + return this.guid.ToString(); + } + + //public static explicit operator String(key k) + //{ + // return k.ToString(); + //} + + // Check this!!!! + public static implicit operator String(key k) + { + return k.ToString(); + } + + public static bool operator ==(key key1, key key2) + { + return (key1.guid == key2.guid); + } + + public static bool operator !=(key key1, key key2) + { + return !(key1.guid == key2.guid); + } + + public static bool operator true(key k) + { + bool bResult = true; + if ((object)k == null || k.guid == NULL_KEY || k.guid == "") { + bResult = false; + } + return bResult; + } + + public static bool operator false(key k) + { + bool bResult = false; + if ((object)k == null || k.guid == NULL_KEY || k.guid == "") { + bResult = true; + } + return bResult; + } + + public override bool Equals(object obj) + { + try { + return (this == (key)obj); + } catch { + return false; + } + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + } + } +} diff --git a/trunk/SecondLife/list.cs b/source/SecondLife/list.cs similarity index 96% rename from trunk/SecondLife/list.cs rename to source/SecondLife/list.cs index 0e92f65..221d034 100644 --- a/trunk/SecondLife/list.cs +++ b/source/SecondLife/list.cs @@ -1,327 +1,327 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Text; -using System.Collections; - -namespace LSLEditor -{ - public partial class SecondLife - { - public struct list - { - private System.Collections.ArrayList value; - - public list(object[] args) - { - this.value = new ArrayList(); - foreach (object objA in args) - this.Add(objA); - } - - public list(list a) - { - this.value = new ArrayList(); - this.value.AddRange(a.ToArray()); - } - - public int Count - { - get - { - if (this.value == null) this.value = new ArrayList(); - return this.value.Count; - } - } - - public void AddRange(list c) - { - if (this.value == null) this.value = new ArrayList(); - this.value.AddRange(c.ToArray()); - } - - public void Add(object value) - { - if (this.value == null) this.value = new ArrayList(); - string strType = value.GetType().ToString(); - if (value is string) { - this.value.Add((String)value.ToString()); - } else if (value is int) { - this.value.Add(new integer((int)value)); - } else if (value is uint) { - this.value.Add(new integer((int)(uint)value)); - } else if (value is double) { - this.value.Add(new Float((double)value)); - } else { - this.value.Add(value); - } - } - - public object this[int index] - { - get - { - if (this.value == null) this.value = new ArrayList(); - return this.value[index]; - } - set - { - if (this.value == null) this.value = new ArrayList(); - this.value[index] = value; - } - } - - public void Insert(int index, object value) - { - if (this.value == null) this.value = new ArrayList(); - - if (this.value == null) this.value = new ArrayList(); - string strType = value.GetType().ToString(); - if (value is string) { - this.value.Insert(index, (String)value.ToString()); - } else if (value is int) { - this.value.Insert(index, new integer((int)value)); - } else if (value is uint) { - this.value.Insert(index, new integer((int)(uint)value)); - } else if (value is double) { - this.value.Insert(index, new Float((double)value)); - } else { - this.value.Insert(index, value); - } - } - - public object[] ToArray() - { - if (this.value == null) this.value = new ArrayList(); - return this.value.ToArray(); - } - - public static list operator +(list a, list b) - { - list l = new list(); - if ((object)a != null) l.AddRange(a); - if ((object)b != null) l.AddRange(b); - return l; - } - - public static list operator +(object b, list a) - { - list l = new list(); - if ((object)a != null) l.AddRange(a); - l.Insert(0, b); - return l; - } - - public static list operator +(list a, object b) - { - list l = new list(); - if ((object)a != null) l.AddRange(a); - l.Add(b); - return l; - } - - public static explicit operator list(string a) - { - list l = new list(); - l.Add(a); - return l; - } - public static explicit operator list(String a) - { - list l = new list(); - l.Add(a); - return l; - } - - public static explicit operator list(integer a) - { - list l = new list(); - l.Add(a); - return l; - } - - public static explicit operator list(key a) - { - list l = new list(); - l.Add(a); - return l; - } - - public static explicit operator list(vector a) - { - list l = new list(); - l.Add(a); - return l; - } - - public static explicit operator list(rotation a) - { - list l = new list(); - l.Add(a); - return l; - } - - public static explicit operator list(uint a) - { - list l = new list(); - l.Add(a); - return l; - } - - public static explicit operator list(int a) - { - list l = new list(); - l.Add(a); - return l; - } - - public static explicit operator list(double a) - { - list l = new list(); - l.Add(a); - return l; - } - - public static integer operator ==(list l, list m) - { - int iResult = TRUE; - if (l.Count != m.Count) { - iResult = FALSE; - } else { - for (int intI = 0; intI < l.Count; intI++) { - if (!l[intI].Equals(m[intI])) { - iResult = FALSE; - break; - } - } - } - return iResult; - } - - public static integer operator !=(list l, list m) - { - int intDifferent = 0; - if (m.Count == 0) {// shortcut - intDifferent = l.Count; - } else { - for (int intI = 0; intI < l.Count; intI++) { - bool blnFound = false; - for (int intJ = 0; intJ < m.Count; intJ++) { - if (l[intI].Equals(m[intJ])) { - blnFound = true; - break; - } - } - if (!blnFound) intDifferent++; - } - } - return intDifferent; - } - - public static bool operator true(list x) - { - return (object)x == null ? false : (x.value.Count != 0); - } - - // Definitely false operator. Returns true if the operand is - // ==0, false otherwise: - public static bool operator false(list x) - { - return (object)x == null ? true : (x.value.Count == 0); - } - - - public override int GetHashCode() - { - return base.GetHashCode(); - } - - public override bool Equals(object obj) - { - int intResult = (this == (list)obj); - return (intResult == 1); - } - - public string ToVerboseString() - { - if (this.value == null) { - this.value = new ArrayList(); - } - - StringBuilder sb = new StringBuilder(); - sb.Append('['); - for (int intI = 0; intI < this.value.Count; intI++) { - if (intI > 0) sb.Append(','); - if ((this.value[intI] is string) && Properties.Settings.Default.QuotesListVerbose) { - sb.Append("\"" + this.value[intI].ToString() + "\""); - } else { - sb.Append(this.value[intI].ToString()); - } - } - sb.Append(']'); - return sb.ToString(); - } - - public override string ToString() - { - if (this.value == null) this.value = new ArrayList(); - StringBuilder sb = new StringBuilder(); - for (int intI = 0; intI < this.value.Count; intI++) { - if (this.value[intI] is vector) { - vector v = (vector)this.value[intI]; - sb.AppendFormat(new System.Globalization.CultureInfo("en-us"), "<{0:0.000000}, {1:0.000000}, {2:0.000000}>", (double)v.x, (double)v.y, (double)v.z); - } else if (this.value[intI] is rotation) { - rotation r = (rotation)this.value[intI]; - sb.AppendFormat(new System.Globalization.CultureInfo("en-us"), "<{0:0.000000}, {1:0.000000}, {2:0.000000}, {3:0.000000}>", (double)r.x, (double)r.y, (double)r.z, (double)r.s); - } else { - sb.Append(this.value[intI].ToString()); - } - } - return sb.ToString(); - } - - public static explicit operator String(list l) - { - return (object)l == null ? "" : l.ToString(); - } - - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Text; +using System.Collections; + +namespace LSLEditor +{ + public partial class SecondLife + { + public struct list + { + private System.Collections.ArrayList value; + + public list(object[] args) + { + this.value = new ArrayList(); + foreach (object objA in args) + this.Add(objA); + } + + public list(list a) + { + this.value = new ArrayList(); + this.value.AddRange(a.ToArray()); + } + + public int Count + { + get + { + if (this.value == null) this.value = new ArrayList(); + return this.value.Count; + } + } + + public void AddRange(list c) + { + if (this.value == null) this.value = new ArrayList(); + this.value.AddRange(c.ToArray()); + } + + public void Add(object value) + { + if (this.value == null) this.value = new ArrayList(); + string strType = value.GetType().ToString(); + if (value is string) { + this.value.Add((String)value.ToString()); + } else if (value is int) { + this.value.Add(new integer((int)value)); + } else if (value is uint) { + this.value.Add(new integer((int)(uint)value)); + } else if (value is double) { + this.value.Add(new Float((double)value)); + } else { + this.value.Add(value); + } + } + + public object this[int index] + { + get + { + if (this.value == null) this.value = new ArrayList(); + return this.value[index]; + } + set + { + if (this.value == null) this.value = new ArrayList(); + this.value[index] = value; + } + } + + public void Insert(int index, object value) + { + if (this.value == null) this.value = new ArrayList(); + + if (this.value == null) this.value = new ArrayList(); + string strType = value.GetType().ToString(); + if (value is string) { + this.value.Insert(index, (String)value.ToString()); + } else if (value is int) { + this.value.Insert(index, new integer((int)value)); + } else if (value is uint) { + this.value.Insert(index, new integer((int)(uint)value)); + } else if (value is double) { + this.value.Insert(index, new Float((double)value)); + } else { + this.value.Insert(index, value); + } + } + + public object[] ToArray() + { + if (this.value == null) this.value = new ArrayList(); + return this.value.ToArray(); + } + + public static list operator +(list a, list b) + { + list l = new list(); + if ((object)a != null) l.AddRange(a); + if ((object)b != null) l.AddRange(b); + return l; + } + + public static list operator +(object b, list a) + { + list l = new list(); + if ((object)a != null) l.AddRange(a); + l.Insert(0, b); + return l; + } + + public static list operator +(list a, object b) + { + list l = new list(); + if ((object)a != null) l.AddRange(a); + l.Add(b); + return l; + } + + public static explicit operator list(string a) + { + list l = new list(); + l.Add(a); + return l; + } + public static explicit operator list(String a) + { + list l = new list(); + l.Add(a); + return l; + } + + public static explicit operator list(integer a) + { + list l = new list(); + l.Add(a); + return l; + } + + public static explicit operator list(key a) + { + list l = new list(); + l.Add(a); + return l; + } + + public static explicit operator list(vector a) + { + list l = new list(); + l.Add(a); + return l; + } + + public static explicit operator list(rotation a) + { + list l = new list(); + l.Add(a); + return l; + } + + public static explicit operator list(uint a) + { + list l = new list(); + l.Add(a); + return l; + } + + public static explicit operator list(int a) + { + list l = new list(); + l.Add(a); + return l; + } + + public static explicit operator list(double a) + { + list l = new list(); + l.Add(a); + return l; + } + + public static integer operator ==(list l, list m) + { + int iResult = TRUE; + if (l.Count != m.Count) { + iResult = FALSE; + } else { + for (int intI = 0; intI < l.Count; intI++) { + if (!l[intI].Equals(m[intI])) { + iResult = FALSE; + break; + } + } + } + return iResult; + } + + public static integer operator !=(list l, list m) + { + int intDifferent = 0; + if (m.Count == 0) {// shortcut + intDifferent = l.Count; + } else { + for (int intI = 0; intI < l.Count; intI++) { + bool blnFound = false; + for (int intJ = 0; intJ < m.Count; intJ++) { + if (l[intI].Equals(m[intJ])) { + blnFound = true; + break; + } + } + if (!blnFound) intDifferent++; + } + } + return intDifferent; + } + + public static bool operator true(list x) + { + return (object)x == null ? false : (x.value.Count != 0); + } + + // Definitely false operator. Returns true if the operand is + // ==0, false otherwise: + public static bool operator false(list x) + { + return (object)x == null ? true : (x.value.Count == 0); + } + + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + public override bool Equals(object obj) + { + int intResult = (this == (list)obj); + return (intResult == 1); + } + + public string ToVerboseString() + { + if (this.value == null) { + this.value = new ArrayList(); + } + + StringBuilder sb = new StringBuilder(); + sb.Append('['); + for (int intI = 0; intI < this.value.Count; intI++) { + if (intI > 0) sb.Append(','); + if ((this.value[intI] is string) && Properties.Settings.Default.QuotesListVerbose) { + sb.Append("\"" + this.value[intI].ToString() + "\""); + } else { + sb.Append(this.value[intI].ToString()); + } + } + sb.Append(']'); + return sb.ToString(); + } + + public override string ToString() + { + if (this.value == null) this.value = new ArrayList(); + StringBuilder sb = new StringBuilder(); + for (int intI = 0; intI < this.value.Count; intI++) { + if (this.value[intI] is vector) { + vector v = (vector)this.value[intI]; + sb.AppendFormat(new System.Globalization.CultureInfo("en-us"), "<{0:0.000000}, {1:0.000000}, {2:0.000000}>", (double)v.x, (double)v.y, (double)v.z); + } else if (this.value[intI] is rotation) { + rotation r = (rotation)this.value[intI]; + sb.AppendFormat(new System.Globalization.CultureInfo("en-us"), "<{0:0.000000}, {1:0.000000}, {2:0.000000}, {3:0.000000}>", (double)r.x, (double)r.y, (double)r.z, (double)r.s); + } else { + sb.Append(this.value[intI].ToString()); + } + } + return sb.ToString(); + } + + public static explicit operator String(list l) + { + return (object)l == null ? "" : l.ToString(); + } + + } + } +} diff --git a/trunk/SecondLife/rotation.cs b/source/SecondLife/rotation.cs similarity index 96% rename from trunk/SecondLife/rotation.cs rename to source/SecondLife/rotation.cs index 824bc07..2d29de0 100644 --- a/trunk/SecondLife/rotation.cs +++ b/source/SecondLife/rotation.cs @@ -1,274 +1,274 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Text.RegularExpressions; - -namespace LSLEditor -{ - public partial class SecondLife - { - public struct rotation - { - private object m_x, m_y, m_z, m_s; - - public Float x - { - get - { - if (m_x == null) m_x = (Float)0; - return (Float)m_x; - } - set - { - m_x = value; - } - } - - public Float y - { - get - { - if (m_y == null) m_y = (Float)0; - return (Float)m_y; - } - set - { - m_y = value; - } - } - - public Float z - { - get - { - if (m_z == null) m_z = (Float)0; - return (Float)m_z; - } - set - { - m_z = value; - } - } - - public Float s - { - get - { - if (m_s == null) m_s = (Float)0; - return (Float)m_s; - } - set - { - m_s = value; - } - } - public static readonly rotation ZERO_ROTATION; - public rotation(double x, double y, double z, double s) - { - this.m_x = (Float)x; - this.m_y = (Float)y; - this.m_z = (Float)z; - this.m_s = (Float)s; - } - - public static explicit operator rotation(String s) - { - return new rotation(s.ToString()); - } - - public static explicit operator rotation(string s) - { - return new rotation(s); - } - - public rotation(string a) - { - this.m_x = (Float)0; - this.m_y = (Float)0; - this.m_z = (Float)0; - this.m_s = (Float)0; - Regex regex = new Regex( - @"<(?[^,]*),(?[^,]*),(?[^,]*),(?[^,]*)>", - RegexOptions.IgnorePatternWhitespace | - RegexOptions.Compiled); - Match m = regex.Match(a); - if (m.Success) { - this.m_x = new Float(m.Groups["x"].Value); - this.m_y = new Float(m.Groups["y"].Value); - this.m_z = new Float(m.Groups["z"].Value); - this.m_s = new Float(m.Groups["s"].Value); - } - } - - static rotation() - { - ZERO_ROTATION = new rotation(0, 0, 0, 1); - } - - public override string ToString() - { - return string.Format(new System.Globalization.CultureInfo("en-us"), "<{0:0.00000}, {1:0.00000}, {2:0.00000}, {3:0.00000}>", (double)this.x, (double)this.y, (double)this.z, (double)this.s); - } - - public static explicit operator String(rotation rot) - { - if ((object)rot == null) { - return ZERO_ROTATION.ToString(); - } else { - return rot.ToString(); - } - } - - // 23 feb 2008 - public static rotation operator -(rotation r) - { - return new rotation(-r.x, -r.y, -r.z, -r.s); - } - // 23 feb 2008 - public static rotation operator +(rotation r) - { - return new rotation(r.x, r.y, r.z, r.s); - } - - - public static rotation operator *(rotation q, rotation r) - { - rotation rot = new rotation( - r.s * q.x - r.z * q.y + r.y * q.z + r.x * q.s, - r.s * q.y + r.z * q.x + r.y * q.s - r.x * q.z, - r.s * q.z + r.z * q.s - r.y * q.x + r.x * q.y, - r.s * q.s - r.z * q.z - r.y * q.y - r.x * q.x); - return rot; - } - - public static rotation operator /(rotation q, rotation r) - { // 23 feb 2008 - rotation rot = new rotation( - r.s * q.x + r.z * q.y - r.y * q.z - r.x * q.s, - r.s * q.y - r.z * q.x - r.y * q.s + r.x * q.z, - r.s * q.z - r.z * q.s + r.y * q.x - r.x * q.y, - r.s * q.s + r.z * q.z + r.y * q.y + r.x * q.x); - return rot; - } - - public static rotation operator +(rotation q, rotation r) - { - return new rotation( - q.x + r.x, - q.y + r.y, - q.z + r.z, - q.s + r.s - ); - } - - public static rotation operator -(rotation q, rotation r) - { - return new rotation( - q.x - r.x, - q.y - r.y, - q.z - r.z, - q.s - r.s - ); - } - - public const double EqualityTolerence = 1e-14; //Double.Epsilon; - - public static bool operator ==(rotation r1, rotation r2) - { - bool bReturn = true; - if ((object)r1 == null) r1 = ZERO_ROTATION; - if ((object)r2 == null) r2 = ZERO_ROTATION; - if (Math.Abs(r1.x - r2.x) > EqualityTolerence) { - bReturn = false; - } else if (Math.Abs(r1.y - r2.y) > EqualityTolerence) { - bReturn = false; - } else if (Math.Abs(r1.z - r2.z) > EqualityTolerence) { - bReturn = false; - } else if (Math.Abs(r1.s - r2.s) > EqualityTolerence) { - bReturn = false; - } - return bReturn; - } - - public static bool operator !=(rotation r, rotation s) - { - return !(r == s); - } - - public static bool operator true(rotation r) - { - if ((object)r == null) { - return false; - } - if (r.x == 0 && r.y == 0 && r.z == 0 && r.s == 1) { - return false; - } - return true; - } - - public static bool operator false(rotation r) - { - if ((object)r == null) { - return true; - } - if (r.x == 0 && r.y == 0 && r.z == 0 && r.s == 1) { - return true; - } - return false; - } - - - public override int GetHashCode() - { - return base.GetHashCode(); - } - - public override bool Equals(object obj) - { - try { - return (this == (rotation)obj); - } catch { - return false; - } - } - - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Text.RegularExpressions; + +namespace LSLEditor +{ + public partial class SecondLife + { + public struct rotation + { + private object m_x, m_y, m_z, m_s; + + public Float x + { + get + { + if (m_x == null) m_x = (Float)0; + return (Float)m_x; + } + set + { + m_x = value; + } + } + + public Float y + { + get + { + if (m_y == null) m_y = (Float)0; + return (Float)m_y; + } + set + { + m_y = value; + } + } + + public Float z + { + get + { + if (m_z == null) m_z = (Float)0; + return (Float)m_z; + } + set + { + m_z = value; + } + } + + public Float s + { + get + { + if (m_s == null) m_s = (Float)0; + return (Float)m_s; + } + set + { + m_s = value; + } + } + public static readonly rotation ZERO_ROTATION; + public rotation(double x, double y, double z, double s) + { + this.m_x = (Float)x; + this.m_y = (Float)y; + this.m_z = (Float)z; + this.m_s = (Float)s; + } + + public static explicit operator rotation(String s) + { + return new rotation(s.ToString()); + } + + public static explicit operator rotation(string s) + { + return new rotation(s); + } + + public rotation(string a) + { + this.m_x = (Float)0; + this.m_y = (Float)0; + this.m_z = (Float)0; + this.m_s = (Float)0; + Regex regex = new Regex( + @"<(?[^,]*),(?[^,]*),(?[^,]*),(?[^,]*)>", + RegexOptions.IgnorePatternWhitespace | + RegexOptions.Compiled); + Match m = regex.Match(a); + if (m.Success) { + this.m_x = new Float(m.Groups["x"].Value); + this.m_y = new Float(m.Groups["y"].Value); + this.m_z = new Float(m.Groups["z"].Value); + this.m_s = new Float(m.Groups["s"].Value); + } + } + + static rotation() + { + ZERO_ROTATION = new rotation(0, 0, 0, 1); + } + + public override string ToString() + { + return string.Format(new System.Globalization.CultureInfo("en-us"), "<{0:0.00000}, {1:0.00000}, {2:0.00000}, {3:0.00000}>", (double)this.x, (double)this.y, (double)this.z, (double)this.s); + } + + public static explicit operator String(rotation rot) + { + if ((object)rot == null) { + return ZERO_ROTATION.ToString(); + } else { + return rot.ToString(); + } + } + + // 23 feb 2008 + public static rotation operator -(rotation r) + { + return new rotation(-r.x, -r.y, -r.z, -r.s); + } + // 23 feb 2008 + public static rotation operator +(rotation r) + { + return new rotation(r.x, r.y, r.z, r.s); + } + + + public static rotation operator *(rotation q, rotation r) + { + rotation rot = new rotation( + r.s * q.x - r.z * q.y + r.y * q.z + r.x * q.s, + r.s * q.y + r.z * q.x + r.y * q.s - r.x * q.z, + r.s * q.z + r.z * q.s - r.y * q.x + r.x * q.y, + r.s * q.s - r.z * q.z - r.y * q.y - r.x * q.x); + return rot; + } + + public static rotation operator /(rotation q, rotation r) + { // 23 feb 2008 + rotation rot = new rotation( + r.s * q.x + r.z * q.y - r.y * q.z - r.x * q.s, + r.s * q.y - r.z * q.x - r.y * q.s + r.x * q.z, + r.s * q.z - r.z * q.s + r.y * q.x - r.x * q.y, + r.s * q.s + r.z * q.z + r.y * q.y + r.x * q.x); + return rot; + } + + public static rotation operator +(rotation q, rotation r) + { + return new rotation( + q.x + r.x, + q.y + r.y, + q.z + r.z, + q.s + r.s + ); + } + + public static rotation operator -(rotation q, rotation r) + { + return new rotation( + q.x - r.x, + q.y - r.y, + q.z - r.z, + q.s - r.s + ); + } + + public const double EqualityTolerence = 1e-14; //Double.Epsilon; + + public static bool operator ==(rotation r1, rotation r2) + { + bool bReturn = true; + if ((object)r1 == null) r1 = ZERO_ROTATION; + if ((object)r2 == null) r2 = ZERO_ROTATION; + if (Math.Abs(r1.x - r2.x) > EqualityTolerence) { + bReturn = false; + } else if (Math.Abs(r1.y - r2.y) > EqualityTolerence) { + bReturn = false; + } else if (Math.Abs(r1.z - r2.z) > EqualityTolerence) { + bReturn = false; + } else if (Math.Abs(r1.s - r2.s) > EqualityTolerence) { + bReturn = false; + } + return bReturn; + } + + public static bool operator !=(rotation r, rotation s) + { + return !(r == s); + } + + public static bool operator true(rotation r) + { + if ((object)r == null) { + return false; + } + if (r.x == 0 && r.y == 0 && r.z == 0 && r.s == 1) { + return false; + } + return true; + } + + public static bool operator false(rotation r) + { + if ((object)r == null) { + return true; + } + if (r.x == 0 && r.y == 0 && r.z == 0 && r.s == 1) { + return true; + } + return false; + } + + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + public override bool Equals(object obj) + { + try { + return (this == (rotation)obj); + } catch { + return false; + } + } + + } + } +} diff --git a/trunk/SecondLife/vector.cs b/source/SecondLife/vector.cs similarity index 96% rename from trunk/SecondLife/vector.cs rename to source/SecondLife/vector.cs index 9e746b7..8fe5954 100644 --- a/trunk/SecondLife/vector.cs +++ b/source/SecondLife/vector.cs @@ -1,284 +1,284 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// vector.cs -// -// - -using System; -using System.Text.RegularExpressions; - -namespace LSLEditor -{ - public partial class SecondLife - { - public struct vector - { - private object m_x, m_y, m_z; - - public Float x - { - get - { - if (m_x == null) - m_x = (Float)0; - return (Float)m_x; - } - set - { - m_x = value; - } - } - - public Float y - { - get - { - if (m_y == null) - m_y = (Float)0; - return (Float)m_y; - } - set - { - m_y = value; - } - } - - public Float z - { - get - { - if (m_z == null) - m_z = (Float)0; - return (Float)m_z; - } - set - { - m_z = value; - } - } - - public static readonly vector ZERO_VECTOR; - public vector(double x, double y, double z) - { - this.m_x = (Float)x; - this.m_y = (Float)y; - this.m_z = (Float)z; - } - public vector(string a) - { - this.m_x = (Float)0; - this.m_y = (Float)0; - this.m_z = (Float)0; - Regex regex = new Regex( - @"<(?[^,]*),(?[^,]*),(?[^,]*)>", - RegexOptions.IgnorePatternWhitespace | - RegexOptions.Compiled); - Match m = regex.Match(a); - if (m.Success) - { - this.m_x = new Float(m.Groups["x"].Value); - this.m_y = new Float(m.Groups["y"].Value); - this.m_z = new Float(m.Groups["z"].Value); - } - } - static vector() - { - ZERO_VECTOR = new vector(0, 0, 0); - } - - public static explicit operator vector(string s) - { - return new vector(s); - } - - public static explicit operator vector(String s) - { - return new vector(s.ToString()); - } - - private double SumSqrs() - { - return x * x + y * y + z * z; - } - - public static vector operator +(vector vector1, vector vector2) - { - return new vector(vector1.x + vector2.x, vector1.y + vector2.y, vector1.z + vector2.z); - } - public static vector operator -(vector vector1, vector vector2) - { - return new vector(vector1.x - vector2.x, vector1.y - vector2.y, vector1.z - vector2.z); - } - // 2 jun 2007 - public static vector operator -(vector vector1) - { - return new vector(-vector1.x, -vector1.y, -vector1.z); - } - // 2 jun 2007 - public static vector operator +(vector vector1) - { - return new vector(vector1.x, vector1.y, vector1.z); - } - public static double operator *(vector vector1, vector vector2) - { - return vector1.x * vector2.x + vector1.y * vector2.y + vector1.z * vector2.z; - } - - public static vector operator /(vector v1, double dbl1) - { - return new vector(v1.x / dbl1, v1.y / dbl1, v1.z / dbl1); - } - public static vector operator *(vector v1, double dbl1) - { - return new vector(v1.x * dbl1, v1.y * dbl1, v1.z * dbl1); - } - public static vector operator *(double dbl1, vector v1) - { - return v1 * dbl1; - } - public static vector operator %(vector vector1, vector vector2) - { - return new vector( - vector1.y * vector2.z - vector1.z * vector2.y, - vector1.z * vector2.x - vector1.x * vector2.z, - vector1.x * vector2.y - vector1.y * vector2.x); - } - - // checked 3 jun 2007 - public static vector operator *(vector v, rotation r) - { - return new vector( -(r.s * r.s + r.x * r.x - r.y * r.y - r.z * r.z) * v.x + 2 * (r.x * r.y - r.s * r.z) * v.y + 2 * (r.s * r.y + r.x * r.z) * v.z, -2 * (r.s * r.z + r.x * r.y) * v.x + (r.s * r.s - r.x * r.x + r.y * r.y - r.z * r.z) * v.y + 2 * (r.y * r.z - r.s * r.x) * v.z, -2 * (r.x * r.z - r.s * r.y) * v.x + 2 * (r.s * r.x + r.y * r.z) * v.y + (r.s * r.s - r.x * r.x - r.y * r.y + r.z * r.z) * v.z - ); - } - - public static vector operator /(vector v, rotation r) - { - rotation inverseR = new rotation(-r.x,-r.y,-r.z,r.s); - return (v * inverseR); - } - - // 2 jun 2007 - public static bool operator <(vector v1, vector v2) - { - return v1.SumSqrs() < v2.SumSqrs(); - } - // 2 jun 2007 - public static bool operator <=(vector v1, vector v2) - { - return v1.SumSqrs() <= v2.SumSqrs(); - } - // 2 jun 2007 - public static bool operator >(vector v1, vector v2) - { - return v1.SumSqrs() > v2.SumSqrs(); - } - public static bool operator >=(vector v1, vector v2) - { - return v1.SumSqrs() >= v2.SumSqrs(); - } - - public const double EqualityTolerence = 1e-14; - - public static bool operator ==(vector v1, vector v2) - { - if ((object)v1 == null) v1 = ZERO_VECTOR; - if ((object)v2 == null) v2 = ZERO_VECTOR; - - bool bResult = true; - if (Math.Abs(v1.x - v2.x) > EqualityTolerence) { - bResult = false; - } else if (Math.Abs(v1.y - v2.y) > EqualityTolerence) { - bResult = false; - } else if (Math.Abs(v1.z - v2.z) > EqualityTolerence) { - bResult = false; - } - return bResult; - } - - public static bool operator !=(vector v1, vector v2) - { - return !(v1 == v2); - } - - public static bool operator true(vector v) - { - if ((object)v == null || (v.x == 0 && v.y == 0 && v.z == 0)) { - return false; - } - return true; - } - - public static bool operator false(vector v) - { - if ((object)v == null || (v.x == 0 && v.y == 0 && v.z == 0)) { - return true; - } - return false; - } - - public override string ToString() - { - return string.Format(new System.Globalization.CultureInfo("en-us"), "<{0:0.00000}, {1:0.00000}, {2:0.00000}>", (double)this.x, (double)this.y, (double)this.z); - } - - public static explicit operator String(vector v) - { - if ((object)v == null) { - return ZERO_VECTOR.ToString(); - } else { - return v.ToString(); - } - } - - public override int GetHashCode() - { - return (int)((x + y + z) % Int32.MaxValue); - } - - public override bool Equals(object obj) - { - try { - return (this == (vector)obj); - } catch { - return false; - } - } - } - } +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// vector.cs +// +// + +using System; +using System.Text.RegularExpressions; + +namespace LSLEditor +{ + public partial class SecondLife + { + public struct vector + { + private object m_x, m_y, m_z; + + public Float x + { + get + { + if (m_x == null) + m_x = (Float)0; + return (Float)m_x; + } + set + { + m_x = value; + } + } + + public Float y + { + get + { + if (m_y == null) + m_y = (Float)0; + return (Float)m_y; + } + set + { + m_y = value; + } + } + + public Float z + { + get + { + if (m_z == null) + m_z = (Float)0; + return (Float)m_z; + } + set + { + m_z = value; + } + } + + public static readonly vector ZERO_VECTOR; + public vector(double x, double y, double z) + { + this.m_x = (Float)x; + this.m_y = (Float)y; + this.m_z = (Float)z; + } + public vector(string a) + { + this.m_x = (Float)0; + this.m_y = (Float)0; + this.m_z = (Float)0; + Regex regex = new Regex( + @"<(?[^,]*),(?[^,]*),(?[^,]*)>", + RegexOptions.IgnorePatternWhitespace | + RegexOptions.Compiled); + Match m = regex.Match(a); + if (m.Success) + { + this.m_x = new Float(m.Groups["x"].Value); + this.m_y = new Float(m.Groups["y"].Value); + this.m_z = new Float(m.Groups["z"].Value); + } + } + static vector() + { + ZERO_VECTOR = new vector(0, 0, 0); + } + + public static explicit operator vector(string s) + { + return new vector(s); + } + + public static explicit operator vector(String s) + { + return new vector(s.ToString()); + } + + private double SumSqrs() + { + return x * x + y * y + z * z; + } + + public static vector operator +(vector vector1, vector vector2) + { + return new vector(vector1.x + vector2.x, vector1.y + vector2.y, vector1.z + vector2.z); + } + public static vector operator -(vector vector1, vector vector2) + { + return new vector(vector1.x - vector2.x, vector1.y - vector2.y, vector1.z - vector2.z); + } + // 2 jun 2007 + public static vector operator -(vector vector1) + { + return new vector(-vector1.x, -vector1.y, -vector1.z); + } + // 2 jun 2007 + public static vector operator +(vector vector1) + { + return new vector(vector1.x, vector1.y, vector1.z); + } + public static double operator *(vector vector1, vector vector2) + { + return vector1.x * vector2.x + vector1.y * vector2.y + vector1.z * vector2.z; + } + + public static vector operator /(vector v1, double dbl1) + { + return new vector(v1.x / dbl1, v1.y / dbl1, v1.z / dbl1); + } + public static vector operator *(vector v1, double dbl1) + { + return new vector(v1.x * dbl1, v1.y * dbl1, v1.z * dbl1); + } + public static vector operator *(double dbl1, vector v1) + { + return v1 * dbl1; + } + public static vector operator %(vector vector1, vector vector2) + { + return new vector( + vector1.y * vector2.z - vector1.z * vector2.y, + vector1.z * vector2.x - vector1.x * vector2.z, + vector1.x * vector2.y - vector1.y * vector2.x); + } + + // checked 3 jun 2007 + public static vector operator *(vector v, rotation r) + { + return new vector( +(r.s * r.s + r.x * r.x - r.y * r.y - r.z * r.z) * v.x + 2 * (r.x * r.y - r.s * r.z) * v.y + 2 * (r.s * r.y + r.x * r.z) * v.z, +2 * (r.s * r.z + r.x * r.y) * v.x + (r.s * r.s - r.x * r.x + r.y * r.y - r.z * r.z) * v.y + 2 * (r.y * r.z - r.s * r.x) * v.z, +2 * (r.x * r.z - r.s * r.y) * v.x + 2 * (r.s * r.x + r.y * r.z) * v.y + (r.s * r.s - r.x * r.x - r.y * r.y + r.z * r.z) * v.z + ); + } + + public static vector operator /(vector v, rotation r) + { + rotation inverseR = new rotation(-r.x,-r.y,-r.z,r.s); + return (v * inverseR); + } + + // 2 jun 2007 + public static bool operator <(vector v1, vector v2) + { + return v1.SumSqrs() < v2.SumSqrs(); + } + // 2 jun 2007 + public static bool operator <=(vector v1, vector v2) + { + return v1.SumSqrs() <= v2.SumSqrs(); + } + // 2 jun 2007 + public static bool operator >(vector v1, vector v2) + { + return v1.SumSqrs() > v2.SumSqrs(); + } + public static bool operator >=(vector v1, vector v2) + { + return v1.SumSqrs() >= v2.SumSqrs(); + } + + public const double EqualityTolerence = 1e-14; + + public static bool operator ==(vector v1, vector v2) + { + if ((object)v1 == null) v1 = ZERO_VECTOR; + if ((object)v2 == null) v2 = ZERO_VECTOR; + + bool bResult = true; + if (Math.Abs(v1.x - v2.x) > EqualityTolerence) { + bResult = false; + } else if (Math.Abs(v1.y - v2.y) > EqualityTolerence) { + bResult = false; + } else if (Math.Abs(v1.z - v2.z) > EqualityTolerence) { + bResult = false; + } + return bResult; + } + + public static bool operator !=(vector v1, vector v2) + { + return !(v1 == v2); + } + + public static bool operator true(vector v) + { + if ((object)v == null || (v.x == 0 && v.y == 0 && v.z == 0)) { + return false; + } + return true; + } + + public static bool operator false(vector v) + { + if ((object)v == null || (v.x == 0 && v.y == 0 && v.z == 0)) { + return true; + } + return false; + } + + public override string ToString() + { + return string.Format(new System.Globalization.CultureInfo("en-us"), "<{0:0.00000}, {1:0.00000}, {2:0.00000}>", (double)this.x, (double)this.y, (double)this.z); + } + + public static explicit operator String(vector v) + { + if ((object)v == null) { + return ZERO_VECTOR.ToString(); + } else { + return v.ToString(); + } + } + + public override int GetHashCode() + { + return (int)((x + y + z) % Int32.MaxValue); + } + + public override bool Equals(object obj) + { + try { + return (this == (vector)obj); + } catch { + return false; + } + } + } + } } \ No newline at end of file diff --git a/trunk/SimulatorConsole.Designer.cs b/source/SimulatorConsole.Designer.cs similarity index 97% rename from trunk/SimulatorConsole.Designer.cs rename to source/SimulatorConsole.Designer.cs index 974953e..a380ec6 100644 --- a/trunk/SimulatorConsole.Designer.cs +++ b/source/SimulatorConsole.Designer.cs @@ -1,186 +1,186 @@ -namespace LSLEditor -{ - partial class SimulatorConsole - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.panel1 = new System.Windows.Forms.Panel(); - this.buttonShout = new System.Windows.Forms.Button(); - this.buttonSay = new System.Windows.Forms.Button(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.selectAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.clearToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.panel1.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.contextMenuStrip1.SuspendLayout(); - this.SuspendLayout(); - // - // panel1 - // - this.panel1.Controls.Add(this.buttonShout); - this.panel1.Controls.Add(this.buttonSay); - this.panel1.Controls.Add(this.textBox1); - this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.panel1.Location = new System.Drawing.Point(4, 153); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(499, 35); - this.panel1.TabIndex = 0; - // - // buttonShout - // - this.buttonShout.Location = new System.Drawing.Point(312, 8); - this.buttonShout.Name = "buttonShout"; - this.buttonShout.Size = new System.Drawing.Size(48, 23); - this.buttonShout.TabIndex = 2; - this.buttonShout.Text = "shout"; - this.buttonShout.UseVisualStyleBackColor = true; - this.buttonShout.Click += new System.EventHandler(this.buttonShout_Click); - // - // buttonSay - // - this.buttonSay.Location = new System.Drawing.Point(256, 8); - this.buttonSay.Name = "buttonSay"; - this.buttonSay.Size = new System.Drawing.Size(48, 23); - this.buttonSay.TabIndex = 1; - this.buttonSay.Text = "say"; - this.buttonSay.UseVisualStyleBackColor = true; - this.buttonSay.Click += new System.EventHandler(this.buttonSay_Click); - // - // textBox1 - // - this.textBox1.Location = new System.Drawing.Point(8, 8); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(240, 20); - this.textBox1.TabIndex = 0; - this.textBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox1_KeyDown); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.textBox2); - this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox1.Location = new System.Drawing.Point(4, 4); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(499, 149); - this.groupBox1.TabIndex = 1; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "Console"; - // - // textBox2 - // - this.textBox2.AcceptsReturn = true; - this.textBox2.AcceptsTab = true; - this.textBox2.ContextMenuStrip = this.contextMenuStrip1; - this.textBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox2.Location = new System.Drawing.Point(3, 16); - this.textBox2.Multiline = true; - this.textBox2.Name = "textBox2"; - this.textBox2.ReadOnly = true; - this.textBox2.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.textBox2.Size = new System.Drawing.Size(493, 130); - this.textBox2.TabIndex = 0; - this.textBox2.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox2_KeyDown); - // - // contextMenuStrip1 - // - this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.copyToolStripMenuItem, - this.selectAllToolStripMenuItem, - this.toolStripSeparator1, - this.clearToolStripMenuItem}); - this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(129, 76); - // - // copyToolStripMenuItem - // - this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; - this.copyToolStripMenuItem.Size = new System.Drawing.Size(128, 22); - this.copyToolStripMenuItem.Text = "Copy"; - this.copyToolStripMenuItem.Click += new System.EventHandler(this.copyToolStripMenuItem_Click); - // - // selectAllToolStripMenuItem - // - this.selectAllToolStripMenuItem.Name = "selectAllToolStripMenuItem"; - this.selectAllToolStripMenuItem.Size = new System.Drawing.Size(128, 22); - this.selectAllToolStripMenuItem.Text = "Select All"; - this.selectAllToolStripMenuItem.Click += new System.EventHandler(this.selectAllToolStripMenuItem_Click); - // - // toolStripSeparator1 - // - this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(125, 6); - // - // clearToolStripMenuItem - // - this.clearToolStripMenuItem.Name = "clearToolStripMenuItem"; - this.clearToolStripMenuItem.Size = new System.Drawing.Size(128, 22); - this.clearToolStripMenuItem.Text = "Clear"; - this.clearToolStripMenuItem.Click += new System.EventHandler(this.clearToolStripMenuItem_Click); - // - // SimulatorConsole - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(507, 192); - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.panel1); - this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Name = "SimulatorConsole"; - this.Padding = new System.Windows.Forms.Padding(4); - this.ShowHint = LSLEditor.Docking.DockState.DockBottom; - this.ShowIcon = false; - this.TabText = "Simulator Console"; - this.Text = "Simulator Console"; - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.contextMenuStrip1.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Button buttonShout; - private System.Windows.Forms.Button buttonSay; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; - private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem selectAllToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - private System.Windows.Forms.ToolStripMenuItem clearToolStripMenuItem; - } -} +namespace LSLEditor +{ + partial class SimulatorConsole + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.panel1 = new System.Windows.Forms.Panel(); + this.buttonShout = new System.Windows.Forms.Button(); + this.buttonSay = new System.Windows.Forms.Button(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.selectAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.clearToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.panel1.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.contextMenuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Controls.Add(this.buttonShout); + this.panel1.Controls.Add(this.buttonSay); + this.panel1.Controls.Add(this.textBox1); + this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel1.Location = new System.Drawing.Point(4, 153); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(499, 35); + this.panel1.TabIndex = 0; + // + // buttonShout + // + this.buttonShout.Location = new System.Drawing.Point(312, 8); + this.buttonShout.Name = "buttonShout"; + this.buttonShout.Size = new System.Drawing.Size(48, 23); + this.buttonShout.TabIndex = 2; + this.buttonShout.Text = "shout"; + this.buttonShout.UseVisualStyleBackColor = true; + this.buttonShout.Click += new System.EventHandler(this.buttonShout_Click); + // + // buttonSay + // + this.buttonSay.Location = new System.Drawing.Point(256, 8); + this.buttonSay.Name = "buttonSay"; + this.buttonSay.Size = new System.Drawing.Size(48, 23); + this.buttonSay.TabIndex = 1; + this.buttonSay.Text = "say"; + this.buttonSay.UseVisualStyleBackColor = true; + this.buttonSay.Click += new System.EventHandler(this.buttonSay_Click); + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(8, 8); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(240, 20); + this.textBox1.TabIndex = 0; + this.textBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox1_KeyDown); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.textBox2); + this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox1.Location = new System.Drawing.Point(4, 4); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(499, 149); + this.groupBox1.TabIndex = 1; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Console"; + // + // textBox2 + // + this.textBox2.AcceptsReturn = true; + this.textBox2.AcceptsTab = true; + this.textBox2.ContextMenuStrip = this.contextMenuStrip1; + this.textBox2.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox2.Location = new System.Drawing.Point(3, 16); + this.textBox2.Multiline = true; + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBox2.Size = new System.Drawing.Size(493, 130); + this.textBox2.TabIndex = 0; + this.textBox2.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox2_KeyDown); + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.copyToolStripMenuItem, + this.selectAllToolStripMenuItem, + this.toolStripSeparator1, + this.clearToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(129, 76); + // + // copyToolStripMenuItem + // + this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; + this.copyToolStripMenuItem.Size = new System.Drawing.Size(128, 22); + this.copyToolStripMenuItem.Text = "Copy"; + this.copyToolStripMenuItem.Click += new System.EventHandler(this.copyToolStripMenuItem_Click); + // + // selectAllToolStripMenuItem + // + this.selectAllToolStripMenuItem.Name = "selectAllToolStripMenuItem"; + this.selectAllToolStripMenuItem.Size = new System.Drawing.Size(128, 22); + this.selectAllToolStripMenuItem.Text = "Select All"; + this.selectAllToolStripMenuItem.Click += new System.EventHandler(this.selectAllToolStripMenuItem_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(125, 6); + // + // clearToolStripMenuItem + // + this.clearToolStripMenuItem.Name = "clearToolStripMenuItem"; + this.clearToolStripMenuItem.Size = new System.Drawing.Size(128, 22); + this.clearToolStripMenuItem.Text = "Clear"; + this.clearToolStripMenuItem.Click += new System.EventHandler(this.clearToolStripMenuItem_Click); + // + // SimulatorConsole + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(507, 192); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.panel1); + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Name = "SimulatorConsole"; + this.Padding = new System.Windows.Forms.Padding(4); + this.ShowHint = LSLEditor.Docking.DockState.DockBottom; + this.ShowIcon = false; + this.TabText = "Simulator Console"; + this.Text = "Simulator Console"; + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.contextMenuStrip1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Button buttonShout; + private System.Windows.Forms.Button buttonSay; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem selectAllToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem clearToolStripMenuItem; + } +} diff --git a/trunk/SimulatorConsole.cs b/source/SimulatorConsole.cs similarity index 96% rename from trunk/SimulatorConsole.cs rename to source/SimulatorConsole.cs index 97c19e6..9a9770c 100644 --- a/trunk/SimulatorConsole.cs +++ b/source/SimulatorConsole.cs @@ -1,408 +1,408 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Drawing; -using System.Collections.Generic; -using System.Windows.Forms; -using LSLEditor.Docking; - -namespace LSLEditor -{ - public partial class SimulatorConsole : DockContent - { - public event SecondLifeHost.SecondLifeHostChatHandler OnChat; - public event EventHandler OnControl; - - private List History; - private int intHistory; - - private Form[] Children; - private Solution.SolutionExplorer solutionExplorer; - - public SimulatorConsole(Solution.SolutionExplorer solutionExplorer, Form[] Children) - { - InitializeComponent(); - this.solutionExplorer = solutionExplorer; - this.Children = Children; - - this.textBox1.Focus(); - this.Dock = DockStyle.Fill; - this.History = new List(); - this.intHistory = 0; - - if (Properties.Settings.Default.SimulatorLocation != Point.Empty) { - this.Location = Properties.Settings.Default.SimulatorLocation; - } - if (Properties.Settings.Default.SimulatorSize != Size.Empty) { - this.Size = Properties.Settings.Default.SimulatorSize; - } - - this.Clear(); - - SecondLifeHost.SecondLifeHostChatHandler chathandler = new SecondLifeHost.SecondLifeHostChatHandler(SecondLifeHost_OnChat); - SecondLifeHost.SecondLifeHostMessageLinkedHandler messagelinkedhandler = new SecondLifeHost.SecondLifeHostMessageLinkedHandler(SecondLifeHost_OnMessageLinked); - - this.OnChat += chathandler; - this.OnControl += new EventHandler(SimulatorConsole_OnControl); - - this.LocationChanged += new EventHandler(SimulatorConsole_LocationChanged); - - foreach (Form form in this.Children) { - EditForm editForm = form as EditForm; - if (editForm == null || editForm.IsDisposed) { - continue; - } - editForm.ChatHandler = chathandler; - editForm.MessageLinkedHandler = messagelinkedhandler; - editForm.StartCompiler(); - } - } - - public void Stop() - { - foreach (Form form in this.Children) { - EditForm editForm = form as EditForm; - if (editForm == null || editForm.IsDisposed) { - continue; - } - editForm.StopCompiler(); - } - } - - private void SimulatorConsole_LocationChanged(object sender, EventArgs e) - { - Properties.Settings.Default.SimulatorLocation = this.Location; - } - - private void SecondLifeHost_OnChat(object sender, SecondLifeHostChatEventArgs e) - { - this.Listen(e); - - // talk only to the owner - if (e.How != CommunicationType.OwnerSay) { - foreach (Form form in this.Children) { - EditForm editForm = form as EditForm; - if (editForm == null || editForm.IsDisposed) { - continue; - } - - if (editForm.runtime == null) { - continue; - } - - if (editForm.runtime.SecondLifeHost == null) { - continue; - } - - // prevent loops loops loops loops, dont talk to myself - if (sender != editForm.runtime.SecondLifeHost) { - editForm.runtime.SecondLifeHost.Listen(e); - } - } - } - } - - private void SecondLifeHost_OnMessageLinked(object sender, SecondLifeHostMessageLinkedEventArgs e) - { - SecondLifeHost secondLifeHostSender = sender as SecondLifeHost; - - Guid ObjectGuid = this.solutionExplorer.GetParentGuid(secondLifeHostSender.GUID); - Guid RootObjectGuid = this.solutionExplorer.GetParentGuid(ObjectGuid); - - List list; - - int intLinkNum = e.LinkIndex; - switch (intLinkNum) { - case 1: // LINK_ROOT , root prim in linked set (but not in a single prim, which is 0) - list = this.solutionExplorer.GetScripts(RootObjectGuid, false); - break; - case -1: // LINK_SET , all prims in object - list = this.solutionExplorer.GetScripts(RootObjectGuid, true); - break; - case -2: // LINK_ALL_OTHERS , all other prims in object besides prim function is in - list = this.solutionExplorer.GetScripts(RootObjectGuid, true); - // remove scripts in prim itself, and below - foreach (Guid guid in this.solutionExplorer.GetScripts(ObjectGuid, true)) { - if (list.Contains(guid)) - list.Remove(guid); - } - break; - case -3: // LINK_ALL_CHILDREN , all child prims in object - list = this.solutionExplorer.GetScripts(RootObjectGuid, true); - // remove root itself - foreach (Guid guid in this.solutionExplorer.GetScripts(RootObjectGuid, false)) { - if (list.Contains(guid)) - list.Remove(guid); - } - break; - case -4: // LINK_THIS - /* - * From SL Wiki: "Causes the script to act only upon the prim the prim the script is in." - * This means LINK_THIS, links to every script in the prim, not just the caller. - * @author = MrSoundless - * @date = 28 April 2011 - */ - list = new List(); - //list.Add(secondLifeHostSender.guid); // 4 feb 2008 - list = this.solutionExplorer.GetScripts(ObjectGuid, true); // 28 april 2011 - break; - default: // Link number - Guid ObjectNrGuid = this.solutionExplorer.GetGuidFromObjectNr(ObjectGuid, intLinkNum); - list = this.solutionExplorer.GetScripts(ObjectNrGuid, true); - break; - } - - // only send message to running scripts in list - foreach (Form form in this.Children) { - EditForm editForm = form as EditForm; - if (editForm == null || editForm.IsDisposed) { - continue; - } - - if (editForm.runtime == null) { - continue; - } - - if (editForm.runtime.SecondLifeHost == null) { - continue; - } - - if (list.Contains(editForm.guid)) { - editForm.runtime.SecondLifeHost.LinkMessage(e); - } - } - } - - private void SimulatorConsole_OnControl(object sender, EventArgs e) - { - foreach (Form form in this.Children) { - EditForm editForm = form as EditForm; - if (editForm == null || editForm.IsDisposed) { - continue; - } - - if (editForm.runtime == null) { - continue; - } - - if (editForm.runtime.SecondLifeHost == null) { - continue; - } - - editForm.runtime.SecondLifeHost.SendControl((Keys)sender); - } - } - - private delegate void AppendTextDelegate(string strLine); - public void TalkToSimulatorConsole(string strLine) - { - if (this.textBox2.InvokeRequired) { - this.textBox2.Invoke(new AppendTextDelegate(TalkToSimulatorConsole), new object[] { strLine }); - } else { - this.textBox2.AppendText(strLine.Replace("\n", "\r\n") + "\r\n"); - } - } - - private void Chat(int channel, string name, SecondLife.key id, string message, CommunicationType how) - { - if (OnChat != null) { - OnChat(this, new SecondLifeHostChatEventArgs(channel, name, id, message, how)); - } - } - - public void Listen(SecondLifeHostChatEventArgs e) - { - // Translate the incomming messages a bit so it looks like SL. - string strHow = ": "; - if (e.How == CommunicationType.Shout) { - strHow = " shout: "; - } - - if (e.How == CommunicationType.Whisper) { - strHow = " whispers: "; - } - - string strWho = e.Name; - string strMessage = e.Message; - - if (e.Name == Properties.Settings.Default.AvatarName) { - strWho = "You"; - } - - if (e.Message.ToString().StartsWith("/me")) { - strWho = e.Name; - strHow = " "; - strMessage = e.Message.ToString().Substring(3).Trim(); - } - - if (e.Channel == 0) { - TalkToSimulatorConsole(strWho + strHow + strMessage); - } - } - - private void Speak(CommunicationType how) - { - int intChannel = 0; - string strMessage = this.textBox1.Text.Trim(); - - History.Add(strMessage); - intHistory = History.Count; - - - if (strMessage != ""){ - if (strMessage[0] == '/') { - if (strMessage.StartsWith("/me")) { - // do nothing - } else { - string strChannel = ""; - for (int intI = 1; intI < strMessage.Length; intI++) { - if (strMessage[intI] >= '0' && strMessage[intI] <= '9') { - strChannel += strMessage[intI]; - if (intI < 10) { - continue; - } - } - try { - intChannel = Convert.ToInt32(strChannel); - strMessage = strMessage.Substring(intI).Trim(); - } catch { - } - break; - } - } - } - } - - SecondLife.key id = new SecondLife.key(Properties.Settings.Default.AvatarKey); - - Chat(intChannel, Properties.Settings.Default.AvatarName, id, strMessage, how); - - this.textBox1.Clear(); - - this.buttonSay.Enabled = false; - this.buttonShout.Enabled = false; - } - - private void buttonShout_Click(object sender, EventArgs e) - { - Speak(CommunicationType.Shout); - this.textBox1.Focus(); - } - - - private void ScrollChat(KeyEventArgs e) - { - e.SuppressKeyPress = true; - if (e.KeyCode == Keys.Up) { - intHistory = Math.Max(0, intHistory - 1); - } - if (e.KeyCode == Keys.Down) { - intHistory = Math.Min(History.Count, intHistory + 1); - } - this.textBox1.Clear(); - if (intHistory != History.Count) { - this.textBox1.AppendText(History[intHistory]); - } - } - - private void textBox1_KeyDown(object sender, KeyEventArgs e) - { - this.buttonSay.Enabled = true; - this.buttonShout.Enabled = true; - - if (e.KeyCode == Keys.Return) { - Speak(CommunicationType.Say); - e.SuppressKeyPress = true; - } - if (e.Control && (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down)) { - ScrollChat(e); - } else if (e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right || e.KeyCode == Keys.Up ) { - if (OnControl != null) { - OnControl(e.KeyCode, new EventArgs()); - } - e.SuppressKeyPress = true; - } - } - - private void Simulator_Load(object sender, EventArgs e) - { - this.textBox1.Focus(); - } - - public void Clear() - { - this.textBox1.Clear(); - this.textBox2.Clear(); - this.textBox1.Focus(); - } - - private void buttonSay_Click(object sender, EventArgs e) - { - Speak(CommunicationType.Say); - this.textBox1.Focus(); - } - - private void textBox2_KeyDown(object sender, KeyEventArgs e) - { - if (e.Control && e.KeyCode == Keys.A) { - this.textBox2.SelectAll(); - } - } - - private void copyToolStripMenuItem_Click(object sender, EventArgs e) - { - this.textBox2.Focus(); - this.textBox2.Copy(); - } - - private void selectAllToolStripMenuItem_Click(object sender, EventArgs e) - { - this.textBox2.Focus(); - this.textBox2.SelectAll(); - } - - private void clearToolStripMenuItem_Click(object sender, EventArgs e) - { - this.textBox2.Focus(); - this.textBox2.Clear(); - } - - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Drawing; +using System.Collections.Generic; +using System.Windows.Forms; +using LSLEditor.Docking; + +namespace LSLEditor +{ + public partial class SimulatorConsole : DockContent + { + public event SecondLifeHost.SecondLifeHostChatHandler OnChat; + public event EventHandler OnControl; + + private List History; + private int intHistory; + + private Form[] Children; + private Solution.SolutionExplorer solutionExplorer; + + public SimulatorConsole(Solution.SolutionExplorer solutionExplorer, Form[] Children) + { + InitializeComponent(); + this.solutionExplorer = solutionExplorer; + this.Children = Children; + + this.textBox1.Focus(); + this.Dock = DockStyle.Fill; + this.History = new List(); + this.intHistory = 0; + + if (Properties.Settings.Default.SimulatorLocation != Point.Empty) { + this.Location = Properties.Settings.Default.SimulatorLocation; + } + if (Properties.Settings.Default.SimulatorSize != Size.Empty) { + this.Size = Properties.Settings.Default.SimulatorSize; + } + + this.Clear(); + + SecondLifeHost.SecondLifeHostChatHandler chathandler = new SecondLifeHost.SecondLifeHostChatHandler(SecondLifeHost_OnChat); + SecondLifeHost.SecondLifeHostMessageLinkedHandler messagelinkedhandler = new SecondLifeHost.SecondLifeHostMessageLinkedHandler(SecondLifeHost_OnMessageLinked); + + this.OnChat += chathandler; + this.OnControl += new EventHandler(SimulatorConsole_OnControl); + + this.LocationChanged += new EventHandler(SimulatorConsole_LocationChanged); + + foreach (Form form in this.Children) { + EditForm editForm = form as EditForm; + if (editForm == null || editForm.IsDisposed) { + continue; + } + editForm.ChatHandler = chathandler; + editForm.MessageLinkedHandler = messagelinkedhandler; + editForm.StartCompiler(); + } + } + + public void Stop() + { + foreach (Form form in this.Children) { + EditForm editForm = form as EditForm; + if (editForm == null || editForm.IsDisposed) { + continue; + } + editForm.StopCompiler(); + } + } + + private void SimulatorConsole_LocationChanged(object sender, EventArgs e) + { + Properties.Settings.Default.SimulatorLocation = this.Location; + } + + private void SecondLifeHost_OnChat(object sender, SecondLifeHostChatEventArgs e) + { + this.Listen(e); + + // talk only to the owner + if (e.How != CommunicationType.OwnerSay) { + foreach (Form form in this.Children) { + EditForm editForm = form as EditForm; + if (editForm == null || editForm.IsDisposed) { + continue; + } + + if (editForm.runtime == null) { + continue; + } + + if (editForm.runtime.SecondLifeHost == null) { + continue; + } + + // prevent loops loops loops loops, dont talk to myself + if (sender != editForm.runtime.SecondLifeHost) { + editForm.runtime.SecondLifeHost.Listen(e); + } + } + } + } + + private void SecondLifeHost_OnMessageLinked(object sender, SecondLifeHostMessageLinkedEventArgs e) + { + SecondLifeHost secondLifeHostSender = sender as SecondLifeHost; + + Guid ObjectGuid = this.solutionExplorer.GetParentGuid(secondLifeHostSender.GUID); + Guid RootObjectGuid = this.solutionExplorer.GetParentGuid(ObjectGuid); + + List list; + + int intLinkNum = e.LinkIndex; + switch (intLinkNum) { + case 1: // LINK_ROOT , root prim in linked set (but not in a single prim, which is 0) + list = this.solutionExplorer.GetScripts(RootObjectGuid, false); + break; + case -1: // LINK_SET , all prims in object + list = this.solutionExplorer.GetScripts(RootObjectGuid, true); + break; + case -2: // LINK_ALL_OTHERS , all other prims in object besides prim function is in + list = this.solutionExplorer.GetScripts(RootObjectGuid, true); + // remove scripts in prim itself, and below + foreach (Guid guid in this.solutionExplorer.GetScripts(ObjectGuid, true)) { + if (list.Contains(guid)) + list.Remove(guid); + } + break; + case -3: // LINK_ALL_CHILDREN , all child prims in object + list = this.solutionExplorer.GetScripts(RootObjectGuid, true); + // remove root itself + foreach (Guid guid in this.solutionExplorer.GetScripts(RootObjectGuid, false)) { + if (list.Contains(guid)) + list.Remove(guid); + } + break; + case -4: // LINK_THIS + /* + * From SL Wiki: "Causes the script to act only upon the prim the prim the script is in." + * This means LINK_THIS, links to every script in the prim, not just the caller. + * @author = MrSoundless + * @date = 28 April 2011 + */ + list = new List(); + //list.Add(secondLifeHostSender.guid); // 4 feb 2008 + list = this.solutionExplorer.GetScripts(ObjectGuid, true); // 28 april 2011 + break; + default: // Link number + Guid ObjectNrGuid = this.solutionExplorer.GetGuidFromObjectNr(ObjectGuid, intLinkNum); + list = this.solutionExplorer.GetScripts(ObjectNrGuid, true); + break; + } + + // only send message to running scripts in list + foreach (Form form in this.Children) { + EditForm editForm = form as EditForm; + if (editForm == null || editForm.IsDisposed) { + continue; + } + + if (editForm.runtime == null) { + continue; + } + + if (editForm.runtime.SecondLifeHost == null) { + continue; + } + + if (list.Contains(editForm.guid)) { + editForm.runtime.SecondLifeHost.LinkMessage(e); + } + } + } + + private void SimulatorConsole_OnControl(object sender, EventArgs e) + { + foreach (Form form in this.Children) { + EditForm editForm = form as EditForm; + if (editForm == null || editForm.IsDisposed) { + continue; + } + + if (editForm.runtime == null) { + continue; + } + + if (editForm.runtime.SecondLifeHost == null) { + continue; + } + + editForm.runtime.SecondLifeHost.SendControl((Keys)sender); + } + } + + private delegate void AppendTextDelegate(string strLine); + public void TalkToSimulatorConsole(string strLine) + { + if (this.textBox2.InvokeRequired) { + this.textBox2.Invoke(new AppendTextDelegate(TalkToSimulatorConsole), new object[] { strLine }); + } else { + this.textBox2.AppendText(strLine.Replace("\n", "\r\n") + "\r\n"); + } + } + + private void Chat(int channel, string name, SecondLife.key id, string message, CommunicationType how) + { + if (OnChat != null) { + OnChat(this, new SecondLifeHostChatEventArgs(channel, name, id, message, how)); + } + } + + public void Listen(SecondLifeHostChatEventArgs e) + { + // Translate the incomming messages a bit so it looks like SL. + string strHow = ": "; + if (e.How == CommunicationType.Shout) { + strHow = " shout: "; + } + + if (e.How == CommunicationType.Whisper) { + strHow = " whispers: "; + } + + string strWho = e.Name; + string strMessage = e.Message; + + if (e.Name == Properties.Settings.Default.AvatarName) { + strWho = "You"; + } + + if (e.Message.ToString().StartsWith("/me")) { + strWho = e.Name; + strHow = " "; + strMessage = e.Message.ToString().Substring(3).Trim(); + } + + if (e.Channel == 0) { + TalkToSimulatorConsole(strWho + strHow + strMessage); + } + } + + private void Speak(CommunicationType how) + { + int intChannel = 0; + string strMessage = this.textBox1.Text.Trim(); + + History.Add(strMessage); + intHistory = History.Count; + + + if (strMessage != ""){ + if (strMessage[0] == '/') { + if (strMessage.StartsWith("/me")) { + // do nothing + } else { + string strChannel = ""; + for (int intI = 1; intI < strMessage.Length; intI++) { + if (strMessage[intI] >= '0' && strMessage[intI] <= '9') { + strChannel += strMessage[intI]; + if (intI < 10) { + continue; + } + } + try { + intChannel = Convert.ToInt32(strChannel); + strMessage = strMessage.Substring(intI).Trim(); + } catch { + } + break; + } + } + } + } + + SecondLife.key id = new SecondLife.key(Properties.Settings.Default.AvatarKey); + + Chat(intChannel, Properties.Settings.Default.AvatarName, id, strMessage, how); + + this.textBox1.Clear(); + + this.buttonSay.Enabled = false; + this.buttonShout.Enabled = false; + } + + private void buttonShout_Click(object sender, EventArgs e) + { + Speak(CommunicationType.Shout); + this.textBox1.Focus(); + } + + + private void ScrollChat(KeyEventArgs e) + { + e.SuppressKeyPress = true; + if (e.KeyCode == Keys.Up) { + intHistory = Math.Max(0, intHistory - 1); + } + if (e.KeyCode == Keys.Down) { + intHistory = Math.Min(History.Count, intHistory + 1); + } + this.textBox1.Clear(); + if (intHistory != History.Count) { + this.textBox1.AppendText(History[intHistory]); + } + } + + private void textBox1_KeyDown(object sender, KeyEventArgs e) + { + this.buttonSay.Enabled = true; + this.buttonShout.Enabled = true; + + if (e.KeyCode == Keys.Return) { + Speak(CommunicationType.Say); + e.SuppressKeyPress = true; + } + if (e.Control && (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down)) { + ScrollChat(e); + } else if (e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right || e.KeyCode == Keys.Up ) { + if (OnControl != null) { + OnControl(e.KeyCode, new EventArgs()); + } + e.SuppressKeyPress = true; + } + } + + private void Simulator_Load(object sender, EventArgs e) + { + this.textBox1.Focus(); + } + + public void Clear() + { + this.textBox1.Clear(); + this.textBox2.Clear(); + this.textBox1.Focus(); + } + + private void buttonSay_Click(object sender, EventArgs e) + { + Speak(CommunicationType.Say); + this.textBox1.Focus(); + } + + private void textBox2_KeyDown(object sender, KeyEventArgs e) + { + if (e.Control && e.KeyCode == Keys.A) { + this.textBox2.SelectAll(); + } + } + + private void copyToolStripMenuItem_Click(object sender, EventArgs e) + { + this.textBox2.Focus(); + this.textBox2.Copy(); + } + + private void selectAllToolStripMenuItem_Click(object sender, EventArgs e) + { + this.textBox2.Focus(); + this.textBox2.SelectAll(); + } + + private void clearToolStripMenuItem_Click(object sender, EventArgs e) + { + this.textBox2.Focus(); + this.textBox2.Clear(); + } + + } +} diff --git a/trunk/SimulatorConsole.resx b/source/SimulatorConsole.resx similarity index 97% rename from trunk/SimulatorConsole.resx rename to source/SimulatorConsole.resx index ee8866e..6fab886 100644 --- a/trunk/SimulatorConsole.resx +++ b/source/SimulatorConsole.resx @@ -1,123 +1,123 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + \ No newline at end of file diff --git a/trunk/Solution/GuidProperty.Designer.cs b/source/Solution/GuidProperty.Designer.cs similarity index 96% rename from trunk/Solution/GuidProperty.Designer.cs rename to source/Solution/GuidProperty.Designer.cs index a3d0757..4263b1a 100644 --- a/trunk/Solution/GuidProperty.Designer.cs +++ b/source/Solution/GuidProperty.Designer.cs @@ -1,115 +1,115 @@ -namespace LSLEditor.Solution -{ - partial class GuidProperty - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.groupBox1.SuspendLayout(); - this.SuspendLayout(); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.textBox1); - this.groupBox1.Controls.Add(this.label1); - this.groupBox1.Location = new System.Drawing.Point(8, 8); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(352, 64); - this.groupBox1.TabIndex = 0; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "properties"; - // - // textBox1 - // - this.textBox1.Location = new System.Drawing.Point(56, 24); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(288, 20); - this.textBox1.TabIndex = 1; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(8, 24); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(32, 13); - this.label1.TabIndex = 0; - this.label1.Text = "Guid:"; - // - // button1 - // - this.button1.Location = new System.Drawing.Point(184, 80); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(75, 23); - this.button1.TabIndex = 1; - this.button1.Text = "Ok"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.Location = new System.Drawing.Point(272, 80); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(75, 23); - this.button2.TabIndex = 2; - this.button2.Text = "Cancel"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // GuidProperty - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(371, 113); - this.Controls.Add(this.button2); - this.Controls.Add(this.button1); - this.Controls.Add(this.groupBox1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "GuidProperty"; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "GuidProperty"; - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - } +namespace LSLEditor.Solution +{ + partial class GuidProperty + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.textBox1); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Location = new System.Drawing.Point(8, 8); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(352, 64); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "properties"; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(56, 24); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(288, 20); + this.textBox1.TabIndex = 1; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(8, 24); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(32, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Guid:"; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(184, 80); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 1; + this.button1.Text = "Ok"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(272, 80); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 2; + this.button2.Text = "Cancel"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // GuidProperty + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(371, 113); + this.Controls.Add(this.button2); + this.Controls.Add(this.button1); + this.Controls.Add(this.groupBox1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "GuidProperty"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "GuidProperty"; + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + } } \ No newline at end of file diff --git a/trunk/Solution/GuidProperty.cs b/source/Solution/GuidProperty.cs similarity index 97% rename from trunk/Solution/GuidProperty.cs rename to source/Solution/GuidProperty.cs index 317fa5e..94c2f76 100644 --- a/trunk/Solution/GuidProperty.cs +++ b/source/Solution/GuidProperty.cs @@ -1,85 +1,85 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace LSLEditor.Solution -{ - public partial class GuidProperty : Form - { - private Solution.SolutionExplorer.RealTag realTag; - public Guid guid; - public GuidProperty(Solution.SolutionExplorer.RealTag realTag) - { - InitializeComponent(); - - this.DialogResult = DialogResult.Cancel; - - this.Text += ": " + realTag.Name; - - this.realTag = realTag; - this.textBox1.Text = realTag.Guid.ToString(); - } - - private void button2_Click(object sender, EventArgs e) - { - this.Close(); - } - - private void button1_Click(object sender, EventArgs e) - { - try - { - this.guid = new Guid(this.textBox1.Text); - this.DialogResult = DialogResult.OK; - } - catch - { - } - this.Close(); - } - - - } +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace LSLEditor.Solution +{ + public partial class GuidProperty : Form + { + private Solution.SolutionExplorer.RealTag realTag; + public Guid guid; + public GuidProperty(Solution.SolutionExplorer.RealTag realTag) + { + InitializeComponent(); + + this.DialogResult = DialogResult.Cancel; + + this.Text += ": " + realTag.Name; + + this.realTag = realTag; + this.textBox1.Text = realTag.Guid.ToString(); + } + + private void button2_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void button1_Click(object sender, EventArgs e) + { + try + { + this.guid = new Guid(this.textBox1.Text); + this.DialogResult = DialogResult.OK; + } + catch + { + } + this.Close(); + } + + + } } \ No newline at end of file diff --git a/trunk/Solution/GuidProperty.resx b/source/Solution/GuidProperty.resx similarity index 97% rename from trunk/Solution/GuidProperty.resx rename to source/Solution/GuidProperty.resx index ff31a6d..19dc0dd 100644 --- a/trunk/Solution/GuidProperty.resx +++ b/source/Solution/GuidProperty.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/trunk/Solution/NewProject.Designer.cs b/source/Solution/NewProject.Designer.cs similarity index 97% rename from trunk/Solution/NewProject.Designer.cs rename to source/Solution/NewProject.Designer.cs index 55ce544..686e2e9 100644 --- a/trunk/Solution/NewProject.Designer.cs +++ b/source/Solution/NewProject.Designer.cs @@ -1,205 +1,205 @@ -namespace LSLEditor -{ - partial class NewProject - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.button1 = new System.Windows.Forms.Button(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.button2 = new System.Windows.Forms.Button(); - this.button3 = new System.Windows.Forms.Button(); - this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog(); - this.checkBox2 = new System.Windows.Forms.CheckBox(); - this.groupBox1.SuspendLayout(); - this.SuspendLayout(); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(8, 24); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(38, 13); - this.label1.TabIndex = 0; - this.label1.Text = "Name:"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(8, 48); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(51, 13); - this.label2.TabIndex = 1; - this.label2.Text = "Location:"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(8, 72); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(79, 13); - this.label3.TabIndex = 2; - this.label3.Text = "Solution Name:"; - // - // textBox1 - // - this.textBox1.Location = new System.Drawing.Point(96, 24); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(296, 20); - this.textBox1.TabIndex = 3; - this.textBox1.Text = "Project"; - // - // textBox2 - // - this.textBox2.Location = new System.Drawing.Point(96, 48); - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(296, 20); - this.textBox2.TabIndex = 4; - // - // textBox3 - // - this.textBox3.Location = new System.Drawing.Point(96, 72); - this.textBox3.Name = "textBox3"; - this.textBox3.Size = new System.Drawing.Size(136, 20); - this.textBox3.TabIndex = 5; - this.textBox3.Text = "Default"; - // - // button1 - // - this.button1.Location = new System.Drawing.Point(400, 48); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(75, 23); - this.button1.TabIndex = 6; - this.button1.Text = "browse..."; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.checkBox1.Checked = true; - this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkBox1.Location = new System.Drawing.Point(240, 72); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(154, 17); - this.checkBox1.TabIndex = 7; - this.checkBox1.Text = "Create directory for solution"; - this.checkBox1.UseVisualStyleBackColor = true; - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.label1); - this.groupBox1.Controls.Add(this.checkBox1); - this.groupBox1.Controls.Add(this.label2); - this.groupBox1.Controls.Add(this.button1); - this.groupBox1.Controls.Add(this.label3); - this.groupBox1.Controls.Add(this.textBox3); - this.groupBox1.Controls.Add(this.textBox1); - this.groupBox1.Controls.Add(this.textBox2); - this.groupBox1.Location = new System.Drawing.Point(8, 8); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(488, 104); - this.groupBox1.TabIndex = 8; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "new project properties"; - // - // button2 - // - this.button2.Location = new System.Drawing.Point(408, 120); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(75, 23); - this.button2.TabIndex = 9; - this.button2.Text = "Cancel"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // button3 - // - this.button3.Location = new System.Drawing.Point(320, 120); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(75, 23); - this.button3.TabIndex = 10; - this.button3.Text = "Ok"; - this.button3.UseVisualStyleBackColor = true; - this.button3.Click += new System.EventHandler(this.button3_Click); - // - // checkBox2 - // - this.checkBox2.AutoSize = true; - this.checkBox2.Location = new System.Drawing.Point(16, 120); - this.checkBox2.Name = "checkBox2"; - this.checkBox2.Size = new System.Drawing.Size(168, 17); - this.checkBox2.TabIndex = 11; - this.checkBox2.Text = "Checkout from SVN repository"; - this.checkBox2.UseVisualStyleBackColor = true; - this.checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged); - // - // NewProject - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(504, 152); - this.Controls.Add(this.checkBox2); - this.Controls.Add(this.button3); - this.Controls.Add(this.button2); - this.Controls.Add(this.groupBox1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "NewProject"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "NewProject"; - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.TextBox textBox3; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Button button3; - private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1; - private System.Windows.Forms.CheckBox checkBox2; - } +namespace LSLEditor +{ + partial class NewProject + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.button1 = new System.Windows.Forms.Button(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(8, 24); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(38, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Name:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(8, 48); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(51, 13); + this.label2.TabIndex = 1; + this.label2.Text = "Location:"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(8, 72); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(79, 13); + this.label3.TabIndex = 2; + this.label3.Text = "Solution Name:"; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(96, 24); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(296, 20); + this.textBox1.TabIndex = 3; + this.textBox1.Text = "Project"; + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(96, 48); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(296, 20); + this.textBox2.TabIndex = 4; + // + // textBox3 + // + this.textBox3.Location = new System.Drawing.Point(96, 72); + this.textBox3.Name = "textBox3"; + this.textBox3.Size = new System.Drawing.Size(136, 20); + this.textBox3.TabIndex = 5; + this.textBox3.Text = "Default"; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(400, 48); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 6; + this.button1.Text = "browse..."; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Checked = true; + this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox1.Location = new System.Drawing.Point(240, 72); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(154, 17); + this.checkBox1.TabIndex = 7; + this.checkBox1.Text = "Create directory for solution"; + this.checkBox1.UseVisualStyleBackColor = true; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.textBox3); + this.groupBox1.Controls.Add(this.textBox1); + this.groupBox1.Controls.Add(this.textBox2); + this.groupBox1.Location = new System.Drawing.Point(8, 8); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(488, 104); + this.groupBox1.TabIndex = 8; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "new project properties"; + // + // button2 + // + this.button2.Location = new System.Drawing.Point(408, 120); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 9; + this.button2.Text = "Cancel"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(320, 120); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 23); + this.button3.TabIndex = 10; + this.button3.Text = "Ok"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // checkBox2 + // + this.checkBox2.AutoSize = true; + this.checkBox2.Location = new System.Drawing.Point(16, 120); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.Size = new System.Drawing.Size(168, 17); + this.checkBox2.TabIndex = 11; + this.checkBox2.Text = "Checkout from SVN repository"; + this.checkBox2.UseVisualStyleBackColor = true; + this.checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged); + // + // NewProject + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(504, 152); + this.Controls.Add(this.checkBox2); + this.Controls.Add(this.button3); + this.Controls.Add(this.button2); + this.Controls.Add(this.groupBox1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "NewProject"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "NewProject"; + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1; + private System.Windows.Forms.CheckBox checkBox2; + } } \ No newline at end of file diff --git a/trunk/Solution/NewProject.cs b/source/Solution/NewProject.cs similarity index 97% rename from trunk/Solution/NewProject.cs rename to source/Solution/NewProject.cs index 9bddfe5..23d1996 100644 --- a/trunk/Solution/NewProject.cs +++ b/source/Solution/NewProject.cs @@ -1,154 +1,154 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.IO; -using System.ComponentModel; -using System.Drawing; -using System.Text; -using System.Reflection; -using System.Windows.Forms; - -namespace LSLEditor -{ - public partial class NewProject : Form - { - private LSLEditorForm parent; - - public NewProject(LSLEditorForm parent) - { - InitializeComponent(); - - this.checkBox2.Visible = Svn.IsInstalled; - - this.parent = parent; - - this.textBox2.Text = Properties.Settings.Default.ProjectLocation; - } - - private void button2_Click(object sender, EventArgs e) - { - this.DialogResult = DialogResult.Cancel; - this.Close(); - } - - - - private void button3_Click(object sender, EventArgs e) - { - if (this.checkBox2.Checked) - Checkout(); - else - CreateNew(); - } - - private void Checkout() - { - Svn svn = new Svn(); - string strSvnRepository = this.textBox1.Text.Trim(); - string strLocalDirectory = this.textBox2.Text.Trim(); - string strSolutionName = this.textBox3.Text.Trim(); - - strLocalDirectory = Path.Combine(strLocalDirectory, strSolutionName); - - strSvnRepository = strSvnRepository.TrimEnd(new char[] {'/'}); - if (!strSvnRepository.EndsWith(strSolutionName)) - strSvnRepository += "/"+strSolutionName; - strSvnRepository += "/"; - - string strSolFile = strSvnRepository + strSolutionName + ".sol"; - if (!svn.Execute("list \"" + strSolFile +"\"",false,true)) - return; - - if (!svn.Execute("checkout \"" + strSvnRepository + "\" \"" + strLocalDirectory + "\"",false,true)) - return; - - // Into solution directory - string strLocalSolFile = Path.Combine(strLocalDirectory, strSolutionName + ".sol"); - if(!Directory.Exists(strLocalDirectory)) - { - MessageBox.Show("Can't find directory " + strLocalDirectory, "Checkout Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - if (!File.Exists(strLocalSolFile)) - { - MessageBox.Show("Can't find solution file " + strLocalSolFile, "Checkout Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - if (parent.SolutionExplorer.OpenSolution(strLocalSolFile)) - { - this.DialogResult = DialogResult.OK; - this.Close(); - } - } - - private void CreateNew() - { - if (this.parent.SolutionExplorer.CreateNew(this.textBox1.Text, this.textBox2.Text, this.textBox3.Text, this.checkBox1.Checked)) - { - this.parent.ShowSolutionExplorer(true); - this.parent.UpdateRecentProjectList(this.parent.SolutionExplorer.GetCurrentSolutionPath(),true); - this.DialogResult = DialogResult.OK; - this.Close(); - } - } - - private void button1_Click(object sender, EventArgs e) - { - if (this.folderBrowserDialog1.ShowDialog(this) == DialogResult.OK) - { - this.textBox2.Text = this.folderBrowserDialog1.SelectedPath; - } - } - - private void checkBox2_CheckedChanged(object sender, EventArgs e) - { - if (this.checkBox2.Checked) - { - this.label1.Text = "SVN Path"; - this.textBox1.Text = ""; - } - else - { - this.label1.Text = "Name"; - this.textBox1.Text = "Project"; - } - } - } +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.IO; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Reflection; +using System.Windows.Forms; + +namespace LSLEditor +{ + public partial class NewProject : Form + { + private LSLEditorForm parent; + + public NewProject(LSLEditorForm parent) + { + InitializeComponent(); + + this.checkBox2.Visible = Svn.IsInstalled; + + this.parent = parent; + + this.textBox2.Text = Properties.Settings.Default.ProjectLocation; + } + + private void button2_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + this.Close(); + } + + + + private void button3_Click(object sender, EventArgs e) + { + if (this.checkBox2.Checked) + Checkout(); + else + CreateNew(); + } + + private void Checkout() + { + Svn svn = new Svn(); + string strSvnRepository = this.textBox1.Text.Trim(); + string strLocalDirectory = this.textBox2.Text.Trim(); + string strSolutionName = this.textBox3.Text.Trim(); + + strLocalDirectory = Path.Combine(strLocalDirectory, strSolutionName); + + strSvnRepository = strSvnRepository.TrimEnd(new char[] {'/'}); + if (!strSvnRepository.EndsWith(strSolutionName)) + strSvnRepository += "/"+strSolutionName; + strSvnRepository += "/"; + + string strSolFile = strSvnRepository + strSolutionName + ".sol"; + if (!svn.Execute("list \"" + strSolFile +"\"",false,true)) + return; + + if (!svn.Execute("checkout \"" + strSvnRepository + "\" \"" + strLocalDirectory + "\"",false,true)) + return; + + // Into solution directory + string strLocalSolFile = Path.Combine(strLocalDirectory, strSolutionName + ".sol"); + if(!Directory.Exists(strLocalDirectory)) + { + MessageBox.Show("Can't find directory " + strLocalDirectory, "Checkout Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + if (!File.Exists(strLocalSolFile)) + { + MessageBox.Show("Can't find solution file " + strLocalSolFile, "Checkout Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + if (parent.SolutionExplorer.OpenSolution(strLocalSolFile)) + { + this.DialogResult = DialogResult.OK; + this.Close(); + } + } + + private void CreateNew() + { + if (this.parent.SolutionExplorer.CreateNew(this.textBox1.Text, this.textBox2.Text, this.textBox3.Text, this.checkBox1.Checked)) + { + this.parent.ShowSolutionExplorer(true); + this.parent.UpdateRecentProjectList(this.parent.SolutionExplorer.GetCurrentSolutionPath(),true); + this.DialogResult = DialogResult.OK; + this.Close(); + } + } + + private void button1_Click(object sender, EventArgs e) + { + if (this.folderBrowserDialog1.ShowDialog(this) == DialogResult.OK) + { + this.textBox2.Text = this.folderBrowserDialog1.SelectedPath; + } + } + + private void checkBox2_CheckedChanged(object sender, EventArgs e) + { + if (this.checkBox2.Checked) + { + this.label1.Text = "SVN Path"; + this.textBox1.Text = ""; + } + else + { + this.label1.Text = "Name"; + this.textBox1.Text = "Project"; + } + } + } } \ No newline at end of file diff --git a/trunk/Solution/NewProject.resx b/source/Solution/NewProject.resx similarity index 97% rename from trunk/Solution/NewProject.resx rename to source/Solution/NewProject.resx index c3fe8f1..b260022 100644 --- a/trunk/Solution/NewProject.resx +++ b/source/Solution/NewProject.resx @@ -1,123 +1,123 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + \ No newline at end of file diff --git a/trunk/Solution/SolutionExplorer.cs b/source/Solution/SolutionExplorer.cs similarity index 96% rename from trunk/Solution/SolutionExplorer.cs rename to source/Solution/SolutionExplorer.cs index 9eda5d8..0d37034 100644 --- a/trunk/Solution/SolutionExplorer.cs +++ b/source/Solution/SolutionExplorer.cs @@ -1,2540 +1,2540 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Text; -using System.Windows.Forms; -using System.Xml; - -namespace LSLEditor.Solution -{ - public partial class SolutionExplorer : ToolWindow - { - public enum TypeSL : int - { - // Inventory containers - Inventory = 0, - Animations = 1, - Body_Parts = 2, - Calling_Cards = 3, - Clothes = 4, - Gestures = 5, - Landmarks = 6, - Lost_And_Found = 7, - Notecards = 8, - Objects = 9, - Photo_Album = 10, - Scripts = 11, - Sounds = 12, - Textures = 13, - Trash = 14, - Folder = 15, - - // Special containers - Solution = 16, - Project = 17, - Prim = 18, // not used, use Object instead - Unknown = 19, - - // Normal items!! - - // Animations - Animation = 20, - - Gesture = 21, - Landmark = 22, - Notecard = 23, - Object = 24, // This is a normal container item!!! - - // Photo Album - Snapshot = 25, - - Script = 26, - LSLIScript = 42, - Sound = 27, - Texture = 28, - - // Body parts - Eyes = 29, - Hair = 30, - Shape = 31, - Skin = 32, - - // Clothes - Gloves = 33, - Jacket = 34, - Pants = 35, - Shirt = 36, - Shoes = 37, - Skirt = 38, - Socks = 39, - Underpants = 40, - Undershirt = 41 - } - private TypeSL[] BodyPartsTypes = - { - TypeSL.Eyes, - TypeSL.Hair, - TypeSL.Shape, - TypeSL.Skin - }; - private TypeSL[] ClothesTypes = - { - TypeSL.Gloves, - TypeSL.Jacket, - TypeSL.Pants, - TypeSL.Shirt, - TypeSL.Shoes, - TypeSL.Skirt, - TypeSL.Socks, - TypeSL.Underpants, - TypeSL.Undershirt - }; - private TypeSL[] FilesTypes = - { - TypeSL.Animation, - TypeSL.Gesture, - TypeSL.Landmark , - TypeSL.Notecard, - TypeSL.Snapshot, - TypeSL.Object, - TypeSL.Script, - TypeSL.LSLIScript, - TypeSL.Sound, - TypeSL.Texture - }; - - public struct RealTag - { - public TypeSL ItemType; - public string Name; - public string Description; - public Guid Guid; - public string Path; - - public RealTag(TypeSL ItemType, string Name, Guid Guid) - { - this.ItemType = ItemType; - this.Name = Name; - this.Description = string.Empty; - this.Guid = Guid; - this.Path = null; - } - - public RealTag(TypeSL ItemType,string Name, Guid Guid, string Path) - { - this.ItemType = ItemType; - this.Name = Name; - this.Description = string.Empty; - this.Guid = Guid; - this.Path = Path; - } - } - - public string DirectorySolution; - public string NameSolution; - public string Repository; - - private TreeNode ActiveSolution; - private TreeNode ActiveProject; - private TreeNode ActiveObject; - - private TreeNode CutObject; - private TreeNode CopyObject; - - public LSLEditorForm parent; - - private SolidBrush brushHighLightBackground; - private SolidBrush brushNormalForeColor; - private SolidBrush brushCutForeColor; - private SolidBrush brushBackColor; - private Pen penWhite; - private Pen penBackColor; - - private ImageList imageList1; - - private OpenFileDialog openFileDialog1; - - private Timer timer; - - private bool m_dirty; - - private ListViewItem m_HoveredItem; - private ToolTip toolTip1; - - - public bool IsDirty - { - get - { - return m_dirty; - } - } - - public SolutionExplorer() - { - InitializeComponent(); - - this.Repository = null; - - this.toolTip1 = new ToolTip(); - - this.m_dirty = false; - - this.components = new System.ComponentModel.Container(); - - imageList1 = new ImageList(); - imageList1.TransparentColor = Color.Transparent; - for (int intI = 0; intI <= 42; intI++)//41 - { - TypeSL typeSL = (TypeSL)intI; - imageList1.Images.Add(intI.ToString(), new Bitmap(typeof(LSLEditorForm), "ImagesSolutionExplorer." + typeSL.ToString().Replace("_", " ") + ".gif")); - } - - // take care of this as an property - //this.parent = parent; - - this.brushHighLightBackground = new SolidBrush(Color.FromArgb(0xff, 0x6d, 0x6e, 0x6f)); - this.brushNormalForeColor = new SolidBrush(Color.FromArgb(0xff, 0xff, 0xff, 0xff)); - this.brushCutForeColor = new SolidBrush(Color.FromArgb(0xff, Color.DarkGray)); - this.brushBackColor = new SolidBrush(Color.FromArgb(0xff, 0x3e, 0x3e, 0x3e)); - this.penWhite = new Pen(Color.White); - this.penBackColor = new Pen(this.brushBackColor); - - - this.treeView1.ImageList = imageList1; - this.treeView1.ShowRootLines = false; // just 1 root - this.treeView1.ForeColor = Color.White; - this.treeView1.BackColor = Color.FromArgb(0xff, 0x3e, 0x3e, 0x3e); - this.treeView1.LabelEdit = false; - this.treeView1.BeforeCollapse += new TreeViewCancelEventHandler(treeView1_BeforeCollapse); - this.treeView1.DrawMode = TreeViewDrawMode.OwnerDrawText; - this.treeView1.DrawNode += new DrawTreeNodeEventHandler(treeView1_DrawNode); - this.treeView1.AfterLabelEdit += new NodeLabelEditEventHandler(treeView1_AfterLabelEdit); - this.treeView1.MouseDown += new MouseEventHandler(treeView1_MouseDown); - - this.treeView1.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeView1_NodeMouseDoubleClick); - - this.treeView1.MouseUp += new MouseEventHandler(treeView1_MouseUp); - - this.treeView1.TreeViewNodeSorter = new NodeSorter(); - - this.listView1.Dock = DockStyle.Fill; - this.listView1.View = View.Details; - this.listView1.HeaderStyle = ColumnHeaderStyle.None; - //this.listView1.Scrollable = false; - - this.listView1.GridLines = true; - this.listView1.Columns.Add("Name",60); - this.listView1.Columns.Add("Value",250); - - // for disposing - this.timer = new Timer(this.components); - this.timer.Interval = 250; - this.timer.Tick += new EventHandler(timer_Tick); - - this.openFileDialog1 = new OpenFileDialog(); - } - - public string GetCurrentSolutionPath() - { - if (ActiveSolution == null) - return null; - if (DirectorySolution == null) - return null; - if (NameSolution == null) - return null; - - return Path.Combine(DirectorySolution, NameSolution + ".sol"); - } - - - public string GetProjectName(Guid guid) - { - TreeNode tn = FindGuid(this.treeView1.TopNode, guid); - if (tn != null) - { - while (tn != this.treeView1.TopNode) - { - tn = tn.Parent; - if (GetTypeSL(tn) == TypeSL.Project) - return tn.Text; - } - } - return ""; - } - - private void timer_Tick(object sender, EventArgs e) - { - timer.Stop(); - RenameAction(this.treeView1.SelectedNode); - } - - private int NumberOfProjects() - { - if (ActiveSolution == null) - return 0; - int intProjects = 0; - foreach (TreeNode tn in ActiveSolution.Nodes) - { - if (GetTypeSL(tn) == TypeSL.Project) - intProjects++; - } - return intProjects; - } - - private bool HasInventory() - { - foreach (TreeNode tn in ActiveSolution.Nodes) - { - if (GetTypeSL(tn) == TypeSL.Inventory) - return true; - } - return false; - } - - private void EmptyInventory(TreeNode parentNode) - { - this.m_dirty = true; - TreeNode treeNode = new TreeNode("Inventory", (int)TypeSL.Inventory, (int)TypeSL.Inventory); - string strInventoryPath = Path.Combine(DirectorySolution, "Inventory"); - treeNode.Tag = new RealTag(TypeSL.Inventory, "Inventory", Guid.NewGuid(), strInventoryPath); - parentNode.Nodes.Insert(0,treeNode); - for (int intI = 1; intI < 15; intI++) - { - TypeSL typeSL = (TypeSL)intI; - string strName = typeSL.ToString().Replace('_', ' '); - TreeNode tn = new TreeNode(strName, intI, intI); - tn.Tag = new RealTag(typeSL, strName, Guid.NewGuid()); - treeNode.Nodes.Add(tn); - } - } - - private EditForm GetEditForm(Guid guid) - { - LSLEditorForm lslEditorForm = this.parent; - foreach (Form form in lslEditorForm.Children) - { - EditForm editForm = form as EditForm; - if (editForm == null || editForm.IsDisposed) - continue; - if (editForm.guid == guid) - return editForm; - } - return null; - } - - public void CloseSolution() - { - if (this.ActiveSolution == null) - return; - - this.parent.StopSimulator(); - - if (this.parent.CloseAllOpenWindows()) - { - SaveSolutionFile(); - - this.ActiveProject = null; - this.ActiveSolution = null; - this.ActiveObject = null; - - this.m_dirty = false; - - this.treeView1.Nodes.Clear(); - - this.listView1.Items.Clear(); - - if(!Properties.Settings.Default.ShowSolutionExplorer) - this.parent.ShowSolutionExplorer(false); - this.parent.SolutionItemsFileMenu(false); - } - } - - public bool CreateNew(string strNameProject,string strDirectory,string strNameSolution,bool blnCreateSolutionDirectory) - { - DirectorySolution = Path.Combine(strDirectory,strNameSolution); - - string strSolutionFileName = Path.Combine(DirectorySolution, strNameSolution + ".sol"); - - if(File.Exists(strSolutionFileName)) - { - MessageBox.Show("Solution file already exists", "Create new Solution", MessageBoxButtons.OK, MessageBoxIcon.Error); - return false; - } - - AddSolution(strNameSolution); - - string strProjectPath; - if (blnCreateSolutionDirectory) - strProjectPath = Path.Combine(DirectorySolution, strNameProject); - else - strProjectPath = DirectorySolution; - - // made active, if only project - AddItem(TypeSL.Project,strNameProject, Guid.NewGuid() , strProjectPath); - - return true; - } - - public void AddExistingProject() - { - this.openFileDialog1.Multiselect = false; - this.openFileDialog1.FileName = ""; - this.openFileDialog1.Filter = "LSLEditor Project file (*.prj)|*.prj|All Files (*.*)|*.*"; - if (this.openFileDialog1.ShowDialog(this) == DialogResult.OK) - { - if (File.Exists(this.openFileDialog1.FileName)) - LoadItem(this.openFileDialog1.FileName,false); - } - } - - #region UserInterface stuff - - // disable root solution collapse (there is no + sign) - void treeView1_BeforeCollapse(object sender, TreeViewCancelEventArgs e) - { - e.Cancel = (e.Node == this.ActiveSolution); - } - - void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e) - { - if (e.Node.IsEditing) - return; - - if (e.Bounds.Height == 0) - return; - - Font font; - if (e.Node == ActiveProject || e.Node == ActiveObject) - font = new Font(this.treeView1.Font, FontStyle.Bold); - else - font = new Font(this.treeView1.Font, FontStyle.Regular); - - // Draw background - SizeF sizeF = e.Graphics.MeasureString(e.Node.Text, font); - Rectangle rect = new Rectangle(e.Bounds.Location, new Size((int)sizeF.Width + 5, e.Bounds.Height - 1)); - - if ((e.State & TreeNodeStates.Selected) != 0) - { - e.Graphics.FillRectangle(brushHighLightBackground, rect); - e.Graphics.DrawRectangle(penWhite, rect); - } - else - { - e.Graphics.FillRectangle(brushBackColor, rect); - e.Graphics.DrawRectangle(penBackColor, rect); - } - - // Draw text - Point point = new Point(e.Bounds.Location.X, e.Bounds.Location.Y + 2); - if (e.Node.ForeColor != Color.Empty) - e.Graphics.DrawString(e.Node.Text, font, brushCutForeColor, point); - else - e.Graphics.DrawString(e.Node.Text, font, brushNormalForeColor, point); - - // Clean up - font.Dispose(); - } - - void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) - { - this.treeView1.LabelEdit = false; - - if (e.Label == null || e.Label.Trim() == "") - { - e.CancelEdit = true; - return; - } - - // check for illegal chars!! - string strLabel = e.Label; - - foreach (char chrF in e.Label.ToCharArray()) - { - foreach (char chrInvalid in Path.GetInvalidFileNameChars()) - { - if (chrF == chrInvalid) - { - MessageBox.Show("Char '" + chrInvalid + "' is not allowed", "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); - e.CancelEdit = true; - return; - } - } - } - - string strBackup = e.Node.Text; - string strSource = GetFullPath(e.Node); - e.Node.Text = e.Label; - string strDestination = GetFullPath(e.Node); - - if (e.Node == ActiveSolution) - { - NameSolution = e.Label; - UpdateVisualSolutionName(); - string strOldSolutionFile = Path.GetFullPath(Path.Combine(strSource, strBackup + ".sol")); - string strNewSolutionFile = Path.GetFullPath(Path.Combine(strDestination, NameSolution + ".sol")); - - if (File.Exists(strNewSolutionFile) && string.Compare(strOldSolutionFile, strNewSolutionFile, true) != 0) - { - if (MessageBox.Show("Destination solution exists! overwrite?", "Oops...", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes) - { - e.Node.Text = strBackup; - e.CancelEdit = true; - return; - } - try - { - File.Delete(strNewSolutionFile); - } - catch (Exception exception) - { - MessageBox.Show("Error: " + exception.Message, "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); - e.Node.Text = strBackup; - e.CancelEdit = true; - return; - } - } - - if(File.Exists(strOldSolutionFile)) - File.Move(strOldSolutionFile, strNewSolutionFile); - ShowProperties(ActiveSolution); - - e.CancelEdit = true; - return; - } - - // source and destination are the same, cancel it all (file or directory) - if (string.Compare(strSource, strDestination, true) == 0) - { - e.Node.Text = strBackup; - e.CancelEdit = true; - return; - } - - - // rename file - if (File.Exists(strSource)) - { - if (File.Exists(strDestination)) - { - if (MessageBox.Show("Destination file exists! overwrite?", "Oops...", MessageBoxButtons.YesNo , MessageBoxIcon.Warning) != DialogResult.Yes) - { - e.Node.Text = strBackup; - e.CancelEdit = true; - return; - } - try - { - File.Delete(strDestination); - } - catch (Exception exception) - { - MessageBox.Show("Error: " + exception.Message, "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); - e.Node.Text = strBackup; - e.CancelEdit = true; - return; - } - } - try - { - File.Move(strSource, strDestination); - } - catch (Exception exception) - { - MessageBox.Show("Error: " + exception.Message, "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); - e.Node.Text = strBackup; - e.CancelEdit = true; - return; - } - - RealTag rt = (RealTag)e.Node.Tag; - string oldName = rt.Name; - rt.Name = e.Node.Text; - e.Node.Tag = rt; // save name - EditForm editForm = GetEditForm(rt.Guid); - if (editForm != null) - { - editForm.FullPathName = strDestination; // GetFullPath(e.Node); - editForm.SaveCurrentFile(); - } - - if (rt.ItemType == TypeSL.LSLIScript) - { - EditForm form = GetEditForm(rt.Guid); - if(form != null) - { - form.SaveCurrentFile(); - form.Dirty = true; - form.Show(); - - // Get the expanded version of the form - string x = Helpers.LSLIPathHelper.GetExpandedTabName(Helpers.LSLIPathHelper.CreateExpandedScriptName(oldName)); - EditForm xform = (EditForm)parent.GetForm(x); - - if (xform != null && xform.Visible) - { - string src = xform.SourceCode; - xform.Dirty = false; - xform.Close(); - form.SourceCode = src; - form.Dirty = true; - parent.ExpandForm(form); - } - } - } - - return; // rename file complete - } - - // rename directory - if (Directory.Exists(strSource)) - { - if (Directory.Exists(strDestination)) - { - if (MessageBox.Show("Destination directory exists! overwrite?", "Oops...", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes) - { - e.Node.Text = strBackup; - e.CancelEdit = true; - return; - } - try - { - Directory.Delete(strDestination, true); - } - catch (Exception exception) - { - MessageBox.Show("Error: " + exception.Message, "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); - e.Node.Text = strBackup; - e.CancelEdit = true; - return; - } - } - - try - { - Directory.Move(strSource, strDestination); - } - catch (Exception exception) - { - MessageBox.Show("Error: " + exception.Message, "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); - e.Node.Text = strBackup; - e.CancelEdit = true; - return; - } - - RealTag rt = (RealTag)e.Node.Tag; - rt.Name = e.Node.Text; - e.Node.Tag = rt; // save name - - // update all path of opened windows - foreach (Form form in this.parent.Children) - { - EditForm editForm = form as EditForm; - if (editForm == null || editForm.IsDisposed) - continue; - TreeNode tn = FindGuid(e.Node, editForm.guid); - if (tn != null) - { - editForm.FullPathName = GetFullPath(tn); - editForm.SaveCurrentFile(); - } - } - return; - } - - MessageBox.Show("Can not rename, source does not exist", "Oops..."); - e.Node.Text = strBackup; - e.CancelEdit = true; - } - #endregion - - private bool IsItem(TreeNode treeNode) - { - TypeSL typeSL = GetTypeSL(treeNode); - return ((int)typeSL >= 20); - } - - private bool IsItemAndNotObject(TreeNode treeNode) - { - TypeSL typeSL = GetTypeSL(treeNode); - int intTypeSL = (int)typeSL; - return (intTypeSL >= 20 && typeSL != TypeSL.Object); - } - - - private bool IsInventoryContainer(TreeNode treeNode) - { - TypeSL TypeSL = GetTypeSL(treeNode); - return ((int)TypeSL <= 15); - } - - private TypeSL GetTypeSL(TreeNode treeNode) - { - if (treeNode == null) - return TypeSL.Unknown; - if (treeNode.Tag == null) - return TypeSL.Unknown; - RealTag realTag = (RealTag)treeNode.Tag; - return realTag.ItemType; - } - - private string GetPath(TreeNode treeNode) - { - if (treeNode == null) - return null; - if (treeNode.Tag == null) - return null; - RealTag realTag = (RealTag)treeNode.Tag; - string strPath = realTag.Path; - if (strPath == null) - return null; - - if(strPath.EndsWith(treeNode.Text)) - return strPath; - - // Project has been renamed - strPath = Path.Combine(Path.GetDirectoryName(strPath), treeNode.Text); - realTag.Path = strPath; - treeNode.Tag = realTag; - return strPath; - } - - private string GetXml(int intDepth, TreeNode treeNode) - { - StringBuilder sb = new StringBuilder(); - RealTag realTag = (RealTag)treeNode.Tag; - string strTagName = realTag.ItemType.ToString(); - string strValue = treeNode.Text; - if (treeNode == ActiveSolution) - strValue = NameSolution; - for (int intI = 0; intI < intDepth; intI++) - sb.Append('\t'); - string strActive = ""; - string strDescription = ""; - if (treeNode == ActiveObject) - strActive = @" active=""true"""; - if (realTag.Description != string.Empty) - strDescription = @" description=""" + realTag.Description + @""""; - sb.AppendFormat("<{0} name=\"{1}\" guid=\"{2}\"{3}{4}>\r\n", strTagName, strValue, realTag.Guid, strActive, strDescription); - foreach (TreeNode childNode in treeNode.Nodes) - sb.Append(GetXml(intDepth + 1, childNode)); - for (int intI = 0; intI < intDepth; intI++) - sb.Append('\t'); - sb.AppendFormat("\r\n", strTagName); - return sb.ToString(); - } - - private string GetFullPath(TreeNode treeNode) - { - if (treeNode == ActiveSolution) - return DirectorySolution; - - TreeNode parentNode = treeNode; - string strPath = ""; - while (GetPath(parentNode) == null) - { - strPath = Path.Combine(parentNode.Text, strPath); - parentNode = parentNode.Parent; - } - strPath = Path.Combine(GetPath(parentNode), strPath); - return Path.GetFullPath(strPath); - } - - private void RecursiveLoad(TreeNode treeNode, XmlNode xmlParentNode) - { - foreach (XmlNode xmlNode in xmlParentNode.SelectNodes("./*")) - { - TypeSL typeSL = (TypeSL)Enum.Parse(typeof(TypeSL), xmlNode.Name); - - if (typeSL == TypeSL.Prim) // Old!!! - typeSL = TypeSL.Object; - - string strName = xmlNode.Attributes["name"].Value; - Guid guid = new Guid(xmlNode.Attributes["guid"].Value); - - XmlAttribute attributePath = xmlNode.Attributes["path"]; - XmlAttribute attributeDescription = xmlNode.Attributes["description"]; - int intImageIndex = (int)typeSL; - TreeNode tn = new TreeNode(strName, intImageIndex, intImageIndex); - - RealTag realTag = new RealTag(typeSL, strName, guid); - - if (attributePath != null) - realTag.Path = attributePath.Value; - if (attributeDescription != null) - realTag.Description = attributeDescription.Value; - - tn.Tag = realTag; - - XmlAttribute attributeActive = xmlNode.Attributes["active"]; - if (attributeActive != null) - { - if (attributeActive.Value == "true") - ActiveObject = tn; - } - treeNode.Nodes.Add(tn); - RecursiveLoad(tn, xmlNode); - } - } - - - private void LoadItem(string strPath, bool blnActive) - { - XmlDocument xmlItemFile = new XmlDocument(); - try - { - xmlItemFile.Load(strPath); - } - catch - { - MessageBox.Show("Not a valid item file", "Oops..."); - return; - } - foreach (XmlNode xmlItem in xmlItemFile.SelectNodes("./*")) - { - TypeSL typeSL = (TypeSL)Enum.Parse(typeof(TypeSL), xmlItem.Name); - TreeNode currentItem = AddItem(typeSL, - xmlItem.Attributes["name"].Value, - new Guid(xmlItem.Attributes["guid"].Value), - Path.GetDirectoryName(strPath)); - if (currentItem == null) - continue; - if (blnActive) - ActiveProject = currentItem; - RecursiveLoad(currentItem, xmlItem); - } - } - - public bool OpenSolution(string strPath) - { - DirectorySolution = Path.GetDirectoryName(strPath); - NameSolution = Path.GetFileNameWithoutExtension(strPath); - - XmlDocument xml = new XmlDocument(); - try - { - xml.Load(strPath); - } - catch - { - MessageBox.Show("Not a valid Solution file", "Oops..."); - this.parent.UpdateRecentProjectList(strPath, false); - return false; - } - - this.treeView1.Nodes.Clear(); - - foreach (XmlNode xmlSolution in xml.SelectNodes("//Solution")) - { - if (xmlSolution.Attributes["repository"] != null) - this.Repository = xmlSolution.Attributes["repository"].Value; - - AddSolution(xmlSolution.Attributes["name"].Value); - foreach (XmlNode xmlItem in xmlSolution.SelectNodes("./*")) - { - string strItemPath = xmlItem.Attributes["path"].Value; - if (!Path.IsPathRooted(strItemPath)) - strItemPath = Path.Combine(DirectorySolution, strItemPath); - if (!File.Exists(strItemPath)) - continue; // TODO verbose error - bool blnActive = false; - if (xmlItem.Attributes["active"] != null) - blnActive = (xmlItem.Attributes["active"].Value == "true"); - LoadItem(strItemPath,blnActive); - } - } - this.parent.ShowSolutionExplorer(true); - this.parent.SolutionItemsFileMenu(true); - this.parent.UpdateRecentProjectList(strPath,true); - this.m_dirty = false; - - return true; - } - - public bool SaveSolutionFile() - { - if (ActiveSolution == null) - return false; - if (DirectorySolution == null) - return false; - if (NameSolution == null) - return false; - - if (!Directory.Exists(DirectorySolution)) - Directory.CreateDirectory(DirectorySolution); - - string strSolutionFileName = Path.Combine(DirectorySolution, NameSolution + ".sol"); - StreamWriter sw = new StreamWriter(strSolutionFileName); - string strRepositoryAttribute; - if (this.Repository == null) - strRepositoryAttribute = ""; - else - strRepositoryAttribute = string.Format(" repository=\"{0}\"",this.Repository); - sw.WriteLine("",NameSolution,strRepositoryAttribute); - foreach (TreeNode nodeItem in ActiveSolution.Nodes) - { - RealTag realTag = (RealTag)nodeItem.Tag; - string strItemPath = SaveItemFile(nodeItem); - if (strItemPath != null) - { - // Make path relative, if it is the same as solution directory - if (strItemPath.ToLower().IndexOf(DirectorySolution.ToLower()) == 0) - strItemPath = strItemPath.Substring(DirectorySolution.Length+1); - string strActive = ""; - if (ActiveProject == nodeItem) - strActive = @" active=""true"""; - sw.WriteLine("\t", nodeItem.Text, strItemPath, strActive); - } - } - sw.WriteLine(""); - sw.Close(); - this.m_dirty = false; - - return true; - } - - private string SaveItemFile(TreeNode nodeItem) - { - string strName = nodeItem.Text; - RealTag realTag = (RealTag)nodeItem.Tag; - string strPath = realTag.Path; - - if (!Directory.Exists(strPath)) - Directory.CreateDirectory(strPath); - - string strExtension = ".prj"; - if (realTag.Name == "Inventory") - strExtension = ".inv"; - string strFilePath = Path.Combine(strPath, strName + strExtension); - StreamWriter sw = new StreamWriter(strFilePath); - sw.Write(GetXml(0, nodeItem)); - sw.Close(); - return strFilePath; - } - - private void AddSolution(string strNameSolution) - { - this.NameSolution = strNameSolution; - ActiveSolution = new TreeNode("Solution '" + strNameSolution + "'", (int)TypeSL.Solution, (int)TypeSL.Solution); - ActiveSolution.Tag = new RealTag(TypeSL.Solution, strNameSolution, Guid.NewGuid()); - this.treeView1.Nodes.Insert(0,ActiveSolution); - ActiveSolution.Expand(); - this.parent.SolutionItemsFileMenu(true); - } - - private void UpdateVisualSolutionName() - { - int intProjects = NumberOfProjects(); - ActiveSolution.Text = "Solution '" + this.NameSolution + "' (" + intProjects + " project" + ((intProjects != 1) ? "s" : "") + ")"; - } - - private bool ItemExist(Guid guid) - { - foreach (TreeNode itemNode in ActiveSolution.Nodes) - { - RealTag realTag = (RealTag)itemNode.Tag; - if (realTag.Guid == guid) - return true; - } - return false; - } - - private TreeNode AddItem(TypeSL typeSL, string strName, Guid guid, string strPath) - { - if (ItemExist(guid)) - return null; - - if (!Directory.Exists(strPath)) - Directory.CreateDirectory(strPath); - - TreeNode treeNode = new TreeNode(strName, (int)typeSL, (int)typeSL); - treeNode.Tag = new RealTag(typeSL, strName, guid, strPath); - - if (ActiveProject == null && typeSL == TypeSL.Project) - ActiveProject = treeNode; - - ActiveSolution.Nodes.Add(treeNode); - ActiveSolution.Expand(); - UpdateVisualSolutionName(); - - this.m_dirty = true; - - return treeNode; - } - - private TreeNode AddNewContainer(TreeNode parent, TypeSL typeSL, string strNewName, Guid guid) - { - if (parent == null) - return null; - - string strDirectoryContainer = Path.Combine(GetFullPath(parent), strNewName); - if (!Directory.Exists(strDirectoryContainer)) - Directory.CreateDirectory(strDirectoryContainer); - - TreeNode treeNode = new TreeNode(strNewName, (int)typeSL, (int)typeSL); - treeNode.Tag = new RealTag(typeSL, strNewName, guid); - - if (ActiveObject == null && typeSL == TypeSL.Object) - ActiveObject = treeNode; - - parent.Nodes.Add(treeNode); - parent.Expand(); - - this.m_dirty = true; - - return treeNode; - } - - - private void AddNewFile(TreeNode parent, TypeSL typeFile) - { - if (parent == null) - return; - - string strName = typeFile+"{0}"; - string strExtension = ""; - switch (typeFile) - { - case TypeSL.Script: - strExtension = ".lsl"; - break; - case TypeSL.LSLIScript: - strExtension = ".lsli"; - break; - case TypeSL.Notecard: - strExtension = ".txt"; - break; - case TypeSL.Texture: - strExtension = ".tga"; - break; - case TypeSL.Animation: - strExtension = ".ani"; - break; - case TypeSL.Gesture: - strExtension = ".ges"; - break; - case TypeSL.Landmark: - strExtension = ".lmrk"; - break; - case TypeSL.Snapshot: - strExtension = ".pic"; - break; - case TypeSL.Sound: - strExtension = ".snd"; - break; - default: - break; - } - string strNewName = GetNewFileName(parent, strName + strExtension); - - string strFilePath = Path.Combine(GetFullPath(parent), strNewName); - - if (!File.Exists(strFilePath)) - { - StreamWriter sw = new StreamWriter(strFilePath); - - switch (typeFile) - { - case TypeSL.Script: - sw.Write(AutoFormatter.ApplyFormatting(0,Helpers.GetTemplate.Source())); - break; - case TypeSL.LSLIScript: - sw.Write(AutoFormatter.ApplyFormatting(0, Helpers.GetTemplate.Source())); - break; - case TypeSL.Notecard: - sw.Write("notecard"); - break; - default: - // empty file - break; - } - sw.Close(); - } - - TreeNode newFile = new TreeNode(strNewName, (int)typeFile, (int)typeFile); - newFile.Tag = new RealTag(typeFile, strNewName, Guid.NewGuid()); - parent.Nodes.Add(newFile); - parent.Expand(); - - this.m_dirty = true; - } - - private void AddExistingFile(TreeNode parent, string strName, Guid guid) - { - if (parent == null) - return; - - string strFilePath = Path.Combine(GetFullPath(parent), strName); - - TypeSL typeFile = TypeSL.Unknown; - - switch (Path.GetExtension(strName)) - { - case ".lsl": - typeFile = TypeSL.Script; - break; - case ".txt": - typeFile = TypeSL.Notecard; - break; - case ".ogg": - case ".wav": - case ".mp3": - typeFile = TypeSL.Sound; - break; - case ".ani": - typeFile = TypeSL.Animation; - break; - case ".gif": - case ".jpg": - case ".jpeg": - case ".tiff": - case ".bmp": - case ".png": - typeFile = TypeSL.Snapshot; - break; - default: - break; - } - TreeNode newFile = new TreeNode(strName, (int)typeFile, (int)typeFile); - newFile.Tag = new RealTag(typeFile, strName, guid); - parent.Nodes.Add(newFile); - parent.Expand(); - - this.m_dirty = true; - } - - private void AddExistingFile(TreeNode tn) - { - if (GetTypeSL(tn) != TypeSL.Object) - return; - this.openFileDialog1.FileName = ""; - this.openFileDialog1.Filter = "All Files (*.*)|*.*"; - this.openFileDialog1.Multiselect = true; - if (this.openFileDialog1.ShowDialog(this) == DialogResult.OK) - { - foreach (string strSourcePath in this.openFileDialog1.FileNames) - { - string strName = Path.GetFileName(strSourcePath); - string strDestinationPath = Path.Combine(GetFullPath(tn), strName); - - bool blnAdd = true; - foreach (TreeNode child in tn.Nodes) - { - if (child.Text == strName) - { - blnAdd = false; - - if (strSourcePath.ToLower() == strDestinationPath.ToLower()) - break; - - if (MessageBox.Show("Overwrite existing file?", "File already exists", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) - { - child.Remove(); - blnAdd = true; - break; - } - } - } - if (!blnAdd) - continue; - if (strSourcePath.ToLower() != strDestinationPath.ToLower()) - { - try - { - File.Copy(strSourcePath, strDestinationPath, true); - } - catch (Exception exception) - { - MessageBox.Show(exception.Message, "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - AddExistingFile(tn, strName, Guid.NewGuid()); - } - } - } - - public void AddNewObject() - { - if (ActiveProject == null) - return; - AddNewContainer(ActiveProject, TypeSL.Object, GetNewDirectoryName(ActiveProject, "Object{0}"), Guid.NewGuid()); - } - - #region ContextMenus - - private ToolStripMenuItem cmsItemsAdd(ContextMenuStrip cms, string strName, string strValue,string strKeys) - { - ToolStripMenuItem tsmi = new ToolStripMenuItem(strValue); - tsmi.ShortcutKeyDisplayString = strKeys; - tsmi.Name = strName; - cms.Items.Add(tsmi); - return tsmi; - } - - private ToolStripMenuItem cmsItemsAdd(ContextMenuStrip cms, string strName, string strValue) - { - ToolStripMenuItem tsmi = new ToolStripMenuItem(strValue); - tsmi.Name = strName; - cms.Items.Add(tsmi); - return tsmi; - } - - private ContextMenuStrip ContextMenuSolution() - { - ContextMenuStrip cms = new ContextMenuStrip(); - cms.MouseClick += new MouseEventHandler(cms_MouseClick); - cmsItemsAdd(cms, "CloseSolution", "Close Solution"); - cms.Items.Add(new ToolStripSeparator()); - - if (Properties.Settings.Default.VersionControlSVN) - { - if (this.Repository == null) - { - cmsItemsAdd(cms, "SvnImport", "Import Solution SVN"); - cms.Items.Add(new ToolStripSeparator()); - } - else // already workingcopy - { - cmsItemsAdd(cms, "SvnUpdate", "SVN update"); - cmsItemsAdd(cms, "SvnCommit", "SVN commit"); - cms.Items.Add(new ToolStripSeparator()); - } - } - - cmsItemsAdd(cms, "AddNewProject", "Add New Project"); - cmsItemsAdd(cms, "AddExistingProject", "Add Existing Project..."); - if (!HasInventory()) - { - cms.Items.Add(new ToolStripSeparator()); - cmsItemsAdd(cms, "AddInventory", "Add Empty Inventory"); - } - cms.Items.Add(new ToolStripSeparator()); - if (GetTypeSL(CutObject) == TypeSL.Project || GetTypeSL(CopyObject) == TypeSL.Project) - cmsItemsAdd(cms, "Paste", "Paste project" , "Ctrl+V"); - cmsItemsAdd(cms, "Rename", "Rename" , "F2"); - cms.Items.Add(new ToolStripSeparator()); - cmsItemsAdd(cms, "Properties", "Properties"); - return cms; - } - - private ContextMenuStrip ContextMenuInventory(TypeSL typeSL) - { - ContextMenuStrip cms = new ContextMenuStrip(); - cms.MouseClick += new MouseEventHandler(cms_MouseClick); - - if (typeSL != TypeSL.Inventory) - { - ToolStripMenuItem tsmiClothes = cmsItemsAdd(cms, "Add", "Add Clothes"); - tsmiClothes.DropDownItemClicked += new ToolStripItemClickedEventHandler(tsmi_DropDownItemClicked); - foreach (TypeSL file in ClothesTypes) - tsmiClothes.DropDownItems.Add(file.ToString(), this.imageList1.Images[(int)file]); - - ToolStripMenuItem tsmiBodyParts = cmsItemsAdd(cms, "Add", "Add Body Parts"); - tsmiBodyParts.DropDownItemClicked += new ToolStripItemClickedEventHandler(tsmi_DropDownItemClicked); - foreach (TypeSL file in BodyPartsTypes) - tsmiBodyParts.DropDownItems.Add(file.ToString(), this.imageList1.Images[(int)file]); - - ToolStripMenuItem tsmiFiles = cmsItemsAdd(cms, "Add", "Add Items"); - tsmiFiles.DropDownItemClicked += new ToolStripItemClickedEventHandler(tsmi_DropDownItemClicked); - foreach (TypeSL file in FilesTypes) - tsmiFiles.DropDownItems.Add(file.ToString(), this.imageList1.Images[(int)file]); - cms.Items.Add(new ToolStripSeparator()); - } - cmsItemsAdd(cms, "AddNewFolder", "Add New Folder"); - - if (typeSL == TypeSL.Folder) - { - cms.Items.Add(new ToolStripSeparator()); - cmsItemsAdd(cms, "Cut", "Cut" , "Ctrl+X"); - cmsItemsAdd(cms, "Copy", "Copy","Ctrl+C"); - cmsItemsAdd(cms, "Delete", "Delete", "Del"); - cmsItemsAdd(cms, "Rename", "Rename", "F2"); - } - if (CutObject != null || CopyObject != null) - { - cms.Items.Add(new ToolStripSeparator()); - cmsItemsAdd(cms, "Paste", "Paste", "Ctrl+V"); - } - cms.Items.Add(new ToolStripSeparator()); - cmsItemsAdd(cms, "Properties", "Properties"); - - return cms; - } - - private ContextMenuStrip ContextMenuProject() - { - ContextMenuStrip cms = new ContextMenuStrip(); - cms.MouseClick += new MouseEventHandler(cms_MouseClick); - cmsItemsAdd(cms, "AddNewObject", "Add New Object"); - cmsItemsAdd(cms, "AddExistingObject", "Add Existing Object..."); - cms.Items.Add(new ToolStripSeparator()); - if (NumberOfProjects() > 1 || ActiveProject == null) - cmsItemsAdd(cms, "SetAsActiveProject", "Set as Active Project"); - cmsItemsAdd(cms, "DebugStart","Debug Start"); - cms.Items.Add(new ToolStripSeparator()); - cmsItemsAdd(cms, "Cut","Cut","Ctrl+X"); - cmsItemsAdd(cms, "Copy", "Copy", "Ctrl+C"); - cmsItemsAdd(cms, "Remove","Remove"); - if (GetTypeSL(CutObject) == TypeSL.Object || GetTypeSL(CopyObject) == TypeSL.Object) - cmsItemsAdd(cms, "Paste", "Paste Object","Ctrl+V"); - cmsItemsAdd(cms, "Rename","Rename","F2"); - cms.Items.Add(new ToolStripSeparator()); - cmsItemsAdd(cms, "Properties","Properties"); - return cms; - } - - public void CreateNewFileDrowDownMenu(ToolStripMenuItem tsmi) - { - tsmi.DropDownItemClicked += new ToolStripItemClickedEventHandler(tsmi_DropDownItemClicked); - foreach (TypeSL file in FilesTypes) - tsmi.DropDownItems.Add(file.ToString(), this.imageList1.Images[(int)file]); - } - - public void CreateNewFileDrowDownMenu(ContextMenuStrip cms) - { - ToolStripMenuItem tsmi = cmsItemsAdd(cms, "Add", "Add New Item"); - tsmi.DropDownItemClicked += new ToolStripItemClickedEventHandler(tsmi_DropDownItemClicked); - foreach (TypeSL file in FilesTypes) - tsmi.DropDownItems.Add(file.ToString(), this.imageList1.Images[(int)file]); - } - - private ContextMenuStrip ContextMenuBox() - { - ContextMenuStrip cms = new ContextMenuStrip(); - cms.MouseClick += new MouseEventHandler(cms_MouseClick); - - CreateNewFileDrowDownMenu(cms); - //ToolStripMenuItem tsmi = cmsItemsAdd(cms, "Add", "Add New File"); - //tsmi.DropDownItemClicked += new ToolStripItemClickedEventHandler(tsmi_DropDownItemClicked); - //foreach (TypeSL file in FilesTypes) - // tsmi.DropDownItems.Add(file.ToString(), this.imageList1.Images[(int)file]); - - cmsItemsAdd(cms, "AddExistingFile", "Add Existing File(s)..."); - cms.Items.Add(new ToolStripSeparator()); - cmsItemsAdd(cms, "SetAsActiveBox", "Set As Active Object"); - cms.Items.Add(new ToolStripSeparator()); - cmsItemsAdd(cms, "ExcludeFromProject", "Exclude From Project"); - cms.Items.Add(new ToolStripSeparator()); - cmsItemsAdd(cms, "Cut", "Cut","Ctrl+X"); - cmsItemsAdd(cms, "Copy", "Copy", "Ctrl+C"); - cmsItemsAdd(cms, "Delete", "Delete", "Del"); - if (IsItem(CutObject) || IsItem(CopyObject)) - cmsItemsAdd(cms, "Paste", "Paste", "Ctrl+V"); - cmsItemsAdd(cms, "Rename", "Rename","F2"); - cms.Items.Add(new ToolStripSeparator()); - cmsItemsAdd(cms, "Properties", "Properties"); - return cms; - } - - private ContextMenuStrip ContextMenuFile() - { - ContextMenuStrip cms = new ContextMenuStrip(); - cms.MouseClick += new MouseEventHandler(cms_MouseClick); - cmsItemsAdd(cms, "Open", "Open"); - cms.Items.Add(new ToolStripSeparator()); - cmsItemsAdd(cms, "Cut", "Cut" , "Ctrl+X"); - cmsItemsAdd(cms, "Copy", "Copy", "Ctrl+C"); - cmsItemsAdd(cms, "Delete", "Delete", "Del"); - cmsItemsAdd(cms, "Rename", "Rename", "F2"); - cms.Items.Add(new ToolStripSeparator()); - ToolStripMenuItem tsmi = cmsItemsAdd(cms, "ChangeFileType", "Change filetype"); - CreateNewFileDrowDownMenu(tsmi); - cms.Items.Add(new ToolStripSeparator()); - cmsItemsAdd(cms, "Properties", "Properties"); - return cms; - } - - #endregion - - void tsmi_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) - { - // Add New File - TreeNode tn; - ToolStripDropDownItem tsddi = sender as ToolStripDropDownItem; - ContextMenuStrip cms = tsddi.Owner as ContextMenuStrip; - if (cms != null) - tn = cms.Tag as TreeNode; - else - tn = ActiveObject; - - if (tn != null) - { - string strName = tsddi.Name; - if (strName == "ChangeFileType") - { - RealTag realTag = (RealTag)tn.Tag; - TypeSL stypeSl = (TypeSL)Enum.Parse(typeof(TypeSL), e.ClickedItem.Text); - realTag.ItemType = stypeSl; - tn.Tag = realTag; - tn.ImageIndex = (int)stypeSl; - tn.SelectedImageIndex = (int)stypeSl; - this.treeView1.Invalidate(tn.Bounds); - return; - } - else - { - TypeSL typeSL = (TypeSL)Enum.Parse(typeof(TypeSL), e.ClickedItem.Text); - if (typeSL != TypeSL.Object) - AddNewFile(tn, typeSL); - else - AddNewContainer(tn, TypeSL.Object, GetNewDirectoryName(tn, "Object{0}"), Guid.NewGuid()); - } - } - } - - void treeView1_MouseUp(object sender, MouseEventArgs e) - { - if (e.Button != MouseButtons.Left) - return; - - TreeNode treeNode = this.treeView1.GetNodeAt(new Point(e.X, e.Y)); - if (treeNode == null) - return; - - if (e.X < treeNode.Bounds.X) // only when clicked on the label - return; - - if (timer.Tag != null) - { - if (timer.Tag == treeNode) - { - timer.Tag = null; - timer.Start(); - return; - } - } - timer.Tag = treeNode; - } - - void treeView1_MouseDown(object sender, MouseEventArgs e) - { - TreeNode treeNode = this.treeView1.GetNodeAt(new Point(e.X, e.Y)); - if (treeNode == null) - return; - - this.treeView1.SelectedNode = treeNode; - - RealTag realTag = (RealTag)treeNode.Tag; - - if (e.Button == MouseButtons.Right) - { - ContextMenuStrip cms = null; - switch (realTag.ItemType) - { - case TypeSL.Solution: - cms = ContextMenuSolution(); - break; - case TypeSL.Project: - cms = ContextMenuProject(); - break; - case TypeSL.Object: - cms = ContextMenuBox(); - break; - default: - if (IsInventoryContainer(treeNode)) - cms = ContextMenuInventory(realTag.ItemType); - else if (IsItem(treeNode)) - cms = ContextMenuFile(); - else - cms = new ContextMenuStrip(); - break; - } - cms.Tag = treeNode; - this.treeView1.ContextMenuStrip = cms; - } - } - - private string GetNewName(TreeNode treeNode, bool blnDirectory, string strFormat) - { - string strDirectory = GetFullPath(treeNode); - if (File.Exists(strDirectory)) - strDirectory = Path.GetDirectoryName(strDirectory); - - if (!Directory.Exists(strDirectory)) - Directory.CreateDirectory(strDirectory); - - RealTag realTag = (RealTag)treeNode.Tag; - if (blnDirectory) - { - string strName = strFormat.Replace("({0}) ", "").Replace("{0}", "").Replace("Copy of ",""); - if (!Directory.Exists(Path.Combine(strDirectory, strName))) - return strName; - strName = strFormat.Replace("({0}) ", "").Replace("{0}", ""); - if (!Directory.Exists(Path.Combine(strDirectory, strName))) - return strName; - - for (int intI = 1; intI < 255; intI++) - { - strName = string.Format(strFormat, intI); - if (!Directory.Exists(Path.Combine(strDirectory, strName))) - return strName; - } - } - else - { - string strName = strFormat.Replace("({0}) ", "").Replace("{0}", "").Replace("Copy of ",""); - if (!File.Exists(Path.Combine(strDirectory, strName))) - return strName; - strName = strFormat.Replace("({0}) ", "").Replace("{0}", ""); - if (!File.Exists(Path.Combine(strDirectory, strName))) - return strName; - - for (int intI = 2; intI < 255; intI++) - { - strName = string.Format(strFormat, intI); - if (!File.Exists(Path.Combine(strDirectory, strName))) - return strName; - } - } - MessageBox.Show("There are 255 items with the same name", "Oops..."); - return null; - } - - private string GetNewFileName(TreeNode treeNode, string strFormat) - { - return GetNewName(treeNode, false, strFormat); - } - - private string GetNewDirectoryName(TreeNode treeNode, string strFormat) - { - return GetNewName(treeNode, true, strFormat); - } - - private void DeleteAction(TreeNode tn) - { - if (MessageBox.Show("Delete " + tn.Text, "Delete?", MessageBoxButtons.YesNo) == DialogResult.Yes) - DeleteChildren(tn); - } - - private void DeleteChildren(TreeNode tn) - { - // remove backwards, foreach does not work - for(int intI=tn.Nodes.Count-1;intI>=0;intI--) - DeleteChildren(tn.Nodes[intI]); - - string strPath = GetFullPath(tn); - if (File.Exists(strPath)) - { - File.Delete(strPath); - RealTag rt = (RealTag)tn.Tag; - EditForm editForm = GetEditForm(rt.Guid); - if (editForm != null) - { - this.parent.ActivateMdiForm(editForm); - this.parent.CloseActiveWindow(); - } - } - else if (Directory.Exists(strPath)) - { - if (Directory.GetFiles(strPath).Length == 0) - Directory.Delete(strPath, true); - } - else - { - MessageBox.Show("Not found: " + tn.Text, "Oops..."); - } - tn.Remove(); - - this.m_dirty = true; - } - - private void CopyChildren(TreeNode Source,TreeNode Destination) - { - RealTag realTag = (RealTag)Source.Tag; - realTag.Guid = Guid.NewGuid(); // copy objects have new guid - if (realTag.Path!=null) - realTag.Path = Path.Combine(Path.GetDirectoryName(GetFullPath(Source)), Destination.Text); - - Destination.Tag = realTag; - Destination.ImageIndex = Source.ImageIndex; - Destination.SelectedImageIndex = Source.SelectedImageIndex; - - string strSourcePath = GetFullPath(Source); - string strDestionationPath = GetFullPath(Destination); - if (File.Exists(strSourcePath)) - File.Copy(strSourcePath, strDestionationPath); - else if (Directory.Exists(strSourcePath)) - Directory.CreateDirectory(strDestionationPath); - else - MessageBox.Show("Error: " + strSourcePath, "Oops..."); - - foreach (TreeNode child in Source.Nodes) - { - TreeNode clone = new TreeNode(child.Text); - Destination.Nodes.Add(clone); - CopyChildren(child, clone); - } - this.m_dirty = true; - } - - private void PasteAction(TreeNode tn) - { - // paste on same object, get parent!! - // paste on item, get parent!! - if (tn == CopyObject || tn==CutObject || IsItemAndNotObject(tn)) - tn = tn.Parent; - - // sanitycheck, search all parents, may not be CopyObject or CutObject - TreeNode parentNode = tn; - while (parentNode != null) - { - if (parentNode == CopyObject || parentNode == CutObject) - return; - parentNode = parentNode.Parent; - } - - switch(GetTypeSL(tn)) - { - case TypeSL.Solution: - if (GetTypeSL(CutObject) != TypeSL.Project && - GetTypeSL(CopyObject) != TypeSL.Project) - return; - break; - case TypeSL.Project: - if (GetTypeSL(CutObject) != TypeSL.Object && - GetTypeSL(CopyObject) != TypeSL.Object) - return; - break; - case TypeSL.Object: - if (!IsItem(CutObject) && !IsItem(CopyObject)) - return; - break; - default: - if(IsInventoryContainer(tn)) - { - if (!IsItem(CutObject) && !IsItem(CopyObject) && - GetTypeSL(CutObject) != TypeSL.Folder && - GetTypeSL(CopyObject) != TypeSL.Folder) - return; - } - else if (!IsItem(tn)) // is special container - { - // must be a file - if (!IsItem(CutObject) && !IsItem(CopyObject) && - GetTypeSL(CutObject) != TypeSL.Folder && - GetTypeSL(CopyObject) != TypeSL.Folder) - return; - } - break; - } - - if (CutObject != null) // Paste the Cut object - { - string strName = CutObject.Text; - - foreach(TreeNode treeNode in tn.Nodes) - { - if (treeNode.Text == strName) - { - MessageBox.Show("Destination already exists","Oops..."); - return; - } - } - - TreeNode Destination = new TreeNode(strName); - tn.Nodes.Add(Destination); - - CopyChildren(CutObject, Destination); - DeleteChildren(CutObject); - - CutObject.Remove(); - CutObject = null; - } - if (CopyObject != null) // Paste the Copy object - { - string strName; - if (IsItem(CopyObject) && GetTypeSL(CopyObject) != TypeSL.Object) - strName = GetNewFileName(tn, "Copy ({0}) of " + CopyObject.Text); - else - strName = GetNewDirectoryName(tn, "Copy ({0}) of " + CopyObject.Text); - - TreeNode Destination = new TreeNode(strName); - tn.Nodes.Add(Destination); - - CopyChildren(CopyObject, Destination); - - CopyObject = null; - - if (tn == ActiveSolution) - UpdateVisualSolutionName(); - } - } - - private void RemoveAction(TreeNode tn) - { - if (GetTypeSL(tn) == TypeSL.Project) - { - SaveItemFile(tn); // saving pending updates!! - if (ActiveProject == tn) - ActiveProject = null; - // Does not!!!! delete, only remove form project - tn.Remove(); - UpdateVisualSolutionName(); - this.m_dirty = true; - } - } - - private void RenameAction(TreeNode tn) - { - RealTag realTag = (RealTag)tn.Tag; - if (IsInventoryContainer(tn)) - { - if(realTag.ItemType != TypeSL.Folder) - return; - } - - if (realTag.ItemType == TypeSL.Solution) - tn.Text = this.NameSolution; - this.treeView1.LabelEdit = true; - tn.BeginEdit(); - } - - private void CutAction(TreeNode tn) - { - if (CutObject != null) - CutObject.ForeColor = Color.Empty; - CutObject = tn; - tn.ForeColor = Color.DarkGray; - } - - private void CopyAction(TreeNode tn) - { - if (CutObject != null) - { - CutObject.ForeColor = Color.Empty; - CutObject = null; - } - CopyObject = tn; - } - - public void AddNewProjectAction() - { - string strNewProjectName = GetNewDirectoryName(ActiveSolution, "Project{0}"); - string strProjectPath = Path.Combine(DirectorySolution, strNewProjectName); - AddItem(TypeSL.Project, strNewProjectName, Guid.NewGuid(), strProjectPath); - } - - private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) - { - timer.Stop(); - timer.Tag = null; - - Guid guid = ((RealTag)e.Node.Tag).Guid; - string path = GetFullPath(e.Node); - - // already opened - EditForm editForm = GetEditForm(guid); - if (editForm != null) - { - TabPage tabPage = editForm.Tag as TabPage; - if (tabPage == null) - { - if(editForm.Visible) - { - editForm.Focus(); - } else - { - // Check if there's a related expanded lsl or lsli opened. If so, focus it. Else open the lsli. - EditForm expandedForm = (EditForm)parent.GetForm(Helpers.LSLIPathHelper.GetExpandedTabName(Helpers.LSLIPathHelper.CreateExpandedScriptName(Path.GetFileName(path)))); - EditForm collapsedForm = (EditForm)parent.GetForm(Helpers.LSLIPathHelper.CreateCollapsedScriptName(Path.GetFileName(path))); - if (expandedForm != null && expandedForm.Visible) - { - expandedForm.Focus(); - } - else if (collapsedForm != null && collapsedForm.Visible) - { - collapsedForm.Focus(); - } - else - { - // Open a new one - if (GetTypeSL(e.Node) == TypeSL.Script || GetTypeSL(e.Node) == TypeSL.LSLIScript) - { - this.parent.OpenFile(GetFullPath(e.Node), guid, true); - } - } - } - } - else - { - TabControl tabControl = tabPage.Parent as TabControl; - if(tabControl != null) - tabControl.SelectedTab = tabPage; - } - return; - } - - // Check if it's an lsli that has an open expanded form - if (GetTypeSL(e.Node) == TypeSL.Script || GetTypeSL(e.Node) == TypeSL.LSLIScript) - { - if (Helpers.LSLIPathHelper.IsLSLI(path)) { - // Check if there's a related expanded lsl opened. If so, focus it. Else open the lsli. - EditForm expandedForm = (EditForm)parent.GetForm(Helpers.LSLIPathHelper.GetExpandedTabName(Helpers.LSLIPathHelper.CreateExpandedScriptName(Path.GetFileName(path)))); - EditForm collapsedForm = (EditForm)parent.GetForm(Helpers.LSLIPathHelper.CreateCollapsedScriptName(Path.GetFileName(path))); - if (expandedForm != null && expandedForm.Visible) - { - expandedForm.Focus(); - } else if(collapsedForm != null && collapsedForm.Visible) - { - collapsedForm.Focus(); - } else - { - // Open a new one - if (GetTypeSL(e.Node) == TypeSL.Script || GetTypeSL(e.Node) == TypeSL.LSLIScript) - { - this.parent.OpenFile(GetFullPath(e.Node), guid, true); - } - } - } else - { - // Open a new one - if (GetTypeSL(e.Node) == TypeSL.Script || GetTypeSL(e.Node) == TypeSL.LSLIScript) - { - this.parent.OpenFile(GetFullPath(e.Node), guid, true); - } - } - } - - if (GetTypeSL(e.Node) == TypeSL.Notecard) - this.parent.OpenFile(GetFullPath(e.Node), guid, false); - } - private void PropertiesActions(TreeNode tn) - { - SolutionExplorer.RealTag realTag = (SolutionExplorer.RealTag)tn.Tag; - Guid oldGuid = realTag.Guid; - GuidProperty prop = new GuidProperty(realTag); - - if (prop.ShowDialog(this) == DialogResult.OK) - { - EditForm editForm = GetEditForm(oldGuid); - if (editForm != null) - editForm.guid = prop.guid; - realTag.Guid = prop.guid; - tn.Tag = realTag; - ShowProperties(tn); - } - } - private void ShowProperties(TreeNode tn) - { - RealTag realTag = (RealTag)tn.Tag; - - this.listView1.Items.Clear(); - - ListViewItem lvi = new ListViewItem("Name"); - lvi.SubItems.Add(tn.Text); - this.listView1.Items.Add(lvi); - - if (realTag.Description != string.Empty) - { - lvi = new ListViewItem("Description"); - lvi.SubItems.Add(realTag.Description); - this.listView1.Items.Add(lvi); - } - - lvi = new ListViewItem("Guid"); - lvi.SubItems.Add(realTag.Guid.ToString()); - this.listView1.Items.Add(lvi); - - lvi = new ListViewItem("Path"); - lvi.SubItems.Add(GetFullPath(tn)); - this.listView1.Items.Add(lvi); - - lvi = new ListViewItem("Modified"); - FileInfo fi = new FileInfo(GetFullPath(tn)); - lvi.SubItems.Add(fi.LastWriteTime.ToString("s")); - this.listView1.Items.Add(lvi); - - } - - private void SetAsActiveProject(TreeNode tn) - { - ActiveObject = null; - ActiveProject = tn; - foreach (TreeNode child in ActiveProject.Nodes) - { - if (GetTypeSL(child) == TypeSL.Object) - { - ActiveObject = child; - break; - } - } - this.treeView1.Invalidate(); - } - - private void SetAsActiveBox(TreeNode tn) - { - ActiveProject = null; - ActiveObject = tn; - if (GetTypeSL(ActiveObject.Parent) == TypeSL.Project) - ActiveProject = ActiveObject.Parent; - this.treeView1.Invalidate(); - } - - private void DebugStart() - { - MessageBox.Show("TODO: Debug start", "Todo"); - } - - private void AddExistingObject(TreeNode tn) - { - MessageBox.Show("TODO: Add Existing Object", "Todo"); - } - - private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) - { - ShowProperties(e.Node); - } - - private TreeNode FindGuid(TreeNode treeNode, Guid guid) - { - if (treeNode == null) - return null; - foreach (TreeNode tn in treeNode.Nodes) - { - RealTag rt = (RealTag)tn.Tag; - if (rt.Guid == guid) - return tn; - TreeNode found = FindGuid(tn, guid); - if (found != null) - return found; - } - return null; - } - - private delegate bool IHateThisToo(Guid guid, string name); - private delegate string IHateThis(Guid guid); - public string GetObjectName(Guid guid) - { - if (this.treeView1.InvokeRequired) - return this.treeView1.Invoke(new IHateThis(GetObjectName), new object[] { guid }).ToString(); - TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); - if (treeNode == null) - return string.Empty; - TreeNode parent = treeNode.Parent; - RealTag realTag = (RealTag)parent.Tag; - if (realTag.ItemType != TypeSL.Object) - return string.Empty; - return realTag.Name; - } - - public bool SetObjectName(Guid guid, string name) - { - if (this.treeView1.InvokeRequired) - return (bool)this.treeView1.Invoke(new IHateThisToo(SetObjectName), new object[] { guid, name }); - TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); - if (treeNode == null) - return false; - TreeNode parent = treeNode.Parent; - RealTag realTag = (RealTag)parent.Tag; - if (realTag.ItemType != TypeSL.Object) - return false; - - string strBackup = parent.Text; - string strSource = GetFullPath(parent); - parent.Text = name; - string strDestination = GetFullPath(parent); - - try - { - Directory.Move(strSource, strDestination); - realTag.Name = name; - parent.Tag = realTag; - parent.Text = name; - return true; - } - catch - { - parent.Text = strBackup; - return false; - } - } - - public string GetObjectDescription(Guid guid) - { - if (this.treeView1.InvokeRequired) - return this.treeView1.Invoke(new IHateThis(GetObjectDescription), new object[] { guid }).ToString(); - TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); - if (treeNode == null) - return string.Empty; - TreeNode parent = treeNode.Parent; - RealTag realTag = (RealTag)parent.Tag; - if (realTag.ItemType != TypeSL.Object) - return string.Empty; - return realTag.Description; - } - - public bool SetObjectDescription(Guid guid, string description) - { - if (this.treeView1.InvokeRequired) - return (bool)this.treeView1.Invoke(new IHateThisToo(SetObjectDescription), new object[] { guid, description }); - TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); - if (treeNode == null) - return false; - TreeNode parent = treeNode.Parent; - RealTag realTag = (RealTag)parent.Tag; - if (realTag.ItemType != TypeSL.Object) - return false; - realTag.Description = description; - parent.Tag = realTag; - return true; - } - - - public string GetScriptName(Guid guid) - { - if (this.treeView1.InvokeRequired) - return this.treeView1.Invoke(new IHateThis(GetScriptName), new object[] { guid }).ToString(); - TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); - if (treeNode == null) - return string.Empty; - return treeNode.Text; - } - - public string GetKey(Guid guid) - { - if (this.treeView1.InvokeRequired) - return this.treeView1.Invoke(new IHateThis(GetKey), new object[] { guid }).ToString(); - - TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); - if (treeNode == null) - return string.Empty; - TreeNode parent = treeNode.Parent; - RealTag rt = (RealTag)parent.Tag; - return rt.Guid.ToString(); - } - - private TypeSL GetTypeSLFromInteger(int type) - { - TypeSL typeSL = TypeSL.Unknown; - switch (type) - { - case -1: //INVENTORY_ALL -1 all inventory items - return TypeSL.Unknown; - case 20: //INVENTORY_ANIMATION 20 animations 0x14 - return TypeSL.Animation; - case 13: //INVENTORY_BODYPART 13 body parts 0x0D - return TypeSL.Hair | TypeSL.Skin | TypeSL.Eyes | TypeSL.Shape; - case 5: //INVENTORY_CLOTHING 5 clothing 0x05 - return TypeSL.Jacket | TypeSL.Gloves | TypeSL.Pants | TypeSL.Shirt | TypeSL.Shoes | TypeSL.Skirt | TypeSL.Socks | TypeSL.Underpants | TypeSL.Undershirt; - case 21: //INVENTORY_GESTURE 21 gestures 0x15 - return TypeSL.Gesture; - case 3: //INVENTORY_LANDMARK 3 landmarks 0x03 - return TypeSL.Landmark; - case 7: //INVENTORY_NOTECARD 7 notecards 0x07 - return TypeSL.Notecard; - case 6: //INVENTORY_OBJECT 6 objects 0x06 - return TypeSL.Object; - case 10: //INVENTORY_SCRIPT 10 scripts 0x0A - return TypeSL.Script; - case 1: //INVENTORY_SOUND 1 sounds 0x01 - return TypeSL.Sound; - case 0: //INVENTORY_TEXTURE 0 textures 0x00 - return TypeSL.Texture; - default: - break; - } - return typeSL; - } - - private delegate void DelegateRemoveInventory(Guid guid, SecondLife.String name); - public void RemoveInventory(Guid guid, SecondLife.String name) - { - if (this.treeView1.InvokeRequired) - { - this.treeView1.Invoke(new DelegateRemoveInventory(RemoveInventory), new object[] { guid, name }); - return; - } - - TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); - if (treeNode == null) - return; - TreeNode parent = treeNode.Parent; - for (int i = 0; i < parent.Nodes.Count; ++i) - { - if (parent.Nodes[i].Text == name) - { - parent.Nodes.RemoveAt(i); - return; - } - } - } - private delegate string DelegateGetInventoryName(Guid guid, int type, int number); - public string GetInventoryName(Guid guid, int type, int number) - { - if (this.treeView1.InvokeRequired) - { - return this.treeView1.Invoke(new DelegateGetInventoryName(GetInventoryName), new object[] { guid, type, number }).ToString(); - } - - TypeSL typeSL = GetTypeSLFromInteger(type); - - TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); - if (treeNode == null) - return string.Empty; - TreeNode parent = treeNode.Parent; - int intI=0; - foreach (TreeNode tn in parent.Nodes) - { - if (typeSL == TypeSL.Unknown || (typeSL & GetTypeSL(tn) ) == GetTypeSL(tn)) - { - if (intI == number) - return tn.Text; - intI++; - } - } - return string.Empty; - } - - private delegate string DelegateGetInventoryKey(Guid guid, string name); - public string GetInventoryKey(Guid guid, string name) - { - if (this.treeView1.InvokeRequired) - { - return this.treeView1.Invoke(new DelegateGetInventoryKey(GetInventoryKey), new object[] { guid, name }).ToString(); - } - - TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); - if (treeNode == null) - return string.Empty; - TreeNode parent = treeNode.Parent; - foreach (TreeNode tn in parent.Nodes) - { - if (tn.Text == name) - { - RealTag rt = (RealTag)tn.Tag; - return rt.Guid.ToString(); - } - } - return string.Empty; - } - - private delegate int DelegateGetInventoryType(Guid guid, string name); - public int GetInventoryType(Guid guid, string name) - { - if (this.treeView1.InvokeRequired) - { - return (int)this.treeView1.Invoke(new DelegateGetInventoryType(GetInventoryType), new object[] { guid, name }); - } - - TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); - if (treeNode == null) - return SecondLife.INVENTORY_NONE; - TreeNode parent = treeNode.Parent; - foreach (TreeNode tn in parent.Nodes) - { - if (tn.Text == name) - { - RealTag rt = (RealTag)tn.Tag; - switch (rt.ItemType) - { - case TypeSL.Texture: - return SecondLife.INVENTORY_TEXTURE; - case TypeSL.Sound: - return SecondLife.INVENTORY_SOUND; - case TypeSL.Landmark: - return SecondLife.INVENTORY_LANDMARK; - case TypeSL.Gloves: - case TypeSL.Jacket: - case TypeSL.Pants: - case TypeSL.Shirt: - case TypeSL.Shoes: - case TypeSL.Skirt: - case TypeSL.Socks: - case TypeSL.Underpants: - case TypeSL.Undershirt: - return SecondLife.INVENTORY_CLOTHING; - case TypeSL.Object: - return SecondLife.INVENTORY_OBJECT; - case TypeSL.Script: - return SecondLife.INVENTORY_SCRIPT; - case TypeSL.Animation: - return SecondLife.INVENTORY_ANIMATION; - case TypeSL.Eyes: - case TypeSL.Hair: - case TypeSL.Shape: - case TypeSL.Skin: - return SecondLife.INVENTORY_BODYPART; - case TypeSL.Gesture: - return SecondLife.INVENTORY_GESTURE; - case TypeSL.Notecard: - return SecondLife.INVENTORY_NOTECARD; - default: - return SecondLife.INVENTORY_NONE; - } - } - } - return SecondLife.INVENTORY_NONE; - } - - private delegate int DelegateGetInventoryNumber(Guid guid, int type); - public int GetInventoryNumber(Guid guid, int type) - { - if (this.treeView1.InvokeRequired) - { - return (int)this.treeView1.Invoke(new DelegateGetInventoryNumber(GetInventoryNumber), new object[] { guid, type }); - } - - TypeSL typeSL = GetTypeSLFromInteger(type); - - TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); - if (treeNode == null) - return -1; - TreeNode parent = treeNode.Parent; - int intI = 0; - foreach (TreeNode tn in parent.Nodes) - { - if (typeSL == TypeSL.Unknown || (typeSL & GetTypeSL(tn)) == GetTypeSL(tn)) - intI++; - } - return intI; - } - - private delegate string DelegateGetPath(Guid guid, string name); - public string GetPath(Guid guid, string name) - { - if (this.treeView1.InvokeRequired) - { - return this.treeView1.Invoke(new DelegateGetPath(GetPath), new object[] { guid, name }).ToString(); - } - - TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); - if (treeNode == null) - return string.Empty; - TreeNode parent = treeNode.Parent; - foreach (TreeNode tn in parent.Nodes) - { - if (tn.Text == name || ((RealTag)tn.Tag).Guid.ToString() == name) - return GetFullPath(tn); - } - return string.Empty; - } - - private delegate Guid GetParentGuidDelegate(Guid guid); - public Guid GetParentGuid(Guid guid) - { - if (this.treeView1.InvokeRequired) - { - return (Guid)this.treeView1.Invoke(new GetParentGuidDelegate(GetParentGuid), new object[] { guid }); - } - TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); - if (treeNode == null) - return Guid.Empty; - TreeNode parent = treeNode.Parent; - // Only return parent when it is an object - if (((RealTag)parent.Tag).ItemType != TypeSL.Object) - return guid; - else // Return object itself, has no parent object - return ((RealTag)parent.Tag).Guid; - } - - private delegate Guid GetGuidFromObjectNrDelegate(Guid ObjectGuid, int intLinkNum); - public Guid GetGuidFromObjectNr(Guid ObjectGuid, int intLinkNum) - { - if (this.treeView1.InvokeRequired) - { - return (Guid)this.treeView1.Invoke(new GetGuidFromObjectNrDelegate(GetGuidFromObjectNr), new object[] { ObjectGuid, intLinkNum }); - } - TreeNode treeNode = FindGuid(this.treeView1.TopNode, ObjectGuid); - if (treeNode == null) - return Guid.Empty; - int intNr = 0; - foreach (TreeNode tn in treeNode.Nodes) - { - RealTag realTag = (RealTag)tn.Tag; - if (realTag.ItemType == TypeSL.Object) - { - intNr++; - if (intNr == intLinkNum) - return realTag.Guid; - } - } - return Guid.Empty; // no objects found - } - - private void GetScriptsFromNode(TreeNode treeNode, List list, bool recursive) - { - foreach (TreeNode tn in treeNode.Nodes) - { - RealTag realTag = (RealTag)tn.Tag; - if (realTag.ItemType == TypeSL.Script) - list.Add(realTag.Guid); - else - if (realTag.ItemType == TypeSL.Object && recursive) - GetScriptsFromNode(tn, list, recursive); - } - } - - private delegate List GetScriptsDelegate(Guid guid, bool recursive); - public List GetScripts(Guid guid, bool recursive) - { - if (this.treeView1.InvokeRequired) - return this.treeView1.Invoke(new GetScriptsDelegate(GetScripts), new object[] { guid, recursive }) as List; - - List list = new List(); - TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); - if (treeNode == null) - return list; // empty - GetScriptsFromNode(treeNode, list, recursive); - return list; - } - - private void listView1_MouseMove(object sender, MouseEventArgs e) - { - ListViewItem lvi = this.listView1.GetItemAt(e.X,e.Y); - if (lvi == null) - this.toolTip1.SetToolTip(this.listView1, ""); - else if (lvi != m_HoveredItem) - { - m_HoveredItem = lvi; - this.toolTip1.SetToolTip(this.listView1, lvi.SubItems[1].Text); - } - } - - private void treeView1_KeyDown(object sender, KeyEventArgs e) - { - if (this.treeView1.SelectedNode == null) - return; - if (e.KeyCode == Keys.ControlKey) - return; - switch (e.KeyCode) - { - case Keys.F2: - RenameAction(this.treeView1.SelectedNode); - e.Handled = true; - break; - case Keys.Delete: - DeleteAction(this.treeView1.SelectedNode); - e.Handled = true; - break; - case Keys.C: - if (e.Control) - { - CopyAction(this.treeView1.SelectedNode); - e.SuppressKeyPress = true; - e.Handled = true; - } - break; - case Keys.V: - if (e.Control) - { - PasteAction(this.treeView1.SelectedNode); - e.SuppressKeyPress = true; - e.Handled = true; - } - break; - case Keys.X: - if (e.Control) - { - CutAction(this.treeView1.SelectedNode); - e.SuppressKeyPress = true; - e.Handled = true; - } - break; - default: - break; - } - } - - private void SvnImport() - { - SvnAguments svnArguments = new SvnAguments(); - svnArguments.Text = "SVN import"; - svnArguments.Comment = "Initial import"; - if (svnArguments.ShowDialog(this) == DialogResult.OK) - { - string strRepository = svnArguments.Repository; - string strMessage = svnArguments.Comment; - - strMessage = strMessage.Replace('"', '\''); - - string strNameOfDirectory = Path.GetFileName(this.DirectorySolution); - - if (!strRepository.EndsWith(strNameOfDirectory)) - { - if (!strRepository.EndsWith("/")) - strRepository += "/"; - strRepository += strNameOfDirectory; - } - - this.Repository = strRepository; - this.SaveSolutionFile(); - - // import "c:\temp\a\b \d\dir" "file:///d:/temp/svn/...." -m "Initital " - string strArguments = string.Format("import \"{0}\" \"{1}\" -m \"{2}\"", this.DirectorySolution, this.Repository, strMessage); - Svn svn = new Svn(); - if (!svn.Execute(strArguments, false, true)) - return; - try - { - Directory.Move(this.DirectorySolution, this.DirectorySolution + ".bak"); - svn.Execute("checkout \"" + this.Repository + "\" \"" + this.DirectorySolution + "\"", false, true); - } - catch // (Exception exception) - { - MessageBox.Show("Can't rename Directory", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - } - - private void SvnUpdate() - { - Svn svn = new Svn(); - svn.Execute("update \"" + this.DirectorySolution + "\"",true, true); - } - - private void SvnCommit() - { - SvnAguments svnArguments = new SvnAguments(); - svnArguments.Text = "SVN Commit"; - svnArguments.ReadOnly = true; - svnArguments.Repository = this.Repository; - svnArguments.Comment = ""; - if (svnArguments.ShowDialog(this) == DialogResult.OK) - { - Svn svn = new Svn(); - svn.Execute("commit \"" + this.DirectorySolution + "\" -m \"" + svnArguments.Comment+ "\"", true, true); - } - } - - private void cms_MouseClick(object sender, MouseEventArgs e) - { - ContextMenuStrip cms = sender as ContextMenuStrip; - TreeNode tn = cms.Tag as TreeNode; - ToolStripMenuItem tsi = cms.GetItemAt(e.X, e.Y) as ToolStripMenuItem; - - if (tsi == null) - return; // TODO, why is this?? - - if (tsi.DropDownItems.Count == 0) - cms.Visible = false; - this.treeView1.Invalidate(tn.Bounds); - - switch (tsi.Name) - { - case "SvnImport": - SvnImport(); - break; - case "SvnUpdate": - SvnUpdate(); - break; - case "SvnCommit": - SvnCommit(); - break; - case "CloseSolution": - CloseSolution(); - break; - case "AddExistingFile": - AddExistingFile(tn); - break; - case "AddExistingProject": - AddExistingProject(); - break; - case "AddNewProject": - AddNewProjectAction(); - break; - case "AddNewObject": - AddNewContainer(tn, TypeSL.Object, GetNewDirectoryName(tn, "Object{0}"), Guid.NewGuid()); - break; - case "AddNewFolder": - AddNewContainer(tn, TypeSL.Folder, GetNewDirectoryName(tn, "Folder{0}"), Guid.NewGuid()); - break; - case "AddInventory": - EmptyInventory(tn); - break; - case "SetAsActiveProject": - SetAsActiveProject(tn); - break; - case "SetAsActiveBox": - SetAsActiveBox(tn); - break; - case "Cut": - CutAction(tn); - break; - case "Copy": - CopyAction(tn); - break; - case "Delete": - DeleteAction(tn); - break; - case "Paste": - PasteAction(tn); - break; - case "Remove": - RemoveAction(tn); - break; - case "Rename": - RenameAction(tn); - break; - case "Add": - // via dropdownitems - return; - case "ChangeFileType": - // via dropdownitems - return; - case "Properties": - PropertiesActions(tn); - break; - case "DebugStart": - DebugStart(); - break; - case "AddExistingObject": - AddExistingObject(tn); - break; - default: - MessageBox.Show("cms_MouseClick: " + tsi.Text, "TODO!!"); - break; - } - } - } - public class NodeSorter : System.Collections.IComparer - { - public int Compare(object x, object y) - { - TreeNode tx = x as TreeNode; - TreeNode ty = y as TreeNode; - return string.Compare(tx.Text, ty.Text); - } - } - - -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Text; +using System.Windows.Forms; +using System.Xml; + +namespace LSLEditor.Solution +{ + public partial class SolutionExplorer : ToolWindow + { + public enum TypeSL : int + { + // Inventory containers + Inventory = 0, + Animations = 1, + Body_Parts = 2, + Calling_Cards = 3, + Clothes = 4, + Gestures = 5, + Landmarks = 6, + Lost_And_Found = 7, + Notecards = 8, + Objects = 9, + Photo_Album = 10, + Scripts = 11, + Sounds = 12, + Textures = 13, + Trash = 14, + Folder = 15, + + // Special containers + Solution = 16, + Project = 17, + Prim = 18, // not used, use Object instead + Unknown = 19, + + // Normal items!! + + // Animations + Animation = 20, + + Gesture = 21, + Landmark = 22, + Notecard = 23, + Object = 24, // This is a normal container item!!! + + // Photo Album + Snapshot = 25, + + Script = 26, + LSLIScript = 42, + Sound = 27, + Texture = 28, + + // Body parts + Eyes = 29, + Hair = 30, + Shape = 31, + Skin = 32, + + // Clothes + Gloves = 33, + Jacket = 34, + Pants = 35, + Shirt = 36, + Shoes = 37, + Skirt = 38, + Socks = 39, + Underpants = 40, + Undershirt = 41 + } + private TypeSL[] BodyPartsTypes = + { + TypeSL.Eyes, + TypeSL.Hair, + TypeSL.Shape, + TypeSL.Skin + }; + private TypeSL[] ClothesTypes = + { + TypeSL.Gloves, + TypeSL.Jacket, + TypeSL.Pants, + TypeSL.Shirt, + TypeSL.Shoes, + TypeSL.Skirt, + TypeSL.Socks, + TypeSL.Underpants, + TypeSL.Undershirt + }; + private TypeSL[] FilesTypes = + { + TypeSL.Animation, + TypeSL.Gesture, + TypeSL.Landmark , + TypeSL.Notecard, + TypeSL.Snapshot, + TypeSL.Object, + TypeSL.Script, + TypeSL.LSLIScript, + TypeSL.Sound, + TypeSL.Texture + }; + + public struct RealTag + { + public TypeSL ItemType; + public string Name; + public string Description; + public Guid Guid; + public string Path; + + public RealTag(TypeSL ItemType, string Name, Guid Guid) + { + this.ItemType = ItemType; + this.Name = Name; + this.Description = string.Empty; + this.Guid = Guid; + this.Path = null; + } + + public RealTag(TypeSL ItemType,string Name, Guid Guid, string Path) + { + this.ItemType = ItemType; + this.Name = Name; + this.Description = string.Empty; + this.Guid = Guid; + this.Path = Path; + } + } + + public string DirectorySolution; + public string NameSolution; + public string Repository; + + private TreeNode ActiveSolution; + private TreeNode ActiveProject; + private TreeNode ActiveObject; + + private TreeNode CutObject; + private TreeNode CopyObject; + + public LSLEditorForm parent; + + private SolidBrush brushHighLightBackground; + private SolidBrush brushNormalForeColor; + private SolidBrush brushCutForeColor; + private SolidBrush brushBackColor; + private Pen penWhite; + private Pen penBackColor; + + private ImageList imageList1; + + private OpenFileDialog openFileDialog1; + + private Timer timer; + + private bool m_dirty; + + private ListViewItem m_HoveredItem; + private ToolTip toolTip1; + + + public bool IsDirty + { + get + { + return m_dirty; + } + } + + public SolutionExplorer() + { + InitializeComponent(); + + this.Repository = null; + + this.toolTip1 = new ToolTip(); + + this.m_dirty = false; + + this.components = new System.ComponentModel.Container(); + + imageList1 = new ImageList(); + imageList1.TransparentColor = Color.Transparent; + for (int intI = 0; intI <= 42; intI++)//41 + { + TypeSL typeSL = (TypeSL)intI; + imageList1.Images.Add(intI.ToString(), new Bitmap(typeof(LSLEditorForm), "ImagesSolutionExplorer." + typeSL.ToString().Replace("_", " ") + ".gif")); + } + + // take care of this as an property + //this.parent = parent; + + this.brushHighLightBackground = new SolidBrush(Color.FromArgb(0xff, 0x6d, 0x6e, 0x6f)); + this.brushNormalForeColor = new SolidBrush(Color.FromArgb(0xff, 0xff, 0xff, 0xff)); + this.brushCutForeColor = new SolidBrush(Color.FromArgb(0xff, Color.DarkGray)); + this.brushBackColor = new SolidBrush(Color.FromArgb(0xff, 0x3e, 0x3e, 0x3e)); + this.penWhite = new Pen(Color.White); + this.penBackColor = new Pen(this.brushBackColor); + + + this.treeView1.ImageList = imageList1; + this.treeView1.ShowRootLines = false; // just 1 root + this.treeView1.ForeColor = Color.White; + this.treeView1.BackColor = Color.FromArgb(0xff, 0x3e, 0x3e, 0x3e); + this.treeView1.LabelEdit = false; + this.treeView1.BeforeCollapse += new TreeViewCancelEventHandler(treeView1_BeforeCollapse); + this.treeView1.DrawMode = TreeViewDrawMode.OwnerDrawText; + this.treeView1.DrawNode += new DrawTreeNodeEventHandler(treeView1_DrawNode); + this.treeView1.AfterLabelEdit += new NodeLabelEditEventHandler(treeView1_AfterLabelEdit); + this.treeView1.MouseDown += new MouseEventHandler(treeView1_MouseDown); + + this.treeView1.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeView1_NodeMouseDoubleClick); + + this.treeView1.MouseUp += new MouseEventHandler(treeView1_MouseUp); + + this.treeView1.TreeViewNodeSorter = new NodeSorter(); + + this.listView1.Dock = DockStyle.Fill; + this.listView1.View = View.Details; + this.listView1.HeaderStyle = ColumnHeaderStyle.None; + //this.listView1.Scrollable = false; + + this.listView1.GridLines = true; + this.listView1.Columns.Add("Name",60); + this.listView1.Columns.Add("Value",250); + + // for disposing + this.timer = new Timer(this.components); + this.timer.Interval = 250; + this.timer.Tick += new EventHandler(timer_Tick); + + this.openFileDialog1 = new OpenFileDialog(); + } + + public string GetCurrentSolutionPath() + { + if (ActiveSolution == null) + return null; + if (DirectorySolution == null) + return null; + if (NameSolution == null) + return null; + + return Path.Combine(DirectorySolution, NameSolution + ".sol"); + } + + + public string GetProjectName(Guid guid) + { + TreeNode tn = FindGuid(this.treeView1.TopNode, guid); + if (tn != null) + { + while (tn != this.treeView1.TopNode) + { + tn = tn.Parent; + if (GetTypeSL(tn) == TypeSL.Project) + return tn.Text; + } + } + return ""; + } + + private void timer_Tick(object sender, EventArgs e) + { + timer.Stop(); + RenameAction(this.treeView1.SelectedNode); + } + + private int NumberOfProjects() + { + if (ActiveSolution == null) + return 0; + int intProjects = 0; + foreach (TreeNode tn in ActiveSolution.Nodes) + { + if (GetTypeSL(tn) == TypeSL.Project) + intProjects++; + } + return intProjects; + } + + private bool HasInventory() + { + foreach (TreeNode tn in ActiveSolution.Nodes) + { + if (GetTypeSL(tn) == TypeSL.Inventory) + return true; + } + return false; + } + + private void EmptyInventory(TreeNode parentNode) + { + this.m_dirty = true; + TreeNode treeNode = new TreeNode("Inventory", (int)TypeSL.Inventory, (int)TypeSL.Inventory); + string strInventoryPath = Path.Combine(DirectorySolution, "Inventory"); + treeNode.Tag = new RealTag(TypeSL.Inventory, "Inventory", Guid.NewGuid(), strInventoryPath); + parentNode.Nodes.Insert(0,treeNode); + for (int intI = 1; intI < 15; intI++) + { + TypeSL typeSL = (TypeSL)intI; + string strName = typeSL.ToString().Replace('_', ' '); + TreeNode tn = new TreeNode(strName, intI, intI); + tn.Tag = new RealTag(typeSL, strName, Guid.NewGuid()); + treeNode.Nodes.Add(tn); + } + } + + private EditForm GetEditForm(Guid guid) + { + LSLEditorForm lslEditorForm = this.parent; + foreach (Form form in lslEditorForm.Children) + { + EditForm editForm = form as EditForm; + if (editForm == null || editForm.IsDisposed) + continue; + if (editForm.guid == guid) + return editForm; + } + return null; + } + + public void CloseSolution() + { + if (this.ActiveSolution == null) + return; + + this.parent.StopSimulator(); + + if (this.parent.CloseAllOpenWindows()) + { + SaveSolutionFile(); + + this.ActiveProject = null; + this.ActiveSolution = null; + this.ActiveObject = null; + + this.m_dirty = false; + + this.treeView1.Nodes.Clear(); + + this.listView1.Items.Clear(); + + if(!Properties.Settings.Default.ShowSolutionExplorer) + this.parent.ShowSolutionExplorer(false); + this.parent.SolutionItemsFileMenu(false); + } + } + + public bool CreateNew(string strNameProject,string strDirectory,string strNameSolution,bool blnCreateSolutionDirectory) + { + DirectorySolution = Path.Combine(strDirectory,strNameSolution); + + string strSolutionFileName = Path.Combine(DirectorySolution, strNameSolution + ".sol"); + + if(File.Exists(strSolutionFileName)) + { + MessageBox.Show("Solution file already exists", "Create new Solution", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + AddSolution(strNameSolution); + + string strProjectPath; + if (blnCreateSolutionDirectory) + strProjectPath = Path.Combine(DirectorySolution, strNameProject); + else + strProjectPath = DirectorySolution; + + // made active, if only project + AddItem(TypeSL.Project,strNameProject, Guid.NewGuid() , strProjectPath); + + return true; + } + + public void AddExistingProject() + { + this.openFileDialog1.Multiselect = false; + this.openFileDialog1.FileName = ""; + this.openFileDialog1.Filter = "LSLEditor Project file (*.prj)|*.prj|All Files (*.*)|*.*"; + if (this.openFileDialog1.ShowDialog(this) == DialogResult.OK) + { + if (File.Exists(this.openFileDialog1.FileName)) + LoadItem(this.openFileDialog1.FileName,false); + } + } + + #region UserInterface stuff + + // disable root solution collapse (there is no + sign) + void treeView1_BeforeCollapse(object sender, TreeViewCancelEventArgs e) + { + e.Cancel = (e.Node == this.ActiveSolution); + } + + void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e) + { + if (e.Node.IsEditing) + return; + + if (e.Bounds.Height == 0) + return; + + Font font; + if (e.Node == ActiveProject || e.Node == ActiveObject) + font = new Font(this.treeView1.Font, FontStyle.Bold); + else + font = new Font(this.treeView1.Font, FontStyle.Regular); + + // Draw background + SizeF sizeF = e.Graphics.MeasureString(e.Node.Text, font); + Rectangle rect = new Rectangle(e.Bounds.Location, new Size((int)sizeF.Width + 5, e.Bounds.Height - 1)); + + if ((e.State & TreeNodeStates.Selected) != 0) + { + e.Graphics.FillRectangle(brushHighLightBackground, rect); + e.Graphics.DrawRectangle(penWhite, rect); + } + else + { + e.Graphics.FillRectangle(brushBackColor, rect); + e.Graphics.DrawRectangle(penBackColor, rect); + } + + // Draw text + Point point = new Point(e.Bounds.Location.X, e.Bounds.Location.Y + 2); + if (e.Node.ForeColor != Color.Empty) + e.Graphics.DrawString(e.Node.Text, font, brushCutForeColor, point); + else + e.Graphics.DrawString(e.Node.Text, font, brushNormalForeColor, point); + + // Clean up + font.Dispose(); + } + + void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) + { + this.treeView1.LabelEdit = false; + + if (e.Label == null || e.Label.Trim() == "") + { + e.CancelEdit = true; + return; + } + + // check for illegal chars!! + string strLabel = e.Label; + + foreach (char chrF in e.Label.ToCharArray()) + { + foreach (char chrInvalid in Path.GetInvalidFileNameChars()) + { + if (chrF == chrInvalid) + { + MessageBox.Show("Char '" + chrInvalid + "' is not allowed", "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); + e.CancelEdit = true; + return; + } + } + } + + string strBackup = e.Node.Text; + string strSource = GetFullPath(e.Node); + e.Node.Text = e.Label; + string strDestination = GetFullPath(e.Node); + + if (e.Node == ActiveSolution) + { + NameSolution = e.Label; + UpdateVisualSolutionName(); + string strOldSolutionFile = Path.GetFullPath(Path.Combine(strSource, strBackup + ".sol")); + string strNewSolutionFile = Path.GetFullPath(Path.Combine(strDestination, NameSolution + ".sol")); + + if (File.Exists(strNewSolutionFile) && string.Compare(strOldSolutionFile, strNewSolutionFile, true) != 0) + { + if (MessageBox.Show("Destination solution exists! overwrite?", "Oops...", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes) + { + e.Node.Text = strBackup; + e.CancelEdit = true; + return; + } + try + { + File.Delete(strNewSolutionFile); + } + catch (Exception exception) + { + MessageBox.Show("Error: " + exception.Message, "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); + e.Node.Text = strBackup; + e.CancelEdit = true; + return; + } + } + + if(File.Exists(strOldSolutionFile)) + File.Move(strOldSolutionFile, strNewSolutionFile); + ShowProperties(ActiveSolution); + + e.CancelEdit = true; + return; + } + + // source and destination are the same, cancel it all (file or directory) + if (string.Compare(strSource, strDestination, true) == 0) + { + e.Node.Text = strBackup; + e.CancelEdit = true; + return; + } + + + // rename file + if (File.Exists(strSource)) + { + if (File.Exists(strDestination)) + { + if (MessageBox.Show("Destination file exists! overwrite?", "Oops...", MessageBoxButtons.YesNo , MessageBoxIcon.Warning) != DialogResult.Yes) + { + e.Node.Text = strBackup; + e.CancelEdit = true; + return; + } + try + { + File.Delete(strDestination); + } + catch (Exception exception) + { + MessageBox.Show("Error: " + exception.Message, "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); + e.Node.Text = strBackup; + e.CancelEdit = true; + return; + } + } + try + { + File.Move(strSource, strDestination); + } + catch (Exception exception) + { + MessageBox.Show("Error: " + exception.Message, "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); + e.Node.Text = strBackup; + e.CancelEdit = true; + return; + } + + RealTag rt = (RealTag)e.Node.Tag; + string oldName = rt.Name; + rt.Name = e.Node.Text; + e.Node.Tag = rt; // save name + EditForm editForm = GetEditForm(rt.Guid); + if (editForm != null) + { + editForm.FullPathName = strDestination; // GetFullPath(e.Node); + editForm.SaveCurrentFile(); + } + + if (rt.ItemType == TypeSL.LSLIScript) + { + EditForm form = GetEditForm(rt.Guid); + if(form != null) + { + form.SaveCurrentFile(); + form.Dirty = true; + form.Show(); + + // Get the expanded version of the form + string x = Helpers.LSLIPathHelper.GetExpandedTabName(Helpers.LSLIPathHelper.CreateExpandedScriptName(oldName)); + EditForm xform = (EditForm)parent.GetForm(x); + + if (xform != null && xform.Visible) + { + string src = xform.SourceCode; + xform.Dirty = false; + xform.Close(); + form.SourceCode = src; + form.Dirty = true; + parent.ExpandForm(form); + } + } + } + + return; // rename file complete + } + + // rename directory + if (Directory.Exists(strSource)) + { + if (Directory.Exists(strDestination)) + { + if (MessageBox.Show("Destination directory exists! overwrite?", "Oops...", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes) + { + e.Node.Text = strBackup; + e.CancelEdit = true; + return; + } + try + { + Directory.Delete(strDestination, true); + } + catch (Exception exception) + { + MessageBox.Show("Error: " + exception.Message, "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); + e.Node.Text = strBackup; + e.CancelEdit = true; + return; + } + } + + try + { + Directory.Move(strSource, strDestination); + } + catch (Exception exception) + { + MessageBox.Show("Error: " + exception.Message, "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); + e.Node.Text = strBackup; + e.CancelEdit = true; + return; + } + + RealTag rt = (RealTag)e.Node.Tag; + rt.Name = e.Node.Text; + e.Node.Tag = rt; // save name + + // update all path of opened windows + foreach (Form form in this.parent.Children) + { + EditForm editForm = form as EditForm; + if (editForm == null || editForm.IsDisposed) + continue; + TreeNode tn = FindGuid(e.Node, editForm.guid); + if (tn != null) + { + editForm.FullPathName = GetFullPath(tn); + editForm.SaveCurrentFile(); + } + } + return; + } + + MessageBox.Show("Can not rename, source does not exist", "Oops..."); + e.Node.Text = strBackup; + e.CancelEdit = true; + } + #endregion + + private bool IsItem(TreeNode treeNode) + { + TypeSL typeSL = GetTypeSL(treeNode); + return ((int)typeSL >= 20); + } + + private bool IsItemAndNotObject(TreeNode treeNode) + { + TypeSL typeSL = GetTypeSL(treeNode); + int intTypeSL = (int)typeSL; + return (intTypeSL >= 20 && typeSL != TypeSL.Object); + } + + + private bool IsInventoryContainer(TreeNode treeNode) + { + TypeSL TypeSL = GetTypeSL(treeNode); + return ((int)TypeSL <= 15); + } + + private TypeSL GetTypeSL(TreeNode treeNode) + { + if (treeNode == null) + return TypeSL.Unknown; + if (treeNode.Tag == null) + return TypeSL.Unknown; + RealTag realTag = (RealTag)treeNode.Tag; + return realTag.ItemType; + } + + private string GetPath(TreeNode treeNode) + { + if (treeNode == null) + return null; + if (treeNode.Tag == null) + return null; + RealTag realTag = (RealTag)treeNode.Tag; + string strPath = realTag.Path; + if (strPath == null) + return null; + + if(strPath.EndsWith(treeNode.Text)) + return strPath; + + // Project has been renamed + strPath = Path.Combine(Path.GetDirectoryName(strPath), treeNode.Text); + realTag.Path = strPath; + treeNode.Tag = realTag; + return strPath; + } + + private string GetXml(int intDepth, TreeNode treeNode) + { + StringBuilder sb = new StringBuilder(); + RealTag realTag = (RealTag)treeNode.Tag; + string strTagName = realTag.ItemType.ToString(); + string strValue = treeNode.Text; + if (treeNode == ActiveSolution) + strValue = NameSolution; + for (int intI = 0; intI < intDepth; intI++) + sb.Append('\t'); + string strActive = ""; + string strDescription = ""; + if (treeNode == ActiveObject) + strActive = @" active=""true"""; + if (realTag.Description != string.Empty) + strDescription = @" description=""" + realTag.Description + @""""; + sb.AppendFormat("<{0} name=\"{1}\" guid=\"{2}\"{3}{4}>\r\n", strTagName, strValue, realTag.Guid, strActive, strDescription); + foreach (TreeNode childNode in treeNode.Nodes) + sb.Append(GetXml(intDepth + 1, childNode)); + for (int intI = 0; intI < intDepth; intI++) + sb.Append('\t'); + sb.AppendFormat("\r\n", strTagName); + return sb.ToString(); + } + + private string GetFullPath(TreeNode treeNode) + { + if (treeNode == ActiveSolution) + return DirectorySolution; + + TreeNode parentNode = treeNode; + string strPath = ""; + while (GetPath(parentNode) == null) + { + strPath = Path.Combine(parentNode.Text, strPath); + parentNode = parentNode.Parent; + } + strPath = Path.Combine(GetPath(parentNode), strPath); + return Path.GetFullPath(strPath); + } + + private void RecursiveLoad(TreeNode treeNode, XmlNode xmlParentNode) + { + foreach (XmlNode xmlNode in xmlParentNode.SelectNodes("./*")) + { + TypeSL typeSL = (TypeSL)Enum.Parse(typeof(TypeSL), xmlNode.Name); + + if (typeSL == TypeSL.Prim) // Old!!! + typeSL = TypeSL.Object; + + string strName = xmlNode.Attributes["name"].Value; + Guid guid = new Guid(xmlNode.Attributes["guid"].Value); + + XmlAttribute attributePath = xmlNode.Attributes["path"]; + XmlAttribute attributeDescription = xmlNode.Attributes["description"]; + int intImageIndex = (int)typeSL; + TreeNode tn = new TreeNode(strName, intImageIndex, intImageIndex); + + RealTag realTag = new RealTag(typeSL, strName, guid); + + if (attributePath != null) + realTag.Path = attributePath.Value; + if (attributeDescription != null) + realTag.Description = attributeDescription.Value; + + tn.Tag = realTag; + + XmlAttribute attributeActive = xmlNode.Attributes["active"]; + if (attributeActive != null) + { + if (attributeActive.Value == "true") + ActiveObject = tn; + } + treeNode.Nodes.Add(tn); + RecursiveLoad(tn, xmlNode); + } + } + + + private void LoadItem(string strPath, bool blnActive) + { + XmlDocument xmlItemFile = new XmlDocument(); + try + { + xmlItemFile.Load(strPath); + } + catch + { + MessageBox.Show("Not a valid item file", "Oops..."); + return; + } + foreach (XmlNode xmlItem in xmlItemFile.SelectNodes("./*")) + { + TypeSL typeSL = (TypeSL)Enum.Parse(typeof(TypeSL), xmlItem.Name); + TreeNode currentItem = AddItem(typeSL, + xmlItem.Attributes["name"].Value, + new Guid(xmlItem.Attributes["guid"].Value), + Path.GetDirectoryName(strPath)); + if (currentItem == null) + continue; + if (blnActive) + ActiveProject = currentItem; + RecursiveLoad(currentItem, xmlItem); + } + } + + public bool OpenSolution(string strPath) + { + DirectorySolution = Path.GetDirectoryName(strPath); + NameSolution = Path.GetFileNameWithoutExtension(strPath); + + XmlDocument xml = new XmlDocument(); + try + { + xml.Load(strPath); + } + catch + { + MessageBox.Show("Not a valid Solution file", "Oops..."); + this.parent.UpdateRecentProjectList(strPath, false); + return false; + } + + this.treeView1.Nodes.Clear(); + + foreach (XmlNode xmlSolution in xml.SelectNodes("//Solution")) + { + if (xmlSolution.Attributes["repository"] != null) + this.Repository = xmlSolution.Attributes["repository"].Value; + + AddSolution(xmlSolution.Attributes["name"].Value); + foreach (XmlNode xmlItem in xmlSolution.SelectNodes("./*")) + { + string strItemPath = xmlItem.Attributes["path"].Value; + if (!Path.IsPathRooted(strItemPath)) + strItemPath = Path.Combine(DirectorySolution, strItemPath); + if (!File.Exists(strItemPath)) + continue; // TODO verbose error + bool blnActive = false; + if (xmlItem.Attributes["active"] != null) + blnActive = (xmlItem.Attributes["active"].Value == "true"); + LoadItem(strItemPath,blnActive); + } + } + this.parent.ShowSolutionExplorer(true); + this.parent.SolutionItemsFileMenu(true); + this.parent.UpdateRecentProjectList(strPath,true); + this.m_dirty = false; + + return true; + } + + public bool SaveSolutionFile() + { + if (ActiveSolution == null) + return false; + if (DirectorySolution == null) + return false; + if (NameSolution == null) + return false; + + if (!Directory.Exists(DirectorySolution)) + Directory.CreateDirectory(DirectorySolution); + + string strSolutionFileName = Path.Combine(DirectorySolution, NameSolution + ".sol"); + StreamWriter sw = new StreamWriter(strSolutionFileName); + string strRepositoryAttribute; + if (this.Repository == null) + strRepositoryAttribute = ""; + else + strRepositoryAttribute = string.Format(" repository=\"{0}\"",this.Repository); + sw.WriteLine("",NameSolution,strRepositoryAttribute); + foreach (TreeNode nodeItem in ActiveSolution.Nodes) + { + RealTag realTag = (RealTag)nodeItem.Tag; + string strItemPath = SaveItemFile(nodeItem); + if (strItemPath != null) + { + // Make path relative, if it is the same as solution directory + if (strItemPath.ToLower().IndexOf(DirectorySolution.ToLower()) == 0) + strItemPath = strItemPath.Substring(DirectorySolution.Length+1); + string strActive = ""; + if (ActiveProject == nodeItem) + strActive = @" active=""true"""; + sw.WriteLine("\t", nodeItem.Text, strItemPath, strActive); + } + } + sw.WriteLine(""); + sw.Close(); + this.m_dirty = false; + + return true; + } + + private string SaveItemFile(TreeNode nodeItem) + { + string strName = nodeItem.Text; + RealTag realTag = (RealTag)nodeItem.Tag; + string strPath = realTag.Path; + + if (!Directory.Exists(strPath)) + Directory.CreateDirectory(strPath); + + string strExtension = ".prj"; + if (realTag.Name == "Inventory") + strExtension = ".inv"; + string strFilePath = Path.Combine(strPath, strName + strExtension); + StreamWriter sw = new StreamWriter(strFilePath); + sw.Write(GetXml(0, nodeItem)); + sw.Close(); + return strFilePath; + } + + private void AddSolution(string strNameSolution) + { + this.NameSolution = strNameSolution; + ActiveSolution = new TreeNode("Solution '" + strNameSolution + "'", (int)TypeSL.Solution, (int)TypeSL.Solution); + ActiveSolution.Tag = new RealTag(TypeSL.Solution, strNameSolution, Guid.NewGuid()); + this.treeView1.Nodes.Insert(0,ActiveSolution); + ActiveSolution.Expand(); + this.parent.SolutionItemsFileMenu(true); + } + + private void UpdateVisualSolutionName() + { + int intProjects = NumberOfProjects(); + ActiveSolution.Text = "Solution '" + this.NameSolution + "' (" + intProjects + " project" + ((intProjects != 1) ? "s" : "") + ")"; + } + + private bool ItemExist(Guid guid) + { + foreach (TreeNode itemNode in ActiveSolution.Nodes) + { + RealTag realTag = (RealTag)itemNode.Tag; + if (realTag.Guid == guid) + return true; + } + return false; + } + + private TreeNode AddItem(TypeSL typeSL, string strName, Guid guid, string strPath) + { + if (ItemExist(guid)) + return null; + + if (!Directory.Exists(strPath)) + Directory.CreateDirectory(strPath); + + TreeNode treeNode = new TreeNode(strName, (int)typeSL, (int)typeSL); + treeNode.Tag = new RealTag(typeSL, strName, guid, strPath); + + if (ActiveProject == null && typeSL == TypeSL.Project) + ActiveProject = treeNode; + + ActiveSolution.Nodes.Add(treeNode); + ActiveSolution.Expand(); + UpdateVisualSolutionName(); + + this.m_dirty = true; + + return treeNode; + } + + private TreeNode AddNewContainer(TreeNode parent, TypeSL typeSL, string strNewName, Guid guid) + { + if (parent == null) + return null; + + string strDirectoryContainer = Path.Combine(GetFullPath(parent), strNewName); + if (!Directory.Exists(strDirectoryContainer)) + Directory.CreateDirectory(strDirectoryContainer); + + TreeNode treeNode = new TreeNode(strNewName, (int)typeSL, (int)typeSL); + treeNode.Tag = new RealTag(typeSL, strNewName, guid); + + if (ActiveObject == null && typeSL == TypeSL.Object) + ActiveObject = treeNode; + + parent.Nodes.Add(treeNode); + parent.Expand(); + + this.m_dirty = true; + + return treeNode; + } + + + private void AddNewFile(TreeNode parent, TypeSL typeFile) + { + if (parent == null) + return; + + string strName = typeFile+"{0}"; + string strExtension = ""; + switch (typeFile) + { + case TypeSL.Script: + strExtension = ".lsl"; + break; + case TypeSL.LSLIScript: + strExtension = ".lsli"; + break; + case TypeSL.Notecard: + strExtension = ".txt"; + break; + case TypeSL.Texture: + strExtension = ".tga"; + break; + case TypeSL.Animation: + strExtension = ".ani"; + break; + case TypeSL.Gesture: + strExtension = ".ges"; + break; + case TypeSL.Landmark: + strExtension = ".lmrk"; + break; + case TypeSL.Snapshot: + strExtension = ".pic"; + break; + case TypeSL.Sound: + strExtension = ".snd"; + break; + default: + break; + } + string strNewName = GetNewFileName(parent, strName + strExtension); + + string strFilePath = Path.Combine(GetFullPath(parent), strNewName); + + if (!File.Exists(strFilePath)) + { + StreamWriter sw = new StreamWriter(strFilePath); + + switch (typeFile) + { + case TypeSL.Script: + sw.Write(AutoFormatter.ApplyFormatting(0,Helpers.GetTemplate.Source())); + break; + case TypeSL.LSLIScript: + sw.Write(AutoFormatter.ApplyFormatting(0, Helpers.GetTemplate.Source())); + break; + case TypeSL.Notecard: + sw.Write("notecard"); + break; + default: + // empty file + break; + } + sw.Close(); + } + + TreeNode newFile = new TreeNode(strNewName, (int)typeFile, (int)typeFile); + newFile.Tag = new RealTag(typeFile, strNewName, Guid.NewGuid()); + parent.Nodes.Add(newFile); + parent.Expand(); + + this.m_dirty = true; + } + + private void AddExistingFile(TreeNode parent, string strName, Guid guid) + { + if (parent == null) + return; + + string strFilePath = Path.Combine(GetFullPath(parent), strName); + + TypeSL typeFile = TypeSL.Unknown; + + switch (Path.GetExtension(strName)) + { + case ".lsl": + typeFile = TypeSL.Script; + break; + case ".txt": + typeFile = TypeSL.Notecard; + break; + case ".ogg": + case ".wav": + case ".mp3": + typeFile = TypeSL.Sound; + break; + case ".ani": + typeFile = TypeSL.Animation; + break; + case ".gif": + case ".jpg": + case ".jpeg": + case ".tiff": + case ".bmp": + case ".png": + typeFile = TypeSL.Snapshot; + break; + default: + break; + } + TreeNode newFile = new TreeNode(strName, (int)typeFile, (int)typeFile); + newFile.Tag = new RealTag(typeFile, strName, guid); + parent.Nodes.Add(newFile); + parent.Expand(); + + this.m_dirty = true; + } + + private void AddExistingFile(TreeNode tn) + { + if (GetTypeSL(tn) != TypeSL.Object) + return; + this.openFileDialog1.FileName = ""; + this.openFileDialog1.Filter = "All Files (*.*)|*.*"; + this.openFileDialog1.Multiselect = true; + if (this.openFileDialog1.ShowDialog(this) == DialogResult.OK) + { + foreach (string strSourcePath in this.openFileDialog1.FileNames) + { + string strName = Path.GetFileName(strSourcePath); + string strDestinationPath = Path.Combine(GetFullPath(tn), strName); + + bool blnAdd = true; + foreach (TreeNode child in tn.Nodes) + { + if (child.Text == strName) + { + blnAdd = false; + + if (strSourcePath.ToLower() == strDestinationPath.ToLower()) + break; + + if (MessageBox.Show("Overwrite existing file?", "File already exists", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) + { + child.Remove(); + blnAdd = true; + break; + } + } + } + if (!blnAdd) + continue; + if (strSourcePath.ToLower() != strDestinationPath.ToLower()) + { + try + { + File.Copy(strSourcePath, strDestinationPath, true); + } + catch (Exception exception) + { + MessageBox.Show(exception.Message, "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + AddExistingFile(tn, strName, Guid.NewGuid()); + } + } + } + + public void AddNewObject() + { + if (ActiveProject == null) + return; + AddNewContainer(ActiveProject, TypeSL.Object, GetNewDirectoryName(ActiveProject, "Object{0}"), Guid.NewGuid()); + } + + #region ContextMenus + + private ToolStripMenuItem cmsItemsAdd(ContextMenuStrip cms, string strName, string strValue,string strKeys) + { + ToolStripMenuItem tsmi = new ToolStripMenuItem(strValue); + tsmi.ShortcutKeyDisplayString = strKeys; + tsmi.Name = strName; + cms.Items.Add(tsmi); + return tsmi; + } + + private ToolStripMenuItem cmsItemsAdd(ContextMenuStrip cms, string strName, string strValue) + { + ToolStripMenuItem tsmi = new ToolStripMenuItem(strValue); + tsmi.Name = strName; + cms.Items.Add(tsmi); + return tsmi; + } + + private ContextMenuStrip ContextMenuSolution() + { + ContextMenuStrip cms = new ContextMenuStrip(); + cms.MouseClick += new MouseEventHandler(cms_MouseClick); + cmsItemsAdd(cms, "CloseSolution", "Close Solution"); + cms.Items.Add(new ToolStripSeparator()); + + if (Properties.Settings.Default.VersionControlSVN) + { + if (this.Repository == null) + { + cmsItemsAdd(cms, "SvnImport", "Import Solution SVN"); + cms.Items.Add(new ToolStripSeparator()); + } + else // already workingcopy + { + cmsItemsAdd(cms, "SvnUpdate", "SVN update"); + cmsItemsAdd(cms, "SvnCommit", "SVN commit"); + cms.Items.Add(new ToolStripSeparator()); + } + } + + cmsItemsAdd(cms, "AddNewProject", "Add New Project"); + cmsItemsAdd(cms, "AddExistingProject", "Add Existing Project..."); + if (!HasInventory()) + { + cms.Items.Add(new ToolStripSeparator()); + cmsItemsAdd(cms, "AddInventory", "Add Empty Inventory"); + } + cms.Items.Add(new ToolStripSeparator()); + if (GetTypeSL(CutObject) == TypeSL.Project || GetTypeSL(CopyObject) == TypeSL.Project) + cmsItemsAdd(cms, "Paste", "Paste project" , "Ctrl+V"); + cmsItemsAdd(cms, "Rename", "Rename" , "F2"); + cms.Items.Add(new ToolStripSeparator()); + cmsItemsAdd(cms, "Properties", "Properties"); + return cms; + } + + private ContextMenuStrip ContextMenuInventory(TypeSL typeSL) + { + ContextMenuStrip cms = new ContextMenuStrip(); + cms.MouseClick += new MouseEventHandler(cms_MouseClick); + + if (typeSL != TypeSL.Inventory) + { + ToolStripMenuItem tsmiClothes = cmsItemsAdd(cms, "Add", "Add Clothes"); + tsmiClothes.DropDownItemClicked += new ToolStripItemClickedEventHandler(tsmi_DropDownItemClicked); + foreach (TypeSL file in ClothesTypes) + tsmiClothes.DropDownItems.Add(file.ToString(), this.imageList1.Images[(int)file]); + + ToolStripMenuItem tsmiBodyParts = cmsItemsAdd(cms, "Add", "Add Body Parts"); + tsmiBodyParts.DropDownItemClicked += new ToolStripItemClickedEventHandler(tsmi_DropDownItemClicked); + foreach (TypeSL file in BodyPartsTypes) + tsmiBodyParts.DropDownItems.Add(file.ToString(), this.imageList1.Images[(int)file]); + + ToolStripMenuItem tsmiFiles = cmsItemsAdd(cms, "Add", "Add Items"); + tsmiFiles.DropDownItemClicked += new ToolStripItemClickedEventHandler(tsmi_DropDownItemClicked); + foreach (TypeSL file in FilesTypes) + tsmiFiles.DropDownItems.Add(file.ToString(), this.imageList1.Images[(int)file]); + cms.Items.Add(new ToolStripSeparator()); + } + cmsItemsAdd(cms, "AddNewFolder", "Add New Folder"); + + if (typeSL == TypeSL.Folder) + { + cms.Items.Add(new ToolStripSeparator()); + cmsItemsAdd(cms, "Cut", "Cut" , "Ctrl+X"); + cmsItemsAdd(cms, "Copy", "Copy","Ctrl+C"); + cmsItemsAdd(cms, "Delete", "Delete", "Del"); + cmsItemsAdd(cms, "Rename", "Rename", "F2"); + } + if (CutObject != null || CopyObject != null) + { + cms.Items.Add(new ToolStripSeparator()); + cmsItemsAdd(cms, "Paste", "Paste", "Ctrl+V"); + } + cms.Items.Add(new ToolStripSeparator()); + cmsItemsAdd(cms, "Properties", "Properties"); + + return cms; + } + + private ContextMenuStrip ContextMenuProject() + { + ContextMenuStrip cms = new ContextMenuStrip(); + cms.MouseClick += new MouseEventHandler(cms_MouseClick); + cmsItemsAdd(cms, "AddNewObject", "Add New Object"); + cmsItemsAdd(cms, "AddExistingObject", "Add Existing Object..."); + cms.Items.Add(new ToolStripSeparator()); + if (NumberOfProjects() > 1 || ActiveProject == null) + cmsItemsAdd(cms, "SetAsActiveProject", "Set as Active Project"); + cmsItemsAdd(cms, "DebugStart","Debug Start"); + cms.Items.Add(new ToolStripSeparator()); + cmsItemsAdd(cms, "Cut","Cut","Ctrl+X"); + cmsItemsAdd(cms, "Copy", "Copy", "Ctrl+C"); + cmsItemsAdd(cms, "Remove","Remove"); + if (GetTypeSL(CutObject) == TypeSL.Object || GetTypeSL(CopyObject) == TypeSL.Object) + cmsItemsAdd(cms, "Paste", "Paste Object","Ctrl+V"); + cmsItemsAdd(cms, "Rename","Rename","F2"); + cms.Items.Add(new ToolStripSeparator()); + cmsItemsAdd(cms, "Properties","Properties"); + return cms; + } + + public void CreateNewFileDrowDownMenu(ToolStripMenuItem tsmi) + { + tsmi.DropDownItemClicked += new ToolStripItemClickedEventHandler(tsmi_DropDownItemClicked); + foreach (TypeSL file in FilesTypes) + tsmi.DropDownItems.Add(file.ToString(), this.imageList1.Images[(int)file]); + } + + public void CreateNewFileDrowDownMenu(ContextMenuStrip cms) + { + ToolStripMenuItem tsmi = cmsItemsAdd(cms, "Add", "Add New Item"); + tsmi.DropDownItemClicked += new ToolStripItemClickedEventHandler(tsmi_DropDownItemClicked); + foreach (TypeSL file in FilesTypes) + tsmi.DropDownItems.Add(file.ToString(), this.imageList1.Images[(int)file]); + } + + private ContextMenuStrip ContextMenuBox() + { + ContextMenuStrip cms = new ContextMenuStrip(); + cms.MouseClick += new MouseEventHandler(cms_MouseClick); + + CreateNewFileDrowDownMenu(cms); + //ToolStripMenuItem tsmi = cmsItemsAdd(cms, "Add", "Add New File"); + //tsmi.DropDownItemClicked += new ToolStripItemClickedEventHandler(tsmi_DropDownItemClicked); + //foreach (TypeSL file in FilesTypes) + // tsmi.DropDownItems.Add(file.ToString(), this.imageList1.Images[(int)file]); + + cmsItemsAdd(cms, "AddExistingFile", "Add Existing File(s)..."); + cms.Items.Add(new ToolStripSeparator()); + cmsItemsAdd(cms, "SetAsActiveBox", "Set As Active Object"); + cms.Items.Add(new ToolStripSeparator()); + cmsItemsAdd(cms, "ExcludeFromProject", "Exclude From Project"); + cms.Items.Add(new ToolStripSeparator()); + cmsItemsAdd(cms, "Cut", "Cut","Ctrl+X"); + cmsItemsAdd(cms, "Copy", "Copy", "Ctrl+C"); + cmsItemsAdd(cms, "Delete", "Delete", "Del"); + if (IsItem(CutObject) || IsItem(CopyObject)) + cmsItemsAdd(cms, "Paste", "Paste", "Ctrl+V"); + cmsItemsAdd(cms, "Rename", "Rename","F2"); + cms.Items.Add(new ToolStripSeparator()); + cmsItemsAdd(cms, "Properties", "Properties"); + return cms; + } + + private ContextMenuStrip ContextMenuFile() + { + ContextMenuStrip cms = new ContextMenuStrip(); + cms.MouseClick += new MouseEventHandler(cms_MouseClick); + cmsItemsAdd(cms, "Open", "Open"); + cms.Items.Add(new ToolStripSeparator()); + cmsItemsAdd(cms, "Cut", "Cut" , "Ctrl+X"); + cmsItemsAdd(cms, "Copy", "Copy", "Ctrl+C"); + cmsItemsAdd(cms, "Delete", "Delete", "Del"); + cmsItemsAdd(cms, "Rename", "Rename", "F2"); + cms.Items.Add(new ToolStripSeparator()); + ToolStripMenuItem tsmi = cmsItemsAdd(cms, "ChangeFileType", "Change filetype"); + CreateNewFileDrowDownMenu(tsmi); + cms.Items.Add(new ToolStripSeparator()); + cmsItemsAdd(cms, "Properties", "Properties"); + return cms; + } + + #endregion + + void tsmi_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) + { + // Add New File + TreeNode tn; + ToolStripDropDownItem tsddi = sender as ToolStripDropDownItem; + ContextMenuStrip cms = tsddi.Owner as ContextMenuStrip; + if (cms != null) + tn = cms.Tag as TreeNode; + else + tn = ActiveObject; + + if (tn != null) + { + string strName = tsddi.Name; + if (strName == "ChangeFileType") + { + RealTag realTag = (RealTag)tn.Tag; + TypeSL stypeSl = (TypeSL)Enum.Parse(typeof(TypeSL), e.ClickedItem.Text); + realTag.ItemType = stypeSl; + tn.Tag = realTag; + tn.ImageIndex = (int)stypeSl; + tn.SelectedImageIndex = (int)stypeSl; + this.treeView1.Invalidate(tn.Bounds); + return; + } + else + { + TypeSL typeSL = (TypeSL)Enum.Parse(typeof(TypeSL), e.ClickedItem.Text); + if (typeSL != TypeSL.Object) + AddNewFile(tn, typeSL); + else + AddNewContainer(tn, TypeSL.Object, GetNewDirectoryName(tn, "Object{0}"), Guid.NewGuid()); + } + } + } + + void treeView1_MouseUp(object sender, MouseEventArgs e) + { + if (e.Button != MouseButtons.Left) + return; + + TreeNode treeNode = this.treeView1.GetNodeAt(new Point(e.X, e.Y)); + if (treeNode == null) + return; + + if (e.X < treeNode.Bounds.X) // only when clicked on the label + return; + + if (timer.Tag != null) + { + if (timer.Tag == treeNode) + { + timer.Tag = null; + timer.Start(); + return; + } + } + timer.Tag = treeNode; + } + + void treeView1_MouseDown(object sender, MouseEventArgs e) + { + TreeNode treeNode = this.treeView1.GetNodeAt(new Point(e.X, e.Y)); + if (treeNode == null) + return; + + this.treeView1.SelectedNode = treeNode; + + RealTag realTag = (RealTag)treeNode.Tag; + + if (e.Button == MouseButtons.Right) + { + ContextMenuStrip cms = null; + switch (realTag.ItemType) + { + case TypeSL.Solution: + cms = ContextMenuSolution(); + break; + case TypeSL.Project: + cms = ContextMenuProject(); + break; + case TypeSL.Object: + cms = ContextMenuBox(); + break; + default: + if (IsInventoryContainer(treeNode)) + cms = ContextMenuInventory(realTag.ItemType); + else if (IsItem(treeNode)) + cms = ContextMenuFile(); + else + cms = new ContextMenuStrip(); + break; + } + cms.Tag = treeNode; + this.treeView1.ContextMenuStrip = cms; + } + } + + private string GetNewName(TreeNode treeNode, bool blnDirectory, string strFormat) + { + string strDirectory = GetFullPath(treeNode); + if (File.Exists(strDirectory)) + strDirectory = Path.GetDirectoryName(strDirectory); + + if (!Directory.Exists(strDirectory)) + Directory.CreateDirectory(strDirectory); + + RealTag realTag = (RealTag)treeNode.Tag; + if (blnDirectory) + { + string strName = strFormat.Replace("({0}) ", "").Replace("{0}", "").Replace("Copy of ",""); + if (!Directory.Exists(Path.Combine(strDirectory, strName))) + return strName; + strName = strFormat.Replace("({0}) ", "").Replace("{0}", ""); + if (!Directory.Exists(Path.Combine(strDirectory, strName))) + return strName; + + for (int intI = 1; intI < 255; intI++) + { + strName = string.Format(strFormat, intI); + if (!Directory.Exists(Path.Combine(strDirectory, strName))) + return strName; + } + } + else + { + string strName = strFormat.Replace("({0}) ", "").Replace("{0}", "").Replace("Copy of ",""); + if (!File.Exists(Path.Combine(strDirectory, strName))) + return strName; + strName = strFormat.Replace("({0}) ", "").Replace("{0}", ""); + if (!File.Exists(Path.Combine(strDirectory, strName))) + return strName; + + for (int intI = 2; intI < 255; intI++) + { + strName = string.Format(strFormat, intI); + if (!File.Exists(Path.Combine(strDirectory, strName))) + return strName; + } + } + MessageBox.Show("There are 255 items with the same name", "Oops..."); + return null; + } + + private string GetNewFileName(TreeNode treeNode, string strFormat) + { + return GetNewName(treeNode, false, strFormat); + } + + private string GetNewDirectoryName(TreeNode treeNode, string strFormat) + { + return GetNewName(treeNode, true, strFormat); + } + + private void DeleteAction(TreeNode tn) + { + if (MessageBox.Show("Delete " + tn.Text, "Delete?", MessageBoxButtons.YesNo) == DialogResult.Yes) + DeleteChildren(tn); + } + + private void DeleteChildren(TreeNode tn) + { + // remove backwards, foreach does not work + for(int intI=tn.Nodes.Count-1;intI>=0;intI--) + DeleteChildren(tn.Nodes[intI]); + + string strPath = GetFullPath(tn); + if (File.Exists(strPath)) + { + File.Delete(strPath); + RealTag rt = (RealTag)tn.Tag; + EditForm editForm = GetEditForm(rt.Guid); + if (editForm != null) + { + this.parent.ActivateMdiForm(editForm); + this.parent.CloseActiveWindow(); + } + } + else if (Directory.Exists(strPath)) + { + if (Directory.GetFiles(strPath).Length == 0) + Directory.Delete(strPath, true); + } + else + { + MessageBox.Show("Not found: " + tn.Text, "Oops..."); + } + tn.Remove(); + + this.m_dirty = true; + } + + private void CopyChildren(TreeNode Source,TreeNode Destination) + { + RealTag realTag = (RealTag)Source.Tag; + realTag.Guid = Guid.NewGuid(); // copy objects have new guid + if (realTag.Path!=null) + realTag.Path = Path.Combine(Path.GetDirectoryName(GetFullPath(Source)), Destination.Text); + + Destination.Tag = realTag; + Destination.ImageIndex = Source.ImageIndex; + Destination.SelectedImageIndex = Source.SelectedImageIndex; + + string strSourcePath = GetFullPath(Source); + string strDestionationPath = GetFullPath(Destination); + if (File.Exists(strSourcePath)) + File.Copy(strSourcePath, strDestionationPath); + else if (Directory.Exists(strSourcePath)) + Directory.CreateDirectory(strDestionationPath); + else + MessageBox.Show("Error: " + strSourcePath, "Oops..."); + + foreach (TreeNode child in Source.Nodes) + { + TreeNode clone = new TreeNode(child.Text); + Destination.Nodes.Add(clone); + CopyChildren(child, clone); + } + this.m_dirty = true; + } + + private void PasteAction(TreeNode tn) + { + // paste on same object, get parent!! + // paste on item, get parent!! + if (tn == CopyObject || tn==CutObject || IsItemAndNotObject(tn)) + tn = tn.Parent; + + // sanitycheck, search all parents, may not be CopyObject or CutObject + TreeNode parentNode = tn; + while (parentNode != null) + { + if (parentNode == CopyObject || parentNode == CutObject) + return; + parentNode = parentNode.Parent; + } + + switch(GetTypeSL(tn)) + { + case TypeSL.Solution: + if (GetTypeSL(CutObject) != TypeSL.Project && + GetTypeSL(CopyObject) != TypeSL.Project) + return; + break; + case TypeSL.Project: + if (GetTypeSL(CutObject) != TypeSL.Object && + GetTypeSL(CopyObject) != TypeSL.Object) + return; + break; + case TypeSL.Object: + if (!IsItem(CutObject) && !IsItem(CopyObject)) + return; + break; + default: + if(IsInventoryContainer(tn)) + { + if (!IsItem(CutObject) && !IsItem(CopyObject) && + GetTypeSL(CutObject) != TypeSL.Folder && + GetTypeSL(CopyObject) != TypeSL.Folder) + return; + } + else if (!IsItem(tn)) // is special container + { + // must be a file + if (!IsItem(CutObject) && !IsItem(CopyObject) && + GetTypeSL(CutObject) != TypeSL.Folder && + GetTypeSL(CopyObject) != TypeSL.Folder) + return; + } + break; + } + + if (CutObject != null) // Paste the Cut object + { + string strName = CutObject.Text; + + foreach(TreeNode treeNode in tn.Nodes) + { + if (treeNode.Text == strName) + { + MessageBox.Show("Destination already exists","Oops..."); + return; + } + } + + TreeNode Destination = new TreeNode(strName); + tn.Nodes.Add(Destination); + + CopyChildren(CutObject, Destination); + DeleteChildren(CutObject); + + CutObject.Remove(); + CutObject = null; + } + if (CopyObject != null) // Paste the Copy object + { + string strName; + if (IsItem(CopyObject) && GetTypeSL(CopyObject) != TypeSL.Object) + strName = GetNewFileName(tn, "Copy ({0}) of " + CopyObject.Text); + else + strName = GetNewDirectoryName(tn, "Copy ({0}) of " + CopyObject.Text); + + TreeNode Destination = new TreeNode(strName); + tn.Nodes.Add(Destination); + + CopyChildren(CopyObject, Destination); + + CopyObject = null; + + if (tn == ActiveSolution) + UpdateVisualSolutionName(); + } + } + + private void RemoveAction(TreeNode tn) + { + if (GetTypeSL(tn) == TypeSL.Project) + { + SaveItemFile(tn); // saving pending updates!! + if (ActiveProject == tn) + ActiveProject = null; + // Does not!!!! delete, only remove form project + tn.Remove(); + UpdateVisualSolutionName(); + this.m_dirty = true; + } + } + + private void RenameAction(TreeNode tn) + { + RealTag realTag = (RealTag)tn.Tag; + if (IsInventoryContainer(tn)) + { + if(realTag.ItemType != TypeSL.Folder) + return; + } + + if (realTag.ItemType == TypeSL.Solution) + tn.Text = this.NameSolution; + this.treeView1.LabelEdit = true; + tn.BeginEdit(); + } + + private void CutAction(TreeNode tn) + { + if (CutObject != null) + CutObject.ForeColor = Color.Empty; + CutObject = tn; + tn.ForeColor = Color.DarkGray; + } + + private void CopyAction(TreeNode tn) + { + if (CutObject != null) + { + CutObject.ForeColor = Color.Empty; + CutObject = null; + } + CopyObject = tn; + } + + public void AddNewProjectAction() + { + string strNewProjectName = GetNewDirectoryName(ActiveSolution, "Project{0}"); + string strProjectPath = Path.Combine(DirectorySolution, strNewProjectName); + AddItem(TypeSL.Project, strNewProjectName, Guid.NewGuid(), strProjectPath); + } + + private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) + { + timer.Stop(); + timer.Tag = null; + + Guid guid = ((RealTag)e.Node.Tag).Guid; + string path = GetFullPath(e.Node); + + // already opened + EditForm editForm = GetEditForm(guid); + if (editForm != null) + { + TabPage tabPage = editForm.Tag as TabPage; + if (tabPage == null) + { + if(editForm.Visible) + { + editForm.Focus(); + } else + { + // Check if there's a related expanded lsl or lsli opened. If so, focus it. Else open the lsli. + EditForm expandedForm = (EditForm)parent.GetForm(Helpers.LSLIPathHelper.GetExpandedTabName(Helpers.LSLIPathHelper.CreateExpandedScriptName(Path.GetFileName(path)))); + EditForm collapsedForm = (EditForm)parent.GetForm(Helpers.LSLIPathHelper.CreateCollapsedScriptName(Path.GetFileName(path))); + if (expandedForm != null && expandedForm.Visible) + { + expandedForm.Focus(); + } + else if (collapsedForm != null && collapsedForm.Visible) + { + collapsedForm.Focus(); + } + else + { + // Open a new one + if (GetTypeSL(e.Node) == TypeSL.Script || GetTypeSL(e.Node) == TypeSL.LSLIScript) + { + this.parent.OpenFile(GetFullPath(e.Node), guid, true); + } + } + } + } + else + { + TabControl tabControl = tabPage.Parent as TabControl; + if(tabControl != null) + tabControl.SelectedTab = tabPage; + } + return; + } + + // Check if it's an lsli that has an open expanded form + if (GetTypeSL(e.Node) == TypeSL.Script || GetTypeSL(e.Node) == TypeSL.LSLIScript) + { + if (Helpers.LSLIPathHelper.IsLSLI(path)) { + // Check if there's a related expanded lsl opened. If so, focus it. Else open the lsli. + EditForm expandedForm = (EditForm)parent.GetForm(Helpers.LSLIPathHelper.GetExpandedTabName(Helpers.LSLIPathHelper.CreateExpandedScriptName(Path.GetFileName(path)))); + EditForm collapsedForm = (EditForm)parent.GetForm(Helpers.LSLIPathHelper.CreateCollapsedScriptName(Path.GetFileName(path))); + if (expandedForm != null && expandedForm.Visible) + { + expandedForm.Focus(); + } else if(collapsedForm != null && collapsedForm.Visible) + { + collapsedForm.Focus(); + } else + { + // Open a new one + if (GetTypeSL(e.Node) == TypeSL.Script || GetTypeSL(e.Node) == TypeSL.LSLIScript) + { + this.parent.OpenFile(GetFullPath(e.Node), guid, true); + } + } + } else + { + // Open a new one + if (GetTypeSL(e.Node) == TypeSL.Script || GetTypeSL(e.Node) == TypeSL.LSLIScript) + { + this.parent.OpenFile(GetFullPath(e.Node), guid, true); + } + } + } + + if (GetTypeSL(e.Node) == TypeSL.Notecard) + this.parent.OpenFile(GetFullPath(e.Node), guid, false); + } + private void PropertiesActions(TreeNode tn) + { + SolutionExplorer.RealTag realTag = (SolutionExplorer.RealTag)tn.Tag; + Guid oldGuid = realTag.Guid; + GuidProperty prop = new GuidProperty(realTag); + + if (prop.ShowDialog(this) == DialogResult.OK) + { + EditForm editForm = GetEditForm(oldGuid); + if (editForm != null) + editForm.guid = prop.guid; + realTag.Guid = prop.guid; + tn.Tag = realTag; + ShowProperties(tn); + } + } + private void ShowProperties(TreeNode tn) + { + RealTag realTag = (RealTag)tn.Tag; + + this.listView1.Items.Clear(); + + ListViewItem lvi = new ListViewItem("Name"); + lvi.SubItems.Add(tn.Text); + this.listView1.Items.Add(lvi); + + if (realTag.Description != string.Empty) + { + lvi = new ListViewItem("Description"); + lvi.SubItems.Add(realTag.Description); + this.listView1.Items.Add(lvi); + } + + lvi = new ListViewItem("Guid"); + lvi.SubItems.Add(realTag.Guid.ToString()); + this.listView1.Items.Add(lvi); + + lvi = new ListViewItem("Path"); + lvi.SubItems.Add(GetFullPath(tn)); + this.listView1.Items.Add(lvi); + + lvi = new ListViewItem("Modified"); + FileInfo fi = new FileInfo(GetFullPath(tn)); + lvi.SubItems.Add(fi.LastWriteTime.ToString("s")); + this.listView1.Items.Add(lvi); + + } + + private void SetAsActiveProject(TreeNode tn) + { + ActiveObject = null; + ActiveProject = tn; + foreach (TreeNode child in ActiveProject.Nodes) + { + if (GetTypeSL(child) == TypeSL.Object) + { + ActiveObject = child; + break; + } + } + this.treeView1.Invalidate(); + } + + private void SetAsActiveBox(TreeNode tn) + { + ActiveProject = null; + ActiveObject = tn; + if (GetTypeSL(ActiveObject.Parent) == TypeSL.Project) + ActiveProject = ActiveObject.Parent; + this.treeView1.Invalidate(); + } + + private void DebugStart() + { + MessageBox.Show("TODO: Debug start", "Todo"); + } + + private void AddExistingObject(TreeNode tn) + { + MessageBox.Show("TODO: Add Existing Object", "Todo"); + } + + private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) + { + ShowProperties(e.Node); + } + + private TreeNode FindGuid(TreeNode treeNode, Guid guid) + { + if (treeNode == null) + return null; + foreach (TreeNode tn in treeNode.Nodes) + { + RealTag rt = (RealTag)tn.Tag; + if (rt.Guid == guid) + return tn; + TreeNode found = FindGuid(tn, guid); + if (found != null) + return found; + } + return null; + } + + private delegate bool IHateThisToo(Guid guid, string name); + private delegate string IHateThis(Guid guid); + public string GetObjectName(Guid guid) + { + if (this.treeView1.InvokeRequired) + return this.treeView1.Invoke(new IHateThis(GetObjectName), new object[] { guid }).ToString(); + TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); + if (treeNode == null) + return string.Empty; + TreeNode parent = treeNode.Parent; + RealTag realTag = (RealTag)parent.Tag; + if (realTag.ItemType != TypeSL.Object) + return string.Empty; + return realTag.Name; + } + + public bool SetObjectName(Guid guid, string name) + { + if (this.treeView1.InvokeRequired) + return (bool)this.treeView1.Invoke(new IHateThisToo(SetObjectName), new object[] { guid, name }); + TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); + if (treeNode == null) + return false; + TreeNode parent = treeNode.Parent; + RealTag realTag = (RealTag)parent.Tag; + if (realTag.ItemType != TypeSL.Object) + return false; + + string strBackup = parent.Text; + string strSource = GetFullPath(parent); + parent.Text = name; + string strDestination = GetFullPath(parent); + + try + { + Directory.Move(strSource, strDestination); + realTag.Name = name; + parent.Tag = realTag; + parent.Text = name; + return true; + } + catch + { + parent.Text = strBackup; + return false; + } + } + + public string GetObjectDescription(Guid guid) + { + if (this.treeView1.InvokeRequired) + return this.treeView1.Invoke(new IHateThis(GetObjectDescription), new object[] { guid }).ToString(); + TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); + if (treeNode == null) + return string.Empty; + TreeNode parent = treeNode.Parent; + RealTag realTag = (RealTag)parent.Tag; + if (realTag.ItemType != TypeSL.Object) + return string.Empty; + return realTag.Description; + } + + public bool SetObjectDescription(Guid guid, string description) + { + if (this.treeView1.InvokeRequired) + return (bool)this.treeView1.Invoke(new IHateThisToo(SetObjectDescription), new object[] { guid, description }); + TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); + if (treeNode == null) + return false; + TreeNode parent = treeNode.Parent; + RealTag realTag = (RealTag)parent.Tag; + if (realTag.ItemType != TypeSL.Object) + return false; + realTag.Description = description; + parent.Tag = realTag; + return true; + } + + + public string GetScriptName(Guid guid) + { + if (this.treeView1.InvokeRequired) + return this.treeView1.Invoke(new IHateThis(GetScriptName), new object[] { guid }).ToString(); + TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); + if (treeNode == null) + return string.Empty; + return treeNode.Text; + } + + public string GetKey(Guid guid) + { + if (this.treeView1.InvokeRequired) + return this.treeView1.Invoke(new IHateThis(GetKey), new object[] { guid }).ToString(); + + TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); + if (treeNode == null) + return string.Empty; + TreeNode parent = treeNode.Parent; + RealTag rt = (RealTag)parent.Tag; + return rt.Guid.ToString(); + } + + private TypeSL GetTypeSLFromInteger(int type) + { + TypeSL typeSL = TypeSL.Unknown; + switch (type) + { + case -1: //INVENTORY_ALL -1 all inventory items + return TypeSL.Unknown; + case 20: //INVENTORY_ANIMATION 20 animations 0x14 + return TypeSL.Animation; + case 13: //INVENTORY_BODYPART 13 body parts 0x0D + return TypeSL.Hair | TypeSL.Skin | TypeSL.Eyes | TypeSL.Shape; + case 5: //INVENTORY_CLOTHING 5 clothing 0x05 + return TypeSL.Jacket | TypeSL.Gloves | TypeSL.Pants | TypeSL.Shirt | TypeSL.Shoes | TypeSL.Skirt | TypeSL.Socks | TypeSL.Underpants | TypeSL.Undershirt; + case 21: //INVENTORY_GESTURE 21 gestures 0x15 + return TypeSL.Gesture; + case 3: //INVENTORY_LANDMARK 3 landmarks 0x03 + return TypeSL.Landmark; + case 7: //INVENTORY_NOTECARD 7 notecards 0x07 + return TypeSL.Notecard; + case 6: //INVENTORY_OBJECT 6 objects 0x06 + return TypeSL.Object; + case 10: //INVENTORY_SCRIPT 10 scripts 0x0A + return TypeSL.Script; + case 1: //INVENTORY_SOUND 1 sounds 0x01 + return TypeSL.Sound; + case 0: //INVENTORY_TEXTURE 0 textures 0x00 + return TypeSL.Texture; + default: + break; + } + return typeSL; + } + + private delegate void DelegateRemoveInventory(Guid guid, SecondLife.String name); + public void RemoveInventory(Guid guid, SecondLife.String name) + { + if (this.treeView1.InvokeRequired) + { + this.treeView1.Invoke(new DelegateRemoveInventory(RemoveInventory), new object[] { guid, name }); + return; + } + + TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); + if (treeNode == null) + return; + TreeNode parent = treeNode.Parent; + for (int i = 0; i < parent.Nodes.Count; ++i) + { + if (parent.Nodes[i].Text == name) + { + parent.Nodes.RemoveAt(i); + return; + } + } + } + private delegate string DelegateGetInventoryName(Guid guid, int type, int number); + public string GetInventoryName(Guid guid, int type, int number) + { + if (this.treeView1.InvokeRequired) + { + return this.treeView1.Invoke(new DelegateGetInventoryName(GetInventoryName), new object[] { guid, type, number }).ToString(); + } + + TypeSL typeSL = GetTypeSLFromInteger(type); + + TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); + if (treeNode == null) + return string.Empty; + TreeNode parent = treeNode.Parent; + int intI=0; + foreach (TreeNode tn in parent.Nodes) + { + if (typeSL == TypeSL.Unknown || (typeSL & GetTypeSL(tn) ) == GetTypeSL(tn)) + { + if (intI == number) + return tn.Text; + intI++; + } + } + return string.Empty; + } + + private delegate string DelegateGetInventoryKey(Guid guid, string name); + public string GetInventoryKey(Guid guid, string name) + { + if (this.treeView1.InvokeRequired) + { + return this.treeView1.Invoke(new DelegateGetInventoryKey(GetInventoryKey), new object[] { guid, name }).ToString(); + } + + TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); + if (treeNode == null) + return string.Empty; + TreeNode parent = treeNode.Parent; + foreach (TreeNode tn in parent.Nodes) + { + if (tn.Text == name) + { + RealTag rt = (RealTag)tn.Tag; + return rt.Guid.ToString(); + } + } + return string.Empty; + } + + private delegate int DelegateGetInventoryType(Guid guid, string name); + public int GetInventoryType(Guid guid, string name) + { + if (this.treeView1.InvokeRequired) + { + return (int)this.treeView1.Invoke(new DelegateGetInventoryType(GetInventoryType), new object[] { guid, name }); + } + + TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); + if (treeNode == null) + return SecondLife.INVENTORY_NONE; + TreeNode parent = treeNode.Parent; + foreach (TreeNode tn in parent.Nodes) + { + if (tn.Text == name) + { + RealTag rt = (RealTag)tn.Tag; + switch (rt.ItemType) + { + case TypeSL.Texture: + return SecondLife.INVENTORY_TEXTURE; + case TypeSL.Sound: + return SecondLife.INVENTORY_SOUND; + case TypeSL.Landmark: + return SecondLife.INVENTORY_LANDMARK; + case TypeSL.Gloves: + case TypeSL.Jacket: + case TypeSL.Pants: + case TypeSL.Shirt: + case TypeSL.Shoes: + case TypeSL.Skirt: + case TypeSL.Socks: + case TypeSL.Underpants: + case TypeSL.Undershirt: + return SecondLife.INVENTORY_CLOTHING; + case TypeSL.Object: + return SecondLife.INVENTORY_OBJECT; + case TypeSL.Script: + return SecondLife.INVENTORY_SCRIPT; + case TypeSL.Animation: + return SecondLife.INVENTORY_ANIMATION; + case TypeSL.Eyes: + case TypeSL.Hair: + case TypeSL.Shape: + case TypeSL.Skin: + return SecondLife.INVENTORY_BODYPART; + case TypeSL.Gesture: + return SecondLife.INVENTORY_GESTURE; + case TypeSL.Notecard: + return SecondLife.INVENTORY_NOTECARD; + default: + return SecondLife.INVENTORY_NONE; + } + } + } + return SecondLife.INVENTORY_NONE; + } + + private delegate int DelegateGetInventoryNumber(Guid guid, int type); + public int GetInventoryNumber(Guid guid, int type) + { + if (this.treeView1.InvokeRequired) + { + return (int)this.treeView1.Invoke(new DelegateGetInventoryNumber(GetInventoryNumber), new object[] { guid, type }); + } + + TypeSL typeSL = GetTypeSLFromInteger(type); + + TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); + if (treeNode == null) + return -1; + TreeNode parent = treeNode.Parent; + int intI = 0; + foreach (TreeNode tn in parent.Nodes) + { + if (typeSL == TypeSL.Unknown || (typeSL & GetTypeSL(tn)) == GetTypeSL(tn)) + intI++; + } + return intI; + } + + private delegate string DelegateGetPath(Guid guid, string name); + public string GetPath(Guid guid, string name) + { + if (this.treeView1.InvokeRequired) + { + return this.treeView1.Invoke(new DelegateGetPath(GetPath), new object[] { guid, name }).ToString(); + } + + TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); + if (treeNode == null) + return string.Empty; + TreeNode parent = treeNode.Parent; + foreach (TreeNode tn in parent.Nodes) + { + if (tn.Text == name || ((RealTag)tn.Tag).Guid.ToString() == name) + return GetFullPath(tn); + } + return string.Empty; + } + + private delegate Guid GetParentGuidDelegate(Guid guid); + public Guid GetParentGuid(Guid guid) + { + if (this.treeView1.InvokeRequired) + { + return (Guid)this.treeView1.Invoke(new GetParentGuidDelegate(GetParentGuid), new object[] { guid }); + } + TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); + if (treeNode == null) + return Guid.Empty; + TreeNode parent = treeNode.Parent; + // Only return parent when it is an object + if (((RealTag)parent.Tag).ItemType != TypeSL.Object) + return guid; + else // Return object itself, has no parent object + return ((RealTag)parent.Tag).Guid; + } + + private delegate Guid GetGuidFromObjectNrDelegate(Guid ObjectGuid, int intLinkNum); + public Guid GetGuidFromObjectNr(Guid ObjectGuid, int intLinkNum) + { + if (this.treeView1.InvokeRequired) + { + return (Guid)this.treeView1.Invoke(new GetGuidFromObjectNrDelegate(GetGuidFromObjectNr), new object[] { ObjectGuid, intLinkNum }); + } + TreeNode treeNode = FindGuid(this.treeView1.TopNode, ObjectGuid); + if (treeNode == null) + return Guid.Empty; + int intNr = 0; + foreach (TreeNode tn in treeNode.Nodes) + { + RealTag realTag = (RealTag)tn.Tag; + if (realTag.ItemType == TypeSL.Object) + { + intNr++; + if (intNr == intLinkNum) + return realTag.Guid; + } + } + return Guid.Empty; // no objects found + } + + private void GetScriptsFromNode(TreeNode treeNode, List list, bool recursive) + { + foreach (TreeNode tn in treeNode.Nodes) + { + RealTag realTag = (RealTag)tn.Tag; + if (realTag.ItemType == TypeSL.Script) + list.Add(realTag.Guid); + else + if (realTag.ItemType == TypeSL.Object && recursive) + GetScriptsFromNode(tn, list, recursive); + } + } + + private delegate List GetScriptsDelegate(Guid guid, bool recursive); + public List GetScripts(Guid guid, bool recursive) + { + if (this.treeView1.InvokeRequired) + return this.treeView1.Invoke(new GetScriptsDelegate(GetScripts), new object[] { guid, recursive }) as List; + + List list = new List(); + TreeNode treeNode = FindGuid(this.treeView1.TopNode, guid); + if (treeNode == null) + return list; // empty + GetScriptsFromNode(treeNode, list, recursive); + return list; + } + + private void listView1_MouseMove(object sender, MouseEventArgs e) + { + ListViewItem lvi = this.listView1.GetItemAt(e.X,e.Y); + if (lvi == null) + this.toolTip1.SetToolTip(this.listView1, ""); + else if (lvi != m_HoveredItem) + { + m_HoveredItem = lvi; + this.toolTip1.SetToolTip(this.listView1, lvi.SubItems[1].Text); + } + } + + private void treeView1_KeyDown(object sender, KeyEventArgs e) + { + if (this.treeView1.SelectedNode == null) + return; + if (e.KeyCode == Keys.ControlKey) + return; + switch (e.KeyCode) + { + case Keys.F2: + RenameAction(this.treeView1.SelectedNode); + e.Handled = true; + break; + case Keys.Delete: + DeleteAction(this.treeView1.SelectedNode); + e.Handled = true; + break; + case Keys.C: + if (e.Control) + { + CopyAction(this.treeView1.SelectedNode); + e.SuppressKeyPress = true; + e.Handled = true; + } + break; + case Keys.V: + if (e.Control) + { + PasteAction(this.treeView1.SelectedNode); + e.SuppressKeyPress = true; + e.Handled = true; + } + break; + case Keys.X: + if (e.Control) + { + CutAction(this.treeView1.SelectedNode); + e.SuppressKeyPress = true; + e.Handled = true; + } + break; + default: + break; + } + } + + private void SvnImport() + { + SvnAguments svnArguments = new SvnAguments(); + svnArguments.Text = "SVN import"; + svnArguments.Comment = "Initial import"; + if (svnArguments.ShowDialog(this) == DialogResult.OK) + { + string strRepository = svnArguments.Repository; + string strMessage = svnArguments.Comment; + + strMessage = strMessage.Replace('"', '\''); + + string strNameOfDirectory = Path.GetFileName(this.DirectorySolution); + + if (!strRepository.EndsWith(strNameOfDirectory)) + { + if (!strRepository.EndsWith("/")) + strRepository += "/"; + strRepository += strNameOfDirectory; + } + + this.Repository = strRepository; + this.SaveSolutionFile(); + + // import "c:\temp\a\b \d\dir" "file:///d:/temp/svn/...." -m "Initital " + string strArguments = string.Format("import \"{0}\" \"{1}\" -m \"{2}\"", this.DirectorySolution, this.Repository, strMessage); + Svn svn = new Svn(); + if (!svn.Execute(strArguments, false, true)) + return; + try + { + Directory.Move(this.DirectorySolution, this.DirectorySolution + ".bak"); + svn.Execute("checkout \"" + this.Repository + "\" \"" + this.DirectorySolution + "\"", false, true); + } + catch // (Exception exception) + { + MessageBox.Show("Can't rename Directory", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + private void SvnUpdate() + { + Svn svn = new Svn(); + svn.Execute("update \"" + this.DirectorySolution + "\"",true, true); + } + + private void SvnCommit() + { + SvnAguments svnArguments = new SvnAguments(); + svnArguments.Text = "SVN Commit"; + svnArguments.ReadOnly = true; + svnArguments.Repository = this.Repository; + svnArguments.Comment = ""; + if (svnArguments.ShowDialog(this) == DialogResult.OK) + { + Svn svn = new Svn(); + svn.Execute("commit \"" + this.DirectorySolution + "\" -m \"" + svnArguments.Comment+ "\"", true, true); + } + } + + private void cms_MouseClick(object sender, MouseEventArgs e) + { + ContextMenuStrip cms = sender as ContextMenuStrip; + TreeNode tn = cms.Tag as TreeNode; + ToolStripMenuItem tsi = cms.GetItemAt(e.X, e.Y) as ToolStripMenuItem; + + if (tsi == null) + return; // TODO, why is this?? + + if (tsi.DropDownItems.Count == 0) + cms.Visible = false; + this.treeView1.Invalidate(tn.Bounds); + + switch (tsi.Name) + { + case "SvnImport": + SvnImport(); + break; + case "SvnUpdate": + SvnUpdate(); + break; + case "SvnCommit": + SvnCommit(); + break; + case "CloseSolution": + CloseSolution(); + break; + case "AddExistingFile": + AddExistingFile(tn); + break; + case "AddExistingProject": + AddExistingProject(); + break; + case "AddNewProject": + AddNewProjectAction(); + break; + case "AddNewObject": + AddNewContainer(tn, TypeSL.Object, GetNewDirectoryName(tn, "Object{0}"), Guid.NewGuid()); + break; + case "AddNewFolder": + AddNewContainer(tn, TypeSL.Folder, GetNewDirectoryName(tn, "Folder{0}"), Guid.NewGuid()); + break; + case "AddInventory": + EmptyInventory(tn); + break; + case "SetAsActiveProject": + SetAsActiveProject(tn); + break; + case "SetAsActiveBox": + SetAsActiveBox(tn); + break; + case "Cut": + CutAction(tn); + break; + case "Copy": + CopyAction(tn); + break; + case "Delete": + DeleteAction(tn); + break; + case "Paste": + PasteAction(tn); + break; + case "Remove": + RemoveAction(tn); + break; + case "Rename": + RenameAction(tn); + break; + case "Add": + // via dropdownitems + return; + case "ChangeFileType": + // via dropdownitems + return; + case "Properties": + PropertiesActions(tn); + break; + case "DebugStart": + DebugStart(); + break; + case "AddExistingObject": + AddExistingObject(tn); + break; + default: + MessageBox.Show("cms_MouseClick: " + tsi.Text, "TODO!!"); + break; + } + } + } + public class NodeSorter : System.Collections.IComparer + { + public int Compare(object x, object y) + { + TreeNode tx = x as TreeNode; + TreeNode ty = y as TreeNode; + return string.Compare(tx.Text, ty.Text); + } + } + + +} diff --git a/trunk/Solution/SolutionExplorer.designer.cs b/source/Solution/SolutionExplorer.designer.cs similarity index 97% rename from trunk/Solution/SolutionExplorer.designer.cs rename to source/Solution/SolutionExplorer.designer.cs index c2014ea..648918e 100644 --- a/trunk/Solution/SolutionExplorer.designer.cs +++ b/source/Solution/SolutionExplorer.designer.cs @@ -1,122 +1,122 @@ -namespace LSLEditor.Solution -{ - partial class SolutionExplorer - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing) - { - if (components != null) - { - components.Dispose(); - } - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SolutionExplorer)); - this.treeView1 = new System.Windows.Forms.TreeView(); - this.listView1 = new System.Windows.Forms.ListView(); - this.panel1 = new System.Windows.Forms.Panel(); - this.splitter1 = new System.Windows.Forms.Splitter(); - this.panel2 = new System.Windows.Forms.Panel(); - this.panel1.SuspendLayout(); - this.panel2.SuspendLayout(); - this.SuspendLayout(); - // - // treeView1 - // - this.treeView1.Dock = System.Windows.Forms.DockStyle.Fill; - this.treeView1.Location = new System.Drawing.Point(0, 0); - this.treeView1.Name = "treeView1"; - this.treeView1.Size = new System.Drawing.Size(208, 165); - this.treeView1.TabIndex = 0; - this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); - this.treeView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView1_KeyDown); - // - // listView1 - // - this.listView1.Dock = System.Windows.Forms.DockStyle.Fill; - this.listView1.FullRowSelect = true; - this.listView1.GridLines = true; - this.listView1.Location = new System.Drawing.Point(0, 0); - this.listView1.MultiSelect = false; - this.listView1.Name = "listView1"; - this.listView1.Size = new System.Drawing.Size(208, 75); - this.listView1.TabIndex = 0; - this.listView1.UseCompatibleStateImageBehavior = false; - this.listView1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseMove); - // - // panel1 - // - this.panel1.AutoScroll = true; - this.panel1.Controls.Add(this.listView1); - this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.panel1.Location = new System.Drawing.Point(0, 173); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(208, 75); - this.panel1.TabIndex = 1; - // - // splitter1 - // - this.splitter1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.splitter1.Location = new System.Drawing.Point(0, 165); - this.splitter1.Name = "splitter1"; - this.splitter1.Size = new System.Drawing.Size(208, 8); - this.splitter1.TabIndex = 2; - this.splitter1.TabStop = false; - // - // panel2 - // - this.panel2.Controls.Add(this.treeView1); - this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel2.Location = new System.Drawing.Point(0, 0); - this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(208, 165); - this.panel2.TabIndex = 3; - // - // SolutionExplorer - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(208, 248); - this.Controls.Add(this.panel2); - this.Controls.Add(this.splitter1); - this.Controls.Add(this.panel1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "SolutionExplorer"; - this.TabText = "Solution Explorer"; - this.Text = "Solution Explorer"; - this.panel1.ResumeLayout(false); - this.panel2.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TreeView treeView1; - private System.Windows.Forms.ListView listView1; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Splitter splitter1; - private System.Windows.Forms.Panel panel2; - - } -} +namespace LSLEditor.Solution +{ + partial class SolutionExplorer + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (components != null) + { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SolutionExplorer)); + this.treeView1 = new System.Windows.Forms.TreeView(); + this.listView1 = new System.Windows.Forms.ListView(); + this.panel1 = new System.Windows.Forms.Panel(); + this.splitter1 = new System.Windows.Forms.Splitter(); + this.panel2 = new System.Windows.Forms.Panel(); + this.panel1.SuspendLayout(); + this.panel2.SuspendLayout(); + this.SuspendLayout(); + // + // treeView1 + // + this.treeView1.Dock = System.Windows.Forms.DockStyle.Fill; + this.treeView1.Location = new System.Drawing.Point(0, 0); + this.treeView1.Name = "treeView1"; + this.treeView1.Size = new System.Drawing.Size(208, 165); + this.treeView1.TabIndex = 0; + this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); + this.treeView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView1_KeyDown); + // + // listView1 + // + this.listView1.Dock = System.Windows.Forms.DockStyle.Fill; + this.listView1.FullRowSelect = true; + this.listView1.GridLines = true; + this.listView1.Location = new System.Drawing.Point(0, 0); + this.listView1.MultiSelect = false; + this.listView1.Name = "listView1"; + this.listView1.Size = new System.Drawing.Size(208, 75); + this.listView1.TabIndex = 0; + this.listView1.UseCompatibleStateImageBehavior = false; + this.listView1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseMove); + // + // panel1 + // + this.panel1.AutoScroll = true; + this.panel1.Controls.Add(this.listView1); + this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel1.Location = new System.Drawing.Point(0, 173); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(208, 75); + this.panel1.TabIndex = 1; + // + // splitter1 + // + this.splitter1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.splitter1.Location = new System.Drawing.Point(0, 165); + this.splitter1.Name = "splitter1"; + this.splitter1.Size = new System.Drawing.Size(208, 8); + this.splitter1.TabIndex = 2; + this.splitter1.TabStop = false; + // + // panel2 + // + this.panel2.Controls.Add(this.treeView1); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(208, 165); + this.panel2.TabIndex = 3; + // + // SolutionExplorer + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(208, 248); + this.Controls.Add(this.panel2); + this.Controls.Add(this.splitter1); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "SolutionExplorer"; + this.TabText = "Solution Explorer"; + this.Text = "Solution Explorer"; + this.panel1.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TreeView treeView1; + private System.Windows.Forms.ListView listView1; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Splitter splitter1; + private System.Windows.Forms.Panel panel2; + + } +} diff --git a/trunk/Solution/SolutionExplorer.resx b/source/Solution/SolutionExplorer.resx similarity index 98% rename from trunk/Solution/SolutionExplorer.resx rename to source/Solution/SolutionExplorer.resx index b27a74a..929bef8 100644 --- a/trunk/Solution/SolutionExplorer.resx +++ b/source/Solution/SolutionExplorer.resx @@ -1,324 +1,324 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - AAABAAcAEBAQAAAAAAAoAQAAdgAAABAQAAAAAAAAaAUAAJ4BAAAYGAAAAAAAAMgGAAAGBwAAICAQAAAA - AADoAgAAzg0AACAgAAAAAAAAqAgAALYQAAAwMBAAAAAAAGgGAABeGQAAMDAAAAAAAACoDgAAxh8AACgA - AAAQAAAAIAAAAAEABAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAgAAAAACAAACA - gACAAIAAgICAAMDAwAAA/wAA/wAAAP//AAAAAP8AAP//AAAAAAD///8AERERERERERERERERERERERER - ERERERERERERERERERERAAAAAAABEXF//////wEREX+IiIiPgBF3F/f////wEREX+I//+PARdxf/d3d3 - +AEREX//////AXdxeqqqq7wBEREXd3d3d3ERERERERERERERERERERERERERERERERH//wAA//8AAP// - AAD//xERwAd4iEAHiIjAA4iIIAMREeADd/8gAf//8AH//xABERH4ARf//////////////xERKAAAABAA - AAAgAAAAAQAIAAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAALJOHQDfjScAeEQoAN+QLgCGUzkAtHU7ANSU - SQDnoEkA6KNOALF8WQBmZmYAtIprAICJiQC+oYwAlJSQAIuWlwCPlpcAmZydAKOlpAC2r6UAlKKsALay - rAC7tq4AuLaxAM3FugDJzMwAz9DNANDQ0ADO09MAy93hANbh5ADW5OgA1+frAOLp6wDn7O0A2OrvANnq - 7wDo8vUA6/T3APP29wAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgoKCgoKCgoKCgoKCgoKCgo - KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgKCgoKCgoKCgoKKCgoKCgAAAAAAAAAAAAAAAooKBco - CSMjIyMjIyMjIwAKKCgoKAkgHBkZGRkZGSUNAgooFhEoCR0QKSkpKSchJAUKKCgoKAkjFBspKSkpHiYL - CigTDigJHyMMDAwMDA8iGgUKKCgoKAkjIyMjIyMjIyMFChgVEigJAwEBAQEBCAcGBQQoKCgoKAAAAAAA - AAAAAAAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo//94iv// - AAD//zMV4AdrbsADAqNAA6OjwAFvkyABAADgAQAAIABnfvAApaQQAKSk+AGYjv//NgD//zEG//9RlCgA - AAAYAAAAMAAAAAEACAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwb+/APr5+QDQy8oA0szKAKGQ - iQCikIgA18jBAHdEKgB3Ri4AjlY5AKp0WQB1UkAAoXFZAHRSQQBxU0QAhmdYAK+MegCykYEAopKKALqy - rgDPy8kAe0gtAJFZOwCxeVkAtH5fAJ1uVQCeb1YAdFNBAIZmVQCGZ1YAu5mGALycigC6m4oAwKaXAJOA - dQCmlIoA3dLMALyzrgDAubUAp25MALJ6WQDBl30Awpl/ALOPegC7nIoAupuJAMCnmADCqZoAqJeNANzS - zADCurUArFITAL9oLgCUhHkArJuPAMrGwwChVxsAwp+DAMG3rwDEu7QA3GkAANaofgDTwK8AwLGkAMa4 - qwDebwAA3W8AANxtAADGuKoA0snAANDIwADpiiUA95w3AO+YPADgtogA37WIAN61iADftokA37eKANXL - wADXzcEA0ci8AOWsWwDotGUA6LVlAOu5aADpuGwA67tvAOq7cQDluHMA3bV2ALa2tQChpaQA2NzbANfb - 2gDg//8AkpubAJOZmQCgpaUAnaKiAKGvsACvuLkA3u7wANzs7gDd5eYA3vr/AOL7/wCdqqwAtbu8ALDA - wwDg6uwA2+XnAO7z9ADd8fYAv9HVAMLT1wC/0NQA2uzwANPk6ADk8PMA5e7wANzk5gDP09QA7fHyAN32 - /QDP4ucAz+HmANvt8gDa7PEA2OrvAN/q7QDl8PMA3ff/AN73/wDd9v4A3PX9ANrw9wDc8PYAwNHWANvs - 8QDa6/AA4/P4AODq7QDl7/IA5O7xAN31/QDg9/8A3PL6ANjq8ADb7PIA4fH3AN7m6QDY4OMA2/P9ANry - /ADb8/4A2vL9ANfv+gDa8/8A7vL0AO3x8wD4+PkA////AP39/QDp6ekAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4eHh4eHh4eHh4eHh0Q - NgAAAAAAAAAAAAsgIS4uLi4uLi4uLi0fCg8AAAAAAEAFEj9gfZKSkpKSkpKSkpJqaRc2AAAAAEcEByuI - goCMdoGBgYGBgYGNhTAMAAAAAAAAAClolXCRkI+Pj4+Pj4N5l14WAAAAAEATBRFRiWVte6ChoaGhoXx6 - eIoaIwAAAEYzFSUqa25dAQKjo6Ojo6Nxb5MiDgAAAAAAAAAZZ35hXKWkpKSkpKSimI5fCDYAAEExBgUR - UZRsYmNjY2NjY2NkZoRyGyMAAFA8JwMyKoZ/i3Nzc3Nzc3N1dHeHLxw2AAAAAAAAGJafnJycnJycnJyb - nZ6amQk2AEU3JAUFLFNWVVRUVFRUVFVZV1hbWjk2AFI7JhQ4ADU9REJDQ0NDQ0NKSEkNKDQ2AAAAAAAA - AAA6Pk9NTU1NTU1MTE5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////Kv///w7///8o////KP///yjwAB8o8AAPToAAB12AAAdD8AAHIIAA - Az2AAAM9+AABPYAAAT2AAABV/AAAXYAAAF2CAABd/wABVf///1X///9V////Vf///1X///9dKAAAACAA - AABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAICAAAAAAIAAAICAAIAA - gACAgIAAwMDAAAD/AAD/AAAA//8AAAAA/wAA//8AAAAAAP///wARERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERAAAAAAAAAAAAAAER - EREREXiIiIiIiIiIiIiAERERABF3////////////8BEREX9xF/////////////cBEREXcReP//////// - ///4AREREREXf/iIiIiIiIiP/wEREQABEX/4f4//////j/9wERF/9xF4+H+I//////j/gBERF3cRd/iH - 9//////4//ARERERERf/h/f/////+P/3ARFwAAEXj4d3d3d3d3eP+AERf//3F3+IiIiIiIiIiP8wERd3 - dxF/////////////cBEREREReP///////////4ARcAAAEXi7u7u7u7u7u7uyAX///3EXqqqqqqqqq6us - ygEXd3dxF6qqqqqqqqqqqqoBERERERF3d3d3d3d3d3d3ERERERERERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - EREREREREREREf//////////////////////////////////////////8AAAf/AAAD8wAAA/GAAAH5gA - AB/4AAAfHAAADwwAAA+MAAAP/gAABwYAAAcCAAADgwAAA/8AAAMDAAABAYAAAYGAAAH/wAAD//////// - ////////////////////////KAAAACAAAABAAAAAAQAIAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAJ44 - AACmQAAAsUsAANNtAADZcgAAmDcGAH4wCQB/MQoAlDoMAHAvDwCDNg8AcDEQAJ5CEwDBZRMAoEQVANN0 - FQCWQRYAl0IXAI9CHAChTCEAznQiANF4JgDzoScAXzsoAGpBKwCdUy4AnlMuAJ5VLwCiWDMAplw3AN+N - OwCjXjwArG5PALF0VQBeXl4As3tfALCIYwBmZmYAhHNoAG5ycgBwd3cAc3h3AHV5eAB2enkAeXt6AHl8 - egB6fHoAe317AH1+ewB+f3wAvJiEALmghgCKiooAkJCMAI6RkAD/zJkApaShAKWloQCmpaEAxLKlAKqq - qgChsLEAysG5AMC+uwDCwLwAury9AMXFwgDGxsMAvsLEANnQxQDNy8cA087JANbQyQDP0M0A4NfNAOnc - 0ADs4NEAv9DUANLa2wDO4OQA0uToAOjo6ADg6OoA6urqANnp7QDY6u8A2ervANvr8ADv8/QA6fP2APj4 - +AD7+/sA/f39AAAAAAA0b/8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d - XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d - XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d - XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dJSUlJSUlJSUl - JSUlJSUlJSUlJSUlXV1dXV1dXV1dXR8SCgcGBgYGBgYGBgYGBgYGBgYGByUmXV1dXV1dXV1dCDtGRkZG - RkZGRkZGRkZGRkZGRkY+BSVdXV1dXUI2XV0gM1VVVVVVVVVVVVVVVVVVVVVVVVUTJV1dXV1dQEA/XV0M - VVVVVVVVVVVVVVVVVVVVVVVVVTILJV1dXV1dXV1dXQ5JVV9fX19fX19fX19fX19fX19VTgUlXV1dXV1d - XV1dICRVVE1NTU1NTU1NTU1NTU1NX1ZVEyVdXV1dNS4qXV1dDFVVPShfPFFfX19fX19fX01YX1UyCyVd - XV1FRT8/XV0OSVU9KF84PF9fX19fX19fUk1fVU4FJV1dXV1dXV1dXSAkVU89KFsiU1pfX19fX19cTV9X - VRMlXV1dXV1dXV1dXQxVVT0oXzRTU19fX19fX19NX1lVMgslXV05MC0qJ11dDklVPSgoKCgoKCgoKCgo - KChNX1VOBSVdXUtLSENEP10gJFVQPT09PT09PT09PT09PT1NVVUTFyVdXV1dXV1dXV0MVVVVVVVVVVVV - VVVVVVVVVVVVVTIJJV1dXV1dXV1dXQ5JVVVVVVVVVVVVVVVVVVVVVVVVTgUlXToxLywrKV1dIw0WFhYW - FhYWFhYWFhYWFhYWFhYWARglTExKR0NBP11dAAQEBAQEBAQEBAQEBAQ3DzcPXg8DASVdXV1dXV1dXV0d - AhQVHh4eHh4eHh4eHh4eHh4eHgMFXV1dXV1dXV1dXV0hHBsaGRkZGRkZGRkZGRkZGRkQEV1dXV1dXV1d - XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d - XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d - XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d - XV1dXV1d//////////////////////////////////////gAAD/wAAAf8AAAHzAAAB8YAAAP+AAAD/gA - AA8cAAAHDAAAB/wAAAf+AAADBgAAAwIAAAH/AAAB/wAAAQMAAAABgAAA/4AAAf/AAAP///////////// - //////////////////8oAAAAMAAAAGAAAAABAAQAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACAAAAAgIAAAAAAgAAAgIAAgACAAICAgADAwMAAAP8AAP8AAAD//wAAAAD/AAD//wAAAAAA////ABER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERAAAAAAAAAAAAAA - AAAAAAABERERERERERd3d3d3d3d3d3d3d3d3d3cgERERERERERd///////////////////ggERERERAB - ERc///////////////////8wEREREX/wERF4//////////////////9yARERERd3ERF3//////////// - //////+CARERERERERFz///////////////////zAREREREREREXj//////////////////3IBERERER - EREXf/iIiIiIiIiIiIiIj//4IBERERAAAREXP/+If/h/////////j///MBEREX//8BEReP+IeP9///// - ////iP//cgERERd3dxERd//4d/94////////+P//ggERERERERERc//4h4+H////////+P//8wERERER - ERERF4/4h3/3////////+I//9yARERERERERF3//h3j4f///////+I//+CARERAAAAERFz//iHd3d3d3 - d3d3d4j//zAREX////AREXj/iIiIiIiIiIiIiIj//3IBERd3d3cREXf//////////////////4IBERER - EREREXP///////////////////MBEREREREREReP//////////////////cgERERERERERd///////// - //////////ggERAAAAABERd6qqqqqqqqqqqqqqqqqqowEX/////wERF6qqqqqqqqqqqqq7q7rMMyARd3 - d3d3ERF6qqqqqqqqqqqqqrqrp8cyAREREREREREXu7u7u7u7u7u7u7u7u7uyARERERERERERd3d3d3d3 - d3d3d3d3d3d3ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER - EREREREREREREf///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP4AAAAB/wAA/gAAAAD/ - AAD+AAAAAP8AAJ4AAAAA/wAADwAAAAB/AACPAAAAAH8AAP8AAAAAfwAA/4AAAAA/AAD/gAAAAD8AAIeA - AAAAPwAAA8AAAAAfAACDwAAAAB8AAP/AAAAAHwAA/+AAAAAPAAD/4AAAAA8AAIHgAAAADwAAAPAAAAAH - AACA8AAAAAcAAP/wAAAABwAA//gAAAADAAD/+AAAAAMAAIB4AAAAAwAAADwAAAABAACAPAAAAAEAAP/+ - AAAAAQAA//8AAAADAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA////////AAD///////8AACgAAAAwAAAAYAAAAAEACAAAAAAAgAoAAAAA - AAAAAAAAAAAAAAAAAACQMAAAmTMAAKE7AACtRwAAu1UAAMNdAADMZgAA020AAN13AAD2kAAAoz0BAIYv - BACbNwQAzGkGAKNEDQBwMRAAnkITAHQ1FAAVFRUAaTIVAKBEFQDTdBUA4oMVAJhDGACgSh4Ao0sfAKFM - IQCaSyMAp08jAJ1NJQClUCUAXzsoAFw9LABhQS8AvHYxANB9MQDeijcAODg4AG5LOADaiTkAvHM9AOGQ - PwB5U0AA3I5AAKxqSQBNTU0AnWhNALN/YwBmZmYAtYRqAO+sagD1s2oAcXFxAHB3dwC4jncAdXp6APa7 - fwD6v38Ae4SEALyYhAB7aoYAh5KSAJOcnACXpaUAmaioAJqmqQCqqqoAra2rAJ+srACvr6wAq66uALSy - rgC3tbAAvLixAL24sQDBu7MAw720AMrCtwDLwrcApra4ANXJuwDXyrwArLy9ANnLvQDczr4A4NDAAOTT - wQDq18QA69jEAPLcxwD13sgAtMXJAM/QzQDGzc4AuszRALvN0gC/0NQAwtPWAMbV2QDJ19sA0trbANvb - 2wDJ2t4Ay9zgANfc4ADa3eEA3uHjAPjw4wDf4uQA2OLlAPjy5QDk5uYA3uLnAOXm5wDS5OgA3OXoAOzr - 6ADr6+kA7uzpAPn06QDq6uoA8u/rAPr16wDW6OwA9vLsAOPr7QD59O0A2OrvANnq7wDo7u8A2+vwAOvt - 8ADt7/AA3ezxAODu8gDv8fIA7vDzAPLz8wD19PMA5fH0APf29AD69/UA6fP2APz69gDt9fcA9/f3APX3 - +ADy+PkA+fz8AAAAAAA0b/8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMJWVlZWVlZWVlZWVlZWV - lQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQERMJWVlZWVlZWVlZWVlZWVlQEvNjY2NjY2NjY2 - NjY2NjY2NjY2NjY2NjY2NjY2NiwBITCVlZWVlZWVlZWVlZWVlQExf39/f39/f39/f39/f39/f39/f39/ - f39/f39/f2QBEzCVlZWVlZWVlTAwlZWVlRcQf39/f39/f39/f39/f39/f39/f39/f39/f39/f38aGDCV - lZWVlZWVa1RJMJWVlZUBXH9/f39/f39/f39/f39/f39/f39/f39/f39/f387ASAwlZWVlZWVlXZscJWV - lZUAMX9/f39/f39/f39/f39/f39/f39/f39/f39/f39kAQ8wlZWVlZWVlZWVlZWVlZUXEH9/f39/f39/ - f39/f39/f39/f39/f39/f39/f39/GgswlZWVlZWVlZWVlZWVlZWVAVx/f5eXl5eXl5eXl5eXl5eXl5eX - l5eXl5eXhX9/OwEfMJWVlZWVlZWVlZWVlZWVADF/f3I/T15eXl5eXl5eXl5eXl5eXl5eXl+XkH9/ZAEP - MJWVlZWVlTAwMDCVlZWVFxB/f38/QDVzc3Nzc3Nzc3Nzc3Nzc3NzbV6Bl39/fxoLMJWVlZWVblhRTEcw - lZWVlQFcf39hPzVGl5cSl5eXl5eXl5eXl5eXl2Bjl4Z/fzsBHzCVlZWVlXx0b2lwlZWVlQAxf397Pz41 - eJclZZeXl5eXl5eXl5eXl21el5N/f2QBDzCVlZWVlZWVlZWVlZWVlRcQf39/Uj81RpdCNJeXl5eXl5eX - l5eXl5JefZeAf38aGTCVlZWVlZWVlZWVlZWVlZUBXH9/Zj81N5eRLZeXl5eXl5eXl5eXl5dgYpeLf387 - AR8wlZWVlZWVlZWVlZWVlZUBMX9/fz89NUaXQkKXl5eXl5eXl5eXl5dBXpeUf39kAQ8wlZWVlTAwMDAw - MJWVlZUdEH9/f1I/NTU1NTU1NTU1NTU1NTU1NTU6W12Xgn9/GhkwlZWVd1lWU05KRTCVlZWVAVx/f2c/ - Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P0SXjn9/OwEfMJWVlX55dXFqaHCVlZWVATF/f39/f39/f39/f39/f39/ - f39/f39/f39/f39/ZAEPMJWVlZWVlZWVlZWVlZWVHRB/f39/f39/f39/f39/f39/f39/f39/f39/f39/ - fxoZMJWVlZWVlZWVlZWVlZWVlQFcf39/f39/f39/f39/f39/f39/f39/f39/f39/fzsBHzCVlZWVlZWV - lZWVlZWVlQExf39/f39/f39/f39/f39/f39/f39/f39/f39/f2QBDzCVlTAwMDAwMDAwlZWVlR0CCQkJ - CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkDHjCVelpXVVBNS0hDMJWVlZUBBwgICAgICAgICAgICAgI - CAgICAg5OQgzORaWliIEASYwlY+NjIqJh4SDiJWVlZUUDg0GBgYGBgYGBgYGBgYGBgYGBgYyOBUpOCku - ljwFASowlZWVlZWVlZWVlZWVlZWVAQojKyQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCcoATCVlZWVlZWV - lZWVlZWVlZWVlRwBAQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBG5WVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV - lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP8AAAAA/wAA/gAAAAD/AAD+AAAAAH8AAP4AAAAAfwAAngAAAAB/AAAPAAAAAD8AAI8A - AAAAPwAA/wAAAAA/AAD/gAAAAB8AAP+AAAAAHwAAh4AAAAAfAAADwAAAAA8AAIPAAAAADwAA/8AAAAAP - AAD/4AAAAAcAAP/gAAAABwAAgeAAAAAHAAAA8AAAAAMAAIDwAAAAAwAA//AAAAADAAD/+AAAAAEAAP/4 - AAAAAQAAgHgAAAABAAAAPAAAAAAAAIA8AAAAAAAA//4AAAABAAD//wAAAAMAAP///////wAA//////// - AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAcAEBAQAAAAAAAoAQAAdgAAABAQAAAAAAAAaAUAAJ4BAAAYGAAAAAAAAMgGAAAGBwAAICAQAAAA + AADoAgAAzg0AACAgAAAAAAAAqAgAALYQAAAwMBAAAAAAAGgGAABeGQAAMDAAAAAAAACoDgAAxh8AACgA + AAAQAAAAIAAAAAEABAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAgAAAAACAAACA + gACAAIAAgICAAMDAwAAA/wAA/wAAAP//AAAAAP8AAP//AAAAAAD///8AERERERERERERERERERERERER + ERERERERERERERERERERAAAAAAABEXF//////wEREX+IiIiPgBF3F/f////wEREX+I//+PARdxf/d3d3 + +AEREX//////AXdxeqqqq7wBEREXd3d3d3ERERERERERERERERERERERERERERERERH//wAA//8AAP// + AAD//xERwAd4iEAHiIjAA4iIIAMREeADd/8gAf//8AH//xABERH4ARf//////////////xERKAAAABAA + AAAgAAAAAQAIAAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAALJOHQDfjScAeEQoAN+QLgCGUzkAtHU7ANSU + SQDnoEkA6KNOALF8WQBmZmYAtIprAICJiQC+oYwAlJSQAIuWlwCPlpcAmZydAKOlpAC2r6UAlKKsALay + rAC7tq4AuLaxAM3FugDJzMwAz9DNANDQ0ADO09MAy93hANbh5ADW5OgA1+frAOLp6wDn7O0A2OrvANnq + 7wDo8vUA6/T3APP29wAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgoKCgoKCgoKCgoKCgoKCgo + KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgKCgoKCgoKCgoKKCgoKCgAAAAAAAAAAAAAAAooKBco + CSMjIyMjIyMjIwAKKCgoKAkgHBkZGRkZGSUNAgooFhEoCR0QKSkpKSchJAUKKCgoKAkjFBspKSkpHiYL + CigTDigJHyMMDAwMDA8iGgUKKCgoKAkjIyMjIyMjIyMFChgVEigJAwEBAQEBCAcGBQQoKCgoKAAAAAAA + AAAAAAAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo//94iv// + AAD//zMV4AdrbsADAqNAA6OjwAFvkyABAADgAQAAIABnfvAApaQQAKSk+AGYjv//NgD//zEG//9RlCgA + AAAYAAAAMAAAAAEACAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwb+/APr5+QDQy8oA0szKAKGQ + iQCikIgA18jBAHdEKgB3Ri4AjlY5AKp0WQB1UkAAoXFZAHRSQQBxU0QAhmdYAK+MegCykYEAopKKALqy + rgDPy8kAe0gtAJFZOwCxeVkAtH5fAJ1uVQCeb1YAdFNBAIZmVQCGZ1YAu5mGALycigC6m4oAwKaXAJOA + dQCmlIoA3dLMALyzrgDAubUAp25MALJ6WQDBl30Awpl/ALOPegC7nIoAupuJAMCnmADCqZoAqJeNANzS + zADCurUArFITAL9oLgCUhHkArJuPAMrGwwChVxsAwp+DAMG3rwDEu7QA3GkAANaofgDTwK8AwLGkAMa4 + qwDebwAA3W8AANxtAADGuKoA0snAANDIwADpiiUA95w3AO+YPADgtogA37WIAN61iADftokA37eKANXL + wADXzcEA0ci8AOWsWwDotGUA6LVlAOu5aADpuGwA67tvAOq7cQDluHMA3bV2ALa2tQChpaQA2NzbANfb + 2gDg//8AkpubAJOZmQCgpaUAnaKiAKGvsACvuLkA3u7wANzs7gDd5eYA3vr/AOL7/wCdqqwAtbu8ALDA + wwDg6uwA2+XnAO7z9ADd8fYAv9HVAMLT1wC/0NQA2uzwANPk6ADk8PMA5e7wANzk5gDP09QA7fHyAN32 + /QDP4ucAz+HmANvt8gDa7PEA2OrvAN/q7QDl8PMA3ff/AN73/wDd9v4A3PX9ANrw9wDc8PYAwNHWANvs + 8QDa6/AA4/P4AODq7QDl7/IA5O7xAN31/QDg9/8A3PL6ANjq8ADb7PIA4fH3AN7m6QDY4OMA2/P9ANry + /ADb8/4A2vL9ANfv+gDa8/8A7vL0AO3x8wD4+PkA////AP39/QDp6ekAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4eHh4eHh4eHh4eHh0Q + NgAAAAAAAAAAAAsgIS4uLi4uLi4uLi0fCg8AAAAAAEAFEj9gfZKSkpKSkpKSkpJqaRc2AAAAAEcEByuI + goCMdoGBgYGBgYGNhTAMAAAAAAAAAClolXCRkI+Pj4+Pj4N5l14WAAAAAEATBRFRiWVte6ChoaGhoXx6 + eIoaIwAAAEYzFSUqa25dAQKjo6Ojo6Nxb5MiDgAAAAAAAAAZZ35hXKWkpKSkpKSimI5fCDYAAEExBgUR + UZRsYmNjY2NjY2NkZoRyGyMAAFA8JwMyKoZ/i3Nzc3Nzc3N1dHeHLxw2AAAAAAAAGJafnJycnJycnJyb + nZ6amQk2AEU3JAUFLFNWVVRUVFRUVFVZV1hbWjk2AFI7JhQ4ADU9REJDQ0NDQ0NKSEkNKDQ2AAAAAAAA + AAA6Pk9NTU1NTU1MTE5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////Kv///w7///8o////KP///yjwAB8o8AAPToAAB12AAAdD8AAHIIAA + Az2AAAM9+AABPYAAAT2AAABV/AAAXYAAAF2CAABd/wABVf///1X///9V////Vf///1X///9dKAAAACAA + AABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAICAAAAAAIAAAICAAIAA + gACAgIAAwMDAAAD/AAD/AAAA//8AAAAA/wAA//8AAAAAAP///wARERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERAAAAAAAAAAAAAAER + EREREXiIiIiIiIiIiIiAERERABF3////////////8BEREX9xF/////////////cBEREXcReP//////// + ///4AREREREXf/iIiIiIiIiP/wEREQABEX/4f4//////j/9wERF/9xF4+H+I//////j/gBERF3cRd/iH + 9//////4//ARERERERf/h/f/////+P/3ARFwAAEXj4d3d3d3d3eP+AERf//3F3+IiIiIiIiIiP8wERd3 + dxF/////////////cBEREREReP///////////4ARcAAAEXi7u7u7u7u7u7uyAX///3EXqqqqqqqqq6us + ygEXd3dxF6qqqqqqqqqqqqoBERERERF3d3d3d3d3d3d3ERERERERERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + EREREREREREREf//////////////////////////////////////////8AAAf/AAAD8wAAA/GAAAH5gA + AB/4AAAfHAAADwwAAA+MAAAP/gAABwYAAAcCAAADgwAAA/8AAAMDAAABAYAAAYGAAAH/wAAD//////// + ////////////////////////KAAAACAAAABAAAAAAQAIAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAJ44 + AACmQAAAsUsAANNtAADZcgAAmDcGAH4wCQB/MQoAlDoMAHAvDwCDNg8AcDEQAJ5CEwDBZRMAoEQVANN0 + FQCWQRYAl0IXAI9CHAChTCEAznQiANF4JgDzoScAXzsoAGpBKwCdUy4AnlMuAJ5VLwCiWDMAplw3AN+N + OwCjXjwArG5PALF0VQBeXl4As3tfALCIYwBmZmYAhHNoAG5ycgBwd3cAc3h3AHV5eAB2enkAeXt6AHl8 + egB6fHoAe317AH1+ewB+f3wAvJiEALmghgCKiooAkJCMAI6RkAD/zJkApaShAKWloQCmpaEAxLKlAKqq + qgChsLEAysG5AMC+uwDCwLwAury9AMXFwgDGxsMAvsLEANnQxQDNy8cA087JANbQyQDP0M0A4NfNAOnc + 0ADs4NEAv9DUANLa2wDO4OQA0uToAOjo6ADg6OoA6urqANnp7QDY6u8A2ervANvr8ADv8/QA6fP2APj4 + +AD7+/sA/f39AAAAAAA0b/8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d + XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d + XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d + XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dJSUlJSUlJSUl + JSUlJSUlJSUlJSUlXV1dXV1dXV1dXR8SCgcGBgYGBgYGBgYGBgYGBgYGByUmXV1dXV1dXV1dCDtGRkZG + RkZGRkZGRkZGRkZGRkY+BSVdXV1dXUI2XV0gM1VVVVVVVVVVVVVVVVVVVVVVVVUTJV1dXV1dQEA/XV0M + VVVVVVVVVVVVVVVVVVVVVVVVVTILJV1dXV1dXV1dXQ5JVV9fX19fX19fX19fX19fX19VTgUlXV1dXV1d + XV1dICRVVE1NTU1NTU1NTU1NTU1NX1ZVEyVdXV1dNS4qXV1dDFVVPShfPFFfX19fX19fX01YX1UyCyVd + XV1FRT8/XV0OSVU9KF84PF9fX19fX19fUk1fVU4FJV1dXV1dXV1dXSAkVU89KFsiU1pfX19fX19cTV9X + VRMlXV1dXV1dXV1dXQxVVT0oXzRTU19fX19fX19NX1lVMgslXV05MC0qJ11dDklVPSgoKCgoKCgoKCgo + KChNX1VOBSVdXUtLSENEP10gJFVQPT09PT09PT09PT09PT1NVVUTFyVdXV1dXV1dXV0MVVVVVVVVVVVV + VVVVVVVVVVVVVTIJJV1dXV1dXV1dXQ5JVVVVVVVVVVVVVVVVVVVVVVVVTgUlXToxLywrKV1dIw0WFhYW + FhYWFhYWFhYWFhYWFhYWARglTExKR0NBP11dAAQEBAQEBAQEBAQEBAQ3DzcPXg8DASVdXV1dXV1dXV0d + AhQVHh4eHh4eHh4eHh4eHh4eHgMFXV1dXV1dXV1dXV0hHBsaGRkZGRkZGRkZGRkZGRkQEV1dXV1dXV1d + XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d + XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d + XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1d + XV1dXV1d//////////////////////////////////////gAAD/wAAAf8AAAHzAAAB8YAAAP+AAAD/gA + AA8cAAAHDAAAB/wAAAf+AAADBgAAAwIAAAH/AAAB/wAAAQMAAAABgAAA/4AAAf/AAAP///////////// + //////////////////8oAAAAMAAAAGAAAAABAAQAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAgIAAAAAAgAAAgIAAgACAAICAgADAwMAAAP8AAP8AAAD//wAAAAD/AAD//wAAAAAA////ABER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERAAAAAAAAAAAAAA + AAAAAAABERERERERERd3d3d3d3d3d3d3d3d3d3cgERERERERERd///////////////////ggERERERAB + ERc///////////////////8wEREREX/wERF4//////////////////9yARERERd3ERF3//////////// + //////+CARERERERERFz///////////////////zAREREREREREXj//////////////////3IBERERER + EREXf/iIiIiIiIiIiIiIj//4IBERERAAAREXP/+If/h/////////j///MBEREX//8BEReP+IeP9///// + ////iP//cgERERd3dxERd//4d/94////////+P//ggERERERERERc//4h4+H////////+P//8wERERER + ERERF4/4h3/3////////+I//9yARERERERERF3//h3j4f///////+I//+CARERAAAAERFz//iHd3d3d3 + d3d3d4j//zAREX////AREXj/iIiIiIiIiIiIiIj//3IBERd3d3cREXf//////////////////4IBERER + EREREXP///////////////////MBEREREREREReP//////////////////cgERERERERERd///////// + //////////ggERAAAAABERd6qqqqqqqqqqqqqqqqqqowEX/////wERF6qqqqqqqqqqqqq7q7rMMyARd3 + d3d3ERF6qqqqqqqqqqqqqrqrp8cyAREREREREREXu7u7u7u7u7u7u7u7u7uyARERERERERERd3d3d3d3 + d3d3d3d3d3d3ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER + EREREREREREREf///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP4AAAAB/wAA/gAAAAD/ + AAD+AAAAAP8AAJ4AAAAA/wAADwAAAAB/AACPAAAAAH8AAP8AAAAAfwAA/4AAAAA/AAD/gAAAAD8AAIeA + AAAAPwAAA8AAAAAfAACDwAAAAB8AAP/AAAAAHwAA/+AAAAAPAAD/4AAAAA8AAIHgAAAADwAAAPAAAAAH + AACA8AAAAAcAAP/wAAAABwAA//gAAAADAAD/+AAAAAMAAIB4AAAAAwAAADwAAAABAACAPAAAAAEAAP/+ + AAAAAQAA//8AAAADAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AACgAAAAwAAAAYAAAAAEACAAAAAAAgAoAAAAA + AAAAAAAAAAAAAAAAAACQMAAAmTMAAKE7AACtRwAAu1UAAMNdAADMZgAA020AAN13AAD2kAAAoz0BAIYv + BACbNwQAzGkGAKNEDQBwMRAAnkITAHQ1FAAVFRUAaTIVAKBEFQDTdBUA4oMVAJhDGACgSh4Ao0sfAKFM + IQCaSyMAp08jAJ1NJQClUCUAXzsoAFw9LABhQS8AvHYxANB9MQDeijcAODg4AG5LOADaiTkAvHM9AOGQ + PwB5U0AA3I5AAKxqSQBNTU0AnWhNALN/YwBmZmYAtYRqAO+sagD1s2oAcXFxAHB3dwC4jncAdXp6APa7 + fwD6v38Ae4SEALyYhAB7aoYAh5KSAJOcnACXpaUAmaioAJqmqQCqqqoAra2rAJ+srACvr6wAq66uALSy + rgC3tbAAvLixAL24sQDBu7MAw720AMrCtwDLwrcApra4ANXJuwDXyrwArLy9ANnLvQDczr4A4NDAAOTT + wQDq18QA69jEAPLcxwD13sgAtMXJAM/QzQDGzc4AuszRALvN0gC/0NQAwtPWAMbV2QDJ19sA0trbANvb + 2wDJ2t4Ay9zgANfc4ADa3eEA3uHjAPjw4wDf4uQA2OLlAPjy5QDk5uYA3uLnAOXm5wDS5OgA3OXoAOzr + 6ADr6+kA7uzpAPn06QDq6uoA8u/rAPr16wDW6OwA9vLsAOPr7QD59O0A2OrvANnq7wDo7u8A2+vwAOvt + 8ADt7/AA3ezxAODu8gDv8fIA7vDzAPLz8wD19PMA5fH0APf29AD69/UA6fP2APz69gDt9fcA9/f3APX3 + +ADy+PkA+fz8AAAAAAA0b/8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMJWVlZWVlZWVlZWVlZWV + lQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQERMJWVlZWVlZWVlZWVlZWVlQEvNjY2NjY2NjY2 + NjY2NjY2NjY2NjY2NjY2NjY2NiwBITCVlZWVlZWVlZWVlZWVlQExf39/f39/f39/f39/f39/f39/f39/ + f39/f39/f2QBEzCVlZWVlZWVlTAwlZWVlRcQf39/f39/f39/f39/f39/f39/f39/f39/f39/f38aGDCV + lZWVlZWVa1RJMJWVlZUBXH9/f39/f39/f39/f39/f39/f39/f39/f39/f387ASAwlZWVlZWVlXZscJWV + lZUAMX9/f39/f39/f39/f39/f39/f39/f39/f39/f39kAQ8wlZWVlZWVlZWVlZWVlZUXEH9/f39/f39/ + f39/f39/f39/f39/f39/f39/f39/GgswlZWVlZWVlZWVlZWVlZWVAVx/f5eXl5eXl5eXl5eXl5eXl5eX + l5eXl5eXhX9/OwEfMJWVlZWVlZWVlZWVlZWVADF/f3I/T15eXl5eXl5eXl5eXl5eXl5eXl+XkH9/ZAEP + MJWVlZWVlTAwMDCVlZWVFxB/f38/QDVzc3Nzc3Nzc3Nzc3Nzc3NzbV6Bl39/fxoLMJWVlZWVblhRTEcw + lZWVlQFcf39hPzVGl5cSl5eXl5eXl5eXl5eXl2Bjl4Z/fzsBHzCVlZWVlXx0b2lwlZWVlQAxf397Pz41 + eJclZZeXl5eXl5eXl5eXl21el5N/f2QBDzCVlZWVlZWVlZWVlZWVlRcQf39/Uj81RpdCNJeXl5eXl5eX + l5eXl5JefZeAf38aGTCVlZWVlZWVlZWVlZWVlZUBXH9/Zj81N5eRLZeXl5eXl5eXl5eXl5dgYpeLf387 + AR8wlZWVlZWVlZWVlZWVlZUBMX9/fz89NUaXQkKXl5eXl5eXl5eXl5dBXpeUf39kAQ8wlZWVlTAwMDAw + MJWVlZUdEH9/f1I/NTU1NTU1NTU1NTU1NTU1NTU6W12Xgn9/GhkwlZWVd1lWU05KRTCVlZWVAVx/f2c/ + Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P0SXjn9/OwEfMJWVlX55dXFqaHCVlZWVATF/f39/f39/f39/f39/f39/ + f39/f39/f39/f39/ZAEPMJWVlZWVlZWVlZWVlZWVHRB/f39/f39/f39/f39/f39/f39/f39/f39/f39/ + fxoZMJWVlZWVlZWVlZWVlZWVlQFcf39/f39/f39/f39/f39/f39/f39/f39/f39/fzsBHzCVlZWVlZWV + lZWVlZWVlQExf39/f39/f39/f39/f39/f39/f39/f39/f39/f2QBDzCVlTAwMDAwMDAwlZWVlR0CCQkJ + CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkDHjCVelpXVVBNS0hDMJWVlZUBBwgICAgICAgICAgICAgI + CAgICAg5OQgzORaWliIEASYwlY+NjIqJh4SDiJWVlZUUDg0GBgYGBgYGBgYGBgYGBgYGBgYyOBUpOCku + ljwFASowlZWVlZWVlZWVlZWVlZWVAQojKyQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCcoATCVlZWVlZWV + lZWVlZWVlZWVlRwBAQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBG5WVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV + lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP8AAAAA/wAA/gAAAAD/AAD+AAAAAH8AAP4AAAAAfwAAngAAAAB/AAAPAAAAAD8AAI8A + AAAAPwAA/wAAAAA/AAD/gAAAAB8AAP+AAAAAHwAAh4AAAAAfAAADwAAAAA8AAIPAAAAADwAA/8AAAAAP + AAD/4AAAAAcAAP/gAAAABwAAgeAAAAAHAAAA8AAAAAMAAIDwAAAAAwAA//AAAAADAAD/+AAAAAEAAP/4 + AAAAAQAAgHgAAAABAAAAPAAAAAAAAIA8AAAAAAAA//4AAAABAAD//wAAAAMAAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA + + \ No newline at end of file diff --git a/trunk/Solution/SvnAguments.Designer.cs b/source/Solution/SvnAguments.Designer.cs similarity index 97% rename from trunk/Solution/SvnAguments.Designer.cs rename to source/Solution/SvnAguments.Designer.cs index bf6f453..1d92b06 100644 --- a/trunk/Solution/SvnAguments.Designer.cs +++ b/source/Solution/SvnAguments.Designer.cs @@ -1,139 +1,139 @@ -namespace LSLEditor.Solution -{ - partial class SvnAguments - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.button1 = new System.Windows.Forms.Button(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.button2 = new System.Windows.Forms.Button(); - this.groupBox1.SuspendLayout(); - this.SuspendLayout(); - // - // button1 - // - this.button1.Location = new System.Drawing.Point(144, 96); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(75, 23); - this.button1.TabIndex = 0; - this.button1.Text = "Ok"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.textBox2); - this.groupBox1.Controls.Add(this.label2); - this.groupBox1.Controls.Add(this.textBox1); - this.groupBox1.Controls.Add(this.label1); - this.groupBox1.Location = new System.Drawing.Point(8, 8); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(312, 80); - this.groupBox1.TabIndex = 1; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "repository properties"; - // - // textBox2 - // - this.textBox2.Location = new System.Drawing.Point(88, 48); - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(208, 20); - this.textBox2.TabIndex = 3; - this.textBox2.Text = "Initial import"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(24, 48); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(51, 13); - this.label2.TabIndex = 2; - this.label2.Text = "Comment"; - // - // textBox1 - // - this.textBox1.Location = new System.Drawing.Point(88, 24); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(208, 20); - this.textBox1.TabIndex = 1; - this.textBox1.Text = "file:///d:/temp/svn/"; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(24, 24); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(57, 13); - this.label1.TabIndex = 0; - this.label1.Text = "Repository"; - // - // button2 - // - this.button2.Location = new System.Drawing.Point(232, 96); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(75, 23); - this.button2.TabIndex = 2; - this.button2.Text = "Cancel"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // SvnAguments - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(335, 132); - this.Controls.Add(this.button2); - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.button1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "SvnAguments"; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "Svn Arguments"; - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.Button button1; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Button button2; - } +namespace LSLEditor.Solution +{ + partial class SvnAguments + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.button1 = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.button2 = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(144, 96); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 0; + this.button1.Text = "Ok"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.textBox2); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.textBox1); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Location = new System.Drawing.Point(8, 8); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(312, 80); + this.groupBox1.TabIndex = 1; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "repository properties"; + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(88, 48); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(208, 20); + this.textBox2.TabIndex = 3; + this.textBox2.Text = "Initial import"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(24, 48); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(51, 13); + this.label2.TabIndex = 2; + this.label2.Text = "Comment"; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(88, 24); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(208, 20); + this.textBox1.TabIndex = 1; + this.textBox1.Text = "file:///d:/temp/svn/"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(24, 24); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(57, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Repository"; + // + // button2 + // + this.button2.Location = new System.Drawing.Point(232, 96); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 2; + this.button2.Text = "Cancel"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // SvnAguments + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(335, 132); + this.Controls.Add(this.button2); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.button1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "SvnAguments"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Svn Arguments"; + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button button1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button button2; + } } \ No newline at end of file diff --git a/trunk/Solution/SvnAguments.cs b/source/Solution/SvnAguments.cs similarity index 96% rename from trunk/Solution/SvnAguments.cs rename to source/Solution/SvnAguments.cs index e5d952b..c553774 100644 --- a/trunk/Solution/SvnAguments.cs +++ b/source/Solution/SvnAguments.cs @@ -1,103 +1,103 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.IO; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace LSLEditor.Solution -{ - public partial class SvnAguments : Form - { - public SvnAguments() - { - InitializeComponent(); - this.DialogResult = DialogResult.Cancel; - } - - public string Repository - { - get - { - return this.textBox1.Text.Trim(); - } - set - { - this.textBox1.Text = value; - } - } - - public string Comment - { - get - { - return this.textBox2.Text.Trim(); - } - set - { - this.textBox2.Text = value; - } - } - - public bool ReadOnly - { - set - { - this.textBox1.Enabled = !value; - } - } - - private void button1_Click(object sender, EventArgs e) - { - //Import(); - this.DialogResult = DialogResult.OK; - this.Close(); - } - - private void button2_Click(object sender, EventArgs e) - { - this.DialogResult = DialogResult.Cancel; - this.Close(); - } - } +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.IO; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace LSLEditor.Solution +{ + public partial class SvnAguments : Form + { + public SvnAguments() + { + InitializeComponent(); + this.DialogResult = DialogResult.Cancel; + } + + public string Repository + { + get + { + return this.textBox1.Text.Trim(); + } + set + { + this.textBox1.Text = value; + } + } + + public string Comment + { + get + { + return this.textBox2.Text.Trim(); + } + set + { + this.textBox2.Text = value; + } + } + + public bool ReadOnly + { + set + { + this.textBox1.Enabled = !value; + } + } + + private void button1_Click(object sender, EventArgs e) + { + //Import(); + this.DialogResult = DialogResult.OK; + this.Close(); + } + + private void button2_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + this.Close(); + } + } } \ No newline at end of file diff --git a/trunk/Solution/SvnAguments.resx b/source/Solution/SvnAguments.resx similarity index 97% rename from trunk/Solution/SvnAguments.resx rename to source/Solution/SvnAguments.resx index ff31a6d..19dc0dd 100644 --- a/trunk/Solution/SvnAguments.resx +++ b/source/Solution/SvnAguments.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/trunk/SyntaxError.Designer.cs b/source/SyntaxError.Designer.cs similarity index 97% rename from trunk/SyntaxError.Designer.cs rename to source/SyntaxError.Designer.cs index 06918c0..64afb68 100644 --- a/trunk/SyntaxError.Designer.cs +++ b/source/SyntaxError.Designer.cs @@ -1,176 +1,176 @@ -namespace LSLEditor -{ - partial class SyntaxError - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SyntaxError)); - this.listView1 = new System.Windows.Forms.ListView(); - this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); - this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); - this.columnHeader3 = new System.Windows.Forms.ColumnHeader(); - this.columnHeader4 = new System.Windows.Forms.ColumnHeader(); - this.columnHeader5 = new System.Windows.Forms.ColumnHeader(); - this.columnHeader6 = new System.Windows.Forms.ColumnHeader(); - this.columnHeader7 = new System.Windows.Forms.ColumnHeader(); - this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.copyLineToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.copyDescriptionOnlyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.imageList1 = new System.Windows.Forms.ImageList(this.components); - this.contextMenuStrip1.SuspendLayout(); - this.SuspendLayout(); - // - // listView1 - // - this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.columnHeader1, - this.columnHeader2, - this.columnHeader3, - this.columnHeader4, - this.columnHeader5, - this.columnHeader6, - this.columnHeader7}); - this.listView1.ContextMenuStrip = this.contextMenuStrip1; - this.listView1.Dock = System.Windows.Forms.DockStyle.Fill; - this.listView1.FullRowSelect = true; - this.listView1.GridLines = true; - this.listView1.Location = new System.Drawing.Point(0, 0); - this.listView1.Name = "listView1"; - this.listView1.Size = new System.Drawing.Size(507, 104); - this.listView1.SmallImageList = this.imageList1; - this.listView1.TabIndex = 1; - this.listView1.UseCompatibleStateImageBehavior = false; - this.listView1.View = System.Windows.Forms.View.Details; - this.listView1.Resize += new System.EventHandler(this.listView1_Resize); - this.listView1.DoubleClick += new System.EventHandler(this.listView1_DoubleClick); - this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listView1_KeyDown); - // - // columnHeader1 - // - this.columnHeader1.Text = ""; - this.columnHeader1.Width = 25; - // - // columnHeader2 - // - this.columnHeader2.Text = ""; - this.columnHeader2.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; - this.columnHeader2.Width = 40; - // - // columnHeader3 - // - this.columnHeader3.Text = "Description"; - this.columnHeader3.Width = 200; - // - // columnHeader4 - // - this.columnHeader4.Text = "File"; - this.columnHeader4.Width = 100; - // - // columnHeader5 - // - this.columnHeader5.Text = "Line"; - this.columnHeader5.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; - this.columnHeader5.Width = 40; - // - // columnHeader6 - // - this.columnHeader6.Text = "Chr"; - this.columnHeader6.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; - this.columnHeader6.Width = 40; - // - // columnHeader7 - // - this.columnHeader7.Text = "Project"; - // - // contextMenuStrip1 - // - this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.copyLineToolStripMenuItem, - this.copyDescriptionOnlyToolStripMenuItem}); - this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(190, 48); - // - // copyLineToolStripMenuItem - // - this.copyLineToolStripMenuItem.Name = "copyLineToolStripMenuItem"; - this.copyLineToolStripMenuItem.Size = new System.Drawing.Size(189, 22); - this.copyLineToolStripMenuItem.Text = "Copy"; - this.copyLineToolStripMenuItem.Click += new System.EventHandler(this.copyLineToolStripMenuItem_Click); - // - // copyDescriptionOnlyToolStripMenuItem - // - this.copyDescriptionOnlyToolStripMenuItem.Name = "copyDescriptionOnlyToolStripMenuItem"; - this.copyDescriptionOnlyToolStripMenuItem.Size = new System.Drawing.Size(189, 22); - this.copyDescriptionOnlyToolStripMenuItem.Text = "Copy Description only"; - this.copyDescriptionOnlyToolStripMenuItem.Click += new System.EventHandler(this.copyDescriptionOnlyToolStripMenuItem_Click); - // - // imageList1 - // - this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); - this.imageList1.TransparentColor = System.Drawing.Color.Magenta; - this.imageList1.Images.SetKeyName(0, ""); - this.imageList1.Images.SetKeyName(1, ""); - // - // SyntaxError - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(507, 104); - this.Controls.Add(this.listView1); - this.DockAreas = ((LSLEditor.Docking.DockAreas)(((((LSLEditor.Docking.DockAreas.Float | LSLEditor.Docking.DockAreas.DockLeft) - | LSLEditor.Docking.DockAreas.DockRight) - | LSLEditor.Docking.DockAreas.DockTop) - | LSLEditor.Docking.DockAreas.DockBottom))); - this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.HideOnClose = true; - this.Name = "SyntaxError"; - this.ShowHint = LSLEditor.Docking.DockState.DockBottom; - this.ShowIcon = false; - this.TabText = "Error List"; - this.Text = "Error List"; - this.contextMenuStrip1.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.ListView listView1; - private System.Windows.Forms.ColumnHeader columnHeader1; - private System.Windows.Forms.ColumnHeader columnHeader2; - private System.Windows.Forms.ColumnHeader columnHeader3; - private System.Windows.Forms.ColumnHeader columnHeader4; - private System.Windows.Forms.ColumnHeader columnHeader5; - private System.Windows.Forms.ColumnHeader columnHeader6; - private System.Windows.Forms.ColumnHeader columnHeader7; - private System.Windows.Forms.ImageList imageList1; - private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; - private System.Windows.Forms.ToolStripMenuItem copyLineToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem copyDescriptionOnlyToolStripMenuItem; - } -} +namespace LSLEditor +{ + partial class SyntaxError + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SyntaxError)); + this.listView1 = new System.Windows.Forms.ListView(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader3 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader4 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader5 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader6 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader7 = new System.Windows.Forms.ColumnHeader(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.copyLineToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.copyDescriptionOnlyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.imageList1 = new System.Windows.Forms.ImageList(this.components); + this.contextMenuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // listView1 + // + this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader1, + this.columnHeader2, + this.columnHeader3, + this.columnHeader4, + this.columnHeader5, + this.columnHeader6, + this.columnHeader7}); + this.listView1.ContextMenuStrip = this.contextMenuStrip1; + this.listView1.Dock = System.Windows.Forms.DockStyle.Fill; + this.listView1.FullRowSelect = true; + this.listView1.GridLines = true; + this.listView1.Location = new System.Drawing.Point(0, 0); + this.listView1.Name = "listView1"; + this.listView1.Size = new System.Drawing.Size(507, 104); + this.listView1.SmallImageList = this.imageList1; + this.listView1.TabIndex = 1; + this.listView1.UseCompatibleStateImageBehavior = false; + this.listView1.View = System.Windows.Forms.View.Details; + this.listView1.Resize += new System.EventHandler(this.listView1_Resize); + this.listView1.DoubleClick += new System.EventHandler(this.listView1_DoubleClick); + this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listView1_KeyDown); + // + // columnHeader1 + // + this.columnHeader1.Text = ""; + this.columnHeader1.Width = 25; + // + // columnHeader2 + // + this.columnHeader2.Text = ""; + this.columnHeader2.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.columnHeader2.Width = 40; + // + // columnHeader3 + // + this.columnHeader3.Text = "Description"; + this.columnHeader3.Width = 200; + // + // columnHeader4 + // + this.columnHeader4.Text = "File"; + this.columnHeader4.Width = 100; + // + // columnHeader5 + // + this.columnHeader5.Text = "Line"; + this.columnHeader5.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.columnHeader5.Width = 40; + // + // columnHeader6 + // + this.columnHeader6.Text = "Chr"; + this.columnHeader6.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.columnHeader6.Width = 40; + // + // columnHeader7 + // + this.columnHeader7.Text = "Project"; + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.copyLineToolStripMenuItem, + this.copyDescriptionOnlyToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(190, 48); + // + // copyLineToolStripMenuItem + // + this.copyLineToolStripMenuItem.Name = "copyLineToolStripMenuItem"; + this.copyLineToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.copyLineToolStripMenuItem.Text = "Copy"; + this.copyLineToolStripMenuItem.Click += new System.EventHandler(this.copyLineToolStripMenuItem_Click); + // + // copyDescriptionOnlyToolStripMenuItem + // + this.copyDescriptionOnlyToolStripMenuItem.Name = "copyDescriptionOnlyToolStripMenuItem"; + this.copyDescriptionOnlyToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.copyDescriptionOnlyToolStripMenuItem.Text = "Copy Description only"; + this.copyDescriptionOnlyToolStripMenuItem.Click += new System.EventHandler(this.copyDescriptionOnlyToolStripMenuItem_Click); + // + // imageList1 + // + this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); + this.imageList1.TransparentColor = System.Drawing.Color.Magenta; + this.imageList1.Images.SetKeyName(0, ""); + this.imageList1.Images.SetKeyName(1, ""); + // + // SyntaxError + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(507, 104); + this.Controls.Add(this.listView1); + this.DockAreas = ((LSLEditor.Docking.DockAreas)(((((LSLEditor.Docking.DockAreas.Float | LSLEditor.Docking.DockAreas.DockLeft) + | LSLEditor.Docking.DockAreas.DockRight) + | LSLEditor.Docking.DockAreas.DockTop) + | LSLEditor.Docking.DockAreas.DockBottom))); + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.HideOnClose = true; + this.Name = "SyntaxError"; + this.ShowHint = LSLEditor.Docking.DockState.DockBottom; + this.ShowIcon = false; + this.TabText = "Error List"; + this.Text = "Error List"; + this.contextMenuStrip1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ListView listView1; + private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.ColumnHeader columnHeader2; + private System.Windows.Forms.ColumnHeader columnHeader3; + private System.Windows.Forms.ColumnHeader columnHeader4; + private System.Windows.Forms.ColumnHeader columnHeader5; + private System.Windows.Forms.ColumnHeader columnHeader6; + private System.Windows.Forms.ColumnHeader columnHeader7; + private System.Windows.Forms.ImageList imageList1; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem copyLineToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem copyDescriptionOnlyToolStripMenuItem; + } +} diff --git a/trunk/SyntaxError.cs b/source/SyntaxError.cs similarity index 96% rename from trunk/SyntaxError.cs rename to source/SyntaxError.cs index 69ab96b..406486b 100644 --- a/trunk/SyntaxError.cs +++ b/source/SyntaxError.cs @@ -1,180 +1,180 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Text; -using System.Drawing; -using System.Windows.Forms; -using LSLEditor.Docking; - -namespace LSLEditor -{ - public partial class SyntaxError : DockContent - { - public SyntaxError() - { - InitializeComponent(); - } - - public void Clear() - { - this.listView1.Items.Clear(); - } - - public ListView ListView - { - get - { - return this.listView1; - } - } - - public bool HasErrors - { - get - { - return (this.listView1.Items.Count > 0); - } - } - - public class SyntaxErrorEventArgs : EventArgs - { - public string FullPathName; - public Guid EditFormGuid; - public bool IsScript; - public int Line; - public int Char; - public SyntaxErrorEventArgs(string strPath, Guid guid, bool isScript, int intLine, int intChar) - { - this.FullPathName = strPath; - this.IsScript = isScript; - this.EditFormGuid = guid; - this.Line = intLine; - this.Char = intChar; - } - } - - public delegate void SyntaxErrorHandler(object sender, SyntaxErrorEventArgs e); - - public event SyntaxErrorHandler OnSyntaxError; - - private void DoSyntaxError(string strPath, Guid guid, bool isScript, int intLine, int intChar) - { - if(OnSyntaxError != null) - OnSyntaxError(this, new SyntaxErrorEventArgs(strPath, guid, isScript, intLine, intChar)); - } - - private void listView1_DoubleClick(object sender, EventArgs e) - { - foreach (ListViewItem lvi in this.listView1.Items) - lvi.BackColor = this.listView1.BackColor; - - if (this.listView1.SelectedItems.Count == 1) - { - ListViewItem lvi = this.listView1.SelectedItems[0]; - lvi.BackColor = SystemColors.Control; - int intLine, intChr; - if (int.TryParse(lvi.SubItems[4].Text, out intLine) && - int.TryParse(lvi.SubItems[5].Text, out intChr)) - { - string strPath = lvi.SubItems[7].Text; - Guid guid = new Guid(lvi.SubItems[8].Text); - bool isScript = Convert.ToBoolean(lvi.SubItems[9].Text); - DoSyntaxError(strPath,guid,isScript, intLine, intChr); - } - } - } - - private void listView1_Resize(object sender, EventArgs e) - { - if (this.listView1.Columns.Count == 0) - return; - int intWidth = 0; - for (int intI = 0; intI < this.listView1.Columns.Count; intI++) - { - if (intI != 2) - intWidth += this.listView1.Columns[intI].Width; - } - this.listView1.Columns[2].Width = this.listView1.Width - intWidth - 50; - } - - private void CopyToClipboard(bool blnDescriptionOnly) - { - if (this.listView1.SelectedItems.Count > 0) - { - StringBuilder sb = new StringBuilder(); - //sb.AppendFormat("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\r\n", this.listView1.Columns[1].Text, this.listView1.Columns[2].Text, this.listView1.Columns[3].Text, this.listView1.Columns[4].Text, this.listView1.Columns[5].Text, this.listView1.Columns[6].Text); - foreach (ListViewItem lvi in this.listView1.SelectedItems) - { - if(blnDescriptionOnly) - sb.AppendFormat("{0}\r\n", lvi.SubItems[2].Text); - else - sb.AppendFormat("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\r\n", lvi.SubItems[1].Text, lvi.SubItems[2].Text, lvi.SubItems[3].Text, lvi.SubItems[4].Text, lvi.SubItems[5].Text, lvi.SubItems[6].Text); - } - Clipboard.SetDataObject(sb.ToString(), true); - } - } - - private void listView1_KeyDown(object sender, KeyEventArgs e) - { - if (e.Control) - { - if (e.KeyCode == Keys.A) - { - foreach (ListViewItem lvi in this.listView1.Items) - lvi.Selected = true; - } - if (e.KeyCode == Keys.C) - { - CopyToClipboard(false); - } - } - } - - private void copyLineToolStripMenuItem_Click(object sender, EventArgs e) - { - CopyToClipboard(false); - } - - private void copyDescriptionOnlyToolStripMenuItem_Click(object sender, EventArgs e) - { - CopyToClipboard(true); - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Text; +using System.Drawing; +using System.Windows.Forms; +using LSLEditor.Docking; + +namespace LSLEditor +{ + public partial class SyntaxError : DockContent + { + public SyntaxError() + { + InitializeComponent(); + } + + public void Clear() + { + this.listView1.Items.Clear(); + } + + public ListView ListView + { + get + { + return this.listView1; + } + } + + public bool HasErrors + { + get + { + return (this.listView1.Items.Count > 0); + } + } + + public class SyntaxErrorEventArgs : EventArgs + { + public string FullPathName; + public Guid EditFormGuid; + public bool IsScript; + public int Line; + public int Char; + public SyntaxErrorEventArgs(string strPath, Guid guid, bool isScript, int intLine, int intChar) + { + this.FullPathName = strPath; + this.IsScript = isScript; + this.EditFormGuid = guid; + this.Line = intLine; + this.Char = intChar; + } + } + + public delegate void SyntaxErrorHandler(object sender, SyntaxErrorEventArgs e); + + public event SyntaxErrorHandler OnSyntaxError; + + private void DoSyntaxError(string strPath, Guid guid, bool isScript, int intLine, int intChar) + { + if(OnSyntaxError != null) + OnSyntaxError(this, new SyntaxErrorEventArgs(strPath, guid, isScript, intLine, intChar)); + } + + private void listView1_DoubleClick(object sender, EventArgs e) + { + foreach (ListViewItem lvi in this.listView1.Items) + lvi.BackColor = this.listView1.BackColor; + + if (this.listView1.SelectedItems.Count == 1) + { + ListViewItem lvi = this.listView1.SelectedItems[0]; + lvi.BackColor = SystemColors.Control; + int intLine, intChr; + if (int.TryParse(lvi.SubItems[4].Text, out intLine) && + int.TryParse(lvi.SubItems[5].Text, out intChr)) + { + string strPath = lvi.SubItems[7].Text; + Guid guid = new Guid(lvi.SubItems[8].Text); + bool isScript = Convert.ToBoolean(lvi.SubItems[9].Text); + DoSyntaxError(strPath,guid,isScript, intLine, intChr); + } + } + } + + private void listView1_Resize(object sender, EventArgs e) + { + if (this.listView1.Columns.Count == 0) + return; + int intWidth = 0; + for (int intI = 0; intI < this.listView1.Columns.Count; intI++) + { + if (intI != 2) + intWidth += this.listView1.Columns[intI].Width; + } + this.listView1.Columns[2].Width = this.listView1.Width - intWidth - 50; + } + + private void CopyToClipboard(bool blnDescriptionOnly) + { + if (this.listView1.SelectedItems.Count > 0) + { + StringBuilder sb = new StringBuilder(); + //sb.AppendFormat("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\r\n", this.listView1.Columns[1].Text, this.listView1.Columns[2].Text, this.listView1.Columns[3].Text, this.listView1.Columns[4].Text, this.listView1.Columns[5].Text, this.listView1.Columns[6].Text); + foreach (ListViewItem lvi in this.listView1.SelectedItems) + { + if(blnDescriptionOnly) + sb.AppendFormat("{0}\r\n", lvi.SubItems[2].Text); + else + sb.AppendFormat("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\r\n", lvi.SubItems[1].Text, lvi.SubItems[2].Text, lvi.SubItems[3].Text, lvi.SubItems[4].Text, lvi.SubItems[5].Text, lvi.SubItems[6].Text); + } + Clipboard.SetDataObject(sb.ToString(), true); + } + } + + private void listView1_KeyDown(object sender, KeyEventArgs e) + { + if (e.Control) + { + if (e.KeyCode == Keys.A) + { + foreach (ListViewItem lvi in this.listView1.Items) + lvi.Selected = true; + } + if (e.KeyCode == Keys.C) + { + CopyToClipboard(false); + } + } + } + + private void copyLineToolStripMenuItem_Click(object sender, EventArgs e) + { + CopyToClipboard(false); + } + + private void copyDescriptionOnlyToolStripMenuItem_Click(object sender, EventArgs e) + { + CopyToClipboard(true); + } + } +} diff --git a/trunk/SyntaxError.resx b/source/SyntaxError.resx similarity index 98% rename from trunk/SyntaxError.resx rename to source/SyntaxError.resx index 76cd9d7..9a3225d 100644 --- a/trunk/SyntaxError.resx +++ b/source/SyntaxError.resx @@ -1,175 +1,175 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 122, 17 - - - 17, 17 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACk - CQAAAk1TRnQBSQFMAgEBAgEAAQQBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAAfYBeQUqAwMEKgED - AVEwAAEbATEBNwE4CjcBOAEwDQAB8AHrAQcgAAEbAVgBWQFeAzgBMQERATEEOAE3AUsMAAEHARMBUgFK - IQABGgFZAl4COAHrARQBEAM4AfsBMAFzCwABBwETAVIBmgFzIQAB9gFZA14B+wExAesBMQI4AV4BNwEq - AfQKAAEHARMBUgGaAXMjAAGgAVkB5QJeATcBMQE3AjgB+wEwAXMEAAHyAQcBrgJsAa4B7wEVAVIBmgFz - JAAB9gFYAuUBXgE3AREBNwE4AfsBOAEDAfIDAAHwAa4BkQG0AbUBtAGuAWwBUQGaAXMmAAGaAVkBoAFe - AVEBFAEDATgB+wExAVEDAAH0Aa4BtQQJAbsBkQFsAXMnAAH2AVgBoAHlAW0B7QEiATcB+wEqARoDAAHv - AbUEGQIJAbUBrgFtKAABmgFZAXkB7AH3ARABNwExAVEEAAH3AbsCGQHzAhkCCQG0Aa4oAAH2AVkBeQHs - Ae8BQwE3AQMBmQQAAewB8AHzAfQB/wH0ARkCCQG1AWwpAAGaAVkBeQFtAVEBNwFRBQAB7wEHAfQC/wH0 - AfMBGQEJAbQBbCkAAfYBWANeAQMBmQUAAfEB7wHzAv8B9AIZAQkBkQH3KgABmgFZAeUBNwFLAf8FAAH0 - Ae8BvAL0AfMBGQEJAbUBbAHzKgAB9gNYAZkHAAHyAe8BBwK8AbsBkQGuAbwsAAH2CwAB9AHxAQcB9wHt - Ae8B8yYAAUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8DAAL/BgAB/wH4BgAB/wHw - BAABgAEAAf8B4AQAAYABAAH/AcEEAAHAAQEB4AEDBAABwAEBAcABBwQAAeABAwGAAQ8EAAHgAQMBgAEP - BAAB8AEHAYABDwQAAfABBwGAAQ8EAAH4AQ8BgAEPBAAB+AEPAYABDwQAAfwBDwGAAQ8EAAH8AR8BwAEf - BAAB/gH/AeABPwQACw== - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 122, 17 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACk + CQAAAk1TRnQBSQFMAgEBAgEAAQQBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAAfYBeQUqAwMEKgED + AVEwAAEbATEBNwE4CjcBOAEwDQAB8AHrAQcgAAEbAVgBWQFeAzgBMQERATEEOAE3AUsMAAEHARMBUgFK + IQABGgFZAl4COAHrARQBEAM4AfsBMAFzCwABBwETAVIBmgFzIQAB9gFZA14B+wExAesBMQI4AV4BNwEq + AfQKAAEHARMBUgGaAXMjAAGgAVkB5QJeATcBMQE3AjgB+wEwAXMEAAHyAQcBrgJsAa4B7wEVAVIBmgFz + JAAB9gFYAuUBXgE3AREBNwE4AfsBOAEDAfIDAAHwAa4BkQG0AbUBtAGuAWwBUQGaAXMmAAGaAVkBoAFe + AVEBFAEDATgB+wExAVEDAAH0Aa4BtQQJAbsBkQFsAXMnAAH2AVgBoAHlAW0B7QEiATcB+wEqARoDAAHv + AbUEGQIJAbUBrgFtKAABmgFZAXkB7AH3ARABNwExAVEEAAH3AbsCGQHzAhkCCQG0Aa4oAAH2AVkBeQHs + Ae8BQwE3AQMBmQQAAewB8AHzAfQB/wH0ARkCCQG1AWwpAAGaAVkBeQFtAVEBNwFRBQAB7wEHAfQC/wH0 + AfMBGQEJAbQBbCkAAfYBWANeAQMBmQUAAfEB7wHzAv8B9AIZAQkBkQH3KgABmgFZAeUBNwFLAf8FAAH0 + Ae8BvAL0AfMBGQEJAbUBbAHzKgAB9gNYAZkHAAHyAe8BBwK8AbsBkQGuAbwsAAH2CwAB9AHxAQcB9wHt + Ae8B8yYAAUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8DAAL/BgAB/wH4BgAB/wHw + BAABgAEAAf8B4AQAAYABAAH/AcEEAAHAAQEB4AEDBAABwAEBAcABBwQAAeABAwGAAQ8EAAHgAQMBgAEP + BAAB8AEHAYABDwQAAfABBwGAAQ8EAAH4AQ8BgAEPBAAB+AEPAYABDwQAAfwBDwGAAQ8EAAH8AR8BwAEf + BAAB/gH/AeABPwQACw== + + \ No newline at end of file diff --git a/trunk/ToolWindow.Designer.cs b/source/ToolWindow.Designer.cs similarity index 97% rename from trunk/ToolWindow.Designer.cs rename to source/ToolWindow.Designer.cs index e9cf106..70e24c8 100644 --- a/trunk/ToolWindow.Designer.cs +++ b/source/ToolWindow.Designer.cs @@ -1,51 +1,51 @@ -namespace LSLEditor -{ - partial class ToolWindow - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.SuspendLayout(); - // - // ToolWindow - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(292, 273); - this.DockAreas = ((LSLEditor.Docking.DockAreas)(((((LSLEditor.Docking.DockAreas.Float | LSLEditor.Docking.DockAreas.DockLeft) - | LSLEditor.Docking.DockAreas.DockRight) - | LSLEditor.Docking.DockAreas.DockTop) - | LSLEditor.Docking.DockAreas.DockBottom))); - this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Name = "ToolWindow"; - this.Text = "ToolWindow"; - this.ResumeLayout(false); - - } - - #endregion - } +namespace LSLEditor +{ + partial class ToolWindow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // ToolWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(292, 273); + this.DockAreas = ((LSLEditor.Docking.DockAreas)(((((LSLEditor.Docking.DockAreas.Float | LSLEditor.Docking.DockAreas.DockLeft) + | LSLEditor.Docking.DockAreas.DockRight) + | LSLEditor.Docking.DockAreas.DockTop) + | LSLEditor.Docking.DockAreas.DockBottom))); + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Name = "ToolWindow"; + this.Text = "ToolWindow"; + this.ResumeLayout(false); + + } + + #endregion + } } \ No newline at end of file diff --git a/trunk/ToolWindow.cs b/source/ToolWindow.cs similarity index 97% rename from trunk/ToolWindow.cs rename to source/ToolWindow.cs index 7f72f20..52d83b7 100644 --- a/trunk/ToolWindow.cs +++ b/source/ToolWindow.cs @@ -1,58 +1,58 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using LSLEditor.Docking; - -namespace LSLEditor -{ - public partial class ToolWindow : DockContent - { - public ToolWindow() - { - InitializeComponent(); - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using LSLEditor.Docking; + +namespace LSLEditor +{ + public partial class ToolWindow : DockContent + { + public ToolWindow() + { + InitializeComponent(); + } + } +} diff --git a/trunk/ToolWindow.resx b/source/ToolWindow.resx similarity index 97% rename from trunk/ToolWindow.resx rename to source/ToolWindow.resx index ff31a6d..19dc0dd 100644 --- a/trunk/ToolWindow.resx +++ b/source/ToolWindow.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/trunk/Tools/EnvironmentBrowser.Designer.cs b/source/Tools/EnvironmentBrowser.Designer.cs similarity index 96% rename from trunk/Tools/EnvironmentBrowser.Designer.cs rename to source/Tools/EnvironmentBrowser.Designer.cs index 064ac96..cd4ae2a 100644 --- a/trunk/Tools/EnvironmentBrowser.Designer.cs +++ b/source/Tools/EnvironmentBrowser.Designer.cs @@ -1,74 +1,74 @@ -namespace LSLEditor.Tools -{ - partial class EnvironmentBrowser - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.groupBox1.SuspendLayout(); - this.SuspendLayout(); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.checkBox1); - this.groupBox1.Location = new System.Drawing.Point(0, 0); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(392, 80); - this.groupBox1.TabIndex = 0; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "browser settings"; - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.checkBox1.Location = new System.Drawing.Point(16, 40); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(158, 17); - this.checkBox1.TabIndex = 0; - this.checkBox1.Text = "Browser in seperate window"; - this.checkBox1.UseVisualStyleBackColor = true; - // - // EnvironmentBrowser - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBox1); - this.Name = "EnvironmentBrowser"; - this.Size = new System.Drawing.Size(392, 272); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.CheckBox checkBox1; - } -} +namespace LSLEditor.Tools +{ + partial class EnvironmentBrowser + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Location = new System.Drawing.Point(0, 0); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(392, 80); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "browser settings"; + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Location = new System.Drawing.Point(16, 40); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(158, 17); + this.checkBox1.TabIndex = 0; + this.checkBox1.Text = "Browser in seperate window"; + this.checkBox1.UseVisualStyleBackColor = true; + // + // EnvironmentBrowser + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox1); + this.Name = "EnvironmentBrowser"; + this.Size = new System.Drawing.Size(392, 272); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.CheckBox checkBox1; + } +} diff --git a/trunk/Tools/EnvironmentBrowser.cs b/source/Tools/EnvironmentBrowser.cs similarity index 97% rename from trunk/Tools/EnvironmentBrowser.cs rename to source/Tools/EnvironmentBrowser.cs index ebb674f..a14c0d5 100644 --- a/trunk/Tools/EnvironmentBrowser.cs +++ b/source/Tools/EnvironmentBrowser.cs @@ -1,61 +1,61 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.ComponentModel; -using System.Drawing; -using System.Windows.Forms; - -namespace LSLEditor.Tools -{ - public partial class EnvironmentBrowser : UserControl, ICommit - { - public EnvironmentBrowser() - { - InitializeComponent(); - - this.checkBox1.Checked = Properties.Settings.Default.BrowserInWindow; - } - - public void Commit() - { - Properties.Settings.Default.BrowserInWindow = this.checkBox1.Checked; - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace LSLEditor.Tools +{ + public partial class EnvironmentBrowser : UserControl, ICommit + { + public EnvironmentBrowser() + { + InitializeComponent(); + + this.checkBox1.Checked = Properties.Settings.Default.BrowserInWindow; + } + + public void Commit() + { + Properties.Settings.Default.BrowserInWindow = this.checkBox1.Checked; + } + } +} diff --git a/trunk/Tools/EnvironmentBrowser.resx b/source/Tools/EnvironmentBrowser.resx similarity index 97% rename from trunk/Tools/EnvironmentBrowser.resx rename to source/Tools/EnvironmentBrowser.resx index ff31a6d..19dc0dd 100644 --- a/trunk/Tools/EnvironmentBrowser.resx +++ b/source/Tools/EnvironmentBrowser.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/trunk/Tools/EnvironmentGeneral.Designer.cs b/source/Tools/EnvironmentGeneral.Designer.cs similarity index 97% rename from trunk/Tools/EnvironmentGeneral.Designer.cs rename to source/Tools/EnvironmentGeneral.Designer.cs index 475c4d4..cfc240d 100644 --- a/trunk/Tools/EnvironmentGeneral.Designer.cs +++ b/source/Tools/EnvironmentGeneral.Designer.cs @@ -1,231 +1,231 @@ -namespace LSLEditor.Tools -{ - partial class EnvironmentGeneral - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.groupBox3 = new System.Windows.Forms.GroupBox(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.radioButton4 = new System.Windows.Forms.RadioButton(); - this.radioButton3 = new System.Windows.Forms.RadioButton(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.radioButton1 = new System.Windows.Forms.RadioButton(); - this.radioButton2 = new System.Windows.Forms.RadioButton(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.label2 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.groupBox4 = new System.Windows.Forms.GroupBox(); - this.checkBox2 = new System.Windows.Forms.CheckBox(); - this.groupBox3.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.groupBox4.SuspendLayout(); - this.SuspendLayout(); - // - // groupBox3 - // - this.groupBox3.Controls.Add(this.checkBox1); - this.groupBox3.Controls.Add(this.radioButton4); - this.groupBox3.Controls.Add(this.radioButton3); - this.groupBox3.Location = new System.Drawing.Point(0, 176); - this.groupBox3.Name = "groupBox3"; - this.groupBox3.Size = new System.Drawing.Size(184, 96); - this.groupBox3.TabIndex = 7; - this.groupBox3.TabStop = false; - this.groupBox3.Text = "auto update settings"; - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.checkBox1.Location = new System.Drawing.Point(16, 16); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(112, 17); - this.checkBox1.TabIndex = 3; - this.checkBox1.Text = "check for updates"; - this.checkBox1.UseVisualStyleBackColor = true; - this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); - // - // radioButton4 - // - this.radioButton4.AutoSize = true; - this.radioButton4.Location = new System.Drawing.Point(16, 64); - this.radioButton4.Name = "radioButton4"; - this.radioButton4.Size = new System.Drawing.Size(87, 17); - this.radioButton4.TabIndex = 1; - this.radioButton4.Text = "once a week"; - this.radioButton4.UseVisualStyleBackColor = true; - // - // radioButton3 - // - this.radioButton3.AutoSize = true; - this.radioButton3.Location = new System.Drawing.Point(16, 40); - this.radioButton3.Name = "radioButton3"; - this.radioButton3.Size = new System.Drawing.Size(78, 17); - this.radioButton3.TabIndex = 0; - this.radioButton3.Text = "once a day"; - this.radioButton3.UseVisualStyleBackColor = true; - // - // groupBox2 - // - this.groupBox2.Controls.Add(this.radioButton1); - this.groupBox2.Controls.Add(this.radioButton2); - this.groupBox2.Location = new System.Drawing.Point(0, 0); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(392, 64); - this.groupBox2.TabIndex = 8; - this.groupBox2.TabStop = false; - this.groupBox2.Text = "window layout"; - // - // radioButton1 - // - this.radioButton1.AutoSize = true; - this.radioButton1.Location = new System.Drawing.Point(24, 16); - this.radioButton1.Name = "radioButton1"; - this.radioButton1.Size = new System.Drawing.Size(117, 17); - this.radioButton1.TabIndex = 5; - this.radioButton1.TabStop = true; - this.radioButton1.Text = "Tabbed documents"; - this.radioButton1.UseVisualStyleBackColor = true; - // - // radioButton2 - // - this.radioButton2.AutoSize = true; - this.radioButton2.Location = new System.Drawing.Point(24, 32); - this.radioButton2.Name = "radioButton2"; - this.radioButton2.Size = new System.Drawing.Size(131, 17); - this.radioButton2.TabIndex = 6; - this.radioButton2.TabStop = true; - this.radioButton2.Text = "Windowed documents"; - this.radioButton2.UseVisualStyleBackColor = true; - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.label2); - this.groupBox1.Controls.Add(this.label1); - this.groupBox1.Controls.Add(this.textBox2); - this.groupBox1.Controls.Add(this.textBox1); - this.groupBox1.Location = new System.Drawing.Point(0, 72); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(392, 96); - this.groupBox1.TabIndex = 9; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "recent file list"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(64, 56); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(124, 13); - this.label2.TabIndex = 3; - this.label2.Text = "recent projects list length"; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(64, 24); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(105, 13); - this.label1.TabIndex = 2; - this.label1.Text = "recent files list length"; - // - // textBox2 - // - this.textBox2.Location = new System.Drawing.Point(24, 56); - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(32, 20); - this.textBox2.TabIndex = 1; - // - // textBox1 - // - this.textBox1.Location = new System.Drawing.Point(24, 24); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(32, 20); - this.textBox1.TabIndex = 0; - // - // groupBox4 - // - this.groupBox4.Controls.Add(this.checkBox2); - this.groupBox4.Location = new System.Drawing.Point(200, 176); - this.groupBox4.Name = "groupBox4"; - this.groupBox4.Size = new System.Drawing.Size(192, 96); - this.groupBox4.TabIndex = 8; - this.groupBox4.TabStop = false; - this.groupBox4.Text = "auto update files"; - // - // checkBox2 - // - this.checkBox2.AutoSize = true; - this.checkBox2.Location = new System.Drawing.Point(16, 24); - this.checkBox2.Name = "checkBox2"; - this.checkBox2.Size = new System.Drawing.Size(153, 17); - this.checkBox2.TabIndex = 3; - this.checkBox2.Text = "delete old files after update"; - this.checkBox2.UseVisualStyleBackColor = true; - // - // EnvironmentGeneral - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBox4); - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.groupBox2); - this.Controls.Add(this.groupBox3); - this.Name = "EnvironmentGeneral"; - this.Size = new System.Drawing.Size(392, 272); - this.groupBox3.ResumeLayout(false); - this.groupBox3.PerformLayout(); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.groupBox4.ResumeLayout(false); - this.groupBox4.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox3; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.RadioButton radioButton4; - private System.Windows.Forms.RadioButton radioButton3; - private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.RadioButton radioButton1; - private System.Windows.Forms.RadioButton radioButton2; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.GroupBox groupBox4; - private System.Windows.Forms.CheckBox checkBox2; - } -} +namespace LSLEditor.Tools +{ + partial class EnvironmentGeneral + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.radioButton4 = new System.Windows.Forms.RadioButton(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.groupBox3.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.groupBox4.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.checkBox1); + this.groupBox3.Controls.Add(this.radioButton4); + this.groupBox3.Controls.Add(this.radioButton3); + this.groupBox3.Location = new System.Drawing.Point(0, 176); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(184, 96); + this.groupBox3.TabIndex = 7; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "auto update settings"; + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Location = new System.Drawing.Point(16, 16); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(112, 17); + this.checkBox1.TabIndex = 3; + this.checkBox1.Text = "check for updates"; + this.checkBox1.UseVisualStyleBackColor = true; + this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // + // radioButton4 + // + this.radioButton4.AutoSize = true; + this.radioButton4.Location = new System.Drawing.Point(16, 64); + this.radioButton4.Name = "radioButton4"; + this.radioButton4.Size = new System.Drawing.Size(87, 17); + this.radioButton4.TabIndex = 1; + this.radioButton4.Text = "once a week"; + this.radioButton4.UseVisualStyleBackColor = true; + // + // radioButton3 + // + this.radioButton3.AutoSize = true; + this.radioButton3.Location = new System.Drawing.Point(16, 40); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(78, 17); + this.radioButton3.TabIndex = 0; + this.radioButton3.Text = "once a day"; + this.radioButton3.UseVisualStyleBackColor = true; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.radioButton1); + this.groupBox2.Controls.Add(this.radioButton2); + this.groupBox2.Location = new System.Drawing.Point(0, 0); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(392, 64); + this.groupBox2.TabIndex = 8; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "window layout"; + // + // radioButton1 + // + this.radioButton1.AutoSize = true; + this.radioButton1.Location = new System.Drawing.Point(24, 16); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(117, 17); + this.radioButton1.TabIndex = 5; + this.radioButton1.TabStop = true; + this.radioButton1.Text = "Tabbed documents"; + this.radioButton1.UseVisualStyleBackColor = true; + // + // radioButton2 + // + this.radioButton2.AutoSize = true; + this.radioButton2.Location = new System.Drawing.Point(24, 32); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(131, 17); + this.radioButton2.TabIndex = 6; + this.radioButton2.TabStop = true; + this.radioButton2.Text = "Windowed documents"; + this.radioButton2.UseVisualStyleBackColor = true; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.textBox2); + this.groupBox1.Controls.Add(this.textBox1); + this.groupBox1.Location = new System.Drawing.Point(0, 72); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(392, 96); + this.groupBox1.TabIndex = 9; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "recent file list"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(64, 56); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(124, 13); + this.label2.TabIndex = 3; + this.label2.Text = "recent projects list length"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(64, 24); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(105, 13); + this.label1.TabIndex = 2; + this.label1.Text = "recent files list length"; + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(24, 56); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(32, 20); + this.textBox2.TabIndex = 1; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(24, 24); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(32, 20); + this.textBox1.TabIndex = 0; + // + // groupBox4 + // + this.groupBox4.Controls.Add(this.checkBox2); + this.groupBox4.Location = new System.Drawing.Point(200, 176); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(192, 96); + this.groupBox4.TabIndex = 8; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "auto update files"; + // + // checkBox2 + // + this.checkBox2.AutoSize = true; + this.checkBox2.Location = new System.Drawing.Point(16, 24); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.Size = new System.Drawing.Size(153, 17); + this.checkBox2.TabIndex = 3; + this.checkBox2.Text = "delete old files after update"; + this.checkBox2.UseVisualStyleBackColor = true; + // + // EnvironmentGeneral + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox4); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox3); + this.Name = "EnvironmentGeneral"; + this.Size = new System.Drawing.Size(392, 272); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox4.ResumeLayout(false); + this.groupBox4.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.RadioButton radioButton4; + private System.Windows.Forms.RadioButton radioButton3; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.RadioButton radioButton1; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.CheckBox checkBox2; + } +} diff --git a/trunk/Tools/EnvironmentGeneral.cs b/source/Tools/EnvironmentGeneral.cs similarity index 97% rename from trunk/Tools/EnvironmentGeneral.cs rename to source/Tools/EnvironmentGeneral.cs index 5472444..3620676 100644 --- a/trunk/Tools/EnvironmentGeneral.cs +++ b/source/Tools/EnvironmentGeneral.cs @@ -1,99 +1,99 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace LSLEditor.Tools -{ - public interface ICommit - { - void Commit(); - } - - public partial class EnvironmentGeneral : UserControl, ICommit - { - public EnvironmentGeneral() - { - InitializeComponent(); - - this.radioButton1.Checked = Properties.Settings.Default.TabbedDocument; - this.radioButton2.Checked = !Properties.Settings.Default.TabbedDocument; - - this.textBox1.Text = Properties.Settings.Default.RecentFileMax.ToString(); - this.textBox2.Text = Properties.Settings.Default.RecentProjectMax.ToString(); - - this.checkBox1.Checked = Properties.Settings.Default.CheckForUpdates; - this.checkBox2.Checked = Properties.Settings.Default.DeleteOldFiles; - this.radioButton3.Checked = Properties.Settings.Default.CheckEveryDay; - this.radioButton4.Checked = Properties.Settings.Default.CheckEveryWeek; - - checkBox1_CheckedChanged(null, null); - } - - public void Commit() - { - Properties.Settings.Default.TabbedDocument = this.radioButton1.Checked; - - int intValue; - - if (int.TryParse(this.textBox1.Text, out intValue)) - Properties.Settings.Default.RecentFileMax = intValue; - if (int.TryParse(this.textBox2.Text, out intValue)) - Properties.Settings.Default.RecentProjectMax = intValue; - - Properties.Settings.Default.CheckForUpdates = this.checkBox1.Checked; - Properties.Settings.Default.CheckEveryDay = this.radioButton3.Checked; - Properties.Settings.Default.CheckEveryWeek = this.radioButton4.Checked; - Properties.Settings.Default.DeleteOldFiles = this.checkBox2.Checked; - } - - private void checkBox1_CheckedChanged(object sender, EventArgs e) - { - this.radioButton3.Enabled = this.checkBox1.Checked; - this.radioButton4.Enabled = this.checkBox1.Checked; - this.groupBox4.Enabled = this.checkBox1.Checked; - } - - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace LSLEditor.Tools +{ + public interface ICommit + { + void Commit(); + } + + public partial class EnvironmentGeneral : UserControl, ICommit + { + public EnvironmentGeneral() + { + InitializeComponent(); + + this.radioButton1.Checked = Properties.Settings.Default.TabbedDocument; + this.radioButton2.Checked = !Properties.Settings.Default.TabbedDocument; + + this.textBox1.Text = Properties.Settings.Default.RecentFileMax.ToString(); + this.textBox2.Text = Properties.Settings.Default.RecentProjectMax.ToString(); + + this.checkBox1.Checked = Properties.Settings.Default.CheckForUpdates; + this.checkBox2.Checked = Properties.Settings.Default.DeleteOldFiles; + this.radioButton3.Checked = Properties.Settings.Default.CheckEveryDay; + this.radioButton4.Checked = Properties.Settings.Default.CheckEveryWeek; + + checkBox1_CheckedChanged(null, null); + } + + public void Commit() + { + Properties.Settings.Default.TabbedDocument = this.radioButton1.Checked; + + int intValue; + + if (int.TryParse(this.textBox1.Text, out intValue)) + Properties.Settings.Default.RecentFileMax = intValue; + if (int.TryParse(this.textBox2.Text, out intValue)) + Properties.Settings.Default.RecentProjectMax = intValue; + + Properties.Settings.Default.CheckForUpdates = this.checkBox1.Checked; + Properties.Settings.Default.CheckEveryDay = this.radioButton3.Checked; + Properties.Settings.Default.CheckEveryWeek = this.radioButton4.Checked; + Properties.Settings.Default.DeleteOldFiles = this.checkBox2.Checked; + } + + private void checkBox1_CheckedChanged(object sender, EventArgs e) + { + this.radioButton3.Enabled = this.checkBox1.Checked; + this.radioButton4.Enabled = this.checkBox1.Checked; + this.groupBox4.Enabled = this.checkBox1.Checked; + } + + } +} diff --git a/trunk/Tools/EnvironmentGeneral.resx b/source/Tools/EnvironmentGeneral.resx similarity index 97% rename from trunk/Tools/EnvironmentGeneral.resx rename to source/Tools/EnvironmentGeneral.resx index ff31a6d..19dc0dd 100644 --- a/trunk/Tools/EnvironmentGeneral.resx +++ b/source/Tools/EnvironmentGeneral.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/trunk/Tools/EnvironmentHelp.Designer.cs b/source/Tools/EnvironmentHelp.Designer.cs similarity index 97% rename from trunk/Tools/EnvironmentHelp.Designer.cs rename to source/Tools/EnvironmentHelp.Designer.cs index 84a0502..94ac1b4 100644 --- a/trunk/Tools/EnvironmentHelp.Designer.cs +++ b/source/Tools/EnvironmentHelp.Designer.cs @@ -1,224 +1,224 @@ -namespace LSLEditor.Tools -{ - partial class EnvironmentHelp - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.groupBox6 = new System.Windows.Forms.GroupBox(); - this.button2 = new System.Windows.Forms.Button(); - this.button1 = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.radioButton2 = new System.Windows.Forms.RadioButton(); - this.radioButton1 = new System.Windows.Forms.RadioButton(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.checkBox2 = new System.Windows.Forms.CheckBox(); - this.radioButton3 = new System.Windows.Forms.RadioButton(); - this.radioButton4 = new System.Windows.Forms.RadioButton(); - this.groupBox6.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.SuspendLayout(); - // - // groupBox6 - // - this.groupBox6.Controls.Add(this.button2); - this.groupBox6.Controls.Add(this.button1); - this.groupBox6.Controls.Add(this.label1); - this.groupBox6.Controls.Add(this.textBox1); - this.groupBox6.Controls.Add(this.radioButton2); - this.groupBox6.Controls.Add(this.radioButton1); - this.groupBox6.Location = new System.Drawing.Point(0, 0); - this.groupBox6.Name = "groupBox6"; - this.groupBox6.Size = new System.Drawing.Size(392, 112); - this.groupBox6.TabIndex = 12; - this.groupBox6.TabStop = false; - this.groupBox6.Text = "wiki help pages"; - // - // button2 - // - this.button2.Location = new System.Drawing.Point(208, 48); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(112, 24); - this.button2.TabIndex = 5; - this.button2.Text = "wiki.secondlife.com"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // button1 - // - this.button1.Location = new System.Drawing.Point(120, 48); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(75, 24); - this.button1.TabIndex = 4; - this.button1.Text = "lslwiki.net"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(112, 80); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(144, 13); - this.label1.TabIndex = 3; - this.label1.Text = "Using LSLEditorHelp.chm file"; - // - // textBox1 - // - this.textBox1.Location = new System.Drawing.Point(112, 24); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(256, 20); - this.textBox1.TabIndex = 2; - // - // radioButton2 - // - this.radioButton2.AutoSize = true; - this.radioButton2.Location = new System.Drawing.Point(16, 80); - this.radioButton2.Name = "radioButton2"; - this.radioButton2.Size = new System.Drawing.Size(79, 17); - this.radioButton2.TabIndex = 1; - this.radioButton2.TabStop = true; - this.radioButton2.Text = "Offline Wiki"; - this.radioButton2.UseVisualStyleBackColor = true; - this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButton2_CheckedChanged); - // - // radioButton1 - // - this.radioButton1.AutoSize = true; - this.radioButton1.Location = new System.Drawing.Point(16, 24); - this.radioButton1.Name = "radioButton1"; - this.radioButton1.Size = new System.Drawing.Size(79, 17); - this.radioButton1.TabIndex = 0; - this.radioButton1.TabStop = true; - this.radioButton1.Text = "Online Wiki"; - this.radioButton1.UseVisualStyleBackColor = true; - this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButton1_CheckedChanged); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.radioButton4); - this.groupBox1.Controls.Add(this.radioButton3); - this.groupBox1.Controls.Add(this.checkBox1); - this.groupBox1.Location = new System.Drawing.Point(0, 120); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(392, 72); - this.groupBox1.TabIndex = 13; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "online wiki pages"; - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.checkBox1.Location = new System.Drawing.Point(152, 48); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(145, 17); - this.checkBox1.TabIndex = 0; - this.checkBox1.Text = "New tab for every search"; - this.checkBox1.UseVisualStyleBackColor = true; - // - // groupBox2 - // - this.groupBox2.Controls.Add(this.checkBox2); - this.groupBox2.Location = new System.Drawing.Point(0, 200); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(392, 56); - this.groupBox2.TabIndex = 14; - this.groupBox2.TabStop = false; - this.groupBox2.Text = "tooltip"; - // - // checkBox2 - // - this.checkBox2.AutoSize = true; - this.checkBox2.Location = new System.Drawing.Point(16, 24); - this.checkBox2.Name = "checkBox2"; - this.checkBox2.Size = new System.Drawing.Size(265, 17); - this.checkBox2.TabIndex = 0; - this.checkBox2.Text = "Use tooltips on keywords when hovering script text"; - this.checkBox2.UseVisualStyleBackColor = true; - // - // radioButton3 - // - this.radioButton3.AutoSize = true; - this.radioButton3.Location = new System.Drawing.Point(16, 24); - this.radioButton3.Name = "radioButton3"; - this.radioButton3.Size = new System.Drawing.Size(122, 17); - this.radioButton3.TabIndex = 1; - this.radioButton3.TabStop = true; - this.radioButton3.Text = "external webbrowser"; - this.radioButton3.UseVisualStyleBackColor = true; - // - // radioButton4 - // - this.radioButton4.AutoSize = true; - this.radioButton4.Location = new System.Drawing.Point(16, 48); - this.radioButton4.Name = "radioButton4"; - this.radioButton4.Size = new System.Drawing.Size(119, 17); - this.radioButton4.TabIndex = 2; - this.radioButton4.TabStop = true; - this.radioButton4.Text = "internal webbrowser"; - this.radioButton4.UseVisualStyleBackColor = true; - this.radioButton4.CheckedChanged += new System.EventHandler(this.radioButton4_CheckedChanged); - // - // EnvironmentHelp - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBox2); - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.groupBox6); - this.Name = "EnvironmentHelp"; - this.Size = new System.Drawing.Size(392, 272); - this.groupBox6.ResumeLayout(false); - this.groupBox6.PerformLayout(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox6; - private System.Windows.Forms.RadioButton radioButton2; - private System.Windows.Forms.RadioButton radioButton1; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.CheckBox checkBox2; - private System.Windows.Forms.RadioButton radioButton4; - private System.Windows.Forms.RadioButton radioButton3; - } -} +namespace LSLEditor.Tools +{ + partial class EnvironmentHelp + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox6 = new System.Windows.Forms.GroupBox(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.radioButton4 = new System.Windows.Forms.RadioButton(); + this.groupBox6.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox6 + // + this.groupBox6.Controls.Add(this.button2); + this.groupBox6.Controls.Add(this.button1); + this.groupBox6.Controls.Add(this.label1); + this.groupBox6.Controls.Add(this.textBox1); + this.groupBox6.Controls.Add(this.radioButton2); + this.groupBox6.Controls.Add(this.radioButton1); + this.groupBox6.Location = new System.Drawing.Point(0, 0); + this.groupBox6.Name = "groupBox6"; + this.groupBox6.Size = new System.Drawing.Size(392, 112); + this.groupBox6.TabIndex = 12; + this.groupBox6.TabStop = false; + this.groupBox6.Text = "wiki help pages"; + // + // button2 + // + this.button2.Location = new System.Drawing.Point(208, 48); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(112, 24); + this.button2.TabIndex = 5; + this.button2.Text = "wiki.secondlife.com"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(120, 48); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 24); + this.button1.TabIndex = 4; + this.button1.Text = "lslwiki.net"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(112, 80); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(144, 13); + this.label1.TabIndex = 3; + this.label1.Text = "Using LSLEditorHelp.chm file"; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(112, 24); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(256, 20); + this.textBox1.TabIndex = 2; + // + // radioButton2 + // + this.radioButton2.AutoSize = true; + this.radioButton2.Location = new System.Drawing.Point(16, 80); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(79, 17); + this.radioButton2.TabIndex = 1; + this.radioButton2.TabStop = true; + this.radioButton2.Text = "Offline Wiki"; + this.radioButton2.UseVisualStyleBackColor = true; + this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButton2_CheckedChanged); + // + // radioButton1 + // + this.radioButton1.AutoSize = true; + this.radioButton1.Location = new System.Drawing.Point(16, 24); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(79, 17); + this.radioButton1.TabIndex = 0; + this.radioButton1.TabStop = true; + this.radioButton1.Text = "Online Wiki"; + this.radioButton1.UseVisualStyleBackColor = true; + this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButton1_CheckedChanged); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.radioButton4); + this.groupBox1.Controls.Add(this.radioButton3); + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Location = new System.Drawing.Point(0, 120); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(392, 72); + this.groupBox1.TabIndex = 13; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "online wiki pages"; + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Location = new System.Drawing.Point(152, 48); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(145, 17); + this.checkBox1.TabIndex = 0; + this.checkBox1.Text = "New tab for every search"; + this.checkBox1.UseVisualStyleBackColor = true; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.checkBox2); + this.groupBox2.Location = new System.Drawing.Point(0, 200); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(392, 56); + this.groupBox2.TabIndex = 14; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "tooltip"; + // + // checkBox2 + // + this.checkBox2.AutoSize = true; + this.checkBox2.Location = new System.Drawing.Point(16, 24); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.Size = new System.Drawing.Size(265, 17); + this.checkBox2.TabIndex = 0; + this.checkBox2.Text = "Use tooltips on keywords when hovering script text"; + this.checkBox2.UseVisualStyleBackColor = true; + // + // radioButton3 + // + this.radioButton3.AutoSize = true; + this.radioButton3.Location = new System.Drawing.Point(16, 24); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(122, 17); + this.radioButton3.TabIndex = 1; + this.radioButton3.TabStop = true; + this.radioButton3.Text = "external webbrowser"; + this.radioButton3.UseVisualStyleBackColor = true; + // + // radioButton4 + // + this.radioButton4.AutoSize = true; + this.radioButton4.Location = new System.Drawing.Point(16, 48); + this.radioButton4.Name = "radioButton4"; + this.radioButton4.Size = new System.Drawing.Size(119, 17); + this.radioButton4.TabIndex = 2; + this.radioButton4.TabStop = true; + this.radioButton4.Text = "internal webbrowser"; + this.radioButton4.UseVisualStyleBackColor = true; + this.radioButton4.CheckedChanged += new System.EventHandler(this.radioButton4_CheckedChanged); + // + // EnvironmentHelp + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.groupBox6); + this.Name = "EnvironmentHelp"; + this.Size = new System.Drawing.Size(392, 272); + this.groupBox6.ResumeLayout(false); + this.groupBox6.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox6; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.RadioButton radioButton1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.CheckBox checkBox2; + private System.Windows.Forms.RadioButton radioButton4; + private System.Windows.Forms.RadioButton radioButton3; + } +} diff --git a/trunk/Tools/EnvironmentHelp.cs b/source/Tools/EnvironmentHelp.cs similarity index 97% rename from trunk/Tools/EnvironmentHelp.cs rename to source/Tools/EnvironmentHelp.cs index a79ebfd..8c5a660 100644 --- a/trunk/Tools/EnvironmentHelp.cs +++ b/source/Tools/EnvironmentHelp.cs @@ -1,131 +1,131 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Reflection; -using System.ComponentModel; -using System.Drawing; -using System.IO; -using System.Text; -using System.Windows.Forms; - -namespace LSLEditor.Tools -{ - public partial class EnvironmentHelp : UserControl, ICommit - { - public EnvironmentHelp() - { - InitializeComponent(); - - this.radioButton1.Checked = Properties.Settings.Default.HelpOnline; - this.radioButton2.Checked = Properties.Settings.Default.HelpOffline; - - this.radioButton3.Checked = Properties.Settings.Default.WikiSeperateBrowser; - this.radioButton4.Checked = !Properties.Settings.Default.WikiSeperateBrowser; - - this.checkBox1.Checked = Properties.Settings.Default.HelpNewTab; - - this.checkBox2.Checked = Properties.Settings.Default.ToolTip; - - this.textBox1.Text = Properties.Settings.Default.Help; - - radioButton1_CheckedChanged(null, null); - - radioButton4_CheckedChanged(null, null); - } - - public void Commit() - { - Properties.Settings.Default.HelpOnline = this.radioButton1.Checked; - Properties.Settings.Default.HelpOffline= this.radioButton2.Checked; - Properties.Settings.Default.WikiSeperateBrowser = this.radioButton3.Checked; - - Properties.Settings.Default.HelpNewTab = this.checkBox1.Checked; - Properties.Settings.Default.ToolTip = this.checkBox2.Checked; - - Properties.Settings.Default.Help = this.textBox1.Text; - } - - private void radioButton2_CheckedChanged(object sender, EventArgs e) - { - if (this.radioButton2.Checked) - { - this.textBox1.Enabled = false; - string strHelpFile = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), - Properties.Settings.Default.HelpOfflineFile); - if (!File.Exists(strHelpFile)) - { - if (MessageBox.Show("Help file does not exist, would you like to download it?", "Download Helpfile", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) - { - UpdateApplicationForm updater = new UpdateApplicationForm(); - //updater.Icon = this.Icon; // TODO!! - updater.CheckForHelpFile(); - updater.ShowDialog(this); - return; - } - } - - } - } - - private void radioButton1_CheckedChanged(object sender, EventArgs e) - { - this.textBox1.Enabled = this.radioButton1.Checked; - this.groupBox1.Enabled = this.radioButton1.Checked; - this.button1.Enabled = this.radioButton1.Checked; - this.button2.Enabled = this.radioButton1.Checked; - } - - private void button1_Click(object sender, EventArgs e) - { - this.textBox1.Text = Properties.Settings.Default.Help1; - } - - private void button2_Click(object sender, EventArgs e) - { - this.textBox1.Text = Properties.Settings.Default.Help2; - } - - private void radioButton4_CheckedChanged(object sender, EventArgs e) - { - this.checkBox1.Enabled = this.radioButton4.Checked; - } - - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Reflection; +using System.ComponentModel; +using System.Drawing; +using System.IO; +using System.Text; +using System.Windows.Forms; + +namespace LSLEditor.Tools +{ + public partial class EnvironmentHelp : UserControl, ICommit + { + public EnvironmentHelp() + { + InitializeComponent(); + + this.radioButton1.Checked = Properties.Settings.Default.HelpOnline; + this.radioButton2.Checked = Properties.Settings.Default.HelpOffline; + + this.radioButton3.Checked = Properties.Settings.Default.WikiSeperateBrowser; + this.radioButton4.Checked = !Properties.Settings.Default.WikiSeperateBrowser; + + this.checkBox1.Checked = Properties.Settings.Default.HelpNewTab; + + this.checkBox2.Checked = Properties.Settings.Default.ToolTip; + + this.textBox1.Text = Properties.Settings.Default.Help; + + radioButton1_CheckedChanged(null, null); + + radioButton4_CheckedChanged(null, null); + } + + public void Commit() + { + Properties.Settings.Default.HelpOnline = this.radioButton1.Checked; + Properties.Settings.Default.HelpOffline= this.radioButton2.Checked; + Properties.Settings.Default.WikiSeperateBrowser = this.radioButton3.Checked; + + Properties.Settings.Default.HelpNewTab = this.checkBox1.Checked; + Properties.Settings.Default.ToolTip = this.checkBox2.Checked; + + Properties.Settings.Default.Help = this.textBox1.Text; + } + + private void radioButton2_CheckedChanged(object sender, EventArgs e) + { + if (this.radioButton2.Checked) + { + this.textBox1.Enabled = false; + string strHelpFile = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), + Properties.Settings.Default.HelpOfflineFile); + if (!File.Exists(strHelpFile)) + { + if (MessageBox.Show("Help file does not exist, would you like to download it?", "Download Helpfile", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) + { + UpdateApplicationForm updater = new UpdateApplicationForm(); + //updater.Icon = this.Icon; // TODO!! + updater.CheckForHelpFile(); + updater.ShowDialog(this); + return; + } + } + + } + } + + private void radioButton1_CheckedChanged(object sender, EventArgs e) + { + this.textBox1.Enabled = this.radioButton1.Checked; + this.groupBox1.Enabled = this.radioButton1.Checked; + this.button1.Enabled = this.radioButton1.Checked; + this.button2.Enabled = this.radioButton1.Checked; + } + + private void button1_Click(object sender, EventArgs e) + { + this.textBox1.Text = Properties.Settings.Default.Help1; + } + + private void button2_Click(object sender, EventArgs e) + { + this.textBox1.Text = Properties.Settings.Default.Help2; + } + + private void radioButton4_CheckedChanged(object sender, EventArgs e) + { + this.checkBox1.Enabled = this.radioButton4.Checked; + } + + } +} diff --git a/trunk/Tools/EnvironmentHelp.resx b/source/Tools/EnvironmentHelp.resx similarity index 97% rename from trunk/Tools/EnvironmentHelp.resx rename to source/Tools/EnvironmentHelp.resx index ff31a6d..19dc0dd 100644 --- a/trunk/Tools/EnvironmentHelp.resx +++ b/source/Tools/EnvironmentHelp.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/trunk/Tools/EnvironmentPlugins.Designer.cs b/source/Tools/EnvironmentPlugins.Designer.cs similarity index 96% rename from trunk/Tools/EnvironmentPlugins.Designer.cs rename to source/Tools/EnvironmentPlugins.Designer.cs index 54cd0fb..ebe435d 100644 --- a/trunk/Tools/EnvironmentPlugins.Designer.cs +++ b/source/Tools/EnvironmentPlugins.Designer.cs @@ -1,74 +1,74 @@ -namespace LSLEditor.Tools -{ - partial class EnvironmentPlugins - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.label1 = new System.Windows.Forms.Label(); - this.groupBox1.SuspendLayout(); - this.SuspendLayout(); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.label1); - this.groupBox1.Location = new System.Drawing.Point(0, 0); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(392, 56); - this.groupBox1.TabIndex = 0; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "plugins"; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(24, 24); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(178, 13); - this.label1.TabIndex = 0; - this.label1.Text = "No plugins found in directory Plugins"; - // - // EnvironmentPlugins - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBox1); - this.Name = "EnvironmentPlugins"; - this.Size = new System.Drawing.Size(392, 272); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.Label label1; - - } -} +namespace LSLEditor.Tools +{ + partial class EnvironmentPlugins + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label1 = new System.Windows.Forms.Label(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Location = new System.Drawing.Point(0, 0); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(392, 56); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "plugins"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(24, 24); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(178, 13); + this.label1.TabIndex = 0; + this.label1.Text = "No plugins found in directory Plugins"; + // + // EnvironmentPlugins + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox1); + this.Name = "EnvironmentPlugins"; + this.Size = new System.Drawing.Size(392, 272); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label label1; + + } +} diff --git a/trunk/Tools/EnvironmentPlugins.cs b/source/Tools/EnvironmentPlugins.cs similarity index 97% rename from trunk/Tools/EnvironmentPlugins.cs rename to source/Tools/EnvironmentPlugins.cs index aabd65a..98e8635 100644 --- a/trunk/Tools/EnvironmentPlugins.cs +++ b/source/Tools/EnvironmentPlugins.cs @@ -1,127 +1,127 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.IO; -using System.Drawing; -using System.Reflection; -using System.Windows.Forms; -using System.Collections.Specialized; - -namespace LSLEditor.Tools -{ - public partial class EnvironmentPlugins : UserControl, ICommit - { - private int intX,intY; - - public EnvironmentPlugins() - { - InitializeComponent(); - - ShowPlugins(); - } - - private void ShowPlugin(string strName) - { - CheckBox checkBox = new CheckBox(); - checkBox.AutoSize = true; - checkBox.Text = strName; - checkBox.Name = "Plugin_" + strName; - checkBox.Tag = strName; - checkBox.Checked = Properties.Settings.Default.Plugins.Contains(checkBox.Tag.ToString()); - checkBox.Location = new Point(intX, intY); - this.groupBox1.Controls.Add(checkBox); - intY += 20; - this.label1.Visible = false; - } - - private void ShowPlugins() - { - if (Properties.Settings.Default.Plugins == null) - Properties.Settings.Default.Plugins = new StringCollection(); - - string strDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); - string strPluginsDirectory = Path.Combine(strDirectory, "Plugins"); - - intX = 20; - intY = 20; - - if (Directory.Exists(strPluginsDirectory)) - { - foreach (string strFilePath in Directory.GetFiles(strPluginsDirectory, "*.exe")) - { - ShowPlugin(Path.GetFileNameWithoutExtension(strFilePath)); - } - } - if (Svn.IsInstalled) - { - if(!Properties.Settings.Default.Plugins.Contains("SVN (Version control)")) - Properties.Settings.Default.Plugins.Add("SVN (Version control)"); - ShowPlugin("SVN (Version control)"); - } - - this.groupBox1.Height = intY + 20; - } - - public void Commit() - { - Properties.Settings.Default.Plugins = new StringCollection(); - - bool SvnPlugin = false; - foreach (Control control in this.groupBox1.Controls) - { - CheckBox checkBox = control as CheckBox; - if (checkBox == null) - continue; - if (checkBox.Checked) - { - string strPluginName = checkBox.Tag.ToString(); - Properties.Settings.Default.Plugins.Add(strPluginName); - if (strPluginName.ToLower().Contains("svn")) - SvnPlugin = true; - } - } - if (!SvnPlugin) - { - Properties.Settings.Default.VersionControl = false; - Properties.Settings.Default.VersionControlSVN = false; - } - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.IO; +using System.Drawing; +using System.Reflection; +using System.Windows.Forms; +using System.Collections.Specialized; + +namespace LSLEditor.Tools +{ + public partial class EnvironmentPlugins : UserControl, ICommit + { + private int intX,intY; + + public EnvironmentPlugins() + { + InitializeComponent(); + + ShowPlugins(); + } + + private void ShowPlugin(string strName) + { + CheckBox checkBox = new CheckBox(); + checkBox.AutoSize = true; + checkBox.Text = strName; + checkBox.Name = "Plugin_" + strName; + checkBox.Tag = strName; + checkBox.Checked = Properties.Settings.Default.Plugins.Contains(checkBox.Tag.ToString()); + checkBox.Location = new Point(intX, intY); + this.groupBox1.Controls.Add(checkBox); + intY += 20; + this.label1.Visible = false; + } + + private void ShowPlugins() + { + if (Properties.Settings.Default.Plugins == null) + Properties.Settings.Default.Plugins = new StringCollection(); + + string strDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + string strPluginsDirectory = Path.Combine(strDirectory, "Plugins"); + + intX = 20; + intY = 20; + + if (Directory.Exists(strPluginsDirectory)) + { + foreach (string strFilePath in Directory.GetFiles(strPluginsDirectory, "*.exe")) + { + ShowPlugin(Path.GetFileNameWithoutExtension(strFilePath)); + } + } + if (Svn.IsInstalled) + { + if(!Properties.Settings.Default.Plugins.Contains("SVN (Version control)")) + Properties.Settings.Default.Plugins.Add("SVN (Version control)"); + ShowPlugin("SVN (Version control)"); + } + + this.groupBox1.Height = intY + 20; + } + + public void Commit() + { + Properties.Settings.Default.Plugins = new StringCollection(); + + bool SvnPlugin = false; + foreach (Control control in this.groupBox1.Controls) + { + CheckBox checkBox = control as CheckBox; + if (checkBox == null) + continue; + if (checkBox.Checked) + { + string strPluginName = checkBox.Tag.ToString(); + Properties.Settings.Default.Plugins.Add(strPluginName); + if (strPluginName.ToLower().Contains("svn")) + SvnPlugin = true; + } + } + if (!SvnPlugin) + { + Properties.Settings.Default.VersionControl = false; + Properties.Settings.Default.VersionControlSVN = false; + } + } + } +} diff --git a/trunk/Tools/EnvironmentPlugins.resx b/source/Tools/EnvironmentPlugins.resx similarity index 97% rename from trunk/Tools/EnvironmentPlugins.resx rename to source/Tools/EnvironmentPlugins.resx index ff31a6d..19dc0dd 100644 --- a/trunk/Tools/EnvironmentPlugins.resx +++ b/source/Tools/EnvironmentPlugins.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/trunk/Tools/IncludeExportSettings.Designer.cs b/source/Tools/IncludeExportSettings.Designer.cs similarity index 100% rename from trunk/Tools/IncludeExportSettings.Designer.cs rename to source/Tools/IncludeExportSettings.Designer.cs diff --git a/trunk/Tools/IncludeExportSettings.cs b/source/Tools/IncludeExportSettings.cs similarity index 100% rename from trunk/Tools/IncludeExportSettings.cs rename to source/Tools/IncludeExportSettings.cs diff --git a/trunk/Tools/IncludeExportSettings.resx b/source/Tools/IncludeExportSettings.resx similarity index 100% rename from trunk/Tools/IncludeExportSettings.resx rename to source/Tools/IncludeExportSettings.resx diff --git a/trunk/Tools/ProjectIncludes.Designer.cs b/source/Tools/ProjectIncludes.Designer.cs similarity index 100% rename from trunk/Tools/ProjectIncludes.Designer.cs rename to source/Tools/ProjectIncludes.Designer.cs diff --git a/trunk/Tools/ProjectIncludes.cs b/source/Tools/ProjectIncludes.cs similarity index 100% rename from trunk/Tools/ProjectIncludes.cs rename to source/Tools/ProjectIncludes.cs diff --git a/trunk/Tools/ProjectIncludes.resx b/source/Tools/ProjectIncludes.resx similarity index 100% rename from trunk/Tools/ProjectIncludes.resx rename to source/Tools/ProjectIncludes.resx diff --git a/trunk/Tools/ProjectSettings.Designer.cs b/source/Tools/ProjectSettings.Designer.cs similarity index 97% rename from trunk/Tools/ProjectSettings.Designer.cs rename to source/Tools/ProjectSettings.Designer.cs index 0b1be72..023467b 100644 --- a/trunk/Tools/ProjectSettings.Designer.cs +++ b/source/Tools/ProjectSettings.Designer.cs @@ -1,126 +1,126 @@ -namespace LSLEditor.Tools -{ - partial class ProjectSettings - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.button1 = new System.Windows.Forms.Button(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.checkBox4 = new System.Windows.Forms.CheckBox(); - this.groupBox1.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.SuspendLayout(); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.button1); - this.groupBox1.Controls.Add(this.textBox1); - this.groupBox1.Controls.Add(this.label1); - this.groupBox1.Location = new System.Drawing.Point(0, 0); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(392, 88); - this.groupBox1.TabIndex = 0; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "project settings"; - // - // button1 - // - this.button1.Location = new System.Drawing.Point(336, 40); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(32, 23); - this.button1.TabIndex = 2; - this.button1.Text = "..."; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // textBox1 - // - this.textBox1.Location = new System.Drawing.Point(16, 40); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(312, 20); - this.textBox1.TabIndex = 1; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(16, 24); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(136, 13); - this.label1.TabIndex = 0; - this.label1.Text = "LSLEditor projects location:"; - // - // groupBox2 - // - this.groupBox2.Controls.Add(this.checkBox4); - this.groupBox2.Location = new System.Drawing.Point(0, 96); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(392, 56); - this.groupBox2.TabIndex = 10; - this.groupBox2.TabStop = false; - this.groupBox2.Text = "file extension association"; - // - // checkBox4 - // - this.checkBox4.AutoSize = true; - this.checkBox4.Location = new System.Drawing.Point(16, 24); - this.checkBox4.Name = "checkBox4"; - this.checkBox4.Size = new System.Drawing.Size(150, 17); - this.checkBox4.TabIndex = 0; - this.checkBox4.Text = "register .sol with LSLEditor"; - this.checkBox4.UseVisualStyleBackColor = true; - // - // ProjectSettings - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBox2); - this.Controls.Add(this.groupBox1); - this.Name = "ProjectSettings"; - this.Size = new System.Drawing.Size(392, 272); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1; - private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.CheckBox checkBox4; - } -} +namespace LSLEditor.Tools +{ + partial class ProjectSettings + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.button1 = new System.Windows.Forms.Button(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.checkBox4 = new System.Windows.Forms.CheckBox(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Controls.Add(this.textBox1); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Location = new System.Drawing.Point(0, 0); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(392, 88); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "project settings"; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(336, 40); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(32, 23); + this.button1.TabIndex = 2; + this.button1.Text = "..."; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(16, 40); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(312, 20); + this.textBox1.TabIndex = 1; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(16, 24); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(136, 13); + this.label1.TabIndex = 0; + this.label1.Text = "LSLEditor projects location:"; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.checkBox4); + this.groupBox2.Location = new System.Drawing.Point(0, 96); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(392, 56); + this.groupBox2.TabIndex = 10; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "file extension association"; + // + // checkBox4 + // + this.checkBox4.AutoSize = true; + this.checkBox4.Location = new System.Drawing.Point(16, 24); + this.checkBox4.Name = "checkBox4"; + this.checkBox4.Size = new System.Drawing.Size(150, 17); + this.checkBox4.TabIndex = 0; + this.checkBox4.Text = "register .sol with LSLEditor"; + this.checkBox4.UseVisualStyleBackColor = true; + // + // ProjectSettings + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox1); + this.Name = "ProjectSettings"; + this.Size = new System.Drawing.Size(392, 272); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.CheckBox checkBox4; + } +} diff --git a/trunk/Tools/ProjectSettings.cs b/source/Tools/ProjectSettings.cs similarity index 97% rename from trunk/Tools/ProjectSettings.cs rename to source/Tools/ProjectSettings.cs index 6e303ad..773189c 100644 --- a/trunk/Tools/ProjectSettings.cs +++ b/source/Tools/ProjectSettings.cs @@ -1,89 +1,89 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.IO; -using System.Reflection; -using System.Windows.Forms; - -namespace LSLEditor.Tools -{ - public partial class ProjectSettings : UserControl, ICommit - { - public ProjectSettings() - { - InitializeComponent(); - - this.textBox1.Text = Properties.Settings.Default.ProjectLocation; - - this.checkBox4.Checked = Helpers.FileAssociator.IsAssociated(".sol"); - } - - public void Commit() - { - Properties.Settings.Default.ProjectLocation = this.textBox1.Text; - - if (this.checkBox4.Checked) - { - if (! - Helpers.FileAssociator.Associate(".sol", "LSLEditorSolution", "Solution File for LSLEditor", Assembly.GetExecutingAssembly().Location, 0)) - MessageBox.Show("File association can not be made (needs administrative access)", "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - else - { - if (Helpers.FileAssociator.IsAssociated(".sol")) - { - if(!Helpers.FileAssociator.DeAssociate(".sol", "LSLEditorSolution")) - MessageBox.Show("File association can not be unmade (needs administrative access)", "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - } - - private void button1_Click(object sender, EventArgs e) - { - this.folderBrowserDialog1.RootFolder = Environment.SpecialFolder.MyComputer; - if (this.folderBrowserDialog1.ShowDialog(this) == DialogResult.OK) - { - if(Directory.Exists(this.folderBrowserDialog1.SelectedPath)) - this.textBox1.Text = this.folderBrowserDialog1.SelectedPath; - } - } - - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.IO; +using System.Reflection; +using System.Windows.Forms; + +namespace LSLEditor.Tools +{ + public partial class ProjectSettings : UserControl, ICommit + { + public ProjectSettings() + { + InitializeComponent(); + + this.textBox1.Text = Properties.Settings.Default.ProjectLocation; + + this.checkBox4.Checked = Helpers.FileAssociator.IsAssociated(".sol"); + } + + public void Commit() + { + Properties.Settings.Default.ProjectLocation = this.textBox1.Text; + + if (this.checkBox4.Checked) + { + if (! + Helpers.FileAssociator.Associate(".sol", "LSLEditorSolution", "Solution File for LSLEditor", Assembly.GetExecutingAssembly().Location, 0)) + MessageBox.Show("File association can not be made (needs administrative access)", "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + else + { + if (Helpers.FileAssociator.IsAssociated(".sol")) + { + if(!Helpers.FileAssociator.DeAssociate(".sol", "LSLEditorSolution")) + MessageBox.Show("File association can not be unmade (needs administrative access)", "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + private void button1_Click(object sender, EventArgs e) + { + this.folderBrowserDialog1.RootFolder = Environment.SpecialFolder.MyComputer; + if (this.folderBrowserDialog1.ShowDialog(this) == DialogResult.OK) + { + if(Directory.Exists(this.folderBrowserDialog1.SelectedPath)) + this.textBox1.Text = this.folderBrowserDialog1.SelectedPath; + } + } + + } +} diff --git a/trunk/Tools/ProjectSettings.resx b/source/Tools/ProjectSettings.resx similarity index 97% rename from trunk/Tools/ProjectSettings.resx rename to source/Tools/ProjectSettings.resx index c3fe8f1..b260022 100644 --- a/trunk/Tools/ProjectSettings.resx +++ b/source/Tools/ProjectSettings.resx @@ -1,123 +1,123 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + \ No newline at end of file diff --git a/trunk/Tools/RuntimeExternal.Designer.cs b/source/Tools/RuntimeExternal.Designer.cs similarity index 96% rename from trunk/Tools/RuntimeExternal.Designer.cs rename to source/Tools/RuntimeExternal.Designer.cs index e7cd2e1..b693c06 100644 --- a/trunk/Tools/RuntimeExternal.Designer.cs +++ b/source/Tools/RuntimeExternal.Designer.cs @@ -1,129 +1,129 @@ -namespace LSLEditor.Tools -{ - partial class RuntimeExternal - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.groupBox3 = new System.Windows.Forms.GroupBox(); - this.label6 = new System.Windows.Forms.Label(); - this.ProxyPassword = new System.Windows.Forms.TextBox(); - this.label5 = new System.Windows.Forms.Label(); - this.ProxyUserid = new System.Windows.Forms.TextBox(); - this.ProxyServer = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.groupBox3.SuspendLayout(); - this.SuspendLayout(); - // - // groupBox3 - // - this.groupBox3.Controls.Add(this.label6); - this.groupBox3.Controls.Add(this.ProxyPassword); - this.groupBox3.Controls.Add(this.label5); - this.groupBox3.Controls.Add(this.ProxyUserid); - this.groupBox3.Controls.Add(this.ProxyServer); - this.groupBox3.Controls.Add(this.label3); - this.groupBox3.Location = new System.Drawing.Point(0, 0); - this.groupBox3.Name = "groupBox3"; - this.groupBox3.Size = new System.Drawing.Size(392, 96); - this.groupBox3.TabIndex = 8; - this.groupBox3.TabStop = false; - this.groupBox3.Text = "Proxy"; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(8, 64); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(53, 13); - this.label6.TabIndex = 7; - this.label6.Text = "Password"; - // - // ProxyPassword - // - this.ProxyPassword.Location = new System.Drawing.Point(88, 64); - this.ProxyPassword.Name = "ProxyPassword"; - this.ProxyPassword.PasswordChar = '*'; - this.ProxyPassword.Size = new System.Drawing.Size(152, 20); - this.ProxyPassword.TabIndex = 6; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(8, 40); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(37, 13); - this.label5.TabIndex = 5; - this.label5.Text = "Userid"; - // - // ProxyUserid - // - this.ProxyUserid.Location = new System.Drawing.Point(88, 40); - this.ProxyUserid.Name = "ProxyUserid"; - this.ProxyUserid.Size = new System.Drawing.Size(152, 20); - this.ProxyUserid.TabIndex = 3; - // - // ProxyServer - // - this.ProxyServer.Location = new System.Drawing.Point(88, 16); - this.ProxyServer.Name = "ProxyServer"; - this.ProxyServer.Size = new System.Drawing.Size(208, 20); - this.ProxyServer.TabIndex = 2; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(8, 16); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(38, 13); - this.label3.TabIndex = 0; - this.label3.Text = "Server"; - // - // RuntimeInternal - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBox3); - this.Name = "RuntimeInternal"; - this.Size = new System.Drawing.Size(392, 272); - this.groupBox3.ResumeLayout(false); - this.groupBox3.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox3; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TextBox ProxyPassword; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.TextBox ProxyUserid; - private System.Windows.Forms.TextBox ProxyServer; - private System.Windows.Forms.Label label3; - - } -} +namespace LSLEditor.Tools +{ + partial class RuntimeExternal + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.label6 = new System.Windows.Forms.Label(); + this.ProxyPassword = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.ProxyUserid = new System.Windows.Forms.TextBox(); + this.ProxyServer = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.groupBox3.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.label6); + this.groupBox3.Controls.Add(this.ProxyPassword); + this.groupBox3.Controls.Add(this.label5); + this.groupBox3.Controls.Add(this.ProxyUserid); + this.groupBox3.Controls.Add(this.ProxyServer); + this.groupBox3.Controls.Add(this.label3); + this.groupBox3.Location = new System.Drawing.Point(0, 0); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(392, 96); + this.groupBox3.TabIndex = 8; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "Proxy"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(8, 64); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(53, 13); + this.label6.TabIndex = 7; + this.label6.Text = "Password"; + // + // ProxyPassword + // + this.ProxyPassword.Location = new System.Drawing.Point(88, 64); + this.ProxyPassword.Name = "ProxyPassword"; + this.ProxyPassword.PasswordChar = '*'; + this.ProxyPassword.Size = new System.Drawing.Size(152, 20); + this.ProxyPassword.TabIndex = 6; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(8, 40); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(37, 13); + this.label5.TabIndex = 5; + this.label5.Text = "Userid"; + // + // ProxyUserid + // + this.ProxyUserid.Location = new System.Drawing.Point(88, 40); + this.ProxyUserid.Name = "ProxyUserid"; + this.ProxyUserid.Size = new System.Drawing.Size(152, 20); + this.ProxyUserid.TabIndex = 3; + // + // ProxyServer + // + this.ProxyServer.Location = new System.Drawing.Point(88, 16); + this.ProxyServer.Name = "ProxyServer"; + this.ProxyServer.Size = new System.Drawing.Size(208, 20); + this.ProxyServer.TabIndex = 2; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(8, 16); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(38, 13); + this.label3.TabIndex = 0; + this.label3.Text = "Server"; + // + // RuntimeInternal + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox3); + this.Name = "RuntimeInternal"; + this.Size = new System.Drawing.Size(392, 272); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox ProxyPassword; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox ProxyUserid; + private System.Windows.Forms.TextBox ProxyServer; + private System.Windows.Forms.Label label3; + + } +} diff --git a/trunk/Tools/RuntimeExternal.cs b/source/Tools/RuntimeExternal.cs similarity index 97% rename from trunk/Tools/RuntimeExternal.cs rename to source/Tools/RuntimeExternal.cs index a051073..1f20a8e 100644 --- a/trunk/Tools/RuntimeExternal.cs +++ b/source/Tools/RuntimeExternal.cs @@ -1,67 +1,67 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace LSLEditor.Tools -{ - public partial class RuntimeExternal : UserControl, ICommit - { - public RuntimeExternal() - { - InitializeComponent(); - - this.ProxyServer.Text = Properties.Settings.Default.ProxyServer; - this.ProxyUserid.Text = Properties.Settings.Default.ProxyUserid; - this.ProxyPassword.Text = Properties.Settings.Default.ProxyPassword; - } - - public void Commit() - { - Properties.Settings.Default.ProxyServer = this.ProxyServer.Text; - Properties.Settings.Default.ProxyUserid = this.ProxyUserid.Text; - Properties.Settings.Default.ProxyPassword = this.ProxyPassword.Text; - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace LSLEditor.Tools +{ + public partial class RuntimeExternal : UserControl, ICommit + { + public RuntimeExternal() + { + InitializeComponent(); + + this.ProxyServer.Text = Properties.Settings.Default.ProxyServer; + this.ProxyUserid.Text = Properties.Settings.Default.ProxyUserid; + this.ProxyPassword.Text = Properties.Settings.Default.ProxyPassword; + } + + public void Commit() + { + Properties.Settings.Default.ProxyServer = this.ProxyServer.Text; + Properties.Settings.Default.ProxyUserid = this.ProxyUserid.Text; + Properties.Settings.Default.ProxyPassword = this.ProxyPassword.Text; + } + } +} diff --git a/trunk/Tools/RuntimeExternal.resx b/source/Tools/RuntimeExternal.resx similarity index 97% rename from trunk/Tools/RuntimeExternal.resx rename to source/Tools/RuntimeExternal.resx index ff31a6d..19dc0dd 100644 --- a/trunk/Tools/RuntimeExternal.resx +++ b/source/Tools/RuntimeExternal.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/trunk/Tools/RuntimeGeneral.Designer.cs b/source/Tools/RuntimeGeneral.Designer.cs similarity index 97% rename from trunk/Tools/RuntimeGeneral.Designer.cs rename to source/Tools/RuntimeGeneral.Designer.cs index 6a3659b..306ce49 100644 --- a/trunk/Tools/RuntimeGeneral.Designer.cs +++ b/source/Tools/RuntimeGeneral.Designer.cs @@ -1,182 +1,182 @@ -namespace LSLEditor.Tools -{ - partial class RuntimeGeneral - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.checkBox7 = new System.Windows.Forms.CheckBox(); - this.checkBox6 = new System.Windows.Forms.CheckBox(); - this.checkBox3 = new System.Windows.Forms.CheckBox(); - this.checkBox2 = new System.Windows.Forms.CheckBox(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.checkBox4 = new System.Windows.Forms.CheckBox(); - this.groupBox3 = new System.Windows.Forms.GroupBox(); - this.checkBox5 = new System.Windows.Forms.CheckBox(); - this.groupBox1.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.groupBox3.SuspendLayout(); - this.SuspendLayout(); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.checkBox7); - this.groupBox1.Controls.Add(this.checkBox6); - this.groupBox1.Controls.Add(this.checkBox3); - this.groupBox1.Controls.Add(this.checkBox2); - this.groupBox1.Controls.Add(this.checkBox1); - this.groupBox1.Location = new System.Drawing.Point(0, 0); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(392, 152); - this.groupBox1.TabIndex = 5; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "General"; - // - // checkBox7 - // - this.checkBox7.AutoSize = true; - this.checkBox7.Location = new System.Drawing.Point(16, 120); - this.checkBox7.Name = "checkBox7"; - this.checkBox7.Size = new System.Drawing.Size(220, 17); - this.checkBox7.TabIndex = 4; - this.checkBox7.Text = "state changes allowed in global functions"; - this.checkBox7.UseVisualStyleBackColor = true; - // - // checkBox6 - // - this.checkBox6.AutoSize = true; - this.checkBox6.Location = new System.Drawing.Point(16, 96); - this.checkBox6.Name = "checkBox6"; - this.checkBox6.Size = new System.Drawing.Size(187, 17); - this.checkBox6.TabIndex = 3; - this.checkBox6.Text = "llGetScriptName without extension"; - this.checkBox6.UseVisualStyleBackColor = true; - // - // checkBox3 - // - this.checkBox3.AutoSize = true; - this.checkBox3.Location = new System.Drawing.Point(16, 72); - this.checkBox3.Name = "checkBox3"; - this.checkBox3.Size = new System.Drawing.Size(223, 17); - this.checkBox3.TabIndex = 2; - this.checkBox3.Text = "Single quote char \' allowed outside strings"; - this.checkBox3.UseVisualStyleBackColor = true; - // - // checkBox2 - // - this.checkBox2.AutoSize = true; - this.checkBox2.Location = new System.Drawing.Point(16, 48); - this.checkBox2.Name = "checkBox2"; - this.checkBox2.Size = new System.Drawing.Size(168, 17); - this.checkBox2.TabIndex = 1; - this.checkBox2.Text = "Skip warnings when compiling"; - this.checkBox2.UseVisualStyleBackColor = true; - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.checkBox1.Location = new System.Drawing.Point(16, 24); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(195, 17); - this.checkBox1.TabIndex = 0; - this.checkBox1.Text = "C style comments allowed (/* .... */)"; - this.checkBox1.UseVisualStyleBackColor = true; - // - // groupBox2 - // - this.groupBox2.Controls.Add(this.checkBox4); - this.groupBox2.Location = new System.Drawing.Point(0, 152); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(392, 56); - this.groupBox2.TabIndex = 6; - this.groupBox2.TabStop = false; - this.groupBox2.Text = "Verbose window"; - // - // checkBox4 - // - this.checkBox4.AutoSize = true; - this.checkBox4.Location = new System.Drawing.Point(16, 24); - this.checkBox4.Name = "checkBox4"; - this.checkBox4.Size = new System.Drawing.Size(163, 17); - this.checkBox4.TabIndex = 0; - this.checkBox4.Text = "Quoted \"strings\" in list output"; - this.checkBox4.UseVisualStyleBackColor = true; - // - // groupBox3 - // - this.groupBox3.Controls.Add(this.checkBox5); - this.groupBox3.Location = new System.Drawing.Point(0, 208); - this.groupBox3.Name = "groupBox3"; - this.groupBox3.Size = new System.Drawing.Size(392, 56); - this.groupBox3.TabIndex = 7; - this.groupBox3.TabStop = false; - this.groupBox3.Text = "Auto save"; - // - // checkBox5 - // - this.checkBox5.AutoSize = true; - this.checkBox5.Location = new System.Drawing.Point(16, 24); - this.checkBox5.Name = "checkBox5"; - this.checkBox5.Size = new System.Drawing.Size(204, 17); - this.checkBox5.TabIndex = 0; - this.checkBox5.Text = "Use autosave on files when compiling"; - this.checkBox5.UseVisualStyleBackColor = true; - // - // RuntimeGeneral - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBox3); - this.Controls.Add(this.groupBox2); - this.Controls.Add(this.groupBox1); - this.Name = "RuntimeGeneral"; - this.Size = new System.Drawing.Size(392, 272); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - this.groupBox3.ResumeLayout(false); - this.groupBox3.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.CheckBox checkBox2; - private System.Windows.Forms.CheckBox checkBox3; - private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.CheckBox checkBox4; - private System.Windows.Forms.GroupBox groupBox3; - private System.Windows.Forms.CheckBox checkBox5; - private System.Windows.Forms.CheckBox checkBox6; - private System.Windows.Forms.CheckBox checkBox7; - } -} +namespace LSLEditor.Tools +{ + partial class RuntimeGeneral + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.checkBox7 = new System.Windows.Forms.CheckBox(); + this.checkBox6 = new System.Windows.Forms.CheckBox(); + this.checkBox3 = new System.Windows.Forms.CheckBox(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.checkBox4 = new System.Windows.Forms.CheckBox(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.checkBox5 = new System.Windows.Forms.CheckBox(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.checkBox7); + this.groupBox1.Controls.Add(this.checkBox6); + this.groupBox1.Controls.Add(this.checkBox3); + this.groupBox1.Controls.Add(this.checkBox2); + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Location = new System.Drawing.Point(0, 0); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(392, 152); + this.groupBox1.TabIndex = 5; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "General"; + // + // checkBox7 + // + this.checkBox7.AutoSize = true; + this.checkBox7.Location = new System.Drawing.Point(16, 120); + this.checkBox7.Name = "checkBox7"; + this.checkBox7.Size = new System.Drawing.Size(220, 17); + this.checkBox7.TabIndex = 4; + this.checkBox7.Text = "state changes allowed in global functions"; + this.checkBox7.UseVisualStyleBackColor = true; + // + // checkBox6 + // + this.checkBox6.AutoSize = true; + this.checkBox6.Location = new System.Drawing.Point(16, 96); + this.checkBox6.Name = "checkBox6"; + this.checkBox6.Size = new System.Drawing.Size(187, 17); + this.checkBox6.TabIndex = 3; + this.checkBox6.Text = "llGetScriptName without extension"; + this.checkBox6.UseVisualStyleBackColor = true; + // + // checkBox3 + // + this.checkBox3.AutoSize = true; + this.checkBox3.Location = new System.Drawing.Point(16, 72); + this.checkBox3.Name = "checkBox3"; + this.checkBox3.Size = new System.Drawing.Size(223, 17); + this.checkBox3.TabIndex = 2; + this.checkBox3.Text = "Single quote char \' allowed outside strings"; + this.checkBox3.UseVisualStyleBackColor = true; + // + // checkBox2 + // + this.checkBox2.AutoSize = true; + this.checkBox2.Location = new System.Drawing.Point(16, 48); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.Size = new System.Drawing.Size(168, 17); + this.checkBox2.TabIndex = 1; + this.checkBox2.Text = "Skip warnings when compiling"; + this.checkBox2.UseVisualStyleBackColor = true; + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Location = new System.Drawing.Point(16, 24); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(195, 17); + this.checkBox1.TabIndex = 0; + this.checkBox1.Text = "C style comments allowed (/* .... */)"; + this.checkBox1.UseVisualStyleBackColor = true; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.checkBox4); + this.groupBox2.Location = new System.Drawing.Point(0, 152); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(392, 56); + this.groupBox2.TabIndex = 6; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Verbose window"; + // + // checkBox4 + // + this.checkBox4.AutoSize = true; + this.checkBox4.Location = new System.Drawing.Point(16, 24); + this.checkBox4.Name = "checkBox4"; + this.checkBox4.Size = new System.Drawing.Size(163, 17); + this.checkBox4.TabIndex = 0; + this.checkBox4.Text = "Quoted \"strings\" in list output"; + this.checkBox4.UseVisualStyleBackColor = true; + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.checkBox5); + this.groupBox3.Location = new System.Drawing.Point(0, 208); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(392, 56); + this.groupBox3.TabIndex = 7; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "Auto save"; + // + // checkBox5 + // + this.checkBox5.AutoSize = true; + this.checkBox5.Location = new System.Drawing.Point(16, 24); + this.checkBox5.Name = "checkBox5"; + this.checkBox5.Size = new System.Drawing.Size(204, 17); + this.checkBox5.TabIndex = 0; + this.checkBox5.Text = "Use autosave on files when compiling"; + this.checkBox5.UseVisualStyleBackColor = true; + // + // RuntimeGeneral + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox3); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox1); + this.Name = "RuntimeGeneral"; + this.Size = new System.Drawing.Size(392, 272); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.CheckBox checkBox2; + private System.Windows.Forms.CheckBox checkBox3; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.CheckBox checkBox4; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.CheckBox checkBox5; + private System.Windows.Forms.CheckBox checkBox6; + private System.Windows.Forms.CheckBox checkBox7; + } +} diff --git a/trunk/Tools/RuntimeGeneral.cs b/source/Tools/RuntimeGeneral.cs similarity index 97% rename from trunk/Tools/RuntimeGeneral.cs rename to source/Tools/RuntimeGeneral.cs index 0e1b000..1067e50 100644 --- a/trunk/Tools/RuntimeGeneral.cs +++ b/source/Tools/RuntimeGeneral.cs @@ -1,73 +1,73 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Windows.Forms; - -namespace LSLEditor.Tools -{ - public partial class RuntimeGeneral : UserControl, ICommit - { - public RuntimeGeneral() - { - InitializeComponent(); - - this.checkBox1.Checked = Properties.Settings.Default.CommentCStyle; - this.checkBox2.Checked = Properties.Settings.Default.SkipWarnings; - this.checkBox3.Checked = Properties.Settings.Default.SingleQuote; - this.checkBox4.Checked = Properties.Settings.Default.QuotesListVerbose; - this.checkBox5.Checked = Properties.Settings.Default.AutoSaveOnDebug; - this.checkBox6.Checked = Properties.Settings.Default.llGetScriptName; - this.checkBox7.Checked = Properties.Settings.Default.StatesInGlobalFunctions; - } - - public void Commit() - { - Properties.Settings.Default.CommentCStyle = this.checkBox1.Checked; - Properties.Settings.Default.SkipWarnings = this.checkBox2.Checked; - Properties.Settings.Default.SingleQuote = this.checkBox3.Checked; - Properties.Settings.Default.QuotesListVerbose = this.checkBox4.Checked; - Properties.Settings.Default.AutoSaveOnDebug = this.checkBox5.Checked; - Properties.Settings.Default.llGetScriptName = this.checkBox6.Checked; - Properties.Settings.Default.StatesInGlobalFunctions = this.checkBox7.Checked; - } - - - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Windows.Forms; + +namespace LSLEditor.Tools +{ + public partial class RuntimeGeneral : UserControl, ICommit + { + public RuntimeGeneral() + { + InitializeComponent(); + + this.checkBox1.Checked = Properties.Settings.Default.CommentCStyle; + this.checkBox2.Checked = Properties.Settings.Default.SkipWarnings; + this.checkBox3.Checked = Properties.Settings.Default.SingleQuote; + this.checkBox4.Checked = Properties.Settings.Default.QuotesListVerbose; + this.checkBox5.Checked = Properties.Settings.Default.AutoSaveOnDebug; + this.checkBox6.Checked = Properties.Settings.Default.llGetScriptName; + this.checkBox7.Checked = Properties.Settings.Default.StatesInGlobalFunctions; + } + + public void Commit() + { + Properties.Settings.Default.CommentCStyle = this.checkBox1.Checked; + Properties.Settings.Default.SkipWarnings = this.checkBox2.Checked; + Properties.Settings.Default.SingleQuote = this.checkBox3.Checked; + Properties.Settings.Default.QuotesListVerbose = this.checkBox4.Checked; + Properties.Settings.Default.AutoSaveOnDebug = this.checkBox5.Checked; + Properties.Settings.Default.llGetScriptName = this.checkBox6.Checked; + Properties.Settings.Default.StatesInGlobalFunctions = this.checkBox7.Checked; + } + + + } +} diff --git a/trunk/Tools/RuntimeGeneral.resx b/source/Tools/RuntimeGeneral.resx similarity index 97% rename from trunk/Tools/RuntimeGeneral.resx rename to source/Tools/RuntimeGeneral.resx index ff31a6d..19dc0dd 100644 --- a/trunk/Tools/RuntimeGeneral.resx +++ b/source/Tools/RuntimeGeneral.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/trunk/Tools/RuntimeInternal.Designer.cs b/source/Tools/RuntimeInternal.Designer.cs similarity index 97% rename from trunk/Tools/RuntimeInternal.Designer.cs rename to source/Tools/RuntimeInternal.Designer.cs index e3c66ee..12ff24c 100644 --- a/trunk/Tools/RuntimeInternal.Designer.cs +++ b/source/Tools/RuntimeInternal.Designer.cs @@ -1,313 +1,313 @@ -namespace LSLEditor.Tools -{ - partial class RuntimeInternal - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.groupBox4 = new System.Windows.Forms.GroupBox(); - this.XSecondLifeShard = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.label8 = new System.Windows.Forms.Label(); - this.RegionFPS = new System.Windows.Forms.TextBox(); - this.RegionName = new System.Windows.Forms.TextBox(); - this.label7 = new System.Windows.Forms.Label(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.AvatarKey = new System.Windows.Forms.TextBox(); - this.AvatarName = new System.Windows.Forms.TextBox(); - this.linkLabel1 = new System.Windows.Forms.LinkLabel(); - this.label1 = new System.Windows.Forms.Label(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.textBoxParcelArea = new System.Windows.Forms.TextBox(); - this.label9 = new System.Windows.Forms.Label(); - this.textBoxParcelGroup = new System.Windows.Forms.TextBox(); - this.textBoxParcelOwner = new System.Windows.Forms.TextBox(); - this.textBoxParcelDescription = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.textBoxParcelName = new System.Windows.Forms.TextBox(); - this.label5 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.groupBox4.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.SuspendLayout(); - // - // groupBox4 - // - this.groupBox4.Controls.Add(this.XSecondLifeShard); - this.groupBox4.Controls.Add(this.label2); - this.groupBox4.Controls.Add(this.label8); - this.groupBox4.Controls.Add(this.RegionFPS); - this.groupBox4.Controls.Add(this.RegionName); - this.groupBox4.Controls.Add(this.label7); - this.groupBox4.Location = new System.Drawing.Point(0, 72); - this.groupBox4.Name = "groupBox4"; - this.groupBox4.Size = new System.Drawing.Size(392, 64); - this.groupBox4.TabIndex = 0; - this.groupBox4.TabStop = false; - this.groupBox4.Text = "Sim"; - // - // XSecondLifeShard - // - this.XSecondLifeShard.Location = new System.Drawing.Point(256, 40); - this.XSecondLifeShard.Name = "XSecondLifeShard"; - this.XSecondLifeShard.Size = new System.Drawing.Size(120, 20); - this.XSecondLifeShard.TabIndex = 6; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(144, 40); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(102, 13); - this.label2.TabIndex = 0; - this.label2.Text = "X-SecondLife-Shard"; - // - // label8 - // - this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(16, 40); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(61, 13); - this.label8.TabIndex = 0; - this.label8.Text = "RegionFPS"; - // - // RegionFPS - // - this.RegionFPS.Location = new System.Drawing.Point(80, 40); - this.RegionFPS.Name = "RegionFPS"; - this.RegionFPS.Size = new System.Drawing.Size(48, 20); - this.RegionFPS.TabIndex = 5; - // - // RegionName - // - this.RegionName.Location = new System.Drawing.Point(80, 16); - this.RegionName.Name = "RegionName"; - this.RegionName.Size = new System.Drawing.Size(272, 20); - this.RegionName.TabIndex = 4; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(8, 16); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(69, 13); - this.label7.TabIndex = 0; - this.label7.Text = "RegionName"; - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.AvatarKey); - this.groupBox1.Controls.Add(this.AvatarName); - this.groupBox1.Controls.Add(this.linkLabel1); - this.groupBox1.Controls.Add(this.label1); - this.groupBox1.Location = new System.Drawing.Point(0, 0); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(392, 64); - this.groupBox1.TabIndex = 0; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "Avatar"; - // - // AvatarKey - // - this.AvatarKey.Location = new System.Drawing.Point(80, 40); - this.AvatarKey.Name = "AvatarKey"; - this.AvatarKey.Size = new System.Drawing.Size(272, 20); - this.AvatarKey.TabIndex = 3; - // - // AvatarName - // - this.AvatarName.Location = new System.Drawing.Point(80, 16); - this.AvatarName.Name = "AvatarName"; - this.AvatarName.Size = new System.Drawing.Size(272, 20); - this.AvatarName.TabIndex = 1; - // - // linkLabel1 - // - this.linkLabel1.AutoSize = true; - this.linkLabel1.Location = new System.Drawing.Point(48, 40); - this.linkLabel1.Name = "linkLabel1"; - this.linkLabel1.Size = new System.Drawing.Size(24, 13); - this.linkLabel1.TabIndex = 2; - this.linkLabel1.TabStop = true; - this.linkLabel1.Text = "key"; - this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(40, 16); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(35, 13); - this.label1.TabIndex = 0; - this.label1.Text = "Name"; - // - // groupBox2 - // - this.groupBox2.Controls.Add(this.label6); - this.groupBox2.Controls.Add(this.label4); - this.groupBox2.Controls.Add(this.textBoxParcelArea); - this.groupBox2.Controls.Add(this.label9); - this.groupBox2.Controls.Add(this.textBoxParcelGroup); - this.groupBox2.Controls.Add(this.textBoxParcelOwner); - this.groupBox2.Controls.Add(this.textBoxParcelDescription); - this.groupBox2.Controls.Add(this.label3); - this.groupBox2.Controls.Add(this.textBoxParcelName); - this.groupBox2.Controls.Add(this.label5); - this.groupBox2.Location = new System.Drawing.Point(0, 144); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(392, 120); - this.groupBox2.TabIndex = 0; - this.groupBox2.TabStop = false; - this.groupBox2.Text = "Parcel"; - // - // textBoxParcelArea - // - this.textBoxParcelArea.Location = new System.Drawing.Point(320, 40); - this.textBoxParcelArea.Name = "textBoxParcelArea"; - this.textBoxParcelArea.Size = new System.Drawing.Size(56, 20); - this.textBoxParcelArea.TabIndex = 13; - // - // label9 - // - this.label9.AutoSize = true; - this.label9.Location = new System.Drawing.Point(320, 24); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(29, 13); - this.label9.TabIndex = 0; - this.label9.Text = "Area"; - // - // textBoxParcelGroup - // - this.textBoxParcelGroup.Location = new System.Drawing.Point(80, 88); - this.textBoxParcelGroup.Name = "textBoxParcelGroup"; - this.textBoxParcelGroup.Size = new System.Drawing.Size(224, 20); - this.textBoxParcelGroup.TabIndex = 12; - // - // textBoxParcelOwner - // - this.textBoxParcelOwner.Location = new System.Drawing.Point(80, 64); - this.textBoxParcelOwner.Name = "textBoxParcelOwner"; - this.textBoxParcelOwner.Size = new System.Drawing.Size(224, 20); - this.textBoxParcelOwner.TabIndex = 10; - // - // textBoxParcelDescription - // - this.textBoxParcelDescription.Location = new System.Drawing.Point(80, 40); - this.textBoxParcelDescription.Name = "textBoxParcelDescription"; - this.textBoxParcelDescription.Size = new System.Drawing.Size(224, 20); - this.textBoxParcelDescription.TabIndex = 8; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(8, 40); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(60, 13); - this.label3.TabIndex = 0; - this.label3.Text = "Description"; - // - // textBoxParcelName - // - this.textBoxParcelName.Location = new System.Drawing.Point(80, 16); - this.textBoxParcelName.Name = "textBoxParcelName"; - this.textBoxParcelName.Size = new System.Drawing.Size(224, 20); - this.textBoxParcelName.TabIndex = 7; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(32, 16); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(35, 13); - this.label5.TabIndex = 0; - this.label5.Text = "Name"; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(8, 64); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(64, 13); - this.label4.TabIndex = 0; - this.label4.Text = "Owner (key)"; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(8, 88); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(62, 13); - this.label6.TabIndex = 0; - this.label6.Text = "Group (key)"; - // - // RuntimeInternal - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBox2); - this.Controls.Add(this.groupBox4); - this.Controls.Add(this.groupBox1); - this.Name = "RuntimeInternal"; - this.Size = new System.Drawing.Size(392, 272); - this.groupBox4.ResumeLayout(false); - this.groupBox4.PerformLayout(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox4; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.TextBox RegionFPS; - private System.Windows.Forms.TextBox RegionName; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.TextBox AvatarKey; - private System.Windows.Forms.TextBox AvatarName; - private System.Windows.Forms.LinkLabel linkLabel1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox XSecondLifeShard; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.TextBox textBoxParcelName; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.TextBox textBoxParcelDescription; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox textBoxParcelArea; - private System.Windows.Forms.Label label9; - private System.Windows.Forms.TextBox textBoxParcelGroup; - private System.Windows.Forms.TextBox textBoxParcelOwner; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Label label4; - } -} +namespace LSLEditor.Tools +{ + partial class RuntimeInternal + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.XSecondLifeShard = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.RegionFPS = new System.Windows.Forms.TextBox(); + this.RegionName = new System.Windows.Forms.TextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.AvatarKey = new System.Windows.Forms.TextBox(); + this.AvatarName = new System.Windows.Forms.TextBox(); + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + this.label1 = new System.Windows.Forms.Label(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.textBoxParcelArea = new System.Windows.Forms.TextBox(); + this.label9 = new System.Windows.Forms.Label(); + this.textBoxParcelGroup = new System.Windows.Forms.TextBox(); + this.textBoxParcelOwner = new System.Windows.Forms.TextBox(); + this.textBoxParcelDescription = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.textBoxParcelName = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.groupBox4.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox4 + // + this.groupBox4.Controls.Add(this.XSecondLifeShard); + this.groupBox4.Controls.Add(this.label2); + this.groupBox4.Controls.Add(this.label8); + this.groupBox4.Controls.Add(this.RegionFPS); + this.groupBox4.Controls.Add(this.RegionName); + this.groupBox4.Controls.Add(this.label7); + this.groupBox4.Location = new System.Drawing.Point(0, 72); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(392, 64); + this.groupBox4.TabIndex = 0; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "Sim"; + // + // XSecondLifeShard + // + this.XSecondLifeShard.Location = new System.Drawing.Point(256, 40); + this.XSecondLifeShard.Name = "XSecondLifeShard"; + this.XSecondLifeShard.Size = new System.Drawing.Size(120, 20); + this.XSecondLifeShard.TabIndex = 6; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(144, 40); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(102, 13); + this.label2.TabIndex = 0; + this.label2.Text = "X-SecondLife-Shard"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(16, 40); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(61, 13); + this.label8.TabIndex = 0; + this.label8.Text = "RegionFPS"; + // + // RegionFPS + // + this.RegionFPS.Location = new System.Drawing.Point(80, 40); + this.RegionFPS.Name = "RegionFPS"; + this.RegionFPS.Size = new System.Drawing.Size(48, 20); + this.RegionFPS.TabIndex = 5; + // + // RegionName + // + this.RegionName.Location = new System.Drawing.Point(80, 16); + this.RegionName.Name = "RegionName"; + this.RegionName.Size = new System.Drawing.Size(272, 20); + this.RegionName.TabIndex = 4; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(8, 16); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(69, 13); + this.label7.TabIndex = 0; + this.label7.Text = "RegionName"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.AvatarKey); + this.groupBox1.Controls.Add(this.AvatarName); + this.groupBox1.Controls.Add(this.linkLabel1); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Location = new System.Drawing.Point(0, 0); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(392, 64); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Avatar"; + // + // AvatarKey + // + this.AvatarKey.Location = new System.Drawing.Point(80, 40); + this.AvatarKey.Name = "AvatarKey"; + this.AvatarKey.Size = new System.Drawing.Size(272, 20); + this.AvatarKey.TabIndex = 3; + // + // AvatarName + // + this.AvatarName.Location = new System.Drawing.Point(80, 16); + this.AvatarName.Name = "AvatarName"; + this.AvatarName.Size = new System.Drawing.Size(272, 20); + this.AvatarName.TabIndex = 1; + // + // linkLabel1 + // + this.linkLabel1.AutoSize = true; + this.linkLabel1.Location = new System.Drawing.Point(48, 40); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(24, 13); + this.linkLabel1.TabIndex = 2; + this.linkLabel1.TabStop = true; + this.linkLabel1.Text = "key"; + this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(40, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(35, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Name"; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.label6); + this.groupBox2.Controls.Add(this.label4); + this.groupBox2.Controls.Add(this.textBoxParcelArea); + this.groupBox2.Controls.Add(this.label9); + this.groupBox2.Controls.Add(this.textBoxParcelGroup); + this.groupBox2.Controls.Add(this.textBoxParcelOwner); + this.groupBox2.Controls.Add(this.textBoxParcelDescription); + this.groupBox2.Controls.Add(this.label3); + this.groupBox2.Controls.Add(this.textBoxParcelName); + this.groupBox2.Controls.Add(this.label5); + this.groupBox2.Location = new System.Drawing.Point(0, 144); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(392, 120); + this.groupBox2.TabIndex = 0; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Parcel"; + // + // textBoxParcelArea + // + this.textBoxParcelArea.Location = new System.Drawing.Point(320, 40); + this.textBoxParcelArea.Name = "textBoxParcelArea"; + this.textBoxParcelArea.Size = new System.Drawing.Size(56, 20); + this.textBoxParcelArea.TabIndex = 13; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(320, 24); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(29, 13); + this.label9.TabIndex = 0; + this.label9.Text = "Area"; + // + // textBoxParcelGroup + // + this.textBoxParcelGroup.Location = new System.Drawing.Point(80, 88); + this.textBoxParcelGroup.Name = "textBoxParcelGroup"; + this.textBoxParcelGroup.Size = new System.Drawing.Size(224, 20); + this.textBoxParcelGroup.TabIndex = 12; + // + // textBoxParcelOwner + // + this.textBoxParcelOwner.Location = new System.Drawing.Point(80, 64); + this.textBoxParcelOwner.Name = "textBoxParcelOwner"; + this.textBoxParcelOwner.Size = new System.Drawing.Size(224, 20); + this.textBoxParcelOwner.TabIndex = 10; + // + // textBoxParcelDescription + // + this.textBoxParcelDescription.Location = new System.Drawing.Point(80, 40); + this.textBoxParcelDescription.Name = "textBoxParcelDescription"; + this.textBoxParcelDescription.Size = new System.Drawing.Size(224, 20); + this.textBoxParcelDescription.TabIndex = 8; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(8, 40); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(60, 13); + this.label3.TabIndex = 0; + this.label3.Text = "Description"; + // + // textBoxParcelName + // + this.textBoxParcelName.Location = new System.Drawing.Point(80, 16); + this.textBoxParcelName.Name = "textBoxParcelName"; + this.textBoxParcelName.Size = new System.Drawing.Size(224, 20); + this.textBoxParcelName.TabIndex = 7; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(32, 16); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(35, 13); + this.label5.TabIndex = 0; + this.label5.Text = "Name"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(8, 64); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(64, 13); + this.label4.TabIndex = 0; + this.label4.Text = "Owner (key)"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(8, 88); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(62, 13); + this.label6.TabIndex = 0; + this.label6.Text = "Group (key)"; + // + // RuntimeInternal + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox4); + this.Controls.Add(this.groupBox1); + this.Name = "RuntimeInternal"; + this.Size = new System.Drawing.Size(392, 272); + this.groupBox4.ResumeLayout(false); + this.groupBox4.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox RegionFPS; + private System.Windows.Forms.TextBox RegionName; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.TextBox AvatarKey; + private System.Windows.Forms.TextBox AvatarName; + private System.Windows.Forms.LinkLabel linkLabel1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox XSecondLifeShard; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.TextBox textBoxParcelName; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox textBoxParcelDescription; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox textBoxParcelArea; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.TextBox textBoxParcelGroup; + private System.Windows.Forms.TextBox textBoxParcelOwner; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label4; + } +} diff --git a/trunk/Tools/RuntimeInternal.cs b/source/Tools/RuntimeInternal.cs similarity index 97% rename from trunk/Tools/RuntimeInternal.cs rename to source/Tools/RuntimeInternal.cs index 76c19da..427a11e 100644 --- a/trunk/Tools/RuntimeInternal.cs +++ b/source/Tools/RuntimeInternal.cs @@ -1,171 +1,171 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.IO; -using System.Text; -using System.Windows.Forms; -using System.Xml; - -namespace LSLEditor.Tools -{ - public partial class RuntimeInternal : UserControl, ICommit - { - public RuntimeInternal() - { - InitializeComponent(); - - this.AvatarName.Text = Properties.Settings.Default.AvatarName; - this.AvatarKey.Text = Properties.Settings.Default.AvatarKey; - - this.RegionName.Text = Properties.Settings.Default.RegionName; - this.RegionFPS.Text = Properties.Settings.Default.RegionFPS.ToString(); - - this.XSecondLifeShard.Text = Properties.Settings.Default.XSecondLifeShard; - - this.textBoxParcelName.Text = Properties.Settings.Default.ParcelName; - this.textBoxParcelDescription.Text = Properties.Settings.Default.ParcelDescription; - this.textBoxParcelOwner.Text = Properties.Settings.Default.ParcelOwner; - this.textBoxParcelGroup.Text = Properties.Settings.Default.ParcelGroup; - this.textBoxParcelArea.Text = Properties.Settings.Default.ParcelArea.ToString(); - } - - private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - SearchForKey(); - } - - private void SearchForKey() - { - bool Searching = true; - bool XmlVersion = false; - try - { - string[] arName = this.AvatarName.Text.Split(' '); - string strFirst = arName[0].Trim().ToLower(); - string strLast = arName[1].Trim().ToLower(); - string strCachePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\SecondLife\cache\name.cache"; - - StreamReader sr = new StreamReader(strCachePath); - while (Searching) - { - string strLine = sr.ReadLine(); - if (strLine == null) - break; - if (strLine.Contains("")) - { - XmlVersion = true; - break; - } - strLine = strLine.ToLower(); - if (strLine.IndexOf(strFirst) > 0) - { - if (strLine.IndexOf(strLast) > 0) - { - string strXoredKey = strLine.Split(new char[] { '\t' })[0].Trim(); - Guid g1 = new Guid(strXoredKey); - Guid g2 = Guid.Empty; - byte[] b1 = g1.ToByteArray(); - byte[] b2 = g2.ToByteArray(); - for (int intI = 0; intI < b1.Length; intI++) - b2[intI] = (byte)(b1[intI] ^ 0x33); - g2 = new Guid(b2); - this.AvatarKey.Text = g2.ToString(); - Searching = false; - } - } - } - sr.Close(); - - if (XmlVersion) - { - XmlDocument xmlDocument = new XmlDocument(); - xmlDocument.Load(strCachePath); - // Who has made this key f*cking xml file??? it s*cks bigtime - XmlNode xmlNodeMapFirst = xmlDocument.SelectSingleNode("//map[translate(string[1],'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = '" + strFirst + "']"); - XmlNode xmlNodeMapLast = xmlDocument.SelectSingleNode("//map[translate(string[2],'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = '" + strLast + "']"); - if (xmlNodeMapFirst != null && xmlNodeMapLast != null) - { - if (xmlNodeMapFirst == xmlNodeMapLast) - { - // previous sibbeling key is the key - // Please, please, this meshed up my day, - // USE HIERARCHY PARENT-CHILD NOT SIBLINGS!! - this.AvatarKey.Text = xmlNodeMapFirst.PreviousSibling.InnerText; - Searching = false; - } - } - } - } - catch - { - } - if (Searching) - this.AvatarKey.Text = "Name not found in Cache"; - } - - public void Commit() - { - Properties.Settings.Default.AvatarName = this.AvatarName.Text; - Properties.Settings.Default.AvatarKey = this.AvatarKey.Text; - - Properties.Settings.Default.XSecondLifeShard = this.XSecondLifeShard.Text; - - Properties.Settings.Default.RegionName = this.RegionName.Text; - double dblA; - if(double.TryParse(this.RegionFPS.Text, out dblA)) - Properties.Settings.Default.RegionFPS = dblA; - - Properties.Settings.Default.ParcelName = this.textBoxParcelName.Text; - Properties.Settings.Default.ParcelDescription = this.textBoxParcelDescription.Text; - Properties.Settings.Default.ParcelOwner = this.textBoxParcelOwner.Text; - Properties.Settings.Default.ParcelGroup = this.textBoxParcelGroup.Text; - - int intArea; - if(int.TryParse(this.textBoxParcelArea.Text, out intArea)) - Properties.Settings.Default.ParcelArea = intArea; - else - Properties.Settings.Default.ParcelArea = 512; - } - - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.IO; +using System.Text; +using System.Windows.Forms; +using System.Xml; + +namespace LSLEditor.Tools +{ + public partial class RuntimeInternal : UserControl, ICommit + { + public RuntimeInternal() + { + InitializeComponent(); + + this.AvatarName.Text = Properties.Settings.Default.AvatarName; + this.AvatarKey.Text = Properties.Settings.Default.AvatarKey; + + this.RegionName.Text = Properties.Settings.Default.RegionName; + this.RegionFPS.Text = Properties.Settings.Default.RegionFPS.ToString(); + + this.XSecondLifeShard.Text = Properties.Settings.Default.XSecondLifeShard; + + this.textBoxParcelName.Text = Properties.Settings.Default.ParcelName; + this.textBoxParcelDescription.Text = Properties.Settings.Default.ParcelDescription; + this.textBoxParcelOwner.Text = Properties.Settings.Default.ParcelOwner; + this.textBoxParcelGroup.Text = Properties.Settings.Default.ParcelGroup; + this.textBoxParcelArea.Text = Properties.Settings.Default.ParcelArea.ToString(); + } + + private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + SearchForKey(); + } + + private void SearchForKey() + { + bool Searching = true; + bool XmlVersion = false; + try + { + string[] arName = this.AvatarName.Text.Split(' '); + string strFirst = arName[0].Trim().ToLower(); + string strLast = arName[1].Trim().ToLower(); + string strCachePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\SecondLife\cache\name.cache"; + + StreamReader sr = new StreamReader(strCachePath); + while (Searching) + { + string strLine = sr.ReadLine(); + if (strLine == null) + break; + if (strLine.Contains("")) + { + XmlVersion = true; + break; + } + strLine = strLine.ToLower(); + if (strLine.IndexOf(strFirst) > 0) + { + if (strLine.IndexOf(strLast) > 0) + { + string strXoredKey = strLine.Split(new char[] { '\t' })[0].Trim(); + Guid g1 = new Guid(strXoredKey); + Guid g2 = Guid.Empty; + byte[] b1 = g1.ToByteArray(); + byte[] b2 = g2.ToByteArray(); + for (int intI = 0; intI < b1.Length; intI++) + b2[intI] = (byte)(b1[intI] ^ 0x33); + g2 = new Guid(b2); + this.AvatarKey.Text = g2.ToString(); + Searching = false; + } + } + } + sr.Close(); + + if (XmlVersion) + { + XmlDocument xmlDocument = new XmlDocument(); + xmlDocument.Load(strCachePath); + // Who has made this key f*cking xml file??? it s*cks bigtime + XmlNode xmlNodeMapFirst = xmlDocument.SelectSingleNode("//map[translate(string[1],'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = '" + strFirst + "']"); + XmlNode xmlNodeMapLast = xmlDocument.SelectSingleNode("//map[translate(string[2],'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = '" + strLast + "']"); + if (xmlNodeMapFirst != null && xmlNodeMapLast != null) + { + if (xmlNodeMapFirst == xmlNodeMapLast) + { + // previous sibbeling key is the key + // Please, please, this meshed up my day, + // USE HIERARCHY PARENT-CHILD NOT SIBLINGS!! + this.AvatarKey.Text = xmlNodeMapFirst.PreviousSibling.InnerText; + Searching = false; + } + } + } + } + catch + { + } + if (Searching) + this.AvatarKey.Text = "Name not found in Cache"; + } + + public void Commit() + { + Properties.Settings.Default.AvatarName = this.AvatarName.Text; + Properties.Settings.Default.AvatarKey = this.AvatarKey.Text; + + Properties.Settings.Default.XSecondLifeShard = this.XSecondLifeShard.Text; + + Properties.Settings.Default.RegionName = this.RegionName.Text; + double dblA; + if(double.TryParse(this.RegionFPS.Text, out dblA)) + Properties.Settings.Default.RegionFPS = dblA; + + Properties.Settings.Default.ParcelName = this.textBoxParcelName.Text; + Properties.Settings.Default.ParcelDescription = this.textBoxParcelDescription.Text; + Properties.Settings.Default.ParcelOwner = this.textBoxParcelOwner.Text; + Properties.Settings.Default.ParcelGroup = this.textBoxParcelGroup.Text; + + int intArea; + if(int.TryParse(this.textBoxParcelArea.Text, out intArea)) + Properties.Settings.Default.ParcelArea = intArea; + else + Properties.Settings.Default.ParcelArea = 512; + } + + } +} diff --git a/trunk/Tools/RuntimeInternal.resx b/source/Tools/RuntimeInternal.resx similarity index 97% rename from trunk/Tools/RuntimeInternal.resx rename to source/Tools/RuntimeInternal.resx index ff31a6d..19dc0dd 100644 --- a/trunk/Tools/RuntimeInternal.resx +++ b/source/Tools/RuntimeInternal.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/trunk/Tools/RuntimeSmtp.Designer.cs b/source/Tools/RuntimeSmtp.Designer.cs similarity index 97% rename from trunk/Tools/RuntimeSmtp.Designer.cs rename to source/Tools/RuntimeSmtp.Designer.cs index 49a5fe3..253cf8a 100644 --- a/trunk/Tools/RuntimeSmtp.Designer.cs +++ b/source/Tools/RuntimeSmtp.Designer.cs @@ -1,274 +1,274 @@ -namespace LSLEditor.Tools -{ - partial class RuntimeSmtp - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.radioButton6 = new System.Windows.Forms.RadioButton(); - this.radioButton5 = new System.Windows.Forms.RadioButton(); - this.radioButton4 = new System.Windows.Forms.RadioButton(); - this.label12 = new System.Windows.Forms.Label(); - this.radioButton3 = new System.Windows.Forms.RadioButton(); - this.radioButton2 = new System.Windows.Forms.RadioButton(); - this.radioButton1 = new System.Windows.Forms.RadioButton(); - this.label11 = new System.Windows.Forms.Label(); - this.label9 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.SmtpPassword = new System.Windows.Forms.TextBox(); - this.EmailAddress = new System.Windows.Forms.TextBox(); - this.label10 = new System.Windows.Forms.Label(); - this.SmtpUserid = new System.Windows.Forms.TextBox(); - this.EmailServer = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.groupBox2.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.SuspendLayout(); - // - // groupBox2 - // - this.groupBox2.Controls.Add(this.label4); - this.groupBox2.Controls.Add(this.EmailAddress); - this.groupBox2.Controls.Add(this.EmailServer); - this.groupBox2.Controls.Add(this.label2); - this.groupBox2.Location = new System.Drawing.Point(0, 0); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(392, 80); - this.groupBox2.TabIndex = 7; - this.groupBox2.TabStop = false; - this.groupBox2.Text = "Email"; - // - // radioButton6 - // - this.radioButton6.AutoSize = true; - this.radioButton6.Enabled = false; - this.radioButton6.Location = new System.Drawing.Point(256, 96); - this.radioButton6.Name = "radioButton6"; - this.radioButton6.Size = new System.Drawing.Size(80, 17); - this.radioButton6.TabIndex = 19; - this.radioButton6.Text = "Anonymous"; - this.radioButton6.UseVisualStyleBackColor = true; - // - // radioButton5 - // - this.radioButton5.AutoSize = true; - this.radioButton5.Enabled = false; - this.radioButton5.Location = new System.Drawing.Point(192, 96); - this.radioButton5.Name = "radioButton5"; - this.radioButton5.Size = new System.Drawing.Size(63, 17); - this.radioButton5.TabIndex = 18; - this.radioButton5.Text = "External"; - this.radioButton5.UseVisualStyleBackColor = true; - // - // radioButton4 - // - this.radioButton4.AutoSize = true; - this.radioButton4.Enabled = false; - this.radioButton4.Location = new System.Drawing.Point(192, 120); - this.radioButton4.Name = "radioButton4"; - this.radioButton4.Size = new System.Drawing.Size(91, 17); - this.radioButton4.TabIndex = 17; - this.radioButton4.Text = "DIGEST-MD5"; - this.radioButton4.UseVisualStyleBackColor = true; - // - // label12 - // - this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(24, 96); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(52, 13); - this.label12.TabIndex = 16; - this.label12.Text = "Auth type"; - // - // radioButton3 - // - this.radioButton3.AutoSize = true; - this.radioButton3.Enabled = false; - this.radioButton3.Location = new System.Drawing.Point(96, 120); - this.radioButton3.Name = "radioButton3"; - this.radioButton3.Size = new System.Drawing.Size(82, 17); - this.radioButton3.TabIndex = 15; - this.radioButton3.Text = "CRAM-MD5"; - this.radioButton3.UseVisualStyleBackColor = true; - // - // radioButton2 - // - this.radioButton2.AutoSize = true; - this.radioButton2.Location = new System.Drawing.Point(144, 96); - this.radioButton2.Name = "radioButton2"; - this.radioButton2.Size = new System.Drawing.Size(51, 17); - this.radioButton2.TabIndex = 14; - this.radioButton2.Text = "Login"; - this.radioButton2.UseVisualStyleBackColor = true; - // - // radioButton1 - // - this.radioButton1.AutoSize = true; - this.radioButton1.Checked = true; - this.radioButton1.Location = new System.Drawing.Point(96, 96); - this.radioButton1.Name = "radioButton1"; - this.radioButton1.Size = new System.Drawing.Size(48, 17); - this.radioButton1.TabIndex = 13; - this.radioButton1.TabStop = true; - this.radioButton1.Text = "Plain"; - this.radioButton1.UseVisualStyleBackColor = true; - // - // label11 - // - this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(24, 24); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(158, 13); - this.label11.TabIndex = 12; - this.label11.Text = "leave blank for normal operation"; - // - // label9 - // - this.label9.AutoSize = true; - this.label9.Location = new System.Drawing.Point(24, 72); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(53, 13); - this.label9.TabIndex = 11; - this.label9.Text = "Password"; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(8, 40); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(72, 13); - this.label4.TabIndex = 4; - this.label4.Text = "Email address"; - // - // SmtpPassword - // - this.SmtpPassword.Location = new System.Drawing.Point(104, 72); - this.SmtpPassword.Name = "SmtpPassword"; - this.SmtpPassword.PasswordChar = '*'; - this.SmtpPassword.Size = new System.Drawing.Size(152, 20); - this.SmtpPassword.TabIndex = 10; - // - // EmailAddress - // - this.EmailAddress.Location = new System.Drawing.Point(88, 40); - this.EmailAddress.Name = "EmailAddress"; - this.EmailAddress.Size = new System.Drawing.Size(208, 20); - this.EmailAddress.TabIndex = 3; - // - // label10 - // - this.label10.AutoSize = true; - this.label10.Location = new System.Drawing.Point(24, 48); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(37, 13); - this.label10.TabIndex = 9; - this.label10.Text = "Userid"; - // - // SmtpUserid - // - this.SmtpUserid.Location = new System.Drawing.Point(104, 48); - this.SmtpUserid.Name = "SmtpUserid"; - this.SmtpUserid.Size = new System.Drawing.Size(152, 20); - this.SmtpUserid.TabIndex = 8; - // - // EmailServer - // - this.EmailServer.Location = new System.Drawing.Point(88, 16); - this.EmailServer.Name = "EmailServer"; - this.EmailServer.Size = new System.Drawing.Size(208, 20); - this.EmailServer.TabIndex = 2; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(8, 16); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(69, 13); - this.label2.TabIndex = 0; - this.label2.Text = "SMTP server"; - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.label11); - this.groupBox1.Controls.Add(this.radioButton6); - this.groupBox1.Controls.Add(this.radioButton1); - this.groupBox1.Controls.Add(this.label9); - this.groupBox1.Controls.Add(this.radioButton5); - this.groupBox1.Controls.Add(this.radioButton2); - this.groupBox1.Controls.Add(this.SmtpPassword); - this.groupBox1.Controls.Add(this.radioButton4); - this.groupBox1.Controls.Add(this.radioButton3); - this.groupBox1.Controls.Add(this.SmtpUserid); - this.groupBox1.Controls.Add(this.label10); - this.groupBox1.Controls.Add(this.label12); - this.groupBox1.Location = new System.Drawing.Point(0, 88); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(392, 152); - this.groupBox1.TabIndex = 20; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "SMTP Authentication"; - // - // RuntimeInternal - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.groupBox2); - this.Name = "RuntimeInternal"; - this.Size = new System.Drawing.Size(392, 272); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.TextBox EmailAddress; - private System.Windows.Forms.TextBox EmailServer; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.RadioButton radioButton6; - private System.Windows.Forms.RadioButton radioButton5; - private System.Windows.Forms.RadioButton radioButton4; - private System.Windows.Forms.Label label12; - private System.Windows.Forms.RadioButton radioButton3; - private System.Windows.Forms.RadioButton radioButton2; - private System.Windows.Forms.RadioButton radioButton1; - private System.Windows.Forms.Label label11; - private System.Windows.Forms.Label label9; - private System.Windows.Forms.TextBox SmtpPassword; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.TextBox SmtpUserid; - private System.Windows.Forms.GroupBox groupBox1; - - } -} +namespace LSLEditor.Tools +{ + partial class RuntimeSmtp + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.radioButton6 = new System.Windows.Forms.RadioButton(); + this.radioButton5 = new System.Windows.Forms.RadioButton(); + this.radioButton4 = new System.Windows.Forms.RadioButton(); + this.label12 = new System.Windows.Forms.Label(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.label11 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.SmtpPassword = new System.Windows.Forms.TextBox(); + this.EmailAddress = new System.Windows.Forms.TextBox(); + this.label10 = new System.Windows.Forms.Label(); + this.SmtpUserid = new System.Windows.Forms.TextBox(); + this.EmailServer = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.groupBox2.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.label4); + this.groupBox2.Controls.Add(this.EmailAddress); + this.groupBox2.Controls.Add(this.EmailServer); + this.groupBox2.Controls.Add(this.label2); + this.groupBox2.Location = new System.Drawing.Point(0, 0); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(392, 80); + this.groupBox2.TabIndex = 7; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Email"; + // + // radioButton6 + // + this.radioButton6.AutoSize = true; + this.radioButton6.Enabled = false; + this.radioButton6.Location = new System.Drawing.Point(256, 96); + this.radioButton6.Name = "radioButton6"; + this.radioButton6.Size = new System.Drawing.Size(80, 17); + this.radioButton6.TabIndex = 19; + this.radioButton6.Text = "Anonymous"; + this.radioButton6.UseVisualStyleBackColor = true; + // + // radioButton5 + // + this.radioButton5.AutoSize = true; + this.radioButton5.Enabled = false; + this.radioButton5.Location = new System.Drawing.Point(192, 96); + this.radioButton5.Name = "radioButton5"; + this.radioButton5.Size = new System.Drawing.Size(63, 17); + this.radioButton5.TabIndex = 18; + this.radioButton5.Text = "External"; + this.radioButton5.UseVisualStyleBackColor = true; + // + // radioButton4 + // + this.radioButton4.AutoSize = true; + this.radioButton4.Enabled = false; + this.radioButton4.Location = new System.Drawing.Point(192, 120); + this.radioButton4.Name = "radioButton4"; + this.radioButton4.Size = new System.Drawing.Size(91, 17); + this.radioButton4.TabIndex = 17; + this.radioButton4.Text = "DIGEST-MD5"; + this.radioButton4.UseVisualStyleBackColor = true; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(24, 96); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(52, 13); + this.label12.TabIndex = 16; + this.label12.Text = "Auth type"; + // + // radioButton3 + // + this.radioButton3.AutoSize = true; + this.radioButton3.Enabled = false; + this.radioButton3.Location = new System.Drawing.Point(96, 120); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(82, 17); + this.radioButton3.TabIndex = 15; + this.radioButton3.Text = "CRAM-MD5"; + this.radioButton3.UseVisualStyleBackColor = true; + // + // radioButton2 + // + this.radioButton2.AutoSize = true; + this.radioButton2.Location = new System.Drawing.Point(144, 96); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(51, 17); + this.radioButton2.TabIndex = 14; + this.radioButton2.Text = "Login"; + this.radioButton2.UseVisualStyleBackColor = true; + // + // radioButton1 + // + this.radioButton1.AutoSize = true; + this.radioButton1.Checked = true; + this.radioButton1.Location = new System.Drawing.Point(96, 96); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(48, 17); + this.radioButton1.TabIndex = 13; + this.radioButton1.TabStop = true; + this.radioButton1.Text = "Plain"; + this.radioButton1.UseVisualStyleBackColor = true; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(24, 24); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(158, 13); + this.label11.TabIndex = 12; + this.label11.Text = "leave blank for normal operation"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(24, 72); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(53, 13); + this.label9.TabIndex = 11; + this.label9.Text = "Password"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(8, 40); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(72, 13); + this.label4.TabIndex = 4; + this.label4.Text = "Email address"; + // + // SmtpPassword + // + this.SmtpPassword.Location = new System.Drawing.Point(104, 72); + this.SmtpPassword.Name = "SmtpPassword"; + this.SmtpPassword.PasswordChar = '*'; + this.SmtpPassword.Size = new System.Drawing.Size(152, 20); + this.SmtpPassword.TabIndex = 10; + // + // EmailAddress + // + this.EmailAddress.Location = new System.Drawing.Point(88, 40); + this.EmailAddress.Name = "EmailAddress"; + this.EmailAddress.Size = new System.Drawing.Size(208, 20); + this.EmailAddress.TabIndex = 3; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(24, 48); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(37, 13); + this.label10.TabIndex = 9; + this.label10.Text = "Userid"; + // + // SmtpUserid + // + this.SmtpUserid.Location = new System.Drawing.Point(104, 48); + this.SmtpUserid.Name = "SmtpUserid"; + this.SmtpUserid.Size = new System.Drawing.Size(152, 20); + this.SmtpUserid.TabIndex = 8; + // + // EmailServer + // + this.EmailServer.Location = new System.Drawing.Point(88, 16); + this.EmailServer.Name = "EmailServer"; + this.EmailServer.Size = new System.Drawing.Size(208, 20); + this.EmailServer.TabIndex = 2; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(8, 16); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(69, 13); + this.label2.TabIndex = 0; + this.label2.Text = "SMTP server"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.label11); + this.groupBox1.Controls.Add(this.radioButton6); + this.groupBox1.Controls.Add(this.radioButton1); + this.groupBox1.Controls.Add(this.label9); + this.groupBox1.Controls.Add(this.radioButton5); + this.groupBox1.Controls.Add(this.radioButton2); + this.groupBox1.Controls.Add(this.SmtpPassword); + this.groupBox1.Controls.Add(this.radioButton4); + this.groupBox1.Controls.Add(this.radioButton3); + this.groupBox1.Controls.Add(this.SmtpUserid); + this.groupBox1.Controls.Add(this.label10); + this.groupBox1.Controls.Add(this.label12); + this.groupBox1.Location = new System.Drawing.Point(0, 88); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(392, 152); + this.groupBox1.TabIndex = 20; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "SMTP Authentication"; + // + // RuntimeInternal + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.groupBox2); + this.Name = "RuntimeInternal"; + this.Size = new System.Drawing.Size(392, 272); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox EmailAddress; + private System.Windows.Forms.TextBox EmailServer; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.RadioButton radioButton6; + private System.Windows.Forms.RadioButton radioButton5; + private System.Windows.Forms.RadioButton radioButton4; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.RadioButton radioButton3; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.RadioButton radioButton1; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.TextBox SmtpPassword; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox SmtpUserid; + private System.Windows.Forms.GroupBox groupBox1; + + } +} diff --git a/trunk/Tools/RuntimeSmtp.cs b/source/Tools/RuntimeSmtp.cs similarity index 97% rename from trunk/Tools/RuntimeSmtp.cs rename to source/Tools/RuntimeSmtp.cs index 7bfb3a5..b8ac929 100644 --- a/trunk/Tools/RuntimeSmtp.cs +++ b/source/Tools/RuntimeSmtp.cs @@ -1,109 +1,109 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace LSLEditor.Tools -{ - public partial class RuntimeSmtp : UserControl, ICommit - { - public RuntimeSmtp() - { - InitializeComponent(); - - this.EmailServer.Text = Properties.Settings.Default.EmailServer; - this.EmailAddress.Text = Properties.Settings.Default.EmailAddress; - - this.SmtpUserid.Text = Properties.Settings.Default.SmtpUserid; - this.SmtpPassword.Text = Properties.Settings.Default.SmtpPassword; - - switch (Properties.Settings.Default.SmtpAuth) - { - case "PLAIN": - this.radioButton1.Checked = true; - break; - case "LOGIN": - this.radioButton2.Checked = true; - break; - case "CRAM-MD5": - this.radioButton3.Checked = true; - break; - case "DIGEST-MD5": - this.radioButton4.Checked = true; - break; - case "EXTERNAL": - this.radioButton5.Checked = true; - break; - case "ANONYMOUS": - this.radioButton6.Checked = true; - break; - default: - break; - } - } - - public void Commit() - { - Properties.Settings.Default.EmailServer = this.EmailServer.Text; - Properties.Settings.Default.EmailAddress = this.EmailAddress.Text; - - Properties.Settings.Default.SmtpUserid = this.SmtpUserid.Text; - Properties.Settings.Default.SmtpPassword = this.SmtpPassword.Text; - - if (this.radioButton1.Checked) - Properties.Settings.Default.SmtpAuth = "PLAIN"; - if (this.radioButton2.Checked) - Properties.Settings.Default.SmtpAuth = "LOGIN"; - if (this.radioButton3.Checked) - Properties.Settings.Default.SmtpAuth = "CRAM-MD5"; - if (this.radioButton4.Checked) - Properties.Settings.Default.SmtpAuth = "DIGEST-MD5"; - if (this.radioButton5.Checked) - Properties.Settings.Default.SmtpAuth = "EXTERNAL"; - if (this.radioButton6.Checked) - Properties.Settings.Default.SmtpAuth = "ANONYMOUS"; - - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace LSLEditor.Tools +{ + public partial class RuntimeSmtp : UserControl, ICommit + { + public RuntimeSmtp() + { + InitializeComponent(); + + this.EmailServer.Text = Properties.Settings.Default.EmailServer; + this.EmailAddress.Text = Properties.Settings.Default.EmailAddress; + + this.SmtpUserid.Text = Properties.Settings.Default.SmtpUserid; + this.SmtpPassword.Text = Properties.Settings.Default.SmtpPassword; + + switch (Properties.Settings.Default.SmtpAuth) + { + case "PLAIN": + this.radioButton1.Checked = true; + break; + case "LOGIN": + this.radioButton2.Checked = true; + break; + case "CRAM-MD5": + this.radioButton3.Checked = true; + break; + case "DIGEST-MD5": + this.radioButton4.Checked = true; + break; + case "EXTERNAL": + this.radioButton5.Checked = true; + break; + case "ANONYMOUS": + this.radioButton6.Checked = true; + break; + default: + break; + } + } + + public void Commit() + { + Properties.Settings.Default.EmailServer = this.EmailServer.Text; + Properties.Settings.Default.EmailAddress = this.EmailAddress.Text; + + Properties.Settings.Default.SmtpUserid = this.SmtpUserid.Text; + Properties.Settings.Default.SmtpPassword = this.SmtpPassword.Text; + + if (this.radioButton1.Checked) + Properties.Settings.Default.SmtpAuth = "PLAIN"; + if (this.radioButton2.Checked) + Properties.Settings.Default.SmtpAuth = "LOGIN"; + if (this.radioButton3.Checked) + Properties.Settings.Default.SmtpAuth = "CRAM-MD5"; + if (this.radioButton4.Checked) + Properties.Settings.Default.SmtpAuth = "DIGEST-MD5"; + if (this.radioButton5.Checked) + Properties.Settings.Default.SmtpAuth = "EXTERNAL"; + if (this.radioButton6.Checked) + Properties.Settings.Default.SmtpAuth = "ANONYMOUS"; + + } + } +} diff --git a/trunk/Tools/RuntimeSmtp.resx b/source/Tools/RuntimeSmtp.resx similarity index 97% rename from trunk/Tools/RuntimeSmtp.resx rename to source/Tools/RuntimeSmtp.resx index ff31a6d..19dc0dd 100644 --- a/trunk/Tools/RuntimeSmtp.resx +++ b/source/Tools/RuntimeSmtp.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/trunk/Tools/TextEditorCodeCompletion.Designer.cs b/source/Tools/TextEditorCodeCompletion.Designer.cs similarity index 97% rename from trunk/Tools/TextEditorCodeCompletion.Designer.cs rename to source/Tools/TextEditorCodeCompletion.Designer.cs index 9b027b3..08038cc 100644 --- a/trunk/Tools/TextEditorCodeCompletion.Designer.cs +++ b/source/Tools/TextEditorCodeCompletion.Designer.cs @@ -1,113 +1,113 @@ -namespace LSLEditor.Tools -{ - partial class TextEditorCodeCompletion - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.groupBox4 = new System.Windows.Forms.GroupBox(); - this.checkBox3 = new System.Windows.Forms.CheckBox(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.checkBox2 = new System.Windows.Forms.CheckBox(); - this.checkBox4 = new System.Windows.Forms.CheckBox(); - this.groupBox4.SuspendLayout(); - this.SuspendLayout(); - // - // groupBox4 - // - this.groupBox4.Controls.Add(this.checkBox4); - this.groupBox4.Controls.Add(this.checkBox3); - this.groupBox4.Controls.Add(this.checkBox1); - this.groupBox4.Controls.Add(this.checkBox2); - this.groupBox4.Location = new System.Drawing.Point(0, 0); - this.groupBox4.Name = "groupBox4"; - this.groupBox4.Size = new System.Drawing.Size(392, 160); - this.groupBox4.TabIndex = 7; - this.groupBox4.TabStop = false; - this.groupBox4.Text = "code completion"; - // - // checkBox3 - // - this.checkBox3.AutoSize = true; - this.checkBox3.Location = new System.Drawing.Point(16, 88); - this.checkBox3.Name = "checkBox3"; - this.checkBox3.Size = new System.Drawing.Size(273, 17); - this.checkBox3.TabIndex = 4; - this.checkBox3.Text = "use autocomplete on function arguments (if possible)"; - this.checkBox3.UseVisualStyleBackColor = true; - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.checkBox1.Location = new System.Drawing.Point(16, 24); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(208, 17); - this.checkBox1.TabIndex = 1; - this.checkBox1.Text = "use autocomplete on known keywords"; - this.checkBox1.UseVisualStyleBackColor = true; - // - // checkBox2 - // - this.checkBox2.AutoSize = true; - this.checkBox2.Location = new System.Drawing.Point(16, 56); - this.checkBox2.Name = "checkBox2"; - this.checkBox2.Size = new System.Drawing.Size(328, 17); - this.checkBox2.TabIndex = 3; - this.checkBox2.Text = "use autocomplete on user defined variable names (experimental)"; - this.checkBox2.UseVisualStyleBackColor = true; - // - // checkBox4 - // - this.checkBox4.AutoSize = true; - this.checkBox4.Location = new System.Drawing.Point(16, 120); - this.checkBox4.Name = "checkBox4"; - this.checkBox4.Size = new System.Drawing.Size(206, 17); - this.checkBox4.TabIndex = 5; - this.checkBox4.Text = "use autocomplete on animation strings"; - this.checkBox4.UseVisualStyleBackColor = true; - // - // TextEditorCodeCompletion - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBox4); - this.Name = "TextEditorCodeCompletion"; - this.Size = new System.Drawing.Size(392, 272); - this.groupBox4.ResumeLayout(false); - this.groupBox4.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox4; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.CheckBox checkBox2; - private System.Windows.Forms.CheckBox checkBox3; - private System.Windows.Forms.CheckBox checkBox4; - } -} +namespace LSLEditor.Tools +{ + partial class TextEditorCodeCompletion + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.checkBox3 = new System.Windows.Forms.CheckBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.checkBox4 = new System.Windows.Forms.CheckBox(); + this.groupBox4.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox4 + // + this.groupBox4.Controls.Add(this.checkBox4); + this.groupBox4.Controls.Add(this.checkBox3); + this.groupBox4.Controls.Add(this.checkBox1); + this.groupBox4.Controls.Add(this.checkBox2); + this.groupBox4.Location = new System.Drawing.Point(0, 0); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(392, 160); + this.groupBox4.TabIndex = 7; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "code completion"; + // + // checkBox3 + // + this.checkBox3.AutoSize = true; + this.checkBox3.Location = new System.Drawing.Point(16, 88); + this.checkBox3.Name = "checkBox3"; + this.checkBox3.Size = new System.Drawing.Size(273, 17); + this.checkBox3.TabIndex = 4; + this.checkBox3.Text = "use autocomplete on function arguments (if possible)"; + this.checkBox3.UseVisualStyleBackColor = true; + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Location = new System.Drawing.Point(16, 24); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(208, 17); + this.checkBox1.TabIndex = 1; + this.checkBox1.Text = "use autocomplete on known keywords"; + this.checkBox1.UseVisualStyleBackColor = true; + // + // checkBox2 + // + this.checkBox2.AutoSize = true; + this.checkBox2.Location = new System.Drawing.Point(16, 56); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.Size = new System.Drawing.Size(328, 17); + this.checkBox2.TabIndex = 3; + this.checkBox2.Text = "use autocomplete on user defined variable names (experimental)"; + this.checkBox2.UseVisualStyleBackColor = true; + // + // checkBox4 + // + this.checkBox4.AutoSize = true; + this.checkBox4.Location = new System.Drawing.Point(16, 120); + this.checkBox4.Name = "checkBox4"; + this.checkBox4.Size = new System.Drawing.Size(206, 17); + this.checkBox4.TabIndex = 5; + this.checkBox4.Text = "use autocomplete on animation strings"; + this.checkBox4.UseVisualStyleBackColor = true; + // + // TextEditorCodeCompletion + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox4); + this.Name = "TextEditorCodeCompletion"; + this.Size = new System.Drawing.Size(392, 272); + this.groupBox4.ResumeLayout(false); + this.groupBox4.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.CheckBox checkBox2; + private System.Windows.Forms.CheckBox checkBox3; + private System.Windows.Forms.CheckBox checkBox4; + } +} diff --git a/trunk/Tools/TextEditorCodeCompletion.cs b/source/Tools/TextEditorCodeCompletion.cs similarity index 97% rename from trunk/Tools/TextEditorCodeCompletion.cs rename to source/Tools/TextEditorCodeCompletion.cs index 4b94086..55cbc41 100644 --- a/trunk/Tools/TextEditorCodeCompletion.cs +++ b/source/Tools/TextEditorCodeCompletion.cs @@ -1,67 +1,67 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// TextEditorCodeCompletion.cs -// Code for getting/setting the Tool/Options/.../CodeCompletion dialogue options. -// - -using System.Diagnostics.CodeAnalysis; -using System.Windows.Forms; - -namespace LSLEditor.Tools -{ - public partial class TextEditorCodeCompletion : UserControl, ICommit - { - public TextEditorCodeCompletion() - { - InitializeComponent(); - - this.checkBox1.Checked = Properties.Settings.Default.CodeCompletion; - this.checkBox2.Checked = Properties.Settings.Default.CodeCompletionUserVar; - this.checkBox3.Checked = Properties.Settings.Default.CodeCompletionArguments; - this.checkBox4.Checked = Properties.Settings.Default.CodeCompletionAnimation; - } - - public void Commit() - { - Properties.Settings.Default.CodeCompletion = this.checkBox1.Checked; - Properties.Settings.Default.CodeCompletionUserVar = this.checkBox2.Checked; - Properties.Settings.Default.CodeCompletionArguments = this.checkBox3.Checked; - Properties.Settings.Default.CodeCompletionAnimation = this.checkBox4.Checked; - } - - - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// TextEditorCodeCompletion.cs +// Code for getting/setting the Tool/Options/.../CodeCompletion dialogue options. +// + +using System.Diagnostics.CodeAnalysis; +using System.Windows.Forms; + +namespace LSLEditor.Tools +{ + public partial class TextEditorCodeCompletion : UserControl, ICommit + { + public TextEditorCodeCompletion() + { + InitializeComponent(); + + this.checkBox1.Checked = Properties.Settings.Default.CodeCompletion; + this.checkBox2.Checked = Properties.Settings.Default.CodeCompletionUserVar; + this.checkBox3.Checked = Properties.Settings.Default.CodeCompletionArguments; + this.checkBox4.Checked = Properties.Settings.Default.CodeCompletionAnimation; + } + + public void Commit() + { + Properties.Settings.Default.CodeCompletion = this.checkBox1.Checked; + Properties.Settings.Default.CodeCompletionUserVar = this.checkBox2.Checked; + Properties.Settings.Default.CodeCompletionArguments = this.checkBox3.Checked; + Properties.Settings.Default.CodeCompletionAnimation = this.checkBox4.Checked; + } + + + } +} diff --git a/trunk/Tools/TextEditorCodeCompletion.resx b/source/Tools/TextEditorCodeCompletion.resx similarity index 97% rename from trunk/Tools/TextEditorCodeCompletion.resx rename to source/Tools/TextEditorCodeCompletion.resx index ff31a6d..19dc0dd 100644 --- a/trunk/Tools/TextEditorCodeCompletion.resx +++ b/source/Tools/TextEditorCodeCompletion.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/trunk/Tools/TextEditorFontColors.Designer.cs b/source/Tools/TextEditorFontColors.Designer.cs similarity index 97% rename from trunk/Tools/TextEditorFontColors.Designer.cs rename to source/Tools/TextEditorFontColors.Designer.cs index 6b13855..d3997f7 100644 --- a/trunk/Tools/TextEditorFontColors.Designer.cs +++ b/source/Tools/TextEditorFontColors.Designer.cs @@ -1,165 +1,165 @@ -namespace LSLEditor.Tools -{ - partial class TextEditorFontColors - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.groupBox5 = new System.Windows.Forms.GroupBox(); - this.label4 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.button3 = new System.Windows.Forms.Button(); - this.button4 = new System.Windows.Forms.Button(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.fontDialog1 = new System.Windows.Forms.FontDialog(); - this.groupBox5.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.SuspendLayout(); - // - // groupBox5 - // - this.groupBox5.Controls.Add(this.label4); - this.groupBox5.Controls.Add(this.label3); - this.groupBox5.Controls.Add(this.label2); - this.groupBox5.Controls.Add(this.label5); - this.groupBox5.Controls.Add(this.button3); - this.groupBox5.Controls.Add(this.button4); - this.groupBox5.Location = new System.Drawing.Point(0, 80); - this.groupBox5.Name = "groupBox5"; - this.groupBox5.Size = new System.Drawing.Size(392, 80); - this.groupBox5.TabIndex = 12; - this.groupBox5.TabStop = false; - this.groupBox5.Text = "font settings"; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(64, 48); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(16, 13); - this.label4.TabIndex = 11; - this.label4.Text = "..."; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(64, 24); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(16, 13); - this.label3.TabIndex = 10; - this.label3.Text = "..."; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(16, 48); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(47, 13); - this.label2.TabIndex = 9; - this.label2.Text = "Tooltips:"; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(16, 24); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(37, 13); - this.label5.TabIndex = 8; - this.label5.Text = "Editor:"; - // - // button3 - // - this.button3.Location = new System.Drawing.Point(304, 16); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(75, 23); - this.button3.TabIndex = 6; - this.button3.Text = "Change..."; - this.button3.UseVisualStyleBackColor = true; - this.button3.Click += new System.EventHandler(this.button3_Click); - // - // button4 - // - this.button4.Location = new System.Drawing.Point(304, 48); - this.button4.Name = "button4"; - this.button4.Size = new System.Drawing.Size(75, 23); - this.button4.TabIndex = 7; - this.button4.Text = "Change..."; - this.button4.UseVisualStyleBackColor = true; - this.button4.Click += new System.EventHandler(this.button4_Click); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.checkBox1); - this.groupBox1.Location = new System.Drawing.Point(0, 0); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(392, 72); - this.groupBox1.TabIndex = 11; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "colors"; - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.checkBox1.Location = new System.Drawing.Point(16, 24); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(145, 17); - this.checkBox1.TabIndex = 0; - this.checkBox1.Text = "use original color scheme"; - this.checkBox1.UseVisualStyleBackColor = true; - // - // TextEditorFontColors - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBox5); - this.Controls.Add(this.groupBox1); - this.Name = "TextEditorFontColors"; - this.Size = new System.Drawing.Size(392, 272); - this.groupBox5.ResumeLayout(false); - this.groupBox5.PerformLayout(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox5; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Button button3; - private System.Windows.Forms.Button button4; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.FontDialog fontDialog1; - } -} +namespace LSLEditor.Tools +{ + partial class TextEditorFontColors + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.button3 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.fontDialog1 = new System.Windows.Forms.FontDialog(); + this.groupBox5.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox5 + // + this.groupBox5.Controls.Add(this.label4); + this.groupBox5.Controls.Add(this.label3); + this.groupBox5.Controls.Add(this.label2); + this.groupBox5.Controls.Add(this.label5); + this.groupBox5.Controls.Add(this.button3); + this.groupBox5.Controls.Add(this.button4); + this.groupBox5.Location = new System.Drawing.Point(0, 80); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(392, 80); + this.groupBox5.TabIndex = 12; + this.groupBox5.TabStop = false; + this.groupBox5.Text = "font settings"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(64, 48); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(16, 13); + this.label4.TabIndex = 11; + this.label4.Text = "..."; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(64, 24); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(16, 13); + this.label3.TabIndex = 10; + this.label3.Text = "..."; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(16, 48); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(47, 13); + this.label2.TabIndex = 9; + this.label2.Text = "Tooltips:"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(16, 24); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(37, 13); + this.label5.TabIndex = 8; + this.label5.Text = "Editor:"; + // + // button3 + // + this.button3.Location = new System.Drawing.Point(304, 16); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 23); + this.button3.TabIndex = 6; + this.button3.Text = "Change..."; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(304, 48); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(75, 23); + this.button4.TabIndex = 7; + this.button4.Text = "Change..."; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Location = new System.Drawing.Point(0, 0); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(392, 72); + this.groupBox1.TabIndex = 11; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "colors"; + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Location = new System.Drawing.Point(16, 24); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(145, 17); + this.checkBox1.TabIndex = 0; + this.checkBox1.Text = "use original color scheme"; + this.checkBox1.UseVisualStyleBackColor = true; + // + // TextEditorFontColors + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox5); + this.Controls.Add(this.groupBox1); + this.Name = "TextEditorFontColors"; + this.Size = new System.Drawing.Size(392, 272); + this.groupBox5.ResumeLayout(false); + this.groupBox5.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.FontDialog fontDialog1; + } +} diff --git a/trunk/Tools/TextEditorFontColors.cs b/source/Tools/TextEditorFontColors.cs similarity index 97% rename from trunk/Tools/TextEditorFontColors.cs rename to source/Tools/TextEditorFontColors.cs index d5774db..a2f31b1 100644 --- a/trunk/Tools/TextEditorFontColors.cs +++ b/source/Tools/TextEditorFontColors.cs @@ -1,121 +1,121 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace LSLEditor.Tools -{ - public partial class TextEditorFontColors : UserControl, ICommit - { - private Font fontEditor; - private Font fontTooltips; - - public TextEditorFontColors() - { - InitializeComponent(); - - this.checkBox1.Checked = Properties.Settings.Default.SLColorScheme; - - fontEditor = Properties.Settings.Default.FontEditor; - fontTooltips = Properties.Settings.Default.FontTooltips; - - ShowFonts(); - } - - private void ShowFonts() - { - this.label3.Text = string.Format("{0} / {1} / {2}", - fontEditor.Name, - fontEditor.Size, - fontEditor.Style); - - this.label4.Text = string.Format("{0} / {1} / {2}", - fontTooltips.Name, - fontTooltips.Size, - fontTooltips.Style); - } - - private void button3_Click(object sender, EventArgs e) - { - this.fontDialog1.FixedPitchOnly = true; - this.fontDialog1.ShowEffects = false; - this.fontDialog1.AllowScriptChange = false; - this.fontDialog1.Font = Properties.Settings.Default.FontEditor; - try - { - if (this.fontDialog1.ShowDialog(this) == DialogResult.OK) - { - fontEditor = this.fontDialog1.Font; - ShowFonts(); - } - } - catch - { - } - } - - private void button4_Click(object sender, EventArgs e) - { - this.fontDialog1.FixedPitchOnly = false; - this.fontDialog1.ShowEffects = false; - this.fontDialog1.AllowScriptChange = false; - this.fontDialog1.Font = Properties.Settings.Default.FontTooltips; - if (this.fontDialog1.ShowDialog(this) == DialogResult.OK) - { - fontTooltips = this.fontDialog1.Font; - ShowFonts(); - } - } - - public void Commit() - { - Properties.Settings.Default.SLColorScheme = this.checkBox1.Checked; - - Properties.Settings.Default.FontEditor = fontEditor; - Properties.Settings.Default.FontTooltips = fontTooltips; - } - - - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace LSLEditor.Tools +{ + public partial class TextEditorFontColors : UserControl, ICommit + { + private Font fontEditor; + private Font fontTooltips; + + public TextEditorFontColors() + { + InitializeComponent(); + + this.checkBox1.Checked = Properties.Settings.Default.SLColorScheme; + + fontEditor = Properties.Settings.Default.FontEditor; + fontTooltips = Properties.Settings.Default.FontTooltips; + + ShowFonts(); + } + + private void ShowFonts() + { + this.label3.Text = string.Format("{0} / {1} / {2}", + fontEditor.Name, + fontEditor.Size, + fontEditor.Style); + + this.label4.Text = string.Format("{0} / {1} / {2}", + fontTooltips.Name, + fontTooltips.Size, + fontTooltips.Style); + } + + private void button3_Click(object sender, EventArgs e) + { + this.fontDialog1.FixedPitchOnly = true; + this.fontDialog1.ShowEffects = false; + this.fontDialog1.AllowScriptChange = false; + this.fontDialog1.Font = Properties.Settings.Default.FontEditor; + try + { + if (this.fontDialog1.ShowDialog(this) == DialogResult.OK) + { + fontEditor = this.fontDialog1.Font; + ShowFonts(); + } + } + catch + { + } + } + + private void button4_Click(object sender, EventArgs e) + { + this.fontDialog1.FixedPitchOnly = false; + this.fontDialog1.ShowEffects = false; + this.fontDialog1.AllowScriptChange = false; + this.fontDialog1.Font = Properties.Settings.Default.FontTooltips; + if (this.fontDialog1.ShowDialog(this) == DialogResult.OK) + { + fontTooltips = this.fontDialog1.Font; + ShowFonts(); + } + } + + public void Commit() + { + Properties.Settings.Default.SLColorScheme = this.checkBox1.Checked; + + Properties.Settings.Default.FontEditor = fontEditor; + Properties.Settings.Default.FontTooltips = fontTooltips; + } + + + } +} diff --git a/trunk/Tools/TextEditorFontColors.resx b/source/Tools/TextEditorFontColors.resx similarity index 97% rename from trunk/Tools/TextEditorFontColors.resx rename to source/Tools/TextEditorFontColors.resx index 6cc62e6..58d4d50 100644 --- a/trunk/Tools/TextEditorFontColors.resx +++ b/source/Tools/TextEditorFontColors.resx @@ -1,123 +1,123 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + \ No newline at end of file diff --git a/trunk/Tools/TextEditorGeneral.Designer.cs b/source/Tools/TextEditorGeneral.Designer.cs similarity index 97% rename from trunk/Tools/TextEditorGeneral.Designer.cs rename to source/Tools/TextEditorGeneral.Designer.cs index ed7a943..d94ad65 100644 --- a/trunk/Tools/TextEditorGeneral.Designer.cs +++ b/source/Tools/TextEditorGeneral.Designer.cs @@ -1,298 +1,298 @@ -namespace LSLEditor.Tools -{ - partial class TextEditorGeneral - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.groupBox4 = new System.Windows.Forms.GroupBox(); - this.checkBox5 = new System.Windows.Forms.CheckBox(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.radioButton4 = new System.Windows.Forms.RadioButton(); - this.radioButton3 = new System.Windows.Forms.RadioButton(); - this.groupBox3 = new System.Windows.Forms.GroupBox(); - this.checkBox2 = new System.Windows.Forms.CheckBox(); - this.radioButton2 = new System.Windows.Forms.RadioButton(); - this.radioButton1 = new System.Windows.Forms.RadioButton(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.checkBox3 = new System.Windows.Forms.CheckBox(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.checkBox4 = new System.Windows.Forms.CheckBox(); - this.groupBox5 = new System.Windows.Forms.GroupBox(); - this.radioButton8 = new System.Windows.Forms.RadioButton(); - this.radioButton7 = new System.Windows.Forms.RadioButton(); - this.radioButton6 = new System.Windows.Forms.RadioButton(); - this.radioButton5 = new System.Windows.Forms.RadioButton(); - this.groupBox4.SuspendLayout(); - this.groupBox3.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.groupBox5.SuspendLayout(); - this.SuspendLayout(); - // - // groupBox4 - // - this.groupBox4.Controls.Add(this.checkBox5); - this.groupBox4.Controls.Add(this.checkBox1); - this.groupBox4.Controls.Add(this.radioButton4); - this.groupBox4.Controls.Add(this.radioButton3); - this.groupBox4.Controls.Add(this.groupBox3); - this.groupBox4.Location = new System.Drawing.Point(0, 0); - this.groupBox4.Name = "groupBox4"; - this.groupBox4.Size = new System.Drawing.Size(392, 136); - this.groupBox4.TabIndex = 7; - this.groupBox4.TabStop = false; - this.groupBox4.Text = "indenting"; - // - // checkBox5 - // - this.checkBox5.AutoSize = true; - this.checkBox5.Location = new System.Drawing.Point(16, 96); - this.checkBox5.Name = "checkBox5"; - this.checkBox5.Size = new System.Drawing.Size(180, 17); - this.checkBox5.TabIndex = 8; - this.checkBox5.Text = "autocorrect indent on file loading"; - this.checkBox5.UseVisualStyleBackColor = true; - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.checkBox1.Location = new System.Drawing.Point(16, 64); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(191, 17); - this.checkBox1.TabIndex = 7; - this.checkBox1.Text = "warning on different indent scheme"; - this.checkBox1.UseVisualStyleBackColor = true; - // - // radioButton4 - // - this.radioButton4.AutoSize = true; - this.radioButton4.Location = new System.Drawing.Point(80, 24); - this.radioButton4.Name = "radioButton4"; - this.radioButton4.Size = new System.Drawing.Size(90, 17); - this.radioButton4.TabIndex = 6; - this.radioButton4.TabStop = true; - this.radioButton4.Text = "4 spaces (SL)"; - this.radioButton4.UseVisualStyleBackColor = true; - // - // radioButton3 - // - this.radioButton3.AutoSize = true; - this.radioButton3.Location = new System.Drawing.Point(16, 24); - this.radioButton3.Name = "radioButton3"; - this.radioButton3.Size = new System.Drawing.Size(49, 17); - this.radioButton3.TabIndex = 5; - this.radioButton3.TabStop = true; - this.radioButton3.Text = "Tabs"; - this.radioButton3.UseVisualStyleBackColor = true; - // - // groupBox3 - // - this.groupBox3.Controls.Add(this.checkBox2); - this.groupBox3.Controls.Add(this.radioButton2); - this.groupBox3.Controls.Add(this.radioButton1); - this.groupBox3.Location = new System.Drawing.Point(232, 16); - this.groupBox3.Name = "groupBox3"; - this.groupBox3.Size = new System.Drawing.Size(144, 100); - this.groupBox3.TabIndex = 4; - this.groupBox3.TabStop = false; - this.groupBox3.Text = "autoindent when typing"; - // - // checkBox2 - // - this.checkBox2.AutoSize = true; - this.checkBox2.Location = new System.Drawing.Point(8, 24); - this.checkBox2.Name = "checkBox2"; - this.checkBox2.Size = new System.Drawing.Size(110, 17); - this.checkBox2.TabIndex = 3; - this.checkBox2.Text = "use autoindenting"; - this.checkBox2.UseVisualStyleBackColor = true; - this.checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged); - // - // radioButton2 - // - this.radioButton2.AutoSize = true; - this.radioButton2.Location = new System.Drawing.Point(8, 72); - this.radioButton2.Name = "radioButton2"; - this.radioButton2.Size = new System.Drawing.Size(128, 17); - this.radioButton2.TabIndex = 0; - this.radioButton2.Text = "cursor placement only"; - this.radioButton2.UseVisualStyleBackColor = true; - // - // radioButton1 - // - this.radioButton1.AutoSize = true; - this.radioButton1.Location = new System.Drawing.Point(8, 48); - this.radioButton1.Name = "radioButton1"; - this.radioButton1.Size = new System.Drawing.Size(94, 17); - this.radioButton1.TabIndex = 1; - this.radioButton1.Text = "full auto indent"; - this.radioButton1.UseVisualStyleBackColor = true; - // - // groupBox2 - // - this.groupBox2.Controls.Add(this.checkBox3); - this.groupBox2.Location = new System.Drawing.Point(200, 144); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(192, 56); - this.groupBox2.TabIndex = 8; - this.groupBox2.TabStop = false; - this.groupBox2.Text = "default editor options"; - // - // checkBox3 - // - this.checkBox3.AutoSize = true; - this.checkBox3.Location = new System.Drawing.Point(16, 24); - this.checkBox3.Name = "checkBox3"; - this.checkBox3.Size = new System.Drawing.Size(156, 17); - this.checkBox3.TabIndex = 2; - this.checkBox3.Text = "Auto word selection (is bad)"; - this.checkBox3.UseVisualStyleBackColor = true; - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.checkBox4); - this.groupBox1.Location = new System.Drawing.Point(200, 216); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(192, 56); - this.groupBox1.TabIndex = 9; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "file extension association"; - // - // checkBox4 - // - this.checkBox4.AutoSize = true; - this.checkBox4.Location = new System.Drawing.Point(16, 24); - this.checkBox4.Name = "checkBox4"; - this.checkBox4.Size = new System.Drawing.Size(146, 17); - this.checkBox4.TabIndex = 0; - this.checkBox4.Text = "register .lsl with LSLEditor"; - this.checkBox4.UseVisualStyleBackColor = true; - // - // groupBox5 - // - this.groupBox5.Controls.Add(this.radioButton8); - this.groupBox5.Controls.Add(this.radioButton7); - this.groupBox5.Controls.Add(this.radioButton6); - this.groupBox5.Controls.Add(this.radioButton5); - this.groupBox5.Location = new System.Drawing.Point(0, 144); - this.groupBox5.Name = "groupBox5"; - this.groupBox5.Size = new System.Drawing.Size(184, 128); - this.groupBox5.TabIndex = 10; - this.groupBox5.TabStop = false; - this.groupBox5.Text = "output format"; - // - // radioButton8 - // - this.radioButton8.AutoSize = true; - this.radioButton8.Location = new System.Drawing.Point(16, 24); - this.radioButton8.Name = "radioButton8"; - this.radioButton8.Size = new System.Drawing.Size(55, 17); - this.radioButton8.TabIndex = 0; - this.radioButton8.TabStop = true; - this.radioButton8.Text = "UTF-8"; - this.radioButton8.UseVisualStyleBackColor = true; - // - // radioButton7 - // - this.radioButton7.AutoSize = true; - this.radioButton7.Location = new System.Drawing.Point(16, 96); - this.radioButton7.Name = "radioButton7"; - this.radioButton7.Size = new System.Drawing.Size(78, 17); - this.radioButton7.TabIndex = 3; - this.radioButton7.TabStop = true; - this.radioButton7.Text = "UTF-16 BE"; - this.radioButton7.UseVisualStyleBackColor = true; - // - // radioButton6 - // - this.radioButton6.AutoSize = true; - this.radioButton6.Location = new System.Drawing.Point(16, 72); - this.radioButton6.Name = "radioButton6"; - this.radioButton6.Size = new System.Drawing.Size(77, 17); - this.radioButton6.TabIndex = 2; - this.radioButton6.TabStop = true; - this.radioButton6.Text = "UTF-16 LE"; - this.radioButton6.UseVisualStyleBackColor = true; - // - // radioButton5 - // - this.radioButton5.AutoSize = true; - this.radioButton5.Enabled = false; - this.radioButton5.Location = new System.Drawing.Point(16, 49); - this.radioButton5.Name = "radioButton5"; - this.radioButton5.Size = new System.Drawing.Size(100, 17); - this.radioButton5.TabIndex = 1; - this.radioButton5.Text = "UTF-8 + B.O.M."; - this.radioButton5.UseVisualStyleBackColor = true; - this.radioButton5.Visible = false; - // - // TextEditorGeneral - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBox5); - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.groupBox2); - this.Controls.Add(this.groupBox4); - this.Name = "TextEditorGeneral"; - this.Size = new System.Drawing.Size(392, 272); - this.groupBox4.ResumeLayout(false); - this.groupBox4.PerformLayout(); - this.groupBox3.ResumeLayout(false); - this.groupBox3.PerformLayout(); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.groupBox5.ResumeLayout(false); - this.groupBox5.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox4; - private System.Windows.Forms.CheckBox checkBox2; - private System.Windows.Forms.RadioButton radioButton1; - private System.Windows.Forms.RadioButton radioButton2; - private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.CheckBox checkBox3; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.CheckBox checkBox4; - private System.Windows.Forms.CheckBox checkBox5; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.RadioButton radioButton4; - private System.Windows.Forms.RadioButton radioButton3; - private System.Windows.Forms.GroupBox groupBox3; - private System.Windows.Forms.GroupBox groupBox5; - private System.Windows.Forms.RadioButton radioButton8; - private System.Windows.Forms.RadioButton radioButton7; - private System.Windows.Forms.RadioButton radioButton6; - private System.Windows.Forms.RadioButton radioButton5; - } -} +namespace LSLEditor.Tools +{ + partial class TextEditorGeneral + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.checkBox5 = new System.Windows.Forms.CheckBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.radioButton4 = new System.Windows.Forms.RadioButton(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.checkBox3 = new System.Windows.Forms.CheckBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.checkBox4 = new System.Windows.Forms.CheckBox(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.radioButton8 = new System.Windows.Forms.RadioButton(); + this.radioButton7 = new System.Windows.Forms.RadioButton(); + this.radioButton6 = new System.Windows.Forms.RadioButton(); + this.radioButton5 = new System.Windows.Forms.RadioButton(); + this.groupBox4.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.groupBox5.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox4 + // + this.groupBox4.Controls.Add(this.checkBox5); + this.groupBox4.Controls.Add(this.checkBox1); + this.groupBox4.Controls.Add(this.radioButton4); + this.groupBox4.Controls.Add(this.radioButton3); + this.groupBox4.Controls.Add(this.groupBox3); + this.groupBox4.Location = new System.Drawing.Point(0, 0); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(392, 136); + this.groupBox4.TabIndex = 7; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "indenting"; + // + // checkBox5 + // + this.checkBox5.AutoSize = true; + this.checkBox5.Location = new System.Drawing.Point(16, 96); + this.checkBox5.Name = "checkBox5"; + this.checkBox5.Size = new System.Drawing.Size(180, 17); + this.checkBox5.TabIndex = 8; + this.checkBox5.Text = "autocorrect indent on file loading"; + this.checkBox5.UseVisualStyleBackColor = true; + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Location = new System.Drawing.Point(16, 64); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(191, 17); + this.checkBox1.TabIndex = 7; + this.checkBox1.Text = "warning on different indent scheme"; + this.checkBox1.UseVisualStyleBackColor = true; + // + // radioButton4 + // + this.radioButton4.AutoSize = true; + this.radioButton4.Location = new System.Drawing.Point(80, 24); + this.radioButton4.Name = "radioButton4"; + this.radioButton4.Size = new System.Drawing.Size(90, 17); + this.radioButton4.TabIndex = 6; + this.radioButton4.TabStop = true; + this.radioButton4.Text = "4 spaces (SL)"; + this.radioButton4.UseVisualStyleBackColor = true; + // + // radioButton3 + // + this.radioButton3.AutoSize = true; + this.radioButton3.Location = new System.Drawing.Point(16, 24); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(49, 17); + this.radioButton3.TabIndex = 5; + this.radioButton3.TabStop = true; + this.radioButton3.Text = "Tabs"; + this.radioButton3.UseVisualStyleBackColor = true; + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.checkBox2); + this.groupBox3.Controls.Add(this.radioButton2); + this.groupBox3.Controls.Add(this.radioButton1); + this.groupBox3.Location = new System.Drawing.Point(232, 16); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(144, 100); + this.groupBox3.TabIndex = 4; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "autoindent when typing"; + // + // checkBox2 + // + this.checkBox2.AutoSize = true; + this.checkBox2.Location = new System.Drawing.Point(8, 24); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.Size = new System.Drawing.Size(110, 17); + this.checkBox2.TabIndex = 3; + this.checkBox2.Text = "use autoindenting"; + this.checkBox2.UseVisualStyleBackColor = true; + this.checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged); + // + // radioButton2 + // + this.radioButton2.AutoSize = true; + this.radioButton2.Location = new System.Drawing.Point(8, 72); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(128, 17); + this.radioButton2.TabIndex = 0; + this.radioButton2.Text = "cursor placement only"; + this.radioButton2.UseVisualStyleBackColor = true; + // + // radioButton1 + // + this.radioButton1.AutoSize = true; + this.radioButton1.Location = new System.Drawing.Point(8, 48); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(94, 17); + this.radioButton1.TabIndex = 1; + this.radioButton1.Text = "full auto indent"; + this.radioButton1.UseVisualStyleBackColor = true; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.checkBox3); + this.groupBox2.Location = new System.Drawing.Point(200, 144); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(192, 56); + this.groupBox2.TabIndex = 8; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "default editor options"; + // + // checkBox3 + // + this.checkBox3.AutoSize = true; + this.checkBox3.Location = new System.Drawing.Point(16, 24); + this.checkBox3.Name = "checkBox3"; + this.checkBox3.Size = new System.Drawing.Size(156, 17); + this.checkBox3.TabIndex = 2; + this.checkBox3.Text = "Auto word selection (is bad)"; + this.checkBox3.UseVisualStyleBackColor = true; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.checkBox4); + this.groupBox1.Location = new System.Drawing.Point(200, 216); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(192, 56); + this.groupBox1.TabIndex = 9; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "file extension association"; + // + // checkBox4 + // + this.checkBox4.AutoSize = true; + this.checkBox4.Location = new System.Drawing.Point(16, 24); + this.checkBox4.Name = "checkBox4"; + this.checkBox4.Size = new System.Drawing.Size(146, 17); + this.checkBox4.TabIndex = 0; + this.checkBox4.Text = "register .lsl with LSLEditor"; + this.checkBox4.UseVisualStyleBackColor = true; + // + // groupBox5 + // + this.groupBox5.Controls.Add(this.radioButton8); + this.groupBox5.Controls.Add(this.radioButton7); + this.groupBox5.Controls.Add(this.radioButton6); + this.groupBox5.Controls.Add(this.radioButton5); + this.groupBox5.Location = new System.Drawing.Point(0, 144); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(184, 128); + this.groupBox5.TabIndex = 10; + this.groupBox5.TabStop = false; + this.groupBox5.Text = "output format"; + // + // radioButton8 + // + this.radioButton8.AutoSize = true; + this.radioButton8.Location = new System.Drawing.Point(16, 24); + this.radioButton8.Name = "radioButton8"; + this.radioButton8.Size = new System.Drawing.Size(55, 17); + this.radioButton8.TabIndex = 0; + this.radioButton8.TabStop = true; + this.radioButton8.Text = "UTF-8"; + this.radioButton8.UseVisualStyleBackColor = true; + // + // radioButton7 + // + this.radioButton7.AutoSize = true; + this.radioButton7.Location = new System.Drawing.Point(16, 96); + this.radioButton7.Name = "radioButton7"; + this.radioButton7.Size = new System.Drawing.Size(78, 17); + this.radioButton7.TabIndex = 3; + this.radioButton7.TabStop = true; + this.radioButton7.Text = "UTF-16 BE"; + this.radioButton7.UseVisualStyleBackColor = true; + // + // radioButton6 + // + this.radioButton6.AutoSize = true; + this.radioButton6.Location = new System.Drawing.Point(16, 72); + this.radioButton6.Name = "radioButton6"; + this.radioButton6.Size = new System.Drawing.Size(77, 17); + this.radioButton6.TabIndex = 2; + this.radioButton6.TabStop = true; + this.radioButton6.Text = "UTF-16 LE"; + this.radioButton6.UseVisualStyleBackColor = true; + // + // radioButton5 + // + this.radioButton5.AutoSize = true; + this.radioButton5.Enabled = false; + this.radioButton5.Location = new System.Drawing.Point(16, 49); + this.radioButton5.Name = "radioButton5"; + this.radioButton5.Size = new System.Drawing.Size(100, 17); + this.radioButton5.TabIndex = 1; + this.radioButton5.Text = "UTF-8 + B.O.M."; + this.radioButton5.UseVisualStyleBackColor = true; + this.radioButton5.Visible = false; + // + // TextEditorGeneral + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox5); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox4); + this.Name = "TextEditorGeneral"; + this.Size = new System.Drawing.Size(392, 272); + this.groupBox4.ResumeLayout(false); + this.groupBox4.PerformLayout(); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox5.ResumeLayout(false); + this.groupBox5.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.CheckBox checkBox2; + private System.Windows.Forms.RadioButton radioButton1; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.CheckBox checkBox3; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.CheckBox checkBox4; + private System.Windows.Forms.CheckBox checkBox5; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.RadioButton radioButton4; + private System.Windows.Forms.RadioButton radioButton3; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.GroupBox groupBox5; + private System.Windows.Forms.RadioButton radioButton8; + private System.Windows.Forms.RadioButton radioButton7; + private System.Windows.Forms.RadioButton radioButton6; + private System.Windows.Forms.RadioButton radioButton5; + } +} diff --git a/trunk/Tools/TextEditorGeneral.cs b/source/Tools/TextEditorGeneral.cs similarity index 97% rename from trunk/Tools/TextEditorGeneral.cs rename to source/Tools/TextEditorGeneral.cs index 8a72bec..9ca6874 100644 --- a/trunk/Tools/TextEditorGeneral.cs +++ b/source/Tools/TextEditorGeneral.cs @@ -1,133 +1,133 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Reflection; -using System.ComponentModel; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace LSLEditor.Tools -{ - public partial class TextEditorGeneral : UserControl, ICommit - { - public TextEditorGeneral() - { - InitializeComponent(); - - this.checkBox1.Checked = Properties.Settings.Default.IndentWarning; - - this.checkBox2.Checked = Properties.Settings.Default.Indent; - checkBox2_CheckedChanged(null, null); - - this.radioButton1.Checked = Properties.Settings.Default.IndentFullAuto; - this.radioButton2.Checked = Properties.Settings.Default.IndentCursorPlacement; - - this.radioButton3.Checked = !Properties.Settings.Default.SL4SpacesIndent; - this.radioButton4.Checked = Properties.Settings.Default.SL4SpacesIndent; - - this.checkBox3.Checked = Properties.Settings.Default.AutoWordSelection; - - this.checkBox4.Checked = Helpers.FileAssociator.IsAssociated(".lsl"); - - this.checkBox5.Checked = Properties.Settings.Default.IndentAutoCorrect; - - - switch(Properties.Settings.Default.OutputFormat) - { - case "Unicode": - this.radioButton6.Checked = true; - break; - case "BigEndianUnicode": - this.radioButton7.Checked = true; - break; - case "UTF8": - this.radioButton8.Checked = true; - break; - default: // ANSI - this.radioButton5.Checked = true; - break; - } - } - - public void Commit() - { - Properties.Settings.Default.IndentWarning = this.checkBox1.Checked; - Properties.Settings.Default.Indent = this.checkBox2.Checked; - Properties.Settings.Default.AutoWordSelection = this.checkBox3.Checked; - Properties.Settings.Default.SL4SpacesIndent = this.radioButton4.Checked; - Properties.Settings.Default.IndentAutoCorrect = this.checkBox5.Checked; - Properties.Settings.Default.IndentFullAuto = this.radioButton1.Checked; - Properties.Settings.Default.IndentCursorPlacement = this.radioButton2.Checked; - - if (this.radioButton5.Checked) - Properties.Settings.Default.OutputFormat = "ANSI"; - else if (this.radioButton6.Checked) - Properties.Settings.Default.OutputFormat = "Unicode"; - else if (this.radioButton7.Checked) - Properties.Settings.Default.OutputFormat = "BigEndianUnicode"; - else if (this.radioButton8.Checked) - Properties.Settings.Default.OutputFormat = "UTF8"; - - if (this.checkBox4.Checked) - { - if(! - Helpers.FileAssociator.Associate(".lsl", "LSLEditorScript", "SecondLife script file for LSLEditor", Assembly.GetExecutingAssembly().Location, 0)) - MessageBox.Show("File association can not be made (needs administrative access)", "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); - - } - else - { - if (Helpers.FileAssociator.IsAssociated(".lsl")) - { - if(!Helpers.FileAssociator.DeAssociate(".lsl", "LSLEditorScript")) - MessageBox.Show("File association can not be unmade (needs administrative access)", "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - } - - private void checkBox2_CheckedChanged(object sender, EventArgs e) - { - this.radioButton1.Enabled = this.checkBox2.Checked; - this.radioButton2.Enabled = this.checkBox2.Checked; - } - - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Reflection; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace LSLEditor.Tools +{ + public partial class TextEditorGeneral : UserControl, ICommit + { + public TextEditorGeneral() + { + InitializeComponent(); + + this.checkBox1.Checked = Properties.Settings.Default.IndentWarning; + + this.checkBox2.Checked = Properties.Settings.Default.Indent; + checkBox2_CheckedChanged(null, null); + + this.radioButton1.Checked = Properties.Settings.Default.IndentFullAuto; + this.radioButton2.Checked = Properties.Settings.Default.IndentCursorPlacement; + + this.radioButton3.Checked = !Properties.Settings.Default.SL4SpacesIndent; + this.radioButton4.Checked = Properties.Settings.Default.SL4SpacesIndent; + + this.checkBox3.Checked = Properties.Settings.Default.AutoWordSelection; + + this.checkBox4.Checked = Helpers.FileAssociator.IsAssociated(".lsl"); + + this.checkBox5.Checked = Properties.Settings.Default.IndentAutoCorrect; + + + switch(Properties.Settings.Default.OutputFormat) + { + case "Unicode": + this.radioButton6.Checked = true; + break; + case "BigEndianUnicode": + this.radioButton7.Checked = true; + break; + case "UTF8": + this.radioButton8.Checked = true; + break; + default: // ANSI + this.radioButton5.Checked = true; + break; + } + } + + public void Commit() + { + Properties.Settings.Default.IndentWarning = this.checkBox1.Checked; + Properties.Settings.Default.Indent = this.checkBox2.Checked; + Properties.Settings.Default.AutoWordSelection = this.checkBox3.Checked; + Properties.Settings.Default.SL4SpacesIndent = this.radioButton4.Checked; + Properties.Settings.Default.IndentAutoCorrect = this.checkBox5.Checked; + Properties.Settings.Default.IndentFullAuto = this.radioButton1.Checked; + Properties.Settings.Default.IndentCursorPlacement = this.radioButton2.Checked; + + if (this.radioButton5.Checked) + Properties.Settings.Default.OutputFormat = "ANSI"; + else if (this.radioButton6.Checked) + Properties.Settings.Default.OutputFormat = "Unicode"; + else if (this.radioButton7.Checked) + Properties.Settings.Default.OutputFormat = "BigEndianUnicode"; + else if (this.radioButton8.Checked) + Properties.Settings.Default.OutputFormat = "UTF8"; + + if (this.checkBox4.Checked) + { + if(! + Helpers.FileAssociator.Associate(".lsl", "LSLEditorScript", "SecondLife script file for LSLEditor", Assembly.GetExecutingAssembly().Location, 0)) + MessageBox.Show("File association can not be made (needs administrative access)", "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); + + } + else + { + if (Helpers.FileAssociator.IsAssociated(".lsl")) + { + if(!Helpers.FileAssociator.DeAssociate(".lsl", "LSLEditorScript")) + MessageBox.Show("File association can not be unmade (needs administrative access)", "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + private void checkBox2_CheckedChanged(object sender, EventArgs e) + { + this.radioButton1.Enabled = this.checkBox2.Checked; + this.radioButton2.Enabled = this.checkBox2.Checked; + } + + } +} diff --git a/trunk/Tools/TextEditorGeneral.resx b/source/Tools/TextEditorGeneral.resx similarity index 97% rename from trunk/Tools/TextEditorGeneral.resx rename to source/Tools/TextEditorGeneral.resx index ff31a6d..19dc0dd 100644 --- a/trunk/Tools/TextEditorGeneral.resx +++ b/source/Tools/TextEditorGeneral.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/trunk/Tools/ToolsOptions.Designer.cs b/source/Tools/ToolsOptions.Designer.cs similarity index 97% rename from trunk/Tools/ToolsOptions.Designer.cs rename to source/Tools/ToolsOptions.Designer.cs index 19a5335..01fa564 100644 --- a/trunk/Tools/ToolsOptions.Designer.cs +++ b/source/Tools/ToolsOptions.Designer.cs @@ -1,153 +1,153 @@ -namespace LSLEditor.Tools -{ - partial class ToolsOptions - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.panelBottom = new System.Windows.Forms.Panel(); - this.button3 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.button1 = new System.Windows.Forms.Button(); - this.panelLeft = new System.Windows.Forms.Panel(); - this.treeView1 = new System.Windows.Forms.TreeView(); - this.label1 = new System.Windows.Forms.Label(); - this.panel1 = new System.Windows.Forms.Panel(); - this.panelBottom.SuspendLayout(); - this.panelLeft.SuspendLayout(); - this.SuspendLayout(); - // - // panelBottom - // - this.panelBottom.Controls.Add(this.button3); - this.panelBottom.Controls.Add(this.button2); - this.panelBottom.Controls.Add(this.button1); - this.panelBottom.Dock = System.Windows.Forms.DockStyle.Bottom; - this.panelBottom.Location = new System.Drawing.Point(0, 296); - this.panelBottom.Name = "panelBottom"; - this.panelBottom.Size = new System.Drawing.Size(637, 45); - this.panelBottom.TabIndex = 0; - // - // button3 - // - this.button3.Location = new System.Drawing.Point(16, 8); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(75, 23); - this.button3.TabIndex = 2; - this.button3.Text = "Reset all"; - this.button3.UseVisualStyleBackColor = true; - this.button3.Click += new System.EventHandler(this.button3_Click); - // - // button2 - // - this.button2.Location = new System.Drawing.Point(552, 8); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(75, 23); - this.button2.TabIndex = 1; - this.button2.Text = "Cancel"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // button1 - // - this.button1.Location = new System.Drawing.Point(464, 8); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(75, 23); - this.button1.TabIndex = 0; - this.button1.Text = "Ok"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // panelLeft - // - this.panelLeft.Controls.Add(this.treeView1); - this.panelLeft.Dock = System.Windows.Forms.DockStyle.Left; - this.panelLeft.Location = new System.Drawing.Point(0, 0); - this.panelLeft.Name = "panelLeft"; - this.panelLeft.Padding = new System.Windows.Forms.Padding(6); - this.panelLeft.Size = new System.Drawing.Size(224, 296); - this.panelLeft.TabIndex = 1; - // - // treeView1 - // - this.treeView1.Dock = System.Windows.Forms.DockStyle.Fill; - this.treeView1.HideSelection = false; - this.treeView1.Location = new System.Drawing.Point(6, 6); - this.treeView1.Name = "treeView1"; - this.treeView1.Size = new System.Drawing.Size(212, 284); - this.treeView1.TabIndex = 0; - this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); - // - // label1 - // - this.label1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.label1.Location = new System.Drawing.Point(224, 288); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(408, 2); - this.label1.TabIndex = 2; - // - // panel1 - // - this.panel1.Location = new System.Drawing.Point(232, 8); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(392, 272); - this.panel1.TabIndex = 3; - // - // ToolsOptions - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(637, 341); - this.Controls.Add(this.panel1); - this.Controls.Add(this.label1); - this.Controls.Add(this.panelLeft); - this.Controls.Add(this.panelBottom); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "ToolsOptions"; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "LSLEditor - Tools - Options"; - this.Load += new System.EventHandler(this.ToolsOptions_Load); - this.panelBottom.ResumeLayout(false); - this.panelLeft.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.Panel panelBottom; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Panel panelLeft; - private System.Windows.Forms.TreeView treeView1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Button button3; - } +namespace LSLEditor.Tools +{ + partial class ToolsOptions + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.panelBottom = new System.Windows.Forms.Panel(); + this.button3 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.panelLeft = new System.Windows.Forms.Panel(); + this.treeView1 = new System.Windows.Forms.TreeView(); + this.label1 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.panelBottom.SuspendLayout(); + this.panelLeft.SuspendLayout(); + this.SuspendLayout(); + // + // panelBottom + // + this.panelBottom.Controls.Add(this.button3); + this.panelBottom.Controls.Add(this.button2); + this.panelBottom.Controls.Add(this.button1); + this.panelBottom.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panelBottom.Location = new System.Drawing.Point(0, 296); + this.panelBottom.Name = "panelBottom"; + this.panelBottom.Size = new System.Drawing.Size(637, 45); + this.panelBottom.TabIndex = 0; + // + // button3 + // + this.button3.Location = new System.Drawing.Point(16, 8); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 23); + this.button3.TabIndex = 2; + this.button3.Text = "Reset all"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(552, 8); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 1; + this.button2.Text = "Cancel"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(464, 8); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 0; + this.button1.Text = "Ok"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // panelLeft + // + this.panelLeft.Controls.Add(this.treeView1); + this.panelLeft.Dock = System.Windows.Forms.DockStyle.Left; + this.panelLeft.Location = new System.Drawing.Point(0, 0); + this.panelLeft.Name = "panelLeft"; + this.panelLeft.Padding = new System.Windows.Forms.Padding(6); + this.panelLeft.Size = new System.Drawing.Size(224, 296); + this.panelLeft.TabIndex = 1; + // + // treeView1 + // + this.treeView1.Dock = System.Windows.Forms.DockStyle.Fill; + this.treeView1.HideSelection = false; + this.treeView1.Location = new System.Drawing.Point(6, 6); + this.treeView1.Name = "treeView1"; + this.treeView1.Size = new System.Drawing.Size(212, 284); + this.treeView1.TabIndex = 0; + this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); + // + // label1 + // + this.label1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.label1.Location = new System.Drawing.Point(224, 288); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(408, 2); + this.label1.TabIndex = 2; + // + // panel1 + // + this.panel1.Location = new System.Drawing.Point(232, 8); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(392, 272); + this.panel1.TabIndex = 3; + // + // ToolsOptions + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(637, 341); + this.Controls.Add(this.panel1); + this.Controls.Add(this.label1); + this.Controls.Add(this.panelLeft); + this.Controls.Add(this.panelBottom); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ToolsOptions"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "LSLEditor - Tools - Options"; + this.Load += new System.EventHandler(this.ToolsOptions_Load); + this.panelBottom.ResumeLayout(false); + this.panelLeft.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panelBottom; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Panel panelLeft; + private System.Windows.Forms.TreeView treeView1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Button button3; + } } \ No newline at end of file diff --git a/trunk/Tools/ToolsOptions.cs b/source/Tools/ToolsOptions.cs similarity index 97% rename from trunk/Tools/ToolsOptions.cs rename to source/Tools/ToolsOptions.cs index 06992a2..f99d3f9 100644 --- a/trunk/Tools/ToolsOptions.cs +++ b/source/Tools/ToolsOptions.cs @@ -1,158 +1,158 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Reflection; -using System.ComponentModel; -using System.Drawing; -using System.Xml; -using System.IO; -using System.Windows.Forms; - -namespace LSLEditor.Tools -{ - public partial class ToolsOptions : Form - { - public delegate void PropertiesChangedHandler(); - public event PropertiesChangedHandler PropertiesChanged; - - public ToolsOptions() - { - InitializeComponent(); - - LoadTreeView(); - } - - private XmlDocument GetXmlFromResource(string strName) - { - XmlDocument xml = new XmlDocument(); - Stream resource = Assembly.GetExecutingAssembly().GetManifestResourceStream("LSLEditor." + strName); - - if (resource != null) - xml.Load(resource); - return xml; - } - - private void LoadTreeView() - { - XmlDocument xml = GetXmlFromResource(Properties.Settings.Default.ToolsOptions); - RecursiveLoad(this.treeView1.Nodes, xml.SelectSingleNode("/root")); - } - - private void RecursiveLoad(TreeNodeCollection nodes, XmlNode xmlParentNode) - { - foreach (XmlNode xmlNode in xmlParentNode.SelectNodes("./*")) - { - string strName = xmlNode.Attributes["name"].Value; - string strUserControl = xmlNode.Attributes["usercontrol"].Value; - TreeNode tn = new TreeNode(strName, 0, 0); - tn.Tag = strUserControl; - nodes.Add(tn); - RecursiveLoad(tn.Nodes, xmlNode); - } - } - - private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) - { - string strUserControl = "LSLEditor.Tools." + e.Node.Tag.ToString(); - bool blnFound = false; - foreach (Control control in this.panel1.Controls) - { - control.Visible = (strUserControl == control.ToString()); - if (control.Visible) - blnFound = true; - } - if (blnFound) - return; - //create control and add to panel1 - Control newControl = Assembly.GetExecutingAssembly().CreateInstance(strUserControl) as Control; - if (newControl != null) - { - this.panel1.Controls.Add(newControl); - } - } - - private void button2_Click(object sender, EventArgs e) - { - this.Close(); - } - - private void button1_Click(object sender, EventArgs e) - { - // ok - foreach (Control control in this.panel1.Controls) - { - ((ICommit)control).Commit(); - } - - // save properties - Properties.Settings.Default.Save(); - - // notify parent - if (PropertiesChanged != null) - PropertiesChanged(); - - this.Close(); - } - - private void button3_Click(object sender, EventArgs e) - { - if (MessageBox.Show("Reset all properties?", "Reset properties", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) - { - this.panel1.Controls.Clear(); - - Properties.Settings.Default.Reset(); - Properties.Settings.Default.CallUpgrade = false; - - if (Properties.Settings.Default.FontEditor == null) - Properties.Settings.Default.FontEditor = new Font("Courier New", 9.75F, FontStyle.Regular); - - if (Properties.Settings.Default.FontTooltips == null) - Properties.Settings.Default.FontTooltips = new Font(SystemFonts.MessageBoxFont.Name, 9.75F, FontStyle.Regular); - } - } - - private void ToolsOptions_Load(object sender, EventArgs e) - { - this.treeView1.ExpandAll(); - this.treeView1.SelectedNode = this.treeView1.Nodes[0]; - this.treeView1.Focus(); - } - } +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Reflection; +using System.ComponentModel; +using System.Drawing; +using System.Xml; +using System.IO; +using System.Windows.Forms; + +namespace LSLEditor.Tools +{ + public partial class ToolsOptions : Form + { + public delegate void PropertiesChangedHandler(); + public event PropertiesChangedHandler PropertiesChanged; + + public ToolsOptions() + { + InitializeComponent(); + + LoadTreeView(); + } + + private XmlDocument GetXmlFromResource(string strName) + { + XmlDocument xml = new XmlDocument(); + Stream resource = Assembly.GetExecutingAssembly().GetManifestResourceStream("LSLEditor." + strName); + + if (resource != null) + xml.Load(resource); + return xml; + } + + private void LoadTreeView() + { + XmlDocument xml = GetXmlFromResource(Properties.Settings.Default.ToolsOptions); + RecursiveLoad(this.treeView1.Nodes, xml.SelectSingleNode("/root")); + } + + private void RecursiveLoad(TreeNodeCollection nodes, XmlNode xmlParentNode) + { + foreach (XmlNode xmlNode in xmlParentNode.SelectNodes("./*")) + { + string strName = xmlNode.Attributes["name"].Value; + string strUserControl = xmlNode.Attributes["usercontrol"].Value; + TreeNode tn = new TreeNode(strName, 0, 0); + tn.Tag = strUserControl; + nodes.Add(tn); + RecursiveLoad(tn.Nodes, xmlNode); + } + } + + private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) + { + string strUserControl = "LSLEditor.Tools." + e.Node.Tag.ToString(); + bool blnFound = false; + foreach (Control control in this.panel1.Controls) + { + control.Visible = (strUserControl == control.ToString()); + if (control.Visible) + blnFound = true; + } + if (blnFound) + return; + //create control and add to panel1 + Control newControl = Assembly.GetExecutingAssembly().CreateInstance(strUserControl) as Control; + if (newControl != null) + { + this.panel1.Controls.Add(newControl); + } + } + + private void button2_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void button1_Click(object sender, EventArgs e) + { + // ok + foreach (Control control in this.panel1.Controls) + { + ((ICommit)control).Commit(); + } + + // save properties + Properties.Settings.Default.Save(); + + // notify parent + if (PropertiesChanged != null) + PropertiesChanged(); + + this.Close(); + } + + private void button3_Click(object sender, EventArgs e) + { + if (MessageBox.Show("Reset all properties?", "Reset properties", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) + { + this.panel1.Controls.Clear(); + + Properties.Settings.Default.Reset(); + Properties.Settings.Default.CallUpgrade = false; + + if (Properties.Settings.Default.FontEditor == null) + Properties.Settings.Default.FontEditor = new Font("Courier New", 9.75F, FontStyle.Regular); + + if (Properties.Settings.Default.FontTooltips == null) + Properties.Settings.Default.FontTooltips = new Font(SystemFonts.MessageBoxFont.Name, 9.75F, FontStyle.Regular); + } + } + + private void ToolsOptions_Load(object sender, EventArgs e) + { + this.treeView1.ExpandAll(); + this.treeView1.SelectedNode = this.treeView1.Nodes[0]; + this.treeView1.Focus(); + } + } } \ No newline at end of file diff --git a/trunk/Tools/ToolsOptions.resx b/source/Tools/ToolsOptions.resx similarity index 97% rename from trunk/Tools/ToolsOptions.resx rename to source/Tools/ToolsOptions.resx index ff31a6d..19dc0dd 100644 --- a/trunk/Tools/ToolsOptions.resx +++ b/source/Tools/ToolsOptions.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/trunk/Tools/VersionControlGeneral.Designer.cs b/source/Tools/VersionControlGeneral.Designer.cs similarity index 97% rename from trunk/Tools/VersionControlGeneral.Designer.cs rename to source/Tools/VersionControlGeneral.Designer.cs index ce7ee1b..e145982 100644 --- a/trunk/Tools/VersionControlGeneral.Designer.cs +++ b/source/Tools/VersionControlGeneral.Designer.cs @@ -1,160 +1,160 @@ -namespace LSLEditor.Tools -{ - partial class VersionControlGeneral - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.button3 = new System.Windows.Forms.Button(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.groupBox1.SuspendLayout(); - this.SuspendLayout(); - // - // openFileDialog1 - // - this.openFileDialog1.FileName = "openFileDialog1"; - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.textBox3); - this.groupBox1.Controls.Add(this.textBox2); - this.groupBox1.Controls.Add(this.label3); - this.groupBox1.Controls.Add(this.label2); - this.groupBox1.Controls.Add(this.checkBox1); - this.groupBox1.Controls.Add(this.button3); - this.groupBox1.Controls.Add(this.textBox1); - this.groupBox1.Controls.Add(this.label1); - this.groupBox1.Location = new System.Drawing.Point(0, 0); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(392, 168); - this.groupBox1.TabIndex = 1; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "version control"; - // - // textBox3 - // - this.textBox3.Location = new System.Drawing.Point(80, 128); - this.textBox3.Name = "textBox3"; - this.textBox3.PasswordChar = '*'; - this.textBox3.Size = new System.Drawing.Size(104, 20); - this.textBox3.TabIndex = 11; - // - // textBox2 - // - this.textBox2.Location = new System.Drawing.Point(80, 104); - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(104, 20); - this.textBox2.TabIndex = 10; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(16, 128); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(53, 13); - this.label3.TabIndex = 9; - this.label3.Text = "Password"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(16, 104); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(37, 13); - this.label2.TabIndex = 8; - this.label2.Text = "Userid"; - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.checkBox1.Location = new System.Drawing.Point(16, 32); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(132, 17); - this.checkBox1.TabIndex = 7; - this.checkBox1.Text = "Use Subversion (SVN)"; - this.checkBox1.UseVisualStyleBackColor = true; - // - // button3 - // - this.button3.Location = new System.Drawing.Point(304, 64); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(75, 23); - this.button3.TabIndex = 3; - this.button3.Text = "browse..."; - this.button3.UseVisualStyleBackColor = true; - this.button3.Click += new System.EventHandler(this.button3_Click); - // - // textBox1 - // - this.textBox1.Location = new System.Drawing.Point(80, 64); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(216, 20); - this.textBox1.TabIndex = 3; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(16, 64); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(53, 13); - this.label1.TabIndex = 2; - this.label1.Text = "SVN-EXE"; - // - // VersionControlGeneral - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBox1); - this.Name = "VersionControlGeneral"; - this.Size = new System.Drawing.Size(392, 272); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.OpenFileDialog openFileDialog1; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.Button button3; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.TextBox textBox3; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label2; - } -} +namespace LSLEditor.Tools +{ + partial class VersionControlGeneral + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.button3 = new System.Windows.Forms.Button(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // openFileDialog1 + // + this.openFileDialog1.FileName = "openFileDialog1"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.textBox3); + this.groupBox1.Controls.Add(this.textBox2); + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Controls.Add(this.button3); + this.groupBox1.Controls.Add(this.textBox1); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Location = new System.Drawing.Point(0, 0); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(392, 168); + this.groupBox1.TabIndex = 1; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "version control"; + // + // textBox3 + // + this.textBox3.Location = new System.Drawing.Point(80, 128); + this.textBox3.Name = "textBox3"; + this.textBox3.PasswordChar = '*'; + this.textBox3.Size = new System.Drawing.Size(104, 20); + this.textBox3.TabIndex = 11; + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(80, 104); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(104, 20); + this.textBox2.TabIndex = 10; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(16, 128); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(53, 13); + this.label3.TabIndex = 9; + this.label3.Text = "Password"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(16, 104); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(37, 13); + this.label2.TabIndex = 8; + this.label2.Text = "Userid"; + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Location = new System.Drawing.Point(16, 32); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(132, 17); + this.checkBox1.TabIndex = 7; + this.checkBox1.Text = "Use Subversion (SVN)"; + this.checkBox1.UseVisualStyleBackColor = true; + // + // button3 + // + this.button3.Location = new System.Drawing.Point(304, 64); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 23); + this.button3.TabIndex = 3; + this.button3.Text = "browse..."; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(80, 64); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(216, 20); + this.textBox1.TabIndex = 3; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(16, 64); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(53, 13); + this.label1.TabIndex = 2; + this.label1.Text = "SVN-EXE"; + // + // VersionControlGeneral + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox1); + this.Name = "VersionControlGeneral"; + this.Size = new System.Drawing.Size(392, 272); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.OpenFileDialog openFileDialog1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + } +} diff --git a/trunk/Tools/VersionControlGeneral.cs b/source/Tools/VersionControlGeneral.cs similarity index 97% rename from trunk/Tools/VersionControlGeneral.cs rename to source/Tools/VersionControlGeneral.cs index 5aa6839..107faa2 100644 --- a/trunk/Tools/VersionControlGeneral.cs +++ b/source/Tools/VersionControlGeneral.cs @@ -1,89 +1,89 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.IO; -using System.Windows.Forms; - -namespace LSLEditor.Tools -{ - public partial class VersionControlGeneral : UserControl, ICommit - { - public VersionControlGeneral() - { - InitializeComponent(); - - this.groupBox1.Enabled = true;//Properties.Settings.Default.VersionControl; - - this.checkBox1.Checked = Properties.Settings.Default.VersionControlSVN; - this.checkBox1.CheckedChanged += new EventHandler(checkBox1_CheckedChanged); - checkBox1_CheckedChanged(null, null); - this.textBox1.Text = Properties.Settings.Default.SvnExe; - this.textBox2.Text = Properties.Settings.Default.SvnUserid; - this.textBox3.Text = Properties.Settings.Default.SvnPassword; - } - - private void checkBox1_CheckedChanged(object sender, EventArgs e) - { - this.textBox1.Enabled = this.checkBox1.Checked; - } - - public void Commit() - { - Properties.Settings.Default.SvnExe = this.textBox1.Text; - Properties.Settings.Default.SvnUserid = this.textBox2.Text; - Properties.Settings.Default.SvnPassword = this.textBox3.Text; - - Properties.Settings.Default.VersionControlSVN = this.checkBox1.Checked; - } - - - private void button3_Click(object sender, EventArgs e) - { - this.openFileDialog1.FileName = "svn.exe"; - this.openFileDialog1.Filter = "Executables (*.exe)|*.exe|All files (*.*)|*.*"; - if (this.openFileDialog1.ShowDialog(this) == DialogResult.OK) - { - if (File.Exists(this.openFileDialog1.FileName)) - this.textBox1.Text = this.openFileDialog1.FileName; - } - } - - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.IO; +using System.Windows.Forms; + +namespace LSLEditor.Tools +{ + public partial class VersionControlGeneral : UserControl, ICommit + { + public VersionControlGeneral() + { + InitializeComponent(); + + this.groupBox1.Enabled = true;//Properties.Settings.Default.VersionControl; + + this.checkBox1.Checked = Properties.Settings.Default.VersionControlSVN; + this.checkBox1.CheckedChanged += new EventHandler(checkBox1_CheckedChanged); + checkBox1_CheckedChanged(null, null); + this.textBox1.Text = Properties.Settings.Default.SvnExe; + this.textBox2.Text = Properties.Settings.Default.SvnUserid; + this.textBox3.Text = Properties.Settings.Default.SvnPassword; + } + + private void checkBox1_CheckedChanged(object sender, EventArgs e) + { + this.textBox1.Enabled = this.checkBox1.Checked; + } + + public void Commit() + { + Properties.Settings.Default.SvnExe = this.textBox1.Text; + Properties.Settings.Default.SvnUserid = this.textBox2.Text; + Properties.Settings.Default.SvnPassword = this.textBox3.Text; + + Properties.Settings.Default.VersionControlSVN = this.checkBox1.Checked; + } + + + private void button3_Click(object sender, EventArgs e) + { + this.openFileDialog1.FileName = "svn.exe"; + this.openFileDialog1.Filter = "Executables (*.exe)|*.exe|All files (*.*)|*.*"; + if (this.openFileDialog1.ShowDialog(this) == DialogResult.OK) + { + if (File.Exists(this.openFileDialog1.FileName)) + this.textBox1.Text = this.openFileDialog1.FileName; + } + } + + } +} diff --git a/trunk/Tools/VersionControlGeneral.resx b/source/Tools/VersionControlGeneral.resx similarity index 97% rename from trunk/Tools/VersionControlGeneral.resx rename to source/Tools/VersionControlGeneral.resx index 8dc6b17..6e58fa8 100644 --- a/trunk/Tools/VersionControlGeneral.resx +++ b/source/Tools/VersionControlGeneral.resx @@ -1,123 +1,123 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + \ No newline at end of file diff --git a/trunk/UpdateApplicationForm.Designer.cs b/source/UpdateApplicationForm.Designer.cs similarity index 97% rename from trunk/UpdateApplicationForm.Designer.cs rename to source/UpdateApplicationForm.Designer.cs index f5db96c..4e80a68 100644 --- a/trunk/UpdateApplicationForm.Designer.cs +++ b/source/UpdateApplicationForm.Designer.cs @@ -1,173 +1,173 @@ -namespace LSLEditor -{ - partial class UpdateApplicationForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.labelHelpversionString = new System.Windows.Forms.Label(); - this.labelHelpFile = new System.Windows.Forms.Label(); - this.progressBar1 = new System.Windows.Forms.ProgressBar(); - this.labelLatestVersionString = new System.Windows.Forms.Label(); - this.labelOurVersionString = new System.Windows.Forms.Label(); - this.labelLatestVersion = new System.Windows.Forms.Label(); - this.labelOurVersion = new System.Windows.Forms.Label(); - this.buttonUpdate = new System.Windows.Forms.Button(); - this.buttonCancel = new System.Windows.Forms.Button(); - this.groupBox1.SuspendLayout(); - this.SuspendLayout(); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.labelHelpversionString); - this.groupBox1.Controls.Add(this.labelHelpFile); - this.groupBox1.Controls.Add(this.progressBar1); - this.groupBox1.Controls.Add(this.labelLatestVersionString); - this.groupBox1.Controls.Add(this.labelOurVersionString); - this.groupBox1.Controls.Add(this.labelLatestVersion); - this.groupBox1.Controls.Add(this.labelOurVersion); - this.groupBox1.Location = new System.Drawing.Point(8, 8); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(216, 128); - this.groupBox1.TabIndex = 0; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "version information"; - // - // labelHelpversionString - // - this.labelHelpversionString.AutoSize = true; - this.labelHelpversionString.Location = new System.Drawing.Point(104, 72); - this.labelHelpversionString.Name = "labelHelpversionString"; - this.labelHelpversionString.Size = new System.Drawing.Size(0, 13); - this.labelHelpversionString.TabIndex = 6; - // - // labelHelpFile - // - this.labelHelpFile.AutoSize = true; - this.labelHelpFile.Location = new System.Drawing.Point(16, 72); - this.labelHelpFile.Name = "labelHelpFile"; - this.labelHelpFile.Size = new System.Drawing.Size(48, 13); - this.labelHelpFile.TabIndex = 5; - this.labelHelpFile.Text = "Help file:"; - // - // progressBar1 - // - this.progressBar1.Location = new System.Drawing.Point(16, 96); - this.progressBar1.Name = "progressBar1"; - this.progressBar1.Size = new System.Drawing.Size(184, 15); - this.progressBar1.TabIndex = 4; - // - // labelLatestVersionString - // - this.labelLatestVersionString.AutoSize = true; - this.labelLatestVersionString.Location = new System.Drawing.Point(104, 48); - this.labelLatestVersionString.Name = "labelLatestVersionString"; - this.labelLatestVersionString.Size = new System.Drawing.Size(0, 13); - this.labelLatestVersionString.TabIndex = 3; - // - // labelOurVersionString - // - this.labelOurVersionString.AutoSize = true; - this.labelOurVersionString.Location = new System.Drawing.Point(104, 24); - this.labelOurVersionString.Name = "labelOurVersionString"; - this.labelOurVersionString.Size = new System.Drawing.Size(0, 13); - this.labelOurVersionString.TabIndex = 2; - // - // labelLatestVersion - // - this.labelLatestVersion.AutoSize = true; - this.labelLatestVersion.Location = new System.Drawing.Point(16, 48); - this.labelLatestVersion.Name = "labelLatestVersion"; - this.labelLatestVersion.Size = new System.Drawing.Size(76, 13); - this.labelLatestVersion.TabIndex = 1; - this.labelLatestVersion.Text = "Latest version:"; - // - // labelOurVersion - // - this.labelOurVersion.AutoSize = true; - this.labelOurVersion.Location = new System.Drawing.Point(16, 24); - this.labelOurVersion.Name = "labelOurVersion"; - this.labelOurVersion.Size = new System.Drawing.Size(69, 13); - this.labelOurVersion.TabIndex = 0; - this.labelOurVersion.Text = "Your version:"; - // - // buttonUpdate - // - this.buttonUpdate.Location = new System.Drawing.Point(48, 144); - this.buttonUpdate.Name = "buttonUpdate"; - this.buttonUpdate.Size = new System.Drawing.Size(75, 23); - this.buttonUpdate.TabIndex = 1; - this.buttonUpdate.Text = "Update"; - this.buttonUpdate.UseVisualStyleBackColor = true; - this.buttonUpdate.Click += new System.EventHandler(this.buttonUpdate_Click); - // - // buttonCancel - // - this.buttonCancel.Location = new System.Drawing.Point(136, 144); - this.buttonCancel.Name = "buttonCancel"; - this.buttonCancel.Size = new System.Drawing.Size(75, 23); - this.buttonCancel.TabIndex = 2; - this.buttonCancel.Text = "Cancel"; - this.buttonCancel.UseVisualStyleBackColor = true; - this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); - // - // UpdateApplicationForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(234, 177); - this.Controls.Add(this.buttonCancel); - this.Controls.Add(this.buttonUpdate); - this.Controls.Add(this.groupBox1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "UpdateApplicationForm"; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "Update LSLEditor"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.UpdateApplicationForm_FormClosing); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.Label labelLatestVersionString; - private System.Windows.Forms.Label labelOurVersionString; - private System.Windows.Forms.Label labelLatestVersion; - private System.Windows.Forms.Label labelOurVersion; - private System.Windows.Forms.Button buttonUpdate; - private System.Windows.Forms.Button buttonCancel; - private System.Windows.Forms.ProgressBar progressBar1; - private System.Windows.Forms.Label labelHelpversionString; - private System.Windows.Forms.Label labelHelpFile; - } +namespace LSLEditor +{ + partial class UpdateApplicationForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.labelHelpversionString = new System.Windows.Forms.Label(); + this.labelHelpFile = new System.Windows.Forms.Label(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.labelLatestVersionString = new System.Windows.Forms.Label(); + this.labelOurVersionString = new System.Windows.Forms.Label(); + this.labelLatestVersion = new System.Windows.Forms.Label(); + this.labelOurVersion = new System.Windows.Forms.Label(); + this.buttonUpdate = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.labelHelpversionString); + this.groupBox1.Controls.Add(this.labelHelpFile); + this.groupBox1.Controls.Add(this.progressBar1); + this.groupBox1.Controls.Add(this.labelLatestVersionString); + this.groupBox1.Controls.Add(this.labelOurVersionString); + this.groupBox1.Controls.Add(this.labelLatestVersion); + this.groupBox1.Controls.Add(this.labelOurVersion); + this.groupBox1.Location = new System.Drawing.Point(8, 8); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(216, 128); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "version information"; + // + // labelHelpversionString + // + this.labelHelpversionString.AutoSize = true; + this.labelHelpversionString.Location = new System.Drawing.Point(104, 72); + this.labelHelpversionString.Name = "labelHelpversionString"; + this.labelHelpversionString.Size = new System.Drawing.Size(0, 13); + this.labelHelpversionString.TabIndex = 6; + // + // labelHelpFile + // + this.labelHelpFile.AutoSize = true; + this.labelHelpFile.Location = new System.Drawing.Point(16, 72); + this.labelHelpFile.Name = "labelHelpFile"; + this.labelHelpFile.Size = new System.Drawing.Size(48, 13); + this.labelHelpFile.TabIndex = 5; + this.labelHelpFile.Text = "Help file:"; + // + // progressBar1 + // + this.progressBar1.Location = new System.Drawing.Point(16, 96); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(184, 15); + this.progressBar1.TabIndex = 4; + // + // labelLatestVersionString + // + this.labelLatestVersionString.AutoSize = true; + this.labelLatestVersionString.Location = new System.Drawing.Point(104, 48); + this.labelLatestVersionString.Name = "labelLatestVersionString"; + this.labelLatestVersionString.Size = new System.Drawing.Size(0, 13); + this.labelLatestVersionString.TabIndex = 3; + // + // labelOurVersionString + // + this.labelOurVersionString.AutoSize = true; + this.labelOurVersionString.Location = new System.Drawing.Point(104, 24); + this.labelOurVersionString.Name = "labelOurVersionString"; + this.labelOurVersionString.Size = new System.Drawing.Size(0, 13); + this.labelOurVersionString.TabIndex = 2; + // + // labelLatestVersion + // + this.labelLatestVersion.AutoSize = true; + this.labelLatestVersion.Location = new System.Drawing.Point(16, 48); + this.labelLatestVersion.Name = "labelLatestVersion"; + this.labelLatestVersion.Size = new System.Drawing.Size(76, 13); + this.labelLatestVersion.TabIndex = 1; + this.labelLatestVersion.Text = "Latest version:"; + // + // labelOurVersion + // + this.labelOurVersion.AutoSize = true; + this.labelOurVersion.Location = new System.Drawing.Point(16, 24); + this.labelOurVersion.Name = "labelOurVersion"; + this.labelOurVersion.Size = new System.Drawing.Size(69, 13); + this.labelOurVersion.TabIndex = 0; + this.labelOurVersion.Text = "Your version:"; + // + // buttonUpdate + // + this.buttonUpdate.Location = new System.Drawing.Point(48, 144); + this.buttonUpdate.Name = "buttonUpdate"; + this.buttonUpdate.Size = new System.Drawing.Size(75, 23); + this.buttonUpdate.TabIndex = 1; + this.buttonUpdate.Text = "Update"; + this.buttonUpdate.UseVisualStyleBackColor = true; + this.buttonUpdate.Click += new System.EventHandler(this.buttonUpdate_Click); + // + // buttonCancel + // + this.buttonCancel.Location = new System.Drawing.Point(136, 144); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 2; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // UpdateApplicationForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(234, 177); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonUpdate); + this.Controls.Add(this.groupBox1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "UpdateApplicationForm"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Update LSLEditor"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.UpdateApplicationForm_FormClosing); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label labelLatestVersionString; + private System.Windows.Forms.Label labelOurVersionString; + private System.Windows.Forms.Label labelLatestVersion; + private System.Windows.Forms.Label labelOurVersion; + private System.Windows.Forms.Button buttonUpdate; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.ProgressBar progressBar1; + private System.Windows.Forms.Label labelHelpversionString; + private System.Windows.Forms.Label labelHelpFile; + } } \ No newline at end of file diff --git a/trunk/UpdateApplicationForm.cs b/source/UpdateApplicationForm.cs similarity index 96% rename from trunk/UpdateApplicationForm.cs rename to source/UpdateApplicationForm.cs index fa4cd3c..9ede384 100644 --- a/trunk/UpdateApplicationForm.cs +++ b/source/UpdateApplicationForm.cs @@ -1,488 +1,488 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.IO; -using System.Net; -using System.Reflection; -using System.ComponentModel; -using System.Windows.Forms; - -using LSLEditor.Decompressor; - -namespace LSLEditor -{ - public partial class UpdateApplicationForm : Form - { - private WebClient manifest; - private WebClient client; - - private string strHashWeb; - private string strDownloadUrl; - - private string strHelpHashWeb; - private string strHelpUrl; - private string strHelpReferer; - - private bool blnOnlyHelpFile; - - private struct versionInfo - { - public Version version; - public string hash; - public string uri; - - public versionInfo(string ver) - { - version = new Version(ver); - hash = ""; - uri = ""; - } - - public versionInfo(string ver, string md5) - { - version = new Version(ver); - hash = md5; - uri = ""; - } - - public versionInfo(string ver, string md5, string URI) - { - version = new Version(ver); - hash = md5; - uri = URI; - } - } - - public UpdateApplicationForm() - { - InitializeComponent(); - this.strHashWeb = ""; - this.strHelpHashWeb = ""; - this.strDownloadUrl = null; - this.strHelpUrl = null; - this.strHelpReferer = null; - this.buttonUpdate.Enabled = false; - this.blnOnlyHelpFile = false; - } - - public event EventHandler OnUpdateAvailable; - - private void StartDownloadinManifest() - { - Uri url; - string strVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); - if (Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location).Contains("beta")) { - url = new Uri(Properties.Settings.Default.UpdateManifest + "?beta-" + strVersion); - } else { - url = new Uri(Properties.Settings.Default.UpdateManifest + "?" + strVersion); - } - - manifest = new WebClient(); - manifest.DownloadStringCompleted += new DownloadStringCompletedEventHandler(manifest_DownloadCompleted); - manifest.DownloadStringAsync(url); - } - - public void CheckForHelpFile() - { - this.blnOnlyHelpFile = true; - StartDownloadinManifest(); - } - - public void CheckForUpdate(bool blnForce) - { - if (!blnForce) { - if (Properties.Settings.Default.DeleteOldFiles) { - DeleteOldFile(); - } - - DateTime dateTime = Properties.Settings.Default.CheckDate; - if (Properties.Settings.Default.CheckEveryDay) { - TimeSpan lastUpdate = DateTime.Now - dateTime; - if (lastUpdate.TotalDays >= 1.0) { - blnForce = true; - } - } else if (Properties.Settings.Default.CheckEveryWeek) { - TimeSpan lastUpdate = DateTime.Now - dateTime; - if (lastUpdate.TotalDays >= 7.0) { - blnForce = true; - } - } - } - - if (blnForce) { - Properties.Settings.Default.CheckDate = DateTime.Now; - Properties.Settings.Default.Save(); // save also all settings - - StartDownloadinManifest(); - } - } - - void manifest_DownloadCompleted(object sender, DownloadStringCompletedEventArgs e) - { - if (e.Error != null) - return; - - versionInfo bzip = new versionInfo(); - versionInfo gzip = new versionInfo(); - versionInfo wzip = new versionInfo(); - - versionInfo web = new versionInfo(); - - versionInfo current = new versionInfo(Assembly.GetExecutingAssembly().GetName().Version.ToString()); - current.hash = Decompressor.MD5Verify.ComputeHash(Assembly.GetExecutingAssembly().Location); - current.uri = ""; - - string strHelpHashMe = ""; - string strHelpFile = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), Properties.Settings.Default.HelpOfflineFile); - if (File.Exists(strHelpFile)) { - strHelpHashMe = Decompressor.MD5Verify.ComputeHash(strHelpFile); - } else { - // help file does not exist - if (Properties.Settings.Default.HelpOffline || blnOnlyHelpFile) { - strHelpHashMe = "*"; // force new update - } else { - strHelpHashMe = ""; // no update - this.labelHelpFile.Visible = false; - this.labelHelpversionString.Visible = false; - } - } - - StringReader sr = new StringReader(e.Result); - for (int intI = 0; intI < 255; intI++) { - string strLine = sr.ReadLine(); - if (strLine == null) { - break; - } - - int intSplit = strLine.IndexOf("="); - if (intSplit < 0) { - continue; - } - - string strName = strLine.Substring(0, intSplit); - string strValue = strLine.Substring(intSplit + 1); - - //All hashes are of the uncompressed file. However, different archives may contain different versions. - switch (strName) { - case "Version": - case "BZipVersion": - bzip = new versionInfo(strValue); - break; - case "Hash": - case "BZipHash": - bzip.hash = strValue; - break; - case "Url": - case "BZipUrl": - bzip.uri = strValue; - break; - case "GZipVersion": - gzip = new versionInfo(strValue); - break; - case "GZipHash": - gzip.hash = strValue; - break; - case "GZipUrl": - gzip.uri = strValue; - break; - case "ZipVersion": - wzip = new versionInfo(strValue); - break; - case "ZipHash": - wzip.hash = strValue; - break; - case "ZipUrl": - wzip.uri = strValue; - break; - case "HelpHash": - strHelpHashWeb = strValue; - break; - case "HelpUrl2": - strHelpUrl = strValue; - break; - case "HelpReferer": - strHelpReferer = strValue; - break; - default: - break; - } - } - - web = bzip; - /* - if (!String.IsNullOrEmpty(gzip.uri) && (gzip.compare(web) == 1)) - { - web = gzip; - } - - - if (!String.IsNullOrEmpty(wzip.uri) && (wzip.compare(web) == 1)) - { - web = wzip; - } - */ - strHashWeb = web.hash; - - this.labelOurVersionString.Text = current.version.ToString(); - this.labelLatestVersionString.Text = web.version.ToString(); - - if (String.IsNullOrEmpty(web.uri) || (web.version.CompareTo(current.version) != 1)) { - return; - } - - if (strHelpHashMe == "") { - strHelpHashMe = strHelpHashWeb; - } - - if (strHelpHashMe == strHelpHashWeb) { - this.labelHelpversionString.Text = "Up to date"; - this.strHelpUrl = null; - } else { - this.labelHelpversionString.Text = "Out of date"; - } - - if (current.hash == web.hash) { - this.strDownloadUrl = null; - } else { - this.strDownloadUrl = web.uri; - } - - if (this.blnOnlyHelpFile) { - this.strDownloadUrl = null; - this.labelLatestVersion.Visible = false; - this.labelLatestVersionString.Visible = false; - } - - if (this.strHelpUrl != null || this.strDownloadUrl != null) { - this.buttonUpdate.Enabled = true; - - if (OnUpdateAvailable != null) { - OnUpdateAvailable(this, null); - } - } - } - - private void buttonCancel_Click(object sender, EventArgs e) - { - this.Close(); - } - - private void buttonUpdate_Click(object sender, EventArgs e) - { - this.buttonUpdate.Enabled = false; - Download(); - } - - private void Download() - { - if (strHelpUrl != null) { - DownloadHelpFile(); // starts also DownloadProgram when finished - } else { - DownloadProgram(); - } - } - - private void DownloadHelpFile() - { - if (strHelpUrl != null) { - Uri url = new Uri(strHelpUrl); - - client = new WebClient(); - - if (this.strHelpReferer != null) { - client.Headers.Add("Referer", strHelpReferer); - } - - client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadHelpFileCompleted); - client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged); - - string strCurrentFile = Assembly.GetExecutingAssembly().Location; - string strDirectory = Path.GetDirectoryName(strCurrentFile); - string strNewFile = Path.Combine(strDirectory, Properties.Settings.Default.HelpOfflineFile); - - if (File.Exists(strNewFile)) { - File.Delete(strNewFile); - } - - client.DownloadFileAsync(url, strNewFile); - } - } - - void client_DownloadHelpFileCompleted(object sender, AsyncCompletedEventArgs e) - { - try { - if (e.Error != null) { - throw e.Error; - } - - string strCurrentFile = Assembly.GetExecutingAssembly().Location; - string strDirectory = Path.GetDirectoryName(strCurrentFile); - string strNewFile = Path.Combine(strDirectory, Properties.Settings.Default.HelpOfflineFile); - - string strComputedHash = Decompressor.MD5Verify.ComputeHash(strNewFile); - if (strComputedHash != strHelpHashWeb) { - this.buttonUpdate.Enabled = true; - throw new Exception("MD5 Hash of HelpFile not correct, try downloading again!"); - } - if (this.strDownloadUrl != null) { - DownloadProgram(); - } else { - this.Close(); - } - } catch (Exception exception) { - MessageBox.Show(exception.Message, "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - - private void DownloadProgram() - { - if (strDownloadUrl != null) { - Uri url = new Uri(strDownloadUrl); - - client = new WebClient(); - client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted); - client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged); - - string strCurrentFile = Assembly.GetExecutingAssembly().Location; - string strDirectory = Path.GetDirectoryName(strCurrentFile); - string strNewFileName = Path.GetFileName(strDownloadUrl); - string strNewFile = Path.Combine(strDirectory, strNewFileName); - - if (File.Exists(strNewFile)) { - File.Delete(strNewFile); - } - - client.DownloadFileAsync(url, strNewFile, strNewFileName); - } - } - - void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) - { - this.progressBar1.Value = e.ProgressPercentage; - } - - void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) - { - try { - if (e.Error != null) { - throw e.Error; - } - - string strNewFileName = e.UserState.ToString(); - - string strCurrentFile = Assembly.GetExecutingAssembly().Location; - string strDirectory = Path.GetDirectoryName(strCurrentFile); - string strZipFile = Path.Combine(strDirectory, strNewFileName); - string strNewFile = Path.Combine(strDirectory, "LSLEditor.exe.new"); - - string strOldFile = Path.Combine(strDirectory, "_LSLEditor.exe"); - - string strExtension = Path.GetExtension(strNewFileName); - switch (strExtension) { - case ".bz2": - Decompressor.BZip2.Decompress(File.OpenRead(strZipFile), File.Create(strNewFile)); - break; - case ".gz": - case ".gzip": - Decompressor.Gzip.Decompress(File.OpenRead(strZipFile), File.Create(strNewFile)); - break; - case ".zip": - Decompressor.Zip.Decompress(File.OpenRead(strZipFile), File.Create(strNewFile)); - break; - default: - break; - } - string strComputedHash = Decompressor.MD5Verify.ComputeHash(strNewFile); - if (strComputedHash == strHashWeb) { - if (File.Exists(strOldFile)) - File.Delete(strOldFile); - - File.Move(strCurrentFile, strOldFile); - File.Move(strNewFile, strCurrentFile); - - if (File.Exists(strZipFile)) { - File.Delete(strZipFile); - } - - // save all there is pending (if any) - Properties.Settings.Default.Save(); - - System.Diagnostics.Process.Start(strCurrentFile); - - Environment.Exit(0); - } else { - this.buttonUpdate.Enabled = true; - throw new Exception("MD5 Hash not correct, try downloading again!"); - } - } catch (Exception exception) { - MessageBox.Show(exception.Message, "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - - private void UpdateApplicationForm_FormClosing(object sender, FormClosingEventArgs e) - { - if (client != null) { - if (client.IsBusy) { - client.CancelAsync(); - } - client.Dispose(); - } - client = null; - if (manifest != null) { - if (manifest.IsBusy) { - manifest.CancelAsync(); - } - manifest.Dispose(); - } - manifest = null; - } - - private void DeleteOldFile() - { - string strCurrentFile = Assembly.GetExecutingAssembly().Location; - string strDirectory = Path.GetDirectoryName(strCurrentFile); - string strOldFile = Path.Combine(strDirectory, "_LSLEditor.exe"); - if (File.Exists(strOldFile)) { - File.Delete(strOldFile); - } - } - - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.IO; +using System.Net; +using System.Reflection; +using System.ComponentModel; +using System.Windows.Forms; + +using LSLEditor.Decompressor; + +namespace LSLEditor +{ + public partial class UpdateApplicationForm : Form + { + private WebClient manifest; + private WebClient client; + + private string strHashWeb; + private string strDownloadUrl; + + private string strHelpHashWeb; + private string strHelpUrl; + private string strHelpReferer; + + private bool blnOnlyHelpFile; + + private struct versionInfo + { + public Version version; + public string hash; + public string uri; + + public versionInfo(string ver) + { + version = new Version(ver); + hash = ""; + uri = ""; + } + + public versionInfo(string ver, string md5) + { + version = new Version(ver); + hash = md5; + uri = ""; + } + + public versionInfo(string ver, string md5, string URI) + { + version = new Version(ver); + hash = md5; + uri = URI; + } + } + + public UpdateApplicationForm() + { + InitializeComponent(); + this.strHashWeb = ""; + this.strHelpHashWeb = ""; + this.strDownloadUrl = null; + this.strHelpUrl = null; + this.strHelpReferer = null; + this.buttonUpdate.Enabled = false; + this.blnOnlyHelpFile = false; + } + + public event EventHandler OnUpdateAvailable; + + private void StartDownloadinManifest() + { + Uri url; + string strVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); + if (Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location).Contains("beta")) { + url = new Uri(Properties.Settings.Default.UpdateManifest + "?beta-" + strVersion); + } else { + url = new Uri(Properties.Settings.Default.UpdateManifest + "?" + strVersion); + } + + manifest = new WebClient(); + manifest.DownloadStringCompleted += new DownloadStringCompletedEventHandler(manifest_DownloadCompleted); + manifest.DownloadStringAsync(url); + } + + public void CheckForHelpFile() + { + this.blnOnlyHelpFile = true; + StartDownloadinManifest(); + } + + public void CheckForUpdate(bool blnForce) + { + if (!blnForce) { + if (Properties.Settings.Default.DeleteOldFiles) { + DeleteOldFile(); + } + + DateTime dateTime = Properties.Settings.Default.CheckDate; + if (Properties.Settings.Default.CheckEveryDay) { + TimeSpan lastUpdate = DateTime.Now - dateTime; + if (lastUpdate.TotalDays >= 1.0) { + blnForce = true; + } + } else if (Properties.Settings.Default.CheckEveryWeek) { + TimeSpan lastUpdate = DateTime.Now - dateTime; + if (lastUpdate.TotalDays >= 7.0) { + blnForce = true; + } + } + } + + if (blnForce) { + Properties.Settings.Default.CheckDate = DateTime.Now; + Properties.Settings.Default.Save(); // save also all settings + + StartDownloadinManifest(); + } + } + + void manifest_DownloadCompleted(object sender, DownloadStringCompletedEventArgs e) + { + if (e.Error != null) + return; + + versionInfo bzip = new versionInfo(); + versionInfo gzip = new versionInfo(); + versionInfo wzip = new versionInfo(); + + versionInfo web = new versionInfo(); + + versionInfo current = new versionInfo(Assembly.GetExecutingAssembly().GetName().Version.ToString()); + current.hash = Decompressor.MD5Verify.ComputeHash(Assembly.GetExecutingAssembly().Location); + current.uri = ""; + + string strHelpHashMe = ""; + string strHelpFile = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), Properties.Settings.Default.HelpOfflineFile); + if (File.Exists(strHelpFile)) { + strHelpHashMe = Decompressor.MD5Verify.ComputeHash(strHelpFile); + } else { + // help file does not exist + if (Properties.Settings.Default.HelpOffline || blnOnlyHelpFile) { + strHelpHashMe = "*"; // force new update + } else { + strHelpHashMe = ""; // no update + this.labelHelpFile.Visible = false; + this.labelHelpversionString.Visible = false; + } + } + + StringReader sr = new StringReader(e.Result); + for (int intI = 0; intI < 255; intI++) { + string strLine = sr.ReadLine(); + if (strLine == null) { + break; + } + + int intSplit = strLine.IndexOf("="); + if (intSplit < 0) { + continue; + } + + string strName = strLine.Substring(0, intSplit); + string strValue = strLine.Substring(intSplit + 1); + + //All hashes are of the uncompressed file. However, different archives may contain different versions. + switch (strName) { + case "Version": + case "BZipVersion": + bzip = new versionInfo(strValue); + break; + case "Hash": + case "BZipHash": + bzip.hash = strValue; + break; + case "Url": + case "BZipUrl": + bzip.uri = strValue; + break; + case "GZipVersion": + gzip = new versionInfo(strValue); + break; + case "GZipHash": + gzip.hash = strValue; + break; + case "GZipUrl": + gzip.uri = strValue; + break; + case "ZipVersion": + wzip = new versionInfo(strValue); + break; + case "ZipHash": + wzip.hash = strValue; + break; + case "ZipUrl": + wzip.uri = strValue; + break; + case "HelpHash": + strHelpHashWeb = strValue; + break; + case "HelpUrl2": + strHelpUrl = strValue; + break; + case "HelpReferer": + strHelpReferer = strValue; + break; + default: + break; + } + } + + web = bzip; + /* + if (!String.IsNullOrEmpty(gzip.uri) && (gzip.compare(web) == 1)) + { + web = gzip; + } + + + if (!String.IsNullOrEmpty(wzip.uri) && (wzip.compare(web) == 1)) + { + web = wzip; + } + */ + strHashWeb = web.hash; + + this.labelOurVersionString.Text = current.version.ToString(); + this.labelLatestVersionString.Text = web.version.ToString(); + + if (String.IsNullOrEmpty(web.uri) || (web.version.CompareTo(current.version) != 1)) { + return; + } + + if (strHelpHashMe == "") { + strHelpHashMe = strHelpHashWeb; + } + + if (strHelpHashMe == strHelpHashWeb) { + this.labelHelpversionString.Text = "Up to date"; + this.strHelpUrl = null; + } else { + this.labelHelpversionString.Text = "Out of date"; + } + + if (current.hash == web.hash) { + this.strDownloadUrl = null; + } else { + this.strDownloadUrl = web.uri; + } + + if (this.blnOnlyHelpFile) { + this.strDownloadUrl = null; + this.labelLatestVersion.Visible = false; + this.labelLatestVersionString.Visible = false; + } + + if (this.strHelpUrl != null || this.strDownloadUrl != null) { + this.buttonUpdate.Enabled = true; + + if (OnUpdateAvailable != null) { + OnUpdateAvailable(this, null); + } + } + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void buttonUpdate_Click(object sender, EventArgs e) + { + this.buttonUpdate.Enabled = false; + Download(); + } + + private void Download() + { + if (strHelpUrl != null) { + DownloadHelpFile(); // starts also DownloadProgram when finished + } else { + DownloadProgram(); + } + } + + private void DownloadHelpFile() + { + if (strHelpUrl != null) { + Uri url = new Uri(strHelpUrl); + + client = new WebClient(); + + if (this.strHelpReferer != null) { + client.Headers.Add("Referer", strHelpReferer); + } + + client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadHelpFileCompleted); + client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged); + + string strCurrentFile = Assembly.GetExecutingAssembly().Location; + string strDirectory = Path.GetDirectoryName(strCurrentFile); + string strNewFile = Path.Combine(strDirectory, Properties.Settings.Default.HelpOfflineFile); + + if (File.Exists(strNewFile)) { + File.Delete(strNewFile); + } + + client.DownloadFileAsync(url, strNewFile); + } + } + + void client_DownloadHelpFileCompleted(object sender, AsyncCompletedEventArgs e) + { + try { + if (e.Error != null) { + throw e.Error; + } + + string strCurrentFile = Assembly.GetExecutingAssembly().Location; + string strDirectory = Path.GetDirectoryName(strCurrentFile); + string strNewFile = Path.Combine(strDirectory, Properties.Settings.Default.HelpOfflineFile); + + string strComputedHash = Decompressor.MD5Verify.ComputeHash(strNewFile); + if (strComputedHash != strHelpHashWeb) { + this.buttonUpdate.Enabled = true; + throw new Exception("MD5 Hash of HelpFile not correct, try downloading again!"); + } + if (this.strDownloadUrl != null) { + DownloadProgram(); + } else { + this.Close(); + } + } catch (Exception exception) { + MessageBox.Show(exception.Message, "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void DownloadProgram() + { + if (strDownloadUrl != null) { + Uri url = new Uri(strDownloadUrl); + + client = new WebClient(); + client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted); + client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged); + + string strCurrentFile = Assembly.GetExecutingAssembly().Location; + string strDirectory = Path.GetDirectoryName(strCurrentFile); + string strNewFileName = Path.GetFileName(strDownloadUrl); + string strNewFile = Path.Combine(strDirectory, strNewFileName); + + if (File.Exists(strNewFile)) { + File.Delete(strNewFile); + } + + client.DownloadFileAsync(url, strNewFile, strNewFileName); + } + } + + void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) + { + this.progressBar1.Value = e.ProgressPercentage; + } + + void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) + { + try { + if (e.Error != null) { + throw e.Error; + } + + string strNewFileName = e.UserState.ToString(); + + string strCurrentFile = Assembly.GetExecutingAssembly().Location; + string strDirectory = Path.GetDirectoryName(strCurrentFile); + string strZipFile = Path.Combine(strDirectory, strNewFileName); + string strNewFile = Path.Combine(strDirectory, "LSLEditor.exe.new"); + + string strOldFile = Path.Combine(strDirectory, "_LSLEditor.exe"); + + string strExtension = Path.GetExtension(strNewFileName); + switch (strExtension) { + case ".bz2": + Decompressor.BZip2.Decompress(File.OpenRead(strZipFile), File.Create(strNewFile)); + break; + case ".gz": + case ".gzip": + Decompressor.Gzip.Decompress(File.OpenRead(strZipFile), File.Create(strNewFile)); + break; + case ".zip": + Decompressor.Zip.Decompress(File.OpenRead(strZipFile), File.Create(strNewFile)); + break; + default: + break; + } + string strComputedHash = Decompressor.MD5Verify.ComputeHash(strNewFile); + if (strComputedHash == strHashWeb) { + if (File.Exists(strOldFile)) + File.Delete(strOldFile); + + File.Move(strCurrentFile, strOldFile); + File.Move(strNewFile, strCurrentFile); + + if (File.Exists(strZipFile)) { + File.Delete(strZipFile); + } + + // save all there is pending (if any) + Properties.Settings.Default.Save(); + + System.Diagnostics.Process.Start(strCurrentFile); + + Environment.Exit(0); + } else { + this.buttonUpdate.Enabled = true; + throw new Exception("MD5 Hash not correct, try downloading again!"); + } + } catch (Exception exception) { + MessageBox.Show(exception.Message, "Oops...", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void UpdateApplicationForm_FormClosing(object sender, FormClosingEventArgs e) + { + if (client != null) { + if (client.IsBusy) { + client.CancelAsync(); + } + client.Dispose(); + } + client = null; + if (manifest != null) { + if (manifest.IsBusy) { + manifest.CancelAsync(); + } + manifest.Dispose(); + } + manifest = null; + } + + private void DeleteOldFile() + { + string strCurrentFile = Assembly.GetExecutingAssembly().Location; + string strDirectory = Path.GetDirectoryName(strCurrentFile); + string strOldFile = Path.Combine(strDirectory, "_LSLEditor.exe"); + if (File.Exists(strOldFile)) { + File.Delete(strOldFile); + } + } + + } +} diff --git a/trunk/UpdateApplicationForm.resx b/source/UpdateApplicationForm.resx similarity index 97% rename from trunk/UpdateApplicationForm.resx rename to source/UpdateApplicationForm.resx index ff31a6d..19dc0dd 100644 --- a/trunk/UpdateApplicationForm.resx +++ b/source/UpdateApplicationForm.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/trunk/Web References/org.lsleditor.www/Reference.cs b/source/Web References/org.lsleditor.www/Reference.cs similarity index 97% rename from trunk/Web References/org.lsleditor.www/Reference.cs rename to source/Web References/org.lsleditor.www/Reference.cs index cb4241b..755d078 100644 --- a/trunk/Web References/org.lsleditor.www/Reference.cs +++ b/source/Web References/org.lsleditor.www/Reference.cs @@ -1,334 +1,334 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.261 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -// -// This source code was auto-generated by Microsoft.VSDesigner, Version 4.0.30319.261. -// -#pragma warning disable 1591 - -namespace LSLEditor.org.lsleditor.www { - using System; - using System.Web.Services; - using System.Diagnostics; - using System.Web.Services.Protocols; - using System.ComponentModel; - using System.Xml.Serialization; - - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Web.Services.WebServiceBindingAttribute(Name="Service1Soap", Namespace="http://tempuri.org/")] - public partial class Service1 : System.Web.Services.Protocols.SoapHttpClientProtocol { - - private System.Threading.SendOrPostCallback OpenOperationCompleted; - - private System.Threading.SendOrPostCallback GetStatusOperationCompleted; - - private System.Threading.SendOrPostCallback GetBugReportOperationCompleted; - - private System.Threading.SendOrPostCallback WriteOperationCompleted; - - private bool useDefaultCredentialsSetExplicitly; - - /// - public Service1() { - this.Url = "http://www.lsleditor.org/UploadBugReport/Service1.asmx"; - if ((this.IsLocalFileSystemWebService(this.Url) == true)) { - this.UseDefaultCredentials = true; - this.useDefaultCredentialsSetExplicitly = false; - } - else { - this.useDefaultCredentialsSetExplicitly = true; - } - } - - public new string Url { - get { - return base.Url; - } - set { - if ((((this.IsLocalFileSystemWebService(base.Url) == true) - && (this.useDefaultCredentialsSetExplicitly == false)) - && (this.IsLocalFileSystemWebService(value) == false))) { - base.UseDefaultCredentials = false; - } - base.Url = value; - } - } - - public new bool UseDefaultCredentials { - get { - return base.UseDefaultCredentials; - } - set { - base.UseDefaultCredentials = value; - this.useDefaultCredentialsSetExplicitly = true; - } - } - - /// - public event OpenCompletedEventHandler OpenCompleted; - - /// - public event GetStatusCompletedEventHandler GetStatusCompleted; - - /// - public event GetBugReportCompletedEventHandler GetBugReportCompleted; - - /// - public event WriteCompletedEventHandler WriteCompleted; - - /// - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/Open", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public string Open() { - object[] results = this.Invoke("Open", new object[0]); - return ((string)(results[0])); - } - - /// - public void OpenAsync() { - this.OpenAsync(null); - } - - /// - public void OpenAsync(object userState) { - if ((this.OpenOperationCompleted == null)) { - this.OpenOperationCompleted = new System.Threading.SendOrPostCallback(this.OnOpenOperationCompleted); - } - this.InvokeAsync("Open", new object[0], this.OpenOperationCompleted, userState); - } - - private void OnOpenOperationCompleted(object arg) { - if ((this.OpenCompleted != null)) { - System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); - this.OpenCompleted(this, new OpenCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); - } - } - - /// - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetStatus", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public string GetStatus(string Handle) { - object[] results = this.Invoke("GetStatus", new object[] { - Handle}); - return ((string)(results[0])); - } - - /// - public void GetStatusAsync(string Handle) { - this.GetStatusAsync(Handle, null); - } - - /// - public void GetStatusAsync(string Handle, object userState) { - if ((this.GetStatusOperationCompleted == null)) { - this.GetStatusOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetStatusOperationCompleted); - } - this.InvokeAsync("GetStatus", new object[] { - Handle}, this.GetStatusOperationCompleted, userState); - } - - private void OnGetStatusOperationCompleted(object arg) { - if ((this.GetStatusCompleted != null)) { - System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); - this.GetStatusCompleted(this, new GetStatusCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); - } - } - - /// - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetBugReport", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public string GetBugReport(string Handle) { - object[] results = this.Invoke("GetBugReport", new object[] { - Handle}); - return ((string)(results[0])); - } - - /// - public void GetBugReportAsync(string Handle) { - this.GetBugReportAsync(Handle, null); - } - - /// - public void GetBugReportAsync(string Handle, object userState) { - if ((this.GetBugReportOperationCompleted == null)) { - this.GetBugReportOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetBugReportOperationCompleted); - } - this.InvokeAsync("GetBugReport", new object[] { - Handle}, this.GetBugReportOperationCompleted, userState); - } - - private void OnGetBugReportOperationCompleted(object arg) { - if ((this.GetBugReportCompleted != null)) { - System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); - this.GetBugReportCompleted(this, new GetBugReportCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); - } - } - - /// - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/Write", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public string Write(string Handle, string FileName, [System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")] byte[] buffer, int intLength) { - object[] results = this.Invoke("Write", new object[] { - Handle, - FileName, - buffer, - intLength}); - return ((string)(results[0])); - } - - /// - public void WriteAsync(string Handle, string FileName, byte[] buffer, int intLength) { - this.WriteAsync(Handle, FileName, buffer, intLength, null); - } - - /// - public void WriteAsync(string Handle, string FileName, byte[] buffer, int intLength, object userState) { - if ((this.WriteOperationCompleted == null)) { - this.WriteOperationCompleted = new System.Threading.SendOrPostCallback(this.OnWriteOperationCompleted); - } - this.InvokeAsync("Write", new object[] { - Handle, - FileName, - buffer, - intLength}, this.WriteOperationCompleted, userState); - } - - private void OnWriteOperationCompleted(object arg) { - if ((this.WriteCompleted != null)) { - System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); - this.WriteCompleted(this, new WriteCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); - } - } - - /// - public new void CancelAsync(object userState) { - base.CancelAsync(userState); - } - - private bool IsLocalFileSystemWebService(string url) { - if (((url == null) - || (url == string.Empty))) { - return false; - } - System.Uri wsUri = new System.Uri(url); - if (((wsUri.Port >= 1024) - && (string.Compare(wsUri.Host, "localHost", System.StringComparison.OrdinalIgnoreCase) == 0))) { - return true; - } - return false; - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] - public delegate void OpenCompletedEventHandler(object sender, OpenCompletedEventArgs e); - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class OpenCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { - - private object[] results; - - internal OpenCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) { - this.results = results; - } - - /// - public string Result { - get { - this.RaiseExceptionIfNecessary(); - return ((string)(this.results[0])); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] - public delegate void GetStatusCompletedEventHandler(object sender, GetStatusCompletedEventArgs e); - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class GetStatusCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { - - private object[] results; - - internal GetStatusCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) { - this.results = results; - } - - /// - public string Result { - get { - this.RaiseExceptionIfNecessary(); - return ((string)(this.results[0])); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] - public delegate void GetBugReportCompletedEventHandler(object sender, GetBugReportCompletedEventArgs e); - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class GetBugReportCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { - - private object[] results; - - internal GetBugReportCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) { - this.results = results; - } - - /// - public string Result { - get { - this.RaiseExceptionIfNecessary(); - return ((string)(this.results[0])); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] - public delegate void WriteCompletedEventHandler(object sender, WriteCompletedEventArgs e); - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class WriteCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { - - private object[] results; - - internal WriteCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) { - this.results = results; - } - - /// - public string Result { - get { - this.RaiseExceptionIfNecessary(); - return ((string)(this.results[0])); - } - } - } -} - +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.261 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +// +// This source code was auto-generated by Microsoft.VSDesigner, Version 4.0.30319.261. +// +#pragma warning disable 1591 + +namespace LSLEditor.org.lsleditor.www { + using System; + using System.Web.Services; + using System.Diagnostics; + using System.Web.Services.Protocols; + using System.ComponentModel; + using System.Xml.Serialization; + + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Web.Services.WebServiceBindingAttribute(Name="Service1Soap", Namespace="http://tempuri.org/")] + public partial class Service1 : System.Web.Services.Protocols.SoapHttpClientProtocol { + + private System.Threading.SendOrPostCallback OpenOperationCompleted; + + private System.Threading.SendOrPostCallback GetStatusOperationCompleted; + + private System.Threading.SendOrPostCallback GetBugReportOperationCompleted; + + private System.Threading.SendOrPostCallback WriteOperationCompleted; + + private bool useDefaultCredentialsSetExplicitly; + + /// + public Service1() { + this.Url = "http://www.lsleditor.org/UploadBugReport/Service1.asmx"; + if ((this.IsLocalFileSystemWebService(this.Url) == true)) { + this.UseDefaultCredentials = true; + this.useDefaultCredentialsSetExplicitly = false; + } + else { + this.useDefaultCredentialsSetExplicitly = true; + } + } + + public new string Url { + get { + return base.Url; + } + set { + if ((((this.IsLocalFileSystemWebService(base.Url) == true) + && (this.useDefaultCredentialsSetExplicitly == false)) + && (this.IsLocalFileSystemWebService(value) == false))) { + base.UseDefaultCredentials = false; + } + base.Url = value; + } + } + + public new bool UseDefaultCredentials { + get { + return base.UseDefaultCredentials; + } + set { + base.UseDefaultCredentials = value; + this.useDefaultCredentialsSetExplicitly = true; + } + } + + /// + public event OpenCompletedEventHandler OpenCompleted; + + /// + public event GetStatusCompletedEventHandler GetStatusCompleted; + + /// + public event GetBugReportCompletedEventHandler GetBugReportCompleted; + + /// + public event WriteCompletedEventHandler WriteCompleted; + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/Open", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public string Open() { + object[] results = this.Invoke("Open", new object[0]); + return ((string)(results[0])); + } + + /// + public void OpenAsync() { + this.OpenAsync(null); + } + + /// + public void OpenAsync(object userState) { + if ((this.OpenOperationCompleted == null)) { + this.OpenOperationCompleted = new System.Threading.SendOrPostCallback(this.OnOpenOperationCompleted); + } + this.InvokeAsync("Open", new object[0], this.OpenOperationCompleted, userState); + } + + private void OnOpenOperationCompleted(object arg) { + if ((this.OpenCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.OpenCompleted(this, new OpenCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetStatus", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public string GetStatus(string Handle) { + object[] results = this.Invoke("GetStatus", new object[] { + Handle}); + return ((string)(results[0])); + } + + /// + public void GetStatusAsync(string Handle) { + this.GetStatusAsync(Handle, null); + } + + /// + public void GetStatusAsync(string Handle, object userState) { + if ((this.GetStatusOperationCompleted == null)) { + this.GetStatusOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetStatusOperationCompleted); + } + this.InvokeAsync("GetStatus", new object[] { + Handle}, this.GetStatusOperationCompleted, userState); + } + + private void OnGetStatusOperationCompleted(object arg) { + if ((this.GetStatusCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetStatusCompleted(this, new GetStatusCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetBugReport", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public string GetBugReport(string Handle) { + object[] results = this.Invoke("GetBugReport", new object[] { + Handle}); + return ((string)(results[0])); + } + + /// + public void GetBugReportAsync(string Handle) { + this.GetBugReportAsync(Handle, null); + } + + /// + public void GetBugReportAsync(string Handle, object userState) { + if ((this.GetBugReportOperationCompleted == null)) { + this.GetBugReportOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetBugReportOperationCompleted); + } + this.InvokeAsync("GetBugReport", new object[] { + Handle}, this.GetBugReportOperationCompleted, userState); + } + + private void OnGetBugReportOperationCompleted(object arg) { + if ((this.GetBugReportCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetBugReportCompleted(this, new GetBugReportCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/Write", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public string Write(string Handle, string FileName, [System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")] byte[] buffer, int intLength) { + object[] results = this.Invoke("Write", new object[] { + Handle, + FileName, + buffer, + intLength}); + return ((string)(results[0])); + } + + /// + public void WriteAsync(string Handle, string FileName, byte[] buffer, int intLength) { + this.WriteAsync(Handle, FileName, buffer, intLength, null); + } + + /// + public void WriteAsync(string Handle, string FileName, byte[] buffer, int intLength, object userState) { + if ((this.WriteOperationCompleted == null)) { + this.WriteOperationCompleted = new System.Threading.SendOrPostCallback(this.OnWriteOperationCompleted); + } + this.InvokeAsync("Write", new object[] { + Handle, + FileName, + buffer, + intLength}, this.WriteOperationCompleted, userState); + } + + private void OnWriteOperationCompleted(object arg) { + if ((this.WriteCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.WriteCompleted(this, new WriteCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + public new void CancelAsync(object userState) { + base.CancelAsync(userState); + } + + private bool IsLocalFileSystemWebService(string url) { + if (((url == null) + || (url == string.Empty))) { + return false; + } + System.Uri wsUri = new System.Uri(url); + if (((wsUri.Port >= 1024) + && (string.Compare(wsUri.Host, "localHost", System.StringComparison.OrdinalIgnoreCase) == 0))) { + return true; + } + return false; + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] + public delegate void OpenCompletedEventHandler(object sender, OpenCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class OpenCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal OpenCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] + public delegate void GetStatusCompletedEventHandler(object sender, GetStatusCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetStatusCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetStatusCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] + public delegate void GetBugReportCompletedEventHandler(object sender, GetBugReportCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetBugReportCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetBugReportCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] + public delegate void WriteCompletedEventHandler(object sender, WriteCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class WriteCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal WriteCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } +} + #pragma warning restore 1591 \ No newline at end of file diff --git a/trunk/Web References/org.lsleditor.www/Reference.map b/source/Web References/org.lsleditor.www/Reference.map similarity index 99% rename from trunk/Web References/org.lsleditor.www/Reference.map rename to source/Web References/org.lsleditor.www/Reference.map index 7f86c16..054a2e0 100644 --- a/trunk/Web References/org.lsleditor.www/Reference.map +++ b/source/Web References/org.lsleditor.www/Reference.map @@ -1,7 +1,7 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/trunk/Web References/org.lsleditor.www/Service1.disco b/source/Web References/org.lsleditor.www/Service1.disco similarity index 99% rename from trunk/Web References/org.lsleditor.www/Service1.disco rename to source/Web References/org.lsleditor.www/Service1.disco index 9f967d0..bf34123 100644 --- a/trunk/Web References/org.lsleditor.www/Service1.disco +++ b/source/Web References/org.lsleditor.www/Service1.disco @@ -1,6 +1,6 @@ - - - - - + + + + + \ No newline at end of file diff --git a/trunk/Web References/org.lsleditor.www/Service1.wsdl b/source/Web References/org.lsleditor.www/Service1.wsdl similarity index 97% rename from trunk/Web References/org.lsleditor.www/Service1.wsdl rename to source/Web References/org.lsleditor.www/Service1.wsdl index 97d72f0..4475b75 100644 --- a/trunk/Web References/org.lsleditor.www/Service1.wsdl +++ b/source/Web References/org.lsleditor.www/Service1.wsdl @@ -1,190 +1,190 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/_MakeRelease.cmd b/source/_MakeRelease.cmd similarity index 97% rename from trunk/_MakeRelease.cmd rename to source/_MakeRelease.cmd index 7e14e2f..8c63325 100644 --- a/trunk/_MakeRelease.cmd +++ b/source/_MakeRelease.cmd @@ -1,12 +1,12 @@ -REM cd "C:\Documents and Settings\Alphons\Mijn documenten\Visual Studio 2005\Projects\LSLEditor\bin\Debug" -cd "bin\Debug" - -del d:\temp\LsLEditor.zip -del d:\temp\LsLEditor.exe.bz2 -del d:\temp\LsLEditor.exe.gz - -"c:\Program Files\7-Zip\7z" a -tzip d:\temp\LsLEditor.zip LsLEditor.exe -"c:\Program Files\7-Zip\7z" a -tbzip2 d:\temp\LsLEditor.exe.bz2 LsLEditor.exe -"c:\Program Files\7-Zip\7z" a -tgzip d:\temp\LsLEditor.exe.gz LsLEditor.exe - -pause +REM cd "C:\Documents and Settings\Alphons\Mijn documenten\Visual Studio 2005\Projects\LSLEditor\bin\Debug" +cd "bin\Debug" + +del d:\temp\LsLEditor.zip +del d:\temp\LsLEditor.exe.bz2 +del d:\temp\LsLEditor.exe.gz + +"c:\Program Files\7-Zip\7z" a -tzip d:\temp\LsLEditor.zip LsLEditor.exe +"c:\Program Files\7-Zip\7z" a -tbzip2 d:\temp\LsLEditor.exe.bz2 LsLEditor.exe +"c:\Program Files\7-Zip\7z" a -tgzip d:\temp\LsLEditor.exe.gz LsLEditor.exe + +pause diff --git a/trunk/app.config b/source/app.config similarity index 97% rename from trunk/app.config rename to source/app.config index c4a6b36..46cd4d2 100644 --- a/trunk/app.config +++ b/source/app.config @@ -1,322 +1,322 @@ - - - - -
- - -
- - - - - - SecondLife Name - - - False - - - - - - LSLEditor Island - - - smtp.emailserver.ext - - - youraddress@yourdomain.ext - - - - - - - - - - - - 0, 0 - - - 0, 0 - - - 0, 0 - - - http://www.lslwiki.net/lslwiki/wakka.php?wakka= - - - 0, 0 - - - 0, 0 - - - 25 - - - 0, 175 - - - 0, 0 - - - 254464, 255232 - - - True - - - False - - - False - - - False - - - 0, 0 - - - False - - - 224, 224, 224 - - - 175, 0 - - - True - - - 15 - - - True - - - True - - - False - - - 2010-01-01 - - - 15 - - - False - - - True - - - True - - - - - - - - - PLAIN - - - True - - - False - - - - - - - - - - - - False - - - False - - - True - - - False - - - False - - - False - - - False - - - True - - - True - - - False - - - - - - - - - - - - False - - - - - - Production - - - False - - - True - - - True - - - True - - - NoteCard.txt - - - False - - - False - - - LSLEditor parcel - - - Description of LSLEditor parcel - - - 00000000-0000-0000-0000-000000000000 - - - 00000000-0000-0000-0000-000000000000 - - - 512 - - - True - - - True - - - UTF-8 - - - - - - - Resource.ConfLSL.xml - - - new.lsl - - - ReleaseNotes.htm - - - About.htm - - - 4 - - - 100 - - - 60 - - - default.lsl - - - LSLEditorHelp.chm - - - - default - { - state_entry() - { - llSay(0, "Hello, Avatar!"); - } - touch_start(integer total_number) - { - llSay(0, "Touched: "+(string)total_number); - } - } - - - - http://www.lsleditor.org/examples/ - - - http://www.lsleditor.org/uploadscript/ - - - Resource.ConfCSharp.xml - - - Resource.ToolsOptions.xml - - - https://sourceforge.net/tracker/?group_id=319248 - - - http://www.lsleditor.org/donate.htm - - - http://wiki.secondlife.com/wiki/Special:Search?go=Go&search= - - - http://www.lslwiki.net/lslwiki/wakka.php?wakka= - - - https://sourceforge.net/projects/lsleditor/forums - - - http://metaversegames.net/questions/lsl - - - - - - - + + + + +
+ + +
+ + + + + + SecondLife Name + + + False + + + + + + LSLEditor Island + + + smtp.emailserver.ext + + + youraddress@yourdomain.ext + + + + + + + + + + + + 0, 0 + + + 0, 0 + + + 0, 0 + + + http://www.lslwiki.net/lslwiki/wakka.php?wakka= + + + 0, 0 + + + 0, 0 + + + 25 + + + 0, 175 + + + 0, 0 + + + 254464, 255232 + + + True + + + False + + + False + + + False + + + 0, 0 + + + False + + + 224, 224, 224 + + + 175, 0 + + + True + + + 15 + + + True + + + True + + + False + + + 2010-01-01 + + + 15 + + + False + + + True + + + True + + + + + + + + + PLAIN + + + True + + + False + + + + + + + + + + + + False + + + False + + + True + + + False + + + False + + + False + + + False + + + True + + + True + + + False + + + + + + + + + + + + False + + + + + + Production + + + False + + + True + + + True + + + True + + + NoteCard.txt + + + False + + + False + + + LSLEditor parcel + + + Description of LSLEditor parcel + + + 00000000-0000-0000-0000-000000000000 + + + 00000000-0000-0000-0000-000000000000 + + + 512 + + + True + + + True + + + UTF-8 + + + + + + + Resource.ConfLSL.xml + + + new.lsl + + + ReleaseNotes.htm + + + About.htm + + + 4 + + + 100 + + + 60 + + + default.lsl + + + LSLEditorHelp.chm + + + + default + { + state_entry() + { + llSay(0, "Hello, Avatar!"); + } + touch_start(integer total_number) + { + llSay(0, "Touched: "+(string)total_number); + } + } + + + + http://www.lsleditor.org/examples/ + + + http://www.lsleditor.org/uploadscript/ + + + Resource.ConfCSharp.xml + + + Resource.ToolsOptions.xml + + + https://sourceforge.net/tracker/?group_id=319248 + + + http://www.lsleditor.org/donate.htm + + + http://wiki.secondlife.com/wiki/Special:Search?go=Go&search= + + + http://www.lslwiki.net/lslwiki/wakka.php?wakka= + + + https://sourceforge.net/projects/lsleditor/forums + + + http://metaversegames.net/questions/lsl + + + + + + + diff --git a/trunk/gpl-2.0.txt b/source/gpl-2.0.txt similarity index 98% rename from trunk/gpl-2.0.txt rename to source/gpl-2.0.txt index 89e08fb..d159169 100644 --- a/trunk/gpl-2.0.txt +++ b/source/gpl-2.0.txt @@ -1,339 +1,339 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/trunk/llDialogForm.Designer.cs b/source/llDialogForm.Designer.cs similarity index 97% rename from trunk/llDialogForm.Designer.cs rename to source/llDialogForm.Designer.cs index 21bf249..294576e 100644 --- a/trunk/llDialogForm.Designer.cs +++ b/source/llDialogForm.Designer.cs @@ -1,288 +1,288 @@ -namespace LSLEditor -{ - partial class llDialogForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.button1 = new System.Windows.Forms.Button(); - this.button7 = new System.Windows.Forms.Button(); - this.button10 = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.button2 = new System.Windows.Forms.Button(); - this.button3 = new System.Windows.Forms.Button(); - this.button4 = new System.Windows.Forms.Button(); - this.button5 = new System.Windows.Forms.Button(); - this.button6 = new System.Windows.Forms.Button(); - this.button8 = new System.Windows.Forms.Button(); - this.button9 = new System.Windows.Forms.Button(); - this.button11 = new System.Windows.Forms.Button(); - this.button12 = new System.Windows.Forms.Button(); - this.button13 = new System.Windows.Forms.Button(); - this.panel1 = new System.Windows.Forms.Panel(); - this.panel1.SuspendLayout(); - this.SuspendLayout(); - // - // button1 - // - this.button1.BackColor = System.Drawing.Color.SlateBlue; - this.button1.ForeColor = System.Drawing.Color.White; - this.button1.Location = new System.Drawing.Point(16, 232); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(80, 23); - this.button1.TabIndex = 0; - this.button1.Text = "button1"; - this.button1.UseVisualStyleBackColor = false; - this.button1.Visible = false; - // - // button7 - // - this.button7.BackColor = System.Drawing.Color.SlateBlue; - this.button7.ForeColor = System.Drawing.Color.White; - this.button7.Location = new System.Drawing.Point(16, 184); - this.button7.Name = "button7"; - this.button7.Size = new System.Drawing.Size(80, 23); - this.button7.TabIndex = 6; - this.button7.Text = "button7"; - this.button7.UseVisualStyleBackColor = false; - this.button7.Visible = false; - // - // button10 - // - this.button10.BackColor = System.Drawing.Color.SlateBlue; - this.button10.ForeColor = System.Drawing.Color.White; - this.button10.Location = new System.Drawing.Point(16, 160); - this.button10.Name = "button10"; - this.button10.Size = new System.Drawing.Size(80, 23); - this.button10.TabIndex = 9; - this.button10.Text = "button10"; - this.button10.UseVisualStyleBackColor = false; - this.button10.Visible = false; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(8, 8); - this.label1.MaximumSize = new System.Drawing.Size(260, 0); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(35, 13); - this.label1.TabIndex = 13; - this.label1.Text = "label1"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(8, 64); - this.label2.MaximumSize = new System.Drawing.Size(260, 0); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(35, 13); - this.label2.TabIndex = 14; - this.label2.Text = "label2"; - // - // button2 - // - this.button2.BackColor = System.Drawing.Color.SlateBlue; - this.button2.ForeColor = System.Drawing.Color.White; - this.button2.Location = new System.Drawing.Point(104, 232); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(80, 23); - this.button2.TabIndex = 15; - this.button2.Text = "button2"; - this.button2.UseVisualStyleBackColor = false; - this.button2.Visible = false; - // - // button3 - // - this.button3.BackColor = System.Drawing.Color.SlateBlue; - this.button3.ForeColor = System.Drawing.Color.White; - this.button3.Location = new System.Drawing.Point(192, 232); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(80, 23); - this.button3.TabIndex = 16; - this.button3.Text = "button3"; - this.button3.UseVisualStyleBackColor = false; - this.button3.Visible = false; - // - // button4 - // - this.button4.BackColor = System.Drawing.Color.SlateBlue; - this.button4.ForeColor = System.Drawing.Color.White; - this.button4.Location = new System.Drawing.Point(16, 208); - this.button4.Name = "button4"; - this.button4.Size = new System.Drawing.Size(80, 23); - this.button4.TabIndex = 17; - this.button4.Text = "button4"; - this.button4.UseVisualStyleBackColor = false; - this.button4.Visible = false; - // - // button5 - // - this.button5.BackColor = System.Drawing.Color.SlateBlue; - this.button5.ForeColor = System.Drawing.Color.White; - this.button5.Location = new System.Drawing.Point(104, 208); - this.button5.Name = "button5"; - this.button5.Size = new System.Drawing.Size(80, 23); - this.button5.TabIndex = 18; - this.button5.Text = "button5"; - this.button5.UseVisualStyleBackColor = false; - this.button5.Visible = false; - // - // button6 - // - this.button6.BackColor = System.Drawing.Color.SlateBlue; - this.button6.ForeColor = System.Drawing.Color.White; - this.button6.Location = new System.Drawing.Point(192, 208); - this.button6.Name = "button6"; - this.button6.Size = new System.Drawing.Size(80, 23); - this.button6.TabIndex = 19; - this.button6.Text = "button6"; - this.button6.UseVisualStyleBackColor = false; - this.button6.Visible = false; - // - // button8 - // - this.button8.BackColor = System.Drawing.Color.SlateBlue; - this.button8.ForeColor = System.Drawing.Color.White; - this.button8.Location = new System.Drawing.Point(104, 184); - this.button8.Name = "button8"; - this.button8.Size = new System.Drawing.Size(80, 23); - this.button8.TabIndex = 20; - this.button8.Text = "button8"; - this.button8.UseVisualStyleBackColor = false; - this.button8.Visible = false; - // - // button9 - // - this.button9.BackColor = System.Drawing.Color.SlateBlue; - this.button9.ForeColor = System.Drawing.Color.White; - this.button9.Location = new System.Drawing.Point(192, 184); - this.button9.Name = "button9"; - this.button9.Size = new System.Drawing.Size(80, 23); - this.button9.TabIndex = 21; - this.button9.Text = "button9"; - this.button9.UseVisualStyleBackColor = false; - this.button9.Visible = false; - // - // button11 - // - this.button11.BackColor = System.Drawing.Color.SlateBlue; - this.button11.ForeColor = System.Drawing.Color.White; - this.button11.Location = new System.Drawing.Point(104, 160); - this.button11.Name = "button11"; - this.button11.Size = new System.Drawing.Size(80, 23); - this.button11.TabIndex = 22; - this.button11.Text = "button11"; - this.button11.UseVisualStyleBackColor = false; - this.button11.Visible = false; - // - // button12 - // - this.button12.BackColor = System.Drawing.Color.SlateBlue; - this.button12.ForeColor = System.Drawing.Color.White; - this.button12.Location = new System.Drawing.Point(192, 160); - this.button12.Name = "button12"; - this.button12.Size = new System.Drawing.Size(80, 23); - this.button12.TabIndex = 23; - this.button12.Text = "button12"; - this.button12.UseVisualStyleBackColor = false; - this.button12.Visible = false; - // - // button13 - // - this.button13.BackColor = System.Drawing.Color.SlateBlue; - this.button13.ForeColor = System.Drawing.Color.White; - this.button13.Location = new System.Drawing.Point(192, 264); - this.button13.Name = "button13"; - this.button13.Size = new System.Drawing.Size(80, 23); - this.button13.TabIndex = 24; - this.button13.Text = "Ignore"; - this.button13.UseVisualStyleBackColor = false; - this.button13.Click += new System.EventHandler(this.button13_Click); - // - // panel1 - // - this.panel1.AutoScroll = true; - this.panel1.Controls.Add(this.label2); - this.panel1.Controls.Add(this.label1); - this.panel1.Location = new System.Drawing.Point(16, 8); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(264, 144); - this.panel1.TabIndex = 25; - // - // llDialogForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.Color.CornflowerBlue; - this.ClientSize = new System.Drawing.Size(290, 300); - this.Controls.Add(this.panel1); - this.Controls.Add(this.button13); - this.Controls.Add(this.button12); - this.Controls.Add(this.button11); - this.Controls.Add(this.button9); - this.Controls.Add(this.button8); - this.Controls.Add(this.button6); - this.Controls.Add(this.button5); - this.Controls.Add(this.button4); - this.Controls.Add(this.button3); - this.Controls.Add(this.button2); - this.Controls.Add(this.button10); - this.Controls.Add(this.button7); - this.Controls.Add(this.button1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "llDialogForm"; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; - this.Text = "llDialogForm"; - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button7; - private System.Windows.Forms.Button button10; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Button button3; - private System.Windows.Forms.Button button4; - private System.Windows.Forms.Button button5; - private System.Windows.Forms.Button button6; - private System.Windows.Forms.Button button8; - private System.Windows.Forms.Button button9; - private System.Windows.Forms.Button button11; - private System.Windows.Forms.Button button12; - private System.Windows.Forms.Button button13; - private System.Windows.Forms.Panel panel1; - } +namespace LSLEditor +{ + partial class llDialogForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.button1 = new System.Windows.Forms.Button(); + this.button7 = new System.Windows.Forms.Button(); + this.button10 = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.button6 = new System.Windows.Forms.Button(); + this.button8 = new System.Windows.Forms.Button(); + this.button9 = new System.Windows.Forms.Button(); + this.button11 = new System.Windows.Forms.Button(); + this.button12 = new System.Windows.Forms.Button(); + this.button13 = new System.Windows.Forms.Button(); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // button1 + // + this.button1.BackColor = System.Drawing.Color.SlateBlue; + this.button1.ForeColor = System.Drawing.Color.White; + this.button1.Location = new System.Drawing.Point(16, 232); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(80, 23); + this.button1.TabIndex = 0; + this.button1.Text = "button1"; + this.button1.UseVisualStyleBackColor = false; + this.button1.Visible = false; + // + // button7 + // + this.button7.BackColor = System.Drawing.Color.SlateBlue; + this.button7.ForeColor = System.Drawing.Color.White; + this.button7.Location = new System.Drawing.Point(16, 184); + this.button7.Name = "button7"; + this.button7.Size = new System.Drawing.Size(80, 23); + this.button7.TabIndex = 6; + this.button7.Text = "button7"; + this.button7.UseVisualStyleBackColor = false; + this.button7.Visible = false; + // + // button10 + // + this.button10.BackColor = System.Drawing.Color.SlateBlue; + this.button10.ForeColor = System.Drawing.Color.White; + this.button10.Location = new System.Drawing.Point(16, 160); + this.button10.Name = "button10"; + this.button10.Size = new System.Drawing.Size(80, 23); + this.button10.TabIndex = 9; + this.button10.Text = "button10"; + this.button10.UseVisualStyleBackColor = false; + this.button10.Visible = false; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(8, 8); + this.label1.MaximumSize = new System.Drawing.Size(260, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(35, 13); + this.label1.TabIndex = 13; + this.label1.Text = "label1"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(8, 64); + this.label2.MaximumSize = new System.Drawing.Size(260, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(35, 13); + this.label2.TabIndex = 14; + this.label2.Text = "label2"; + // + // button2 + // + this.button2.BackColor = System.Drawing.Color.SlateBlue; + this.button2.ForeColor = System.Drawing.Color.White; + this.button2.Location = new System.Drawing.Point(104, 232); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(80, 23); + this.button2.TabIndex = 15; + this.button2.Text = "button2"; + this.button2.UseVisualStyleBackColor = false; + this.button2.Visible = false; + // + // button3 + // + this.button3.BackColor = System.Drawing.Color.SlateBlue; + this.button3.ForeColor = System.Drawing.Color.White; + this.button3.Location = new System.Drawing.Point(192, 232); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(80, 23); + this.button3.TabIndex = 16; + this.button3.Text = "button3"; + this.button3.UseVisualStyleBackColor = false; + this.button3.Visible = false; + // + // button4 + // + this.button4.BackColor = System.Drawing.Color.SlateBlue; + this.button4.ForeColor = System.Drawing.Color.White; + this.button4.Location = new System.Drawing.Point(16, 208); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(80, 23); + this.button4.TabIndex = 17; + this.button4.Text = "button4"; + this.button4.UseVisualStyleBackColor = false; + this.button4.Visible = false; + // + // button5 + // + this.button5.BackColor = System.Drawing.Color.SlateBlue; + this.button5.ForeColor = System.Drawing.Color.White; + this.button5.Location = new System.Drawing.Point(104, 208); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(80, 23); + this.button5.TabIndex = 18; + this.button5.Text = "button5"; + this.button5.UseVisualStyleBackColor = false; + this.button5.Visible = false; + // + // button6 + // + this.button6.BackColor = System.Drawing.Color.SlateBlue; + this.button6.ForeColor = System.Drawing.Color.White; + this.button6.Location = new System.Drawing.Point(192, 208); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(80, 23); + this.button6.TabIndex = 19; + this.button6.Text = "button6"; + this.button6.UseVisualStyleBackColor = false; + this.button6.Visible = false; + // + // button8 + // + this.button8.BackColor = System.Drawing.Color.SlateBlue; + this.button8.ForeColor = System.Drawing.Color.White; + this.button8.Location = new System.Drawing.Point(104, 184); + this.button8.Name = "button8"; + this.button8.Size = new System.Drawing.Size(80, 23); + this.button8.TabIndex = 20; + this.button8.Text = "button8"; + this.button8.UseVisualStyleBackColor = false; + this.button8.Visible = false; + // + // button9 + // + this.button9.BackColor = System.Drawing.Color.SlateBlue; + this.button9.ForeColor = System.Drawing.Color.White; + this.button9.Location = new System.Drawing.Point(192, 184); + this.button9.Name = "button9"; + this.button9.Size = new System.Drawing.Size(80, 23); + this.button9.TabIndex = 21; + this.button9.Text = "button9"; + this.button9.UseVisualStyleBackColor = false; + this.button9.Visible = false; + // + // button11 + // + this.button11.BackColor = System.Drawing.Color.SlateBlue; + this.button11.ForeColor = System.Drawing.Color.White; + this.button11.Location = new System.Drawing.Point(104, 160); + this.button11.Name = "button11"; + this.button11.Size = new System.Drawing.Size(80, 23); + this.button11.TabIndex = 22; + this.button11.Text = "button11"; + this.button11.UseVisualStyleBackColor = false; + this.button11.Visible = false; + // + // button12 + // + this.button12.BackColor = System.Drawing.Color.SlateBlue; + this.button12.ForeColor = System.Drawing.Color.White; + this.button12.Location = new System.Drawing.Point(192, 160); + this.button12.Name = "button12"; + this.button12.Size = new System.Drawing.Size(80, 23); + this.button12.TabIndex = 23; + this.button12.Text = "button12"; + this.button12.UseVisualStyleBackColor = false; + this.button12.Visible = false; + // + // button13 + // + this.button13.BackColor = System.Drawing.Color.SlateBlue; + this.button13.ForeColor = System.Drawing.Color.White; + this.button13.Location = new System.Drawing.Point(192, 264); + this.button13.Name = "button13"; + this.button13.Size = new System.Drawing.Size(80, 23); + this.button13.TabIndex = 24; + this.button13.Text = "Ignore"; + this.button13.UseVisualStyleBackColor = false; + this.button13.Click += new System.EventHandler(this.button13_Click); + // + // panel1 + // + this.panel1.AutoScroll = true; + this.panel1.Controls.Add(this.label2); + this.panel1.Controls.Add(this.label1); + this.panel1.Location = new System.Drawing.Point(16, 8); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(264, 144); + this.panel1.TabIndex = 25; + // + // llDialogForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.CornflowerBlue; + this.ClientSize = new System.Drawing.Size(290, 300); + this.Controls.Add(this.panel1); + this.Controls.Add(this.button13); + this.Controls.Add(this.button12); + this.Controls.Add(this.button11); + this.Controls.Add(this.button9); + this.Controls.Add(this.button8); + this.Controls.Add(this.button6); + this.Controls.Add(this.button5); + this.Controls.Add(this.button4); + this.Controls.Add(this.button3); + this.Controls.Add(this.button2); + this.Controls.Add(this.button10); + this.Controls.Add(this.button7); + this.Controls.Add(this.button1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "llDialogForm"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Text = "llDialogForm"; + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button7; + private System.Windows.Forms.Button button10; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button button6; + private System.Windows.Forms.Button button8; + private System.Windows.Forms.Button button9; + private System.Windows.Forms.Button button11; + private System.Windows.Forms.Button button12; + private System.Windows.Forms.Button button13; + private System.Windows.Forms.Panel panel1; + } } \ No newline at end of file diff --git a/trunk/llDialogForm.cs b/source/llDialogForm.cs similarity index 97% rename from trunk/llDialogForm.cs rename to source/llDialogForm.cs index b1e60df..874b76e 100644 --- a/trunk/llDialogForm.cs +++ b/source/llDialogForm.cs @@ -1,99 +1,99 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -using System; -using System.Collections; -using System.ComponentModel; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace LSLEditor -{ - public partial class llDialogForm : Form - { - private SecondLifeHost host; - private int Channel; - private string ObjectName; - private string OwnerName; - private SecondLife.key id; - - public llDialogForm(SecondLifeHost host, SecondLife.String strObjectName, SecondLife.key id, SecondLife.String strOwner, SecondLife.String strMessage, SecondLife.list buttons, SecondLife.integer intChannel) - { - InitializeComponent(); - - this.host = host; - this.Channel = intChannel; - this.OwnerName = strOwner; - this.ObjectName = strObjectName; - this.id = id; - - for (int intI = 1; intI <= 12; intI++) { - Button button = this.Controls["Button" + intI] as Button; - button.Visible = false; - } - - this.label1.Text = strOwner + "'s '" + strObjectName + "'"; - this.label2.Text = strMessage.ToString().Replace("&", "&&"); - - for (int intI = 1; intI <= buttons.Count; intI++) { - Button button = this.Controls["Button" + intI] as Button; - if (button == null) - continue; - button.Text = buttons[intI - 1].ToString().Replace("&", "&&"); - button.Visible = true; - button.Click += new EventHandler(button_Click); - } - } - - void button_Click(object sender, EventArgs e) - { - Button button = sender as Button; - if (button != null) { - host.Chat(this, this.Channel, this.OwnerName, this.id, button.Text.Replace("&&", "&"), CommunicationType.Say); - this.Close(); - } - } - - private void button13_Click(object sender, EventArgs e) - { - this.Close(); - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +using System; +using System.Collections; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace LSLEditor +{ + public partial class llDialogForm : Form + { + private SecondLifeHost host; + private int Channel; + private string ObjectName; + private string OwnerName; + private SecondLife.key id; + + public llDialogForm(SecondLifeHost host, SecondLife.String strObjectName, SecondLife.key id, SecondLife.String strOwner, SecondLife.String strMessage, SecondLife.list buttons, SecondLife.integer intChannel) + { + InitializeComponent(); + + this.host = host; + this.Channel = intChannel; + this.OwnerName = strOwner; + this.ObjectName = strObjectName; + this.id = id; + + for (int intI = 1; intI <= 12; intI++) { + Button button = this.Controls["Button" + intI] as Button; + button.Visible = false; + } + + this.label1.Text = strOwner + "'s '" + strObjectName + "'"; + this.label2.Text = strMessage.ToString().Replace("&", "&&"); + + for (int intI = 1; intI <= buttons.Count; intI++) { + Button button = this.Controls["Button" + intI] as Button; + if (button == null) + continue; + button.Text = buttons[intI - 1].ToString().Replace("&", "&&"); + button.Visible = true; + button.Click += new EventHandler(button_Click); + } + } + + void button_Click(object sender, EventArgs e) + { + Button button = sender as Button; + if (button != null) { + host.Chat(this, this.Channel, this.OwnerName, this.id, button.Text.Replace("&&", "&"), CommunicationType.Say); + this.Close(); + } + } + + private void button13_Click(object sender, EventArgs e) + { + this.Close(); + } + } +} diff --git a/trunk/llDialogForm.resx b/source/llDialogForm.resx similarity index 97% rename from trunk/llDialogForm.resx rename to source/llDialogForm.resx index ff31a6d..19dc0dd 100644 --- a/trunk/llDialogForm.resx +++ b/source/llDialogForm.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/trunk/llTextBoxForm.Designer.cs b/source/llTextBoxForm.Designer.cs similarity index 97% rename from trunk/llTextBoxForm.Designer.cs rename to source/llTextBoxForm.Designer.cs index d1f1d05..0ad662b 100644 --- a/trunk/llTextBoxForm.Designer.cs +++ b/source/llTextBoxForm.Designer.cs @@ -1,116 +1,116 @@ -namespace LSLEditor -{ - partial class llTextBoxForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.buttonIgnore = new System.Windows.Forms.Button(); - this.buttonOK = new System.Windows.Forms.Button(); - this.textBox = new System.Windows.Forms.TextBox(); - this.panel1 = new System.Windows.Forms.Panel(); - this.label1 = new System.Windows.Forms.Label(); - this.panel1.SuspendLayout(); - this.SuspendLayout(); - // - // buttonIgnore - // - this.buttonIgnore.Location = new System.Drawing.Point(197, 129); - this.buttonIgnore.Name = "buttonIgnore"; - this.buttonIgnore.Size = new System.Drawing.Size(75, 23); - this.buttonIgnore.TabIndex = 0; - this.buttonIgnore.Text = "Ignore"; - this.buttonIgnore.UseVisualStyleBackColor = true; - this.buttonIgnore.Click += new System.EventHandler(this.buttonIgnore_Click); - // - // buttonOK - // - this.buttonOK.Location = new System.Drawing.Point(12, 129); - this.buttonOK.Name = "buttonOK"; - this.buttonOK.Size = new System.Drawing.Size(75, 23); - this.buttonOK.TabIndex = 1; - this.buttonOK.Text = "OK"; - this.buttonOK.UseVisualStyleBackColor = true; - this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); - // - // textBox - // - this.textBox.Location = new System.Drawing.Point(12, 103); - this.textBox.Name = "textBox"; - this.textBox.Size = new System.Drawing.Size(260, 20); - this.textBox.TabIndex = 2; - // - // panel1 - // - this.panel1.AutoScroll = true; - this.panel1.Controls.Add(this.label1); - this.panel1.Location = new System.Drawing.Point(13, 13); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(259, 84); - this.panel1.TabIndex = 3; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(4, 4); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(35, 13); - this.label1.TabIndex = 0; - this.label1.Text = "label1"; - // - // llTextBoxForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.Color.CornflowerBlue; - this.ClientSize = new System.Drawing.Size(284, 164); - this.Controls.Add(this.panel1); - this.Controls.Add(this.textBox); - this.Controls.Add(this.buttonOK); - this.Controls.Add(this.buttonIgnore); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "llTextBoxForm"; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; - this.Text = "llTextBoxForm"; - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button buttonIgnore; - private System.Windows.Forms.Button buttonOK; - private System.Windows.Forms.TextBox textBox; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Label label1; - } +namespace LSLEditor +{ + partial class llTextBoxForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.buttonIgnore = new System.Windows.Forms.Button(); + this.buttonOK = new System.Windows.Forms.Button(); + this.textBox = new System.Windows.Forms.TextBox(); + this.panel1 = new System.Windows.Forms.Panel(); + this.label1 = new System.Windows.Forms.Label(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // buttonIgnore + // + this.buttonIgnore.Location = new System.Drawing.Point(197, 129); + this.buttonIgnore.Name = "buttonIgnore"; + this.buttonIgnore.Size = new System.Drawing.Size(75, 23); + this.buttonIgnore.TabIndex = 0; + this.buttonIgnore.Text = "Ignore"; + this.buttonIgnore.UseVisualStyleBackColor = true; + this.buttonIgnore.Click += new System.EventHandler(this.buttonIgnore_Click); + // + // buttonOK + // + this.buttonOK.Location = new System.Drawing.Point(12, 129); + this.buttonOK.Name = "buttonOK"; + this.buttonOK.Size = new System.Drawing.Size(75, 23); + this.buttonOK.TabIndex = 1; + this.buttonOK.Text = "OK"; + this.buttonOK.UseVisualStyleBackColor = true; + this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); + // + // textBox + // + this.textBox.Location = new System.Drawing.Point(12, 103); + this.textBox.Name = "textBox"; + this.textBox.Size = new System.Drawing.Size(260, 20); + this.textBox.TabIndex = 2; + // + // panel1 + // + this.panel1.AutoScroll = true; + this.panel1.Controls.Add(this.label1); + this.panel1.Location = new System.Drawing.Point(13, 13); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(259, 84); + this.panel1.TabIndex = 3; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(4, 4); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(35, 13); + this.label1.TabIndex = 0; + this.label1.Text = "label1"; + // + // llTextBoxForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.CornflowerBlue; + this.ClientSize = new System.Drawing.Size(284, 164); + this.Controls.Add(this.panel1); + this.Controls.Add(this.textBox); + this.Controls.Add(this.buttonOK); + this.Controls.Add(this.buttonIgnore); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "llTextBoxForm"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Text = "llTextBoxForm"; + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button buttonIgnore; + private System.Windows.Forms.Button buttonOK; + private System.Windows.Forms.TextBox textBox; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label label1; + } } \ No newline at end of file diff --git a/trunk/llTextBoxForm.cs b/source/llTextBoxForm.cs similarity index 97% rename from trunk/llTextBoxForm.cs rename to source/llTextBoxForm.cs index 625eeb6..437c79d 100644 --- a/trunk/llTextBoxForm.cs +++ b/source/llTextBoxForm.cs @@ -1,89 +1,89 @@ -// -// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. -// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & -// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. -// -// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work -// the community would be stuck with crappy editors. -// -// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU -// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other -// License"), formally executed by you and The LSLEditor Group. -// Terms of the GPL can be found in the gplv2.txt document. -// -// GPLv2 Header -// ************ -// LSLEditor, a External editor for the LSL Language. -// Copyright (C) 2010 The LSLEditor Group. -// -// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any -// later version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// ******************************************************************************************************************** -// The above copyright notice and this permission notice shall be included in copies or substantial portions of the -// Software. -// ******************************************************************************************************************** -// -// -// -// -// -// - -/* - * @author MrSoundless - * @date 29 April 2011 - */ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace LSLEditor -{ - public partial class llTextBoxForm : Form - { - private SecondLifeHost host; - private int Channel; - private string ObjectName; - private string OwnerName; - private SecondLife.key id; - - public llTextBoxForm(SecondLifeHost host, SecondLife.String strObjectName, SecondLife.key id, SecondLife.String strOwner, SecondLife.String strMessage, SecondLife.integer intChannel) - { - InitializeComponent(); - - this.host = host; - this.Channel = intChannel; - this.OwnerName = strOwner; - this.ObjectName = strObjectName; - this.id = id; - - this.label1.Text = strMessage.ToString().Replace("&", "&&"); - } - - private void buttonIgnore_Click(object sender, EventArgs e) - { - this.Close(); - } - - private void buttonOK_Click(object sender, EventArgs e) - { - Button button = sender as Button; - if (button != null) { - host.Chat(this, this.Channel, this.OwnerName, this.id, textBox.Text.Replace("&&", "&"), CommunicationType.Say); - this.Close(); - } - } - } -} +// +// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden. +// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands & +// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes. +// +// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work +// the community would be stuck with crappy editors. +// +// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU +// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other +// License"), formally executed by you and The LSLEditor Group. +// Terms of the GPL can be found in the gplv2.txt document. +// +// GPLv2 Header +// ************ +// LSLEditor, a External editor for the LSL Language. +// Copyright (C) 2010 The LSLEditor Group. +// +// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// ******************************************************************************************************************** +// The above copyright notice and this permission notice shall be included in copies or substantial portions of the +// Software. +// ******************************************************************************************************************** +// +// +// +// +// +// + +/* + * @author MrSoundless + * @date 29 April 2011 + */ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace LSLEditor +{ + public partial class llTextBoxForm : Form + { + private SecondLifeHost host; + private int Channel; + private string ObjectName; + private string OwnerName; + private SecondLife.key id; + + public llTextBoxForm(SecondLifeHost host, SecondLife.String strObjectName, SecondLife.key id, SecondLife.String strOwner, SecondLife.String strMessage, SecondLife.integer intChannel) + { + InitializeComponent(); + + this.host = host; + this.Channel = intChannel; + this.OwnerName = strOwner; + this.ObjectName = strObjectName; + this.id = id; + + this.label1.Text = strMessage.ToString().Replace("&", "&&"); + } + + private void buttonIgnore_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void buttonOK_Click(object sender, EventArgs e) + { + Button button = sender as Button; + if (button != null) { + host.Chat(this, this.Channel, this.OwnerName, this.id, textBox.Text.Replace("&&", "&"), CommunicationType.Say); + this.Close(); + } + } + } +} diff --git a/trunk/llTextBoxForm.resx b/source/llTextBoxForm.resx similarity index 97% rename from trunk/llTextBoxForm.resx rename to source/llTextBoxForm.resx index 5ea0895..7080a7d 100644 --- a/trunk/llTextBoxForm.resx +++ b/source/llTextBoxForm.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/trunk/lsleditor.csproj b/source/lsleditor.csproj similarity index 97% rename from trunk/lsleditor.csproj rename to source/lsleditor.csproj index e55d6c5..3503e44 100644 --- a/trunk/lsleditor.csproj +++ b/source/lsleditor.csproj @@ -1,1153 +1,1153 @@ - - - - Local - 9.0.21022 - 2.0 - {59468D25-6E68-4113-B740-C6EF4695045B} - Debug - AnyCPU - - - - - LSLEditor - - - JScript - Grid - IE50 - false - WinExe - LSLEditor - OnBuildSuccess - LSLEditor.LSLEditorForm - - - - - false - C:\Users\User\Desktop\Workspace_Jasper\LSL_editor\lsleditor-code\trunk\LSLEditor.RES - 3.5 - false - v3.5 - - C:\Users\User\Desktop\Workspace_Jasper\LSL_editor\Published LSLEditor\ - true - Disk - false - Foreground - 7 - Days - false - false - true - true - 10 - 1.0.0.%2a - false - true - true - - - ..\bin\Debug\ - false - 285212672 - false - - - DEBUG;TRACE - - - true - 4096 - false - - - false - false - false - false - 4 - full - prompt - AllRules.ruleset - - - ..\bin\Release\ - false - 285212672 - false - - - TRACE - ..\lsl-editor-doc.xml - false - 4096 - false - - - true - false - false - false - 4 - none - prompt - AllRules.ruleset - - - true - - - 1470C84604ABCC1DEEC1ABA38969E80F821AA855 - - - true - - - lsleditor_TemporaryKey.pfx - - - true - - - - packages\Newtonsoft.Json.10.0.3\lib\net35\Newtonsoft.Json.dll - - - System - - - - - System.Drawing - - - - - System.Windows.Forms - - - System.XML - - - - - Form - - - About.cs - false - - - Form - true - - - BugReportForm.cs - true - - - true - - - true - - - true - - - true - - - true - - - Component - true - - - true - - - Form - true - - - true - - - true - - - true - - - true - - - UserControl - true - - - UserControl - true - - - Component - true - - - true - - - Component - true - - - true - - - Component - true - - - Component - true - - - Component - true - - - Component - true - - - Component - true - - - Component - true - - - true - - - true - - - Component - true - - - Component - true - - - Component - true - - - true - - - Form - true - - - Component - true - - - true - - - Form - true - - - true - - - true - - - true - - - true - - - true - - - Component - true - - - true - - - true - - - true - - - true - - - true - - - true - - - Component - true - - - true - - - true - - - Component - true - - - Component - true - - - Component - true - - - true - - - true - - - true - - - - true - - - true - - - true - - - - true - - - - true - - - true - - - true - - - Form - true - - - llTextBoxForm.cs - true - - - true - - - true - - - - - - - Form - true - - - GuidProperty.cs - true - - - true - - - true - - - true - - - true - - - true - - - true - - - true - - - true - - - true - - - Form - true - - - NewProject.cs - true - - - Form - true - - - PermissionsForm.cs - true - - - Form - true - - - GotoWindow.cs - true - - - UserControl - true - - - Numbered.cs - true - - - Form - true - - - TooltipWindow.cs - true - - - Component - true - - - GListBox.cs - true - - - Form - true - - - GListBoxWindow.cs - true - - - UserControl - true - - - RichLabel.cs - true - - - Form - true - - - llDialogForm.cs - true - - - true - - - true - - - Form - true - - - Browser.cs - true - - - true - - - Form - true - - - EditForm.cs - true - - - Form - true - - - FindWindow.cs - true - - - Form - true - - - LSLEditorForm.cs - true - - - True - True - Resources.resx - true - - - True - True - Settings.settings - true - - - true - - - Component - true - - - true - - - UserControl - true - - - NumberedTextBoxUC.cs - true - - - UserControl - true - - - RuntimeConsole.cs - true - - - - Code - true - - - - true - - - true - - - true - - - true - - - true - - - true - - - Component - true - - - Code - true - - - Designer - About.cs - - - Code - false - - - Component - true - - - TabControlExtended.cs - true - - - Form - true - - - SimulatorConsole.cs - true - - - Form - true - - - SolutionExplorer.cs - true - - - Form - true - - - SvnAguments.cs - true - - - true - - - true - - - Form - true - - - SyntaxError.cs - true - - - UserControl - true - - - EnvironmentPlugins.cs - true - - - UserControl - - - IncludeExportSettings.cs - - - UserControl - - - ProjectIncludes.cs - - - UserControl - true - - - RuntimeGeneral.cs - true - - - UserControl - true - - - TextEditorCodeCompletion.cs - true - - - UserControl - true - - - EnvironmentBrowser.cs - true - - - UserControl - true - - - ProjectSettings.cs - true - - - UserControl - true - - - RuntimeInternal.cs - true - - - UserControl - true - - - RuntimeSmtp.cs - true - - - UserControl - true - - - RuntimeExternal.cs - true - - - UserControl - true - - - EnvironmentGeneral.cs - true - - - UserControl - true - - - TextEditorFontColors.cs - true - - - UserControl - true - - - EnvironmentHelp.cs - true - - - UserControl - true - - - TextEditorGeneral.cs - true - - - Form - true - - - ToolsOptions.cs - true - - - UserControl - true - - - VersionControlGeneral.cs - true - - - Form - true - - - ToolWindow.cs - true - - - Form - true - - - UpdateApplicationForm.cs - true - - - True - True - Reference.map - true - - - Designer - Browser.cs - - - Designer - BugReportForm.cs - - - Designer - - - Designer - - - llTextBoxForm.cs - - - Designer - GuidProperty.cs - - - Designer - NewProject.cs - - - PermissionsForm.cs - Designer - - - GotoWindow.cs - Designer - - - Designer - EditForm.cs - - - TooltipWindow.cs - Designer - - - GListBoxWindow.cs - Designer - - - Designer - RichLabel.cs - - - Designer - FindWindow.cs - - - Designer - llDialogForm.cs - - - Designer - LSLEditorForm.cs - - - Designer - ResXFileCodeGenerator - Resources.Designer.cs - - - NumberedTextBoxUC.cs - Designer - - - Designer - - - - GroupboxEvent.cs - Designer - - - - - - - - - - - - Designer - RuntimeConsole.cs - - - SyntaxRichTextBox.cs - Designer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Designer - - - - - - - - Designer - - - Designer - SimulatorConsole.cs - - - SolutionExplorer.cs - Designer - - - Designer - SvnAguments.cs - - - Designer - SyntaxError.cs - - - Designer - EnvironmentPlugins.cs - - - IncludeExportSettings.cs - - - ProjectIncludes.cs - - - RuntimeGeneral.cs - Designer - - - TextEditorCodeCompletion.cs - Designer - - - Designer - EnvironmentBrowser.cs - - - Designer - ProjectSettings.cs - - - RuntimeInternal.cs - Designer - - - RuntimeSmtp.cs - Designer - - - RuntimeExternal.cs - Designer - - - Designer - EnvironmentGeneral.cs - - - Designer - TextEditorFontColors.cs - - - Designer - EnvironmentHelp.cs - - - Designer - TextEditorGeneral.cs - - - Designer - ToolsOptions.cs - - - Designer - VersionControlGeneral.cs - - - ToolWindow.cs - Designer - - - Designer - UpdateApplicationForm.cs - - - - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - MSDiscoCodeGenerator - Reference.cs - - - - - - - - - Static - Web References\org.lsleditor.www\ - http://www.lsleditor.org/UploadBugReport/Service1.asmx - - - - - Settings - LSLEditor_org_lsleditor_www_Service1 - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 2.0 %28x86%29 - true - - - False - .NET Framework 3.0 %28x86%29 - false - - - False - .NET Framework 3.5 - false - - - False - .NET Framework 3.5 SP1 - false - - - - - - "$(FrameworkSDKDir)..\v7.0A\Bin\x64\Rc.exe" /r "$(ProjectDir)$(TargetName).rc" - "$(SolutionDir)..\build\AssemblyRevisionIncrementer.exe" /t="$(SolutionDir)Properties\AssemblyInfo.cs" - + + + + Local + 9.0.21022 + 2.0 + {59468D25-6E68-4113-B740-C6EF4695045B} + Debug + AnyCPU + + + + + LSLEditor + + + JScript + Grid + IE50 + false + WinExe + LSLEditor + OnBuildSuccess + LSLEditor.LSLEditorForm + + + + + false + C:\Users\User\Desktop\Workspace_Jasper\LSL_editor\lsleditor-code\trunk\LSLEditor.RES + 3.5 + false + v3.5 + + C:\Users\User\Desktop\Workspace_Jasper\LSL_editor\Published LSLEditor\ + true + Disk + false + Foreground + 7 + Days + false + false + true + true + 10 + 1.0.0.%2a + false + true + true + + + ..\bin\Debug\ + false + 285212672 + false + + + DEBUG;TRACE + + + true + 4096 + false + + + false + false + false + false + 4 + full + prompt + AllRules.ruleset + + + ..\bin\Release\ + false + 285212672 + false + + + TRACE + ..\lsl-editor-doc.xml + false + 4096 + false + + + true + false + false + false + 4 + none + prompt + AllRules.ruleset + + + true + + + 1470C84604ABCC1DEEC1ABA38969E80F821AA855 + + + true + + + lsleditor_TemporaryKey.pfx + + + true + + + + packages\Newtonsoft.Json.10.0.3\lib\net35\Newtonsoft.Json.dll + + + System + + + + + System.Drawing + + + + + System.Windows.Forms + + + System.XML + + + + + Form + + + About.cs + false + + + Form + true + + + BugReportForm.cs + true + + + true + + + true + + + true + + + true + + + true + + + Component + true + + + true + + + Form + true + + + true + + + true + + + true + + + true + + + UserControl + true + + + UserControl + true + + + Component + true + + + true + + + Component + true + + + true + + + Component + true + + + Component + true + + + Component + true + + + Component + true + + + Component + true + + + Component + true + + + true + + + true + + + Component + true + + + Component + true + + + Component + true + + + true + + + Form + true + + + Component + true + + + true + + + Form + true + + + true + + + true + + + true + + + true + + + true + + + Component + true + + + true + + + true + + + true + + + true + + + true + + + true + + + Component + true + + + true + + + true + + + Component + true + + + Component + true + + + Component + true + + + true + + + true + + + true + + + + true + + + true + + + true + + + + true + + + + true + + + true + + + true + + + Form + true + + + llTextBoxForm.cs + true + + + true + + + true + + + + + + + Form + true + + + GuidProperty.cs + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + Form + true + + + NewProject.cs + true + + + Form + true + + + PermissionsForm.cs + true + + + Form + true + + + GotoWindow.cs + true + + + UserControl + true + + + Numbered.cs + true + + + Form + true + + + TooltipWindow.cs + true + + + Component + true + + + GListBox.cs + true + + + Form + true + + + GListBoxWindow.cs + true + + + UserControl + true + + + RichLabel.cs + true + + + Form + true + + + llDialogForm.cs + true + + + true + + + true + + + Form + true + + + Browser.cs + true + + + true + + + Form + true + + + EditForm.cs + true + + + Form + true + + + FindWindow.cs + true + + + Form + true + + + LSLEditorForm.cs + true + + + True + True + Resources.resx + true + + + True + True + Settings.settings + true + + + true + + + Component + true + + + true + + + UserControl + true + + + NumberedTextBoxUC.cs + true + + + UserControl + true + + + RuntimeConsole.cs + true + + + + Code + true + + + + true + + + true + + + true + + + true + + + true + + + true + + + Component + true + + + Code + true + + + Designer + About.cs + + + Code + false + + + Component + true + + + TabControlExtended.cs + true + + + Form + true + + + SimulatorConsole.cs + true + + + Form + true + + + SolutionExplorer.cs + true + + + Form + true + + + SvnAguments.cs + true + + + true + + + true + + + Form + true + + + SyntaxError.cs + true + + + UserControl + true + + + EnvironmentPlugins.cs + true + + + UserControl + + + IncludeExportSettings.cs + + + UserControl + + + ProjectIncludes.cs + + + UserControl + true + + + RuntimeGeneral.cs + true + + + UserControl + true + + + TextEditorCodeCompletion.cs + true + + + UserControl + true + + + EnvironmentBrowser.cs + true + + + UserControl + true + + + ProjectSettings.cs + true + + + UserControl + true + + + RuntimeInternal.cs + true + + + UserControl + true + + + RuntimeSmtp.cs + true + + + UserControl + true + + + RuntimeExternal.cs + true + + + UserControl + true + + + EnvironmentGeneral.cs + true + + + UserControl + true + + + TextEditorFontColors.cs + true + + + UserControl + true + + + EnvironmentHelp.cs + true + + + UserControl + true + + + TextEditorGeneral.cs + true + + + Form + true + + + ToolsOptions.cs + true + + + UserControl + true + + + VersionControlGeneral.cs + true + + + Form + true + + + ToolWindow.cs + true + + + Form + true + + + UpdateApplicationForm.cs + true + + + True + True + Reference.map + true + + + Designer + Browser.cs + + + Designer + BugReportForm.cs + + + Designer + + + Designer + + + llTextBoxForm.cs + + + Designer + GuidProperty.cs + + + Designer + NewProject.cs + + + PermissionsForm.cs + Designer + + + GotoWindow.cs + Designer + + + Designer + EditForm.cs + + + TooltipWindow.cs + Designer + + + GListBoxWindow.cs + Designer + + + Designer + RichLabel.cs + + + Designer + FindWindow.cs + + + Designer + llDialogForm.cs + + + Designer + LSLEditorForm.cs + + + Designer + ResXFileCodeGenerator + Resources.Designer.cs + + + NumberedTextBoxUC.cs + Designer + + + Designer + + + + GroupboxEvent.cs + Designer + + + + + + + + + + + + Designer + RuntimeConsole.cs + + + SyntaxRichTextBox.cs + Designer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Designer + + + + + + + + Designer + + + Designer + SimulatorConsole.cs + + + SolutionExplorer.cs + Designer + + + Designer + SvnAguments.cs + + + Designer + SyntaxError.cs + + + Designer + EnvironmentPlugins.cs + + + IncludeExportSettings.cs + + + ProjectIncludes.cs + + + RuntimeGeneral.cs + Designer + + + TextEditorCodeCompletion.cs + Designer + + + Designer + EnvironmentBrowser.cs + + + Designer + ProjectSettings.cs + + + RuntimeInternal.cs + Designer + + + RuntimeSmtp.cs + Designer + + + RuntimeExternal.cs + Designer + + + Designer + EnvironmentGeneral.cs + + + Designer + TextEditorFontColors.cs + + + Designer + EnvironmentHelp.cs + + + Designer + TextEditorGeneral.cs + + + Designer + ToolsOptions.cs + + + Designer + VersionControlGeneral.cs + + + ToolWindow.cs + Designer + + + Designer + UpdateApplicationForm.cs + + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + MSDiscoCodeGenerator + Reference.cs + + + + + + + + + Static + Web References\org.lsleditor.www\ + http://www.lsleditor.org/UploadBugReport/Service1.asmx + + + + + Settings + LSLEditor_org_lsleditor_www_Service1 + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + false + + + + + + "$(FrameworkSDKDir)..\v7.0A\Bin\x64\Rc.exe" /r "$(ProjectDir)$(TargetName).rc" + "$(SolutionDir)..\build\AssemblyRevisionIncrementer.exe" /t="$(SolutionDir)Properties\AssemblyInfo.cs" + \ No newline at end of file diff --git a/trunk/lsleditor.sln b/source/lsleditor.sln similarity index 98% rename from trunk/lsleditor.sln rename to source/lsleditor.sln index f272d6c..73d78e5 100644 --- a/trunk/lsleditor.sln +++ b/source/lsleditor.sln @@ -1,30 +1,30 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "lsleditor", "lsleditor.csproj", "{59468D25-6E68-4113-B740-C6EF4695045B}" -EndProject -Global - GlobalSection(SubversionScc) = preSolution - Svn-Managed = True - Manager = AnkhSVN - Subversion Support for Visual Studio - EndGlobalSection - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|Mixed Platforms = Debug|Mixed Platforms - Release|Any CPU = Release|Any CPU - Release|Mixed Platforms = Release|Mixed Platforms - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {59468D25-6E68-4113-B740-C6EF4695045B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {59468D25-6E68-4113-B740-C6EF4695045B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {59468D25-6E68-4113-B740-C6EF4695045B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {59468D25-6E68-4113-B740-C6EF4695045B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {59468D25-6E68-4113-B740-C6EF4695045B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {59468D25-6E68-4113-B740-C6EF4695045B}.Release|Any CPU.Build.0 = Release|Any CPU - {59468D25-6E68-4113-B740-C6EF4695045B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {59468D25-6E68-4113-B740-C6EF4695045B}.Release|Mixed Platforms.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "lsleditor", "lsleditor.csproj", "{59468D25-6E68-4113-B740-C6EF4695045B}" +EndProject +Global + GlobalSection(SubversionScc) = preSolution + Svn-Managed = True + Manager = AnkhSVN - Subversion Support for Visual Studio + EndGlobalSection + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {59468D25-6E68-4113-B740-C6EF4695045B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59468D25-6E68-4113-B740-C6EF4695045B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59468D25-6E68-4113-B740-C6EF4695045B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {59468D25-6E68-4113-B740-C6EF4695045B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {59468D25-6E68-4113-B740-C6EF4695045B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59468D25-6E68-4113-B740-C6EF4695045B}.Release|Any CPU.Build.0 = Release|Any CPU + {59468D25-6E68-4113-B740-C6EF4695045B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {59468D25-6E68-4113-B740-C6EF4695045B}.Release|Mixed Platforms.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/trunk/packages.config b/source/packages.config similarity index 100% rename from trunk/packages.config rename to source/packages.config diff --git a/trunk/sharedheader.txt b/source/sharedheader.txt similarity index 97% rename from trunk/sharedheader.txt rename to source/sharedheader.txt index 991fade..ed5d682 100644 --- a/trunk/sharedheader.txt +++ b/source/sharedheader.txt @@ -1,43 +1,43 @@ -/** -******** -* -* ORIGIONAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden -* The code was donated on 4/28/2010 by Alphons van der Heijden -* To Brandon'Dimentox Travanti' Husbands & Malcolm J. Kudra which in turn Liscense under the GPLv2. -* In agreement to Alphons van der Heijden wishes. -* -* The community would like to thank Alphons for all of his hard work, blood sweat and tears. -* Without his work the community would be stuck with crappy editors. -* -* The source code in this file ("Source Code") is provided by The LSLEditor Group -* to you under the terms of the GNU General Public License, version 2.0 -* ("GPL"), unless you have obtained a separate licensing agreement -* ("Other License"), formally executed by you and Linden Lab. Terms of -* the GPL can be found in the gplv2.txt document. -* -******** -* GPLv2 Header -******** -* LSLEditor, a External editor for the LSL Language. -* Copyright (C) 2010 The LSLEditor Group. - -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* as published by the Free Software Foundation; either version 2 -* of the License, or (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -******** -* -* The above copyright notice and this permission notice shall be included in all -* copies or substantial portions of the Software. -* -******** -*/ +/** +******** +* +* ORIGIONAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden +* The code was donated on 4/28/2010 by Alphons van der Heijden +* To Brandon'Dimentox Travanti' Husbands & Malcolm J. Kudra which in turn Liscense under the GPLv2. +* In agreement to Alphons van der Heijden wishes. +* +* The community would like to thank Alphons for all of his hard work, blood sweat and tears. +* Without his work the community would be stuck with crappy editors. +* +* The source code in this file ("Source Code") is provided by The LSLEditor Group +* to you under the terms of the GNU General Public License, version 2.0 +* ("GPL"), unless you have obtained a separate licensing agreement +* ("Other License"), formally executed by you and Linden Lab. Terms of +* the GPL can be found in the gplv2.txt document. +* +******** +* GPLv2 Header +******** +* LSLEditor, a External editor for the LSL Language. +* Copyright (C) 2010 The LSLEditor Group. + +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +******** +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +******** +*/ diff --git a/trunk/Docking/Win32/Enums.cs b/trunk/Docking/Win32/Enums.cs deleted file mode 100644 index 6efb4d9..0000000 --- a/trunk/Docking/Win32/Enums.cs +++ /dev/null @@ -1,369 +0,0 @@ -using System; - -namespace LSLEditor.Docking.Win32 -{ - [Flags] - internal enum FlagsSetWindowPos : uint - { - SWP_NOSIZE = 0x0001, - SWP_NOMOVE = 0x0002, - SWP_NOZORDER = 0x0004, - SWP_NOREDRAW = 0x0008, - SWP_NOACTIVATE = 0x0010, - SWP_FRAMECHANGED = 0x0020, - SWP_SHOWWINDOW = 0x0040, - SWP_HIDEWINDOW = 0x0080, - SWP_NOCOPYBITS = 0x0100, - SWP_NOOWNERZORDER = 0x0200, - SWP_NOSENDCHANGING = 0x0400, - SWP_DRAWFRAME = 0x0020, - SWP_NOREPOSITION = 0x0200, - SWP_DEFERERASE = 0x2000, - SWP_ASYNCWINDOWPOS = 0x4000 - } - - internal enum ShowWindowStyles : short - { - SW_HIDE = 0, - SW_SHOWNORMAL = 1, - SW_NORMAL = 1, - SW_SHOWMINIMIZED = 2, - SW_SHOWMAXIMIZED = 3, - SW_MAXIMIZE = 3, - SW_SHOWNOACTIVATE = 4, - SW_SHOW = 5, - SW_MINIMIZE = 6, - SW_SHOWMINNOACTIVE = 7, - SW_SHOWNA = 8, - SW_RESTORE = 9, - SW_SHOWDEFAULT = 10, - SW_FORCEMINIMIZE = 11, - SW_MAX = 11 - } - - internal enum WindowStyles : uint - { - WS_OVERLAPPED = 0x00000000, - WS_POPUP = 0x80000000, - WS_CHILD = 0x40000000, - WS_MINIMIZE = 0x20000000, - WS_VISIBLE = 0x10000000, - WS_DISABLED = 0x08000000, - WS_CLIPSIBLINGS = 0x04000000, - WS_CLIPCHILDREN = 0x02000000, - WS_MAXIMIZE = 0x01000000, - WS_CAPTION = 0x00C00000, - WS_BORDER = 0x00800000, - WS_DLGFRAME = 0x00400000, - WS_VSCROLL = 0x00200000, - WS_HSCROLL = 0x00100000, - WS_SYSMENU = 0x00080000, - WS_THICKFRAME = 0x00040000, - WS_GROUP = 0x00020000, - WS_TABSTOP = 0x00010000, - WS_MINIMIZEBOX = 0x00020000, - WS_MAXIMIZEBOX = 0x00010000, - WS_TILED = 0x00000000, - WS_ICONIC = 0x20000000, - WS_SIZEBOX = 0x00040000, - WS_POPUPWINDOW = 0x80880000, - WS_OVERLAPPEDWINDOW = 0x00CF0000, - WS_TILEDWINDOW = 0x00CF0000, - WS_CHILDWINDOW = 0x40000000 - } - - internal enum WindowExStyles - { - WS_EX_DLGMODALFRAME = 0x00000001, - WS_EX_NOPARENTNOTIFY = 0x00000004, - WS_EX_TOPMOST = 0x00000008, - WS_EX_ACCEPTFILES = 0x00000010, - WS_EX_TRANSPARENT = 0x00000020, - WS_EX_MDICHILD = 0x00000040, - WS_EX_TOOLWINDOW = 0x00000080, - WS_EX_WINDOWEDGE = 0x00000100, - WS_EX_CLIENTEDGE = 0x00000200, - WS_EX_CONTEXTHELP = 0x00000400, - WS_EX_RIGHT = 0x00001000, - WS_EX_LEFT = 0x00000000, - WS_EX_RTLREADING = 0x00002000, - WS_EX_LTRREADING = 0x00000000, - WS_EX_LEFTSCROLLBAR = 0x00004000, - WS_EX_RIGHTSCROLLBAR = 0x00000000, - WS_EX_CONTROLPARENT = 0x00010000, - WS_EX_STATICEDGE = 0x00020000, - WS_EX_APPWINDOW = 0x00040000, - WS_EX_OVERLAPPEDWINDOW = 0x00000300, - WS_EX_PALETTEWINDOW = 0x00000188, - WS_EX_LAYERED = 0x00080000 - } - - internal enum Msgs - { - WM_NULL = 0x0000, - WM_CREATE = 0x0001, - WM_DESTROY = 0x0002, - WM_MOVE = 0x0003, - WM_SIZE = 0x0005, - WM_ACTIVATE = 0x0006, - WM_SETFOCUS = 0x0007, - WM_KILLFOCUS = 0x0008, - WM_ENABLE = 0x000A, - WM_SETREDRAW = 0x000B, - WM_SETTEXT = 0x000C, - WM_GETTEXT = 0x000D, - WM_GETTEXTLENGTH = 0x000E, - WM_PAINT = 0x000F, - WM_CLOSE = 0x0010, - WM_QUERYENDSESSION = 0x0011, - WM_QUIT = 0x0012, - WM_QUERYOPEN = 0x0013, - WM_ERASEBKGND = 0x0014, - WM_SYSCOLORCHANGE = 0x0015, - WM_ENDSESSION = 0x0016, - WM_SHOWWINDOW = 0x0018, - WM_WININICHANGE = 0x001A, - WM_SETTINGCHANGE = 0x001A, - WM_DEVMODECHANGE = 0x001B, - WM_ACTIVATEAPP = 0x001C, - WM_FONTCHANGE = 0x001D, - WM_TIMECHANGE = 0x001E, - WM_CANCELMODE = 0x001F, - WM_SETCURSOR = 0x0020, - WM_MOUSEACTIVATE = 0x0021, - WM_CHILDACTIVATE = 0x0022, - WM_QUEUESYNC = 0x0023, - WM_GETMINMAXINFO = 0x0024, - WM_PAINTICON = 0x0026, - WM_ICONERASEBKGND = 0x0027, - WM_NEXTDLGCTL = 0x0028, - WM_SPOOLERSTATUS = 0x002A, - WM_DRAWITEM = 0x002B, - WM_MEASUREITEM = 0x002C, - WM_DELETEITEM = 0x002D, - WM_VKEYTOITEM = 0x002E, - WM_CHARTOITEM = 0x002F, - WM_SETFONT = 0x0030, - WM_GETFONT = 0x0031, - WM_SETHOTKEY = 0x0032, - WM_GETHOTKEY = 0x0033, - WM_QUERYDRAGICON = 0x0037, - WM_COMPAREITEM = 0x0039, - WM_GETOBJECT = 0x003D, - WM_COMPACTING = 0x0041, - WM_COMMNOTIFY = 0x0044 , - WM_WINDOWPOSCHANGING = 0x0046, - WM_WINDOWPOSCHANGED = 0x0047, - WM_POWER = 0x0048, - WM_COPYDATA = 0x004A, - WM_CANCELJOURNAL = 0x004B, - WM_NOTIFY = 0x004E, - WM_INPUTLANGCHANGEREQUEST = 0x0050, - WM_INPUTLANGCHANGE = 0x0051, - WM_TCARD = 0x0052, - WM_HELP = 0x0053, - WM_USERCHANGED = 0x0054, - WM_NOTIFYFORMAT = 0x0055, - WM_CONTEXTMENU = 0x007B, - WM_STYLECHANGING = 0x007C, - WM_STYLECHANGED = 0x007D, - WM_DISPLAYCHANGE = 0x007E, - WM_GETICON = 0x007F, - WM_SETICON = 0x0080, - WM_NCCREATE = 0x0081, - WM_NCDESTROY = 0x0082, - WM_NCCALCSIZE = 0x0083, - WM_NCHITTEST = 0x0084, - WM_NCPAINT = 0x0085, - WM_NCACTIVATE = 0x0086, - WM_GETDLGCODE = 0x0087, - WM_SYNCPAINT = 0x0088, - WM_NCMOUSEMOVE = 0x00A0, - WM_NCLBUTTONDOWN = 0x00A1, - WM_NCLBUTTONUP = 0x00A2, - WM_NCLBUTTONDBLCLK = 0x00A3, - WM_NCRBUTTONDOWN = 0x00A4, - WM_NCRBUTTONUP = 0x00A5, - WM_NCRBUTTONDBLCLK = 0x00A6, - WM_NCMBUTTONDOWN = 0x00A7, - WM_NCMBUTTONUP = 0x00A8, - WM_NCMBUTTONDBLCLK = 0x00A9, - WM_KEYDOWN = 0x0100, - WM_KEYUP = 0x0101, - WM_CHAR = 0x0102, - WM_DEADCHAR = 0x0103, - WM_SYSKEYDOWN = 0x0104, - WM_SYSKEYUP = 0x0105, - WM_SYSCHAR = 0x0106, - WM_SYSDEADCHAR = 0x0107, - WM_KEYLAST = 0x0108, - WM_IME_STARTCOMPOSITION = 0x010D, - WM_IME_ENDCOMPOSITION = 0x010E, - WM_IME_COMPOSITION = 0x010F, - WM_IME_KEYLAST = 0x010F, - WM_INITDIALOG = 0x0110, - WM_COMMAND = 0x0111, - WM_SYSCOMMAND = 0x0112, - WM_TIMER = 0x0113, - WM_HSCROLL = 0x0114, - WM_VSCROLL = 0x0115, - WM_INITMENU = 0x0116, - WM_INITMENUPOPUP = 0x0117, - WM_MENUSELECT = 0x011F, - WM_MENUCHAR = 0x0120, - WM_ENTERIDLE = 0x0121, - WM_MENURBUTTONUP = 0x0122, - WM_MENUDRAG = 0x0123, - WM_MENUGETOBJECT = 0x0124, - WM_UNINITMENUPOPUP = 0x0125, - WM_MENUCOMMAND = 0x0126, - WM_CTLCOLORMSGBOX = 0x0132, - WM_CTLCOLOREDIT = 0x0133, - WM_CTLCOLORLISTBOX = 0x0134, - WM_CTLCOLORBTN = 0x0135, - WM_CTLCOLORDLG = 0x0136, - WM_CTLCOLORSCROLLBAR = 0x0137, - WM_CTLCOLORSTATIC = 0x0138, - WM_MOUSEMOVE = 0x0200, - WM_LBUTTONDOWN = 0x0201, - WM_LBUTTONUP = 0x0202, - WM_LBUTTONDBLCLK = 0x0203, - WM_RBUTTONDOWN = 0x0204, - WM_RBUTTONUP = 0x0205, - WM_RBUTTONDBLCLK = 0x0206, - WM_MBUTTONDOWN = 0x0207, - WM_MBUTTONUP = 0x0208, - WM_MBUTTONDBLCLK = 0x0209, - WM_MOUSEWHEEL = 0x020A, - WM_PARENTNOTIFY = 0x0210, - WM_ENTERMENULOOP = 0x0211, - WM_EXITMENULOOP = 0x0212, - WM_NEXTMENU = 0x0213, - WM_SIZING = 0x0214, - WM_CAPTURECHANGED = 0x0215, - WM_MOVING = 0x0216, - WM_DEVICECHANGE = 0x0219, - WM_MDICREATE = 0x0220, - WM_MDIDESTROY = 0x0221, - WM_MDIACTIVATE = 0x0222, - WM_MDIRESTORE = 0x0223, - WM_MDINEXT = 0x0224, - WM_MDIMAXIMIZE = 0x0225, - WM_MDITILE = 0x0226, - WM_MDICASCADE = 0x0227, - WM_MDIICONARRANGE = 0x0228, - WM_MDIGETACTIVE = 0x0229, - WM_MDISETMENU = 0x0230, - WM_ENTERSIZEMOVE = 0x0231, - WM_EXITSIZEMOVE = 0x0232, - WM_DROPFILES = 0x0233, - WM_MDIREFRESHMENU = 0x0234, - WM_IME_SETCONTEXT = 0x0281, - WM_IME_NOTIFY = 0x0282, - WM_IME_CONTROL = 0x0283, - WM_IME_COMPOSITIONFULL = 0x0284, - WM_IME_SELECT = 0x0285, - WM_IME_CHAR = 0x0286, - WM_IME_REQUEST = 0x0288, - WM_IME_KEYDOWN = 0x0290, - WM_IME_KEYUP = 0x0291, - WM_MOUSEHOVER = 0x02A1, - WM_MOUSELEAVE = 0x02A3, - WM_CUT = 0x0300, - WM_COPY = 0x0301, - WM_PASTE = 0x0302, - WM_CLEAR = 0x0303, - WM_UNDO = 0x0304, - WM_RENDERFORMAT = 0x0305, - WM_RENDERALLFORMATS = 0x0306, - WM_DESTROYCLIPBOARD = 0x0307, - WM_DRAWCLIPBOARD = 0x0308, - WM_PAINTCLIPBOARD = 0x0309, - WM_VSCROLLCLIPBOARD = 0x030A, - WM_SIZECLIPBOARD = 0x030B, - WM_ASKCBFORMATNAME = 0x030C, - WM_CHANGECBCHAIN = 0x030D, - WM_HSCROLLCLIPBOARD = 0x030E, - WM_QUERYNEWPALETTE = 0x030F, - WM_PALETTEISCHANGING = 0x0310, - WM_PALETTECHANGED = 0x0311, - WM_HOTKEY = 0x0312, - WM_PRINT = 0x0317, - WM_PRINTCLIENT = 0x0318, - WM_HANDHELDFIRST = 0x0358, - WM_HANDHELDLAST = 0x035F, - WM_AFXFIRST = 0x0360, - WM_AFXLAST = 0x037F, - WM_PENWINFIRST = 0x0380, - WM_PENWINLAST = 0x038F, - WM_APP = 0x8000, - WM_USER = 0x0400 - } - - internal enum HitTest - { - HTERROR = -2, - HTTRANSPARENT = -1, - HTNOWHERE = 0, - HTCLIENT = 1, - HTCAPTION = 2, - HTSYSMENU = 3, - HTGROWBOX = 4, - HTSIZE = 4, - HTMENU = 5, - HTHSCROLL = 6, - HTVSCROLL = 7, - HTMINBUTTON = 8, - HTMAXBUTTON = 9, - HTLEFT = 10, - HTRIGHT = 11, - HTTOP = 12, - HTTOPLEFT = 13, - HTTOPRIGHT = 14, - HTBOTTOM = 15, - HTBOTTOMLEFT = 16, - HTBOTTOMRIGHT = 17, - HTBORDER = 18, - HTREDUCE = 8, - HTZOOM = 9 , - HTSIZEFIRST = 10, - HTSIZELAST = 17, - HTOBJECT = 19, - HTCLOSE = 20, - HTHELP = 21 - } - - internal enum ScrollBars : uint - { - SB_HORZ = 0, - SB_VERT = 1, - SB_CTL = 2, - SB_BOTH = 3 - } - - internal enum GetWindowLongIndex : int - { - GWL_STYLE = -16, - GWL_EXSTYLE = -20 - } - - // Hook Types - internal enum HookType : int - { - WH_JOURNALRECORD = 0, - WH_JOURNALPLAYBACK = 1, - WH_KEYBOARD = 2, - WH_GETMESSAGE = 3, - WH_CALLWNDPROC = 4, - WH_CBT = 5, - WH_SYSMSGFILTER = 6, - WH_MOUSE = 7, - WH_HARDWARE = 8, - WH_DEBUG = 9, - WH_SHELL = 10, - WH_FOREGROUNDIDLE = 11, - WH_CALLWNDPROCRET = 12, - WH_KEYBOARD_LL = 13, - WH_MOUSE_LL = 14 - } -} \ No newline at end of file diff --git a/trunk/Docking/Win32/NativeMethods.cs b/trunk/Docking/Win32/NativeMethods.cs deleted file mode 100644 index 40275bf..0000000 --- a/trunk/Docking/Win32/NativeMethods.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.Drawing; -using System.Runtime.InteropServices; -using System.Diagnostics.CodeAnalysis; -using LSLEditor.Docking.Win32; - -namespace LSLEditor.Docking -{ - internal static class NativeMethods - { - [DllImport("User32.dll", CharSet=CharSet.Auto)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool DragDetect(IntPtr hWnd, Point pt); - - [DllImport("User32.dll", CharSet=CharSet.Auto)] - public static extern IntPtr GetFocus(); - - [DllImport("User32.dll", CharSet=CharSet.Auto)] - public static extern IntPtr SetFocus(IntPtr hWnd); - - [DllImport("User32.dll", CharSet=CharSet.Auto)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool PostMessage(IntPtr hWnd, int Msg, uint wParam, uint lParam); - - [DllImport("User32.dll", CharSet=CharSet.Auto)] - public static extern uint SendMessage(IntPtr hWnd, int Msg, uint wParam, uint lParam); - - [DllImport("User32.dll", CharSet=CharSet.Auto)] - public static extern int ShowWindow(IntPtr hWnd, short cmdShow); - - [DllImport("User32.dll", CharSet=CharSet.Auto)] - public static extern int SetWindowPos(IntPtr hWnd, IntPtr hWndAfter, int X, int Y, int Width, int Height, FlagsSetWindowPos flags); - - [DllImport("user32.dll", CharSet = CharSet.Auto)] - public static extern int GetWindowLong(IntPtr hWnd, int Index); - - [DllImport("user32.dll", CharSet = CharSet.Auto)] - public static extern int SetWindowLong(IntPtr hWnd, int Index, int Value); - - [DllImport("user32.dll", CharSet=CharSet.Auto)] - public static extern int ShowScrollBar(IntPtr hWnd, int wBar, int bShow); - - [DllImport("user32.dll", CharSet=CharSet.Auto)] - //********************************* - // FxCop bug, suppress the message - //********************************* - [SuppressMessage("Microsoft.Portability", "CA1901:PInvokeDeclarationsShouldBePortable", MessageId = "0")] - public static extern IntPtr WindowFromPoint(Point point); - - [DllImport("Kernel32.dll", CharSet = CharSet.Auto)] - public static extern int GetCurrentThreadId(); - - public delegate IntPtr HookProc(int code, IntPtr wParam, IntPtr lParam); - - [DllImport("user32.dll")] - public static extern IntPtr SetWindowsHookEx(Win32.HookType code, HookProc func, IntPtr hInstance, int threadID); - - [DllImport("user32.dll")] - public static extern int UnhookWindowsHookEx(IntPtr hhook); - - [DllImport("user32.dll")] - public static extern IntPtr CallNextHookEx(IntPtr hhook, int code, IntPtr wParam, IntPtr lParam); - } -} \ No newline at end of file diff --git a/trunk/StyleCop.Cache b/trunk/StyleCop.Cache deleted file mode 100644 index 4046fcd..0000000 --- a/trunk/StyleCop.Cache +++ /dev/null @@ -1,717 +0,0 @@ - - 12 - - - 2017-09-21 13:07:48.197 - 2017-09-21 13:07:48.180 - 2017-10-03 11:30:44.634 - 2017-09-21 13:07:48.197 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - - - - The file attribute in the file header's copyright tag must contain the name of the first type in the file and can be any of these: "SecondLifeHostEventArgs" - 1 - False - - - The documentation text within the summary tag must end with a period. - 173 - False - - - The documentation text within the summary tag must end with a period. - 188 - False - - - The documentation text within the summary tag must begin with a capital letter. - 188 - False - - - The documentation text within the summary tag must be at least 10 characters in length. Documentation failing to meet this guideline most likely does not follow a proper grammatical structure required for documentation text. - 188 - False - - - The documentation text within the summary tag must end with a period. - 203 - False - - - The documentation text within the param tag must end with a period. - 313 - False - - - The documentation text within the summary tag must end with a period. - 350 - False - - - The returns section in the documentation header must not be empty. - 423 - False - - - The documentation text within the summary tag must end with a period. - 496 - False - - - The documentation text within the param tag must begin with a capital letter. - 581 - False - - - The documentation text within the constructor's summary tag must begin with the text: Initialises a new instance of the <see cref="Link" /> struct. - 581 - False - - - The documentation text within the constructor's summary tag must begin with the text: Initialises a new instance of the <see cref="ListenFilter" /> struct. - 666 - False - - - The documentation text within the summary tag must end with a period. - 681 - False - - - The documentation text within the summary tag must end with a period. - 767 - False - - - The documentation text within the summary tag must begin with a capital letter. - 767 - False - - - The documentation text within the summary tag must end with a period. - 812 - False - - - The documentation text within the summary tag must begin with a capital letter. - 812 - False - - - The documentation text within the summary tag must be at least 10 characters in length. Documentation failing to meet this guideline most likely does not follow a proper grammatical structure required for documentation text. - 812 - False - - - The summary section in the documentation header must not be empty. - 824 - False - - - The returns section in the documentation header must not be empty. - 824 - False - - - The summary section in the documentation header must not be empty. - 854 - False - - - The summary section in the documentation header must not be empty. - 892 - False - - - The summary section in the documentation header must not be empty. - 909 - False - - - The summary section in the documentation header must not be empty. - 928 - False - - - The summary section in the documentation header must not be empty. - 951 - False - - - The summary section in the documentation header must not be empty. - 988 - False - - - The summary section in the documentation header must not be empty. - 1005 - False - - - The summary section in the documentation header must not be empty. - 1026 - False - - - The summary section in the documentation header must not be empty. - 1043 - False - - - The summary section in the documentation header must not be empty. - 1057 - False - - - The summary section in the documentation header must not be empty. - 1074 - False - - - The summary section in the documentation header must not be empty. - 1094 - False - - - The summary section in the documentation header must not be empty. - 1109 - False - - - The summary section in the documentation header must not be empty. - 1115 - False - - - The summary section in the documentation header must not be empty. - 1145 - False - - - The summary section in the documentation header must not be empty. - 1153 - False - - - The summary section in the documentation header must not be empty. - 1165 - False - - - The summary section in the documentation header must not be empty. - 1188 - False - - - The returns section in the documentation header must not be empty. - 1188 - False - - - The summary section in the documentation header must not be empty. - 1209 - False - - - The summary section in the documentation header must not be empty. - 1226 - False - - - The returns section in the documentation header must not be empty. - 1226 - False - - - The summary section in the documentation header must not be empty. - 1249 - False - - - The summary section in the documentation header must not be empty. - 1254 - False - - - The summary section in the documentation header must not be empty. - 1278 - False - - - The summary section in the documentation header must not be empty. - 1296 - False - - - The summary section in the documentation header must not be empty. - 1315 - False - - - The documentation text within the summary tag must end with a period. - 1335 - False - - - The documentation text within the summary tag must begin with a capital letter. - 1335 - False - - - The returns section in the documentation header must not be empty. - 1335 - False - - - The documentation text within the summary tag must end with a period. - 1348 - False - - - The documentation text within the summary tag must begin with a capital letter. - 1348 - False - - - The summary section in the documentation header must not be empty. - 1366 - False - - - The returns section in the documentation header must not be empty. - 1366 - False - - - The summary section in the documentation header must not be empty. - 1376 - False - - - The returns section in the documentation header must not be empty. - 1376 - False - - - The summary section in the documentation header must not be empty. - 1385 - False - - - The summary section in the documentation header must not be empty. - 1397 - False - - - The returns section in the documentation header must not be empty. - 1397 - False - - - The summary section in the documentation header must not be empty. - 1411 - False - - - The returns section in the documentation header must not be empty. - 1411 - False - - - The summary section in the documentation header must not be empty. - 1420 - False - - - The summary section in the documentation header must not be empty. - 1431 - False - - - The returns section in the documentation header must not be empty. - 1431 - False - - - The summary section in the documentation header must not be empty. - 1449 - False - - - The returns section in the documentation header must not be empty. - 1449 - False - - - The summary section in the documentation header must not be empty. - 1464 - False - - - The returns section in the documentation header must not be empty. - 1464 - False - - - The summary section in the documentation header must not be empty. - 1478 - False - - - The returns section in the documentation header must not be empty. - 1478 - False - - - The summary section in the documentation header must not be empty. - 1492 - False - - - The returns section in the documentation header must not be empty. - 1492 - False - - - The summary section in the documentation header must not be empty. - 1502 - False - - - The returns section in the documentation header must not be empty. - 1502 - False - - - The summary section in the documentation header must not be empty. - 1511 - False - - - The summary section in the documentation header must not be empty. - 1521 - False - - - The returns section in the documentation header must not be empty. - 1521 - False - - - The summary section in the documentation header must not be empty. - 1535 - False - - - - - - 2017-09-21 13:07:48.197 - 2017-09-21 13:07:48.180 - 2017-09-20 09:46:59.865 - 2017-09-21 13:07:48.197 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - - - - - - 2017-09-21 13:07:48.197 - 2017-09-21 13:07:48.180 - 2017-09-20 09:46:59.967 - 2017-09-21 13:07:48.197 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - - - - - - 2017-09-21 13:07:48.197 - 2017-09-21 13:07:48.180 - 2017-09-20 09:46:59.967 - 2017-09-21 13:07:48.197 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - - - - - - 2017-09-21 13:07:48.197 - 2017-09-21 13:07:48.180 - 2017-09-20 09:46:59.967 - 2017-09-21 13:07:48.197 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - - - - - - 2017-09-21 13:07:48.197 - 2017-09-21 13:07:48.180 - 2017-10-03 11:30:44.622 - 2017-09-21 13:07:48.197 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - - - - - - 2017-09-21 13:07:48.197 - 2017-09-21 13:07:48.180 - 2017-09-20 09:46:59.969 - 2017-09-21 13:07:48.197 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - - - - - DEBUG;TRACE - - - - 2017-09-21 13:07:48.197 - 2017-09-21 13:07:48.180 - 2017-10-05 14:15:45.007 - 2017-09-21 13:07:48.197 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - 2017-09-21 13:07:48.197 - 0 - - - - The file attribute in the file header's copyright tag must contain the name of the first type in the file and can be any of these: "LSLIConverter" - 1 - False - - - The class must have a documentation header. - 48 - False - - - A single-line comment must not be followed by a blank line. To ignore this error when commenting out a line of code, begin the comment with '////' rather than '//'. - 123 - False - - - The class must have an access modifier. - 48 - False - - - The comment must start with a single space. To ignore this error when commenting out a line of code, begin the comment with '////' rather than '//'. - 119 - 5147 - 5167 - 119 - 9 - 119 - 29 - False - - - The comment must start with a single space. To ignore this error when commenting out a line of code, begin the comment with '////' rather than '//'. - 122 - 5276 - 5286 - 122 - 9 - 122 - 19 - False - - - The comment must start with a single space. To ignore this error when commenting out a line of code, begin the comment with '////' rather than '//'. - 123 - 5297 - 5302 - 123 - 9 - 123 - 14 - False - - - The field must have a documentation header. - 50 - False - - - The field must have a documentation header. - 51 - False - - - The field must have a documentation header. - 52 - False - - - The constructor must have a documentation header. - 54 - False - - - An opening curly bracket must not be followed by a blank line. - 55 - False - - - A closing curly bracket must not be preceded by a blank line. - 57 - False - - - The method must have a documentation header. - 59 - False - - - A single-line comment must not be followed by a blank line. To ignore this error when commenting out a line of code, begin the comment with '////' rather than '//'. - 77 - False - - - The code must not contain multiple blank lines in a row. - 88 - False - - - A comment may not be placed within the bracketed statement. - 79 - False - - - The spacing around the keyword 'using' is invalid. - 91 - 4105 - 4109 - 91 - 21 - 91 - 25 - False - - - The spacing around the keyword 'if' is invalid. - 105 - 4690 - 4691 - 105 - 21 - 105 - 22 - False - - - The method must have a documentation header. - 125 - False - - - - \ No newline at end of file diff --git a/trunk/lsleditor.5.0.ReSharper.user b/trunk/lsleditor.5.0.ReSharper.user deleted file mode 100644 index fb33cce..0000000 --- a/trunk/lsleditor.5.0.ReSharper.user +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - False - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Never - - \ No newline at end of file diff --git a/trunk/lsleditor.suo b/trunk/lsleditor.suo deleted file mode 100644 index bf2a74b3300ce8281ebd1d9f8cc71da50ec9912b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48640 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 E02hj$ZvX%Q diff --git a/trunk/lsleditor_TemporaryKey.pfx b/trunk/lsleditor_TemporaryKey.pfx deleted file mode 100644 index 8a303625d1fc01e0b2763bd1359ba56ccd3211ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1660 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
    ?!? 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�~S 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%0A^+1kXQI_9=Hp{EwIO7>f?&S6;pOnOds9 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

    ^)U` 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%0D8aj!Tu3?Sw%4urFAWJRo%1< zq_Qap+k%iCF|kq88r_rT=<3zgkd@s6s%pC6<%-4fK{vFg5H(1sx%?TpNgW!n(tPty z*+f)&+VxBh3zbIG5Irq2Nn8H*I??a@NLUxtx97&WE>h)_Z=+Ls6HwU4a3TBTb*Vz`>rI!) zrJ3m%xO|i<=R;C><>5~eUU|Y(h6>d%vRFT^p;Bip)PryaX-in2K^cYD=iq&Rr8osb zcslCku9Dd3oHeoLV=4VP-^^*K~coSuu%M2VL>O@U|}JPemKC6-3X_4#xc zytQ1On7;Hck#$F|Iu?>aX}CC0cd=3yl!&t(6q^Pb;y8t2zTXMN$YaR zoTt0AE=MVhx{3CEh75`v@kxqmXo^}(&lUNn@uY|w%1WJSokZ#ntgW*l z#XwWhi}zupkeHwgFK3S1yoV$RE228Z2`>Rn2Zgk~+$c?7g$;Uq=4@h;D_bbuOXsY| zru#&Ulm`l-EHptXx(8&dTGTN~=g&C*c0p3uN6 zU_F+t+{{{<(1nRfa*uIHcR>>n)3KO?biJB14Fm1Q2y2hVvTQx3!IyIJOJd^Vf!^CKpx?Hx37gE0kuny`7oWR$X{@s2osNYZ;)E5GPh!^8 z(hyeZ=)lz)aveUY?;hr*)_Y)c!8U|PnD>Sy$m+zKA&6mD@}VDEc~-+ny? z`y18ak^)J+RFXNSEgvnpgmd^ZMc7B1sD>xVDic;7xtF-^5G7h)q3BkW?nnrAXJK?Kge)6VsEB}Wf^UQlsZfqL*5wIqWeo2DC(pQOjg4aQLl=;lM?&7!v{|B9AT+y*11mK z6?Vaaf>*#$**jH7lTaN%Sh9GpdFZU7`_2{XGS*43+f+zx7cOy9<%-K!ipTdALwM8{ zs+tt#!G#uoIFN*JTFQ%!ZcfQPNPw7QbCM;R>+dVk)P9jZ*>J@rmW)T19hR&qhUmuJtht=umq zVMDZ$&e@jR@5)tGNipW>B}I7)5QyoeLM_7iSNe!tdGnKeWSoAsy9f7_D|x5NU#+pI z6gu^6EHs6u)53+1YkOv&MC&Nh>S+hxV~39{_S!l9o-no(W_gZbfI)05!V`pcCv6aDrr)Xc0On+*7p(x9uNK)9LiwV-9#VCh ze9wj2#RX9l>LgK)brQ1$1@We>^=keReMEi_d$B^9#|EgoO0=KJr;rv+7BHG9)hC}I zI`M%K<1(@6@8el7KuC?b!~4;_qzV;2VOp`vYb=aVGx2I}Zj#ihaLr`_nphjQ2?ipZ z%P6GcKZ@@v29@6vvRbsF_S;6nR4e@N&BbW>x(Z?DcH;2gbLay?V z?S(>iRJd&yx>`+<1~US#8pO2gPH+bZ0+(WhrwP*;oCK#nlr@W#mB3il`Hbldm9%@# zc8(hJ&_wVp*te@El(uHu>2lxo=5{N;V0Hp`4;4JFxCo>ljo7|M5zJCZQopAletTUO z62}BO;e*n0UUO~Dd4y2o1Rms7&^f3YQIDq5gm@&}>PRil%@a@}VX~UcM__ z+;kg+?A)m97(R?#;r`A@FxSw{q-=h2q9|O9&~PbavD(B8A7QODlG+tEE`NFV!EII? zSvC3&kqwKp&8_eZMg8NBJ;d$?-rhyh|oUeq2>uFgj}q73hao5R6Yle9+}D*GJ4LC!%Ca8dN(Y z1mc;opERbu!TlDHR^BM&?Ihxpb;{F*XUq@yJ_-Mr7Y&B z^A5^SCP6{t(ymzJ{8GpVK7m(pKegOj7?m>-n%M7Yu;A5{gUmoRxugJ+TSV=Fjy_tV ztbBJorZXN?62lh{msvI3&mA_DJt}Ir{~f(8MSm}i7@E6iy7CoyVPtOGV_?*72$3Ry zDZ}|$+hn{f--1R`ER@E+-K6>WHx-yL84+I}UqS-rrU+*z)Ihv*p;C}lh9dD7Eh%yw z;Rali0+Cx(B0d;$bK#Lpp-4@?ASxJ_I%%llCImE235aJU0NQvbI}>5#O*+wFb*d;u zO)X_ASqFDevubKYubFOhf=>4Y(XF9ibh4)3#LZM8&gP?>PTA$T;RzR67|HWi!G*ji zD4~+1NJ0BTH!ncy_XU_N76(v04=MQ-vR>`l;m#Uts3CNgWR95~*%F zHx{j%D0Je(+}xiIs>@iPg)6|^mQ8;Foid1#s$SYiIQgO)im?B+Em%aY3(|%Ic<8s$ zy4Lg`X*xFj9j0M2KFBm&HLtXm7ZtqD18K5sZgn2Wdf(2_uxZiO{57D z=^|Nwm4Mlh_$oo#z5p)1X26<=K4*|P93;rTu1@2r+iC(25z5NHSAfqV*^Nn)ePfsD z8`X55UZ+*{gXcW|T?z9;{gQkvdyxinS_J19ZB|m3+h$oJj{r$X$b9R7ddEIe)R3}X zRXnMp_@bI5>!8Mk_a6a4PE+Q6eAE}TN{}EVagFggEeRSc{gP2k=&P5XA1dqOg&CMB zgX`LaaeaV-@2N;&axFn;Ti+s0>fCjc^YxQl1C|?M=*hWiVpR3sDYKfDMdcHeE$)3W{qH`0KU^N`G%ok!yJR`?V1sc@&N06`ZJpVdnh z%kq&>u2McHP%nV`VAk7Tm@umd?YMF>${RFBNutmcuiSC0CL|r2bRamez~tbOcUHvPn^cf>_|9Abg*WDjVt-{Y0dnpD@5bi?kz zh@X#XbuZ;LlS1h(=0&v!9yzsVwmGf> zXb-I}h>vBf8uSf^0%ah^QR;U5(#rk%ih=J(mKXBL%z{E`+L&*ZB{rdp$nI@|vL2TJ zFSl`C+YVBOxr8cjNh>spPKyU>D~G6T20HG8qS+d*zv-3GT4gnd9FVH1d|=6YHPFAuf^20JJ*qS(!oU*;H^V zxyta^luD2`P69R*v}CDVni?-pde)m#Qw;w4gvy-0i@?f0C{;76akN7AiIG zob=;S6PLH45!9relP(WWYK*UpSp*u;g4Ar@#0)2*$;zlfr@P7T0zH&E8Q1fRTC?+q zH%osMtl9Jvvc65(muhKZT+_28G(+U0ymcAqJ|FD&>=_a#Z=5`D4^)S6~5Eu zItKrpR8Pgb_@exSMWd&omW9AUOLob#%h((hUBLxFECA2d+$3Hgb!^0Xm`d{2oS|AN zj{f?B$M@GpsO7v$7(FO&P(IKRw)5%}*~(lcwez#T=kX4yfS9>!{K$hwxPXEo8;_zXZ8q z^ItS-r|`LEJhi`RFzhp7APWCZRsy{{Ugg~h?%H8;bS&gSD`*wtxypV&i3a`*m!J-o z%>)e6R>jjgu&DwIk6<-rpqW3PuB&!!iTIMP>=kPhx%kZI!o<{CT`sl0F8FGbjX6i- zJIX;xt!NLGjWqEEeeunD3t?nmEVip{?Ur8Yxuk|Ht3Z%!iNHR2xRzuY_L;Rs7}eD9 z>7ha=i1U_%{fBh?QOq5pLrsjAE9MAu6|T@|*B`v=<6ggl?@P(1b}^*auA1)!(I-D? zCTw&=xKibbsS3A-H_E(qQ1rrFVzEC&$i8Xc4QPOVFoY%)i~tS&GJlF7RTmFKTxrUF zVqXsQ>2m5&@K+1_3f%6^zDj$`($t*waN7zc4)WPK2@0QhTsY){mH6cpNf1A2ZWTDm zYcBn67M+hXL_c~?MZ6?}cn-DGCxT26-Uk6RxQf{~?hsBn5u!wzCz5xQ0t#WZE+&0j z6+(>x%D=fWLF3S^IF&q|m}!u&`lQVs5nK!N{r)*}x_}VW+DQeclp8XxkeAUt5}6xl zxreHQ!?}_s2p+llNH5MT|mh-eEVx<_XazT19%bFbf4v`3A zC5Wkn@c=QKw^+(m)MF|A5oy>&s;(3-1HMNc%jqcJ4naU(E}5vBbclfc(jOZyyL}R$ zJtYX)&{d#v!l2h=Wcd$J9X{ZfiaR=$x{m-i)*S3?EE<_dI{Wp@pp~SfKflT8DM{ss zSmUUWvL*Pm|3mL}v=iWe#DQJ?tjLF*OeewK^rk_IwN2v2+_XA2P{|YyNow7^`@QLz z3_p2?V-@+)S9{5M2H6W_4=iA=qIY)iRVsl}7cM~k$nu&(HCGhic%fwQl7BvWD`KYy zU-U7EXflGrE!G7=EG^moNN9a2K=b*GvBBUpsZt#aG6qO$O+*|E#0lt~=xYv6?i=P) zbOR&P);0d}r>|vlN5V8!K{9Y-Zv`8k2}Wd#?49E9z{rTB&x{a$Pm3dtag>Q7VR-I! zM}#Ism_7KBPp^5Uw zp=tW%Sk!8eK+DdxjyvT7bV!2QY95v*cmD*a>Z!#@Tl2^^)qGw%#dugdK|HBV5(~J+ za;{o?%Mh}K0{N!Q+RCk`QXwq0kgHITD(f9S3%3A^Dw&E z-2}5A2_c$eot^@$z13k@0^?U5EQFOcKbaPNJSEtdowr)kzUL>K?wK-Vm$g^wSzSxyn=a za4P&QlY$@#LuCt9`*wxTB_fF-$e+6jIgY~#&fyqaj7)+Q7|eVEG~-AQz0M_3xhvba zR>E4pFm6RQwdTEPWlvJX=ph|~7)){(o22krA9ah|h&xnP15$Lx@B=mhsaZqnC}~@n?jL=oU_(}mn2H>;2r6)i(Uoaej-dQ9dWV^pDi78Hgji^(*6d3*exRw9FwW6FlPQGgDI}A&Nlq3u4eMhn8wCLt-=~ArWIu*T(rY1fRV& zGPUgPrMO~J#w|=-VcO%<6&6Keyq;2xloPjnG6Wj1TakQda}olBgye2+t`KeL;W#_aPh;ZX-c9SAol=b8;9cs zaNeh-%nj*V%RGx}D7m*N5=Fejb@!7(kt>NplTA2BDm)^)FmJ!3PY)0nJ`Lh3k3=Kn zM)Rs_@D0E;GAd(x1KZAPVNnj2d0to4K7NJr)mScstL+s04XC*rM_H0+f?8701o}|c z5n3UqY8iW=6~&kW)HF5n+BwNaAxZtEFob!HMAoR!iaNsp~6?W42f?Wx|Sk!>D*kLP|FL4MKb3w zLzBlR$|ZgnkDzA9#gA}sBW!8NnvcMuh^4EbWU*+UQ&%j?IY$oB*QPCw{Mc{a{HV;- z_ykT&2EnuEkOhr5$eIBu4;tSE=%jo3EQN6ln|}hEe|*KHzLx;?k!*P3ZUrxYe4;u< z^=YW=bI{xN=i&QDq+z{d?IQEZ${pM03SXA^R7UEa-BrL=yJEXT-m3KAZWQ0JGBgHsE4OIpfZhhk zUAyoFbv^+KahAqNVMIn2Qv^ao5&gLIY)d2qkv`7E=Wwhg_kK@Og-9bHR5=3pQ%i88 za6U+|s{pavO{WW^H;8`P^k2Ua!h9jYF&52bPR4OcL>aE3h+P^2+N>e65V59p3N9Vu zC0zt6SOT5`NZBD_(SHHb^uaE^MchbkpfoOy43?%Z{5ugqdsE0_N_d8>aN@9nL~5^# zA&z1kPQP?aXplB5 zRREHWonW~&G!jhnZG$W{VFOnN5VV2PNRSUEJM+LDwW+aLYVH$E&4l=5;buFKE8hT8 zuH-6Hfoy%R+nVg}aumXw+!(vl93tbs6V^lJKPOP8x1&MvXTP((~Y!^mLDZMK{i;vuwy3# zD5@%RJE_2JRX1++>0HRtaIpRN^H_B^ZIJ&kV^o0AAuJBob5go31??oI@nuutO~@zpnW^A=q?Xg8@!NWzed zw!*y;8HwVY&pK(``A)f-;a;kPxv80kfywH?h;X`Ddp}PVg;yCrSx-_-a#=@Fg$F;H zFYt--j7vQ<1>TA^8j3t&(|}UU~_poo=b0m3fw|k*|pq#6x*|-AcK}DN(;yOQS__o+8aB%3@ku zuH59gafNdFOY`l(mB$zk%SmiN;|OE{=}t(CM*uXi9B>7~my5_>ZZ$VP!BtjB~{ zNJRg`XSI13I9LTuZx3EWFT>Qh`Tfa5vR(tb$jO#R_>VuKEUK%*1sqnNoq>v2d)(nx z&UJH@|I@}<{5uLTecP;;6U~EC@)VB>;vgiNH{$P}CO`xv=T89f?EbT=z4U6f)C5pWjP%?uE7SvAtsX4c#54{ixzLRW8uw7+KqV|eyT*Wt^SA$nsL|kRzzS1QL+si^8;L}+1Ip7%%we;SjPm7zyND!azAT_5oC(*hk({LeZiCuk&_b=&I;jFA$r|eQJ}~2 zJ#o6c+`>cMKuqJPD=YLXr<&ABl}>-nF_^Zm0ZsKnseXg0P0QwLNd4A{n*PpF>n=9M zpCh#C{+(^QTEW$u9Id<6J+jlbhptKO*IpJ0AFu z^j9HKd!kVi1M`RKE+J>2l5i42_v+B~Ie@iEx@}lDHO2&;h2P;zlJ0~hJ{Z8M4XW#d zpIW^cQY5Uqh;>H)CMG&)qrxN_pM6KUP(lM9&k=c_|C-27mfW$UNc${Q8p+5vM^Lsb ze#}jE5+MbSDA|K1Qshc0-&v;!`+Qi{OG@xej6?I2JU+%BB zXqvSoqp6`&uqu_>q~_HRrYY3$H7Y%t8Mh2lpWYFh zT77g=&XcBbK21->ix$EgqM_ycY!m(kwdb!;@2x<;GealOSL}IlHRO-iG(YGF9geyi zepnn4`;F7MNxn63FMwk#Dp#gVO15ess#O>WRToJL7h{ck*Bt(Bx_dULR23xBt7kxc z@m1m%`k?xxSYTY7-Hxo>P$V8Q= zBnnz9*d+7030W;|g6xQCxlQd~lUT2Iqtl=Fsj_SK3DSd{<#*5VcSqEwh1zYdk#@$C zr)ptb;Nl&Z=+hL@6e8?LsHG~~v;dz)kvn)X$oRB$fzNf1qy9hvR_BY$G-(H7mC{?)gLSeV49i*) zv!n9YqhH~A!->EYVAqg zx-2xIU)3rrj~b#EM%11+&78d&Hh=G|P1jy%ty^0zTCMwsr)Uqn+!%YLP%QEhpP!Ch z<}`82F3m^LQS%b+1?ki!am@9v<>-!@O@ zr}Amo_v}@>T4ttAchstH%RVFyR{i_0+w~7#H|@g8Ka^wbF|pIJMx53W1vldo{B- zCQ7?#)Xu$H?-1(fnc4(&m?2c7S1_pgT9Wc~T(PLey0x>dTq^KixnyNbr}NEoeDtvP zIP<+ZV%D)h-eRf8FHcs4$4CK)^>>ftGf`tbX|am|D6c494aLwjrIDpf(C*wrI5m$a zf#g0fXcxMjf4su5rU!9jN3&tpiw;>hz*8cu<*iC4g*md4NgI^|JzqeR7bsY5h>)mx zXX(ygOY*jtf8Wl6t}-mUw3Qye75Dsa5R}+L7~g&^4~bUunjT;LE%4vK3sl~pF)ADo z>A_>sy_&gD>ARPEQh}u7Q9ayPDNo7+vORxKqD39G5dNLVW2^QeEW!(|xiv^CkJj%iK}n1B4qW0$#nk-$2E5g=F4+ z>?JTM6G%Jzu!GlVQ86rm+m46P<@*m!6L;Yqas6A>O*M?qf*-$zO4@yGq3kzpzO{)! z9nelkri$_|0g`rZCUIKMkO#GWOl2a?L+ zWIm>;r89jdjBy;Lr_L_-%u^ygT8H3cjwcQfCrG_7Nk`VEHmJ`|;@`$NE6I~{LIm%s z6bO)8QV3D|%Lo$-R08skqEVkiUaVJg2-o6|Oy*uH2^75qjFrbOc=lqxNAsWt&WmH9wo`eLuTtju)CpdlXSr}!W3^Ych`gf- z(qtE7a~YU#E#Rp=k5ppZPr+i8*;O6s7H?I%srJO?l0mT>pYTC`mI>GTc@-s6wrHVp z$KjMLh`ekX#lf#&e~0nd8afs7a0)_wu7C3O+Q8zlMKCy3GsI{jDb_i=K37_KPcZsk z)0wo<>DuJLxuv*~)NGC1l+S4z-nhGYAC-`HDPp-l_N4#g8ZpOGde`WV!K>YIVO+(G=K3H_4B9qHtYw=7>HL(CeI{a^ z6yOaCnUPXzZCOn^Eh<=f5MoSuXz@@w`y#E6Xa@y76i(Hb6lNWb`G@+7Y6XEh?UE`Z8>kh z?i#cQ;x$7iIedmGu*4mlXQBmj8fqoXPf3-avGIMNB57&^ye3dTClOR#3Go$E38Ljx z%7-K(R3)(}=P7?E`mmE~u22l=NmYWB*tmM+k-Zv$>a`O_LlME;*%v{4R)rwFH=R(w z$q?>$yoCF&m2ldhM=&j<6CAQnz>|e2cw(b`$t_PxlK=J9O+@`6L@g(JdKpm)8wB!X z<1lCG=-J0@{l@1B(k!ipNHq$Lk)y4x7}u^R+c_~3T@!iXh7IEQe=_*{Ealogq5;4 zQA0PjhOF_YE7e4sk9z^!eAb=rDEhOCnJjxgz2}@a1_R;tn4VTyX&ZOg_mE1P-aV|P zFN-E7Zwy?XyGRS1A^n!W{S|$yzuxoGE>IgqbfWF;e5a1aJAyc2)aW@Ryx#~&x|TsH{r zbTO0T-@y}JOHABsGsXw=0*hdzOsTU)^tutv;1DGJV`V*0EvfOX|Kw^~ubw4`xd;J4 zLD}s~!r&zRQpNZDb0cXZHNWDJa=Vc(j21x2)6YiQ<1CLjF_v1D=Nma4q{lDmEP<%P z$&I4W@sQG**OPnk6t+?OL{MtAn#j|R68r=(pUo8oH9^Wx$3sWK9R~CMI171wvN)+` zcFEnTTFxXStGuAfEuOh5K(3!i@SqSldGAZZ4}OXV`Op9SJQL)s!^$r8c>V{bxL(Tb zHJ>q6ZcQ3n)8v7aiBRf4=NC`PBh|wlAO#NJa~%-wHYHc3K1eip!<)3VykMjTNJHfS zA#l)&r0P`&iA%#!iCG5)OB#)HhI@a~`a>P-Pvg1Y$=N9Fwo>~lMD}{q1z~c1UHMTW zv58Jm4A4Tn1L`#GAvQEs9M>9}q6afV50KLwD^brVTG`c71IC?dibTj9R)%UvfRS5( zWQ^-X@PY&y$D|6Wso9ZQQo+QAO(O~a_JIQO%5J4w1Z^T~UoW;<7&i)1Oxee}I6x}f zDAh|#2-ki~OqxETQ&YG*EN&O3MeqziX5QqG9gFprOtB=ENH1~*uM@3|0%J+>)r&_#&k}0`T zximG7@z$V`A(mYRmAz3_wKHn<#J0m`)1kDa2u)5N5g|!s8_gaXSD^3bS=Mx4-&V}y z#wpBN(5Yebdz;!EDnW|Bod5%hy1i+FZW{7P%CLorheQX+_erR#QcEh^sBiLQy=aWJ z5-(|Jr#hlR<)q#|e-I%YiQ^dv7EX&aA+Pd9m2*5bEuh*KCn^^g)!H*K1W|dU=Ll*a z_r31V*`>%`CQlP1q!3}H*G6k21V2>*q=Jo3W1R@$dyUu>PH$JVPRFYZONcKaR~0fu z+rxbP+r+$Al~9>}cmen#tlTFvQhN(6L)5vspDt!y_yNwePA;I7+NmXW zW^tie9W&2ib>1tr(U?#P2<{-b-`gs5p@E9R=~qmXX#bYHN#OMh*J|W&o(t(!a}CN| zd$KM4%lr&N*?gU(CWwM7nqouoyJ>a*KbKfJ{;6 z21u0m783N?x0fYJtlCJJX0gO`XoxSPOHdrBt#TqARi)4mKI$g-5TB6aXSncgLKxud z<6N}sQL!agokq;(bDZH~f&YlcQOT7&fq52I@!gH+EtoV(C}Cbp6-=K+Vg3FVO=>0w zxdSkRpf+PFT2`8*h)Px(uE@Je)z1-DtprNT)p6sl3bVG}DI$0OsB<|`sFX_rHa5=b z&7xMxEDnG7C^;roh&HWMrvB9Bc{BsrLFgci&#A4;=d2tW$InT`xsDspb*QM#w%5DH{zR(@VF0t^txT z`Vl8`%VJrEc0|kTwMxR}rc?*b%ObuEhRK0V#%bWiu0?lTey(=E4*xCnay@r#iSwuB^uFybfa0uKlb zngPvaS{i0XFuInWyL&!@M0$nlN_BBXRB&SFK_0Hi2_!fVUZ5^id3_WpU zQ}cD5NEXX~XQVGeH}$DIvc7NEs&pL|&ic@F6q+lME@HCFVpGYX*^ zu}Uq=^2v?WAd5cKPIeJTO_*gkIYNNs0^Za_z75}&09SaAHn|=grHI6%YuOpvVC1vq zLB2v``yO`k?QS>jW7i{Lsx1?@@14XqGVnvg8E=T#vU_Z=CPKzJLS`5T5=0_tH*J3b zlg(RQXh8}?7HdzOFBH*j3l{w*qV+NyXC$Y1w+qCm&(4So+L^w?K(5KcOFyzcxSPz$ z5Hiv^fvN3$!LOEDq6eN^3GI8v#2S$e3P4sclNhLl67hk?kGN%miFgj%jxBBPJ(9O| zV%dfx?%l&rhK11koR-9mQ%G)NdF%;w%Uy#{MhOUd0Oo0J#V5n-ewpvr&ok+>&)RX* zI2aF3Jc*lM2yFWvSa9KE3Px|$XsxQfV|+~!+RX)t?2g`#$bRAVi0r&czZ0UtPVN~C z{f$DI-Xzrk_Te+>6DCL5%(X8=4D$-@`YOa|%xzZ8(Egw`lS~;3&Q7^edvJWx@_lf^ z*v+|bHE67~z0A~_q(}OyKD2F_;O{t@)&+ONkBm&kZ)McJJ4Lx}h@V{4-h5N4cHovb z+w?+HyT&x&Pyn@OViG-e?0$I9l*S8u$^`hN8~16{Fm5_}1z)-k48El2c*pSgronw` z2>zhAz`TW8!4{#ihe%MP!R#Vo1F?1N7FB$9ZQo<;;T|eo#ua*N2810<6)jycOAr}G z-!T3t+l7b|V;6E3gQFZ8wtjLjYKI_8cFW+Sj}8N=PL9O|N)D?h`aU>Jk35kAfo>w% zOMvF!uX+3!xuvkFVm@>~HI8KC#p0jAA!J?nh{gm5OmqsM>mJ*DwYcB(E)5HI4|3+n z%HB1M$K(cg?}XyP>PU7taH7M{P5N0QsEusjq4%U^XK4c3SYH~sMRaW)*^Qs=W~qSA zrQZ}5Y@Rr>q2#&EB>nM!?eAF5)L2(`^;iHc3!GQQLM8 zK8BaD49EP#sW#@%nif0*#)9R)%zJH|`k^ zw_npi57K&L z(8Sw0xO*F4Q%g?KCL+hMmeZ4i(;@XIC+flQf_|U8*|%Z$KD~jnbr7tf${$Zbbajz+ zN0@!vf}Sozr@n+Ra&9gXxl_SX)Wt@Ik;-rYl;qZqZ_&T(h~02H03CALK0{~#~>t_^fQ`0(BdM8~l~z&OG$Ij+Hy zeYu}d;Ube2&qf{|As@_;o{b)!y!u+XBa63`Il{zz5gz=DZlTsK+5AM=6L{YMD)~mj z?$DR_hhaEev{i`1FmS%;#&JMPWV&{HboBOdcJU}1h{JIVeqM`LHL`1@ZIWB zh>JdZDBci!_d*=@dmQY02*%|~^$)edRgGWl01y)pZ4CY+2n-m4q>~D24)$+>{RdF2 z0|26?c0k-=3f)EDTfn^sAZ#OWBTy{N;4gKdcYeA;U0n&Ys{<{bL%3AH-bW}drc=4y z;5Q2YRX>+#Sm%QcugY7%Ci!9~sQ$}T+%M(c2JmiE>cX8=+b5_zT1Fh~n;OPew- zy3Ti=YtP%cMj&>@(}%%-52YC-V)w_w(`dd6FYgeQ3TGCi1%JHqM)Qrp+|j+fgL+n6 zWJ!0NYe_fh9Jf0(IdwuuTx0I)vS* z$K!o4!>HnFWlhZ^!Xj+9Mz&D&5u)c(<0tfdI;7`oVIlT}oQ`2QWNwpr2+G&^o4aY6 zX4Z!rVbW@__GyP3m75Tee-N^JENtAJP=RrZznh9@Pwq7uAT?qs+MBh#kWcEV3t{cl ztO!rnn8I|G+Hjk0jKNrgNJ9)q;I|{G+I$x=6vMjYJHuK}(9nKD32%lqkf!J9S{M^- z%%5(IL=eU;&gdDI>_%#8Y1oIUK?aE*7!I3j%YxHOgE0g61jRvEqtK+%xlqh4o#9~_ zY>4wzc@daVBNxRL&=@u{=hp3=uHoB|1gz2w~JI?qH-DZANNyTiMzdM-kXJ+(ZBsr<53nj|POUFBJjChMNJv;BCxok)eju9GI zLUrQ#Ml1MNallCh9qiHw?FB)+udCq>c+O-C3E*B$*!RT7b86(=F$2vp7ET%5A79go@*bieGBchC^5e~%JwK#`jk7B^09ZLZ-zF<#{82TFxi!+szw3Mll z1d69#5s^*k<-({kY^Ja$2=Qul6|wqDQU3VCD77Rl9bL+%ZvP@}!o03v2#w0`f3fjV zr_sHe8MMffe7@N2^a?Tm>m-1BRJTPq4%T&p99_uT(*&fvx?4(N31ew)=$58kj2BD2 zF3L;`zf@E0qP=L!RM&jxP5sSI`F2mIzTGX?dD33iDNhzz#$sRDEvLj3m$c6rNvk2I zX);UL%L1Eahzl$q)#VjhJxTN%Q>~@x`niQoSkZxPCd8x(0nz@?Er{J?PY^j6r_f6@ z;lfm3!|q-#?0;lsk>hC(nj~`t3?`NNy1GKC2R25Qw|B&**xU3ZZKSUD%86I;yb7!7 zW}TqnJjR{WZ#pAf6kI#M#IJqRL0wr>x2lE9qmfsOBH&Klg^z0Hb|)=%>O@p+Qf7K} z&=MP1Q{@%5%)utBL-ge-We>n)Nwm7@HY(X=L>@*oOU=E9J<4nhOHgW*XDwW>PFaL5 zwb7QaCreJ^#D{k{hV_&TW!Z^B0W85t$dE^wDrBK-+^SO!W+*;FvFj=-28l2x8SED| zydklEhQBs-u%-7ClqbsnM`%#S)5uPM?&CcR&xKoRl-P<}&)$`S2 zl=|UO72VNbxT(R;a2H%G5}a|(MoekKJgMo)ZVly1f+8$U64NnX z%h-fC*4~Z7oq-}6^Jdz@K^j8Ig&HNg&zn;1P=s3=mpSKwPNi9RCoM^37Y1^^%0{8I zRrc=gl@(kWCV0EGL~e-Sk5E3c`}{D4m})*JGxC%LwDa^5Cu&kDk>o~6c{?&2f?OjG zq+MDjgo8GuZvP&|9$XZO>ej1ICjlY2%`0 z0UOhx=&;v3X>F{?&efBe=ard`m#efC=rufMCpmi(7m8w?4ax|t1f9m)cqvng__kAL z@t56xkkeP={T7w{tDNlho%{Z~siO$X&jrd**ykOEVU5FIWOIN143ZEzI%(Mw1J(G? z{`ke&OzpTaF-4?sSKp?1v(aqt+2s-emAx`j7jv2@&PJg?FI+ah_g2=0(NsXIhwCe1<3dKz$GuCQU&}X2AeIlmd9YWN|(yP(p1m!zUbyPo$t{Ibb zyoNP(#ueR862EaNM^$u9H>f8)rh6lVNi5=;h|q772FjTm)iqIrca!fJm68#ABZ;y` zHGVOS>!BCFlQ?rkmHBvJa9g8x0Img>I)}TcfA-Mix`FBTgI`81CNvej{7YyhgOS6U zhW$%XRI~Y&&N5o&WX!~5mPlsuPuhZ(AtMvyBn`p|#ar&XH4^UBqzXdt*7xx-e(byrRY`d_}R2uSf zF9U-AmnyX`8G1ZTf&$1l&n@M-=J?NG3VBQuF?B;SZp4+vzOUoQ+_eBDbG`l#hYM4QawW*l+jg6;IZiN?)VnqYWm zQ9`!0hkTVoSbct&@`;2m=kSdY{FPK(Yi6h-sV@%ycgP+v5J!_I9vB@7t_)>ov4lirDj7cQ%VD%5VrHA`0AM zU@wHmnhk_Uh>jrLe3YdzWyv9=nOAlazZ-}#p?5Q7OU@0MGKGJV$lxwz*5$I5H%>gU zSvi>rz}84ln$UT*ZdMp9Xow@Yop-nC#+J6!lwBXuUTNRdWvTpCNNl&nC*Fl`IY)Oh zQpGxT7V`W+Vse}pkjo3=D_q_l+yh-W(l$(3RRgD&FjfZT3u^0DYNK&lz3d@%7bJ1p z^vYulT&&g@XMgNCA*%Fk0Vu5GL<8tT9y-QnBefk)it6^I$l01gue^f>&ql&E-sm5; za^6lTewVVe1HaKdMI`RE-Qy;&H`TUttz&zOh5eS39YW=Doz#V!C^h3DV_4WD{oDiJ z3;TazEuX~GBYC)06Qr$#je9AE>c#a962r$~C3)_!?O0oBjqwnSB~^?N_pjba@*k`T z$1&3bwfKEe{pe14ZJ{ZBFO3mV=h%|qEA@Q{D1o~7i@@#*dB>LlSv|0{ZE+`!GyJ16 zf1#G12lm}x4(z3Fk!@s0)%B%skr?bHZ4m?ei{W$<qy$Y74 ztoFv-l*rd{&x&~`urJ@Km)j%ZVjO(Gv4Kj;8?Dh5gsctB0R+g)Mb2d(37?XLJZ5<- zr+v&Z5f=P}&=vq;qC159+ILLaPqf#SS%xRA)smL4uu^#-S^N=&78TUW8c50+jT>3w zrc@em;o7KhR#sW#>Ji1eCddmLB}u&wxwpHDZ(QIz(gxMuS2l2=RF_55ZVW|`iRHL+ zapka&@ps7o+w(8ZI|;B=HEDeut{fHwISB%aq3nKCjlZ_#IC+h&Bu5_!3%uKe?nyst2~pU=kroP0SCg`%XrC{iQaY+90)e z{yZ1o>htEB+oC6d_#TJI{aJ|((fVP%be@O^h9YF7$i#qE;#3+4?uCZLZd1b{BGZDe zmjxXpQ7qaDd8*G4Mv8gGV#w3wZLBd%PzS+wyQL~IVTG8%&nh9C6`zxtB-P&`5nY8jaQPpIB9?1CL##x2_<{<$)wQUzKe1i z?Xg84j`xP^8foRI%0!$iXiUdNZO?s{Ljx)xS;8{c?5{=En)qHerT+P|ud_v+7+c`6dV6nPWw+B+U|0-sk=y z_V|XRWgP3!G6mzAzD{+Is=h+Y-kX&A5hZ)d$-OK}ph=KJ!m-?L=`X0R<9;)DuxT3ui`E%FJ*BKW$yL~H6mL+WjWa^ z8Yb#8dmFHQF?5S{5)Kua{%%7Xd%3W+^uo4+?MCQ)L0p_^Z)e%0<0h=Zu}@Q>JsRG) zRZ>Khb{#!vu)DFoLzLbOoyl0Y#%m_?o0NM?Y>I;1COX08xB?*#+318b+M_y@XoU+; zldNKf(^d48UXAhw{a92);Bd371p_=>6y+XLRHK}QQElrgHFpQQNQx#;7O z=7PdLw(w4|4^Sk}D>fC3YXagSwS}s?FXDQ~4l49>WQuUUlTYtS;6Ds^=-s@hQQ1M)op9Mb?Wc@JQk36o}wN?TXv3dbn1vfUF1ZoElWw_1>4glU2<`w6XJw!G$XgNxh=*@7HH#$xExBc8I}q*1iQQJ zB}Ed!G^wyOkEvm07MkV|)_nUv$#4cWzijhX*fz4P;&UCBMrtd|;D_gFujokabn?)w zTx?-@(yC==SlUtD1D*6h+YxnAV-?nJr;^i7^P%X%YM^qf^&F*s5WQ48K5NOoTKieW z&O#Y`ir%BwWr-K(H2yaErowK#9!m+j7dqZu8y1x!etgZ4(P%|GH4UDDiArLI+Hy!L zgH6YxrzBE+_O+=K2^a24UhPWB_L6x-4JWo?bc=lZIi@wL1@`?ub}QhmL+ve-Ovz&{ zu=m_c73Kf=Ua2v?auLa0R7xDmZ5~Wo=tgVRz5IhJzCUGTH2}YvS*odZp$z<=<`mle zr!a*I#N_E`Fc!D_22tlJFG;b(?$G4Ji~|%RQy_M;nJ}Xh<5EtG_KMx$xlxw;)1DIT z(yPY*cJ6Dsc4Sz{+ChB&L|1d2@cd7uYVR&?HTNf8oslnNWhdp1URFGxe9_c4eoPB5 zQfZgn%3-;r4U*`g&!jC}sQWOU$Z6m9G7|81-m`tXMToo{8x3aC4D8g=2p{MND(yihUHTeb-cg)~s9WW$D;y z&XQTN^9ktgXW#8ov21!$^N?yMpNJIRO=bnzU6i>sNl}F33TqR;K*MUjiTU$b*f3v2 zo>#M$k9lXQo19W#fq3or6wB|;J?#rf)hsUlRf%@yHd*?`n#7$(do6NUmK#!#Dth?V zz6_xAv2t@~Qu_-S64qX#=mIfy?@|em+eGzu^A@#ivGAzfLnE0XO-6FG&!HOX5CD~kRTCEC$QEzs zT#~3=r$tkI!N%8;m`iL7*Ke;;AJO8Hec=>lHe!Wlb}OOq*xXHWb<+t4#^b}90CuX}Ku5Tpn$2ADv5?iXjQ;^8%Z-Ig@;WU^x-BZZ zKY$lkQ;CZQ+Ld{t6A5#ie0y(HF=&2BM%=N5G!FIE&^`xeh<+3=&x$Z%v?pdL6Eer&dR-< zS-fvAE20P&owuR`bYU#~fUbCFiWI%E18=|B8(~_Eh_F-oPD;xQJLHh8(5yBu1-hj6 z*ea_@!&D>_=04BGuiVYOB&o+1s?0eOGC90eWG=N5<|YYmA}jA5^WA+OFSBXIPFqq) z%oYpPp2VSs_O#xpyM36CKN)@DRtA%M&KVbAoiAys@xwc@R^(1<0Ku61e!iw)5wc zcoXIo@dAYePJR@(% z;xTCfIJ6-S)r_`eUGFvscP|cO7R=z>yI9OxFy!VB{uok*|6jt8C}DW4`>B^DWgm8S z+D=%)JXR$gE{I&ll^7%P^v<2_=Pc{gmb-Od@IG|jh%whK!a2eJM1Py)o*Io7*1 z>xfss@pV|NG{)zEhm{;)FsFjIDRYr>0{kZzQ(}R+AslrEzp(^-f^aazI~nio;v98R zJgzyt9G<D(WE#VOztI$ZIHN~Q5ILOXljc9!RoWY*f&nUr?hS_$VKzA z(^DLLX{9<|1!wGmLIb$f;FHL%I;f|zKUrma+ z#X!0!`fyGnjB=D|7;5u@IDOIAFVJm2`Jq;|znHN#nj$eq1V%r@yj59u7xZ(!5x+9W zvuau9SeDQE?Qd(~6XB{He=1A$MVIHQxQj*$zuRVB7M9I$)fa71m6OXnRi9ZT()EJp z+s|%UWqZ6GJMG7$I-TB#pPtf zttCG#W|ssdVoBHe#MLnD6CR5i6S6s=lZawkq1^a8zIP6prdO^;9nUz_UeejA!9RbdCco_@}i z<#No44#u zUtFEHJ)Zr@Nz$Fx(d~KNp^rxAkWQMd_B#vl(zj~`#SsLX<3GoH=5{K6Crrq%4aS}T z?X~(yjKGPGM)atiDID)X;`7T<@@rpll~llEe6P%(Sg~>U_QPGt)c&1d4li_p#ska-#W&%D?_{0Do};Gr#Vt z>NWQ-s7JfKt}E1eh{|No&B==J(bV!hA3q$v#p>Mz8vAA&4ig1= zfcy;`a_3hN>A~ka+vA$Y4TZeQB_c-WZ9D>Lqmmb{0OE2(LJVwmZIbW2rF*hls>PR6 z+RDDZPTDc5&DATn)!4kHL>+FEv_`whes~MfH9C*U+eh;ilAqlkQTBU3_M>IC+ICVS zMU{O-sU(UtEJ0uqx-DmoG)8()$gbGKidBy~uq&Ip5d%pxFHPy7(ip8v{G6S=zLdLu zqB&!oV4#mkA14!(=mvar=8{&5u53GL9ILC_>Gr(0+LWW4#;~p*?tHJ}xF#_6?A`u? zjZr9)G=@BfkAN?ibw4iy81rC~>x2O9qUU6kNZL(m*ASQp83w~TEaZ-!*vZhwzf58# zqT_I>=Hw{UZqH#RF%Qof=HXAUcx`W=gl}SO?LON_bDf`gcyTGgEzO!F`5AaMa&D`V z_#Ci+b;*_}BO(LNw2?eXXutE^{#qGcXPx|7!0xk;Yu! zb}jIrMFg1_9nsTS^oi=-HnPOdR*8=60#ko?zK8#!vjbiiYJ_!=e(U1W$De$=owlpE z%qW6f95h}C|3~T?b@>9GFzjBE#ka*Kja7Vqh3Scfr$=^0E`(C+7MFUX;;a46wbf93 zaIR^ugf?G%eRo7tFS5S4U86M&7g^?QcG^Xjd7B=qqvw=*N3^ZaF}23;MVH(N92P@`;!Fs5zQIyp;aKmGeTaBLr^!*f0}5%(&1caM%}Q^BdW{K-0|+V zGF(pY^(=VvVCT}dYhsIhbK!MiB?|qj%7aT?HUpi?mH9LEXJGDE`!z*+jIjDi#ma~i zv`mvd%Xpp$;eMDQ=Bt}5Vx@-mhC0+SbA!48%vEGwuf9Vj*wfd8?K@=qPKOJ$We%|G zB{}iVu|D5+yDg5CS#b~TKToI;y%*a}wry{Bp+@=_hnKtyfpjtnw$#{`w?q#isVh1? zF>))l_2Xc(A4pbxIAd5Zv2}RMDfzWrBfyL6%s*`9VNuSF@x6>F2a&8D9u;1w#*z7t zX~$9DE{;)&uv6RYq{uXkI<{$`M9q>81GE#-Uv#r|AkN7L)8j0WOx+VU#Ba8@z>Q(N z_M`?w&AxU` zyoaeeb|oT+uybKgAY&I9t!&;;lL5r<^2iaa1Rd)RN=5BQwBv}t>()R}H36i(*L5{uxn z%v|+aZ_@8LcRq)q8CZAFs-1Yk^a%Xb;cqYeO#$!5Ja?#?-FLe(YWFbLZTTW>!(F=J zr%1+hu4E?y~xPAWC zGpFS`4JO&V#+7V4uKhWc&YZCBG|JURyXE3}JQ0IpudHn1dw6N-L^Rt)Q;WV$K!i6! zntK7oH$xXrK{Jgq;;ysb+i6!`#nRjZbLFk7ZKM6$y9i0fAg3$f|C99pa`?L%Osw6b z;EN9fu>G~0tBJiZoYl4|={$d2;Ow^wKm!o1;#Y4u5<^lJE9 zuT=FS2$Qo>m#GP5Z>^=u7in0clcCbz1vd7(x{T_IiNDW)J(-~Zdzu&Z5i7K-&iX>R*wHB7;^)ZZ5{p%Gg zvF`~9hB|+JxDP!Uw3)dh!XOZ4{rU`*W{# zCvqjVpU^K^%tk>at%};85R1n z47uM;ZFO4_dQCUE4F7TIndO7 zwQ6wqNm}xZhU7eczTBv*$VxfsSf+@1 zQ8K#_KEJcT_D1V~xaPChZJ?NTNw$Q0#5N;)B^_`v;#oOl$d|#XZzPwC*`rAn*^%sB zt>iSBDz2s-8^)$iJz}7ATfN<=IzR70Jz_ zrfc8TZhsfC(+>NMAw~+Fj6FwoZ_*uWW~T{za34V!Qu8Ub+r4V^HIi<~i9XC%xA+gH zN;ev{=&cKdl6qDYy6`9k=99~S2aByJZkmiBTC+C62ZivH~lZA*`uo{Hurchzn}4b>MT5NW(&!oKGEE+q$<)cHxbQ(oD@AK$$H z>n$p(wch={yX4c$@eKfeZasSUpFG6fi3^a0G+OsDoEdZNx@_<1CEh9bppk_}VVe_conXf|vl8Kd!yb}`)08?z;$CfQD12RY z*G|x~@=Lc-dB-}mDr+0=Ax_fP-I>s$9;4}%bfzasFK>4^Z_6cBM7B0`f*zF#cd5y? z_VWPUFEO^Y?itoCF@Z;FLwA_-Yk#EDm$X5V&CEsUkf`%AfBokE(T8sN7b`BGJ-+q- z_+M4Jrcyn%RLaYMQC^N#9}S1x54g*N#?Mp1CUgb$ESin~;DP5KQbF^bOicyNVTkTk zz;G&=ngdn<=^zO7t9UN>1EqC@pTzi0OV7?sk8RS9wiIp z2$tSjN~{&H2A%b0(0p50S7qs2$rA92M{T5`?@a~MSozj3v<35H3sinaEYlylE@ZzK zP>RePyULB%T>TAwPHCT0o|`To2pUa7#dJogpz$sske_uO@>MB64MDyS?dU_Tt^^;a zm{n;X{vkd>8V9W|m^tM@svp4*(aiTVE@bg3^nOqWYtWb>v*8i!pz%x&F}CqKLd~aE zDrco~6(E0k`p%r2hKNDqsfvq{8^IVRoj!@Z=?9Hh!iv11EAmDU}2c6ouD_3&HXwY=PTJ5}CQ-i3qjO|WGN*e>jO48rllQPN6b3pjqcwHIoM zIex5_@Sk<@xNuhDX!M z`Z-8IF0U65v2oNVyQ>_p0$2fwJ@P=L^9!m6+JCwZ0VS{C_F(j&@moYV*9Av4<5x4~ z#t|~0uo*zSY9^zg1$?KP$wTJY%b98>%NA%`pbU^%1~cOVP>qY!Ie_JF0|$7YK-tyhX`Z@%~y#yK6R5@?NWk zz{9BW^nolpC}6;%0t4i;*78|PKG#@2*O1S3T)>+tVVWVPDd1)bxYdGqEBV}E`P@OUwhOH7kMVOHYGvs_q zoKI2wLstAl6yX_(@C-SRij%4QvsM9~C7ro2Up z@G3=kE%fzF1V+=>s14pAU!Qx>r+_#5+$_yXet8*@Yfq)CnQGee3MxYkJN|i|+XD;> z{D9!1tA=(DxEU}!q`WhwoZEvV4pQTMn0A4pg9})*ERI8L+BDGWEDg(aubYE}X)m32 z(hxn35K{;d>314t<1~Oyr;%|>r?Zf`2aF!rz02J5D>$P$$Y&MN@XC$P@ryH&_~pS5 z+(jsD-uJM~zL%wGEZs|!82{KS4+SXZX>xlSrxwT=$^hJB8dLg}3ibS3((`YT^Q1UW z5@BQ>=pFHVhn(+;^F62#5C2o*b&8y)#d(^XAByusa(*n%kIDIoI6oohZ^Zc<;s-M1 zc}6_XkY}1ae=QvA;){^#hNRoXeL zbn;^qH%DeKMd^_!48|o-Pdq(x7Q_jKN>}NBUZoKY5eoqie9!Ta?x#IupVBnv14qM* z80HF;zPS(0#xZDg;0V(}>jeJ*FqpU+S(OTAOE+UUx)Y?St=be79AOW z9#1o^L-`tVx#2Pv*L{a%-FHZqb%(+g+#!$Fm8Hnq75$^jGe{sdT%M+6ZFvYL&S0%i zlimrL^jgom`b(_RQSG?SEe5S;&~56NP}lY!7Iq!5Nr#*ZN-2kmxl)xg)R>3L z%;LXk!oTW5S(=w&1H%u1oUwCjG->ey;n-R_UO!~w#K12D)=d1!cXNu?8~_i3oVMbS zM51+NwvE@M=&meqPyLxeHF@2b11ui9ZfN91rx3=TZ`hu(xfB!2bDPk&` z^U72{AI8e#Vw1B3E|^yfRDIv)g|pAgXus%YDnz}J<`j|s6j5-3Myf~@>S_J~ubxMS z+Xq5xHKdDl3A}N^iIvGC!%O)%u+j|H(qLKvKeAM0R1qbct%d7AqCjiy6dGgPNF?!HIGBF!+=euBvgMNawGOo%GxHyMlQk-Qx zk5>K78_JCj07GW4gPwM?$VdaiX32wOA^Xr@FK!Evf@44;TE&0Fi}{cITrCYBnoVnI zicZreEdOvi!f7L~GF~;~kvF#M_0q1_1NiA9DCkj2+q4ggxf-7k5|=4!7##gPM*36z zwVs%d@8<~p2~U_m5NW$%DBSW0Y6@PV@E^o&>`3{fD^P%sd^|-@&H{R zqUUh~P|ACYKnANJO#)5=C#-rE86)t{15wgJX>cOd4#l61-)Y1mkDe@m=5U-(ilvlL zo1i%eOTvDIgdeQHU{%u9eyCK%Rq0BpQb9>nx$$XG&r@dxb#Nex)q^^5HphG(*TL+~ zL30EUu)+ke0_$eS2c8WuqkvQth9BDVXynl7#Z`DU1Ncw@&I(|{B>gmedij$l!9coF z2~YrlvC6ZX`e8*`2c9x$Lf1o4js(rev7kZSM`=R^(E?><<>}|ZiM}XWgUEFhiw5;V zt)~)9{}k4e5H(**ivy$Te>Nd{z=b5RaJ<5_I^HEuuKdV4)D zq*lO{S`McgvW2}~Ed%}SIhh;@P7Yh5ki$T5tJ5IVu2*h)#w=FpSg+fY z$Bdf$0E(i5fE{M8&=*UHR2#lE&XenbdD8+18ENLbkMXQ_jDH1W?u2FQgHeWM*TSD; z9#AkMhn}0|k^{QqBEtdCyz7z|j7p?Q%cwnZ*c>3z^>j$jw5_J}Si;d`oT*&6XHc}b z4nQtml-H%kuXA`qhc|TiPbHh5nrvot zoEaVGl|JBYFwQGg#)P7Bq%FckPw7NY=|s;7;O8(J^7FLAGfrao z@$&)vs4Q<<#Sw<*ZIV^SeJagOE1+KjB8SCU8yOe_<)J~a!xO8lJJt6 ze0!~US^glVJqr+ujA`uY5UM>(JE|$|SBQk?H56c)dROA&1By{0(>JAqq6f{tFA)A{ zk1WUG57A%p#oplk-7R*^EwFx}ZHqSvIJIDf`O!+h4zN3bgZz@~`nm`Fs_(&nVu^4_ zkSCC%s$WfKab;TdeOfzx;&5E*&~+v*7ZETz3o8M@%Q_B<=G#sc%hB4Nsvw3;{~h|{ zFn=EhLhD*!w{^_-HTpgT>~`gQZW$SQroM=`v&VUqc*OZTW_X0SAC3X8CM1|Wjz}|m zT#w7yvCuZ7?IVs>jpxn;N(EIDcPbE#<&@%E*6z zd1TPa*k0!L0J=PnEP0(us#k*Km4>AbmJkY5Cv1P8GW`{1+FB(mkqR*u?@N&=w0X8n zqL%4j6SGgvOFL4WqDUd)D!ZAmy$N&?ci(du)X%G}FmOb2d7bULTQP*_<8O(6P?_;d zod;}mjn;bAO2N%k97;J7)B%T5l@cn10Hq{KIzlzUP$Cx4%ymHTN~K!yX(oMv1SHTo zxzORP6v0=}T24N$MlOI0375gjVfJMx{|sHzjM)=JLuOA14H;pYGD3-7izO1A zIRPj?kir!?Dq7(54Bx=zVX37mY52zjD$Qdty&_5SMN7Cm$GMh27n7vg_tL$@n5KOP zc-Oq!Q$;0$Dg@x7{ta2wzd=qBCC`#5c~(Tpvm{EMeTS#c_cUJN7pBe@F?3sj!LDG( zaGX;*j(kt+xEX9qo_RlHujW~Fe5~nDKdIo%euB$j9v93!59B*NMg$lHIB_~O zT=iCDo%21T^TV%~)j{a-J6wxr^+Jc%@mcbvc^uvSs#jw%x>l7OAZ*jWZxb(~l&y6^ zYGn#$dX7pfio?)*4lhtWs3WkYxF$!@e%gm6a9SzasPMdC_EQw=z{i87XcfO?z#o1P zZCfyg&a&hKxU@+T&^9Ms8cUVR8W$$tF~-fHIfVoh=dtEwxw)T7%ALXN=fNC{C0F5& zEi_LiXuR$?9!aK~4MEhcjHp{n5MF0WgLqnZSaibei=L=Yf>IMozMsUrnVg#jJIrqv z<0c7?u3qxNd7zcK#?5L`^eR2$wMcHf%CeBymxHkiM2a|xha|LOlj5JY3dL+Xl_KY-HMz#Pl zh!t}sXs&YOQ(SdFU2Ys9RS3Y-Iy7Z94V}>ARayL%rM0$~gCT-)6+ltm{*slYdBjmk0uX)^{b%V6q4cu-wWNAjC zd1`J=7*8i0Fdkb&)d3oAb8EvP;Sh+kJ~H2P*MzN)rQBgM&a6OGUe`9r=B_hwRz>0% zG?=^I4rrbY*}J**!l9fsB|R(Dw!RVX)4P*1`aTotF+a$QI zts+DyXl)3sb&E<7xjl=bHC{mA&>ux(in@67g|J3wt#+uGz8^e9@wf7iVhmv9hg=<@ zFXVPP`>%G|)6t$d#G%xyE`o_*ZhLSKlWh7wcMqXxPcU~sX4mpCqkD>4Ce9_OxUS{W zyzrgG{k8^>Piw8UJm5#ve&8B62PSKxHQop%ljX(<`c&BQ8h>8q&nX%zt8ntT9vTx1 zbN$!#Hc8O@y!*FB6Ikow9wo`G@;fJJ)6JN4aN)h)*3QvKJMjKX#W7`WMpMq%OLgK5QT3- zrOuK-Kf9ECRKvT1x806!G>vX_kX0gt!$5*ZPi^#(iy4&AcR4G7TYVAQ9^ zz5^Jf))u>m;(Zf#AqzY!gvR${YtJmFHs6Bm$lNZZfKaooDOw-QjpB5PnO+mL*6T%f zg|!6H=JQ-sZa&4+(s8x|!;XSnmUNFmpi$Hv;_g-CpP;pO$;r0mQFDDpFv0 zC66-va_a%yRa8#8!r!d^_ULaxe_j2};TI-zZ23C(3$ZY`lSAKn2A4<`+!DGz@1`_j zd@iW+xuDAD7)bqse%cZyXob9ll8I6gA+xe2GK1S0IO1Tew+4|b83rU7sZ@w503YD| zo4+kdV7-R|E6bTe#L_IMW{vxv7mX_*&WlDC?*Kb2lD?8Rc3fw%*w{_QQ}$Z+d@bFd zrWw>BR6heK#7ahu!>}GH!e18t^6=LKe+Bq+;V-ww75!t~Xh>!l3pF9pChmBGyS2MWst*IGHVv>@$A0=qiqyE9Cw*ML;q*WQ ze}|7Wp?RP{Q%bO@g1b&M5Y7ax&k4lmsK4&A#wclVH$Ov2n}SW3xB=id1b+&+-24pb zLkkwLt<`|0YXB}TW)Hwm=FiWCyHc*|L7j2G3bkyVqRb*c7*%7zm z{LoN@VwYSPKh57cw7GaMZX4>YL67ROrb4>nxWsN1oXQ2HI2$1zn&$Vp(K!I>4sdr= zYA!5TN)->P-dY3PAS!=A#Ziq5Aj5CK?enM=MHOLHiZ?nP-0{ZjwSF`1e}>^J-9pef zgJ3DliAD9fyY@L1AA0~doX~wQ$r&rSio_g)vC4%2r}=A2kKGS`b?#CCHs-E&gc8j) zs+Ec#qUhWVkN>#_{#pZ-^4xx=opbx)$4#Jv7;7qAsh~Lwpnr+|Ox-*SX1RHo0fofg zXNvA?kGTdhjB^cFXW>bqJSoQct}A|A7s@->^i5Z@JgostXVtUu%JOpSfDWK78Md<7 zD@DPPB6jeE7!V3CfE9ajVCV$GN-XP+)`aCy}=;Ul zJskv<2hu?cwqk*KZj`-{B!=e6)&`G!!J^m3z+=?)vJbsC;}rT(0V3Z_r~pF-8Ht;D z3taDrgQq7JTFo5F>0sazU{Mzgd$8E8m)#7?FZC(_*NK4QB+--w4BF72W>Z{HlxHp_ z^DY0+oGp`(`WIma~ z6GXT{0!6yY^?{{pO+f$&$32e;fGFZkwOatk{AwC72}SJXnJf7qg(sWH7{%uu0ppB- z47L2G3fSp5@1WyC6f)a~wanqJT$tp{3W`Ow(zKK3s;O`tLLSmUXU-#C7j6#|e!2t` zDd|B<0^l0ZgOvy^f9->wY{O1zJ+B)XY(Da>$GLpqWDE(NPS`Az$k?dcz^1!x?s@9} z=XIBX6Up=Qw74m^UfAIF2Xj9`CbvLc!KE}G$3Y@>4e~6l=Mf#H63cOOBadh3G~s`q zIPq(&O{2WEX_V(pqx>pa#u3eRB+tf)a5k>GnYN}eHl(EBZhR{9%JaD87b;;+Y2>^% zr7h&Ck0Lo5hLHKAsQm|Y1Z-Y3ee0M`PyE}_3p56_qij^`bSkQKN<*r3G#oZe{f}~X zghWTbforxyG`(O1NoiYXadlL~p%Do-Nf7!O4cDWxAUmqn)5`kDBhHIcJY7%uJ$c+@ zL=1aLk8BEdDsE2ZHNJShx;5%Hht?=y)+J*9LPhqkvLmUAnu@ zpl};P`c*;ix`JQ7>a(Q?$f%+Sn@@Jmy{ZM~U?K7R+-u_Tn)Y}@Jn#@`N!Rj}hIJY@ zzL83tCNjp(Gn@yQE0z8t&pmgN*anaHDyTu{-eHB+ELk;gKKCAZ!bG_ePi>MYy7dN$ z1@Z7Hlm=M=(OaK8RYd1$IzbS$-txpkfu{+7-olkR5a_qa%4b-K4v7UJh^qVChXn9r z4d>aHV2 z9<~5p^dk=Daf@4rVI#^>fVoep7e3RCe@c4c6a{`pTJ%5TA7S3lsF6<*dB6gH4VkM` z9p)^G@=lT4i#c^q*xu9BAKF4dPiyRf7CF_Alj3P>uEH5G(%YxGpJ#4BzY3PAk5!(i zEmr7y9+YDS2R*Fk!Gf;dX{qOF3M_=g=?otN_lc{;lhFWeW-|?$wXPS&G8RqV>`HTa zPdg#)J41Pwbe11W-XBxmC2V6lc8osA?R-GdSLj%0B>EYO&d1)~S?PNEY%pgD^EPBz z-o?wMU9QVyAt$hDwcPqFS4ug&KS0#)v#d%%3q6f$r6lMAL?orrS==(nlLt*lD1l=u ztuc$_ltY_^Fdpegilb<(X~@TAtBw{JgJQ~X8DKl^K=@E4(FpPfmc4j zz-IY#1V-Kru>GXv6qW&a-rHy0=3sgt9ZImLS69w+J@5*q*H$X! z={3RhHDHCGWId2`Gif~HU(DO5vh%1z-guo4w)tK^PV! zP6B#DZrXc5~U+OGC!>ObAlnOJU(3{2bh~6?sE1p*{|&={2xo#A6bl0qwwT zMN|Q=W`epjKt_uPrcVVk9&Y*30fp_X0}0a&3ZsLA_anvz2OrXHa_}Koh2mzY7aSZ4 zny&(fe(-+q#aMY+s~)^x^LGayBH_%zhiWii9^3^MXn`u~mxSRSRU+fLJveN_Jz4}( z&=Wcy45|1uhXY%SE}z83=z!7c6Nb{6vDqAnvVA0Oss{<6)`~8uv?hn-=qVqNkX{Hm zAa+!l*62>EF;h^(uvX2flIxP5JouB)!w(DFcp;Qx7G{xUo<-}N=|>_!5*>lJdETWa0M8$jFo1M<5y+2;U(*0E+mBH5ol4q+A0JgQXZHD|c{{TY zhAX;!x^QM@A6+EV`g2u2d&=+t^W|T zejT)a8?^oqw0=bu*hk=BgMlexObGge0sIHgwote)M^-p4)!~3o$1P_L(6BllOsBX` zgiMVWp($#ztB0Y-^}r9m@DpNi98b0wZ)cs$s)1MH-jRpl0>`U}jTse|%lV}7_p9!XqTG_!$4XK3opgrelupI&iBCX4+0zUt%AQ63*q5BLR z{z+6FQ|GRwgz$x?#yEM}1|T&El;z~19etdc;8Q>Y57*(D6ZD<_us1b1}j6CoE0~raz?L z8Tow*Cew*v`m<^VXzH}=gUu*Ba?^u`sDw;^n5$)Q9;#;elyrv9asZcdgp&H%uza?d~g&z0y?k_7Th9$518qi%2ZsxSe|~TnyFMX zbQlDi1!6;l=04;cGetLt7uP`P=(q`L2WRrN@OT@Yg?pXO!nqzt^yDZx#DF}C@Yh3C z^K|j>@*ryJ8QEK!{!kkKLmG1*0~+SMWw^M)`w7nC`lj*wl!FpiJZ%AXJSN4Sd~?oO zmO5hG{94Ds+iXfJfg5z#uRODi@3(rz@>;RNg+h-ZOK9?dR*gggb^s$ePOKnSlp4c{ z#K2~bL|T0w-2wDe7dQh|H%C#@f{3Og^}2nZwS-M{TfMe&G}fJ##1CJ4U1t#hP#Z_e&vmSD9V=YNibSYD1f8!J$+s=XG}+T_)r5T4TiLDW?9!ZFnzKtwgf!msp$loJ z+N9ej-K8sU)^VIJZFuXYZtp_cFq-NPDbgKQc6Y3C^B!IIVv;2zk(Fq>1$DbX-LBE4 zduk8wBhe}D!LweFB8(&f_e&deX{U!Q`_OU*)H(L9OL%~^qjHB<#`{jBIHOkKM|IIE zU5Ykl*(WXglmOgc(j&U9<_$g8?NY@$f5xtCB6>U(AsC5K4qeFAm~Uu5BL#cL@;oY@ zN3Y^BRiP_AnpHua_69ZsnNR#zndo8?0*n^Cn#E-DtYq@6HHe?JA|JORAD76-t;ol} z;TAl7laXUe*oB-i;O8yC&kNw^HTi&r?R<5mS>g97GaWG4pIBgjB4B^Qr^fmEv)}74 zf+*<7m|qzCg$o5c_>g=eg@l^FRI%dWG5SssPedXf?i}&uub7C%&e2}AqIsR8y`~Y= z?;Pa~rVY=ujgYr^?C1c`3OOm3cf|6ZSWb!Mv{*hA%g18*L@d7%%Neo!PAs2_fzQR1{tVy!VKJ-dec^mu2wI6J^Z=lDECXLhZ? zU+d~C7Rr?HW3Ro$*IQ>`o&I!R)<~VvP3l00dtKw>MG|A${BisdSI)dn_Wh zSCQo8QvW_BrRSdheM)+qyX*HU={7D9x=%-ovBD!xMehdwUM!SDQAfkZGZEjCh;K>6 zw@k#htcWKi;z@~k(nLIIMLaDLPfNtpCgN#`m~}}2Ogk&2@pQ08=4##}=~o5n;xqjU z4>Y8+`s5r1;ZZTV>zGoIcIvdMlv}R{JZK9n#tAo-4_?ztNHtyZXonER5S;cppHnQ; z+Xm!$eLu%uVQ&jk$a+SW=}HKOw44s!%t$+Zot5XU+V6UU$OrGxew)aTHr)?y*JZmI z{21Cj=V2}(!3)V@WX9BYXj@K{77$6Krajo>o%rs9KP-Qc|5oF9wOXm3hEhkBQdtKK zaNo6U!sTBM_JNUm}vVXL9%YlcVx$5Q8yZ>&@?rr-sH?97E{^9xaHg5jEzww=+ z+NFQ{Lg8=jJo5C8s}9}r;eXQe)J6a2GbjGtb^rdriNC${fBC=u`>X%vfBZMzi7Qjj zzUf_X?9FE`eeKaZ|7!BKfA!qN=2!o#@q5mk|99{KM@{(oONfB1)<{g6Ws=GBuyBa4QMhKEK0jT{_ zheipFG8(s{u?~#@jeazip|Ko|^UydSjTLBIfW}wQxDbsB8dWq_qVZKUYG|xN<7;SK zgvM$#E=J?e(6|JRHE3K4hU2R1q%jWRL?8W z5*AhLAWJt-zXk0X^9OMFKLORgX2G5TF`sKM=N=lJpAQ? z#~LhYi`ru`-&3YkogsS8T*kwsCg62nbD+1_2 z;+00M>W@NmNpK0v`8eb}qF*}wTJ(kcq*r{_B!Ntd7y~|`{5n12G(vqIEErs~V=arSPf0fMM8P-Y~t&Rp$x~ z(z8nZ;B$VGngJ2+JbplQC-vP}*fs@z;fi18^7;9zLH!6+FiBhjzY)eyoSipB6&oQh z#^f6zpTaJ}t09V28lvz)8XbGolgc-*jSWFS4@Nz2FE!lbgkh%sd4qQOQ5r16;OzM! zpz`I>;kQY@R%X9!dL!9*0QvaBnqhRjjYMey&%Z~N8Kt6RzpwCx%Dj15(7z+n0sie) zTS4*6bMdA4OZ1g)57(cU{I>k%i+ir#lXvd#+C^m?gLTCf@c%FLD`!Z4@J+8L)gLaLbZQ+=sY zs+M194S#E#tb^*6cVy`zW4t7c&$@}_l$VvK zIh{wwek**Cr>SWVBsBHnMc0qQHcfG9E=f&VtXuOBU zt7yE2#!G0tjK&ExUPxzyTk(FM57GDy8gx<6ClJ`opzUK_fHnGC(%%*OyG(y;t~^qr z3wja-lKdbF=5$j0-xJHLVtGkhni&nFAR#Zv?LeD!b2UH4GUc#zhtPNiS_5xqLf=u$ z<`CM7*cKl{GdfVcF%pc@mF?IgQ)pl;cAm)T99oC6*(%-moMof&1{zfM)2@E|1L1xI za5L!pDH@;mvMv%`m|NmYFwC{BnJnJ&iUsX~RGyQ~I@x?*c6sEAH7xOUR8hP;3tb~v zva*-eP^5^nCoph(PZlru$HS$)}%zIYk$AHv-BqtPgE(fEoDOtmR2EO`XYw|aGn z@xU=w?iKVsiP^8pX8Ghj*a6dnO$hR{Tvl#mkU|+-OX(6*m0D}hW7zQn@aM<8<&Zk2 zxeg7o4WQA3hG(@f_3jxos7vs&11S;Sv7qlZz=||5>3V&w4ne%WWZIpN9OlJ?>fW4k z^~pm_{}vk0pwUF*xW>rV^E~{DVWp?Srf*G!o>;`zaWqazFeHT*Y`q|H=E(WHzDLYA zP_T}zXLaB4nJx4=iV69cmcA*+*PeW^3gaLxY2n~*y&48kQJzBshj{B}U>xjm_4xz? z38Iy!d(iMO+V9YK2hq3n8Nvf2m{z(uJ^l41lj+r%a82mM&SPVJZ`j5M??*sy8jmIp z#l}xDr+3kKADurAfl%{(gvPHh;6*2kqi*^g1dEhunyA1&v=t@M!7(IghS75zsXnkfoKkq_-*}b} z6fH+%HsU&Lr7l`_Pv_!0*<4zL@Lv~EJ@QGwF@1ChVC(ZK$neKiaj!Axg?$Odygq32d7%zu^NE53Kq0G`7( zom+;sn#?Hs(RHgy=G;spBhk*`k_URS&-heK^LG1A9 zijIrzFpX4x`g$}d?B;OvK7?p+Jx*<{jI`ashp?>tpLx4ADH*C(BK3czx>gdAs@VCWJZU9 ztrv;|eq;~B8vw83L$V5FHj|}qJxh1)`W`){;;&S_^b#IeFeQ6pu54pyn2bw;Hfm11 z?gNUQq5^THe(X`Deq3Hd7tW!@p_eXxibcSW4=L#DaEcc>#fy^SMM?29PVqCH0=`Zf zID5L%ym1_|Z1mzQ0b_K+p+VaI^(vMp*dDB<0}8;GGd}!;9B;7W4SH2@h;@8lhrV~p zLnY<-n(@{r=ddgSETplFJTg)Lkk~)rB8dZGFszvQN!^78Tp}HNVGZ^o3E4_=a2JFHom&!w4jbr(IT{6v&456rlioW)6w1>mjJ@CQ6 zn$*bmwC91G_B&wW&4%%2arg(5+|)<0oAERc9nFQWgD(#Z=>WV&1fN00Z@!jE;T;aZ z5+fQ-24j96Py@fX&8>RC3jM2t_v_&OCV0ON?xi#7);q@^^9}DGQvKTizrg-4V58hhus>wj zACfM2hJu^;xM+C|C0m2m5?M=Vt&z1xz)mu-lk~7|1Fs9iS8ZqL30bo7qs_SrUK$&W z(G|VHm{)@dvY89&_!caXj4`~F7RTYA)m(^G0({X=KJsT7e^%4SEBQ5w*5ye`&b3&{ z$xyG84Seuf8HfDvIMOD%&@<5Y9&Xa_Qa9g`3#o!l;e`S~xN1tTK-p7UmGo`7=I|g6 zhjKxDYzN-*^FdJ_^TBJBKFHM^TvdiPhsPq=IJu0=w3X8F7-*VP9Yfs5+g{w(RnhBhpN(a zp)Sm45R6Z(LEX_vGoBpcQFjPpK?x@H;K6z2T}kT9OPS`X|fs14p`peNX5&sM&Mprc&kPZWgI{RS& zIi+5+M1;d2a!c6ZSlHpP2*t3(MJJMJF^p0OqZFc13RVtBVmTZMlY5agQCHrA@N}4> z654tqv3o-QY{WlnK{*yH$FVR?E|Mnd>a{xSN7Td`57@~7+(;6a(A{BF27;vtagk3( zHjc^!RuBt4r6}a7&RF+ z)0m+innV<984e(7)u(vO9LK}yxU^M@WMf42Pct=l@Sz<_fXA?ril-<;I+Q&mZI}~F zUM#(0am11piz}A2STbVi$!iNfmL%2##&gzKj~MGQdi{~BfvUER=aKe%%miQ|@f;|S zp#pM<80Pa$mf#?NsA*8g+ok|Yz2uktoYJhCL$e)`3G+-jHmafqZWhzF!>2aQu%k-v z#eEQ{3{L_;ezlj!$MZ@+AJYz53Pil{KpS;fkA4jfdr}{|#>do9ot5z;RA)uLR6p#o zl^(*t$2qq0g^TiJQJJ1BlBW{O_EU)$Se`~t7DMp0MQ?fJayh5OvFTkje13o)Me;(A zf(oBH+u`-ndz?Fh=Dk(V!>7EOJE|U)4lg(i>K>2E9eV1;6a0jApYovll%9;2G`NP2%$OD`Xg@-1r>Z zx#U^)e9_qHl`mDLC%y2_F2K4R0Om9<_8w1#I8&ya621WEKnP8nX{y4p@&Q`bHTQY? zajX?sXs~4PQM3c#OJ_WfWy#{eGAy6ZV2nJpmQ!v%1N;#<@QttLGbK8mipiTEzQ#qt zII-f}==eHU=)wokA(UN>S-Mw193>7b<-u{R1Vz(1VSSJJ^qy}K*S;8knaUzpAWtvS zi(VyYLiU7}Ej`DJ?MFTkq12}#;F=jhKp2#`zis;a#U>KUS&~wD*symj83r3O}J5G=D4+eriW}(IosC`itY|=#ZRV z!5iyzf?tG5Uxx_#_IN*N{+jFbB7c5CAtdk*>V;A&6%IL{-}jSeYRVF}oF8`y>UqT; z6=U`BZH1nSk5^F9TC?suMU~dK`}#nskSA}B5${MZ5VTVMS^`Y3tAMkFrxD%;i#+(z zyO#M{%u>f)$8j?eXY(vO`Nfd9vz5U)Mn7DHEF3*YgF72oqE;D@9A>dHNm$66B`joR z&vnKVtwb9}@KS|lgDD9{1vj+?)vZqcY=yC2aumDDiZ2!}!H<1_m^e%XjUNo5YMQxU zurm8wO#|%~U%+380_5gonr`T;I_D`5G1*VEH$^K|(>c5ZHjO?&Z#DnU-aKIZwGdUI)lt#6PP@%^OcB^p=&mQ<@F!Q#1xXQCBRw zbkA8(?*sJ0gC5L>)Sdp=JG$tJyms>=d|)JK{;J~Qi<#g?W~}*<_yAgdgi@AP)hD@< zhbP!c41^Ob&`w`3HgNfk)CrwYd|Va9xK+GhBfP1Fctf7NIabrL@y2A08gj!hz1_j# z^o9(+>4}Sxicbtfb1JA;eVoV927{%Fw?*Ld3i8ZAhAziOEcJ1R>OEM$lSHbH>v?KA zew%Wuent$wP9CqMXB?#IkdTp|(ZQ=RIfqraHi8d{$naaCo@lLdJigK1ar%^FF22X- zLO250SU^{CsgEiS3hJt80lcgR!!S%})@(lILp6BOjL-QX7`&QOUb$$VC9t6zU)%sU zKE>E<@UH}g)0`;>db)1JpF$3~njTVKXiFF9ky#pM__72Z9C{{A7v<2@M54@~b!COd z6Ix)5X0#1jIxE&nPRFcPNaWY_@QooHwDqT9go2Qv#2dPRi98V?S^SHq-GU?96mXM*kM|K zD>bOEu|`J*3ML_8`W!x;N2NllCFN^Cfwe<#08T)$zlKnOxto0?s}ixOqz_jGt#!tg zv0eCD%sNxJ5#8GkHx+@)2$fD5{9&BT2zEBlhIon(+_?AvBC%XLN!@yY1@p)g3HKcu z9%-_o;J8As(m4*v4IGE1wdIL-;HMfS@gldY@IL zI%=UH;4}CNkFL%t@a)4vw+1Ri-hNVIaTM;ncaT03NNO zaLR{KUqNZlE42J3vw4y);A@`bwpvB+f03AuUK0QoI#WTBQiUF#MX??5+~`w8Ba22J zjUF@#Xt-$P(CF3A8A1hzor2VL7@rcv6~#Mw5=Xt`>kEz=XJ~tHjNW`-w1wBfYJ9N?gRG*|l z{t^Q*s2mLeQ_?R&AyPcnl0wJgrvg-Wm%ogThGJ;rz!wALe0X`R8l z{R%Wh!Md#GQVhD+3y8?4IO1|VxwHy=ty8Pe2U%?5+wm#Jg|!^s#YfzOov>6X`Cq}X zvBaSBw46N}V=jQ9=m=nUW!$36xIDl(eBWQ^U}y0{W56q#ZJo zOhq9>+6kRddOq&^*wsp2)y&Wzto`2oc=w!p?m6e4`>A{J?(Ps?A;D8wdxt6K(~#Zb zPXH~IP8AA9={Dy zX~^R5RX0@j;`cFH6}(>Wc8~4nBp5r$eBm&l7zp(P5-*BtK@AIqLw+bMeAZlWR1&-y zg+qfN1_liC7J|@jRocC8@sH(ao`u4siG9Pn(Hi5L2Hr=ZB)#f<4`aTj1Fq$ zUb^%EBar{Yj3C4an!ZJ8vJ8}P7$?8Hh0~=mCkCzYV7o%ehKy3i&57SH~MX7}u z;BlCjV{nBACmz2J|Jk>Shv74Byzs%L>Mbg2(PXi=#C|v!JJb>zzA@|-v<>jmB5Ozs z%9mMJT$FfT=W39tUc&oXF*z30EUH8@5K?PSVVowQoc8iQgcKW@96JZ7R|Iu(kp==w zqc~vD@EHH4cj6S$!V_pfAZ84wwQ#xWMjE0lokSmjoE$pf&Vt=YttgEG01vxM@9YvH z#PeuZXn+->vHFWVT*K8I9Ia9349|fdpm7HIc+!FUM;OsZW0G|`7u&bLI0x;vKy!gP z>p6e41)%QDZ5Z&=uLshTq32VO@z2?@Xmdj~8llW#{aD#SQBf-X9N<}rC_P$QVW1T< ztaG^7sHsEFl}BM+jp{xX5ZkA_MZhEiJyDvU!!q?~WYoiawjwW~vV+IV1FfHYT;)d{ z#w8jmu7s7Bn5^P(t~^S&oJIp5pasO45mVP5mL|hQUKv4k~r^UWZHNmBd?^=PDY~a5{u~)!65<|Aw<>iYmS@4OJow~ zq62JAq5-AqLV>LiNBA38xChj!-d|STGw`9}57CU<(l<5ts8gsb!i`x|nXc}pIVL|5 zounpg6orgxrOY@F4;`*Wx5bs z8NkbmU{2Go7Q2GUKf}%yc0R|Yz0#|DCv5b_HJ6kA`J3yz{1f^^5nY{{A42U4t0+w! z>+V|5bsU<8hiNa;5|1nvR;WHBJ#0U(U^}+-ieJ{%ma?uk6aN%DYd&FX#Mw1IU3ERG z))!fNtBM(`zVudEdaIuFR#|$hN_vO``nF(~aKrNK07*p9GK|*;Uhh>gY&HGOe%=f{ zT{Pm&&|@e(5Iim=N{7z7Q<)nTb*+U9Yc3b4SZk_S9LxK5)>RLAo#pw0kLxAE#e92- z;9sH@*TE&;eYNxq1$ghw678K?rhy1J6bN%5>@GI1G?BXALh8C#r*N|SCuDW5kV>h` z5Ww)$K0IvNmj$;qbVNM2wYc9p#PfgaI4`yEATpfi=t7*jmr|<*P-MGsmq3Gohkdwy z-`m9~!tCr|XD2)ATMs+kK2X^A?(n@keQ%HN?Pld8!c? zo|Rd+L}nUK`@h67s?l2(xD3JT#a&@M=6)Ctna5e@Zs=%zV;DxwJE*?Ws@k%E-k5j8 z(Hl5>>xanx(*fvYipaqOoZhN;xnu`A3!$*;_Jp~|hQ1xRF*xjfiF#k6ULR?B4>WDw zDe~bEZb4k$6UBiBxLtJdFu47=n`*%O6AiFMQ{5mH{=7FtE7P^N14sW*G zI}u)e!Tk}c{foL@x5-0O8T0AfyUQgW{2TJ%5g{=P4dpUVx-9RdBYZ&w5Wp!^sPi?{ znopgf8QsC9XW3XkOY16gYV5f5ZTL?DegF*CxBA>6>bF4Ws8jwe+%veq(>7lq7Oc>r z<#^gO9ZQZLihqoQkMSwx%a3vE!FySk)d1t48PVtbvaXOxUs1=8Lr_ z_`*{WX#OZ;J_wzcikDudz^fd1l>$HFz>g^K8V6o;bK<4tg(vCb&-tTre#RvnW|haI zz#};3a1RB?(&CLO$Rdgh?Z$bE1@gKDibnl73{tzaymB4J*61{DE!rH$Q?9kQ@%~IN ztd0$j4vIiLeV|$Bng<{C2t^@agdS3`_+9JcDIP|EU3d@?gK1I!6UzwuDlqu*3&R^* z=UIpmc3z;7LRjruhOQIsZlryUP-l5#>~cSiXO;&;0L|Y1kc;S3v{h^Hf$lJ>>A>Lf z71}sWQ<%#yaBmEAQT^Kogy-e2!;}_Wnvq_-eeiS z8F2?tA?$APEo`($%r%%e(ChWOWoRzd0qG%HDS7ZVnrwTK&LaHRVVeGbmX>EjLyND{ zI2AWC{G1f#!KcYtEbY?OW+PtT54%@WqYSDe)&4XiSLnO5ov3F>wd#%&^}9rI8;Go#z_DP^ zFOxOs1Y@@syUVx*q}TQT)o_5Bt6`q6U0QQ*#f*AgDPaZ?ISTp!?x z>jOl>r|u1QmvLww^#T!vdw7_MUh9g9Fgzi6qTMk8ja>}?q9ulZ%K~rw>lJ*jM#Ao& ztx)(0dViDNPXox{FnOQB_X7iftP3OGj<4(SwP$CHxAIf6OOSx_SojXU7hfX(bL9Ua zyV`18)#i(&Fndj4X#Nf4CU}7rf;zuzt{w-Qe z>=w`o8d|L3dufo^${SR|?nVQ~YAiB5*_e~0S(>qMruG4$XOYw9#<}RAJ zQO|Hujw`&hzJZ%y+yqOHD@yx)Qs(?pFU|SUlpDPVm%c>r$HVGlGyuU;yhw0rb|@B@ z9g6w0Lzs@=5A2G0(=Vjj(4UJ@fSoWq(Xf(vv^VCBTq!x#geB6~%dbqHIQ~*Oa`GIC$20K+d-!`gkxr(Jq=6|Z+Tf>{&KPzvkQpr@hm`N0pGLuTg6L~vp z=Hix>OdEM4mrtjYiJX-(Z7XL2UAaV37W45!+$tt>(#+b0xSdVpEwh*?WRgiMSuhJS zo-4$GIwPO6jCjt-=hK#v2h0U4lLf5FY$_$q0%Qa^7jkAMn@H!RWn^u`NLaF97Yc=h znaCNbT-LUvG>ecnmo&|MGG0t3jCitGkcOSe8%8RTE?8;62duHO!0EHVX|t8nQ?lVS ze$D7#Dx*ulXseacWAhbrreysxS#1^UoSjZ$A#4d`8AT(J%@s4rjI>gjgjLL2iF7KT zH-Ji+$;d*%NCRJU=}a2bDxNCjKqkO|WHFvem@;eF@j^nT zQpsE)o3bp!u&ulhJ$SSxzQN6C;vFLs<5QE4S+UK!z4tCzZ-B))c-|OEf-Q<(f23~C z$P3l_xv^5CRyOA+ASkZWM6WL^A^J42^OP)0vmu3uY2santF`%h>Fl(l|J{@NF#u`k zoPOUOrOH_yB$X55uqJLHF#`d5siB*Cty-Hcn{|B}K=;*Ty;!Z!m=#Ov$0koq=tY+l z9pZI_5@JvjeMWpFK9U?kz5>==n%KcHLiB@Wb#oBnH#KpCmmj^{V(SK`?$tz(tn52I zDa6g1cwehB;_H+&ZCQW+fyr~F+Gu0GV%=ijbB`g!Et<%0m7ZOEk5=r_Mnl#e4?H2n zs3s0v4Scj-H|LL5oa&)@M^eDUkQU-LO?=?07%KMh>UlX;JzT9gvf@)<00|$|#G$Pa zG(jGzS7)Gs+JGk|L|PN^c6g@boa5pes}eab7_k1JCURGUI%(D$@?^E)++~($r3Vdp z-l~cHSA#|u$v#r5lp5304l*yRi9{#xW2R$zaA36Znn-m-bu-0E^*hON(y2pzA*s(6 zi?Z(FfOlI&Kpt%P$k?p7qrz<6^YRe|2>4X93 z9-amaO=|K1O=LRC_C(=6X$4d)y$zBNS7&CL^fS|$rj47<-P0vUHfp97C~$TgWV7IW zSdjUCO{A{|d)#!a>1J&)K-4ERajbLDyGzdWRNX9e<|%?H=%=GvLeb`H<{ zZ-LKs2JbeRhpJWRX89&O74J-YJb36l_?9>Yfu}-K*y}^NLP1;lQwN|^FN_J)$ zTsojBl~bjeKr;?fJfexw?IJi)EH(lbD%GJpJT%fO&6vJ2rShE_C=b30BNM+AX=8ih z0H!7rK6G+>nYT1D=`?ldjm^OCu0xwf;D^iAMpJ)eE92#Yk$bdaxAq(lY2siQIF7x6&HBG>vUlX!);g3(Zr!2s%S}GlaN$U%$qHX94z$Icltkfx!3T^2nmY1m z1v_D95JO8vM1!W;9yZqIZK%yD^Fm8+7rUpM zjmKQz(OCyZqBFI!bOMl@GtPx`Z4ZUVD|UeF%?)o`V6MBtF7;-Hw~6Od)pOEsyOZ(F zYsf~hNq|DLAGG+%E&Ah47y>mM8_uSlUpsN1c3|}2lw@P%klB!#)OZEQemFF$G!Fuy zqDW2LyE*(Z^Sn7})k`%8;~I*d@rGqWN5cQeO&N|{#$>rPgQPc_a%tDey;?3!JxtWh zx+Z3}i)2hvXJ3}*w;;MY>$IaAD)YQ19Gbo2>3RLUSuWWo&g$#aWz=cTPX zRlVdi^y-C*4&%;qFkBzeC#BS<9jCVc=9@2ExG+-jX}78~H{S>JHyAC>h|N^%Qn#f8 zBfrLo5GhUE+*;T>OO=n0jL$i;g0p;3M5=uat^@Zb+E3qX00M0~53L__6`_)v7-imLxQ>Z%c?n60Cr9LDE|)zMDy z_Zl4(Xam?L6UYn%zLTaiJ)&l?Z8>+ORHn9Rd`?=kj^v<{S-ZKeHh7NDmYovx0IrJf zc1;}a0N-S}WXVnOY&OnmMs%bk%l1~Z9Mi;j2PoXKZH4OU)O=`G*5|iE(Qdfi2F0Xh zR<=UZt_#zQ=4u$)O+jqL&e2%9Wb37h?o3Pl5cVP(HEETKC5sEApKd^W32B8?4F`Gf(wQ$yT(zqffP>HxXHc9P;z2PdV>p_%!-YQ|={q#KeGm6L^pBRy z)eEk8@ry1t`?Au%*_Q=vvoC#{=CcrK`vpx|lhy!>q4&G7v`5>f^2!*2G9Gp0j1X_p z@QNJDD{{0lEwOpC#ljx~2@jGK>fE!}fl>Me_=^5*^bZ?u2XXeSbVjQ6vp1_GjSYtU z5WL!T7qNS_Svj{ZChA9fxnF~REc`j}<_o7}QPw52oo+qVYpOzRM2#A~AwAT;^Cde7 z2W)Iehf*KikbFOWL*_R|Hb-?(kG)qvcnipkKL~M36UULc6Vgehxjy3f6xdb3!Nt6O zp;Rt|ECGaN2^A3f?6b}+h~PXgx$D)UP6C=3pMvs>chCLHUpS|~_{90er_a8a{_BCy zKlI@8+2ZKizH)BpZ&9E^nd^ER8Q=o`*+=Y&!O34fB&W5duQVh?tA1t&)hoL z^Ty#%|J3;IO;7yeD-XSxchdF=at^ZY9h zKl+tZwI579@$9G}_LTni_)A~>Ou6`#|N21!HwmoW^3;<;JAM+k9eozBfm)4-?yp5e z@HZfuf2StLCQ~1NvhuNy{CMp1uV)Y5^ZP$>aL2*n{b$DHd0DR3aK_+_+Ah#IgJnK* zceQ>FxPGQZS>5=3lclp2X`h*_TN{#83-`Im&Qzq+P)qv8NU}BQNX;&Ye_Hj)e;NI{ zX#4xYYOt919EO2&xqKYD-D0L;LCujPcDc+SfAMZWGJqF@;x;b4O%!hm-JwAHTH=ux z|8^bJ8VLM1xF`ELd>gn6*QrENA8}Yx1_#oVMDhv156-d{k zo}KDx2ahuU1^n=CR2!aG0Kvd}gn0auVCN29=asu1%@LJ1rWzE!{shxtd`LZR{-Kt~ zjUNH#e?)v##Ke0EPo%>~3%J@A={76FZ;AJa1L79(+lu~f^|)}|Esqt+k)C*)c>LWC&+ohx5jS-EUvB7zzMZ&BOp1Hp zJuXgx@2EH-CLnwi-bcWXzi)K^_t-HJ5=Y*2;B08lor8{zmJLE064e&V{NZ| z6K%`q`}i)<3f*N^hqo>a_?jfR{h*mX{=2BWjR0N)xH>{l5}pKw4Utp2bv?iyB_8wb zYIy0IU#fOx8VOKp(}i+E+$Y|JS5iajvxMO=$zz^MiE=d;zlOzfErZl}NzkT8k zr8_!MjT*uINDvZ61q=tCAqX}rj0 z-=%T%^%MM5y!E8=+Se=g7n?>Mg@5G1Ykzrk^B zB-_fz@98?BDUGt!Bi=XHZ?C+!!QA^i#!7{^%#->!Uq9i%wSxO@Ke)5Mk#Ivb zf&P{F;oodYy$|rR7ccM+wg3&F@pF9dQ8q55hpT)`N*V{Cs ztJyc(jQ;fV7n-ZSjDjp6Ven51w2J717er}BB0q=w>y%Q@Pv}CAL!P|!{E)GpF1FSr zAuF-g51d>#99tZH3}^UA7o6>Y^F1YVn)Ko01m9#RA(^*M;t#=`p=?3Y?97Ye=&?`y zC7qvni#T~8$^3B~gdF1coWXOJH|s|=8$?1LAGQA z_;HeeMnJf)Uf+0M&i>#%Bte$ZNDS6Z=*l1d+t>cfEZNYnpZG7mV9^NPLlB0&f%~%; z!@3`Wl%9EPvIPlKoUI0RXR+T;SNP|B9A~KG&eQWGA*SgG;-9c7JfXQIvH*D=fmgo+ zUM4WLNkVm*cT^g@A{o62R`fp^^8QMqdC0KW*W8r!tkC7^_>VlMS~n?EAdEaw&cM4~ z17(b>W{N6_SEzZqTd|=4Giw|Lg-WLJ^6l(8WALqpwvNK;9AX<&1pHAeMe?=bEOC^P zAObP~kh#SHO9b@kV^q82nj0Mcn^|V0nBsg0j-#A$NvFsj7yu6^Exf3$axWX@f?hpwj_iRzSu-;%y8SbJXM+LvRy*6O%kQmkLwOL0>$BZVDv>gryJa`E;eDv9Bb8^ z7H=h#aR7Ta_Es_b7hg|vmaKwUhs6K|F2Xp~jpJFWE9!IK>3^6 zwBHpoUc(D~-g%u8mkV{E`kvvt3h0;7dXoXe25EyFo^|C57={rkX37cRGZ9nRp$mUx z``>=ylLvgW5wCzaOE!ST@Gp-Lxer1y?)C7BxvZo3O}I&ynyAEQ85$p$ex^*~!K?%k;_z;>Sb*k^JDVn^ zFS%`6h|wzpaE>&g$oC@y|9KtFKX0P~X1{-eK4E2#k{b^%W4>iC#IW}mUbtuKtwZ8N zTsmdG0!|>nu!t_^>Lu9)dyM&Gs)Fi;H^d1H2-*mcm=DX(7~uQ+-~+RF0An9~!B5Ud z@S9Y6%0w1X^`1N&gq?&u;GU?@x_@P`@O8^ka&2mN#ki9;vTSg4U^gXCUs8{LWb%_S z=>fI5S;GdJ^ANW!a_4e9_(EaoaxSIF%^kfDBGfD>JDtv%jKa?kw#_VnhgJq$!Mh}0 z(ap~|$6vY|DQ)LDLhE!8V&yXsi!2`2qG(aCh@n3Di zuq)Oh_D&;mZL-TPld44!QQeTPgf>EX#5V_r`EVDcnZ@}~Z7gnr6Dued{pZmr|$c4TC+>0f+himhIJWtpv%2}WTnL#Vp7j;q^|k#&u} zff?0~Ls?brBaKqN_T^7z+N`3sVaI*$c}G zUYTGN1#bvdx7KlWJ2J8^mPGrcYbUB;Ae)FPjX%7$+Gb`HI}Bu1PpRV%?=Bd_)3t3x zU5|^YSJV$yBsAkJ@Ug6V3zaE`$CpUBFoUpa_J$3NRp%HDWp5XYl$wb^mWLbyeU+I; zQT+Oaj5@0Sr=M*re>ub8$oh5@XeUPRL=_BVle+7|ly^kEsCc0{K4DZt? zffk#f#+qadHkl#;qj=&Yol=K*ods;k>f7QYGsWvlK2paNe`=Fn@VLHlc3D z#+x8XGY@FJTH~2E!wF9~*xZGI&lZoPskpijP`}Uaq>l*{-P-1}JLbtkA!;zOsGEg8o?c1~RH;=n+6b5}S(s ztN^Yt0{s}IP}%agf|cY)MYkZ~*xgb1RJYc%7o*`QvP$nJUrEm1Mhf_Lu;vAc#2=q4 z9H`4wufR&If(XkNWXBS$TM$JcK8ZvDQ&ve(7wgQ}Y<>8xA0srEX4adZbY6mf50oAR z-EA_{qV>}OhO>K*Db>32FvvGqBFUPQ}1BGN?1NM{Z^> zHfa{GE*PtVIOkvd@=Vv%!kfI34@c^#31IOmU2Yz!ybRxhqzn8pvgFSjOPpgxHW)GiKiTPU}Mn#dMv7n?f! zdgS)?^~W_cdokA={Y`7s>=14l1c6_kWEAhPd6~}6eiC-Jh4{|IIukn)6WhX}&bm(D zy6%jdwbRuF&88MKyG-L+4C%nEsXcKqVA#v+x85ILJbec3(I z7dHZQbrcm&y*YR~BR7=k;`I$u|8TqtE*c82eWn`(uNRw;sq@}`z~P`Gqk@ZKwF|K#x=4pM(P6#Q{!_ABP^#+qmZnJ;xU|8em&$uG)of zNKZ$<|0mrdM&6MiF|64y;xJ^OW6}S&a9dg6m!|vW`6y=*jVpG_`jb%B&9rxF`Z(0| zX}H@x7}Om^O#dKarawiD4P}UEA`T4yb0$}Pv^tj>}RUYy8MW&#%E2_VC7zEl6K}YeRSD`Xlwy@ z8D&gwB&aicowo15cEHD$mvuwqK>~BiGsvR9AatZV1mR+)eRCMa_fBQpgzw*V=&N_& z1=oAjNQe8bEuo?3jU$BPO*_X4g%%!#N}rkd&Zr)T zQ9bRvh;BUVEbWm;4gYHuUd8kN>5KpM!}nH_Rdzc+QmKzQrWj8M zAakRKZW-f*0MBG3D6K|Ziy6yU8*8rnn zeDD$mV*C?JcbYOuxMsO(++bN0V;B|_;s2`LgAOfC1KaJTr@zzkw%WGc`S)v7^ zGb|~7Zl{&ly4JLPN^vLq$)GU5W8R+rfocAmiPk|X2wY9*NRE0IJCSh1UyU-|(d>b; zkHpy{;&68zxIGT4E`0WV%yu%G%fG?ZGA$9pOSt5jciE6!)lk_kc0Q#Wt1sd>nTt-y zw^6|Gm9k;s4e#^Yn~N{b!24z{SAMu6182(o!(r++^Sk1Scx)L5p{Q7CBQp2|1L7dc zz1;4&DAt0TpuPC0AFhd8mHD2lJkRB#INfi4anE#Tg)<*F0E@r

  1. nJ&yg@7>fgtk zXwKHR{?8!NMt%Ww#C1M|gNmGH86U4T{;{Na`IXNYoawE3<-O5d*Dl2{@^W?DN$*Ye zEC<>26fS;FKa$ltthS(IU-)e2?1dz{|H~skedML_Ch-{#X0yLvC;s27^WV@kOaJ~V z_BSgTr2D&s2mitcW-wAh@7dpfdGwynH$Gcv4mQRduh}n6SQRmS#Zj4SzkY?)2@$bHq1S{jQnsj*L7mW(;lA*qaz7FClPat zLlqv+O(8-=Qsw*4sxpAGs~$~qLsE6(#k});Vs*DD552s~S zNp-Qx>2DpWC-dCJfQ}2Gu5@KqnHu zAa^0($)$gWXP@Q|%Cd*EG5~X?Mpq={11!RrpW3Zs_Bb04arbBG<>$dF9Po~(<6ZS!V*^$XU*U#@z{pU z&KZy=--%nbG`aEz$&Nv`gnf4jX>2thY8X?H`TlIfv2#kY|_R=eeKHi*)K z{44Pnz&;PAz+X9nijN+bJ{u4X+tppH8!FI61CH5%28M-v#d5v*2anZHDhRlWG3f-O zGLUftdR1g%F=ZP)W^)H~W2tL;m{T>XS^TM1u%;`^NPRkcDvlW&H^L~FAck_dvzqVG z{N|PLLVkIMmU*E$yhTlW_~F7%&H0QW64cwDW`7#(prF1^iDJFwzG+-wm+);n1XfjZ zWk&AJj=E?8f~{yZS0!05mmz<(dvpX!Rc)Kv9K0^4Tvu_S6^r#je#v?rLPU=5v4lq{ z6r%M7Tt;)YYtashUXV@72;?t=aGr1J81vm>E+vlS5#Pt?_`M8zD>SPodX{M>;KAri zgEyx6`o)r98W;1VGgF6xb#A-FRN{ARcd31IeQ`x-g!|lN0XZ|k+nbcjH`}VtMbhtq z_u2C-UOX%HV>VZ0@Gg6G>9hB2Xqjho8D(ES*U$Z9%8X%xLz-Xg07wwRz`t2-Qb>C9 zc&3RoSTb_qg>eK886ryOT5)asTt(Q5xn!%&>U$d9XG@Me@e!NyADaN;10jAXQ*sb4 z9!|)C60oxW-%$aRPGVgmgvKNe45e6As0<^1{>#&!e%7Ziyi!nDr~_PE4>I8(CEhL- zGD*zz$(wBuZut3q5Wz+-K1jORs%eDLE+Vc3#_Uo=4Ku_%lVOcJ(Ku3%JM7eSmKHYq zD@i*pa{rY&^5$a*sj2Jiwlw@)FS~80fheyRez`*TNz1y_Uw$VDC2!xsvnV9{js*Vd zYK>f$)Vi<^bVOop63{`MM%=aRa~DT#5Gb~I3giLxRG~k*Js(KGqrjho0ThQEXI!x< zRO!OPj3@%PB?5e5rY2z zF}9uh!TM5pM=OX`TrvmCbT=yqlQ1uW4P5FnB~mautyba9ihkCe#Bv2x18xWGUe&rskx;#o6`DHXP3I6u3EKypv~NchZfAuxSlPGxq-Z*zU#rHr0z@Nui0GH zE1Kf1JRKeD(v^bKg$h59TNj+UPn!*$

    >6z_e7png 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�LX!Pr>(@uZ)j? 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 z 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 z zp3;I;Qm^CR*>I{lOo0;W%MX>--1;#*Ubbb@IdUPpvz5UePhv)kYX1^g`HBJOaT>C7 z=>4oer+_-`-a5OX+=_R6!#W>*1^{o(d8pp8u~5~3!A$zR#3-S&T7#WFyYJk+U^Z_i z@a)kU)&e;75U8g3mG=gMD|pT>N?S2OT1P{azbt^P8^r88YT#*>C?#2VHPLw24R}5=^z_}Z4QP!Mfm@i%QDQM|Xkd?eL+Wco zYKkF3tyE!Pe>qfovBpDK@mA}wb;r+& z+e9fGGLnsChn9~C1;aBhHv)xBOe65QvHM)k1X9E#+~e_s$@+hhID5T@6QXeD!XU2@ zZvaT4e0W*#4XJidS1wH-AVN+3g#&5h$rD08&BobIbQ#IUU^3g_cE}5ODpquya{(#h z0Skgv!KYO?#I>fi9_j6K-`KN!C?iiaoL(cK4NsjyiU6l|D7nNM8Mx~_P1La4^>FqyV z&{RNq;OBF6`8rSfE%|ca;z98YPdw(dU3)s2_S~)%j9hwz!rTx7vu=qyL%7~De66E1 zR6jVdArT2zdGw9sN{v|xiIgTe1s7-0P~?E!2~}1+kOnhh9~$akxiNq~0sbA*m$mlZ z85V!YWCcyAZZ93w_Lk9D6u{qPA^DZc#0z`7@h`i;Nh_$7Rz;T7V-WJj3R8YV4>Hc_ zD4Z1f4>_xh`uM_q?RX9s(RfWo7V8Es?I}Es7f?uBelVQINF6{0|6zI+AOkfRbhoYT zuPnm1&R#+tTOMszsfiV;4)e?emW!@nH15y_9h%GJy(Jzs;AUYn1DxAA4`$Q>Q1%&m zfM>X0GWXb79f#}`*X3Lh0$9nsz2mDlm zg%{_#gRm>d!vvy!-oTz_**2)!pyn@dgRKmlSdZzrJ10tg!5`WOt>{(si#-%AXb>AH zawy-t%|Z`}M{D(=9i~QDXVQ`_$Vc6;#r4~94m-1k#_`p~LXcMnc;GA@~pZj@ENWBkJMhnU#DZo&AvG&F+by#2LhZw+t}{l^o~UbgdX$O-Mh>KL$hy_;SpVSB)Vo{H83a8 z6Q8}Y=AV_jf`P+F0A5#l-B*qywaCG_7ZyAI)Deuo(O}ccdV=D0z>`L=@1rWLbeQTx zBK$15_-QzvtEqQ0tn3l)7ql-%iL_c#39Q+0T0STl8ild)kB9+1K}%2|jxk;lb4L9! zP!xTpAZocQiU^11-PsU+Or+1s?bb0hBruX#;z6v$aw~rCR5V0l7XVM-#PMLl? z6n|r}^D_AIHjYrxEYfG~j6)VbL8SO4F@0>((E`e2qycPYtS@LqgABqh4<*sG1oBED!m%W&x9mr7Ro(tFr_e@bz1#Nn|jnTf9;O^#tJI0?pmf4d4Rg zNXef@bwahPsCFp4^l%Q2BCqqi{_({@i&FQB?5Xl8sU44qHfMDwX@mz?>JZ;qRhm4! zLHH3coS(McY-mSo8aX7Y>t(3(_nvt?aI%^)Zb)^AjmenH)|@@s@mLR6sh>y#)EusM z>3B&U22ZZH3A)z&aqMC??R)=M$Y(SK*BU<1qb1pGg~)#yO-6im0yYTx28d8mk@$5m zcrUd5OvV&y=^ABK$h_G}%j2>c;fF@Wr$HJLXw{uTN61D`Rp4$>S;R*%S!isFGp27v zJD!SGL2z#FvShB4F=bJ$p|11K9Z{~|o7g_puma{y9Ld6F9=Jo6(cY-SDBLnc{b)7=I7o)urWxU^OUPO2GL!Z!j z%QX8Y|H3}SG6zYaIU|Y$o2O{OVju{5T9CjBK0y@KX%r48ZaBT7S_v7k9TOo(6?6ziz)1AR*f1c!WMy=VO(r?Q15_^wQ=Kb>f&@(j)wct zYsn(zZMxp3NC93hfzyx$9NwaeS6n_;m%(2z-`a6r^ecGFt}irm_7Jeorw+`722a%Q zAwTKpQMj)p^1vZgvy!${UCJpPyg_HF3oU{+^!=)z4}XvHTUDUY(08Vye(-*KCx*R4 zYb8+AF=i!-a-(#Gn&QKM6lrY@r|ytX-Fd6F`Apl$lLqu(d^bkK>3!*n190;WBPBc9 z1ZXEPv`1|>pu=6QGu$tYoJ>z8I60XSz=^CxL4`?0BPUby7mE|R$4Xm@#<+G%TA#((T#%VtB-k_@^0#aq`4{);o0;~skp=b zjcdaq&fmfH$4a?Gw2}q2dzhH(IA&x3shFxyD4I$^IOcAg?D$yB3s+4=OydT0P{~RF z01+>8jscwNwVi76+Za|P?_buRyBr@(y(z4QFRhczfV2)C&j%c}8kaQuQs z10W|w7dw~V;W7dU=kBG3Y zacvQ9i8ZNWiW*QCzbU~~K?)9u6XXtjU#}aUa;B>z#IQs` z3m(kLPxH5nUs4XL(}yGz)Vnt3(Rb!Ghoyu}UFcg|1dR|cMTD~R`s41p)9YvL;iAh> z11ze`?*|&#-&s4&OvcgpTe-b2*uA-2!6q1<6-8XO{4OW*6AzkwNXHbohE-hm4Fq?laf9FjS_FUc@>T|f3nZN$-gTi@)dkAO=y<8?K%*+QkQX1mk%>FL<{J z@Opi-l&%6nCViYD8bl}*gl|2BFB_CK^H#%gxxKz41tLTr9?->e^;c=I7V#TM1xSRN zKc;n2V2Q-Lu?;%zjVQ7{>x`|qa?!)i*lYpONPH&BRtTw<8$Bx-r}=XJt>N;C-|VyF zA4Rxxzu7BLJh|sM3kEHe zj}oG$4x}viAwe?Qgr7`Ty^T(v=O9g((;_cxQztSb+a;NDkVd#$m;`fo%mPvXricG9 z-@ok5%JN>q%k_n|`)54@=lfN@bcM!82?->#MUhi0RRGFxv`OP*j{t5q2#L_0e1rDG zJSVhB2|L89knB;ch9giVw;b@n8)Kj)nO+8=8+O&8)zu z<0a)INgH!;&qnRfjWc-axp}GmdNCDC;QP?~AEAn&L}`KVeiojZ!s|EW`iq_My`?y? zfIN486RSqK_>tnuSz&w(0{r-gQdZ0$fJP_{FBf%PfCt!mfj_BkGgbQR2 zW-aWZL6o{6RT%V{6>8ldPa+{Kn`95$Auo253qqZ|}H zrxK2xEw2t!%Q)0D6*t5rKFfbO_Y#qR>uVCZVTfkk3A@`{gJiKVLT|1iP1A&nW&nS) z_6X2GMn3W)9-qEKRL&><4Q}P51H?NJ$uC46@GOb(*GRZ=mB_2%{el45QErJ%XQ zSAK?ktI5C>s}ibQ>(|%#PP@3yT|jLS2MKLGi}&XzKi3rCCV>d%-;oWI?z5+Kopu{w z{xE8gUo-ne9P{^3^+P0B1~L3AQbV>9E~MT?!Z~Nc>d04Y%ZhWeq9CbC;DgXkB-63e zFOAzqJ%#7iPSIO%D*=@8vYuv3>O~jKUTV-I~RO;b1LsP$6$-; z^748Y%mF7Sblo%0{9b$lR1)xPpz~PA=(3Y1;5j7S{_NYVB{yKNG4M`#+BjPDZaLh1 zMC}ioBEq(5XoEUwdrcN;D5ZQ!gWwrF@^qc!ouJBAK}^*MSoC~<>L3Zu%SFEXs zkJe)#aVCr;FM>3uYX+&ZO1vf@on)E*5r~XMqU%!CsKqs>My_zPXv z%*I8XBx*8{KF%uvWB~*CREdQI-9P|+l(LexhE7=`6n~2J;C(`TMi=d9m)~0Wc4$!vIwhb`k0S|Z71)~ZuO^t0@p*+i2odzSaix+Li>QGWL?%EJ%ut`=_m{Vg|o~M z(o51;f*WoV2ThLhoym!UG}0x6T6f#LR@511ApzOReNWx=lv4WGCO_kEovTQAl$@11 zN;`iyNcyQt z8sTH7I0}Jh%6i;%H{BC19|oHXd-SrsDqzn2hz76i=fjQ5X7C(R_U&LSF(GAL6_29& zK-w+Fuv3(s!bPUm%Puk!--&M={xW=6PDGP{c9-!HGwa-=-3v(YtukrBcm-0#!pQA6 zF27iE#k19;+3K*+yG`Z!w@1p;i*wNrx5hktJhK-Gkm4TsEgL`NwaxKWkpD!7Mg?!g z+}A3~?16mQQQtt{HP>}pNzbNiw+5w%QI(F}8%f6#l>Ki%mR3?P`F&nqn7yS@_dRRx zPj{JIXxCUp-qO9=D=mYa6+2fiG<9zRR;@<(2EL%`Qv5eIJIF4iN+ETroz~?b-(4@L zPiwE}T9?y%Q@l<%$UL=?be7?ixHc#kk9aN_vBP#{$PTl7%>&9FR*k4!8e2DT1UIc8 zcMP*T=9uHe8}Y5Z*|1U7>>C%P{EE8G?3L#?>b~v=`Ar*7Q(Nvx36ho{r_DTy$NrK? zlRvBDs8ZYLyQO*mPMd9xdD9xZ(zd3_rb#G9bw?KObbLIcA#HQYkvvnh$>xCL{+aDj z#d{r7X5PIh-tMT=9H`}JHB+?JCa~6{X}^q(dF{U&S$4&D@O80@DLwcbU6#^@wXnsc)eFub_!$1wEBl#Yrv|B*do*!{Kt(CI`vJ z|HbyF#Fw529lK}jC59V(#qLJMw>*LJcdNF--$NhdH!9_(?a2qW+LXBLUj;q?7D4@= zMxpQdY12}@wG1_5FU=2Zf=UMsT}=;s?`E(%B<1t}acPr})aw5tC+D&Op~}8+J{a5s`)O{=PfyP(xgEqB;y53eHFB2D!+-hF9a<~)0z(7+DLf8I=Bjw znsS?dw)KAzF3|{l!P>Hl+cc%vq`ApiVs-lqn@x?9)6XQP6#frsO}xD!P)VBEbhu1o zY18=j{{!X8zuyGlhi_s_Pt&AUgSRzMcbv~ot|*9lEnnvL=YGlg83l!lqm$PG-=4sR zUizN?qjH@muYB$K=0E4JtL@3Ush#rV(jRg%Ei}gZ(YTCG&=KVs+sso>ie6IiwZ%twBJk{R_@p zH2P#t^FPS$V-n3cOMwX3hYDT8ZrZ-*iHEzZCe*w7_q0!w(++4#PVl~+BKYSwN!jil zuZ(IwmDH-xw7ojfW&1+jxde!r@fCS;@n*|ps_7@&-sdOzi&D1i^;{PTdEv=Tf`@hG z_!lywH5%+{LgIG=&Js4&xEt@ zKInBaRe+6Zm-?>P(oqsudU}aJ}qGGDd!+SuEmHmo~Y#(g7 zH;`RHdGSTbZ|@(!vg^{{iPxj7Pt2LRg5NHw*{`Fix4v$?Uur_^qZ$mLDyqwTX(;vB zXPdYk`g@{OrT`D}>2;plM?YQ*`uZNN-U>O2*iP?%i@w8uJ_|e|l>CQd#^@ z#FeZ$}v_a-M(RcJShRz>Wg$3#P~!)xR@hG%f& zZ{cz5L-dQYQG3D3?9Z*JBZ$rPg&1fv zzT+%qFBrxC*Cs-bSDDq%5o6`zBf{>u^hz7Uv&aM^r=T%{^<|!|+`eGU(?}5*4fnI!9H?CRC~!C(y1z~ zZFKtn+p4R3#N$(sM>Bu>x6I+i;C(15g-MH{nF+C{@g194M6L>j6FXP zyHgL(3idH}0E2&3A6&#()m2@OIj!duy#b_rUlcuV0vhtNobPD1KfUYYBY~BgAN9{Z zW^*y-rk0maf_Ltpp-?>Jqlr%6DV=H?ogtgp!&J?#IKPpeA=w8@&+CRx_?R(T%I44y zCw4BIERZHfKx(=)mD59|bni8Aa~$vU^_mZa_SYv9rXEI3L!@IDlAdDUn=}9J>q2ht zw8(1r%6;}p$qKPhEZoJ7c)`{X$h_8y8-(=;#VRTm#Q=138mJh#4NE0js5RA?Oo7lyY~(U0I5&^t<1X)@cX_ z{O%^(H0WgQT~9DxuN+k$3Ru^e=4&7LD|Wx6d=8QV{dro00aIbi{kY<<{X36xAZ*Lu zA707sy~cdiHA3w6nfPGHxl8zKX9qpcR@cBah#oQCCB6xQkH^}VTc)BuBWkQJFDdUL z(R7+<8_K_;3|~)yK3SB|Ima@L*53Y!&Dw&qMLKV~@+h}yQ0YTiI@!neK%c`8UqPtn zfw6|ePxSv9?0kN_B>2jv{lXv#gR4Bl`ZKh1mv*wVKBKWa;d|0A#-_)30*Zr-CmS>vO+I)-9dRU7&{c0`vJ)Tq(y%CVGeCHbXwzMaa9J2c9(`Asy z{$gE!oI-7ra=xyuWt$}H^attuG)-TfO%t`V>cIAz-*KeJ+RMxxlaD4E@sG5ZS**S~ zQ|)T%wVDG2y_cE25+w-Tv)bvV??}Eo*E6usal4HK(v%qCewPA3mj8uQ!^!VtJ%xvw zl!h8FzF4kUv>Ry_`o7?r?_96JK6l<@B=ANZrr-^{Gg-b)nY%c@IT5^|1Mc90kY8uo zCkZdVOYj5Rss_sJyP2|{jf_Y|JO0mA$;GIC$4Bs5y+-`S>?uGQ%v(qK^dr|!u zH9n#(d3 zUHnNayLCPnV8lJ2ih%w`sw}C#fPX)^=8)v<+2{Fe0c%}YZ9MTbLxSu6&>&+w`%WcN zaz0N-v%0#kv}oVL9#UjE)7CCIID$WHwP+HgmpB=pIw{|j7S#XH5hNAjR&Jtb%=OC! zxG$uYD%q6yTmwCPk!H`O=K>&HdMcu-i>~4qCAL%xl!(oLflVdKxN@fIIupHo9U7zP@9@ zU&DoO{eu531@y5`&4TNyDTwdtY~xIBSqPGx@>+n<`P-Jc&&ld4e|mvZ20JfbKK6QS zeE0CN11OIhYr)Ge=sG7KMHkaHou|qAl}3i*rOPEq%;Sc5hwhP2(a*b(FQs`^^LrR? z_l(GWy%Fmd7j`q3Mk~UhDztB*cYQmxzg_Or-~&g8U27=2*k^CWPOnd6pO%@P!w3#k zG(`w>ha;H0-8Ryz-FB+O5tNTcB?!fPdEmGmf~S*X#FWQb0pV`&KxC%-Af35~jmJ4LK|ptfuNbA{o8quvwkX^s^`zgE^^xtXp?jG%t1 z_hx7oxq5KL6z*C-ov;ioay;{*0sg@rEVA8<+*zy{mfu?WE3)kP0Dv zf{d`qP1`uHjq(bfJbx<_Wt`xwP0x|(2=SZTy^ponTDJtH)_%i?6R9#)Ppb_ zg#X1pG;&L`nW(L!$8%KqSYL@6cfu`!}82P4T3wQEg! zpaO*khE;$g#*M&*@5mtgi^G~-PMhh%_H@>rI!6MR--sF8J&eBV{RidVa^ZtCo zcSdIp1oNyNmiLqB%)vLCv9&6T#rDw-C8GPADCj-Zfx&$utKPWZLIo?mrM+CuB65<5 zGgVOz(%r<~aX<%U6?0rLc{=#>s*BFyF^g}*2F{~6Z;p#45_! zfT_=9s6EETiV2O;b1O%3yRo{zot+EHwmi%sZR#%*=J!rZPJI@`GXt%-*sp`-bC?Wu&t6AAcZl%yHSh(S7+AK=DL&Y&!J#*(XoRZ7C=ELQjI80HXxnaqJ_1Xv0zll5FN7 znX8q~Umj$0Dz*+05;Pu{gr^*=8?PrYOrKoDe0rELGj-)0^ycnTmA4d=>fwaWFw*Ls6eK?$_JK_VeCppSp$A0vj5qZP4L-{r{{9KQ8^M^9Aqq)w4b7xGJGN?mSo|Bk; zJkOphtlQNqEjNc{S@C*Zwi#oen-2{Cen9W`l-d*nb=IWF>{@wHEzZd)`7~}IZ%yJ* z0FN3A;wU~Y9zHBra1@`cuxv;&x?b-2-8Rj5v(DsB;XqJ>Dqe4ma^r;`UTKe#DDep@ zp}7_s*ibR~S=c+4?)aWbkIa5!K(|)R%mObOInr%orFJ(7fgjifFr<5= zWB(a z^9cahzO=ze8~HnOUjuH>=I;ipvWKrb1~>8wej=~#o=<~pFx8!|RuCUGE-PJ(911s@ zSf)GnIn5jWLB6TQ15{VH>68WRP@l|x;HbDP^L715mh_TL`}(v*pWaP6@iw(^cd*U@ z$`@}LKe4BJioUszsZ2Yw)5Q|mKjAOf=a!Y!W=D;18SLFk6676wm!Y@0JH^;Kzbf!nz9`|r!o)ZXUNf*23(Kd{4whh5NN!zk)Q$4Ty={t*>UX?K7{m zL?+gqbushWMxv3g(rwvhKP}bG1a;PC5=R`Oed_G7-h~rT!+n(Qs$Kn^MD^`dS4oU_k@l_ z8*k$%Ti^8PAXI`=5w#@VZ8jcOS`s>->^2g83_M58@YSa_6CB=MTWutt9##J~*7IA0 zs?m`{6^+ygi-QPSM>lWVY+~}ECG*_Yzwghlt;(rEnBuoY}vAWVE0|6-FNT) zj+c>?+`jkY=H&y1?>i;j2jV5RY&PDfJ4<)63R~B8UcutSh%6K_AiD}wT!gb~2wE;0 z3k$Bfo=vKC7g7zHm1y_$X}3sIs@H0-K;~-|=uE}paj)UUOXFD`;d=ev2obh#MEjZn zxsyO>jbrcErAoqBRc3jHNvjs!ZE% z=<865#~XcsK^e@42gPo4NsaGF`W?^2egc+gN;SH)?t?bHwQ>Js4(#C;Qc#0vy%FrZ z+#O~|J4cdZHpVmcQB3}waC}9;)yC|5HM;mnC~BDxyfTjSwnARMw&FYm=;F8GV5Lg1Hh4?_&3mivC#eRxDOx?IP2>aeCSp9$!;@Z$Dh!z#b2lPEr zcf6{uHD0*rLRKrYNuVokSf*MNq9(pdIeg_dk~yWwq223gqAMs^r-26 z;jpax5I9V3ww&v{BeLFphWI9)feY0&Cda9F z6A}J4^*`{)jcdrLf3tZ4EyGYi30Y)Kh4;C21U5Q0jJb8tJ|jCXuA9p&>^PD?{0{a6 z8zz&xN&`!-_o1(i{PYZevF<-YsnN^zR~st~$@L$>Jc>}dq*}6Pi4{dLe%f$-hY|m8Rx2&biygqx|Dz!3tAK)`ZfKkhZYaRs^puqyPpl@va(-pWx;-1+kp zTj9Nij3&u{CS_E$&-%w4fChrpYfG#3V32)#2%c~j{j&7))9Gg3=GeI}N}3e<8!aKe zS_qf@#=Tdmr)HxM2}z)0qS~arECG^$zn61m((eSuzn`SiSqQ53IFo@c?}lFBw`ND|0Y$O;nF zt&fzyOA{V)1krfMgUlrm>+W)kPVH9E&n&opl26cza{l5X<{Jo4upM$=*^x*R%G_C$ zN*ItuHHgBhRtP$Nc?VQaP3q}Pcm^7*PB0v_DHtLwV|sAUGfrcl?GYf+l=z$0KCRI3o{s;=C9(@P!YA)Hu4$41YAwL10W3G0H*4{pP_ z=ve9q+~G5Sp7GR!V9;X5x*EQODuENlN$Pb)EafbHr!GR_i_j2D_Z47!kMTY<*rTif zZ9dV)l8}?Ob>oM9=`pWV2sPp0g_=C_ic+fQ-6B6}m&Pme;-ZoAw7O%C2aenPeOPX~ zQ@{80Ppjg7vjMvyi{ieu?#kE{IF56+3KZnqbG6Lq;tZB+*Edu*=#VyUW4@3 zrE2s|S<~_2{bQ8|dCC!msmK@-kVRnRJI}s^HawZrL2TY{kYz90-b5j!iavaq)4K!t zh3vGFP4xH?AW&od44Fk!IYss37T~K+S{Cq8+7C=IZJT-urSFw8YnpNrhRG(vQajcA z7E|s$vc7S#*=Sjo_1=xXU3mHOb-DTGt%ric?+a-4d%3ifsrVMn4* zv2i3hq{upwV<)J#Rmjv$*(98g$>E)#Py$y@I6Sj z_fN)NPPy9qCzGe_5Re#8Sb@4&@|v_`97^~%ntqexJ2VAn zt3&EXN5uggnw(hfGNA$_1bl8_$E!$#BJ77kHsNNl++Y4`9p>O#8-sI(4!!9Td8$Mg^5XtShZ+Of6+&Ke z#yWJR-px@3ty_P zQa=vZvpu919keBTqi+y<IRNThdksDQr`v>E`MW?C>(5*&s_21bf%V=+H^ANnA5Es4)7Zd zHcRP(_X~rIf*yu})uOiemRVCVif{z;#xjP*=Xiq+Lmy#?E7#=s3fY-qi0>F)?RxTB zUnq&1#%)B?F2+xK?#E}25FVO`RjU+wKRzd_4YT1TmX&nd@TXC9kWP;DDeHt^MYoiC zhB!p-7$H;~=@aazKAHhGTB@?4QjV#6efZu}56h``MYLUwxXwzY4O4?3LCAh5{Wv5>KU)=ZT@UB0ThchuGBa zAw3G3$&- z@s&zP*Uc;iJvYT-C5vziMpvOvJ~i2sd=9HkYZ*HhS{AWck*V&|O#`yI{E1*w%b>7~ z$xjwozG6%^k7qMckZKCX`Yq}a_3C~b7XSJ*oIB$1^Kf{w`IGM8r-A%*?Y;Az#yJNr zO2r+h7uI{DyXEV}%b(WsmcR3#0sCc_)SHb3YmR|)u_Y)U)3rKIaJAJK*ePjD<(l3G zs-K6wLbJN6)tEV?`T`Sw<@M05%Ijgm-|TN$TKGVU*Uf~A>JZA3y1)lZ1Gh5eZ)4(q zg%s_JZpKz1^2PJkGx(I9QU=oO9;qSn@Vx63Ae7Pu%(J~7uVq9hSmogr*D3wVu&9BF zVy{oiPNfN|Pafs$l*p)+=ovbT3{gKPs1}P4u5~fj{q_R~n148xez|h;VZl(Y&WM{y z&PQ9fh@`ufmEj5B*YK4E7KFqm#wHHFy15Eul@xeH*X34m zqJ*k`u78{?F&!J`F&-Pfp#e6T@<6p#sg#ypNmzv=-O|G{7ON&uhVBF{!|{7r*QPXA z?@r~QhN>j9G46(1u!`cB*5BT1!m1lj`b_RwKQ$FM>Mha9N&v^-(#u2?;8j*B(o0j? zZB6q5NHZsx`Q9|Oc)j*814xo1US!Bvefu-A$m+aCy@f2!yPa6y#9(o$Q%{a`DFE0XDmvTt(P_A+BE0OgclpH5`2d1e#&;JJd27HeBhiU zesl}8ntCd8lzGA#lu`nSK7`X(l@7dGa{|0^a%O|q@aE<0Ucr9m zL)!>D7tw(MPvOSNjc+{jR)VhA4cyc)Ms~Y7TJhcVQT&ByA=j#td6z4d9~BH0+ymai zw&^Wc(HC+$6LJKuk6nWe-6}^B75A!tohWv(D6icArL2j)S)5!kFluqc z_1D1$-gIQWww3;E<#^@-j2Fh#8!g70>;m@Ay58TvdX?9q1Rl?R(2T);rMuXh<2 zr&ol0tvrG)b(hA^j}G?mp`#~?yDf$)s&=uGCpJ}F5zD5S@&3|)5in+nI5Np};5O{M znh}JoTV(l-FvS{RSau4zuTPggMxD%*?p_H^kd?Y`v z8fx~P&y=4i-O@EVbUmN9mcd75Ax_jqwOjDIfIsO0BF&G9=cvu9j|2+_cU)Y{@KFwF z+!yd!;>j#Gar^SexCaFZs@V#;i-ncy1(u*2!WV z@fmPHeiRTp=gA|N<#)BXDb(Wr6}n1DdjQjtX8G~f?3v?>S){N|BjwA_nJMExxSTIu zWwzil`v-j1|5V*gqf^0R+n2q~=gxX-&k3x4z4hxhGWrC+;X^}mY-#yxp)i;2db*+P zpFi|hXMd=n=)xvYtzl$|g^lB0k{0bt7DHJkZug@G@)gb~7mli-lqwyyS}TQL4HPP{ z*L@q+LbX@&Xd?3Wt^!|FwxhT!g~Lm}?wz=9jJ@j&Ep|ZpRKj0AE2=zRS34??im@on zQgKy_%Bj{z5q3@lix?ge1#I1ge9nQpM))hKSsgdjHTo;Um|P!5ozGXgp{k)aA9v5F z+|B*vNAMS)ku!UJ0kMyQf*W68vF|NyDpebrLikHdErgGbo0?pe9@#|wO=#Bm+wzWIcOcV^8;86Q$)WqalLi>`bg9R7gwQ2RgdsX(W6Y8zo|ugS)=Tg5`IRL`fh~@0k~fQ z)^6nn0bsYyl1h<^OpccDYQgr~NsR_&*{j8AGS5)%t-AvYDLxWtFyuR#p&kAyD90A= zf7k2Vc#)EEP$9IjCg1#GQ92id*FzyM*5xDN_38f8J2flfwv{W!Wlko-#3JJMEmpJ0 zkXOKiljf7=49_@<*>%!Neyvf$ujRU#$*{<0-ec%i)q0QizuM-VDt)alfHSwyJ7Bb# z|CjB9pxq}Z+mxs-%}nIZllSd$Qr|w3+U+m#U6AU&T&O%a`Sa}1$mfc(X-7CrVW_}Y zVRl(yX!GkVHC!XN)jn+|uCy$D%v8BAz{OrB4Rf`ZSLvZjDe{bG>Yk<2qk}QOZKHzT z-XBT7XbJ5OxxLL}8iiB#B~$LDq0$n1-S>ViD3IT8DNOM#DI}U~EY}3~FTRrlchua= zEle$OJcuiSjfk$g;x7lac{2~ z58rSp_7IkQzt%G83L1t<%KqFye5#v`uxB#Yd7Py1`Ab5#x13qjSmGMTP=x-6Hx531 zJ2G~4F-4+R?z(@FzAH!OJ;wf;F1_b%AC_}u4Xya-8dxiL^brYcV^Hdri|;!9y+Wo` z-TZz`z}MN04-RU;Q)$N_{vi!;6L#4um$~aIpJVZGm1{x-rRiRZg-M;eC}9uJ(P>rm&A8zet#t`UfA`~zuv|D!+$FHjjubX*k4XFSV{Vy z@H@W0%n^O!%-yHI#}$dW-O*#fCPVE-%{5b!9@(?HxO5!Y3!C3bdE;QuZLVeUu^g19 z%k%bvJ)gPu=$jOtBEyxWaEs?Q_I0nU&@I!Duc=iP_Q7(A(&zQMa+G z`-lJbAu#$^NT9=oowPW~qu!60J&%WaS=Va9{7(DQB{* z2kltM3_N>$A(b>YU?K*ku&fq-s&5{31PuX8Gzxz1( zdt!G5Rl=*=2sRS3lW;HBPPx%eS7GSIKb_Ff9^^Oi_%*BVf8w$ttbvVgZ*MxS_xI

    zB<>JON>`y3m+;&J~YJa*c)NgE2KWG9S6poxOG~K zi>_2xLAOCz@GEf~`$bF1+Fs#OsUz85#{3pf@)!FHmm&*%*&D5|#%(6OxH%;r-r7&d z<}mN07=M3TB(Z#QR5DzA*fXQP_2Z#$r%vi-w444{T7qHcH6by(v3w$<-{J*}Jd^H< zBvr%jp)85Rcu&7;LqN0U_j?{}i0}!1S)bTnk^}$k3#fFPU`x~Ec>}=Oks4lH$0pa> zyGsxHWpwv=7U{-dZ$29<1M%60H1DZ`% ze4t4IAQ~?)ciDb_S9HGcF7(V%lgG^UkFLG=a12Rl-gv@_rT}Km!_qzX>W%+zZ z(w{#5%JXco;ey@gnoN@Y8{iaSveeNg$E5-moM+mDAMeK6`29 zqyB}VmED`b;M7cK#*{_g5TpjwIT~#Gt78O5!Zcb#hyheQ7dn$(z}b#Lvy?al{^>wYC%42-eZguFtCic-_nXIB_OGbc4r+3D zbh=TGtF&~wk}XM48+vS#sGPn|*F`?@b~n}klTc14#-qrPp__wGLfrmcT#~H{7Qm+4 zk=-Zx0F{n69{?)--}rsMgZ>Vzt=F$CgC&_$?q0_oE5Y(3QSV@%g~&8S;bXZV&*4e! z4@xYL+}Gg(7H4;O_}>l|JVsTz0{#lmlNcD~X}`p=2$+kl9A^KfPu)F1H+t7}~5`X$r>-!{uxr7T>4wk#K@>Ue^^W^rUX^u}M^^iT}$H9{7O6;PlFkf7ry8Xu^ zaZeA@qDe;_1tR4_M;aM6G&A@+_PjXB@FS4rl;cmN#qIn(1jezW^mpKkB*|36e}_+e zx%u}0D}(rU?|&9bT96tQ|F;=n=1o;Kw;SMvzFkI^1YaRN@We>OHU8Zfi{=aiy zcLR(q`=2L=fFZ|tSJ4Td=FNH9f8%`;Pt2l}-ABVmkrq zvoZExeHoG5{l;riv!^FwN|D@sD>ZM*gfDMVEVJQXRdX(Xg$BRxO0o?P!=JNj)Q@}t zEcyH>NwwYikt+yKF7yp4KIK+5EAUegsknF9rD-hr>36}0g!r>V1>yIB@aE%h39xt1 zzw4^cLw*T>9SfEsLC(?dl(GH>GStbt0yT)7N z0^63lb;pmMJCFCt!d_xDa%G+(kHX&M!}l2n{bau0z5|Wi*i<$^1iQ~>13=&d00xMd zcNX~;8^<+x^?nEZ{U@FFVmUrBaeHYv@*~MUPCqzd8StQ_g2D2PxHs426aWX%?C2Uc zP5}Z;C%5Ux-=f^#V#;48AJ$#~Uc^mo?3MUL?d;br{+=zd`&$f1N!G^pLr*_d1{!F) z`KLWrX~|ZBo3KBF(ispr!p6q*n=l*4K>K%GrKv1$=Wi;O!&IPFfWY7*bZadw4>sPA zAQS{kP<)9TgHbHPi=?*;-~_rqp3Q~3mhdlt?SQ7lTY*+YzWsqTep&Sa>Yt!nB#Fq~ zXHd6QJA%2LYl9fOL&0s|bpSxbKNI6Tfq40gfBJm*WX*tZ`!{@> z?9~9F|Dq}}#?$_letenG|8RDv#rEsT#|gc3`dBfmFI7D zgk@(hH9Zad8@55cH;+_t_L6~o!e0ou;~Ba0zery6bmG(f+nQ6YY;b4rx?o};e6Jh0 zH8%mC|Nog?K6Cksw&@z5Qp~45@{}bqnK4tifPI=6Mj1ztj;Y7tMzjMZB7G`T2$SzW z$m8WdQZt_DE3OC_3Y4C;;p2@%vZS}$xj3ykGFg;Vy^>CrX17eRY$~HTdRhpW1)4+3 zwyHxM)EpX}xo;E}ms}Z1aS(76fJjxnpR}%SbW(93k31fnodETLeu4&@nw#32`l*G7 z2w!AQSx#n7^`dKMd_rS_30rk}idT`>OS}Qb-RU*{0mfv2Hv^kdpCNM7P)Sx9T#{QN zZ3=gb#s-YBjA@l{msFN`lmwR~f}O08^@3Xu{UrUG0zU`742-OAYn%pe&92X4sN;wA zQ;RNhYs?yioYc&NYt(j}?!_&G}8N(7X^fbER=AuvBp)69?V^FQ{P;Te15W z$RCN5qyW;3;MQP8($;qW-j)6L2UVnf5(sZjsXUyZ7E%@|XAZq6iKH>&7@2T@V|_)( zPXGAC=n4K|iwA{IH3_c@PjB5x&3q1PdHE{u^yvAGyEikop)C`ynk#XoYNh)om55^S zV-@k8kv78VK}o9k&R1o{ku)nO?aZQy=Bt;~&GC8So)qD7T|mlXO1q48_Y{-&b&%u=h@Wp8VnC!yD#F z2M=6lDiU18f3>&_e%Aiwn|qis`f05u*X`po=eou<%ll|IezyayA)9oGJVSlN+otm~ znLjV(IO$k-q{b=nrOW#|G^FpCbbN_J%DMNiE9gP?UCJTpnQp$ic=LX}kEL!QHBjT& z$Saf8C#%l>wAG2FzjE1P!(G&3)NLYfc{_#v3IsxW()%lgY!Nc?-Mp~jajWI~3X7rj z=Y^5QBJPdZdjq2)m7uAE&QXs^Z#OTebUP0a1h172t15G>lTVftaJ> zj@bNA4J$dU+fSc@xFPcnm-ktfuWw$>Z}kz1QJ((!^l22gkeJYA6{`)SYP-Ay8(&JX zopv5UIe4@ncPPR@#|efJ&4g^Ke!({kNU41ADcPXh$Ed4}^}8mGs7T3T6N<>?JPvB< zl?vF~qiIDJ6F%ib<(3XkPJ|x#`^KA7GheJfSc7%^(tbGrTV#S~S6@`<&6If5`EJ!! zVVg_PzKz2QUo6L-E!JPbKA!cktS;K3tK;=S7Lx7MM)$^N7yT0l12Wckz=_BJVqn$U zM48h!%s05=e#W%?G(HJ#NSOYGHye~!gRPRB1|yZ&msC^AMV$-{9u3TAOg63)?%_r% z$BG-bwjRy81(qTL=>vc`8LjujQD!3=Avm>if_S6pp7m6qC9bg%jSc=(onyEOia)5> z7^*eIf#?pbhMY7J=E3(4q}R@@l@|<_fZhksuHm7Gb&y;thdz_L{cqt?Cf61+%0*I<#4%`O+2-4GD;wPliIr7#gn4 zwI1VT{LI$iGxsjck5v`4{p-g&joR=ShE2iWGg&_#F_-MJJX7~yn!_+4gr}d}!H7m^ zt*|R8pZ9d0%5IICRq!UE2BQX=0%#-QQTIivT*sT9Vj?fF;pBqGwOyXaICVtG!wRoA8QKSoNyCJ5S9y= zU6s@=6#*+8w5%d^#zf?u`}*yki3E;~o7>?;>isv?%iKDj3DsS5=@+ZeQ4 zzS&t5x%jKYM|doFI@D9E6RckHWIA)vF+obW`pGoavp_RurG+E$RP4BP(ZZvrtp;k;`Lbx(`dJ)@&)DEd#dLUXP%N8 zE+%pAyb01MN?HD7RdU8{Nutc4NqV%`w5|6=x&NbQoRBWl_VgEp7p1%jv{%%R>Bz930TAesZWxl2!X z3RN$MBzLxHlbVR&kc%?iiEZjjP78)mP09r%M+?!|EUxrbYcx~dgDb9lHnHb(bgo}D zi0SCKl;jvBE*A&UW?rmtw#(qmj4%I`zLUA?k-=NrLHJa<6W%2s!gUyrXgjy)qUP2`G zavR^(op&7QaQv3skjS-}r|&qBp8)gKkIb&2_Rf?eNxMOhnz6HCg)PdI@Nc z@2@t;>;e(ha`>F3Sq04#MzZzk9Cw##UN9cn)1O2a241?%UEN>&7!~21P~jFff$)c= zZ^(6KM{nYgBdRzlvWR-A=5LiVo;EaxTzTr%f)LrCOeFSChca`S%n_?h@Dt%#kk=Di zUzat1Yt_wWYO>HPMn;@v3Q?R;P2B74r@EWFcHlB(+ERCEK{E@>oBK@J)X|ab%vFK> z5Z$XxR@)K>|Lpr~MW?}3aG!9mYS`Dp6Hjq6@Lu6r$VSEw`9Aj~!Gt@BM1|Xw*Yjv+zTk=-z^)Xg@`%zOM5VG#sk2MQ%c zbEu0Qf|P`@cyCa#8140-6WZ({3>yev*->w)@%OX}WS0+~|IQ~;I`*s%3ZKY{xN~co zz7G*FhZ8R7H5oYd^X%Fni09J<{{V#!mwp&%mR>MVWmgY6&F1uKHU9VSM15;0#h;9L z3hUD)F>R@@AF$}uDejNW&s{ONq!XTG9H&NH^Gx=zmM6(6&3)^Bdnuo;O6vNALsPdv z!pG$uUs%JCDlQ~2BK7MeBaVJbxUG_|6m+RACu{S9wG9#q@BIcTS-PppxK#?Q+#~&~ zp;TIaam2Id4Z31l6{jP4pW!)Zy=mu3RoY{$liGqD?0V-H&xmf~UT{+(AK^@I;FHY8 zm&A_unhgvo=%;Yqu>K7j#rkeVzx2HzyuJl{Dn=o+Z82;B=@!xbVSs5zc^7fsCO|K` zM`4AEgvCQ`Zq{`)$OavE#Mj(^rl=I?x*T^guG%@xE4pKbuHt1xH*M-T6nn8CQjxb^&ORZPMz3cW@ z+4047HaLe;ysvUMgde7M?;jwYge99oP9YV^yhy||c#G$x!&X!ytw#CJT zP7L0n?Nfc0gV$hz>Qvm8I&J9CtQec_IZNG=K3^xSYa}YuN}%!6`r6?~SCY zCs2T$L>|IM(8q!ptb&JC6Ao0sm$&NVl94_)NT`d+q?!KxfNjtr8l-M3tZPk~@?u|% zt(hJ6ZzL|zW^NV)Fm_9IUJ50*b@2A@7!Pu~s#*vB6pR|XDf3?TVv-W%~s`ih7-ETAK@?3c;R`G5BM z@pBw~P@+I+4Vx=MKTo8KqLM_W;uCeHRMo#y@(k0Lcd(o|+WSR?4Rd@@>9pj4Zr`pH zesQzCSK!^pI1%+(1QFzY1@1OXxlg_w{h-SfR;u}BkWCS~=a{^+b8vz@%^K|%5lrLR zQ+&qGbd6QjBEIot!|(EmXEYmqU*kbdH(I~c)N7<{r+Eaao`a;0I7}qt!9iP1$(S9k zePky`b;%GiW`~92?nRY~3K@r6eM37l^ay4`ExRdUFn%)2!UK2hn$s5bV9zy;j&>k^w$tdqhGJK=z3P> zB_v*LImWwR+e`g*9`6&uWZL79-sG?7i)Ip9St~Fd{(4$oa&{Iw^);6R4@GkN=GC+(m6r(lEp37Yn;%?)bk%T zAi8i-iA7=O=z48|wrM(rHtC-{AvcCOylw{)YmKy~WtCgh|50db{UlEjH`0>knb=O$ zWZg+!Jw>}Y%wZV4wXK&G>2Lh|mCY%IHo2e7Axc2)YtXi#7HgU2(pTi>afLQ{F~fYD z1x$14>BBiwE!Lfkv;WXkhdDT}-8qcs&KI@j2%qoGioD3HH9vNXwLy+8+=f}9P5GMU zp$9W?mRCHxzP-{F5y`*6dX0g4KVS5dtzgiFVGhV^?0jKXtL^dM(KXxwTshC8?aumWHAv;&LZ9&y+YQbarJf!dR?n2k z)B2K8;27PY+s|>)F*>8z@g$f0?b*CPWZ;qfi5NaH5u-mOc7!F&HnQuqf>u_l=!>S0 zqDFljwYT~?@KJM!##n=s@l z*XZUKu?K;t0SjKPZZUjitKBs=2MMrDYRwo`Vb3@wDgk$Ume6c z1pST*u<*N=o($SdyaBweAo(Q@6y_S znlBo&%t-`Pele+Y7|F@5&=y1zrf31a@??lTBnk%=;1W&}X_WD!8K*b)!SOG9+H_ z@-L#6wkB)YDDg~)&@cx!9yw?8lHWF5bO%($=^A}MlAh|2FKWPdV^uMd?x1-7CH#i! zMKvH4%v%``2TtBXDh|)m!jn!Ow%^h0qt6!&QCQc&n!U}wn-Ym)O3_&t;)_YMb2+Zg z36Q(tvyOM8W}mq*WV*W?%d~ZgNL9&7RZ6+BZITU;s%<}wYhKcufRfATER|c(bnR^J zYb@#luF-*4CbkJ0tUG02q=wx#+3r{DKUAyOe|h8ke%Ot&6)`#Pm=TZuaNxs8jdV-K zTb5>w1vdCwtUr5{&o(J=New7J%#83!UC;A5@mmIaXG9TO`4wW+XN^5Oat3>Im2MQ9 zBob-sXaNZwD4#tM+-30(*!jvUnePUnAooV@x>04Oy0HKiZ-mdO-yYaZ6npUyYCzX0 z#26Z zZ#=CqI)J47KtwLUpQW>JKD7+ZfE#Hojq@}UfVimMM~`;1mCqexYGBeheHHF?M3kHnu?vZ^@+3J1(S{<@M{%;EzJnCi&_p2dM)(&VUA$ORNa$6Il z@-S86w`<@9SJrTT+nUBx$}LUoN&xm;`$fG$xtK2syp8k9+DZLY1{Me>i2Cuy<`5Po zMNL-E$Wq;S1ROs#!sWaOp-%9ea-HGCg3((oPeK-`_imW0nf`;-hN(i^Foj>AH2j<0G1l1&R}^vm*1qD~6$&+b7HNnsHIK^b9NcMRA zCUn~=3m}Jc$Z*?{amF8rs3X!$`=|YD8G9s+$u%0WsWlG^<6n3ge3nvbq-9l+7)ldz zjn>;w+NJ>x!%nW;{*WC>90D;=5k^`!g%-2u6R=5M@?7`{PddPe^^J=XM9Zx4O(A;J z>jcdu{g<}Ye)^$Ep_rLjPbmslzUbC-{g=oyuF(YvQ}cNmWjV^ZKMbSzZ6g;Ah-pSe z{GHc{fm!2tp`m#vt+F9y#}+hW``PlG-@Yi=iI_aU&f`SgZ2tg1>6b9Um`5xACqkIG3j200Qj9M? zPFwUOE*lleb)F{XWk(+Lp4^toHgiZ=-W~)(^6R2YrHr6dHg|$k_LN}ZgF2xY$>*K; z?Z7Pm<9_d2kW7G7IV?@5W6YP#=+u_Y3LTT|8b4|q^@(*dtnzhAD8veu-WpV?%1>Jy zKjpC)#F~@_%x6B&q9BazCD>^u^syN57)d!u@}e&oBTSSANZx^pH8^YBC-eRGOqRc~ z&*Nr7=t9%lG$VqpJ^3r%gE(uXTA<9{!kAqXev`eK5V3G~1bPA_5+nHtbB#znI*AS! zIeElOM=Z=5AITJHVGpx4^$THvDGYP8W*}PFqmGJfFjlVmIy^J+fzihLKE# z>oFr&VJqnj<@QCmSO)S3nxVb?4c?U4ZKTSqBnwQ9?edZMw-!PJ>VL1JJuIY)QF)1% zU0pPAX=d@Z$kNNWv1(!vMK8}9leXgBT>8p3S4j=UY9R9BhGv7C_F-DgGhz zHW9Wrl#}PAvc|t;?#)$e0OykD{cZt7pau8R_Ji+@muS{@>rMCLGzQ?-MtNv1$7o|} zz#9m{@#@U}If7;xM8)z45QJ#os+WK>HEp`n(b%}iRpnPGPcQC!I0X{_T#>MiJ7QI7 zMY01teUU%}Hf?U4qH!LvssLbK#Oq|ZsyJYcf@B6~f=7~|%7`sW_H&V5!Es0_P zE8fCeDT=C##H8Uahgxr5zCCdD;!2*|@!t$%#i(?vYWK34)R47IOf!!t{Ve? zam)!se2m(v&Ssou9C^Pd`0_wiH!EcDT7_Wf!sWo(a0rVwL`@`rR+IH-A6_)b>tX!-(6|J9MgQlpbaMvZ4DBH2!VY6X$Y3T#`X0KBr z(p)OJ)10v`s1SWw`h_A0xY}BJ9$BYR|05EZeBaD3O(V zkxRaFF|-Nmse#7(XW;^aQ0!{QR(0VgRy*OhS0&-+SM%Tjs6o|k)Sw#c&jF@<(Wc+m zUxqBZ9FK?o%CZUkm8}4GL?y#{qE+eJWA-av(s*JjH(cn{urADp14F_A14EnvvqO9b zjgkTfIeAjQB@O*n)z#FpTc(&@{mEHE%v|M@>CBZ-d=?u-eMu!d@;Q|8*37JiQK{e6 zVT@3WvHCE_G2B(>mwqQIs{GDh{~36t0`A9B(c~w1eIih;B8zarjGxgyg~LTpNl^=ES+ zdqs}ljf!#t$T`JN=3aSrs?RLrT)pPb{?e6599w%3KIKPZgsn9cqXpTKxiwI1q>6*` zHXFWNfDV#RQZ|iLb)g~=GP|IJjHvAK%m%$VUM)||u1tgsUM8yKH;5Iy3}ymv2J`Um zl<3%B8s?DoM?|Fr>Lryk#3(vI_$bO3_hoSW#1FvVIjdminI&*y#)s^hQmEn&NaO;k zr=BT9iVOFw$#f0^%yK$t9%6cynMPAF>NwgBl^#5mWOK6Job0P9NwhY_Y)#Q+;sVbc zyeU0>kXm{#GYKN{n+ZLIy3iEvN+q)ukl5QP1feh(Zwv{i!axIYsqG*c8=Gmzu5Zvd z4zg%=tG2YfuMRYf>j{cYKIb-!erBaKa%+3+Ru0t!b&pn!3Z}|Cd#Q7g%V{c=xfD#c zBt<>{(IV|`F&j|3G@Lf3WoY@8}(DFL*7FH5; z>i*pgdXEg^&Fczf>=iDyGS|h+L@J;Q|2X%yT|kY#4$n$^4Mq9B4$l@k9i^#qfi2wk zuHdoFl$*xxoXu_Ug-1IN7lu&WucfjFFMyci&zD3ty&>PD?2YF$AEid)2gz3*FTTKFnhtUwSLLmzgm?Mmx68$TuR&)CdoIL zT89#P&~w4Ne*OpwV}p%#B%v49!uZ+w4XXmbH+SV{?xvKAR>?b(K`*^q$5O0`lfT#z z7u}jAdnUJi?1hNR-(`Z{7O^AF3;Y;+e`(vt!HyUp$K3>XKV@U%_+#ut|9rB89?^b+ zzbUNm73ADhv*J6UIe{L7?MrgZAZ_0;$ocwa#kXp60=t zn<5(cn!ZTCgj|AzK`uzPRKKlmu1-mwx9nA!o9Zgq_E-XMr@deZ%54y6D$bxsKb~bq z8w`X&Bymv?+1BmNEZt|&3#g=mm2>1vQJ+aG2lzG7o>|8AvWXczYyKEDRljxnV@8+Ga@AcW9S=QTDThbv4?>Z3SFXV#^ zNtc5Xib4mIrsl$T-H2JLOb97t*x>uTd2&zrcJQ(iQI(_?1gCIGUll0wv@}j`UpZSIU+Bc$L+EuU6(w41|l(cP2dlll9?{t*H?`J55a?Bxx8^@84 ze8WrMDBZM;*oYT@+(psR%RcmMJEg>-TlB_M!GcZbrTDYtoCj{{g0U7;%Rbvv%l^d7 zU7m_>CI+{eRhE}@u-SfD5t%P8TZ~_D%G$#2GPNOP5VtAMYFR?6gHDAcS{*~`g6L?u zL2T6fd|`<_FDm%n%YN$5w~DgXUeyY&*S%Wi zr1vir#iW)6qKn==xZQMtAhvs@RwN11O&1-c*A(7Wz4R2QO$2I5GGc{Gp0^)&Cvuoy zPV@zUnfZP^-rvap3 zPN>m}`0kqq{-mg-=eLF5=5RvqBxo;*LWRWGyLX~h&qHo6J%!4PvG`rk5qVTTfykrsNkkr%%Mf`~K847mas?uf$yJCvCZ9v(F%?}kU%V?m6<>=VaBuX;RM}c~lKFC|94*6gkz695le^_1`I)SdKg&O4 zvXN%AG};^8j9lX?W27GmsAIWfwPTHAlcU11+wrRNurtYZt1Hp{t-Fn9 zm}iFPY0nPNhn{DBn|;T9XM8{TF8coTrTJU=+xzqVultQa-9VE-%Rt9Keqdza=D@VT z6M-)S`L)*7+FfgJtrNA{By>u+v-a%T6}6AlK3=)LtB`r;APIHKXShRYki)9`G=gp|8e9!R;A zvcA!lM!On)+9U??cw6JD#_u$KuW_vL`NsApX-&E}nb2fLlSi67)?`N$ ze`=G|8&hvhotip3byMn*RA*Ytv^&!dq`jZ^VVa|9y{0)$`!${1bb8aLn?Bd{ucqng zZPI(E4^F=>eOCIS^k>sIrhkwg%D63KMn*KFI^#^n*k%RImNhGD_C~X}o4woY@#a;{ ztDB!~{!4R93vY{?TP$mFq=mg@%a+qxUTo=UmDK8{R?}MD+iGR2%2s__U)B2AHf3!# zw5e#br_KI0d6`2pzsUS8)77?4+qrF*wq4bBbKAXbkF-72_LsJ`+NJ#;;@$;3vZFc> zt{#m&Zx6OJHvC{?#DIw(GwN=&9)1i+-O`N4qtVQ?uV|jU%r+^5G-@a^$L`*Brg)=-H#;(XSl+Uq}CDf zEPbW)_podh#~Ndw8vB#6e;ykeKQR8R@%8Z^8vpU}pBw+X@x2q*PuxCna-ur1G4a^M znRrkK(-nZQQ^?Sv!qsRXCh2MPPb6+&`qSw6W z>o2-xYGmp?Q{S9=#`N2!e{K4=roS@%*VDI_PnSPZ{$ly2%6#P)Dj%s_Gjroif9AJm zzBu#cnUk~UW?wve^!W7gw;wN`ICWy_#7j^7*on8D_`bPU&;97!%E|W0{>d+${PM}a zJo)s~H!VDG;m(B}XKy<@adz?S!)Nb4_tJB(JNK4z?>hJM=k`>ut=?8`SKnNHd-Wfy z|6g@zao^(gi_cuVd$GKDcJYD5^~KjO{_f(RF8+_jzghgo;=eAwbZKqrP51xi`QJPL zN9X_U{6C-Hap4&khA-THVfw;-7ZxwP>cZD9-0{Hs9~gbp9#PzR3jU7nd$({cj{@%6oyMA(yxO?Ye_vJG1j4_&dAv$Kmhsoxcr#Pwd?JD4&AH z|8nRb7V(4pML94`sp9f$mgD4_tW41n4kXPKljsLk&*sy zGt&QV2L1c=dwokh3naW}fn@hA=t9qe)#_Ow!97b1<(>o5+b~FN!yv5NpJ2#$k{$4uf=Y7^I5BAWa+wDdI3l4~Ic&I1JLlVUQ9IgLH5h zq=LgB4IBn3;4pCihsC|Q=Zj+yUYNTTB!F9i^S>21{#$|5zZE$ATYVgbS#2xlRjgHVOA2w@4r{SeMWxB%e+2zUw4gAg8q z@RHmK@zUHWQG@WZ+-VU&Sk9dhbqEazVeYJ0fv^f;4MH1@vlMvnv;in+{bnf-yEf9Vt_h#|45PmNA)8aqnepb8{!rO9h6>rbI zUA!arPVvs%d&RpTyc@!QhVb(c-UH#i5Z(vj{kivpO!Iz_WqtuVt{3GHwa=!xH_OAmU{eJ<6{0ZQFKPf(w`xJ1tp8}rsv%ro1Ht?CB0}k?c#qZ_5 zC_WG2_aS@%!WVOYE4~Eb4|4w^{u_ipgz!fY{usi4hwx=F6ZN(_}+ixnZ74h&ob?@j(v?-xjIL&uMsbJCDVRH$G%QN zPZw|2wD)M}eH!`&4Sj&196?9^AEtd!$9_mdzo?zM`S8YUt}bJ}!ICUuo!Hcl^;3LpKclvMlX}A=SF4hSamCHFQQp=QMQx zkm@h@4~3F;LDMd1+KV;q#gevD{D98oQ@RG9(lz+aT`Kmo8u}*<{j-L0yA?E~p{sVQ zciW|Ddo;99LkBc;<8JkhF6~j!riNaz=TF+4?hSj?6K~YePip9=H1rk?{j7%mWRLo) zf3in?)q{Ig?6n%YUPFg8bfbozp`oLD)wc{Zt*)U^Lro1`)KFVPk%k`D(C0Pu1r2>k zLwD{|t$X~SqSZ7MXsE8CgV*V|)X?=BI;5eSu2cQx*&2F|hMs$!>O;@fwC8Es^EB;N zo!@us*zeY{w` zp`VBF>0LMMtmX0$W_Nyi*QuTL+$s1C;5XR0ntKf3p8)tL;P+?X_h;bu-SCUyLjZpa zem@4kpMc*_>}==$2*Tg*ykU2A)i34#>gsRoy1c8M`?K9ZgD|w`)*a8<)6N~)Q_I~8 zVQJ5uJ34?r3gO29|4$G;0O8jF|2%}h1o$5y zem(sD421VV{I5ay{NBkO|FCy8ch$aH?z{HAaL4$*nH>-9yKl$$?mN5Vt^3aJ_~gEq z?D#Uo?L1J+T@T>}5XK>#gzx}_H3*j=`~ZZXfbjDWehtFsAp9kS{nylT&xCLcLKVXD zHNTYm@HK~qc0BDy2sc4^_Rz-Do&&!-cW(fG!_GrPzyGwOLswl}%l#;XpM~%m=V zB?w==_Qs*L>prvV=AqB*y5{~bm$vTzhU<$pzXi<%%ej$J?ophzWU4?cAvfJ zYeQeS>FCg3-t>=GePZY3JvR>>y!tgaKeFcyH{Y;(_br=Of9sac-kXQI5MB=XzU%61 zhu?MebA~^9^&5t3xz9rQV+j9q_z;wRU{~(&!Cjc{=AjmZHAsK!u6G=M8T>9oxMBBu z4j;VwGlw7C_1fnJK(9mieMtAky;yI24-D5o|LD-0pZ_~U?>YRBSH0u#*M{Eu{N201 z_57QLo-_QmU2hl;Apd{7>gJ(CL*IJ-KVF6O!V3;T+>yP{fjWHV@R7ZrIecj79fyAh z!i_^1|Bk~q(eGQIe%-rjfKR^RoR!?OpAw|{e29YXW=Wq_NzAHL(pp>cTTlXom1d?)<=7W{thj-x~G z%YSS4ujcRAH-6gJOzi0fBJ+B(S8v28PZ}ictd!-wPdZnX7FPJ>A>*(Y`z&G~%;N+p9 zADp~<_tzne-ZgUFy>}hHt_xFwich~;i z2=Bi8zP-=8yOz5P!ra}rLHfhjweI;m^pjfdhwh2?zT=)>%Kg$kUmLpjuA@VH?ycpz z_x|wS*WUXpd-ojs383g79odmlUY;zM70;a}4C+<4mU`|w>ho>t%W`a^Hq z^H0+Uul}d$5AAqf<+1%AKJnQ8-#YR7{eOMpjr*TA_s0Dt2p1r{5yA%``~ifo%>Bat zp_6aiKLg<`gcn12#mUF^{|bcv3gNFHd;`M2o&3%H&%N)B`;S9-C4^T)__6yQ+y9#o zz5wCRAY66ovHjOVxb4&%_umKMJiwa}-Us2M5I%A03;X{EgnxkWuYm8Jf8+kc^N;PX zKv)6z)$sd42)_d1(-3}t{tNq`efkUgZ-+1r;YAQmLAU^+0ik{RFZRC!!UrMz%IVkd z{}%|m7hb>ryC9Sn9@{^?@b~*y7yfzwk1pg6d~{*Yfj?ik_Q0+)&p2?~naB3eLUeGd=kQML--PeKZWprL-;!g|9s}|-PfLd?txG2 zym3$A?B|C*0rSX-vqy&-XCK@DY6x$G@LmYN58=N<_*V$eKlj-F0)(Y=M~5D(Lc2it zEQGIBZ{K&{;#&^9=kPaSTpk_z!^JzUyKU)?>t3`3bz1tj10RR*n*jgC(ynW+zJJ#> z*WLfv{&5Ip2$%0aI`mff{n-82U-M@W{ujUp&p-2;Q3x+O|J-XHIDh*!ABXT22>UMF ze$6O^ms~hHbaZkL@c7>)LXal@e8-ItMgYG@{J*(-Axr^24WTT4eMbet48X@B%t3fD zq%Y!zY@Z~hdjOq!uJFG7=#~$@Iw$@1K~#? zybi*DfWYiRt=bRz&H7ZY7i`XTn*GJiZdh$T65g915oe-HVGn-Gqvc}0FjJTPT z)1}FBsXQ_|FD)9g4XrVANAUBA-XFllH*X|Em>*4uke{HcBG+WKiYBlTz zy`UfUrsB;`{aB+`!?bgqe%R{-t@FKRKZHzseJ7g8i_yifqshfV#gD=>mFQd;G^XO| zC~Ad)c@W|%mEzRQ?95bUI$y4ggP)YnI^zzN;;N+sZKqNp-m}2Z+1F;J}+xi30H#kR=*r|;(l+v z4o~C59G!Y?FSX#Mj^=g634$KbYy|yqrqfthetB5$Q~h-!0`TKeBSNb6HhxB`i}PyG zZq=~0q9amu^b!l+ihHS}1zmB1%DoV(?S8A0_sL29WI;9VW+!Mj>)ans2W@^@#m=^Z z)tE+xAy>k<9(Ec*r*CM~K1Hg_TC>&Y@waD6>P?Hf4n|l( zpkC*DMn6&*liz!e5^Hp--|sb-p|KJ}oD<-aW4^-1e1+*p3gfDC!9WdZBBwlwe5CH6 zskZb|i(YDJT$MO(W&;%6n1~BHVNoUIQ8U+B ziLjYe1vonOB3^3AOZ5`-lipUF)U_h$Ow?U(={`u+@jmCLj(VxO2)U%y*TQx{YYEKF zF{~8L4tEa1X-1bAOem|(4IBqS99D6<={GlEcy?3*m>r;+^I?B2QY30u3!jG6Jg(-T zqheRIBIY_9u;@v`e9%?jK#xU}DX*{RV1nqyPze)ZKC>rMuGz^L&Rj3rbVkJX#8H#fsh%2 zm+0%5IPBNXg)1SfeD&~L7)PxQlhZmZiO?bB1ZwRQeVF(ik?aiXnq?$li*+w>*i8(KLjl|IDTfIVldpE^ewBBl{ zAr>wICz$GTbDc(b+3j&jQq?7y&$H>2rbPrf5Qy8xdEbtZe7HpldaEM|2?lswogkkl zZUea3xE#O$4OXEi_t$$JCj|*h#7tR|PadTh%23r8SxF-TnpH+NhIiWqJF?ryLn3} zQq@OQ9tLqM#4^iKyA1`XVuPMRWZA0v@l0F~x*@Fi&3e>;x$?5k?UDo>)-Jyl^OmKu7BWUd|t|?|}=9K`)88o%C7Ua`w z0aoc^vuoq7q{Osi>oxC`2eR_Zd^47xT=J90{N!;zdBRVgG-M6r6;Mz>Q2`|dj3F>( zb#i>+@d=bc#)gj|G1*EIJL#eey$0}r4VO6c@Osdf2z;QG=IT16 zSq$QfQc_hdFIPPdX8F8ZAQ2L+5)zw@WnHGz{Zw zwwnD-i>BX^b6Ai2Ai`tUMj=J9(Dc4A+8bIA0DV!?c^FvD&Y0#G)i?y2(>g9-fG>;Uuyq5vU-%M)mML$0lmER#XpKF{IE#8ghl)Ft2v42J;zw_s#qu z<#$2yNpkWuBe)<(Ir5L4zC$OTsMDB_Hee2rGlY}C)m7QKSxsEA8PB53_Vl`x45MjU zKI{aG(Go-efC(8|j0|NeW>|5KOHgqV-;DyiU@6BpVYakmvfHRs5M#52$??fTu~NuS z&rFueGlfE7dUkRmUoK3SW~cMh6NS-oX`-N+y@H3?D|nf`f@bFm+3cL>QQ(&fT0d8K zocg(fW_$`R;{zy+i&0!Q3%IoM&}>LNybNMmU!z@%HYrGkR;MTC@uh>1plKx+#0{&i?r{9S`r zYE*-junNT@W$t({TJJ(90NC&?fUtNCzJpAx_)Yp=RCASv2_uNM11hHB5_gR2ETc z3A^QJy`ymT66)>w$YZO>!=b1D$H1Y*2h?%a}+;Y z)MX75+;@A`sE0=w<Bq9_$ib}#tP-p!qn(wu{1SODi*ilc?%cxj?MHc~7W3lmc_lNCtF z1BEt5;J39oU=obh`@VT_OnrPfNeRB_Dx zEMuZHIz2uEEL(YEVsxT7F*;tEDoy8SW~U1?h5Yz*sW>|`J2?gkvs(@FEKE#Hj!jHe zCPqueLZw`snH`&*oE@30l*dPA3sdE(kwSUAJSJvG@`bV4+40Kwcz$-OJX)R^D~^s& zqB%)x}GNz%t>7 zGF_rD&TYh>$?cWJad-Afj5v;V2gSn5N^B`^N5^>sQd?z6ns*S4XGKhorx-d}Yt(g^ z=iLRZ?~LI5$b@W=#1PF-44RlH+%AVo6>lp}*y2i}6$ceC3J*@LzJb^7- zZbh-Fo_a&K(i8eqoC_|wQThC&ZPH}ulY^D?g-NF^9lG7ieDim4(&}nqz1g-_>rsfC z4p)HD)onPL(UD4%9;M8rC{|`hi{*U2Jf1I(OwCS?BO5`SJ4PY}KnOiUkYmLUDSfZzE7FCe6TdQ$IyRGBk7edfpZUo|Vc&QJ)Gg|2%!5!x# ztf{7fEy37;Q;mj%NUu z&i1v?d%T*!sf}zNAED2rbLF)~q{Tep;g*E6Yzj-P5}H>RDW*wynNA@kR9mkmyxKOw zc2#pLxQzv@fFgVMid7a#oHdVC&E_b2g8LC^hDfATn!*y|p{E8bq1ztT2CrMm)Y2xh z);!@A7`Q64K`Yj&%z7*`b)v%Bn8!Y>mP+xFRlUh88P@UD$ zBZv(Bf=Ec0YK$sWHijYibu_}y>FRN6FxPfN_%`u`&qCa4a#_(#(+!nW_D;3&CtMwh zNNG4kk{uM8yp`3-k}-C#)$(Psr)C@8>(7_uJB3%9AO^9jBE6d+T$K^bJMnrivS>A+A@@!H>dU zW(^_aq6YA6N31RLdj=%4_g7Rp9+!6{<%3hr&cjDe^3LM1BOnlLxA;LBW#vPA+nJGO z`-YO(;t(|#Ou_Y#Keq(uV*R-w%eCf8pXc_umD6F^0GhkrKo!GTh)}DM#uqx=Iy{-t zB8z*TYp5}9h@jD^nTjfEFKolO^+YUm(zH2PXPYaV>4;iAMZ)6Lut*e^B&#l&q%U+* zDY*hEa!em=sZ*DPHqM!0!(rl)Wz;Z!h~titEq#y#i3UYFRf4qCi8T!JjjS85E$Z!B zQT?LK5FQPKmPD8n;%pT>7n9|M$f^Ze7bFwxjm+7r zatzLk9RM)32!}S!ltE!{-uO zwA_He(F&lako7(H`LnbjGvOX-&3Lg^n-1z1Vdj%`CGDqUw3;Lxm7&f^C!A}fX*{o| z>F)HBj<0SJFQ)|GD@x1QboHze>WSsC=gTnJuhVIOFG~|a^hfccj~cYqO?`yN*S;aJ zGYwskr*iS2NMuk3B|w&^95p;K*dNfO!`~nLF^kQ{< zI|WYXz1AiW{PED$mO6AyDJB~se=2LDI2T3z8CKH!)7r`%PmP&59h`_vaBsz^(S%1l0Oa4kp4JZAqER5 zE~>scCFVELI^v9Zk_D>lL~P@dZpxrlClmh$ZuWWRJoi*jRsyT1`pW1Gj8FEC#bDLn zCx}7fb!4ug7--M8lalv+&CY;SYVc;KP@QXVD%2NI;|{10uU1>6k`}$vHaI(-o>fmp zQFn0dx0&=z&|mXp(5bi98{sKFypbMYz^1g<+nLe9<$=-sv}f7645i}P&dd}t=RuEV zrs(*nC-@+yXN99~=_^PXn5W}VmC*Obs9kOl=;71Ek`eVL<@qrqlIH{GEUTv)FjVxm zx^H12HJZPk0h*qBBFO9~qdNW?u+qje_JUPbGWpgq)NggyQ6z%uZ9ipJGCe24; z`8XeW=+`q{u$o{{5_{dv>PZ6<@SzCbc(k@lvl3Oe^YFG3;d-DCI1gmRvQsG*GCPIC zfn+BmWkd#(>x%$}!aeAfmCzNjJiWLpt$(%}nD$w*^jD$PJoe3_Fq|8i(Mg^`p858F zIA4TiH=mv|8Vxy94@`x+gY6}iQ|h23?0CjkO;jSL`kyDM^eGT(2{j{~lsC6%)T|e_ zH%vWg$gKZ7>t`i!zfndi$!cW9GB+`>e!S)3Phq$P z-$(2A{SmUu`0681YiBM#H2RvYu%~Qg8kvvi$<{h=GkDq_l+cxk2BqZnWl)8($AU94 z`tpu??Vz8gLu!2nJ9E~~PO;EyuA*taJmr+Nv}Q#ww3~et;%c;h z5x213_eVm%YT+bB2dDi@BE5$%R%v}R<}Tj@8_l@6+zO{RGh_rc0r;Y+T^k^c()1m) zG81M*xMRxG+sXS(IqHSDQ`=r{dD5t(OQ{&;EQL2;5SRkCv(umhW}*{bVt^E4VyeTs z_L&YV*YOusc;~D22o3n)50b0{fhprDvDj<2@t4g$5JGD=_^CmuqR~XQx}$0#0{%fh zT4bMpr%Iu$FKoeIEcKf7dk*?!14Mu>VZ1nQ5_}Q=ELOvM)KQyB1lGtez+xoP#oi{g z)AXi9WB$Rl5?SNq|jwj&6&31*%&h}`)y zQ3h%A&*|{e`KZ?reQa8}yFy=M1*8L^4So%Y_aUU!&>1|Q1|NxzsfoFmjMd1jO;`pD zOt?U727y?N!C=`n$T`|uG&nh)2v?ey7gh}MR1{rY@4ETPsm>7D>pqB|yd^08`jwF8_}J?PkRBv8rCdDfSUv==NfD?Ldi$heK-QW(YEY`xa$ zIN5;Bw2GcaTt*bN3Jb1m8ls6(Vlf1o zT^ClY$7na);I%kGD6fU}i!koX%^vC~dv1NL?FHVbj8lc%B(+_ddMrVsO;eX(A>>#^ zAwBad#*GT}>X>L<1(2oHT&Ifrnbak!(RvSl?>Sbi)nbO(5)dXoYeq$gO%mi@2^%FS z6!C;WVO_ z>X!+|nESMPLurI{njbgb5KlY#C9@+uyxfdYq9A1MLc2u(W~g&#&WF&h0i{{EPIW4X z8R6lCtOcRAVXjz=*fdb#atJHbtbK&mI#emvqYCy6M%*PHe5OL@fu9XlLt!~&3dyOP z6=81|+flW~dbdUHGI(VowkI7qi;I~P#|*N<+VU4C1T@bO@?+0jW^)ZOANDXq>QU&V zf=u^~!%8Aau~CDVglBUmN-Y8-z^Fv^Cd(!L0Il0GdCZZux@;pxXOzPlVSLxJW3CRGAJeEglb}hs+pZC|_10*$i7tmstYmvkJWe?#n%8uVOA}g+i3|O;G-8R!G;n1D#Xd3`u~-<78aEqV+FX1;%LwKv!pOLRJ|0XR60ptp#W@g| zpwWo=X8Qp}!j_U0IkBUuk)!}~N__xVCp2tb0fCxFZj<^4@^`#;;LbQN90Xxj1n?O! zITw&QGD{ED{$@)ub()`3%mpljvUU^$!vkh%0(sgdaH`d+!Y{$vpBp(Ml8d9-7&Niuk|;YCWb6>F zgfmk}?>w3DXx5k+Nz&sMg&W05X2R?wC@P}WmHq-crV0y9R@{o8{BVjwma48{2KBlm zt)9TW-$qL{gFn)sWcoV{NMwDG0jW|=nobKHJmZBlSq`_17joL${$$oyR8En(d+RB9 zG15d-TdnM92BzG`r zva#V9Jg5eJdL7r-FCN6Et;kSLH4{I>cJTYQ?tVTWVS{qRw2@)~5XymTi*dQ$p zDLYG*rre@0s!6gBYMflu5Cm+NGDO2=n`pfxff#9xq4r0D)^4{IL#SI=iR zrA&j<5pC_#-?-BuOlsYAw%LYOQV7nBZe&M=7A%i!@SCG#VRiNCO}m>#)cJ^VU%06T zD=mK94{U^_8;ftH+B$@}hJz-&f^MpMsITYHiBWJVP+fv*ELl%nvb zQ9JT>&8db7+KPiaCMj-=ZH?l-0V)|hH8>S4hb@Pmv`oo}ItqdXT!AomF5~YU9p9o8#q&XZO{Q}2*hcV` zl83_1g}B!>w^E5@0_x8*S{ZJRtZ_<8cN+gt^Y-wKQRyuD3LrW`sAem-BKb;CuTCQ% zG)|xfti>0bUAv3$*&s2i923JT$rRSP%CoUbLnv5hz;I$KMx0p(#)zS)%Ybo(fLKg_ zm4Z<#7ir};x-l+7MHtoOCy7DshmW$d=_d9VmW$ek2IpezY>t*&>)7hy!iveqHYS(+noVK7fJ^i7 zlIeW5NU^?b^FwZA!@-(rzfBPqT@&{N7cV=U*2pDdj;lL4()0vnJza`CX~eDFv=H2` zlhPxfG*jl!QkqMe+_OGAMXjev7sE~aq4YgHB7LWr2o=DmJ#|G4R_klfnAjxhzzJ7* z+A+12C(Bg=JUJ^LL~UeKp{(`AL!F$AWDz;Nbvf&{1hC%L4Ps|l7)B0N7Rg&Ciq5)! zbwYtUn}xOwNW<3hLd{LWn}_`XX2_oNiqdXWKdNnTtPg3Od(gXLE;aU2Yjqcu0-k!& zpdoKrV9^n#H1_LYh}jo2&?8cd&->W1lNks-Cz@d|=+)OYRfMz#BG?kpraDn)vmLF+ zPD?2jgV|nCne%rcEHa=J&A7(}y;X_U`UWPE8Yd_HdOXBsF}#A>vpU!2!HuN9qu&a4+{V-7~hKN zXBZdOCiEbMD@$03@+`W6`#v3qD7hv@fp@4<#i-f= zRti@j>u7G7qqH5A(94wNyob}TFboUuG7L$_3l9xaW-QW2k*Gy{bmdCS?86*kkXX86 zL5U)QcDytuccC;66{7iC;pak>De!k)y#=<2_5^}oU@ndfE#ZTRRS5_=E>9>*6*Awf z_abyAK-8|fZ9pq6h5|+vW-YI&5M;+y58}S2%*Bq+OTbS>mn@XN6y6{zFHsTf z42g7$A@s_AsGXS!{gEk+aT&&_<4uW-4U~H#rr-$U;}4A2mJOa zzh0)Hpm&iIFRRw(e4DSCVZHFTvlGGZj$JnFqOXAU)iuwH_Mlg{gWg3G#q0AdGCG$c zJHnPuZQ+!>N~MZrot&ZT-k7cgZnnz#D;6MvEZCz8kbhM=nv_73&F4SK0 zVr0e9M>C9-(+WPaVOZTEnLcnTy z%S|*9bDz>4moznSUT(hGK@jz35+uKB$hINNL%&Fo1p29<0o^+GT>d>t^Nm>KAFb`6 zMq&taNGmpo%n-B(1H2xRUJRXzDMvIM$r>D4nq(yyOS>sF7AA~ZYlabtL9(>WwkZK* zD`YP0LyCvG&cQ|@Mb)LWEjZzSG3|O$EE;#x=6k}Vqu&B24~g0CTE)o#Chvwcf9UIv zq~WRpEMsERPaHyREr>O{;KW!vWJ!85%T$gtmzhs+B1o)nCy2F%lO*ax&y_41lj=6o z4-gEKbM3#58t&&oH{MELdXEJ${O=}58ad~VM zcZ>+-Nt;0Z%JP|JKWGuyZg#A+?A481h0ZtN28>07Awv{2=OzMe^SJ&oc&{fxGwH0= zz)ERTrOcE}m>{YB3A!r=2{1eH*Q~BD*HK-zurjc(VdD?(Wzt-KKv$3n&~946)=Bvl zIU=Vw5nfnX5&DV+@|M|J5!PK8iUbR?ag+DvUlK|fujhpfupmsFaK-SwKc?E%MWOgM;rdbV^AP zYpo=Ocg{S{hg`RePK=s1vY*S2m98#*QS#+8p6g{+Wxg5Xos`Ukx_!tSqtqeZ$XeS= zmK$^L<$vCUR$dP2EB(?%ZIL9ger2T6t64@o_YpE5P4o|!1|7g9=$Vj& zjpF8p|p$`l2Om&F>s5mk_x9IQk{x1=Yt;ox)w?E zK^N~3HTUiEa!Ou$SwN74#mGU`p;qz%#3WjRjJC#eiGxULZLH%yHbF8Bc0LK3brFQ# zjFPB4nQT2PVJ%-+MX`OWT{iE!NeZnV(v5|cNFE526x8~tB7&80F;W%L0<|U?AF-Nb z-(QiK0wgi^5pDLwiAc>0l5WiklCokW+CIto0(>;h_Z^%V{Z4w9S4BWG_0EO$u+#T+ zisbDCLK*L+V_5Fv*iZED&XGC%3!ry?BeJw3!L&0w_?L9OfY5!#YrfiJ|Z zfb(l%=X6BsP7rbVmwbo|>1T?Y0*``_*`uKQP*6X*CQhPrLum^G0G(VRh_z-2DKjWS zLTyS!s9#2oWvpDkd1HepUHpR=`tnd@CW=A!W?|7C2a8IVAu(1-NW|KBb#YWfpuXD5 z)Ukn=?21ikI~YA-+s5+~4n<nP_@<3`5|h@1W99oZ659x?ZtLXX zUlY|dWm2^j)S$mSq)$hkskq*3y5|s=dQDob974xNfDz}dTV)HSTytw&t_HT3!9j8C z2}dPR7gQ?zxN;hTEv|iN&+6m~Q0J>b3^i*GkoduW2%QqTncP|n3mp1YXL0#RYtzOuG9#*S8%v=yeL$n6%NYru4cI-R7v z*c%3Un9xos7?YO7%^q%JSq$Dh%p@(I!O>EiQO6^NL$Xzt-spBW>fntnM6I>yhn&5T zeG41XG1#KN(jU%LtL0v1)@n%=BSQRf`E(&(3yq_V>uhedmx(Mw?5d23hT|`_{xpDw z2k=B?8kG{(U0vpyE_27hx-N@AeQy^uc-Vu+Z+H8fyml@|CIz>)QM=ErNSk)y9N;o! zWs9hA;9xpYUv>aafm}U7>J$wj@>5)Bx5#4${z@HJzm2i&<)|f=Nd|nJ(gYZgW(8gsLf9U9+e<7cD#)V45fSB1+5hBwuDw zHrCe8HeTuqRVd!FLIYD+71HT&R>xmC?g=KzSyFMx6DYSo2!^Tkz7S=2!qmpKisJI+ z?_3A3)*=wqSFAIpx{;qWbpxxuF%P%_b8edm&h2^0i}NgrjnEbRW3h-fb1098xCb2N z!H@*eVi|2_F_D9nAVuVz5Ea{zl)0F|CjThErwA_~%PC-9=;)bEimYr~EMXAoCFEQc zD57rdIL(2*#Wg@rq0u-3`lKB?Kf!%+)N2Bl%4;E6gR$uogCKa&d@bFqGRZ=uUoZL` z!r4imizSsf6@s8^F@SF^!Q{r=N#`DNaW4hu97hL3lBw)e#y+U)6*# z_fdvp3x@8+hd^Z-siP97BWB%c1nO9GQbmppjq=sX7D1UBStR0FVpKU88nMbw8qJql zRKsgHMC1W20?6Zr1+?gV?7MHn!UXIzOKy zu-~2s`B^khvB)(e#%u1suNqw=q!q~W%Fo*I%vkvBR6)M7P*%^f{S+50w+7ZZHIuiE z(`gV3H-|wiVk4O$AGyVYpHjx4S8sU9B+hgdhTGOueM3@mUxEz1FhRj*<;_p2hm&-8 zI!TJUc9q!D!ZeDF*P0eWLMCvPjHxXsixe18F7U@&(XtkWld5D#PEKEF?!>YlJay}W zb!^L}A6LhUe37-bhnR75-&CDj7lmWl>8k6?eT8x_DYN7Hy7QL$+?lZKiaaOb#GLfK zXOT`S4j&j9H^TAUXGPr4H>Yb{*(>nbLn}hoSWeQ3thFt$T|IQCr4$#2Oun2Gx#FRU zs2B7$6WJQq&YElv2oh5!&y=1EQIV?2IG}Bkk?E{L=j5gvjd;nlH1Td=L*`95UkqpA zkL!A=&;gW31vAl$xwNRCtpqU6Up;ZF2^U39RN@4;6?fe6G~`Ce0f*ZyZbX8jx+YpL zC5lzEurnnikEG$`_?^SQYLYl&UxuaI456za$!CY%#E>*JJgTm~aoBL^(%H97RXh%?m@p*JUyl_@ zcQ$6kp?jLBKZ_oZlesB{z`}ZeVTHU(rpt>}Rj|vLXst_FM^;5q$;Taw^@b?#E7VI% zqE#G4s1xO4d{D~Jnw^e~07yW$zb4y9tG(S^_&OCsV_mkv(a&}2C9Q^bIV^Ido_bT} zpcD~hkCj$*$xuQKF~6bDkSH%k8b?_}zE6T|qqO-_#nUmdcj%zFz%mCxiD;4>PU<8C z^@2W>gjf=@6QjfbBDM?A-kqlz( z5Vm$WzmvAYSf}mRV4zkcJ1hHMP?@UEKV+bdlc8AAP~AD4O(ea0K$tU&ZZXH62x6TQ zhJ}We6_HTpb)2*Ere-RvSZ#fGHp24QEy2dcfMT}@*29aiu7g=NHT=d2yiBXV8n{HF zbNQUHQi)Q&HqxY5h+iD`qLh=Kxj0SZjcANf7u1ukS?-=R(7-_`k0}UCO)@}j2yAs2 zcBPde09|=uIw814!|q=DLA#4P6;dV9rOi8-T~M`*6I`_qG<{t52*1274rBT3;8*WE zJuGU`3jP?aE_FtQ6YT4)VxdR-eP_bn17Xnnjt;%ncZHxSpORQ9E_Ep2Abv z{p3>)5uS2zBO*z{>4>-;+s}g!!P1nFs_)L9~f29IQ-BKv#Qdc0lhwn8t_EOD2NypWK z6lu=6P0^gobV_k4MserTP021@ZJ+7`g-&Ui*EPDf$Enyk?Ol-Z6&Ib8>NeDcOJ_bR zs;dAajY$u=Y|er92+|3NBy-19SYnG?k?%Ryuhpb$U8s9Uy&%s+%FPObGIK`U`$i;@ zCrp(*v9K$pn94vpaFD30{*%OnR!^1Ux&M-x5)VDjpzE9B(ouSBIE7kkfzHBA^pd0} zUx`-}IFCW~eDYJPmSOS0DTOxwOd&Q}bx|@uhR=Q`YIa}%w*w|Gn`UC0RCYrSRa$mX zX^*}$q_azt!n%pypKHB4ebOCrXCWihfz z?8eZh@Uoz3X0hVZ$ql0_KrLyQi#Ng|l2b{Ypwrjy$G`IG2eP)B4>}+<_KdnzdgRcM zO3;?SYNJZpzFF5I2)PJp)eF!frx3$vT2>Rq!&?-$-Dz~BkfH0~qg_d#BUc#xRvm0n>4%~8+v~~iwwLpft7Q_aTLVz|v))63* zz)J2+vFYZn#ppAv5%-dJK8zNsbuCns7u#gPMxB?H_G$Y zkT*tqctwljm1e7j%Q)Us93hSFJ7t9rU-~T(GqZ+LAmUlXtc8iCkrplswbmt}ZWla< zgRxB{kfI{yis^KNVuBf=FHBIZA!d9TJ{L4&394gCjLEYSyx}Q#1ZDO?<4hoL(BmC3 zx~DdlrAf|5Zdj$Q=jHB|Ct`rfy>hwcjjMIDa#LDWJC`J_79|OCvsDjq03MWfCOmwjI0GX>!VJM;_O{lrn2-x~)!9mw@q&g=T%gDmC$RX*I;Q z!}z(_f{pK~!M9-=6YE8~`||NWxAX*`8@Sc*gmO&Z)CB2w#=#B#8!+&HEV^m zSW_LkE0NenXqwR&F>V?|i>VEQj@0=t{g6v4wpNwJv31XiqFB<2WJ6u0M4t({vjA9b4eD>rd0MKd1Z!uj4gX^TfjNFUc^ z$D}+*N9#TER7e2rH^0Y=%{m4=7mK3} z(8s$)Pz(fPc(_;I=BqS$F>Z4<@i$@MsT=?UXR$%?$s4KTl=e^hf<-?az;ndhzmE5! zb$K^&Y>vP=)Kv$;@3$t;sKsiPwU2{t`bXqbj{h6wJ^r}HqVNv{HWaBEV|$HA5C#B%4>HVo9c>#yr!*i9bwK0h(Twx6rd4?bxNSZ6lE~<#V(5U9rX6Xub%vVfN8w`+MW4 z6r5nQi^`0(jHr?yKSgEXIbA8YrR`ShCi;MOX|dUor6fq&b(X|gfiDrvf(Es^c);{p zJ>l4bneN0HvE9rVn^ShKpp6}dIT024$+%Xj%_4pKhjsB_tS*_3?fU>@R?g#E64Oo3 z45{{#bjaG4%k(Wdv3vJ>ELAQHFZG%X$deI_sAEoy(UuHB=F$=MIT+S#jLZvt9x_O? z7lU+m+ZpMxl-wnfT!hkVPmG6<8nm+#vx%hbfmC|hkKOI+Sh$YH=|LqYqgDdiB6fUy zt3@^LJ4Bp0k~BGIxT!46YO{TW*VQUt3$%!i`p&%({TDd6~#k^jjKXQXgNPD1gyyeEyU2ckRan#O7^hl4j zjn-vZV+A+mue{R%#x|d!rrOA>X7G2=b}=RJ?G;l*VjGxfq_r|Ap6?U)92>3G`fE+O z5?YsGD3%@CEb@~10sEc|=MjH|TMF(y_=<7p$#RkpWyJ7fj?)uLo}kdiAKrgS$8ZUd z{$rBcEf}@Vw_V~jX@ooXUm`*3^7Y~!C2rXiOKuM71TRnEefq1Mpv?#IMLkPspR`97 zZL(k6li2l5>U?+)nO9Q@;~ka~w9ZT~^dwE4oz?`N$|M3^S3s!@Rf5u*XI{mX&D6bjG?9M(dJfzP>7i`VS*&hb`7SYm%Q}5TmWDcBSiIgS#?` zNt2{Gk_eMhLWq^4D`8mK`XclbXo#FhYe==g#U(SP@BOvC6Idy%n}Kcb156;JYUgc| zt;U-ZL?jI{^#x02?}Z&nvW~V79%WDYVG#BpafOb9WM?Mr(g&rm7%`oWq?9%@?I~VH zv-4*DvK?f5;>`$jBBdR#GJY{Je0WTw34Y#+kySGJTXDel^`f|&qFVlpQRMWmPOp$F%Q9US5gsm>3)ainjKH(VKW`QX) zFr|xQc47(b^`v}+TW(e|wyLoRGFRq)6LiOz#EMH9npko5jJ%RoX|diPOudB9IxTj# zdSY$eYmu4>TxzkJ=7P+`D`Z9{?$xwnx&~wylG^@_%j4#a#ftn*t^m5l5)B`_c1kgA z^THci6vwtDwr+skLTZ&BMfn-W6vZM`C4rRLdO)BXzS#i311bz%+#WO52a6LMQY=iV z+a~lL4l8LGlCG6%ajdqt@Yp#!AJ#irQ*~q^=qhu0$r%%>>-@_dKQ`C>@gZJ(;<9qt zP-(6Prm*AsJiZdEl`>8r z(l-&1_$&$vN~wuAq`^diE@YJomc3r8{X|A;${D6Sbr|#kM4?22mx#;6DVNtA_-S3j zpDV9F0_JKct6 z=ZS|#x#d*Y*$1#<6Qso`K}g)UA*p)1K;qIsQew_su9C)!o8{%5MSZV-^#KmtMc|@* z5J))zrR?>20LJ77w{pD0yb@oZm!Rp@hS3dnoZ>`km7kMQnwqd(v@TIkWT>pzt=tkM zYvE-=oFwoz+U2$ajjLYS(TzN;61T0Jay288N@gaT zbPl~F#aO_@+^>qa4XkaW7fGo*7`-ISe`wmTx=NZ9xu`J@avBEB{hb2U5G;hnxEWmv5RnIqWkt9k-azMTE)rDIBkBS_YVyP{c{*> z7EgK^bP>KJ{z{z?f^(!Lmx%NbKrpQtxE*4=zsnfq>0P2YTS(9(KOIRD?W#zawM_IL z8p54y3DTv^&KjHl1y& z423yo!_1=_&0f?Y*gDRo&nr5$VgHc|Y1m2FTuxb`BZ%f(3^8Lb5w&PY6fIe;vIm(H z!$k7bsJ?j#c#5jPGyNUzp4j6qbn$UNvGll~7_8ENLXD)h00%s6FB4Dgm)KTkusDQo zZ-;mS1us6Kr?ly3;#5&_cGO%<6gv|?SH&7of0Qyo_s7=ie!9H=fzLbl)!H)EX`o-o z#mGD^frU=OY(qK@q}~Z2i2dpf&?TUCs*Q1sL8~yvVi#lg4H}mQWQ;6pNSQ+zOz)DK zToWX+uc7OZWwji$HKsN6wjks3Q_DRQeypy`M8171KXp~)XSR`!dW}k3ixos24lnhf z3z|qUP`b;W>`w&geMUwt>5p({xn>f&>sN`j8kz}|iboR@_>eRgNq?X0JIt@JF zB$7DoE&-3sJ4p!OtU`db<;*TDWP1W2FQK!p;^KnT5z|GLqf4nfSO`-y0W7f*SnJT= zzRnTnG?kZx*=MWNH6j6zaA-K{D$vpBsSMd}OQk^L4u=Ab?%--MafqRf%%v{YBeHdj z*3L)ao$!*bgxo%~^kn>mDop_wH^j+v!6kRHKmznQX#{vldvKMfbNON%c_3FJ$9wRn z7GJ_WCCqFw0yzoY+Z%IGV+<O|VdE8#an~sx)3i@KMvu#z8)UZqsH^G5PD}1R z$_zH~KI+(%sP;&04|uvP4NL!bZpx~aQo}WC)wpbCYetom#a%h#H7iR*j?WNX2x^{>5TiI6QV8qS^^AqGymWLDx%cg3bmEyaFbo)D`qD)wLE8 zvn@2Y=$vRmqxb4-Tun7+GYdnetL3PtH#>RbHceiMQ>4Joi4?(|mg$^?dS6T;8o>`!Ratx4g1 zQ{AFA)!CH$F7p9^+LDf!Ao8bUd84u&3drSBqta)cbEM2koD~&kM=2i^7D?TpVv%@n z%_68J%_8Y_Eb#*7-V`fhF|rUXy4dyV$+l0W^LWb;wT4v>JcP#60Df6@>F3Jn5N%GV z@~FBdHw)rn`pdI`+T>Hm^w>&kQ=Fpv+15La>?Fn-HaiUo05GG|vc!PxI|A|A@_LMY zuNy%3qRym_Jg`1qxxEu8J+kpubGb1ew!&nbyH?UN7BK-}1$lI^>SrQ0G`YuqbstuPw27eHoW)w|Ixb zS9L4QbuDPWh+R37n`8EOrs>nxbwJMDKp>XlDKZedx;Dwd+tPK~ynRx7(^#IE3RFW}t)z6;=2K($^8S==I) zAZ8_u>Q?bql@BWh!um+NDFUhOK57 zgzegsZHX8dpbaC!9Q_5*C>?b zV8e@R=KxaW;ztnI-zk!`+^*A*-)SM9S*N$%p!#sF7v+Z&do*;_gV4CSt8Nu95xF6# z*U&9O96CeIxdyeqReoSdlfMJ-maL8X@JPeX5nJtxae0UnNAK64A>B*ur#843))wWb z#}6CO+xO(Bp9lQ1sL*HUnnm!|sus5ZC7^VecSv=>uUjXqK>@nOgENp{PmTsvhWb8D z>P8`T!=CKW9m=IEznbd&k+?`@*xg@L%hZcnl%_)?3p=^}1(LmqyS-bkljj42>TBoq zxNCcUP|nNHH~Q3*A9ubp{?wryU6<(lcD5)}RJST~dpT{tE$x}{aliA~C;H{>Qk@(J z_S0pcNAyfUlijzgpStC4zrGEs6|O8e7kvBb>z3=}xiq-Gfm{_IXHA!$XiY1!#6_xY zqAvtjD%S;=FIQ-l>ANMApXiuXt0d&H@33YH#51b^#gtDQ;-=+zd=OR`ap179mgc5n z5f-hHt!DHl&FAWkH{^QSkn6Q#AtKG`7=}ZwZE78Y`aSx|^R!Ge>%)!Ew;C+H>~N!U z6JqBNpty^=aqI8`Jxbr9>e-9?Ei^!GA(kTDtm#T#l1mrnRhO&?FW2~l`BY-+v}}wZ z(IBcJLMQ)pClxd2h@l8&&FlKDV;b5ULh)w!2CC_KxmJt`Hs(9ZP6EZaB^f=#l1)=n ztA<^s1__8C2z7JKZTorEV9Wq+P#Vmu1x>0xE>v?aJ3p+0o#PfSJijUU->u?K2=nld zA>=D>g{Hn$oPd9~LQ~%geZDQBm{zk{=ihxIcfjsu;sAECo@_&L=;iYBou`^hPW(>) z2sItl8PAXY@Ky}3zo%uhw;Y=_{MB^Sm!rX{%(dz%&2X;!U#3nhT#v??szX*iFIi)` zOHY|ez)Uah61AlBXj9t2X-1oonn~3yEgU&{-#bljXtxNCDC|^SJ>NV`b>cDSJU#S~ z5DRlOotqK8L~W1n-k=<|&hH_>b)FZup3<}0@9~ukWnFq|zb6jEHVw%{t3UdKQ&x9P zJ{CA#VepjftLk2jDF737EXZca$=7X<2l!S;ynwS&?p`J4Q1*l+R3*+2{7VSC>O_Tm+E+h8haPM z)ul|)V>|E1vmnnV>-20yf~3f3Gk>>xy!ktCF`reEJwFdF#bWBN8iAZd6~9AQ_6V2J zG|GV_yO!io>`@H8Xz5DinH1P_O*8+xaY?4KPom5%q=Dk4SE;qa1fDDodQvfqiD&K|^h{d8mw0;8WwRA0b&E(V{oE&W1Iyj=>G7;`2R|q7 z9#rZU&)%6;CMz=&sq=$M@;-5EdNuLMNj%%B^}`kzY-S><%3PK8RkL`XW_EmPgckC* zY;P%ZhrC%TeM<#)`}?gN2d9o{$o44qRylm}sbT!whm>I8$Q*lkL4+o`>L?5*an)_& zs1PqHJA&_-#NvBeF5gBUYs*wD-?Myni)_}IhI5xc()H$JXmO#mwJtEd9U=0!h*M(w znrh_Y+zwcmpKw*Oy>$|U+BDtTQQYB_0oI_YS#_7) zLgvcuTWu=A48;{n-4?Eb#9>*k!tWx&DewCk&fC0$t=EsKOxzi0(x6N}qxJ~oH;%Sn z3b#~?-Y<5BbX!hh+bHjRHFFW)>MdII9ae?A*TMPbg6w>^U+*Vc0x}q((~sKJ59^dq zPcj&n<;2{V^GQeMlBZl0v*Tk&wrUxBB2KjTqp!`*6uU8Rvu!_1Gf{G-S~TzTc2znT z#Ygqjn)8yZ+HC(LU6GgFUY1+EteZ>fWzP?OS=CoU%C94Jbq&hDN#&@0>1B#BulW|W zB44&L&0b!TlbU)drQ>y{@^oi56Y?#@fu!|lYT}@+s)bof9XzfnYS34GwLin}K=*yX zSCcE#b+`4B-u0!!HB(%)5^WQ<6&btGeQV1_?P*<-Jg-{mSX?DhV4vYJ zvo!ENE)*3$Q^KgSRCns7cqvnh@umcTC#s}9{0dkJmy_FTr)o&7~IxqH-NI>l`i2NeV>RH z*D0R2Yfr^n#Bvrr@)Wd^>5-wF!``J#*ld0!TYJl#j9HkBh-4Oj-{!O$GHQYB(;$om zZ^n0IC#=iqC;5WVb#BDvr3MYq)LIVAKFmX#&kT zX@PTdQJ8ITyG8swS#o>Nq*wZBQ!19mlW8FBGmPyitG`UiTJ1Eo)%zONhN>aIt7d`j z9<&#;AtywohO(I+c=j3Y1Y}e>Sw=>I)JH1An8#Vy1Fz8E=9MtrDRT$0PeFIWq-bC? zfXH3z;*jD{l7b9q?nWPVQRJ>dlL@g4|K0^9@h|H2#Q_6D%(XU#-%JcaS-b9p$@LMD zoAl?Ne8yvjG5*A!e4-`37^drsa>5Yz`uj%GWa~beKB3DlCz(FOZ1m-mw@9(9AzGRx zaq>8DRG0PwA+GvvRPG*pNI2A8-z|_L4mD^VFoHx6`^GaC>GwE|n|Yedd4EsERMRof z<`_0&52+j{{t(BPo&Kwy;M5gzpOXv}wgD~G*QfIk&tn=J7x7yyNT%Cp z{#EWvgVNk+w}n|c6}_6I-;{0#EB3(|(UJ11Vf*bhWH3v^GfJrQaMW&dChzUcu|`?H zLh}gDo2#t(xK@>*=gfSTs@vq4P%wXQ&el?!Y06ao5>10^!pOjC+pI_Yr;$?30$|&P z`xZ}@j14!>LVdD>+hq@0ZfwoQEy8{uWkZtQT4fD*0VmtJq~2`%8^7+(LGD1CJ{I!V zFvaZQvS7M=MpByOt+)t2VKX&M*kA&e7oF-Vl;y?zJhf4eB!!5KPH>8=N-n<(7#kNR zSq(dl?kWf8AQv_@q53Cl+B z_Q6j$X-k9C`ei#&eWLG}ZZZAc_Nd)Bv5VhHJhMVib3f!BroYJb`~_z9_upR2`}k*^ z9!|*#X`XuHI;9Z%P?o^S@L`bJo_OANs(Iq)Uj}1I9B?N0XHS!^1>c0znB{?5{6W`B zIjgKWTGH2Pj3}duIS*C6@5^8&5Dz?=ya(pI^iYQ)zVw!eg3J* z`%1S+m0&a=zw#}T$oq=6h{^lO^=V(uq3YB1D_di8P|+%*_SBYfW%EBlGx?fb|0~*K z-2AU>-e!mW%J)W-w^+Thy|Loq|7cBl_^IkQnI*Qroh6F!N|u)SPQg=Min!__?8)%A zLw|epcZL2g)8B`HKR^@t5%@PDN)jsoRsh__CMi9hiG4^63o-N@5KGy_jJYYL%f|g7 z=A8gORF~p*Qw!rjy?u&m%A1<51fgUDa|{5=+J&6UCMlnMN**KLsxvp{um&rBbZ*ul{gzbCse>22%BO(>fwpRIWBtx!QZUCSR!4o$j+`t%CH{_%IiVu>6#W~f;n{jmQN`}Wf9Nd&Xn5Nbc%KNZ^BcP^)qPOWUucptVcJFPkv5+}KW zN54P0Ym%O8P=Py5Gt!z!YTS7r#@?S*JFhmIQn2R!4NWcTO1w5%iLzilt~y|TB(Vh9 z8Ejo7dqCOV3t)BLaKC8MjHp=DbkQn zTw8yUbVuybJL1^ja~%$EbwQ{P*f89lpdnIWb9Q;F-Va_v_q zNMU`9m1PGr?15Y@)2r$^;rFM&J9BI_<+I{YhVuM%&si*~v4`7}g}1krYrjOco3$j^3Bxxr0PAFSYn{GI4fUHt8z%@ zZ0x7G+cx3jDGO@FllaZCaJg|$wB17Gs%~cvPG3&NnNwWJ+Hxx^d*4v9aSi8r7~HS$ z>uC7+X>VXnjwIHjWIdbScCtL0+-g6a?X^xkH#wv|X|BTBh&$Q3G|MT7?PV{0+OA7I zcb$ZnzUP1SZEd4^|Nfju8 z-;*kItz0EnuvKzOdc{<EG$or%#{m7GLwo z;nyJD*EB-%HE5aJh3E-KRUOI?fqZWSj%On7)eQoE3=$-Ob*D(_3R_R_VY_OJY=evD3f06D>A18b$z)*|WW z>c?{Gm$w_eK@qOsqszm2u277Gu0G20RK@PC zQdQGui)PhPI_v+=s&Hs!TKkP9S5l4<()Z@mHY#>l9RlZ^tNE2>tJtIZ8|GF~LCNe?glnlOH>Hm}yFOiaO5aU%(hv!y#(ONm&D4=@_;Db}uF3*3}i-buOqR zxoZ7NA9Y6G=Z958aWV9QjW3Zdytu&$aY{CtFL%k?9 z8FV@pJmp}t>X(mBgSO!7c8+Uofq&8lc~WqqhRy(9_s5;gr0t z1rB}jQU&>czJqB(u3VJlEhy#n}G$$3{H$Ua$3|^>^`3R%5Hz! zQ=(paQTgA#_?oT}8CJ4(P(FX6tGQ-){-;v4U#)I6_a|PRkw3=DPL(@&a5F3 zSh0EuzpiB{8IteTvtari3aerEPyktv%euCs5^k=tr*P~qr%35vPNE;BYTWfyKnvR4 z?`rATY|c`%V)GNsOP>?hOU1J3X~{#1AwJQlcsDgGsNF#|w}vTta9qXO)L%BCHQ&_o zd8}-huOiPL*3$7`D_TlUDX$CcyHBwE-oNd91*xj()xXWq$lQiYzgQEv*=R2W4!d$g zDx?Y?o-JvO*Zf$xf4@-UI}$3au|&ZIqVa$qZ>akfVN% z)Tb`>2ciL0j@+mcujbwks?lRNVzVT`daW2@{l>h)$0<>F4eU<_mK_2-AeCQGjZ$9@ zhH19kt<3|dO1IiUtHW=6=}LpW?~4rX6+{2d(n=PMdg@^_F0}TOUk*j8(rhpCZLKR)!D8 zZ9%*b?XMr=c;6%NZWFv3N#)**yiPSOcgPLsyBYQkfb>Ikx%J8y7fkI|u!spP=jtyM zTt1)BE6DDupAeVfMY|d&xn)vR&IH#>{>^I&0UHr-WoUz))_4PExV$rf)Rq7IPoYT5 zjJ(HJk4Y=Qp`GVs46*D+LSS@C)81he+*22A^GuTiw@yHF#%kr5cp58ro;;7PLFQ*+U{5aKG9J0_z$&AZj`Ev+v?-`r>Q($ z;O~6#r{ItZeS?%m4+tZI%9V{AVuNn+H^R9)T@R2Jl(#jGpN2ST{rX@Ld04*Art7MU zgnEEZ#Qq6tMn~=Q&6V)OpB2$d zfjmn!m2{2ORgLlDQd-kNSh|i!z3`J;I5dZ;FH`<6nCG9@A0Au|zV;waTF*(O z^%fMZL8UU0*7b@-Yf!6LwD|QD7W%-q`cF})RIjK~AXaOV^ey<#v85M4;S0<{!)3He zE!Iaf|3R|h0KEFGZ(UlcE0ySj>#mS3_%LCPFG4y*9aol&huT9uBJ_J2bV?v*d)T=^?C3hYl2=u+bpP(>9XX@!edLb!<*u)E@Tc+H$?~3%_^%5fu0POOO5LmnAGmRQ~3V1Nh4mnB{eGM2ml( zR6M!V%X*4B4^x@+xj9_1FPK_A&BKp|?$$c0e#THJq7Jz8EITOFmVtiKp2L*FA3(lC zhur)HBzo-evBtRm!$yj{szc5G9)9rI$a{r)-2x!C`y|ANE&9TImo44XOQl+UIaOPQ zy(Jgeovya1)AKrSsiN{tJ^Joku$%NpHxONe^O$<~V7Wr_lba(#e}6!KutZlw3u~mH zI)vI-4EeD>nV7>X87|0z9x&W5T@=@)6oyvgr)nZacD2! z<^Ro%26-bm#d>_#I{wgJk4A+ZMN%*uUt#j;RpawV-=)!uFv1Ra;6vjoR~D59r;p(K z#hV(gDJ*J4ka^J&Ih_TcrySFfrA}8|=~k~W^|zOMh$uKa;Pqv`uny8cw7T^5PtZI< z+f`g<6hW>I8ZU%5i(av51y3q1U6R$e#el>rK9B47#LCknyP__*5L;K5`d)d}&=+kr z6d!!iv|Z5VtFQ0l!PKj)FK*XJCAU?Ud5@lUm1W)|$Li=8O8t1St-oMuiQlU(xi64s z#lY319+WLsx3pMgpM8h642QqK=v1R}57AMgG+S2NdRTkBU07{7H*R51(wJXf$9{<; zugl1J^>=EQonoK9aj;mzzm)E|HdAhYlxU%PUtPb~fOSpRN_xiEhh8m!W?LpRUxod_MrvFgvBMe_%Y7N7;tS+U8pF3BVE@Wi1 z`SZJ{NYWSHj$yA%X_!z78x2amb5fMO{jg@&h4|%M;s{MUmupgTIuc`=T=3NR&g;@! z(i0MwNhKxn&88<8!r&f|Jl#00-x!`Rp2au>bp>x7FIPI8#r#oMl6eFb!I`feYbe7e zy7_;_V*jBV+peK4vSsCUVf6=jKl_hwblH69RIb>ci9ZALs5mMqlK%2AE8`Ts-NyPn z5yFpPhFGp{YWb;ZsBeWs9b?1KYRA_N^vYajH2$ub0Y+_k87D ze~;*bL^ThN)6Vgf7?HcEOG%~mjVe@U{_^m`_YaUxhQU@f)+Hsu6D;DcW|x&eNNxQT z*z~6sMJvu2+M6y-UWEvMcdz*i?t@w$8s)sVeitIhL4>Oo2gMGea%TAhWA&)77spp- z&{OM-ppr)Ty1ae^h3bSf8KBLG{;Hd;32|Q8Bj{@Cp3)(1X>5Ueym*c0D*VQ;-YaKb zOezv-Pi~-Oee2Vhi;InqgNt;2tzA-OcA@t z*Qe&4Fg1YqhJST_Cqz5Ci8@f@0n>U!;PK9TC*uLRZF2++r!V1GB{YYxQJu=G%g-*$ zWu#tq3Mb?B@+w8jmy)Q3lJuumKgldzGJS#x%`t=|`%g*-sa^2qu@lP|wek98{RZ6T z)$o^-elKF-{fAur1H^pKz>RD&7VPNP?1junH#*Z@gu>x`S!fX~mUfGl-~;hrl+R&k zKCDM+)lNKNWCZ@o@OKFQ4g>GTJh!J*-TH{|73N{C+x=zOhVRLSKTLA5FG_X-P=26G zZk9Uzt*0soo@0Uv%-@~!6|wQ4q))V4FOWE*kq zFQ|0>@!V#kT->X-Tzwutt%IVktaRdg`o_|UV79BK7Oew7gztqkKL8Zp1zmU;nrV~~ zcdPz@cca=VmgWhVD<2dMTjYO!kdR~oa=HutKTZEP!Cw!USi2{|7oQl!|91&L&$|F| z?iONCF#TUjwg*Lc*mh4-YmL!4TV_Z34!*l22jRa4g=ys(p2!CH+aW~$HV9Lvn(idz z_cz6i>}?X3(xwoRZvz|qZCOTf*KIbi-u0XYNX$Aj@2)gyjF#KT2hUcBn{Eq@ z(`?=H1m%dsZdjDGdvbhSsDBA!OeiH}#VC?sp+#F*W_Q$KjA+{-Sp9t5BN*bQ9o`P| zFyR27Hxn&8JjkMThnSFCLf8uEp3)Y*;;TD^(xq1~dF-M1Jl%isS~nwCs`gXzPVLzs zsIXO0<6|WCbA*2VpSt93kSH2&vxmu6g4!bg35e?eP51MWE#PJa%QD{(rnK5`=h?yeTCnp zHBoqe=R%=2-jIHe>$p&_3hGmUI_Ie0&jlfS+ehgyb)y}q?`i4rx_ zwcs--;YT#WR#&Xpz>JDIXIcL!imr$neggA*vXnu*Q|df;rm@)zhx#1S>?Z!;KKK{25{_hgs6N)X8Ql1=QL~NddpulI6tM0+kspNJYvpgyU=JQ4 z2*YAIEpEM6ebtPxTS-ZdWLDHLhd_CZYRthEjE~z?b+nYl}0{L_RYD4PEjJ~R? zA0ldPsdu-ITK=%`pVV#SO@h1ToKs*AtMZn<*5W1cG*P00B=k>eJ$XQ=#}<^Pc<`aG z9yvDsSpFhBSo}s=ZIA;*Z=EKBb4OUVL6YaM}z z;FSvcJ(b@R>g0~NDeOkTt|tEY=FPGS&ravCmWI&m zes>-ON|>qcz#R!$DGW-Q&MK@%nT2}({*11q5JWv+|GXJp*0;h!@A3MvFG38$_K#>a zgI&J|6bk+JJF<7SxIl4ctl<0WlBm&dY!ngd!N;wtGsOF z2GEr&$I-0(oeiFUZ{(^Av4Y4|e*n>K7Yx&l6-=-KNE1PzpKDv-m#aQxgRcwFs@sh= zf#2KV3xKL4Ms{`sCUhyjOE8a+`B(zN`^+}cW;m3xJzLFt&f9$_#H*!^e6G4nLad%t zmh&k;s_UZTX61+$M4P~*`%EWSE5spetKmX<5vG6|+gk8Ri;}h(vg}5pAlQd$5i@eN zMVksKEw`g3jtxSvAR4wI*#SPbN*?@df&noBZ0!vQPEonrv$b~&${p$txi4~V*mj;x zZxf87wTUCkunr*4JAR#|KlUhDAV;vY6bxl`?E-Yxo4M*+vbrKpUpG#`U7OlSLLULk zRfO`Kv`~ImW#wl+R+dYa1=$}0lp-_1u59I^CBL4}W$AO-wj$YMxk{B#F%lCZS9u!{ z$cbAf`3l2{K#=1=J33ISuY-@7j*Ex`{}3M`jfqwZ%!Du@)pPJeG;^Go1zB8$-p`f6 znyVZqvtkqMT;R#58~i^6Krt; zb`X0WgK+$Cl!y@60;ZF#6`__m&ayLoUMbGYQk=J?kIRr;FUA{|`m&ErU1Ud+h6&A) zo%uXl`8BjYm{zA@7@74VmNdW{hiByjigF#Jpyzcf$=#gF7=TcfccJap3jkF>s=sK$ zd@KbKk7MC~0}e}m6M}u(2)B4pT+;H3Wp!E*ew3h@asCj@ zD0TH&3br+W8%j=z?TBUA4m+^n(KO>u0uqqRZUIEBoOQ@<3Db4~D$wR`B=7cnhYpx3=l6LiwS4}$IQo)kU92pEFX)r1=qQ39aJ@(-4Hbt*`a8MW6KY&^ za2-07JHzgba<60eI^|x&?lsE2f!!OFyTI;(H_qlQ@0&Y zJy1jzU}R-+&QLHiJN` z04+^H)&Q~sn8VA&0&-{P25|awVaig?@S114;MrdBZ11b)OJP}#r-&(7hxXbNUZiVG z6mtVOsAsMc#Q|Vvx7!^MjP!J@>!$#tRbIun$J4&ammMK5@J(;O92HfY5~dK z@ePvf9j8vGjLE-4`FBvljg&CL5F-?@kpen3h@IrqtNHX2tbPTnpPbv2a~nB#DCZ7J zKAv2nSV!gXA1l&QXd#p~at|2-7OUG&v6|=V6L}R4c$y@~LP(l~(jQPCi8VlD?H9 z9H$xSq@0P!>m+6KjLPPj3_73n(q)geXm*P7Y!;)O^}Q>zDcwPl&QheGY5u45NT(>$ ziTJpZ&`-ZVuxM-g7|d~H7hqv;FO1}~AX!#(Iwz)P)GoMs;T0@66SN6~z$;sd3(mSU}Oi1uR$`$00Ut1ZZ`f zhGnG1Nkn^H)UL@xw<-A1Bca-xTa?UH~JUJJX zbAe|27lpmaZ=>@k@EaVP8z2vFiB>V%s53{R1p`+`LS|- zEYqE#xCt^_D9R@)$|vM$k>?fVd4-&xDd%Uv(C6uYQbZ8z5b2=X9ow{#%tvhGiXutL zSz&%a(yL`OD`%jcfyImDYA^8*K!S2iRfT_nwNJ&j$jI=s zc|NICk_BX2y>%%rU#UT+x z?dz?`7FWM+I-J(Aq^kuN2{Zd>)o)Q66S!dfaxsInQsEY};!q!%lR z%SO%;_*~}usosvmOJIi=#17!MtJv`*vdj*UO09*E=3tnEVYoiT5+{*wC155j40D|{ zNUp;VEwe(7mRUj0sB%WhX)C8~1BE*#`TFc^O8L`>pUo&|hMa4ZbIpD$OSFS1H4T3n z{WNwxMvzB2kq8>;L`kTcJnzYwP0n4Cq{tELS~0?)Jk&@1vG4#eH=ZQ_gcl=<22Lzk zdB*;OFf~Ez!&(+s&BrX9doU@^4z^9J@@iMM@*ed2tPA~T#gPF9{EL$Z$tsSZzg&E# zAO**OM6}BOfEU{zIEex*G~L1S45tw!{7DhB^D&#eu^|hpAqxP0rig+V zA*4`pbnx_xlZKA;93=TtBVJa3$PY{hrt3NcEru(T-SFe3 zF?KZM4jqCW12{qJi@c2j9~;mGBHA`L0Hu5=4OA`fkr-Is;>=UdBSQn;$&8_bBH%5QRhNUr)gEaln+(s8f?W8_9)^=`&pOGMm^>!PG6Te+Gm zC#f@YWpE&hm2+iUZl7^@Am?T`=BoPu0bM3*t_vOQW@kIvVDVN4_AOT}!ViX9u3AFa zxw3=ndHA{saKaY=;et9JBXLxAW(0yU7D}%maTz6#xpJxyb#pUM!7>h#BnuJcfJqkD zI=QmUz7@Xb0P#0Sw@tDG$UI@;5}bylvL!pLHnz32*tSPufFaZzX5Qn-TI>RJkZqeW zl+7`(W(z5e03w-}UeP#7C6Fp)kaq!!5V2dSKz_keJa+D+VS%E;nL~i%(6ZTMk%CBK zV?d&m#5v3$(RL;bKTZQsDR*XWy2P2>`G6~Z@ z$vw`%1P&k)g}A}30nH0=$V@vT#&SuPezXRhm07IUnHDRW#N4W7fFh_gU{6~y&lih{ zXB@< zN-SR$X5X1(ekclnTw2vttB~PrFZt%;j0DxH7ZD34L!E-39-?F$;yTHIGb2U$eqr0Q zvz<}2F)=3uQ{iS?B$@Z3VxznV!w81hTVSKn>nhr@P7-GP68V_j!9Mh*D6S+g&*KJ) zqr~se#|4txx0L%$Ow$ihzgmca3y8tnl0v^F1LTKu8IZXQNZ`LfVCVEgNI;9ew${>lJebg_tC7l@U$oejJge{LF5ywFMp+>J-`_##$E}3uY`YEK|YP(IL;F?&J!}uiz?2G zew-i4I6sncW>s^}dQtYvDEnoU*Hw*Q=kQ?}J}kq3uCn>LpUpuT=b()9YAdiR80XbI zV?tV(sx7=kqcYK`Oms#8K7-Ma+olbj*$LcW;-SO4Jj6PoFO?MAu0;<`N=qwDBr{c- z8mNtFwtI{A=-x_V*eoV4+c?4g(&cTH>YEvyk>8bk0>Y;7cVSABYc9w^vJ-FFI7j^w zx{=vD97+WKy*LH9Z6cDJIYj~cR4Fn7aPN2IN566wi*i~9zw3>k_uxlmc~dKn;$Pk( zfiY+KRvJmsn<|9nk~3I81o0M4*lcx^1s*;Qwj2{Xhc=gJIpt&To7n!UZLz_!wVyjs z6|LAR^mjKQKMVY$<4B(CQ}{WKL&f;HCBqbF_Nn5`K5Z2d_ABLT?YT0S;P2(quln~+ zJV_timGM|1TDuyVHnGvNkrip7I)l+`uywtph{^{{+y*mSXitKmuy2bNFU}vtw4(qa z&6viXCZXC<+Q2lVUn&rulu&>NYFUqK2`Gk3rsJ0mik_?fpDDs0=@I8R{2}^FzStYQ zow{9*xgC}xw0rO-0jCypnZ0z|WPsiQ9OPsy%aJ|c<9u^hGg4Hq$F=4JH9Vg4=-gxc-EJl^lgF+o>>tL95308Y>FuavVAA zGL=*=?8qwuD;F#w6sSzu{Q|SAwW}qCODx5^sxTB<{WMD=keSzsYo~^#Eg?>krV!=I zS~0Js2{Z`-{(wPkylnCU_o-Y?v0Zj3h7e_ZlPCw3_6&Tf+klxa(4sBxrmUE2Qp$a~ zGGLG4W>E72Xe80leN+<+B{BgGTn5B;-Ms729Qq8&FQ8izp2J+P1X8(Lf_yBARsa_g zu7UN$?9ZT#vuAPSGjvHUX3rA!m_4hg$3CVe`zX;1b%_+VoCRdxXyDQsH5zbYhHuW| z0V#zd5%|YLDZ-;LvMx*_MQgDn$GM$9H z&>R~V*C<<$IIxzD2thjqww;^(5al!Qv0;Il$1fT1haW=QYtSex!T|nkS_w|8(-w^- z*X^*@mVt2lq9-bDp!kE5AEiNdEn!8#4l~=$xJ!YftA%`M2DsL1#ifY2 zUCwnilION-781vDFjj#`5hqb1*mmbuC4i)K>qEK(XKIM(_^}YW6U?;*=5bq1<6JqW zd^al#O0L^+x_}-iV`ZW3EQn2QldHw3gtwyT2B=c)&RiK-N}q!;v7JjPwLSo^n4^UQ z2tDjpJ?z#1sOm0LV@+r>f`;ZzX(x$T6!BCnu&uAkCxa>Yn ziU@$DWoXBI1bQH9=UIpqrTGE+Nqt>y2ctvd97mJX@CX#|# zrSf`q_H#R8MiRtYs5Pw=Y><_Og-{5XJgj(|;leE9dGmstV@sI`ixG*D-iIR_dYc&S zeZWr;R}sUi&I#Uis2-Jp)qUh`Cnal}t92gn#A5y4qPx{tgs|9HHOR7~A1JZo7aQABG$ zMd=!^8*to@qH&nIch{}U7MSbLJ;C&v{?BbA6cxF-9hhA$iWxnTmXd8QfooZsOR~Vbi0Q2rkV&g;&^+Kr zJ8gwtD*-0!dsQxZ!pUsqJbhetT;$Ii{JBg+r5$IEZP1ulm~G#bn;p68=gWMr6P5X# z%%Ro$2q%(Gw}0hBG7LQ%4PijpY?topgKTyK%uWY~<<2q`Esw9woD z&8B5U&*~M~V7yMRxn!8kGwp5vTxuDB@)= zHM9#h@3n=p9W=)kYy=MdaIcjkKwER84z=z8utT-&dY9C9hSz5--*gFYe}v6D^LK=n z+mZR0dk{$;K;CK4YGCeBoE$OJj$Ex*E~Z^pzC)YCGf%d9k|&{aYz6il<+eC)R$fKw z2-cb3#ZZ3l++?*tr#Q5%!xks*6jG7qz^f>|M{NZwimg~?E{B*8+)SZwIfly`7k6d0 zB`rht>gTGTKUe+yIR;W2qo1_+39hRI*Hwb+M1{0$iAK28(bb(WP-_n%Kk*oJ_~Wii z(>eG6&tCm)Mg{&LN`Y=W5AV7(?bJl|zH5VV6^OOL$jUp1jUPzwCVe}ukXY1f8TBb! zG<&iTX^YVGXLeXh>sC@Z9QKSPa$rjncbo)KVA6yxDDJ7?@6kN74tqE3KNJ2KYY7lp zEzqX4wr5BB0R>bR2H31wK2tPEdAU08;93gFH4Vhw4vx|4Qz;_xxd9iEhVXPTSNn`W ze1=-v7VA%v?sD}iLK?^oY_PI`eh~bL>w+%~Ur4tO_*nR*a9Q~j{M2Ojxw2fhL=@Ge zojg>rHcvSPet_{4xd{tUAIQ4 zbZ;ir(ZG0?bhp(C(qX7CfZOdBELbsQTxb~p2J9GWML=aykqIEfZ==;}Q_HEX`gVi2 z3{BiS#_XjgFYY9I;p?qbu5!gy$;`T_UxDE2Z^#>a5;8Ay??9XhYlErA{M>NfbsZ1e z=2&$byzy5nxY@b=Or_@b!;fnwgBSr^E^Ds(0|5O?>^17NBVcB$RR-jdRflP(BR%GZ zi5Ht2wqzEzDwM5?ag${!KduYqog3Iw8_C%Hd|Ct5b2d2 z{J)-wLW-K>=!vn?}jkPqdLSSZb;19+UYLwwJ*X^^?Oibko5nJ^XG>dj{M1C*;u-dVt z`xfLj*M*d;a*1Ztb!)98Vx5V&_yY+Sx*Zk-w3{t`NK9kH@R3T}c`Iet7sNre5*y3C z0oD7$ho<~MM9i2*5$&^)P6~ob!Vsq=PCCVmDoQIzc0uz~t1qz^^hipF`?PU`4GF z@}eURuTu#RlX;W{RkX&b{EWmSr|B%jX)M7+t~N>`&#Gx)RLMGOqiPjC>dgkDO7Clw zc$85^;z#i)3vL}ik-9Ahn4lVPS&Jk#wrw8BN`Y*&(E_;QeHe z*krfO(Se}3XL-ocAWoycKI`9^Zyk5!{ulYK}OL z8)BXU;iyE=+YM2h-P{lIe-9I(f6if=09rYD|s>H703T z)lPat=Om4llbjtP(#bn;X;Y!80wbuDx`mb`CnX#jm0(i|JU?GM^Q2nFoRqp)F?s$D z=eSXxdPkjT61U(G%bt~^n}SW(iq@g4)-wKR&|Ta=IAC*S(r>6qsXJmScZNjCn^`e5 zH}^9X;wh1k?5;%=07FQdNXb1(@M{yT`eGaTM-=n&F~hlYQm70T5@FB1pgdlX9xo}6 zm%t+Jqtwo0(zszBCVnT z7*Ql;K{!f3d+ri}eMdsOsK8#Nz;_4=X>`vio$Wc&*`8B6+j9$=5-7F^B{_mhJ22xO zYm+){j2(Ppl$UX2SBh)so$;ee8d``L*_l7McAH0YeTF?zh*BU-@IDMx4BU@_Kq|`B zv=y^GW^*wQY(ZzP2K7Hn4F!FA5hB58Sb*OKt0i0e9QvV3MS^6Q8zsb(qL5A=BBgMt z@p!wZ-zd9|)LhsCc+rM9n8XcW8HUZLG}q@or1t+vHv7D4|9J}hh%~@Y@sBX?6xC^- z$O9JmYq*A*Z!&LDluK!DDdxIu#lkL7Pe=;^U69xVEi&JR6XSw5U*Rkm=;sCQ;o~v% zbFoaVtPn(Pu};-fDaX%Up?ZEMtGA%)xj=!RdBkavPb53Uq2e)JfOb4hL#ETRy;#0Q zk~h85T;2uKqkW5%_f?tYWtI13%KIv|F`a=$ALMx6qv+RVtVI=lk)mIxwz{<5vgJWl z&JyNs$TEA7mp%tAi^)Pl!KOuQ?MfnJm@Gyo>UV`iLRTHqikwAhdXhY73UaXTud)s@ zgr>=aQ8$p4?OWr%)$*+|-x?*l z1<+GL=n3#j1if0QeXi1xP$wVbn&x9tw_2~;nUobnT~b`;0F#R$pSU)x6LOs}f+fZ- za_8jcJ|`yT^R%U@?t6#A7Zs*1qQ0MNV_z5<=nSZS4BReu3+`=z6-e=k6mN2(93l#S zwu|QzB#Ty&hZZVly+e9u6U5R%L7$^0`UHyr!)U-uqm;(IlMh$q$%iZ7w6czA(rH;# zcBOOMO0n@&lC&f%v-|_nX3NdWB%J}Gqu;oHZfB2ipp0`GhSKq@;gHTYSm*%0jY1#} zKZ6Nj6%=R1({wtSB<2`SlN zg-lYb1lAr86C;u%+?hhe6Wq?MbJtonc;#j`xNdgF&CPUx6@Dt~Lc)qg@cei>sh|8! zq5^c~bv{ky*pZ}CW^p1sD-a*ROwP@I03*y$edJJ5x{y#D%-vV?-A{ zkn++44b9+Z;y$I41rX`JibG|_g*6}Q_+J59fV*iiXn=eyS5^%WlS}uR3%QvqxYI@2 z_4l*JA50%8lFgmifryzqF(BLI!~m=#aRboKowz?&y#QSIi5=jJv65=Fd18m;*G>$O z;N-+W0p`CG4}t|+Adfl~Ubu~wfQ7CV#nIvIOCpezoSN}egX_?23~Va891^sm0|uo- zcuMD&W)ma?c93w1C=xfR3Y-!VN$SWE%^p)BEf8`{*-=keB0cS^ABGxwwW=P@SQcr2 zgFgu*9Ivp|!_>PkLQ9hB*~=sV2F@sMLl3+RNWz-pwU^t0pXc%SvUg0o_Ocw3FB5%! z8OTBIaacH0Wn2;;7!oZiv_tX>g`pKxpLXzahA4g<)ZsgxcSvRPcpfkxT@GCgay(BL ze$?KhixiIY>7QTt9P_*I^LP4`9uZq8oKnAg3-o;DMF5kly`8H8i}Gf!_ExU;t6c4M zs`;xJ?RcItc>yq8$?PD)uYB;ovULlEJL&)f$EBLw>X7F2@mmQ`E4kVST(jGWWISI` zTSE{uQ<1~S`@&BRtqRS9ui{Y$KhWH2v2xkhaaRHeLB&zfY**QMGG{rI@ICP0_f(Mdr*=+b{0Xn=Hv4 zIV7`0s!K!_C^we`|Jsm@pG8$kKjD2)oS9E@Gw*O`&U_3%N|~FPZ;^hN==Z+*eF!EG zyxh!3`4|wXnMGSA$D;sr9w4T?E}<)(D8!Ju=VN@}HAcq*U{=4&%5eU+RshW04(9%$ z!};KR!~>@GcZ$gEg{CyKCmy9Urzai-j~t!71q;f$;R9x*AY!iNq_Z>U^D#FcqjLq= zHV_*kRLgiqC6=}lc-IJ&j!rHJ7(>5K7Q7QrbUf;HIv!=&9MM*%f*}Uvk%qr0Rn1nT z{$thNA1j|r%7^5iGw%Q*ChRr11i|CppW-T@@;k#sQi2-$V8@d)?8%p%e9H1UjGOE< zO}v04v)*XI^Lpr)o%x)vBzjfzy1veWLQfzI<>vvdsz*95)>0(XtSg8XCCYFDF|e5f zk?gf}ZOh3e;AHYvf}%vo$EG-TwwlgX6Sz^x$IrOhHdoeG$?fd%HBdu{Np~Dn(>9)5 zNP{no#fE%6m|E`ZREl*sVRb4eNvP-*LyHV~kpR3&QT2?-?vmXNLMW*03R)QoTt}Dd z=yDxh6~ToFGG9B8Z$pj|vPT-K3Hff&vfIGfML4?%XBSZsB6wwkETo>QL$*(3iLTrz zbaRKFEF6inMEx4neg(B(qRY~$ZM<4Srr3tZ zh9HF(Nd@dsZLmZ;4QTfJ+Zj;v*bjb#2S_6-H)&!qse{DXRBL(yY2Krlk1Onil_vE0y}Rt1~ZJP#|+!`(clT)Lg1 znpLRN*uefk<}=+{Cc2n}0HXzO+3+(tsxmpM4dSC($uELP$;gnOAN!fF zDD2>a(xDU*YW}RN#lxf2%_5!+L_F0z;?HjJBc_{2JEujnn@4*=BB;|m%1cZeo^2Q* zukhHB0k#(MnzEc%mN%5;g0fsxmP^X=j}L|LvV z%V%=YM|&Z7ydUL&6({Q-@oo1HQQv9e0UzKxO?_(#?^n=v+$wcpPAaK6BwK896P~MY z!dbyhc&?!dXQRquGclJ@>S>*dmGV(~HpP85aq_25$-ODh#pUQ+qUNr? ziKn-Y_hpZ7b=vUY*l)APcREU45h#c}oy2EM+MpYZcJCC0+@+X(mTc?deg~u5i$X_G zInJ7b@9jmrsY$vu$q-LI(V=d)WWTsYI{qmuYBwOxOUeR+5O{SCkJx&DyoLf7m(M)3 z$#V^D@?3*D%)sAw{5GNydCu#U#Aea+pRdteXgp#A-VCwNZZD{T36eEpM+w@m86UJy4noHVg<{) z8PrJB?QwA*Mo{v|3D}E{3YH|BC+-RYHM|Y3G#x&6`OCY*oR!s`Q^%~ zW`((rl2#P+!yQbb!nK9^!8CV;fi5fu^fQ&y;zcduf{M7HA};t57a(HXBC#s=?+Lmu<3yB9n>QHRM2fn2u}z?Md?YT8DV}CvU z@PGaM)UFHv#pDxLZu%hiFMs(r|Li}j-hb?0{_B79{LFv#*R9=|Z~ycB?b&;N`0n%$ z^M8)wWz3k@5M6dDOMl4!J`kw(KoqZN$|8d)?RL}M!&IW*eP zSc6788f($G35|7V+>FL8XnX|?7mYj`>(Tfs8U-|NMdNE|+=j*mG`^0;pP}&$G&<0@ z9SqYF{i=QLq_(+}+GQ`b$=%c*cQX`V~1ewF)Au#GdUKrR|fD+Nnxgi31&jXH_-bd_6GU9Tyld@&k?0IXb%KA z8v@Txtw*+EoSt*xK^A;|FtuL7&_&{vMzrdWLUXC$43_gL z$azG*JNdQXW8PseuXKcg42xI?d`dWFdU$7q`l^i1BE2EQ&H_FtGenJo4;|r?QV#{< zhepsLWEj3yJAtqo1CU*K!jV%&p8fJ z-}!I7r}$MOeoe{YCyR>m;hx+yaS8mc6F*C}c9<$QLSBr?_dq_WgM?SZ6e}}K;r^@W zj{ic`Fa$&~>e@rpa8D72`SnlwXqOzN!BPTe^sfMwHwA~^fP7&}e`oR@vhe_N@Kr3I z(XsC(N(*>?A5~_QiW2{>z*hy6{%df~qk#@^9?{wgis!$KovD9x+g<97?zQ31Xm48G z%iOkl())Wi{;hGtFiaz2M2(nH!3C-?;)Z3|M#4xMEk?>n8;;RxWQ?qlGybjdSCM$u zhQAd2W#DfO{H=pO7yb(Hw*me-%(#iVi34%E%oZ=2;?rHqa@mfnR~O>h%1g@o5~LlD z#Pbp5ao&>8qbQFz7$RLmdDe_aqNr^FsSZMRmACD<)Oy9>%V@lh#sxGkqVXCUZ=i7= zjaMS^+=F;i%!g=vj48O%1U9ey z-&d9k%JQ1BT$3N99O3$20o{9s8(F`H-5h8G}K7NHqU zsNMt#M(I*+?2%D4DqyhlrG(6(R*A>+bO~^rjmjl7sO%qF@)-w&`vJg>q3=~RuD7r@ z65XMi;TskFYd~XhyfqXH8iiE08IPOsWNW-Va7`DMxSuMDw=kh=AC@d;$0Zb1#M!eL zxHlTdt777GwGD>gwKeiCUcAW$b32MgCB;SK`x-FSfLB=Z$W`BIktN0hvsk%T(RUuR zZ;!|MBskas+j9d5@@hiec=EX_lxDjwOH5U&ZCJ~&>knk#ROhV@O=B9;=Z$JjO5OPh z8ka43a$Xey5A4f>@>p{0(we#!hk$KFqch{THXq4LDi5l0^{^#R<{^-G(0CS&DjMe` z9@ftCpi6tmGU_#WZPfEz#0)WYZC(XKQfRl@ITdFPhkNa;yobv1p-}Okkv+!enb7AX zCgdYb^0F02dh($ojB^-4zJkVUUH}#42paFB0VtT8`^1vE`#vNb=C#k!xQ@|q{MRla z($=n^=M{8cm2GOvucI=VS%yMcN#Ac(n#cSgeI}p(GzDM;i0>#TeYp;7rv96Wp z%{Y#$ne!O-Yczg?IETGd`>l$4VlPGkjL4pN6avtho4Mox`q;Bw!hp+Yd}zj__(iIB z0tw@ZVKi`zoOl8a95N>+(7>iVu^$a2CMSM`Mg@oYuhDqVl4@V_F_wHxHc8Bq4?JNt zPRdwFp{r>bVoOg~ek0OfeaWAc8`$kl8oamfduETNHAiJO;5wzHPHT2s=Hi&~7OV)} z^?Mo%`xzqIWZ+BXh?=Bjwvxt?mpCd9y<se4Ve-H8Egs}sl76r#G(*Jh~qz&uX)ZNK2)YaK3KUB&9#1FWh#K>F?%>Bw2- zA~`Oz<1(GRASNs+3`1J+$O~S6P1^FA>^hq@f3q13$l-PB4&F-b#L=+ONTAVTi>Q+V z1`w8-F(>Vy4ZYH6!N*N!% z_$UP6;+>u@@MQRbc^yj&PO$Oo4wd8NgO^|&mtkOQf#QH4*}ZUl6vA~NnG2a6kJGmt zr+Zl)n;ye(){7Q;v02Ag|#$t3$WG#NGN5IWDo| z5Ia;fydH$tKIwU|1FfE#Bn zv`SA_9jm;Tl5RXQ^j<~_MBVN8vbqPJp{VmYRR=L$=eEJEiUAn&9z8X7HBt}}Ec7}m z^g6VzA?q5nZXoLhtH9fmHXbNO3)Sr`T{Q4Ex6<2qUHn0O{3bhW7dV!~7v$1h#}Lvo zDD6lOQ+k+ujR7BgE2tVdw)8xfkbcMfc(Y!-SscZ=X>RJX*v)vNg$|m+*TgI5hh+d> zbAj(n;x}0UX38PG5=5iv+=P<^)W9!pN{c91p?_uYQ5k&H4?Ze`Tj-p%_K@sHe5dzE z)IjfW1HD5biyX2@j*r>#F-7}5NBcdtAU|Qtt^7V$>wR)uV8;b=yvB~#Fhz<|q{#mj z_J0K%6e7zd#WwKTAYC|s3IlLSR@4HDu=MBgOp?vtax}fep$_;pjX>4>;m*)k}jIE!a*7I4NRAUcQnBUi6L?zh(s= zNQ@xyCg14@o`#ChMXE46K`=gc1$9Rw!g%rwkGf|d7L;HbM+YV{2{f>PhzAgCs`8zM z@+GN?_(G1XEuMMt99&1)ZjKkd#q^p$xj0JFv$c4U9n)(Pro3sgE4s_kV*&pdB}P|1 z7!dISh$=f?06A5?W{LQELF86pr|QB^c|}NjB~F`xOw(SJlourxjFQrFI9->+X)n1Q zNE3AVE$4c+Xdp(^^N$Do<67Ql>heD0rAY+R1YIp!2R%p4D*K+D48RH`u?V$IMq40G zlC&Cp60mX>PcbFXXh9>T<}S~YM(;Qp7US+I{><{{G=I+U=%ELfTM+5(7WuN*OMF)D zDjmqXnp6a(R^d04YZZ=mm>wLTAm(zEy+)BTPq4kB=Cj(_7LO7U4AS1^yG|hzIU$ln zy)d=r^^6^jF@Ce5gEe+Xw+d*`Jfl}q&#|z z?_r_(DdUHyeu|u_e9U1dJ$`@>GVJ8r{nRrxF?yy(Jzf{nAFsPv^YryvF$CYgv)cpL zpP3nsO;1}PPyhQgN0J^X;k{P1+isz^5%K=KJU;S*s|v9Qy44#X+aFf;gemkA*>Uq-0N zXR^m=byh9g@;Rh+Sa7gFk0rCmz?aTro{5vigw<3s8N(P!Xe2XReHIuaaNyHU)n_ww zk`$9yZG3-;f*oX`@NMcCFayekPfkN9yDGDEs9rfT9F|Ff<4gvMCUe62o^j{}Rm>uT z@z;nrvIFXsJbJ?^15L=Dus|jB#`Ys0h>&TO5OB?lARr9DWo-PmfaxI(aAxq( zz*}HZFFdq#GDC}5%D8uO+-pJSr_%X{Q0FzATI3rw$ivagBe(%U2XAA5{ARZ>uKHm?9 zP(H$JFIbuH%}0P_D__80hyvtgK0;T{<;}IiMoe}h>`l=!`A7oq8jYY2&>P#KuyrCK zNxzJot2~>>IpHQ@tAK$2Eu0`MNX^D-T3IVB8LtUsJK!G|q>YUS30ktkzgCzH>67*i ze2t8r^`s_i1@yx67|ec@&9=G+P0oz;!oLCv*l7u+|>HxLP}})Cg}19^SC$AAHY0&{HH5HPkJ( z^jHIh^P?g78Y8YoT!;9C>fu~D@8I-}HW(~z{YYm*P=dhO_aCg(E@mx&y`@9&@5R!=|DAjwT$n#AQ-%BQax)>{glA^ z?rY@6$M>og{$-$Wa+i(+ZCN*BOCg6uK@KU~vqe($JSYt_d`$q)_dFY+TViNxB8g!Ph+;%$DDpxrPiJ z9IZIhddsPr{Or41i{2q&x86n0iW^=!Wfn}u)P5z8f$l(iQ(FpngW zaL1(K5g{wee_eWj%rr@GV45tpCCLr$O5>}qH5=am1!6NwGvS9UIF)0CmrU&xZymo9 zi{2!$0uK(sR>l<*am%$0nS#1)u0Z$nZ@_sD_i;ABV8?YS?dbr4L^&jGa7#f_4aFQ> zp6){2plOG9x>sPi-lB?Kmc>l*w|YgoUHM%jzZv=MhZH#3$){!T3VsNpt%h=|R+Ta; zi6FpF@VOOPjdt*C#lqGKE|ImDGAw_>eRACS!gUZuH0g0T+AK%v2_`+c3j^P#B@<5d zFxp+*1fY9q*sRX;EppX)ZliX7V-AW`GE=H_C4AovdHsbXNsJbFC1&8Y!USYDt(Z}u zoExAe^nfS%z38v~E_$Aqeb393f3|Xsr!2JL1jW4C2bdpw&1dkPupuM`q^3mnbqdcusGac;q|iO`_6QtTZJa!@z} zgPltOV^S-SD@8xHQ;2~#tz(hQWTBpX!8w6|5Vt^=sb@5=j0u@S^o)sj_v9uV7v)L# zcmT_l3NGcm8?vij$(ZDL3R@?YF-Z)94F&igbCo}qmff5P-ANJ+VN55*+iW%LFegVP zCR$sN&j2Pde1JCM))b=ZCU=g4zFDq2y8%STOalU~{S^%)Eyx$K(Ba2l)Z)|j zB43z`C%ds~qqzxM1&rcIcs5R64pn~?;5?g<7z06+=vg9@qqvi2$Xl_cMM9l-3VtcT zH&swoz$gMO4#~i0~oZ0#JiAb;>qawzNEahV@6W%z|6*wRXkEd5Xn?aDgB5H8h%re&2rG=?3{bt!YU1ZMFA1dfkLC)H;5uJo;LPu-xir(OSKOi#I ze9s2;4tHxsHByB-Oy2a3mxc3%!rpE1d>4485b=CZa#tcsoW!fxsW&LC0(g=-nsxfP zY^>DByOX5VMpV%Apl^$9l5d@miIot zAo(e^zR+ZgbNva*EbJ@y!`P=|6zv+NE?WyEM#CPXvA4&y^ z+7)i_3p`u%Si2y{8pouuc7ey*1;_JX+H=7rj)n#w%)2O!+F_<2m{zu zAWEphTg*_u2-?^1*xALT^kI_eYr}aWaC(};6M>`4&gj>MpifrqdxxOwLR~8?s8*nA zEy!xIFKfgsN@jPF`}2Jt)@6dl?RJ^cU#6YRY>jnHYOj!k6;W!hk>hiAd`^z*?6|JB zcFzThx>#4#MQ>!GG?~<50M|%^#3js|n8~q|6kF~uV(SaF!>Bt>`RUTWHNqfl{>1rX@kfTm_!IRL*}gUITP@!j^Q}?F zK`NN^O8VB6s+Cr{gl}!(tke8S@h8Eb76zP;DG;ai+MZUvXLR2)?2ETo6AT);^ue8S zvc!_~p<1v{)c4V>ax^DfJfG~blyArVD&KL+PnYI&asF8RvHft{;_@8xy^_8)rAn(o zjQdv0wD@xe)v2oXW-1Pc;zywsEeOpV++EN@{ui*vw%D#(zl!CD22 z8ux}5-dvK>le0{huS(51*PH9E;!Yr5itgf7#A;d!x`B99%GIkC&7=XWVR{cv!NVJ-M-WvA7ID z1p_(JIm)W$Hhjmz^~+gkQH2M4Lms@sqsBstIKzUHnF8He3ta#X6h^|RogB;Qk)kPFoh9l0#bXE1xCpaRep-hZt;Pl3PUK>2x(>)>)_@owt`E*jJ=*H|BXLj!A1er6kr6tFEm zP&fm{^Zn3Clgdn`6@4f0Zt2hFuEdGofMtx~Rff=^D&^L^e?4=Fcz#>z^aA@s zx__kgXG18*{VlId{?3HdZ2hgN0G-&&*!&4T+8)bfXU@||A-UnqCFZDRE_s~l%*Vb} z(iw~kUlIn-up0HudE#ed3@taq>Z>y!MuB88x_rhZ`z)aVZ$Oa0mO>`7O#Jp1=}##d zh)cGl$66r;l-GTmw4E@!fn;AF(7k%Uc1c$LChcLGx$19ep^3Zwe@_TAdzL=ceJus4 zh{K!UwtBM{H$3T9Icn70?1vnGC$m?y?|_%jvF|med|mANG+QtP=s1^xUHpMaX)lunU}TYXMV1%!B$CSh3s-B* zd7H(jwFUL2q2sZ+H{;H0gh-Xr&>%Z%Zjc;#8_SWmQ4vlI=qxWTvK`Nnkg#2s3%wBO z5H|do@aIH31k7I@cxNp9oUql|4069j<|Q)ELz1jZ);G|cxeCA{=(!G! zHE3+GI#|)2qMd~Zlt<-lG^-zx{T;F|lKCXm&-p}$Qc5Nps~>lG>c?0(+*qYd7n3S-twQZEig`>Bpbw)RhRX%I8n;Q4 zi9w@+m1i^J9r*gXz{ph1>SGugPhEA0HUWH1t~!BcEk@1CS{%08jb}K%jdtKW)DC=y zzXOk51?_A^Yy$Zq75`PraGuJzK;^fw`~$KB%tVLU>+x)ty&6|P_pR40ZYr-lFrgs0 z4PLrSpELsOS_+#_Ov1Ok-$qsMz zNzq>+^EEO*C-XY>I3afJk}Y$!mBsPOF|&>ak?VUP60-?R2icF3{Z&5-)sfBGF9;7_ zB>S6WzD4FQ$)pii`xTk*A($!+`50wN{Wn9y8fFNz6H>u+pjynNBvnLY1Dnyi2@gAd zTcSge7u&$ALEztdyh?7bx%T^$#fgW<$95eaDosp}jF0U-I640GlmYQfidQ{oi0a_O zrKhLI$EL;)OmBK%YJ6+9+6AL=a*5A_$JT>afWr2|_#2Rnxj^z@gCTZRWahqrWZ9V#B^9^Bm1Gt@I!94vMA z4|YQ7y0-QYb#?Z4ZQa^8)U_2L4-ReK0#JLl^!ApDgOCyAJlJ2{yrsLZzckdfWw@)W zd#E%xJUBSmUF`1f>h0e$JX9(b4?x`ho?>xpPv?Q2?ykQx6Re_Ye2=U?ql2 zP^_*4UEN#y4{Yw)TpH@#+&y$)>ri)J@7AqdP|DKg&85M?u0Ckj{=UsU{l&hnE&csl zpt%P7p^1hDhYoZO_YL(OIIv}~)ZbU!3{AMTv}JSOaA$F7%g``1>*oI9A~arU3-nQ6 zPiLvWyBpe}tE+SCfv&#Z;$T;AacghaQ14bq(bd;CG~6}Zdthj=*mQD7kfK<2m7Ha zcMf)!dV72N2eFM#wpA3vlO^g^5Asge|oj>03?|zaQr*JJ2LiU0eY%mh)x~A>!;KL>efo z%0Y;)8sZi&KQdIc3s74jl7@(t#_oK4j}Uhm;+yrzh{pFy#o^NA9ozQ&WMpFJ)RD2F zZw>$W$6Z2v%Me?aiqBs(ca9D3oSG_4PJ79_h1h9`ZObL!IXPK8vU_ZL{GKDzC31KW z`h?hFh(BKz!r1Ub<3BC!9lv*cY`Qe&m!J!Z@Et?kvlM_p%KIkA%P>JT!08pD&k&tq zaQ2oCPb*jh<5V1#3_5DNA^Mj~^=NT&s`Tji)bw8zM-P>})R5=54RQB!squ@&zHek~ zWa?mPSZ};7hUi{N`hntf(MtzJYpWr8S5)d?i6!cyP@42$z&PGz zh#kx3J~=*Anwq+|I5{~|e6sYt()6LpF~7e6bGI2{%Zlpo_}IwM_;4wJG%INU{N8&I zAOz6l&keD8McFb#fy_3a}Q7FNl(nN8xI6dxTPIu?Z zszLC8Wb7$vq^heqr3q>Mv8n0FLqmbg`A1*%ZCx;IFt|9JQMRFh* zBhw>4E$tpV03(0eCz{<`Rt@Xn(v!t-SpBO&4Tj~X-MSj`H#rW|qLy)pc$Z^ z`uA*J`SihKIygFewyZoow|`yw{*|RyQ|3M6IO#E8(b*-*Dpiz6e{nS0H%e-!q>FXngzN=aC?@z*sElq1Fn>UMV6L!W(Gwz2iSA`Ez$qXY&!#m~0QELb9(@{GKKF@c;yE zgyX~+;QYe6`|)X5Jxq_3rZ(MEoGNYZ-8F`5KU^A(1s8$P-6ccpZ=U{v;!lfvh9*ZQ zrqORomS@-0P!SjjKai&~T)7OCMn}q6^r=8DVNC9Fxdb>&oM$EtQC=;Off6zMrO_ix z6ngy7bXd88xjbTsX_8*Cc)sw{;^@e55vBTtgT<-BV5u}#D3AZNG+dY-FN{o26~><) zE5N$*C$L=KRM=B06%I~MPuzXiT~9y#^rkVt>_g+_yZ#c&KgD2CB32%sEER@J)3EZJ z+9X7;A?~WL?1Lj?Pi@+Dc)B!(Qa-36jlL-!1N*zf#WxL!0GoaavmduArs^@orqEOm z(ER41vDY$y`JINiW63lRj%zZaCc*|zpka4tR$*f^BxQYuVT_!Y3|e_ivBoq$QMjaM z8aAv#Q)@CcotTBKh8og;rv!L6HB=fKE{;u4sU>pLo_~Ouh0sRoGQ`HE6VcY!q z6G1cV92+W4K_g75MN0GLmWg&A09vxAG7CSzmc z(?pG!25jly-?f4YH6+^_&UA7jusvFwKDbFru!l>B?;9DVxoOwo($Jyl5<6v|g~_@? z;5>9_bb16hfMwy`Z-{$W0B_Ie$WW;%oM!8sAfWq3N~6O|mE{3L>{Yk(+5k1dytEmnkWs892gnm$`l@-0{;;# zE5w?b2I91dN6?po`1qlbVGZ71Lp*XH?!-+`qtI}wR302XvS<3pXbE@i#s{GVff47V zC>r8LF-PNcB(=khKOgAL2E8PQ`VQ%xqod2nS zZ>aN|+9=kn6&p8U&CCvfqylkDZbB>f-f6B!dOpQ;W$59eDketrd8{R>n6<ncDg3```bxF7frnu_dwDyS10wd(KXsQ)=saUpwD=@TRu- zB>8aTx5Fnvi4W3yN5_#P(|(9l{otf_m`lmjKuVvwc=WqBR>h}3`0VZV<;iJ!<)FVW zJ)l*ze6d7-GDyq!1&lNWo!(j0$1v?_*KD=gyHlgNf|gCE^gRtC#mqj-Sh}E<4f&mZ zSPi*F)lxPC%`>+9E9hK+Ck1AlVGj4>lXE^F$9*^KH}>Gt(bQ}{Z+2e36^*nL$|b$W zMbMZ8d%0Aqwz}FW7e54W+2F;W_&L~SUf+kGhXPV)nXRZo6f|kC#bpa*JF#E#QWsn8 zPQ8E}!lGt}+!DzxlD+h)=9iHO=rfD_Ga6`L4RE4{H@Yo>dfZ+<`{mdqbsgCA$0dg6Jj6g+gqD?Oh^_()iP&HZ_Vwq6==MKnF4&W$yr!c;rjjm;2`vVfHO2zo1 zIKE(e~9BX9CpJfr!w~<_waQXHpscvfx0oyu?cxbNN9FcUNNZ-PqU2j2CxrqCY)%L z&as7lu1A%lq&iS08ruY%;!0TXWn#{F-LOs09f4lc3^9Gajn|7kmN^r%3=H=u*UzZW z=#%JZKaK&-<;2lnpXo6XsZv>;}oCEF}0_(Ii=(wxotdUt$8fP=ZMpIlF z#`6;k=!NR@VUhkvblA`Pm(Yf*?Z_fs4f+RAO9KQH0000803~nIO5B`nfu6Pi09pG9 z044wc0BmVuFK%UYb97;DWMOh-F)lDKPGxs=Z*FsMW^^t}b8l`gcx`O#y={}+wy`Mu z`8-w6e_$yeY^PSE7dtx1iKBbhE6G_OThi6;#;1j?}EAad5oiY z!TgI^Wtb=RalU@Sfolc#{eEy~e>vKKG#54Hdepz(8j z@8xyV2wy+pUv^mL4;st-ou9?Y=U3Y_qpR6B+l>D7^B0<{zKnt_AYt%N3bcyogBL_; zMj}6l`|Ffa&rj$=k3*ik^!$*qo-Vf5Bq1xY)_YE_YmP0BK87=Vqzle=!1;laIZgWT zae{9$l#t9@C-HqSXDC~cG&}R6IC|_8e@W+O-XcyONHTvMN8#2ZzE4xeO)=xDgrj-R z1!7JzVp$6KQt`vLH2d-o-vkjG{32ehNfz7&VUTV6hz1dC9YpiMXCp;--ouhIPD#95 zoB`K{=z{OkWxNUJ-Yw%HF>^@0hag+B0sJ^gKqDaBZ(m<~U(WvEJtRSv(MSx|P3X!W z{@d67%PiT@ub=oYyiCa5rdl^CQy`2yQO>}-UIS%}t7eKSiC3t3x?8cK05fYG1%*nc@$%j5 zDr4}ihPIBv>KtMlQw01`D@F3P;Vf~Kkstyx0Fb%G0ZRn*>0?y89SoyvrQ7E z)sO2AHUh=rd0_NKI;R`lur4-X$Q*0cn-*^+lyLxiH}+OB`xjqNbC#@vSck;`1unuk z)s5*~EJ<`nIT5%FewKPn2V@l4zd-q$+O*#lGhV?9eBODT5|;~gp!%NSy9(%+(Rz~s z!v<-C9G-RM3mAqGDQ3zE;4=|Z*r5x5Wc%NK;gbh^vl2cb`vNErWDCmrjz%=$d()w! zCw!%2?(hI(9TXqqqlW$6k1&#CGnL;P=AYd}>6-e%BA^@=Cg#ixiP$u^2(j;P66<@& zo=Z2ogA^PvjUA*Ayun;&hEkMR_KRUd+JaW@|L`x55V;RRG4A#7in*+#_)WM;mzt== zXBiqFn0}^A;=!y05#sQ6vsi%UjyszsrZ2f|T8Pmr18|Nsp~&|m1OIs)%|CCl&)49` z=yDy7#MeS2?NcF@Sa9cKLtHv#z5-4lz_5re=ISNc1$&J7W2%Dcg*U_r z3<%l?keCn4&luqQyWpPLJAkndzThY4Blt}!J!K+`sQN%24#G}C9&k_8XWhRtSopf- zD7iMZyJFl)8(B6uIFW7Z%u;4W4nZ| zOU2Lk>ohsJ9d_*$Q-EgyBTQtuWcCOMsPn$tWCKP7IzV^6$zn(s2x&&&MI1-Fp+wTd z^z6;YzIfG0OhS|4OZu6MZf9qw3BN)M$Sr4OMdy)6lLXB=+af0(O*RRpki=$JC8ERNYv|)y>GrV$;9) z$`o6@_{uU{DHDvsR)$b@V;xsFBO~hyeFHP99fz{2+RHNxj;vSl=GG9h_)s>HRheOM zWQp7gBiIsS*+f@$iZK-Yvlpfm{IeI96}&RRC<@*Xs&1^~>SknQT`YR(?^%g2q43967aA5{v z)$9!$7^}`P8p_@+7AZ9ofh-R>1o|p7jiUJV3mJ7(|4%>LR{nB^!IAatCeTid-iaz0 z$R>A{#vdF_z}Hu6Lwg@Nm`!xm<`~|mPXaRzeG*vp=9S@xz>zF?wy&*t&TLYvsn5&l z4=uIk<6OQP4tXEw9sO87!#FGb)ftb7kpzbAgN-%G7;G{{0!Hz~M>?er@j46GlGV4x zM`nuGm3*X*DacnMBP;cm@q?Ndlwulxk#HNxOiD~xK!!-Y`36Yg&8aM2C$K2*cDp~d z5`J9ClJ`Wfd|@wU>Ph+ym|_0%f^0(FjEy%zl4c&zdbP$gZH5z`aIm=z1D`D(M^kZ! zN8ORPAW$Gf{NLcM{3sX6O&RB4sek<~kwpm!@9i@Thph83j33^{(R+kNpiX&E6N`C` zJRX1p3dx=&dbe}|6(oQ~V6p;{tr)aZ+Hiph?rgerCL1J(4|MZE`17EIM1z4`jY1+9 z*7~ro2t&$?uOQ_WmTU3QxP3uf_rgPsNw8c&OFhi3!r5-Y?vX|G9aq%Cm~o9Fa(w#d z4Dmdi2IruCo%=JeYqKaev#m8r?VYqxg7~5@_`UetjG5g*btpb+C3?B)@_M_bRv4hD zg|kBc*80l!B@6mv*&E2HmZ3)g0ZD8s_Ok-G#t8IdkV0k4-wIZe9~Iq#gkyJ0;ZxmO z&t8m%qsS_~>wG0SdmAa>+rgR_Bocpou5h3(Q@sK!u?iwATaX<~ux>#Vf%qg61x#5b zL0zmfW3%<)w|75#S8(Ct-No>FxVnq3tdh2+-2?>;rirBn@mch*~k_Vxl7jF!RYUk@r-q)#D9qN)6?Od1sJ3G7E zGOX;?r$tl)+JlftSl2F<>v}D34+O?yAKaa;smvD2Kl+Afm(sp3`at3N2zFnA22hee zfn59Z$f~g*>mi`VH9O7I#?}+kJiA#rNc|*WGyvOm6RFy#dr0%m@4UG>p0|Mk^Uc!0 z4BNgkw}JX3Hc-1bz-^)27HT3}s9kL8?CX)+*ViA{%8{2- z$jH}mm2E?s_U*Wi3(eRtUW(%=6%VBd<6PVb(A7~?IQ9DA>5SY^ri<4%Nd3d{D!6DU zy!M%H5WHS&LZ;4p-!hD9J+Z=rgo1;e3yRDJi8V$EK+Ub^kNAAg$ zp9Je{VDF50#nj-7!E>_1eqJ$`dunje1w8TjAD%z|^4Xuh`tl27j@nM~-GLsbz&{BE zzKa8#9zPB}p0{z&6?%>@Y&5{O)LgX--;kb;e*aIpMU1>BL1I|5U&LX^K*ys0Z{fDG zz%Nbr%kxprA{tlhl=UZ}tea`?)bw$v>C^M#i`+8eWi;UgMph-H+9FCNUKEa8WiZ-dF0S%Xkycp`Ol%x!KQD zn|1jSS&h${roqa+(j@K7W%}r{3DMXB?lQ`l-bheq_Bw6ff$e~gEidba#)AarlxL7d ze?jO-cL>78O#9|AitnAuxC!6C>(E#4zzeSTsF4o$U0Xs!&l^c5gBJW;HCujJYgteT zX8qVE%D5fOr?7)*qP*M2xNXctwlU2vq1($G^H%0>?8jk6wN2X?F={=fLTq7*1lMP? z=d&+oUztm5-O0h#)jGTSN!ZmI*_}~64x@V7c@f=s)>+ykj~f2hDtsHy`=>Ad*AL%Y zNmkhzovH#odzD9R=!ZDYUWatWl-64|Qr|p#jBN_0NZ61b`6{2?z-k zmB6zyA(?(jQqUdqjn9a`+JsrK4$FgUM-qxmeHG3E7B+!8uJQ0-jR0t@&y$2~&okyt z-EO+okrlzgMM&;Ajxjt)3&oH-0f1S62da=0*WjgIeDK?V{es^Set(^V28e|}e7 zPjoP9xx)gZ3dPEB8?OMj^WoyS&4S^4`M$nq&y1$3XcynbmroSnUmbI!09>M4Yn2WqMypsF}TGhNlAy)G>lfiP%m_EC;Vs z6T^>lzk-59ubGT>%i@CP<7$6?_;);(OmvDu9j(u z5MIJ1&%DcqN*j^ECm0Y1QSRk-$3?Lg+yw2#NBwY3+^Wp?T;+K#7scs* z^NV|?J1d;|xB*!F?Vk)6FnW%J0a5=U-b8b@zV&|wkv8%Rpd+sHAskfXG|TvSt?`c~ z&C9QR#^6kE%`5MX=DKz%hLM-6<4$^SvS&HSrl)Z6bNZ32)?u{;9s9y(J7+H>(cNDj z`ROAsjW>zUa4?(w{VMVQUY-A%rdj&;SFyiY$spa|B|P{SJ}`rk5_-q}{>!5ebiVP~ zLUXV&=6J<^X~L?A=`*g)LIy_DBi;q%vp({kOnx!1InsBp=JGCrtHbkWtIPWONu73m zM6+S;*=6L1o4KwNE1vfFOc)(W_&JG~TO6wJcy0<2B9bcKe^!+NlwI{`k{gn$6EEhS z=M$^DMS1Au{gurX#U5QO_`O0sa`BC!6-la#RZf5FNG;Er#v%^{O*3q>st9d3rR1uL zr+5b(Y{Gsm&7UfreKui;&Nrww0R=jd@CCUI`A#nVGd%k=e^8b^oRtBXGc~#*As=87 z#{AT79ka*Tc!;|{OD{hUR^foRJRLv%V&+}r0kn!OzKl7>#2{;(spUJod8$17IwZb4 zcWrK%v05{06=gp#4HTBRqBv^?Pl?AiWOmMgJo#SSs-?-5KS*{AvL)=hOGsm@0a3%4 zg3R}48z15121ye~jw_4j(Yzx9#t}hWf`eYXHUg3W8+2`8VOy}I<-2R5|Kv$>42 zFQ4n@{xN07Fu@_sFLnSV2w~vgtTrhmy?H#-L>ep^x$wd`f`$wcrE{&gHh!)mY{gu% z)n@fQjqb7~N1phIP5F;a0P%qkzmzFC2p110pDWZlMVxGyc#+_&!smC35YC1~`oBfrf9T&O(N*#IgF@)6Ab#_}Cey*3@w$nhA z*9*VAMfXX|y3}8OF9;=X-@&seB>Rp8{_1LtT$a?junu%YVr>%8L7Yb1wd`{jM{N)& zws;EU0rga&Ke|2lB;Zlt&%pqSLyj}9*c7UCVPQrTf!h)RzA#ghvV$8A!MT+E1F@c~ zkR!)?vs>S*Z0k~7H<0!?Se1z~d73;YT;3SlPW@ngsl1~V#40YCgJrs#6@*Ec7r_QD zb(s<=n4MOu@Mc9n>rP_10;&PG19q=!U}C!+tJ;=3PM0e9!O!;V>z9X2SXSBMQgDw? zWUgm~@lL^2y`0I4RGs&q-AJ9*K5Fq${(!`4;Z;tna@Byq30vJ|ul-jr7nMosI7Ym9 z_;C^Em(C1oKbY;amc?8{UQyrmU{X@|CGpp6uId#{@m8LWj&1$Ja|+ZZy$n=PXX2`qH4hMw@mxBaqINe-(~uNE*KZE{q7<0GJd`!dOW3ShoHPY zQ(pNbrt8=oYsa|;o8>o3*R>higJh-b<{;gD1Yy^U8;$@C&Zcb%w2)6XuZV<5waLuV=H(O@xY%djmdHWh=$B z9iq@V7`1JPfHTh*V${uiFL-s#;pNxb53e_m?k_l2lT+qnc~pgIDt)xbWmTD-|bN+XH3Ik9s5 zaw=By^7kJiz|d75+OhcZ0J966)mmDx%K6uccEQAlqH98NAw9G5qHIyP!m2llJqbiF z0iGkslzBJ@mlCr0AIDK>sj^UA;u~;XO|P-2+?>WD;e`0WHLArZ(^%9^B;p{4uWTcS zn$YrURegu8axI2~JSrS-BFn5*A|AHPNDMc*WsV!ki zyM?LjYp>Ir2ilYaMns!;o++(1+3nq_Qt4F;vj|svU(Wma4p17mISoyw4CS}$(4^Mp zxZeD*@sVm5oN;I?e6YP+$AEBYABDxUJwwm|F77l&2j!yrlc0lG&k%IzR9(E6 z5IEW?Q9>?gAW}SgVUiTjUYr;ya6vIj3ZcdIEH$zjyppv>dIW2WFu$p@Dl}R=A z;wzxV$q+-XXeh}rNQ|4D8mB^xn<1%j#eNUXg`D|tr$mi>MT3NQumhR7m`&cb?o_Bz zv}hY55VFn8(EkbOoHnA>C|!6{LKFJ}c_`Zrj?T8*A~rIuc5Wfn?|a72japsuWqijr_zR;^O0VAOuUnuUldd7 zdsGzJsujw4$*s&@#y(0XYL%6CVAJ4Zf}I7%Py30Or~bY%-trHjknwrNUndabPtzej%OtzOl4X6KtM7W?T3yoV3!@XO6+f<^H` zX`SMbSmkWU!ECO`Ug_9<=S7>fER9KNq*y&i+~L=$^=Px z9>vji6>m~t%^D@oe);985o+EA_Z05C6_XuG&bk&a58Xgm?sobl`V70@=j>G;Doe;b z;2v7I#a)eTmmfq6n!tU>Igu(;u1T6!hr_N~xvN`Sutio=M<6PVMIy$_2BhT&E8Up4 zGRh>Gcqm7yjn@b9nVg_ZLQtIJIW6tb;-#2MGU)2X44J7iSx=}fq2QuOAjmK9ffRz$ zWspbYUUlI;OXjGZ1qZiA7J096D5s&1K|0z)1D}G5wiSNZD`!qM_h7yg)6t_bpJrcL zr<@0tkN5F<6OwGFaC9rHkRzrlGvJ*o$Z%=%(#-JhTFk9ZrNzi3xuat1$A4G2xH@PY zHS+RcgfOh9deLhN%4$qv*9QF*6ql)dnE!ek&#C0_|5}CoLY@CQsCujE@TC|UCKQMM z2bXk3FcvZo{H9dW!LKlOx0LrCC3H3Tt){^5q>A}+uYLqGQUlhTfgamSZ^{}Y?bA{e1~{~94VR7 zq~PngxLDbWmH7C;(`!AhMEA*LA#r&}&~0}yQ4*YuOAs%jX~yqDC!EV^NZ~3{up*ZdvGHZ7xA%>*|g3es8X(ZAy4~y*_1$XtdNRwu^ z%GoMV6LMSOj1_SOF(#5EWa|-m8Lqe!R)#yZuY5g1epM$%yqp6nife%@&!2mXklbM- z4q;-|>(+VFFm8uiFx!;5m{5I(nn9S9#e#sHj-nAo zD7l)(5+2xZythAH&7m8}B~CKe3)qL8FIJEB85Hb>hm|LD4*>T(zVwrxd~$`dUV z_eo{pT%=L^(j5Zx+Mxm0?`8gR?bxmbjv~f=xMa^v z7kN}rd-p1~tEu%A%ARX`6(B@xtU)~$JejNZbSMyHPs28>my7&xQr(2|4q|P3;r-71 zEaQRaS(P1GrXn)JcJPUJ+3VWxU@ih2>Nv)f#OsefU3X9oJc1+MVJl7Ihlr~}rpaiM zFn1&N{Y{d3^9`Pk@PmX>wi0`$h+ymX!0yRE`TB+ymjbc&g`~2`(L|%Z=JFIM9Ym20 z&M+&QrsS?yluEoRB8%#13}TWoR$YfoXhePpB@9SBD9cnfHs_e_B!u+H@`sLwGNOwv z8=oc=rWIN5K?LeZRR;{^0Y|n^z)6Zl+@rwtgos?52-l-%#HzAuTpjyklO%AKnLm04 zDo*j~Ap8@>HFUADa)g`I=oyVtHvTJ;k)h)_YHsT~iPv!aNrhQt7{ESDU=_Hv6srlM zS`|g%Qudp)4tx5A9y&1RsXc0c@66j$plBxkq&R%&ESnY_K%DKHco2fbC z)$K&78j*qjl|uDB=57yCde=&LVo&Csp;%E1xgeHrk6IWiZ$elpx4{y*I!`_lz1qxY zBfSRq+!__ANjI)};>)`zPUxU28=BwMHni)_Z5a3-Q^esM7+?Giy!C|Z1EJct;^5R8 zMtJaQ{4Kt=p!QT$m37X3z*nwRqt-`RDTg3k4J3YEoCh?HVoXn0mw(CJ8n;@Z` z4qbJXbWYLFQq@Z#3Am4Z+Jltx`K~j_9&;N~uT?Y;tXHeTY=2+exZqk^P=l}yxHD_R zN>eE55Lqs7s2bGE4ly^hJ8mY&Siy=eh@W;0@4c|bLvQv-_yD=CWm75OZ9pO{!JY}N zApxyO?_+q?gmydiEqWnWJ#OhWG0m?WsxW_QrF|||Sma^^HXM#I)`|Qc%pdikybf0x zK9~Oy78%9SKl@3g#OE~vcz;1y;>G7bY%ipO&7b(<%xhss_8u6H zSR9ah|KmM-{^gnX=uNyy9(n)z;^*o@8bJH{Nqrf{#ON(qF&<}zk$JCoTVoomM>@Y$SlKmj;8AJ2efT*# zsNR765a0+d17LLoBWNF&16xWqrzLAy#SR`eTDF`W=QMW4Sx4-^r=0b}82jg(EsGxQ zXssOw2b>Gx=jx%_x@5@SHX9Q|M{J^pf*uA-+kZZX-XhCtJcQKmlF=AA}+Ld)M)A zRQseH$6F?G6mL?t!X)pH5z&vCYyr#0E4tIB@g~vNMx`RIDv+W#ERN5Rx{4W#Go^_g zlay!C8KY^ImUG|oO+YDtx*s*Ow{b*w)SVT*^%|q$`M}pC{Vm0xzdXx>mPx^5fGnb* zm$%TUcB*ZFSRI%VJ!Oln^`6RoRROJ6t7;b{6e0ne4AP+A#VYvNsDX~zzl~6PZ zkQ5vzf;g#6VQg&0A&|zX|65v$CEd~`xepk-V0L!w(T~)J)=VXqI}_SiE9tOgLwV0aD0W15`m0WK-gK z^;@vEES@QwLL|B`gK*AlbT!u<>E(n|ks&S71Ywe!Wyj&W4UlN)Hx*07UDhUUfWr!M z8&a;Gt3|Tq_JlnD{l>$;H-HkcC`$M@CHZF?GWN{5$_i0RKb2# zu+3;XeMJCZGDi66XD8xEBH{(bobcKb-d7}}*TITTUw*X|zFdy8-t2`IekPf&2HBquSzN$`sZlGME#tYj zWGV#OZ{1QT`z2v$rbEBR@-74yb!qv_IUXpn2tta$Bj9XBkib~V_Zny!GRw5Xm0T2s zj!7};Qnp|MSYBAyg|SNT3VBE}p?AzRB-4hyGuS~iIHY(Hq%kCO9FJ;q%#G<5wQ|mKOKEa$N~p1vcDFXHv4ls;qdEaV4dvZFK3Ga*TLl z>%I^8R+`ooPnp2&7lN9l@c-Gw8NFDNPKEiv&i`O9a@7tSY|m#y5FdI#VTCIM0-}QV z^Sg10yoBAh;*>cK{~bpMmGMIVL3D=GEIsq+>~7{g`uh`@=<{dK{`AK`J^kaqKl}Hme|Yi5-=93fR#K0i zKYjN6@zXCKKYw=p^bh~>)zklebcSeI17KrdwddQZ9|WlicJ4=F(x%$M9Gy<6h={B@;YNm(U|hJASC({#A?Z5ZDct&{{X zm(e1gT}JmL2}qPl2+iohozb{~n`RUzB$hj6C`Za2;!H+6709E)@e1jU<>Z(~;lQ~y zyN|K^Bz}n4HM%)`^uEW(=29kxBU0zohus9Ip36@Qxmc1q9Bw<8mhQ%FK3v01g-viW z^ur^Qq=ZPpoR%)?obGEt8C7#pr$r`NC_gPab#KdHfKaub0n?(CEN++nk4I7!D^6j)$+=zkPjMe>1Hq*Yn*i;$TY)H zX6>>&_|Yjt`l@<5-n;WxL?4u#W{4B;p^V)xr@eN06FX0AI}8(egrS@7a{x|iuio>B z@3lNF9378mW$)&6(OP?Fvxd{2%VOZs^~ru#tI(~u;; ziB=>cchHfTG2CM>#-k<@hFkWB{3@Z`#%lMKR+(dtfMOt~c3C$9;oZjB(o?}GfXZjC zg#MJbv14q*8^$?@XK3o-_hLz+J6a^R(d4sKFikoBt)Ft*c=6P}E3NA3Qp^p(`yBAv zErlRwsxJjukzpF^XEz;GBT<}i>LC}i?&LfCI5px&4y2T42pz#8BX97t^n5|H?}LcG z#Z&*T$3Y=`QzQ&jbZNpVOkJi|}ZT;nmu*W@7I^1(^SkW|PCc58+-S{d* zy<>1?Z5OQ_+vwP~Z6}>%$F|Y2ZQHhOb!^+VZ6|&5yyrXh{atnM`^TzPwdWXfj%&I~ zOBcHD!wfh}22i%PQjx|*7KLpprnx}5porN({1p39zfVJ{IFu#15Q*Emw3@rYSmfbJeKX^(0)pM{|ho?ei(t2fBgp=!vZnM zwli&HAPY_YG{kjk5coYt*fv_p}=0;0QO+F-P#WxXD8=>J%n*igp}>X)30+ zxm-J>ZxD?RJNgCMcT%iNVsb3AovZoYhrg0GT$5etd|6}N5!v~fMl^CojoyhMES}5T zuqX_~&>u=XapMlFhEKIAJ<2WyScuA|A$YK+A|EW9P&%1Q@+)c!kxP(q8A`X=xAmXQ zaZRLf4T)lcfEtXjZiXC(v!J5OH8WQ{cQ2HQzX9S_7Kkx=!C9Vt{0K zjc;Vg(84X6>l5?>x#3hZ^zr3DPTTZ zjD76^5T3R4J&%5J{v;^uYA`y?JH}*7k`*$OVc7a8VNMNV7I%9UJ^TFw4lt)o1%ni5 z&H2Qh!PUkmW8Ub|?l@!AM4peBizR#R84WM}bPPw=6V0M~TEyaDrr`L~qAn;a|3d9* z3U1FEp%K?gtWxcr%ZhT@r?*8G<_~j@zfC+SyI;RWnZP@_{L)GZBH*~Mc1G^rXUTqj ze8)wnc;p%#KoVbrr0x_DjVfZ(cgw@|6IOl^NfNPLKzg0cF4es16Zg`nWxBTZ35v|Q zDT;#^%;ez}1MwVZ3QS|`CAAlZRc~S9aENtD9@KP%NlJ^Q#VJ`wk?Lc z_y0M@>cp6&3#6JdXYbY~80HP~zIzb9fUQ1*mFME_TdT`|Ol}DZ-50fxA4LwdDW&tO!W(`LJB2U*Lo$H2K;%*gazM47+l{6eA|J-0?`?n}5!QrL5 zs7-Chw8+)Ws`EF_A9#tb@v)7-72>RgDB~AgWQ1-ckCMl|D&C3DdIxvU@N1QFs}M~^ zo5x6pkWY>r)A!gK!(%c&njC_G*DuDGtljcgGnkZ*kR^`?iV%kH+H&cd4$>Mv%blw? zdW4+$0M4tXQeQjMCl7vV9nYsq-5sI4=F0WJ#vPhza1Rxd{6>F`xHJSwF7J_*Q#*`q zA4*IQ|Eb^xRl0rVg zT|I>=a^Zkk;1lzm=@Dbi20i7R#Jt3YOKJzz`QDq71o;02A)8dm%0z47@R*{>N#!{y zc|_Z>i7*{w3L=ruEL}0G@{q?yUt_xuprGZ9W`Yi95!PYHJ@nODoz`%@=#*Q?^WqI% zNw=qcLQO3Mk=nMGoROw4X_SV?;RnbfCQXSc;?TIJOxw>8Z5oLncg3z`BJmn)IR3M7 zkrgoIg_*CV%f)4;i-;6WV~F`#J^bScYmC?hP?L2Aqo>9Xv)`UG-;><(p3y)?o%}FY zWP3WN0YI>qc}f<;E5z5qYAfI(HQ@BhaA~!=%4e(i3*5q%Eeyv>d1sZxzTS`;&d_ha zr$TH6Qv{0=u=8qr95Q60-hYGl@?Wf!NDb<2SoLdZPJ0)KGd!5*f6zC>X&i_s_4tJn z5FI^I%27nf{85-PRG!L7df%Kcc^eup5+H6$3PIVGyN|3}HyyBbCo#z<#Qtl{a8mBJ zFIeY(ZWlEe-1B*Vsg5>#YSpG?;cO`GC!787uApE_^h;5_xS?V~Z^^X%Gdkd|MqDm@gRTulH6g zS3%Y(!%io%xA7}AX*?AZKG}J}j3Hje5(}Kpwp+GUcPSy?y^%+P130hu3f`-f|54G? zRn|JFteU$tWwkF8J&xT9g1C6|w6Iu$WpYsB56nnHnBCo1Wcq4le znkl&))UqNr5jcsQk0%lQdMgraJ;!gmzAusIT7^gSY*A;gVJh2w{B_b0F;&tG-eQm6x1ux0s;cu+<}J#E>Es}r$gO{|`r*qSwtDvh zOh-5V1Zq7T`PH3QEh}XI1-~UYas#G0+I$hI(W3d(oi?y=pmaH_Y2^-R;WFRj?SM$3 z3&ZLXJ7Dc#0dz4L0ea`KSu13Pqu4C1a+J%xm$gnIBQ(g68%j@8{D7C(Vrf{^(yZa9 zJ1JxEKZ2NgKjAQU{Yf82?9pua_CHuxh5*o&}k=Q{4f@A2yoVx6cCOpOUuc0nFr;X&APAi%|4ac3( za&XD+V-Aa3VVdz4N-Ng53Q{7iQmALD0BiAuvr1r~#QHut0Ulrh6krC*W6_nE({ZGW z$6__F?}pi4P=(G*B_CHSQ;)~}=h>%|5j z$jacSJUvJAClm7vT`w(wv||FmXJufIj-5C8;nCS)ndtEgAd~t1vFF|$bP@!pl!9EA z0p&2WdE*f#tY>=>M0@>MBn^KwU6|A=?w+A_pxNStRQ`?vZ_F7y#9P@u44<3id>W*_Z5+PTxFn?Hf#^C5`DtTd>q}b*r2`q5A)LB1k@CDu{y^G z5LfkSe5_u+{?s-Lra)t+p;T}thFRJ^*r}dy8ly^#Y5_rZeH1b05xG`?3hs!t_P=x- zLMj;=yM(&(EJNWFIcjPRqj#7e+QxUIF79v$u>rOxe?O;W(orqx7k^k?+Oqai1=PeF zX@b?S2CmhCP9mYuY2m56WJ{@Y-F_FsZX0|Q7brP@T?K6;sKYN$lsv@;{!kX=_jp114;eCf z3Ln!)h4F6(O)q;lcY6+gt{}`mOkoNRqe60_gjZ(Z*%_oMFuCqGeZTiu*3{lV1zYs_ zZp=kd6`QQ;^u8uBxIIyA=8KOKm%u0c;_iCoMQ+~cOo4m)#IsO($&B4x(wWiFs-0)s z$69F++elQ8NR==A&|^eR4tQNn*Ju%55x4OlB0~CL_#0_)m!$UwpFA8~Mvh~q=<44t zBp4;5 zVL^oMy#k$3H{3OC`15qTcx^@2)-DgWUg1C=lgA(4ppiRQU8!%N{P873BuhEgFkW^Y zf<}fvB2wVn&clzrHvY}IgFcEn#lQLQ4>oMbjF|(D2?cLRFr*>^1T)ll@$ob^XGqK7 z?ESN@&&>I)DKKR!M#~;ud7MjN&mF4#Prxq7x9rmTLlW%sP?+#Ufx=b1e{8XinT$Ck zJFJ}K7M1|Nk1d7hFX%JUnMzZVcJS6>p*<^RM}_@H;>0H+F9a2nr=Y$>qf2Py#856q=0nLR9kb|9nKj5Aj@OH{kH>AaCgkoP%g3Ug(>IosSdLsp$h_ASo#!ld z2^xZ`Mp5%T^c2y@oB@59xPjI=4hJa7l7Y7c;X(zhgRQ3y^6PWjJMUZSY4>b_J;WQM zmb6eg72jpEa#>(+zXHPo)*sjY-;1%-lV>QroH!wYCZD!eIvq#l^mhPZ>pT*{&uThr zqz~cCvuijvc1AjQ*{{5d+KH^C#St(8p^yjUi8J{ybZ4~RHPZZlhnBjl?sZQ{#>jIw zOEy(Z?U;{@E&UuHk#RD0)~+j@j=0IW{INffyzjfFsv->#DYL4$HSkC??k|Vj=90`9 zXeE@AptA&j&XE20tSCCynduTZI8lY767=#jb4vmRHmMxf9DG=#j+lHmZ>|KbYce*o_XEkjp(=XYVTs67mOq^w3y068+VwGeft z`?QyM|G!r`kk&iL%x+tC60z0B%SfT5#ORMIx8B4M?%iv*e?I68gqj9swAMpfXZe}5 zmrco~fIXavOJ{U6{I2m9%>(Jm%m!}jurEdPOjeJG3DC}N%lNet>DFvWiA!NWbdu<) z_rZ|+>BFA+^*y#C_nCTmKuH3;4+fQ4Q%*n&A_xK69ZTEq8TGX$m$%1F%3r9Ej| zo6GpaDnAkZ4cVRUmEvJB%zr_G(Zft?r!ZRT%412Px^DR7ldGOT^N&A9M0V{pg;|Eh zM#@5U&)#=Ta$=Bh@4BNx6K@{~VPeHd{&LUe;!>CcpVU&P3B?Sr#NGy`f`{?eAnHR zrMP0uye^#B9D8Nybl8fly5;tEvuy-y zI5Eyt4e4_!Kz~06d8+}9r3;uW)YnUgK zU4*W^`Ta&Ee|z9W0z8lZ7oO|WI<}p9`z9IXH5g)f#*jK{_{~`-A>K`QCQjTPNbRCF z!1*rLJxhZPL34fSazraiXIA(Z*M#$wtKsLLcID|2?36S?Qf}|a|4zr|bzLFnqsjJ% zIylar1ihn2POAT1h+%hkIQZ~iKpaX*%0YhuT@kD5%ED{%DVR+ZZ1np);xVkNFgwN+ zY8q#_;3pjZFg@87Z;Jqb4|#7Fm!B#D`izKa1?5yrMj!-9gwxhtzyAUgCfgMpwcdR4%2mr#W|i3YI>1-WO!E+~QxE!jlqBcq3{n(;^h| zzhL;peZCcO6Z60-?L;3|oXM3@8zQDiV!obJCDxT8Z6;+kfGME#;WC&?&Wt*{-P)Zy zgpsWrMggZS;1Y=>4P{Mq`BoX**G~2)9-gMUfuUrs$7L||hdrbOdaKZANUhMPjyNC7 zEIQU?Nvl$ZiL+f&Jb$MY%PYLEinxk<1oQp8G*{NLD%Yo_y73Us$bO|`h`87^#&lc+ zq0b^YJ!E*VHB;XP%#krp*6Sx5jxF6_R*x(rTf@?hF2@f&*><;Jo@v|?-0LqP-{k@9 z#uvBJf#pZ!^wk!GK9K*f4_b;>>IxWQ5kOM5cR+NMl|+n&l&JurtR(EAUqsfLaS~ur z{rnp#i-B{ahN-etiMv;q@}2SwH>OPd`nNf32b1zl|NW8CxAI0Ml~`7q@tA85_oe`A~#{D zC5*n=e(J*ptq64#05Zs-*#@f$@lXi02=U#W98$;$%j6NjQ-6&+KYt6pVb=w1R3O(4 z&TFlw$wVNAL2kon4N5lf*)G3ze^R|6_667CnA6T426B;6=Tc)@0S{uZtya+JbCuxh zOBvP$cM%7KZ>bC!h%QXLj?_JWVP%&lyw-3PNG^I?#X*6^1gzZnFu}gshYPD1j8g@P zWn)l5-fXVd+hs1ZOmUjN+4!Z?zJcCz|1)TK>-t@}DoWyJpRIsR_{tq{Zn;`4*byeH zgwAK9^ZGizdwN=!*b{N1fbI^ge8Vq_zY+2!etkOGQDDeWKL}3SX!S)Pm&41;J6T{z zHaX)CVo^q=*C(A_ipfUh9bUXx$?4DQ(Q<@v!3I>rSHT6eacQjp-)gf2=aOfusJ4CImCUNjdg;sU=ou*;gQjhD-*B}X3W0N&wwuede3Lkl0Xzoi9kH>Nm zLZ`5MbY2?OsV7@GP+fjD5C+%tqU~?3P}%Wjg6O(Ybt~r`jICUqYQ|RM7a();}IRH#LWQ<@+ zt~?GzKKcZ=;-Ii6kvMPS(Qvy>%M;{|z-*aurp53&e%ipeeAIXY z2d4(HT?4G6ius}sCm|%6`9ub}&fm2y(7KHz*{knKlrm{iLpPA4H$k0vJ^1TO0J|Z3 zNH~t@@4HQ{MR7HZF;Qsza(}~2QRWky3eovWhEY^V$RrYzdEn7O8p@c=-wiOvlEg=j z2zgiBc&9Q+l45sbe#(mE&2lAxQ2zlXs@iOhz<-9EIm5*Ba&D~%UX8}tlFM#qgFrBV z5@xw%dXMuG$x(d8F{(y<$Ye3>JE>W2xo~{{{h`ek3l8RL1jo7LE1R)@$8mgdNh6i> z(LW}^6OOcIPBH{DZc>38yA8<@F?Q~H=2p0>56Ux<>^iPO^VOzy?b zCno3T>?PzzJ0WE4o?K4{;Jf}RtDLkY^h@s7Q2yr$!E28p?5^t01Tx@uq#I;t$;)Ms z1x%CB2(h+&7)%(zQLof!qM>=}5~#Y?Q@_x7?}rLSfy535^3R`?GbwyohWaA)FlyCj zWh^=|)5l?ervSmxLNm9eIi?ZM?B(FHCz%@^(Uner24N&-4zKXV$f>yeiBWsI3#-M* zW@Pg#?E};u^QC`+P-_^+Nwa`QV|jW&`r1aCf?o+E*Gr2x=!682V+lQ2Ku8bRGUE5xo(-+`b~BPrM6Z1ckRFHwTzu~T?9a43Eaxl59~({Gy@lca%%S{ONs<@;KHT6T${Yo+2kd6|zM#Gq zXdK&ZB_~$;I6V3D>VGe^nVodDl<2d( z$B&^9qACt?Toe$+@W{IcIO7JWSR?bRCIz};)#i-pw@1uN{%&k`mBr0?(K#CC{ZE!) zC6(vLdS*QHT+fc&wVUWlFgL4F-_4&2(T2&)oiBpaneizJBU*B$9Tk8*9Zx@Vy5maV zhep-qHo5I{Go%P{$_cWH+3AWN`!_DGdX?|7Y>>R~^O5N?1Uvv(IHwqsOfhRp+-gM~ z*i&GD0%`1Ugl?P=i{INOHtE;*jqOCS4sj$Y;=4%iyUz?^(`p=OEWkyAPYoi8kY)(| zeU5v{3t~~iK#d3@KGRC-36S(fy&fhD8#^@cN|)GOlf6JOeQZ}u==Y0h?$7Z`lb$Vl zpIhTP;v$CEfRfGss_M+}#_%UrQdf(jQa{ZPhp?*y{JFu;u@v&2MDp^V8O7U^H9H*t zV&G1X*b{RHh5bJM%w;C{{zICMCy1L}#3h9@glWUVouYhK33eHt#NC}pK_OSDPCp!E zlupNoG1GwN0@)v4fx470^CMkj|9twqueH1-vT&9=D6$19_Z?M`jG=8`Sk5K=2-y3> zLkqZ2lr+0}gko!|{{*ZGMTJOMMQ4{O>6vnkbOX6pGgp=s*BbT!+;8!$CMsNE;vbbX zxEy{JM;@4sJ^-yMYy5`$_?F&daA>jU|r{>yx8RA>Izz#cG)Y|NBaf(uAh})78%=|0yZ`>|O+-x}T8D zo8&yS(gs?`{3{?Qi#OT;$RC=*`rAs{z?Cqoj9URuSo!}d*zo@p?B$Pwjdvhs3waWu z&uV&Wq!0U1u=D3d&V-<^KMEFZ_df+I_@iJI0Y&1>e*Y<0;3k^?cL>S?uWaB?qto#g zceRwR2?T`-paOzRgPRf5jd zB|BCzwP!prwv72*Y&gD#w8-ye8Q)g#{uEG{H zaifp{q=np5NlY02t@rWpIRFf2E6Wa)X1NhZdTadWFsM`19fLoU8&)C`b2AWhY9)@3 zZj54mNT(jyjBIIcejT8+*~oq>G&K7;xWdWBzW~{}K}iz$_)2mGmO^o?!kP%q=ru@q zw;V5OKv3|I8=pj&zHX?9GZS&i%8?Kiqpj7@76)We^@0({sd!gDg9GP2A$3$C#de|E zD;UzcN&A220W)KtK^5&&I~bhv2B2C{%%hn%i4-yPa~9vQuX!X|jPJA(+QW6DeUl~7 z6u9rQSb+x8Qx%E@fTgq0!w^p^pD}L-IkrfK0JERq;zzyq&(Rb2zp1qghdZhXJnDfQ zcl+%3fZgx;v8k_@em7!(J|Y5pM#47}8blZ+ivb7arIkY1pw|pYI(3ij!}e+15R;~X zD|-JYs)b4V$yHw6ku;N!Y5lmV4RuB?=m*E-fA%mE-D!3jV?Xz|xatUxy*f}^(4H}x z?<88Sp-;1UmV%U+;Y@SbHxOfu{)EVMh7q+HnctZn3>UW|4(VULG!xuc$9L&Py4!ma z%<-SKiD=CLj8Jj%XWM?)2lt(0&AjPUD9a)YISv9 zdAGLY2fUk~z}H2f+O%uFmj;>yuC<13f7;Im_866cZHT>gaoezTllVD~5{j2 zDz)7p+eZbH4H;VM;sAEyM5M#F{tJQ1{7Al#Rm;sGr?f5$*A^U@MFvK1i%64f-uVtW z<~exTSVe(fOcz=n7^3lEtf<{Fm?PK_uPbw%45vxZBb=t92sN(|Tp1nclHmyEV_H61`mnXbb3n34Jq> z$Gy>@*mBqHQjp!gOyWV?s$7>1g2eV4j=z4N5XTLXe{WF|P*^ z<<#^UJkY71p&5!1d(;`q;H|8%#1_sRR{W-!3;Mlf#6B1uf&u*@%n07Xao~wLL_9o= z0erw|CoiK!?%G?fjyaIw@hLJSKZ9Ep4_b%URznpm>&g~rI%t|~7bAr62LJ6*FB)5yPc%;>{^)sS7Hbxk_l@T+#dQvGtRJ9ozPWJfE|x3U z|Aoq-{y^oN!GEA~5!CTuRuF2xm+RS#RZcKLwRla|DW|D5R(~<6rCUgTdUrq{i`PMb zt_`YKd=fE{W**}7%^%VqFh*C0!1i=|eKU}>Ep&1I0r@H#fpu(t1R{t58d;h11VVPZ zTdE^w^w(`T06)=u|A#;Wf|}PGb~m@)HG&y{8wd7WSn<;}O$6g@=OTo@gtYqbVfw?6z-~mzFl8k=?|wK(+Q&{|a7sq%7cl4d@@u#9`Nxb(S3H@- zAuYm8PcA0llm2?v?*VBy0nr|;M2~I&jg;}?he5@~KkFaf&7FhEOj_v}f1_-Jk$u+eE1&$|;`dW#zjc4Kq?T#A~ttQkSv(T+ENQfF3@YUAE|PIrQgLL%iQ^;yX@{jP(aKBjS=7`%F0A#@$xn}bUWLUUao7rVI}&4o8($Ha+0FuynApfFY0@+m=LFfSG_ajB|uyl9Ews zSe2y0Dw7?OC!E+?@Ow61A-vViq)nSKK4dI73sPY)uJBws;A>*`iX>B6FdTdrg%6e3 z&6-#{){wbkInUl%%&6pZj>X)o#HG(*BaN~qA6B#ZcTjA9Y-wM%S%DZnW}aM-!ixDv zN5+=Y!9Q+kZvxSOY2jOrBi|otAPG%v$HJG|IM>opMx9s@tvnq1*B3g~8LG@3osouD zHCLZ|UdW&UZ+rtW27YnrOq})YX}VSFI+Jm?E=N*0buEnJ7qM0cnGIZuTlmks0V8a8 zFR8ZwgWTMO7 zx}E;yf-MQ4y?0wr4P=yJB8DX_@J}lxiBJgLVCb1wBaW^2nL+VU6~z~tpY#4GN4nG5 zu!EtKRuS2HN4}8XT1<;>SO)0SjH?+oS#VU`UiI#0f zvFmh4&buQqMuJ*+Vp(-g%oRPR3*XS;F_e&q@w~F~TdxME!Z-NMpV}-Gh2J7d_@j@5 z{uV36NvMBx0-dQJ$+*#fhV_qS(3yYOMR;>@Yd#!<%|Pc+k+?$1X`m>~P4eZH*J!gJ z1n1fj(AK$C`&-E(+Q;GY?JLHMnAqUrGcbq61dN%4{xkLakRL&LF{Hf}oE8iJR_l?8 z-m;3K*m{?&(7k)YS^CR;GRoEp!=+VM=T`<}@KqSuAH$|P)}iIkq2PM2$P|H_#lJv6 z^s#=lgs>3+oa~0nG$?rRp1+$(dIuW=I%K!LKaDU+l~6vzQ=cj~Uq!Ukk1uj#vP>PQah!R=z8`!1 zDl!OkAr6MWIfNB6SJH2O|9i&YXlrvcBFwd>@D4&(EB^di``rR(1$C_v9nMB9{ro-A zMg7Z-Yq5#MO6F7mzUPtms|Ls;>I-AWSkrE-c0e|5 z2g-m$j3YUDUw}v91@rt5Us~>0m)5y$gj()N!D z5&>^guos3{)5ab>vhSTrJG})~>3`qU&m8hx0c60wq0QPO>IjHC)B0&a+x4~I_hqlw z#QCI!H&O|T-Bt{+4M?w%-eAQzhAOYct&;o6kX@|!?s657iR&kKdL0?uLL|%r6DVH0>CxG2GPc4|F{DXMx`SZ0T@EExPAO)%vwM*vV?&L zPR$T1z^R*h|2sb-qyDDAGoeWg7TdI56> z4>{i^wOrBXYf0@`fiM2nQN!sgK`MmQt_99Q(rx$hpoxE@K-Uo!U zXb~0!y^@c(KU5j(a3wA#gqT4v*o#Ez48^w?yR+ASLHy!*Z7DIma((@$wav>jPEEik zJw(6-spISl6HlofK5rZ1RtbfU*W_#k3B7~=DIzgUcgG~k;`yNBZmpJzb^Fiu+dcSF zd7vX!@i(`w?P^GN1*wgW2`ZkwjqBrbw93?4m+f^$sxh31sp_OHZ zeSAC=;9X|Im&b}!Qm##j+2M!fhiJq2Dvf8n!E?G-aBF4jNzJyO6<#ENZa(>;3)GT5 z{K=%V1T`zN`0u6MCO;AadW(BAvL61>~l})0W zkpu=E(Y<-cj$Qm-)_R9ue*(+gV%V2u zO`Q!A%J^CvAjt?NEH>LdFl#o!Y2{2+7+2PkLep$X&F1t+j06@dYHM@Pi^SrWQ6FDH zufyP?U@Rr}@sd{L!kz4A^T0{|AG$s70#rNk7#!?vx09=9I+Gu^{3niyDsGVYa`u$^o6xa}2GXXxdT_o8_IZDM_$*G%5{ z(x6SbEl)8CC1{mt$fiWUL{nMh)Qsy8yf|Ls!SxOQ2d&=keN4K&NjGF5yizb{8aRjh zvaS*_xXYb~7G5p41_&=ctC?&==FVL~Z1=##W1l4YHIfu7bo{{Ih$B$b4MjC~;#mU< zy|LVzF;DDZ{wpxFMkzn+3<1ROQajQ}2?upr>NH4*T*}eW77w9XKb! zsB(MEQm;dM@WNU|MrGKjT%LQ#MtoX zbzmombWH2l<0Cy(ZBfT|Jl?|RG?}Y3y^27QtIt%9tUF9-_f3I(>mee?f#@-Y#DgC+ ztS-uiQWmI>?ic1Y#I@xN4YAYc;#Gs85O>=#N4}hjfCnwUILUcKk zL!#*szmoux)v2mviX=z3+=5fRzh@Jd--9kvi({N?^`QJ(sUOt!eG2{fwl$bOq&zd2 zJ<29HGBhG_(cgY2bE915B3DV<8a2d^Ax!o!Y;a{Y(+$e5n#twlwezu=Ikb(6_i{CS z6GSF#zUYR|Q`9Pv1?aOTwc;!E!U33t@!lg9%lY>ggAJpJugfaxm{Rf;swC8zX&1}6 zaxv+po(j#+M@zq@r5+Qx=P6KsjkasUghlHcb-gw(EQ#jkb-DU$4V{0xOEc(v23-*C zEvqS%x%ZoS;03a;r`qT`SjK7Vr^8a!Dv~Q_>hzFUjh5~4A@CYrW%zrF1E7{ZB+4^% z)QS|-^SVq`)R*;?C#Np7PMNgDRZ1hqX&WYgJ7`~2@$LU!{{qoH&QNPhTNGj{2Lww= zpy)F82B~Ula;iG-EhM6~;q5;3YUD0L?vag=8q{0m0161kH()<5yz6NG&R|GOs^tEu zImSE0E#B0M=X#)8UPki_*<{c}38UM;HPfY+d|OFN8hV`^jBw@Ta~Pt)@!T@N9$eoM zWAotHGIRj%55}o@yR^;%kF>sOUU`X1oI&+wx$_6J=z1?i3}n_3y79b@w+ICAApv`7 z5j|%H6wJFyaCUKxg&9EV5}wqO9$`#kPaICV+G(3cYIU{SyS@$hR+?C|%M48PKB1<` zLR^4z?+9`i^HV3I$$%@poq_GN;rX@1tnj30)PmOlJWGk}zWL6g?&D-o4yN?sqi(<0 z1=o8(Z@xv0)c-!!682*iRZWYrV4L2jgSzM+E!(w9s*J9;jUpVJ<@I0k%Oi33cx+-8 zF9Gl%D7!9N%J^4EGAiCCuu9`msULzCGLIvu z&+qFVl=dIWys@jM0@|2_CF;fPZ}iX{SyDpHhOmZk=O6W9x_TFjSit9Qo`Gn5LN_~#Wmnd4%;`e-?QiUi>USM-_^F+98Js!`B6+5^E%)U*N=$qV z|BlC{J779#BG?Yn;b$X+McUreuIz7M3wq~thvg(e2d1WA`n~cl;$9zl;XdmBx(TRk z;!8?ZQhot@Ol|CG&5e-4c_wLBtRl^wBJjw8_Wl!0Sse)P-3iSuXrZR0sQqr)@bvBa zetHsTzN^UO@sZrTXrdqpe~`OtmBLZ#uiCRw4|R^iuHabaoT^!0Z0|tarj+RU9tjDu z&dz%;4^K&v&)~wF(hT^kibnWUR7l1)11tuUfgpp97Nt|W>ZXjM3SO#&rT2BX_$x#F z40mbJyep^~M|L55mnaS5n?@=X!>V?RYre~v!NV<3+=p{6 zxy0JkVPw`!w;h@ph@i))1!;f(7UUTl_GUjQ-Xqzt3~OFE$g$CYzXb!LM**5EMxkeT zLjOHu*AKq~Xfw-+1}JkLkHUH-vr{R<1m3O(I(Pbscw8V?(mM1)jP*@dRM;t|1YW_w zN+3Gw#jC4kV))K^O&)hKocu6T9#+#C4d5=Lf1YNU6e~g4%_&O;Wo3`-IPRj-n+zM&fi*MwsWQl(qk5@V=*f(zpy$ zDq6$zv8_yHEO0<6_h{AiFb|@N2S99c%QZ}FZkU4Q{spW#(~{Dn-s%5(^k`Po%MIz_ zVX@!tx3Ste{`Z4T809D%Z^gX5N8wuV%93xXT*(i{TI+$9ynlRolG^?~Y4e%0;wnRA zvA?1}{)*mQ$!~4=di066A#eh}z2XMG2mXTQPc~qc%{DRg2IQzeD7378j)Wh|;Y)n( z*1E{LV#_~HfAFUfJp z+80HSV6V{-vGSD#UYa_=^%8Tw?)y90aPm_F2`7}REj2SZx`~U>KAExrXHK9jq!2%d zKcJahC9<0XjJ(>h58yLn{;e}C=4+JhRG}7#Ob?86j8<&dqVW?L;5eqHjSwuF3RcLa z5jdsA3b!bW&Z-eQA?}4`QW9f z2774`Yiki=MhYn!G7v&!V#2HRxQJ;d6Dpc6_#|j_7y6hN?Zo&FyrTUUcOW74jIx#_ ztjjC$xG4~YBFaRF$xwsK*bg?F_3xKOOlECH&#HHskVN~GQb89d69gI~q{Ea>`Ywy0mY*dm+^y?2;N4_hWxDl=AA`_n;!kT`+k`6Ss zKKHfN4|sOsShLXrbj{%47d?{!zlE+vj>pd?u_+i3{rC)>RoJ^*o+)GbxZ}vDhM@U^ zsOU1f=0w>fa2i=YHP>0512Ak>h|}QK+9myiI9@EZ)Xk-3BD~M{ZC+Y`r!O|_xAmtL zyDv7@pc8X$t1@tqTyg5$hJ938rW;M=oXCizv4pzadLqfOGL@sFgiMR&P+R$42!LcGjpmq9Cjovt_(DrfOYE=0daLAGwKPNd};@&v-Hu;=u~&Ic9^H-RRN zw7M*g?zGqmCGdmeepm1B6sxsAj(2U`8eB|l0oIIB6U(pt5KKDfsQ==5=2#J)90pav zKO-LI&!k%lch>__j266!PSjH%e9k+>!aGE5NDsO*y zh1s-COE?RS&jlud)<-Hd!rr&ggbZ{OI8l(x&oelX=;D)`D`iY-W-bQsA6&(#WIQUW z9`5nTs7hE5S&h|NSUD{yV#0&+q(mysfB%-AI6EiT`6nOiqvrk>^j&)%k@k6JmmnZ` z){1a0lZIv&amTBpuZMj(xPz`+Tjx=%Gazg6zc!TcpJ;pvBKhWk?b4YMLrkf%)*xih z1T+DL{>k%QFYQ}kxEu(T_f?eDE zMp4jB-XCZmAJ9+tgt#lBqF|NqRilTDG@v>v58N}$Xv>s49Hhq->$N-WNBQs2uAbFk zG}%N2p0JKX9-`A)ZW8Q6pL)=XPP|xNhY9w5c_R(&eVc{2JK0QW$CO;T!@Ry?E;;_G zznO=e^_=Mstt2Pvt4t!OWzd8AJm{qep7f~BX`@;r7C@5z!d+Fn*`492%)Tc{84IxQ zs%-^EP;RxiNd>(s!|$`RrLI*TW8PL~4c>MWjc zB;*7IRRqIdsZeCMQXrUm+V%nrh+Z8kSgP)c9Jjl<3!|}XyH+0hrq25nQPHI};`BIn zzo(KEdA1u(OEa=9zk`$?+McpU^6X-TcerKQx;#pM$sRc+Dr_BU4=>E>Pa8RTte)+~ zKiX})5t@~({9BD<9Bt_|qga}XM_SR1I8OeZ$#NH-$~OoyM~RrVR-RV1v6iPQ{xc2H zg4tY|4ugfZzy@M^`I;5EL((w%{5ziB}?I(C^2D4?~4Z`R!A zgi;>9^BoT^>`?nwOL+d9s)o5{j{gdV7=xdJ#-f>w+D?Yd_S{wRG(qsKRa|d!z}hKf z=P5C9{yA)E$3?BD&@L{U-g1b?K>_o4xcf;s8eIiBmApESH?vztjY;Ae1am$L;WC){$b(+|&MY+@O zEupi7>^TyM5G(1J1Xr#pq_oz>`S+S^xvzc~l=P8bpWpEX0_U>}I=>Q&6vsxX#syB5?*%KpMy=Id!Sx;btt{8|8$u-}TKUtW+T<;UPfD68U zk(V*zdAPtDiK=6r(mGT_3knKjNNX{;FNR2qkcqR6p5PIijkG6OKGi2$rT8ADyP?67n_i@!zF14NBO}3?!g&y5jf1p~9lZ>(k z%; z5X(q5Vf`wpfg1O^+=i4N<>}QNw~?)JSslh3$eoddWVT~yTAndw5%R-3aoT6aRPad} zz>9Vnj85%!s+@D2tiaC+OfrIc1+xL6?%)&1y99SS1-olqv~)xxr7O#x9;Nv;cb)IV z%a3I6m>;qOw9i=&26!D3zuqaM$JvS)s`d$~I#WMbk?=SP%wczw zZKiCzVSgPbVG(pk*G9TtEJ<>dR0Y5tO{G`)<@1Trki+EYBXIHT#q{XIU~=>UT-;2N zKsSy;1%*)APm4az{uJTsZKiveJXq`+KyuWfEJz9>y`!(VY_RbCF(rb(8|? z&h>Yw-5|O<(vu?&x}$69d~{lLbf>oawkJm#Ot^6;NW1BJq^9!5*-AyH^3;TBk z&}#PWCYVo*J_wSNpQarYpynv|PlBfIj2&*u2v+oJJ-Nc!94se#O`<2!bClxeXj^t1 zlVD<01c*+SHkT_wn{rw37yow`uDa7FSn1HGR+?NR$!-dopb_?c!t2KL?mfaDSC7PP zV>$%xGG-73SwO|>^cIj%2T}^J586Jc%QH%;3k>n z>X>OV%!C!mqq2^yiFQme8K$@ypDS)0TTG5EFnxDyUBTO(IHs5iQ#AL|nZ7gPSZQ*s zB=@kB$enPkF(uY$?ptsaTE@kWr_D;DS;F*rDK9~E%rqHh5&^PtEtU(?O^-2}dl61w z$+&Izm4_# z-EF+5#}?S_XI!?B4Tl_COolCP#y_KUj_NeoV&qhF=W_9UrS14_89BWL5HCj6@O+N_c7;1_P1ie(fs#4Zy~vlplI}wq{1D>;&fpARnJQZn#-EH? zZ>hIQ8S)sN8OU>Ge#XjkFUV4FPE(&oa}s5#4eY*QobvAWSL)|d%K!SpEUL@0!3C17 zKgPNGh)T@Ggb%R0^WI3P$#dPyuUC4Lc~?s1yHMhJL^Htu40!+J_}m6reaHDsz@P2{yitIotli z%yUQ1WPU)DW+d_(0G_>leeGr2HRUXs>Dj@qb{!^A8Q{9ic`!W^6sG4IUy_z-d`Wj; zNQT*btX;M|q7QO(&cgFzecxTZduz`^OFHFY1_o|tT{1q!N_qkp1PeKUY)3#cCR(*- zy$2cvdxRX&W(*>|!`KJptZoKk8oa5h6Vsl{NigX!3d?b6BbUN%4*cv!^~tw-L-^Aj zww-<0DiPc6PTSjcoCaACM~oOH#*@3;AY#AaR@dO(to(5|7nkqH<0vCcD<}Zh_u%}C zv^*JSX_`>Jyqp0!@@5_|YO;y4U`4q=3YEhr31Iw;CaZuUtUU1TR>hw3<|0T^0gFc? zKW2lo=>fCq#8rBaApx|+hF?GNU!F0RUl6$d0N<6slWPr`xs1kC*7151mc5nsRSrW(vx@peseM`+^tgByaOWJ2 zV{pk&OG=!dF}$C#N7kJbyN&fp^ZykMA({uj_w%;-09`qshc1ct-FuQP;i|oarg$Y? zKAwU#pv{V8{*tCj(9T=4SNjMAyjNXZH^;33?kXJS+@UisPE<={!{ce?g0spUevT=O zGldETO_DhIaY>`M@ei;z(AtZT+=1Q=qIuv$zQDthvIQr2MBkI4h@E)HvNmzV>wXEsbar__NE`(Pl-H_DsdjW;jJ$Gs7m4J1k2atiVp1Lyk`O zoIEFgOS2znM#|^X_`vHNOR4g^E<=CdfY#5LWg~|zgN~t1{9C{PxL|Xw*|Y(}B_^-l z0zWV!#%qRPM7y`k?uIX-fH)Xqn*C|zHKY&mX~xSO7crX*PA z7DcK_$}Zi+{P#m<0wBPb0Fa>UDt#!IEs+57fkYyo4~rv0iHSP%Om?|8be+STRf(a| zFdrlcag*IKFDXQ?HUWQlsz`%*VBsBdXKZ}>?B)lA+3|L97ZIEZ&Iet(yJp0-!9br89oh|b{mv9$4 z;Ej~U!U+=%Ui$n*)8RB-78u&eq?vIEjQFvMr`gl21>;hC6?WQoa|+ix%Y4VA-gyAA zf1YK4|NFS$S}T9`hLa!P4Q@?o@E%t%eu|3Qi)_XE7|_+^7R_$?s2rCoc_g+Z$9k|A zf3qcKs&RtDl=rtWKce-8U=;x{{}WbiLIEwHXd@Di!agtA7In7TI?wa<4vg|pXXAx@ z$UNByX#Sc8H&mMd%<@lJ&cJenPeas5_v5BBUM*=fx$IPd;)Aqe5*Y9%sZ(1r1#`7M zD#|l{ZA-sjM*N<)Is?4lNBQdeEKRtOUM^XIRMe8RFr#S|mC+cIyZ6{5VCNURoa4WA zsl}r1`!2#rL^BbhzA0u)npXup1wW|-y#HfaX89P>;ZhY#8ET%bqQ90&R1{uX50US> z5iizJCT0{=!hhDAC0Y^Br0jD^TuuvB5nsEMkD2VjEfGLPv_9!@eIko8DhP?i4!7zJ zmp%JG8)uw&i=TyX9;VrBljTg)&*1ej&Ow`<{JzDTeP{=R2VAnN+>sS==CcttWiJIO zo7HN~SK_P^!AR0(gXYg|?@PP5YYIe2hOM^ws)J@N8XNZo*%XuZ-U zJwMIjF4K~&tu?=MC@p|52xs*qYkZkxkv;lu;OQxsCnBV5*C+CdCS0HhM6+Juf}Wpp ziExLqULV|qrd-@duAkjNoW1=n*~wR?TqkrzwnpL#V(TVc+=uAidTn`huNSzOW|Qno zRyfFL-IKF`cc)w|R_(N1D?B{ucFAMwwee@CT$-w;Y`Z@B!g!19y%hYC$EBYc<{say znPH+shM4_0+g;)3kDPd2uk}JuE@BWdBhy# zFHhTdMbwFzQc} zIPGPt#-q=%(I4FIDS&;M>3270ek8GeX)&v#`8eyN0&>|IK$ASXt_Fq%{|J)WtIcl3$yH@{zs zR~^D}`KO=i_DzvuZ@p?<=eu3G-N_JX-9id>tQ5md@vMlF8RN{bZDa3l0q(q8I)5zJO#KU>`;<$-an=Z3}V;nc&^ zKPV|2OnnOV<68Wzm+ETxlj{v)|Fd58hvzKDCJ;T*)t@eI z%lHlK91vQy8K&Vc16|a*LYUMJ3>^9u+rOA;(b(Ox$Jeq3bf z9n1Lu&eB_JL=QFO`ondqg<=#b0CSsXX|^j8n~;zOYf*TWRd0l9TI_v5nee#y4J&W6 z6}gqWn6EMOvX0hT*6b!rV~7cX6nXvGSyy+|w-h?1cEt+eLPT?Gxra(-cmK%Y7_` zC$!}rcEc0aa$j5i33Uo}ZYd;RI^w$W-U)F(MFsw1TU|pGOP8i>Yy*aA(W>07GT%a8 zrrz1bEh*mo@DGiWcrDZ5i-mpR*ZM>Qd61go3`%xzY8zbfoXCurkn8Xrrw)*Is|{eU zC7co+rlg7}CG|Ln(zn=PG;v5a^CN*%X4(MkY4Zd_mTS73AI98M;|8FuKG~=xNC|fi zg*;U~mlR4-2XFB~hmWjB?NjTeA95EjHG&S!J0%LVatUGE=9V7IV_Xb!84qNS-sTUEK3i&hYxZ}L<*I~NlOr2j5Fl#^Uu>=A7^K+azIPO` zwU3*1qI;HtSDAVddvxA%ZrRG-m_zy|G}uS_hEv1gi)|64u2FTl3`KUYTj9Y@9{nl% zb-YWm^u86aSwj==wrd)%MMnUP9i_kOr% zL3+{eZo=k~QRVU_!YDg(KN9lDwj>CrNf+U`OX{$sbg;RB=LCd0Bm! zL50E`x`{;ugT7Ypo6CWlp^^lSLg#<|&+iv;IV<8dSQk4Gg?!8)jQ)-Z&;-h5GeN5O zE0(pIBkR(X!U1+mxG30c!y>3bRs6|Z3bKg#(HnZw{O~olT)X8|{eLXa>KjJG1l*Gn z^>BMnx*9e9@8J>E&C6=QS7=(!t=GHOpSPO9zu%wM>(6}k58eIypu%5svmH8&#_aR= zhUII9HBo=!n>?|<997+?ZnJx>9x64$+`zEleqEzT2w29y2>`S!TK05?p|4pAoi1p} z^S}%Gn6|KmS`U6JR&q8gKE>NDZ2p)tm*__wC6JV|=O<)bl%W^rG5Jc+=(b}2koKCmnVy#!Z+1!3cZOM zP|PpaX_ng>nXX02dM*mTDLR0WHux9^Ud>iJbp8T-FyG_=_A`|~eB%+U$#!q>>nqVA zHEKI?tQrQ2X$pNHuIZDSFAaAGJuPw_qt&o)60il}`MYiTZfD*6ixXwLTO{#P08P6} zYck74!;0NRyQG}Y-iSw*5p>1iGIyEmR{WV=aj=Fv{GdH^Uh<3PVn-E6G9w}G-~RMg zL)%J!a$e^+&;p2BVtMUU+hnUiopL&Ge`(8d@1UKGL^}We6Zqah$v%ijS;@KwlS&2q zKzG8qxz6WN8PWQUF-+38p}Z5v$P-agV4G=ZTfq4SfRau`Edn2y#W`bMcHjnQ>k-EV#>d1X)n`vaq{@b4vA{U9VOml8PR3SP~5J;`>fk~wo zB{jw&ksx{J11qxRj(n=rr=r^@HPS&;M$i&U?o@B(XCnrx3eMk(p&saY)DE{Kh(ibH z2Izo}B!lb8O17rbS~LW2OWO$=EcX1?t-WzBerLtyW%?)TjQAY|` z@6u()l^Ukqa`y4?ltJ=r>3yhdZqICV&C(Gi=tjKox zl0!eA|9X`#f344d4W(CpeV#4R_=vdv)u13gFo%(Hw&s8T^~nde+ATStmA-^P@LwAE z6#kD{8J7uPL*x6|1t>&MW_3;Hfr0UYaNPrk*zxMYIzV7;t<%e68@Je2QdEVlqyO+} zjcp6sm2$HIEGVUz{)uoWgb_^x?L`9f$AhT3r-|z^ew}mLAY-2JEiJ`ZAS_YNkg?&R z9GUF^W3N7IMQ>LyGE8gaIU~RsCbdbQ7E(85Y!%9s*#QkM(Zybox56~>n){9L^*i}J zI9{4K53^0)gIhkoV;|TJKl!;1UU+YnTn-WF6t3 zUS^hlFRgESkGx{HyhUH#e#?ZPCWeDz(-r90ZvMH{O#zQWjS%ElT0+GJ?^1QrN*-SxpTj$kYHftVeCiA$!f~;{sHW8z{nYpj^ zMzSL0Ni7t=mC9AY)sJB8AtpSB&_jppZ)5eFU4dGo%pI2Xloz{FI=IH}N!km_z5V%U z1qW=`N;jSml;?2~4Ixa8t&kvb84#8h*WB`!ZKC;$&m~JScH0sTj18=PCYr#L;~yzg z;OP8HDn=J6wN1IyGTL8KyaRC^6>2^2+TulU4uSx16tBo;0Wqcv#=t{*hrxUtsl_b2 zPiNa``6*hnIhUB?;J(G9?zSwqe|q}#{{DWRRtQ>Vo2UQHkwj2Dd1mtzCktcGP&wGZ z(XwJ3B}o%t0Ip%O^Pp%m9=k!&`6U#riJMKuwKV)jvbPuoPkj8VE(n%=Bq)R`e`$wCvS zzy{inGR^8jRTwDduUN`8!R7q&bzGGHG*XBD^WaH?TeggS+P&RumlPT&MU2 z?uL3%4Y9S(WH)lSbnR#O7Jr0Zo2`MLG3?_0Hcpr#G`}LvzIGw1=pn?6I!<%?fr6n$9n64YQ3Rb}ia@pfz5Dx7Bx<=&GG+ zrH;mKW3l>OsVXlvrn%b=f@lTtA!9-it-jAvtB!G_fbdhiS~1()9SZ>NVk#EFWyP*w z`6zx8E4I%guHJAtIUXpb9C9icp0i?^$E_LTwi|d=4Ph1#n2ZjNMNSRrgK;x_*&_H4 zJpfgBoLhN^5H(Gk;J%08@7$YQTYB9cCi!9@u-?RJyxDDDvvghF`U1D1L1qb#;tpf& z{ZODrpGN?d2Jr{gd_NGV&toB-fAl)Bz-5LricB0)ac5TCX1ipC?n5~N-?DBNT+f@xy}{Pyg(Iw;6>!lW`L zOZUxlWCs42#=q~FH*$5ANiQTPqh)tE{8W~;_o_U^q#MzxDuu>0-dj+cFt}Vh5>B-( zGdX(O=MHNg9gb#U?;M1#mNBN0?!&;h6Y;hBkYVL~`(#HJ_QIX$&0;E7ph_YTy*>4; z0^yB!=RUXLLm5g^e=}fIYq^CA?2PddYyKKnONH&Q!K~txYT|>Jm3S9|BP>&XYi!XN zArzEODOxRlMaszX?7e5c9?S|@vede2VFN^mhH|ZEt5%K&JHc*{mWzR_fcLjzgBgxvuNedqmk@#j%T&X z)ai@twcy78F2HJU)#s{p%3*EXTcO=%+g*ZY?rLuyf_zGHk1xGKGlu3Uv6OOsoBsi^ zS+{7De|_-`dboGEPjB!-oh)BWbMT3cD7V=$gh$lqKqP}c0;xVY`V3`cB0C@w4I06XZQf+#ACxryQCrfys|*KP7ucYW}-?)^LQakYqS{(T~1SkM%eqv zE#zN#B5yG#?G;5#>?pqS! zfpY#|QBfUh$=RlyiZR##`*+lJFBJO&Q#4OCF(%b#6>H2trXsz9zPMaDmQgnRr_fho zCkGTa7K+KKwU$uDc1LNv>;!P58=bd*p2n%HfzAq6bBHjCR0X`;&fjW#&-Pf7?~dgO z!#rq@6QRVEZkb69TX{WnWg!f?RY|ih*h86Z`^i1N4e={vj1X>5uo{xP6+d%#cz#h_ zDt`Yl%Mun@tIl6LD`r_qZ$Y7I?AP*)`W)7k?x}U^R*=~1};1GrPH8gFjdUm>GhP!h~qR$}&MP4wyCy3VQyLq z&X-A*<*{oktnvuso7k0l&s3~FZ7fdN$rjsZ>7)aae9O8 z8x>Ck-GALH|5z~Cl5hF@mH_ZKkX7ezUtE*!0+VAS>?(}%nDCqz1s^2Y|L+~=Ur?z$ zfQ!T!v)|<)Q^4D~y2`#X}727$Ajr4_s5g_Er{3K#{U?nD{IcdGF1ij=>V)@cvO~< z4IAzEu!Vs78~y{_koTApiC^>Q;fX+|?j}rg`0qLc-LyUI*UjdQZ4)`W2q zR6~V;Z>-S9`C2N)|L___6lwpY78L_ffi_x|XjNfK&LezY5f5AQ)QlF6(8+9oi?$#c zVzvLO{rMoK;MZ-i**4FXT(x~3BMb9~|Hk%>yLxxI z{*`)f_KCl!HAE2ux7-8{vc3>LOfo(iL>v|cIUw;eE|b0HMpb1DVUE^?o|)sb`FhT2 zX1q6B?us(o;I0yBG6!?aMS0Erxok|(rEm_-MjDH^Ppp1o^$A(Mi%zN~@bjpQoY5lQ zo$-4?)QyKD@54vBvw|T-L<~tb()C-n>yru&G(%|&2KNymDJo=WtuppX6;^6fg-kqJ zU(Z~rJt?$`C2XSYmQ#h?fu!W0RXQDPNK+I|%3HkvKY;z$PmrT*$9|NF zU*zXLIb+7YROxQSJ!^i!v<~3F&-;VZWt?|pOk}e^yB8K@i;CLEo_q3RL7{dB59ceD zV=0O%RtR!nU-(F_RK_bx6uD&cj^k6Z!Q=e-9`2UQi)_V20D_~dsi(v}Es%0r7Yx2x zvl4BR1^=H)VXbI>&Q>dx7|_gqzlPL!F%P;rS-#QRoaMW;jQLTsh0luuqcEboD5mTH zCx?OgVZD%k@1mzIqHjfB#n%_vW*a9gm-#ZQH$xHzoHZ0kP{*wMcTH$RhQo`UlpGi6 zGNAzFA$#CLxn3M~N^@#G6K2@fG3eKD91YFj@dM)sl;t1u18WD8|2+T<>ZRIknhQ&N z?lQf}nz_vlh~=H}LUjdklISnQ4IqS2A4c? zAw%sjk)$V%(^w!*4PK?>%#(&_RFCX&H=GH zDSOw{K>k1f6c~D_J}6sE9W>LZDWA+V)Jd&v`Xf-+8NVq!;W&njs{DLMQD~aeKU$^6 z8k8eY857oyLSSR&M@w59D2}3F#GAN`hh4}As06jyA1!%pAvpqxU&rb1N1?7h@uMZI z1rWzLbET{07zeI7_oJn(9UMm>E`?wmg|_C@kCwDnU>wIf$+jMJXqjJLGINlEz8{X5WPuuKx#wvxqg=kdh-^@1P z|E}5PM=}hvM+qO{;5c7kKU~XN~F;Lye78n`d zW=6q$_Tyfe!c)G7ZliR~D5z%>tx!p6%R%s=7OO*MlB~8cAHp?;n4Ww_QqBmZ`^5GV zx+?I>pqeH;0`79?ELt=|#A>l%K3uWV5%%QS-&*0dWrlWaO&t#;mor>ys*s?(S56&8 zbauQGF0R}w`0`qFS=KXiXYcKz8+R#*#VLv~v;%ueCTQ6;+R1jhvK;jinuwW<%DJkw&znbwhG3K~s#;oq{<|S2S!z5^@3Vw`^i_?cU#k8SOpExm(sKIC@SGP5J8YM>>EvS$R-k#klO+L8~EryQwIl zD{OFc@nJV#j9;-5Kd8wM<1bsBUr7Oq9O)I?6y<9sb|C!@SA1Y{HS8=)ZFV$1O9P2! zY%~tn^-4APl!$)SifCsS&d8`;8>qEu_O37*#-4tuisd;8X_(HwiZdKI=w-DoBE0Y}*lV5vzH2j=> zjyBt*UM7lvfn~aqC|&dWLGff(WV?LHu{xjsdX+DKt*`l-6=m`3^K7}>@I8Yo|J8s4 zADF{PIa~9;|N7(uTkV$MT342EL>iXeG6^FtCbKdw6TXB7;bs@0K|)sWLx$o7VY&wl z^+X+zzdUV{X}FL*RVKrM)M${Z#?1vqGe{?rjA!7woAwEsXKh+0H-yzB zYF+~=lK<2f?H4M~Fq^2to@$sw#tk2fiEigGLr%Kw9gR_H?Z1unImGJdj+*Rw1d`*ZkP@)Go}Ga~&^G=CbVqury{cveBj?;ANpcTa7_L zBdJe%SenEGbGHKB+H*1yDY?Qej|_cBIYhP8%Wob=fqm`GY53xNwX%}Weq6#wZ%FEg zwa2?;wl`DtjWAsE@DHkdB)!sFK@1Te7=!)|*8;XWMFW0~jneu!EnukMaro{O*!Q3V z`!28f^_Besb~*b_8>&MpXA5|Jc8~8*5tpH_cmA5)vE*f(*stBLJu}XMgQLAowR~ML zl`eIIvy%G?QLv#VypShb6jjgfR?NJFm<+PRa1@H65}2=M-E1~(ua-8Kj$>RJ`@Bqc zD`x%j&n#bL1@fF)IUK=p>Nbv8#91Btc5nX@nhhGKoTdijD{x z9dUUIifF-_du2*H1j)x`pYxs=F{useWmcxQyB|`;8i<%zb=EIA7^LqHP|IrA5NfgR zE9YMiJ^L*u2@oXP#NTD{W|x%lD&A1dgDAo8N9qSvgG-h`i)NeJq_YTS9TaTtIM=8_ z>F#)cCpw*C-5$5pAiW9D%`PQyrIIMh*Jws}x{1>%!SSKqK=o2KT-6!W1{ej0EMOqO zu=m|pd&2^TNl5ZjRH$m}a0T`t&7rM8BhGFkc(l^Vu%T>?f30<%13SWb%27AQA$_1p z1tSF5#d|+$#BXaYXzy6x9a!6vJ!gl?AXR-vqN-8aK7evAcWxA?EI;WIEy$RI7E#se z_ms-AoK-FQiz2!TN^+cF2hpjl?#Pl*;43u^cn3kcDjR!)AwWT z$aXX19z5Kg)iMipA(#S7wr#2q?TQUuUB!jVO4GxnT1{U)FlcDp47_q0g;EF}xwrTS zS{O`Zgmk*$>KD&Rg7ei__6@J@jnD$cdrwYc;2;Bi`kYlHlIo&uK^fD&ktE8q4aym( zc)Z!LRm?X~vY$maV34hCpjsanXG9I0Z%XV!51^6J+b)zw#;MgL;SqTij7f=6dZ3%F z^JsfJ7?HN~Ooz(=EV*D@{MBRk$7M*1DZ-=BxLprKo&*f@1!e6*3KwoWo>4L%Ry=^g2#||I($94d>~2ctC7tkmpO`IZ6rp(z(v&1TZnt+W6R0 z{tLsASkXZ5uoy**If+-eh8YTt{e2hb!y0Q~V3oKb)Ji|K9Q;^4H5b#mq0Rj859j@t z6X&_7!1>psh}8fWmrr#eb%MWMz;{3|aCvqV#I`GT6Q^`PS9eL#c^7Y#j<$pv&~?km z(S+dFVxqY==8P-X6wtC!20CA34cJ1|BLLw*{Lps7jl%PwZB!+XACY;f2AO|QX@jR~ zL4*YkcBE}GFcPx|to4Hd%gff?1DVhP>}pU2hi;5(eht8Zm;K(+0$urQ7~{OTB;DFkb^14~YMog!*z=Q0TaJn0*s%0i{?zT$v-Wn&ABHi)(c` z#mtnV%y&S+N<*GX(o3KWE3U6t*9-Vbkln?3>nMSgE(QK`#(6aNi1=^BxQj~<42Nk@ zaWMcF2S*Hzmv^~SE4Z392VMqJHiFV3!T%oI!7mhfyzCe|I6kV>kg+z3CeA9E;35a= z2(lkLG_pMV30f4X>@D?Xlr7Y&w|O0Bm0@E@rk7>$#fJk|Xx{McuGZK~F8FLtswac^ zi|GJs2#tUF%i!~F@Oj@lN@(y0XC8TF9Cf1U@}@HAsm!8T8GT|{{A0;hShfPJdxoy7 zJzSr`sc7|tc}D?m_+G4R5Q60($3yT>Q9;77>g)KhP)(ts z0>G-1LSx%oT>pg)01R5jL_n8czi-Aap@Dn&>OQb-kO5z z2mveEY4;3OTCQl;mKzj0(g-XE^+KAK_1;|et+~P?{OvADaJLUF%vQyo@(~3Y{7bU6 z4Kk(d8x0$VR2zVhj&Z_^$q_3YDx^Ht(uS3NnB0vJB*DKM4KI2EDVU7?5z{$RXv~aJ z=dodIc@Xs-ozQS~o9&X7a+CUHZ+zwwk`|V$;?w#J~44O6AwpkI*ZJ}J+P;?LI^j_1!L(D#vM9a zps1wk@X4szm33D;>=e@x7$b&~?x(zJfoEv-wkT}x>3crv)E=#G+-_%M6lbq&_Y@6X z??tck(Kp2iy%ge2@zp zR#eNTL1=u{;8RR5XSZn(h>H~A0?joB>H6J4!1L8gej0#$eDsD+>mxLL$R;KD6SE!x z1OTs8gIq0BY0^z|kz@rc$~RHDyjA!&RBq?amrELQwt+F>7#kbwFXNmK4=vI++fr-H z3eBX!z!w#aCdYFEk;x~oQ3HcEMZ;yj>eQSfqEWbTg?thSVy6*@(4WFY-?qmz_wLm5 z3YUs~;v2qkcj;=@m3VMIW;*qenrhU2{}o?NhxT}uiH zmPkPWh19GsQXu@Z>dEOzYqP~9nNA5bCMF(`Vpb#3V@RE`!8fdc->5*KWVz@jV8lpX z3bg4&Fq>Qd{U5eO;WxHVyDf@%k-WDuvNB&PD7JqACWB3OM`k1tE9!f&GI0gc%3wX% zD$+pV{588{$;&u#w0a)gaX1GKZe}?wD!;`I&e}wDfjrBUPEEwBE03JlxSj|%IZjnE zR08wWtO_rCmNvgkZ!%aPE{%O&COfmxLhs8zvwXo-WO%=#W(rqIw{gTG&g$5=d;6Ct zPlZJtCbxYJYpLr?9}*jMP}qg$h5+7|=2k(a;uv~FQ}8*c5djc^zc+686^+kY?-VaS zFBzUt*0vfUm<^i-@dj@6GbNdU@iTe)F*%RVDUJhMoZcow13OFW4e}>B7jUgM2f2Vl zSlo2(w`!30S%0wtpDMdlb)m?e+I)0EVddv0-a*88iBl+gCZLcTxa4Ry>fhUL$Me}u60O_fj_Y7nktSQ3uK}xw zLq%=7H!^rKlr$>g3`a{#^_oY98(I2H1@Mf8m~9d-<1*Q62fDd^YDzGhujjfw5sh=p zT~THm^vR1FWd|?X(%M<2-*A2V$TT^0Fw|(G*=&It?RMKAvn*keo4FSCt18R^QA{Sm zb$rL~w1W+}sWRLO14L~|3l--!DhytH@~oT78o^q((P}1&NVRdGjekwUPkrqHRDveu z8&YbZZ>NvmE#hk&s<#d7hWqvrCZT|FbdHC8>A021H;+^wysKW$6797i-7wyGIXtpO zDY|Z9XNzw!Q2houqC7LtC4NSTB6T)M7LSf1P!6fRs)U?0)Bg5@kL^@+RYUWQviTNO z=WJVKf~8wW=(X7>yKVL%!#kBg?^XvFH~1U>BE=f6%^Xi>s>r+{jyq|C@UeYq=%kXm1CuC zmt*?CE9YGE+boj(ME=Siyqk_o+O|h=UH0+D5FcjL-Fbq4qV;kMcG!%Poy#V5hd#s8(5_KH{ZT*}9a z%O}rJ6l+PzXAt@NX|~(qx^82ZNBQ!WujDq0Q{@;JuS2jOUL&<)2M0qudLmZ^e)aoh zCqlw#QO>-ed*sLB3ym50#A!(y*MdqHO~fGT?Q0{5waKtH7tgPi+w9K=&ys+u)EzaP z>j^^YlGn3c0V-2oeLd;fZNP1w+pQ};@-f~hJm`IdZz>|_#kOMpLD)0S#P}7Xat5Zd zbmpZxUCEodQ+*dBU_Q#Z-Xf$8{w{L})v&YfC_;UtJE~7}tzHx3WFjO52cHtruUZl9 zZ1flzwQB>laLcf{bjt!f0VLv88hv6HQNcWYOa;78;mRqF070l^5t%@)b*$c$YeGx# zR2oJVY+cwMBG|SzPO>q*VHVOLv+~3Ya=ElEbV4`GL7W_uw@<8oV)Y4Gy^BtVoz$ay zqo>}7k921RL(0huGKPkRn0iqxqpfQW{gpE3LyQmQ15qFk!{LN6AENzWw_#I|lJB)K zc%~V++Xjd%>ShVhyENHTT1b|Fl>)Lupl{!|DDn7C;$yP!bO9%$hg9nY<#ptyJZ} zD4rYySds~C93W4!XobJin(Uep`_QZx_W2c-zpzHZtib1In{34>?N6+K-wS=pAhs+M z}ghhJH%T|x&z>g`UH{4Nn1X9&C&b|zoos8a=0o0Ca`9) zpkLcHq1SOM0>4FKBb-n`NCT3i(DCIiu{~`$6>p&Gup8E;nMsHVUbFL=roDP-6plbBJjCRN;coW)ZyPP7Umc%_; zdBlS5M-&T05vDmDaRq;;QNHamU1l4Z(5{;*?)X@%sMK0hlTXzJG(%zhF;2-DW-b81 zsaB816q-=@aYUFghonE-vWCVvzu&Z)ftnN>AT7+EdV zIAP_Uf`mLyw)qE_4p77?#_%C`its~s%aP*dmx@deE#7sPp8W zBf*6MrvhPD+A8sfXrl@-ibGKF+k)xGC&O@2*o|af&=;u7FE_QWwa=xQ9}i@IC=dbD!w<4LoOQ19yI{ek zAImt2OSnx`6`tU;Vt!db3ygR93kV7N?YAE!4y)&i`74%kxR&$F>cfBj_S+x-Wour3 zE{jhWMgoo=-Bsw7Ljda-qU2X&rK&b**13Y6eeTdRE zJ4DjgaZw^M&-$KvK{?QiggFr&OYxOe5yL{twaUk!p;Q!asJ>g%^sQHcPGElf!9fo; z!}!o`L|l{bk*czNc7=Aj_zr+p2%s^?iOtcej{=cMFaCI!UqnTROnjAOi|QtJ!9_bi z@xd5niX%HJi}|z=o+c^rK!O56)iZEkOM#`}=|xo-dxf`8a|-pw@|G<>kz)nrNL<1l zFJ7yGTBh~qg`ZpEti&>{Sc32>_<{a_A^7cxj(af{)!;oi90fMjB37#vVOIcOK%l?* zs3;9GxXC=?TS113X7mwSR_-I9TCrP#L-=NwoQV)tN+ZKr%^|Vr6U+r#%S{WhWVluv zrAC&K&-V~DwS1pvpZ9NA8PT5j?T7hAlq7G^`T$0u53Jy{YEPaOL&*QDQRtp%D@4U( zujBOh`HRnxK2_ke)$jjms4R!z_$L?4^OqcwMYQ}h>}}hf{}W5L9P`3(111X;*}|MT zt40^4Pry`H%p!9Tv0InQ{*%tc5@q>+8AzTZVFD{i7ED5+?XNZI`Z$^7fspxZw%C;* z6uEkkRx$XhKpmgZ9IB+C0JxAGpBdg}Bgl&$8vp$tCn6t-$gfz*Y0K$Jo76e+MSodc za1nXp4$VK^@k4u;=TPb<*B|FXV9i!Fqa#@uwdbhbAli-jKyZcz#ubPs(lR-6Fv{#a zU7?y({AQgnEGhtN5rTppDDVvYU?SrK@`ch?{T~)0D`L79B^q6^=*NmrjagR|!3w;! zU8rzXsg+C)B}3>NQ$o7s0lm@-#Z6mVg<=x6BsJ&nb7cEFOy9EImvA`*Y;EPs!g(OY zSqhhsdq_zO75CEt%`Y$~-@|XB;*%{f@}1cRUP5tQhbvlScTK;^ihY)>Bzwh@L6FS9 zD|Ul+nus{yo_&)Gq`;w8_kqL-nE@AIeB=YcV#E+)5ph|=EHKr#B>vCpqoYlsT=lqI;FAClktEGDi z*g#cA+&*fR$-*tnA(n z)}d0pDiytG$vHIg)VYdz&_t-Q+rKWC|m7DZaP$KsJKmoS5U%NEC` z(fOV>;PMl-h0(NX^zVU$PQWl!?NPKoVWH|7xRp7McH4&UMd@1AY(}Pn+olnu5oDCb zPAbByMUT5_nn4p?I)$PiHb|kq7S`Fy;_+fu-e;nV?~TS1W(&^7F$(QV_~*qA&d~)c zfkb!%GcYrrKiyiATrm&_^wA+tLd{3uCQ{t13M{bijJRgK+aSB%rbHG4 zmIDOF@@0XSBUZI08w0-`u5Vcnp`ex!%~duBH_D!-MfSO(){J!cHU%VmWx+hTm%U*DLU8Mk~nl_MMf#1?=}dn8w3$ zIiD>kllK{i$dCWy?&ikY2=wDFPO$edl>(U0KBh_hsXdkH8tMSZIrwX$zaMyFD4i*R zvkyY1a|ZEZms z7?La>z-&q)v1^xw#x^KuGmDYILJF1@Eu^qzHN*M53($!<9D~rW%E-E$wU(}iU_ft8 z+kToV&pwPpwSvVdT^*V_$qrcL9%Pt%k!SbmnXt#g#|gVB9pS`Y@o?9|L^Q%y4fg*7 zX%NvKP2ly>+Y<~#&nN8PP3`z7%Q%}s`n3B3MG`EIN2!->>pV~QB8|;qbY%^N;2;X$ z5h!UBf|rD*cU#e4OSON4p(yEvs1lrg2p5+8b3K4)irvTq5*#qPaM^DR5vCLu0{>9F zhO4$VUb0~e72Yh{byB!OW0}GEr0S1gUA3{+`gYm{zgNa3%hl>uqiL7Qf9BSl>LQe= z-J-SuA$M-%O<3iq@6s~fuv*y}%F9RZu=-V|uwRvXhgu7dqTIwVTzui>C-jq}yRgB$ zrAEcKQsu7Blkg=c2Ga83m!NQ6P!i-B1`6p=oe|fsfmi+(!4^T@31QY-O z00;mjZ_-N2@#`s5wgUhF`UwCX0001NX<{#KWpp$(FHU85bZ>5RZ)S8ZN^@^+E@W(M ztbGSy9L3e}-t699Q#+MA$+C5Flh=2rbCGRi3yiTb#enG`8DqeJ!3Ml=!VoOWm=cnJ zO%iJ20HK7?LJb5+frOAonp1!fzz`sfB(zWh1o6K%dwWG^lkYd2cJ|Gi_ujl|Z{CzW zVA&T8(=ZGRejk5q7!MizZ-KGnf1BV}m-=>{aew5O;~xs_|I6`*oxFOm^YpxXQvSHp zI*&hY?OOND&Xp&2=GU$5T)nn)&jSzbJk34f#9VD{bdu0GXt81JA25w^`+a1 zV{`ez{P7Sb*)Z>z(YGSSBEtW<{E4T!fLJ3k6RrQ0;Vmo`b9)WxlVnpy(AZ~Ix`*-@G){xpixIFjbFLYm8Unkz7k z<4Z^Ta_lC0cBw?0GZiD+rw5Hi2DP)e zvYY|Su%oF3&bNYw9SfxVszxcnOcFE!3dm2#Fzb8m3l+CTwDBlUGeKzi(juVe!Zdi^~U1Y zoA7m&IvuUesq zy%;0rDEGbs8c~sunQ->O&}C+7LaxP3P02OnlORgog+GJeghcC=nY5f#5QRpWe+QC= zux)i~F7Ev(=^SimcI&`m%oHfe_z-^M=Na-Gmgnc>d8IsW zkmsZFyi=Y(m*>m!d|jSTb0ekj!|>~U7kjQV-vb45qf$4&hT(1we~95Mhu_EWd=9^X z;prTH6T>q&{5poGari$N-i^a=VR$Bo|Bc}u4!@1z*&Kcc!*e+NE{5lFxD&$;hbLip zcMOZlZ=QgVG{;WH@B#{-IR(ReG90Uivyj6RF+2;y`3rPSlY+Ykigxe;Ea@)Q-0U1E z6{FcX$k1gDvY>4cH?x*`X}8&&sTsU4VAzvQcLO}4s@djbP17x7yx>|{%ktw|8rQU) zgPBLO$;pTZ+BgwR=PV~YKsy8@(|~4i3c^bYUXbx@%Uu}2QCiTUPqqwD0CuGDP8`t& zzlFKP3=cktP0Jqqj>56Pa`%9Q?t0U(t&lR^)$r!;`?;%5bKgAHNcM2wOiEhrWnj6d zE(%S6CI~z;IBY3=PJl6p04vls7&h9Sho~VQ1;{t!dkK8G2lwlJG+jcbm-CosQl4Yj zF7xvPP{2<@sfsFX_egkjhwP+#1gdKAVbsN|5RBO&(>(zKC4(O4x!Z{K>O4dKR&c+C zyg<`vw|Qk%Lh%>~SlKC-dp88KsZ2}A{XHaZ&((zTOHjBZz}JV|7XjG)vY$23XWmW5 zti224?Xfc6HchvUR(OI15Fh-whE$N;f(a%k>>Hf}xDMJz%8vuu`cq|8EUe?be((g{ zFWbhfA|AHsJ`Yc*X)nM-Z9^fcxP0`mJkP|4G|IcmBYKk5+fO9ZYA^Ykos}s&noJl$ zcGuow@8)}S%d4vGM=L?<2fSRE*e0ABgCRiI_IJsN$0#0^S)Q3 zQ-JCp+pl$Gzs?o=^|6Be`a^BMK92V5+=|l)=hH>myBO#%K#Sf)zV`4U47UvLK}P=Y zLb2%;*_rjk7qO#uG8cx?HaVvuGfoX5n)@T*+1{U4Lzs4rGYfiv*8X(<7*zd_QT0Rz zx_|6zeRM)Z=a4j$iG?=qj?{iaCeL^?zZ%lJKZUn0GbGQv>%r2d`!jeZW<=1gdcu#E zHd99lgk^GnPA{pW8Jf9xzuL&#nmjImkC$N%!h4rh^hS0Bz@NDY#V=6mKx!WMrWM$%wmh&471{;GRXA7VK z;I~+Kf7xEwXpJPG0km^JqzN|^=yD34BVb+Ne(G?eV-TwY){UU?WocuU^E<#AgS}p~ zJ8QX5!V@ZHD(5@`h0l=o9t}2mA_nhBRI@* z?9FI?C^x8s&b@_n#hlVB#%@77XY#gL76|ziKsW6!ZR0>)*$))JK^kz701noGg9UJi z1{_k-J{qZh?J4c!=|cPXgKi(sVEfq9KPPOWG>aw89}8)o)oGr?G>gmUo_p&YxT|QskXGinZeah$3`|fBiy{|t_3#C~iXTX+V*nzdC1o0o z4G3`lENxuVOA5Wigx=vkdWQ4tQi09Ir=9zKWwQ%U|Dmme^=@?o^%w_f?2dAgIS!47YC}InkU`R|?6jTi z=lTyUjSi&Yi?=ua3%PJXwC7qmkc#B$I0WWIVkD3WB)XvtM_RzVZ4V)9q%imzu_iHW z?0f9=LNzo%8L+!(NF|*iBz-&MW!p`k+|z3L#U!&N&13T%9SeXM2N4DzSEvdtdg zQ&3{Y?krqXX;Hnn|B*sl%CpMm5rcS_!8W+I99i zG`YIRsd4U|LgtHCdW){$W z2MzShREb8kd0G#%F3X?O~XYEU`dkQ3$+;(~e9i?ED7+9C^YN)0kYfjjw^<25HwDeBsP`Y)!q?nxt}~W43#N zyr3@?+8!&L9IH^1qNmnm;(nP&;7^U}2ycG3v>QOc;K$SoeYL^)8<)kw!Rlpk68hst z?E_e9v-7W1X{8?kn;ZLq4%;V-EfVOWVhT$BqaElG#%5f98AXo{ z>k*V^qVf_Ti0u=^7A`*R4cL{m$Gm=K&=N=${jG-Ikmzj47tWl6(#-YOMO+N%-rcXv zCVySDK;Dw77z{{NoK#vB5ikfcmFV=JTov!McQ78E0MGQOI%KKMlD;I~?h_psYj-tjH$jS-;8RRZ1%=j17f=bcsNRMv zXmg=AT%uJ7CiF~|KP4=~oYQotX^!$w~_n4j#=cCIvam%){EiM*8He&Pp%-7RtWi}^CEf};U zh;)CX^J)&`Oj23HIDs^i1B-Fd7>qVr3B=WsB{D`IU*$IqEi{7{lr=036R;zB%Jn=| zpmu(3mDf~6rfK@U*7<+~bvjTlfmX((34}$}l0EV&h-MjXKX6{4oU0DP%s{IHJHt*(VZvAWnzidEf_~a$Y{=?GTM_^9Lw~tOpTopo#!nSi0RQ}IiouYEGH@9MG z-CM9NS%9zzkY@f;ua5HQzCd=@V%(F}E<;O{DmQefoobAv9V^dNw1}9>9~kjkU~6%0 zS*4sGvj7R5xP}9NF;lezWN;%lpij&gd7 zdkXs;S_f(1#g8a2e8e(VBASRjJUIg6M zGK2ge7oy9;j)hF85en=~s4ML?Y6C*UA*T&0M$``VyukCJ%ITV`rGreIhFsU0-3{cG z%O3%)2PGlb+*v-~-mdVRNwm)-cN)wVDYR}+T=#FoF+J@RFUTt!C6~{ z*IL1GtI(miHEQT|@j60*+ry`mpYC)?eg;1GQYJY}Ux6-r_za0zr%RLq-nvo`)y1>L z1qq$5UhioQ$a)VnvFI=&cxyznD9xuN&6q-(cAaJ{rumdV&1_0@j-(k!Y1%MNhfb5i zH0Su!%%L>vB~2%#Nn)DuI?V)3v)-R(7fQ21(o8JKHc6+MjA=Ib)AUlBAxYC!NHayJ zaWKu0Kh0c9Gc0MQ7Sg13nhd5v1axAbZ?F?PzXh5fZ4*A9eb5&O!bU;Zc(pF4jZ$#u z8hVcb@ciWK0_QTHOM+EbrOG;#yzLL;V_loXU^W_;Ct9 zPUgp2eyrjLR%*2o#sZ6KrrH>X-i|sZMYDV^=n_~OgbcX=yfXXu6xkNNGR=K+( z8pCb38|b<@_+uygqXKoO!TZdo%nkRT)^Oc5Tcb?(T#SM$Wt$uB#fa$vi8v1<`Y7TS zjF_P#K8+C>int9UX6lGxjOeC_J2B!i&EpJV4-wzMh#s9{5F=(##2py%yiTzWBX*&P z+cDy49dR~B^iagD81Y9PaSlezrii;SVwUFd8H|`q5qDw4Y#s4sj95SsH|mOn5kvS! zb)I!xH56XF~7IOc}0V#Gupfp64(nH#Rhh^aaP->APahi*Vt z2)jWyAam$zn*B`(JD1rbkh_L?(Bg52pylB9K(f8uW4(43raACDY!CToV|xE${_i@d z%toUz(5M>CMyoOCtipYa?gUhH9Y5WrHq26|nayCe4}JvZNt3MxGw_T<3sqgfEK4uw zxJCRiaoZgMNV9vOP1{F9;Yi$y2c44w+8)G>kv_5M6{Zn|?V1GQ-I|o069Y8IjnKK1 zlDz!iGoakV5iR!#vVr{&^me#+EY2f9b}BzjmzH35!C@sKZwH$k=R!lYGp5yiu-b5r zR}1$wUG`BS2-n?kT+NxuOccV10h6=rq#$F_SbN@l(2OZG5F7V@*_lvqqy=NthV@=e zUP9}sHjl+Mjfw_fCawqriBGQMWmlU<<@0uD>O=(5aTU?dgzK!4mfeZ`2CrHJ`Ck!v z1fj!kl1JVo3??6BG#bFqTfpRr2%@{cX7V6CMyVmJ)!9Q$_qPCVvUnJ63N~6aY(f#^ z19>zx^2#NE@IkZKYNrwCY052b=50!=MQhJ~7tT!GNinu*%fJAGaB*$?%W8v052W;y7o(xv$AZUvF}W z*WwuruiWaTr~vBIcYTmG4A5XfO`@EzS!Yw8Bq#75B1t_NLv}L@gUt-LWn0cE0r43H z-BU3*U&jQU)jFz~qi7tpU^ciLwYB$jTWd5%T6U!>aJJX&?g_(+iIO0wDcl$)`;+TH zm{71-IvNee!+BrS6at7z`^3?kxEm4vl-F$o;UOZ7pr%M;gp5=s93d1Y9AG?WEE6UI zi0N)X!b-P^LW2Xs!=`R(Dco4%uQUp%j&=r7Fw=Qhw_`)DCxM>P!IHe z!17Egwl-tXxvWJOiwdR5=u~WPzSx{z${q_;3$#Nt#iHeV2=6p@u!j&4ym`*#{AqYk>g~o3_N3nKPs4jsZ#8zXClwKJB6Xi3 zGpqYb=0XdI&TT?xW+9Ke>OAg-dA!ZfoA*}UW9(pWoREEi zU4cUnXzC9LyKia0w|r%Vv=@`V98Gufol%HfWi(usxyqI*6B-~n#4>?q=PKd%peFyI z@OwxD9`f-+KkQzlx4T4dIHT#dX|{^GTdZ}r7wQg?a4LVZQ99R02+YC1F3fK7jqm@{ zoc<=J_qCFG%)Xqh#twWrTmAKdeK}t-cHqnTia!nea;`CU;LEwjpN4%o*BU$UQBSIoa>Dp_;Rk7^1Z<*b=BNp$lf)-Z{Kzl!}`@qw)v+%Nmy{T=) z6b?hU@)ETd*UHMsBHyY~RKgnGSn`fXSu%S7^=}85%Ma+8Fr9A&@MNC556INs1IFUM zH~?PG8+ld8bRLid57IMVTccOtaksm@*$x!1WMci_mzQX0@9!zH_je6Ft>IIBdw^HV z9^jK{5AbSl4{$s00bX6Y_ZaE!D|Am6x_O~{hL5f*bk`DH*P}a@>AIzKaV2w!(EXIq zJ;z7yY@v4+(L39tH;(C@?a>20B`oJ*Jr6t>=Jye|IVl1Z9@0gM0cA<*I~Nb zD(Uw~q5HJZ{e#eb#z*%lq5CA!eafRdmFYfJN_QDN`-SfFLU+5+eNpuBCwkUd!!P(0 z^PDhxmKZ(fF-kL|=RCz6q3FhpR5VGu^-Sj{SjPdHBWS`8U8v|ZeJa*00Iv=Vh>U+0 z8UNxFbYJ)AW|=MmoI?V| zbdM6c{}H4t(#*A5o+YXzCE8AQ7H#&oAKT?DXxq4@Bea;nBFKCk>%2%lQvQx`1M z*&3lABltT8mD&=>j&~t>|RG)lPgkBfXo8r-% z#q_3BlJ9t-mlJx^eDu17UY6)}d-P^Az3x(aSdUH+db5PyE>e$X`|4+p(49$idpx>x zm@Wd!>gS0b%w;|Z;4_52 z@;q7S9WC@$_{wv+&^wCgE%)fnV|vTI^7PC7ZISzhV!2lfpOwPrc;<5i>gPD&b1d;W z&g0X^d=TLDm+I#`!sk!LeAWn`lZ4O7%x3`ktP(ya5}#EbpIw;`0&t19n9p~G&&$Pp zP7yw*3ZK)M&vN8*itt%Od`|KB?8bZ$;H)U+^F877=VCsm3ZFBCPoDW4gM3aGJ}&V& z-QzQ#`5?eKu9VLs!soBWd`=TSX9=IPna@h(vrhP&Nqp9Me0FC(2*CBTVm^-wpT8IL zSu1>ogwF=%b0YFtFMQ4+KI=U`3z!cAa4{^J{y;g;;o3uYj8^5m+bF)vzK$Q@L(vh& zZMZs7I9N0Mu((xzMDuARK+Y0PfWVij4L?Mu^R+?RR?Ntqxb1Q9I^0=+k?BXwY)TD% zkG!&IqhFqi_SBV3MEK2lop(5@p&xJ@iDwRfpLrE0asC~kizRAsVh;0|H`%Ta8tVdv z;o@8;N!wMeBp*6h9N^oK&Xw>@M&XC=z1QJneZ%7@$L)APlTRqcGRu6x)TEwC{5q0= z@l4SsW1Kwl0Vab^AH_0LB+0F~2Fk(P3PB{~oE#`RHIy!+TBA~tuxzrH)3kh0HhYfM z-eVxB6JmI6B-t}l4LwfEp;b$Vme6?bx8?~r82>j9ki#B>cOR}qc#`jz^V4B z6SsaD|2@3>vf0ac_9k($P+~@#zvgf_5pv$bqE|!TFW^!gQ3w?x~vdkWQVehc*z;ZS!7I-JMK3MQ0ZTReB4 z89`qE!IDa9{{`;vJfm2iqBH}^{%9hmEITwnWn2@^hC|{0Sje9FYRI0Z@CY52`CC9I zU)i6BeZ$4_)CZJ;K6q2fJG!xZasP&L#wctXP76H}PBT2SHzgqmZ3CCw29z_7*pcwQ zjmJg3;vZB6^QP72ZdP+oDQ?U?f3Xdv4Rq&oVtlxu1@%z89cYOo?fC!`;+MesnRZTcG zW%eH7RPF4^;q1C_Dl)JbX`BH`R>AK=`7J{_=fa)my?YVH(S6SlaBbgx^c>2$y;&5^iGpNvPyG1fk5xjB(SVfU zR_Bd?K2bvFM{DhD-~VzJ);q{r>Vo6rq;%9a8SQ;#1OzC?XcY`Tw(5ixNtU3R(tAJR zI|_rhl_#ZA8=Gs?_Xb2b(9sjcV;}EG9vwq*RT_(ARuaW_3?5lVv3JihP}n&Y8vDEq zMrcw_goWG*U$tc@(=g7g+$OOGZB>P*4(oS+O~d!g;MaSl8oj2)LaBWhVs!{XWphGv zpQfPHw+5sLzlrjDAM0C(LX6IV#kd5q6(Dy8$hARF|F05kw*VjJ!DD4J0{q;WA4u63 zNAB0-y_2bOZ!6n($|GC7tzbAzN-j*ZQon;JhSg2tm~@_HTt8G;u;+?xkj7L z$F!V~OmZL9?$=YY|MJwnbf-wSV%s#ObSp@kZMj5AJqt;>x9uDr$e9a~b1D-g&s7c7 zoGB2~-K>g=OUQyDgeT7^^bFlu$<`61w4&VF8YYz8)RMs56S_TSn zbGQg2LZ7rbknNA>@bRD7%GFXYB0+ylM{!`zVr0$`CHv1E#(jql$-*l>---t~H&cJ_ zKNuSK9Y-WnuQ(ANM%;{N3DfzX*62<1d6oZTjdzZzct~RV;lCj8y2@=DuQI$s6`ne* z--AZ+`-Rx1KksYP(ZW&X(otmYLcEMDJoi!R+of4UJvZKlU!&sR-*^P!7JVta+z_Be z4SM>2m0(i?JcGdBIA3^2zus$z>#Er;I0jANm%axu=6rfto7*o8%@=1Qy{8wN?->7p zZgm&6-+qFHRuaZ65=OY7|}wB8Ayp!GKD*6Y_#aV!2^p%wqMycIuC29iPTnvY5c zH6M!|wdQv#$={JnsZbqQjrbnG zc4So_8@c_2=05Bn7SZ%N2Yy$}@3eq#L~Mc=9FNdp(G@8ERf2uX;A8*S!0&c>?#!=u zJaJt*yB@~I+#wLkE$*$A0r7es19O?)4-K#7bbdVAz-JYW9C{?tBg-cr5KG>qGGAY) z%vb*Z8H$z`EVD)Bmf7?&kPJo1k^gBZqOs_7Jr*T%QFBagqB$l*COX1SK7->mA3e1@xM*q@s4%7D>VWsWe4;5``Z2$s0Q$Iu z^EPhJO3EZUSu&AGq;F)h-6_8xj+_X?-z&HQ64z?~$6L@BoK16TOdsV(j2|`Z*h@Iq z1of2Po(yyB%WETGIJZQyQzNNp-!OJNsoK5)y!82*NNPggMFg4Bw~?O9bGv0E8+LM_ z=Rq621xe1w?aF5D<`1eJ#gtgDQ4(CJ-D9gE1Mw!wq?Hi1 z(Dwz%I==RO2D_By0eYL3+kl9<(|Y$~z^d7C_`5PU9mBajduK6tEdlZabe;)Q z-gW1@=vJ-i{0L$J=W8gu?R*D-bH4=PL{mt$N_8JDu6N6OPA#wh197`4TvGXqd3BE! z`kHAt*%ZozB&?i&VgDHqhvSx0N0pwcibk;Gp?N1`r_1#zlk-aW8@kZ)uR^FX$lo}? z>skGUE#z%Y-md9AAID!?MnszL7$+8!cMI+^xe{@ zN?W#qJxS>WEYlhoyaQVd_EMR>Stc_$qn+D>-{}@Kg9FYDL9)Tf3I25mCnWq8yk6cT zq)cg~=_i6#C0bU{5?a0})45*0KVZ|4N$2LW%Zgol_;*Zyqv7m_9@`chPfSOZhBH%@ zf33Dc&ogFlZJ@XW^7HHTO;q!h8pCzVsaM)(YSPjFPx<={Zf>zqce^faZtgu^Lw`06 z1DWkKqRA1Ut<{;IQlI^<9$QlV3pdd-Gq4yhx5PUIrpdE3yrbW=D!r>4%{-9|T=ojump_Svgw;03rl!rw=_JF-)qeRz)> zB(DYpHT1J^-)q#RPSFfDwhWpMUPh$Fq~4iaV9^9`l%}?f1t-)eAXv1?AOKy+**vst^W#!Pj=;Kip;84PZ()UlygQ~N>LS84} zy@ykJQpL&fWV{lq3 zKN$6?(;A2G8O5E|Jg9knk5IBH19T_N7vc9NRMNWx{KVhQXnsj}Df&nMNgd$6ifkLQe_m7 z&h6HM|K{3q|INi8joP`n6m>e*aj1&j*oEb2QYIO*S$Auz>_<4OG%jhfVf32buVLc) zMWyi}TVto9xn5i(N@wO4)tIR6^M6s=<$p&qow<*5oVguGkFaF0qy=ZTP``pcnhnT5 ze>%2O^uWzMnY@VO3U+akaJ7-{-A3(gJ{9+R8<`cBC>%`=>f_4f*$NZFo(7$aP4>*u zFk9@Y*FetIz7ft)vLcI2I+Ajrpg1lAGrwQx?k7^APo^F*+DiVv?loiz61clF|6e{L-7U6GsxIZ4o$ zJr5~gnE#HmOu4imz=EOcQlu+h_=tp^Pa(B;t4-hW|5&Mq&PJroc5 z1n-WNWC4Rr;(7F9!sIx=-IG7W@`qW39U3r=5oa%$yfsDR(PU3F9$~tf z!{gD`9?0mdrk%;CkAGFXak1VTOi;#{1%EbB8RIPHOvp=W`rta844#GgnnbF3gjBPl zTs5(HtXMTME=N#JOiI@|+oQAnoTeI;zfNZ&9%JRy?5uKXoqa$#sF+$Nh=$~KJEfD3 zSnmU1M400i{DJbCv`(GK=FmP12IyAcXzzog<+3hbSDec_FPC*Xm!HC15}ob&rh1is z+skDg=d#|POCNP#jc(wJilgxcri9shduOxv6jkUZYi(-!nt{#uvArl1@b?3lr(?_W z6pzP?^Az{;6qh_Pk?muf8vQLY&e>`7>d?^vZ?9aHvTJho#){n>Z%+2q$D2F>Q|R_; zZtdwW6LB(K4&J!|5N3cP_G#W3Meu6X1PCJW$7t?~Umr;J9JgZ`Td01qjL~?D)Uk~_ zTgR#uZ9*4qqENIu*KKvgWPAzPvhxmz1{Pq|{h87Ax-m9K$05%Tbl)A2@U?2%FO-BY zFsI#TO87`CeV#?(rC@F~>)m=5-$FPCCI;tVvEwSB+{<|jFKd>a6=RP#-X!^@=7M?P zA5GIeRwA0&t<(o@B`NE#H2)97taeHluk%J{H-xh(c=r7Y&HBG!^G?;$;%PXQ&MoQv zeW?RuineaqW1Fd|v!|MR4tcWt*2wQq_KA9CJOd)H~M+fPq#Y5Hma>ru%%#J1fVz<#L=`kYk1?#|)NZWuhR*)?zt&JUM25aykA}u8;rt^wHzV z(Zg~)<&(oo>abBbD@pzt94cgvrZ~yNW6KASqS$9~g82kt`#8AN~&Dp@iQUawwt8s0-kp95-^`;~`5&SvND0AKHycCtu2-z$GUbFoRzTx^mv7w7rT z_?#3VbpE%T?1Z(BN2OeepfuBO?$4Lb#&#;Q-Hb* z`kS9B{K9OiW_pq{s)nA!UN>a-o6cKA#SWRyLZ#1gVx2lqpGlW|d`8Z6T@>W=rl0lY z>q5!b1(dG~y?iZ{GwQ`>(JcJ-fpI?FPaJekHGPN2>sUT3=)B2dL1<51#w^zbBG(p? zYqQ98smS$tpIn!STo;pEmw0k5V!1AbuWK4?5tD`GrAh?qv*yvLdA0=r6n~} zNG@TLsTlR%rnAVaJ3*>DG?u0!YesP8!h+v1*(MQS`WmzUH$kbMz~eQvRds3p5lhn! za#;$!DO$(lN^~5hGwl13SwNqAKfo(@+<=5q^qzC?~{W5_H&Ww@fy+NS45B3iXN}?sc);O@5`jVt)BW8v--Ar>dQ;UxD01W z&VtV2#ckv>!uv+yeUtFMS$KcV$NL81eLeBM!Q;Ib^S+^C8<`^&`bf=}{Z*vX)>hNm z#jK#RqofUij-7t5&SAa(tjK%2$a|YlzFS4UTS&fJJ^A*QI}<9(x2wpvtb%;W$wEbbs0Ss!FRnz|!4ons4i3}wAU zWc{|t`mo6Q9iOZZiL4KjtPgpzE|GgAD(mJHt(%p|@d!M2N~4*-cP&b=r%rGJCRhlD ztcl0}p*x`twg`8z#$AO`=hp}L&f9tgA-n}hh$xFY>$U#0dvV&emb0{s?%ta2YK*!F zsBL8LDum93kWQotU*%7{4<wB~4`%%&N4@BSJ_v!l)(f9XA-;a3u z-jDVDNM(KRt3^Le)E6=FmV=7wTcUAYt-ehGt-kXDsJ_$uxhzV%pH6#*zs_%weEmrB z^%Ke0kA3-iT=Mlp%GcvwzV_#QJzhCq`)huKTGsPDSuY@2&lpwK19aMTepxTocan&# zzZ6-2;gj_Vk@aUJ>l2==2e7P9RF-wA=6AN1^+He9Pm`?cMwRtIo%S3yFFH&-EL^ep z4$`PYn$1NXo6iuNb4IQG2Xk5&nTIhh4}6qE7h*aOC}cMem^RcWyukVMEvi_Zv z^>2M;y-mvc*HqTqys};@_rp{!>mxM7PwPV1>=nWmDufG0ErcUE?V3tmP`{@8S=|M_ zXy`8JPY_yD(ghVI9?*%)=`PbzmuPt}_2m6L$y-GB2sN&rZ%o5m1fx<7X$;=Wv*VC@ zcD7k4B9o64)G3pW6Ijk>Ho{yySnkZR=%XTQwIoNGrHWZzMKMR~WM9yV`J&f1Ulu4= zOcCJ~RR|xW316-WU+xjUq5|Qf#K-EyS9c8Zx*lHX)x)c(rhRGDQarxO(0ziYd#x_T ztG!bEQiY+rDDjCp@quMgt8~=$THY^v@@^%05A>70%b)fnY7@=Qy`Tk#+*oE8SonRs zQR+)Qv>g2St5;*Ne%$1*AD8L7nxvdwk#hQr)Q`XV%Ijq*ua~I2UiQlCU@othz49v3 z`N>suzFO<%>sseu@pOL8j&$Cu6W{9dyevDcL+$RxtrOAOD3`)ZoP|d^72{H5x&<&#$ zKs|ZqN1V@^d|S%Ftv)HqQInd$e3Fz*r8=2xE6K>*^;Iepi?33_x|5zMp400BbX%!& zDH%kMpv-^aQbEV>vz|*xJAVI2)Xy+!_a2d;i>TeNBAsQplj{XZA)CXsT$`75TM_^5trS^_+!0Dii4Md$5Xa&wcyvkM49m%b51GU1AAWf@v9@aSjR7HTb44Cf$N)ZyyzYuV->JWf`E|j3T zPzOu+lAij6lzRt_6_P|IK>mbDf5Opd&nu?=*->bJu8g)X;R=YQb14V2+KR>=xo z6pB3(y0FU-%SavJ<%j0NA_=yGP2y))sRk}(=tNBU-Y*Pp4u183KZiRO62GL%-0al2 z(xWu|dZC~k{N94|b!?1@UeJk7?gbr zDVsiuaRz;)xGa^nDGt(oZlTOlan?(j_|82bf|)QcUG2U{8Nhezm_2*6%pl#xC3Ncp%}ntdflp3xt4tfRg)-NTh^GYHhy6-9FBQh| zGe#fB^JnY0^dZH*SO(@Ff)8kfYp^|52J6^M+oG{!ZL*2NZjV=dMj)0qXbMy+g}O~p;xjZvdEAT%6u4y*Jn z)6#U!)zX3W_XZX+9TC?rPy1i~;D7lkz7$@6?~i*5Uk*`2Z&E4ViA8M=zm4VfEe5)G z@fko0-;JHV*_?^V`#m_YzbytSKHa)Ho`OVd9&Zk7sP+A%P{_?`d%}g96JgDM~P-&;Ke}4@1_I12Z~3LPhWbQHXsH zNhTriCI;###hWD=-K`{}@lcv8NB&tT-2CgU-iAQ0u5A9UzBy~~5g>&7WC9LOH(oV% z?F!V8?QeY5c>MT4l*8u-p4eYe7{?Wyr(A>e7p!CaU@~?`88bh*O`qPA zZy4LJ8hjL+AT~yvi@t@=i+O8KHkLoKO@Ctr&@m2Xfd3X$Or72+TZMQlPy<7GMri2s zC>DKN{W{v)7f36|LRSRX-QUOBJlk|Xg6s_bAV4=)K8Dr&S6GH)RsL>IPn*}`_x`XP zOy|Ga&!Ncv`YPqy>zATXGZx2;!iO;Cl>G2R7;UnZ2lqAL+GS=|s(~a(r#ksLh99l` zNb;jYa2D_r?WnbM`N|Rz;7@cjS{)9Q8uUsz=pW^vzm|jkUJiP>9Q3bp(CY=zbpm?P z(3=W9J+;$`U_wi#+o29U4i)rz(j^vf_pXD{2o8NV*9lj_8x_5ehU4HV{YI5g&WBJa zgK=mv&VOh!>zX`t) zdBzysAFO-ni-2KBtNV~60a$6 zT8c>GWpU*scY;<(#Y0ZAh}NC|E3L4Khn?mkTF3pbv?3}Vahi%~wfwKNqADJB8jEQC z%qXF?8)!_TPkALww(?AXne@EWt@vmD0rVR%L14b*3l zG52GfVf4O)mzx>*Ie=&^M5AbHPgBT^qJ0Jc9J~`FiabKyX>;SpK^!oWT^mOrFk-jV zNqd~U31gfip+U~Y1Fj*r1}(8pfB!QD`k#3?X$lQaih*8h0fX@vE8%|G)DRclVe=M~ zk>^nu(>Kc_?M?s^wV`IB63(6;a$^vPIA=$JQ$L82-CyNj&_hy4tPmctabyaS*|^cL zi}I5wuTufL??W6l50-$4 zy$rXj?nVL+{+zmsNZh7Rc_y|r;8BmO0ZZkljL}DH?84y>=%!FkT_vw5u98r~zW{>s z8b`pWs%tbx5~o9*;JEZ2vv~YHJ3x0D8-ES(1-6Ea%NRzR8!rK?6FAPNPz^U~JAtjR zda~H(UJWs}`%B=sQ59>c6}9v$(h|lvM`1~wVsA8y(b^F0*Mx>K&T>H8Xcgm(L7Z)b zgE7w0c;U9npQ5#s|22d{&Tj*vA)hT0H1LwL@x`)Z4T+lWpP@YPW4$lpM0!uV0KkRx z>GT;miJYSHPmb|y9;{i6OjlWvS;#C+_vKQWFZ*cDETP%gUPANb3N+IzNpdr_!0CXN zLSe_mPGtp0bdwW1eL$Tlb`X*)$wFS znoo|V6QF61Ezo?jBF(?jEQO!$?{E^7al-EJagqnk3#Ve;ttx+_M6j$YSUqa)m5_-p-Kyfe)%z);J& zyPygQYQ8k(sd=u4JW4CrvxHWzgx2<*qxEbB5uf#uomoP5b!Q3LDs5!X5?ZAq{&44L z`CCkOpxd+rq?S?!*qQY-S z8DB>k*g4n0PnZ`6__UnKuDCvax_?5)688AfOtVcre#{E7^UX@uY){x+<6qexwX+~H z)%Zj@oR&I2!{|Ji>->C^P8FJ|PO9o@@4bQFKQP_jY3GMUZjbJ%Du4I{eX|Y4ZiZe! zS@hSZe*A<0eTx(?CceeH{N*NrjJ-j3o96=rhLm(ivk~aaW&Jj9SfPxYb2zLn=+VLg~%;lB%Ur{ac3)Ld;sH*TQz1a2jro;wytmR(i zMPF5xc*6(SV22lCqZ`Bf!z%IrVxiOuXM*k!U8Y2roubPLHt!J|@6&0A=yV+Ew8PWs zv8>Y$Pp6gg_oT$z;&o1L1(uY&i=| zgU>AQsd%_6)xAkRPwYt06OEs0X*cLA-1s$JV@rU(7DzYi;~j{2X*GV1VJ==$4ZnTi zcQE`0@oL(mW1TE4866pZHNG}uZ{VM2hUKyRqn$BdR z!zThP`dCZQrNcS-)f4revplH#bZ1eJ?rBnVpYu1QZFNc8nj&p0D{afM<;-N71Hs{` zzScHbTH7RQZIiv$b{x01$zE&o`o%ki-wfe5Q~1sDQJpSSrxDfZ9@Ujhb-Hboe;@KL zp*v6L_6ps(KDxUI-8n>e7mx1oOm~;6eZ#k^w)vk_js14j*q>L8{cY9QhpWauQ8o5^ zRbziuHTIFJvA?bw``xOszpNVjK-JhESB<^DYV41y#y(m#c3aihd#c9%pla-WRbzix zHTL&aW4}{1_7_!SAFLYt)2gv|SB?FC)!5%ujlH*O>|<49zgac*@v5=Es~Y=I)!3g^ zvlYHkHR)4c?8dTK-iU9CorUw_7mQJC2QY-=K0kTF;I(Qz@3hpQZ=+ZIp*@ZJ*jyhh za~7C1K{}y~{uVFPCLwDbepRQtA%7DLL%b9In+7iSTlBe|ARTCj;nJCFdea_#&q7)O zWjc%d}1ETbl|h;T(1$GtNQI!A(Q&<0+bwGDpw z6)C(m3VqBlMKunA-?4Pllwo`Ue)qu-uNT85C;XxteovwmT=HrEa>kO`tkxg0tWxg)Xk9=m?5@Dg6`3R z{sy71D4-)?@GpoSZL~&OV3N`vw}S35g8wGrpIpF4z~EmQKRD8IJmLp~?rOn*o$!w= z;3Hu0C4=zokrs52$L*loFZll<{JjeJ2pIeu(+`cb3?M#eXK%rOi|~&x;3Hu0?~ETF zX*mw@K|Lo3{=W%-pn#8n!B-hSGSYH1;)8yc3I5xJe_{b20fYZw{OCx_O2h|~ZI$2` znVyJ`fWdz3{nU)Kpnoi06Lb#|{7%B(uYiw$!3fi@ z9cjUDU&U*K?*4*bWOpJy0tRasziy-jzdaJK3%W}M-)CksJ^}`9#;+e~!LO6V>x1q= zf?s5hB0d5J|Hb$XBQ47jzai)zA^2T{e_R0{0kp#v@Z-FNI35qWE6vK215Sj1!PhuZ z<4DWdn5c2{*<=k1+L==*(Mj?~JrA4t#dfnc>#cQ%;m&g(Ycm{%_+vqc5cowFq#g4a-dGBt)*My2U#}h$07iu|wG}(WE{=*C4c@Oko z8=;C@&I!1Ul7fk?F?x>MTC;7EcgW^>;N)&F@B>zJBJL0buxM11WxKBj@Iuk)skk+6 zpnXml?;jmV&W_k&_YG80$PQ5;!VbpAwnrmbJHie|+kG>D7B>4BryC3NhPTh`5gAK5 zwwwb3PfnzwThPfidE0CY5%L`jsG%e*DAg>8Y3+^C^8#wj^HzRcyCTeaoR!} zq@2(^L)245qs5I5n{!A{onS~D@zGLtjp3>*#Dpy~gL z>OZc6^ReI<0S~9G6o=vfCxFk32&c6a2ji4`9yU3WOBLvq;VPkL2Bb<*V4)ha0=SBA zcTr=e7=)y6SNKW$s7kP7IYAjyZ6udUI(an6lFpgPd%Y-okwHh7=w-tmxU{w;*?(C2 z1AjSAl5&ix!PjvP`#yQC`7dI*Zy-~1@DfnwuA={(0EIid%k zRt=Klc>ro-&;&W?h5_Oga^L9n#PR`Hv$pX_IW!e@@r zD#Y7$@FPZp06)T@TRn`wqai4l>Q9Cre$J=|e)Gg zBt5?Nc|jgHF-nZ*byVlO64>v}i}ksI*e`NbKavqY_g#R{@l5k@Rh*ZxIJSje$pU zGc6VC8n4)xWh*vIGBz(2@%h!n^f%Mn{bYkON@pUe+H|TeovH^?!LCZAxLk1U_kONB zU&FeSh-H>Sr*#Q-S~tR<8XiNFJvO%xy#m=PV{5Kn54$!moT)G^t|{kc_!~;nSKaSQ zd*_lL0A7ixulqIW#^D~$PwPM|RFjzy3J=tBM;@X6T@dYXYkxEo4krg{!ii~rq>`E2 z<&})rf8rTm|JoTHXc=Rate$nkVD}*%erYdxCghnvrmNDb84kwyAB|g&i|r%}ysV5X zqIl=*?9oi+!bY8^Jlv6kRACk~r6* zjiMTJOph2wSzTl{XShor=*1A9;l*Rs+iAq|E=zE3H|c=eor1_G-eAldw-bSml0cU} zuv!7TI_(01h6wbQFDQY4qp4(QLh3I8qdi z_l}UCj-oFvjm9&=Jc6w+JMAmSe0exqFBhj3MdSTxJaDa-t8j{<@kSi-dQ$XPN~7`G z4|4QT^rq5iyj_eu^%T9aG#c+%qa^~0{$gn~Uh_lVT8h4?G#c-|;xT@`ToYCleStT4 zu9us+ilXs?E*@>y%VkbQ(Rim5kE845&YGfVyt;;5w&|ti=XBGnMmx=!{#F57&dKAg zBQymrx;DvqMw-k^+8o3qoauQg>HdNG#0H$BuHe?!LDLfR7;J@?(qN8#*JmsE0ekZ~YzX^Id{P6owKY-s$@OxdcKX3y4_JQBw@LLH#+(XlQM!^@z zb!K!|Ag%9cPoS7xqdEdm%C#$E~D_`;XSrwD*s@nkvpeS`*N|Kkj*|xc+FhMSK3ZBdX%~qcwwciDf;i z+mBYC(nZF36{jDqb7`NSwv0!0`O!*Vy2P>`)!|2Lcj={Q`Y4b>(_Sucz^P?(SQY!G8NDgdI}63y2J#G+uZi%T;U%S z(Tz!%imvxCE%@7@zIYArNe&!lw@rgUV*2yJCEc~~5)nf9X%3QaZV|1-jA^1Be)s1y zs`F{HiV`f*d^LoHiPeN}q%gdD*S{ruZ}ybEH;ZNO&0eyHXm7oTXdmBZoJF!3XCZCI zS>$cTIhi-(Eb=zv?By|rnn~BhV}1^j{FJSlOa5k5$sgy)%ckjkgeiHwc`t?EM2tEC z{G;GcdMQ+rd>m>Z{c%i$eOsKp=AZ?y!$J51orI0y5Qc-pVSGTABdTzZ*tPI{kjelP zn2iB93eW6}#(=f?d>E2O68P8M1smj8HH0MOlcN{t^XPKv+YoXA^|>)7U@*!^;sQT` zh$g_~iwKYemRo~jGBwk!ReZyh#6{&b#IMK-YC$%t+&V=kS8z`_u2;>6d_9Eug0_A9 z6y3IQ2fpdnE8N#!XS)rGE*Nm*3NIp{1*cd2JKDW79Bsy!9=+DYd%MVwogbVc-O9F; z^nk0}M#Wp|)wUxv&^ZTi7`CPimeAiAz>@VczIAq0qSXKVli; zmpG5-2Jvl&jE3JFQ>kXR8G<#5+RQ=W$krwcY~vOs2PP8`NcPN%2NP}*f^I8D*!cB% zye2Ojj9alxXQ&y!VH?fX#%+r;X9Aq=D+^z`dgkpR`e@Y{EZEi9Ngsg&+8R8Ai0AE1 z(r%K^A(*s(<2!iJxI08i8Wfh$uvbD#N~c9i2l^woU6mX=c)9G@fs|9q7{7qa33=h( z3LqL!M!C#mnWhj?tx;i%WbIaos2tw;v;Xjpoo0FwBjsp%ioOT(J@#!0y;h-ThTX9w zq+Ppx46eHg(HH$hThbA|b{R1yb?f?M(WlVI5#3CuWp2&@H)XryfFOn44yjPIpr_mv zyv}?&k@oJrk+fsVllCaPDAn^Vx{t)XJOb$kJE>m9K*;e}113;Yn260QHObzm~g%pb;C7VtHP=8jq??0{otOuuhyN3y+sf#s+HIZWpyQhMtLJ zh;k?w%U^;;|0otc2)YI5TUb@2;fNKv;yS8i_RO~uO;)BUY{#wZlo@s!Ej*K(?8mw+ zv}eBLyBq2Ibl(UJX_L*+6*VCkv6BNmVLMEjNXwI?h|(Ab2s59Qx%q5J{{u{KIdSw4 zXF_(urxa`E8_)z#!4u35cOK5E_<|yZv~KZx9FGAF=QM~~2L@Yv)SlcO>Pl?EGU0uv zxWe;8@?Wxn5_6;{G1r-tARC6^GOg$mrs0gD8&peiA%-w+R6}WMq5L%6ETtR5WZVn8 zFb#`#;k}@QSi?`ZyMX8JkIK2Olv1vY(s;zXOz`Ri&vK{v5G{8qB9(HR?&F5VUxqNl zhj0K=c&${NnH9yEj5kO6U|ojXYo=&!@;HreNFXX-OhQ~|EtHPC-nVBL&;R_W2sb3S zZVJ)Xn$9d7o6MVu%WMq0bFgEB8YV)+(FUnC=_Ns*cGS?~$S zrp41sEPu9_NRZu$i1K3(;aLyCV&S9&d_*TzDht1=CnLhL(hSU1{u&d@_f0JoWlFIq z1%y#WaSR&1%`-29H_M%eLPQhki_}mb1iKs627C@;HE+hRQAN8r28|n(u6uI++Nt_H z<~FiG9@4&b-y9KyT8EL{Q&jf^AKEq?ahrUAvx0mpOcE_R%toQeaq4!KUS~f`7T(X+ zfU{*%hmz7-7OwT+ooous#a(EG<}n>Anek&>I~Ydu4y>cyP+37UaR^RZe~tpxo5@2I ze)x(#i~vTlvU8NPJ9aT4#+tINqjZ!HQ6e7dfd;1r%E|PcjT>oO!A8K|n%-;MVa3)- zdZyxK%ms?~!Q1$)YMkT82WR6!T9`3Thi87Tv~jxT2C!)WyV2c)q-w?wTt%}JH0p{S zqQdmkcK#5;`$yF5p&%S$(o!!}) z%xpHtYyuk|b8I%d0XGQ{?jxLmpt}hWPK5|Om`M;>W(lYu2$5R|f*QdC#aj>$6yy>S zBcdp3Jdo3a8$6ePeXF|PyxDBT-|zR&Cp)jZy1KghuI{d`uKi=mXgnmi&xLI@qaNg~XN)JGVTa*y7ETZ%pJs{LANK-Ym|G6T6dm{-Ii1oLvd`4W!$WWVux2 zTIL~PX<6DfmXkOvO<@rwSlQo_@9viL@QO6@O2)S2$gtoqCrXIr?*qgn1>o5&fNaAu zxh@dA4x6l%dDiB+t+ko64cUK9qDB$O*s7tB zh*=_xpe*e25!1rO8!R3!`Yvj8YtmkQMTE4qd52bnr0wPFM@ojQ&GWX3?JuSxxOAS5 zJ&B~hPemp0GTSZYy23>5sgYX-KP%z)wV0tU9z zCBws0r){YBHFl*yf;)J_E72aW6yjDe!V;1l&yhSFj4H~E0Lit|ow1x?rQl>NLJC%? z`W!zBV)S&&Ux#*)vU85*?@Vzu2 z2`H!ld@n780kzjFQ;hjv*E`OujZiLyR+o$NY91{noSCEhbVP>4|IN3oHWZKs-duhJ z`+xZrR@InJ)p%90I)PcV(<%%Rz$}b(wpoSIPO9LMq*Y7|r0Hj9M<5Q2b}#5PQ{}wj z!P6ek58Cl!d;vxC3L`1c9eldGWYW59m65T4f##SWbTYOe6%+Qdl^J_9>tq~z*@Chx z*vd1f#@5R@cks8=Ml;TeCg9`LlF8}`X^njlY)E=rjBd^ZgQ$Q`=B|h;i`-sbkdOp=}%7VFDBpr$k-FpAO*Z- z_L7vrl-KTMt$dcsBkRzgo6marY#axGIBvz!9=^j5K}pcPDx1oriv9f=`rW7Br{9zM z=MHZ|yEH+Zmc|~waj#!|?ZddXs{-Q+CFv@p`LaC2i1*NoVCkMF&J$v&Kz2kNoG5`Iz$I!MOQN8 z%=zu}uOIWS^Ikb^r@@G4Xl};sz5bKMX=`?xrd>lGk=<#+C@1n|w@|jAH|OJ^n`m}+ zb+Q^q*(Ks|RQoBt?EFl|p~fURUNe$)${iUu3UD*jAhTY%*p(2TI=d2_3QRT&@i-yG zCBIAOPf*_MOnd|lFk{6>(Gn@0fevbQcxf8tS@;p5O@@GHk>l}J7+!O zLOGcYs+)L6F`?I_c!TCqnHS7NdAZ?Sm2``X22w6{DwlpnQ{^4p;=Tav0l?b`kavsk z1mHLT-a!DHV&^d$do%z!qdhB&#ns1;tdN)I2R~O(cI8KH8RF_|z~<(^YC)qrcsB!9 zYB_GY0)z{a9tH3<#ta4cyT+KQ0LN&ISqku?#+a=Dt2IV3t{^XIlwv|bP6%<53i3jT zlTwhO5T{*1{ubh-6=XET=}?fDL!3?pIWEM>D99@zPM3ll9pYpaBwWcAa|&{Nh%-$= z!o^@QuOO>JoPvUc>&c?7h2aoKS3_@zqw8UDh@&eaTx}F}O)LpLYzJY30ED(c?uG$N)&fckZ^5L z^cAG5P2=pykoDNjDP}KQ!nWA!JJDFs*A$|ILHP5*Li%j#D@+|+P{G|(2U9{4K3#?X zvo*X&1^1}nzqSTFh49KGgf5McQV6e3Lda=^c7^cTBm`YQ#k4|reG-B$!(xX* z*nSd%E{0;KLg<}@pew1E`Oi(H*rmeXm_%R)L0FI7yxfGdggo_Au|s+q8sT}NO&T-y zgc2oZ@exYj<^g@jZ2gslRol5r>k^oRTz?h3yNBMZ;XNqyUIXt@q4!#NPY=Bxf%pBP z_d0k#8hWpXcT?!y2=A?-_Xc=x54|6S_ukNZBfLKky*I)8MCkn(GWxnZ5_(xFiB9f+J1!D|= zT|dB~<0zw%VpXWEB>+lk#5ngNL|OshYKj5hz}w|pObr}Fc-KTDE+N3R67hp!#Ca4E zzJXctm4t&Cbgn?7+eCco~vo1#z=%F5t)n#7Yqr$D9GkNc7nQ`vLn)IR%g84D{ zi`@g`6gYl8v$I&(ITetN!p|ikKg2&g#a-qfgzy`pF%|>zQHk-PFvj-A*oP!Wk4_D5 zT!Tv0lQ10oniLncIO@8b5+7AuI#s+;yFVZqtN&;U|3`gf1hy7?h(bnfmF3ONx@te7R=7Z z7(B%j1}Y9MehLn)edZe7LS!6mmT*bQMqi;b}j zlF$ILL^OA7qRwtb?FdnAMpcPX3sd99cue$`%;}oK>AEPWUJ}Y(7~xt{zHauVly5rw z+Vjr9LR!?!pPzRJ$|Ri5pO^Or=6d9qm5&chkCP*3Ib5&wT6w+ z&t+;HGQ$mUZRG+Q;N?EUUy0YVV&!>;ze-#)J7OI%Jg}X}`!)J4Cu^nt@V!N~--EXu zehU4g7(Z&2a9SP)#OY?aTT$t*gGz~fbw0c({dY9FqBIIZ!vK}F;u=@c3PYYk!fxR^ zC=dS8R!qNHLDC)ergR#G{vKm|9oB?r;fSx@7=MrUR6;W9OJm~M^chV!bKYF~wpZ8r z50w`rLTAazubFS=*OVMqNkNkSaaK$&c^(VL@n$uyNMV=qs1Rc}V;rqvw6~Ka#5Jo* zZ#TrXlEEV?ud+U)u{!oM)-Riwwv-B|3w84us$cqiRzA1l{gOj)tPr;*ra>;i-tb8{ z_Hf3~{oCW}MiESeBmcwI%^RxHh1ef!PZ>lo?Scr;i`Rk zQ5R0d&Ow`5++|4iPm=tfBn42OtKrdNDW`a_aCxvu=|VE3klN$mvl%y;GF`7e zhFyWVI)5(fO+U`M32ItP6%rk>d;`9+k*6w%N)lSOxR`%0;a{G?&*j>Z8F39>iccg- zUg~O7Mr&VO>W}lrJnJ*w9aH*@Qg->>V1ZecCnfIqpC(6f{?MR8D8>g*HfpESxa5BU zoB6AZ+PUz25uQT~Gi~|r#-y}Yp`>GE2Y1#^f1s>s`e#CYlEyq5(MKee6+`Vz-~=Vn zS^P9!bw)>QB7dyDbSL_lrz(_m*z?rBhqgCluyOSKZZMi{6;CuTBkm*HcPF=sb*l`Lva`&g|u**GO|$IqxvGnOpRSZ%(eeo2Rb3fo9#E7_GZ^ zMC)#uVf&{cojsy8x3F1rJGRzbPixI3Df)?uO;fm^KDplf(-nfPd%@Io_E1Zm?H|_J zjg#x_(#dr;zIC0cT%8!Hv5~OG4r!^e-6J)&aB_{={(4l{%&AhCl<{_B>dYdq?CuqY9_U6aKfo9_gXX~_^CfHie2gU6K2Z_7 zM-ysjoT;NYGe=E-KZ;dg!4T~SwiEE-J`c`r{R1uIuIS`GA$kIuC$8(b?I^Tp9a^lD`z!8urZj&X z*r@U*(Y2dqfqgB$tV5j5<9PX$su^>1#)8=zcRJx3Tj5&nss4qOzIUpB5rm`<>dJL0 zDa-ON*52?O32$Nk8f{9R60H<>=gScZCvV~!9yZZD^$4oP?{y{(C-17KMLXIs!i2A` z>T&d+^!*Lw^hDY&?EZOl04_nki|JWBua{i{;4UWYh95(KRPEc;XYz(K%fE!UbY_iU zDrA+C4;eTzr=U1@oPfi{JwkO}ann|J|BmHBOQgh0QT~0FNQvy}HXJu?`)kog%E^eQ z_OPTmUDBLBk|^(GIF?_N)>P=P5b2=-!}$*x2nojxzU5F{d85*O#RYX}XL#T5i9CPz99|1t>YI;5SJ;s{A2 zWJ5HhQ-x#@^5HOqJZQ$f>#w~ow&v(lSj}MPSy{W>j?KcyV z4HT5}dWMYYDaT_k!@o`<{i=2+&JKp0Mj|{Hd(V(LJ!_e6FHHBX^ol309Eta=q_Q6= zjI3}n7GqMBj5U2I9VaQz@up9-m8}9S8@c0Hn3nBvEJU-mGxLP3Q+6^=VFW7scE-7S z{>xUzSz)uMFnaYUEcb+3!;kehwT7=UqWZ+qkgK;Dat%UWHpZ@!9>-tNx0S0L0S(_! zDFp@S1>>u3bCl}W((gGsa#u8Rut1`LJoJ3=HG_{BAuThw&d_5|TWDuPk;=X%{ zUjGbSK~Ur}@(r#>!%_ht8EiDP{oeyy>G@l+R>`)2ZotBk;Cw!@YrTOi@PPh?Eh#XB+;V(SDFt{lL;=V*9u9l!~-xO(h>Gn))}9^o>o9CPQ2M9M23ls$--_k0X!$BbYLm^}$bHZEB9^qtDdSY@-+_0??MX`vv zVcu4$V$^-h@i`pMOIx<8vmLitXKQcbOBUSeS5B&Txg7a%aDr~-!dj&ya1$h zt%~T%SEuC4S5;)G$3F|4_N1-ca$3+pds=%E{C}#D76b{=H!9W`=J>Y_ToUEG8s9Pa z{_0&ws%DJg%W9LGKdw*eP5&BO?JqmA!>RrJ0e2a`YhVZ4XnfDWJ8F%)L8kURWSV;n zUW+?pfcf9&tZ;~e+>00!&V4A9`wbMz1G+D|tn2zD=s&3F|3K(JgpbwuAtz(a*U4ll z84emli2tx8hH!xwE;}2;cV5Cb`9G4hAJJ+1KQ^@d)X}XU~u3 z4KV+wlH6=g?$Joz9t-LJEJ7b;_Y~;=T+x4A=>LN0@76*eF#nfAe>bN8iwONErYO5) z>}sO_H0b|I(f_s3|BaO07EWeGOWASI7()Etf)LUEou-`>kbw>YuhM zl9*2OS)}=AmF8b0&A&>TFL0XIwWP^GV+iqIlr*p7G$U}8=1Wth>GHj#=aA;hD$Q3U z%~vJO*Er43x1`BIV+iqImoz`mX};RhhF^=e;Wwse1JcHxN7{c=Y5!f){s$-eXiFOd z46pklxkovUYX<8~dWbI=$<@OmNmWN!v0)fSwm?hpm0wyARXL;W_g}qCUgK;R(OOorqjB1UJD<`f)9PR_L~2 z5{8&zpTqNAeKt8$R!~IzW^Q`PTbbo?u}C13^ny92j+3@4@wDwR&#A&?=SpwfR8VCo zlcqn{Y@IZ>10Q$~E+NFzRy2)16rw*5&Bos$Ob<`R0Wowl15(x=&fsD%Mayq;Atkwx zQr@-;$%_<{CxzsBcy=yP7irWgu1nP+4~Wn=E^rWh(i6YdKHOu(Ne0vFG*S z7{ANV%;W#2-rurD{3>(6BzxPUEN+9jy9_)%0b@JA>3oy~B(J%Y;P74Ek<%xRXVz7D$i zYdU|M%;0Tc=5A=W;pHvf63qMel7I8pHCC{Q0@i+A-IaIPZq!utyEXj~LZiZ4C03Bc zZf{NOc3FQou_w$}>{U(+Mlz@;EJoE@<4a7ub+rpR$M~)&_ubgJ6cw@I6cw;LDi6=3 zk$X?n+qIgp@fUIWx)&nu&B6PGG+aC&LF>{aw7oK?6iY zkr06PeAXWRv=M`{`bOMM5knqs#>K-NiA4`n0h0Sb6F`exh?MmR?;vt4zJY=*+#~D6 zo9C`vlU^%X&&Ji4cs|&~y#tlML*Vi7_yTzjgU7|o5ac-=o`j$gI&v3Mr^Nj(e8-Q7 z#3yWEm8VS|98GKZo4EcVJTAJiEyB3OiAxmWIjO!WYkWmBO!ARb464FtSE;m5m7^8W z5YApo#ZEHg#LrK_4^14gW?j|xrm2)@9Ep1TT(m!I4BM-Z8`9ZyCY|%&j+(j+RUu4w zv@-pUC_|is4pkGAu_CQSuu(3$C|5+>Ba^A?J^$w}oX!5%D2#4!4 zvsJz0Yyp>4sLw1t^xtp3Db2o;mHuL`9VOPehm@%YtUVSP$>KCjdPlo}@L)^=7X#5l zu&o{$A9<=IPAoq|@yf|)X8fF9Bid{u3S&xb*#PW2AFbC-NS1r%q?H~pHcf%$gQN_WZ9W&taG@+33LKL8NO(mYp(4t2!+C5ESQ|@Fpq_;=Z>j!{m`~@ExLSqzskfri-~GaOJ2s` z&GmVzwCC~DLLXtBzE$=(f2(zUz1qrou6yfhqRH+*aZk)Y4Ce1_W&TbzubOvJ9GoQ3?GjW4z7 zw|)E7I>H$H5)UKiVAJ?L;H>^Q4p~{Q3(hvR948_isJ@q}o&&05LiNj`p1;HPjfC!( zSs7NXyRA)cP5covI2Z5+{Sa$jS^M-KH2`=OeV!Qo9 zZHn>(Y>M(!*aNu;y?Q-DU>dXRH=q|=b>}HkIO6Pbf{QT(%&PrMk1!eAkXF{T`{3YQ zJGcas8(;CIdFPZj-+a^2XEGTQA^wK7T-X#7&gOzBxEXc)ld;$wUUfJ=ex<2a=U4I2cr_~O z8ZKOf_~*e)TP9<{TrsF-#28+N+nbydofcbhH!CQ|_KZw>>#?loGIaRv$=}f?bIO!M zZPS9#o*Ub?sP@*rrc2OhP6L7`W?lKsC|Znc!9jifBc_6+*5zqa*mF z@~Ce_+rEK*wk*wBwWq`6xMG^o6rE-jaq0SBfpB7p4HL0ChUZ!mOV6doqV3DYVn@an zUL0F`SqyeSOtxwJ54Pd;-{rA>(*d38(c$=^e7&Giz) zeAlE{32vnb)A|oL3ap9ImoHXs3^tj(BC*Qz;u&ir9^9ZNPflu{ibR$AWVy}Tr0>JW ziJ70)e%uo~BMz&)3EU1zSe1EB59hSY@n4Oxys}aH09OLpb4lilWbg!c`1`>T*6;jD>ptw9@y-r zbx<}*Ejp9j6kXFC`)0VN>5$co>wgLTp*$!ndw`E+@Ru1p!>~o#$ul!L@GA&3*TI7h zBCEs75Dn~D`%GT%q>Q*F@!QMO<2jkfzsmFz%^(jZ-xK)-WA(2ir|rCJl}&rF(of6H z@?u)j-2rE3rgIGWtoCHmthwk^U!x_9_pZZs6)*|>9|Ht z`*(t$cynI4q;0>SwDG)xc^I-n8?}e}H_>Aqv+*sA`D6HPT3Hppn6qhjCY*1Z${ckm z)*RrI3hO)EK0Q}*pK7krygWD0NV7yx`l9|;dti)Ma9UYlu;DiIApuFZxvT770BQCfQ|+0<;FH;!wvym^Z{Fia zp{bSnB@THXM29JvYo;kLXi3qva-5o))`1dz{;9)@m*pGFEq(gT6vbIo=tL zhYw-{rmdxJBY6q)@c!03OkL?tGZ$2+vZ7V&nX*h_YrOl*&}GH_dqp~&)7mO%mQ-8X z@l8B1WbH_%>}?LVcj`UO?@*p>9%~ESxhxjbsu@S>CmGskGE0_htf7UQmVX~|VOK^i z-rlM#-)yu+_qMDlwzis!INsVyd1~mIM&#}%hwGV~O#=etiE_A4V z#=l9x#Vg4-ekZvS`J~g;=08OIOUOdl?eSlO25{{|)XMO(NTRRyOL7*w{Wz6QitQ_U zY+uoTgAi-aH3Qo@FfM_AXDar>kjjzd^b@$k@lPzfYZrz7e}m3fL+_g$^En+eYcbi3 zRoitZ0zHi8_W`6}0$By^*BWF;f(~sBYKsKD8$mb_5td!-Kh)0KNhMtSu?}AUEmU{y zS2|?7au zm9vVytBbw;B=(T&SQW^6(6IgPV*Xm2W(932a$0|5zOGewrdr4`ezK3V=ZFo=%OG1s zjbd)#HSjvDfj65KPct^*F_J_=QCoq&@#yA5^b@?bC6pweCUu7q`U<8* z%H{CVh!z8R{&*Lq;er33g6KF(aOz!}pNAf{I~sQU$D8oIc<@uX0%MKGOg=;Y879}C zo6Y?MH1pE!#`xo=-j|VKw%r*2g{ikfOUC#wo1QBTK8rE=$i?6T7)!aI&{Rs7H0d0> z4LT8&Uu^^BRx|jui32q=_>CzyQ@3#FDnVV@^b8u~zYSAo`(0F?@iwg69>9Q#C35`& zm{v7{-*NG{yyx7whU$C#i8i)``aab9?=cEq2pQO0ggaZV|B#I?Jr1jRXx;4^vR*^7 z7Rh`p2%ZH|kzJ?K#PTFYj*sZwm20_WU5GUPh#tQlAwG@tWeBfonBK{XPqHDuoW$EE z1g$6Q*wRC#)h*|x536sfJ*qe8n`q|!N#y;5Q{?@6p3zE0=; zy4Jj3)Xe*JQ{;U&JKi1Uw69==`JV)pGDusK3V}*M6xyUewaIu=e~L%fRn!}6ci<=U zHd?BWf&HgBy``|vYoxHaUyZHBy;{I$pNGqk8RhjTSC^Ok*m^}z6%APkDpg|X^nmUHbaivm4N*7z^*NHeZEUOJ0}3*v|Uj6XA&W53SxO zk)7wjS}_qk&);_SjjQib>YI}9Z2rJ5eadlv68s4=4(zuTdk0@|!Yzs&ZuCD0>H05_ z8p|DC@K?0^aWE4veAJV5)^l4DxO%4^D+uGxZHb$axLIo)tdkU}V?Wapdxpf`Jgf~J zOhv;UM}BE2n34w8Nj~P(4Y3)Ym8sN-JrtYujCQBnW|iC6eY(*-=H{-L&J7$L~SUHuL1n zJA5n65GSq>IjLb1>0+kG%(chU7I8E{Qo0!CL!4Ve( zaVZav-w;y&Nco(2FYM0rza!r3_tJMH-n%2dqvd03JMI=cBWn%cPT{rr;>IQH+D_tz z0mIr7abF4d9^$?b?)}(ZZqyDI$J*K|alE^Bia3sEt_SV3T^KqdUff|QowmFCke#3zE6wJYm1>AUm&wB!2S*o1SbPLl-9xHJ75aVL+fXF3I?-Hf~3gg4{38D})CCgnv{ zd4&;LCsh*$%?qgXa+2$DrVgZ*#SMw=D2mg8Nty+NQEoW5ZnIe+&Ai)e7IL$!+4eB5 zczk~)jW%ieGtu^ps#WZS=?SFb-%g-pE=A*%<=D9{!=G(KW`dead-Um$xO$IdMr``R z<~uadzdu{v{#ax<+z$CMi}|kUUQwCrlwc*)DY??TI$ddAp3BWE@-zro8M=BslQ)dKv?q@k*_AADiB5#VC+J*AoYKK68S?*`uwbQE-YhcA2x^}`zm4;~iwpRU zZ`$==G+9I@89XtgKkLYic8TS0*Cb!v-Y}a1eRea_P$HyLa@e_jc$RALeVdLpc?asF z>K&+?)H_f&s&}An*6%=lOdNLO8pyTuPC0rqG~Q5Y{EbQAH@e>mzgnjdk-wXI zzf%Pj{IytK{X>>l{|tjS)&B*F!)*K;pE3M4_p>IP2~#UbY^uL0h%pO@_-$_DO*m~< z6Vb33(PTt(5~2k}+hRmV5M4&ZZ!~EyL~L&84AN)4s$`V^8(J@6PVA4#6iIA$No&Z^BD!8fOrod+^auX~xhE9Kx&35-lT6|lZ>brJ~V&GlojOG6n zJ1rOO)}oH(e+JvYhEu<*jqjaS9kyGq-bcVA)0o~%wXae%akG=7iS7tQLw-wg!zna) z(uD3OEesMczMoH(ryJgfVX%`VVLxT@YXe4HESOV_!Qbb#Z8sdQINBzLzdr_)($sL5 z_ppZ59AXp~^T96WkhD`tiiA)Yb%tCsx7;$8mrR4C;C4!zd?Z8!X*f%tnv~Z{Mlvb+ z>)>jU%=i19FiOb9B!6a{0Go11z>zdpZ)`8` z5FfiA6UI;>K6anOPdxgEVf=N)Uy6@C;J|!W_2)Uw*GCm!ct`Y(-NLs9xzrMlX4VmA zarWHhx?qkaw&O;U5fOCoDc1#;N%|!DLtG|>OSj2opK$38O;cP384I`aCiD0U!*u;a zL?6pyd9j=Lv=pI)X{r2gtbZa6`v~H5H&G=#ORf}g)_}v47(*nt9*X87$)GLao$~4E zzZ^9oc-=S=?;JEm--%%N#}29*bIk|lCUGv^nO zaXb=;4YOo<2P5y-(6eUOH{rycs%Zmuz#rtjx=(7EEa}!y#L0#Qm6G9mu(Zxt)R>Hn zUCagD5HdELQs^(#_Rplv++zk=pl|4-3MS? z-q}oK5*w;}lW(e%`%3-hG^-#aos68!G=6~Nb~lrpaBk5rV=)`$IuSahFm&qHq*&`} zMg3DCmCB?-QV$8K)P(bCkeY$Y0@G!`_OY6%W=m))8?ng>lx@Rq7N-l^R!7)56{)X!43_+v=(3` zB!^F4%XaPGs7ttsn>m(V6B@AweP?2gG1uaK$2^AO)kd6$NVWo0>95f5s(z1tkM7Tu z2Z7{dtl%M{Hm^Lt)!XY<+Y8C2zq61kr@U%Bgz$*1M%(Kgnd&zfwKtdQQkSI+ip}Je zi>#Jt@XE7Sjn8kx*iL*Gb5uOGQ|vvK#3_EocKl(zqyIx5C2mEt-VS5HdW85_@{qc9 zimtq=S1Odg&=QFAiAr9MC7SQ+aev~qsCppKD9KxVrDG(Dh^UBU3a;>tjTydYXwriB zoMwKoOE(*HWOHR_*38|tQ?6Ngraae_uPxfWbw*Hnl#De?@jOkEhhDV2E=E!r8sqks zXt(XadbfgGh%;{1GBcLOjuUpM)Amz2w%9rk=Qi`Ok6x2S^Kex&4-dEI;qEE(U|N17 z+@CS|jb={kKjw+=YUVU3$Iqbw)FcL4=V@9^{*0iHg(8D>!b(Q-nPgQxl^q=Bx00`A z_h?ltlm}^pc|;(;v4j^UT3>h0m8Omo+EgxbeIL4q=B4=-v`%~=O#HNMC!RFj{Kn;$ zTiCd~wACBaERE-um!>8lV*vE~dYPBchP?2ApKy8x5>9vjj!sX1dwGd7yT9xdJNwh+ z0b?yh71sGL8EYZVu;vQ6`)S4rcHnWcc@d{nyJHU=2JN9$P&r+!k>*TFw^cN99sdGZ zU9B`~hwT|wnoofn@)Kr>-$=yP<=j>}rYI%0WToE)^Bv_S!o0~kwWXM_Z{~s>QI=bF zP1TOyb8GckuU@k7MBo>u2#e&))w*jjno&CUjm^3?CT|;_v~?M8o5#-bEXAW0l&!Fc zO)D2v;H}Nw>pya##&+l%Y{zG;E!2C;y9o89$)_YiHJpkhos<{!TUguYON>G5j^j-| zf$^H$U|oPIXfG%qp=i5u`G#n?qS|F!A;Bq=oIfeaS~N-4fq4_V1(>S_Fq+f!a5*H1 z1Wm%MV?7Uyip^Wckd6QT9l@mL${rd$|1_@|zV1eH8RK zoi^lmPc+7E9m)0ZPG5qWARdIIHTgPf3~lZ495$5_l^%`f#VwfLOqAj@%j_qZ*M+*c z`vZ4o$VkSr@ETO2l(7hVnP9JssRtS(c(&yq$aps49VC7Kdf+)4hoo^UI2gH#XJ~>8 z4k72-mqd@xiXBYlx+B;91{7wO?C@0<82K*Q*7LuMm6f4<1!c=tc}EMQ9G)s$Mlwe; zfBhqovyy}8TWZ5uQa)K8GW3xvNr>GZ35c#o@}XDGV?AB&bPA)1a>A*)u52FiVXTt- z?(H%srs18WcnNk!aK=!^x>$`R#m=EaO>VC=ieRW8f26e+e;&Q~Q0~PD@oz+>-UOWx zL$1;mcgeXtA$hsrFfK&7S|%wJcL|mg(Ek{k!LHuP#Qy|z*A3U-L|>ETlfKS2Rjc1F zHQ%YMa{G>QwE_d$kr>dFj5n_-#!ZvE8-f(P-D+ozQA(ht?bA3&ZfymNzfZ8{ z-N5;n>%PioSXSew*l{!)k0Ghz!r&N-k8{4J)s_64^%!Yj?2irb7{I!_yttIdL%T=! zDdMo1{vZsy>YM%_ey2_P&Qf1refLz~Kz-k)zQpz_&yc|1DL_b*EMHT-;Z zX)dNPd6Zh636PhcupVD+>Bp|S+QeS7ducCwjfrV^)yv~|cS{&r@K{)!UlA_BxHC*I zXDoi(m`Wmiuoka9Bucv(X5%H%41O8=3mc6wcv0zjs`TS5JW~JiB*<~4W6X8O@N2Tz z_`d~CeybQ=7R+5GH; z*+7ty7fjwe8`OK7Oh)2vIAzE)%!2<(3>pkEBsf7sGRJkS8`b$l(}o`4X=_B27>u(G zebBIMMMdGjB6h+EV+c1J1gDZU#ladEMy{1(86%d`cR?G!sROVz(!G+inNTEV%h!=$ zR^n(O>M&6%p1i`i1;w*iP)w_SdYkNNGS)m}>@|R|0^~Kd%lW$czJc#bD%aPf<^ebC z#v8KL$>@SCs6si^`&Bmc*#x&Tk8X|F{w>r4p*LhqD``XPqdX_0JN%aKqht0{hP-J; zE-50IPJ2w5P90YpT<5)M9xc?i|8EM)whU~k47U9TdadtSj0oN+U-VNa3XbPW0?~7Y zCkv%z)P63TrLGJ6Uqks)F?ENazJjg5ryJ(<7I0s8T1UCSFnhKR>zkg|kqBj7cugB<#_+}WPTg`d6Pcwuu`Xo!v=ih0u5v_Nj zn-KrFv?BaFV+bP9FPd4R(fedRI>&VJDToHH|7k2c23!{hedQ8R*0i7q9BH3PX)ok4 zp0!`n`XPdMTXHBX&kUet?co-Ns99abL6t?+qG;7p+LrPos- z@jGt(Mm=2(-s#j&3-=98+~tYw6sC`-yPG?R!;fQNk%m_69cp(M-GdXL zRVgOFDRq_xcNzMyG!lyT*$CUdQ$GW{4Q76Rvi2&P%>8IG7QC^&wb!&pNXFI;e|98< zB*w6VRA$LTVb0)l<*sPYsdy049drKkhUu82RJJ&*Ej?tg+I{0pG-5IFP3<h!DoB`nO(79oyB&h*xo&@c1khctGNW?0ONs*8N7#u+Oac5 zn031hzRMz1sy&fZ6k#Vg8)DnAPRHbQDt0_;Zy6L|{k@iKT`Oe1b*`T@6`7&o+W{q(Xx+^*vX88|pi*zUQg$di6bDeJ@bo_o?su)%OGHd!hPX zq`n{2<%m1I!ziCbd4|I(@Me$yGOEkAp+TOL%WYwzI2Uo?30U6XY?-R92yV z%RJe&s6N`VWzov>XYwVjtJoPE+*8WDAKKT_!b*eVA3}u(m!eQ`Tl%v!DAX@Q)o!4l z^$5kiuIF7Wj{M)_WBE_fr?e+Tr(Zx=u>B`pG1c)re@(us&B9ch!IQpW$ZQXVtqkkMg9lhP5q8&FW42PfbE=w+h33An~ zUyknLc=ao=4t1U2N|Yc%w^-s67gdFWCEBvW@aI#u5}g=~hUjq9VKsMR=$#LSqccr1I@vm#M}e!KO02n#<6w zU(*~|uC-)L0nV00yyAGxf|PPx99ww0v~AS$?KEHR!t>>y(HBhW6I5$;Ed)&WBNTd}zz`;Tt-l37?|`wzGY< zuq$ZQpWv41_;2zV0a{MdamMzfHs^Bt2_AHCvG0ctR!0nXf(OVGWa-EMA{9n1C2;>s zD4BTWZBBe_5$wl34__}G3#eNiv2ovM`Huw_FcQj8JBg`)NFht>vgcT?*DA^z8KjP)^Ir}7v_YrWv( z5bTsUS^FbIe40L;bKH`-`GgilhsqwbpjVf8!*|+o(>LPjj(Vm?Jbc%;loPqLMttwi zdlx8!7LJZ;;i!7B%eql1Z$o8Ik8K4FDy=S9>-vPnmaV$k^tbBnl{nS#-yGTAi`or( zz(w*rPGie*4=%SHmm4gz7KSV*zp)hRYQiSno}t|tF|$zbg^n78?A@{7Zcx()3-JgC zlo(AV46YQg86EsfjfCjqb}$#$?zJfXO-J@Su;aNG&J?gsYg)l}NXDt8o#3wyo(ANh znSvbkuD~Yhzk8$q78%jv^n({L?pXB~F(v$kCj-l3Myy~HikS^XbhY^f;N^oi@F@g; zr;oYlaO}`K0kslG;`qaDa-kWZvI+{GL>wo0(ZPneJI`cS@RC4Z4xw-bukgfhHVt;w zoXOux$}xj~A?)8AW9&T;wrI6?PmI%If4R+T;7bJCC@1YS-h5bs*-v{kW=7ZaL->{N4ow0eCnJ+-G zZ>Itwp}^L{|aU0#TA)S!)^7Xr$2bY+DZoJYO_ zYgAU-#V3>8A|fT;36R1BYevGWS>>tQF=b-3+?EeMjFx7q)M8Fdw^8(;eIe^w^3YGMr|-Qv!C zvXb@k+4wN*K4iR1d?N<-;8O%&JfA>04BDc%naViToim9{YV&|rv~;_YegN3uD=KB$hoXR*GW{>R53dYYv`)jl@e&POd%U zR+n((Assnm>DY7Ab~>7BdUCQfv?1zM+Hge1Zbo&|jzs+|M|BYOBZzvdM71+<8i+~4 z&UhP6S$f;Vn{QGzd=6!K8o9TmyJ8dhcw20Sx+SdbZs3?|BNg_YZF20S+oLYWg?P+&vwS7ae8!9Ld8NT5tokLO9_;rZgr68~V zpQFUW{q6lRet#a#(oB}qBtzV0!ITX)NkSclE_ae`|LWsT@C9sOmH3Y2K~ydW@EYNk z$Qr@)?-Uu11S0BH5$S$j{UJVpbw#}Y3#7jIg!4l!;0M=Z)X6#!@@G0xU{tJ!wgijR zKc;MW(g#Q~-spts(8P5^=&Poh`e@~)P2IZCAjqMUMMR;+4>y2}h)YUfv@_O*YMiF8 zPlDB@r8EGaF;fs-^bR7CD1)3>>y-Ewhm0C^I-Lw|~NsdoOkj zJJrj$T#t#ay&`3hRI>k~>v4iAGKv!%9?f*93Rs@Kb*2SZ^3?80j*bGqOFU#~dfeM8 zI~+W7a(3cde^uZisvt}D>6 z#i6faGs<0;(tg)re^&b)_}NIY(Uh;NT@gs|MP3#XZk%y_*HS5S+-B=iCb_~?9KTcZ zn1bK%pU33gv-!(Y#7Ho$i>C-l3at*IU6>Kp?*i1M## zWL}g}t3^?ku9PDotTZi&=bB|85riby(L$oPyp8Xp`S-hOLo2G^1+mvfBRpD{KN<5qu+pZ^#9M zxwXeNve82MD-q18E`7|Yoq9m1;~7bz+2yU~d@O6Ux>;FbZaAfTXeU#RAk7XbBhyT? zpaRYaqat7tET-3cEiDm#k3r^~-uM-HhEuxj3A44}+IkZzowhmEzQMZCuPb3@|1ySYlvW^L!KSJaw}QMQi@3@nS~}#jY(AQIf-@FWr+5`~u&tItTS)YSF=g5Hh3+Pn zcSP>1*j4@v$u-7AJ{8I}?)a0f>+^dsV113(=Lo@;b{W-J4)+@OixuCg^*eWr9rXbb zgJv6J*aPRc6>;Wv1n((7gqE$5*){90@aj;><1ntVqPb=?MS+vojIy{5o`Rc- zZ5s0UCk}`%CQYS1$Ho~V8*TFnY zp?)upjJP1(;2Q*5Ovc`2Tj!sWSvwgVmG*xn@CsZ#IyxK>MT2j`mYhLioMcd zb~nkQ9x`t5PaejL;!Y5Cv5*R%Ye@;*f&>!s~N|BQT=)~a`57keP8Lxwao{%yt%+HiSQOE1UFbStQK6Eo&MQ6s$)Yc zYLV~-hYhs-7=zlkEPY4))0E~rkmhEjDY}wk5485;f$BOMn{`BT-$o_O+y>HjtR@oi z!~@u5p4vi|cpLdeTzMv*exi8_x)5lq8;K;)2{PYF%wePEc-$dz;}aW}XN6GJ&!vkuaGz)rA(ifghB%!gT5z@LK#*%b@!vY;QM+SV=< zKH3(BCkUf0_%5ny2g4ZaM4uUH;A5PNUs1{V9&h!!R&X~Kzc`l{;x+?V7otVF>{`(FBKbfF0N+|?1=of%QcOo$R@(pmH;J`=jnk{b{A zqwyW$KY(WPARqGPvvzqWybB>_#D9R5w=C~-H^iE7QU6YqI&; z*$1^g48ih<=Zdw$xH_m_4Pie+RHehD)twn;duM_BIQjhJD7gqq0mMt*5$V+<8<29F@G z(4yt*3mmz$lHkzJ;j&q7%X3c4Oa1j7D0F>BDIjFE0s=d}X%atntj61cNMB2?;!A~iC%M5*(?eMXDxhU3igqAO7#ZLYJFY98uZz)p%W^I>)!)pkQ9Cs`3SGWstH0yEY zvCW@1(4ie;3@CE&2DpTp7Fz_^;wNf{AFO3~!4$EQO}L=BI?|}ab{dOSt1%z#6lvm} ziyyGg^R%tgB$#vst zG+o1|&i9$2a*DDNvS&8Q$-L8PY<{5m;16$6G`B)4U4|)s-=mh%Kxr8!9xPBK#z1!; z&dc!ojBW9?=*t+Swq`AY%{m9wE_3t#ty&1%zePbZ%jV|cw#l*Xeal!|XN@YP&_GKZ zz5@zcn|m}>S}}7zaA=#dP0as6xlh$Nm={wHcLq!`x^Q@Flbde1lApYAoaZtxB+7gLSEZox zDK(|CTaM>--5Cz|e#IINFa2p?W~Si@({UL)G#MEy*tRU5P+iSq@H`5VJ87F2>0Pra zIqKtK2z)hJ=U!2rsoMKgB`~Mi@Ta1hD7zAwMpz^eo;)bC>qgY<`aI@f9;3;X4RcfQ z3##9>!^AnCiJV3mIhOOa1BSg7hJOTx!MyJ3y!YyfuN-~nV(aQq9EL2gKF$uz0)B&E zB4G?Mr7co5)qYu^)?PkXpQg<;*}%8&VGdL+D5=MEjN0?@eVRt?`AitUmAQsE_~gX@ zky09R1lSlr3?nCBqM*ME^!UF(0R}Z-PyvQCU`PQLY5+T8TBrLsnG-JO)~!zb4{(C6 z=2lX{5U&&D^d^k|PTqbS+kvD{|73CdaIX>fj&Pr<=Bh&!0|(>#Ix%oC_j&enh8z1v z0Jue3?NlB-mcu&{`Nn>V%AqbtTD#+N8?Bue1_cEpNoEf6?8x} z=l~8nKm{#}1})>DWh&^vXwZQibf5}4NCn~0xp5E&9i;d=T=R9f0vw?M>`>>(@6|eX zN~%g7(v+$Wk&y@&1shAH%%Bzk9Z=}M!TpC$T#?{&~}2~F=;!fHyM7uh2dC}Zco4Pe0=>;Xvi9k zmv{^Rr`TCK9lh`P`ePFCG6(z&0X5YvSLoKaLN&)D)%We{`worp4h1;M5YctD5fxpJ zHnixvnw$G-g?)^UevASfs{!mFnRSzrS(#qDP>RT`UW~c}-j@kw))_3bnoW&Ph3TMAD zP_=?*STA?%S!{8d!E?O*&hP*B+qNqYnaG_**q?jXWEv+jjpv2NpO}Un{Mk}Z2#cz~ zLwe@@l{SK8)s{sj;gbyB`*^3pTP^Pb*Y}w6SQ_6NUV9fFr9LGYeZx+6mc!>>r3`Jp zcYZSS*o?mJPT2;7gWB-}?RZE#eyAM}YsZhY;}JNhWuB~C zCOdZ1ZDSU<4faDSHD-&SBAlWloT310G+>Payj$A%SRH*W)6%}`TxxZNc&3hdrUKM7 zpr!z)YQU)qaGD03rT}a4y_EoKxn=9Eg{HEIY-~V!4OEoVH4S#)ULzFNPQe^^?irXt zpjW*3tLRsG)~9Wp!DH(W9JZO0_y3Ch)QnMR1`dCKrA5Bd@dElo`2;t3krK)+PIWozMA0E>#`b@O!Duy~EVg%NEgD<_$yohnzU-0@kt*qEnp<+}Lee$S>y#=B zmt&h&$tcTW!JQ(bT%fDBuyxnxTKgv7s;SPXU2;gc4JQ|bni?qrcuCG$#@6Y=To=mE zCf|3O9}Cws#&k)}WR)QQH_eH3{48z|px6})UbfiUo)gNz7(;NHyawlluTbdbox?}A z`<(9JRe=7c2j*m-TM*ET8kFku6ezrL(B2nUpzSp%YxQNU9s!2uhFQBWW6u`g8zIo? z%Q({o*c$@fzKlCVfOA8j*O&2T3h=cM81Ku(X9@825SZx8Bm}trEY(EEb*YXkz!<(4 z5@1Z04fyaQIQ}eIo;A)@nCI!J=PAH?4Op)L=WD?E3UGl2T%Z8&(}4FWKm*^iHq7RsKiIrPvw4XEd`JU6qyU#{z@-XsnFd^@02?%5g93b513s(( zmutY~3UGx6T%iD0YQU8WaFqsJB>?{qYVC2g4!BxjUZVlmD8RKEaIFG-L<88d!5BlM ztE5dKnh&nU!yw8RTw}@&Yd$f$%kbX^O@i03vWi&PG#l5+K=eAqrtL^tZd}ia$psT- z)8y|;N68Q<9;Qqz`W>YI;8kpK^P629@;8VTg`^|!4#UAam9XBxS6R*AkIn7p^PH&f zObHVhs|Qwl#iQ(|M#JSwd!k8Qz-BbE8Ht>WhD+qOl3STm8#+{5Ic4^ZF_cE+Y?g-1 ze?;UxJT9>pmqU-=$LdLMqjoO+)MGYY!{Hu?-_p~@*hZjt%5y&Tor#Uc zMh?esun6icR)4bgB4X#;SS~{d6@bJ{*48W!gK`{~_bRtg{!iudv-wFIpEY{Nz~mxW zcob)F2qjP$9Cw1ZVd_51DFnm3?!hV4=1W_3bKTn0lvLTSr4Nstk+dpZZjFYKGt^dM z2g}B_K?+MdK^tY1Uuj6Dopm|b4@lx|9T&4TZ095Kf=h^pqTnlevw|DkV<^vHX&V~f zHQWSu1zTMbU^?|Z(CE%+(;+P0&2#m>^Z9MD*lDQqra@7Q&(jh@VC>8o?yv5LQ)n}= ziA*(R)`p2=zknua29L#X;r1YR43l{GP{m#QUgAAvc)^ii#Itx$wjB4YV6}s51g4kE z`OAodc_p*<&cj>u8=^!DyFb94vW-Bwtfg{Fi*TpAe-Au|O-QGPV_b$`Q3ZGh^p6mcJjfEpZD& zS;I12*t|0kcDTyY{ZnSC)_X+QnZY{jkr@$$v&`t66c)Y7MK5oC{g#U3boCAdRzAuy zf#p|4^*l%Ax)WOl;1sIErsL)&%)msgm7U7=4(~-)XPUJiX=da)K!lH6`<8Rv$~0Ea zf_jo`(qwt43%ibKJR_DvDueLbm123CBsHU-8pX1$BT@>?60u25@#u{q`pCoidF2cOi`4#J&9{ zEuVjoumfJBHP?fc5$R)_Z*Ns}c1{1J1g0V8yOcHHR-JW1D{DyP1E5*Inl z;5rkh5Oc|wXf?7ba`maP&U5vCrOj`PoYBf76QT6nE=KKLlP%H6sGI-KBg1TjOYEwfb}e9EjXTA}Nuxkc$U_b4;5Qybd; zs~0=-|B?0`@NpH#|L3 zOTd`kOA-@8LJ~TJ5_%w%&`UzGLk$4}ffPyz=D**W-B<1;S^oX~@#*cG-JRXHJ3Bi& zJ3A}*!O?WbVS`0fKDtZHA(pqH6Es@d&d=Z473nSU!<+*>&THcLPw~Tv`*!*3k)}^!7b029^fu$#giU1%HreIy>0L8i2FN~lystHK zksT@d+CH@@S0Q(BTuR7&bN*jW_X^0ncYOi7k@hp=K8#tm);@59zGw z=g2Z}SF(M!E$<-6Tq(;xh;~gkHA>SB|1^T}GhOuLq(wu|7p%^nm?@b~x;V`6&p=9t zpL8d7S`!0DTY|YO6P+8n>gAM?W}jhURDLEng|SqC_4-uD{)YFjG;G$zpCt@4{MSJd zVl@q?s4pP=B8UHo@Ut9#8sTR+{2ap1bNC7JKY=h+AT>Opry3H&f}08(;4T1HK&ZcI z6SR(4P!_nBLe7e&utbV!NFnB%f^K=6I(#U{n+!VR5sB$Yb|XfhSPg3nyg3eC8#ba$zmnrV{n60^~FyAL#2 z#E^CCvSw40U<^~}C^WK)8ql0wpLM#|5dU!N8-{sXq0YnIVPvLamjvQPd&p_ds-EU7 zI!o;97QCv7lw199;FLHx>>Da&+q{8Ny7fLO*hQju2TY{9!$ob;mLyBK!%E{tzMqgD zIoU3PKZbZIRn_ir)>RkW;Y+t5rJ*~V^w#iwW(#Ozw%DPIOeDCZvJOiw^`ZcWMHkm~ zBgHjl-K=Q5Q_*;iXf+2BJ8_?$4xk`4HwoYl0G8*?7oS0wkR7`~hCI_EFXv<}DkyX# z>@{OaB9;V_lVKhiCWvn-&SRvS=46vibCgK;FY13+%u!2jCoO8Zw6}JY|6K}m>U4Mp zbo@RsAV+tWIM9~v9OpRx=^|L3y0>gq%0!LY>FhI3Jo{xlqR?^)}?Z8AF!NkQWE_U3G&n8Zz~#k4$J1HnUMv; z$SG6!ZKT0cPx;(^)Qvb!HaR=AStIejiG+HwUPU7n?D8#1*(i0%(&0(2Ycff!if#cS z*5RhqwCN_j>DX?dkw*DSQ=_A-rE6qlj-ph7>mZd5MHip8Nr)yC^{G-Sn@UmPbL{e) z`$#yQbLw!T)j}JV?4>}XK4Xv z>k=sXAr3|nr;TKcG`5P7##BWb5ve$&kK{n)kuT&k(|!itM)V<9I;H4Jhp+Yx<*5|W z1*gboiig?JHPS?eXH&HwKPSkt3HQ9rGD*!^)jh42RoSGAgLt_NIcT6p>)Ba|Iytia zO=_2k-aD4gX?0}aj2U2u#0I#)fG&+(Vl2#BB3|eCq=>h?#aMziBshL*))w&w$EQTR z?X_S{(x7vEy<9>aEF`JoNCCY}K#Rjgb_zJ690aDP;Ud6cb8)%C>|LVaHgmH17Z2F{ z`#XY_TB}Dj+D7>k)lVWHI^VUuX5#*qT);IOB}z?6XYp|L)*{(~{lWa6M%>kg-?+B9_$ZeOtUION%*SsU_vmS$~V1 zr;v57*Cgir`r_VPTxl#PNcm&2$!}RuZKPZ?=dVvYL-oat9DlyezI7abUPP)$NueUO z6lQv*x)hn~!LHjbq|(Km9e)q`J?)1C-*Zxx7~`;dCzZ8Wzf&j1C@FYw93%3LLRSCG zz-&az>2SqDa%dYbOGbC*Wc-g}@r8T=Yv<2J{~iyXp+=Z)7EJF*QI{+`Ihy_)R!mTr zv9Xm{1ZpA-8!9@UoHa>e6%uSO%&1CRntXrgNCCj+l1V%-@6CaE;VN?Z=D#JXv%DM9 zDBTA;TqX79BGKyo%%yM{Um9WFfTxW0HWO(xtG6=cyG0wynblq3$DCpdN-?g^C?9x8 zFp{?8Z^58QGB+^`PJzc_hxX$?s`EA(EhUKm1kzCs(0K)_o^#U5?7*=6NQ9LqIaX|lmv6P zd(LKw+w^9kygr3f2n4f9hG_)&K*{X3i!r+%$?UQgaXUdV#P04hBW z-=PxVr%B8)aw1raWwg9qSM)vTZtaNJ<7zWU>;6qY{p&M83;`zKSllqut{A2C4n+ zJpyTxNaJmR#-BNGie^gDG1~Ul$38<&v^Wa1jUd7a!#&*xgK_se6EB@VOES3HtKKQ8-1u65>~$wP*lJYNp=vR)g#kJ z`N%_Klaic~!~3)}ZQ(*~B%K2>%!THf1f3Ct|J)PFSDV4IM{Sey#Z$65L&~Ub@F@eQ zkPSZEj5RUDZtC`^@6HK=hWnt;2>9=P!FN^jUz2!yX@=?JSV<{u<>#9IzEBl&OpbUx z@p&AHMVh2(6N64$xw$qQN}EKNrBOldOpw;0v>8X>BS)E=n(QbuD?ji^4I1!vjwQ3E zx*%_o^45uRlCm6{DPy%Hzhd~t?4sZstL99j{Lz4MXfJ3xaJJN><#VZI`YXdyZbT`f z1{@h_4z|9MUmi(2pwLccxhR?dIcrJPGp4*0_Lx~46o^Tb=QAr*|GZBl6n`L0Cs zlH<*EXplSJ)(-Zh{-lAT{A-AJTe?Ngo|t!EOLEfwLCn=b%mEa05J^F9yUvN46q~AN zbW2H_1rLlcrV-Ti7D+L=Mo}te3@8a&I&-em+Vcp!x;bt2J(r8XH2g7%eKsa_(@l~T zL7MvRE8sH5wc1+d=cm?-=P2=u#gl+l z%3s&er_e`3=PY9P3s6OnWV}U;Btv)Bh-BS^A{jMU?CSQ$IbW#C1|w z;f75Gn@u8DsM$`HT2m~JH0mkSl0Lpj;7Ao)bO{OjhPRg*Q}B6^@;49#uimk-UUw`v zX%g|7yp2@P+ejJR%qM9Zsi?1MSv@x2XctGB8z5nr0;M)EkcH*%|9`1ntnzA?U`80nod&nLFrIQy-7FO zmhEa4>FPwfcJZtSI!j?MZj~&xCRGO|O-uSClN~fdmk=k~H?AeRMo?+Gy=bixt*Wic zh(C>K({=neQEEo4-P}yC7~m#d(-iBuH22(YqUT(Px=u*1Z$q-5oNBC-*&6E`>gZxQ zx1O!s>NrW(EMFq}Rv;nTYcOPb4{kX?0;^8OYJfVpbW+#|&7JjbvbFPIG)L#S;;hQG zV&%}76MP5&{_Y2GN$DEDKC!O`kgDhF2lp^UN|uEkh8QlAylA+9q^F}F5E zU~3gX@1^Mc%l4x8P9=Y}ffa@t2BMbGkk=*I-Xv;Mk(4$S^~GU=<3>ojJ|*>}lg0dT z8fah$@}rbo*Y8(yZH!2+OQ2p!qjd)sIMrv{>a%V7Y=f9U(CPIl(d8*22;uI=X|v)g zdFX;`yWEV`82%Jpc3Dkct`~}#lH70aAp%&kckCnrv{G+!$u=jxR@Y^$cwprzEngY| zcSU;|wl@Q#<^;K~QRZsXqPL?iR5KODhrLGgs4ixr4w8CwH`&x=F+O-s8tF>jG+cLu zP~u3&lrFm1L8HWyAEn{!%}x8ah#Ix8-a$-)HfHUp?Mo)$-gzhF-s?c~C$3R6Z$~5+ zbQ6e@?g4-wT>QHmiY(DJ@Y^5CCMoS)ThmS_9X#F5B#pjar?%E3>sMa7787|%CDI11 zbbO4TEG|Faf>{tZ7cBc;d8%7Or`cBHG}~|sp6U?eJr7THFVQtz{c)iODlw|8RefXf zbiCORj%+$6W%_|py_k{rt-K)}{<}8W*Y|w~cm43c|0ZhU!ouza+$1tJS$Q4D?p&uA zN&3D_2&}lnFx|00fWNgd+qjtyF(cL$yWI?{C_7~iB7YSo!q3oN z9$CF~7|n1TR#!Bdh4_?m>%wY_EZ+cg+D&(Cp-P`7drNa-z4e!{w-BRB`x^${i|`{R zkW7CMYnU_*(Qe$;W>3EbkW?>9Ys}^vhc#qzM5B^3*%!vu|Cg2o_$--gL#WU4>*PBd6M!BO%^V5BeR#Wfw-1Vm8q>ejE+EcjeDSL`h z?s{xbF~%L!I66$w7$#^868IaUvTeoDZkvB2yibpHM>mZ1ej$S5@k{uu#i~}s(kHyW zy3uW;`cLdIgd{6#@5Tx7x8KzgqUpbgDRZ`>wql1OwQ=q^BDIcIP9vybTrXIfcz{&= zV+By6?s&QyuU*Io=)5+@nLsMdU0HNSHgGxfv1acq%!!CgJ_i2@AQWx)2^L zn6z9|th0a3#%F>%lg|jyPo2_7X>@*^{Ph=%(5E}#H=3G;>wcd$`AT60Uuf~1caC^A zM&JjC{If;i4l9o5Me*J(o*6q1pCI1hH~uI)>PtSQ-4NH6&5BKlQnx)ay51^a8_!RMYnD8hDcqqrL!s7+5^6m6cXKg zkm%kOf2@c_0ne5Z2+xlO@zE5Caedz~FY08-Q z-OAx1i+zSE#Xd{H?LY^Ww?g4F6}8f`OYLIfCW&r6c!;CSp9L#UnjofqhnkqWiVBJ~ zq@d2JFacUD>kd@hpqn4O4JLQN-c#L};?29c0&&sdqW5NBu* zpMb6NJyea0p2Y(3n0%%<$|8x=>Q~})Ix_ra-LDGH;|Ph4!9Vyb8}f|Z416}Cav?N*3M#qIbSO@8e3WN8_KrbzqV>&o3 z>7@~`aor-TukNcuPPS!?P&bx@8sj$&#|CRUYweUe-V7;KWvC`s*4A}ctJa4gBKRPd zP2TRJdZb)bOTs!_-(+~ZqLJ4R^1$5`B5ZFSX;UM)r=7Eo3`MQo8*Q_eqcocXEN3I7 zWBG|17`*z<*4HjX5PuquUZrirpQhPdhCCE$BRN}8p9!4+R66E z@GM>s)9_eYgfyhQaR{VEU_1gDj2y>JyP3S2uqR-`ewHWf$>D?@YA&@vFaCRt_T9D3 zbyzC!8WZ#8-Qv$C;`yl_pEnnY=NYtTHw^8g=L;ON{D~GFIwB(6Hb#Wqk_emRGI8Fq z!Fc7Hr|9S%nFWwX_y{H1$_{?VV7?B`!Mip!$sA7J`eL#{AK&_7l8K$X^~EF;IJTHf zDw9U+ahr5z?kT#TofvL+z;4qF$%_8BN!nUHA!C)FR8==ZR^zY^kr{KiXPwkWP0&WO zPB5vBm3-Fd#X0p-$|8+fx+vIkQ&W?gmD2Jq(?UBzaH*D9X*7y3&axKazl{QkTv}kO7ub5BS(x@Otp4(yrrq4No>|`L zIAyYC@mb3V7j>rpAuPT7eh%}P%v!JlsTz|4GN}1NsW&UNMP(6y2ycKxhU-3wUSY<% zkJdoNSzOt32Cl3<5(&N>IKk@4f}!GsAQNA7B+G+Mf=%TGABpMal}@H!qdTW?UX}b` zaQ_i~H5AF<|*XaLehTm1Cqv?XY+ zT{IU?VB%PnS!$Jvuq3OIN*R{lt^B+VKP~L6(`HEDPw8l;JRJx+ax^Geek9MFeHETL zv-*Cl(@Aq=@h8C&VqV`*05ZM3Ne^l^K`FPNLnmQ{oOU2uqfVY6^A>^|ZkWN*Ffpo+ z!$~S`JCQc$EkoMiMA+)2-bBSI|FfF5p*C@M-s8|kc&9!(%c4cki9PJZ&xw_dj_QMT zbpBzRKt8s~*P2H2BX)q>ysjCpb=$5tGi=Xg_d>ocMth4-~(O z_`%v3S7QkB*2oHz4wJ|>IgF6-anB^%H;xc#mf(_^q)fBKVe`!;dqsdtC6Eu2NZ>vJ za0RBhL!9882ke=bVx8SlpOPms#gtmK`J84-=08!D1m!NDagZ^`tC-s;=JYV;I1)ye z;ENxNwRXRsldUY;hqhy=|Yq~*}~k^!^im~^Wk%$4bu!Mdy|*sSR{M}cXpvd*C(bLK*6ek)0_Hv~$>5 zd2j$y92t+whfx9xoPUs2Q^c6c@VB=$<&%APjqRe$LF}Ta&Vug^Xcu)92F!57j9WeB z)mS@OeE7M<@0zlv{PeU8wZO;?jg6}ts1Y6602gs%)12myiUTbHwERUjo!O?^RA3aE zWgcbv9yXWq@-33W6P&a-9cLHI3y#;0%2=gQPWg)C1H;#l{o^`;j8lI2_(1%i)pi&c zwA3QtU7rrhY;9`@A)cPyBmJXRvbo+&Z0XF@3U5Q8kgf4scYAR^$P z8;6p2<_WcV^U{YK{9m!JeA7F~3C_HiHjAkqHjt_ZiL!jo32JxE9N;hu9c(3`O0q}W zza?ahd@dGeM3<9|V8pV|-wwSf1SZ)`<-eX#+vE;6UBuV(h!NTZHJ@&*@tseGy7MVx z+PYs5T{0(M(3irk*YJe$2b31G0Sx0s6!}Kb*dA~Fpj|A}JJg{I2H3Bgcd&SCm)}Ft ziySqNION+pq8r*Y){LE1&Dh<$4klC=+G-A2r!o#(mohH0)p>JRJDrz^e7_n>*Wrr$ z;EaiPIPDKE6(yx}b;W~ud71Q!R&W$0)nGN4-eQvYS8tIr{L!Q>#~leNEV)P=Siceb zJ1H7)vg2JlkP2*;3P_%!n{c@p(lbn1Zuu|U>I93R$6lL`lR-J*_$7-jtG`R5%j!4L z=(2jT%IUyv(B8Dmhu6;FRg@;9UEGq{2Uwlu{|OVE>DCqNIqcT?8vu2k%H8Cq@i8Rx zG#euNQlbupn`atFm|4P2pzb{3T!6{Y}4ljuP5VmyF@6? zkIq^V5lf2SBx8|apLL|TZc3wRTW0Kqd)bbRo^@tZ7eLHm+hc&l47fi^g8u`4&)Tzt zmTrQ@I@1%fqm^N?8%=kB!SOd@Eio$Kj@6DIo7 zBq5rN5TeP~tU$qf)H}iL3#l-Amdo?4 zp_X6h8>IYOlGWuaWAf^!tk*vkkG7g*(-Ohbv8DrACJkbUL=y!b#TIke!8QO?jSue& z1eH6(`LX)Mm|^MOURVSlzP618h4=SE!8;J=De&5HV?nqVK*kGf&&dbBBMTmFH>`%~?@m@kNfJ0jHNIsuOm#fd0l zz+(`Uam0Iv0pL0TyA|vEB<#l6WK2y&$zUQ%g%gp(7sbCNszMxk5jgY+*W%4c*p4`E zO0nvT1e#>YUMtUbLZ0n`dKPMPZq*9RvlnW;Z{Ye&>`l$luKNdXd4bjrRJ691x%yb% zrWUW&cIr6}t{(l4!8l(zHp&O>A2iu;TsWb@=D*U=npPx*rT z(6s%@5C^8+j49bpUFWP=Wcm|yExjheh8&JRg>2cPy~(-+xaKjNTr1X_X4so5F6d1m zRfN5{DN7Zx&a?vuG+8S@FYM3Zs-g1p9BPwPex6uz+J2X)+KjD5?{YT=c6)QQIV-i2 zIwuJ~kr&bV#R!+i{87uLn-!PViA#$``ltc;bkWR1^QJdP*>lEr_MNEI5jCvb!I#Mq z%PI<}FPU{oE6zf6o@VRHxEouZv=0d6&8@^(zF2%48zc6VM=$H&7%}5i%jucwwayTv zN&cG3Mgk!j8>US=Dxz)-gJ*v#)>p-olKv(nXf_z$v_OP2)oYV$26VHYA%N2bP>EVH z2T{@{!Mn^tBh{` zZk#;X0Jor0#-5o}GEvGklMxZy5`!Tb6S1v+MQn2C#-*`{eTM11C>Xc@GOV}kX;*>+ z+x{zfb1c(!8j}9a5Ef4c6B6uF3f3ZY0$1rUxRz*gQ$gEKvHV}MNbNwRMpy{8BvPkg z#ltO*Ljd7up4gZXA0W83tbC^5%1bk??mbyzj#z39Sz>11yOmb-Szgw(SG7GiOiW}x z{9EnU2PoOu2z>TL)Fgq1B%&CRI+13h)M&_!dN`S^){Pi6Z(fSC1JNV!wnZo8gA?%k z(h2#<33w}h0)CUM*--~WY`X8#B;_KG(ANth>FWDm_l~3!o;guae7pU7U z6rO$wr07zMJmpHFI;%u!J$<|oWX;k9!Og&IN+UU$e2t{TQoI+MUAYe5BGM&#FVx9h zoe@68Y1t~tVw|oOK}Q!hOTG0Iq75%2*<*{S>~ZW+WDn**{qf0Kci$nOlxLHwa@6__ z=N#ACYFyWuWG_@d4W=(CHW)Gmr!mQ3h_NAO6VN!&e++@HBM?mDUXhMJuD|5gSf-==5#)vWuzYh}9d_gmHSu;16X12;Rg5^yV?6sFf)6?ninMik( zDL32;Rf)|T#u2uf97}^7<_&Q8TaSzlMp@K{g>Ubd90?b}xOZ5@nvvL_abfwn(s}r* z1XARf`H z7{*V-%=w+9KH++p{(-2-MKV=ZrSeO$L<^DVGOiv_T~A=k-!qnKF;d}PgVoS)w5WRx zydEp`vy6?=d!duly&vlEl{C9_kip&&#Igi;!&6bg|L)HlTdS;n+k0Eayay3 zNbmjLf)gu8_cp`l=-A9nq-}c3I33&B-eSn2TiA4yc3rWQw7v5Mgwo;u-UhhfAC}@| zPKq-osn|NFBbAgTKk3lEDcb8QD)&~tw9K*n(_!PHdw-AurO}bry;ta^nS?jg7iS=^ zrhKn)zV>A|>+nKchDqBD{@w!2tYfRu-bzVC2IXNuH~Rw+XX?ze-bI1)))x>SqAYfLgd96PM5bC)p!)t@4b#|RrIBo zKv(9-G93rEcNEnZknS`=@(=!jHSEI1*iJ~4(%jue;bRe z!x%BrabiNdv-cWFp>*AH!7GUNF5KO;#(qvfE89Z9vz_>JGKQysz5wX5oeul!vLxP-gmoBexWVx7ozSfF+RtM`cCwA0^?{%ly^B* z$If>b)pZ(0o#?qMs(s{cR+biUP;{ z&Cs+dbrQ0RfV6Yi_GgQi)#+5pPV&9n(r@%4ZKG@1AMB-xWnCU0HFFVmBChzPdWwV64e)78rT5ONmB{ zJX+gaG1n@{d%wqP8_Z>MPF+iB`yCe4^G?-6cgiliO9AeZfV&ld0(;<;srNpK_6Gdx ze1uted)<4t7W8%%NL?Bso-4HIb>l0y426i_q7<!s(p`-d=UHb$>X+o2|oh{t9n* zaM$>~@~iJ+;^xsKM^TzzY|RkVR+&TmYCK#s&c=s*?sp@QvA*PCm1Yd zB9@n_r|P}HP3DT6iUGM?o?M>?3Eo*-g7?;z;Qh5F_+)JfK3rRZkJgsp)3qh|$3O|D z$ON$G3|{^meR)!2vHd<0+ne^hHZZTR0&PX*Ux60#3%SEZ7-Ho*Os~ zZx)-{V0bu<#c2$Z37FQ-CIwXA168#45H$w=mLKbv)*cFI?LkWVU_fgeW<895Rs;Yg zjelYU0DX;rMg#z*kiRSfI2C}?WLG>CC18&K9i@FB3>zLELi&^mo{c0xcv!+aGeMUq ziO^ZF_owu__iITIobB#Nw!0bc-7&m>h$Q#}+AFGaE;Y;-s>i74Tv zSQQ?KBz=IZ@Ib5z&qWeE$5l8rsKRNe!UO$%+Jlj74>H~dV|bsBBzT_jo*v*m19%_o z5AR)(YF`G2Vw_cwdMlc!BXQ5AdD`ybtw<_tr?ZTN&@I zF}#mN5 z?KQ^xS}eh)y)=)#Z#QP8_E8hcR~OF{3V81joF$S-E(7e}*S5@x5McS$V! zrIGBs1?|yYb?3+gCU1vv3i%?Fs1nW(OQ4{4el+%iFqVQInM0qc%D*{MK84%rc&G<8 z{7odqZ@Bp1L~J^Az7PwMl~K{0wX54@sAm?{gezVeK{c-=L;i zKc(5;&PnL85K*8!INx^z@_a;jDnG^K<3Q>v`dQI_Fr297m3wh)YUTziCNLdVzr+#5emYuzkZ zr#`I9RVW1n;1LCQL;@aFfJY_ZF$H)`0)DRmzn6f=72t6RctQc5kbplZz#k;wNd72jB;bz<@J9)FRso)sfaet8ISF`P0iKtD7Zl(H33yQfUX*~B z6yPNZcv%5nmVj3j;1vmYRRLa=fY%h@H3|5W0{lq={;U9hmVnn4;B^UjLjm59fHxK3 zO$m5Q0p5~;RSK|50#+-)Y6mCyH7#CsC(z5-AH>ld7d zy^-{&^RQ>xpq2jvVxA9u70}3Kd)_-;3UIiz%VL4yZ3O z%B$Lyx2Q;6%*yB#Dl;af*?f=WM3MKGuoVlpz-bXC*b1+`Z138n+WA)6yvhPJ%Lizd z%AN>*sMD>je?@Dq7JvKYSOCfGakSzFy+iYsgSJ_0V=yD>@bI=!EZXS-9l%<%RT zD9a;6lb2h?AAf(mw&8W6dM(hImuq!R`xW_}zC`4mUQgcB5KPJZk)z*rr)WleEIV}BaMIC_-p+G@OkQegKP8tfz&jpbbX_lYqW}o z!$9&XxJqN}jZTVg+R1liQm*5lmxf=u84PRgOmSdjR|z&=-a*j$wz z!SIxuB>PI4S8u9Mm9nmtp9j^tYpz%{WqC?`Op4m9F4@sq?l>(t2aOMiTp*nso-q8& zlGqV43P#?)oO<&-0J?LHsbV|7z|)fq_yTE-1O>XNzA8Yu15_#W%$m=<>p`&H^bYose9i>Q;8mNwj zlMFL^NH!S$k)UBcRnWQMq<;~<{ijLdOuxXxTZvk<3SM@jqiMgPv6=%9n0A_jJ;x;) zZ6)Aj0SZ2=9-cVHj5%}p>9gL371x;ayN>VP`0&)2`Zd`R8@H#%ymk0$x5w2Hb^N!V zH};ea1QFXaRRpJ%9K0{;@i*GIH8tj)4X+v1Q?Dyf&tvfFk)kATA2w~19vs%;GJ0M@ z)Mqx{&wcc(15wsaUrd_QGl!C#^5sAG?3tyj*q;4xFWkeFTAQ%V2`KB?iFUbXBVB=d zeg%Zra*|sQKc%NYHN~g(+=r-BDeB<^j{6C|@2hdAT#Pc;Pi%Hp&&Pyi^`1Q!_nb>X z#P-~bTsu;(-EUfcHOfrgbz`?ittK3oKvtY;|kTz4V;`_3VM9?^#svKQhntOx9Jdp7Rm)Bt;!{`wpKV_an)! zmwFCPC{WLnu>HD$l1%@i`OBWw6xFrKxBu%o4Ap}psU%-b4L=awbAWOw0snKF0?r3; zUjlv`0QUuO2Ld{$E8rmjP9{;W03HKi9RarpfE570G67s10FMIjT>_pP z0FMChSpwb?0G9%I4*?$ufTsX>Jpo@1fM)}^f`IP@z)Jx?Yt20q_X`ClYXB0DK9+;RHN70Imk`TLZw;0w8E_+FuEHbpZSdz!wSl zn*jJdfWIT)0|5~3eWu+=z-Izr1ArG1@QE!Iuob{Q0DwgGr30Y43Z;{n{2fL{f` z^#GhfK<7*a%mcW-0Va7p*pJ{WM}dRiLer1jcD&}+8w%iPz1(q99JZZ+Y%llwTFE%;;-VhdSJxRhUEi4@AYI60c@Rn!Y zpm-tZI(CXuv7nfnT*p^ROt-I`)4I_LWFwt2O1reLG9m+w-eWE8*TlgxLyx(k!`8221a9WV`FJr zki^8FO!8r2p!6ryraz8lDN9=^%DEM7zh~I?`S9y69Q^B57wyDdwB!!B9kG*s3B{Hn z(zTY|vm^=zN0t>bp`P?R5J45&JM7zE#c%LdYvIkb`Im+Lh6UGcw4SGa00sF=s2@;Y zvAXTFMQ^qj7t4;QL>hq>s07aW$AoQ^rx*2Uqb2o4^Vibh8>=UWbyba5Icw0ylXN&w zE1VjB4=&5RJ)pz1sC%6~x(5fO>6XccM9zC80gR|!UGeZF)vi7zFKC@4mWEXJi-VW# zG@5*gsCO$?oA3niFialnU`%x+8B-O93E-m%TvWJk1!ZQE{H@DZr;{bocT!1Vgm@@f zL4AJL*@IR=^=G?w+;!@%bAxoAcZly_mNvwSzCrUVSS97kH!5U$lz>>bQ4)FX1Py;8 zZT?d5;|B!x8vE~1c`gB?S}oRTSRfpOML%?y$fak^z6?FBK7}o7NUawI_RxEWiD!rHy>HRx)G!r2 zOr~$Z^Fds_CfceGZ+fq5Ky7n8=_!UAfldc0i0+j?j@`ubF0#jQgM9u8tj_7B+_mr% z1Gx7WHYTmt?Xd8I-o(#tsq4ylk7IPgU62f_7?WS`Hh2+Gr3TZ@K2%*dtdfx{CYp2J zQ%Tl`CCESRexygbo2o$fq1#>-rlquIb!;Cmg(lWJb@iWqcr-m;3Up~o5eI6T3Vt88 z6!LE)^50#Xzb={|F9o_OQTOgo!q`%9FQ>UPRm>V>T3TS2D5w*7#a%)O|1IeLbE12r zuMS46z4#lpht7bU_ardNw>-VoIaGA_rH~+~mmSh(!LpLh44TcITe_ydw@BMI(|az7 zD=%DgA^`-?u=?W}7V(U>nandtQnpGWm%l4AIr+w9gF|)>ZnD$J7t`Vm_7Ax=iBi35 z=0nlbh26T#gZK*!;$;}b@4!=hYk7+wDW?GRJrSOudk~7{N1UsCeXey(^u~mr`!pw>7$hpfMvOm%(JW&aGps+UZR}IpKuN?>v9H zb#5j)B#EO;Tb&4M$7oIO`F?6BsjsDRxTH0AID27dawNa$vRcoGYE3^Ycz+?UO!xEt zxuTxkhX*Bw0-VhH9+Y|~L6hee3$E**jQCT;pXL7ol238Xc7v=Cggdu^1Ur$E=E!GP z4JT*tB}YJLqD-;pj-?hI$jfuW1-P~ zr9tO*I|aY748b}IM&Pysd=AcJ?;#nFx(bpiEr=r*O{Ay6u$V8H$T;jS=Q1og$X!~a znI{qF&*&kGsl|k)c)FvgJA8wI-C$$SA)WW00iSDh_;8&-h9hoGYYfp>bt3U+bk_TO zcvFHqbu?zZwmh*#l z8l~O$n%V}GH1;T;k{h?3eYM6qZDA21gxh3>q)?91sE*>Z3@sP z0b>+kj0B8TfUy!VP65VAz<321F98!2V1fipRDg*R(5?XO5->>tCP{#&0G$R3i;W`L9_TPc$>HdpJx_FiZsKCFJ7-hLHT8Obb^`kXY!@s5RS8 zBEJC`oD2O|INht1Za?wY+eA>I{~Ck;MBoDeo(k}v8T>kd4+3}^z;7`4O#&YhfZt;9 zDgrMGz^fVj7x@*72lh=H4;Qu6v0r{s9IOl)K;IAb3cnSWR!QV(Ey%NcPsVv9ZEUMZA;yYF~d1#V-WniMs!xL=1x-|8Io&!ytk80dN+c&?_Sa zne`RGNAxDcGw@czTjdNem?A~=0^+4oY@1+d(*$pR0Be&{hvC;@S>>Ne+i^yL-}C2P zEhuzi&RpsJ6|RZ$DY&^F9sv_X??u5v9zy1N^>#MaKt@N>tTd(IUdJ%~T#7EPD$t7K zM_3J-a*nKrX@d#d1(P;s9Y3oeCT|xPa&^UK+}1{~N!}*5MLan-G9%l=Zph@2E|u8~!=atrbVv{<+`^x+%ICyTal@o5EH~DNj4zifaVb+@IFGDT+5(T8nr- z1l(qW<}b$?BE!^ei>m0KXUX%526;Apm~=_Q5VJzWm>Y_9XB`7f|9p#liEz$LELlCj zIsOIIeVoDZFT~qi>`f1+5CR*Cyr?Zs5cKs3=?Fl7hN$#KL|(QeFHd9Y zp;+6$*n-Lkl;B@NT(lehRfvuHpU^0A+-W6z3(6)aiH}O?a zAU&`;+mKk3+b6Qko~C+1Yn3 zzOITYoT`rV1y*XJ^v%(5X5UOh*>ou%?}on%xbO~o?@ZD@;*Ati@DPby(ufy9vR09H z!JCJvZwUbG&{&AsW8^$%YJH}rJqCUlF<_;lq;m5{j5s$2VjH%wY*{$03%EpYLMjA* zOW--xU|1L!{+`v~TL=uPZaF-d$KtTzZTP$Q8}|Uk{jlG-!_P(B{8$_dglV-VYtuR^4*%QQV?_Dt1(t&B zLKzFgiAZlr*PmyRh()_&dEOo4=-hb_R>()cT}Zwd2w|Bk3hrY` zL2|4VBn>G?at|qKvMrP*{}j_Mh2=||;*PDMWsC`14FBEWqRxAwYiDhw?L`X$#w1rK}0zS#?xk#q@jgSgf55NDR53w(9v~T~H+fT1atHPc!~;SBAw~TY&&%}kjD#v@ zDefql*pVrpDLSKam*~e6u%T8gENEL(xew*(efQ&G^!*MUFh%$NJwS~gP#^jredt5s zhdvN|=zoBEhCux=qkhDa``GZS_XO5gTz0aI+)n!k&O?!z7u;&d*ER4EO&4b=8~FkM(Cp`L{FFL7t^J!qL%M-sL=HOXF>2 zDI+Q>S2u2;V;)!FBmUW6-p|*T*YvNH^ukzRZNi|bTtUP81|tmL1{b`K(;WidMJebp zm}tnH!Ju2F(j+z5ruT+IdPz!IZ}^ug*kwVRCun!)8S*oAQJO`$CqeP!6qSzF{i{^I zYk~@1i%>d8(97jY_cy`#!#Mw=9DlRq_}fB`zb)lB-zqZBXUcK7IgP`a!8rUckHeYq zaeh#2oIfke*-n>!GSv|a|uyWLZEH@ZO&rAB=Rnqqy zN#DE4aWpqFj%G_b--YOWc0lL+K5j3e3i!2g28zo*2%K;qv=;$IlSKVRaXNBHLl z_`hTP^8@_*ixuuJG=Lfe{VaJ%d}|-xBN0ut5wpV_4NGF z1dlo+t@Ke_i*J9C>>6n3l;>V3$tahuwtd#^WX`)j#nVP$`y5$ZhwHi)ZA>@MZx`vk zyNW_ft>t|#46G-EI{+#TI{GrCa&#N0t9&%0H(z|8s-qpP~DwK!^Q2)|P8{ZiUYH74Qlj z7t(P8(OReQypNO){q59q*ePlitMRR{=gtrR#5CVJ#5ZA3$|-N;x!My0CF60>cvq+hquR+MmL2G5BL94=;byE?D*xf^I4gf=+br zbYlFLcd>X5*NsxfHsq%k6HOVJu`?xB^Ac94n@#?YMQT&`k5AL~(P?14CC4%SQvgWP zBU!?39-?f)ooA6c3B*>a*Yif@MJPDVLfJ$?rL3Majmk@ao*j`#pAgSKN4_Jsf&7Fq z7pYH>Rh%LtcDyM5ZL;E-sxPaP+4A!{0iUPf^{94=J|I>`RR}Ro z_IghCx-R+XsJoU~*L3ON<*jOCsmXHx^5;?xJ3iHGYIZr^if@wJmS0=jlI?;LMJA)pC>lSov z)+}YpA77-j61w*!5enkW`I9r{{V!HgxwK@m+%hBNd}Aa{d!GNANFSMS-m98$_&fL4 z#-66WQzz@FH^|TGgDlJCdAZbKSM09i$AyWsjDJ^E{mQ0^S2Lf|Vg-8p50LYxA|1{5{Y9RR$b$kRY!AKkw|#A>{u{}zTZMw?bhz#)ZZI>z@yFiCKH+(SAGc(T54~ppy zqOXa+QsrmqhTvCtm!BZ2ApXw?QlT#G{e0MrAR~WX_z_bgyb`$1)O+WOS*)W$KM_yz z*xcl8s*_)2Knm>p6L&hUf?dF$EV3K&&jgS3|BP+(*766J_Or&|V_KAiMc20SmY2zN zFWjrPWopvW?cW*Qp$2mb>Ad{kQn?K3Wcd(Pw+mr7-9)LVc}NBTn^{eFW*<(fysb?w zyjKR7WvvDeIgCa*W`O$Qh!o8LRJ`Epk~v7LulH8%0{;Vik)U7$B`^Tqh$6$j%ImZ# zCsDOUQPBW=!y-L~9EuX@>#P2&4SrM=_7UvP#zJg4GlH zt5Eqd(f#FDFH;f=ty?$3xL#kIuoJ1GMR0dkLq% z-tD;SVIN~DP~s}T8xZjRVv!`XKw_l}+z}#uPGOd(B?QX11>j`VC#v)Ki`01>DRmx) zOP$9NQs?1EbRLVP&f_rBc`Oce9*G3$JQl}wlOM!%lW)s%mdJ9Bk>xC9{O>@0SCRP3 zgufEt*BO6>&cjIEL zi!Rr2CT9sr*$q1R>hZoI`K=?T0OCQ81yW!wi{x8r-xQq^XGSFixY7uh+eap#aAz_4 zCe|EvW@(b?9SP~GYjjFQb^`M-*Oc$f?c|N#`_Q4Be%3h++Ar@{>l~YOcf^wnKJ1r-?p~{d;tTXC>4gKx%@ykJQnBE#7Il(Azdu71Xi7;58qXh+(v4JS#ue?9^4K3+Q5M9xsSWTn- z#8|1!NGoB>pq?R}x|XiisfUjIYSrueU)isEJrDKztyd1djrqxdI(5`TPs=kS*u(s= zb`KNvT<1MZGac?>_Gndmn5Fe?>DXaRdC#lXvWG@q}X3X z{py@tD7+FKuT6zis0*K@ZTLfOr&$(Oy{OI{Yc?*0>5kD!$bILg*=~mFvUghX@DbH? z$A0lIMXRcLy`?6NW#Za+lRt6}@MhA7%Gg=ohZrag~4hx?@Ru}Jf?ZG>nPQJp;3 z|31ZD+SH4bDJuk(}KpMISSfAnxJesA62$Q?|gyE^s60I z=RdUejnumIpR}@S!vB`azrq*1FZ(y%BzCA};V`96{I-sw`_J59=aXGpp7OnPR`zOy0%=BZKuJcR_n zQv(6eVFB>e$fh0mr&{ys#Fo=I4Q2XMFy>Jo|L8Q0ej$n$(t$1;vgqGs-OiPDJ5Sba zIalRN$fD=Ss{Dwma!yc{Bv%Ch?`tWG&X;y?3#8o}-g{4Wh?9Aw@{Wz8~5cE#nbgAVnLMsS{?DmJ1`hi-@% zEM2%NB&h!Yb%3-g{WbU#ZQ^TAmudr)l>3Fjs8z?cUS3tI~^e>&?LRK+A4d1zXmwj9$-NrkM?H| zumMn~TM8FNJ5KJZ!t6jT6Bh*b3^OA0WpG#Y+B54?cifR=p``^v%k@_e*(PAq z^g!|p`3L`o#~(`yf_ZN*BsvIQ{(r%0NgNE?VuEZ7QyNP;?ItNi)6qP(zeZ}dI$yY5 z5e2^nS2SZ9_?EX)X~)|8A719_-fkp$?`4qZ_wSTEJ5$P{V)*WgCe4(0yC#_F3~zUI z#?sb(rpbZ(;LiFEyojnk~w>43jLxT%Ke(9)}*O zB7VZ=t0Ackptk;$)}M%^DNfdaA$CK;*KN8ri&G5OscIEN0Q>eL?#9bD8UUhBf(myh z&aw*&yq<~dpY>a(@zFYo#ff^gY#f~AdgiFj#;G>bJ;%lZ65DvPqTC#!-btIS1%mc4 zyp#a7%WuUVi>=Wf3ummsm7#AFf*+c_l$W&}E1QD5P%Pu*$2p=a99g#MrBV3L2XA_O zSD}&-e@{44wkL~W0g+H!Zy%)`zpfTkFF~mO5;66*DpM?41^4_=r)owz%TzH=kkl?Tz(19;SHeJi{u=BA!AOmNa$NLexf{ zt=F}T);?L?Jy1CS<7p3d0I_c$u=rfx-cqoj=aEKkifQD9ObpBK$`i~%f;9UKl4c*7 zW?`6SWObT_GR?k&;MrH24$&D*xrWeK#=&;l7et4!mlmt|gcw4h1hz!UhLFGhDf{di z*=N^E`Rh9FyAkNSt7YF^MSXX5(06I>I{>`At#pmYq~*o}7qri^{V?3pmEoc%Pezyk z_`Lm#gql+O}aTWbFz`Rq8BBU8E<2^?km!L6_;=si%O zJW!T#fC3z#$}qH_h%){il+j`HmQm#&;%~Ysqmu_c$SC!x=K1-lrBqAT+$0Yx!IrJO zcdlS(4PvOV^fyb>OfjrJhj~N6DNRZ)5$)gV_*+1;Zi|G?Dudm(MVL03Nz(V!B|9#( z{btd8c7wBKL??Wyko&9f0!1aalHCWjnqYQMW9p(!H3sR@Y=Bq;t~JEQtazOWL28TsN^<(k~%h;|#)K48BFZm-+opydPQq`kI04&5kT@dhI}Q zpi`_Z{zLRk`x2xg@G?+;H6-|&S7$Bw2aanYrN5vkvNI+vzgGt>7|sX`iuKGvnv(b5 z21#M~SM$DJo{zM7SEfTd73f&L?4QpWd@+L~^(@5iswpZ7|rY7p*v=Ym_Ob zb0zU-WGEx1yF3k98jpu)(muqyin}*!FFV+PkEv@gK3mHtgyeB`I;JMH`49=+!Ik5e z8}Q<_LXsH;ro>P_A)+VP_nx8ki88;gD)Y!_nfI-&%yB5QPL_!mSrTbCGft__;WF2& zuEcwy5|vCMyr=vE@%#pL=}3d1JtFAp#>lT*W3=|$805E3Rwi0lbsKRy)NTKM`sR>m zJ0-6hN_E_5b#~UPTI9_{U`Gj4j{k;j(OuIPM@HLXtF;wQoisAiN$^~i#22O#RV~q7 z(-Q9m>9}riyZo)Jo4#g5kI0Z5xNd7BpeU05ND47kB;`g(s#2F2h^{z_>nx@o?SEl= zPOoXtL!xy)b4Z;T8)zm9w5uC)dQD?mK{~3}a#64E!g@^`yk1WXsb2YLy}lE%>})$$ zv1v6GTLUKhy`p!t*P5_i3u@|hM6_P!kJq`qMx*cEuWqjeHPvbh(rH5)hckv$6}Or# z#LE1q7SPRF%R6D+%NtW&-dKC+<=wsR<&CZ`Z`|PJ9T6>WXk9yad2Q?Peg9tf^2S$} z_w73LU*}KOxx5M0eCGRb+;j~-o`*)PH4{2{*N=^xu9|TJ8s>CCy>Ng))@$M5 z^%@#c=c(WS66J$nu@iflPKMgc;V2*o)|AQt2@Yw%Un*_4*Lz>4!>A; zTAhT?`>47Z_N!?IFGv^ED;d^n|H13^*LAPgPN17ls_V6XO}&;IDjn79fVK6{(8Rxn z8u712&KqKRLnFrCu^&2Kp>S}!?syE5$6SK zKBBT)nB)c|A)bjlU^05J*4?XSt$SFEhpmlvBS_*^tm7(HK222BGv9ALil@2;)Q+WT!CuiM1dB^Qb$vb?iId37N#-M5C9E{?X(+6s>%iB_kk5vV#rBOp!X zSHW05TD3tntsfraGb@M8XD0PeFvXClmrUX&q4GEHrw125V-2~ zT3q>|;^HPfHahnJd*w57gs4|`&#+nLZW+>UA6eNcLq=Z9A&T-rta18b0d$`LDqg(c zMIcZqx}zz2qA$~7hfL=JLvw zGFX|A!5K0~_ZKH%sXI=*rmK$!1%C3~j<{_kj38;Rkpc_!h>N1n1>^?2sAXqecdGc|R?we{-=zt zgcmUUmk58x@LwVP4To<KTAtLj3P|e0WSZNBd$lpbdI<)&89ej{}kbFhTn$p7>2JzxQF4_Av})ZASv;9 z5TLy{`T>L|a`Yn{{V+iLa`Zz8w{!Gk2p`MvM-d)R@CacSl57irdkz{VYnyb61p7or zk3p$;__WG%7Q@8YF~fn&BRp-|hJRpU;QP%Rw9I-uW?|{{?{v7AiMttxV{WLi)gEQQ zIXezcmXd4%RTNPsjHrukoTjy_$tbyoheRDI6{+XbWGtm!9~euKsZ&OmXH@g^w{|tY zcmj387CTIPu~oMiRjm5$B7S?zxW!dzii>nM=tjem|19x5PCm(^OAil;PITDXO2Wc3 zpg{zgFNSXi#WIz5ynav%FEs6!>4@#QtJm0`f0bSb+jFqgf2XBYJ8~9oC+ot)(l9ko z6sUs?jonBZzNz7yiiI1m{+p%^QNye(9421v44W1T?o)(qwice7ZXmfJOGk4`j@^3& zHkfmT0pqXa_;%gMdEckiKC7T3;1p?%%1TjKQ(D(e|ISSHxp%viDgR!yBHJSNd+t3r zPPV-zEX+Hkxr?v!B! z`V=_{#3kRV22)wu@D06j!L#NKtG*HCjDLjUcb%*ew2yI`9AS_8xFjRoCPAoA=(lH+6SscA41% zJAjnOG|C7JtiXzbV!^Jg3Md*>RG!X)ZCPTAB_h#iqA|uq?7erz8hZ?}CMs)+w3XpqDjWK3Al zWg`)$MaL&|A1kgY`8tKqA~Da0e}%!~+#oBd%weO20$P=_W`bA{G=YbcYSwyJ)ECXN zbB8I|Q?-gc%?wXPyC-1NOVx>IJwLHGcbX4-bESnco%0jG+eQ+|&os$B#l_4^`ZH;RvkRtfX^D(3*_H(;@ z1$>iMFP)Z89z~T2KU^M<+p%zK0Qj18EDc^wa4Gztrllv~_fLth{_B_cq>EkAmtKUv zbdr!r%gy51qAbG`^7vT1ZwS=tS{N)qZ3^`qxF5`*A(f!^N>D0T1s19T3s-?fs=yj5 zVS}qAi&aBKb_3h&7#B3G)1XBJ5(kb(X7tEw3a%+cnHtht!IE{+#unR+i?z-mIG5X<64Ai>D9{e2XHx947VNCsph4M zq^+FhL#IQj^BXf2Qi?sl#*Fuud(K2_r1KNVI2#|Q%EnoEhIMJ>m5z=)liSrN%uFkoLudJ{7P*JKZNpsx^=Ix=kx zoee>{sY6Kxxg1P)D?zAxKE#3E#?UXl(AydMl^1#kL%;Sy?_?jBq)!@*zmOmZt0%Ik-$dwRt5p!=vApwqe7WS)K02~Y8ZFZj5~(;5M16=4j3kK9`0hRWZf6&K8P1HU=8i5I|6-<<#i-$mmt)oSFbIw$ua|b)Y5u~H+ z;AfW3rI#pZ!w8eMNW= zuR?QB#zYO>D7x&91$vZ1q8whiP?bWFxUB2OB`Jyda4)HH_TA=L?5Y}g>a-ypvKMto1LKLDNdh19Qglt^PZ9(L&zV=CwK z{~yX;lyDkVbzVc7(Lt#kT@rTbl}OwdFt%Zgu{~s`Dp%pNF=A;M)-R29@j6;L))>u1 zUHYXl8jr-H#x%--Q`U50}05;UB+q;s>v_I)w5siEZGd@F>4mWzy$vwk@>qcF^`@Kp$GJm_8J zfqd*^?U59Mm)*Get#3jlF|Tq!ADq5rN<3}uJyR6oZSYV`NN7yC|^#s z=68j-e6bjy;I`xHq40bQyydqqek~(xRv!AjbMk|V|AwF+$k`4^AmauCai-@>dN3;q#JIWq%rpT4#jP#O|Kym^>W04H#jS%QU z7}cjcd~jL(Vpmuwl{TSN8ii5`vr?IIbyaduEI`0r0e=NS2N#d`F+p>Xph?BUedPpA zFYfJQf<_@hjm250g=5fO=8<_sbTQQB3GMF*9bkpTeFH}-%dvlyJ47LeEq8#j9J?yH zy_DtHImzv;EXS@yZaZZ;b~JJw?D*vhDu0(@M=!UP%HIKF=(|RhzXQhLcT+B@${5nQ znoHw0>d2TjWK2lTjzh-mlQ|f<(urKjW%faqM35zo$dY1ad*sJf$d86h(I3-d`aJS8 zh+qhHc|!YpLI>C(+~nOZckjYW8rr&d=9hMU8P${u*>B-)+Xqmj?}Rmlrket-x$-~| zl>)tTI7DqU2<``%>sfg)4 zy@L^?+oh5+XVN_f&j=vDi=0p4iV7d?G0_K8v)ibv@h(v6gN;+G^ugLhAFQ#m4_2-F zg(F0`1Y!>#dpwij9d8sl1>W)0zI%LhGZM}m;%5#oe7Q z^RDtfSKQs_GViR~<>IfZvFw(r9WJ^f)YIRJyZc+_+N#|x^P%$ImigiqbhgZOThP}s z|54u6GGE$EPs=$oXPn(e__P-mWjq5WB;+*iGj_tA;s>Xnl$Csjp$h#kv~h^PQkdoi z(0KSdh-7+_B2F2h-pM4HdoIRO9?s!nX_(nA6%S7(u-G9lqG8uXeV4t1PW4pflpow297^qGU8))E9PB ztrNlN<0$ba*dfO4aUsT54vseA%l9Vy=%@~JCC}>7k|lgzC!RNm=k?-wjd)%wo>yD5 zg5voX@qB<6M(~m#e4!;k7;~pcahtU)?Q;h7{7w<)7tqUbsg2#|@_h6&I3KO{K8+85 z?{hj2ncv65%{{-jKKs4(*+u->%lz3({Ml<|pIu~qc9GEH7h8af1>g@B;15>DmvhGJ zIpeoD;}0<7N&c)~Q8%j4``IYFi@C(gp7FpIFnB~lh4br`=j;QAFa>s;m>~J z&wk|3`pZ816Q;i2x^;T%tDX6VOHn|&cfm6*Fp+FrA^P{K^f!=?5hNd%K}-nh7Ki40 z@C&-Yis5)%7Qr}Zo&@S8HKH)nl`vVBCOMB%h4oZE@7GfY6b8vwMDJyGDm)|Sawt(t z7+1n0w>^U+79O0^E@bS8(oR>Sf7w;Q!E$E8tUjG4ciiJI;k*aeE)Z@>b*l`7r#SpYJZFDL>3f9Y2{f z7CEb3W>iJjFs79*!a|EK38@P9>Kga4xnYBHKJ^lY-U29S*V%j>pU0d7RK;FQ*l{rwdY z8=-@4F=l2p#w5Is*2bd9DAKu2yl&P>xwi-!Sz~pTetR=HbK+CwMh6L_lu{-&*FD-wI%~Xlp0!S zj{6vB;67AFw)hl$5Yv@TTve+#2IE2FZ5)maaLSAhfOl}USyy8qkewb2l#Jd5J1$zZbAUXy)^z{a)n2I%m$|M0;Mp(w!Kjl8>^7y8Fso z5lpJK3WqxjL6I^ePPZ$gbaxRZp8|BWcCA%oN%y(}Mw=}Am2JpJWd}R~m8ts0TRq5kG6Fz{?p!ru!t!W* z{0a@FViQLB-wNm5fS<&kGDTJVZ#A|+@8ZDDKifX9$7kKH2EQ0{6exRK1yTIuuma|KXXQGS#K&q8=(Z?*q=4-gP7p$5M6&0<(@k zr{D_b@w(_1xjS)Vg;vlgDp;U{>oe9>pgJ3+CuNOrNYa^!zqR#r1!E_;6{=hsew|gF zI2chftY9uGm-0?rGsJD}1lu4u)d{vjaJmy50>SN_;NWy=$LpNNhq8hqo+DjZ#1_R( zEo|x8O= zm2=N*!f;lTmx}t%^m{ywrIk*Eu87|5bnZgqap-rEp~XEPxJNY){7IgBA1=a6sB1#9 zxtB(Fj)7U)8=Jr8H}6K50K)s=xc7&Bb>L7X&bE(4wfB3(r6FVaJXF+sI7c)V<&LgD z56N_Oby&-e*XVX7b=*)T+g3W`Ix*(1(y}(!IoC~TO*Qw%jX-*KlJ5TI)f(UEs&i#i zTFH(oO}O5ZST>#8`)+f6CwbOGD%nZ}aUzo%xQ zr&y4i(kd+S&%u7f(EhZA(o=`W67JOQStHRByj_9c5eVWQElnYf_AX_Q zptvWjxUjyw5txqWaO-$?QYNC&#;0h2z5*Ai1-zj7Ji8f;`HiQ^MkO1yz8pk|+Ycf! zHH$YVasy%LJ?_0?iF6Fx4e{=9Y1C>d!n_+VbzkY+iHeKh3$negMx_U|A@E*~XL@Nb zo-Xm;0p$5k65kw&lQg(22lvBfx@1i^o}HiW$J0GGyjCg_NJYA4 zX=0A)0{AV2UkQFEi)Rs!K1_8QcS9SEDz3AET7!ynI8dUAJB!Ql9DrskW~eLX7!~h; zLn9jQ>vS$A<&-qtL8pd@C)3w^*M&$DcLwXM^~&xc4)D=B>t}tV!p) zUjop{w~EGgo0ToS;0CT&INNs4Z%7#$w_E9Nx6=1<`Z1h-lsmn1r^`f~d(7!#77sd+ zZ-x1)Y??}9SzZF^CedCH(!ldU1DBRuZw;Rf6LYR_!-p&Hg2I*3B@k);!Y`^Rtt@{L z>%U&P3ZK~bI)Ik6Tz`F)S=%Pu&iN5#l$#*S$#Vyz7o1o($=aE_#@r4NNS^yG!Kth@ z#u4!8$#*H%zA`^;`kqWUO!(I+OH~A>pLWcnOK|E^;9= zU3?uZG`g=Y#nVzknPEz4mm6#X$~L7^ma1_amZ+#1O{JahVZEGrLv@F5<|0UK?S9nO znE%A7D}5dEj5qYt2DymVeITx0L2z0ry;Y4CVaKU8qQCt;A-peR8P?nKJL^O8x}K`b zw`NirljfXOX8wd@G=^sWfTm6<&A729mEvmNHA?9o6%rEcOQoDpob@UrB^OuLo#V4k zDlu=Yda!6UO`aq9jH%~L`qEI8hilVz90wlDbiCT;0hnCLY z6z(i%Ogc$vcRgk_TUqz5eRIbHV%m(b$(Npiyt?OW*7@X$v<*C`x@8QHD^bk_w6I{+ zX}BdaT-xO(_=*avQx%4q3n9p_>DlW}v$vd^aXbnk!Zs9mE4D$LBYv!RO1D zAUnFh3)B6>xSzyah~tL`(OLTw0(_(9OOQUQXt_YpJQxRCA{xJ#Lp1mRw`b@|&`(PU z0&MD@>}v|})t0K;5Q=-RB;hZPk)|KU_g3P4acBj$DdU5>?qzRfM^)n>5NIMHu+{WjH9xjC}>mX1)i^#hBzUD_u0RkGRkD zRbpcRcz8GtiTeHK1Rq}37mfL|<70kWi<38?dV-MT2&|u|Cf=M1@+&bvoeU!G9=)Qk zN!&fE#k4Hmz3QqUanIj=c+X#xUNzZoMLm-Lva@vXjn@66TS>RRWYwuE-HDD!S)KZq zzr>TuBUPt5ytVrh*X|OmT~Q5%tu%L?9$8jRn6+l<-aIJP(oLIDHzY0fidLr@8?ayG z&aAHRA^Ojs7*V&&=P(IjrUHrehS(pxuGbH-K->jEoDkI5o*+CLp*0GSPcn>g|b2Uc-2eT)MB5ZrdtBDRN zFXB%Mid3dC<`*X_K>smRR?K@M$bph8Jq2V zQ?518CfRpkts7cl(56b|22EKvydqUcMJl(_N1clIBs>rNGQI;hxXC{AV2$|<)a5eV z3U4&x!4L-c;m|W#07x!FPl@@hOFBq;C))mx>XF^X57n~S6g!Mi1}=$qe_YRZ%^ND7_e15=IA9*WU36x^+b{DiQZhv za5ef9janvw4gHcv9ju5>RwSk+=b=f6`Bxt?;axTdmT^bF`BUK0OytpL$RoG*ZwhNo zy%PbQrU=T``$GELRb3US!{&lnEoGQjw(2-q+V_T6- zvr=liMdTUtSJ)Y0!#W0m6zRD(rF5E=m?(9n*SXS;pt_2RP_{jQAH8CKbfWj8Kz51s zU4X{P@`II9=GINom}t~9V*^l=IJnjr;7?=vC5^#gOpgU(LGuu35#S%;*+pw&I#f02 zYR-AWQ%SqwG^%<}f!oSgsx|keNyou+JE;403%uG7Hwq|8b6Z?R5yC;}Jg5L_EYTqQ z`S0Fp`T6xh<5|QvfPI-z#%_lbo~Nxv#y9RJtZ);)icZn8^xxf08?~Q6O?RJ&%K=V; zerxtI>MLk_sox;xF!ey~Pz*2JW-A8an0F84fQ4Ls4yOu6S# z1+_W2i?m#JE|fzjH7H8P*VOx{Nc5OUM2m0f^T!nH44%h(DgvDgQ=NrC+-EG4X~lw5dga(P zsh;1plwVtE)$R7+%ToK=Zys3Cc&RtZ+_|{_klGoJ2RTM{m>3}1^pKQi@JM{uP&h&_ zb1AcFu56+&m*4;~jqXw5GxaQaby8+qL`n?cI!oMh#|QJ-iFy1B`(=~w*i6675w`%< zxVA70ZbJpG+c8gBDB1%YV#abM7{AmkoC6;C$u@kmS)8I-lz6i^)rRjR55*B{l3LmL zAuRD-a);wUyd!%FA$vl?jD@&^Ei+z7QoCy3#e?#KEWFNVrwW&@yTcm$QA)WHpzkjr zD?nQk6!SvfhwqmLgM8c}{U63ETMErCwo?&2%$*ypl-{XQUt*~5wz9#yQJiE5R`ZfO zx1gG7&xWx`C24l$kgCTl`f6uUF)UgxArZ|bw&JA7cDs%=+J|!xoxM5=jLOJ_c^c}$ zBt611Sc<`72z6vq=h5O#7!MpZPV;y%+QOZo-dFzB=?R>U*}A(4E{C4I0=>*D@GF|j z(GWhvVeo1m;S(Ru6(7#6{BW-G;au;BZ154!2*}DV?s1ufU?=GIgYU9*HhAlyCNZ#9 z!R`pr7$EYZ;4C72K^Lk!XxO#0Bj$P|{F$TOK0hvi#!rRc-3Cre!j$1dFz4XEtV9A2 zrK2gw#h5H7rQb>EcT$GY&B603yn}ha4w7%uY>$sq<i@|D;JV zYdktA>zXlwodwNrjKsHgMO~&qneq6Bd+%5fTJhY z!T%%j34G5dG9%&Hoo|BwC*%iZl7ZwwkxVSm4FAJ{R0BNJK;I%ugU%@r3zxPRP#p|iN%*U{{=3{}jj*D^Z54^R*XwKBttfG#?HvVpl z-XPV2Xg+l=fIte?;}|r9 zRw$J#3!b<66o0^OkvTrKyBh<(Q=(3SThwp8$bP?!IS~DII#4_meq(v=DS?x6#a=%E)_anr}WUSArhR(wn3abZ&Bm(xvmh)7QHy zYWX1&9Z})Z9O=^Xdo2HmczO)v`i$hAbFdjS-X-we=VJ5jn+5&J+wQ4kfo@TA|OBuEutQF%IZAm7wz~LFZS3ertpF z6d=`aUVy-z5xB1nY%(uI=pG22YeCK5Rp$761nuBWc99KRY$dzc`f{XdF2a~4cIrRa zQGSj(m7~l{XhU^V+7;wnU95V}o|l*D;HSN?-7I^b)|T}=N9z{nLCR%)XeR!s;f3py zI6^TmMO`$3L*}0_;L7-U%orl^XMO<9(I6ItTZyh40O zfh*mCtK5OBG0<8%{a)!9)LV4lw$l58P;)Pc9Pw#hBfg`+wPJpxO{~Ybc4mli^SH22?UX08vmPOR{I6HF#viwFIzW+O|Aar7GqTzud8qY?K;XX7b(vA5* zt$8!e($K8p8+|d2rVAs1tQO$8LQZSX`R*Z&If>5YmnOI{v+8vwJoiETi9}(`L-`a= z!`Ed-$je^Gc1w~WFM9*ucjosu@ts6iW~pU`j`*v2Ed1PZa&PB#*~;3NcT8+?niiHdCOntUBNo^@o19C!2-`o zOr#0R#73F!kifNb^PF${cycu=KDq-1i1q17TuE#XSmeKx-R6-5INLcTvD7C<{G z@HF=cO81kPcr8_o(*2Y>@bo5QoWNAj~V^z*t0lgN}z9OH%=EB_X&YLRfHX$+~ehm#ODh95uOLq8t|;8(z-7qExr5$i7s*0brueJ z`TMLdp#yX;1CXE5U{(*Z)XK}>u@)2sVrutw48v-~?iaxP-8VDrLu$ysrgNK+x#=un+!gaoq~I-}02JCwq|h8I{IamZFAH6RPxEc8zED%Tl`6w}003d# z??CKH;sF4wnm;TTl4r2kcZFO$LzujWq1htpeXPrWS3o`xqWO%s8lH(%70nMSbel|P zu+As_{srlGV;wcZhh1!V1qs5nV|PK?1tf3=E+aTnm;>jsoyR5O= zC+kbA&L#+aJ{EGdj^yeSAw?ARsavib2+7q>;tS(51pQB_DN6LYFz$U;x4Ta?jkheo zTLSR51$f&U_tI!_`avj1s_`DyW%n0YVPBGhf)3aFNP_V;3X#UcN3x>n41s>E@v$fV zJjIq}T=0G{*_4c>XSe|<%g0!HhTWdhU!V?3(|yoo1OdQBm?#S`!1s%2oJ9#|T6D7I z$wC9})p=dxy*ezFr=oa-bL+J!xQtITzamZgHCA-yxVUU=Kx=7!gKRqm*@ZFD%yw~w zVo-UJRFz)0C1Esxeu*Fw4wSZRlPX~FI1O|8R-;XN-(g$3v#&0$Y)o8g@5F#oDdH4} zklhjX`n-Lm-LJOxW^5y!_OP`_N0AN_CiT91PTy?CRbHI^aMWo3sDuWV@wWv0d@lBTfE zwRQOY&N}dN%G%F>e&X@|X7M%tjwJ`44AD6NY) z8F6@=+QSq)_Y0cHD4D_R1N)5+BDlX!@#F3&gzLtCkxNaHCLA#>g2yLu1Z0O_H2US3 zpFeBV0=b@G4s3R`_#mWMbY*KOq4zH939?*naGvHR_4RK&CaOi~IuYg<~^~ z1(NgdbdH!h;q5>$rkg*bs5Ss*Qv}aYm!lF{WkBJ&CFh$X}yKpB*KE`lFyGDnK!e5}RCIMxS#nzWc?)1yo9_khp&9jfpT z->(rz`ra<{(}KIxjlg4k7vjO8eAfAYBD|~RL-IRR;}d+gxGFa>K8#5doYGGQKy_Py z{c2c%jtUEq(`nU1CL&@;dxDqC=AcpY<9a-gRrpJ}Rj5<5b&9NV(;`O7jF9moa(lW9 z`D9_7r(qx~TMB~}50LB-j<*(1wc9X#of|6%rND4?*?+KQ^dg4>JZziUOCfT28PaSv z?6?SRFz}4Njj^EklT^XhiZfTf6J9~~CW*al`2D6|$05Etb;>`W<`iKm>6F0=4mWbF zOE3DYL=LD?Emx<$bR`$9f^Ol7gAZsz*PDXq)6J6QEaG7PGRV|g@l~?E*UfHsnloH! zx}7x3-DxgyrCDyJ5w4JmoeMcq4V!>@ygQfM?OZs5atW9xy3?$6r8&__bAmg~3$8RL zIB8CDr|EO0IjIce(ng3>tC~N{$Nh_RsOl58NS1bl=V3HHc(P*;hX{K})hBa6mE*(m5)5s zukvEYZgt)J_UJz?%G+CAm-Rwss_Q=RLdL1<{_Tadt4`Joi72IiJ7{Ro3aCpR)+6i2 zlp(RNx-MN&!0QzSjHxK#>IdxtbSPkClNrErrf@lWRsln%l;%7HwMTU()`A&t+BFYm zLJu%NGyaFxs)1+X0j>p%?*Zbbo>pumb@N!PR_uvWmvy8W)bWUG7tXx2!<8_t^MmRR z*Kp!rol0I7d#qUq9cPCM5c=E>O@+{%c4*to-gSOeF}}pi7vsNQ!9P$kHt?`&z{9Hn zk8lCS8lx68oZ|4UC@8c#v@PEt@_@zf9gy#oj+)N z!N{dXP|7J6Gi%>i;AY?2J+07Q5X#QCLbD)rOTY?EhR|zvXiR2ztI!4@gtRbqD8g)U z>-^Ax`Nx&-wFcn@_Nu;4pnfnQWiolYHl@R370 zcG(xleMVU4qZcCRMn!d8jwJ%f8rrMC-E}nx5p@t@nkd~v)nFYO=z44}*0Mz_#W85L z{peEmpkwAU8qhI2pZC;XZfhj2YaF>6(lskARqkQIP14xaZ5Pi8uDHxN7Cai{+Cx*p zrg|ip5CWenh6u&6S=F(hLZYNmi>wn?wOVSSk4H+~7dvM>;QdQS+WuE6h=;mNT`Q(b z-Rs~%>X4ZsnQ#o(iD8rwbnlseF$GGm(};gMF)YHaM1XiE*3BFR^?8)+?Eevb!YeBF za`hkaj^>84A1Ds#XY3<}?cG~AnbMRNC#>*-MmiO^g#&abFv}T&ROxxlx zkG>Ym4SufN4YvC_OQb1RNOoUm7hxw9wG@6tI))Srom51UM-oRznaf#2VXd7-06k6g^+jocrTDoS{i}tCye&y}DJl>rqgPUeTiEvSq-3x!30&N{H z`)J`$$MbmZ_H#b(+Mgf~Yu*UpAX^<|VroQwF8uH8#OsrAc&im#Wsr4jRIHU_J>u7b zps?B?UJk~g3j(kyc)__!ePir=6uU8VmpPambXkLR&}9sU1YNeEA?TQbDGFxk((ItV za@{s&@qjqGuOS|Y2k6wm6lo6E-oi0gmg#lwF-Enu9YT3t;KX2jN!77 zF3^!2Kw?~UWc6gYcoFcvj4#f*eOxv(>k%BfaaxSy2ie#wLd`fwccT^1X`n1f!()QO znQStgG2k}>ena6`Gk-l77VD}$`I)w*k#590XHByIG}^@6#oO$g$V1Kax))r6C{Uk- zE2JGlXV{?>gf6i|Lo+$IScEbY-NA5Xlsg#7fXCnch_$K1g|pBEQK1Q2WvqNJu+jyzn-b?L7FSQ=xqgzh=9)kFwc_h-OqUYeyr_ef7jn<)()%3If2)>)2 zggk@eC}^6)I@{5Js+mWl62h~=mPW+-2Tg)zFC8m8Ya>A)DUdZ7cM0`Un~%`xN^X}$ z6=L|%y|YYtlS)oD`jLT0oy{#akHenLah9WD#X&Mmeemk+#V<9F7Zrf zh}b*Iku&u2!I8LLHaL>Qlb`H<^Ig@3ikT)|+HGH^>3*g3%wyKBDO$_C=jx(X*XSXxU!rJPo;?{HmB$`ox-5qL+Qe3~kboqqG?0BQZgXPjj%&OFk$t z1Oqd1FIJSU7&Y{$HP7ys?uAxSBK}Q?ig84|gZY=xAg&bSg*cVn4JP;?NO~_k(fIzy z$KiiMxI^*&Ci?ifKent%@S-gH0SAj19o?LWCylg|w>ve8x@7NwnZo`CCkUEdm;li+ zhms98_rv$uQ6Y{Zyc7Jhj%9|vNdVcv-x7i1JdP{-LhhAFSU|!Yh8$6r{YZ_BfzZrs zyb?=rgTFZ=ihYXAuF#(tj$_jSkuu=IEiT;7t#mw<)7aWyiBl{<_{6m265Kf~CO5C| zi$HG$PXefh+0TesP?Q%W(z%>3aWt{rl_(?*IzA*iuF6K7a+AqcQ;g2n0+cpQe-SeMz#`kt>Ri#N~?A$VMmN@oEj64cdMG)q1} zB^HY@HR$p;#zmU=>LZAKA{aC0VpR@vAaQfFLys$iMiJj=#rv?3COOt*?%|P63s6lw zA#Sho#CvTbak|t$16=LYmG>QXw*5V;_;taYT>7X}wK3tYseEWC%=uEZ8 z>J>iDSx^tbcP#nAS-K$NmU}+NWjGBoh0n!1i+T~V z^1mnw2}Rt6@G<3O=yXKqN3@KPK&m+g^XJrNn)<^OuQ5C0N^)L0t>%Zb_i)%KAbYtXb+LLbt&X$Uq6We3;V7x| zMyox%AFKgH)`)`cLrGJ-AyQC1(3isTzg=Hs6A5@2IL6(9a+ znc^P>;0Fuvg8=+w0q7+yD~V>K8HwQ67JTiKjW=T+@7_*dn0Urx0z4o%CeD%GJC(J#YiKg!cSJE-vD2h(fX$E6ubayR#5c5 z!>(Ubm0zY!Hd5FuGX>dbr#S-r>bavBmJ`MXAR`g!YXGk+ zGRg@{0UmS1zf(?;BGBM{D`h;XS(A+?&{=JedywFfIeApt9IJ~vf^aR%a+{VASgl!p zp(pUDzM@1&n$wY@#lIk#t)=%6&2MnuOj|F0gbP%&0iWuWu zQKg?B$3uCYS|j(KYR$@T5R^v49aLJ2r?i$rtb&l5d2$?)wMz5GNn$NB=;`BRhj#ml zHtbBy5+k5Lxt`mJciHFt6~9FwwbrcCobe^2R-iTGYmtM5HC0}t3VNQZFQ$6xj}Ftv zR%C1yWlnxi?FJ9$(0eFNS48jG4qgIdb9&FV@X`tlGg?Wiyx+DmSa4o^RhT0i!=u>! zluHLZ0Ze8#8AHihV`&h>MHypJzNn0ryqc=Z0Ox642@!&Pzsk;lg(+d3CuNNT$~~km z=)XA*T2ivh98d0$4ao)Mrrz&KLaU{ofI5ew_v8r0ERci2z`3|1jZnuHYi@1(87iI| zCmoOWT^M$((oXp8hB`^&g-v*P_0tmH#PAVHlJhRE$29rEtnIZ8Kv67SP?B!@h$#cJH#svFTNvS5T=f{~V+DN!pYLSLE_ zMLdb(K4S!SdGyvoG|;^lUOS3cGiH2&D73_&ReXfm<02Y87H!VgWs)&1VVp{bkY(zj>(b4yYD~jxIU8a+?G?AM z2n#I8TtM%KpTSZajWY5hi04;<^8zdbC&kS!IcaINYRr^dMeGpf&k{OlUnCjAWVk@3 z?$Kb2e+FSz*x=K2`C6ZKmL#8ZIfV2hW`}nRAe;77c4#itv%$^@MU2a6$3?Aq(>RFA z38Y)n0BfR~umaHx^eHxAUvy-0UNoj&8lQMiJhD+ujQdwG(ADVI!37M9B$Kt= z*2W}iK$t-S9LAn+$SaUfS7yZV)HG%%^AY@Fy4O(wMr4M|{Ec?LF(!%& z3vwDTG?WSH$$W_3R4p;~bzRZA3bK;6_T=ntjh(IhADY$k$KmOCD?i7=&z}(CH-t6= z^a~sMg@CpI^h+E1rGU1k6SV(-npMw)7-u)LuHQzd^J`k&uxSkQq?^t#kDZu-uszw{jU>aU%I-+&=OXHBiuzJ`_&-}7{?7ui z(E@B#TqoV%F8B09xcdO~`jkZXuGk}*7o|O-`{VnzI2|LKTcbt_wWMcrdUGa#S6$@ucunSs}aBZp^|$79_fN#2hq; zOY*BOk_S}5w}1cyRXXBGX{Jx1fS`y7St&yzMVm-r>=xxc@?k4QSbP$(0Q7Q(g*w-R zu_t{k0()Z~b*V6Z7PUT$ihSxUK%MHU+zE2e2;?)4U*S%|5mXsCAe&w-8)qryox2@y zDUpKi0H#czWTja@%1PryTe+*4-(?{6SL0en<48o>SPt*G7^jeXMq)aRu_*lpRA!R_ zom}lC2)*J7ZS~|PLOaO@tv2o67J0FRWyPS42;JM*Alz+1D=L-V(TF1S%2pFn$12<_ zLv*NDX85i2N3*buQfa@p+=DM>0jV4%1V!z}YNUiTmyDOgokaaOOp%?$&*eYxrny1T z@<$V+i&5J5L6~qF8f8(;X;E4~gyRD(`3%3b=7-CrgP+{Q;DO+Rz!M(GQR|$I0z5B5 z-OY<6wvvZ58E+65XrTli$ezZfu-&`cWB}cC3?jw zY*0y(IA;8=PxgoSTPdDy@<=rpM-<4(m0E54Gfsud*89c%v z;J3K92pcH)oA5BYz^!iZK^pXuQ$Z)kwfyOD7kDKQEsIM56yrsOwT>eoO9A>YLV*V8 zm4;efac4l>BOJFeftR$CBjKj*dZo#@4M%oeWxPaXR3v?}Vq^>I`M{^0dQL?wX&%C; z{~8q1uPlY+#H!u<*qO4=jdwElU^~r@9{Sfm4L${3nvGR-D&OL+CCnXlJ|b+6 zSg5uW_DyHViIJgR%tsFN?tzaLyTbptEaQx1X8i{0<6=ZaUV)E|gP^O}CJz!{K|Z^n zdxv*@V+5CN7`W)~9Q;-{Ujsnz?vQp1(Ah>#)OGk7Sb#)>&)JIHd4;%x5m3P^4)(HV zKBZ*#2zWG@T_#F49<5dKbZUQ_F1c^Pz>2kbJm1a=c)X9zV+R~C_I304r;yL$@dD!U zeh!cEY^z@qj~6kI4`m+D0uq0*Il<$Gwul99F%^G^5WF@d@I<+1F-zTIFMW%uNF832 zwKc0eoZFhx0|FQGw{@W4C2iUl*`;`Bcfe(|U%1AWuR|Q#U3Y&S#?BS;Vl2qp$;6Ap znHNVgFXn)}JwQ^jM8!^dtyXwAGvjE&=Lo@!!6;`hQw~QnKaTeD=`#<6R)q2lE5~#hNhvEMPz1>(?5B`q^Q)4F12&SSFM+UQtgQ*}- zsQd`u{Tjaeo%q$^rm^$jUobVa<1<_tnHtkE1P5Y!2sn1)pkON7aUaEu?HGzN2UE=a zj(Gsk5Tn<9<>~cQofY{|mB@N4@-IFTz!J*+MxP-5F(Upz8k&mh#(Ww~jBCaMCO&Bs zuk|i>h=-n8I}(2|4v6<)1hnWC%Zd1%L24Z0HDe(XuL(GnKJ~qyQ4OrGuf!HFI?{kE zXim$xax;8n*V%)$(QdAd_Vv=h&@N8EvW+%b(u$*hM%#%}Y#c?K+{)0@F==Udy**8d zNmt=mmTQ`_F@UXasf}4I;A)f(STstvzmt`lUt?sZ*(a9>?wT1gCxC zc>zzrZxQl70qi^xDS5btK4M*X9P6W#2)E;fK1v}ouO%5ciB-}`UX^rQrAnI8$zn+5 zKJHW_*4})p4Z5U{3Xb`Edz_N}vN04(&Qr-40ZMK~kGC4BXg^n@pW%AXV^BlcI^CKP zUjI)NGq;jTjV<)(NrByCwXtiijoo?Dz_0_mxQkxuh*+l|y3s0^ADaTu?>frNad!DJ z-6cv6*wXKAS$Yll_iwN7etfwsje_{oNS0QxEUhG2nnD-RGe31;dM{uYs*(LX!f~mh!HmieI2pxPX(bOw+@GxZc>BQ<&g$_Q|tAkfm z>for(94qb;sWA%!0)eljj{9@{Emi38&IJR;Fkp>c?0~inj}34zsb5J-3`C3 z1Mmx0*xNIyGR|asJ9p;UWD$o>92cY&!nV~N1z)zoZ;JR`7GQ(h4)4WmkPYqBU}|{B z3^KH%yJ#&3PH=q*Nv8(*iN6f|=KA^lUw~loQ_5>j$73o!=XP|!v-nQ}E}l3fm^z^2 zIi2nGTl8Gq@g^GayD7yoH1A70b|8zstOI9giV`Q@q?&^mDa~ z9$dTVGyDT9Ix|N1C@e#g(X^F0gfw6S_1ENgwdv;x(L)ixa6D}M0$)P$5MI!Nhz_w4 z4fUSmAR3a5k%;Je6%oaV#*n#1T;Z?^IXuf2&=5d+p*E{2z)> zs9P+(Gv!pUw)n1B1}MI(r3&#)%>hTr;>QcM_yPEYYBOY4Wq=IHoM0FI_gW$gMTcw4 z?2Gb%70Ef+VY6zYX7>q-kJK)HuYngIk)8IsZZoAvYnT3tZ@{ImuI#cUt^Q@HGOpQ* z+qYJ)bqYp`#YqrM*XqPZeXe#`vlj^T*KLM=X@I)&kKfqc!1KN-@1qxczrmg%n)m8G z!}(4;9fID(fmALZ5^woJ7(DxwjFk3`621bf#l{FaoTu4D#3C*?-vL{0zQ@mR2Y)jg z^7#3ut7U%vFtDh`=qPcC&e4Z@h-|D_*H=7_zO->Ep8riMMDD@#5jg;S!M6aK!YKH9*=#Ts>S!X*F4}P%==;py(Cr*e zkkK6}dLG#E9H5iAgB?E3EZJ4K!pXLavc)EP-WK|QtAzje2jb(o!v7nEG7=$s`Um0v z{lV-1t*YYxCHu+CLljtcOS?zyv4Hc{%CP`X;)I2@OU0vT&#^>%C&x2fB_#V22Wyb* z(TMfFWQs2ll6{F+!>?k=-bF|@4cHFbESj>#>fYaR6+3l#LGMLsWxdKh2!*;ma3WOf zXmsX>cU&QHUE;KApDAgetejn9nd+%?dykb2XlT?rcG6g~$*np{05f1!^0#OdUL4gA~@B#)Hc?LYh z8rP{LQAKO1iVnA|@DY|3UgG%AtAr8$qfTz7Nn&*-?1JgW zr#_l`qXaz{(tm6|MjhyMx0_FJaz?dM|Z&4?f-)Ydv8^9~efV1Q*w%B^viWa3>x1W_{=~NRFJxP@GvuB>tDByL z;u$&o1my5?LgO-(2VT=S5p=NJgV3nF;&N|G{F7Qa5u^u<&wNBI%?JI-&MxM65$k|0 zVy*G4<9}t3XI-Y2&3)rq`ZI{WHB8@?Oy3;66@=%iGQCr6auo?(BaHCXgu@lW2xpMe zL*<^Ug$2IaOX?c6a&lD<8uc>XtRe>Q*4P=wG~;O7X>z~;W2x?*`#SA>o7O9cR@0#s zmq?#Uv|husUdObWLKfwo>j5y&8sD7Pdy`7)>jo0Ko9O?I$dUVMxh2ezYXnDbCQPpt z9LXX_eku3dEI4wr>hVdgQ7eZ#gES#KS!M)+UA;Hi*d(Sc^vua#W0&QblXbvlbFxpo zX!Gh?wQN3mB$&9fh*!5TuWln=kqw7-N*gJ0TJOrrxxzaLLHr*T(}XkZ0n3l!legiw zQTz_Yfx+*6JZjk|CIkN==Kt{g+TxqOO$-p;u5Ouwc#EisJBbaqikirwV%v_4%AKMz z?(|m1EtQoq6_;=)BJ01c=;ai@qnSaT>GMWG$LA>@cRLB?Ets{tMVRrs9F+0?BAS^X zPvI_M#_#g#;#<^e{k}Oq7sIw-@~uYc@d1`ze8-u5d-dmvUf1I^ABU1sz1MZc&!qeb z@qg4BH zW%Jk-^l!hFJ$B_*wXDz93JvLOYG3zo`?}9*U;DuiCwz~GJmx8topz|p`@M>J6HDMQ zYdO%nmhin-<)v5Sup%!b4;CXL@`|-yj@+YGuD*)srHh-aZDU@qFkJ|OtNH*sIWx=W zQH-IN-f!BX*)b2TmXq+1>df!ZXLNc~Xkt93W=G;%2d*6`o{b#~6*{1|`{*Uz z@hYm2Quz`BJO>Ed#5Ar*oVI8*qrSA`HK z{j5U#LWNAE^;^i4GN#Hs50c_!S`klU1hkv=Z&xatFDe!paE?>|i4lq9mdHnQP5D^q z8<2cVS-8=1;Oxrp+?nT0%Bf0r5nW#V*Z)91CK8byvPo9F;;uKBCPO_i-%@F=SqQE- zz4sA^KwUN_Ac23P@-U)NmsdRE)nr7W&YDaYnymL{tKPD$n?kT}ve0$ASL(WH0BQ`P z`nbo&CKh!0Zw|QHTFtkh!G7vpJ8-XB=Bqx>Yj8lPJjy!dandPMa5h^@cHot`Wv2SC zLBTtmI8nlvKLdf=aln>$n&hL{%)?+F=zXjy| zXc8`r0RQ(%ZpM zByo63G~=hd;_#?iG2vglW20@@uEo9{F)=k1FTMWjChgfuNNLUbKWZZp(_K>FfLRLM zGH^cd?a$sh|HsN@-~)&|hh*SsmVxI;2C_%UE1tznkAbA+(==ak5A%5v21@mS%}lJ+ z`9gCnaC$aRv*vh#uzf~oj)`b#kCb~}V72jrmy1uc+E^&m1}*Ba3jG@v`UUrKXm#(? zcE+C7y$-m%k8{I)wlDjPTGq!we{vPy1IIl12lHefDE~!xrG@CpE>J8lsaw|H`Mb(K z<;#T6I+cCONl5<^xd)->P`>Qdn}1iU^>-KrW0bqs^LIO2k0bAZ9lyh(|94l|^siIP z*8DBC*Hga2^uH$P2c_^lPa*!3s^MRV$zM0Sp6C^B*{>5iuZosE8Jm$#E&FwD*{^%a ze?_gb!Wo?Dhb6I^>0f2cuTpxlX6bY<%>YWrlfAYto5wVu9&&LHEV0p-@g?o$n6KCc zdzNE5;Hu;J6L4R;x9z@KUQcKP&!u{LgX?KM*VC?0L48y~Zy}4G+??C@1~<-k38Obf z<18YF{zx2pm)qyNUJkucY1Xq%Q1aVU@;g{E?z_%p!E1RM$E+}7V**cm@w8_LT;84^{+lh&Z+hFaUpg6_`}6gv>(x5zKX2<$0->NWC&vBpMT z6Gna?H0GrfV)o${f`tF7_JFcwMkkV%K@tqJnwbrei;eNADADA}%cAeW+BMQryGHtb z1FMnZ$&!V1DpY9lU_@?2W|1I?Jcq%XCOt(O z*yCuCdp@$%nA}8UWuOl>DQ?LeXe(OW`<{(?Ea1{s4!F`c!;br2sz<-Sua@~{xbxsQ zq_;j}z4Zm__j$71^Etfseua!)S)eNV(yOdC>56-^nZ)=|3LJQ zC;GqNLi#rd`hO&hz7h0K6ZHQm=>O46|Ay-H|3LJQbJM@U&elV}1Ku?K-)x%xpP2rB zhyIO7zt4~KPaygw|CZ7Jlb~PrBSt?9`lk!}5sLKV(?$PJ)#=CbgGSy>KV?tZdgyn+ zo2LI~Fa4_YiQP9*{6xRs&wUf_f|MDmfZrMa3HnI`X~>foH`h18%)x+%h#{(<4fqUX z$gy${Lcw~6{2tY#_^b6zbj+cL@aRDdjG?mALs9JPJsyn%_U=Et?O~fQ80qn65@6lW zBff;0FHyg}<{vMaz_s#)%5nC3LJa?>hGV~z-bQy`R?$(GIj%S6clGvS^mU!z)7vBA znlD(p!10L?FYvkJL|nwrK6fW-^!a4xF#>$hTAACEkb zkE*n)4S+``S;gEou&@&o9JLu{5O#lhHz&wnu4dC-aeJ zX-a!tr&0dOj{YrDm1R+&Cj=(XZocnNxPTXzagYHoZWi_ZNwhQE!dGOxdYrKF_L=&2 zFI#`*!K}+!s*kecUZ~Fw-zXacaQGY{cEDBoKESTMyfQqxTz7MzUnH;ypNiTaz3EW4cQZyeX(IB)%BtJL2%ysdGpfAbyOq*X9f)_A96 zsH`2Fsg3cXvc`KWD_dDvVjEsWYzm~!>E)BCC+ZeU9;=O8b8Xz%|t z5kTZ#=g7q!szNVIJ3i+4WgTDQ?En25wPLD;mp8uzo9jdCo$AzwCL43GK9KXL0psMgs{u1wf!+=WtpKP! zMC&D5&yEqej-|uffC;StH{gKXg~hUseke7v{uFBy-9)c;-Q;588Vs7F4U9qAk(FDJ z;ud;29B)|vuAf-uV%FblGpn^Wv#$0JkXdxMO=SK4^c|wnl5Z>P+Hj2u1KP4>Xtvcx zvtRwcp?Qb8WoXJANG;3jEAtYax0XY@U-VPLqQmYdYfHr7+7dBY9hgMqnyPLfOa&Py z9;2n#$oi+0a?#k#CcYsyuA$y-99%=Pu`?M$noYq7T+h6X-?L|paOFK~)|R!%`dJki zY-Sf@dut<)RH){g|LRmt&#^Oa-h#<$-IPcVwo3GwfIo&;-dpBzKF*M z>xPU=E&40Qw%B?P&d2$sEg$5U_Cme2OAYY`UXZ!rc=!J z6w4-cjPmtdge%Sk<)YpO-9&A-==+XVR}m4f)*@mC?_}IG5q&EMCJlX4^-|RK3tflw zyUs|VRrwR_qGA!(*s%i^W5;ek@Ivs*)&xC%V8LHDj@)khfz#LzoZ#=e&AS155RAGuwGBY?{{FO_X}*&59|y$&rX*g*jeTWV)$u1%b-K}ft@w| zz-ht{+>Y2VUHE~!pfv4Be&BY(58Te{2Tt3BAK0%~_<`G!p4!&(1EBj-1(Wo7_g}>q=E_N>Yd~-Us zV~22V$Gx~Te3ozsI}Y>T;~_$0pTGWsv3x#FaO^VvAn9zE%mBu;1C@k4#j71 zV;y@{Yrn5Jvu+?>)wUk5s&h-dsv5+wS2X})e)`T{jr+xS6-%%CDnJ5hbg!m9!j6=S z3PHq{cvYJw0==q%=*=zms;1dRdAuqIEW9f3yxF_pT6`Yx_*K)({i>_LllVRPRXea> zHHZDGpzy2k&h5+KHy#?^UGTdcG}E4-okxJN`j1xCkHTZyU(=kY^=^gzk~h2`4)naJ zu^+WlO+RV};YaOCgzqT)sNHGt8ClO=g&(!6*N@tviXRolpL%)!kgNe6vfV) z@uqe|#}a;v#P4amaHJ`)pS&5(SUo{wBdj6r0f2S+X`{sT{F(kH_ys7ye-zs9v z>;fDidqEXW6rS2a17|A`d=J~poyxo^l=V55(Qj zuGdx(<8`)GdNps#u7ohV5Xka`z{}-Mp^chvwMv&e#drmKcXRLx%Eq3E*9&ArF`_Xj zuh`Ao90{)=H^-pR&=s@t#z&;Gk9D!?mD(t^)JCaefGF9_`AlJ}u~V7ls)j>rZ5-}V z2FMmNTzum}f&+BhL1KyF!>i@BOq`*71iwr$Jr#;+bnk~aq+07fA8(vqk6TP-uI1FS zjlSMp{4^wmkDO<)O3?abZP9G2Et=2C0~5_n4N!#`L+64m4hx$0kX@DYSnbLgT)T2w z<$+aBan_HvMW6cPmRs~emPNNEY?aS$evVz=sm!idqi9HNigxr3kfQD%Y_op&4;5y8 zp9+w`nauiRJ`KS|grMQo+BCG+rh$*E9C)++f3$rEoD@Y9Z|}_R%wB-wxZ?sjv)mmy z9XW`gs0gA60%8Kez~UXzW#IrLf*>Y95y1eGK?DOLN)8GrC?fEQf$*V#peTs=Ds=bk zESLD+d-wa@cF(_4RdrQ$n4X#94DWF`j(65=CdLIG)x*03`vW2S%4bdo!`O{?Zz9I` z>u7u*oML) z3E$>ZN)@qXvfgq+6<61hTPApY9S-#$$)UbSp+kK)In>`yLg+4s`X1OHTWP4jT@LlP zyNCL2`3&{AWisx{LH<@69$c%U5w6HhglkqnaA0Q#d`;5?}S2{R0m^ zJ$%L6^p1heJakRm}8^_COn-fp|HSmj#BIRi736&t?8AuHAh^hB~OA`266BjFAr>wT9l z#s>1_M#B5Fk+9xy`nZVgt@4G7WRh`pA_2|6Mvm}3d_^tVc|0tn_4uo7Jv+v^6LR@~ zyc6=6M;op)w)gNAwPxpWu@GK($zFV3ihm>IRyCy4jSz=$Bbn?zyAcocJ$%Jjvd0w4 z1TNXHMi+{`WbdY%f+f52F%}1wA7hCc(}8^PpnFX3?sI*c#Ve{A>P&qf9@G2z^tr0e z@P8QoM{u9t>Gp|NoSx@XRalMT5BDe9`ug}()$Q2DA5j-$LcB4izgs?id{-WzCkNfU zH8xIBT1Vw9^Mk-jLU%T=R$Q`D3ni=i|3uc?!cEpkKvvmc0@C%2C?;KLh0;Z*jjxt2 zCgvL@qb%calZeqIHF_Z7bEkcD|iO0v>JkBH@2QZKK zD;~=mp+UvtaRBo;nA#sGdF(BD9LzipcJnwOA0Asq@;E?O20T8Yd30cZ;K>4b97sGq z<>qk~@%RAq_>khUtPy$`dE8$lj}I`9L#X`+C69MV9)~cGL)<(*kPnZ|BYAv4R|Y&z z(mXn_Kk!TeJU&P~PImM73h@|Z9v@LWRxm<2#p5x^JmymSLnV)WB#*hwW3HRWU_Lx% zNAeidl>v{>Y91ZfADCJIk3)&aX>J~0B_4+{k0TV1u!0&{JRXNJkE5vl;gZL`lE+cZ z<0vv`0X&xQeA9%R{9v>whXE;25C1@WVcpS?- z<}r`GZT^Jo7-P(MpL|zGW)OxVyb5NSMLhR5mWQGVMAA4p6y1qz4>Cd%cpRGG9*4%} zGY%0ADfOSS1M4ClcN?o~b&W9&EXSC9o&y}`9#<@Z_l@T8H#C_4$C>{jR%*)&bo25n zn$I2-{IvyaBlINvR*DbIg;BAW5qb(+JX^3tcrG)MCGs>8`IwYQe;k~B{Q7Jb%F}M4 zOuSMk*;As(%7?0=iQ=z=6-dm|ON&S-2x;HVX0qKivB&T2_`ZNmt{t3760QSBzc(b}+jrBWW&4hn?M#;Kt3JI}Y7hVTCYpNW7+xt# z#xt4AIYh@S$>lvL9U!uw9 zY9nlLZuI=1n)b8v*#;LnW7rCk%sWN-*ZIunBBEr0KjU)D_EZI`t-YZ@mbVO@ZSMs zj&G5*(_!7Y3hQrH)VQ#M8D32!t&|K8q&G2;H(Jd+uXgjiq97UP+@FRoEn8KjCrmB0 z?N0wo+eYX;a>GS8o>pk%tXx;wc%?w$%9UPNlc-$9Zci!K3SEs$xg7XPKllfT)pWmy zVr8`5W@)=!!+Q3iW49lYWIia$Zr3oMYl)KgC7<`xT!SiD%dD<-v%01r(T=T8o%>M{ z-O2`BVB09;VmGX0yhc~!lCc99_#TS)eNoSnzpL%{W0vbDKK=ebwBPmck7|!!RBnLt zJG|Yx9-DZmC>#EmdH#&3S|@oPgz|1rQ>xFH?a$n7e_W8fi!+l*EwtI~o~vs%upEzP zgg*7r)(HmB4rb_@uXt;ng4^zMb#2Q*c8nt>JMaX`>TTLb z++5_Sn_eh2Y&KU(O>xbpz-G~GiruE#q}-sZacxpMaDMMX$7f;pxb0?RwA~!jcC(G` zW{2Buj=?{yo5XMMKS0^d&SKfkHkQB_MB{cTfd^3V!^v*GU?F_r7Q(jt+~gGo@;OrQ zbN&XhvseaFFm-Go#is6mFpz@V?sIi*D+BpF+CUbNf$S`nffP&)8^~2sQ(OZnuvs*a zVz;RbWSg$WWgrfm&$zM})bK;MeQftdt%2I;In*w;k3Bxu8VKi5H$tbaM}CG;CFxY^$SOS8t9uOJD(iOT0L0?X)?x?dKl zc4>vu!fN;bTm-x#DzI5pyJEMgrZc;AHLmH51Lx$+_>P(V&duz;eC92o{Qzc_u{n}zgbw)RzH4TR zTrkz61=E2ddY%_d1rml`P;9DH7wps3xVpfB^W7sa3Gyu;^`80YKIo)v{~-6lVYlt$ z`_sEZ9b1*{|EE~Ce~{TfLIfU?>_3eCvY(9b2ut9ITLK3QSA5y{nWBchf*bGizcg-) z`5uyz+4>jLp!1(%S%1NF@Quy?PeNcHP+;SzfW>ZEDd0g}jY|O?I6ohN?|Dmi`+!5y z`sdu^{DJlFXJ6Dk&Yz0%0Y5OO$BC97C8tB2dz{Ca+2d|zf5=D7M(8M@!IgNt&Ilb- z4xms&FR*o#bFrINa{fVA>U)nZ8zhX_r zXgsaZ#(DegY8f9{EXLWG3v3&etk?}JB|D+3aVePt=QEGI4_QMP=V8U2GuIU^YzN{?+)1%EKFf4F%)ov$sQqt5*uEjqKP;kv+fQNYD+ zR0;UBuEr%`2X^mo{`$Ax-#p{Uw4xEZ09P4R4Kqv;04^%vq6Gey;UyXVqcZ#>fj?#V zmkiHi2(2c;x_BjbuP_21V&|G+Of=Gbff!ds(G zYR$17A#&L|mw;KkBDO{zri|_6PW~N}U$HS6Qv$hAMHp!@(;7ARj_vHu{RigW;KAIO z61ZK6%&gKzY8crxav$-D*zhH0APMyCUP-@M$4t(&%)m*%uJ2KN}|AzaqN z$=BcbAWEYgD1fDd4U6iSGAyR@#7K%1(WRuip@?d`E{v~`mX8akDT)();kpjVJ|hrv9(uyG1q17v4=QM-PPY#?g`HM^RHO%U|QPu>z7JoH&p?z0w- z55n*JRe~MKe7ky#H#!R2k)4+Bvy*cP->wJmHvOlP^ARq zXi$y9IRag2>Cka2JeMY978G!ff8O<75PS86iw>kYsR# z(|S{8x5N;Mv2|8F!k)Z}AADj**gK zm~UY;&=|Bo<25c|(r@4+&~{jtQ$dq{3Cc*(rf{bb>H%XZsVT#XcSUT~WUcvmxL zGkz6z9}ILr(>x@$p%Hik!nYoToMb}@z|-4kD}grwk1Z_%3k(!M{%P;XG()t6wE1LX zSa0wxnc-~+Cx3=M&yCMVd;{RQ3ou5_HXyW zLmWwYYXZb`7h<-qh8bK4h0Ne0+(Q|G0w|jcv+CGKRSjK@(5D9W!FmJpEsk_21C7vj zO4~-iJ1EDJ$Q)4mOG?{AX-lKh_EXw7l(sCY=0lWrkbVzSj^&u+7EUo4Ob)JyDt4R- z9HZY8RBUBbj#HHOEB&6P9PdWu_?^=BOuxd!9IGR9 zj5R_&6Vtr(YtgSw`PM|$RD#mt>9-{1c%S|K2iVc2&4}EB^s5%=*C{;q9!!D6SSy$c zL0~t|*$gYg+Ks9ncpvW)r9~D7BmB^29rcR)HDx34^ zHhHU=66p#5+!SzUkETvJjV%ns;V2J^r_ptd)b!UF8;^!~Kg3e=uy(K|OXNUXprVO6 zZ*PaXc7l<|=DfEp5}BQ>oG$gn(6lM#$z<($HBxu~saTp9Y>zai zNqbJ2j7`rAercj7^(T5`f?q>5F{!;u#6X=5SNTb1me>L9zoXhuB}QX&zSybaal|9X z<9FYpT1%BQSo4BOkW#{*^WEn#-Oit~8fm-BI~VCOOlp!hu-_I|qBj^6A~SCS2*jUr z`l@U3aV%ahz@mQ=exvX0rHBt?z$b|A^v4hy@4V#3XMV6Xac&YJGrRwHB zh&}swoLvF_$ zqDNOv=uAy$x%#%i8*qzh{F{YyOy^<7qkIMuhAaMEM7?Rbj@4YzEbn9%*zDokucFPvsU>iFH%r$N z6EW#?(5QV%8~$hFJp=epb>@7pSW)Zc>RJchCLM@)5PLyUeg8J|x0q;{FZr8*V%WtnZg;p!sZ)>`IG{=r7{{6M~ayhVw4vjKGc1DyulJJ3wj;fA~XUd8x%40u!+> z%M-Df5O0k6&@Is=)|GpXDd9C(NpkoD448`W`|y+fnW<n7kVr8ZIYGft=OBM!F>e&8%P)RDg56J|J?;=s~gH*P0`Aaqqc`35~wUh z%kd1>#yF;APeTFb)NUh&5`ozUx~ZIc`uZ%TH__KW&~;0FO*ijz+UsljQf^LXeZ7*d zZ_?NE=(>--o=(?;_4NcIP)VR+yb)S$;oX~w1~FEvQ3@kzbxRmIBUQ1?u8>yMl@``% z4V6xnua_j%seFo~Nr_TJ0&8$lmCD^k9m1W}<{0Ui1N1gRn1?nR%lC?lyh`$^wrt&& z?b6znx*E=z=(7`jy{}MLhKr-EsfB9m5aa5!mHABV6=n*NvljGOX-V4$jtv!g;-g@y z_z+vMsmgvLf&wz;^2L!%dZ9GjdUZ4?J0|%gSw^A-LV7^qV%{`x=E|7b?)m&`W)s2NEx*FGw1qaS&%mteg>wK<# zmZet2K1<~K5cejQ;+zk-{RlEy!OfVdg%Mf{SIH)=mUNk>MraEpdpQ%Vdbi?M!DO6< zd)+x%BYbHCrL&Y{R^zJ%=2b=5Zm58@O*UgERSK1L@7jGuTAh-+ z7ngNLc%PK<*K$#c{dCB39h3=-$0Ty$E@fy=h zdkD+Wt^ymOY^+tOR9(v|Th~a*Fn5>1`wzHAN(nv#<#6NDObtAadone1%6%bsQdnGp z(w4ATn1L0ztMVv*>evkAL40>lwb+6g<)heBP3>S!petn-hpDsTo!tWJqO4^9?hjP+ zj2NjIIjf4(Xcu#L2~{+eC?{R=2>d`q8QNny3gvK{@_T`7mC1nUk;vsd_>Z5^RD#Ft zh-JBRFTxTdp{|{H3_tW=)X1MH_no*Lwd#ORIfkQtjhrWUNqS|rqgruk=PB7kw}Fl; zGmhngrWH(~&Epg3=+d;g)=2d!lhsCo`veU&Ex%kri;78mK*fZt!Q z#Z(_sV9ukSU&+{%vJINYq zjk8t=I>XH0Ggv-;Kf6d~SxQ&hll zw{GswC=_HSQYfn;Wmy&GICf+P=w&}#dxL=(VFka9?1v5sp1=X}b}=X)?EX+Jmkq^X zxKw$*+*;D}d2^0UaGW4!hEXrhc5fj4O8YYLwsOC9bI&2&C8Fql-p`$=$3!!DvmZ;A zf{fDl0`^=qRyX$|R+kuA9iB8aA>}*VJv$i5WJ5X9KNTzRj^!cDa5%pVPjiOP@8y$!z+~|8 zfA^+u4ON7HkNgir{3{I8GlW&?5)27xb&bR2#Njj}a1`n|XatU7AP(C`;5f$Uy=zd| z5FLckk*0SLZz^DtDC0eZaT~{xrq7{)6^5cI&ZdL&n2OVRaLZymWJrlUG#_W;Wtgwf z3HZ$kE1dzK3fC>X9{RiqrUk(mV#6mfZ>4{zOg5e^gH*(VqcQatstJEdxWm^$db~fY zy5SEzfd^=R#q?AvoEm!wkCLjoGINZGg2Cy~uQ;{diYI4JQJa@IUw!bK*dE9|md?`! zp42s`sha7`wJag?iLB>Ljg)X>_g#p%%i_${QOKrWVv?Jc|6A!Emf3qo^*UIpZtomZ4w*JM+a8WD6 zC8Z2VJLb(v%P8&( zs^9*Va`)2n7Vq&{HJi?hG_qaio^VTl0_^}au<5KCj;&3L+7-mQU_IT`rej$)ucx2F z-Gr%B7bd`x8iR->bv--3-GnB9X1|UeF?6GeBp?vn>_gc(G#R1B2tN{A#12rwl>H&D zjxwTyj|lf7A{k*SgIj>Uwq4LOMGCH7QHPidBo8+ticOn7EvKt-pO(|`m1mSbh5p$U zbym*K=UL9xq%+NIegCJgR2F`DOmkZv+-fmNsB0tC!YR-GLE=R^oH9wYz@JXYe@gvvd`+^_^eyt{}=dwiaMx08RSjmHm*T&v@FVVwdF4FL{zquUH**YxjJ!| zcXCUkZN8rCTE}yBB@(W6JXd>L(PV@=7Rz%LOc{Hw;!{R+D9?4RttewEBR!WxWUziw zo~uCe&~p`=Hs!h6>S|n`%YpMdtF}d+(T&iZcG12I-@p1ke{b|k-*tex`1&Z{bv;R; zOR;=cXO_ZEMCWx<3X`#uzNflxVnN*G_86V>_g&a7(uVGJH+r z2c(ZTvoGsGzAS5)mD)0eI;uO0`@1-2?ur1N=nvmUvguC0w-if1Z)UCNNrZQkTJbDu zMJsBoCu>Ddw^rPokABval)dqS{umK%k~lkh^0Q-#zFRewfkzALNB)l7&9WbFcL;@k zoQi}#PeysW?8@8SU3qhUU8x0TgivA)6zL}lCtY>^&6)<+xmgF!&lka>LA>bpMcwSE zGZgrt+z+YmdvV|Qp}wbE*wD{+DBB44v+2x2UlJky4u2P5xwjvv12&UYi4*KbzC+Wv zI9>)vL7FUghceT6|FxxoswtqEy#;?GaRqNnh;BgfAk7sMuY0q9nT)-D*|T{$S)oZFXa<^JEOZlL~J;=UZ!{ zm#YOep)$f%@1%U|JxE%9hw@7Fhz)rqT>BT)j!(AZ<2vZUP2En_eA^l3ZYTGSIB3F3 zv#?(oW_4=vaOn@Nz66R0zlSDIX?+wogs&h zu5ywQ>hJc3^o>Az01dwp*oDUn^oPC3&%}oBB4h52-XqosOvCY_zY#(dKM;7A+a30z zZ0rtW8E(G1)J zX{h&3Fg4bybg6f0Q_D*0o!X>=+_FrsYaC7#hf5lPh6%ztXapKyfcp~V(eSGXqng^A zEF;QfIQuL37S4|hRd<{b8i*r=vqhOH`0J|po~e}BL#ez)NmPdJgWs(3Fx=dOm#KuN z#vVE+oIL*Ec-%6-6L(?;AyDZbO2~ej_bL&iy~FVRHk}H>fa^We48xZL zQX(d+pAkbl%3S|os{az@%M2Ky!K!YW3Uj6DveLudRZf|Yc6fHM_>5$(E18L6B55m< zrp+WpkcyjlK@dx4qFpix_dqzzmM@9#q=?xBpaWeQ1$hCWF z2EHGmGPEi=2+&}RpU#`|9@WSEEioP^hu8(|Q9VRLdKiV%s;HIT1Ehc9N60E4w0SBt z-C5~j0!)P-v0W342kiV-dP8l!((6epJp_VBX{G1TWQ2ltaaMW-Q^qU3;!{R+sFmJO zTT#YT29G%_y$HcIC~BowAbGgbD>iNVgKWAQ*GkWUi?v7fpq)bzi}hbSfSt5$irJkyKpw5n0P;>OokiUb$z5Gq>$+`c<5@8yoNriE6oE`@|@;IpOg}nT-b1%dxj>Fry$l)yepm|l*}!((TZ+9*cmPt8cd z6J;31b3Unf1fr?TRM#j2sddddw&CT@hp) zU33%eBHmv$o~`^TQp^d`%3pNeMfVh2`BQEK7=NW3hV}X5B>E@l_epfPfr1ApK0{w% z>o@`wyJ__*k@313*Q-PvxR7_zO~}vhe@e1_+Ad&!@0ln+{|s?HxmbSwY36(?(KbnP z{*tr5Hh`Wr=kMpS;hgTTIDS5Yk|O2{Q`!7qsKTZ1mX>Q$nIzPYv zY^2|RT2}{tKSBF_2et#Hisknwkv=B+^&Std+CSrO>ybWYl`=@IxjSIF8h#NlVPz$P zcrcp#5uR^;i9v8nFOh7Xr{5P)LLG{l)IP^r@iGxUU24S))QVR~*I#C>c-bwW=dLtP zCW!Y(?t@N?JAA#BQZI>VLKpp#a?uAFe^KHuYFvIzPm==HouozUz;+;+#U;e&PIxf0dR!&rlL%`7r;1pUIk2{qprcX?|(e>3+S-OA<)*h37gV z@EL(wD1x`BQcS?t|I8&BeD9KhFHqLcum3?j?oj{y$>>02l*88jrTu~O7_m#+feL>8 z79u9Y#AY%ZLQOPg2pekb| zrgTi83X_qp$%qNR;gAty1YSilUZzShAt}Zf^9GS|)I~;2pem9P!+6}G?)j6EK|^~r zY(2hoe4x5t?v2%8GRkT);=*q_WW*VP*+@nysuUBF;*2qG5*a64WW)t(A{lXv#~s=( z6dBGwXbmGYN7F?kLfoNw?tISXWxmo_ULjvq+wa=Pd&}1Qc=OR;S@Mkka45Htd=}=w z@7UQiH?&|4)+{9hX3A932rYo1j^7U8o^z(h4ljc1%sP;Ok?`9#P0%rKYD6JS<6Y`S zBq02)vjb+Y7{PPCAuJfNmqeFpFKLsei}#X{aAz-xnxMU;d*ogck{-q%h`)nzq?z`T z1|_&oYA$w!u~Z5J+Z?84v6yAC%#lS?lEq@`24sldBw`2hkhkSZ6c`CFVNonrqFBtL zz_g&w&etT0|KyVuJ@}6QHBjJ_I`U=JR3TFL1&H8)9I{w;?wgd0)Dc)DQd0*+` zeT$}vd4Jc%`wGo_j^rK54zE(Yk8<;#;n$}DGtoqdcazR=Y^8QE1Mr^Z$M;CkbRK-N zcv$dzrAZ8!#SRTHdA(+EbU2L3<-&Ea`VjtRJp{zng-B+128)ofe-ful0DTC`ozXJ*VBtd;^-uME-YkYA1$C$KBF@Dn{_u(y#bZB z69e?h2JftRf7Z2Jt3O!J!pDw4Y9F&YuT|>2R_8Ba#6VAM(AQiS^u$7FnX2LDsjdie zxXLtlmDCX*yA9yuNI$qk%ZB@4olF1MYW<%e^&iC-{*?XTdW?UfY~d-i1$y=fpGn5& zR=mN6&_}!1sfTt*rgc&!{DBM3^7+i}sTpQ)FmAS6brO8Z-8o}mI1FYPK8r>=3AORk zhP~itot}rGe5ZkX_Um}h-t=W!7S$Bz4K{)T@%~EH>i6(hDpS9ezd61_&tECN_qF)m zG5p>`R|p$;c=otR#??RG3qt$N&Z1IfTY4z0R<}=fS&Fr-U&dc4qvd}EU9`kUrLzU4 zv~RhOz-wE6PT}<}@xz$eKVqw1GZ>D=$3&1wJ8)+lJ>NAMAF2Vq@=rDkPc{lq_7+*c zw}|>9DqyL~^pf7dT@YrKDCsTf?MBlgswBBPJ#Ew2ZKoR@JKbzM`-IMYKg^)-`=v(Q z_e<0F{hs6de$$F|-_I1&u^$apcN{$#iue6YInQ|p{?G6|zrlRZZzB&bTX1lp`)!}w zysd}{+2#4k1jP7$-cGdbz*BMj;K28&&Nt9wqh5OEG$IY3MhmQo%&m(pKkImM)B+U-0lt3}n^FxyyOH$m zudtTSA}wbfuOy5rO2?B#nSi6?|3bLSQ1yZ|_L7cgm9$e^PG#Lb%vTAs~oEM zZdUPKqyz>CJ!jCWs@n`q}HI_ZVlRP%XjFr4(-;mW*yq&(xF{ihhCOCgxwL|%X;$_ z#=qqFHyHm~>Chav4jpiG=%Ah7J(UCY757x$Ea;w!PmDF`yMMAAh~ki=Blvk%(2;&7 z>Bs?cS}&l}N=foczm@2%Yo=t{%EQIwyZ|mi8om)ato7-*)F-SY`zJn9bX@DxF;>50 z%Arb?&Wugb#lZdf z1Jff5rK>__nat#fa!yM>IxR&Cpkbr{N=1}R^z};e$yN$1fbX@@CFr3gZ!c;Ik83eO zc4g?Ryi89De(^4r4|3(pUtGjxU@qk~xXLnAlOKOwW&5@*KCz{@zI z55{rh2-t5VRFhBC9pJi;Q05T89$=} zEP!avIyKTnb+w)I+S_7iW_bsu-o@>3`pndNFBX}ef05}07KwPmoT-4puKbsJusc@B zU`G;3W|d|YCl?iuZ|){Tgv8_8Ma|1^%o}d~VK-Y)<>UiX^_MO`)(WUlDUuxTC zpLEdWlMZN~G*|j0H2?4+_Cx={_+gG8#rV(4CoORMq!W%$I%(%Oe>-6pIe%NqBioW< z&ELHAt);IFRX0CD7(IXU@MERZc>Z>RmGBqslg>$>gbCT#@ciwZ_DN?sI|jq?G++2P z>H++vIhsE(6V0I?LwrSthG4y2)ri4o2+@_OMs$4BNv=mpz=&_OMXe1F981or^Z`E5?7}_!*3! zR`#$mfu7oa4-Z28VMp8#@09a9h}5Ltzyje~_5A5r%>}X=_gwH#yNJ2qM{F@47Go}G ziFfhY5ku7r61(J#^UHWHIGyd}PgeYk+D;5V+X*IQU(0ra7~6@*PuVeGJNbt?27jB= zLd74Lji!-}^F-6nDvVWSK5Q6c5C}BKB;i-Zj1b0^EmZ(p`ipJpPuA-HO06bB@xf1+ zPC7QkrQJT6>gKju;H>fq79K;F%lraUyv)00RlRfmQdQ;bDl3LE`D4%9@=PCg?`3PX z^SLHW3A~1{f%uZXX^4_2$Ws1cOCg!D49QX!k)?ddmVz)_%KOq%BJE_MhyNq(gav`+ z&=jazXD&;L%xKClk#pI<+*b0J?V8Jet#yU%>(>@w`SV*3VTM9&U=!QG#$v69@cR_s7^+?nRg7QTKpxw`23`+&S*dNm zvVnMM1DKFG+6cuf{m0Wol%s@HZOYNw2$fJdl3;My5r>nzSU(-=UyI`gEr5J}(rYXN z3!pBlxGYSrdNuP1dO;0v!=yALY0_gfa@>z`lsD5z!PV={hsv9JdWl{$k7 z*DoxX;xznURVQH9ZhteYTX&32Ja)drrM14wNeJV-% zbm$rBCy6jFPb&2;3j?$UvCQnq>X;&~vXa49Ty2`H_HZ-B6I8%Vq-vckOFH=l*Pg0% za_5!j!*RZKO_U!iscSc^RPweJ! z66<6cj3;xvG{zH^etzZF&vZvW%SGsC1+Aayez_(`?M!RJtMdI)73I1-36#j0-{LoR zzB5!=;JBjS^;|-K_&*5$KAz*=#5$PHI#^!oU=^u@m_S?5kXl9SU?o4!T))O8S5-*B z%WzrNp>)-IW-Uo5YGq|jXu8UHv!;?;Bg(SxMtw|XYLbav$v$c885(x? zv$j^z+WK{VYqCc?{2!^W>AF5t$tsa5S=OzRbgAD@a!~gx>ts2XPNr*}+$VJsyFOfz z^{@iQ%PT!R=+?ukjviL`=Qo~K^%pUo{=i=HNHNA!uNVdLIAo}LK?Jq^dOSVBzVUX} z%c`tCHMCx4O1;E{>{!;zOs$u-I6DU6013HPq_)*!Z3}2^<2?A=d^!8sfYLa;W$2|F zil~YHzyUoM&5{llNyxm`7=za|6-|=)Nl6psn*ysF5+o(9#zs<=b#J(;Mpi;|%%v<$ zhIo!C$znE=iL&fEtf2wcP-2_~K^l6LH1r5-Xr|WC|6J)$gC72m)X%EAHq_5dziVFT z&>J-`tmanTYJNR0MBP2C`bCdO+h-94JXZ<(*_m+z3L zNI~y+Yh&WgVqmASU%qBczxS;^;Z6MN74FWV^Y&O{-Q2UdEbACqyL|1N{Mu;K1W#Zs zlnm~{EBw6Zhwge>s`HMK`>ZYfSG>okmA`=Z_?Tiog#R&Axj5PukCkWF?*&77nkSx^ zX!vnAI5zk`^gy_^pI_gD37H*?5MBq{(9U{klV0gh_s=1Y@Aap5=;XFV^=`*E_OYBg z!cLWQ4Kxv0!4!jPA;zlJ-p?=eQS-;wUUTM;PI=TPsz)hJJNJEkyqw$!&#>3c6{SG> zU0r=^l4(TNjf891$NqO0#&cA*ziPA`KSKe^v2_YCVSK z3?6cSF6Joprzu)}B}BE`dWajhdj%fduGaas>yh@paQ!|^_^NeyD0q*wM?-i#x6fIf z8G|ocyXa{oQuw`V1L5aC@DD5s8!EX7|5f1{`hm{guJsA}78b~ZPBQ{5@TlurxV|1b zXa(f`73Tng>%;T|@c%0I9RO9S^_%Aj$*Uy}j}zjqgBY7OUd1jFJWx!1XZGOo{H7h zSPzZ;rfV*#F;nO3HCDw|LThhQYlG&i*2a%lvA91}Y*tvss!dd}3u6=?6Gtg*+`lSz zZ<3~7$8LI9=i4E~=2{p#0y0G`R@}N-h$i15He-&;m)26nj!XJVic_-{_L`JXY4Kcd zAsWAdvHe~T#ZttcOE5eB2xIF3!h zAwIwpf1+C%A?^e7+9h(oQN8*}Kb3C{)Ut@m`k{@(CouNq0wJEAjIrQYC97-asMMLC zDeR_X6}#q6Ro}*k74}gQ$Nm*>ZddJY9>*GHiGj(g#9iBjm~k3ot2QW(UVtgC=XauX zy^?t5P8Dk_IRa^nRkiHs$E{_0oYvlv^pzAMS(P}aW0_?+*39F`WkOk%IwncQ-cMI; zEY@5OTc%>&b%_^s&9!yR|Dn>@Up`Q=To|aB-@8&hvX-sOlniF}Q?c*&saU2gTT&eV zT!_a&56X(C`U-LC2&Ue@P|>n9N$J(>#(HY(jK&6O%+#?eI`xo_jnt`0I@VgJ9=)VuM-~Zj<`l;6*RlG# zM0<^`Jjl$Z^Rk3xSsaQkZg9*9^&q|G` zDDM4C(NcE<>sm$8fvarF&$}1CFXTKG9m&|2-Ak zrzr^hpkmLh=2%7XEtKd%-eO9Bm0I^x?WsRgwKNVXTD~36v{V)ENUBPT!(&;)pf&CP zCXH2gG9zOO~rEi=-3uz=e3S2Ssh7Ip5dkP3d_~L_=Ae7wfJ4i3zY4p zu;Js>DD-!_@`QP7IJI+x{XTrBD*MYm6>C>fdB;=lC|~@GwC-;Vr);+Lu_eWHu+YaS zHtv9svA>q9*e;z~@wmcHtx&Oem|gwe9Aj%YE3DrZ6`QeHrM`PiVbhN>2AU)NT1nAa zw|k9lcZkLgYivhT6$?yJvAw$8Gn-XkR@Z(vyRVYz6g>tENmBh$Wf<#ZSy2(Z1^Sn= z;t=#|t=bs-=3f=7TiPRI2@4s6{`j6p5}-cWBLb%}mUBi>thA^k$G6fVXNel~(nqS; z14C8p`Ef#ygY}lEaq!3p72A~Hk+A_@6}xSvN}aq##XP-L?6j%!O&!BnY2n+fyyM4{ z)hO9Xk1pHwi1W-FDz^MR6&v)ilG?5m6+2&9`y3s6UZ)DJ+4ylgj$Pkh#s1J^%BGnr zHeJtE9@epO&bY59tQ_%U0b$V+2Gt;RIIDk>|>=oQey|r zsQQ>hCEskz0{<=Ug``Bi5fd$g?f zy9ZU->e^Fh=y`TsJtO-I_~=Y?i<>5^Sc%2Tk5^r+uz@;tOGw4~pHaHeCr|mXr<0X; z{3)nC>oWG8mN>LZmDs91>k%F6cRHEADmJx*s_)M|%EQf(9uEJmsUa7n0$0CyLgM4+g}7}EzAH;1FTbD= zuS623Da4jY^{EPplgQ-f6jDkef9QJ3NaP7!Pr5`#%~D8tK%jd>LNX&lRFX*h4;;jV zQl-Ru6Bx+`#3E$Sct!?`%0SV0pdlp!i5KG`&s!iHM23qjQIqm4`9esfF|7Epo_4xa zW03>xmlB(oGh&IRVg%(mqFZk&MhZ{mQsUx!jC=sdXezZ}jH;)p7)zxVj8#asm`KR! z@v5F|@fa=8Glwf_v=Gk-Kjay?ijhsCEg)Dbb)u@LqnJ)yj9#y}xK*qodi<*y=_c+K zwg*f7sOcFfN_#NRf8JAh28tvP(p>2)RnI_C7CT2I9#hEU;t|U8k!0GL zXx<{48JMTmPDW;kJ&0gM@2EV7#A(WN{u5Qt89+b~;_MF9)}Nx9i4=C#T=+acnpjWc zWvU*_bCQsOFDWEeBE7Xfmy}3dt(l1u`CTK)63NuMnkJForYod^M8;$*q>4mlYAdKI zkq2K?NQOifJ*$v95?L5hNFzY%&f>S*8R;!<@HC)2m6oVHBM^Z+N1=~6&nQn* zFSfNsw-p8i^K=-Z>KX63$?FHC+;&Dbi6;Qb1H`9G&Gqyo3g0X5krXcUjHK36HD3!o zqX@aZj6#-rW_ocevW!HIc$RwRQ=Ux~xSm0tWuEm!;jdbT%RPH2Psw$RZ1XJld`U;n_<_-2;r&F;;rMrg~~?n&0(&OL=}zQphULkA%cjRIRV}93`ajN|k4g=PcEe zqwD#=^E)92PAO!&C&7ovq>~O(hLEuuIpRt4p$ykVAmu1eBaIyO)be5LN3}GLdNL?a zC7tJ(r?C(F>*sVvE_jZ4S`cy~*+JS+sW&4^b@0(B(bqw``0}8wB+2`5anjSBTL0%` zp^-j>ym46}r#$x%7q{q|&v+j2p=Wy~)g!g#H_yw2)ZV1@=bYyiLRR)v$RD2hMBxf8 z!@oRB2uV8WAj_%sE$IsR$FrXD?9iozv4M~dCmm!TA$vd?hn6z(wGVyN$utik9ZbD< zJe%MD|KFw5Y-wv#Mb#dy(i&-L?N)2l7K)k*#K~<^Po0J$a<5jIqtk{Hv zL}Y!vKfix||Js-%so{uLRq!zmAE}ikb$4Q`6-3z{E!lM5DP($P* z-0ax0-#FIH$l^F#Nyi8Je2G zQqsifF8pEbY8|LKCgs*z6Vuu&7Ttb`oYdl(@2}!`qM*bkl{YpJ{yDupmEo^iPDq8x z#S~1oYuea70JTfeINs_hElFopG|N6LhmvFk4kN}t>QT;nnYn`jY%p_RtA4q+&S0&HZot2T0iV{im4|VZT$d8g2 z0XH(8_eGo&svjcmzqwi)AzhlrtE>0NUuQP4|E)FaBq+FfXkuE1KgOg}8p*WTVU=M( zZL!0+voNjCXgtHX`%Hcgr)l;hjaIFn-ZJi#O|d-)RPx}$@s2z`1;>^>`V_?Eu52eV zb@8inBGT7S^p;y|RwmE2_YGxDQfE4Yb&D<_4{6^e7z^DGL%xxzQ-x6r5=DKq2-PGh^9$t~td^<_h zuaCCd^539g93tguQgWxCh+H_B&S@b>-|aX%?z?N=__H~3|3Mt9vSGgnrzHxh{a&p9 zOYaMe)JL{^(xxSmYCNArO0toZk4Z$=5jnH%x?IY2yrdSb;CuSk`&+=WZe}4cL)9P9 ztJ~bcQfuM?N+Lv$HJ1QBk;wZ>!$tbYyQv*-#_p6(NT;xJ!wLdc$Fn-xO+^Am{UE^TW?+Ug>^o-tc_M(OA&kM@}aFp4B7YYdOr#TNZR z`s1awqW&V8@g7=tJeq5YQBeYsSIGroo6(Ps? z@Hw*ZTG`mEiUb`sBttccg^^U4F073E;@&HoS?NLRJ>sg6)~$JTl5$9#B7)5o>cCGdOp-S~$cQ-azh<=3M{Zn0 z@@diP&HdV@&hFB=VpnKuYPzY7`3`wxL5#G~*aY$tO3^i}P-X6Sw*Drls3Bfsb`~DP z$}MrO+l1~_nhqSzjAgYyd(JD_RzEMzPLUX-P=L4EKV9)II#Eh=<@zhF5`CiAmc5?q z%^5HshN@l7JZzD|9NQZr@pxX+LPN*YHIt}#Ey|)??4_XyG0vSm1HEBq^MImeH4$y8 z2(dWvj^@0_i&(zzp~eRU@vf-pZY1j~!K)(y-{y7s76dul~8Jsbk*m05VkPZbLvP2-}M~XGsJAQYWG<0@dUmiL_{Q5InMJ~?oMgrci+4a zNfBd~xLv%Qgmc~Z12wFHR@C?}`lj78r1-+AB=()wqs>YBL6@0@2;Ob;u!w$|rHkKMvgPrAgM)4i#3XnU>2KVEDHkd^Bb7|`ywb<(($Vot9=e38k6LYTGpNQ--jP3Yb<~JVlDLtueT^OWrgKQ#5z$I~RI03(Hp|?)Ybdo9K)MSxPuqT2@MBw2JfrX|^x5(T zQZdr~mXl5sieqgG=kzc9lAcgyA3OhLAX;QnFt+zyfpG09CoV}R-X=sx-zhtY zyV=}Y1Y%9h1qq}ZH%W;(vn5I$w;Z1n*$d*(bk{HnpZ03kDrt(ZYuYT3uz_5~WvmA# zDW{|}PTWxX$M-}T0LyTn{E?~ogOtN@U1@>&RmF`0827I$uda7FYxHwYbl#f?Pf8E4 zR(Wfc#YEDco0^++*1G)qHIj2@=I-+oWPuLSY;k8o@>u`m|MgJpU(^i^&Kc*?)IYJmCe^ica$h1J>^#?s|1Ra+ejJ<)3btgq zi%KnkEliqd&E}dRg*+HUz+37-D{Lm4rr?{>=4sc?fnOeS?B}AX=3lF{*sZa;jZw(c zL<8l2%5-Nhhv(zeJ95rUV&gntt%aK^r z$PaIap+6)ixvKh>H2Q%CF@hiT1{N9(Y+ z#b5OXi(;~jb0(oM|hi+a1na$^3oh(NkjPZ&O6M9r)T;~2B#rUMYd>>uk_66 z%aO=;gRuZ#5k2Jhgty0Nqx@Mi2$Sj_;sLpA{{T{+rP6M^2MSwrF%g?uz4A_)#QgVd3Rr+ zZ}sAezOVd~s9pU2X4Q@TqK~heOF+Kap!PEK#zRWg%@yoL{98fi4JwE#A%AviluUv|SaA`0MpE=m38di5;YsV!I z<~bgeT#chRJ&D>eF*@A07NNZlA3|(z%l`&4w$VS-Y`cM6yL9hElfp6Ae8zMheV+Gx z0x~O%KXp&~H1SeieWjk)mdu?if=ZaON3`2y5VkKE(x3i~7v6Y#N8J znSYMj$>27m{uT8RI5vfJn96^SBq9shw_sYWWWD{=-oaN$T}a2B+8^Z_xSL~3G{@F_ z6S?o%$i2LHd}!+aCX@7a+5YxSk0MuT=Q96LBxJIN1ez7$?Ot6nDidCBc`f43co zdMT`#5T(B*)jM@nu9f|`TQq7vHhk$?rwD~3HrVwq2PCwLYdcQ22+mF}Pns_J7#M`| zpeWAj52LW%%>KS+K=JR(kMmvSXx;WPlQvLMzAd%0g2#IE^XQ0J z&>KjcmW&1G>sDO`n_TEQcgS!G&)#wdoQsM$HxaS(O2k0B3#_69HIkoZINT#7yZ+_~ zKFLF9E^#YTwr#p}=n2bj6Tu*WJO?gyJ=-{-4ABE1o?)Oh8q-yGi-usIt4 zXhziNykSa#2*y8*G9qaoL8dsI03TNEo^7G;G_CrI%oMN6=VeCLqVsu{8K>p4=>cog zqTLr)U!Xb?HdvU^WOi+$`d3G9R7ZY)w3fgWzs@F`y~RZVs$ruoQT=n;2vFhz^iMJ1_~<#aA-NF6m3eBVDzwcWQj5=FAAJgrb)Z-O5iKi;lu~Xet6{)D+K8Qnmmut#T+-|!W%mJ%Wo^}O2f*BaRB7bhD*3` zSgNtE!^!84epfLC&|~}6EKZ&%DVU$;$7O@CRJ^T}1kA51*-?IwV@yp^U3TJd(1;bC zIW-^-zoG=t9R291arOgVZxU$?+DBYs&0##@PwR?QFpd2l&Gu{`Kw$cqAg_HVY|_5 zy?~!Aaa5a;M8qfwkgg>>IOsgL3F_pWn5$rpH}Cz-EOh7*enSz~k+A!n!4~@5BKXxa zfe*pMxgNLvIM~`HE20xBhcJ^D(?lj! zZXCICHTaBl?>xc$Wlb)MQD#j|brb#vY>5w_G8p*sS-dwJpa^18=Eby0-N zRDkNGBhRzkwzIw`Pa@c}+8n}B>Zo(2m9F+)yd~{<7{aQC0DI2zu#&9=;`K#U*2PiB z%#N;S_RV?6yPe61C%Dt94jM(1-EfdHfC?TH|d_p`5T+r}Yt(-?kaH(etW1=|MBB>VY9HbITscwfaQ-8qthFky- z;P&28!q}Pq<&R7F2K=~>_~WkOpBC3f9gFeuCmW1W?r{*BGvE=aeQIDSG$ypw)_EKR5Vyqv`=km#6 zq*frx?bfd5XKvq4+vYfP{%{X^F`QcQqyXDW-p`gpH zjURTffU7HfEwo^j;X|Z%wrCaF2KR_<13vYn3uE^wEn~_biNE1ieq&=!b^`l8Z2URH zq|GzXd@kl7Kt*mUn1|@Jvn+6DA3?(>A|m2i7`7#6it)d&y`WJ~)Ko|}2jZJzm>mYl=HmG&MsENZY*c)~(p1)+x zLqJ7g*W$xr7cWTT_yv26u%lZNJ2h0$l>CA{Vr1jMjUDHnwD+Va578DCJ3_x-ZtT^+ zoErHFA~_J(BD|@|u`GIZQ3PS^VtJABjtTKaW@_e-+#@|rY!(QTwS2Jis#-|VZr^7& znieUrX4@*5hf2o?ZzcIlw}4A#2dD_@%2C30LR2;F$8B#0I6;Px;0b$>!j00NzR(kg z2rHrS#>U89sb%OvOhr1GdRtnz?(G5cUoPA7j;^ks1}fMk zvfXOvu=qs>$2f4mx#9heQ+f&WvOJ=gMly^4Rw{^kH@YmvyPp;O>omxj(UwuWi@inj zGAYm@(jI+&s;{PG>o@sv^M_8#<>R#U<=R|<*?-B3~xu0A*Q zs{-`ZvgXp9@pXKG)AT)T`IFrcfZ&LuHgDH$L_ddrsE-mE(>SOe)o_k(8T9nxf4n_9 zFMY;b4g$u<9C!fLyvrx<1aM9K_K-idoh3op$04$lXi9M19eDSrUB>%8ZelIGPI4U0 zR-J%QKX|}I^^F`zbfXMWQNh0~$2fvFYQl8cecC^1Hv*FIS* z0ar`qTjLR{O7kGLsnv{Q&46zs@(7cwmqpM!f}hZ7D!A~_->Lrd=_0dJZb+2|mU6HZ z44CP^9e#1boNYUd_2AV){^IN310GYqJL*}QC)%YqBEE{E>NP!kr*cZwOR`oOt6?#> znp1(%c3PX%v^h2YC4z>+m?og-zl-o)`jks3loh4ld5An)5G>VXc8ujtH4oO5u=->> zmW-&F#{1|~NgczL;y@?(li+YTRiepSgZYy7POn)P;>xl)CWZ%mXzw7h;Ry z@keyX@^M=E%&|hdeWWc%-)SGQ{+{iCgvf$F_bfoq5D~hrBp__>ssN3rt;}BE72bam z{@$buAn#7jD_kd20}Yyrhv z{JPLP+L2?ev@%dbWar^ zPli38+Vv+rX#>D}4W3vF*-lDCl!(^ul^v~lb(`TUV($NxruPC8a# z4aV$#%)=w!6TI?keCpI0mFF-Yo>|*}bpv0Us}8=6Hs0i4Aw_kop5NY@N?%WQ8kvxQ z`@uUUrWa&tyV75Wf82X2xM>{vh;%J2!G#CLfvXstm-N!v>hs92{`~g?Eh@`4spI23 zNLMzKM>rWVHuN0b zX`EA8dQ`xUi2%z^wm17OB=q=iu<#M3{j)t-Jze+gjGQDR$rmP|7H=M%^{HS!5A@^S z_pB~VMK9;vn^QGg_+dv>WGXc*%s^KwLJ=jQ_RC`=;wBl?fi8||`=hS>$IS;{@71sR zCE#W9wG-lkXl)61f?qH54`WQ~;nR)Jj|+%|!|!2=m;t|!ks1^B%Y?Ux;|7K%VX{F7 zdhX%fAXT}L2&U0W$D&Ry!VcjjC1TDoAAW7YBJH!^Alnac!smH-{E=#Dw}SVn&>sVZ z#Yc>iJ{G?rHBX<#iAmkjdn zKQhxOnY_Qai<@MeGtYwc`U`iHf86AOz3Y;zG7H!rd-Cnu0WB-Ualb&OR`ol+SYh;T zpJ|cL8lf*r5l{sa`-Q!^aHfd6?jpW~Z7#pJ&gw4I;ytXrZEvQOwi766RQ&dEPaA&W z7^YMjRNw^e;I2k*cjZ4g=-c=&C-N{X(B(u88)A6UHh!GEy35%W3T%y&U$pQ(zcY8F zT#br3U2q%?4O?odVe9>umXA9fHMM8YiLC8VJJnKagu=MzBua3E)bftVRY`!bI)>ag z!N{hF+2b(|Ywt7dqN`)D7gn|sg*Hd+^Mk*fq$=j)2pQ!Z#PM)bMQU1;TF)z`G$_=V zW7=o&1s=D$Cur;!Wo{GBu~Av*<26`u;ix>lONMdPNUyzh32i0Re_7kQ;_jo?3vD0o zt@|(tov&ct;k~$ZT6aQZ9U``t}#%@}A+80U?$;V6N`CZ7C z3pXWV;txoT5DWoGgfigsGx`GpcLAZ{MYJ*0MdN#e6wpC7AYo~1$JeO&Wf4(Z9fOh% zEl37(bD6!K;lL7U!RfV3z?^@bhz$v;_VakO+ueb0q|H{R^ZhFzx*EM4H%filb%#Ag zmXtv8&itU9}z$4gDS84%pEG2+Ls@#Gph-nx z>YMRfl!Q1+YCF%K5WWK9=SM1r))pIMg&Q8eXrao!gc?&3r1=Ynn(QmV<_{1YQ_XYN zOc$<9u$R?D3CN^Yw6f-+8qbb6HCA=foUytBd%Ab_1_m%!51a8vTlfHy@GucNT)y{! z5)n*#E3YCBZGqCKaMW`DMtMN@`DV16a;`=6x6tC{)8Id+n&z6&W&ju{M+Uu>hisU; zkR|BfbL@A9n27eoLKgKdRoFxF?+)K=yT%D_MB z^{1V5pbtjn^58H)LrrIg<|331&m)r$=TNTyAVbUWF&_eEt22rk5J_oS zNT0rk_nyF5v0N6ZWvCCz<93Khlcm}u!B%wwu$oKHd z)Dh6$Sv9yd)QCj%zlPVa`Us|L<{dTrAppnqREe29x>*GE;c#5Hzuj`nP2II!3qT0T z5{sJKFUMEzuJA-?(6D<{G#;ZaKSRco2FR@gpE{$W?Bglgbc!)a<~ye%@sx*Q>Of_cva=+A3XPjm^~<5_c6pR`}12Q@96}C zkAXXl@^s+p>@F2)CB&ILDIU#MIHc94h|GBcR|*KdS0=Wi*;E1q0q%jaYx(uFz^d`$c- zjyUXcR>-o1+ZfHM8;dU;SA^{Dcp7sve#e*zYj=``pex^i}G}BBY2cU5jC#u6{ak zyuOwl0QyZ_&BI9*o|{7T;lLq;Fu(a2un%)ZYxGdkUi==DB(1Z`FN%bnSdTc|8}#Ha zLhroXC(7Z_Gt(&f@1Z68ze#>Ew6*i4StS0Sw*)UAo0YtdmA$l4_+4qnN~wuo@jTI$ zeMCFi7(rdbyo}Tu3yvWI%F2T{+WgXZxA0E+r$LyCA$z;`80pI0C{<13^4>s0Necku z(B54G$hl=#$T;D|?6jY*gLxM5vjyHgF4Po#+=`gKB{Y`RoYh;mbi%&33U7W-Wq@A_ ziOv=VuQI7ebmE9Y+6Gd9n04tyeEM9>>=c&AD)qsyU=xhQjNgn|NPh!jyAsLSI7B(V%iG3 zoA=qBaC-R5FUqf#=j<4(y3h)YezJmr3Z#M~Ue6FF<|+tP=mg{_*d zj+)Mk6Jl*Nu?L9TwLjA@|I@+lc0;8rJ(DvGJR83ql7pH?u0gf&hrKE;2ed@4H6Y_g z{ablkFzL>-X>BJm6dq-ZLeE`9nXa@j&Jl&b6ao3*_1V*{Ai8?VU;%;X_xoTjg?f45 zObrT%0;BVgi<;>DJ$J$}XpDfR4-*E~R(HtQJ@7k$i78!|4-h|%xd3&E6YTL4PJ!M3 zcOY9smVCJjb_$J!CvHFh@G(s=?Cl#3u#P(+9KD7>Galfr@YpklJ7a0J9Cu<2w7xo&CH<|eP%+_;Gg^8C|%p{bgF6{k#0)1b36rLL!K~p zb%6m8Wm;25uaZFiVML>0+Db>OjE5%$-dI;9cKmH6oR4{jbkZTs-l4fR56PW4)HEsI z3Kbq?`O`C&!d66s|Kkuc4*q>KF+78JnL69KA%(Ud`E>=epU_?F2N>Q&Eta@oLxRad z`db?^@NTJk~@EF>m`f~W~ za&Sjf1UWylLt{&m<`BN$P z*XUjm(&ckg^uu7a3F_+D3ov@W4O~Hl&W=4mqW_&}aHS+~hCHX|;k(FOJ7oG-&Aq}j zDknz1bCLF}XiEyz3`Gr)P05VJ8Sq zMQHhD_v;uNjZ652=wRwlAo;|1MvF#<>_0L63<@oHz*TI?KcR3+J`~!Va#COeCvU}# zssD25VElZk0pYs7OgM-`e%1jEyW)KTJVo)(MOSxO%3aZ@ zRbMCc9X~u>ZuwP;9>AoMc1TO@l4%7hJyk!PNxLDw0?N>ZE8m82-#LWXzPT9RaaA*p zyxX~$w9wb|MI%KeFm|UB>l7vL|ENVF^xW*>A_J|TBQEu-Ezhp>^oLJYzG)Px!Y4Z( z>}4ebrFE+Qg|q7LA(O#HYN)M~A=31e*C*($$Dl>XLCaWErZ9HNuedBr!uaiOfv01_ z;JxnZk)AFIjxc6IeI0(y!Popiel1cHM6%tzN$TJLYUUk2lidG`I>EKhsMV40b%DHd zr$Xfoenge>J2g^qHMiF)mo7WFa*xnItI4A~`swkjQFFz4K>Kz5;Qj7Z()9hh2o53C z!0o|+6<&|^jo%N_Rbt>5%CpELZ>qilqX_(AN-feSwT}G7kPEvx4vaN#JNOm!eJ+1{ zZy&{AWnU)|s?fqz5cI;)vkEBkEeJ)p4)2lCJNQmWld<-#0V)P-AIuWOrvtk6>$tLp zW(6@8nV1^_I~GYf*NZkS3RWZ`1Yy!_hy|pv>SVs^&Oa95(nv@gYu9gjZvXp6SFba zf2HX!Z20TYOdepv0y267)D6?L5m#-DyqGI@QU}xyww+!Kg6r(2UWIQ=#a3YU4$Gr} zHJoP_PAO0f5s@RQxB{8|45>Gdbgb&YhLd)_nsit`)IpctR2A~9;V7+LkpFf|DLCT6 z3*U$IG|v(T6*_F@N_P;oy~d~;coI=J5IuK7bnv+pa)|9Kva1C_5Tv~wbRI+N8+AZ$ z0*S-nRdgqnvF=iL7KO2%A-bH*;UYblTCQ+&1(4!(U3~(4X-<62m_U5%${p$QdWxkCK#P0(5MVNfV15D3YF|CWFs;7!xj{ z4>{hJL<^G=YG~2)gXY?2YjgJLm!8)Ai*9_c*Yvzb`|)*h4u#WJ{Z{Rt7K&pDt6XltE=iSyW%##s#c{wt=9&nm7Qe@T7|Yi)rl;aetzv5_uZHJlJ2Z@( zUO58*fho(o1esKEKK3a_-aRm1q4B<31JT{{;Vcr%OoFg@3o1ZduEa;>+EI}qm(<=v z*AnHO!Ru$ZqtfmnnQZCZ&6XoxmB?=o{u9{W#ctVet60tWdS#$F^WUujvz0x%!Q}h- z?nKy|(Ls&W6RF9u=kw5iRdijU7bKw1dn=pY?;fPtrh`?ucXg|Q&{~o69@CuuHV1bP zz6a=6&zhkFBnzvQ_z+9|fq=yUz1ZhnUx@>)gz? zboi~4`)t1-{Y|*$W0{$@@D4+xj01~@iCqF41wKvpaYd)s($Qn_nP=?o|6jQq zgq)^hoj*A5(nIR>lnC^8OBr4=-Of`eEK(*V_+oH<%$oL+%ToPXwcohVrQNg5m&K*$ z4rQ0yp#QfuONcD#Hs);0WjL(D6HlBKf0{hCe&;B3XNS7a9V7v(VVRAi!9pvPLcS$=)zFs;5x|g*>?X@k#oph`n2^t zy7p0{qCMX>Dfzu=)y1&ey9qZ>H29xJF(0>CF1bHQrHD50n_ocHFyUmT;W{5&XD;A$ zkZ8>V#-_>#-o`)sh;)I8h5y=?g{{~S-MjCe?;EZAOn-+*6Uua#!fvjoVg5-&FJVGT z`qFjZv&3W}BV^QRTsDt2eU=ZQ(*_7#*}*N}P6m4iem3D+8OFIa7Ef*rfNjI$vBS;b zTjM7Efo3fel2w_3Kf1cGtAXK7Cp+d`u_9ikdeD2Q3f#Npm#<(cX#)@`_O$lR$wp@17h7eRtU__qdZv3rQ9`nNRf0WbE zZk?w7(-b0$ea#i;4&XubbJ5k~gXp-=6;bfBDO&J%z@;e@`#MrIzZ7iRpu01g_GW-> z^~6nYJRD!{B!VX__r{x4WHT5p<5CBa#EeQ)M&q_`)}!P$+q%^s!dnOo?@PC zqGFQtV+Q|-^s`61W>LE(qLT~<*Pb5m9=!I?!19nKf5aZiwq7_F>aL`n$m+?L(j$q7TbF;~b_GRqE7)DQJ`BBVY&%WqC zw6NM@R7!&n>2nXN(xfChZ>^sE>^RCzS*^sG)Dkv*r|nypm@`?z&bM&3TxnHrfd7k; zHu!}EM(@05Ob_`TTI*L+xuz=zN~>LW;BQrGQC9spKmX)SakR8P3sSJVWXXK3y24lE zvPJHTEXHVZjJzxVP>7rFjlsVkhPc$3cOUoDW}p8w{2$-x_tV;b-p@>-2AL1$ol)8S zJTH0Y-JeG|&FRIHrR_ftamGuMOO#yx z(QOP*lTxTYvRfWXX^ig-?VSZU{^s7yK=ZE(hHTw!ZOMUz%$FGHdix`0?vEP>qrow9$bHjC`?7%-D@t)*#yNe>_)vMgB$%1^wm8pN zi9A~lA-%SfM@mq_DMHaGT(6(-CjTftWs2-uVI+Uw9*ZdBbM`dW(OVdtE=fthoK>sA zEBP$re=JKU9WTl{XE!8*E}aPhrlstCX%77Vn3J-1=%&Ay+D`~=FiT9?8|A4G;hif~ zG~rijnsO57_#ewOojqX#`Xc|wT4zsezo8m(dNDPRJ*$>laI5&X6IuDmBjbMB+pmFf zDb&%YTQ_;h2>n0&N`!>0(%Hzf%mWFc+II|7kvD#4{gxe^MnBJZyAljG{*M-e(@}G!5@&zrb=IRMl%vU~ zC^t_iqLeSb9!rlk{H6F}FQDb`@WHEiJk{4dbNOZPZ{OIpNvPViubEz{v*=VTiO`XL zcT0&BA_{IWb3Yd@9U7#UvL+X*i}aNI(9x5+0m<`D*Z7IJtLdEfH}uwNlyd)z1TljL z-Bu!lCU?TjZ}fY|mg>pHj5ogfeax?9fxDHbtZqE}wAyuq$Zg=M5dP|U7wuUl_a`*B z23O5f>t`j514KFJic*dz@b}cw8*N(K#`c!Q5jhRX^TLxGJZ(Bs%GVbvrGV(mgT=OU zsS)4)rpMIvVM6f`y!7pgqT;_dcB-%_~$_q-~mV{Q^!dF zt5Td(q~kVkjlX08jGB&3>_{UVsXzFD0+#d?Qf@k~7tB3YLsmqQ;@(7XE&S zyt031d61_qj6Zj>P@fqHCmikvg+}<=y;Bs@DC2aBw6@PvM{0L3eo+y_ULl;sj@$gX zfomU7fU|arc8UO0Ko;*FUK_rM9hlGSDtda{-69+S#NAq@rjkv7N{f(I`LL|RsF6rX z59VrcM{4c+aq^$yicJRuN2%4sxOuR`&6}q$tyS3a2FUV|QZE{hyzO8M{Fa6UIqnc6 zte+J<4#2KP$!M_mU=C?RTw8*?*eUf4f5vZzG!)mMBu}1jdv6Q<)(jH1^A(ywEW_hM zZ|AUl+1XI&*FYLV4#;s!3P+#=hJo@wesvt7Z#P-C*sP-cUV=8I-9f5$D2=mQ0ubjX zC5VEkU<22|_TPhFzy=$)$B)->CmvgxB=NOE;Zti|;Rj7pE*8u09(uj4qux0bVKl@s zP%n0r8kkS%d<8@s?Ehybtb^a{%(XeQ|Fa9We+2IY_|J*s`#-h?0J8 zGou%^n>VaBgZwtD$-MNY+O5kZu_8Fzm&^(m=5US_-QaksJMuN`$MD;KlT%*)yI-_o zdSel|{hhO7Q<3uP-j|!EcK(lceaM`x&xN8CMF(hoC#T@nhdiI>k0Obg}?=m)UnoJx{DtyNWoN5@YN607*R#5Dh}M=axIHNT84xaH zJ(DeBS!b@CW1F(W?_C9tuh@TMi++hveh!rF-wTPR-GlwgbwAgq#uKcP`mLq>Kk%gT z=;u&w#IX_n<|?7&33$V;(x=T>&OWC-V=(OFf{Pb0|90LIZeH07STM=#?d;(``;6qZ z^tuUVM9do}1+9`NCQIe}C`rqN@5_dYfM(|%w?}naj7_Ax1r7ps|;)$N{v<@1`vCW{GJ8y3wTEJ@d<@5Op5>s8iGoH zj@0^$`3VoG;=SbQ{(NRw!@!ySv|ZgWpgVgfzm2KHxzL$Ub`9!W_@+R%SKG7eyWMqR zv($(JNt9Fs#WxW;7?cx9LWrFIepySs|E4qU`if%H)d^>jlDGAr-o%9#$j%3vCc+w? z6->X20F}uOt<}v6q1}@oDBoOB^Qt%U)1suyPBy$q6t3$l?BZSl%yJrq#GXK!#3rOg zXqB>kX1=K!XZGJ(SHBS0xzH8&S(ONFV)*`_mhBZAPiwK3$I~XJZRu!9&(^K4S7AI& zL)j6(7J_;v^KGYQn}HIZ#e={^6^=OvgKI0JhzFm7Sq{e>ZHzV;i0pH3!)4a6f=viB zhhh!;iKbyQ^Mk}1jqeY3c1gOiWraFb^;o#^w5DnLS#*pHBJhQ;(e#rE?e0Oxgy*@( zgk$jpL1l9*ABa4Mn)f@|P^W4AiN_-J{usy{3YrJIX#UHn=j6LlZFl6MdEbYxpXFN2saSuTLR6d`fE(=%CZy7^jqXfVin9on z?~na=eu7BN-@^+1B7d>MRb0ILaT~d38F0E7RyiCfmeRHv+&t`)c^~*=D{)bX89a-* zrcOU8PKvIzU-yByQ2rNbwTnFn>FjTHxXg;x0@w= zczXu8Ubjj=bYc=lTVXWaoHYO5SI+~vNeh9$-PaTvl!c0~o`^M5hF`1GHYEN_n^Ra^ z(`b9t8u4oIz+!EJn?x<0uY)clc8d=wiV#rh%Bt=`sJ+#UH<5dcv^E&e@oAE8b%Ihy z51ywr7H($mwRCyaIiIlgNduNKpMZq94~L=>igY7?N8`Y4_7PyzH78))MxMpq?>&{6 z!!mB^yXZTpd;Q6AYaz}Rnr#O!j^0x!$;7xd1GT+jwVEFPgyIIkASE;j`9W)bL;z#i zZJvBHi<>1_*4lParseg2oVX|5FP;^z6-KMY;GNp?Fu%Fco@3H|q_gYvS*@IU6dy1D&_*3TXWtK<$i23p*?9j#}vi$@GL& zA=fMh#tx#4*;-v6RntEx(kms&nconhq^azXE9@LFap{Qv?m2+JA{JawouL|-hnMm2 zgEs&BGyi-wNbi@wJ)%W@>jD*|z^8u518=Y5w@z__O7_@e40k+a{Ma5yi&;4#r(dqC z<4A=wy5HJBCy)ogFh!M)54Imhz_8l89ba}oPO<>scrt`4kQPy!{)`HA+kBYUW!)?b zOYtVPj@phsg(hy^<>zZGZd87Y>EtuNF>nykUHA+Bl~ClWQozW`UGEk{I7K~+URxKw~*g0`ytanRMw`P59#oJ zo?w@Dp0vydcs44_%P_Pfj*`CHp4nbDg5Dn!gpMp2c;hu@F?Wd;{`7mBS&ks`FBf9{ z=1(v#)MEyerj{0`9a;VQOR8=9JntA?s3&^vb|qdXHL>_9AzZl97$9OuVo;U7 zCyu_e3aV?aqQveXNKV47th^ibk(jrDW!k4y(i=dSU@I>a{`4rXj3r-qfcqlG#908y zn#rHx2U4^o++GC*CaQl*!6Uxl1iF8DA~3Stz7Z;^q(65bCaL$CPOCMx=|dDi9fFv>ihHYZbX=_EjSm+pAG?d**?VWo81|Qi&3BLt|4lQTqzB-wgflAs#&FOP$(~ zuAB3j4@e>Dp%Ty3)ND4##_iJ*TSRox>to(%Z{z}&XDUX>fl_iDKcA;Qe4??#7RE!u znJq>wW)EaSjWMhBg>|rH1?s5KSySfJD|MGgDd5}QgD>FxvU9%q>vG3AO7nxhhsz}F19BI>^ z$?+1*kjl`B)-ha*-n}PgWaP3J4UB&SI+iaqCsQ`g6VuoBP>nk8eV6n%Fb=}QCW9wY zv++m5SD^WUI!6{O;q1GtX#k;N5`BS3+$y@k4o=oFLJ}wRiOTI}?nkD|V^E=C=-^Ze zX&1U__w=K%_J=Z3C}fRn-|~S7dgNjL%&2z_87?kHu5>p1X5OdLUcZ{Jr?5$7->(xm zir=GL8RrSR*C+FPjU(Ggi5F)0pfkN79idFN6*6)i#GvC58AQAJ6tv~12qHWuDg&yZ zR>*V9b5K%JpLDe+)8=>KFwW%B7s)?t;1mhNTu$AFeyD>An9wk|!8T5)S` zNCRb^S@85DMr!zzq`h$5DRztN*_^ek?nhK!R_xRNO6&iZj~nj%IH7$W)>a-P+}?WU zrZSZk7E{gLd}~3a!zI~~i>aqMY1=A^IaE5|NlGl-@r~9auAX-eu4QTTJ%^a7z`)KN zX5q-%GDOT8iy3%z>+{i7tzvz>XYbu|ir;YpdxD#O40HB~^(Noaiy4ULu_RYFC9thi^$T(gZARi7x-}2|-EJ9|t6kt*oRNTEf@QAc=WS2TMLt4fE1!k869p z4#p1BZLX8U!)85i)@(9`8KRWbx3u}tFdMFYiR)+$jpPvwDRMQL@V=e z=iBmD9fx@yY0|Af&yy-vx6=XA`YWqg97?k#`DNMTt4m@HsaK81E^naTr0-{O_8Qk* zO=0R3)4b)&Xr8wBbx#Zf8`$`iSr8*>1g_l#C!1|-R6b-c>s*~5tQ+QuK^ukIMWz!m zkXfT++j8D9A>AXpZFsY=IUP*#C~nPddxDj^;Qsmp=@W-nS{##1@`^jzDOcF*0h@JU zhIy|R=E3H}vfojoP|9y_i9Ky(?Sy>XCSPr-1&Cb$(>@qDteMpM_3Xy)LF1(JzAU*0B45MOb@%(|H`Lp-6uw9ASFfr(myUS)>YRXG zKOa2_3q3M=g3Z#$fgbm28>3=gun}>m6P-PXuhfW%hyA zPN1XqC5juUNv&QrEXmk66Is;-GS>qYuL^tB*mztL&KmAM@%_+b_FGRVdu)6za_d|k zhIac!*I}V-4@l?X!spDXOHN15S5tJ=rD_LFO#Wf_Za%x^D6JK%fG~D2JYZaeiTK%$ z(f8#oMo5pE%=l325}z+~=)|O;JIU`icYl_a_f06!1}?G-3x|9+WxioICRT6uvZI07 z&p|a7S`;R&YoVq3p|waeOOuo4$>(hTGRLF-vsjKkclT#$LgsUN_zhm)lVM| z?|Nj^Al3vF>+zHehqt78$+|37%ib`5yBidh9zE>P+bSClK9)i7vCa9WZV}MOGGRlh z$U_>e9S~s%pNOpoJb!u%Hl*II-koIA31_?2UTd$L6sZ&nM4m1Cxay_CCe1o%w#yf# zx$&(bt+PV`p_6utG&pCcTy7|6W9AS@QyITU;tzR@rKbnjch4zNq$gggyFHRhbb9Sl zY<9~(Vq)<|tpNVhheD~5nH&)bls;)k{vdp5Tyc74U;>vfK z@JG{v{Uej}g)73RAx_iL&&tG*GlnTY88D*pJt3d2;4P%=9$#HRRXloC`LWRA`eMc8 zH!7p0d6sEhtb<~>!8Gf$*D801GDv0XCawoR=NG=}X1d7#arF!*X9cxgI#uu zGV^JgT>KUac-u3l_-XLXJCg-YN<31~!b`Yre#_^<(LIFXC%EFnHh4hq_lVe4eoI@N zS&u?-P~P~jLzy06$zd)%ZvMHKsM{(qBG+%$Z9sM&adeVva%ELig*CU!C6Gw^29Z}` z&4YdSAYW}e9R0CvnziSDyRj|8_1V$QThLGylL98Y`VRDH!*h0ZXB3|XK;O&uHsB`D z+ryU88js_zNo?TWIlG?%rgbb>Q5D|;;QJi?PW0&A?fWwmCT~Do8EoXhjCQM zb5ER1Pw;a!b^Q|W@S86o_|e(z0@VPb(ZmYy)9An*sd%)?a*>>R5XYwfkuTZ6; z+C-ws@>5yg=j_3uknTr^$Ca%SA#zbsfx*v#IFTO9EK)A)B3u{8j}wjq@=<#8&qe<{ zXr63d`<{CfuWo+d2}$mmk9hH#sMufMCF~X&WQ2;{4g1!6FIarxaP>k8PifD#Y*4f} z5W_9>QXaq*?QsXSas{_~_jsRnCpb6a8Xu`*ZM*vEif-j(?@!g8;t1Lk#mKir&ivB~ z%jcCs*GY8J8hK2yDKW~M8tR1HbzE9>hQsG|BMPcNJex1N_)UGm>e8`#T&j|=D9mAO z!}Dj&*=;l-V&ivsqhv(QWKpWRf}s;w@w9?@J9ZQHMa#O|N}oiHc(beCck-8COJ{O# z%3`nRX1=-_C#hm+yX0~|^+f}bt!_L9@7{0+D7FV>a`D`Yt{mF_v3ZxDSLT{_|K5Y` z{jlagFSeC8Ey>aMCaK$xHW8nfDbjc6_YA?`a_Yw>)q+C~?|a8b8N?Ute&`}7smb0Q zUdjc1Qy-Nq_8gTP)O06y|IrB6JY=@lxqEkVDP4;v+dQ$*_xJ|wEamryKM~t>Z(?e| zmv-2iMekI;+--BexBJhCHe|wUlToQQt=%)bxLftpY+2GxHtwgWntI#y-1Kt5T66X8{L(RLk8}H-NB{ z0N*!n2D9AZO>2EI^mBXZ=Y(%h>?42Gfe(vzI(w4P4JsoEEMAZjWx;>p;5O!a<2$+jg53t8Nvs+xO)r@ShPn zuIsr(uJ&^X#QM>v2s4wT-$p5TsSqUStHgl<3=r~hJXe9Qu%ttuSOeAZq}EFKBRuSo zbVQ?VE&{~u$y5xv%`WL{LbprZo%;BjWe(6N>X}nAUNE)j0b)r(0gb%!Mw)xWnG$r9 z;oh#ZY#WPiAgcUn!=13G6zIF~!d#hch|{c-|Z#ZD{9;2cfN}?qplE=+MmJaEo-1*qjPtYC^$h}Y}&jq?vRf+ zcwqGIZyYp{xV$&bJcnZ4+1L^a`?>t?WHXnvZOjRMeey|&ebni)@N+cx{Uu^OF;p^; zWIhVLo45$^0LMN@-&Ee_!S#Voe3yzI{?QfnEX*&8`V7#E%HYL~)`Yc0@#Ti-N$OJt zmBxR@4!H+tF?qP=LNnCa-Vu#PO@i;+9l8D^<|0O)n^(bBWt4zF4Yd0yo<1SHYp2gQ zqJ19M8f}k{6y48Qo}L1O_~ak&Z@+*62p*4pgw5-9@}_$WJ)%F%AeXdHvfJA|wi?X|{C;5@*2q$6bZbS( z`5IZf-;0LacsKJnNr9R=z*?On1rOAP@>s&G$k~@y zx>rNE!1Ib|MXF-*fS`?ua7t@#xBZ4g{}ZMp_OlSi(9)BRFIuk7a;Dhg-tf*g$Mkie z*I_tw^YwmKBOIN|_fzDt`()a~J&BFZGmM+*A>o}#k*~G-18ndY+Qpintj}%iaCjpeL98y{#yVsNx^Mc!7pXQ@ zRd$!{UbP}sOR>6c=eEUCk>SpsUK@EzEP(RUr&L~qa0c*c=E3qke?i8%@tX3TO1GV(+03C%or*(z0{m2tNbVKs8uh@CN~aM}3s^|Y<1OWW#M&%-QL zq`>rKKFwZX*2_k2oxYcmcSjGZ<*#amA6v}$iEk^|2qKvp2dXB;l!REYzZ)g1_%;Ps zxf&}fe;T<*T#BcHQF~XK#qLC^hJD>J&~fYY+ZnXuo;GTCg zfwu~vDD-dqT1lE1;N6Diov7^Z30hq1l3oKZI6Mg`{@Fe+vF}TdL z`+UKMQ;VD=>`~A0$ykpFpygsJ&-eg$h(P|QH#i&h(BvxfdpM$Tey7Xw?X!!d$TIO` zgFQBzyaXYK*QoK8vQyK((>#`eIpxrt@4lk)*ZC5k8+15_vc?C2Gi*uP<;V|SuS>dvB@?%zoLwGc7j^HGcgN_b$2g>XXDb%VG9mo5|9MsQV2_hK^?HQ4`A7mYE4DWhZKRhfq<9_}7KidP%s_NCNfnhU`4}HaG=kahl z1D$?86-d+P4%D?NsqobD5Jj!9&P=j*VXmiCY`9j93|?AqUZ+0!M4p^8F{yE10{AfX zIMl;tdNyHeAT?-I$JW-*x6Ed4GOkfi ze}McvKGrR>{b;kk=t&K<-LH3Za+d$8#Jfzpdo&Ojahts-F_734DDuZEK!*p(HDUH{ z^;Fvp-XdD}*;YOi$r{kfzrpfiWXQ=)t3k3ZAyk?Z7xl&*dB;cfB`+`{tKK9~qA7W^ zN)g`9V`tUj*-M^U3#TT?)XuOEgrEI`I66^Y5I^h=K+4-n!{ngf008tB%fj)+J)l+B z3C6&=d1SLWj7WbN_uJQ;u7*)h9_3q$yFz?ZP-vUk;q);7EyALVug#G5BOFP}rs*{O zc>fO4Zqm_c0cJ-Swoz3`X}s$~S8@QRCLDX*0R0Z*Z9Ac)@@o;%SYsI3#6z=*SCG7K6 zA_H2g)XVBM50w-**Y`6@+gG0)8|yyY9*?@-r#_i^>pT22#GeD@j1#AMw7qM|B6BY3 zz_UW1eDebF?^I&$CX`*&|Y^wM|cCg`WbOTUEDHLnZRP&hnw zSIV&ZO`VN<10A=)x!Z<94KejISh1%4#=Wh-m_N14dCxHBbQQMt&L|QWt)3Z`(&DQo zugii&6s!;U@NGIz(Du@VD+DFc;Nis%?1IDL-@2u1O|n6!_6LazHVp%|2gVD6LD`c! zX0t*WV(vO2ir}Q;o98)}sE(<7c=nj%8#?z)I6yi&4;CL#+hu^z-rKDjN5Qa`Q+#^@bn*kOa4TJOvjeZDi`3Eombt_(jr(@p`*nC>V|f+rlJ1?dql6{&=-iSuU5#^Qrw5{)@UZ?CJ(g1LR!Ui@)bJqXVBuHVcy1m(5JU7n+KU-dl9VWL*Xe# z{h%roG&P)Ak3^l_UfU5duNFIn9xsO=7Vu_3!OPM zsM^mlN$5OWUDAcs(GaW47p3L}Q-gv8=q|D!>De3)uOy5xlT^`Le+*ZhnfVr!gA4`% zifga4^;Rg7x)7%3Q7%Ku)7F$-();6&oyaySyRV;Z@v?Oay4G>?kyasy)s37P@T9uq z`Ua{SROa|2ET7=xOndkTvwY3$MWJuXu0H+UTGOo8Wu&msYuu**$HsKuUgAz}fMKvx z@>a0$j{f*t;ikdMe+nZc)I`@}j^hLlFP>(+mG#>&bQXdUOcnwU36wSkU%R1=&pH)D zc1>aY^_1CEGQ#`xCN`2{gIg4D5k~mDDd;IE2=j&fEsrns2l5{RrMy+Rmxci)xWsd)MMu(1w6Dz3Pd->iWWAQBk)D z_28RsGuz@MhvgVwiftXR7jy(cjX1$p=*_dx*j+iOVj<@7j(Mz>J^hWs=4nlGJ|fA zd@L=cM?E~<>}rG4H`*=Zn$M&R5{-+^9AsghdDU3B0 z8^%jgtM91WHv)*~h^ULHi@*Hj6ze(6w_pW=WG)!0@4CukGR6&8rnD4H3sCZ^?grI z79|KH;?*C+?(3Z91B!ZI5n?@}ZaV`(7B7KuyXV=H_J0OMZ|c=|@zt4Y-D*)6JNnDi zfBgKdzvh1o{@H&_DH#8)tE*l-^;f*GURca=zsQgiZU15&5Y2^5dX4$OPVOG*b%H#i z5}90uR!(=tG<5g_vz01JC%;cw9=QkLOO+xUOV*DEc5rFy$0rzmNAc7t*asqp>+Vg{ zX%nGFG^X&j0YM{fzld$0_PMn3`#$e6kW2^`%P9Zr#Q-%woI-tQt=q&^pK;MP+mOgr zFgInH#-$6F^`2-+Jq#097rGpk&RNs(UX14lz2*VzF&!K+)h5m>`MyZAS5|qbT>Yl- ztsf8|UwNx2LWX&xy)>ZfS_J1yh^5urmDo{~XPcIk6~=slou~yXs#unO_Pm|U>l!pwFZ-2AJ)Kg zQc$dkGtdu2!u?Rm{=XGNr+=_L z^+cfS(w6z_(^q$;^k9!&nZ_9AZmORFJbEZEdu+pSs_s2!+&vlTr{ypQ^pK z>~(Au2%iGGCQdX=6~HVwyXf9U=H@mNHc@5da%f?ZrjKNYk5Cw=qVdBwuVj->-1 zGJ4p1f`@MYOD^p{^=J?~Q4PQRdn5;gx*E+I@m2wakU0Hq?Ez_dGJaR$*vka(y9rFC zzRaUW9aH%!zm+Lc5uwpwc=j$NeQF1H9M~=ofy&Rs57_-_AGA6Bcf!(jg?OrtBt*QD zJlp`LU~qr7hIASDQ0U3(519Yc-4D1p-03$*puW7|7^JAhk#H)sYoaLzH#GmE0R}!x zg+o(NP7WnSqMkH_?YQ`VCF1@zMnO#iHU<1ZBqayO3jarvZ^GsP|6P3Q!38Y2hUVq}lJ z=t>=vg}^}XB0fMlExvWPaY#dG<%?uSpjM|o-~keQU>42AH_)Mp|M^rv0rM*?Be1j6 zL^u5UxGs$r@A4sRx7BQM@qFU`q%cb;W6s^)=-e#V9{cf4V2EAs+TOhviFk9fIp2>4 zVPV5$hXu$a&t z4t|srTQ(tg^yeb-hZT#{l7EQ`MmhVV)sGK>Oh3_6i&n!dudb+gu=2g2j)&TODE%+ zV)8qYPm6trWafns%_dqfqNxd#w33}OfN1E9j5~gfwM=Z^mm6_)BkH=c;lmE*vegw7 zS6Gk){B~$_cvmqc7OOYXt}TmODPiqC)ZRX>4_CaFjWI=D7~2OrJXhw!myJguLECIC z4@P*=sPO`&uu=(Y1Fw70j|w$sf9dHL7%8`eA25t42VEakxBdC)=}>Kn`8}@RN?}!H zO2muK!c6E>hXbbxYCxCQ*yZM?mSWG(;FUane?C8r4*2-D`H3Si`Brk2e1=7lr>xLZ zSDNs6YJG|r>}8|20B*=}`BHa%h@!i`jBZ7pXvH1$Pi+RVib`!kt(^|DFbO{2p*B5%%D*5H~h)QtDyn1Y< zlWfOeq6L6#)#~(-<#V#?=E^f>Q5;6euoUczm4EAc2`wXse{CQYqm$_rvvJ2iQG%e! zjN6)?%6@ey?Tz?lJ?`k7T+I3dD_}~QZ1|Xhr*uB+T2-m!kzHg2Jnr%yx`B8{B}VQ@ zn8b;lo|zucshpGb@1G=m)eXfmx==JsbhKh7RXcSC`bxMB(uJXYvQEq zb;E4TQ?lzlhiXV@_m-F6Vx+UpDx(uXiaarV7Du+42FLB5TeP47_bobddN?y@Z_0?1c zV?KXxX5vGHSuEcbkBUMPF8SC?(nT+**62M2p$trYFY%$mET{6b{WhX`nro^DPvFUp zvx5J%`R$4*!!gAzcqaPTx|dJsw`sKM-(`*@I8E16jsH)4>b%K9dM>^qbdk?>&GgPH zEXN%`rC_GMdimW)5dcadku;mK>74rm-C< zR7Z<&sbwE*L>{7e!W~iXc^HGj8c)A}A>vMhaNnIUtf2*Sz28fv>mZQ;DviIZW_L&_ zF3K@19ZN9jssTndC zI)_pdHN@m~Cxc#N$2dMuIh&k$z_RzwJ|M6P)I z{?7M^NUgW!*kkm!xi-RH1W0X;WC3R@j@^AY2)X4RqnfaOLiR3J%}5!C-gH{_`Hd64 zl<(p9gmvSjb9i7OEoHpAoT|I`i7DKsfA$;tW5&Jtkgs1DF4{b}$H4jRO%mtXzXl9f z-&ehU!f0?W=ImdWN0IEtS4zdCFIq7$O5FMtWfaLo^g7NTawWajzlWh55VUFUymT|d zX7lq@qo3#8dBju-d3734rn^2hWpt~^w)YrP1@f;46_P5IuMN$`L2c{KX6OlqN5@MY z>{!qObX;?-3>81l@sv+ryM*3EtcTosTdL!@n}TV?cotkT~y{ zlR!xd*WccVd!Ctj+#|Su$XhaR`Xj7zbPJ7inOilL=(SL`l+ ztN^8IxbK0sq}Pwd@4p~+{_HAvART)}Sdbo${GPydq1u-QQI-@ zvRs$YKTD-L7X}OI!tf z2q*g4tXu(!Cgz}Q%d%FevdypdL^Wd>obfqk0sU$K+*JN`8D;VV6LIA?0( zVd5$X-A?wBa4rwae$ULYm^GxVwedRzaivrH6Fu@?rgsl|iWrX2H|B6oD{ECE^E^vm zT|l1@I}o?386e?l@iZF;$?%;!LR7mgqaJEDsN%4CHHJ=Yq7+&t-(0$iQx*!xH{ z13kzi!M z^J8(&e~Y=N1p4o|*{M?cM8Z}WU_|~hebu=LYlwth^e-ImU%&{JrLUT$7#ZwYIj->?|2+ukTu$nP*dt3NM^9b{Q+g+XDW2sn11Ze8C%kNp+s-b#&G%0IbmW|au zdu)p-(>MlUjy^m;{Ici8>`9g{xAt>&jn8a; z54Rr|wDqTZvv2{51XDC>HX~=YGdPSglVXSwH*>_&q?)gwk~Hd4>NP$(yY$RSO466P zc6vo-7VJkj%Pvi2_^;jm5q?l5347g30~qLZLeIkJ23}c5{tF(C?>-wZeFoZ~G1>sT zw|VDT{RCz?8)h^v)4^zt8rY@{>SpDhb{Bp7wBTQP80e!dcm_L0kvr_H>cr2J0BGDufFvEVa zk|#o+*{?t1g2T}4hMXu+T7{z(+FACp(f(k-U*@u-e$*Qjp}qF@wMz(0u+s}k-dR{{ z*8ABuFi=LD!x~B9u)}qffZm=&AfkqOlh-Jj?*~bbiW4Af;w`SpN7gC~K+mNjY*0^t z?kHgSChtK!vAV-?<8-9#0O&VIh)-{SvVg3^aHO}-Q2jnrQq~c6Kf}e>6VuP`g!cg+ zNbflJDW&Iscj!}3`dRchy*$!7V3lR;N$m``MmD|zCW@=N#+bo--_~H;P9Jr_e`J=R z`+(bubTN+9{BEWvX0D!0zUuHqaE{|-%IRg70AK0Y-;4MmJd~as#5d$zgru6VYtkiK z)K1E7Mbkn>qc)=TxmFvU@H{0Odqsh}_#F%>HFW-a$?(^VvZZ|Ck*Y?`4Ps->^<}>C zqOIx8v2dzvh5Swmdi-!__&)|#w@YUvr{(CbAjG$)zFt}oTMNP~B+iQw@9h;ueQ8?w zWIVJ5Jsy(+`;W|)7Du)=YD2i6?g_`B$19#_GmICRSH8RdkL+M9$3d@pv~w+Hz*St_ z{K+%?iyjp|w5PL7Um+mlNA=f`XJjv8#J}nIO&{s$+OpP=Yda&aE+ET(@OMDc4~I!-<4t*$IQ&ompT|$ zXZUWFSRa?q8G|0UzLP_*g4nvyheGh0Y5tEfTNa=*=xM-zgS4iI(MPO0BS!BiLcJk7 z@@8M5?y_a`w2Vkw*PJbD{10*uq7@`k)v_?M{^IH7MVNY0q-*Lv3x!y~{kAD7(()&# zRsy~?%~GL~>-$+!{ox*$jgg>OuC9U*2R^?Nc^Xyh1ZnL6XCO^0AU2{RvLuR#@jOGoFa4FwAdSpoQYi6cjwvQ`Hw_BvBozShDOczw;7u+!u{5ORZ`r&gb-YDex<^3 z3>ka4#4~f>Z=Q9SbfJ+J{=`JJ*CTudELD~Dy@qED=!@rHeQg?b5?S7S8r$!Ajym5v zr&2ppBzWpK?a2*%MM3VMpFiPmb_6;dB)+U}Ik>#V??+kDj|#awICL%xMvO`(|Jb45P^lb>d&ls5zwipQkO^f&4;s9CzR;QDXCG<$*Yh+&xB zHPQyLzT-4&RbBIp$~^)>yqD6IG^yQ~i$Ya%FKZ^RMgNBHgi*eLyy&T<{9ozfzps{E z(?Gy%h0Zwd(gT$GsQ2jFAD-O-^;~AFKNixqpxFGg8({v+q5V+%?McZWk)0QP8O6F5 z3Sw!gLRBjqTABM{Ifm@k+UNbKI;Udzp*M=UffV{nmgtd5)(@OV? z5Rh>3$kMylurq%w=@^jDMe~V^gv#shPW+F&t2^yU6GTGJ`DOPVM-zDZ<~Bm|ii)9} z4(}19>fu9dZoLmME%WgR_AfU!dma@Kb*>y+Og@`n5Ul1B~ngA=*GcSQQcJmD52;4@o2b0Zrb+f~}HYcVzz1EY2u3^?4x zHuAw&Cb>A=FAvY+Y3rDFEs2|sUF5U#MMZdwfl|FR@yZE91}q`b+SeZRqaR`C!kO_I zE`FkFTO_5F=%e3LR)f2pF*8fwE4)$trC%|u+i1bPw1<}QEOEGbs~Jmr!%I_7tC?{| z9Bv+*;_!Lw3^y89R^9mSV-axn_Dz>m?qm4VX!G1J<)DN`leit-X@6l&Pwq-i>|`!% z`anN0%Ax#NFlody?=I+;JalWP_=}=YH}SsAOjeAY69HgbwHvp7-12Byk+ZecW(Si1 zQz2gNBY42>uPr;TS7 z^SaYK3^;5v&qkb>8+>Dfb^|F#=Zk{lIo_`{KGuoBp6TJi{UazGe+_1w^Ta}-%QC~h z(f;1!q!~f68#JI|Az#$JPbyd2if16~)zOA$nZ&WjArC%@o)E=#zyda&42b-`0jQ_X za7FjCG2Ef@%n86j$-sBPks7I2P7WBRd+r;Jog!VJtbbYmK zo04M^RfS|0u7YbWAyO3B^@13f3_(Qmk?LYbpA6dH3|oD@IiI6Ur<`(ad1 z8P%{;+OJy;!v#gWSKAAopdtJBFaL^Tg%|RKm#$82B=ncOaj~6-%_jkYogm8y_k%N$_Yw;iVTclav%*@ zITo*qWW2U!Ko>E6q~1A#g{x7?0#1(#Gh?G&*wh?GFVzrVi2dgUS%@OB-QwwNN)+gs-nB1KoGC*fx|!F~v^7 z_pG&hXX3MC-@uUORtD6kK_XWz`pHB*zPEaTWbF=*!H-lgbXO|ERW%+wq_){LTgG@b z99zW%HmouZ5JAWJElzLa@kn3CiQ8`W!0D;)j~jP8oSmcnGTr21oOAa`k=Li$0l?`5 z-%`JOWRE5O1>dPR#K?9%=WDgh>*^c%J}Qhjd=RPax#PL@_ift??SCh9+@hzgs+G_0 zp)vZI$-cES_m^bqQdzj@M+r0_`y&bB1FLBy?Qc z!NODeznQJ}z+Ay{^V1$i$-sjzwOm-P=lg5r)fFw5v49kr(F=8fneUelTodJ(ZL+>9dgDw9(QUfq4*NL6jD+(7yzJRg7PnZ^IO2pk5o<_U{Ul@=+ zOOFo1nr&kcOMS;1DT|JsZ!+NnI|G!$SwA%)g;Q^iMtACZr_4e0PYkQuE@8mq!iy~U zw*hEIps+XnaFf7aWqNuJDk<#SD4R`s2W@`XL#99hd0H<2!rVbRRC`UzJ8dEFz}{x9 z;LmV33OAI)|ts3@7Wme_UjeU0>6Dx*xvn3hjs3cvlcjI zW`{Wrzl?TlZ4U>XI+Hx)g>;d=lfl>%CD-IejmLWcq;J9Y0 zZiTlWdhPhGDapG~Tj&;cs!1sU*KacGE$xaP3e=kpy<2t#iSYaGSrt(t`*2*vd! zHJ5$A}`MLB`ryB?=1+xk(YkExPb>!MAZ$pi0!ygX3oue$r;=kOdQFE|u+u$15p z4<*Ocix=7PeAOWwop%z(X@Ls^F+@sd5H@h3?P3Dva0f-AV z_(OO3a^TGP!ua6qxYw4Q6!=T13d=YF-~*ntpkW%Q4%$?cT7xE+LRi1T?A;sw=I~#U z%+b4qsP!Cg&Ei0kOVxfF5?}v>bWOvpNA|uWQemc!m6{zGg(P~s9(nAAGoinK{krOy z(xC!2`)65>k_5LOH>@tEFexA0IDuBay_5|262b+_!ahWbd3@8BX%0wM|L)f5SZT`G zuIl=308%TL@`h~cNy7fcqP%4|2Kpftf9sFKRkf*6a#sSK$roxlzu~E*h7(iAefw|d z@}gwW&l9fX-g8=1`4+@VsVc`|hBON0KbwFDM*H6~FL3XC-)R|-bvNPe1xF^UJ(%ys zXLz=HUo#+E&VnPW)vQa4ULKo*kU z{f-gC<=nHL8sQe*q+d-x78@bFzjVukY4}gSHJbzJ-Ct8~W}qK?MXa4sPaZ^{^qzE>MBO=y)C?D*b<8^d30~o* zb!5Lkvmt}R>?hIm7e#W5isF3cP{fSK93d7re77R10Zvk2(oBTSOry%6bl&;STCT0w%r^R3n(yKjL}9@F-Ing{ZDz^l z$9?-(&0gSty*&6B;OLap7WIR#_T~4V(O1WOR5;ilX;cuO&66#EM97`PdND(MRJj+l zRM%qYe@o=I$&RfGerAu_N|y~fHP#wtA?ZJ>uhn^(s{7*#ioK1cL*I5K#sVhd+Mcd8J5 zh^EJVdWnQ)C7G9C<@7&x9CjwJ{%+VVI7?2}GS$!_84$o%_hKWUTw9RjeMj-rzaw^U zzz|nRBK4FW`b%>Am%8XdPOcLwE&QR!YdAahYoFF>V4vqTE{gK{-^41gaNyJ8ao z@crUCo_n1dlM^N)RJFKiNh5Ai%#XxX`Tu=sF@hfbH&x@RI0-;ywXlY0WC2hy(p zOch!uCB8fQl8{w;kD}7Yn8C7}aV6)Wbn&=8`KgtqHeXSg={UX3SAeHy~OL^@Yw&i|L`3eO||QWPhd zZNq8^_$O9<-uX@E7ZSxS)!c)!U{9O!XhYfPwAX|66%mN$TjiApt&=PYvogS)>jC!` zpZL=XBF~DWezqm`e}hX2p&r9JIJSW&g~jg*J+KvR2sXah}3e*f7Dp-^I*qnmIv^ZMs* z_$hav@YZgH@B`=foiKor!1Wct9Jr-D>f}t9?7C9no5ti*)TPJ2$Y?lQ0mD{A(^&$9>XHRi;~1 zQs)Xp*;qb)4*SpU@}P@-J*-#qZ!ZUrcm_T(K`O6!+)(QVsH*U7_|ucy6sJD@-ilq# zE3J|$N7b5NKyCPB z<%UXXuBf<_xPpd=hKK@!fWVKQ=lTBr;63-uJ@;~7Gcd1n&zzZ)R0>;i{iu9Iq44H4 zBfNGjv)YYT8dU*t3^2a0R5_2L&&DQcyAoZi5$XRZA5eWpJ;Zg?q-4>zNT1FL5y`jcdK*f}oBrXWoORk@IyS8mh55}h?4m13)o|idQj`Q2V8sTK%&pwae&fy;Uguqf zhaa8Itgsi77NoJ-A_{CsKpxx2Dli&B*GStyY+)}0xrbG91hGg$djMY1`I}a08_<~&2( zZ*UTJ){6cu7JRX~Am}C_TzcErM+q0$-m);=<8qVV>`GDC_$VCz^O|7=SaRoQ&}G+K zhF>{_BD_XLl|#pp4!CyF^FI}gtqL!^@`ZS31>F~K-?uX^(-w_hwFB&$VC_KG47mjh z$_^0R4MVtX+d*f%us=T{W=U!xiWU*!JW6y@uq;xvxpr;vswwxt>!t#cPtHd;d8xeH zSbh5QN@ugopM#VWl6U<{K6`Kv8N)U$E?>lXg`y)&4q&EXR{b#tF`ayWci+BTsVIFUdh0r41FNlQNQ|t#^4{Y{VVUe zwq!EOr^dYZ72i%3nEMv9@32YMW?*jwc#%C?h^nnz>}4Ip#GJ`eV`vJ zUYq5PJ1;DdFEwW#wea_8sp7i0hW)uQqDQd64(pkjK0 zghn}9HU?cex*7)}fO@!pNnJuG7&X16)DqaKinT9o&+5^6C|Dl z_kP!!)Q!>kg6&>}p`TKASY7#BAiYGR-<9sKMZ}Jo6~L4J$YriC@@`{t@h_3pcSryQ zzE3X&y0|TOteoG)(ABBtC3NfS==?Tcl$W1XFS0Chr(wA7JT0yCHv$?v?%Z{fYwe5s z4fc4~U_goim&96NXO8*RHXu_q$AmVecr!-ut|`@KBOhdh-K<>Fj!Az;od( zQxy-`P+Z)bV)0PSRLR0NTdq%?_fFvvDL(-wcG2j|cbL3JuTbjI&U=(V*71_hi4*d^ z|L&G1yS?0ONSsi9^mC8c$}rn5;LqWbw1vgjC~f~U&EK}#7esoUVxu15L?I99f(h!T z=qIla|F@V3;3dkDpA{g}Q?2(ldVN~-dc=Lxds~u}uJ`E7q`3awGw+zr_pw=a-KmJ9 zNy8SXBEA__un7FvVBLp zShhOngn#dRItGyLWt7Q(6?NwxbpO|_3fVvU>LIt(GWmo7*TXX6he`$NHBsGc@izyq zRDnvhj16n=VFXv4f1MWV6+IA9y4kT%`qdDwWhvU>vH8?Jd%;XLo__hY=Wea!c(JZu;|}DWXmKP z6+5A}+v|X52M%Kq*Bot&aQ z)hf+;mA6LVN8>itYDD_wrR(vatk#JqYIM=|9ws8s^5udJcRI55PT8197xBeLUT=U3 zpawR~tjM!0Jw75&eK(Ds4J+IH*rVO=ERDOb3Olxk4OCoYBVNn(eC0{sW}m^}Jm>&1 zszDiSV97g{#d8XyXx%@s%mEM5^@R|3r+8krf55$_Dj;QVQ{>QlSaJKzLGrUOX^SZC z$&}*u^?^rE;8FF*W=I|CiHyim8}w7S)n74C#P+)Bo1RfuTf=7XAK3w;1`N&dAQ|QP z1f*xdsgs?-!2T=R%G4d3$s8Un@=avC>*0-pd=q&=n%2sK*;K(DA8R+L|bR!^$WYWWUI-dkx$r*lf`rmEvzcNcn2)kWBq_@_z#FAh~zjTa6W(mRRfwrUK&l#4( zow3F3cY+%pK7mCHhaZLEV%wHa9EEj-XPxYbUbeJ~W)0mGVA$tGhgp>gRihu=YCXLv ztaaadk*)DiS|b4uc$j_uFYg0{H)Cp(GbBV0ynl8l+Cx_VY{IOCN^sa&lMWdz+pI2z zl-9R#MmYax?B(URz~M;fkpVX^SWXmElYa%azJj* z-wtZvj?+rDnxo@}dOZSSj_MolPuxz)r{r`J?B@#3jU!gwDv_2w!`I%qb_@3mztakj zx!W~#bWw$WdiY)4{cx=vNeKV*C&LB>4gSMmXG34`+2H$ssokN_*woNc^&eI!xQb`# zG2eBQinW%nr*sQ>I#Kx9nt*+-lbL;>-nO&N-A}NP!S|m`HolKV$2d(6oitc5%gNEE z9nc7cp-_3|1QlRS(FL%WhB)i1r0unOVcYlC!a4I+*Jg#KhUse0IrTg78lNBUwf|?C z$WPGt{75fCVte>fBgg6XuQ`=%2~ps~PVMEv^5^1ON-YbHw7eU7XoroqX{&(Yre=s@ zz5Bh9iT>r=mw!vQc~*Zt!03uZ6dAV3tt6$XoO)(%5&Y!YL!h40*9W6N3mk-U)4iOe z8+6d7qMKj6$drxPrlB7$LneGZYUe1a zIu@6d0z4&DaQP>Pi(*YP_eTKyK20kpDCg=89u$#AM*(%c_9YVAVed6#S+q7cZ`gZl zQY@F!7og-fQYF%s0kpj#s;!R^;;vfl&&!bZ@7OWwN2RNMx?3E$>=T<}d9iZBOh5l5 zOU7GrD1NU2P;$8E&=u%DJW<9*$6mLF43{++GdZ~=X}!VI8E8{CDA|Jp+GtVsg*qWA zy3=%>qui4jD7E|t7S67AL%Ra&(QlZT9e@1AaaZ8KGdlG~zkf8WE=RqTDIL}- zk((jk3qxz>=*6=WnTM8hi&LK$w-Iwo+j-yHv&V` zRxwAnU3x*~!g>Zzx=T@D2vv`|T);^Bx0^mpvEmYJB-mPPz_eA2u?X2pFV;h1)8$RVX^CS}FUA z>|X+rDO%@6dF=)&!J<}q@P;}vSNFo8@5$!wyF3%K!D#ycbssQAH&xH-TNhca_tYdX z9LB&j9HXJ{-$w4l%+J4ui!M`0V(!tPfKlRHk%M-a&q6tnxZ3mn=c5Q9U_||35Q+Im z{8LXJyeV;0dEEM&psov2xs2Lb7I<)M!M(2*pL7A zOb)M#lzHX4T^>RAiQ4eT3y$Z)((Q{jZ+0Hi2x6Vkz8p}Q;@r`H^U5Zfs;;MRNJadZ zJ4a{nP8h@_x7b~TD%~#HH2c>TF_HbgZx3y&>tZi)c7g5a>FN{L2lFUHTu_2$=QaFg zzV2c1n@(iAiaZrl9_gnLgAynvbG^1cbvm=Wt`FWj z+OSb@nDI+-EQN(V=nJ4q_TfR``$rE_m{t0qr(lv@Z{cB1=Aq?>0$&F7qPrkua_&j> zCFctPnGq6!w--EVN&>HepC%3I5o}H^VIBNEy7AT1;>UbZRhBKc?62G`BF^)q!p{ifIJ3q1;6W$hZP;e>O}<4H8QzA9{Dh z0W#=pxEp1gzpJEnr@=8?CmW_|oaoMyt+zGEhUr@Lxv?DU`3CAhFEO413Z3U})<>l+ zFKjwMunO8rD85dd>LV7+vozTO(pjay9|g$$s^-SJN?X@aM?QHvQM>atBFrcor1eeK z0W#fYEQA8&&)if;KEf6z6YOvLNoRv}MTdH+m7den4v^tBJsA`{FOK+#^(=VUL>=kx zpPxj~ACeP1W_Oj$3xfV|>l+8bsH>DrXd24D;{ZV&eA!E#T~4WWfXwgs|b4r4A6xP0%X>b7;}0W~az7@K842Ll5_y0L?3wui5Fy>o|g<! zcQY*3%&(cdDgy2el2NReMa?&GrPaeGT%Bs>EI>O)P^Jw7=??2waZQg}l)tu0p|}+| zJ#}WeaHCs<#vi6+Hu0k{q>DNi(v5Z~%J<~GChXD)7s(bG{bF2WBCg02%_bI0LOX*J z64!qOB`|Qwgmb10`Rq#iAFxC9m>imISo zX!&5a%m;1s!wB;~VM-{`@!iDQw!??Gk|@zJ9`sSf@%cc(HuT5*c7NT9xij-1AjG_buVHC?0Mg0k3G&{m8azAi z1TK{+iP;0~YnH~V#Ijh=uP>U@B|BMShwrMHzJ#de@*$VzbB`Ns)tTb-A5oX>4WKuQ z9<#|4)}s``tYqff5R#M=?&^*4Lg}OvGItT*fk;fjaO{+IT;3nJ_^<^T!#s+>1emQ!B7d=YT`7SuI=E zGB6uyBeY}AtIEQX8X7EIVfT+xk6XLKI@U7uKWrtKObprz$^FUD|I{A8^XWABTA$%k z>dL<={K>caA4PWpIpJ{{VJk>;%mHp}%l_%RJBK2BRKPbW`y!O3LAL|k|Ky-vrME4I z)^5Ka?TnoeZRwX;y|r?$GtVm`^499)T!B|6(~r^-FYxYGN*|`0O&^ zN;d@l^9c)hvcq)wo(93ZH6y~B1VjUvh!PO5NkH1VL{cUWyjCRyap-Nak5aQ`K6#p z4VaopR^1onUq|h~M!8~dutvFwF{T?&e7y{epGNAmYn!TVi=}g6j);ok0W185i(0QxBV{1Bi=s zuOyyYNK*#lRRBw^AyP$M*&K9cPmrw=w#aHUU6J}m=Vt%C`>x6@mgCntp|?j$Rt|iE zp5xlFtyOZ7EG}!M$#TLX;X`{Dmo-NJSH;=2Wc8j^WXY<_5g>5+EA{o5PT27ct-|1A z!)n_y%X2o$7C!rnyaQNXKh+P;8Oi`C0T1qP>}l*6EY!^IxO1#rKdtd7m3shcW}230 zv;>=Qb)5sPKzr%-w%h{Oz<#xH#AUObUwuoClB=|8j>u`5*U)yGg)w4*=Vg8>tCa*{gP4|up4*t?B_1&R z*4uaHLDMlC;CsEZiCZP!q(>k4!YP#G*H31~RMLy*<9A&BAst}{$)t?FF%_{01w~?p z+GxdPY<5-{;q@Ll(I8R;%FXt~EvdNyc6-W|)?*1!vy*Su!+zx4Oi$UqU%%~&x>lyI z$g(bmm^%Oyo|=Dv#&4zTYu$aat5f(EmUq|tg9UWgg|kaUN63T6>K}dygNq9$p2Qt5 za5eHH?1S0hq}hEAF^%YJujJm|O2`tr3N zl<71=WxxJAW0Rf)c9lLhX^VRD#8Dk&6ZWo;N}%74PzRZRQ>%>@J`^c|vLAn0UK4%# z7W4qhe#|hdHd^Xd#cM+4>atf&v@Vw{>s$nyNI@@9oh|bJ?IyG&R#&B=f)5Q>rOl$` zA}fsE;p+Z@nEjNCtTfWV>Aw5t=y$xlbRl_8OJxWrIIV_~02Vq0}#_ zc>W93Ux|$A*Qxe)+K>;TK6vWfHOyo$p(Pnxm5K_MbYYulpl^lr(Qcci2GviiyGzb< zO*D|V=nJ&w9lfz&!NRb0{V`)So;rKQ6!2VO1c|$%+Zn*)dOo;)u>gw9+bfz#qcn~F ziCt{td~HyvF-Q-W_d9uPM1Ib4Ry4){4wWaX92+6=lf?u}pSHl|C$EHW$2?aIiG3(2 zKr1qU1uFKsyX*I@Z<$3=M=%(hNaj^_^rvpp!wA(v2N6`*nESKZXqk3rj1A@TI9O*v zstTEJ6Qf9?l-+^j*}S;wXhjTDsdf38GcIbydMl7WWdVYxlfuOP?kZy_N;9oy>&j72 zqGOzqQBNMk6!4VT76Q7qwwT#K0e(~elp}NWz|SXe*0Z|bS1F~%hXUA9-qAt=mG_f> zPx3|uO!xN}s92G7f2>kUZpr2-i%$y_+sFPYN;8(+m+nvav7v?E7(n%6s;=K1M-VIkt;&F+#-IwcNWxY^q~|KJb?fPepuj-VZ8; z8Yw!3W4mU<-j7h83o?@Hv@&VA>%d0qYxjXAOW}XUXxj z;OzT<{!(w{KP3HSeMWdTtZ141 zifn9~64JvcEbnyrtCCPX)j`v#IxkQu9F-ENlnG99uctrz%f4sb0!p^JMe#nZ&exbi z$4~!ag& zv^GX&WwdCjLo~$B))yz-I{$m)xh(ET-C6u@u1kPA9(GLmPcmoXYUE%FAaZlKXcT8e zR5_)MKXGU!fsk{CEKK#x-jTQvw}dNqDf<<<$cs+sSlb6pn3P!rp?f$qshMj5QkhVG zV3yvIHr)&$uHDi}w0dw79i?48Q5`FPk!vTbzY-rt!H+rygZ3w%*wx#^j2?8*N zj22l9!(Tdj0rJIH2LcSYkd`2$ ziA=H=CesG8dg6yN;@wUOoj1S!gjap+*&Fw>jVP`raS4`rzT1PytEARm93Q~V|HFhU z7ZhX~>q{ZltF{Z)RDjEIp{M5GoB(c~*Z~K3l4E4Lbmxmqfls5df~FyIkUkgS-La=2 zp5x+U;M+~3X^ZzV;SL-o>Mih#3;zq9H^E&15(WcZS}$U!X)o1n4FM){QR(G|EaT~6 z9z}7`rSW!QmkTgxEQou(sbX&Us^^s;ef>PWK3TM@Cj8CW+en!UGF?ZGq^IFZ-ik@e!D|h5heA^K^NnXZq2t5;1^!Bh2&W=`>Z(~Yd$Mhy1Im-J zROTcJ~}K&LPyl$n+)#I zFB&VKj$V1@6+VI`#1W>4#naF8?faOZ7NdZmf4YbWCc(ho;DvY=dZU^cT}lylLrV}@yb%D6Ag7(*0FT;KMn-}HTTuD`VT|UkY$=~1!vRFR=Za+Y7 z*BJ*&hMAgizQG|W6MdUhc26YL43$%1gZOP%7#ZIFYAYa|)bi76ZtJ97RZIe3D6(Ul zG6dig_|%e%{(LMc2*fd=uNfN$Dr*xgQC*N!4@>8h%+{j;FwSEfuMGw@bKqZuhQr}=j=VbF<47oz_2y?LBOD0d z)h@yl=}1VhVsC0vK`xiDGrfhZkWRKes3*04br%QlG)}d=EtG^9rj*f}BYP;bADocm`f6NgMMru$89&J!gGWNeEgx`5~ zaob94FwOK+nFH>~n`&QW8%9R-Z_`XE^0h|ZUFcR|IdBTE+6RmbZyQJ6lDPN-uZnxg z&Y1gj_+1z|#>Nyp5}AHVt`CgRQe5rg-1EO%_uOvXXYTVE`uCU(UIm~f%*Zg+cK8aP zr~zk+4J?4_>+Q^bh8Q{|B9HASyg5^p<0mI{keO^MzC}bI@-Tr~`Ohw@f)56IllZk-s4WoH`nF)qqnW+BXoJL@i zQ&5jGIp`g`&3V!ZoxrUM{SMQ&=Jx#(YO(6)DmiM9=VIj6h%91|W05!tS29I(5z{IF zM4h{fn7B$?FP!dWmHjsSH{%$H5P6V3 zcNuN*?*X2?{VcCd`N~$nWZX@ReGBT@x~O-CYo3mv+oKBzUK|v!7vr&GhM$|hY)eO1 z$iMI~=Gjw_R!2L@Jr`!mlMb4g*KIaonoz(!{1~C{%75k|%FbF1R<@Jd6l-)o%qbyn z82^#C-I0v3WAQGEg^q*_$|OJY$Cw`%G3BebH~lt;kA$nCn9ipwC66nuic@H_xLy6v zZp+`X34-i}rf-XV7i9Hp2M_`DpycqNl#t!~Si3MuT<$;dG!#4SdtMPYrW0R=n3RJb zcez0`3E+P>R@z4abP**MgGCWSO5rwpH^Z-(Ku#1T&6;0Rf^B|}x(G2N$A^0uvQol> zlf#2K2Sq5NrjfkgcJ*QHeF;`%rc4iK67eHk|Kstg9B2AibJN0VY&S*7+IXq?T;CzJ zsQ&mf{m^Cym?xRv_IsBpQz#PmPKaMm_zwM7d|^oQFp|k(nZ~!<#kXI$tQ^8(2jw}G z+mjX#0x${TKyMDBpKf{>dN*nVrata;=jfU@U_I%pG^ee*vS1ze)e3}v%GU5|f%El@ z8!>>p*qdu!iHf0GKZpa=un~l>>B&j&3uD{^N;XGu2?JYc^c>&NXY8D+mxgN4*(}-* zZR=}kLnLP93md+ywbJ7%4553C>tU)ZcYvIPwszJao_4Gr&m!#cMKZ~cDUr1_%41I} zO)s7orIS3k>`$s8se)Tw#0e*ajzd-fr0cB#%6)~uAg57uHd)x_C{E})6x=@j5f`m@ zWV`>xTK51I8hLy>ika!reo1LUal7akE;3~+MPO?nClAx$%r??jHHsZEaIQQ%$O)XZ zf}ujv6qJ_?&NDGsX8Kaw0ov=rv?gb>@(s@^L9V`+6qRU;RFfaDVU)1))pgsCDQ0P| z8gCWewRb4+2~5Lw>*w>&zTm0fDCcoUIq|`ZBLU-Cl+qiR2q4=$n?Nx2M{SNpK>-xx zKxp9vtr_~2q)NlR*x^v(w%m(Z9fT=l-jw~ovpG@I!p-u5&|m{&Mg}73JIJi*fqDm; zbQU?W@yB)=8n!x{#ik+-Id))iVf~cKrSP+alAh*3@`nljl(G%~e$sOSr%DSO*f|OS zN0mBt0BtZf%INda&gn3-BN2m)B-Y@CW#RNQ_Q1Cn5C0}an(z_TM))_2OGXxh1de6c z!c=M{Hc|K`fQfndc=27P~A2}X<0-+PnA(Pj*H@bo&;5iM47i+ z^Q!_?r4iz0URmVX2xw=PE)K|)34AAR0{7r#`68o2-^^ZyipMl;6WR`uzZc=^C(oxl zR2yc|O0x6eK~xVUn&|%p3BH9KipCOvEqOAw5 zQaH$V5g}CYQGen^@U<4-q+dPZ|KPwJQLeKi9?oPP3fjqHM8Zg;4+0H$2(4#1luXmh z>uPITY7vx6Y`}v8rvgbgIOWs4BS#qiY6C8b8tfg+8DW(QX`A%~IsxZ-!=@!+rAWDC=>&{h^mb#f=_!Syu;^b9B z#e+#fPs4H$2d1Uh8zk45;afmXN9;{~#OC{S3YZ)j!cR)&j4Ln8Hf78bG-zj0P94m5 znMGknqiAm3dN6N3{Db1Q#{hxzirVtFzI{mn>m;_yN#-{CS-nyG;Ra~1MOH!1a*X4d z`%IA{Bc@NHMY@pN+R>!aNH-R{={e~S)V;trC4(?c#q?tT4=i(RrdMSXfZr#4vP zh0ZKHujmfvJh3@GbTo^_dqT4238DEjG ziJaf+fNyler+=l80hFeGmL=O7W9%Bicbd$MhA*chY#`2)fo){l@(<6ixauGx5SN}ex*iMgwR8OE+z<79DsQ>O7) z^>PYpgk#Ln0~>M)1}a1;L)>d=5}=~VAwClai{Nk`v0N*g3a8WU8j(Xu%&ie`W=;A=zu2Vo2V+L2j>#8yJShcaw{F_W|li8R$)~mz2;+DO%Cm3 z8*Q^0|9&WE%?n$-gJmu6aW<=Kn_KGpob;6NTY)28^Nr zRFzqhJgp#fkf-KYCgM9woQJl}z5qa-fd$AJd=)a=zR=%>Y+BBvg&~8VG0+7a!CTz+ z%6BM^H5FpQdS&3y7+j%71UjzQMQ6VX-Y)I%O=q^PTkOn3xSz>5%yym~Vx(h!dJFpX z6KXM%BCsNMu@vr%lo+Op^FtJvHsG08BCvUT9^z~+lDj!vXa>h)fPasCqfr@z&x5mu?4zi<;scD8cI1|>cm$>%&NzwB!~uD$ z#K@OEm`ZvM8IuRnU;VRX=E)$qC1pm|6%_1zC}M_vqM8~xDr2|KaFeP7vaM|Jaq!T$ zE-bSfh=@7HX_BdHbW+XN&vqIvluhdqjA4v8sn9kLrb#PM-&%@3*O$fmZD!9vBB&rH zavd04-+|hE-xoa$rgk7Q{aE;sl4*D!8Fwdxcc`ajnA$N?$C`SU8AVfC2N1Pad)4<~ zFkF_)BWDx9q9hu+Whp2p(U`fd>(GsI|Eui61+4wkG;7C^QpC95Dh4#{?|KMQ%Iq zqR^L#fg={*JBY=n+%Tc6_Kz6eaguWiMH5l)z)-6IxPZ{#crN~Cfv%ZMTK)as#wX8+ z*iMFTd=3I*ayp!?e#zkOP@K5%T728KO-$mpX*%iz&tVf%y(8v!TWiJ71;6ydr^bg9 zoCBwr<$~+U;MvnS(uNp-GGUF#Cp??EK=wP`p|-mPls#t;A%wmDUR1U9)DXInLri0T zk)Z?^Mzg#C%*Vq~*hMV$pRi!MvHt4zOY%uI7SOM}W2pm@bTcuNMT79iIAH@zZR$im zl+E$v>+Aqitsr6Sux@L^0{JDyku)5Jd5zDYl4wAuqLF8~IC2jroE0i3sVr^~yI|p%H&bno{v%ERyq79_qC*@`YD zMw{i+OvK1zX(G$E(7NTXYg^xOljrL;7b8d4KMAZu-&B4}a?sA$Z+?k!eB4IM^~&Ah z^Nfe#`-p14Yso$u>)I%uS~uY_k{Q``HitXNu$3liZ@;q7u0M#TsiCtL)hYS?&)zkW ze9_|7@TG{o;K~ea&F*Oyq8}xOxz!);6>UhSl=tCxu7_rN38~Eg&Magx8G!X|NYNHJ z5ZT3<`-%IpeH#5Mqq@m7NP)Ihl*NpBvqmGR$}D?PK+{&u_kMR2Mcd@tMGQn{G9r*( zD_pZ;dJg_`m{}Vom1Fj=ZpNOCl+^rJH+vK_37PEiNUAmB{Y$(RC*RT4K3`t3YgH;eV)!m^iPwO-I` zJ3VmpxFZisY`tzj+4s@^uvx?TcNPSHaj*!rt&sV)u$s=i2OZZ~9V8lx6GdSB{^*E$ zg`~_M6rhP3BY%Xpwnoh$oF|6mrQZO>MR~<$w$H0}X;4A|Bs3ygj2R~IxAm%Z19#?L zicHY%*>sG!KRJVQVr)7O*hAWBw4!D((0-_d+J4Isi=Es370`@S0J>JM52f!^Phi4> zKvM!A4Y}rbfR~{)WG>JuG3qBR*CS?tsosXqB%H;^{A7Ca);W(ms06OUgfY^vCH;XC zmiUx-6mEi}-XUkO=#Y`K7-$5qJY~Fqp;zmCURG+S)XG#`!=5&F zj=5G=3797Tv0}7f)smcrrll;k=ImtAr)Hh&kD)!OhC^uwvpx5w_^3q0sh<2E7R? zf?qQaHC=VQYIdU1!MQS*e=d9d+}(UuRxsRCJ`*krwN|Ys$st^+(bi?!O$nsKd8>w3 zButX7A4Eu)SoJG}o(@lYyYDY+Nd^d;8qz6*O)cr*gkkqw{Y|2JFuK-YM3X6jsICdG zzR1+ev+~zAUe7oal+@DV(sb<~1hvN6EoV@p&}A>;X6T(zf``3XD8b8qSE$rudzDb( zy2^`)S2dMq5U*;_zjW!Dz8C9qdRl6z`tI7f;cBh5bExXSZC$N4b?=3XZC&LFMA0Mr z)1mh~?WICZhpWG=MJBrZnz~o$qC2&vjwo`szZLrHk-cB2DY{x_YU>2T^$`ZO_NBYJ zbuBW%1ztze4gKYgA+0_AQLR7qE7#@L)US6gf~FNlJZL@eMz8vcy*x&(+WfUhz0W>G zZ|j#DpIo0rQpDS}FX(Ew>c^A2GhGl&v0JL3Sx0*K79UQ@X+9c!G|Xzox854{0O>ayeC`wkn|zBX_cGxHFdrh zE5yu8Ezeq>O^Dn#wBI^&uQe${$HCzN{gWx3?i59#RJh`pEFgu#M^^I*J?uFjayzCd zDe96d9`<#o{uaKrC$P!eUJJMci)tYILJOhTg*%+Rv)G5T`7=6^cKHK9`wg^~pGXpA z31-BL$cO%!c11HH8FpyzKZe5^jpRqO{|C=m|3>ovpmd>tQRA217|T-O&y}zm?k&0J z+al8cBei#X|ETp- zo@M+Gz*$DU-~S+1L;h#>|8RU(td9JDs3jks75g7P=@r;ex2|{aV#%P5EtzP)5(-e- z=Wgz&eKmMSjmH zV3fnJtp*Ya^=C{?9q_u8W=QCvJ7V?cgT;b}Qm%;RisWjqHjG#wgFh?Zvh8~nUcNOZ zmWpZ9i5mp;9H%-CA6=c)x@uIM5@gc*FRT36zh-9>^TTB#-ba+(x~*Li=`wn?J?QiE z>Tlk3NfPS%Pg<-7o#dT-{a5`!F8ndGcw6>+TtC&;EM4D zOd9DNHqd1{JzuU%H}aCP{{wl|!Kk?<%sW#f=dt3M>7T!@e8Vs7uQ-i3J~|NY6W+TCo=nqCQ0!>-c(V=a5!W-25)iT{7jMaFV=KpPcCEi0~8Q?uOt(4~peSR_`Ips=jPk zgp#^e^@JsLr|m^WR~F=a^N_>mimj5{^)tF+fLQ*CZNNJ`P1s$t*Qd5@vPm>M)x`g4 z>a%P#Dmhe3rv22+)%wYhU;SRr`+?^dy-p80?v0XN^QeI*#h9*<+yF`K3XGtsbf1~| zD`RE&nLyXRC~d2aa3x=(FIx+U*WP94WINtfbX7hMPp*(-Je{g^gV)b>tc#>OdL3L29McFXv2tlRz7 zR)?;tM`nEv@84+HNG_gKcbl2KydGvPy7s;S_an3z=x?|yDz^dYTT%ZqkflnKpN0oc z(!?cxIsI(@y*1~6=JHZcce1xkKEf{ar9LX;_6CX3R0h8Eg5=p>4{;|Gqi5W}N$rXZ zu_@z+l;`b|44WxqH~l|@{y($kKc7bkg^H|+O`Uw0{@ipo<5&zOT7pzpz5GIm*i~e|}V$`mfcnST& z^?1vCwrG^bT7rSC;x8?pc}UlN!R`s&DbI9y|M#))>X2Y$)#P-#{_QZ58%UfJIfeRf zhn<_MdB|C$hw&kTS{-&RJSfxPT2$Z-zR-1b_UK| zFyYVSKAlgWxbIKk>NyPef#QBe^Xvl}LQkRrarGnAdB=|$Bd6xo(cNd+_HjL}rHqm@ zUfR8PwAuB-k=B>`qMvj|8|>olp?j_jkLG{S7yjLi+rRA-huzz*7-<~x4W}n-^q(e= z^m@pXy{LRBH*8dK^yCMtOX)9^gxc?g1@WuIuaEWl{Y#d3q8tcW;2f)jY6l|Ea?Q%7 zpg(vTGu+Y)BNVV1R%xMA)%~7vm;$E6$D4~!{2>?}D~p&S@eY@m4`-f=?~_mTJsR1z zxZ@OLdhs($8N5Pm8)=!9kXAH$>)b;4Qx~*(xJH-g!P9SI z4|%E)nPsKlH}+D5Y~!WnezHp@r^Q=Lnr$x`OBJ_WeFA?J_ntXDdBe;;A;H7Rb|b>% zth(!Rj&h>}%fktZ5B{#GpfNHauGL55aUbOx!P$nEEbT8EeEu4;G6r8tOy#nZD{7rf*mOk4Gxhf9(S zT-P;^0EW)77ZWzL;*6L%1048;MaR+lgMZ9Em?JE)Uh$4SEnCsyqLT=*8tt0ulJ@sP zoZWQBcgR12Zqcg|{ATFElI+@n4-B%ABTTu~x3@Lw-$~Swu}218C;s%T&8L3`()2T* zq)R?Q>J98aV&X5EToz~lJow~WdawB$_=wfFYi9aKuf{vt20_BC8sw?XNLcF1KgOjn zqmA3~chYhus-V4iLAt5Uax9GVYx3K~#sSKN`La!S_uGL_y;%=S(UPv)jRa|aZpPXJ24g}AqcQPGWh_@ewiq(fTInj_*7DH_ zP*)%E`KxQ@5i5|YY9}lF#7s>xFJWi4DHe5f#VSW2?;y+02;C=Hjze56oS}mu&7;nK z5@)yBux#q*$m!Sth1FzZsFupr6?BtfUZGfD*U6@%X0BR`M&pxd&MA*9?FX^Go*jb+ z&m3MZqXW56lzAeqtv$cM;@2=KVqYO~o%k2zWg)h&KnxMMftRjVOGO-kP!ZbALh;lJ z@^yZRr5~6uk5^xhO&pB22jT`iK8i(P$`%(VWXnHU$YKlM7r3wDTjuXp*d{MX>-f4B zpVvhN#7ji^74`8KGMczp_o(py2xsrTh2~@WxkNjiitVUyPS16K|ZK${_$F$jjxpqCzm$|b`R$FGH=kh8{-GTK&27Azmf|dG|g-ZlVG1x~=BjzG` z1{?+dZuikU&XRJ&*uv;5-Z(kv29(;n;BI~C!{~b|X?F5yc5TxIEEQY_(PQ<9!5+nN zo7~~mozBnKkkrgL{l)}E?fP)O6@@`dpTZg42X1^aQOMe~y@D{8kDi!Y3OBZsU$i82 zh9~V@;7KmM!+eiS}RlsWB(Gl%ZA^N(M(gZH)CZ>u&kntNn8T zk<09H3*H-{x;1hEg`x=L*Uo(fvD36|`cMS*hv zP6mN9@q$3Elc3d=JjUGUYUz$|I6rljc27YhP?fc&{M1dn+*eNakhzz4%0mnDLLROm z_IcB%KT}s*t(M@k`U;&>s!>gb@YOE)XA+zkbDm|Zhmxd4J=^n$XeqV5bYQ&Z-R|H6 z5x~qNovRldp`{M9@UDccNTEz`6+HA%Q32|Ovz1?DbQ9%`P8gf52|HS5x^4y*Y4 z0-w_$FO`SbD}l4^w^#W|;K4iVL0ET;pEIF6SYdgclbsLqetY6Lsx5s>E<&>Y{l$kA1Fy!YU80J%E`5IdwM z0g8?3av8Qs&Ub^;Yau4H@QB^g4}0@P5S>*gYs4ugN*xGJGvai;-iRr zoU}G%s&wnBT&OUF**uL{mg;~q4lUdJQ2`l_lBq<@ezXd5&vGu^+kAE5yBh{TN_U2l z9K=rd6b<+c+TDL@n|lWw^sej>^0k9YjNvf*3XEaw;8`QtMadCZZ!oC9xM=Y4gHXcKhI96%dtgo!l_667l-^=UPso2QnD+c`rFuV9pehmG{}lkdyWRztY@YyseT&u*IXq7aOrCB|dwL5xuY0od z0FZQ~%XHa^Lk_l2WlvlPOP6{7xboez10pk1u~3wk&6A@(G$M~SNI+Y01fx*nVUHVL zX;wg%?ZT@4GsVuo%JVQCuyE45wPnrs^lnQjaGpGytID(3`FMQcQHPg*wC?}n8|ZwG zZaw5w1Wz(0M+K#o7dCrd*=(*zkf==Dq|P3uDd;~OkCOgsP^)N)8%H=U2#13^F3gjb z94^-D1Az8*@t&X0B01`TNL=Uv=PL6)=9lS))qSg&pO)+g9%6Y0ali$UCB%b|e$e~Y zpzNpbD z1I7Jvl_rC8mzV9k4j%fBBq+E)*~ELB?^>>=?Gnmo7`rQ!+8DbBCHAdLHU_VbOb=t% z+x9P)B;aRjF7|Y*So2fV6%1nUsWJTDd5S641UIoVT==uO5uCT`%XdHfaVUXWo~Pls z#>pIl(gzGn#-^PENT;2vt?R7cNm$o1)3}W_DoWrjLMmkrI;Xv}fOu|z@s%|16F<7> z7&mff(@a37A|FZBC7}a7)ldjju-H&IhMmem5@Gu-z!}rSl{ML>D`iJey)c@Q$aj1M z7q37)&n>3I>24M7D@UR=zLcRHW1Tq@n%;~ur*aHdj(9h3sNd`f)vXRBZQ6XJNJgGP z!O6dyVr%gY@97V@y5{}uPUq?_8q@J945g6!vPRXDJvD>xC2S$(QX!!YcPOaWBb{`51Fil-!jDdhwKNvMFqa@wK4`7 z@4JN#4i_u{k7UAh^K^{@>(5Bu7gD+8R;_zm(jdiXIgxeQ^A#Q;X=b|_94n}o%9JSL zhEv_VBik9hO=CQ@j8+V=?q|osO_Y(FUKc^J<{*?zu8Z!l=m&JcnP{LQjHiPU{aFgL z;_D`WgdHh1a&$1RjyQNfzXZhVA-{d1Cy!AKQY8SX+_i0p*+xMR{ue>?u(5$*O7SS|K!V9VP<4suHeU7^|@e@`oOlqKq* z<}=vO)CedisP7T&LlL{PdA&QfCJHv-vcvjZA8Aa!D|YW_+U`59_ZxsRSbp~?-L?_4 zkBGaVrpmh>7Jc0Wt`K>WFs{-ryayY)za-7==bD(a02>)=3x}uK_=Tb6j|VR41Y-k2 zM7E%FcEqt^g-!|T*wQENTadU51EHOqyysM_c3J_My03;}L-C*0x32{EY%nW`L?0RTfRd&dJ;)@5Df_Yk;{h`Zw0q8vUuVOvCd32Q}oc$GKMfsK*KM?A?_vi*U zai2jS*4N~ZE<}0@Hd?=A^G@HT&ww4vgatneSB)=xto7@BzLXin`Z=$aC2qL(v!}`1 zfS#zPyI>RZt8g;|ikOSZ0AQ4F=+d{lv(>TJ09>CCLK}jKuGi-ZlqaafM z*YUrW!^wUT{y9xRhc!Y?SzEY1gP%UtL+elo5jQ7pGl6k^x_Qc9Zc;fNdB zTczBwXRbwyWRhmxAdcJO(q_BQJR#3s<7&AFkMur?G+fl{DohiONvfyW(9E)dqXvU# zt!bg}*JRJ!8vi9u%BLPqH&I+W7wdB(pFswKH*Z=g!kimJO!zmHVpSD-MHwg0o*l6= z`z+9N^m@NLl7|H6F-~YsK_&use+l;FN((r&SAWIa^HtPLnA$S?5H>qF&{3*<^yz0z zlOKP&h*5}F*-G`~aUk%A1=A0U)}F3)IjPUz3r;6>PP8Ib_p;S0$`hzCs2EBLadYEP z=Ij1!3*oQGx;QEaKp#lq?KpG;ENoMIsk%E5S*onmv_Y5d4r zMdAI_>;%U2MoA}1Md9vKriceIOpI=fwMhq?@3}K4g0ne`T#IGSEgQ|3N)MtEn#wT+ z$e+-4r(Wh05bX(ny{qKPWY^LQ+5^lI>l}Gw{w0qdL27GnR5u@>J*D;a!7Z#$-v!-m z*T{B;QypiJ+*5^v5cf=M^-9xowd?`JbHj7irg)rHr81S2R@wr2VD^>%@nfjuDv)J0@oR{BmT-iZ7)`CcHUfVJ$@4PMO zi?^k3Tp;^T4dBgCh7Q0w=tg=t1Fy$>?e@)qM_BUgAVk`8!-MAZvdtEbbZ1)@@A$qi z&jIsSS1-I3OBboq1-=vBD?n8A zewn_;vF5giuGhyCjOTGsb`YRxsU)vAty4E?w|9L`^F)0If}t&E{W3}+r7WU|coFxY zpxyf@q?#E#xGepneCoic4!a+L$u(PPn<$UpNsc2e^Jj6p71RD0Ov%W3 zlKC?xRNW*~?LxWU|J^p#d0r*yHqtGVE)4shXP8(&x9n#t<32@e=%5!iVv&4d0FBpDc$d`MxZ@sIYo$o=f2;>T`yO z8jpX=j;N`M@_Oao9CmO$X=t6JqxezclwKP3(r!mEhe7sZHZ!9(L*YJ|W1K!>*;105 z`#OsENiNSy#6-YTa)Wgp3Ilu&a}ied{*(BOZZ_kDC^kt}Ln;y4BXPZ@D7Ll)mA0Jx zZvnKM^K{?6lB)kXx}^twJW+QCE$~=2Ru5jpM##1eq4|y&V3QOc)Z0fZ?I^Y}gDdV> z#~%`Vi-<%-h+i_;@wXS*N!6s=I{5&eQ3^L+5Yxc)dmlF^xOq2J_2QIG5-9g(;$l}t zHqLL7Lao&WCfEkwdnDKN3B>FdLgs988uamU)^qQ0{2D*LQ%O^oBEE(Yil|~Ti96V| zweinqad{%Y`Q&MQq{7eY9Y|b=;a)By0#i~l*Mo}7&g9PB8kr#PhJUfReP3Sdy@?n# zG3>P#-jf}>yoNG#hBtuhXihDi!!iOR^k;7Uf{s@2Gu_;qhpyn7j^3S?^Bw{6`z|9+ zOgP8UOrRG)5j-siSZpO@))+rMe}s=`K_F%(F~SU6P2?wbvO5;<&Wxi#@6NJ9gl%$O zDeaFhQ@=Dw$ko#cKjDXo1`;eq+0DP)u_Wnu@X6Q&L068cf$BKj&LMd!LAZkiHJng; zJ2zOxm9Cpt;nAc8iVc283%(P@4ZM!$ke08AoGzpD>B0*%ZI+?hl5Y^ z`j>u{2eb6*Wyuy@*@u@7?ukL*2PRXvyC#4Wd30O1uhEnpg<QP34g3e42?rVZ2 z&+ZN`f!c4Yi9bQJ6HACat)t`+Wx zRP2@~a5mA+Px^o43-ECBv0?T4eCayrX4$d69m3jT6au4L)09HuLDo zIzV3kcBI^e>vxGyU_==7cS6eo2!gx%43fvPS_g5rlV=%x)79J|0umpz6r`0?j*i8< zIO!ZYpDg7hZQa@Y7M#g+uITNnmRt`^rV>IRmzV%TFllO}e+(Gd7RsD{DR1v_s zwSzw9Xa8pp{vF7U9x^1ir)x8Y&u#+aHlm?=R?SYb%(SK`=W0++g0Z3q!K{75(_GlI z$&)S1UN=E-;ANb1&GKT0kZTt#EP?+ZIA~#O!RVLl z5@Yj-P#U00W#=+73|dPwe^RhVcY=Yi6F3Bj7MO)#2E5zN`t0kBUh`<4}0%t>{pujq2|MnN_KtoqC3Kua&7m`&v7+FeHmAK2v!o;;V(q(#x-2!pB*j)Bu639MQ1jsjvD$C+;9MaT*Nq=H~=?;0m zB)IM9dxxERj0{b9d3QG-em*Z>I>u-Xom;2?S)@%e_@>gLy;!87EgIXp3!E^riB|*{ zu>ac?dz+h04mEjY(HK7VU7*2faLE*==(9)3z0SD7mpzxJ3FnJ3p3f342PY`PG#-ed zm{)R@&-A?^h6C_hmX{Uc@Q-Bu*cSr_2o=R(P2+Q^BmBkH5kll;7x)Ug<#mwNqjuqZ zYdSrV;Wrqkd&VNeUJRdi(n^cHT1AE{{r??E*mR^oFM82~A>Xc9e*^m|of2|CX4OOc z;(lP}vaCYXzwk?F?6^uuw$ke&B@BzK^FEe_em^%7tCK;veUyqVFC8w}ku{O?pjm!i z6WIxHV_+L(a%0GTl)QbT%Q_+OuH(lMe2sKn|EJSUhe~SCbo@d!$l*u-W`y?)Y^Rq~ zzEnd=k*|+OwK3y)mV*htau%9_R7qAv8zyr>W?jv19m|G?B>&>M0Z#ta%RO&5SI-$s zpE3JXQuzDs%z=IDns$Z%=g=wu(vs<-#B5i(A|PWU>eTIfONK*WDsf!@ZO>Dl#T7;F z5#iJJ7v6Gng^Qo|sZBF*!E#d(eqej9ZdB9GI(3`upG zIQchrhH!2PsJxJUlLm{jS?3wCW*?-bs=O#QOCJc_zD{u_k_7J@6Eyo`?dj(U#B}@g zIDWf%$aP5jis`Feix@qIth2mh_8xkHcfOzlGu#+;5Ufo@9k;n@07@0|o%0-@&#j9+V;Qo`~0tNVavGJY;?V*sp>m=<+BtQvSX;z*v` zbg`7{TE%%fedSbibNc+(b}-yvGjoRFV|oJixH*Zz{{yf6d#pls9D}#eN-*kNBHhN? z!Ca~a(e3Ungu8cl-TO>pvAaWl`q)$VsC~wAko+{5WnSQGoAl5VHE@5YOB+{V4nvLO zx4bLCQags-0`Jv4hWc)Rk;D&ShUQN7HShjaa~2f!6c581N@(v{2jRl=hv%Mn#6`Qp zg|!3iiZOee=6gD4 zuhr(Iv4a^_GJc=v`h$u_%GDGn!@bxRgNiH?e2~O1pY=+0+3duQ8{30P9n61E#8-xQ zhx~6%*xMMFCx1iqWea;deZTGAa>I3~dVoR~lFB;ako&DPd)tj=?du*C6bn#~6}9T|5pvYV8GKVa=hM^f>CO)4+R7$__ zJe6VY+Ndck|&S zZs+Qm5HSt@P6rMC+E=#3K^GzLTvtpd@c=lOvlBWOR2l>@+b}wq9LOzTO@~)`m7@&P z3>R3dAQt;H$WfHHWW`tbjBFF*`rbG16-#;D3e{%U+?{4Eg%e`Yk+FZ<`^)m650pLp z$~XCibdF%&^cz++f-6D7TZomDxI00ysEGYzxqmh{s$(X_V&v9P)Qy9iLP8@36bZ{` zkoQpskIi#j11`uN+Ox)a#8?K69~#5%ZTb~K9|ujVt7Htzg?r_`D&LfH<27L#7=Q0o z&rXn9n}2^Xm#E8h?5wQlb_iSg;QReQzrcjQQop&p=R}|mP<)nfhK>ULJ|W&5-h11` z)<(L_a{b^@09lvZoh63r{^jV(@vk zss-?ON!-bMcPRMQzaS)+7sNA=L0y35;ZZ^B>O{3b;Ws|s8(8&M(s^Q*`X%<#Z1i`E zmQEC!!xL=z=714J9&AmEaOGObF@9l$^Kieu6#VuVcqR_>zJ~6b^*c|4cSrhMy*=;W zy^At&H$*jSen`o^RUxWVd2!HKQMH!eYO2Ly<^0@YhJ4rD+!_)kl>P6DiA3O6UPy6>H{Q^UuS^M{8ZWc#gw@OzZpy#tIj?3`M zPmMO9ND((1FygZ^aMHvJ_rYfmm8^LfRfNBjL+ZFR%#&}Io&^=P0qoAwp@wU|<;&!t zgp6t7@46wm+}p_Bq-JY(A*|mIrS(OKYdxOK3keLRVOW=Fbu9V za^HHfE$QSgV9YQiD6Qc!c}))FA@TN0rKFF2^Z014efuZrLHfeVT>Uj#51K$O&A~s+ zFmm?P7&HpZ<$`*zp_v171?=uU8MJlgOHH?kD_HZ_2(GOUF2Y}N=1WOeFSc)wBhJjT zc7`UOx;W2r3(2kfwzr-3k8*!>f$7%|Q8CQjR|Y11;(75I^uCcnwKde0X3uYl9`1Ya zfV+m-AsKI@Q}D zZY|07&CZHi(0-wysrn};mD@q-lO@@z@T?dWcvgCJo@CV>1y_FiZ3%^MU;69Q*TLg< zg4x=-weq(7jizrV_3Svn@OxVRS@oiZo562^v`vNf~K_tUyFSeO2b%hIqSvq!7Q zl4JcLAEkw=7Wh6iVGv3E>}NT+!f8^f!fDT=%C@M%qUVX6D=kOWcYd|GzzS2=yD#s% zm85zXTi#z+FsM#CHsb@Od1a(V7GLNMK#ML^H4PIJt%`Sf)}Qe4XvkU&s2VH@uQT#Z zlSZctQr=v@cX&nt(vpC1DysRGQ6r&iGaE7qf?PZ3pN?{H6p8RQiDhrTxbqX3TIeAeoAM$ zUoTx#*%bC|%#rZUKBavcyf>l+iiuL|1LhI|6P1ZKa3=SHFbpD za2w9f&Xo7OmtWRo-eT#r6~4H?w;9nhH_uRcRDRrApJ-V5O|8^4yh=xI-c85Mu+%hC zIoFou!>bsnXs^?a(Ij!7xYRNoeZLG!we$HiZ;c!1FP!gcWBU72Q=u=$L4u{G1zpuo*T<%&PNYbJ)X(R z%^nw=5Xw`Dlen}7+I7SVvU1e}eOS_`)dS2{r81@=GRijtPaYP|cp3a4XwJcWkA;{Z z8{V^EHS>{&sM)b)!54!fV`JNv-;csF%AT@!tz4%%idgq`ii(;wwpM?)(C=*b_*reS zV^mI$0Y$o3QR-@O4(B>KpW|SCGrR7qa?;~DmX&p+e4y1GgYSxTk!`){Tw@0G$Fvsi zH=@5LP46V;NoQ?^Cr+AVe->Q3*8zU8_ADK#9Am1;;zc%ioY-m_q@0fEle2qr6tCv> zZmCP0nLL!@H%<r)w;kv3CZ$MjHe@ zZiK$I*WY@W?*C44_2D&XT;Ksp`c~>G{=DQzgHz z2__!DNKPy*en~I9M#`tnv37ai{=p!-%8N}Ld8e??re7yuEooN^u4Vn^kgDFf)i$7N zWzpmMhe9ZV<|$dJVe6XUPNVWG#hxb{;|ok*Z5Qf5^p(dJIj)4%sPg#b3uL(-HPyHi9!Ibjz^`&H1gJAy&nx zN0>KhV_-zB+F|O8bFmDiccn~kFE_-bPc$Q9N*U4sWF_H&HaASKJQEKqDJBaY#fJxQ zzs)w1>&_yMv&5I&dMYgtTxN!@pgX-;r#byk7^ zp^&}4TD6(%mn!jH3Ae#72dYUw<=KQJ#$;SmpscK~IJ*{k%(VF^OeR&~cF@C;$t!4Z+Ay&KX_g_*3ZVF#_a%G z)}v%trM#yDteH!yX@+_yu8O8NpS>}*GLmKb1i5;fDkikkN0e2NRDi>XVDi}GU)}Kc z)rTZ4Ed}8G0L}XYe3xopc0CShW}32X&7~)91p!X(jt^@K_3u-O`SZzi>R?Me7iP&CL#g706Q!8;b1#~}%FX7TB z&nma#1Fxk2=mNxgMSu@!o_NMw6TP>4t0dywhR^hd)SJ?)U@V(LCdEcXu?^SE^}MUM zLz4hL;oJF4Lu6W=nl)7Nq>L-eluyY}odz{`U;f4penR=*;*XTWipa)0LuzO$|7Gel z%zysRSj4u?9|pw#;u{s!`zfVYB^UasG~)bMa=1$_-#hCYc~^1VY%H0S>2K0(I09}y zAb%WGL-Ue+MkE~chfSSohcr%4RDwiV{)6EGx!S}3q>PIGd-NY}c3!KYdPzzI^y!eS zB*I;k_2hN&-})k0{}xpnO?-QP`;^qm=Hb>gloI7{vBc-I%9D=0S|j`MCRB+olOjlo zb>=#@(~ymIEEQBE@|P1F0sM)=4BOxSitP^``sfpzhyTSK_xKN@_QGy(qKV0kMILnN z4x@S*{<{d85~;(!Aj-HWXFk)~F-g~=wIi|QrBw|UU_CV$71)bhDt~Q#16!o9yLW9X z-bNtcW|7$arJ<$H;8X5?X(ps zkZwVZX$N^aW`KbUByQm?CQtQl9rX>CYm zZfNu`~6G?UFcdK`xv5Ln)38+&DEFx*g3`o%%28v!FQ`N zqYnr5to2%%&%>Sbab8L8qpg9XTHkKg5G!wZ`5T>l&A*lZgwF1CR9fANjFg5d_P+@YG`S!4 zn|gyRuXN_Mjc_g-(ix(YnzJOD%3mr>-=67ZN1oU)ZsnEkq>#1$d(vh7r)`7q7@veHki}g1%FG;tW-d%?)%lu|};4~X^E!=hus#PGjc}FEBlXvMsLe4MhCsAZq)8urxSHq(nND6`l2IKnOsvYTkzk4I z*TM@ykA7E{Pj?ayPHcNZ+44ww>qDTtH!J;s*}J zEuuh=42|<ID>R5m+a)tiR{XM8^IPD zenNyxwhNw7`VU(pCSr)Uo{}uu0RHkh;)LrrO(I$%L$_(h{$7jF6WVtivHIxJ18LQ1 zU=l@<&e>nKTGwIPHW>9_`VZ-rN-dHo{@6;85~AwsH1ot-5V&>XKh;%s~tFc{nMt=W7&ib72(~Mz=!La;6%Q2$mCJ>T`h1 zN~F%9K4QIVUuGv_pKROxImCCuSNb9x;2gH%^aD@tf%y*HB3jENKP~i^Qcp=k3uH;&!6M?k1cymh&&R(-Z(MNw-)(i{acszwVyOGJlwiM zwDh>eH)p?{0yvRLzlW$4ILRTo(FWRwnYG%Jz(%#g1Jw|sNq5fd)kJ_rPkoC>+KFYV zRAshE@irDh$6+K#M6W<*hfw)*XP4q_g!L%pkNv;Vmn^@PgqZsHZ|eMYvOmSu|3-!X zlUeO=6!15Sy+eGvfl#hqFS-`T@mG;3I(gmk52ou<@#6P0Y>XM@hh)yt9?J^%(FHaWo3kx_>Vx^z|5J0Tww<(S>6p{QknLpQ*Psn~7 z^B?ZA{+0e8x99jj*PDqHzcZt$FJAx0DFQhFe~VD85q-fQJqR1cP z_erWg{_6yYL+2L=55%c|l4YqWaptu-t=SO&kkh!xCC=r_WECsSWOZE;@u3RsV(yb4 zdHMo8@YDfZqAh9ZZ2HpFJ)pa$_weJgt8(jd4tv+kIK9V^sI_z3+?E*NL7r$M6TzNb zGG25&%kQJ2c&;ek20MA8Ygi*Y77`u!B{2P57&X4}5QW<~7$!WxG(D|fGuy9~w{x!9 zt$SdxJ9XW)O>#Et`Ecz$)7VOgIl(!;0o}CtqIKR6wnsI8&7!z!u5r9^-mlwl?o`*} zmEJ+Vn9}&0jcZoa^$)f>^N;hV-}sSAl7-&$;oeGMD{U_gO${v%%?pjjyW=8GZ=ag% zddyPJ0P7&Nax9)7o`0DAu>N6_MNz$CRa)KhF!R@qPKM69H=AT2*0u*{oxjxIuu?AF zxv)Hp?X-9kk=vdVky|zrJ@T@2-t1S~a3I7xcO1E}^U@384@O=r&H`V&=*vlDQjSpu z+zeDK;(npt7tGH3Hs?ke`66?RWIg*y`{+r{`eOegiFQ!@<6SeiQ0J&Q|?Nhalb)UAgB5W~^3zb=DHjys6@12@9 zRV`BZ5SL81SUc;x=tFX3-^ZxuMPEo7#AZ?XT1~|2Lsj-ZVC8p0j9gB3w}J}~62QXP zw5<~2a^=A2ku5NB0aFF@V4qk9TGY#@%0nh%Q^a|34rsycb60quwL-8P60Hx_3IhGa zRV<~?(AHkg(0W38a%1bz42wKaT@8pj)^gt84gtsJZ8I@L7{in=2F|RG=vG9w{T*S! z*sATO4v;-;56_6*Lt;W@|e$tzd^3G+}+?z<=%ZVlX0lpHT$od-bH?GL^YF<%x5n>bUrKDJ1g;x zC9o<&ZWYi6vW)Yj@!ptF85vHe zCo_qzkqcrkCKF5F?=pKiL^*FAezJS719<4YwfhP6eo6M^)2HnBIt+f}HKma(EK>sg zx%CgWtBV>m;GD+X?O7*kWAhpZoD7i|21TcU(?h2B2*rz~Wv2HY0BebhnOE~s;T+rv zeE`qZsI9f4HP#dsj@A#ml3rVVM;sFB)qwM^K5Y(6+)IY@^FD-{T0A3=-*G~_aGwRe z_Bp-DwvsJ1Nl*Xq0lq~d*Uy{rEp%NGPatLL2`r$leNW_kr zPr;D8)biu8rKXjpvgX)~nO(*QAr{=&%==nU!k(mipUkuj;VY!~UCF5?i=3ik$YlWh z%y@M=KFl*@@2qeY2q2)(KtJTTeITN*9`C&6qju2#8rro=Z4J?revWtx<-QPIj?qF1 zTX}95W^}yTF41xo#-qm&A`LCJmaCSOEmB{X{6n{QK1xZsd6_?(ORmoz2j~Qg4`-k1 z%+=Pz$H7mKPwTYfGG)S68mKdL1oOTIt=LgZ>x4MlE)uu9213qOyFolzy;uZkyyrK43j_tHCB5)d1pzr_nurC@70B8S&N4bpS<4|8lNu( zWx5Z=446ZF_H@&oeFjn^N?9hT%#wI2~faUCx&>^&^gz0ThZ zY6*LEv{{@^?6&Rt&O#mi9ZIdl2r;xK0Z^y5E-B=?8B1OIdRwA5Zz)G0@xS=3% zFxm#)@XZF=U$&#BN1$1-;L8M5ST=%7n!{gdzu}g<<*WHO_P3si1O#>7x@B#qSNCg= z^gzhT>~Q#v#I1*PTen(;;>=`TJU{M=zEvvR=JkBP3rV;1r6yoG^cK^-Q|@@|5ui4m zygojzK3C8dB%|gPM&FX~S(Bgz5{=pNpF&(8e>~jJ)$214G<&HQ^##x}-O&bjOqC_JK?i+EsZp~X?J&TA2z z>Q(Riz#=$n!-=WCDs3D;=UuNEoHylU%|C9PuUQq-=#+gnf#Yv4Auh1oP-Rr%R+wvk zn`NqzxMM1^4LWtabbc*&!Y>gtuK{xL4XFvs29Nn2g*!{LdNFQ6=Hw>IB#)Kyqn{wO zvMzm$ofCC-cMP2dJivZhQ{=luzq60)6b$;*G7TGHhAxwlX#lyCIdRWR?Mib ze$kSe7}jJ0M98|fg&1YSTQC+tNn|XA-N}PHN8I- zKc|3w;r0&vu2B`U+2d;0pD&Vjwm4}wZ|Kks)P=t2V7qxOj-p51o#&?G5`kKu6LprW$%?8QYY>RG&6KD% z0RMRHA+I(O*}VI_Abdy`apyMGQHt@`Qqv>PGY|;@c{deLAsQ%vqq*$8qkRTSb?kds zK<>cc&4^+i_}PiIA2QL)dlZ-;S?0(4o>1`E_#k$W^|Q(Kj9@9$k2~5sy>2nt$mk7; zRaW+vEQV8F{VU$I-Z$ztoY(zV>r|x0!eH^pKAJF4eP*CfS$S`Xqj6xPn+i~HwJ~T9 zhOuB<2u(%VEDfT0?WUyeD*VXtjoNbFNFa;K!&$V4DZ*W8Q15x78bw9S;2oD!I^L{2 zL8vgN-bc8-mBXNo2Hm@oqOesz1kcY@w+}DpqKEdm2}R3R89qUS!E^S z?oqpeG9V6t5ZONjKd?hP zfRkENNle<8~*mZQD`?p;_i9dg7P}hF@69RM*EX@#DCAU z7_uJF6Q*Snlu_=8kyTlhu~s6}XB?j~?5QB6Iq@UsVfS0!1fFZDG+PjY!3;UNit`6b z9qN}#^_l2xw-~xj*26G4Xo9q7z;$S8lLTw`Lr(0r`;5X6Q-P#;Put5|3BZk55IUbo;BEb61L)ME%y$rvke_K@Tt_>?M2hz z2FQk0K(E@OIclv@^0*lE6@mf&^whoQo6L-ud5^35*|J^-3W3dlka-xQpYE3o03{5> zf?=BeSf!paq4Fil@D%gZ&=eETJrDVfS+JZ8LBX1}u{^ZEyJ8L)H$QQ?{NnUc$Im9- zkwuTHzr(*`-Pr34D?cXP z!9aE-dvw=qfe=>XOA59n1ZKH^{xSyhLpSD1*cHP3SL=+rP$`tA1H}MJ{KEara-BHn zFGbE+mV~&vVpI8}H*AB)le@L(iDe{mJk)~QzndLIQ`kBj*B zb>{mjVc9KgPlWDZIy_Xe210sT9E;ifc1brwNASS3#$sv-dzbiw(+Wa;SnN6B!89(K zrboE_LG$Im8=KUy^2_rvsLU7IRTOa7kPcEPyp$lUh=>6bml8~wc2mM}7qd$9D!jU+ z#XXkIsJn)p@G^$1|H4o)ws$WBQCJ?CWBZ;1YlF+Xpl7>ICP%Hg`Z+&BwBw*I#<1Ia zEh>$%=^4S-FUD^F43H;MqL7>i**xSViF5^I1oJ)+7Hd zl{Wth+NJ`9>K20|y_n-^DZO>n!AQ3HSsuF3EiAtG(S_}h^iOM^Mm(Y+jZ= z-1c^z{JqAq)4Q7#KLH32!@Wa=x%Fwcay%Gs5qxcKbLI3RST5S@+7DI1rtt&Q=}O4~ zSbm>$f!g|btJ*q8z_H`;=EQo zlJ`~)vac&_+>{KPTQVT8-=uEKQ-mJ@h-22MQ7H-0){Y-=Nz=3?hK8%p6=$$F5fT#@ zJ+b(I_g4v=a7cu0M-Bms`*!e^HS2;qnExB%Tn;xz6XML1nN8ZuYv!3R-oB-m3HQNAS`(_RizbteoWV6m)Q&=zDW zxHq)Ct(~A(FFzE_evBNf+%8_h{J<--Sq{O&=O-VEzm>I(&zio1>meUneVrGNZuTu4 zXri1?X{tc=nr`Ge(vlph!V=!GCV}#q6+{7mx3Gcg@|+CYP`5QyiEHZ|rn@7nZ}X^s zelk$AQe@Q=_GOu(htv`=D7(N^JoWBTv(`(^u#SI_za(Q6Ze7mxs$jpN-nb4kTJ?jm zrbaEX=+a@AMe?n(g%2pgJ@66U&xW;KW-)9m#f%O!d8K{0@(iX;AT(W)LVBxL{bs)J zd9K3TL?1();`hB>~5e8spzRi@Kg7z@mp&9X% z+#%*Jbz9l{;V@y}#hxwbPU`nu^4(YD!Y z?Zl#kQt>OMI}?%JxQ`uzzB_QK_-i#2+YXJ}KCvO*-U9PJE%A3vtJ#iBo*meir9@ss z`QFgVeKw}o(E%yeso;%h>;U<1jRz7qT1OfcI?%Hs6P#I{vS z3=~s4;S3yJN0JEoK74{Y$KKJ(&2qj1Vs$7R5B8A+!E{%EZ{!{ahJ>aT>#*u6MvEk) z&RgEytG!69wmYX1dVVfO9Ns|PlC+~0*l1OYfwA(%A7dqp!a-)Oh9}}$`}S@h zx9rmw2Im$FGR(Y0TrpAB4rPXIe$W7p-sE6Q0V;(NgVJzwJ`hjMgma=F5CrNnC{=Nj z1W^)E+;O`Nq9o!M-DB_2u`L^HGGmOlDKq?XdL5MTqHLVkjRllI%tlXi8q;9Yod?f? z-#~k7C-{tmW7Y%QNG!OC0y1#p0JWO#q?RZQPE(uhq*g14Tq@qw%H?*Z4N>@5tYcWO z*^x(-{nI_wj=UcRrQ36Z#3=*@1YmdQjR2!b{Hbh8|BK|OciFDcyokPj{rZb3&Pr|x zhU?d^a=zsMq2X{>ja%Zm!`1GVXH~a^eT%CarV5M~q>Z|Zg+G6tXlU4Pm@;=I-ZXc0 zgJA?Q3&D>2D*qoxR~;8e&xC;k4wvHY?p_>ZN#oZ5g zIEwps@At=Zc_!KHX0tPyWPi7rx6QY}TrRZ<(Tj(i&GiZKv5Tq<_Oi}CT{!3BoDIaD zcXo7@ha8Z~Fu@sVSIbRfxRqhj0N}kreu7hhZ&+E_Fp?McDjB66UHG*Lv|5U6S^n;e zD{y5PXI)__7KI7b5c)i^&PTly|M549<| z@$frj6R5XMd zzNX+J>(A`q6ZAPM&-49hR0`mzbvl)QdT2PK1D4ey2c*(N_>?SmwIFM%Ch z>$Fh&Mv4CtkF@PtXO2ECVqqvW->%N*-!iAVuBD{_XzPnGWCcQUZ zwLAP)I1OpCV|VkI?gOvT>O?!SWP+ynamq{V-uV&6%xP$$uNm+owN=}(x&=;qK|W7o z9A=})IsT;UwYzb|=6vgL-mKuIz?x(kAN zz|ay|7~bhs7~UCr*z8$+7~iStR5q&Yc?&SC@r(m3^7Jl$btCRG_LO|rZPAh#JGDo8 zuyChmplGMi6D!3277KE8D=_uIiBmq;gXNbP41gktI$|56$f7m5BAQrSAeh)B!PVB? z!TGLOf~l6CK!K<35U$g#<(Ji`u-?`(P-va2`Nd$a`2|wUodp%*8-g9(Tazo`?Olwo z6&1o88cb{n1wK3GCp-^@@ZN`p2@-FVHPpVqtFIE}VVNMxcAEwv`|;r11YYVx7^G4o z25kXJED}U1mSKVo^?ty6cPX+X)*iTLzx)I*B2&aumL6h1>q}U?O5zwJ%^+du!Juf^ zBGDU;pUh<%czsY8-j%&4Q{4Vi0DKqkTYtdOgEbTaQwm8!Q|wn7*u&E5B73HTwWj@^ z5tJn|!M>%T;CYu@28i?)=ko4urWOW1*PtKK0YZ^p8tJE53_7kZx?y=zCkJ$gwS z&-P!!8&3kvx>*D?CI8ydHv8MR|8RrgTs(P+e9xGl@SDO_{gz|06)YsW0j~yU?)`ql zx*dE;Iff)vEHd=OJ`b;MBO(DOi5J5=dr9;3NP$y6eTl1*keC#9AR+;udvK56HgHJ- z4H`O_>VmVQBNFL>>qUu~JG@V6s8tF>a(rLMwNK)vVuFJXZqD+s%_79sp23#(%$*M=kkoOhLm6rp7>iv+8W_rzm1CEJo0 zg-we5LCEtY$9Uj^^1SKJ?D0+|ZKm?>xD;dc8h7imHGrYp6Fe1*3 z`+H7BC{Ze_ih)50I3+Gh7=H3fRP?q8$;v9*uyK(#E!_!O5*VXpFaz6XpB`xhi(12e zgb<1jQY>L0fyTpzyq6SdXnYv6u1ZUoDVpq&0WV^RFpjm;h%eX|A-O{36Y?7kPIRjq>_DyIJ)+O94S*dqVN*^Tqh;*DdG9TiYR@1Ft_9NOWEjEq zkj3y;@6tlEKy~#hoXEXMC}f?x8qihHuTB+CU@yRq&Nsb|D}4iY+np*QC_O+sy1P^( z)DW&I`E$1R(LX)QJ_PqK47%YLun``>un3YwiP$r0h%b3aIRW*uv{T*(pgt`;lSvid zrex_k0BM^u*7`L>amu@Q1=Cl;>MC=5>%6wR(DnA$0RF-_9HIx^>^bl65ZH2_^j6#? zP{{X!h?mZT5Hs1r>X>qp!fKHVcfHPm7l^P#0=0(_W>DEc@FGCnLnIGgk~Ah|_JRDq zUMe+v;-D`HP?+xCgAyV(B~Lq%(bpOF%Q3qbAqhdfP{b7J0;y2ey9c=kHRj#?1M)qp zRO+vZRxloHK=JJXSH{vZ=!I zP$F)&pNXI8so4<^m|z35x{IhJk|bt~$La&gy>Hks?!=^iA{?#4`(86)gc$Oz=afAZ zYLAF3Hs}?Ixi!Z$JP$jJV`Ak5q zYFQuAfR2JdOGF;#& zO#(37+>hkV>YC7rSrg!NGj64N0Vs~e{K!4Xc637-xA1`~J7B*fn_)FLn8w`#8cSFd zk;4>W@i#yR={6uyWnkDrhKr?rz88v!FJM}P`2`D_Jo7y)DLof$%``ydLmpgVw`l+} zRO(0{T&6OKETJ2~3C$=G1x;p{zy+0G)234@b0NQWTxBiVqoU54G+CF&DmPJ4LfyK@C`#qjAdyO*!LuRi8f(=OiG&y5er#mAGwv0#trYjxMGHuM4I{+8hPrNS9zkrQ8Ijn%dHe6W z)Y3yu5y;SJEX-b4lzYb@a*7?NIkplI#D;S;+Kk+`-i-BrcLh#t+8YCEwI~l^so{i_ z*PuZ8b+Msdx)}Gyx>QgMUGf8AyqMcsM?R>Nt|XLP7tJr%5#24C4Is8DfHIB_sw*;D z1#=NP~OFI@R)HKpw=x1{yFS~9fECa3kW?IA@U1%1VZH(k={?L zN-YW3#DiMfIFUE@J7A%@VRPN+6AwsEO%AxzSQ7Ev-8gnC5az9GPgo%)i}UQ>?KSY{ zo@WRWryW@L=!-XC1*1-VQqOh7pugVeDwZ{?peJKrh?p9jI%hjfJKfIA%O||KRA64@ zQ%yJ6wBxoO|1bdO{>zCuWUNL(PsB_7&kPMt$#+LdsKDZPu#gcD<-{TM8;pktQqMRKjLlX*AbFk*i0;sU_*OuoDgUuu9f-{ z-ububC6*stOpC){Cs>Z)0zRDJqVd}365dT|Fq&OkHwbaO2&A}5Kn2j%3PMm4#aYlD zEQ2j=6z2)@!eCx9mrVj#Q+bb&awAoI9LLp{giI^08-&z@8`BcHw+NeC>V>DhA#ow~ zlU5ZEGAFRbgK9>%EtFY7e#fKl%(Sgp++?kV-CV4Z>S`L$mOcx=Thi0V%+?hqec$WB z4lN!HcaQoWrnr^1)2D_+8>#yVPLd*KCg0;7lq;cF-Flmp&1ytI= zzi2mxsZ{JE7*?)Em4Vn@CbhO!^rxit@3@r|ziOxLMv->xaCm` z;yzynNUD_pEExwAavKB-*0nwwK}wG)z<3p0aEujP2#l3n$XHsYXdiV=vHt2@AiC7L zAmr-3$Uv0lr6DZy9N^gs!?4Y22{b>On>6r+HWx5gvm4RR#9I{le5?&duM~y#Y%RQr zPB)gH+>JJvO3M`US^Y);Or?8)@LK#R0#U211-@1V2tiklvp|xyJxG2sH_l+P$_uy+ zqhKQF!m&7bwekXKL%%y?P5Qjnph^Q#-TerFyBwrSPyc%c0rO(6_ww7t0+3H4 z$X%(Fh$hNIVHwjh;ITtlsD}tiS2iV@i8MB_HlMGL?Fbi==7r@)Pz|Upq=e$m0VTd5 zgB50wp~+s9_skt|LHNdqCaOt@wWZ?_0e(ainE^=Akp^_yi{zeo1z94h298Qa_e)Yq zWgm874g@&e3<1vGz);jTG;ImP4tQvGr*CN11uA2Q|BSPOE)nK}kSC=Em#2sa!LxrC z^o{~9Pj(ja-JURrcOA_{r8RtU2Comhgei^z0ZIyG$1}nJ)>KCmo6?@%@!Ji17vWp8Zi1s()<@QJ8Y< zOUjo7=Bc{E!GM@2Nno89sezu3G$A36{C*$_bjti*#M&}0(Bfe8CYss|=gJR-GgW*;>G}4G8if18cTf9B1RcDtg~T6if|H6vfs!e&fUekA zJQ&cse!h~y02EUkp}CP-rC}~Arx25+fN;#AZhRO68`{Hlr3r$#imt#J(?}47X*n3^ z`d01u{KzoFxXR3-dtNN}XdM_qNX`ILxg=y5kS3=xQE$LJc%(|{l!&<{J7C}u4J6!) z_I{aP)SRb1bwkXY47z|Svl|dFCClZu_B#YpfY%EUbJ`|^G{urYw(!)DC$igqoR&)1 zotMJHaFySl#R=MX=|IWsJW8HgQ_U*yr^8gO0!A?jreqyzK(h{cp;`81_v2nj_Z(gf zFbLdNH{m_&bPzrZc2GVG2JqjXUB5TF^a&8F@e@7EX~S+q)$Pj31+i^>!o#CNWON@C zJ@O&5HUP9$1(vUu`QJd#cP`7kkRqeFAvM_1_PA zTP5&N<^5Io_2N{}w^!s$?3u-a2kKxv7-@x(7Y=@^;@oEI{Fs?s;m{=jwKRM3xC$8B41sLYl5BbA-R$C2X6uok8G5w2gB zDMW|abJ*-z*GN+W_ULsU8p!W0W-`F)Q$eYe2;&MzvUU>6*jY{3?=drzW(Eo#m~(`W zq#?LdL0=c7uXv8b_AQ&>Gn1zMVHvO|VCjX+PgSJw;mV!#%l-~O#`w??ubsrF)%=I| z#_%vf87An;cuE?hkH2_{^WV+x?d9xz@Q_%{nf!}krZFQ$UxUp+O@?z!xG69|L{Bj?HOXyxlFw@7vH&1N-Php0^a8+gf}H@e7GpUp0+)VZkleH zYZ>+F;&2gN^+`TMTh(s4l#3=9=S0Kj;55+p3R3U*HP_Q0QvRa+G!FZh;>GHlxi9`u zJT^YI$b_5G2{YFb^RhZ`pYUq?RQp={^zwz+;Dh)<$pl+YXSR^=g~z$4#D37qL&{b8 z%x2mIt7yBE{KMkjc#Xv3L(QrYSDS>7xYmQm9#L9NMP`M&_V>yU+RoaQm5&u6rUH(? zw{cYzsz}|hVampou*9>iKzEzSOtLKbZ!q~H>DkZf^4Em=(ASQZ$H?Qw%AvWx)u?ku zCZ56L&H@*6&#gAkhp|PD3X`PWe%C3}L|=O>uFt2j6GD8i%Zk{BzEXZC_ni6hG}QIJ z)Z>)R@(DZO0#b{eD^_D^TppR+;E$=B00Z;Md53AKP3>|<9|35P02GTX+53FpxMK>*Ur+2)p=c4iS=}3 z&P8#%WuB%v^vRgN+1erK7(7Q*79w$TQf@u_=TnxT^J0@>>AI-%_BC1QCeO>=tYnsn z|NYVc6V>a=)|+t9;8#3bBZ-|3lGX`g0nd@Yvo_~h4@-Y-ZF&T*u=(O`$8+Z;PZsp= z{sx$(AH+N;{LMc5Demgyc6-$r$|ovtP$(>!y&TC1<7V$kLJq| zumzbDW$m3GH`FP==5_ed`i5!2)bQ=&3)_wBV(8~L`xjJ98O#IzQ^$Kx8AHpe%j-WB z2^m5rt9tydb6v4lHWQ-m8`f7fnXR@PY*!nZ3j4a_l1?En&%d9muhgAUTJq2g+@?vp{!HH8?x4>4cwpXzUkG$efW+bTk@B%0LEHhAtFG)(Mz z9ga>6IvzeQ)mK#z@&*b4Yf(0co<-UOybSF^4~Nsy4P2bd(W3`$83{slaR?8O|FaFD$8G}hH9&=ObL#@^;CU&b0&%gI<*(F0C zxYB#uo^J{6YW(a5t(T>y9UXs!h8>Mjm$-FAU!L9~T!VmmnKcZ3Xr+CsEpD9fH@+#7k})QDs71EnDlD zR4(^k0~ut34}}Q1)x5Zy<-FWUwRV>_eDynxhVQ-= z%%2QlpK_JNBd*)TsA`qOa;ob^aB6xZdp~(z$x3&1h6+J=vIa-`JlR`JBHSu$nTWZJ zclX;eJ#K0aiHpkY*tEZ4ItphcIWgRwHKYUY^vBAG+Ro3<7XF#8Rk#Bwk_i9!HL?FG zlH;M|h`qFv{>sEDLQ)-V&_wDmZSYHut$?sP+@J}~VVV>s-(3D9PdfWK5k#f zUDnr-Ex%HpR25+;_hKbrtSABz*;<&gX&`i=z)ZezBZDMHi6WotwI#R>^?CPEU=xL% zM4g1i_YXn>?9q>k%o}1k>D=4!?8ufeGV<9JC5_&3%IT)Sw{f`Hw_zA#I{FAyEzMi8 zozbsCS_Uxta!~Fl+P*_Rm68p!T-!bFMA z#o8#`4hD?jd}-F?+%}^-f8@$@hIOXqDsUEw4)3|?g3ltJ;JagE3La=% z**4Jw1)8s(F(l-R2{yLTL=Tm#(*cWiB@1KntMWNnKOljuOexhiR?>vZGM>NVCQmJ?R` zqJ!e#7VRQKOl91^6ng1g0}d;Df&fNg`zjRi?`r{3--6X5bLp0)chML+fAWnk;|YfF zc*LW1YuB&hcgoav;;$Ah;T>b;e)fe{p^1M*lTTg|&~LSn)IBW|Ojx&@o$xJ6$eH}J ztn!V({q}p~t|xPMmh+0YtF~>salI%(r(t~{ey3Xf6G5O{-(lT%A-20%gPLf)mD`ye?NUvw{16F?|V7M+F+jk zu&G|PR$h-bD9s z$ma9iqLtYv%fgr0C&OZX?>Lwlc0rE4m8Zk<&-I2S=W_KY_?=4imh$DcnpGIRQ0EX#xptA$o1-aXO;BELSgvMdWSkZCl~Fo^2sSbu0%_AU|-G_EI! z>n>UfOj%Z%Cr;326HIUHj9m}mTRUN>*#>xttbN&DRLP9bD;mEyj^6Yhn=}3yrH#`L3)YKQQJ)W-r(0VAQS%pUQQ33h7?A8MoiD*d$lvt z&$+0+Ecf2`-DKxHunOnl|JDV|PUJ*3yg?IQ>o$(QXZ6;`Pfn6v;uf8oH^pa|i=HjL zbWQ<#@T4G7v~#<*5SVTIfL~Btgw}%HCi`Bn&NbgF%)^Tix!@Why0ES3YtK5n>gE{o zJMLn&#cy$PbOh|~-HQ+V3q03sd&c*WwpZFs`~qAPwB12ok#$XiL5bm6>fJ?$Qa7s% zK2NI*0D(#MTM5nzlAWei>@SY3*mHlqu;#p$&Tb{15-dYZbOe1ArV}h5Pw9rvm`R1t ze{Dy(2j8mh_zVx=`mX^e8LGRdo|VAGxM<&4mi!+wpy!t<(25@OkUZtus#9wrN#if>{6G zO_Rh^7s&zPc-B@wPxSlRTzB_r+i3Blud3p$!!Da&EEQ-uU8*|V|F+ASs;$ENTF$rV z3+dz_`aZH}crI35RrpLgu)kbYJ(QTLk!goa;gTF|%}#QN1U>p|KP9;dOGZB($B^|2 zWrTx$<`skk4oYb^ox?r!Fw1s7!#{n;& zP}V{i!_VQLC4jybXElYA0cGjIM-4Z zueRDgPt9&gsV|iw=retZg*&7YtYl6>#i!|i)c1S^OpLr#cKo#ouFlzl>s-kD9iitY zY!A9GiG`u_7pxtgA&w7ZSGEJ8zU97s?Q$DP2_+eQFFt)rMG{8b+{burp`42S&Qx-Q zHVVcqW^5s9q~15f0I!{X&oMQl_sb*q)#zMYp*CCakA`h(gf5Y<;9rCBqTdp+rYs3B zxHfzII?lw}sJPA>L)*-Br%egz)F>X59?ld#`95UYbOvO$>=4(Ex!iTSxK@xi^0!TE z3;HllbPo;Y9vvr>h}|hzqo@Dn)UVq`U0qi3)#+&svfYzRH`Npl89X1Aa}#&l3}3~* z6U^=o_T7uQRbX9*eW{a!=8Ls(^J=d9-1=@wCye#lo7=iFiJmILT@n6$m^pN_1qk^)b;T0l|X) z9j)mLPw8uU%h~$R59G{ihn|v~YB$>`YnzQ%Rlq#84pzT0;vJyP5#kcjiGB{>_TttX z5lC>}>PFT7f_cvN{>ea$ZH>51$t}9pnO)qYy4S(=a=T%81?$Nqm1lL~oV5er{I0JX z@eY~XxV5nX!$ok7v<+qL=ZO!&nPG3^zdSdufr-&evfDO6rzP#{e^F;erIg*lbI(P- zIwnE<6zr)+Up-eUsHwttu^-xi6#W3n8+aJJl9gHpwAGPc?1{gH0N@gsI& zF(T?uijD_654p>@G4qYF zsi*q*XU86a$BI)#*B#;-lcSxvSQ1NxMVTKbjw->#wkZFjE(hPyeSZ&$nT|%rDmMxADt5!(w0Qm z_JW^Lb%$uDOFw$Drp3rz1N8MgtAx@Ly??*!{G z2<$Q!qFgrKBzCb!y+6)$KP=3xsrf9%_bmnk2`~BMA7fZpl7!PlV#9Z1Q9Jdr{IjWF zYd)4CTO2uwrR&dCNAjuWm6ELCt4Xo-2&5#$7X2txV|f&w&C88M(?55ftF(M?uYCKP zH^wSNVhoVlv&!Mhh<}oR!PwBJ#rs_q`xav7Q-?AU=%7+QRK5K{)Lwy|B8h&RNxlQG zey{%Z{6`x@?aZ}%3$Fn84=MU4-#na?k$;MxNkb;SecM*IYoageNZI@+csyT_U6ha@XDO}Wv| zWNiIZAd0s5nXAW3s$}C$5~|E)DaKJEM~a)$_0*giz+PgaQa)K};x>UvLOb;slrFT} z*hQ1q5u^4;e(ctX{by`hN`ayvtp$6wvSaOxqd#e$2qqK9s-<{1dj`Yj87ShP*&LQ= zgS?@ClrQPnM~j>!5cVI5G=rJ7xSvI`BWBBA%@9YpapV8tJO3=!T0tE~vELi*AFH+X zt^v)r&(Y)taCjuMS#&AxAM9=mi!*YCl4OQx3T7qx(s6n!qZLr+>RU|{N-} zxw=~k6A9Omj9Ao%fv0b zt*-YHp-hPTpf0hHX+ql_YS?J6A`;YR$HduUT52nVVp|ZIeWNjz5 zq7df2H1cz-68s}$rLD-Aer7;%l2DL;5nG*Ttr1)O_!C(j0FfIZFS8JEBplXI8jJr$ zR3t2{&!V4&_|OtByhGhZSN7M&eHthy|u2 z$ztsBMPyb+48h>(3E22|P3rg{y17CGD>{=NI;$V~bE_AD=S${qR6p$jE^k)do}s%cE6P>vg_l92;1Q z%bNK(eD>52HglJMzJWS9Pn}(`=ATZ2d;WlgrcUqp1v(8$5pKK-(&c@FWx~0Lq3t)w zAD9JV7ON(9tLtcqaY2%qa~`u0O~JG+MTD`tbKkMf2D{Kas8 z{vR$;q)s@lEZtHK)Y8^q>I5{hNj4YpjH=-z)=QTCquMZKY4Bof z%-jtXiC!DHSqUg^ri)jW(XIYF`xp76jjD&sGJVmQreX4qwZEALw{J8o$aGBmx9RNb z(b*beeCKtiil4fK@{x%J9|adA%d~rX-)mfCPt1`r(|x00*BeTYpih772+)*w8#glw zXF8J;FIp{-NGd4vMTsouDRwJ<6sO0zr8{hha>^n7kiY?Tc zMJCph-`iJ&A(<4pbx_ZaBR)!gg)cb7jukn-t^Ox=$SK=Ti|gw_=+X#6@Gdr0rM7t0 zK7l?z>r4HaU8HrIFW4+aMO~vTc4?Mi+EZyc&hb>Q-g4z9fL9=K-~IMUpz{d72Kl)Z%D((nGX6K zQgU!7^5QtDpX>?A?yn^rK0~dCGnxS7BC<&X)bX2#oSLt{f9mS;q?WbSa7Nb(Q$|Lz zA);!=u=1$R#6-)ASL9#UeVLKjrquZyaQ$Uw08Lr#lk^dd{-OUzBnGzjlzrGXS&b$9 z%o%bm@*)8tKyy45ASwGu-eFS7vW0;%MCN4NUq{XJFTed_*NYB=$GyHQms`Jk02hfiYAqbCaJ&1)bvLVGT1|9WSx|v3C3O6wRgZmB0Uj5 zFBNh9C80$G_5bi|rQiDo-c=<>h}I+=|b$wglVdT} z*FWiIU@{EBhm%a`4(bAum~>v*$l~FR(ELNVNw%C`ZK)H`y^Uqp6=PATg+E|j6>}UD zlf%V#Y4P-SKJtqOL%6L(G@Ne zz%re9CUtI6f3)bqq9)x?f3|o<*q|cTIAR7r!u_+@EUgcXmr1NQ#zIn`@&?=14q4Ii z`|9Eh#2z*UManu3P8cs>texDcz7s+Oc$?HN&Q8tE5PvBgcB8TRx+TQJ|8Xme^shl$ zFZ>Oqr$?aKkFTG(KS#v!p#i+*tRizc5qMucb|%Qa(QQ70E52oJXn^j6$8R|5ki#)C zdyrkjYbEA(U42?3vcx$keS;e}%_#2EABjMGBTF=1uS!rt3dIB{8k2X z6rrdSQklNTj=D0IC9MP01t5Ul=-?Kyf9vscaJT3h{xy;zf{AG`T~-n<#uHh$L>GsU zhQvvSlC{v_jEd(82*f^dx%zITW;Mca978q$W8S`-g-~~N4wWyV+g@DN|5z?H?#?O1 z$hEtj`0q$R?NYY?N?;&gl!S$8aM+Kk+Q~-ry@WbS0%KJP*-y8gLKwOgLO*7)PqONR z{vlh6G9QeP{r+5(8Qhm!Qt-LLj#~BgG3s+pE5oiQFsLU$4ZMyoH8ybOEW5mpk2W7j zn%Vujk32&(=2LxyA*7c%^Ni3Z%UYCY7)W?UK=xNqVL|J@{e(2Z)5pty2l{f8E3eu0 zbN7#ynYLLV8Kx2qY$_zAbs`ZVa8o!nReE$!iY{B+o9rjUA>lf8hPBYy?X9}?N2GP~ z>{bXUBc0USM}*djnEB%U`Y68;!^>zCZ^IrRspZ9uYxrCKy&qm-TCs2-f1!T+7GAh0kmlyBmQ;wLVxvm2pk8NWzzd*2Ul8Vshw5)^nKBOP!v zN#feA!4`}P-;&Zark4HC_5|uJuc!HZfGUKz2Cw5eCv=~6>2&`1__+;NNNbUt7Sp?D z|J&y5%qc8R-AUG^7iJ%FXubr#gT47B1QQ6LG)1>ZgXFa9Q*6w=b3viI1ioxUJ(hMv zb=0-?o!ua3u3=6wIx}$^k6t0=i4LIE3sf4$3Px4Q@8367EVN{U53rvcW+nJjV8}Op{CHkT+Ke0qht9)a;|_= zT9(t!MtVl?=qKh)QXJ8`(Agm?721n7z-3h2D@sbkX0h7fH=*U~gGF|lODD4J@1>GC zZLi7CN^(J+noU&o#m2khPtEFVp&gEe53W+P9$s_QI~&Ya9DD&#s@Khr?jtSb%dhuo zbZK2nX2=S%@n$-X-)^K|2PXb1$n$_W61~ zMgeE0#*mxxRQQY%GC-Y^>@t&gq*Q`;>5_6}V+?%WWdnBNxl1=AvOI=N#U-2nH1AJ| ztLJO7DOQNbnjTa7C(AJMcIe>aTNx-k4j!&6leVpQytFt_;O0#0esnRP7e!ew=5 z9bmXISbLU2_BRPutNQvW#j*v5?dhwY?;TEj3u}EQ1qZ(VLFtxPx+i{2z2vCbmlUI{ zR6Tw?Rp3EOSyNGeY~SC~Y+VQLyqI)7)nJBVDJrxPdsIh%t*g=DDWruLo!=`>S`S)x zKW&R~DrrNqcr3ud7)7s9~~LCs6JwPgdQ`hO$B4~UEM!O- zX}PNzQNHN-v44getdzsDzeV^ll}!D9T9wlencsr@Lxw^Mb3ma*7qT=uAwx%p6`e6^ z+B`Z|Q4)iMKjB#pIKBw~AWE>cVX4|KLZM9YD^y^>Mu$?OPiak;e#9isk1vZDueC3s z-27v!a1<&$dXzd}BB^}{rXzLQh$-$vwxtm<4*ixS|L83so)SmDz%@9{pUL=s&cmN4Qbx@2me9@&&PW z?F-awQ9FLdkCx3s3LxbZaxW&Sc^Y@7SdJpNdS^|h6W}Ka`gfTn*TQp@iD>Lzq$ZaA zFLPhA5Yt8DM5T0&gyCWv2!X$ZtE$Ik2;#)CAi|_dPnR2z?o2!<^0xo`ZR`oCp`?RT zbeZ~Nc9ij+hUl^%E;&y*RK@tAAwoj=?_A4*$tCT(u0=Hgyk=2WV!|kC;Rv5E(#!P6 z$K%?ckyPa;4i`7Ha`m!4e#yp-v!#udbuj$f0Nz1O7h2Izt$#>lc5d5kxnrZ^lK^fe3r8dKbyxgdGT48U1Rh^{JV1UCxgk60e=)Ns~RQD`_QV zy{~qG1c&h>x=soEW3tYvTtY-94_g$QIGpI@l?tife_XjvetYBiAUDw>V(!8_u^6VV zfB5x}|7DlgnOwv!TW!pBW0Y39H^nVx`QAqzE;{4^j*9cq?T(*Y2tQc_vk~~tzc8Ct z;b8}&o&2_>m?4=ohTLHa@|MmPNNOQ25#6(rOQziK8-kb2+?(Vg+bDF$f4BZYa~S5s z_O+8vC{FV#*JE*1r}$@O?@i+@EFD68Vm@LJWyeQEi+bz8J5$)KMG$EpCZ$gKgOI>* z4Y?sMlhs@s{c=O@S2ojyAaPV!UF;ay1RrC<(8ow`{#r+mZA>|~Hkw5%1x-_aLc2vVK=?!nZE4)2!H=dW zi~;(uveE!^33BaWqi0DS>4hwd8LlA`IG?-rmaTZnq3JW4!_O=~Li=E;8mjx!Q%576 zA8+S=IeGQ0&dEnbNa3Cw@pVfM!;d!xNW=@DcZt}if3Z(S&s!K1Y<|)v>>4PKIrFG; z`R-k}U!sAo-7X;evH2VN;mGZ|kgP)iP%u%@@DR!}rvuL`JYo%@s8{T;#oNUFmCrg> zk7HmQG2fsQWfe4LRwb4HT8PH-!_*d@!@d(AjbMMI?v5!c9Ts-uYT)<<%c>e+b==TF z)qdDx=KP1xK@3;LQ8Tp=30u9S)m&f!dINTg+rM3M%Pj0CJ&!`OCDT-L^gh?>kW3lR zkTK*K=F-E&U$9dfdRlsi)Be8ZGwd}&TeoDcwJ}O$|Efhd;mka2c}QsS^Cx>XYAUnS zONZPSWy4WXWFWG}(Wyr^S7Le{d2F+tB6dCQhIA!$+9P_zRkC(Gu_fmD0{w9+g85mv z{)tp^B_iA8y+_cANV;US_OAshUWw7q-0?J(!kGw=^LixN)Jg zk@4T{vX?KE&TJHApSijqkm|Ef$=`m z_Pz4*zv2BKdlO-iT@3a&wgy??USvv1U$D24A_$YYmfcSjV_0>P^mP#&obx4S$nQOuHfb^nYTfH zlHlrkF&_!D@clmcs|PFL3iQD>VZj}45^>TaRLRE(#Rpyt1WgaY;l(>942jt)W&e~! zKht-&Mr!mw1*mK(z=p9Nv{A%7)DMA$$#rXG>7O}vs4uu}kE4Wy}y!Q$nj4TV~NAIRR zh%}>8KMO8^;QbO$ zQplW&i6miZkr+p=|E^Jse{z&R3nQ9WSE(v}ctl@8Oia}3efi=1xYIU54s?m9NK>Rnv&{46kKt{zRh^-5KB+NTO9q|1nshYJsNe_hcGNR?rLDzJOO1dRR}s zS>$c8$Nnaods|P!9@^}KhuRSAW!0~XZ;b6_1VWAy@_57-AL0!7NG&sT?`XfupHobg z8x7|-t$bE?OB!DO%erH-v*!Lg@ke*X!=B+{S4SGS+gK??w@}S+pDMT(J{^ufF>MEXiypr61S$#Br*g4ttgglI)u?ZeT z5A!cH82^Q*9kaCe`H=bH#5N#W1sP zj*qskQsGZ>7h$FBed7E6%|d4$x$E^(EehK1ZW~um3}@;Q^=d^zB1y3ezEu#325z5T z#fJ$3$}YHd%TqtRl$zqgl{mul5n}ObI}&=!?3x6KwuipF7M1=M!Bd-EClziz@A|Gc zFtt^iCs;i3UHu60C>^07v#Ub(8DnYmsD(7P?cOg+b|~ z29v1$wdf=>>E!Nu^pB0o-%1H6nqQeZKO(n8ebs6fPj&ZXF6JEA`23epw=3<8DP=Uq zuz3Spxtd3VOWhwsoS+Nmn|f;fyGAALj@lt&THZXUBKnYB;c*5}Jg)m=7cC2qznpuc zPSc~_G4I^xN7&Xyd3FPMQP$oIKU2c~H1k*q7>xMIbsaJ6x7yL(niR_}L^u`Zr0SVU z70c+HHU8Y~-tzl^FY5k306sv$zn(^!EiN)9o1h_TWX{;>IpIYoUq~toGrk5uG$lK- zLkVewt4dh2>~IyW-%_(*@;Wq0?uLq77|WBOnl*KB@{4IVv5HmKDr8M2W*xA_FBs%cRx!MJiZ+IpR4sA$U59M2*6%OT7 z`#M-Nu7HNz1*~8=YxEWjOBmjWOyONXyrv|zAh4ffd^7znH38>kP^3`xXH2( zRJp||qTlo`jIY!1hP7?OMbcLlNM}k3gSXSr^2%8!6O+xuK46r6-m0UYm1^0)m~vfvCd9A+&n3dpCd=an-gr+ix$Va zC!rV{MwDB~u_?UjK$eQNsN%-G?wbgqCmWt5NgR7xsR zP-3t@sZ}7_R1kR_AI4Fswlk%UvYLUY&G*j_=vUw05Vy_-R=7`&Ac+#zx-(R4TFIhA zn@N&N&*5W($N;SOepMS0IJOF#G(?~Jud z4H>t2$e3wTJS%Yt3Poe7B8?4^wv8U%J~lLBcH;j=NxQF~OqetGQi$~h#+~t=%^8D&c}*|dn?s&gJ_)Zr#a*S4OmMP{^tUHtay*Sq{gVrw zIOPqd*f!4FlNy7iqEQsM-R!rOFI?q&DJ+llY?4|gf5zxxH=Da0c6E%6KDYLUQc{5@ z@)k9Mq%YPLnp|%M10Kg|_AG3qhGaFu<(#R=)w+!4a7I|)v0!}EE{o=MgnKhNUY&Mj zHpd5y=|?PvBw=l1dYA-4B1RkJZUI`~I1wF7g6E8p@^KZ(QUikMd&MwchNITCuDaE^ znWJ~bic4q#ddD)CXq(2U13KKB^Lp16M?9owqlP|7~Yioi|^D3E~7LH70sz)~`WQq1ErF?mg zWHA3Kav`IL?YP0ihQ(#;U96kc7DZ_7l$=#NvM9)v_T-B;$A*jt<$pCj4Nt#F;b4Jw%g{Sxe)wG@DI2qy@;yf1DedpiRkCa;QHwm@&na)={I6fN3WeFN6D1 zI+aaA+0mQsliseZ&UwcKE5_90iNZi$MpVN_+4@kbXHfa131}3t@mULiN{*pM0HYpo>y0CVG~5O|LqXate331do*hdIg)e`p#m~hqzcW zU&gCW)nO%i{d6zOy#{Z$PFpkP&MFc$dyTDfb!L-58UEbIXEkK`H8n$14%(7+n__80 zCj+>c2E}H6upiNeNuU7H+AV^!Iz5ggsrj`@_tGm0@U3j{GHDV@TTT-pQ3)bHYJ&Pp zOc&77ep<7d63pTP#K&{J5wD=ymD4A8s>lnMUa|eNmS)&*ndsv_X=)Y zMac^SF?y4~wvtDZm0T-%^)bacg0hlV8~5Z_CwypEYhV#Rva5V@j8*y9%GyNpua2?$ zh5Zg{Ps3tHZR*5cQfnrq%W}4p6CEaunRc(@LE1%@$9vK#wjm6c4rt%QLHJ;j6RnR% z=61rj7Eq_rsJn)fb7h?T7e-5#Agn>y;5MQm^u{ z9A~P@^dJ~px`$V3rY`{TL$y9XU79yJUk@^FeW6QNq%6heeJ~6+G8i}bT6zDj*w0Z3 z(GFviG~+$-tVO6|YuH>C!+pdCQGh2{Um%+UmT5y%YS5$+igge6^_iAP7nohDhg;7s z)x+b%gdr;BAid%4Wfv{)KQ)STdMXT2loe~9tV7vLl=(@&uGmphe-%jNeEUd4Oz2C9 zt==zcL+dwb3J~$ha!zc3ZS^wPx5?r`)5u)?k@RLgNSH8TW(#gh83Q_E$XW615Sud< z1VO2i&_iK)n9{TA5ioWL@U0K??ojlp>T;E1^6!^TP>>~aejsa5uwF*qX<1N9n{dMQ z@`DY%xrVnat4D2GM`y|q#^0}QrkY~GO03)b=7gTV{9o>&lqWW=oHD02W$NqVo_vvM zzOFGX@#$%KdaAlo0em1dw^)+f1SKNd#fMuAk;{8u#ekdI6^NCnY>)?euGo;Kf!eWmFeUsxH`8Ep~Z%F0HP~5Yp z$d#(wL%o_DGC#3ys_Jq%(}(M$kr`)GQO!rGZ2^@uVtTmc@g$?Hi&Ij*`6shq3(XPY zVN7cnB_0%FvwjCz3Kzf2co9ZA#gFQZ;*lvBJ8OQ&6Bi4HcoRg_^t?-xjoxb8o{2zh zf|~G&J~nx6X<7+i{tmn(XVVKIG*piI4H>$-h`2nHiXD}VVXzNdQ~$J<{^n7Psb^!wk@OiiEhoz&s1BlXl2KN@K*c*W!k;0d z`TF$57<&3L3A#2#GRkB!g&0OqbLF|G%sXStc3}pY0(d7(e~z##YV`4DI7%IPKq`y$ zFHKmfVDw~T(q_)t#F?0OZ)VG@1c}PQE-kff7i6>C(ULuh`3tS)PFR?A%_wz7o___&|B z+7N?(IWk?(P@fnyjZ)dF%vH=0vE{a`Uz>kUjtNk9iMQD?*xkdrKHGbTP0cLwhfl|H z<U%+aU+F|IF?^6p6QQj9HD`bVm9t$7`5e#k{{3&wUTP%-^RDE#==cPZJ5JS+cJQ! zqRW#?10Y{JHxZhik=f;z&u9wJI*Ba<<%KQ7ROFbX*<68`*^s|&vz+5#5uokRVHGCV zI_5~Vr{?xU-Xoi(#^*JM7#`Lfz@OAC;)DK)R3w{!Nei)dO^YCTQHzkS-h3G!?#SIZ zPKZ_O8n_rt_lSD$Hc?nyz8J^BuoRfgpK- z0-;?gYq=P56W?AoT_sQ0mB^KdVP1>v^vpXJn?kf=qwsNsL*=H^RzdRN3mlg&cq_|U zg_Z0RjW}}}vJBC>lq>_g`YpwBh*;|#GF`<=p8stz{R%x6LNOZ0%pb$j>Wt|!!vw48 zgatLa1`3C1rIVPqm{&aIhz+GsP6#iCa%8F;vN*Yw+*sV?p1#*YXsqj0$7%khzCk6Y z{wkoQYO@02a%j0vjz${QDA@2^zF9pqFQ39G};tZnmS+jt0&Ql;z^{*BP z$JGji@Rs*Fw%>@sVv?P9b7Yq^3o%cyTOJu;-#pho-{SR%YLxGjFPb+}(3vuMwcQE$ zZgxV%s~)|#%Hk_cB)8Yfunf^C&{nD&&XXfEeCbJzOiHiZr^0ZowC8PB(e)%Uth}>vV#4cMm#-|9YX%+mdYOE7_6IsUg0+v(1K=`^j&O}EeW7_;c z?un^Mb=+&+jgXO{(l`(!Ph2v<0I%93^1HCm1QmNS8RVw@h_&t>=@Y#+(qkCCH~U#n z4I3yhoYb_)MA|||Nx#X*k1#Gi5l5IL(#NuZNbIs7ob?w)deBanddSX_K|wOPcLiHn zBqd!5?E#}1cI$+1eI}?#d7QG(cDE+^XS+#1M`61U7$0B%ikzHTDZ=AMkA*VtSQ4S~ z`GqHA^oYLi9{w31CDcklU8`SXQI4XtSdmILWqRUq^TO&i={TvjDZPV<^A&En35VD#L||E#EW+?aSMme~GpS7K?oKU5l_%*NC>+1)95h9Vh(! zhxKM9c@ZG?Md8brNG8Y6O3t8h+AL{+UVB{BF`uoRmhTGwq-^7eF;b2(2= z^Rj_;)-ur69I@!qdb)@<6G;iQu^c53Z`JhKM~g2(8uoP1B!=EqCDV)n^ORBU6!cPLW3P^8(Q zA`#0b_`*1pS?SG!=|(88EJX#tRyzou3E;#3l+eI$Dg*RjJvh15zlSLt8 zYkf(mnf09*z8$K6HdOyg(V)5$PStlr@kV0lo>)u&Kz2wZsLqtGAtGKM<7n-bOGSuj zt)(v3X6$Nym|4kGR;CG|!5SZ&X$#)Cr!C5Qd$jkpzCXctX=1;!M=smXLi@W@3DV7n zJyyb?76t<=L%1(v@^wWN#goM%{j6SRKYVquwPnz1*bU|zh9GdC|JzZF0;iBe7==QO z!&pq`fB7IeLs6Wg_B$%ZdLqQZa>9WYB<@T8wkFw^KsjZdaH8j%-!tD`RQrCs`oJ%24SnYd zE--!UH}^ZghE^x{8q83m0V>yKnO7;xRarSggIQ`cNOR6$P{DLJsOg)>BsI{rgumT%=O%dD*fI@9)aqHb zu@#%$!1`@rD2sZP&lnWb;{-(;h*tx0%X1+zc;r5n{6!Jd{D;WzxW z#J3}n##x@zxFi{kh-Q?qJ@p8X^H9vUZxSvMyXPr?Ylb&dga_|Q5V151br0G!Vv-!+ z{5Q>ldNjs$nq#OLS=3}%%=5g(rZ0&EupAkeEi?|L`WZ9ap_D930pzNM!G1gyvwnD! zNmRMK4n_>BFGw;j(!1ap14mjEtHPy@?64y%QlfpK)|koMrZtCUK2zSdNPl-UVi0Jv z&xcpQvOI$?s@K zGDaaP3$srw!`4M>SYdCB59AcFLdW>@qC{B5<{ufvU3#~J6g0g}xXh#yJXxBF*yH6O2C>lf&oyv5xB$4V?9S*qz z1E$`HJfqVbDn>Q(z6xbn3u=}x(UvV*1$OmY2n&2qxv59QF6)Aj39nj)9jjLEM(waUcAFuTrTQ7&nfyV)8<%e00O3_NpyX)jzufZ9&fATusjFo=0)fx)j$ zToDVX4FU3DWj&U2F;Np4grYHw5`sNo&Mm81_y##&Xld*|S0VaJbBjQ}x1`p4Wxl1= zsci-c|CUA0v#^z2sdOYglyiUjr!ACNUrhb2id44kMm+uP58$P!=^!RHOQMP~dtPn` zusX)Z5tNt}f<}?vmtc78Rypd-6NNN-dC!k77NgKsA>tI)VMt-t0Rxs&WF~FD9lh2k zt@+(cg*%?~t@ACy`f@e}GzI1C$zcdvV%opY9Kc2*^RK|yU+0`%tGrA#88f04&n@y= z8EWO~9OL)xzCl%+^`X=gCJ)RO(YvBa(y;`er>q3aQwEPV_@ViEhR{6Qgf*}HOZf6e z!L>Drx?n(KvYi$i$SJjS8QWV#dzG=MNiMAmqg1nNVI?6;uubO-f&3HS1;W@)WvOhK zeKR8WY+6@S`(U=cm+wWLf4z)$D=cN`!K#;PkeR2Nly5F8dWv+R{Fb$p2Nqy++$+?p9lW9Ho>B-wDc zdqy)r0x769wNNn?Ho^C@SzNIbHW%m0H@MbY7pLTV?TTI3PT3W^BC7B$ZUs^};a0qL z^F7bwe{}bV!H=p)J^z2scb@-weCPYV^PTSm68a!0^zr#n2b-Lk@x9UZv0F1?E__3t zgYkZg^W()Lv5)i`I;5)UDx27sGS#d=WKNGv&7N?O3F~4S%^pNk(|Oj9%&2@%1nhfh zqi__D*wqrJ4)T-Cl#(kFOswS{HVU~Gswe2Jyp{(h9@^rgVI}No8Z8#a?b{jauE@XZf{Tj_j!&0>(qV?n#$JFv+}Qrmsn%` zB1=Yy|I88V8VgKh5NO&t1FYEsr`}$z*_fkf6H(l%HfL0ylyg?Ipsu#cjucT-Y_FSw+5D;A11V zjhh+JGJ7mtz77&bBn%#2-v3;tPBIXkElI5 zw5g6K4Q&xTH=RgzV#eMfMFH*(2mypQK?u-Z`rxHPvlNTbQ~?lD1%Agr3gE6;qH~ZY zB`eJ#cr*gG$DzGS+@^biwgwKu2N1o;qp`@Neq`r~oCjj7*%Brg>v%k;>S?QUSLn zklTu=JU%DxLqv3{$7&QPgwCpZ^+lZ@ zEr29ansR~PA~n;ir_D(0UhB}#h=tY?p<)m@9^htDJnT?4o=V$CJ=C@~#gDRxn*c~eC$3jP}Nm}+F3B4ok+Ptb5Vbh>FbvW)#Y|gV@5-Qe+ z*(Cw5JZ5CW;KSGt`To2LKR>{ zGOF1m+;Pq%O9H%>0=Jj<#)Irs2@3U=2%Ck&{{pf&S^T3BKTk|w zCw$Ko@}77)RRM>cTL&Ho)O;UP4q^k0LCl7U$Ei;pnDs$yuhxg~Vqsx!3A1Wcv$g8hHMf-jH79yKe1ou{FfQ?)LlA7PTb1C|ms%_>Bg0XJB^ZJ)08NQGb zU9*eFcx_~+1EwgEUdXG=E}Xg**;gKGIAj;nMCZOyM&GV&01pmnHVcC$4Fd7>sM`<< zg5(ToO6ViWU=&2o9K}679~ua;%^g;?*WBlvfzGcZwAN~;U%z(W2~0do&ygBkc&hez z#df7!)Z+AU6du@5w7}3fqJjyZ5ve9ubZT_FD7swTu9u%_0yI(htD%fPY+T!97Q#r% zdc`uNS7a0-$7y1ppYZ7xgj9%ne1Q(OcJ!J<7F$MvwPYaOffofcDHa3U^_e&BW8uV- z#Gr>JqL49lD4Wg(zO7Aj@dm{9-d+ zQPk-WEG#^z41(3QE=L!zXwnet$tVynmSx}wO-u0*3GVr85&!PV>d~3m+T!F`%?C3s z^C5>8J&#Tb&%>idK*i~mc`$&0*t9Nq0zjYqkB zmUBBBp&EFC-^AeX4fA|u!syiG*n|KmP%k?d7+T|rfcBi67(2eGJ{dVxG+H#JjY0~s z;;%*gqyd51iXX2-@oS`|5iQ~e_yEd8>oY?Yjni5?$E$NPDno!^a^9NM1D)c#)mq~k z8Fx@Y%nsn~yDCWRV+PhljXOUS4-;*8@ht{EBmnWi3*jvV`b14w|2R~YAtUhuh@5AK z^~L+JNnEU^VekNd&ekSum}m?IwG6g-J!wiT_}qD1liyh3y(>tyl2)!(-G3$ewz&w&>U9=)_5H;8G8uL0MpLpLP04yRDQf|uvbx~1MQ(s9sWf`afikjY zB*xn&^TWw}aB#b`1xAmX+W>deJSZ%7KVwj6dZ=uw+Y2#*WT^pwW8By45DoH-0c%M> zYoFLJsTPao&Z~!TYZp8yI!a@DMhIRtj! zQ=P1dQx7+?Pfl6!jzq%T0yfelAhiq1gz4mKk4j-A|nupqfw#IyoAJPr_8^qDh3FS1@8+uNpd_y$VD? za%Bn*#k=TM1V8XLYXdK}rf#U)C}ZMqb`McI7l^t^JTX5yfvt_4kj4SJmwoN&4xVSarh883m1F#t`Q~|eY1@eG9mohHdm$bak&N=HZO%8U{ zbE&SUP8jtNHnTpWSFI0~4Id%b)-it4i!2VZTDug?T3$yK;_+mb?)E3M7krziuMrK4 zpa3s~56sU*bMkh*9h|oa!-$^Rp@S#vO!&bG+Y^4U-k)rH+(Q?ULP$l>ua58K<70Zj zHEyiMnwgIU047akc2BYq)(dVBe6r84)>WlCo6>7aTrs45A5C)oryFFv!!7s${qIY6AdmYQgU!&*45kXj7lanPc{ zD*^UukA#>uPE8y;57)F2@4{g+IcEKyRDebVDz%Dje7>zv)!@V@gmqwMPlA#x@JSGW zz4UVDp(7H(tw)Z;tBgo^(~CQejfv5~oK#37s+oOr{ANq&Xkm%GG$C$Vm_0tnDkL>` zP&j}d4LsQW$K(WWO{pIbLI+VjKcB-9_YA#mldE3#LPu1OB78CM5_x8Qw~>{1wE8oN zQK6+5&=Fnz4lbgZ>Pe}SJEY{(`jZoO0PxuL;K@gvP)zOlnDYs)NS)*=CP0DoPKwC` z6mPz8;6Usr@%$+gsRFdPmbY)gw~XeOeyoj1s(Kn`pL8!MZ~7($;4y_HxHNQP7?pwx zL3&ZCq3ztLi{h0?ak0BheT_j6%7TyhceJiSi;V{Al)11{B)O_t3qY)bb!ti~7XewT zisI*;Eb(9#gn{&eBR3H&zVmrxJ1vL9@wVT)lPI)ZS0# zT_j!8YoBZW^~^QiRKljN(Pbj+()JQKWbL!W_VT})$lKU`aA8t_vQWW?ZXKPUVxXKB zV~?H_WgqQOlFMC=rkx^*?Oq@IEx9MbXzG`pgf!Xdp_rP;RKycq65}gjjTMM}v)ghV zPc2mCsG0EE4@#)?1`3Iwd1}Em8jO-c4G)Wq{Cw6nH@uWi6{MyIn8}URP&X}E2N#dr zNNs0t3#ifQs8O=6!TwRa{R+h#I2;*tXe#i^`QTIXX_Bl7pX3J98q^54QadMR?DIqE zu|8z+R(qyp6}*@_c}6HH{bQ9-2`Hd1GGD*d2QXz-LEv~LlG(JCH- zNZY^%$e|?m9QHk)EQK+Q7(3?BTGLQ3ttA%4{vT7f>c%@F*+nXRz!d28Cjc2o2p~?x zXTdw?=B7?1z`aUXSS=am65KVra{-)I#7;iM6!>nY`9Kk(Y7YcV(s_snsKNtY1|wP zbBIUyQpCSV&!|21t+;`%cw%yq)aRO`+esSS;vp8Y$EzF)24>4G@C@f%;7!>1>yc|RJ$ICV;z@|Wb z|43X1I#dn)LS&(}7MCUfPz<)`;>GX*bao;5nrN%>MiK!@Hcz9&lOrrl%m~OcB+`7| zedNci*pkmW9kfc%Opbpvi{TMyHXiRl;^}W;a;BNyuUS2IRd!NNpl0~^r1g4&br0$t z&e`h3m?}$i{#wMZm=uuG)_W$70(x0U2v%DeTb;2Ci=?a}101EE2UTHfmStqy07(rc zT$4S9ZON(tMq(PzFE{D(E^7jcaR-b64Z1C-_7dn(Tv;~f7H!k1n|o_?4weuFktTwA zX6Iabky8Xh3n3=&o~`i_3zBW44~o`9RNJ?0!*f*De|^-?KAw%}BFj?b5*sY!wko;6 zhR@&~kL(uuwx%k}Gvf6Q1l8Ew44x#Eu(4xWqR_2@s`o_f?oo|ZYbzF1$=~c$u&?SY z5^+&7t?6xdw@*yXp_hhRb;_RL)d|P5FRIk1D+;gq2T>JMSQ*@Z^rA^7Ow>l;fi{pA z7Sj~+!p2haimDXW?A~as&Pl3;wP44pW_8merGz(VN2;6}7`bHI3z>6Hw$f{r6}dcC zF{_y)@{ZzM+d`3su7z4O+8Q$8l35B7++TIoEd2~>AHz^DL7q+K&p zFzDEb(CmWpM`X+N^HuDH8d<#Y{o&>rGeUa9k=^}a840_@lH8$MO}FCER04e@-Q2{s zqy94BJ{)ApA_0;vDIyR5W`uB1P|KBsV*|w zA{^nFc@ISWUT6dqxm-!0b^}2CqUb8V;97Tq@v`S#>A}o-;$<35ZtF1B(94I|^tcOU zZ_mQ8Pd4$@E*DcweBW#YmSA+#hFJs5iJ^4ubz+EJ-q`yH8(azk?KWwUT^t(GR8>g^ zksv{adbYvKEdugZdIr>@0AA^Yt+UWWN8+GK-#6xKVz}ZX6~wU}ga-ht?;ED410!BR zQHW3c1c@V{+0e`5GN8Y$Q5YX)FEh3fG_QtQX_oqiAsNOHJQB3B@0Xz&qvs>HAvY~C zA)2@A9F`pe&P4%M(^Hm@op@D+6df3a*mKf{hQ82n1c!+^Qtk^t7jojqu)c~e# z>oNhHI7}l?d)L@o5-AqVA)$B<3sHzWNMR1lYVp3By|2o=9|?F7Pl)IUii2iD zuT!`3a)I?WXm;nHv95dc<`&IY`vO0U2qwBqh23N}$^ynUUl@L-reXt~fC#(?{zN<8 z8Y@|hUz0;Xy;%Z1FfQ@p1Sfdg#l~qdj5qR;EEcn;!TAupcm_a|p|^=LB@(A}l%Lz3 zrn9LnjEM_p)}ne2@S%R^OF#ulSNP~f3L$X3wkWPyei5HMab!`>4jqXXVTq2E!d*C# zypuQTaDX|Y{jOOfNFm&F*EGGp4}t0 zJBf+gx1fH0li((9ZE`DK%WbXG;!Nf1ZD0hDNj<)U0@;g2e}l~57z@YwxN z2SE!x&i8pd%;>xaU@+lZL}ch3A^E;|#5M@IX`w^0xVwu)LiFAd@ggb{r;C2qtbk}k zNZc%RqwlaT+=&pk%(ellZI zllY?fxlo;{k*^l`7Mz_LdjOW@o#MucqHgXM^^Ld#vOH7q1hEg$qp%7)BpNI<&S%CJ zq*UQ(4XOLGQ&f7Vy;9W|oP1Ounn1O=JTkd3JHueDK~Nnwy{jIp-$`d%X{P8Q2yHEK zq9z=>nA;JLE_dQZoo0Nup>Ym~?xT_4^WyapRe@KfE#X$*nhQO!<`f6loTB-@#CbK6 z?rb(m?Jr{=ZBMi{7(CkMcRL`?qu>MQmFnPmrD`d%`EUcIMGpQT38Lcdf_U>owFW%H zjDm0e+_i_)*eTymrykNz@y{d>RmM^`HXW+Rm^G-D9yC%Th@VL^)yG2R+`#`;Ccjy;F1OSMIu&+ZtzTq7V-U^VU z8EEa^sh_AEb~=l!zIk)+_A;VMff8zq4`6x*ZGX4LVvx4m?1H6N_buS=3NuUSa0D@1 zIwIh>#5gcfvz%vWxQ{}p)mR;vcTLETO+^l;<*t?x$gKjtnv-CV$L7t6y{|wr+NHb; z@4W$^J#s|8LsOKhHaUawiK`F^CAt8IvEvY%VmUC&UN&TS>nZjfv8hIC`;IT-EkF1o zjDnU%MrP)Y3p#b)NqX8ikRXU8ewHVkIx5?#CQsc$hISY5{h_bye<-rKNy;@@rYSFr?sse&tObGEjKfLmuznu9ZkXHUv7#0#i^V!rj1 zj6~Ny zCCB0lC5KHXLT}amE%4= z<3KDktd1iA%O{3v98gOOAmg$zsO)RG0YbBj{Z%d;`J#I!@N{Q&W(=wathR3DA+3S0 z+vM`Q1?FOKpBll7o}1ASx>(sCc?R_Dot(kf0mpZucm0(eR85TQ!j@NbpN}fwj7y;x z7E!8Q^`w^|P-2K3V*|#<_Yqg|u(VaEc$J`wWkzSJ52N*?i3r?MI}teRA2AUU2@?7s z0u431n4c4z&%`4Q(Ot6(R>gp|BjVsAwHT=C=R_MHGgEFXlIQoRH;kBmZMA65S~bm1 z*sC=c`BBN(*7@UGXX#x@>*9@7XGYluHhCvx2Z=l!6_*I|qGA`ze@^kbcxdO$DZSqn zoxI_=w+c?H!pbWa*$1OrN!jJB{Q0I#WSzBMF(MkA&I}@_1=Z4n)H03-(%Z~D5N|en z09^|`kX-;HAK)$~^8yacdLGL{`t@3nE{MfD5VzrD4vl;Dz=NBN4d^Tvvlb&q?wUaT zE~-3kj*uM}Gfz)O2D<;ICtg{D@|3DKq(`_D<&AhhQF;`o&7K~ISTjKMv|6zvyj+Mt zzNH)VA3A)zhQoHQ3d58Jr5-BcT_UwWO4;Kyxocwax*OC&9cxNVQiNKo2#3DZEYvg1 z&v!f`F;Cj;LD=1LZHNuS870n$o^;khMU`X(bXu zDf3>oHC)d@LU)VUY{YK(d&V2&BM#2c{TL29!kmT&8Dp~x;;S7$j7xS{Q~;rTtuM6S z>Q~yra7jfmMvV$Jfk>}arqK)g))Jo>H9yUqZ7McyYsbV%0I|d~gav0;8HVN<;C1JhPr*NU9s2T@ z4gSmRhQE7^$!{}T%{F5?>3Q#NGhwF8q?v}lMQ|^eVQ?QeHSi6a!vGmJRrsqx_>4IU zaS<|0@y6kO9O5u+9^A8($5vwo$7A`L`nL~47Bz@A2mdh(3>b%`iw3?O+@AsWSD;#t zK^DX2AjF-Z&|~zz1N^g)!zg7p3Dv>^zATj<178(l)F{O)JdZ-iqL+Ras`@2xjRE8e zigyR(wa?rIt_6V4(G$y@ff!Zzo22r#noRE_RN8R}Gxg_oLZ!#)yEp;{4b#V*qympn zyUft1VXOHCVY@C!TVl%|v8{fDppy{em<=D73i+R_VgBbpi+5wbRKeaO6c^K(?iqkh z!GANzHJXreu;EQ<1YBA!c7hqa+C*WQ{9TaWUB+BIMqm2~)rV_+KswHJTUX};(72h- zE6hVClY@HYhK<>HH#O%msPz@n!4PNr7Vu9=ZM5SNhJ&N#wJ(NkhcI)^pWAMTk5WI? zBRmQZ9gwcaj;+$yFG$z#1^-F2o4TEAHVa>^wHO9SmEvLE6I2K6-7)fw(;p0r2lhaI z3o;wD4DFvu8b%W|3>RcT&rmLN(rY^SXU)S@hClqx=q?&XQxs>0W)==|zXzhDiHChy zZjk5w&FbstwdUI1+brk9Fg6xxB(FK&J;|{rWOkjP{+(%2rWtKjW_vlc-}>u&x6hDTa{IDjWs=Z zzBSz~B_5#KM#e&Qy>i_L`0@y?GK*meyUusc>M99&^lr99fw_1TTs6vP8p3Xs`S<{= zFs6UA@s{REB@qsIGg~qGB;j-Y;zwjX9hdc5Nr+iX={SNz*EU^;pnmngzn7M2CVjXO z7QF_GFFV|*+=Mvzt5Dp-wsFVc0~RR$3{}rx+=pp`3=>HaZ`ODvPsq}Rd5sAv!pk+L za9w3~-X)DujWmch#6*yPe2|(w_YgrbAvGVfUtOcA{fJT848K5|o|kJSOt3M(zAK2J zgj;r|uT)K|cmpB7h*RIP^qpX>j5D}pz9q@|O$9GW)$6&)?gYzQh-(o~ka}OG`Z-mgfo6!fU?eW{kDTmhiJqUiA=fka0dRqIftz;qONlr zpwDX(jmQc1!{np>KsiHq?fsc#C2X{DEjO=SZ&p%biYwx4MiMu~I89dxpDpl7hN!^u zsMJ?+^&;VKOtp=c>lfQwu)>M$7R00l0f+scdpS0bT_bd`K%rL%;=)v)!0z6t6 zxS_SgFTUwuwhx;-P5bg_q}9R!I3`_qREXO#Vs@qpsrsnQ^=j1<8+c3QHNMQjN2}xX z<|Sno@?=T0x$Q2h+0}#|CWWNt-oqYcGKM86!&K(5j`| zpQS^TT&XF-`@AU?&qb-F1zmF6O`YKNaV&T z|4AxGcb^Yai2KYJbwxhuWtzUcM3I_)luB|#R30D94j~T{1rnE*DdM0FsePZP*wrpHVu!k$ru%_3~WS$B4w|6(c4(jovRZ< z^Xf{+>?*MWy^h9Ald~sLp(xhbX`H}HhtoogmU6X-Zabxmzx?)tk}i$*TPXQA-MZIz z{`>Fl8&z0-KDmtBK2H^f)t~+_oBOQ`NE*oDqUB2rO#Q$7-B)K1wd1bD6hY;#yUXxq zqubu|>!kuJpEEL_z7}j_Sw8C0}By_Y!oDYRLn87m2c_WPEWRH$yLeE^*}umHBvLa9g8x z0P=$CUBW%oKeM#B?qs}u=%e_GnqbkbA3-a*5ji0^?4PNknoqB!%V?RBaSM}Uk=){+ zv<0nGMit567hQ}WkGzbQe% zWy6Ce$S;4DL5SHnPMF5ADht?Cn-0+XHkt){X}REiLJb*>hg`}btPDRv?N%lk<-ViH5C5#K2%Y5A#Wev62#h)jlEX-QI%cey~}b3;nimi?hN< zqwt}4J9wd;$ex*g|9i}yq*<)EFPVsS)4OeqBh(Ive~z+DsH7!W%)LEr6Tsyd5xqAu zzWm-HOIP_5gp7|FCmqlY#Ra0w9slN*Azv>(iL79mf#Y*n+!39ae%Z|yJzwTCZ2a$0 z9h&&oGNbHk5oM1=m;d%RzQaA0O#d`>7IGedRJ*w>K)Rcvd^T@V!qg~D#-=wbjNtUJ zvG(qz)>$C#X_nM&5b2Ey=Q9UBR;!GXUw#}rNH&Z>F05olQ~qL}N)ED%S`DX-*|#1g zdrSECyJ_0&qEW_*1`}S%2WW8LV?6D|Pc=^w#J!<;++=>&jGpf|##_wxShwy_nmm7# zxp+6F<`Kwa%l611_rT|E&$rj|NjwE2hC2ln?WJ*eoMM<>yTU{(1Yc_7act zMVLjVKUj_~y_Muo_$3_2EdbQw4}|*JX=RPjB7dA_hpLl|BtZ3hzX&+M-2Y+nZkqGK zk0NLD(E7H;ewt_aM|J*CE!`sTdq0}I*SkeV$&IS>>)#@gyw|lwT;3mUOef_$p<{Y% zeQWF(Ca;V`A8i@yoB!>E$&dN6=D)sqJFSEDAB`?=b98-2m4C4k&YR2TCPj3i?yvipnm?MUF zUy!DC%9g@U+}~VPI4U@vjOFU@PrH1fR#%5fH~ccS)_FDG5s81leoa~cOF*>08)S~RE_3az-m=v0 z5kcnWa#nl80eo1PT~76gnN*gzpC>!3&Y2uAmKQq|I%+2DKqbbkmqigItL*m`_sj-| z_$X$CBxPA^6B>iwX$4{FQX_V*liDrJU-3Xl% zbet@KtR#5^GOWhdpdm?P}7i)U~!!@gB&WYIaaO+FY%B zBt8%q=o@iv@EMa?>I!U*e`r>;fBa=Vs^NynBI)9#&xm-#Uz^aYZjgQBqi(@)->CIO zP5%T`{81J`%oL63-f}YesJTUze%wy9PXekEp!T<@JY72KsYJysVwu5FVI}m;Dy)w+ z)iPlMyDF2BwKLcy)ahbO42A%rG4%nB4=+&V!K#(mN6Kw^wae1;eH>q?EOip zj~LyzPVQw@{!Gf*B92~c=|_lSGMC#xfJ(6nN7v@Hb#S%^z^T4p_r@vO}aRv zbBA|Yj+C8v6P$JQSXD?55;KA9&I2itFzoF)Xrs6j_@RmkPk<=$cS9xAsAX+Fovus| z)TsM2^`GrD=f}{ux1;R$R=TyjDCZETLv@7JycvH=8faGXTkvX%nnH1fL+IIi@q5Q9 zy~792SdJbk3%^VkZLRl6r0JowT3WswS96Hw>=fLqG8~Q?RdH8BEm>a<*WmET;V_k} z^UIxIKN$;i$LylDoK3;#sL8RJ@Q=B_ z{rp1{>6qV^){a-w_pnKxub59*bodEK_X!V?d;(hL zDr2ro9;$vW4*>e!0%YJ8pj;oqG&PrIj%qt?oIT1AS^4?+8Y){%Xxw6pi5eK#;`I}h zd3l;`QO_<~ius=8GYQRFyZKj9``3RKoudmj!$<4_9JLwdaBG#cy!>-hQJ#N`ofOGx zM!ry=*9xVWd|g@=3M&oVjy04_^wY+Sn)bkR4N)T8jnJ7tf=~NyvrqF^i?q+tLj}LL zPdMJ*v5I)jRrE7S3i*5-N@FK|LvRqiG1OkMN*+ZG{k4a!TH!0iSiYKiGOmx>$&2DriEeYUMS3BMOcl)`sG0_!XON zk}kQr;euF`MsvbApW5P4$x?Tm5nG`adw{3$bMU*%=Y5h8rb~sjdDu)C$343fWvw=$ zlJltwz3kIg*fz@l@gbF~g0EHH{&0)-3TJBCF-pg|_!9mku4T;Dc1n66O`SA8P#0xX z;n$5BJ-XFuh_?3yrhBujQRXY5h4ARArJH;4gO}-&CVz>Z6}~Ld3Q+yuCYxPsM(eTY zqj{yH-L-Q~DWYfb92yNjG_7gyKu;)M8jqEbRELn4_m6yJHuyGRYYEnawXC>qv(GY5 znu)|V4EN~|oM&36-{2c7@>>B-D8*YQ8Iwm^;Q0C1Dy09}NYE?t=kbk3dy_VK?3HU$ECA9I!u!L%k$;(eQ61VxTSNf8dq+Q~7X!6O- zEfk_lAa=7`FvEp$J(oqFV|U}+Y2N)|FNuEbP5pm8f1WNr7~0_-6!Hhk&83a=Ka@}V z!P>aFKk(0){3tj(t#@d7xs`m;eQor#7g~jh%Wn0oVA4)bc!D))UmCuB0+08^_wt+s zJWhMY_k|S6>*+HsQSI4e_UXZ!c1W?Pgx^<{6oTXnQ4-8Ial{Toe9^;?rif;vLro)~Ieq|lg)+}8W(~omEKgjRbie=M_LPMG{J`m~-H7o6) z(%|%CnH*P1o2WGqulZ`N%V=+!uc6HASar!A;ch0Ul;hhseBQA9-Wi>5BUPh+?N?;P ziQ8o97ppU;&31pAQyD28RN>iU-?Bma8F^;_Dt?`ZhQ(_XGKiV`*GqUD6V>0#d+EBx z!n1akW-{lr7?kKAXLZ;mdJ-Lm%Bl6L@mdV4&=>7rkIj;R^lJRY0h7FMlSDZu-Fe~6 zjUD&s+7O?lQ@6)W%^Ntn#hYGA61GcYnxYIF+gNcHc^uX6^QgL8f66XlZX;H4X0sY9 zjm_Ppc93dR$Kz%}+C$Y;GfQ7sFZOGKX6YoQnX%ob^YO4Cz_gFslA3Q?vpI_;?QqXJ z|F;-rH`%>lc_ zg@TbJ4A{K6no~Z?_2aC6Sn8dwgy_`!72~kwTU@%Qr8#w=sq#j$Ze)^Wv+yEH-0xrO zunE=s{UM!H3ub}DfX)MJr?dS0LtlcuRkCY*87wR7&yyh-NacC}6?Es?`pMb1K(5;sZXCg8jewld@% zt+Q*zv@Iz_W^2vWU&&NF?0;$0oUGG_%d|8_-%eRkn{UxuGx*%q5fhhXXuqU$HRg); z#zW@vaNH;M*8^K=AwoM~ND*r3Y3Q|D6BV+`$#=IUl!vaWY5hkMsHV%jEf?qBQ3YCGq~SAG{#hW}r}kSJkzxcO0@ zbtNCh(zX-Uv5d=-4i^NLy%J*t_XzEeA0C~iww#f^WNTOxw9LmtUmhe`EmfKhl$2I=L<*M0LcVSt6y2R`1 zau2}YL-18}Xrh;o&y(G_3z^?`_lJpfjg3h+JfQ7#9(~}xD(Pm3yOUB~niO-y<#c&? z!%t!!rH~*Pk3k^LhVYsW^!s;{n9JfnFS8+Jy-h!k4Auad@vcDDjc&6cY*Ev#_CC!9#{iNY!VCTT!MwW7 z$494s>s8vxjOaLZc1C@Tyu>m37x5DJ1@ocZGQ+u%G>#L?uf~bc=ruv<2hx)7K=W&Y z(yk^K&$*cW8M9JNv7X# zL9-!Lur~ev85^@9JYi#c-FKQiLg3x_E0oqnl{SZoj9MVVj*Wpf=PZ*s_u-i3d_5xK zhMB4pj0D;r@jVxxoc0wg{mFGrf;w7~l+4NIj#I}?3sIr^M5l~zc*)uUwHZWDd5v@@LHGz2!+9Uy9DoAeYKAHzw6gCt1+G z#V7fi-wv8^a{8LMR#(lNK2fz`(^L!Rj-c<|-nxzqpI}FgnXj*3X1JXfRn?8h^KWBG zGJ73vy-SB44cCw~tyTX*h-mHO8b8qig3a+?p&`35!xx$<`t`H%7eJp6pNt?l)xQXj z(Yea;{vzHJ9im^~hE`GqpJPKfe_++>RuKwb4U#OZcS4pV8NvkdKys3x{?C(oAuZ$e z`gCkge-9(+g4kBQ^9|QKe+1RNxB1*px2Dtzsr-wNCgTr}U|Q>?nqFsH!5nRN4X|S8 zajKKQHYY2&hpF`*LB8R9#OtW&ilIY9E#UAfd)Vk+jBkpE!&Lbla{iQ`bNY3SbTjq- zcwBc2qoP-}Wa9MM7J{618NG@Na@^=ph|AmDkOXa6yA#b)t-YSwR=)i_ZO2ekt5?nI z__U=)orp#ky{os?vzt+aTUCmd?PHLo3kw+Cq!a>6l1Qw6` zGSr|kaM#r1o(#LJ2q5 z!<9>0DdcR^w294ialGBqw9Z3Gax2|(ToBC^9-*un6*p6)eH1lX1Z3@B+$E_T+VoY| z;%8Kn(OVR4wK{WVTci|jch`)WNVl51An4PlP2!gpIaMf4;}#!#7yCw)YA}<-HH0NR zZFt9p=E(y-X&)@E+fcLQkRy!Ru`U!j(^~&$Nu*MUW!8)02y<G^~`R4IIgGyw-7>;=f`tJSGYE~u91+;(h29(OHuGUgn5F9R!&UBod1=tlGG7bqcr9COjWq4Egj6YZ+r@~ab zx6Ral*6RMnaCJcItxgmP>G!TJee{;UeYDZWbw&Z}+Hzwy|35L;o2_l!B-y+sYj2C) zGOF0}hUgrmW0OYfHV$u=T|AZ8a2*oNwCg(B^CZ-h*N4HGVH{Mu~3Z8tXjj zr(I*6M`f-~omc9EVOyVPY8l^auDRQ8V13fHq&_Sy7Ga#$*k`xVhUoZt%ubz^ql8BZ z(|mfZt%qN~_AgJl=XXfA<&#c?Am(U&Ca;N!j25zR$40fWP@h=8ym%L+*;zGjy}jjb z!l=hg+#+xi!Q%3$iHs$#8e%@3T>c&Q_(D~fMt{EpSK+jD?&}Y@*n?xS+{`T@0odwp z1)VPsn1^VdtSz-SPd>f2ly;QwTwA(?`8DXM1gl7MLvlMNU5@FEgo$<;{WSApuAWVf z+-~H0EeO3NBPPWlZzrqe2)laI7?h0=jTM&7>9D* z)A}4#tJ>jO=w{u7lo6gnVCr}#R)?*0-BH_HBV+5^u8A%3>Gr>cRYc@cnnUYdH-=!t-zPOys+vf{gbyb|D-SwK8l%3{gl6!wM4|VB3 ze16G$EQlwQ^42f*+5B0dlZ|stl7wIbBEWA4b7HYYt8LW%mV9=h)VW`3< z+5B?YxS{nMtmt2*kx0H3uGX!m69{h}R#rA`{IoSzQWlyIUoWqByY&ub(;wV}yq}wn zwGj1~x=)Jev9Y#q&f9s=%j<|&R+L0jQ}VIBs-wy6(OmaEtZP~ux$nd)9{Ah+T;gT8 z@AliseY4+Kek%9;VOnKOz_i zW9?moy+9L4mFan_RIvx&5v3>R5>(^!ES)sH-X-XtZKjCX{3KN7(`jp^f9n~S>EBM5 zrneS9;U684Tvy%(n+-(p=@TIt9VFYgO3&Xz4)wojy~MXFXk1WjGA@jY9(6r!CLB$~ zmGf&~>6_QgU*!`^Ojs8+$LNw1nu~qBbyeecX86|@q<@Cv>0K{k<=rfBCIr|x)Ot2q zC@D&8w0dK`3*AFQIGH$3tir+bCoFk_yT-hm#3V$7=O*EA8vc&M-$@{rnaQ!5{u}lg zcZvhn*O3oHr`;ose3FEE=Zj*3T<-TpWzB3o_^E~suWR9{hR9VTy)K2x-3EkxI82gF z?M1h@REQuX+rHMV=MGk;O&rx0*qXRB{5jRm9mY?a(Po$5a?vs#iR9w5vOc1HdVO(1 zSnQfH!-m~}aCbqP`(cRhfi64=%{0XW_a^@iskkmQ*5*D~1Mf63&4$k&qd_tUC0zsm zPtgCZ@OK?N@#~HP6fdO4|JN8-<~1;IK4Z*inEp#bYN5=O)npdwYah1sKP#+UBWt_6 z!xYoX!LrZ zzO*AUV$9$U!)GF9Ey6Gt?ywvG<1_~NfTQW%VRJScc9=QY$-`Daf6b$u%%wYwI~L3b z&PFLdFYV|5)oJKTzrH4yo~(pfC9$FLEA*mkgwKJgJ)*;e(O5eoNthKX`TWnVtKo{r z4~}KJhL0sCy4QyGQJL=|Cvr>Ncr`oi*9!|sZp9<51-~rKJ1jlhO!b3 zQ&)NgV)Uv#U!^KL954yi{*w$X(z?S7}w+w!HTbO$E(9}i_O;}n{$&K%bSvY0$p#ZQjKc+qdC5% znl?gIV3L+&yBE(!8)njyXgcy#vo>lb))&a@co~o2y5G%MP7~nAM@hQ|QFXDU4vcIs zaEJSw3*n+-KA9XpM6>Ns{^>IFTRjT|LV4e`lVbWc;e(J-(snzYpmGv&J;lnF1kI%|1qq6uWKy_=05S2X>bY152HQ(BL>T$=H7x0>|3VW>w^c+ODcKAaCu`6ZBH-0RGc z&lx@37}eYl6&mA;1@TKY)07-;wIfpTWaKWp`;!dxxy?T8!BdpOxM_82!tYh5GLvLp zDZJHj+M`GqE8Xfe)AzQUOR`bCNN%^J=Z0wXM38GNb$!`qSff)!*=E1H{h{Ti1rN#v zOD6afOsIjuB?bGT^>4?oB3>kXH7v`)QLiVD7`^CAPiBOd%w8vR)5Y=?mi+3+Mc*N9 z%3|v<_lQ36`c@q^+J0wM|Lo2fGcqhoQA>0;)J)7_Hbf9a4i8@ZCP~o0D-iVGBLoCX zd3n28Rjzy=Qva=TV{wMh#@<5eg4^uh7Q>3xNGq^?r(3A0jvGD*K1DI^_83@}__>wv z76{n}f7{{zIQX_f`s?7&)c=q3y>1En`+iExJ2FghO_-3(W>xw$Q#Kr{ zb;FMvy-0hO<}dc^!@*1rZx?qp#*vh1^nbX%^GS6L!Jl zRDVnj)4P5R2D!yxgK%&(4!h95T;d+1M~qGVuSQIGf~vXI*kn5)(f!!r zpm5(pMmjsBGDhyCO#Mf{>xwz_>8hA)XMDGbU+-~qz@cw3p*rm6=#zete3m47euVL7 z^UqDQQ0z0L&2vb*WR0l--LO)Vhm$5QSaF6O$x!(;Z``wImwKQ+xY~RO;Cl?I!-!YnxrE>V;LAV^+@#F&a~Xa?Xo6cG8#Xd*8C~}{{$H4bw@-NoY~nt z&(@lVncNkzTvWGY4f>46{Kfya`tzypedYFl`mg?WY5L_;XH9O{WIBd3nL;N#N*mEx z#7CC=)%?bC{qHj69q231cj2@C9|{}GjqXgj@x9JrQ*Jy4(F+xLWGkJ+S#Uy@S5zGkP{tTDct)Rw#aj^87kIk9R}({nE6UPWT^23?pPQlP%!+Lo5S1tn+8OOx=*@vDPho&4(JSDs%5 zes%M!hhM$?>f={Gyr2f9`m^e2kRuBpjSgzu^3n(3Sl%fP`p6HYr%xBev3xF{hi^Uw zvxc7C>?_q@&&%6F-W152-T53ASYM&(mg_X8T>n{DK1&djDdqrNEW$7-LOV_ZB-`I* zaz*%u^9|x>(V2%Qd#YlB8_2-GuKxns@)840 zI@H;R5jR7n-vdux-rdHKYmoEYOfwWx!CdW;>NTwEN$Yx6is_d(R<_uS1zbtlWxM!A znO;d<{|p6h@!(sa>Xf*U%V!Ej_F&87Guu_{h6Lm*^y1)rrbuq+_(BEeLq1y|0FK3C zpXq=OIE`~?pwO4^!06@rZ*TzS^WYikEDm*+>d(;wD%%MIaj3J?KobeZFt)&fNwFvE&q{dFD-gT`{O!_p&}WiQ1Cds}K}j0|qNI?n zwEPexZS=cVcIlqPr9cxtDX=i%lb!elh$S)=>gp!|4-^U?&*yYuj=p;hV9sg&!9dMj zVg_)SUSfJ+I7uAD42@EG={}t|n|a=BR(~J+`_z8{`!7)c0Q(2jKg|AN^;g(mvGeea zynUA+BMj98q(+_>)*VbN;F}`7Ebs5h`!#vL!nqd2`(4hf@#Eoq9uO+mkn6>@p&<-y z`Nho`;dDv_dXyWl5av96TfU#0f*Zg~Q;{!#q9D)l7O?;w7Ro!27^uK}*JgOdx?Z!c zm#yo2+I$79%js=IDqV!`rTc88?=sRX@1Qw<5n+@p4#3kxUF@NN>pf&}Jwa~tAU6`^ zW)E^RL3R+Nz!;`L0bI^*FY0bWi?=IUyd7&z1rz*Eh2KdD@1}$~&M`*;cT>OtFUJD} zxzB^#M|nM{c|AzpFRJ&89;!JqXbJxh_!P>tWP@P1e0ev0r0MfjeD7F+}#sNbVjc$1(-?!zJl zyg88XqUEVr8eqI#Fu9@5pv!M{Qw-vP7>`~c^oZy4PLn2Yeh840tkJKuqm z4pQUFn9BoJ2OrRGT{so7b#s8OyJ%+Sdh^|oFjvUsvN?#J!yGf1BckvetjjsbI+sJr zE|=?q!V5qNg1c~a{=y2bZCNC~`teaH)!)T8u1N~(0T}rEp|(B60@k@$=%NKJ*GtP8 z{}|K*73lAwW$tNQU7%#B1CWuN5CCZ?afbT2teFEkP_<;gHAn$M0 z`&)|Bhrkshz!f7a$a56fL(dL+c2UF*jo3lnf_io3d4b|~)3cYN^l6kn0_F)gpuhq0 zUZ7rBMsq{-zsKZo{NeC}0Z=St3yAY`1*D*IwB7?z!?YNd3Ru2D&-x3{+CUTncl0v< zAY*tUlX63*ymHYk`R>xvyTZ5Dg_*4LFJRm1&LNTESKuXPsopb;l&)pqk@u}D?^{Bg~4vS`aOOX~lyDBbyH7{=>lb#XJjd`HTPNUy_ zW5Tz_e^}YQKqA$%n+7sjs^%rez4iikl%>Y3mzd1|feXJh4|Qqm#0G{RWOB|gt-eAG z41{BANxVTQBpb>80wBv2M$m^c#CJe`5R{Eohb0D+8<3E0?8z26Z80ytUgRrIUrpkX zJf+D3!HjQi=4_UD3vveV;>QQHZke#iOENt@HdYVvpIqby7^F-z;dcW+%3$W@i~add zB7gc3%k(40=|@=+J~I7;lb+@u(CIx$Y!?BwdM%hoOax%$JMm+Bh|0xsvdGYGp;9m==SE~0)@@`S@7D9RrVGBwt+caPsd9PRR_2j)#y*DoAFDy6q6M`YcPB?;4 z1Wj;DIx;FCJVNMz&<(YMER?bo%3>#oM`kp?o-Wq`@4a1~uLyp5x{~jtkv9Y%tA8vn zff3);L-1}JqXQp^EmkZ6J`PJ9^ct|ughd*8T*NRfE;EG!arBLYrTVX6z^v?mj?Z@? zF^%FW0+4*>F@y`F+XpE)1|%Ym{@2Xd|GL;coP!rFr^7jlPU|Lcg18>xy3u1g3qzd+ z0%I%h)>hsP*`MBy9I-Lt5=aI=@251TOH?#Wl0lv;gPFnMjtHb!?55d3!-kO-hW2z> zv7&@~K>Wx&g=O(4Qnf)5T2|qsduhhqMAI}cGbAq%6zY}daa_*lp&jOj%JZ9m%>Z0J zF$8}=QcN&PYD|{ryN5FfEG_Nn0?ZB|!KUn>NF>u~Ou&y@0GeEeKbD@&3z`6+t5ZMp zruC47O7Vq!1tBk3QnHmwk#f5XS)FP4F)NO}4fTLt!QO#^K@7`K0p(5w7&8#DP~cXe zl=J<76NfB zIB0Mc04I=HmE6!Ed{iZGa+QHfrIN>W0A@=M^=Nq>JUGsv9yHZoDDqSl!;!g556Ra&|8WBCHKNoTR#SfSsOFyYIMr?LL!`63D>Dmd3sx>h=U3wRNVA~}dW z-#6S*DWBd0TqZ>78P2H(TI}=)tojw`j`F&tC?=q(uCAUd z^MmZ_?JX26P6LY7^JIrC$=F*M?u1cL$aZ#c8#X=I7(Gbb0Jdr%anpm@Hn?OU*&7$-0et~g z*MJuPfYZ_Qg)Shfp_Uu+og5AzjDi@Beb6bGNB3}7hFheIfc~GS?(&5nuz~N ztj7y|`Hmheu7Ty!N``d;FBIzn;71MgBszwrc>c0FeHk!BNOv=t{sJ$FFYvDqNkS#` zAlCwZhscXwC;+}Ai0*GJ_7m5zkx7Ts z%y~22c8{gsqgen6_ISH5C^-6hsqqaWMZW=5!RbjCin6K-F`$iaK!Gdw5wzUJW1;a4 z8xboep~YdB9-@?Daf>~HcR+S!TxB-$L66m>`A`&|Z6`djL!CG|mwdg*W{_y7z1d#0Eh zZ%Kf>xRhg3$}!3OXZZM4FQP5T>}QyR$!G>p&aW;S?nus-^P7_VrX;`bYQ4UDflW9R zO*AKo<|NVIX`;UyK;*x&=xUu8FGl-OXBXC}Pb&K(^z;~9>Zqm|^^3U5BK_L<(Z#X$ z0B=x@lal{Q$^YA$^S3cOj`OI*c~s*3K;!(t#i>i2y2SaGHs`l&l+zOBv_$!Ze(^6j z{0RwvLc;$+i}?pv%u^EQDT(uw4L}KDoSzKwNa#0NZ3~;|8AIkK{2h#jTmbEn zt$Yu8^%gO0!S|O;7X&rrw_WIuH!LWHuJYT@2`_~oT zFlzj20N48WgciZPDf~THn1mN>yrm?|TLoOHehuBoR3uI%%KkT96i`935SH9QlPjM- zPT>u$%z)`AFKs6n{pL$pqf-+6o}EU&fge@rS6;1@RCM>pv<4-LO`J8m3jP^>2r&D@kVXR>w6|G;1?BXUxGKPlHiO~a&0Ywl z&!0eYg+btSB@QbTqrrWIROQO^ zOw6K~T5}%4E!@j6c0rbhB5gDhW9;VpuW-cbXv85_THaHHUiW%fLYKB*kk1oAU&QV5 zp#uCBi$&_L=QMzbOLoeKavot7)95MrgW(!hX<@sJ3 z3-H*IVdo{XU?>EhmjFt_El%7x>ZLs>7FSSUuNS?GU)W49Lq`2P9~qdX3HdT@y=Mg0 z7lijnEW;LVQdT)hjLxW_CqfbD@q*)F-Z`x*Tv<^ z!Bp=8z6vJnJR*(8TQ~|%zlc6We(%vVng(t~!ZFI{^Cg@-ycFT=U3rCZ1<#?ZLlPDP zSWLh&14yv)3J#H#R|H9|yh2p;dpt+02wlny@)3066MN`|c< zz4t`eMI~^ViU!}?7@#i2a2H^sue^$k%skapm}mm!x`0`P8bXEUskpDxNwv2Bm#7l2%8|85rGHW>A!&x;gMJ=XvglbSek`c<$tQ!sRYX5*-rT+rx22 z_;nM>_=|;HFVX0^Viw5wo_xm;YGw>U07^qt>b^o!_Z5}8ul$g_DsNx;F=FnOpE4Ek za~W0m1}b8y8%c=?z?&89E{^j{iKFjx5_c1N-WJagdfpNAGDvz`EAQfpV6y%F{T+FD z66f+Ps^lx2xbmMC@mf289Z5D`E7aC zaCY7B>w#qi;^2s+m1KVhkgM}Vt2DY{%GAG~%@#<^zO+XN%>)mc2^jH24bYl`3JWkR zkntWOiV4aj8etQv_ADKQCFFkG+`%Eb&Q?#84-X{A6H^aJnq7kh9N=B#Q9cEzS478YUuLV|n` zzp=ve8;5a56q#0{?nP>;e>f*2=b#RrA)qwDEzLHhoimiZFfTjuR89eZJgkYF*@Wm& z!%O)t1W|-lm@2D%n$0Grbv9`yY|=fEO*qb02UvgzMC6_l3Oe2<*}~JM`g5crg1URq zPeVEA;f}%(O9Q(|qEP6D35ufjp$f5bs~5S^lNWDymxyMHc|c9MLN*6fbM|UQozobKOKNC>Jjh9dfet73u+NM!st>Q-Q_9f>{K?u|*ifa#%z)Pmoc!{b2Z}3&Jy`Jx4 zim{P}h!pDFJ>ywzpZCIrew!qUZE3hGPeN`aJ(f0maQG3j9KJpe zSb3OL(duWc(6Lm1m0lOI=XHL4lV5Mr$k>m#_eN-Ptn7_{D!U`)#=9-v?-MeAm!9um ziK;#IA7zvTu)i#F=}31raP&1MWj@d6CAw0B@2cbdUeRg87Nzg)fZ9QutX@y+&^(Uc z#yM#s=CPNE^IE!~h?}+pv^#)H84_Yk1xUSmBZc3Hnwaxt@-$XH4x~$C9Ga7BBBN^< zU?{X@kPfxs0&nM?{!!ZcFid(yjbCCB&=0%vWyOYpuXcwZB|Pq@!3kT4O6`j=kBwfwJPzqJ{Cq+a2fk6NMGr3ZsZtP>YL9*Q}%l9 zp5feJj@AVhww&w1O_b8ow@^2wNA-*9&jLN&4}V?o*8_hY@Ye@_dHCzTGOtR=f_@Rx z@VFFQB2U~8Gqg02g8HzMJi~4W>4}SQz$E==0r_RD0YUhFm^R$KZAH?381BZIJY3*| z2B)`YPz|Wuc%yg$?Fud#LI~4E#1)Mf`)KVc@2KFe63vNo<)!y2i}z8PKF|81q}kng z2Xop{-f=~~3?mwX-+`uTyn}dSX#kR51oS8TI*>(s5q`>|zN?P+^QHsU$%{kql}m3@ zVZje3*i?BcpYJTfl2iE;ZP+&xUo-J6*Xf5A=UWr2wD4Q~{a?wLjp)NrMZrhToR_h5|LC>LlEd z;oZ$F?sa4NqU4O5o;LiFd|$c#OU#$TvXQ7o>aY5DvXvrs0Sei$|Gq&IFhExwRAPCm zaxvty^hrvO{SUBt?o-HYF26ae$Y=GyP^D6|V|4XCMgyw{@V7KvDXrek=ydgN_;DLZ z5D%LQe-xlB$oePP(bUghhi9qr4bI4}0xTpOE(&1v08y5!2l7%xK`T|zYFGjm;?lQJ z+2tLd&iC>BSQ^H3-gnl&y|J|PT?wG=6?XEoSF3_kMcn}ZREoLUGdddc_l5Hh6lyx>S%(KI73E`nrf`9JY4-8Jc>A26Jb52Tm%Or8GnP znWKOu5Qf3)FauHN4q4vH4f%e?+H%aOpgjf6;+;N{7Y4xiFXqMnaU4JwCDf~ahA`np zAItaP@XX?%eN6I&Ziit>JM;n}u?S8y(RAN{{Oot2f4*N@`T;~Cvg!LoT>oGw-&crM zvWS{C2ES=DYDXr|ba_EUtQ5^f+WjLn9n7j1Fa~oY{e4W7qvU|(2(&&fks$7Q_^f&1 zDuLRV7xo6h$8iCDun!{drV#)$1xbqCys<6&+yE@7gV>=jc1ti23c#_Hfzkvj3ven* z-H?BPcRo)dxTXEXlr8ON4Xe|?q33^)>g^}l`bvgh{roCXKm5p}xv6BCP*5h4Hb2P# zDbrCz&7v$FAZcs>bO^-6_hD@Q44St{%3$C`RT=`(nUe2!4dZq{D$M{|87K~ry4&h8 zdQP!;i9q$QlHBDv%KSO3?^Jn-4(QaM(v@gR1tv>V$~aod34@S@oFd9>N>`aFJaUBc ze5m8K`67^hOOW$9lI|7?j1^QrZz}HS#1n71?%^!Th)XLQ`G`e9cZo4dk%igL8)Rvf z|EBtINZ@LOo{Ld%>YpdGj$*e>a_%CEMPDTdl~=GS%efFh8|d7}Nb7~$!-bz6K*_+n zUIL&c5Wu>H9$X*@WETm4zAB9jt|HR6b6h|0@}RNatZf!bw2PB@bNzodt#G}gZRJ=RZ^!yl~kHoOHbIz^90S7C%8Bo zN>6+W`Mf%}AFQz&QbA_wh|uRfyy*)m`K zsseBqd_cbPP08yl?tmjUIZNn{z2~?LcwS=UjTHOp*QoUhEUBj^Uww(yUc1OCl>O?< z1cX)g5o{%SgJ_%c zy``n!ZY(dCsHVj3pW__xI5K3w%LIpuis^_|D3u;2#UFOS@IhAlTn}#cN*K2Fo7&cI zQfHl&K6+C->rDzgi@N&DSMv`C={m5i4BIySsn^2SIc{Q1@ZQ;Q)-e&88IDv$CKD^ zb##@NH{s(l%y9s}XalQUQQP)uyXh&B)t^(l{Zg9ithU=(3j8H$Nuq#XvFABH#$P0g z9M71eViJ@8+wuh)%Q*!9`c21QeKu>6^Es-+IVt+5T8E!f9nN7-(Lrj2AW`-!ivEto zI;YXkQS^7H#oxFjUy#$yTqKYeP-JPGS-tUmp0QH5=1r{r(!1RQnJi223HiR;Wir6a zK8<>?1(Mr+P$VtaCsC;1Lja-wbK+zMxu5)c;Iz+1B;8H*^gCw`3d*x;ehxJvz}v;% zE>g)i*}Q-|S@X4nLpv%#Jqpg*<(zrv>~zi!8tETE^&G6nIr|{@zA*Q0D7Tx-?G8hF zNsjsf9zlK@7?9#nCp9ntiV`4-_kK&f;Cr41_5t;Zk$VRcA4A@$6o9`fZvj*z^XD9Q za(VS_qSxN;&wGbJtYw6AI`YqLWiR#|ZogE3 z#lw>>LXFm+5n0SL_5|oNwCVURRP;q^!FR9Y>#NYqJAs>FhviYJ0m*#&P%yWz_5CV$I;Uf!Iu0{!Jm1=Y8gHMtW-+N!{y~I z;DnzRy}3KznM3mi{XPDH^d3}~uYaFU@)Zj?I=q7FHpLt-b42hky|-K`SO{TfX9TfWj=i2fxFwA%^QT|c6FpwUP-wY1uu_4rEvEc=3^i73)2hMl9+l-m? zPzx1N^S=`h5zO}q(S%2NSaSJyIjEfd9G4Py`>0cs|guJh2h@G#)z>*5<+TgbXL#82P-J;!npD=x%ai1V7kf{!_f(MtFUylOlAa+GH>co7 zA8{PVDGb8;*L4i)X5aG5G%+*+B#{WmDIYpuf%hLr|jA@mi=a?(nJhw}?m!Ye#}AG2)Q@^kR(5q(T>7JLVVQ|jkF4x_sM zEy$+4{A_vo>GJYQdHKom@{8r=27LhOh%SE*@Qui%G3Z5?@rwoDLE%L`bi{G#8&=pD z&B_Y3#LMO7zvgdxn#|681Dax3w`no-Wx;3m4L`+kFXP!H2hQG8b;8ndT27)tVmvn0 zfsaldK)~{K;-Wj$$!Fj@3uqY&XtQhb16+2&D;x_hgeCvB$VDKXAq&a36qoOYcFmR^ z-$94ZAKw9hG9AYU2krvF3!b@Q(|Jk0*k4-y@la=Fs8dexV6#Ach|+igN$k%4d^g%C zg8CtyfcwJBU+)>Vrx)p{qKsFb}Rk&`K>i?L@;vs)L9s_PX0LMT+W1L~JGRE!Mmd&E!qJc|*3eGaD zbh^R@+`jFBhA+xPrKgY-c4a`j29Y*@j3Q;Tk&1XxuH<}z7}(H3q%9vKb5Ez6Kb-&o;qtZ0M^ zM38a|LAkLKbL7s&J`>8l-7D^PE-uH#<+!+P~5&T$8T6TjFG!wBdoP z^1bb}VVLSZtTOY_tPG&v(FzKDnOAcc*j z0pr>RP1@<0=bqZg8KuXbyMiZ3d?=^1GMco}>MVMdUzDm%SOn@*FqkQ#Z{)|>r`+2R{^B(YP3jEr&Jf|vTvZb+IhfchK z-9%=jyIqhjB;ky=W5zFeg}kJNyyQ*dm%PX?dy!w($S-@5U;b3SuOP;%vaW{B&>3a? zikI;#n(-@wK7gTb^{u!n0LWVoDBD-PY+u!EUuB~JZ0YVF`Au2$Nn|X~#{OnSM~9e0 zNJNqF>8}M5pG=SVdJys1^oVCZ?jrW5M|;DIR!EQbJsF|J^eAsKa(F5>Mb7f%k${31 z@S&9Ty0DOB;4* z6LBVr_ZM&#+Bpb5A>#W?U`QMlq6B;E-_~Syn#=E^! z%h|!)hAt;tM?YzOeWN$;AjL33w{^h-o_f9&e?>WjDnC7w`YSnwN@oLoKcCY@b?RO` z^H3&hM3n(LKs4_T%;e<&Wk8z0up6Ic8Z-l9ynznv$bQ+%>*Ttq%k?w*Z4^59&2cUm zc3>Ov!jyCu^dtcJ@Q}C!#wy5@eff?;Z2X*6#}5baFb;?33Vyfz7$ssAK36j+XJ-cG z>(ify6@a%36KJ&8Enh*9)b<31@H^0VqPPz&k^Ia&d`am}vMPGsk;2>|3 zelQ5cAyl(V<%zs?I+(!`sd-uR$eHfQmMM2c4#m8jfI&2UmtK!ehSgVSf-Sw?VuG#e zin97DXLTl?)i*h-Gp(|EO%uGv3EpUx;B`&#`loP7P1}A<#UiU``tzOG@Ne+WBW)kN zp*!_w8M&S<@`t?{|FAc?o^Q6Qrw;Pfvpx9^EDtxt38OBZjn0VGpL3>XTV<-t&+0EZ zr=P}hI(J{bSl~T2pCu$O)fxa=d+KTOzb^hW;y)w)v*JG+R^y!lksY$P`j6t^68a?? zHlB<4x<-6mBfjn;zV1alqY=+|49886~ljd)fgo^=t=Ld32-34^JB-=*jK^!$J~ zdIn7&b@91DgNIdeU2<5Dg75$x*~-QgkJHxR(g&5&@}4qH+T{)w%kVA~Mk(~tpjt-l zzH?n9Q{c3HMNZKtTOI@)806Rk{$?nJT)=~6`2w2_sh~Yx;X%8+%`0p z-Au5v1iMn|wgX_C+m?@EDHh>bbQr9DV)5Pc66=pBk(ze(r-gt1(s_y5zsEPQi&=K1dyHa+*M^_AfVFJMd@!a_Fkktq=Ue;*RXU>OedE9T|LJ?K*M>>viWT!~d@^ zSHs_4_|Go9%;*Yp0RC==|5upLz#rbE#;zJ&d+_<-{})X5AOB;=qfkNzmetXTk1l-V z@ln7>A3nPA(Swg(eDvd^h>s2U7{EsfA9v#8CVZ6fF^G=~@UameAH&Cm__zokoAB{* zd|Zr=3O9)&JuEYwv4d+&b?3<~{CmAGzccNz00yaNU>lCRr!enqT|n*s;E2 zIhHJWWjnc3F5<^qEn_aZOL8qKRqmEtOR{h=Dg#z(6*eFP^1;5!sNFgT1yBIFb+ubh*saAkRN~gg@rO5-HRBs1G7dMB z-0zk>=HP}Z=RN}AoRsWusB&6aqvR7ewqxo9pM`_M{u`N#PKgwL*9l-QO24a`)G5K~ z|Cfnj?({F?v?nO^u+YH_2!B5zCmH<`Ix^TV6p&h|-ve!C_O~F1-iosV1!*}h+Ht01 z;~rq@B1vQ@wre{9aR-Z13Ba21EQ=oLOORXT9YHx~AmyT9fbrj(mf&$Vp=EW#j2h^~ zvQxk|<~3nX5oB1AR6T{xETLbq(?Te$JShbs+7JwHXG{2w0lXX{%-@qePQfLZt=WsQ z{{zA%Bs0Y2j4=-{$*>6nZi+LMB@nMNh;dj1>!b#(FY6e$J5Oad?dT@NcxsFTXENAY zRzi-&82XSA=@?LNU4b%IBobG|&5%xLlIm4~LPZMXpQXxO5eJ3oV%rtKqYHzsn zT@b?19Tas+^)U&fHz-BDQ*e`30B|*m%lO=yrs(aWlIb5U)&9C)nh8EC*TCWz; z!kVeA(IQ$@i)p{r{&?Ps?&U+1bVWN}6+HLr2;bP` zUJMRoJo*TsuR>fy_xp8!5Jg}+3z0t!M#_^I zk-r9(*O8f$$lvc`m_x`CTX^%F<3XZ)ieIeZ1>y7E=)^`ezX6RT7{}h}ksqD8j2Dr~ zCt%Fer#l~^aS2*LHIFrJ{uABbg-`4SkAD}9y=dHr2KF+?_oFe1#%?tBq45A3C2Z>d1C0-Q zuA7gu;) zCt6%jd!mOuc0(p(>i%BL31I}BLTR5jWCfwI?Fx3Had}N1o`sREA0fg#Ct=#1*u0M3 zjcx2<>}nrC=NX5~7_~n9%(C&<=<}xXX*4j=qnPNiE{ACAPRu=Kuc8)XGY+{Aqa8#2 z9$Skx%Z;GR&$``<=Nv!Fz_0@tYqxCr$95xWpBuysIac`ZI%LR#ymv58z00v9PQ(&s z@z@j6jUS$)``M`ScRu+>C7%!Y)pyqD#1XoA!J)x)A$Eu3T0lN;JA&YsuR*`_DimX0 za>BZ{cN`lw3i+1Vv7L8p7aZHAfM0!`g{_2|3RjxHz=|B351|q9zW9^^9LF(teyt3P zdYDh3kwF9N#Qa95*&?lx>82|smF|vbP*=yN)i|R{&^?dUPQWydA98em$wch2I9>e6 z*Pm}?_^GY*CDM5YNjXoB1$HdZ$9*(a3kpq>R{ngU5fuC-Qz*LDpf4FtL__$2X6$?T zkptpbn0_>R&n=8JkjbemxlZAc2E1u^Twgq@5)e2@i-cdCa{IOSvK zX?C6_C$vp;!ox>+%02@TmVGeoLI!cX>^crpIDEi-058o1C)gO1YHp4wcrVnP^aEQj zhyygT8`A#>u#1}zD{hh!@HykB3(HM|z`e{{MK9s9f(6+z5ffz_ClRO1=r>9m&_HUC z6Oz$L9?sK?2Ic9+Xg^)^i58tOmtIB@@L@s>dg>hG6^`+Wit&ny@fyc?O~!zyPIuJI zJsXc52_h&>3BS}jLZ2$l^r0lN-LX69>nfO^b5%G)jtlI#K)CYz`9p-apwRW`{)o^` zIRTg7L8BCk%Q=pC4ys^uJ;h#6^jDewDglb)ToXnQ`r_)Zz_LaX`NZtp2O;UkuUJ2b zdOYcqk2cDQC6uSzScco&2Dp_RP`f@L=+*T;OZZUgwIuagv_{ApL90bps|QaJ<9Q6c z>;o;7xs&t-*}JSJym2*JK>WYxe#7EWCf_elBO`MNORumg3A!ZceCrT@=547Qxx|J; zY`DY|4)Fvw{@65Y`y^fFFn2OempQ;w?*ZBNOAox$3X!?-8AR*^lTOlM9h#1nOlbD> z#1lNC3#?GY()*C~KID2IlHR?13kofX=$hus3>|Wr98q>e$?*<5-XX_(?0AnHVRnS+ zyO5hHFO8c?({FOd-XzEC?0B6VFR|k#)Vo22#btAr>1RL;@Sr!-$v`1zQ0enN#hHJ57CtYz>58AU~kt*OVJ$ zGhryZjdHOmKeBDSscuJ%ZFFw1flkX3axKb4X%(tyqn6Ii*lElmMe#cD#<>r|3Q`WQ z^!os>n1@BCW7D}Yf=xmn%ZBOm#MBLD>f@MCdXqCLToV#WfAusj*jQ>TyPktJT5KkdVBLVa|BIt*ptjewt!cQkxl zNuK0J_auY@38rP+!7=4sjI2`(7P!zy82o@d>$<~sIOH%>{fm!+Wby<{GM*} zd)g5q?8qF}TapbsK|)TDP-~EoCxugODV%bm8!d5KT|p0rr<@pZ$JW&ny33*aTj+id zm(y)>oOa>_TH>_2dOgMUJXLa86WGZNdRn6NP=(jIGQ;>Jd*VL+$b0Uj8pA@$LMWep zGnW8*ptReG$k!D zsf69Kw9l#Gtocl@(-RR7`f35u3n&mdArRL^9L}(#kZotbQ%PebQW>eK_Pq28o{mRS-d?2*R?{>J{fiTm$*OI5yFikbmKKSB^*jIL3GhbPdW@JOHf&Ql|@$; zzq0fwi%(g)m8B~vEj$fSL%wT0;aX3**3$$>%=tjzq`Bv?`!{$RfKuX@?9da1aDs?_ z1Vc>@q6dVWp6P~=lQRZ(Bm_}Zq9BDf`g~r8NjmIiM<3yoeh?Gg-0ee$D@g`_IUK>u zrF61{sJp^1ZK;5|Bnl~(oV@%3K|Eu4`^wD@63`C5qEeUGP&Q!(fhcT?%_#7@FBABk zg6jRU7pnIb57GS;27M6i*SNXmk~TfUp$Uo;p1>O{@p_4)4=9%*K`&?gh(6Fb(TkT)e2nUk z7#@2t?Ai%gQuGmwB;FYbbuR$?IZh82DvyacWNLZ@u}F3Bq4Cp4z>23O!eZl8v;mb> z!7#2RPqZ>3C&ESsCHf-UbXb)IgOtxk5GtM?ZOp-(iPoohZQ@*nP~n-&ClS%j0dTm* zKqg{BdYxV9FP$go78vD-uwNtyj?)nkvzJrD?4MpkaPxh%9>xea3qMX59FSnbkqm+Q zB^B1Y1Q?GRWfFKhOinNpNFL>m82FDX#`6+k;bj+YL7k=!(e-8Oq%|~c7aq~*wYu<* zv&L)j2wu=l_Mb)KAxZvupNIa7zBq$@#~N>_0KfDGc*~9W?~$$?e}N8_(y#DdRT<%3 zC+c5D;`rr#V{I7W;<^e)Yy!S zu#+R)LeO=19c{SPqmMoM91n&;W4xM<9=EUuvg(yUjWB3^g$v>>e!NRQ^cEvF6N+e> z)1#P-n5zKGqRQ`P#`l6O2qwf`tBL4+U2zkyXr$%yjH!o(Pgj^;5xN$?F&V)xy*@;> zNF*p6&m`_1P8bP`4Bw^DE&7|FbwEBg(Pj>jc{7KsOx)=b(MtVN1FxlNZsT4IgMym` zrGlCvI$NP%iRgk|wCcfP!Tk&@H6tJ?jRwmRjtahZKLY0>eli}d*dctyGoDcJr@@>?$ga)^?FV{<>D zvFi)MP#!JxFLH!VUTT)0hQD>9M}}L5v(ZBL3;Lo4KL+cK3KxTc4M_>R24b;>!#JUD ze2S1zu_gf+-UM0ylz_TERTQWypW!ziAtJwuvt;Nv;|pRzsyp=w{E7Vu{0ot*am5oiX-d+VhR(pmsRP=e zZujAhItZXcsFV!^%s~JMtehsk4|_A#c!##UW^m6yNYp<9FkuW#c4>$CPkoKhT}&7RmEr&h`%OE5@gCaZi|e=(*oT$? z;TR#-Ar4NBLndT{SLO)IhHStfwhTK&Y$G6moZxagZh%|JjljaqZT#O8m^}@dS(+0= zk^xJ$8^f{rLIki*Z3&wueoZ;&qf66h;G@0MShEd*f?niv~{M0c#zOSeF!OrH&M$1ox*V$VVw5#5ai+ovW<01pSg3Ludq{K&l_&b`5XE84Ip<$?ZF6qZPhixGr7{!}_JNQen0 z^~G!CwaD_@Hk|vQCwfI&y@;z&M+sc(l^)(^iyLy2Elw@wV}vq7%N0bqlO3^XIvp|J zj@Ia6MLbW6=#L4l?F@o>lS@+P5Af1@DE6-cO3V+;taXYkEf9oM#GOr5REQ0LTL1$5kR9i?v%m>w-hdr^jBHySIO}SJ3b-D z`|Nn19GBQ}$zgQPWpvJv#PtD1TknK>)eZM5k5qV^f=8zx%QByPmhM4=%v0sG2RKMpQ1dftIfP%mxs>Qp=#>|~mYcmb)P zCJWZJRu6@sYx#Fwl9UKmQln>S)49x=a&ex;6H z>*Q{8tCxv;B8^2U1@rmbbF4U}JO#-$79%=2o=5F;MfjZ+DhgUycU;j?T6S|JbO&ii217zd z==B!WVbeqhsCb6m$`1iF%oyc{MgWUvC?>rc+ek0R)>>T(NQHwSHOhKnH?WB4VPN8r zxJ{KXQ-n!eGQ$Kz#nG{n;B~z0ib64PM1$X=>o>{VS~t5uDXcTypo%EsH(~FLJNpO` zBumbv2@j1vFV?*@=)!c0g)lToK>f#=fzAwC{7l*}f=U=iXp5kFr_dag)>e7eJLy3E zVs=~uur@&H$7#2YNb>ar=-A+w5`=jT6XMt5Kid`%sDybV1do#HW=U!s=3;N7&UmS@ zHmcEQI2r8_x%o@3A#K#Ja9vR>@v6B6uTq_~pXZ9nRH$aAERu*W-@F*OASRv`zltB= zKIRU7BxrgGZL)EcW=4p-gwI(7^Tf@OGuVLuWh1V)@TE;3&7qrH(MD0W#zxgnP#<;K zG))CQ{A})_X}?Yj$4_|?LHDx48iJ;_h`bS@*)Q36dCHR{B!p_xk?3&4FM7f+l1>&`8H<#kQmjPt<`OoFlLQi1GAYj`;Bzt{D^HWJ zb!?ub-n4}8*)$0#AuW>Yf@!%@05xQ(EMO3vmp)_CVFSz)0?0#8P8;UY=5sucp$9^F zfUL*rGCi6#HmS2bX-F$6S<-Nmm@cx#b&KNxqaH5X8KD6j3YluXvP8l{SHKy(#Z5pU zJX+$(Jd)@cLu%6uC|#N!&Chu?KSwH_3!@_ER55Y+&M9rpQOQZP35feVw9c#WP4>~kIW`&>U(VZLJdD-YVBsIG8-004m4uQHLc;Ezx z8X+V~C9@cp>Rx20flh;+h6`Eoeo)>wgF$fH5}&Tr7uux0prmGbFVNM{veUaD<>fG8 z`I5&Q{8PSSRO3fC6EE`PubCL&N0=3HF-TxfbfZo%p(!Ohm+Df#rL20ulF%eNRy;$J zG>ML(I@U#8#~N`uoda5;rOva|)KOOMS})?b)_mX9!$O-L7Fsekzkwe~&dMcMzDuP1 zOAP0}Xv$Y_T)qoZUkh&eE^zrSIOV&*<-5S;i!5Nm3mq38>-|N9%1qFk3TI-x7?c$5 zR^3x@&JHzUKRG+p=rSVSOOi|i?ohjGOKb9_HeFm&x}aQLlDT3kA8A>X^X5e^)ypog zcZe6O?H!8$4!w(vHu>mC^Cfcd0jB0Ta(u#$Pw1v;dSwF-^&0ls7Eu@5L|t?m9d6Bj zMBUOws#p?t21W)to<;-yRUV884uc0{Jcg|Ew$&oN);NI*=dC53Ln9tkNT^qXUdIWq z<7qcy*tPnYhrtg&KYI8f{kr+lJQqS?AT9)k3K%Ip0UbEXDO4}AGemhK=uD058daw#6G zY~;a^LxG%o9Vfhwr`?EQj_Bt{4?hgo-%tWITw2hzhLpF5rQfyoxYmGc?d4Qt(jk7B z{0Q))mzu~T?juueo_k&;blRJd(~5e^OFczh35LBj`3+@Ht&CKMXd%9nfcZJx_yHeo5L&%Vt#wP?8J##(0=J0@MD-a6&Jjmo4BQs&(xda+;;@V+&0J;3;;UidAbddJ5Y8l(iw6Ki zYv5k!Di4HL*Wr047TYtC&?JzeP(qA~BYxV~FJV18 zp1?QQIHuAG)cNnT0N#5fn=R3Dgr{T=ah-#5+RFpqIB+$bkz1C@W_1g6Rf(fs~FD8VIjB8KX+n z;3H4-FY{xO)*FUA_Y2c2Iv&WVIpE8IUZGXd{A)U%Zy@U{x?*&k4&q0jz!O(}-I3`0 zWjcBsqQY6^8Qc7#GfjTNaIEYbr?Bv(8`I}6b4|ZYlj&~e7Mtfy)cH@kpeLlN*}TFX z+?9Y@hUqvbWAscqVx_uPTrLKkxf^z@5*b0KH!w%e#cKI+)i0SvO^!3^5b&hU{cbvrfaD#I zv(T4(1Hyox4nMPNK)|RsfS-E|;D;Vy;-?*GE(8qqO$WKpka>a3a}XuEo~*B;`NVo) z=0oCIG$LqNJp+8!or0Z&0F=huyJ$8plNlxR9Wvh|GmN1dH&dK9$$Xv6myjj1I*UTz zN1@*)!W-z_2@Fj6Y|LWdSmQ&O0L2=pmYW1wC(&$fBJJ|Y3PZgrXKs#- zUyl!{*W&~3>v1eGP`BnYh$X3^xsA-Dl%b!K2p1_Yc(q<^qbvy;i>nw*~^aF(?c>?JbKk%@YOH6Yc2k0|;@LrP#Mi|NQTPiezs$RYG& z95P{wLUwAG^RsS{vqWa|$5b0$BRka$81vD5ip;0Ue4fnH)bLJY&FZEm9U?O2V4hm* zJe4sF14?^3MR^6QwuUNoE)>N|kO>T^e#g)RUPCFwt#~8nUVYu8)$H`HN_pF%yggkn zR?2%PtCfQ_4Z`UZt}&^JMsAmVuwE(GDiig=`)if*;CO!0p32@~?Vin*iuv!@hwn)w zQkew)Wk%^S#;!zSIFVut`wyjt(wSsBi6M!c3Y7*6HV_HZVZNR1UnvZIN7K0TBi zOOB2W4W(0~`AoKuAI*YXqp7q#F_y?B@)PM%J3CUyB?=>{v3zzSl^af{^XXhRXD3E; z36L&1HkwZ+Mw4S>L;2(waL(n2M}TX3B$KhTIYB@^k1oSiJB#*)cQYABZ<0)C*H{0M0J0BAbf zuIasYtzP?F(Kl4lMNo9UUC~<)m$OsF{Ebv~K35nm45cv>1slXlP9#$!qZ7mFVLP80 zPUR=Y@~NTB*jN&zw1!$XBcHb0UtfLez~3t3Q}JpyGklup>AsTAlTnM{mLB!@EDTr!g#%Ovxe zF^G{I8p;=vh0H`gmrYD$b5IeWlyeyy%717qol7K#^4T2NMhe+M+0>XlmPu#R!)Xc+F?ML;i-Wti?cH9@PT2=5)yM95#IDw$ zbGqm8%-|4oTjpBFYiqGKUCJKb1B{tMDO+&%tSae7nja5?|2!Vi9s6yjT&7+WbkKhfM&E^MmR z>}uVKo)Th{Chopg^i9=j_VA8!y|Vdm-6n^_VMvILn)v25Ig|@KE05cID_bh%x?Of9 zNP-C8*2LzO7_`LPUad^Q=(U7TMhK`UiB5d>+K1|j*VYP&qoP4U+@p!nYsK1~t=8<_ zm0JCgY-!eZVndquYT~YI#l|O!y}ej2)+X(OS9v3vNUbLR)@(iN#DgAfOcR+^N!=>3 ztlFzdalBrI_CTdRJ27Eb9Ujogw`pSIHB+xv@^-DZC0nf)vj^;l?D}lA?3NeQ+`Ba~ zvZ_2hTrTD-1-qrvtVRL&+%gFqTB^x6H8H%ZWFO4^(9V0R*wA%|yrnWV)lxr)S69=v zW$TYl7VCCxI-B=oc;q_7=7MwMLYd#CiJ@!7-I=ZDCtGVv5{mjkP29iwsE-!wlY6V# zVhJP|x2Ln!Y`x;voK#|U*&u$cX!*W!34>j;Q#rf3 zE4#~$4h8rfO>Do8=+I#l>&3_I9pwpV`E|F`OpRPOuU+*MvxF49At<>$pQc=>YYnm)dsf3+^8#%MO26A7v zTqxNX-Hp1+E`dgX_TE1|y!zpT+jMK|OpmNSKI^|N{^;uBt08l9r2^9^w+qiCR#$tR z_%L~Jd*V!rW_?>%BR$p|T(wTyg}sNT+xz8AdUZX6k^_cPdv9^dGmJwiZr8-7>t*oZ z#6->0LuFQ39u6BjU!2Oil_@i}x(>>TUx8(dn~S03^%VywHJx%}r>`&Zwn1hHR5+}O zs^N-;F{86ppVmXt?E zK11ZO;m;Cz^m<$4u1dW{<;ld@%Kc|s`b%cm*qX1S+B}p!*f!h6>FILoF%@~!Y#mmj zQ`058?uog);#54<_mF#Ax!@6d`Hr_^WNy3ODfMz4Z;Q_NRvxq6u{)huzJ)A}HV(0{ z+xPbP=@sVVEgU>890$&pnO~>kez*>+hkDVj4Q|fX?BUF|GOqn_X;f}q1VTfxHL-vB z`1fZY&yMG-#pycIYEqtUwR{#P60Ro?Ww>(LYL|*rD0;0Wl}?k~Yo*dM!^E0d)x^~G zGTCa=WZy0wUP0)}Y`v4*(3lTvqE5S0ymxOso-Gv%S={osCbKmwXWM0Ks`9v9u<8}7 zSg%=?gJlcWosYqCeb5@WZELb#pT6tPI}aW_I9PUN&sV1I{2|C+W45^CHC3tFR>7{r z%C9ykL`D;LwrBQ%VtHn8+o8H$#(h1=BDKC6w}Jhs&f7OjB0+6>97aFZD#l7{Vz6VZ z`)Pc0sA{seR(+ zk~h&#&8lN;&z_pMGwZY(S`z=;Hq^UX-Yyri<$6smXqGMc`+2g^QAtTn+_7?`cKs}` zRuu!p+g6^PvS|l`2G-X;j?MZ(NVbqod`sK-^?+ZiTS(j1ksyN&4G zyu4;4P{XEj-mZZXsEjhBE2&#X+B5-u$+%sbP|K2(CN``XW3vstfUTkotyu9@BIRsg zbGB43!VKV={O;4lmR0Z@FBS9lvV4|X=d?1~UbIVvm1MbJ6Wdn7Lgj5GR@ath&#YZN zyb_B}%k2&<#`D?oN^Ck!VOrT-i$kX^h@~7>qm_~-4lH?TZdZ#i=>CZ6>mUs0Szv^H zXf>OMC3US*g2C(?vY&#*{MKR~LuRXodAp;!Kh>cpTV~6wtw(Zf4-{*i`a@`Jdo=OD z-pOLksvn-V-8n(Qp03(?=$;Bzv24{RZEG{mB5KoizBp0Lb7riEYd|letPrYJht6q` zThM3X`0#A8;Nf?RM!=eQZXvv>RH__QC4oMcSkC9U@NzzL+HyXjWz(4pbo2>;Y&+`q zln^&VX-HWDJIa$bjvxgw_a_kbC}p(DlV>YiE?5V_7wy+E1*@q!*z5tjK3J(9xKjqH zE$J&agVAY5hBFu_Etp8->&!|HsvfLhSm!OZR0VR1V6P?~#9cSuZ>ZT*xzge7`0}&9 zlvC$$v~h}AcA3uobI{F;57`rT)rR3oH3e&0*4d@3vC=FF4^{l}V!;~^)L66Y6ne*! z;CG=PD!(?kJga-Gf!nQnz6E8*9w6+Wfv{&~>)mPNPHJu3&Q|l2+e_I4wN_d8RzUTI z;>2N+VTwaTx~yVq08~M&2^h+)Wx52aC{Qh`RS=07LGyKr2|5ZX1@MOjfVaUsq=}ta z5q8=2^bj{sT&_aV=5VcX*g9A&m7v~1_PE|bdxRCqQ`Ehskzdf??>KFVMublhkKb|i%f06u2k8b_f=kDEI|Mro-+0CPW^e-p> z#ncbpzi_g$`<`EYSo-ykj{WJGli$1P!4E^#2iLz9ezvssZzsR7@6T`jcfB9}?`Z7N z*Z;|dKimC{uf1Izdu0CK{?YcwkJtXoH~;fJ|EBS)+CRE;^WS~xr=shh{b=96Ld;(A z(~H0POQG%DjVF|T3ct0Xpji7q1H$_k5v_j@jc*+v_|l)eb;tL+S-+(Zx}BgDBFd734h$cg_D3OW-08tsEF}lCnOzz0r~T{{S@6B4^fOwkGwulxNiCD zk-tvyvFv^ef0*Y2{5}E(k*^7H<`{IXo7Xt`=p=JMrj4PZ!mS71Fi6+sPo=N7{SH`_>Ir?`Hc@|cH$8+E`9*! zHt`VHc8CYXE^zMvb354a?-yPF>+hIPP<-(rA3ae!_ewsfBfU+^t(5X31R8}9fF%MS zWbiHg>!(2^@tC7j1z1WBjYXQl%g;R=U;}Pqp%;n7wB7BApdGW zzhC0#4MP65LHZUUC|Z!ZC8i0ta+YMNf_sv%{wBo+iDu~nIF9@1;B-WcR}saocwR?h%hNSk2VvcgNWTGHDfz9Z{}1yW<_v&>(ow&144wX8shl36O7np01AQ~n;5 zX%=Pvl&;FxozE1N6Jwwjpe`Y9qqlrJl}`$KlJ+?5rQ|Imw?1qlta?VuL=@6?Xf|&= z{(b)U5AiQZ^8<0u-?to}|NVXZ{a;W^0|XQR000O8C2!J7e{F)Fhr0j(CrJtb9RL6T zY-wUIZe?^dH7`zOcXV%Vb8lvJE=qH6ZZ3FjZ0x;lliaqkDE#?6Rrf!zln<6utI>-c zo#e#Pz3Y`^ua7P1Xm{gN$97#~IhY;B9CE@Jtv0FL-~ON*013X$fE&i`p=co8x@-m;=`d z?z{cqF8)fwoN5C74Q1fQiI>8^*_wJE;AJmf;U8=P8bIUc_}+`lwh_L1%)jih%pWwC z`8z+0lZO{~X+}4TukSMY(=VTEuKGL*vVeraKPb>DqPJcUr5TC*0`9L;Nn=Q$L>mUrWyCI@M1X~BuGVs|*(T#Vzri@b(?;2;owIRCTyL27r;nKTi zJS1igsdpP>Yc_x%Ckbc-g!|2_OYe)tAH3Tn$TAvE1TVK^ALKYKB(`!-1FiN_{ekub&C8c_EZ`~7r42aQK%;i19?Y3Og{au5dnh=X`J?{lPd6 zDTz*6B=-o3Vp|Maxu9ugnUP|O8^%#hS1)_1G5507yo{@pN7fVflWWIOC60IP^Dg|O zy?Z1}?%GB4W5&^!#lNv7A&l@v9&CR-l`~$z3w+*XlM?4Eb)e>+;kz2>=g~ILfMJ8QMGjB;@&ydTh!ivB z1n`-NDeTaNKeGMru<*$(zF7;OkbMD^TXF}=`i4d{;d|4uq9=T%Q||BpV?7ifLm_IZB~T?XDPi(ngjIjt=am zQ}+uM>L@z^e*?^5ye{W?ufZiiia#T4LK zzz7prE|~)Y0_wbP^K8V3Ko96n^DKsRfskhOZNzc38%iWSOwZnY)BG)FnTrsIy1rgN^=}KrLlt+AXbeIo!LE2fI57ouuCOEM+ z!x)@cLDqSceeui)u5cuqsH#pdI;O77q3X&yuC69V7MuS0m!{b2`Ina2N||61wlajO zE9-jOIF_&ADJm$SMrg1rXXL4jI7jK z$G2);P>N~%Wx{PBGbu4)0U09omN}5ZTT)rPPGC{q_1*r|O89XhOWqT`@`b&aX(s8n zV21h2E0Tx085^&IB+Wda^=6A_+6*T=;UK>b1D`D(M^kZ!N8ORPB2XYh{NLcM;wTr% zO&RB4sekh=kwpm!@7*(uhpf{ujBnq>(L01ipiX&E6N^QSJRX1p3dx=&de?LX6(oQ~ zV6qaCofx!J+Hi&m?rgerAsZx!4|MZE`17EIM1z4sjY1+9*7~ro2t&&AFCpa>mTU3Q zxO+id_rgQ1Nw8c&OFhi3!pUyI9*{-!9aq%Cm~o9Fa(ss84Dmdi7U!UQo%=Je8?z`j zv#T{p#^73v=tuR1Y3ulG?o%NO7OBVFUvNw=X zEkln00+QHN>}L&djS=X_Ace}7zm}{dKPtNg3CHf5!l$~mo`V<-N0C)}m&Hm7_BK+$ zw}Um$NF@GvsBoYzQ@sQ$u?Zq9TaX<~ux>#Vf%qg61x#5jL0zmfW3vt6w_%LXUYgl# ze$smh`aMtv5OlZ6Ov~0!2N=%&J*HIa%9DemrEY(d19`Y@$dSI|<|pB2HpuSWOXptB#Jz0r z=47spIN%=W>EPQ-i%=$Sc{L_VWfSQ-&I;6HNCk{TD?W``%SEqV`d)q{e;%Ta=pO4`zx5HFs;osyO`GjoIH#3 zy_Z4iCjp}YL`|f&w= z*woqABe$=wqAbYn{*&JQfUgWUu93%w@?Jxc%59wd)*XbYO*)Cc*tKwHdp`-=+evC z#lE(4sI#u~x2`+$B)jSAk|gJrBzd03jguQ==^m}8QNXb07jL~kK7aBQuFIrwxV0gf z_mD1b7O?gQ&z?N_^69hx_`?_f^8hgMxt)78_aLKK$3=D*(sbwzo4C-7 z4dbOaj?&?#a;~=&H^BCF6ctXrJb1bROg0>^uaWwP<5h6cSa=;W-6(iH%R{Eldudq} zp+0}zG9CxbV&oFledu$WqfcRT)Jl4{HF8^{@wP@g-Lmh<2Xf&j!8RM&J0o5>HTYui zoV-!B=#W-;Y7xEl;E9KSc=qgzr+@nLi_eWYYCFYu2YQ?W|0ERnE)H;d{5bS@acyUz z&>?BIN;2`{Z5QH3>oOy3)4S$yr3} zik-6lB$RbK?VXxF4mEv0-0cAj>JB32e-N?L%3?Ej!{+spe#~ItJS54hkDxA6G_^R_ zwEZ8e%XPN(ld!EdqC2DNjOt8`YK=3UH9c}`%I`mU73CY#8FMgZ-E;=*aRAEry#zZ? z)LPca7q`b|x`UG)ftbJj!PEGB$^ouH!shLjN=$=4L-rZPw*SWDP!R zn+7|zRVL|XF4ISsZHUGzKhC3!>5T++=AhH|9oP=|*!%&0(F}n(v50Dxx9u4E0ZDaU#Kmi4|kg4J!%BfVW7_0x{KV2hJiOw&ju~{ zxoWojs@Afg5X}0qZIp34m``B`(?)r>jd9zUnQUX)T|&2)Ip(d*U)hhtT3NJhW5lS< zlnSwhDHB|uE}kvESbS+Nt#u~{*H`Q8>L+1W8)SDz^*D^`{mzT%$Ft7T9(mO8zc=BV zcsV?M@xOog-b%8{&gfJf=*7z-YD3@0arP>t8>Y10u#tx5*<)-|Fh#{w5EzU>jBk*N!BVnffZ6B`jXa46y0rDNO9j&0kvZQHhOJ3F>*+qP{xJCk$% znW?#$+pb1ccU5<<=UeYu-&7Quft)Pv{iHAeiFuWsz(+GHMdx zU++2|xZnL{$8gZmlqgh#HeG;Qw4+gnEzqHl$6+52gWUzWTtI`yZarTPZx4C={#E^1 zrxfg>=c#W^^eYQqr}Iro6M8>lpA+RQ&wf(HyeH{~+ywsA(Rdvu(a1pDNeTJRSPnF% zRdD|b)X`t#`kEG$qcqZ^s{-S)vx|P!DO4Ohlk>?zct+AdL*F^aw)J{X{AkiIA~PMZ zOakpHx2FnRlCWBt;(TlySsh(@!-BGR{~fNeP6PXpNK!`!dil>sUj1=$cGAPbg;eg> zZy&U92#6rw%Ut*ERb3CGL9$UP_-#@TbM6MN(0mH0w-Zs?#O3~RHJ?O>$K&Psegyw> ze~i3yqu-?R58+J$MlM~;ih-C+(`cBFZ=|BXRPN_#l#l2Au$S-qmCVom-}`J_Om%0D z#BKs{G5BNIK(01?X(sd_hA3ON972MYzXCn4J0uZMZ_^b zfEdbikRyn2AM#l#0~gs2mX(Ld^(BE+6TfpP$?)uTbK)r4vdCw$of=gOZZ97>$|Xb4 znCmz2;ukz}b&xVbTc$lQ$%V$1@BpkI&xEr~qt*m3l385%;I_-&3wv45-S8{J=D0cS z50ctslQ0C`ej@sghm@m=lu75>I|`T58bbE4Lj%eyytWA7pxQ)e2wPW}TAEp2p8xB# zcFlpk2-r;W`{>}3%E{|6^8FekoS;Jcf~xTyr09@{MgmfJ*lLg#Bun8RVMs>YF=ryb*2%Xk^N{e#mdqIK&*PiW4U zkXhFmUGajfUhca^a9ym^h*|qO^)K&)H@?-=-Xe?Ce_xC*k1;R{-_-m4y>|hi(aCez zFRyxdU8R#-X3#W!Bk6~rpT)41ge9|Wtk9SkHgWD|@v|R&UfiFDEJeOsoaCgiYEi4j6?Li{KeWUwT~?UUJpPzx z8f2-6nNL!XsHt!dbM5IPzgU_4Q$D{+3M1g$&EEh)ITId0w^zZvIa=TwY?O-xH(4K) zK=mh4D#S*508}-YlDlqU@XC$}Yx`_`dWh0Tg>#=?ykDF}-yy-{uUtErR5z4{X;{h7 z>@o1u-BmH$4IN55t+|F}V%0LOF1P|O2^fGZB4kssvOROb?uTHN(c=KLV4$7L%olDxGg211dq3(%0`R%63(bX5Efi{bL3` zVxpjGQaKsAsuVF(;5L!H>Uy85<>O*U+r7_jc42%U+6Cy>2B&}eczcj6^A(UQR{002 zfh&G)gS3?aw42~rOVL{qYjY_oMZ6l^h@;Wf*apc`2tpiN5`(YievdJCg1$bHsUF1~ zT_Q4GZ~FtX)9=XyNK2b}XnvVj`T6a#5r*BzJ+?afd3QE!AgU@(HljDvvK{7tfz{?L zY9#A_(*C+P`#FP1s@P<00Cn+}YTF$sQl(x7eI;JA28ZM98bQV>k_%r#v&W@cuNL5< z@DO=SKpfQu*=tyzV?62@(UQa-A?}Wzy~V(IQZZYRda7EG?)9HZMX{B3ACUVr`mgk2>&VX(Jr{eY6V z!<}nE2%8$M?QVc0AQT$DP^_wr&8LRgVnDl2y6Y`hm}NbkK*npR^p6Mr4==(&8Y2n# z{=t4Q5IG>#=MM`i{WOlBZ4d;j=e@wfw5kkIv@7CHM1WZup=CP3Nd}D8R>Vkx=axZfNn=CZ za4Ye3``EYIg?zm z^D3}N(WqCa7GIh5rM5O(JRG}vN(7@wCO4V( zJjSN%x4u((S0U;U`T^VT9~xD>iWK-eVm+ejal%$?6^u$_IRdp4qV>0c+Lv1<-PpB z@S%%671>J5W&b`%t?l>xZ?!s<6p0IV(JuEl2Q>7wnP^MC^y@LD4Pg}rU|B5-)+_U- z%I#31;6e{iCrjJ%>yoDSrQvqlvPuOTd~+tZ^S_`{Of_bshO`8==4YPt6y-mOZ&s{o z&xs}ORC02o9gf9D97F!lSSe{XHOSI(3QZ%IJ)zYt&VPBOLJE)3hwZ=JP&-AjVexPI zKZQtgYbK%d?T)3aPm@d)K_^iZYPvNS-8uhIdzm}twv8<1evXj@u0cubadWusX*3}1a02vdiJQ|9pIe8q+B+6+8Rf>H$mgiUl8!Ppzm}RLBUiS~~L)C_W$4MSu3(ehA^pT1v!>WI$TJ+M| z=JbAW$?Yzp9s;%O@(}Be%%%y)l`3B&C^wl=Qsxag^JE!av#;tmeus8p!-@_N{E)vpib!lv1Ab_3pM>PZF_l)88j2YOQ;| z$nxp$N_Ocwq6nfHzFJE}gpQlTK76maJN=TPhzhr?mV6MLN2@DIOUZ8_Uo;p}ORy}N zsZ(+qz+v?H5-i$>wQk7}D|>5W+Y?f0QIy^!g3|GyUkim`kMb7qmCi6@$j%h%ZQ`oQ zT$d$Rp-`^V#IX>Q%LJutrcN#?dFKuP*YkG6_%DXBCW7PI?^xrqd&ehd2>aj5pd?lA ztcc0R3<)_f3!-~D*h|3j0XH&53~>ilxXNCdQhjb(?+*fCXwBnX?64ZRdiH+R%0i&Z zOs{kkH0e&74)O%_c}5DlNz?$UYPZ6b#2-({I~;+MsX>yqoHsl#mM~y`W1= z&lr>A6K*s}vLWyq1sc(e(SjO6L~ssolXe_S(Mc=iXWW*FY7DrCGW)I!>PCeK_ccZ$ zhOMhqi5;Aok^*wOCK8t$v^IzE_ntk2>a-|VXr=X4-BLFACJONAaMoLHB~6DJlEerglo_#z!fK#+ z>4_7pFoEIj9mpCv%hOi$qB|p8Vg|u=S46!c0f}|WCC5W!MWFmbMB?Ga)7NN}wtNP0 z2a{AZwbxh-H6x|L{KSq9H_Z!6W0vPHsU*u^T*)8hB?Qx6P)|JghoJ__atqy1J4PY~ z`o+tf_Gl`sQ*Mb|m08jqoGU&fY8^%A@&=k^0?ozTI6w<+A zm)wDYkV3eX-wCVYjQ4De!5?S$sDA;2M!)V;7@|Ix;S7M`BdWSTy&dO{cV0+ik^D27 zn7(yfJn&N(vL{m(==Z94EJrcpqH!rFVwlg*B(Om;9^hR7m2W6F zpW@+p*LKSuMaH(oPZU`q zVTy(739yz+6@HFoe>n9K|Xvdq9ZcI+k=5_75R8`8LN|VdR@(1Okt}{ zc9<2HxscFHL|mK-c~V%9vg4jMj1F?Pz6#PMcMBWFRIBA_C2dV!7+(}RN>w#1z**sW zN!K*?ifXKIz2pXVQZ(~ZbKOOfQ2Lh+8kD+piu}8DQ~XteP1IWcsC2Yl*<_WVl(KD1 z+<6_j?Odq%nK@*d)vw9z9`Ja}hw0g{B3DhoQ(kJ1BDWs|ysZ6CCnI1DkRt|3x}2N@BoHSo$83!xxF z<&cYn_%aT$MTCGZva~xnwJm zxf(u9rx{AEwO&7}sw9?Q87oRS8l6U*3QqNd!OkXGgYjNHRuR26?tqCyAR{E7ebh;J zlv0EM=&qElf%fS|`;v_F8581+eP>|Cq zz0?16L+%bqQF>&5wa)67Yd-FAk8%(EBFm^L+Pe%-S6eq)UVH5evVe^hZXGiYuwP!hZM8}#`;a3g z4n?15K77qWp4nzDvhOZxcn!VWvWgVwr-YcI`Uhu>faR#|hOF-61Wv9!$zM}|&^rMn zpk~|3j6{(dHf$9e&?w@f6Xcy}IpCC6unY)}BXD zSA|TpD;tP%!phfbHqY}H*616-8mKN`E_xu*+uCu_Z>COb7x>5w+Gy$y#NL*8GZ3az z%1}=w*T?;QhTV2s9sGbb0%yX*V8~pvuH=Yz;Xe1mTMo}R6Z1B0)8zco6u?RP?Unj> zUdFidV$0S~eSODF!QSb!^VL3hV_Qqs_{++u*}Q-IFAIMpKkdyizYV7a@ zwnk=eM(k9#OuSCnKpWeq^ESVx`NdyNxX&dt=id{BEfYM58-}$M^gmJ^GO2w*1P8_7 zH**K=l5|V2Ix!Bs)M-`x40uHYk?v zs&2pP5B8NCZ%CTCGm$WxdT$VLN*^H{N7fD@9e+;*9p9I^W`=~@BayqeEOI-K=H~;W zAn)r<-6G;c0)2jN5C@pUvfC%GAVpP@iemrTi0sO;myURFtY_(u-d*x2xI$$DXcEe-$N| zcySdDcf1B<6LnBHnTp2Q`POPhRndevCwL#<0Wu>3TRH#&a?&gWU9&rGxF8B=3O-^` zE&^JC&Ny0B<+O**KC_Zo_`yK3S@I4eT>rDXdTdUI%yQ=5Q$gx!+QxD;o(p>BFmGcK zETanfajSnqfH&)bV$4V_)D^yy8Y^fwLe-2xt|Wu&pVx{u#GLcDhf&|Nwh?%D*(Sz! zdxGIhgc=d&mKYUHS(38@g zQO#~njc_bC)JB62{r$eE1NN9_Xya)hEazQg1eh+foU=h%#5nkR5BXMm6y)%Mk(G%2LhZ-LEh(vsGRJLdpA5@j*jRR&{V zwb$Qy{(lrJY%Oic;mvf!%_6d-Sko+OrTpiABCYL1*XNi?*n$d_4^$8}lz#LUyK;zWGJhHq)q#XEu9=UCPRE)}>El&8J*+S~I zIYQv*%k2rh(|JnX^>6o)xlV(wsjjYQ-zC|bY{|S9d3RK|R?DR!#E~k0%oPW6S&z)+ zO{ql0IPJ-m0g~l+2JqJGOf4jS7rQd6B1(TWU*U_004F5DA6jV|;5W(iMRqxVLGzk* zxUj3lLdO7>JK3ZxoFu?>`X%GaTx3Luqf~+nOB$-I&U8^PU)X|`zJnT^5^CjBv3k`* zc9)o*w-+9n-(*?z1|6X*9`6Sa@U0-7mS|B5>+1AKP<4y$W;RpGCw(@(M9kV1u>UQrux_i!N37pCSvA=6l12=Z()Ye+yIV1; zfe*IqMb1E6p&uw*TpYb?0(HqRsHk?j2kudH5DX=!I!>b#9xmKbVfI8zYa!TOQTN3$*?%i2N0`8M6IIh5z0V2pkX0_HpB8!wrMU!6)*R z1EP?{<3{PD7v`8$AWEhutY@ZKt3GA*-tQa!t;1Y4d4_@U&gFCt11#$wy;>}s>H!uBpnYC{ zYRc9N<3-C>9&>i}^=A7$1&dCfHxAC@RpRi9?}}Z<>DA%NM>U^l)H?FAwsEKY6X0B= z&iiJJibWylNZfZFznB%q1R0vAM5%N{90?0tV3}*D^`RxNjMTed?FuiVl5vR8Fi(A0 zVZ@jwTV91{I}AV)&XIldvx)RCUkCAY|-GXew^-w4Ne*T(L8XaY4TSBPn7#AZ$3 zcXZ7)mdtqqr1A%&<5G&D?4CCb?qPJucSzNrAWc)z^ zr+>S>M{cnxF?3*)N?$OIhxedz=&NncJKT5bD1^tl>w%UaSC_ktunDfHZ5({mOniGNdN^ZYDAjzT@hp0tS*o(# zZkRNmrqvDH63y-){Dz#GCd;fvbTBG_PU1r=lF!da6NDxyaTGv9Sb**}L8(`*4AjtN zPb48jJEY-G1++=G&?e*$!RQUm{-T#fEO*z$;N8t^%8=l_s^B~^zoLCM#6b~bNPY8a zEI(G^KRXMORA-shBcZ-E&`CPOINu`PC*8`rtq66%Tj+F{9+r=Flr z>5%Z3xNuidIX-Xa7n?y2Yh5+$PK_$X^i78BUX)|z zey(L`VwWtR`Xc-iJS%Y*U1UJ*h(+*c38G{Nr;5G|>JUfapwB!=8%8O_O%@^f*u|4S z4UavZi5_<+*>CmgK~o>kA`qxb4pLn)h&$5aS2IA^qQu+1xVr=cS$9y8o7x1nD-`QIxnAq{#+ zp{6x^bLu-8dj-5a-5jI9B&q`9i0&ZS)euM+RPVY(G(x5sFKte7tuQ8v(jUn*=>Vzd zE6)a1P+fv}iPC4dPO#%m2Dh-T2r+OJJ5QD{MTM%i<5%^ z0%DXG4&KXew6aVNm?rp&0Cj#rwxDHu5$!GEnj2kbG5X<;%dXIebcXQ=(f|)sXUw&i z#LBe2;(dOH&j3$C`w&EzDDQv02LZna0?EPC+_FWw;R^ofydvGr>jb?-QkILl`#R#+ zHnyqBov=nF!anhVD6#BpNw%IRrpI%`c1BK%TZRV-#KY z7!(x1{s60&bzcASb=TPR)H=TSIJ$FIE%+M}SzfTL>}puB`?VhG9vdBS&Qoz$pzG^C z*GDz_l1R7BrNYx~`AW7=^-+Y--mtClD&}A+?!JdN{rz>YuGx}i5G*(jD5XWf5At|; zf%k)78*QwcN7gFH+-qtn3=cX&XiKEz`f@zF*C?-U40F+>W-p{Pm&C2OUy-#0@(}~c zS@e6N2V)ya?5v*JM~bpaf%#gP7_Uv3)^6~<%etfl0Pt!A%}gOYF{F611jO`Nf6jbc zLY8SV8F4C?3Axw=&w;ck7wTByz&X@;%<)mW=>AwcOJ`ht7_o2o8cPR<_tW3e(Gx|| z5hBIgrLb*~vb@Pz=yvr)PCQ$$wA7ms8wTx3l_DE^#-~A|#-d>H{_Hf`i<}!Pe#~Vj zg;Nny4RSs@&S$$xeSi6wT)@YIWNO=V^x}`Sg>-~+&z#XIa+075CL)y|Bn#vw%ca|y zB=v$w`&{Bnoqo%B`{##=_IP+K+jCQTEURpnKV!^;@}`FkTyOJKLLUXboV;z1YQlCY z*{0#hcYmX|=}Nm@J)(Hzthr#2-Gl#T-8uotV%7TYA?`|fXtHzQ$yMx3e~VZh=6FMw z^8BvK`g-@F>{Al6>9nJ6vctNoX}e<)n*0u@rlci0^^f8>OYQMi7&=a^5*JUlCXA(> zOHt)!`M?^vTQjIE2uSaAgnD5X!K6Ly)0cS3tuMwC=ZRq>C19V4Phs37pdTtALk@Di zgnd!|-5RlcO;OD-itso5Q{te(2DGm;y1t>*PaZ&NS`+dwxwYQNdJ=ntBh1YFV*k}z zrT|-$v}OLNQJG$bKMP>lowtV=UCTxBAK zT>A?G^v0Vbt}k|$12MRwL^BB7egY!9r^Y8kfvDS{@Sc99pPo?x0xuC46wH~YQ<%qgb9tF-VC)>3-W)o7+wUF&MN;fI0LXQKeK^yVFvbt6Z;`ped z@BzhiR|r=m5nHgxu-ItHvoH!aWpNI8!nSU$<{l6xc?V#jJuJE4L?6WiA5joH>EKHR zocIpA`Hl|9T2*e(1;==lVOZyYOA58OS0_v_d>LZOlC)xb;Z39V)qWNQu_oox+{E*6FB> zx_7idJjkTKlc0vmWl*5lBo}4AXydpb!ZD9-UKt&Dn*Y;qbO*sLf9qe5`|1PPCf;rT z2w98N3fX+JZ@56F52fu$g2w#*mdBOW>0q-H^z}B}#&v$233&Hv<1){S9F&AHWzW-n zzAt_|YDb-a6b{W~7qc@0hgOsF?dwyo1&D=lxf}ZF8cATiE>f7fJr#jJCC2ZF4@nY1 z@QAX^btTW;vnA-GYVOp6`4}(AwdQ`1+V(A_P4xTjwVBhzLzGk{=IzLSn6Fv4CG57W zw({_87YD^49NMnVt_q7K;pF`uN1x_?KF0m*Yr(0N_%lO5Qa6)|JaNhLh@`{zJG;6? zkPAo)2PujU=};*jsQ@dS<>$Cm}5#lm-QQ@N}XK&mnKj_2c3I zrf=y-nQA7QFgZOw)|H7h?eVsu37fV31{-WFW#SXur%94cn{Yt&7mMNVeOb5{mB{qC znKyRB8+$8}JB~*gR>hd2iJ|B+KvJ)X?`CrX$F_^w>m36Qk|zx56XZxd1VX8lYGbod zUECOv&NEH|@F%2|l6{NJhSveEody%~RiqHR2n@t@RCjh{jWO*X{DJn!0jn8OZsV*5 zo#ExbiN3uKFL0SjWccR$dL>~8Qdg%^N_|-X5gws`$MP5d{YRGQ7-Bv^ubY>@B4BeP z)+46w77&anV%6}f!3>aBeiMijfPR8|pU*AZzUd!Wi`BH88HUv-H1s#YK#1lEY+3-i zPOHnQ(~A1$V+KGp zSvUCA&7d4gG-Jp^uUTXbvF>{7KhhJ;fz!ocz?+oj`({XO1KhnZjzu(C>MlsY@WS8t$ zQx4~;vK@X*Opo!A=EvK!K~V|}O3GCXV?TtBFH4x6wfy6r4fzIur4J$>yWuBKSag*Z zuoJ&d+3>FTAUq!%+RM-(HTXxF0XK9R>S^sQui~;QU94*_tQ>Y)N-u2=(T z(4mnIrAR4CulHnv)DVzWeTJx*#dUb|*eoXcS-C2)LSjBvO++3{i@BPa!RbYHV%h#J zN_O2-j>f-eLGKSc#`3C>C^)(+Vm_j48$@pKHi1aDNQbF*a&hM-+VLu&I-p`?^&uF+ znv1LcxIZV0CO5j?!`j-|z^wF^1S-zDw+^nvjP&rNS6O)Sie8QxH!AEDWo-osDZNJX zXCQ;90z2})tIYVYn( zQ_;|=Skn+~DxeLBF*`qY&xz+@Qw@N&CQxb_R~r(fsDTdCj@l;Apx?u+Tx{efeF;&% z-kmNNP(nBP^^9x0OmZZ}g53kE0hAzV>EH8@(wvd$f(jMjvq~?GbbkQ|`N2`wM7%J~ z)n(2nO*6FWzP?;pspdUyi=ay;k*sAss0GW~Y(~DbxeiNn@5RdSH|ANx0OVM& zb&;~FAC$Bt*46fCOzeU3#Zcpa9W4{k#vNSaL2s- zAospfe``2+2;ZGZo%7L4d>jkLp#r%ZD)ZQp0yz_Uz@;|=Zi5zukFiQ^q4JkDo}|Eh z^fD$ar_BN?<^C4?2Oi*4BE$w6s#W(O^NcRl2=uRJ8MZjgIeYuySx%{BIOAl)Qdy^^ zFVMTB2s#$y?1%<*mLa1-H$=7`p5ZAE#^6Zj7^BdB27AuB)V}XLN>Mf zkY||Vyw0Z4ki6DDJ}`RuZdDr28Iy|Iphvbwtf>--^`U##8Plde*^d=<~GvKW=ajgt`Q{KED>HW8grdQ**xnB?IXufNi6t+vW-Na z-*N0mD!5HO8&@KhOQ{+RY+$%st{5wO#z}EI~q49-Fnm z6q4Q!-k}RJQ*ZGR*x}h9)Ik@w)|Xku(6t%vs?}!{%$IOWDB~Djk<46^z~18Yq2Tz~OLD3ESV!qv|ME z4$vp4Afz{fz+j8Ufl zA1H)jz2BXJwFK>cq2nU>k?_H>38}pHDy%O=ZiEChG(D6P4Uv7obm<2chHAGq}puRh(U2}^c^Hr!3+yqQ+hWlhzu0lgbm4l3Sr z!e((NNHx(yZp|EDK}_H#i+H63@?Wq6_6v5ve!&jNmpI6Oz>W@A0hLhIW123FNv&{n zPCR}@{3~hIBB-kiAYW*=8P;EREmzNd-iwf5ro*Ma0QWyk$MToyoCkfD!2dEG5q$~7 zy}vI$^T5AI2ka&b>lf)X`Qy_3Z=@sni*%fSkq+Q5(t)Zg1ahBP`f~9Xw{&~(VSdn2 zoEopOSRd9dU)dycCRySKQ@JJtw-yVV7HjC9#=czTmv&eNu_U+}P&kQvvh`Za%`KC^ zKw*E^!3h&$Vtr@ilj8A{$xqLf@yV%Gy~?A(c4=a!z4mVI&g2ba>_*^9&oqvKQ(=%y zRKOKBs=nFec^NlnXo%|B#DlxX4`JcQ9umX143o}V#i5b`$63MpWA#Yv;G2A{63RiU z~CmI zEIAWb)x5YvRD83S3=*_b>#NHvq#2deWklk53v7zKRGsHL6JPaZe4<{y@!B>AqF`mF z;Z$(`i;p^nxV4hbLRScpEx<@_mLum)qt+XcL7gzy|2wz|cZ!PABBri9H(O|v8zH5Z z&MVA6Ve>Qo2hK<+fj))@-vEbX;(Ij{Kn4+-6zEE4&u2;=?0 zr;ubQ-DX%Y?f`PW8VVZ*kjD=&q%j@uzNc9}IGLMzGbiu)De> zVNzV@B=hmJVfNwSV9r(q&T=p)Esm4==jDvlnlsfaGc@E&DX( z@vcF=_sH^gQh~vKWmh&~;vio~f`3jG$lOE+#+TX{Nf<+O!pn*7pz-ngSW*ev0bdZ# zRhkmDL$;SDCwHk+U z6O+h=kX%q1puiDv&+W6T8Pb?K5Hb&KD!aZ9vD|AMl-Ub%_FVVS_Aq?C-Lo8DPFCpx zIpo2V<+gKvZ@CdYSvMiG(eO~TGdhN?#@+A@m}bzP{b-IX|21@(@wA_6`<))L#1+KA z+0oSaI!NdpZK2XQ%B`ufT>jF14l{>EW}hVkTK0tTIfq-SNgW@8tb9&>tkH|_hl%Fk z>mpr?OkQ^XcybcOC*$uN=(sQvsM030QObW0#oA2)LCbEYvd{wi1l|W(hOF=rNa@xj zOOz>A=wO+*n%XCxlvsHqm2cRun%={BV242ELW4&fov$Qp=9L9T?XB03%L$P)P+V26Ms ztCuwtqYriun^AU^*WELkg;6!LXFN8x1fmL;X160U*Fg&N-yd3zsPu8@)~}N`1$sYX z1+8TbN}?cBI?Upq32tN!cp-6sz>w9>Y1=?wwR_O#NU$DQVhyQb>`5XelR3oZ)9=^F z;@xCi!-pU%la;@QzWC1^t~Fu*P`eG3jtdZ(ylnnRtM^z?BdgEKusr~ZtZGhGtl?L# zA4kr;*S}(u!&2!zkO{~o;*s0;G$%G+*Z;HAMw-gbr8nXFQPO5|=LU>yNw##1eJrnm zQ6u!GP71B|C^4D55`MvKPiuw?0}en)k_uU6p|DaeZys&t!&CdQc_d>1GC7%i(to!# z-#5~R0_WQ|To}6q=j^h-{&lwgws)-b>b>~ysn^pe%wz29bFO+&IJ#xpE&unU$t^Y> z)Zj`p8at%t&z|G_+f3J_rgUPdt1*kz>4>Q>TT;RrtoA6k+C)MtNiG30`S%&swV zlJcxwPn8CKVr&UVYJVb;^?&bTtUgeZKILZ`h-yq8V;3?BndG5+Qj$rPwgw+nujA>S zY{|)<%nY~1a1SvY;9x{0vfAQ-Cz>5AOvoZ}&6~I5E!EHP;VvCo)Gpt@-!z0k9~={6 z{%in)MVjXz6@W4QKKKL?_qck#Pe|si&>=JCNJUva%6@yr1cv5&A%18i=PP(}3r{muDJrN*LkZDB$;$F`qTVZG%fN`q^IJ6}( zVvX|=sLtF#PDK?RJ!z#x+?$uQ!)I)331C>tRVK(N$e-+n6q8+$Tr{6%_1-xWQgY+ecR8rrH!~}z3jKcd{9;vLR zdcU6hDY^w&7U15quwuo&vdO)9q9IfNPS-$OieSWt8SKf5Vz?8AnL0?oJ>B>w&2DT* z^qT=4U(g7**vKZOXN$skz=w`0!8p$+9aq4Y`uSnyi7b2;54X0Rr48^=YPz=?!%z6;9wbK8}W(|%^5H8f@7OaZ(#QH@V6N}Z>^f%XJ>%!pD$%plt zvH(g6e4k?L3a-KIIJ6zZZ1rXnfpv$Z&Tjgq&xSMIti`Y{unfe{Yl^3m1~Q!v6&J6^ z$_$U=9i=UCKfiXJHaU?%n^|p%MKr%$uEjc9=|ndkdry9!VR1k&l%SvIals`!OzJN6 zT}!Ix2ZB*f{XY6zM6taJ3hpW)!A|NUA^bLfVtbiA);ELh>Gwk)%GK$^0j)5(ZcZVF z3GW$u6-9IJ!ovf|89}_DVttCek*8poW@R|k*nf`MIs?E)D?~Nql z05+hUfV1Wpq6}sQj)m{!V*rZ?*wFhy_#0bbURsD5_!wD#Mj3wAz~*%NFkLU;D`yMO z`1D}j_YW`#HUO{bi0JH(F|e9?wIzrOQ%Ca{SV7H{fu$-BFg3&SBb^MxvbHU7{jhQ< zJxe8}HkBrB&L1XCp7ijo!|U|;%5rdJLg zhV+#Xm9q>XJs;=jNm!Sqde)cJ9D~YR&;QLaD9pHsH?r5XDXDjOlfk2o(T4+Th^U=- zGcuBRp=J#%Uw090Js2koz-05qvq_q2L14dwu#~3*umgAiV*{oSuEAfeGh~0_V<(6p zE8iaQ->?9I_1-GUPErg8GGvm<*L6ySy;FO-L&t9Gb)hlLFKm5(`3LGK_|7Pw*e*@{OXX` zc|5J&6#0f}QOfOLjRd;Ps&lO{t%w0Km{%)k^}SB=^CJ%rg1Jlwz_U~q3qlnn+(77A zy0o@W7i>4$1eXcl)3B3ZGz2PhJx#Nz3nD=)f?`vLXWSZClCfOx@%NffuacW%dhdI2 zJGWK)8qiyW?caT`HAIft8bSd4>7Sn$BlAP{<5xKX zmGAb#_OQl&!EXNxeH$3rJ%oi`H`8$K$L;Iw<<%KJkwVXR%24#T#2b{(IoEKh=m|7c z(e41`;cPvX%X$T%@8AL&ZvdjU3B%xi6^N^Ljg{>)Rd`Z9i;uSMjN^g4Yoadd_5ca_ zVsQ`H+GP<8m0oPyki~lw>rwZ4OXMCh?q+PFfm=d9=X>$UAst=sUJwTw+FPPE!*<-h zzK^6!Sr3~I^Vi$nHfM5mnkn1eurdjVyf!$?wSdo~wE&{~w@Xxh3gsy%QyE}wPWE?I z!RvypxLPRJ@mh?Cno$)>xXxU9^HdeWHqPB#p6<5gn?!x6{)DEpEIX9i?*3$%M30Dk zD*|mDFUE#C(Jku?ZZc-gsbC)pHHWM(s$7;VIyF2>Fd1h~D;Q5rqDw(==!0O40P#qe z-8SYie7j$k^cdqpSlw<_Kpa|WO4ysfNh7H`#A!9CbQw)%%i_$=ameeXs5$LZJKPf9 zQ({@$y3oBdlE8W!--l<9dNw?mrgmj}Q<1oP!-qcXNpy@h4R3wb)(*J9vHG_laZ@C_ zwHPu%mJbf~>CxPMFrKFrt8*h1gBsKtHDWOt9mGP^WF0%38j*dyxSf*af*vP62&u_L zCaGrY>IQJlZlcB2&lGZrjF5phAksU(XRH?7&6NzB0ef%=may3UhQ_k+GRn9BB#xQC zUWPEkiA|00d>I`jB8X@rf$h-@tmwn3%p08UY6LZ+u0BVluRk(R1%%XMTyinuKXxjBQ9uy zFy>8nu0uQ`*Z<&ntHpwip&HI_Hst+{Q zM&pkd1E1{RsuJc6<9%3lJH@l9QWP=z#>?Z3jfAJ7J0R6Q7igx+s-LmV%;I}We|s}h^RHgF}O2SV%&$xf%5SQKx< zYMT74$j(jx%l^scUqgWS0#DqNC*@=+uhL6oGWgUXW0SQF9f!RQ=bS0F5ZYMboN>+O ziEjMSJXhx4Y4!)^!r>Bii{_1$~eSKGXxocO#4Y3!Z5=!7y7C3W1Z0d+LmtsBbblH=wR&Ey^Uc4mw`J za#O>Se?;VXx{)MPk*$!HOc`r+6J$+-Hq7bc3cx45GijWY)v7}NmOKNgGU!U?ZaQC7PB)RHZtR;Pee&1{G>&Zr<)A~v0UVvH_o zl=ll~3e@4!^B2oN_WC?Zg7B6c>8J%D&nGi4>>k;oc%#vEyH@u@F1gh~_8I=>k$YX? zQ^02B_3x5{W-VgBvzwA#x*(@HruLZz)YJ63GWWkl!q(KN0AOl+tbzUKc#_W!dF?t) z!{d9wjALx^vV`CgM`0~dH2NJI)kQ2YDFtCPq5RxIARigPS>e2rf8e5h$RCU{M|}DH z5$~t}Yc7$=UfJAQet^|~>()tY4_B)hvvSQ=+$aUy)DyZ9q{K1Ig|B$Y! zXh4!FTav=o+R*0!y+A256Aoa74;a}P#5h;Ayq-B0uxG~~jX1*~q|A8CQ{nwu6=viL zWapG{N@R^-=$brJRvfNHsv}dpc$3Y|=9V#R$3T`fX?fD-o>csgOskMp9%c05`(~`Z z|2#+EJdvB(E1Hm4#!v)JtNe{ZcdxA!QBuX+9ZyOsrNEKYAJE`RZYlnc@Kw$!izTRd zc*%??Qfj9i&%9$fv2Qs3UrfDYkmy|0EIhXDGq!Dab`^ zd?QIDq47XIP2z*m1A<*9E*n4Afc3XzR$QCd2XpfbXc# ztRr-+!T$S7OXvf$U`?&Tt|s;o=(Bn`{c#2Ldd32egyta?H&8mq|M%tS1NcLlT7O$f z>ignnm2t}B3M$PMUPhWChm%fQD_&M0v&TCSvIIW~(q=WkHPVLtLdf~^B4=XY*UyPF znB50D8f<=JATkA+B2q@bnVzgpz$U8ydlHN}Zux*^rxV&1XSMkMw<{42_1rqh_28>- zN%Wf51myCut?|gU7lHqG>7usrg_DILQoB~jtLb=79hiuV+~6p{^m#={lpdGWQW_tp5Mia7 zq98Dhq6dUHdfu)465uxj7N)HdF|r-rM$UlNRl@H(3xFBz1fpP%+D`w3*B9P|Y!1b| zPB3q(pEcj=-ZI4`{q_My9MkukzbND&+yvtlVy!pJV%#Jahc7uSEHIc(sXgM}W)x|J zq31}u*B3^Ib45s)S>6I(p%?3bE_Z$wI>9fC`u^=KYelWPvfeU2t6%NgqD{-(pYT^E|Z!a%lg_tsniE z@q9`1f2)G+Bpil69zS}>cTY9?oaK7@cl>*ID$}lA|I-!L;n)ejHkn~sNO|ji?Jqqp6JT^Lu-=^U%(_#QFm#45F+?q{3@i9iqj@ByVK!dA`WV$t=FT{p2@HMwu=0=F zS`)~MZx*oMT52QbDwDpORR0#fTN0_4o-_jeWDYz5gm|1dNCW$5AOO1OVNFK~8TBM; z3K#$v-igp-;*#h=V0F0B7sStYw2JP=Ijywg8;W-##bx5T?GgCJEf8YG`4>{}){jK< zz=i=h`Wcp#ziu>xSJl?dOoQY~E7x{|ZNF8FH)Lq4iO8@LCL$cZ&0p}D=SA{_tXgah zJ*NG$c5T6iTBM`*HjXsT=AQ4AWt@YRj#c1GVYv7YH^+xDBX`GOj9`Jks?Ir(pC&<$ zF!K`)%O(bGrVFt9=Zg%y@b{8*6f*P)OXb#+rM3Cfl;@nEhNS*RD$wJL{?moK*aEXc zR?pc3a1$&Ty-fr++G8_sO$yi8FE$CQ*fqm2SH>45xatHcXkXjHe*Ww;+KT9d>O%gE z23PE&flMH%_?y`6;J`I_HJr%p_r@6`DA5G383SM)jrh9#&=;wA3>lA2-$&^7mkLle zDkn)laXf~lw=92?A^v~JT+4e7wViuufdsi00p(GE%n-yUdc5~0JeclMBk@GQE;97y zmC6$)y)01K_Ff9ORk%@I@Vx|Bh9Dwj-jZ$iTqr+q+Xw_YfJTY^Xxx&u(EEX6Uvkjn zu-oCFHee29Y6bF`m_Vd($gKUwgk}`&d2bQR&@Dof9lvW^JEDDFPMJTp+CBd0TsqF^)H>sfUFwTOKyee?IP z{}mRD*%KKOSGeXp#UaTa|3s|Y&uGX;kI9%ct~!&`96)1q>ISj|{9Sc}K4WtII(p`N zZ3V2?`qg&w`l5$ys6NHFpB&ecK zO-{iCDHr8q42JoJe6@N@$?f<98G35ZU7?9)X}oQobXE}n5#tBQ`0Z} zM`mcQcH)(doemGj)K>v=QORGS zh`q{0e@j^Vx|HGmO(wS*Rv#9O5wdFX-N;~^Re~*uWMgO40CS55?dSXcT2Iuj%*%ci z=3`On*=jK`P^de+714_6Juq#qFSuqgHmo*{&T5YlRF z1stHE1k&y4aTsykpE_Ki;Ur=N{RKpG`oGj}2sp@@2c&4teAZO3k4 zC~5SQ+GK!2iK4`QSG#V$_@vE1u4`!~t1eRQdA(c9fW07xb-u&)5bTNxVAI$l#9>zliQoKE;h+0hCwCBb zS*eU0VlS`16bj@YzApo=Bf)8UivVS$w6U6u5m2R)Ii|9#R$M`0a}%lr8KPKH$QBMr zK{^6Jlqj&SRsh{**#h$EBu>+9e1f6TD(Wu`wewc+50+UPLyHw6(t!MTt zP!%24KtB!w{{Jadza5LO8s1q`CR@AoaSoEXAf;M`+w5AQ%@obiDRsObDH`fXx9b-* zy9exY23rfvx#Ev0p1-*L(ZU79Mr^m#smm@{0izuzJTEqS7O4t4N^N9+PZ12YH+6@R{6QMca3&IFQmr_AKQu8-N@0Iw& zL3fdOm)6vFj10kVDvm3#OK2Jyu(=P41v-pqANd++5Od0jFeosMdA~nFKRp^o&40f`7a5Mks!`1b6zjV*J-W3be z6S%ku(B)n(X&Z-Cn7@xzq^4fkm-fk=vxQK+CHv2)!X>MlL(J z)KA_BU)}_Njd|!c+7RN3j^^OPfxEpMgS9s#&`#LotGtDQecRLq z!}NS+>Ixx=xhrt9AzMG` zxp_-Yck?3<6+S3*f_hReLV!fz25n8*43~-CKStW?NGUwi@SJ6-80tb@4WU-aG&Du?8bO^moB0)rDV*_DcN}h1(x^+qk1Vy`{ zkAIQl$0_2EW#{BjIxg9}W7NJSPt(#lnS;AUI9J=(i2}tNZ6}}m!AePK&WvWL7XBmt z^zrFa$oXP~+kUJJ>EmO+~Ghm2Y=4b{=g zHhDzUQv?KW za|knL?zrFV{(C##aBFikBFr_v@UFvJGyeQr>)jlC#k0Yb3Uf1pap{Tds_y;Hq0C%# zHEq@x%jeAeT^sTd<%2HgqB|G}RwSGRW9KW&^;;Wu;YC-5_=#?6*Am91;Zh=Mf@3;8 z4HWu3x@JP`H@lrXy2qsXLr=+wD{VZtcbo3&lPT}G83aaeNz>i~u175H=uy;}IQ zzAFD5G3t2e4LIVlbC(m8&lu*H`9_@(d7JDJ-zNs}KM>Rmvi+!v$TzaN`*!oPh_vC&r zcjPd&40J>q$t1Q2BRB|rV?O`f5*9vNwz^U|T00F?d8!$IvlPpr)ji)6jlX|DxJcu{za=Gu!}{1sbgQeqEsK z9&B88P){`x*N{+FUP829Pyr=cgDc2e*y zVd`bgx#+{S_$c}$(J?n5jMkIB2mON*XP!5}Gj^9Z0mig>1O-cQh@a$C-W+swaxVba zx@ZZE+>#ictHpSEdEk=Lh>UU>1!kq_=EX7wdZwbT3Y=HUeV%7P7m(o74MeMD9pJ{q z)aE&TZwwaXs_bN64VYhMKM|Q_OV(0dfROpb6YcwcpRn7gN7>(7s z3f-hBN@HuHPVK|$N*pfLbg?_PZe~m_w6*(TpVUM>X))y;!?PIF} z8D%8bnuh2Y_Es*Bi;;?BmLDFYQ(1KiuKFh0l-e~bFIg6=(4iGp>U}(1B*0xp{Fldy zRAP=z(bnV-6f4NVtKDi)s7ZU%35|2R{#-W`>b^b=` z7_U7ZZ{OyQHm)TbFr|K`6G^6}3)4>cgQFG}A!JN}EiEK&~7=%jm<{dkBA+oFq zGc!NeSrjO(%;L5C??dkx44`ggP>HWwNp+_!2WZzLYU*0`7Y>jx>&Kb+KHr8N|2K=^ z<<#78ZJ1`-J&AEi1u;10%9u`Ocff!jk%HC+@6<2^9y#UQ8T3+k8qzL#xX?0Td`}Op zX0Ed==|7iUKn=W|bOsx7(=DEF?go?KX6s8!Qmgy3%Ttc^lG%&1%Tq8>%j*=8ohcs>BYsE7HNAZME6>*8pHp*IvEql+=4SW4ywTMIyK*~$Vsa9Qdc%kdmf0_!k~{y@vNPyA^pEQ1#>Qeb9gW7$`OORoOvkWLgy|L)Y7iT!_l*6 z4eqlny{C2haP{mZUN8+>aOqpG_D||!;k-MJxMHghz7i3Bmg z*z5>Cz_4c`Q~YPnL0EzF{aMM#ZA~0~>_C7-oxyyc+{EH@4SIR50&XN*M=_Ua&#u$$ znhrJZ1c48h&sO7#?2q2q!5t*NZJ1#LTTBs z35&Kjt6FVdn4-$3IN>e@f2OEWAy`v1T>>Q`gPbMH6HKntv2Pqk6Cv5m6UPnX53 zmBrZ3)M&ud8!S4KLuk~!%JB9S27oPmh?Hhn}@a)^K(SUT0GgRBs76ll}b%Mo3k#y*LgH$v$*j1c=?adT+T)ij$jRfWJ z{gMgd{RV5?*+P6tt?19HA9|*~rE6D~9qXWy_K`k&;>596uQC}Y&zAI|`qp1KNK z#yxQDo}d7t{U2_`ZIeQcQZQ`6EscV1S^?)(xo?3Kop3BwQ&WW4{dp!8oE8nP88(FR z)O)2LU`NKC#_syHS^7h677=|d9APj`t z_VjQiYJRiP<#uF+ACEOorXgmd^k(~rTK<%U_!-OPkk4fRR!k`cdd+^UB!$9XS@~na z%}%xY_hsyO-`J0J3P+#-@_<;drd5^TH93Rq@ldzj&)XQ!p$}z*GSbXOSeUou8x5&)EvA~ivy@k?19+u4DMPP!z(3sWb(g*k*H1X%wvl_3uA;_? z5=$G#5s2P8??Th`P}q6+{hej!i+m^(MUlYEJmSvuuLSWqF1RxbVd}~zhHcEmKh74CktjRu99C|%;zsy7*9Fa!M+K_rt5W$E#j2HND9&ybfrvoPg$hDs3xP_ENs8EZs@MaX7e~t3 za{hsSo+CZ&Cqje08<2mYD_`*mrfoRUa=vR|+?%A<0Pp-L6al?z+*(Lf82@zD zDaw~MlglM9AwpzliOWO$w*QTdzl@kms^rdSh&DjAmss(sl*WB!l@lsAKb-4Bt2wjt z%$oQ{{G+W5p*vL{HsjIN!ZNx8+fQA{~el^LRq^p2o~PDF|SKMLt3yqf}^ik-;+fY)g^X@l_O3TQn~UC97)KWwLOm8yd{X z%mv$Y5p){&PfbKSxFb$2~5L(@wIU((BHHRMmlE*sEk60U~l@5r+4#^(T85s|}4oMy6&RvA1^ISc^&e+2o1B~A*C+w$WI0Uf0 zHM@XaLn*zy&-5m=#<$VslV+luyjtWe|8x#%b^-Ksl~Ee3c#I87j~rJ7T`5f>{?53M z!?dLVEj9#v;5W1tWc&j?5#b7aI+Q9})>wEh6&>uP7fM%P0cJ-?(r%@tQe}|}G>vXs zXaJ$k3hyD(5&_~#8Xo6y@v5@Mo0N$rAJFc4;DF*_m%jOg92`T#UbFvmIzDEMq-QB} zBl39Se9wsOE}*~rjsMMQiCL-4Fu{9-&@SV+Q)=EZK7f$ejyd6-H*t+*j6Gl6q`isR zd#;KxZ$-|YzjQOk8ETO9qKtiPSkAKs6@}U5bZ@s(K0NKlA_Gk~z$kKjXv1Z1^{l6J zUl;l5xL{HvKW7#l@hrD*twg1XS%%=LT{kaJPjsU~aTFIm8VW%BKsW{qmfE~<3x_5! z5N6z#1=YB}c=DZ>Vjla)Or%0y%WHp0l>ACk9&TdishV?zUVHmxf(r~U(dy0?5;!k) zs@Zq}tl?{%Wz%k8^Q!<>;Jkikl?^+LM#N(O7=Li!hB@(0MT2^I0!d;5OSIrwQ}&)5 znl*#8sQu+E8u@e^a~G`Cvl^^(9L0UQ`K;a;YjOZdY{jcMxmNoDb;V0q&@HCq zD?-Eb&fG|xlBzrO3;f*$hg?W_+(=mMRtT-gXg&pa$)d!a6_>scu?Z)H5r@x!cO59lAct7Vk}OCNdPqdT21>`CCXXg6tV-5;q#A( zr>k=#!arEem4OwYADGG+0tH)pyn_SK5uOPC)IWv<{ zY&F|>By)k_epK#m7*(~8&$q2#+loJIO063BCbeAoLm9V?gzsZ`ZmjW7wjtMeSND)^ ziC3S;*5qT<_&_EnB2@nknM5tDIv88i9uvzH2Usy(8;7czBe|Le)$3_YTwk1|{Xld} zOm3zVtI@920y3uG!iK(CO^F$)$)=ehH)CHxLknU;BIk%&7tSGBQ60kZ)7{^qKP|vj#QiJI!dIE4cuBiYsM}bj)g-lT zKiCeT?NEfSUy#sNnUNQ6xk3g0XW+fs0y$uSluqr04cSrO5_FhWn^vQoks7T)un;SF z{j_fzQiVz*;uPdjPw!c(6pV@os&CmIk2bQwbb_#%x|TSpeJ3vV6uC+LoF*8GN7+A; zT>DoLBs=d1*uiY^m#Rq$kt=y@xIRm|W#2L+1qsI6>kqNMMGyAfZeGVZzj&|5;F{;! z>^|B>#iNSZj8D&Tuz7v7k-L_LC}lcGEuUFfa7N^pV0tcH$OnPWyxrVDw0~i8kxU2y z@+rmTdpv6_2_u0FzaQUV&)gAYje=YI(Y77(W);(}7SfUnZXV8_kWtTS+Tq~?3TvTl zp&T2oYG$-6WfN9ougtqV&e=)9v#RzvwMs3`mA}{99EL`bZFaf2ay>Fwr&-8iU{2~F zT4=#jq*nRqz!dr*0cR8Z4V;%Q9B7}O+8IwfE|RFkC{1kYoq}%W9s$^1fa_yA?b>Q8 zZg7Q%Hcy5*9TcY~NxdoiKR_$_u%MW?O zdLWVkq=3PRgF_%?(ngnhdGXw{1X`sG7zLF>G!f+Wh_!^C;`+J9+j%n#b_l*s*>&Ca zAd~J6@t0NkSRZuZKqT(*#F0p24KN(8fZ$oHH_kLF%iUOCZJmkw>Uz(I4zK6;f;CoL ziR>PdImX4F!@2}LXm69*kHCqmby-s~SU2SI7c*AQ3>g?`uBW}qLSA5Li`2UiI5Hys4U_4SoO z5I<>#JOzGBrN*e8fIK#L3CDQU)Z7_j-zDXlnQo8n+(Y*IHa7Du(dqg+!;qFMrm((e z3orGj4P;mbcrcxr&! z^j0i%?NG8~M5_xa)h6PKxgwH;12pDepra-wkk!RZkqC$h@~lM)Gxx8=0vgA4)Rn-x zJLNEyU1OTp_cP{)BUW~-JoJs6_5Q##g69_dHYhUX=?WGjn*F;*4o5= zSeUjwYa`Ef*vlc0{s&FUvdz;&bkB-)c?_$Xu|-NVU|EM5(jsZsx#h;RAEV2NVUeevcIVNH4tKS7C zeiZEWI{x<7eDh@btI8$Dx>;hig{^&wd!|h_roQcif?Fmhn>w+8`mjxB)`q1*IqSfZ zKluj7iroPtCNjVk+e;lGjk)Z=?@_6TN@~x}KSrG2(f+z#NIJZLOkZq^b!9hBBx&A2w78s7A}= z{hM?`P^GT-%i#kV;zba{wTu&v1If^LepL5&n7!el$C+Jie`)EG$ zoJG&aO@b6&`KgJX+ISP$CNSs$FCiG9j*(XB(y+)KkRD&e-4}BI%Q&EIXr`?kaU*JH zN{E|uiISc`E}{PG<3=X)QI!V8D-P{8M;ka-Y3Z2l7?X(l%Hc0ABKLQNG^is~7T;w1 z3gxoKd2SxDI;n=n(#8>xgh0sMs(9^3s>?fF4gnQl{;^6Bp?YaYy!uU;J zm`UR8*tee&;#Itl&!|-V$Bi+DmPWJvy`%c4Reu+JO(yZ_C#dqy87DO9)TU&64n!qT z8?`J=gqj@GBG38SJ!bnDK)fuZ+#Z%|72ha;BF6YYzrBcK_LKy<=y$~E&TqKc5-e$y za0QlK%x@x_*&0yJJ74AJXKnhNOu!nRlU>8=-?ayF&+j9Kgm~cVuvO9=g;3mLFNs}T zYuEXdjncxBI;Q&0Q>ovUdjA12edv~aOLl|(^f#wWKjCRiO|=t`X5t}vIg}q)hD7as zq$yJ&LFm|==X4e=fJx7 zLS!LHg=1=lJI08ZsH;TVjIhV|kvvox*UC=5OW^6Tm~0ID@9vTx=G^Dzve&OSa&XM) z_r|mFuSzcBGsdY*sZg`W6_JmHMN;YVMP}Ne>FJ<2dW4GQave(N$Oru$P!y!zy2uYd zBe8-_Qsr;BgV!-XWP2u~{t{BZEzrgM%^YHLugk*pMj$5Rv*se_pOU}M1(Dvumx8ntZE7 zACYJ@C0W}x|DHT_kzz6;8I33BGk^?T_1vgi9|sy5V_;8jaOeKxnj|XtL_cIOlYcCl_;5QIK*^2!m-Slr#|0%a z5HWH_xItIh|A{#U$etdEfNJ(qnX-wIU388eWA3!N$>~+5u8<$MfM1}#{oi;@m5VD% zxFBNq^zYbY>+%Vu zCF{YXMCc1tO)E(m?rBrFdx^~4$a{-;r6Yr(@igN~^2%|9Meiw+qk*Lz^(qyLucxi1 zBGwf!8nGDP7{@p2mM$X+Ykh}c2^R6Q8fd}a=cq(+x$)&> z+6L}@P#ViaS==XD5)GMP!Y;J=SSqrxT$QV*$Uj>_KCREz`5S;&Uo@&HdF;d#$znW^ z4BeCBR=x)tjfF-IT=-O#m$`-^Is8EY@rYKQ zAk+tvmC9AFhb0Ix@l4m4jaA$3&)`Yat+4y_MvAIrikh^tf5lGZ)kG<-k`&md{Ij>p zdC$t&LV2$2E*}vq|KfCJ$Fyd4NmUTfurtB*C6;ayALQPaaqX>5ey&dq7C*Sw zVf9`yv46>BB*u$11|WJ!0ED|ufI?W*PgNLAnF&B83nmiN`wT@m_d}Y%c|GMR%6dL< zQb+(!1Q^>-gP$w_8$X3-er}IonNiqyRg^)6>{c=R#=USt;U8mhN6FDQTXMJ>vGtQjzDAx8b9K zeQz^DGjnBT#tRhxZc-VWn@-!AUaen_t$cN>^O?W*?Nhit?la~49RX;U?B$>>68ZCq zq1-xaQL9JNQlxlbt^~YYRY=)wTzuT5Y4uvk3k|ewNqAz?=G?m#WXS1wY7~$DE`!{^ zf0i7OC<5P8C?`dW!iiEve!ripneuOD2hb+3xpv_c?9nEnIss!J^x76vw5=B}`S!D* zYpV4Osw(QdW%Q<y6Q+R8})?3 zD`=KS2IBiE!}v2)N8C#(p_o0zS;n=*jxNBEYHa3C$=k+M9MiJe)7*_?&#q`_UZR=U_qT-qaAx8B zYsG_1(_Q5HQ?O`|K6laoitex|oRMTe?6FumyBpO(wJW@ws zS<y8? zB9Otf=s8~$d@zz!|EO0}7AHk0NC8=TFa65SdX=-2q*6sNQT|sVwa?jOsG||4V@>4a zRw5?p25^h_kBNoHTjc>z-lao%a|FZ`45r}u{KYznbZJ1n`xtoRgnQwjn7h{=VCkyV z0pZ>k@78QY4+$D7Cb5{5Qu4FFYU|Rn_A%&g*S4kqMPXn2Jgij#O_EHa$>{8YX)0vF zN*%$BEY)P1g?@g7H0Rjgga&hEy|Qk>rBktOOC42{^lBP6=xc%y{C$Uvq*ddsawY5Q z)yB?NLh`xI|4vb9JLiasmDsO_w$;pjLiDIfYmBCzh+|o>>opUXL9rSar=+V#`W3Aj zI6xVs_e)l(84|Rqw;)oS9qI$C5q8}QmR&Y7lZO2$e|nheEv~&0asHD9*0zilFzINg zA;A9xA~&Qg{(EFXo&1=h?sd-nz5Ai5bD^(Q%QyFb2Y{LkLYJsD<@#b zj_A<&2e)KXmPLKpLw6)2(wvk~neDi+ z)I)_|=`L4t?~AN`GP8TG#^JcAu$DxIoQsY&9ZpdU556f|en|_k^$y5y{(+&)M1vrQJ#*G?%UIfpSh*8AetPm$4 zdfnTg$M^rfnx{Ur;JFV!Xm`rqbV(ZPkx2oRG2m0!a0l%zxlDjwWg-bZ?11S4RFD0y zqkcx0fUHn#=!c&oANb$v{jfL3_Qqs;AQ?g0==Yfn64n0 z+V)7a+$VGF1=Wl$3uy^hZAJBZM_gCyQx$mr>mA~bJj^#J4vbm0b*S0h;_x4;$Zo0Y zA84daC9DsL=HntWtH@}e@wyK_^TXjr`BWfI&c!~)+p%iXFVK!j`#1$Wd;z;&B^Pty zrGweyY()<_MHz)Q46H>ja4PCB=q2dQYpC6e2&ilqofPnKlj)H?`hzG2*PbzbDzeNw zXV2-HsHQW&6{OUQV+&>9DSo{g14IUk!fktQ@Wjg~@@39g+G(}q^ts0N7Wlyf+EBY- zZGM5*Z+d4Dohj<-g*Dny@;F*~^~7Sfx;bEaLQbEU=bds~>|95~tvOG_Vm|5u_P$%p z_(^okv!%kZDOp@)@P{!VfR;fbWUeUV;!eo8>mVD#_u)gW>l`6wqUUS=(KZ6b)3OY4 z8h*o~F_~b#BNXLR4KpNjUk9-mdN`QiSkp3n7j~LFJnti~BSSmN_0Dbp6e$;Pu^d6d_}|^Ef0hveX(JD$#v+lYX|#-bXwXOT(C? zA(wDVRdt20O@uY%&fGMTvqYV z1COtDlbx7v*}hIt?kKC4RY8&8BF4&-6$QySCU%0>>S-Sx?%&z+c-8F)V`OF3;^ zU!-mPZ$8U1KH--_=77iUw-w@nd6M~1wn({ft`vDU(feaish*RcCN0{ZGY$>keXr#j zFRl7ood|^O1EqqG=ONPQHpnq}<*|rx??hTZ6UDHcLo6BeR@6^4XBYD7VVH-}Q~_EG zU2f23CG>r{K}NDw;A&o3(W;rg@+bG3!veHXhQ294)$i=n`|v~ zGdY>UL;JEkiR~!P)@{y;e#1Ph$9%5urm&a^5T`yYT-PTRJ#=LFi zILZOBnr1Gm*{l1*dPI7=(i6N5b_nB%p9&L}8Kg&vLzh?7e7p)ghY#e46fkCUl^^!s zt+{%{N*L}ViOYg(Vfi8?2E5O%AoPR$k;KGBROxmUYWl*Z*4g{YZW2K&_iz5{h!eaH zZcltRd5!K*f4Cz7tJA*Rt1x@&}J zLn#ykOy3}!xwlSV4+?4$itMkf@*rAVFt`C84-(y7sp^@w3L^H_NjEUkVQq%tM$zOH`^Ubr9{7w*;K zN|icsQi3vipm*nNo2JN}$V8|z7jl%Y|9V;~%1*F}0Y4@>g8C!66K@r~Gqo3Q7raxv z`rmqV@w?Vq-imdgoo(U-i2|YJxUP$iyO&VlK&rmFLB$$Taes!0R-krwe-fRcoNX$I z<#6u3-*1Q8@d=ao)K%9IL=;P^vbF#YG?^)1tF+q^&?(+r?x&#G`n_!%Q z@2wmQ5gEs2>_9nw=EqG4x@pPW9`$n%sId)T-tAOQLYZJTyf3;=k3aus1M@N*|s-X z8QD%Ucq41<6WxR`9rUAb5Q=FQUOQk$TPVC_ZO8rCMQnQRy{?ux?rFXVeIb z0z_ODkAXv`E-wyrgt`GnhZ8QfA9!TOGlFsv^`otdcS#o-04>cfsSL-gv};^w`TU>l6pLv14BwI>=q!U8wm25L-vk#!-KdgS zPN@-lxcEg11R4CY3^E}CTBWXC@k5(?s<-SM%i2gRl2TjD`SRTdRbkqrP~~#xCh%<` z34MX(8KDo1CR8ea%g>mnZX_>HvqnAzlqFHgl9E%GQaO~!sq-?`gxF8(JaV;MvS5-) z?UXowE_AzlBr1MOV?WpWP&x7unEun7G=AwgEmq{Bh#sJ-B_!e05)^d3R-woQnq}$$ zETyBK^t`;VG~IuNWK(oI1{2Mi(@Q@i5nb(i%o4pE6w2_fFGZGi2S3+%^4VQgU|xYW zNBvma*kA6In4ceC=KsDYRe$n(eE%rDTGF*>XU-*ge{a|Chv-W$=DrfjUcrkxzm#u$ z>QshGMANU(Q)~5X=Se`Q4fjL?G*Lx>a}LbTPzTDOgWNOH^XE3g)yv)P)&eCY3cr!8 zS?S%8X|)OQos$O_C4qMfk{Y98t;)hs%{&EA`JC_yD>`hJ!es%c(s@6DhW2wE&QAE>dwpe!W4^KZ_RG3jz% zyKFa!v6EKn@0jR;_fNoQo)0W{yrG+pn|LOZ*7IkmBrpF`L?Ni1F)ilJT3yJogNRN; zyPRw?tyJHWEt~2CxZn9Kjv9A?$4e=cF^9q@^#}h%{w06+H&D3g!5}PvByCMcO~ zI(n$t*-*Lv$*YVi;`#Z4*6Q=G{+F25kk`8u9SC9(hDZTHA)c$2Uh3*JCox6!PFF#?o?QX) zE;QzRVU1Wl#P5vyuF0_IZ=JdMqIMzDJjUVAyN0(?Xorkd?~Rj zkkntrR3TuP#QCy^*&L;u58hMTMgMY`-Xjg#2-sF`m&(9I$^KuDfa-okd30>9(23AF z>SIzJ?4jRLVPy6RnL71=gv@hh7nvZw-$Z5Qg#*c*^ z!XLGMG0@IE-=B|0S*zw~j)La3AhBC`8jlFcc;RFviqQP0kA0ZS0@KKnVn;o*E_OZkGgP#HoeTxd$nO)xKtQe!;3h6FAe041eIbfD?expiV|OT;SuOS<18TXHGSg9DdvZ+^w*J-Lnf2L?l&G#HEKeB-`;c^-`vU0p zOokSyqn*n>Faf7K9h7YLDVT>k({A^_J)s+EtWyKjiLrL7x|{W~ml-#on_zVRQY8pN zA)269Od(km%bzyZA*5912N5Yk7t8Ny!|~ObX1Y_m+5g$=v`5?C0o~{i3?4}XVGniC zz1MGGI@NRn;RRz7tkzZqX~6IrS(GL-HsqP2Jqgy0K&b^PUEHI6*X;k!E3od_<9s3{JxEJcit#z0ga%`2Oyl ziLyM_a&q+-B4dJ^qF%xhNlt3;)W+so@?U3FSfGO6e(ii4W&0bV6!&0IDMIXN9Fh%x z&vuF#%XpB1y3w13=Ga9|Id(E!frD)ipT-{GL~~2DsnC(Jf`}o;0s@thm;&fv@qqbATTf(_D=ZpEee=l7KOc&4>4+CB=<&(&N;?aD9jB1rbsZ*>_!bf zQdS^602T?=y*mHy8LFY3yhkXaPgdCxVb2U&CiyqgRvpPon!!Q$Q1x|71?$iA=iArU z7h@$P%E`rv?}-p0bH*8>}&Hbf~p=gf<6B=Q&FcB`OO@O`_NZ!yUvr5vpkKK_mQI_84Z)yQiFIB?qV&|Z;ze`{%M_;VO8 z_rF=i(+!yU2x-1gB@RssKsR=3XbH%_#@v;_WaTk&;=EpX?iv#kR9&enXCDl5+q|@3 zN0xSbShoKU098P$zjex?m&XWsKZWeq@A-sz@z9Y69qD3t z6zr*v`|YxJEuJpVZ5^|%%61*rc_0`s;kMNmOuVX{3sOgCw*jnvR;p``P3i8o!ysBg ze8`j-M62)f%&LvtBq;optX9l6lg9#qyM!u8a9y!2Sux2yiIvzF5jStRo}3PqN)9;} z4lh|57fELtx$Od8)kBz71!m)eW93sr`(WG*2U`UH;SE3?9_Lo`Aw;3mHo6}n_`C3C z*M?qq$4R~z2(5QXmaMnyw=BD&qpuU7N`v^LYQ7%`)t8CT z&OdtXSa4;AGm1OM<_oPb~=q$ynM6eD*F0lVcNBgP%hcn6Y+?pa!=`sm6`B0n;2P ztePK(yD&t?WXB_wY7%%W%GKJh|q(03+#YBrECar zx?1UyG3)Y*)ZDYKwAQqtNDHow3Ftep-kPYO)Crf$lp;Me&z=SNbC&$RW!}WqO(wm% zoQ#&;;_!2M);_B85VI~sr>Yd1(0DIFZNlJsZBI1Smdxzr?VdZVdvrXRg}-wYxjM#} zN4t+h-%iChibjUj^WBr}S=o#0L~jvOxdL?(foS-tXBCLscz5Y@8$OhyB=dIzMvXpP zXuvKQAF**?)6%{qUo^XcOX0CDmSJf~JmboUpU^ zJgvMtd5Bder#M>JAPaFUolPv^2bZoh(Q0Ss*G_EFJ>wAFS;OYpzpkK{cbn11OfsZi zI;!-rIZ@7UR|<}&-A+L%Dj2W>fT>ylJ4?szP+?hz^e9K;<;a{|)OYoeszz;CC~t&S z253wGOza(6%KOt3?T=AWGQa+HZ}Vv7FQbuceU5vz%G4Q(?6r`_zn9>(w`zXXIpw(C z?w#0f^366yH+Q`@cVRv!yQkM)p#?*`D6!OXLyP}_#H?Sn$-kbwfbMQ6?$a>5R6EO) z=@>o}wWrq(YZz_HVY3+}=KG4*6A*MU+v5 z)o#d_fStIm@~x<{FMTIs#$&40jHyNiQZRgga^kTI zrCrhxeqVc_Tqg+QeltlWqj|iDrFGv7MJ}f)LKEy`!Xo%z`kx$Rg0`(Q3>I7 zqGD&gS%$I323aKQ_Na#*C(p3xp5}Lx8X?ItPO7>SE!CG6CRzjzyj)x;_nRzxWPfWS z#7DE|F7*NWu&b?6^(eNI{vmz=_55V4LYBA41?MeE@Oh=PyUMrm*EzR9Plg|_IIY)Q z%Aph>`&u22Z2JfqSlk_6Yd3Qn<9xGsrdY3o~JCb zJ~jW*MKRASdJ8OSY}NFFTAVx>i9EQnspUCJRUN`ow+2_mk@m>518Jm5Gf8K50xG_edhaNPFf1(eO^}S zN^s7*Duq1f9ev|>UG;`C3_aGlaQW9tO(}c7IBM}S?L^7WIC>wQJOpznZR}7Fu}c$Q zs%kw{9I;Un(U}HEr972VZa1&$R?>J0L|<;kjYNmbA7#xv_-E+z>i+(1Shk@oOR`sko4hyZ@K(}N#%iDB*s|$ zE(e(d-`*wPXs~ly+>GfgIv5OJFv^S)5ok6Fsk{BpQ76se4(gDMrE9{(8^6L>WieJWeRmX&w{IbPAC|nll<+#5o7I+~nB`52yJ=g4dkKhaRr_a*RSZleeNYz2YiR=G$THAzpw` zn2^y;y4fSE#8_lc)sGv~QSVQu_d5u0#8RH|r_!^i1OtvQfQt(5pKh#AS6o#1`~2S$ ztr{!=A%+O#)V6`%45b#X2+zyjvCe-hYL5wv-V}Mvb>Yhdi$C#)|BF4ejJy8Q?kn}) z;tPLKYn~wn?$|nZ-pcZIRTRmJ$wMq!&<;RBzCaQu6}O*jzq=}V2Xk}+dSZ^xmN!ez zGvmEQye+GIjnUpBrDA73vM9y)a4L(~_i3oHxdBtj_EFT2qCTUj_wh-!k9`?ckuzDu zyOfO4ONTwL!$-QZf)PbrF-tK5ru*G7t7sDQ?$r=*9~F|JD+iA^##*W4kZdYeiAS68 zOm!dJO=_K}rDv49BC7yl9c?z8E95_p(3(D}Z8}(xrYf3MwgwSCfb}=bki9I&VUmdt z@_U~o17lsP{0Nesn}i?XCX8m3fq{`Rkw`egTX5Zuz4ZM%;=~1uium?5w+p>P5oP6Q$=ec#L|fCR+V;?BGm=Ry|Fe9(Nm5qG zIP{gE+{BFnVlj;tmaIsi4DmX7dP)h_QnLG@I6z50zsd4~sb~4RhG?DQI*Pse8xJrC zoR&CQ+j<$yoj%ur6D8INKq}=bDGzgj5?nF;8;^SR!;GE|coCjYL|IuQ^C*OU zMBPw4*Bd$>lGxaQ`*Z}w%Vpo%EE{h7R$30^j5qvINTP-_4eTf1&EPT^7}I1CSaD-- z=h42?$D9YyKB62?oRcL%TG1OaJ2V|A3`4(a0+m@F2gXwdpbR(kB|R0|x$H<_ta>N3 zVZ&}Qc^I7iRLhdecUFCKa9mpxwiB_xV zc)#47v~g6!0EWRej|8N>Sa-0(0MoPB_&TcMTW(Ii(}nBdnP@UjzcqyG!A4j&25hZ$ zpnl%10BODKs=*$Rs50ca zbW|ODu@{4;J^iCKYOGP&1D7%FY%dHpW`4B1wZUR921c?@s$|@Oe1u8RnElbR*A|mK zu=s6~{k|9O>JvX&##$h;2c8=D9(!SKCj^g{%P!dL!^D!|4*RgL%()*ei|z2(19K@1 zaxc6!r+&1owL)V*&OmRTzLe2IrD%7i?i0{6o|MXA@F-b!c+9FDg@dId$$?}H?7B=h zRxU{=8cuWB<>In^{``5D+tz?mxYvkBrT)ue4KZkqYnTcAxNbz-gOri@{0vvn9HYBr zRlB@2-yA*Va^3n2RVwTXc@bvYT|9y%O?d%OS` z6p|21YCiXVjfbyqe^~Q;Q-T}5)q2u`W~3u5FRTn@S1Z%8bUeI^1Cw9-xHXtKnF!N; zgt?>cemvxGqk;A8#rv*NcQEsl%p&RpX&onX&i{8uNww!+X&t+~U$Bsk->riuV72KCflRA=agzFAmU4AW>J6RLD+q0T`D2o;tdj<)kWZ7q0zh<6 z$OoCHv|K@~u;A!56rF6f%;ZZg^7cl`Vu`dL)Rj+rvxDm6iLBKKT++9v7KAoOyGj+Z z+zo?Bi}jndtx@2A$~k8^WAP)ESA?#bu{yCgB)&!XaCS$(c;C0F+Z_(v z-@v?|rNB_U%H~``4sp1XlEAg|vx@?+mrefLyv@GqFV+;GDji0Xa!IEkyAg$kC%l z7n0nRLw92QWlQY~x$C1KdW9cE#SN>(n#9kb7eKbvu!}siS=sn34J4Xe(KvZVI|U9t z8LdyKwCQ8MfSzHN88Uj z{K8gp-F~_6<@D58q+`xavAImz zLTPpMH>9PDiIX4mUws9?F$Dko0Z;lp$RFxqzmHds=)B)Y@#B$yCPE)i{Z?x6T-9K7 z)QHN26KYJw>&x+GQEYASf${1~l{w_tW<_>Sgd%gYxD(z~r>RtDHJ&GMLI6+4dQ&~< zFHjXse$Ig)u`G8ZO-rDXjE|LYiNdRP&GJ9t$Ey6xV!J`OZWC5O@#6=G)lD*GT#MJ? zHXeJ9)X-Q2v>Qa|+Vb>Dp1lMK6KH8G0(z{&RN|n?0G~Lk=(^|XL3C-DMK09a-LVeZ z;1+89k1Aw4)#M+&aR7cVF7q2-^B=H)eHvvq{CrS8Ta@{>h&ff4%U>^w_}3=Pm#nPH zUti|&cForeLjJ3P2R^WbkqUOh|Ni%9pV(>}L%^$wPeGz#rFD}r;$X63NI z0}B#LGaWJ(uZYqEXs9Qei2U%p&8G26_E_{20df27YkzQ8gN-g&e1}DWHw+ zS&@Y4rmSW$^IAla@~3|2K2UiEzehFoRPRx8ZuodibU%j~2;T4SXpN!(dL|;_HTWDN z==F=5`>3oV>M6)vA32b@)@CK9#0;|0^YB&^Ng611OwPXfsU4W>kXJlFnPA(cMQFlM z2e{70!1Gdlx0-^1MyU;X!_sCRxVshV);A|Jv636ya?8+HltZj}S4V|m64*CDm`5&7 zS1T+1>?b9B^p>VRtTo=Jv%Q6CXoT^WhkvTmX`1HunEqLyBS=L0lebpoGlA8y=Kn<4 zk_0Zw@n`-#JTZ$MF;mt~0`@l?3)t$Iqcc7U!D0&>mEI9T8}20mXFqaxOt(4cber=D zlWgXQ%Q!!#zZ}zFCQpCaPr^%pXq59~V#_hH#Y*q{1iJKI>l(o?v)Jm#z=@!N6X(Zx zi4Ll{cMh;4kbE4PPDe>P6h0;mMZGTK{4V)jR$7Y?%eoKNIY)zz0^=<(}V~ z=ZTDfU6TZepKa6cynMG!t7Mg|sYqFr;_nkRQE%WSYZga~bz{;+1hbBcLwB5O(s*@u zx__Xm6$}e)x@8UNOV^fUV-MEsS_(Ac;x>XuYn$voscxI{Yi;xFSP{-sPP#C5*#m7Z z7}3El7yFY21GjhFF=4=4aKxn#TpVg&Rs9{Qs#fc<0LHmoxlxj_;%G~B5Mv2eMBPix zQ!C2?Y|SlwHxnB4@^u3{(8acdh!3v?3}cgn|G2c3*kmk#sHZaj3; zT~YmQo^LS85WHNTLfb%JyW&jw=#=Kihj$mszJX>X)unKnPfaCNA#ntOI>rdJ)wXGK zINNP|V|of(uJPAdl%`iv{Kb;Qls0U!YnXAojmQBpCnalo(K3J5isBNfo=81o0vqp> z8Rt-O3l&S?2F$}V{-VUlJ+MNg8$JPsv_{xVZlzYa{eo5Y_8NL(8wKRADX?FVbhRxo zX_6TXoPbs2W^K%E=d=C7M5F4)+x&Y+mv3VL>9`Ebp*JoZdSlC>{qbkA!`Sf*CU)P? zjV;^Fjk|MmcQ(r`%!ObEEcv#nrHd;ybaNE}m#tyOX|;yEx?|ALv>AEiG-{|2K5}jG zFSH1m$cXlIqt!2-lLVKmsr(ym?hLVjpl6}?nw-VKK@R%tC97E^%|+Wu{hiqd3H5xBE6Kdpqb5a+Yc1}#*ZlyFaO|2#gPsod4LP~-% zfZgJzh&H#Q328gee6$Q8l2?qYzh+qfv;t`{MR*b#r|Xf#lZas|p)BhNduMf96l^%@<*WP+_nNzuN60aqo>(T6v z>Tf*uj1x*7H7IgGx~Q>WpNb-?^UJSNc2q|_1X-Hjjx!!R6U(<*m8@BB@;{#yEok8m z;3#lo0~W_L7P|lRffPYE7Y;`qbT6Byq7>dH+3!zX7uZOlPKN^$K7&0^Mdm0^^r=go z%?@NzLe$VV9`oIKg#H!~jSLwPqlhtQ2^DEjhT`Ra-zLSlMm!j8DclB)QgI!p0j#!M zh-t^PPW^||VULCL+;h2p%E45U zl0!F>ql2-5bkkkBHzoK-@!MV+b0+nDHSn@kHomyQn$e{wQUc0>jjdH@GU z3v~Q%Q0Q=uUX4@AQ#pKnERr>+)ZLT!0NMy&ix>wae{DuR9T5~Zt{r9HMH?U~wi{4) z6j*(9`To_VI-C}|v$D33=hE~NDdTF#SFP&>KPAfU>b!H5Kt`8B|0UxxT6m-ZwGv;% zp$CS;+{mOHL5rOuhNjDh!l`v+!F@H530EW=?mmfy&ccb_F&QU_6KRO-JD-E%iOy}3NLrb7#+bcYm7?w^7OgNI9}mPm*w0kK#_i}LbK{&!gtv1RWsRKB>T-O1LMV0V6T&bU zvoIY@!EJyhN?Fy`+j;Cwlu$NxAX(^Lb{gqUViqi{K69a{WeW;wU4dVSO=u@ z5d|Ck>oj%^GNQ6ykm%9#7tE5t)H|;7{$u5Kfv` zjAdg4ckFC|qLS*(C#NQO)?F~MeN<0ij2KE@KNWS$Ov9?TC1H0D@Y6}B_UMP@b~>A) zV?*t`r)X#j>s7_T3_1FyoS-38Jpvz&+6~O;^d8@{q4NaWK^crQu2@AVs)98%8hd$&-PntCjpV0Q>mpEt}Ry zY51^BYVc=fkrD_1Ua8*MTBg#hi{>oNOIB9zqAI>s^fydy=XSU;4Y^pun6QmaP4(AF z!H1734&$cMx-~=Rd2sMWC8No4pFm>r$s63jpiR+{okN|OQ$#chSFVsx0zvFF;u!u@ znCScNnC8KidRo&`iBEFP7w$G&&ALcAkGqA$Y`A`wuQ@(RY2Ru6jdY9%?5-ZnYChxX z-WN|U#K*2rjYLbNAb>$?79A=P|3&@e{H(QEVvCByB$2hD#e7DL^tI+@dX)N>UOe zG(c*{v;GjjfV*qB$v-ioV)UUBsss=sW$PVV=f%S%7i$IqYu0YMPqmLRTEMDc7!igp zAPByP&q$&*P9W0p(QkqeuUT0}H~e4?d2k#-b9BzF_?CL6@dItTGG8hww*LxT2J8He z+(@8S)bHSB;s&IZ!+Nw=q(#EzTXx6N*GcN=^=z#;v9w<%(M^_@RT7s=oCe1?6CJMV ztBY%#xJ~O4#g-|vn)ubUAGx@3QxOhxoUvl46y|F<7G4iSw>;0Ta{v*cV_)NRYnEHs z_5RPSxZ<`l3{kT+gR`acPy&>bCMT>1_$4Yb;a~?49Nxs13px&CqJ>)OZx8Yj;7X>w ze$dj`hjG!?h7Ptx07BsBZwJ|Y(s|Z+^)+U=b6NXvgu*s_9V8yO`cIU`h82*@U6ILo ze0FynxMNq}Db^s=(y@b5O7{*3uFW1VP!Y~JeGOPO)cmTySW|$CzSQNR`5%%_AuPtW zwD3&?|9mIbv+K2HwqTeys`5`UafEYV0l76<)le6%H<_od;|DptcPz3nx4@Ir&+R7I zefj|B>G#;JmIK9&?;G2a0H=#9@Gqg-#j_VxDFOTXHorHW3S<*B`Z+W%8RxJ8O++DW zFy>@7`eoQI$J51i8r^h-BsbBlgHSd!Ukg_eqKbz2V9@YvBxx1N8Bdmu!ZweLHnJ+3 zitU+-Fq<@qlPZ1C_H=XkG;CtFyjkk5M)cdo+p@~ncwH~bm+d@*OGjv(nZwQRJ@aJO z#?au2=FSCfbh~ta%=45*Zk}8;vFZp2Br$mlZ<0HH+#T)P&6H19_$C@dT9`PuQEABH zvlsnR){5i0jaCa$U#d$2ZLZ!l`ZQq=U=p-B-_lYeuYHF2-J!mw;dqq#MOsFNY_#s8ZLj>}=^R25KH6C)8)=zQp$kQNPZH z$l}pS6v{5MS5=pj9^Bvl?BiAyT^P}cqujxGPIJ3(2Pe2r(936f&PU5dt{$J1B-DM> zHB}eA#?glFBIK8nL^)9cChF%>jRT}t($gI@kK=7o8bM?(q#R8Gakaxg`c`!jkC&NT=zpr&Uo|>G0*0-to#QxBS*u>BCG{nFDk;?=)%I z?&VfzAxYxahWfJn*6(~!yOtUSqSI8$ zRL!Xqpa&?o^@eX|di*Os2{&N;|5>iR;uTnz@v)NX*$Y&~TE6lL1jT+?Y&QtkZNiGE zh;KP0w^5R*J9F_m!~x&3PNlc}hGo^|gw@HY4D zPKfusjkjtNdT-(DnhAOxu7rOPc8@bDe!-~HfoUwAc$rQY@?`E*`o)N)j|y(L2yKI( zWqP3+cF`YTsE>3^gIGonI&zR$DMGENd(n>kGvS)P4=dU1AsPKhH2joweyI<-XY zr^|P57vKJ4TK(l@@sBt7Z?xXve>Qmu|NVWNSAY3#KUlXHnyg_V{oSwgVjWeEOYU5C zO4TmU+7aWT??GLdhr&0(ft2QA^8>P^d9=dM1e0A`P!Em||_k;qHQwdq6u`)1b&sqNsJ@_}aM#uyq6*%pv5n-fGLJ0yPbmXrAx zZWMit3fP%}5?DP{@ULrE9=sBz(Nw)ExS zWzCDnK>U6M;=N0ERKKBM_fk3ICr@g{?+eDi{nCtv9_){5&eg`9^Px7->z2E5v_&~V z!{Z^}78HmOlk{kX%1Sav=<1yUx(Y~+DET|BLQ3aZoUdhSseUrJ<74q7gVrRLt}t9s zGi==-lZ<@NCIE;|4LzP+XhPvO6;XX06C=@Smk2GnInjCQYIAIawlHV2liHU#YEqdw z2C|9GDk2rdFR7Yf@dpNKcAB%0U+g}hxcefwk>odt^#Psi|b1jV*Wt#Mzw zAJ6-|Vlv8$zrM;@nSEof=OX80YO~1MRY7gOXXouVR2%vlnIuD*G9lpFpUee1&_6)Y zI(VNDrn#DJ+S{H8Efrj8YDTNS`&JD@28LBW^t^_n@^>vgZ$`^>L({Q!uvUd3_=i%Z zPI{sIE?6wr=PF70nV)Opy4DJOS1!*>C`SLGcm+4`zy0=SNyGZNa`}d39ItqJUVr)D zzy0>l|6}XTc`3`lmPWk09!yc{Is8C%j0o_nc2L)SGb_^Va_yL3x4R11Ky2S(V3KH> ze!iZrR-dBmhV5eM+oY_JnI}U}y`q%EtCTr09*bgCbvdz8>b2UXr;$`-OxM5N(Da>0 zfnH>O`?G@`Y(~wXmzJa^>ZqTA^I8TX1y5hqC2CiA`ZT9dZ^XAO z{z86C)FVj+XT0P_4b(BMzbyRR5!N8Uv=RxTtB?o!1BT$IBiio8SX2#j=WrB9&_%R_-I*ExX17Y*Y z;%ZxgQsm}AR)@T*Qc-+DbEt~$;NU>Ae_?o^PoOUbc>LGD9htl*Ccj}7=Pll!r|d}JP3flJ4L+|rirELLSZ)xm znfcKR$s81>M1apmbXcDECD)$K@05g=G-$w3r?v+BZ^RUlye#HKQuWk#*<2K4xj7c6K+^r|Ra-^XJbS5y^S> zaeI{}@v|3Pf0mRdrfby-%WtGtBU^$@uV9ZB%MHi?;_&CC~z)n9*SXH zl8lGoah}d3ccq<57$tJ>xQ)CS_aMk9Pzw;x?K>-f3&ijHJPR%5e72xM-VWreg`C`n zKW?wDtrOFK+$JeDAEJQ&<>GUeCSSTEC@&$}U(Uf_69xVuB7~wSQ`q|;QlnsSO$AXU zNhU(^t`Mrw?l^)@TG_wc^5gEsMyufLmPyjLV5yA?n5bzAPPqz10xBObFcLyOfI-~E zV%J)Vtz}TsViqIA^%pcT(rz+4pcyaceTdF1;TZdJQAO58tF$OtL<5>@*f!KqWyixr zfYrE&()5vFNxM{mwga#Bt zYwh8rAlVj}!R4f`g6PoA)aZRPFTkqBo-MSx*Jxf)`M-s=q`D|2YO0_uKnU3#wFu>( zuowUEe3i%izyBXlO9KQH0000803~nIN`dlw2CWnW000IE0384T0BmVuFK%UYG%znt zWp{LMZgX#DbS_GBZ*DGRY;3H(2Vfk<^*_EhySIBy<#f`W`pLqQ*Vimd*vJ+bQ%rG; z!C*i#*o0yS8{&l%P5@cP5FiOLq(BM|5NZk~y^-DvX(k0y4WWmS`b|hh{NLxz%--Hf zvQ2(}*?Tkd=FOX#H#2YE^b^*-%`gqau;_dFWyAQaA^(;e`~TZXUw!s-^~NWoKbZ5` z(5fHIS$qEG@t%vy-fPNdzqaSxv$t;bF6lXEV^4Y8)}GBav`wKHK7)Edy zSB1Hu66UQs%-ayg4Tdo}%zPE*?UgX^&|z*wnE9$WnB7aINu^MSjJNM7NZ*}o_KS3z zJ0Bh$17YJRgWFe9Snd&~VaKw|-J2}Kjyu_2?09VO&zM-jh+!hJU=9fNoWMVZR!BJVxSl?Fq_a&xtFceV4q z)y`Y0owrsyZ>x5`56(^E!Um&E8NEmXZ^zFF(sP5ja5g{F3cJI=nX)paM&aIpl8y=Y zPA+jXXSEJB)>{R8#{%TCOilQrT!ZP}Mc$?|-MbO{Iif0pd;G|+6|?wMqE^w(SJBTg zvnB8SWNR5po7ol08aJ~WrL{!qGRsL&{D923#xDtx69JzJhdx;C{1BY0edoRSITUH> z7ujC-2w8bj1ExWZ0^%`ASqS-AxQ~8f4I$~cAGO7?9mxg`e-y%>++a+lsqKciKAG;Z z0G>lq;Q?}Lh5~y9JQfS@!xc29qHJc`Jr1^anAzS^i)VE*ECT za!m_~Mw)*@DRt1ciaHkWqey8t8k*fYwgQ;suS=QpmAOcnM=0|IWsWIxqcSg6 z=A<&;tju>R^A2TxS(y(g^LxsCQkj2J=A*Kavi(8&hF^r_y5u=xplnp)p2uJ>O8X12 z7o`1p*q2HBZ($#h_9tLpDD98KzChZ42m4{t{v_;!(*6|eL(={dBm&}9xXbDI4aF3MsgJ3@x_VOEaO;ZJT0~PJ~ z$57J!qPf{UQB{m)_asA?Ii&@W^^IH2Q15zak<@d)i?c;*Prk|7u`qwvBK&$hgw5PE5aPBPgt zhyf6!$sY7*;~z&Zk>T-AplR9T{|%upu)IMsJx>_6Y%6L`yj&$Tk353v3Hvn+Mws|u=+L~OX^t=ZpDXD%3 z_3h8W1Ax!VUXTRB7kt|nVLJvkQZ(&GVU1s|G~>luGhVFHc8CVBZFPwKDrtiLW%`s71OCWa7?_!$Ixqtn$n;%bO{@_YHFOn~pNeo)62JXxp*$!YK5r zZw1kEX7&sPk!kY2&5rDP3C)#6Ybh++rb4+)j^)Z7QgukCW1?_SI+0J?BI13AaO;{( zj6v+tSR^x=hzRey1RVS=X-N;Eel^)-`(72E&0;?;3I_}C`(#U5`DByj{s7i+Q`m87 zBx4ichbX*f_SQF9Q)y}d9a0Wy!i^QWGK3r>pe{%`b*j-lj_QEA5jJjCZOn3iL|EdJni0-U4)Cn>-h4OpW9 zCu_jTHSME`>(|k$ef*@-K7Oj($Is9{jt-6qQygZ63iC)M%%eKY&k<(D^s(nL`x|>6 z6AaVLVUAT{eo+bYOC9D{2y^W8@#=B=8?PQWeJp+a{>IYB2g9^*n3XEbuPb4Gqr>b) zn3cgWQWm{xf3oORs?1K&Wp+wUnMq!rus>d&Fr6=}_s5sj)A_P$e|%Xr^Vt7BCE8C{ z**RNh=WGQyM+44LfYUVKGzC}(bE}yiw9K}Jan_ckcqE*43TJ%B!GgfHQn~PW`EohE5$z$5jbC3(a)iQ6*n!EPs=luB595Vv}bmGHaE2D$JGA z>?@l6%{lj@NgJ#?6TeA=vWi4KF0Cv-Nqj&pb8VJMV*4n0aHmidcFxX>%5+kc z(7BR9e|yJch(#7dN2yg>ve8n#w2??pPlfWKbTQr(nra~xqr*YepfLV8N6pEwQMv5g zkz!(uGhp|#SYwU>lDk*p6*|m7x);<*hsj+-PLd^5Rz*a55-AXET$Uok#YMmk>;ekw zW0vu8-QL{i(JcpZS4Va5E$E7wuHs!>jQ}MB7alGX z7ZW5Z)7!luxDZb7C zpR&;bVph^dYsbQkAdEcSJ}h95jh#F|zy)s$brTKt#mqh(uJ9h~~g;(q`>F zeR|*}M>=y=H3K+hH`z=g6{eucune0F>-Z1GFke8`LB%_3KfI)on9+^#-|wa9=D{;H zGt@9!*ie(~!gIFwf-I&=ZdJWKpUf=Eg4q+ZI|ibtMjfT0{E*#MN)gXX{drfEKZAsD z#AdKL{egbGKSH{Yww|U0zqD_LBTlMfn8Vmd8>a!Tv0b(6?E!oKau1$$`xUcIQUj(!DZjKIK2qOo95gE* zUCBpc-rwPyri9pmgxD&U0Qbi1nYbt8qW;a8yHEaYrf)*=Y$9OKUxw5i60D1ukS!h_ zWM(Q@7hgoZt7hdtbXA;NTNMEq|K~KG{zg{C2kiayN9U2*H!BZis?DtDSHyq$6>)BW zmH(_|Wz?C0m0IuUpVl9>LWrN4--`Yy0a4=E*~U^LzaCX@I9T;Cb6uDtvW+VHaAVm1 zZ*f!9ldyhdz=?h3D& zn=gUUy|s)6V0>x@M*p^k(X-V<^waZa7&;e@=t3PtT&wz(1FSyQ6XZ5qpOe>2a!HcNbOz- zSlvM^>HDZpA{6ZMGc)p37>o7zjVpKikR$Wa9~ih5TBR`WzBW1-l z3$`5FMmLd43ghcbJ)X|A-n^>J{au{W`_vWbbN4 zX}z_gTgn7PR047`epRo|@agX1HoU@;0|@R~VqCeYi|G;VDr~1Rv#}~-qI_c1Z-K4V zwPlll@`(hbb>M`wJY#0-##rIz-8E3D5u2UKwdUH0W^=46X91c^MaKIxYOgD(y5=^> zfqfSb?9H=?wccNltaYMG7EfB%q-L&3xzkjGOQ?3n3qC}|w4hVe!nv+P@6YjCm#XDC z6B8D;InggLPrV|lauJmsIX4dQ?r=kH1_Dou$lZwo3Ii09AEUA4R|xOdY&leTKWEF3 z97Xi!3Fnt=nIpWPvW1${UbZv{?{T)+<7No6FWlzRQ)ccM)znCuyoh+x+@=ny*00g~ zGYbUi%1Y%fyg=&qa~YZ6ZXch~qDqsmV0VrQ#3(_df_ zkU2aT-6$uZV{-C2p10Dmblfs+Cp`YLQMHzG0IB7~L}yA&48WCv6`t_89n$N;*jiBF zd626yWnsr1)3vC;E}^>8kr3MfjW{l)Gas{^p~vKSXy$PCzQR!^HXzomX0efH<;tf~ z>lt@Ka%%2%{(P!14wY4rXkWt9X*617+qR{ce2*1`tpU_)invp7oQYcmw!qv1k`a)+ z*N^6?cqN)`mtb|T==7W8KeY{e@)A`kE|HUwGX?Q+%6c-gtN`O0Fs=ZbDpQ*6wNsj# z6wYh*G41)9SAcW=KBi&MS2&yZF%7#};cVGQTw4^*h5Nv{P~p6GAL)6m!nt4{>A67R zY~4p(TNRGC4?66(MNC|zW*w4tkkX>5`PDz(^g1O0N%6g&PFBI_k=1uvKnB2bsx$Bz%`Js*O*dF=UdSMqj~ zfn74K9sE?Y^Sb-<%J7-BcRxtF%rZ2)C*>oYc*p6H>o6y$cEIQYV%#meR3& zr|^nElW^P15?!x{e(cO>OhLUl zJw5=BgS5x%;L*t*AA-kR?XeXe-R$uIJZ{i&oCA*@_P8G&eLBQ>@aSca`{3~l9bywa zT=uvZ9zW3@=fh(zdwdWck7$oA@aSickHDi}$8jkAuIn*TZP$VG=-W( zli6f7h27J!m&{9n(e={w3SkS4(ClA0s<3XmD1T8O-3On$pxt%>}XnLI$4@JsvT zO~#Pq!xD`<@GF-|@=OHi-d7}fNR)>Y@wsxmLabk;&?bTwk{zGTdw7a3AEcn&crg2ExUL(hx}yf9SKB{0qlJZA+36+ zd5wu#PC)}crL1kEPEn*#W$Nh1`zyM+ANhT?FsQ__R*$i-DT}_rlqFt=eeiy{HK?K@ zXn@}hVaZ{FhAV7R%!!!wHs?v@gxn6N)K8;hH_ODJnf;fW*_k0VXB76Jbx24SJwM5VzI z;j+*TE){Ev1zKFpZ*kpCLgKkeNx0J5#zEMeYB`(Nj$ep5@rIx^tKVS zITco-YMvHV6GDrsX6ZZZ~xK`C3el*`3FCGTG#c^xr63^D6S z$s6{Tu&W|;9q+Hc&{d-vY65CdqpFIm9s~^q%UL%qvIPoB77RhnAcrMa2^wIJ-;}5= zBP+=;>|tgEhHjV&z|hU2l<~ZP1d+ncLpalYbwIbpJj4?84TZU+d1i#vHsd5*wqlA! zI5}22h1546Z_cfjGZtVAwL>o-()xOEAJ+rMe)e$z!5`-=3?ugie$d#@zCa*gAoX!WjjTRiGZq?QIv-MW z=2r4p(s^8fJbow`x7^?MQDZ;*+ddi$b0~-TmuoOs3a`_RsTTulMVO zq;nY4`GBHxP=(H*rZWUO9|*?1jKh3Hh3T(^Iar5TgfJgby!wRZ)h86-lN!L5mBNMk zE%%kN60YaY@^acWIetQd_o7c`sSgnL1Pnf=U{Ber$!mNu24q);44&|c2-0bRmR=bw5hVy!lVYs6Jq&Lv-?IB-)A)Wr5s{x-4#MdoX zE{Ja*R(!*VrfBnM6}&q{^KKZt0}_Vv_ZYQfeL!do{(cqNU4j1ne;U)@CF$K=Q;+3b z&TeBrb2+<%^+L|&yw}*zT+VxgVdPxSEyjN4a&8HRk#jk>8vB{cxiuI@&dc0p>}Ou) zwqO`J|MNa$Kl4BD3x<(%Iky}8najCdmG2!!?NrSjhT6LpoLjlm*w5Sw5OV9TKxLY0 z8Nk9mmRokdTQxAAR~cV|W`ZL8F5h5v4q2^rc}K$QqM4yVG4TUt z50Bnl9!khHaLZkdG#)0hjY%u8J0Pb+1aQOdNhVK=5N*}r6b?yjiJj!H3ukCP6xM4G?8C;xW7upvdwEJfKJ$U%KMeD@GxBZ$j7I)GM+k$mR z+S87EKT2Ipe7AzjwM3+409M7r;qx5U)Uf?gY(--iD8ZEv}MK){|CC{ z!f6`Px=!O{M%_b0ysH>>-FE+LVvC?kR$AlB^f8JAxi1kOCF@(V6a#roL_kyr96U;f zVjvT*i=-De2YC=pM`j@(W%Bv1$jn@e?2l^^=9(O5ZS>3Qd#G_(TBJty5sp_TRpw$W zGe*4lW(~J(?=Y_2(&daYVW;SjT>0L#f^l+NWopb(2^x$du8*UnGI~!T*13+ZPES>s zG16Sqabelc7?*J(QiwQ_(YRv|KJVBI1hx{Q%>RnU&VBwjIWJgIj@c{f3@IC~Q>Nai z6%N2tHEwk0!`JYf^-qyj;r@t?wEII0H}1-iHSK;3_A%i;%F%J+0}HTKa&f^>ltk8V z2$6!8>k|In>;Td(K0F-QZ0eIL@Ad;=y2{>Vg{qd>7ZdF-Vg?J74b*FNxSxee~izkbWCz8?l7mYW#jLmimC0|9X6`ne}HuTGyPzX2Kd3tl!06&BH4M1 zj)-LI7WG96+alTM*b30Nn1XDg?`rj}1Dz}ACz9^x&pS0q~) z`Mm+hf{{nrJY(cO6xA_|v3}$i4BR^MaW*GP-f#g)bH70;Te9)xmtPiXwVjAk8EJLz z4e6aVypOidE{yyydxHH9y)_+KMsBO+EytPI@KaNifNG3Zg(0`^x?c-%%F z_Y1IoXnIgCwa!wLK0gtamhPb#w!b{1^5}j}Ri#Hj<{YN@GgwcbMsfJ)X`qNpnn7%7 z9v+&M`*oSf{Z&eC+rs1>_%pRh)S%s>Vrsi~2WuMK@1Sq^onrQy7I(78ABpPVP-SzS zC6BUI)wf1ar0*d0{R{Q2TL7bHYz0)Y-2{06HPMh}@S6!nVvsjAVS617#@IZNk5W03 zMC`ZY4utIbMJ-Nt^@t-KBmMBXmK~c$-o@x!NB+v@B_r3Ou5Yf?=$EFdYqVp^8g04{ zvbf4*q>Sna@+mWVWA^x=2q8VoNT&M>zZK-nwoSFvR5yn&zT`KDkH0jnIlONg z$dS$AT6j3Gv^nq?Znq)-%vM<~h5E(~xg}{C`sRxjlY{#&lYz~btl?Gf^TkHiT`cc| z8)TD#ZJDgQpFYC9PsrJ5Gf~ zGQ7{09HYSpUwVS}oV3)=dewT1mDbz)3R-WIZoNVNRJY=vR9f+OrnllxO#`V;?Ut8n zJGDR*`)kcF&XoS{QdVRWvPaJrn6gG2V>F8Ah031Ji>baIKYQO86%{iY=o_OoeIwi< zv?FWZeWPqY&XNa%-6B-4%jkQz`d%9f^oS{Ppg+Qv-2PDYHxumBhCKdo3w`%0^FY4g zIUMWiMGe$9mQE&HX~l4z>JV?2ePAg+{2#+_IXy4W*71F*s^`!>iSAimd52izQkD7k zN@afM|36*P>WXG|)O5{kU>ZnuMVYDpsVm~X=px-0WlAx#y>yV-RXQ|(`V3MBhZ_0( zXl@2ioG{sS$Sj^X3AJl+O%JnJbjtC`5;;C;mt&Vhq^nE1I8bHpGyeS2TUJ|o+lCxc zvbpdiu+^V@3LuVYK_!QkYOaa5^7EX*xjG&_v|Cd(vkS_PN;5-4z zxU~CW$kmJ*L}zLS66xHXl58;>oQdN}gvoDJrUBBo>iLhq3f^^}lw@Mkh)W|Or}onB z<(3}u+kG^~zOgP!igQb}Fh81&jZ8x9Wa~!8Z~@UTqS@Y&YZ)?cWCxpPmJZ9SY}lEx zq0iWuEy&1x+$(I!-SSCwv#1i6Ym~Gs)MDqpkcoIoWzxPe6~+~-8;dm}{3nIU#9C~XH~>9xbJl7LN%lJt8{X#n=p(ZdHz@Ky$t$9P{o^#Mk6 zh%d_FO8|#4o7A1MhZm8VjgkeU%501*2f>mcOFJxeWPxg*J(DaErc9QXQKwXH-G@S0 z!c5xkZcMBudR`)5!nqrXx80iwxa2)#Pp2Hws;c{Bb-g=t=)&pse=KRIA~lu2I<8`; zqOT*3WKvGvQFh^e05v@si6kxeJ6!3xs%Qi|=`1}TLRZ$Oe9152`*op}pC?;WSl+jX zt3rZ>t;pM&yqy@n3jMFGdPb@_kNC01hBsCDu~^hzuY#AX3Dly^ys$&Ihv1}J*bI-kS6Hlr@ih3=WKS#mWw`3h zCnQYONOKQ`t(j<9VN1~pc$w}FOW)~)E|d2U7S>fy?cuk5w8?OXFk{W`~JQK`}k%HLkTFkdDqOI zJ+=a;R>HG#3K_&M$>clKcX*c=y)NCayMB zNm$t{wxCz!`L{QaU|8kPm#bzSv$OLT9d2Wq%r3mz*817=Q1C)h9N~LOiz7SRGlKK% z6l?_d8LE@-3l_E5*}}*J(lK%)d>&`V`qG$9898+LVThw(_mfuL&(aIfz}2CjbWImD zy!z#7dQP^Ed$Zc!N-H_j;SCyYrl&&Ob(%|GBn@U7CacNQlJGsA?vVP@mn-@brpatB zutKUP#Ld7e_cr)vo@xq;>pj6{EDtVvA1ejuzJ>!*fF`g>tZ=k6_q&qjPpxyC#HnMt6#$X0T;<>rh5crL)^@sRkF?O zT)ub=yghp+`RR|pip#31MT-`pKNscqG-}DLx+>M#*@6Cw{vgtK>|zO@Mqa}$)X0El)dxGRyt+)Zia0e5o}JdIsDd8 zjeM-v^6_PoCewt{^AIt%oUtKJx=$+e8EMWoW}yN3HX3vCs3pJH$!>(>=WxuQadM?b zKJuuAz6U5V)Q|+OPac_ecE1;roA}*dhU9(1VH)2V#+u6B6_vBF3=$4x z&vK8F+^=+m8NLWDVPyw~wgkZo&z!jrMRPBe4xim~W2tv`&lURSwK}tHIVRwyF+62O z3r8lc^3}wd4tY^QB57qC-J{9cpN}T3ZfV^+mI{mVbxo=iX!r-NC&TWqz|N%A^8pOF z;nigG^)^K}fIfXj389;1;A}LWqygcFElgo8w=vURXdn)a@g-TY;Xj}v7tWlXb|>is z5?+iYoo;sp*(li#WdT-6;y0MZq``4{ub+NLravN+uwMnHDe9JJ@Ro`tW0|2?GAilj zPff;JhbW^5rw$~ef%x}{*A*YW!z5<3FMrwqGrBDI7|Kg_VEkAN29HC&<}z!(#H`sc zoi*`fyqYy}S&qb-xGG)uc%RPR%TftZzD;K$8JEmS94K?@ToSJ~7*i(+LXo`ffOyg! zAN~|65oXu&pL1R_)`bU2b?CU|V|+VOZ1^*?<+46mU!BW(KbQ47mn)G=rn9%4Y7phW z`MIo@xoimLGC)00qZ{RgO|fL7q=fAK?Lf2l2v_KowKY4iWo#ENeveTBeQi)pXs z)}hg9N$lfG(t5TN!a`!iam@$92)SDIYqEm)*LduTTNpD#XYW6aEnL538e_>8RmXN5 zXdT;E(WZ6LrYl8zU}CE~uKE|pRy*&AXlOaA?stv;KN+1R-WGaQsQ8hPvfnBed|xR0 z8_WeCHPhM9b>7&b#z-Mc=Ex7B)<1*hovq`=(?~W~ zS~>jF+6jz#TD$pVZ4OLFDSLYZivwBY24yM?MVyL=5`nr3EBBBbYH3X{$u)@4|WS}F$-zYQJF`SvwEzRY!HG^j>R%#GR3C*ctvMD zPtPe9Q!^}gP(c=gd9z1vv}|t`j`(Pm&(?!TJ~tw-1t0vL@{~?JTQNoT?6Hu#q(rTq zV8?dNIOYj}tCi@q8atcDdz6lCX6G-OZ|X7R`Rd!EzVmsauBUV^CgP6EZ!l>HnZO(! zgGEp1EE^rF&k$S=p9=yP z72YX$4V;y4D#L6nQ(5UI1#wx6u5#B2eq2K$MnyI*7ko(V4x$VMQ4$*EejkORD^*38 zo+Y}~!W26OHLCkuh|h|eyvLL0zYC|~R6|>7!0Z}2T#C-(A);ILm4AMjr5Dq!24Op} zBn&^cQN+*t5sUKNbX6i2`iXcxFsFQ=>9}HgIW%G_( z9GA(5y%R9uA6PbUcVg8bmci2qsH)Vu-9Mv_$Ax+vgDX34@L#Hz5wH(6Ba{wd52W_m%qyqGd8pL-$ypDO>K!Mp))05#$b zpm_PZAlA<~la7$bYJLLTb4+O|)ssIg#EV}lVviW=!~|Qw&*eTpCxtxRFuygBN@Pl8 zdu2Qs4kofal58udQN=ze8Q`s!M>gCy;4q&1GHS~+V&dnjlzzdS`FWs}e$FH|37%?W z5`22jI}vo&VcO-Ve5?;X*$IBAi@>d|LGT$8{E%pC3xLaqQ%3OMNld!UfIaKVAhI5h zDIQea$c0@X*s+|?sUVXwh;ps3a?Mw+^6?a>y0B{v#n$ZZ6)c=g_s2+>DT}~usw94? z3>s`t3fn@z76_1ECLO5GTrONUICymq_lcw<>{bPLju5UqmI_4Iz~!GF+_~I2_bj8d{^*69qPCknR_#GBosKIzyq9630^JSpZK*zCEz-emyBu_ z>#KkBa|18;{ivm1h{iZhL*4mJY)MBMtFubkp; zQ@w&%DRbS3_zrs|!+t2-M=Ra<#j|(g<=1P!+{sj~kJQS`vg8*J*C6$>2g%)CKiB=6 zl;@{Io~O4Aw$d1B%RrOr0tU92qYuk;ljoEb6L!%w^TOO{OQFa0_;6L$7B1hU;8R$I zKdUeU5lkU0n62jVJi?KFUyFKU@-tB}t59!qaWi_hcq_VH*qzK+UmOu+V_P7AZ1)O)a&@n*r#Stg}du_bf;ZTujcn4qzQb?5kNqzv%Gp%i@w?&HGQ^S>Eiqy-j)JAVah=@!xPlc{ zRs~o%5_GDpuc54G#uoPYgsR{bqU8HCkj#+fN3hg$h#%Et^st(YCY_wD9OYk8;gQCPJb!FG*^eMOTOG0?{4Z~s#H=Z{R?GN#D+roIC@r`psF=@Xl^w287cJwP4r>sN$ zCG8lOyh0r1&2nFx-icFrbIhLU&9S&}n&r){5>q0LzlSpBE)$h;J+`Tz5orG;frL43 zMkxQ02+k>8{tk5(K6ruGB-*bS--afL#)$FepJ84nhtY+2`Sdn@F9e~(j|PB$QK$%= z+o6W_a@gJ|p>ja@m&zW0+y{Lo&%=ds!d(HGN_zL}P@5N--mfS-Y0UmC%c8KHOtS#c%W&^3{|QWcb0^ zMovL4+at|(X|zfsBaLo_vs{|cqel6l#7dQbA2TaX6nw?51pRC}=-1OhKc5cz<#fpl?_mfZao1Cr&Yu z-}z*Ig1#x`#y8wHq`ssn| zL~C^4f!msA^A9)z;u8-hlGJDE$>)d85I7nnCHFJGStaCsWdvctBxBK$$)qZhht5P2 zTZ-M&sz~Bs=X8<>K+6$H#~rPr^}zp1D=3D46GW|PTvQT4A zsP@>m6FzQ~8srjeMsvJVp^5bbxx%iwlpp_atdVSy@nQ+1W3626KEE^V43 zrK-Nkm`bnnUwq9Saj@)vUyt!Dna_sgWfO+#mtlv_jRSl23Xbs<*zjttCrB-9lr{Dx z?rhe`*gJ~VXy*X!8b*VUOVQ?cl&W#g1pZAg5?MZ5_*Oqk)B9>I&94S%4%W~d>8PRk)fs5!&f%1s+2!t8hG|!w#kM3Hy zlmR&Cd$!KEnW;evj5E1r5j#Frophcyu0W^pq*s*h^V2W!rnBP{Gt&ITY&;>FW@m-w zCuXGiO&+C4(|a=pL8KnwX69HOH7^Xsimjr&(Wes)gq9fKiC92n?hTN6a7Hp;^b_&mv_wR@_ZRvzfkZ4p=dF%>kIU2Ebrp=agisZN zE_WCGjJemd3~jR13a4SXH-zMkp7E$UEuP398?6pI{#Fop8xS?hTy>WG?F78Af{khH z_3k>%Cr;s=NNR`g_Os<4Z|Gdq=1tFi;280_{@lkB?7<5ROk0=V>;w9wps_Qf-pPq7 z9V4DU$Keiw;vbcR_QFYWuv|P&jl8Gc>=W=OsD#}&MF_PSnqaFTwdny8;83wYcC4No>9$>$7=@k335& zIJ$;bsfO0x1Ecle3`u-2Kz6W(?B<>tvioQwN7vA*P2$%Nj8?G46ppm3E2=vN6%v)T zNEBDksi8PyJzXq>d4~HAG_Q4IxPK1~N;Rgx9Xh4orroCIqh-HXQ^GgOIcdMAx4oN? zyrv*1U+-W8HN zTTD3>HzG~%-I!Q{#E<2hZI<|P%aN0BRwl7GZOa<})ZUm~pd@pRPv;^zRp%EPJ!@p0 zUuNRc-ruQ*D`C;+2M{&L=pW3TWp|J0+yNIa8zXA5+x-Y&z5toQ; z^yfhMu^+zKlP8?`J*8Q2Fd-nPmG*~&NvB+iX9aiigc*4H2EyM&_&Z)Sa6vPsmf4!# z9cQy^cVZ7OtMkqB-!O@Ejx1|g;~3u#$*S0WJ@u{~ed%oM z`bY?q$Jyv@eHr|;;-?Ki?fB`yPbYr5@Y9W-Y?OZQBy=6PmBO}G1tnJpeVz1mwN?jf z^@Fuju=c88R@etuuclrSrv?29rSh5*VS1atlbZm(HSI5TW0^+>(C)H zgxpG*Xlqj`?4TfB6r!s-K<6tB(B%hctIAHttU-2iwK|V#`p&c32gPD9i+9KY7YtMD$I&-3Y4>e#(Y8Nsc+*l&hIAHKDzNFaxPeZ-rU5Kaz`|rWS zg`3~;;=6j>9bs_^S8H|HN*Ki1Udl*IC!UaprFE7k-7@Lnf)`H66i(Cm*ru^-`tLaJ7<rM5%l3Mx#16E^2fWH=T^OIVOU&+WGXBkpn7kb1S}^R$FVs;mSiFz1KflqVNS`JGi}y(x zgfF4=z70qDo4tB_Uio3DMRP1Xa>>uxyj9P=n8rJ`%s1V45HuFXBO{pKYa5zl2A+(4 znMky|w?L7L67Efeo6pu;#i*(FjpFf%Z?ekEIx3=|L6ONz<7Q>f5xq(%Gd5*eXB8r* zTwZw#_6OZa0T$GWa`YhMA|>&4zl3Ktv#f*4WvZfR$*C2TsEi;pnv<5??D!nJqtH~a zG2Z8fQO9P+=j2c#POKzC66q>+iSm5}H3L_820AC1>w9p9#a(IgjKi$7vJD`%bndLg zge|K8(sq=RZFm(|Z`Z^zXKdNbx6D}AMEOzBmd~>W$ga%W!rR63-3DuM39X$FTJNTxgzQ5zL$+)ovUAJ~ zwW_|g)S$avLbwG85%0a6zTFrcXZVKR59j=Ss~1pQ=~zJgntXa>Nam+?Ebb)oy-sAT zP73lU%XfunM_NZ?`A8%)mWZSm{E|y%O`l&fzWl@G&H+;e-_jqF4?N7MJ67CM568wFFH$dH~5ao_2>hrn|z|vh~>DL%^0TsiuR+d?diQAWTSGP8w?UAIFuXsey+2ax{ZYU3g!jj4y+01`PiXH? z)Ovps-k;RopQ`o#G`v3r*Xrr}ICGn3+wGV8bOl@OqsB#nKjP+UdLKm#?lv(s@k7;Q z9@Xj~w)o}n0QL`9Ch7;U(cHQN4`9E6J9EgcH(7kaOcHm)x=Nr!Tn!rXd1}aOTtGt= zz`z{n=ji)3eb3Q{8!*zOF??&A?-}UiT`ktWgPq=uJdYE4Nj-&5X`p%&bb1cIbV@HB@4-WasIwPz?opg_X z1~V8@47$$8pv(KR^uGtkn3USZ$Z+#Tp@b~t^_vmz3kvypAb+%i4EOkFC1rD}g*vZ} zsP|Qc{97R3UqOa@{6Qec@Wd63GCGo$_eF*M1h5~dV8cEBIf)&fYIzN?!`_z^HYR?h zw2;_vkMA`YTfOm?w7pL&?B4+sQSY+~`)Oc*u!0Tu_?IMhY^r4=uw&kX3OlG- z0~_w~FH7wBRLd%0$Gy)f?22+OvEd&7i{wdSss)p#$%OZLh1~<}k5{na9{-QTuA6GX z)y2s=@9PRXs96IW?(r#!T|d==izAcu-ZvC>W$Yla;U52|#BP{s!Nrov2JdSMJE(92 z8}9M1$Xqr~wOjz~M(>*nyC2w}s$j#-o1F=`;B<2;nesYtjJ_0Aw!FyBOEp)4 z+W?O30coC=Otsj_7FJKZH^Z40$>wBQ3NaeYuzY)+D8Iq*CuBcr_{W&{3V;0Z?SOup zRB9IXpf%IiWyoDm#~XZK#*E*nAurN8KLE>b#bBAo*H|i17B%9wwjmG2#&So0^;1WZ zZ*mZ>q_EOoNEWjw*CTp8jMrm#9%{+S6v*xO0CuueQ_aaEF|p9jicby)BBUy0N=?Xe zuaH7M2&K-X&_V+uOO79|>8}ikdPRpsA>GWBlQswNr2Ub?3^PnvlN@TP@Gcbmru}2w zp*2%ze$zf=3Tyl~fbAC9Ro6ohPmY9eoCfnfX8AY$l`W8mhU9x7rhl#uC+dFRuTRuj zIOg}Se$AOMoZ)%C)4XA`HMTGa;=5|zsPufi`sn@^OqrlEveF9&2-0A>PYJ#$P)r;K zXq%Wo^3u4jH*}7?S+ z5B^B%>Bq{MlVo^h+xnQDUbr|MUTKf5m1!s@MBDWc(36~^c)nS}9m>GUQD^k+x2S>4 zbEGOSQ#`Z%z4S7Be1Z(2__%{<(Ql)8`z;htW^Aq9wty_@f!~Bz7VF3nRfKS?nA5kU zidK5z0>vHa4(2na^Jz;KrDckii3yY@o;Tzj`p581z%g8v9K+qxvD|9nW;sbk#Xq>r zEtdP7nguk+zfI1`@6Zp`p6|l`5bWW}@4=|ICchu@&mZCegV)MC&agDq6!Lz6IfaEy zA!}EeMAcLpzw(L4PB8%r>RPdJy^mEL2%SJAR+HiVP!cdC%2awhNZ|XLfFxf%L@O$YbxZ$-YS4V*hqw*jo&nck0i zJ*?jLeiGu1$=**x*ucz-GS3HB!u+-0Hluw=uE#tg%H#7?quVp4rLXXQrq`@@aE9FNzgKkJ7YfnMTQ6-$~ZKw0WoZ2v-NwcK@RE$FOmw!F!I9dsfVb-y9d& zX75onwsc+oq)2o(u6g%<9?~1B$dVa4I2lfRzl6U0D|pzrLH09Hj>AbSp6_v*aUDmj zP?xkVnGciTe2y`4!{)(z9lm(tHz>Fy&ZM3OLDq!5N&M0fb1x&;Cr#WbXIzX8h((8k zGzyf!q+bF;alb`zpW3Cjw{|)5$!W`xsvNS$oaM3{5Epf&IB%8A#AKPq^C^d^CPc*I zv=&7=rWW;|4le53IY}>SWL-^9;4MhJ+kiO@MXy!SGb7$(oJhNFZ#&jo6w$|nL|bxE zy?z%p<`(t(oyFIgW|(fi$1-=}Rcc{-j}t+*d%sn6N4@Cz1UUyEP3QdcFe+^O^q@n+ zt_t;=7ClFYyj+5}7@y>N6{kc#g&OcQSM_Jmd`g`XR%mw89@Wj*Hd21Dzr%{e^FLB& zjIJU&+fbf(2F&!HCH$cV>XqF8KrVaFp#hq<_d9M$5_$>9FlDC{FTVvv|9KQWCG>je z*{G_qNYsknbQ@PPd+@L6l$B3K?4)&@FeC221@`J?Mp2g)?ZGDkXQp1q=MYG=_nFR3 z3CF}MU_%i*!kNe^lT#66Sx*RqKT~6}MFwB|nWVJ-i=x4zY&yUcYw*w11XI}A_%EP#nXt*upwQVPrL(J|gI{oSE`N46bR?fhPln;05t5h zC;t%Q!&#Gmgt=)NF8MIVonqn-+(M;kdVk_@69^`ytVePo){i>@7%?GD@6Q!H?>I2$ zwpvPmnMSD#c<)en^$O4O{u)5Eygne+#`b@K*iih_5dIcGI35)KSeu-`&zPJ(oG1^# zdJWZo3D!w3=l%->P!5THiR-4RbiCIY`h8Nt`vNAaa2HY(Kk9iNr@=w^k ze?hv9y&p&+ds(1- z%SZT?k6_8fsS*ef?U|`8f~=kcgmtwU_-`m!W8&qJ`L#(os5&VXgjtg^*Wm8iyoAI? zhvmJ5M8wj$YsJJA`u`@e9p*Tyc{46(i1kY!=q^ZIv9EmVe7#R=4{I2o)N`tVu>mD& z8$65iM6ox3_F;6msQ_TDB~OcFNQL5TREiub`^9>F^>#7H&wWnI!@vS%t;I6#^T} zCDyz>-L<{E!+~U1Pc&p`qMXSs-fcIS@Sb8NLDk{c9q`N|aXe5Z{x8k6V` zwqS!@gW+x@vwTd>xJbuFu=5CZr)P1hn%yvR(yLK7>=#uu=WO@WHn!1`gv?JKVUhkk zWnX};$hJ^-7~qQQ9pIy!dvgSjrgMTvfqVz2O!=$0{>nwdgpe~Aj$qic3dZvjZ?D$sDwSGU_8qbldvZhjOS_M685x$@%&0c!Z31=I|auXuLGd`x}5)v zoIjQxuNU%c9rP1icXb8k|FC;V>4dCzC4~E;q3+zvnR}kC_N^1{pUAvWUQ=W4d1jh- z14VMdu4kn8)6-}-lJ~BsrSA*XzV$+F_T=k_a)xk|Lfs>0O2#*lJGQqqUjCfUo+-}+ zjHi$_Tj^qk@m{0tlSV76zs9ork}m!={0 zK>VfCMx=}LVjB-qny*x2hf53o_*phv(k#(zNw4KJ#4N2#hs7FFhhUIx?OK zkhb>Bt44^2BkA#0nIUUW|FqCYehRtIj0G&ybo479^Z2fS-u z)0W%Qsj<|ch7yo*+jIgBs!f1!=OO_IY0j{CY79&HWVwChNpRb37dRSS$V4r#15&R( z9Bn3j*y~i383CGWp*3mQUYEp4T7=|vtMc5DCCgBo<(|UNcZ8d5%gxCMDD5$POQf!hRjK?s-Yz9_hqMLF~pxgD2d!o(WigcC?T+%puK z9O2D@w5&u{en&wI7N%v&yCm^w`g7!?8Z}P|7?n8+{0V;ceVZBLm+mb2h3gJfQPL-VD7R59***Wxy$iA$}bjXkoh0eGmX8%*GsXR#{s`8OG+`j zb8JOJKqUSzX5ODq5C-l|yc+Xh>9rPKVHf6&+2Ry>(MBsXL;y20+8DAjV~te6qj4)6 z8>pwBq4_`@7;9bFVCv(beVERq>bM4Z8AT5~3i%gzu<3mB-5=|MXg zmPpxHc;&iecnt5+gjX)i%K=-yb7pKkoO1>rqdJs&t|*fpHLEvFt>22%%?rS-FAX-jw&Kq-^?}bSjcgMX~UMWi~A7z#M)Eo5P$N zQ;B3ETPh{#cSXsi-;Jf-;X6?;O%SJ{aRg>GQj)H^;p;=bXH=oY9fh^>a5e@bb$qBWoi^OUsIp5wcL(M6z9n;*of=bPjDv z##0SV4RY;$ZBsmH&w1?m7dO1-ivN4l&eX!K0b)!* z`u5;Gc>kv@ogVK;H1l{!fNIZJ*_gbu+7CR8r=6=K$kawKj3+mfu~b7Ql~fE)Cgq_K zS(XL76!z3$Qqyq*d0Q~S8OwH#rU#;`nPqZ}-&-B;Mji2dpOc5PSE@-NCY!PyH7LFh zh0k`?60i$?nsOTEzmJYRWN*ZnaRN&Xc5yh{c|G4`yd#fZGo8q{+Yu+ovA+1-Kwv3m z->`Y`aeF7iVpA$#v}EGeo>=f5kvGYH!HnhC2%BGv97s6Ss2utkOXTM{*<%1W0)RsZ zkan`005}_f(+Lo!&}m5H2nis2tbJWJd)7IlYvt{+gZE|BeN$s$DdNV9Nami$w4%}K zl^Afo*5ld~z#ovbD}bvpIuzh}jnSz9TQo+O0{m8EbSuCnjggHi$P*eR8&iP%m^Kt4GWV4Ucpde5BIE@N&u8)&ckf(f{CIvaq$4M!OKa$HfE67G4 zr$s^h!C*G6Agg?wjDq;%$*eAg#XgQMh8`bBm&34+qYJ_xZDe&xEb(!4QTQXWoP!j^*V(gk734x6r%yrrQAf64LHs51>^ueW z#}-*vK}1O7%xB0>%;scM*DvKen#Q|G7W7q=Xs;dawAV?-oqd^^y)(+Yb!KmhNcy)a z{}-zL+m&~_@_ww^yH$C2DDUU1y*rh6r}F+?P2}~;zf1Z5w%Wg2d3P)CCu)Mnlz%p= z5FW2VNN9wZLU^(Up;05m6~a?B2u&Ixp%9*~L1@+pbqe8`8U$TF*?NWWYz>0uVYWdb z%&kGtY{)h$gq|7%T}avFzN<*KN%=olLtvgn*ooP^<|+Fia*Qva`Zqp+N_crlp9M0F zUn*6yiO0>7 z=heRRMmTTroj1XGr|*0xocH?9cft8--}!Dhzu`OI1Lq^Y^JX}I={t8Lqb~|`@-3Lv zw8Ep4yV&9$f+1Ba+!69#f(NKF zVgi7}u3_ID;L&KdD5+gS0B~tkY`+SD4h8Tm3IW%^Y0}Il238T?+kyc{2=I0p@C|;z zehLWJK$kRS#FB`+kVl;a#cAhms;Qc^zOFWDS3vaLm?Gm4H`K(cUZ>^Cq7$i^T*S z*>eX9HVu9|Lm z0ZJ0loL@ohu10O}QNxU?BAW_nxv|5L`*+MXO<}8M1(i!o+3`jYm6CF`vMZrnZS1N` z+XDyFpk~2>v@?(=<#a)RIx^53Axl>}I?xs+OS5HjxzbMrKhaSd$Xie&Wm=9g{M0}Ge#QGDJ8uDN>XgK6^d;t9 zL2!c)z8g|#&>a+*-5G*D{WZadF);UH>-iTuool6vR(^t{m%wFiq4EnweVj+;bET3) zrau9W^ImB~?)=U73HM0cs%zx?g?p5=bv76chI=qYnsyh_Z$4hmmHfNb)qD@`e0wwT zk1*Hs0%p~P;aJ_ww<;>FAsrXY=sq#;1%5NX??f@Ovx3JJ4?hf^Nh z6{ex@vOCk@2Q_sZnNqvhF^nNzy15VFz1^F?_p$t8CeCiBk_ z565a@)?4l==#-Ai~nY9r?VaKF$AZE=i+Qa8+%kJ)(%Wj}jcIO4l?(|^UtrTJRRK#;c zu;dP|l-&I4l54Lnxi|%1rIKmN)VI}^n|qo<2{1*FpW@sp*`x<7h|{OrNNLtz$7I8as6myK~Is z*WEHxA=Ss>jQ$OBKMQq8!acdRFT<(XI$ZhHTFT_-T1_Sk_B5`%jd4xQr!`PI9V^Nf zYlb>4%NozOZ|1#sVP2l-fS`* z_gEqC#$w^@j2~Aecjcbkx5<41I!#>G(Xg%1f@Ns&p4_){yEA3=$AXRGH>s|z)C=H! z$V>^m?B{UlgenH^}Is>oWa9=LdOswQT_t8nY6IG+!H93cGoDnLf%rcT42eXyrSH2 zJocCNQ7ZF-Q*X7F=H~}3sU@BW{`Xl@OJql@u$}s_dnW2gJ|1wCzc1r#lX13<#_~rA z+j7^*+LS33i1g5au=kMxpKw(0ZvX7MTh-oItWexUe8{F^7AhT8_YEd?WjgKd8Ek1E z%@%JJX2&RLE)vouA>E@<4Ix39T}z;Be6&H}Zqu0WQ%6H__|(H^P0*)N`6S_UvhPC< zRO6nV?|P51W&LK}X0W&`70%aT^&}Ne(!lx*K(n#+g%>D%YBXB{o#xS`h0A)01{PXI zY0Pbp<}S~tgc%+Mc6MO&;ad^9QH1+4V~u9fRc-&d z4AytBp8PJ^XM&4!jIV6YK}R@abIk7f7*)43;gwugdBF0t_3?Y)EMw4!CYv)@l4tG&KcR>chsy3EZVqZ*qGMrF>FMOwlm}8qEmAMr?L_%`*z@bc-|{k;2deQr?Tq9 zt6;Gu)*AlNK%zB#w2{^)PRG0%F|QaSN6Wn8uV~fEg^XyY3@eTz9khS(Rd+I~t(D}t z_*#{@JDoXdB-zYp6)L$|r7O!fnwL>JxnYmIY=yMZY9#%ON*ZoeWWCrHbPTpl)pA_X zv4(ytM8D~xN?N>CNxZnBg+yfAA_@7j*CXOG{8XxOoB6KE#8%8lE2g0py{T3l2RLq1 zNh^~V9|L{7!3wY29)en`FRf^e!S9Q;C1>S!^S$p*G`}S|o2xgY6AaM^<}7&y`H4nc zYIM>h@TSY0nI6rPkr+C4uz&ke-lK57)vDln1{XT!JJBha+Ul|tt%IkMmvw{5eVU;aBu0th`e(j;pS+_GpG4ev5Sc%q+KLd5kor+Rsx8*FL$V_b6Qyodm&YZ02XQi5c zwh`;-tZT=a6XZ*TzOU-!8ZJng-+BV8wlcogu6vCuoZoLI1UxAXZRg|Z@t>#tINCAu~&1#j7 zUjpDl2M~Of3Jy}#MU$JD2;n+Kds~k&CbkuXW$sqRVVdiCA5(+s4O{g_f2uduzL!MF!s*ycktAjS+lVn{D$3eSm6)ElcYN%DY`xL&to?fMn4a zy~Kds+tE>!(|jJQ(3rt{BxeL+xNM7u3lXD2)+5Kba~ZnfZ3epGfAoBHSqJfBDF5xM z{C7zC@5IL%eHT|_&C}HssTz(NK}`5=sSNQFUb*s2ke#x`ZwlWdbziRQ4zGyksl#u7 zZbaShRdrt}b#LHGXU$8u4Ph|2gz9E-bsJJ`dw*R12U6vu?>>(5Kd8$8kd*&nE`N`< z@(~6rWGH_RF8{-+@~@ht?{eT{GoL{DA64aFE#-eq`fejvb7WiJanuN6!jGdMD*F?< z?3^TSOLR><%o5zXRzu~MqW=}(J{dRuQw$+~`OP=HKY0z{+oa(8w7_?rz;`{Dy|xWL zjv7Hsc!PAtS_UZ67zyh-Z3S?c^O*LihYog6iSnDBE_=ha+i zDqPih%Vc%Bd|%{$QRnAXonMeTZ_K}>j?)cHBC^VT*T{$d)3zcdLB z2#$Rcb$?ma{S~SEcCPf%HXK7(c!yN?C|7rT3dio8w0!jEr%?V^Rrz;G`CpT^-Obhf zrLAooHG-J%>r&ZYxUy8Z>d$*7AH%oOcN6OThN|;ksq>ps=eO{&N59Qg7v}4#r%~0M zVuTZnAU?cL06?lqV(%9)9+*HK00Z9U{xo3tj)LJqf#JIX!$Vy8-1+HtbJPf8!tY77 zbGh17xN7(JjW%-88_ojB-)M~ez);-5!v?s6A0pjmgsn$R*oS0el`FFyz>h>T!C)ML zp@i%vC6_r+jwb>$dK3-lx$>;cw)6B?oaiw_UAAhNPOZyHsh9sq70dk9?2O!ZRyQST zt`mNSMOxu4kUG9>II!a&^B<>U*Hcf$e-^v#kN_iK*yr$q*ZMjAyY3fkk73SNt~^&}OpEuwAJ{1xB`pX9Poc)?27@oS#SzX967 zUV^GGdP)+;ZU#X5+ROZezMo0=-^5PJaVO=yZFiEF>LgD($@B2kWwx@)ja|_*0P%N7 z_$(73X|nr9n(T3tsplVU@8^jPcD8OLWD)P9Hr|+Sg)hK!ynrCNgx!3Rr}o%QIDy_^^ZkxGblUCc zCG>IYWiEvLmDVdpOmE*r{c#h|TL{^c{?ym>HgD4H+hj(s0+<`2brk(c=9g0rKTH12 zpVq0OKU2ioPpdo34%=~=to$BbejGwn;XhSYk;<-XuMA$E|35b~nVY#T7%!li@D~iN zHTGBf*wNoGImZ5ue*XtM|A~RvaHfj*7X~l-H@n9%Ztv27jXj1_vDc6>V9>4n+@t zKZBE~w=TjKkM-qyU#ZzGM-Y zbLyM7#=4R?X-7^0s5+xl)zUdxi@MS=+`PQXonycWo-Y8N7pWtYv1;x^ODUBRPzru~ zFrE)r#P}NG=4!DJ6iQ(?M(P#}g#bOJ9q3{jAa21FH4+n3rLaX(qhEAacBR~ zsWEbnm64_pRkm*W6dBoc^?LLu4UcEA)wo0Ei^~HvXOOlfWW(dTcDf-AuB|&0^e}iy6mu^h>Ppunbv(0bNl;%P6 zVQ+Ps9;3}QO&EB}nnFD)(38w2L?lTS-U4cJeLFR|o=F$ivzF@lEa-{Msw&NE;M-hl zY`TWav<2z|t+5$Q2{3B4C1&5E62nl6W}4vVlzEhLbLITD8?mCCBR%K{d6AZao*k>( zc`dgy#>GjfbnW#CXZQuQ^oI79-XL_-r_Rv6tsL9dwTPR7+R@40oj?1);T=j z6x4^r7{t`LIcx_+)`HnUoLQ~yFfe8*nnT~w?M<+tJJ4^d--NVaVyojeR<>R{CU5l@ zx7BKqo9(IOW@a=OZRu@m%h--Qo}u9L*iNyJQdPHV9=C6e9cpL58WH^ZJcjRbactQO;^A;4n(s-y*TtZqU*O`2woHDaHc;NJh= zwtVGv+G6lH0RN0iG{E?$aBJIb>eFp91?3drvy5;EvZR65?c`n0tk6M*!HineLe29` z5m80+c{~@OoP{Po(tLA=wtY6B_7TR&%}hqNgOGF(khSi?;TQ9D(IQjxal*o()SbE1 zT~O+-QtD@8{cDHq&PchRWhF(m@3uDm=fWR0qan0^n11?p8=PTAi@B;L^gH%B@F!>^ z^f|%fK|_?KxO?C`z{0@wpHuC#_-(dZV0&gM0L4#h82~W)dZIl|zCAQVY;DH%Hg@_v z^hL|xd}&N{qP>uB4#dlA^^%X?JJG%% z0W+Kb(iA4J4Z*VHKE8wV#%Mn*ZhZBU)}1q7d+oLOO{joah|gm$7o%d<*<8_JmZSZF zMMQEJw7rWX^b5KrY&eOp*1|?c&R}y$a@>3XWzC2Ec>c6?pmacV5JO+vpI|x|P6tfb zA>>-4zJqn;sBce@i<50AxX>UIvk2F7r7(A;pQ^sK{i*7}Vl!loA%E;JQ|-nn9m9V3+6*nY9L0)0>(Ev?>IMerJMZ61y zp+8zj1GnEyKU!avbv!UhHdRhCMBKaK`|&)ZCAKBR8dS8BB9~r5$fE6jWim%) z7QH94bSwk=3?|!{yp?S$y|Fg7R!x{8wW%~c3|_iA39i*CEM54t*m;ND@h|>2bsRIX zjuNJzBNHb&HeJOt%D&sZRL5ZN5`4GyQTf)gU}~(z3dR* z0qCnov=U~g4jf@r_=LQ_+*iLQI^N_RiB+5H2i8W|yC;+(ht`F{#wn*TJ^b3FSoSY37^R@=kwgccvN{Bo?yacq$36__-q}rzc1lVBS1G8 z^sG4%I&{kd>K2BL`lj28P6SgH@H^Xn(X#3UZ}?HFqG-8ZU~P)~?7Qm4N`P72kG8@> zgrF&i6O7|anCtG9)Bu?5`T?+D}7xGv3%A*&NCpz22KB$-@j1F>}(tDZ{ zUW@lMQ)D;ehUZ{D)E3Il9>GU&@VOj3-LQq*DKjuS@;pSE>)^ozk=(CUn4i$WzxDc)bJbtpST;8$&BOU79 zV+%TfnL8l6ehYJN=IC2N^GEQT7`ha{m>KDG#+?f>$u7do$s`0mr&3*PvH?a{TAxq$ zXkMAoGliCj>fF*bmx>(GMRsn<_%Yod%ItGVrc2x9c~?9)502+dTzzWxG*6A^rrH(> z3S>)WcnP4ZO*P!M(U)Mub2QL5y#74CLCs^Ebt3L$nBKZIOlKqbXk6QnQ({OwPOXXl1ilQZ(_nwv{Q|;w@GYo)H2PlQ=7iV zv=$wdr5z{Ov_{~__~c^SIcC)o!5T2!w8FOm73}&di^W^@6`NmelWkd(h_;eV9E-N{ zo+4dSskr|khwGW#Ox|YX%u-7Fjx(6>?Iy$*??6h~iBLX>(Np`f$FVQtg)&)1zsUDA zM{h&uVaCX9d=mkIX7o;3S?`c#cs+l6$L>_#JH`7|<^8I7?^52o#QQbn{hE01R^GeC z`*r30x_IwV-h0IR4dwlYc<)u-d)1x}wC_|}3-1Qc@?{EKyqbJtUm{nwoO8N6!gmq; z5`%};jqsP)hBvPuEQ{U^M!xwoa`yFvFM(jN-8+x%-i2Ezp!r-9*~yWe*D(*@(h{h=BY8SA6Nts^aDkb@ckLV7QyV&@t<8$7c3&a#hx&5%3miV}+OS9{6VLfv+?bPrIFhXAJGs zGtJl(Z9w&^w1t=(kHT1iJP+DjLRIo=GEJcu@9SCE+b^N(-`}R zsYRhxW9+KL^Ff2pVoW}AG57$+QtprHQmU6H<;>VdIjJO9ZzIXgX7n)=2Wn=t(Ucp5 zALrPLBrPYNg~r$?;@S@~8m`G(4w$9BhTCh@U2Zp|W{&w#JD?c%)SJ`#Nj^cFUL z`erYD(TTT9J6;nuu+o2;*WD>zbR8I@F#zLNKA~P@e=hwZdy;ofTi!tO7OgRWPAi(u z{kyi@(9l$rTE?Jji8tjSyP=NUbN z4i{E6`{s}nuvNKvZ1)THvhQVEb5QR?XH6r7#^s#6XKpxio^5&`z|Kz$`SU%3gJYZv>oVVhv!&HikhQV*>3XYYjXs@e(7V~C;@ts%Uk z-aJvg&SwWYiLVn1XVpJdr8Ou}j@XXu#SkAGvp? z&CB~r4|;lL+9GXR-pCw4--E?I{IKCL9>%+1I(MXJ@vlQ8g;sxu1a-tzCm3wC0fBvG3~n3R{QY#u|1jYzxyK@-kTd z9l>uR-Ebse9ros<>p1~_OW|k0reat5MJ&F&N|EQb*pt{(ypMJD)IRkl-lyWXtquf8 z9XE3V{HE&oELOtLsXA_nJ#wamI__uPJXOaRxQH)I*bBq2)-WpM)_51HhAOCovDOhm4tV3!n-CU z{2CJ8EeXFa3Gd;A_e`kz8*##f+3%vy`tNqAH+_xFU-g;QcA2MgM}mu6bfVFhJ!=u( zyy!cHzCBfAHgS;|a!#wN+x3f#UUGi&ogHvaC+D)grocIaoP39Akuj5;nP30eCg&_T zAKJL&tVL#@U+tr%e!I-GZ#e+w_9-L>Z`buddRDx7ct6=ZtjA|>C%nrp?s|1KdkgTc zf8e??V&=#@1>VdzqgUR!J-l7)z5KWf_dU6Tya9Vp`OKGYf3lOj-Ryn#J=XT$xtzSk zYG0{(gwf~EcMRN;qUL5-^_@tLd!}UM9YWf`=_d&dHkW|M2-TZ};Sso{gr~*cVEWzK z((_}2l3tvg9xn>2hXuoXF?x8Wi|67H_09v#Ll0tP!Yd(E=HHd-4)_kswCmR0RuliT zD(9T)F0vhW+)#FOZpiREbh?bXY4SqM$1UpJC>DQ>D!auyn)2;4j0ABwAPBT`G&)`W|d82JO~JKTWvl~*~HCG&L-!ISgQFQqzz~0x;u!# zhTmc$0fV{ad~KTHy$?pVh%*VlZL)=6!xyWglw;wq%lf{DdWK!@v4(R&P^y!MyS%@_ zc=B69eT!M>kNdy{r=AmvU0LM}x@KvGWvr;025}|#QQhPtq8{B3XZ3~&ZLJ5=NNL{# zJS@`qf$%%n!##vKf4R}uH~NDP{m_(QjKEV_d1a#`W8nE9OW(`I)%gdpw&|DK?J<-< zYl<`TB-8rPi7T^~y)s96^R)tpc?eVXSYL3QzTo6ll(;X)pXn#V4h$-Aq|P-PJ8L`o zBUfO-7_9gsms|WUQaAwm>x#eXkG$7{$&JQON*baHuvrIe?npf(K@pFr1drmYZfF{NBgw4h}{ukM?Wxm_scP+#0*>fa%L%f7!Ak6 zJ`fk=YC9U`a5-kytk$=18biZ0AJUO4SvvA<&6DNa)?Sn8Ewz}fcfw6@c!AeDPzbzP1N#JCU)QofV$0x^ z!;=Bel)%Nw(?aY@cf*mfQ!a<6KxFy?l5yl9BKM%Mp`UYBKGG@rfge3W5DnjtKwsX* z$_CjDjeW>B*{M#wbzh#3r*cjpQoGR&IErzD+_-bUe$9fxsI{n|Gb@AVY+V$e$RF8y z07d14d|cG~q^SJ3^BolRC00#O1xaHGde$miqJ;H8VkaqK=Y_9H9>kHvJ}V4Jlpn@bo+BT+f)7BpgU4Znh> zwSl&dDpzAWRR5to+S>n^*C#0q_d`on33|nde!`4BC!8Wa9%imRdb}<2@pNRlx=`%M zvkCjEzNc_B+ocE(!~V>yJ7#6TulY`RxW&&zwoK@>U=A%%>$FK+53kix%_ibYdjUS6 zc33K3vzzmVs8w(iG(R;n@f$>=^!)+$7(Wv^P#L6njo~wi6?85u~Yo=+}H=S9?|=mN<0L#{y7G0Jz~N|Oj5V5 z(Uo^_s+H>J+aj+=WZ8&*f%z1_iNo`WH=^oMAEPSo=TwiEEW)B9lPPHhZfunK4vN{G z30EfVfz;%OjDPXY&TQ_ip)f@S-!tWjg>v)kq4pI)>DX|pnF{8qQayC$x8c=E+hAJZ zG4UNvliy9`x?Z;Kp%KvxUmFG;i zym5u)RyMAvZuJBtbK|8I)yWGG8UWpoM;Ml0#IP{I&pN&Hvrf;zPEPMYXKjfyYoO-z zbqy41^NqD&RahUiYODo2!>5|$o=GcC^eb`4O4`-tb5t@HFX~BLFZM`}PN=t?HFBNs z1le7!Hkxl+91q%)6uF^1ZdUnSBZ!h7YcIzXg_X9Z47dP(N^OY%Z?e8sH6!4grRdk_ z%PqU-n;%}hwQ7~u`i+TaeV&{oF4Znq>osI(Md{ivGxJ>;d5`GSt^0V}Fm}~uDj2Qk zw@DY9Rw;Uld-KR8uM35u?Kq425zn2r(tB&WN$EM0rPk5Y@lqu9`A(221Rwl42#YH4Vmj6RIIj)iFzf2(=E6iGjt-q_xR|v?0VC$gPmwM;RW!r17?t=1 z%bZ&`+^Q2U!HMr~qGXDEC1UP>#`EY$OZ4QSEHl)`i5cd8QydN7wW7acJUo|X5^Eao zj`H?EdCt1a81YKb`p(vSbSBq>0(h2C5ORLnldmKC($VRcAluK@dv!X`w;*-TR()D! zUXzsXiS@KH77Vn-fCQEmc2H0?uqd@*aq2@d>QSXsI@=0OPG?g(%i_6zInp^gO%~7M z+7wgs16trBhn#Dl5FHOIb13!e&w1?6L1%W0gs;B9D0hokFT4gjD?|Az%Kn`4uBxo! z_UrIHvf%`?}5Xsd(GKui_3m?4JCR@5Tr%>FXLi++=(uDgshJ_M!G!{C&(~*TO7D zOt=(-x(xb)hFr7i+pXmCg5;GVk2_JW9Y_s*yG1?)hI;}Ht}^&VH)W5AwPjmbOGrut zQQclK&O#pl1Y{$9v)9xQxB9xm3jl9z&~!N8*oWJ}`~kqsF_?%6_l91h;fDLr*JS>r zzpF!y>fP1kZK*Ac-)X4wR7k7Sg3M5OytxS*H&yg{B~etc+H{Ah5lu=DE!;i8f={v3 zOU#)3hD?_}<)uCGxs;YW9u}UUcHU(r`!S*hBLpv68jX408*E~_dy*JIvUlH6x zJK+G*VqgeOhM-sPxEu4Whp96SijKCgu9-UBEx6zguHOe6|ZEc^y!CpHS zEdDlyCHF?2#9H?lpJ7>}S3}}xj(!YP^(~6Z79Z#Q2o+XP;eMJ%8kv6T^ItO!V7)Hh zT*`xAJ*)QZqk;<=eh3l|g7LTTUw)@f_|8<{P<{7O-$;FTRo@e^S?$|l;E>vdWqI(i z%(}VN@>%@kV|5OeFnLH)oe7YapPd}*vGfC#-5p|M(S7f1_8Q|;@e+r}Z{<}%TJXS! z&oBQ~VUQ8#5(A6hBcz^)ADIiMfimo2n4>=ut+5|NzOd04ffs{bra|wu@UZNUCxo0> zJ>Fb*EWZE;!Tyw(=C?0s~iH&21!#dn&RLSaHG@?vCs%2)0y97*bY8|t(85i zxtUp2#4Pzb63vI|ZG}2qD0NR+rT8Co&tgepTCHX38C^~_*BJRJfswxD_X|E~EspD!RsVtk8_rhh>e4?W44&a{sZ(pyxb{o_yCEY5% z1fot99M6>s(&q}ltyB*p{JCOU42J%yQqc*O-;Qb=R0ZMqmEqzA0-$BF)Y<<}_ng%GYc3rhLOB^Z7oD4Xn(@G$Ht*&@AvfBZ#7)Y|MeVQDHB_&FNmzSG*t!tr2vUamP8DDy3#j0Nw) z*lSuViO1H6KPweO9Ai8|>NDkW4`<HHD%gn@fNdMn^_W~w-S&(2mW2}7T4;&rS|w%; zU_v1-hFCq;5_ClkIIyew9!fcL`l#%oXBp9;3~01SeRo#hUDS71^&L{*Vf9_CzDv}1 zH}&0JefLn`rRuv(efQM;i2Gj8p?|Wq=?<#0F+?`!>S9%_Q8Nh`=V2D zlkQ+53a$MxwENS~dc;EK|3L?vqwpK}SmC$nQ{4-!)9v7Y?C_h8T;qO_zb0SfV`l0p zS@fS)t3AAm&wE-snZY|PVesG#zpfa(r6h0O3S$}sjUpSIU?o=daq0L+gAX`=rgT|4#+ z#o_SN@3!QkfFy3XtphP#9Itf{_Mxs59gH4C?3P?$)g52vfs@?F+CS4+%jl8m9s3=+ z=xEW=Min4S&idcU6^7^d6Mk8`dE^Dn&c2|StQU2_iz?tH9q^J0cv%O$tO8!q0qnR< zk)q#YytwMoKO{OJmGFD$-@a0KzmidazCiZ*hi&wyG4e;so^$KOQc)Kkf-XEAEfNk>XQF3v1EPjDOKd^@d|f8_P@ zA=GBloS=TonSHy3r($qFtwjf$Sak3N_I1lybby%f5C}I!{^<5BnTb7ic)f#bsiqO$ z2QdYga$S2VTar?))1`!mVpDA^DW*GgWrl46u^`hk!UwQpECt@?>B$v+zWaU#?To!> z1&D3dCl`xE-xPS^VYoV;1TCYW!`p)zglI(yUfv#Dc6$c9DHtM|-a$`?2TJgHIs~8j zz^%i45z`T~xtx}va<{|us(yxVj6085s)*f1@EOUK-=9BX~l+5+Kj>R{M8+_~T>MUb|Zb!`#`x1P3HA_4!XJyjf zym>b*6qeV*gipnt*cVV%>rNY(>4Z=4838aS=Qtz%M#gd(f1(>~T>7}l#_ov2o#=Y< zL@xs+R#0b@@)8~%fu8Z}yE^{JFl-CmXyXo0Ig?RjxjwV?Tc}w0;b*Df(VG~7o&o|L z!DOFU%>Hrr@0Jd5yy$jRK2oL9hiBtTlB(&)mIzdon(KUZkH==6j_7j?@y&oZum$w! zryAO!pF%>wP3RfiF8m7RV?7CnIN`5SVCzkgah*-Bq0e*5vuqqGI?*}!9-tw391u8x zIyxT4GeQaoxgZmLJ_Up`5s2E+su(^NJ}~ZBqzZpxv5ttV8dp>0x?4BSomj4h?lBa> zLShyudrn}5KeC{Br+DkwcDNb-7PI>L_F4Ta49bx_s}U2v3C1&SXixKGGV>7=9x3|< zCv!Iq)Qi}&Jgs!2Kg+7m_zjQZO-Q4os{D}i=e^Xaq{*j}bA5H@2}2feRW=emNs@&} zqu;jQypImh7l;CE1_N6z3>BT4=@lL6KdF#4M@Dak@>jH;hHMyz;;m=$(&NtP7erOX z9f5;$R7Ag|VU}uTH4sT8tDB5|jx*`eXYHX|phng#?4CJ)E6CUkm#5Rq1-jACa}ndt z@3`Y>OpCrj6ysJXT0~>Gt8q%}SwKm&#Toq~rQW=2hq`|?Y1^YWgJ2yELYxca=2noC z8&bETuI#w;9O_z$y7ESlk8YFs5`EcbJv|$?q%tpoM)WNbt%uLFBfzf{tp~(}Z^kj! zO5Ue3jibF@vW>yJpU%Z@)!ckko1#N~PukF{3tmsgH#_?)X-`kuGcD!e zdtlX)@SRP9`(>70pby$0I<^g>#-T3jM&-Q?^}Rf{Be76vb-|L$YKyI&;Oc+)Gd11o zK8^5CY!UCJZAyH{MfFUlA+mgh`>n+N2CIFQLCYy`tj4;UuvheIY?DB);I_s=ios+r zgS_1!)CUND3IeK(mJ$xGS0Idzey%7X=C~bYa3xc-;&(YB?|{VfPdHP6nAWtS4yeL8 z^@0<9-^O!3OqwamQ8uSH(fs{0=I_64mJ4(J(GNg(tk%O=628Zafn_luR&)%ynJ*D{ zcZ7cinJGs5=$pvnL=W2#h`V!5c11sw z(9LluT+t)EFdRd~u2C}iThBXY^mD}hf^&?lrocSy_U_4WUF@%Qc%%4Ifxn_uokVZ0 zkZAVTI{fHKsqfdA7jb1=gOE z5Hj{WZ$voj2^|!A3PO2}t{-Ve$C0nX8kLPs@yQ}LOht+JmnaGgteJ{$6qSeAKV^Qd z)=`em1*Vy*wk=jh<0$6OUs-=m9!KgnX{3Gy)Fb$#GtfKXDww>5_jFKE_ImK1MqZD- zKD?)bOJOhZkOcCXHf{umtGO?6NAf|!-oIh~lvdE@7N+D2_&TK(YW0kc1Bn^J8;Z2i zr6ny}%9Zk^&Qj4T7481;H%vVG!(a2l-nR>%tQ5U+(I3K{;J^#~jUepN8VX-LkAg}d z+M>6a51hs>K{m*5?$e5vZg(zxk-0s~THfDq=C)3-paZ|02>n`2fD=KvvN_H*Tj%oP zT(+IcWlzYJ=Um(AT)xh=9iDDW&cSU4tyfS#9;^ChBKGmGXC0YGz_PpFV7|SmO^)Cy!;o~ zv65Sx`c5{EsWwt)f3-u7oiv|~Gw7oeeXzZZgqzMf&3Esv`02)uPV?E=)9W-3*h70d zo#u6W#B4WIP#!YECoQFOD9Rdzr8;%D3Yoj~|20b{mT&(Z^!rqxrJ1W0h=({0=YlLG ziFFvd-3fM|8;?8D=@4LnhWMF7s9*lUdxZZv~XP%`x^N~AFZ}D z(XERwi|;j&MU=AGs5gocc1baec3^F2__Tao22huhk5=yKv@NyD8)X?}jW?fGHcm0K zxyMp%tt~nhgu@oCWoB|5Wg>z3_DgNK_hRE-B;FgNe%&p-_e%9aPVxT3AIm^thTiqf z<-f-DT=53+_z!vDp~B-Y0gt_L=Z`TSzk4z~emC#S-pT7#IoTX59*ouXIsn5aXJQ|D zG|xH^7yiMLx6z|#u+o{~Q7qHs)jQ{|qm6>Wv5z9wU6pKoQcia1W4q?HamI8F z$&|N}^;q_3EwjGF+;C>k;LfI^AjyOj$~42QsEG68tcVzfHQi>{MG9ho9c;zWv!@GA2vim+%v*YuVU_KpiW(~4DJ-=}5iChV5r zTrwbB-3+07BiFo^^0e#@?&eom@X8yxTyz#>Shd4x2XZ#f1`Xee{-ic>^lJ9o+)`wn4)W*H-Yko#>NeCB4Mz2Ubpt9-K+fQHsw zv-JpXBNaamV+Yg+de3Nz0w?boWpf*S8*b{hR}t}Dj!17NO{G1@i7mB{w0Z{SIHt>2 ze`H5#;tdOI6Cjh}-6e51mGo{C$2EUJ(k~LOrmlwE@MehF9o$PqN(^~wIm(guvyy=D_4`^7(QO8fPdIU( zqtK<+X&Qd?H;p}}9eu}!TAu3-e;HWojT}s4$-7^2AB1h-{YdAH>{V{ zJ`C=^L-_hUVD8S2Pn{22u~`AAJ2yUcC-`#$RCj)S>O%PQ0$6wF_*Bf)pi_YBE{snN z;V%e)DL(^Q5*Sj&{&PYxfW@t!V7k%ym~}AMQEA0&o(GKzF}jZa;GL|rwf()ualRkzotm_13c7>B@(eg=6-cs$`yqst1{;Okl8 z7ahncDn+kgR|ck+i?mlg0aEyJvly7Pmkdsb9s@cMf_M!#aA}33BWIG~o>-;U)JrYn&bi!TGfEOV5m6_Z$ z_Gz=n%~s}F1PaCtmaZBVS5~J#v{Q8mq|(-^z6>^O+<6g1ZLOv6sDB2V1l0Kw>J(i` zu@%>xvyZxt#wNc|-8xo4*+!zbSVj3TCQ)x?c1j_6bo(ftzsmWkmHIKnAmp5qu(94u2jL-9l{ z915?;(P>}yN}Ln+ms{V@@|LIdBmVZZ?#tmjt#uRods}z#cY5pV{GHLdpT9F(PxE(H z>lXg@`K_1WSPv0UHEYI4-x;hGuwmqbk6rg}sx<2~W|`}*AXm<<`)>3JhhH*o?y`@T z0Xvbc@|tWP?QNpd{~8E?cP4tP1^pO>Tf0$wwj++uQi_h~LJZZ8hB5Lg-_#$)$G8N) zqLOnFi+Wuvx)_^ZoXbn$HV3dSM3>&{C-q*a6m9tW^2J6t0!F|XcN`kP)+LzOqfi+6 zGix2<+?CdoOb+d4h0LrdVdk9S-}9N!m?bwJE(P)(7On@HT*imI<)U5N88*Yk#O&L! z^Oo&>iM;=Vgl~_->UQAdYXxlp7CY00-`2&Jn>X*%ZZw?v5zl2Cb+}i++}km3-wA9{ zp}eqWxL)W&0=i{((QQ7fv%4O{!7NYUwj30rv(K13nbhT1T|5q+jqRA;lF8kfnLVKH zCJ|}Na!Ojk; z*!6!>3J8DE3JC1D%dD*0*HWr!_`-0O2NgBHr`lVcRqgAlHuu_Bt6jkcI(V&4;9H}k z+IqLek4J-3%GVN|qRwxah^ z{Fdo#+1(O`b3$ZzB{0qLBf_t&vWE7FEhUd1vSp6MC9I9@qA`Ctoaud&<}YVv&UgoJ z>oR(7#g8?gw{P-T^It`o7xM~tAqtrDBY&sBM%lnd-!VpzL=N8m&g!#&XVqM`2(Ts0 zHs8Ll=HVr!u$64W1?cJsQpb3j$ut_75O|6@VFUeA)*buX)^#$`{~Oo&H%0=OC!jiW z%|~CqPBoEmuWCY_AB@e4{!285{*6z;8vUoJ3y&+L`G-cDf2e?es_(zl_uuNPGrXoV zyru$Z2>9D!h&9vqSzIlGsag)5bU+M4)460kEJOO{2i!MEA>)B?iJg2rIOYH4c$iz) z$>U*io%o%6JSMAi+v7nUWUG#H)HkQTdG+lyRL`>GDr01df((njF;Za2aLzh~A)BJI zb>R!uFgT1#xU(%fO@S_s9b-l~Oc9N#s@P5`P+d^3u$1<`( zsCAS_(LqD!5il?XDg~J=QyIP*bba$du>j^0mk*&VzFlpMz^Bgl8K7F8ni7L&CdJ9R z(`9VFJ${Mdc(gc7M4|O=!xVq`l0hY)w+s_Ti&YV;P;SU=8Tw|&w%{86B8b%1prul? z&OxKw+`LD-7Qznyp(7b&bMuZJ6LWp#KjzxHX*3{}QDEZGpSh2dyW}0xjvu2PZn_CF za7oJl0_w@SHe8D4$kE7rQ%n}@+dg2^441LTC<~&M8RAN|w$B^EIgOsuP9t2x0tdgW zTW&Zqci8qNo}24pn&bd%K$E{yl-$wUJfx*alh)z!v_wq_FpMRQ8EX6|YtwcKB1~3l zw&qG^qBy7^mc%O)wMN=Rtq4q!({>o|7{jXaO>Rh@tz=tSL#Xr*F^*NIA6C=u=>=TSQnHx}+E?hx(+ z#Jv;T2PxXUKmjlx-@gz5^O+E{pBp^7Qz`(rDjQwOgNFrpXI>tys!|r}W-L?zgF0YP z1uW75>^RF9sR2212A`>p*0}3yDyp82s&iCbMK#h<4UTH4sDX6U07ng|sCg<1hp?mb zIBK4PYiAAD&MIIR9l#ECu6mKyIa6H59{VL+#sZ-&xHvaDNBRsOnDSuTC#G4WL4+KC zv|pn6u#Ab6a&HHG+&&eFS8PUi5CSyU&^FLbwl7!YxrL_H=gBwv5IE^trxShH;uq}? zSm0ACPE)%v+N?a!Jq`tF!qmOWz zh3-svRZ=MVK5DVmWj;ag=!j3ywf=D_Gku=OjKQnHUf@(N8+cKlFW=~DDcgxY#zouF ziUi>2+W^ia<@OE;%qO*8fySsYdOM4>UxlRQ5SFC0{v;81aKxWk8BtBkT{ZUYs?c#r zeTUU|u}-j91uRvp++J<0+_IRJ+l$eCFO_;voqbOgu(uA_Tk&w~6%V(U;^CIH^Kf3K z)uHIS;^C$<4`(JCj>aWRVxDQGF|s7#OR_0nWn)e)?-Nubk1@8^jg+S-lGVMoi{xeV zi^uWN4;Qs6Gm-tWI@0WyqMpOBwybptMiu)x$#Hv9YXanCAiWG8V;L{`Z$tN0&51e= zJ?T}*al=h7yimmP0o>qP1Z?i!j?Yfq;1u(|7m z8zJ#%OK>d`oQ?!vLxPW6$=$ufG_5a=O{2U4x}#KR`smmm~OE1phCB_m>rb zXTuD=qX9nhY1-&MhO)~mbg>NiNAuWt1sOr9R`f~M^&I&W#Aar+iAB2n-r#_3yDKVH zzMQ0OnpGy2u|JpbX({76F2jz9(Um6)<@os_y?XsZ8`iO!m!uZ50}S3zA87FQ{UAX7 zEmIz6;hU&y@5UpT1KISOIU=o$pO=$9wD~S`55t&bUw4OyR=b)Ts8WtlkJ^o(W{1X_ zs~$nkQ5Evl+uQP^`g&&yjIIt-iA!&=*an&zo`f?(I8N4%Q?%n$?Kn+4PS=hzwBtUu){b+u<6P}HPdg&*I3Ete%!4&%vSSa88#5U<*bmOmm?eJ7aEQ)uhzdAV2OO#b z4ig+7IT~{42kDz~MUJa22pz2P{_sZ^rj#3V1VPw%)EL z3J9`U1_yYA%CbV2!4BM&gA&v*T;jL^v^?B6p;+qCL8K3)SbC9=0Q!qLsQMf`vPN{RA;i9N%%E^0Nc;8Rg4fQ zu{#re)?y28PRvJwhTw#<7iUkz%V#$)iXZjtcY2~*5cHfT%(;HIB0;~_LHT}91wE;Q zI{SSUw1W;RTK$35D}nJ@RMGAa>{$}{Y#iwH2hKDJoE-vPh@1%g^h4sdVAG&}sB5ZL+*Qk^y>8vNI zfRlB=$tvI!9dL>YI8_Inssc{a0jH^e6YzbDd`+bvNYN(<+kc!&b-K=Wx(YZ$2b`e- z&eQ>Cs(`a}z*#EbY#ng63OGjxuwy?%w9#SqW8_#NQI*kS7`sNIc6Ip zfV0sIOaS|6jp`~uF2VN;2<+l_LSoZrCI+Ql%FgJghtt_Jg5 z6>y#oI8OycIv`R3=j(v;Rlo&0-~tuU)B#Nu(9!`d6|hzZtW^Q)big_l@D?5L76}ON zRs8!~b;Mg$$_sVCg(~189dMBfxL60UV}mgQq^lQ9DYP72VcIu<*YGVJjxblI$o|xXOq$;*i2_O zQ<+QYc*)#Rb?e(TPu)L$N*&-EBj}CPc^{F?FQxcBJXr82rmMZ7$%;V@-!P{uclA74 z@ldxmocU$hWqu_-$3GBzNa{zccW?^Z{4`hr KGu!F@nB#qua4?nV#Gvk^AR{ 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≫7+bXKC$<5D>|;g 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 z z3a%4)(Gwjz$1{+Bbu`^R!gEzh=qvOXCyld>S6NFdSt{=0J(fRyb-eQpD4j1yOqZ(8 zMaxabJ(#6IE#ivf%W@#q=}B|^-O}e2Ea!&erf=onhR8spl&`&X+bC¨3{1YhgV3 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 z zF|-eiVESb1)HxT+kl2ypW>UPXEx-(3I$ksVtSV?dZ16}vW3+OGfT-)hm(bPai;#t& zlXO=b{Rmc{vK4zNIFco#>|XgSIM#vj%b=5YzP>T3DPYPnrE3;bFtk(= z=c={YIwDQ_WagRuWWd27syYYgA1cv{LfuUfc>*3$88-G}+gWqmgw$4U5rB?^_9U(N zWP)vXVHjW2?J2UOA#6a^e6Wj#7xGAS5>q9u%Iwk-`mmF?H89TyF$MDMu?w!6w8a;* zLkp>BsV#>Sma?PH%yP_B;Z>8op+>&ASwdSKc!M1J^=)!!@B)=-)_slGdLtWI6um$N z9UyL({X^_8CPzrUd$y%vc4^(7wT{$31sxPV1R0q@HnZ)@>0SA}ugWBw9%jei?7LWu z;Z-aO56N4I%ywE(^!`+lOdJa!$CwkzLVUPcCtkV$RQ$3M(jn}?M?DywL(vLaiEq=% zKYi&TF7)-8qDE3fDDj|{Jr9ynarTDo~G*q-_%a}gkAvYJHkC|y4TR9g1J5&SK zy9AKN8?7$1R@;h`p@zJ(NE(SIvBW#oI8$rI4O2Lsztxl?+aA>Aw63&n1@WS03j3H7 z6+qKj0a1Ss-F4`A!dOnJ+6tN7;L8_RH2DoJ0u${${;tD@Go9b?8w(rHLn{<-@V)M$ z+6!u2y*abd8ff+5F7LV1%7qn9dalDHd^3CRH@+A-J@^7Lp1+{C7A`C=-J37q-8BUd zUth1jklN^;y~ew4@AjhNwJB&Fx17L|K;K~tbI?FZ8!Z!Ua{*|(-_?;Oo=!w^WCBc| z)6_vpeo!$XjGIW9XJn~oI7ll;heJ!1FrMd3Ii=jzQ}|e;iq_xeWBa;zNNbejacZ`a z(j?fZSWimK?=lZfgA2UJVPs1~paC)G=o`Zrf|^GRB|gNa7Yr;)N(?L-AKnjQ6T{te z3z_{xn|=yKnjv(tsua*ul44xdY?3i7#}#xYxb|7g+SMGgd+Uft{Z7X%CECY_9?-|O z)#&0CT4QlfC0}BEW)qJ=XMIbs$5Al~jcx15M&Qi|ip4{k5qzGSynJ+mykDoycrpdv z?Y376=i_nGvr(odIOu8EEiIDxL*kSj3u~@%Q0JltR70o(54o-t3NwgkIdff$AJP+w zTZV6+ZQ))3uglN_D>l6d^{-l(k06BV&U%k5(kIyJ=j!v@W&Kx=a6A_-;DmN-nJXpl)ogTfzgYz&tGjcyhD>nCyBf9PQ zc|4RJ!sx=LK)WI&*jh z7WG>jq+)BtJ;o*Kkn!CJP6}JLV2T≺yOgX6v*h?v#fce+~%sMH9o6lPPP^GF<4BXxz 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℘xt(ox3)dlUrjzN_gu(N>4Rs;_Wg3?g{&%JZcB3r#j~QFAMzuD21Q3YCregor z0M{6SehgAb%J^F;O7f$!(2X$cE-8Gfo2J-H&~Ox)V0K<$Qi!*e+_NpBc|s!b$74kT zb%p9B>=NrB!ialWYy(5?MgD?MB9VKO)ncm!o*A31kG%C0g!Zh$X59{B6!gn?^kC@r zEi)~v77f@q&C4UHyDN`tjh4ElIR?sb8_M(6`Y^WER^HDW?7YG5%Ldyjpz}6+;M?p; zo@Vj-go!FF=i-ZBpX+Y5@Fq_}!;uU%0U)pP<@}K<%kV9%bU{DHmg0G9a@|RQdE_MoPGOFy}tf6C}1B8P5s_c-_R)X|#l%m-m-HrPI!m$P}fC+1~CHYYQ6#07Ux zO9$U>%E4B(VAswm;h)Z>1Kd0(mmzhvbK>BW?VVNB=H2tb?4C8o&->@Rf9}!#S(DCr z2R-Z^6f;zckG>(=^@rY<#d9$-4@*`;)m(`$Nbm0Cn<=)|CeE|ZYk(y0#r@uC8aFs= z%^Yl%Rv^OZ**ot~FP=SzO3)O9e@!y)F+qoUYDDXJT?n0XOEgp@CW^5QQ#c`Af_{zFpisI&`iyJ@Z{F*jsB%pEuQcQ{9tIwI-SKZhGLmDX)+AD$3XW zx74V0PlYk-TW7!?2cWFiE!ujc)`BAw+%*kPNJ`JKy`lNF+SW{vvZWAZvtsK-FTIZQ za0&TUKFrPjO|?arUy-#m3~x>&d&HNMbPJd5tIIY*V@a^nC}VmfL7my_wtWk=13tFw zI}C;B2+S$(Aj^7lP@!xH!Np9w=CDfdt;)EK-v4e;XKi4w-W_Vhpmnb!GW2Y&us3AE z&(&?quWBs^3c;=&+s2vs1oIG1Fm0Tlk1_KxW>1bW?Iz)TmO133%-`5QYKpfV*Ps}+ z8B!sRFlB)2^TlV2&lg|V3v1mf!F6osef2@?s|~i#o9ba~s`ooC!c1o8o%X=JhX1_| z-^R=S;fw$M<_9OiDqFo%b)Xk73$G3R5Xaf8kgl21dP~;5} zyQbj=SO8?Yq5R#nk=~&CUVxdh0fBiYMT=9X1~2RtaxT#Tf=xM|o43Kock3X76~v7S z+un4Qg(#ojm+fi>la?DSFse|jjJEL_XuBNGkK4X5W?R0mE#KcNGCUDjX8UZ*ABHXe z032iu**s0bFiJPXr^RNyt>xB#YL}$Erv7iK)W@7sOeO@7#ioa58Iyzn?_?w>otwCp zFjfcuy1Jhi()n*f!TAj%obJ)&7>2U`LgkM@X z{xzGFHPMh+qDC3&FAFrJ-5o^Lng<-cBTp%J@cgqU&pv;*u%9Lk~6J=@y|~&Yw-E=KmX~^&;Ilu&;R4uA76a>^HXbhw+rcelB9I7j4I;E z^>C_*82T`}`F(_h+yIP1@WDzLN$@MAS-fQ%kAVm@DT1g(?4%^n!S;GQsUMUh5CWb+ zJB{sg;;pgJD{^0lpy+_ab3uy5Ds_q=Q zq}eTHABih7q~7-QWp`3jM||-^%nWc%^v@AnCfp&sgeWh()0UW^mV|6!uvZ%Ip2Ts& zv;h`3zlZ`xuapf7Z+MR{&QCr)0;7>x3dNm(^!F(9k4LGC%r~VI@faF|NK|6lN(?^1 zh%|@_Y@1#fbPDnI|9=UVhB^wzwx{VmtE*J2piBN`8Y zJ7W~9z9Bt@i=WevWW5RN<>w)AgdO<2kVIEsJ@V5>UK;0#&uFk%{Ct-9KiB6!X9w%_ z=a;dcucdG4X9*Afg%2!Xq=a6vzrT9)fi82OAzFZquCg=sOB+>%E1F4d7BVo}9`Q~f z4D*rqbnlUQ#fiQho71ZZIv^L%*3tU%X_I$-mS)S`i_^#t^QErsC7$;9On9hIxO-pB zE$#xi8!`pQ21%9gKdG+)T)XOx8sA9jwx^hPSxl@Ra^zi&_Z^!niaoko@%AV^LddO= z6rUD$3q44HQ>7@X6{0b0V5#9zSca*mG!sT{khDqUv}^G=S{f2ynq>(B z43w19j!My{x$zp-*+6$9u2or~v0?R8oQi0jGUK&z+n9o0k@_pRM)Yq*-3WgRtHh0t$rW-J3uKa3;T{6# zBCLPK^8(c8ZWQ>dAW-?ylgei!lHqQB8SA_ zpjQS0ML@5L03xPrqbF?cU}-JlN{@1?Mzu>nbr)>t$|_NxEuM+nvDSkyu1i>ka=4?0 z?a}_`TVaL#`W$!WmFDmcHSKVp_*TvNoDmY#+n*PIp3J}9#8Z-358cWeoDKgK$|K>6q|cVhA9P>zf@_mm*em zU|Vh;e2Q0me$3{IEVkrUQD1yuL(A}x(6IHW~C0w97|4E&pQosW-71^%j z-$=^z3HNMS-0<%YK?DcAc+l!*Sknl-T}1Sk!JtSa4cmzM1^fn2qH&~NceqJKtRS}d zj--Z2?rx_m+vtExO~um;HT+yJC~NBmQNNE-kcRX~*>JK;|6ciu&S%K}qH)@z-2p^^&I8 zOvcc#u5=4xmG+~sUNnb3H3=T3@yLN;W9r}Y#VJfdb|hi4+&(t zCNF@#kuR~6Pnt;;EJH-O_G%5|>42~-{m5nF5<`P_d!)6P-MF4OU8y&hN9sL5W#b5V z2hrNwKLVC;QCuGbqF99YkW|KDV+T=bh?@}vw<>mc^s^AWo|%6w^3VC{zZQfMCy)b; z4wtOV$V(NDX0-@JbM z#rq%c`DdRWd5>PldGg5n*QdYKF=>IVS5&9Au)QT~2vW@wlF_TXA*!Xd>jIZvEmN`* zPg{e_Abh#hPObrRso<)!O{?K{&|$d3Ymvc&(s;WFba)D|$q`ipR=;K1uS;6@U;Uk? zALxon0Xy#w@t5)YB~h9vRSVk`RfUSoCo!F2O{XpQ8f=!|DBUz>=ysA-qML(s`xS&+ zD{ednv>2-nnb9&^Ljn$hK?Qq$h~tf6#96~eC~)^eHd-0uTlN#L`Z(ISW^M>{%G|MuJGsnr&1Ok)moP1nW8NKrKC+lqoR zP?Lb?s$(BSEzUC$(nzAaf>{N9IT!13`MWO>VCcFGZ9%>|z~TgFbru$^O8$AGoiOpC zteQ~vQD?inNLv)9uxgEBO#)F%fX4_jWgafUq=YE`Cvg-y$}Ch-d<~|nZ5+$Y&HX?U zZiolss3xQA2T~W2@PiD;ESE#=5qgcRzF}By#BdNth2!lBnvG1vVQ5BTxV=M@yd5s4 zA}Mb)lsZofd~=BTx!`fFmWy`fO<9gzr#25%*9MA+>f}69TCEM+yTGDSVi#r+ruMFw z_v0;~v>tO>icDFGZ`a{TqdIT1W?$|$$IAgM5-&UBDMgZW#>^VE)6Ql6Gb}Y!_+iimQ%u(^U8Ps@^*|)uFb;61fQs?% zlkO=|8iOH_y=ILYG8OK=utMN71|OiyoHafuU6t>hwEM&fiO@)_ zc>cmBE1ti&XRJVk#$d&TU0z(=J7!#r%?*o6>f+vMsf&@-)Qc}{s;L)W059$hGbBc1 ztqhCIxG1=BUzl+*CO6L5@1Z?M6CdtAaihR!6eknb9kS;dDr!~T7jBe=nZ|I0+-3H7 z0fXHqP6&KP(NR_zadzK0aW*0=M2#?e8mg!{HnXD#JHE|>r8Qo_VE2g;0-rJX0N(kt zjYXfi9PmEzL&0g3b4C)_J7grmec}X1XOykmDBgAV-p%V5-y>EO7>&mb+1}IYwbK4^ zMtyxr!(d%DEEZrDpF)-Yg!tL+0(}R{=0-#Uf8PoLv@e=~ zk4xl+HZ991yQ05{+bZiskH?T^5Ed`teOjbpVkI9KG|x79rZi*HQ)NsnL`vy-Z2Wt8 zGG$vS&GOoz*_xSij%CwIF5gH}m=-yWjiNN#kaIcGD~gAmczJt>O0|@1d~q@*^AN$~E`TYLG`-&q{zSuD=ex7d9PvTv&;CW2M@K?TocOnLiHtYB2b zl6T~}lPM(lcF_iuG@CfwOZ8%C%8jmV4p_^$H0AD*20Qc>v~7dlx7BnH_U?IA&33_T z7x2#pX|=M9PED_wU2`kLa9zYp4uSr`T147K&>Lc_=n6SzSxflt;ufIOGtn>$Rw4>Rlx`CHwV`cru9qm6Y3CbR_@HmR2yLFtWAes$M z9{u|3Gb`M@3T`NLxfGKPWoJ{1SBGw4EH^uS5`BU-uM6?24wWTj8E^|Nyu(wCERr2W zE1E!;(}GF0DK{id>%(C!ox;>@AnZ`o)DeivV-bk)bqmpoixo5Bt&OsmLOhnC)Ftbq z*i7?6*^7lT8=m{69XhNOTR{ed34?EY{teSfW-#ydOlL?<@HOg5zkGwwK$D2GP z+1ABjmR2E0OjTjPP75e-X*+6m%$jc{D~?)>FOs zwGYZ_N@h0(eF%!nRy@pqufwyu~ZeEm8#dZJSWUdItLa~A024r$= zNt>&J?KI}Sn+^7pyLxcQO1f7MmW`3?b#KH$?o5XDvK>eVx}@WEAlvW7aiP|OmEbCy zLC^#q{J3Jc~He+ME6Eg7!c8LYm! z1r)AjAXZToY&i4eJ>cmKwV<1J@+_U!lv9}7z6&BVI+p5|$nFj&m@wS7qZPCmn*{^B1 zNz2yD_-hbm*}_p&H7cf-5^dXvf##}2{_$85I(_?u zjj;}xeNk>$=;M*TmxKCUPmm-Zs7IO&fYljwEzn8(pjXSswiUX=; zR%*x$lQPbQpWe7wONlZQN_Ix`8HnQWzbngirw}#xc)F@y^ksN1yj9&sa)V`U8}WX(e2(eBgQlv6EK?B~VJG;+JMGmlJXi_`hdPcmCGqN` zPd5gtfqQVoI}Fn#zKyslWSWd72{Sih-_MiOTjqE*!fz2Op-1eQ(tWL4(7LDm6!?w3 zTuQ>aUnDgoCtDg#oU2pd>LAM6-~zLzX-ckod8x#!!n3H3#vmpc6V*+~7L5o9p@ad6 zw`7?r#`X-et&ETsS@F=pa7L8GW#iL?!n7iUJ%~UZsp^1{JmAFk2^dMS@OzZB-XkVA zCPI7^jaXN9t=O?Y@+5(a%;M1_P;rV)2kxIJZjg(ORS?{{41UO?ELhVb*o*7k%3r6^ zDn8o&c*e-PX0ptzyo`R-4hWx0pSEy#6?d2F(4-OitUws9<51l4G^6*IBqJWVl%=Ig zuJdaSzH@3GNr2SGP}f*h04?l@)Dr{eB!v8Jj3op3N|@6)Pk=+XU9%Go*|v^K1Z&_O zCs#Q}0nc3XMG}`lPFtr92H|2O8u*&?ntW`fwU866)`#{q? zl+lFj)DU}*pMBZ^cW;v|qfyF+ddWm=Y)7pciM~nV4Foq(VfQi>hgH!)zBvsAHbKPHZ20iAsq+aV}9$Bx}7qffES1ZDexWAUgHsZmxiz;ot z;vs9f>M?0iFI$$mCD%hcJErnRnh<`!o%HX;Zans3kA$}n$zI(m1-vap1QgtDp$#J7 zF48;BM%_Zq!aB;z<#mf&T1}s%>a8iWr`Foes&YpzM_|L@7*mDZ?4bNXN8RX1mF2*j z9|6fIj-J%VU>1Tbs7NZ~u(6p=!Tcg~dI%Re@w4!b`)5QlLX-pNkE+1M353U^8%8PU zk}3?-7G*Z)dK1=dr!W0@S^w-Ol@pH}4Dh}}SmM>=H+Lse!4^+^dgOJ8BYO`vj#xy% zc>m))|LpT4@6qcxPab*y`t+ANA}yeS=dO;1wPo}c9kgs?WY+7|oiz>CBVMoS9Ie7N zNdVz4fE+5f>SWVuw;f~{tn6AO@SwEaF8Umt@@q0g)qd4)nda+~)%{m}OcXFFsB9PC zPxFCHiPO03F5hXP1;vT{&RnClOyp7vz2qy*3XSAy9fM5mbGf9{2N{;|LmY30lB$ex z2-#?kY1J{AOJeau@kv5aV-BU3xa;=CaBbwO-%AW4Sl4_mDb{E?)st3bb1An%)ttxa zNiZ#zUmwC$QnQrfvv9AbYG4J{i!YXp8DW0xKab1Bm@Kuk=$mT~UIr7T7F@Yv&~s?| z>~U*0nBOtBTO~gHHlQozuei)&zq@z;>rUv5l=2f^dZVXRr4;KJU^2Ch;@B-UsWsr< z1vr7p092h|6Le3@k#|Zqr=#7nP93~#bi8vK&S~wAvq{*IZ#kQnG4Ag)7^5b|d7Vc?caNPt;C`3%s>fD--yxm}Hi|fBc(bVD#YeLMZL?`_9a{J| z$uwa;HYtjO5p`>($cL6QJ5D=fnz{G63)h zIKv2J&P#I?vsE63I>ws~G^AoMD3ipayxHO*CYGiRV7V{EM6fFGiuI6Wc;<>M#*k^l zZVYx1jSeYR=Cej*EUq^uoNAw(YnOBF_J$Z92L>IfsK@bDs8??n1NNz%a>FG;5K$PheBk371#T6m9sehL#ke*XN=fBN&Y zKmEt^|9JMt7oYz8^btn?Jo@a}^Ut0<`~1mg&(ELz@h@LI`}?CKB+CW>n}RB@!APwa89A~ z_%|B$DWj=&q?8t*=p4sJTzIYlH#xMHK(lpKZZ#dCj{yQ=n&1VZH3G5P`NV zC9-T($`7i#t5nvEZvyeEIH9CXB62}Pp<3Zldb<*%o*e1pwC0}Abq z)6*#X{4?7m{P4(L za^hv2vt_zxx<~*usxm6)+($NvZh3pgCkfT4j8Z1uM^3$@ey}Fto^eV-HSUrsC*4a< zNvG#)!*8O7E*>Ax{Hw2D7Dh`y_LAYe6;MQZj^Apk;&CnOt+Sm@i(Qm$8 zyI$2r06(vEyr#D}v*__jZ^cm7YRYKiUTt_Wj1uSr*9{mMK$FI+8eJC0rDN~z?uSO! z#yj~2t_x11CH?s5YtcZq<8pozrvZ(&f8I z1YDT%iU;>z!WbUZ(XFsfvyb2~JYEJVqh-{Q1*06Q!kI!BqCRkg}?;vi5KHt z1qs7D_J{l`p?qKMRY!V>fZ|EMQJ@on@Gj%*+Ec+OfhuOM`HqygF-pAU4eOG_L;UpU zdvZ;pD_TZI(d3g<2u;<2svoo1T5Muh8H;AT4KKHxQY^KhFyu(JpCGI*Ok@4{UPDON=$El&k?S9Vh`z;ZW7GSDki98xoNKx?;V~A~h&=O47SjnVU$Rtb^j>TW zy{M$_DURr5G=(!t^}d%9HN|lO*rSa8(AHAg>J*veqG!y0HLVCwmdw_Le|4gJ-@8VG zDN}Z^vB9OekIez~vDqq*hu+O*fX;2<_T1BE?rBqJ>b~~08NB&a|H8}u);|t)lRDyN zC)lA!>Urj;#?F0 zjb#ZZPRjCo%&N1PSGpbIx>C37RN9Yjt?kH;eIV{2x%+eRHuNVu9`B&W13M+_vuH{? z#3IigikWd>yJ&yuJoKaUaP8c}`}qVtpP&!r1ijO;)xGvlij~Mzywcb;71EmW#;x#e z5sQWfA{UF6^lwA^n??{omU?$_j%5az=p}K88JiLUNTXoePQ1j10PG=KNtv&9z-LrT zj+|VNF+K>h)=Pf^eCiJr`tgi z==_QVfmfuJ-J{Yje;@nECicPxRL%T5vrdBS4r(T{{h>DOWPr#xSa z8Wh7-f9>?%Y_cIH6h#C?lq$nyYlL2%jElE%)S4{NYf*Dv^7M0@$)hJcPV61>emjXiBidy69&ynTU1e-Upl488=4XD zK+7uagLS4DPpZX$I-pM5B(CL#cM{euCGjn<4XSiR>CvGX6Jjr`v>QOV6UV?fB0TsG zvY{SFUyLIS)~)CI>R9SA3Tv53Z74j?JcBV{HW3>(wbH3Wi!6B6W5HWwd^xnuBN9Y6 z@o&v-5Q@WJ68|@m>fNhX6VC5M$oO$7)7N^ZJW7jll~<%&d2ya?a=a8SDoT!H;S@D7 zZ4^l53R|A?q?EhOC#xYdafRExGUdi8e*2~Wb!YusUWI|74-YlV;PR}>X)30wtN3A+ z!>wa(XZ>RU3JJH9pyD*F6g67BC2!ffI;v0J`8y@3jfK@?=zpdBS`%M|pA)LyC0 zr>ZZKj?4@m>Gdl0$!4%1s?~@oj<~Ge%Z#s?ZIoW#rIl*}(0JzEYQ@HaCzWG(so2^n zRF@HmTlEw$s6Yx$v-H{E?eor_`Xh|M+ie>+|-F^hnNJsMhUZ#DuNRU81> zsTL-~kV;a_SZ!@VRuGd_y@E1nGKQbG_E~P0W3>sI($?b0a<_`@(V64d@~ws&jTFTW zl8XLA-SQ&%u*A_2CrOgwL1`#o&;$~qe5DJRX_yRm=j!lyN4)b!SNK@rN>V61LR9va^@qPZm~JZ!fBj2S_& zYe38g@9kr*IlH2q9W2k8%qyE)s6OI1+-Jk>rYIhVBG)mGDxP z-I;O~G@1!<1zx!YJ6<&m+d`2s#$wlUs}2}zrak|BSK4QC;|Q?@0i#%8-B}M zB?tx4DkVE5Po+~mS6YE%A}Rd!*XM_#fF>8i?Mll?7y&kQ&htlQnuS25+?A@Tu6R{j z=!!Q=!8@N!>+LpTrqF#4M(}1W*htr_@5DU)wr_uuiZpKDX-oS9A|5aUw@rwvGweKm zw;|Khe9OuKc5TYFoMpB|5T6!w3>$!KCmfq+n;B?RNZKB36O}${Y!Aey8@-;w^N(@> zJ&m@XBGedI)tXHQmb!!Upbf6i6m3?2DM+iea?1Fip?TF%_{J!S_&CpEK@(1USw*PK z{}kOVn|Ll`CWdh9v?iH?Ov<9l$JsKjyVq5w*+jae}0hssn= zb3O}NJ%o}13W?uTARLFpbGG_c@*GmR28CX4i`m8@)8W;5s0mkP(s5|kFR@)xN@J_5 zB$6xX@GcVEMV_!g$SK_pqk2${HgYg^l2N4W0o9)C#`)gVpesB6Z{dNPoOnpgT1W=IZjcNI6=EhaE>O7i|n`G`+;RoKmw5 zw-E&NK9kg>K~2-Hz*cJ9g_2;&KBwN!Vbi%bedp?mwy8Q-kJ`l)i%zGxXp#Z74!!v6OPlare7& z(!FIXdUFq!s~q}qnOe-be>^=2<5auZ#WjhpXzjF`W^g-Gb#^whBg#uuW=60V_`J&| zA5JSIY(I6Ypr1yYJQMW-*ijk*DUX6jy(Ekc#ZHB>=Oc`xoV>py=?_7KeqehJSK+Gh zNhHNAWOJ~G`CXbpP)z%oyY5Zh$v6dJ!1gWPinQDuX}!&FpztytQM{zmrMJ{~#`aiJ zCa4*(lHV;P33!^3P5jPih`0N^eMqnxp8>z3xFHZI`!^&&rRF^bPdNQZ)|(IrSu)5- zo*91xnJc{bbhu~SOiqR{V!p8(XzF|cBUNZron`8NA3z zQjAmVSMI1G>zjbtG+1Ve0(g?C1b^cvW^Y4+gjZTLTi}|)BPXANR!7zQr+Y-Y#t1xS z`4MDdhvW(*R9MWk;$+2uz_NZ(CDJ*_DiujmiB^RM?%2qWC1xz*C#dptHIAW=Kd>;~ zOBx1i17DFMS!MGsZz)F^4|-1QvkmceEjxTVvri%@-h4@`D+i8TAyw`W`=|x&a=siC_uCTOAes`rER#8& zuv{<^T|pBWW8u!_n`49gf!q$-=o50Qn}dX(*Q-`@F_WW=AWM}6-3#R%fn?eoY|vxJ zx~t7FHmxvv)C#F&9I7))RVNsmP#5+nb>W;;7t_*;&HmyGTSE2X3&%pGOfZE|S)$a1 zb5dPQORF<9g6wE@9LlLyug)+wtz>Z4|5U*Fmlfh^1%A1wa33(nW&;m@vqJSElFk`H zYcotOvK*WdMbiB3uIY3(DWOFEi5+9D z$YpV7t<|O&om?V4)egOsI$zERR-a=Eef85XHZ|5yzqr;}a)z;K^=%$3txyUEaw%1n z@yDhTi1XRTlCdrab4jhn9HU#INnpnWO#-L(r!xEqBsz)LYZ_$(uTOkF3WTja{lj9h z_`_4oj;fWUDI;mH{F&E-c)S4cIj?czZ9=Fp9z6E)h!Jj7kqw zOi>L|ks?&qde$tGi_x1aQEN-4x?U6BkNJ|)NL12xjj?%{=CQ2hCL#hyVT^Gw=CQ~J z9vw&}}tAW;upbY&r%6MMS+-GuyWx+eHL|5Y5K5xkZP1}zYL89`<+oKn7eB-;Ph@xh}DA72?9 z4Sh87*YORiA}@f<)7!{n$FSeX68$ zcbci;CQ9-}N@?QQ&ozyD1=sT)6S$+#dty$W4QT?ea9+bHW()dW1r`8oNQLK1jy?68 zQj!3>12FAJBTSH0k{dALN!#XD819aFxS>LmX5$qs{8;2J#lJ$D&9ecM8 zx7R^Pi>(+tU|T9R-{80~?hIsFEic542JvBWcuxlPu0dXR z?%1qIUI)cBi$*I+?Q#`OU6^_VHjPwb+9{VNEi^rXwi~Nxze^@fUAo^ro5pHR(vwT~ zy+uivf*Y+FkW&>mw*=b4<%xOwK-#IbQ-KF6-t%hHA{tYz@z}!|w4;RpL!W)decWY{ zD}Ds#HLjFGm0;IvpN{eKx)-A^dzmtl|?tIC`uPzS}V^LS%?4-#+8U4ihDZP@V#`qNBN;9fi7;^$m)uDOO@ z8VWGoT@(s9mFnPjRxOmqFPjO+sJoSw%bPz~Dr&nGGq9yNc0-%J^Gh7q>t)S0wPEro zh=5V}_c$8dw|-aNT*iKS|6~(!e0fmD_^s^)=KRR>3ad^I#hhPDbF?aTEXPL+<7(}Q zCSIhFkO$ua7MnPTGSLhtJ@V+{YEiwcsJK%WZ^>K6_M`gbozL@zGdIv{C5VFTuBE|I zV+wjjYOmDhn{;JyJ{Y+Yj8|2SLXBtMtyXNTA|Z?mX`v~n64MiAp5#d{YmUbg;OqQO zvVp?Fd&v!;w052LzDT?b<4d@#=aGE^80hh{IE`*d5|Aj95W1{%FNpE)24Sog;ta$g zPevCwN6$&i1NBVP+Ri|Ez&VEd-=;t%*TZQ+P_yn2tNnlqylK{e0=jhHjSuvJ^-HMH zyC>jvZ|QiHo?AQYW~zDGNR72BkfX46^zIAhszQ^$_Pa0W(P^B{3saD-F~Z?>UZ}0l z-uku?WGs^A;$%!ci~->mf{7LUBvM9!wQ$!2Mls|N`PV_XO!^i59~jxoUA*#2&W+IQ zBKh#u-QB2p-huC~}}rpza$XeqixD2}mtjo(OC_v*-@b#msFOBze8 zcOf68qm#+pofUl=6Wp}rmz@_mHN{ZX2acuZJ@xRGHle@gK>}$7kj^2lqT!DZ`&}{2vV&)Jd7$lg08e<=triI!9D?-E#H)> zlLttu;dHvc-Ksk2G8yW41u}Vjy9?0K05}~n)}A=qR`wk#)Mk+rljbw z7y!0FNx!itsdE=h4=ARj|Har0aPI``1IENl;Kdi?E&;cWqaIL9y#z*OfP2?nA26n5 z!Q4%Kau&?p!6#>daQltOgAsh0z2KO5JAVFR-0j${|E~uWQ*XzkGQhnDwhtInvH-lH zBQn6XbJrY*Nq2#}Y|L%gwNKO>h)E66k*V+8CEWvxNv%-s7#`CMb?@!&1;?aZ5FY0- z*)W15y&oV`G6J01BQn9YkKP=JDTy!rzeWh97XMn{=Xrdgh=K{|MkQH~cQ z_BJ8$p|oNeEUBozu@;}cv3v=U+f(fOd6J60 zasc+I^$iPz`q%0end(Y98AW&8K_lDebpTJc4hUN z;?bj)rfX5$AQ#lLlms719zWy}6w7ADOA?f2YAb(1vD%~Uk7ta?YbMtx&>i-pwox;! z&TZlLD(*hRdR?FXZfLtP21MfJw!oKI=J*%xVjwgFuik}{q)<@+x?FhQeV}O`%KEwgq)F^Oe)eex z-0nA@`>_=riK2mEZ9b4)X@iEosf~T#HoK-s{SZXIFNCYiup_~lfFvy&e+V~KO9zQC zCd;A#yan67S?8+_lf~&(6l>S9=MNW1j0olrv36rMcvPWt!%f^e-}mT^23^5x1mA5c znx+HF@6kbV&K{Nk>p4aGiXr<4tNag=L-r!AY`<*HOd*MNWO|8W9houVHI+#huyzQ_ ztB)CtQZ|QfU+NQSqJi@L;q>kQE}D%{Ig}_m=*aO<1AB4Iw%U|g8R@UTJ})wq<1l1~ zE`I+lwA>5)#p$bv*?I}y1^@c%Gwu7|54`0dUSP;kar05iDf%i=hy)0pg4PaqvZr;V zny%$&y1PB-8g<7!=bI#|Ah8>A10Op{@M(@jA#Z|pzp70_x-^`0rm}6Zm~z|B&1ZV_ z^>Nf5gSVX-?KjrjA#0&}ld2syN6}z(N@&ex#8NZT&ed}qEzfAU+J{A?Lysf0w&&$G zFSlLL>PgdHEy|ZP^=Y&u%q-o9^$55xOOOtAoe9f@-$%}C%@wqLB*pzYI@s-PUU>7u zv$e?$kts(@RFt<5XsWv|+v&o?Sq3jyZ1f6PAp##_4D&!1du>+zi1pFso3R`fj zvv<1!Z{zOXuZl_5!TlHd0~BAkvTATF7*UDG5hDzg@*i8B*AE64%E5q{`~onQi&=a> z4g2Y~hbGXaJnXsVx3rojUO)3_U3v|&TOTCJ5i>(_M{t8KU@j5Z3tUi^bf->Jx;$bfu7?0#bez!kf6ahv4qWc zx8$9EU!(N>Uni3L=XU5dhB!GkCB~JU*_hZ15!4%9SCBRdO?eo9ZPzxTsEBs36+eNs zU)trTN6vigw)z#uDN^uz@Y|HEh5xb4p)znr^W^*=EWkm4c0^Qw&M+1K&IG6ATOv` zc*YmwifdGK*^G7x8Q_fQm7YYLPM@BcIVJ@P+*VodQdgtZ|_nNm5KPd2a7UZ zVj}ypNMjd#=^-<_o%bfhYo5$_JuU>Cov}F3K;f!<8c^Hjsb5drj@sX4zrl-VG=sup z=`57)g|gyz5Omk5lh?{GfIUxnC_kig7t&f&lBc3XMYZV2k+-BPl7|_8R{~QI0!E&f z*4+XRVEqcCVM4f8VS@TH5j8)n6w^%AZ^+p{QmDyM<5dNrCU-}ob1zxk ziDerfaqb6xDmNBY`iU6Eq__(Bv;Ji1ran; zxDNbl4lOTc#6_a3$3kOf861+Nk1+60`$n=tUX%`mq#}@5drMaO&SXMDAOF+#i;7Wh z7wujXYT8@7=Cpq2qmmMPlp9epPQZ#Yrzpv4xCPOYesq5Ex?Sg-0u1j~9k(P1yDo8F zLLJt15K$RI!bXM_R#fZsJ+@xgG8D^Xv+1F2V5;iI2iCg}+guL-c5E@#kIz-?8&QbH33Y4%qSuV`+Alpc9co;T38zT=!mDN}8grOM}u~aLWvKP4|K$YDmmn4fOU$R2;6?`M{zZ)YLp zcX{@1^?@DLXm_WJMqy>37B5N+?UV@EL4l-~g{5n$ys;|9ALu&1p~qP-mCj$**5-wP zqF|3BrNRW2ODRE!XQ9|G6l|*&fl~TW4n?eanKC@fDu09DV(U*I! z0|`6U08VM?IkZc`p*RWGrDbcCo!~GE$2hVYM8~whbIQ${ZNi*4QLWGSeI#MV&M|(^| zklQpXx1sxi;6k@Tutb{sK26hA4*fJafXiMGc1w_VuJ};dr$7j9@>UvVZr=pp1W?%s z;v~2VA`%W_q`jOKsBoDwq8o%aHxmo|att?38ylcLzzBR5`?u`LzFt^tz$DxDm~pO& zxO^E$b%pIi%sNo>eN|yk#krYphr+kL<&<;oSfS_~V=~8> z?2?f=(!}zjvzt2BLvfj>>hxH9lV|Ewk+u>RSfk^i<+~UNp_7ENSyTs!>I2MTIFJRm zySYve$D^>4%y$U3oiUf3*vC_IH|{TtkS6Zllz9;OkGhog$;zJRgTZSDn0< z51L<(gVOO5dgHRE%n-VyD`;0+fSu;lTp8}`|8qQ6~zAVJ!U0W*;*rmN^p&oer0(doJv^7D&0*b1J=LjnTi zElEZ!pC${AD2k$kC(09}aYa>MoOLv^vttY-CDKGwS?JB)E#9x!NQgPKxb5uY4 zx5l-3%QQR>M?ZqZ=6#JI=WDpn)+eQM2d+@6xS--^_W@)xEWKS7y$-mHj?ZJz{0Cx8 z@{sH$#oNIenc%y%xwI{YHrWK*pjMH&WWo_xfJ>1L%nUWTEV1Dpy4jr%=@3 z9=7zSTkK8TdMI)CToiqkEikjCS8`=>!?h%Yi+2#lqQ0Ms=}lbsT@WCVqSv(zrcP8H zXws!gl+%3=)n==>AL#u{%AGH64zr8~Xy&`1V9oBn_q61dF2n_^9sxCrV^lA0+p?K> z{tZ`N+G#kZB-V6kw?Hc*y`e1yJLBGzOo7|oj9-!mma9vYjQKz}A@S*P81@r$@qVh9 zJrI>xQ~Dzm`*b6>B9SxS;iG<}zRn;2cbEKzwEViD=>UbGao-Z>k%1RVUbE!< zE|{wXeqq`BmZftni#-_T9v^J1*BZoGyjpKE-TX9maG~({DCFs_2`lJT;w^Xf7SeAm zWF;80ez@at0=+JFijlbdlz-dYV=9!jT#jH^3jbKe38tww(52SrUOiSN`ql3_3ABbJoP5o&o^~z4Oe+eIdeYF6nrA?silzb6=voNA>opsXO2(?-7^RgqZ%$p2X_D0a zHbLvPSj{A=GKGENx%@|WKtVa@G*Y6E`t$<9H1KyMy*^=QZDUXOHG9#+62`^lgegzE zw#h9+A9-mWWB@*X$M!<-i^B_8>><306UORwimqk|3lYXm&TMQi41S{$avY=CN5NtQ zqmY0ervN;hnB@TOQ<3Se`qJ-|Y6T;7W8>4^<4C`*_$`6>`y}4bB)jV$e@eWK7()a! zSqwDo(oX{T(bJkseeFD>Sw*qK>YE^!vPJ;o6z1~%ak7`|^EpdguCQy$Eaf_fM(hOE zSs&a1RcD$G-0>b_NsQ{A7Z}FtIuDGHd$D)}>C5@gOo2@S^!`P3=mKu_j8ZdT`lYRl zNNhtKZD*qw2Gq7f0Y-UUDzsgt4%iY_QqG(*r%!Zz53h=;yT3zJg&}Lc(Dnglt3F)8 z#yLaX4J~`H+hj*#hkYsTnXYeWy!*lyS)tgL5I+#yk(I5bO@|_?BjPM>4=OJe5aSWriGpcb9lu^oc01xOOdR z3x50hZJPbX+|I3|%3miKR2r~%_lb*`e({m8?V|EjA@wOGiGNMG%Z%qxLyTm=EYR3n zlg!5m%HrLkM;U`4s?O9vq=PyfiRw0h6DfgZx91#5y=n?#!0Lwr3-Yxz2V)b^8@e2+SDaW~N_~;74lMJwt$VZU8;Z_Qii-Aoy=*MC_&`B1 zi@hm^n@%-x#tOP!jqb*k$V~t>ze#e1&SmW|yunMbcM?|-ZK*5P^)xO6!>xDxnFR74=Q`~~or{AR z!UMwO+G2a{BlS1FQRri(#t>G+M+cxM_b6+DfdzisQlR8Rqo#wX!PWiJpeh0Lqa;E# zXB?agwNo%3Vv0#kYWJsmWkYC3NLlF2aw^_-P+v};12g@d(tp14nyChCW2}0TENUO{}F7Jn3*$4uw3$v7lf_RB)EZ!3_yh=Pl$F= zj|^lC*KHYlS9DGcnCuz(K{^6}tDg9BMy?}8E3@XTLrQ%$cv;LN>q^LJp}-hTGgR6L zn&*=ZxeUUfpHtL;<@HM-``o@N+?08e0Ji)Rq~`ne;t0#=3X%-tc5y+&^;Izk(3f~u z47zB`R6{ta`pnBY#pxn0E_%w4N5||PXE_(HOHTB{O;j>>Ratk#)Y;Hy0zHLYPm1EcM7D?%Sim>&Z*+O2BvUA7!*y_Voncd=sCMcACF#0YEb#KtM#duefT~%1%B>g02K)6#~>MTwR`x+2mel&&_F%3|)ttz&{ z;Fin~dSF;axwsUqmpZ1RfEP!ILo~F2&lY;0_XWYCTj>M2?c+yE$SwDm@fcy3?jZ)@ z)=&lZ{iwbnpjht!1@ZDYu?dyQoKU6;`yu= zF6N5F*s7JGPp87*u3aqfYYT`O6J8#pj^k|?Am_!XJ018VA!Aj0)~`YI_;*%hTHw`! zyzVHkiQyUqOe)RV6}_dh2LAYUzgw=6tQ7$7vLWh7vtt8EPhtFh7o(R6hAMcsno&wxUlJ340@~+g?&m-qg8B$Dr^8aDXe0!(`{3w9DE2} zw43)?TH(<6&*lo>!q*D?yieqDl90P0tmU>ThS;>@#1;UXqDSPi)~I#`zlA_=^DsnD z!BF{!D{gUAF6%X;b`TvWjR^Fe&WIMJpND^%9}n2E^^zS7Aic9}_2^Q}5m4S?Dah`4 zQm1y$W>FVeWH%~#FtUG9b{orH%y3BK#HV61GY)Fm?TAeS88z)ig-rD7Z31R-m2mpL zCkZv{BU*`w$G3Y#!t?j6WAh=7jeDXd>>Z;tIEVewOA3twm38{x=P35=n14soK84%2 zdt7;Z?lln!KfO|isvkDnuC+|VGsyLQuGSI)I4NIJy4l*n5g)UW;4Sp9askT=9Tj`S z5o3)X=1UonQa(f2j?HwmPopJ~=g?kmitIT*QS*WbCM&+|#;0>Nn|;RTNhv#1YxQ9? zn5ZMKwg`#l#tiOaidb1lq}{$K-$Fq=Q+34N@zUTjM4scykg63lmD|et%>c$GI1X%p zgx&;kZk*n@5%290x!OT;VK!yg#^hq}NI!~VLN_`lT66|+V2_u}<5fnJGa9b?Idoep zVMxzhuwK(;Kr$NMc?4!r_LM;#o{mfBpHj51;C327P0R9`q|xlX`nn9dAWKY`u0v|k zFI*7)8_Fyi>YVDAIL$$jy$Py)x<@`uvpCV!W@Z1?DjGm{BF2)NSiI^%((>1jBkJG#ks&UcO;z|Z1Q6c43`<`_$ zz?+cx&3MKhcPnD33O+5SY;T8^%M!Sp7;{aY#yoRPp7N?Y79GRPlsG^XL`$}sDQ`zr z-g@_PiB&&7Hyz!&%9CViteV$xvL+ahWoy-_ByGW!iGvgYo>;yrAV9}pDTRGjPdV75 zuTS~)y;5a8&a+LPDcP6e@$Q-@PS!^{Xn|DZ?0hhh9SB>z`Tt*i+=PK2WLvka|07I| zZ{j$lME5ZDo+f||FR3i15eTKg4cwg#@6p=~APH4JHEvq^nn&-akWXKvt4fsifkzOg z33lKARH^f?J!6^#v;7D=bGC)Er&0Fei$i212YhB?+wy$L_Pz69O%HN?O5kVSw)2)9 z($*wAOxAMPXU?{BHqO~!hsjt3edcQ`Ur(+{a*$jFz-OLHYvc3J_Kb%drkOv27SCVo zAAcB3Gk<^<7yHPdizC6&KqkdPtOjPsk6CMa<#aD zIY2(nw@157q!(Wta7xd!?dNd1%6Zv2l)=wF^86%tI^VHFQ?g)9&o+CP zo>zc1FTJ*w!kbZ>ccx)!{tri*_1f40%eoIk-@hd+&!)dowp zbI=Blu(}L3LfcjSg3pbWbO6+j{&x)qn~WJ0&9Ihjg-Zt1r85@{W|>bb75r#0i^SfD zL~DrCq%vX>&@>Cu-U!m!xI4{xb{H-UyR$kWIT|%}%=g6O8scVEeCR=41EX zi_*oR$kOb?ISgSsi1Yfzd|*EaVLFIo*~NS=+dE<6w}aDK((?u7-iZZ2^-ddiJRiLG zPb{#~#RCl zUY;`IF+MYpm&*K1l$TzRrQVXJK8=1U#wF8*Qa(#U0oY|K{EVf zoU6}LiTN_&18{=g24SdDRID76HM?WU>|k;Y$zqZ4wJeHkl`BRdKO$3)+QjmVCVW{Z zWAdDFDTuCW6xq3iN?3bp*ipqso%kPB=yz-12D&ZK-d;0B0g6MCvJk0zA;#x17u#Ri z_G~Db%npdsj6{A5z>Bx9&b{nzL%B$1di$X1z77+p0&rfHJeVFC3e$6qFImepzT`Uy zB%^FG*0#MoqPKE%F2c(azwgi9y>+)kOFk8D1_rLNE}5QV6+M9n0U`s~b^t76ORG^R zbKs`nj*%no8KbP;arOt4EVB(_KV(x?C$=q@dm*IbD6CmZTcs3Eb6{t;s!x8@8^fM9 zICl0Ct3({TjgGgQI1REOju4CE9#C3j8u?8B7o4?O~`ynRFGn&DoPw&%8iS~A>sNkl8@)|n4m1BIT<0s}Y zM%NYBxHa0Ht~mIBf&X=shvAn`{jZOh$gc>L9>;ejFqM5_Uhw<3;NO!ZrM1vS&7}*% z({J6TI8TjdEuyBiOu>R_Y-i0t$mU#DeJY!HlZRDnr5np}_-I#A-&1biFAaKFG7Geu z4UI!E$?w-HneB}6?Tj63eO|@$!TMgy{}~Ozn+L!5v$pvFrjpNHm&E)2J;|=2%~e8E zYzI}0r%(-evnH8;O;g2b=WW=leHH|~S4YmwaBG3P4u?H+=*Wu`b*FJ*@pMYTQLTU0 zEELv-LWP1RNu2z6O{2H*8^8^;_9`S-pm&348Tb${aC=P|!U^_=gXg{UI?lr-SQ*)M z65ld?wDO`@=sAxtrM6<~MYz8y_^G)AoXuQxWK*EFDZGw_H65z6{5XVPA#{%sf_=QE z5&NQ35)VqU3XVms)14H!r;BfCM3cZ@oW6?kHBGuB6^*yy6lu*iHc8xZMPjf5yVnwO zaJuK-OY%!fHzy%8yp0bYa6wtWYBtf--Z49=`qx3YRJoT>KTp!&hK6^Z4{$Bb<5h=3 z=77w{%jIzt#Tfyi=@*a6hDentLp%>r_JJJL3xiaMxZyFWhYBgDVmxTo7m8~N3(8MD(QU*-}t3;p! z{4#rDYGsg`YJ(xxOVb=t0qI2(w{p;1PwbaOxKa~!;Tg^Bt=KxdC970J)+p~JJZK%? z&|X@IzuH86|4fmF@BrW)ddD_B`>f_YqO84D+{FZA25d#`)$ch8gY51kUbBJqvl02@ zsXV|j0E>Hx;^@x)xx=F!g-J9hI82u6s4Vb_qp7h+9dH!uwRmL$t3aTGEo?fW!EE-L90m}{^k8L^?cw{CkJ*~LkoF#2aE zRT7HxzKJptaR!`FpQN78=Pg1JobOZu-+%YBII*D}PKz=IL*27wT!tT#H0@>eaQ2-y zA~`w=I9MSi{Lo%3WXWYFq8~FZjM2}qv}!f64_*So-6yw$(9c^j)CL2Tb;8#VhYr8;(k1yF_Ypn225Ij(KT zSb*<1NywcUcm!S<2f7pXB~uHqQJBH#moJV3>H8$!&?GY?rHrK!FONmkHJFLokox@j zaezCGGJ2(L`5i;jFTNnMLPvq|br=(U@~zWV11ihHCw$d^y~ z_qO~a0?BQzrW1Z6tDk~o&)p=JmvlEF6)^jfhqzq@H*`noff@=uZ|eNwePm4WXO%ha z1!e5mI^q@oJ5kM>lL5$cN;KOPBd-1sXQ);j=Ro7%OO>gmJ1J zYzxn({Fa()$YyTn)=OphN6dSiXEEGMg*2n@A`S(=#7HSdlPa#qqaqg-??l*}PkiyJ zK{zh^^tZZyQzXA?Lyd60%d<_M$wI}7hZOu+5r&)MUO_^SGGXx9)|v)*gEL4X_um z(27Rd%4ge6lvA9g|MM+-ZLn}ie`vuyg1>Rw(A$t8@z_DvbUkZIN#TrjNiHnG-Y*?O z(5aU3*@#tWJ0Kp*WFlECAt3=2Vh|T@oV=yBmv$e4*;4E@sa{F-ptw>EUjusB^>Fuh z$_fKlUqO1i9zShRO&xy{UMK!PZKywx+d&#Zdf)n23&NrT(uX&SP>DO1L3k5+^8%*d z(?2X0i$6R?>rb4|nl(u?`mvWHg!dSg_}Qn7FH3!u>yVo!2yPvq1U z{04P)D6QHI7|Ay0AyA3+L3jn4Da^IjJSl;yp$kik33L zM51MhSQpNzbul@)ME7(nO1|iV?o7#7XPAIoFXQ~u61n(LF3DA!VFGd)mZ8{6FBz}k zkYM#Grcw3JU)WOh&tEuJ^~wYjsd`Jqx^Padi^<7#a!s^v*R~Q1269QN%J@@gt-H*Q ziWj}R-RUcJ{3(nFYm_>3O{%l0Y4wu&!J342Ob0%eQ`@07#S|1H8HGq2J0uf>Ii*>B zj)`>FPrumIUO)ZfT7StICLmYQxZMW9)PC8nNYlx%a6E5j2lj@3MiGe61iCH~r zUjVa|%Ib&z)+ngdG7Y|%>X!|yPc%>lc}s;sp|VEp;7XYjakV2#9lm4K*+&mrtF;_e zws1a-$rVwE}B4OnM9F-TSD#{#3gh5^)5=5airUwhH}@*4M7T)oi0B7vy~^koQ1B>IFM*7AkI=XmK8M=pL#l2!#7ACjMwRN5jFdiI(iBQjhGBf0V#mkWhjzTO)*4PID>D`!#!$g1fo>y&Y&OIz0t&E}3lB?c;FRKu`rkV z-zxRec%!T}3=0=*SEv#kmicWW0PPI?EtTW>*EE7k*c{}AV}LHA7O^Pc!EXg5M_&3{ zu-U-k514R?ew8GIwkmfX{TQT~YhXW6tW47huK1n-6>^|Cq^`ljk2-v9jIXXu^*({)(>15p}rlohRWL-SsV?%DOZ#0MbyAzae5WSiLM*rT$HqBs_>Jv z0~zUM4RGM4x6JW+5AcKeMn`bFQ1!>p9>bbq_XfW{6CKn@+m55vP)JOZssnlPMs2{n zBg6#$k#Jb6aoc2I3&M+co9tb#-5i85Ws_fqfiIBet4e7?$5g|Tu1Fqc3-671#3xWS zo9SFX%$Mw$Jl$F275?FC<~UUXf4tN<>fUbf7WJ^WSX^vp)dr(MqD}ky^e94!&l%x+djl&y$A;wEocV8%2+G8>T z-5})Z>uuMp#Xx1P*=sS>o^CbmcuR&DG=FTM4&(@9IC(5(R|=&%v-6I0ou~n@$Jb_^ zEw>{V-Q8k`$e><4*n1miqS!f}aOJ{5vng0_2sCM<33~SQ{EIdTVPx&TjPdZEC3i*V z(H5FGTAe`(8kei%{!5dOBK7Bfugf-!%^1cXW&&Bm8x;7GGm~UY?{6~RX1>_?*m-hH zq+UVgXze3O!p@BvQ9hO3rF2xW?F2(z8bkrdT;#_&JMAdPw2~;qR_mN5xWmuV%F%2* zp~lbYM*>|eY9B-R0hl8piLSnS*XKW{X_o%{GWOB0h_wE> z!a;ms0V5^!iv9i7qYreM`wY?2Y(ga1FAaK%8+9)WvXH^h_})7KyXcWuw{-RljaQu3 zTksGozId>X5I9on{OYlcTihlQ8phh8TllmhwkcngaGBYxzuCuF_W}GemZe&A3OIKdX4r~xa6CXs%*FglM?klHpkBfVrI67xfW#0nV_ zWDap@xtjB@>6$EFeavW-!oH@72ZsICJ`??4)3O0>ileh5sTf`4LpJqN%V=Llcm`rN zDmxI6ye$+2=inFsje;fjSwQ&cC8cmtdV_I#jHsy>-$ves_`i`Wx?mbpY~0tl)m>-V z<}Xj5-rn9WqLM&M$OA~c=pjhZ4fa{i*D^(b>>PKxyKbnz{Xm?h{h zPJal}?0+hGAOHH#c>&K0*zE#Vhrk}eZ)ln_nlqc?M>rd*6%oYJI+Be@;m~y_It#DG zYu**eGlpHEcw^G25s>)?%GIg7F+~Tl<2ESG8k7YUu2)0IQyr%Gyvi-Q9W^ zkR`;2*u;P=pTum)u~7IfST3n* z!r>)N{Um5j2G?D{%W{ZnZGh4EU|6BDqJ1!KhJh`D|L_K&439Ib+~A@hWfR@^5d59= zX4i(lZjO_D(Ggm2f+$$$>mO)zm0kBmZp{brLL9{$$J+a@P$eHNpvnj7k81UON2tCG zgm(U>*Nz2OW;mnB#1WO7z4SWH!zErH$_dz#H6y~Y+1PHyexShjmUPD=K2W%OOSLPs zUO^&h8r;wUY$M((BvqLmjQFRI>Ly;c_c(4mj3>C}s34zI5S z$=#xA6&8vR-o~OFL_dBM#oM^?7$jnbq9`EtK{ixZT&7H0AXGoBUypJkbRgaU+hOk? z9ReILm#Sopy1Ym+_oyqaF|8}of@{M9eYdQ)Iw~l2!lhzUq_@p8u>fC0!S6ZkOOwTCN}&i%?|UR)>k7O^5%piCkVjTzOf0&yE}E`4UhyKbv%ks#gACjYwk0=m2LbDze} zX|c21o6gQ7QQN+D7|xgJ*Z*|=yW7i0sCoP#<{4nFMTIs#yQn$#8j(-&yY|^-(nDviGv9k7_v8I{89DtB%$~K z&xyxgl6px)_<8ApGM&JU`>jeU8O_s+SV|8~SL8C9!ZpF(6SI(iaT9qho4Vs#wnrfS zq1`w=OTtX){j5|z9McV2L%*L}z&$mp^YK2siX~Vn^wGz<6R&a;t1=q54(P{CSkxj* zC`lo_PE_nHH%m9x*j5(Fx;@21hsiT6x~KTvq(%s$h>@!7C(G+g3loii11}aA%H1Z* zgzRrjg!m}-+_^eH7j~sJT0Dvkp}+LMhI)Q7Rw0TT1?}*FnM3O zNuli=>g;82Ms8Qe&Pt_HU(y3>m0dt_UL$f18QiT`UBO%3GR6mn9E_HW2rIjhLShE= z9|(4F*xr8AP*JnOb=5}G5eF_lhWcc{JPL=+n|n#`p5Fkem1VI;d$6R+{FVNHAO2Pq z{PSNwk{qHPSXn9P_&s~_!*?y~?&Dtin$^=XR+^gbrF;z1!SxlinS?lmFgyEL4rkD- ztR#*3?+MSWVt-gHEi0&Np%c(jW-A8d#tIgWSLrGvWnwSw)U7sLYeeZBn#0B^9Rb#N ztNIXr?oj3C1v@`cc+d3I7T@;e1jiBx4(D`%)f_|-1z_b>*OmG3;gr=3+xG6uW3wCG z{ksnyAYu53cmRh1i?qOJ_OTB4ic0y<&(ky}f$^>Rp_5{o7VIm~sIgVkGuGndPD>mr zu?}B2EC@YhSF9}_O!J^f)0nG|M0}9)^vF@YyGSjS?Pd=t4v{-wLzAY0hsR5%zdM&e z`W&Lq#0Aqi6(Yt##HG@~)2Dy$=cXmMJf^cs6@o+hs^sP=?${GIchzf_Vd%i;+~i*h zH7V@f;;8w@>?Dfz#?iaThKUujNzB`2ffzQva64#=@2hF-&P$q zv&GV}{p}79N;Qu0~Lgxu3H`yVs5c_Rq`AUPGvuxF+v*^xX_>8d3 zC?0`kB9NNf{~Tq~5ayr;%9z_GOuTk0Y^8;TQHDvwh;^5PP{-m%Z@&XUh4x0JhRMuk z>NASG3B=A(U2syQbAw8d6#KBEsTN^yS~kT}`=bFYUgR-_366hf4DdK5)a)vDYh0`6|nzB@vfc z)SxXE1^EI|7!_21F758Je>xX=@Qd@^6nDbBR-X5lt3(lthV^OTCc`N+H!AxcUCe@v0O@W% zW*JSQ`(8BycM%~8nsV@Zqwz`^hh$Q*ioaT2PhbAvW>Bj@%^joUC0O|q*1={&vBK=f z0cz7HrA`M7sf(gPX=~?(C%}KZ5i$xp?gknEK|FU!GSK)^=0`B;R+hHO9p%v30$CCiOYdBf0!{g;(ZTC({mSuJHGX+2Z=64I#oJZKvy z*;;Lhm9b>T*#@5HIlAqFFZA}0;iOg;CjDWx==#n@4_k2E48836TZV}X5@g}cE2D3y14c`ntggN6%$;7Si{mBM*aBH8R{?pL z3xwd3s81Z~)$c}he~ahg`3xvaM*JqkfoF{Xk3s|Ir+LLNMpR%)&J z-cHK;pv|vPNaH1=6+vL{8iAYy(qCoix{0)EMaSFe=A^zyISlO3yW|lIsWa;yRA|d| zEH=IlitvW2lW$exx_iW%jI+O0i0jUTSU1|*YJ4F7yk7t^e%V)p-6K>7CGUzFNdKiz zfuOtUgTgkq*LE(ad^A%)C$zTVk3dyte4IP(V+cnu+cWgu@^bx^o0m0$$3XCX>vy6X_U)5}jjy78r)3T>Z;z4PiCn>7~&CWBM3crPjRERfQdiIL))T+xv*&lx zIG#`*x(SjMVPQV&V2MgfQ>vH?wn%knI?5^wb3t5fh~d$v*t%jqsPWsp#|Q%;Q{I$OT+m;U1v zj;SUXR0}A~KA6QjZWAUJdnqAhNLRglobpe&Brnm|%s zPeeICz><1A)mCV7wJT(;!~JXEnUijl)+Gx3Pa5YmV=Vs2D)2$$#ZcbZD->S?yg$98 zojldELG2{Oi1U9}emzKHEr+W_IJ;rZfGi&pdvrfpqhOV!c@c&ACDo0|rz|QgDk#WO zX_P=R%ss>Jd6hKyITv;0f(;aR!C4>YjX+S=GRMWdiRkl$ohgC{dO272W*Id?W&VbI zA@QpyHiuAiHOSWe!uYbmt;o(27rASknE3<{*1WAWSn%?^tTM__Pyy4c6za$X>rD(+ zH$GGh^8vXjt9!M3b#u`;7*|KWh4FStY`*`4WLIg9#4gtlidK|Z55<>qQpJSv0H1;^ zfy&g76qhV*zI+Ll5Y;_&$>^(D?MI*wAIV|OOoTr_*}27&Mvcw7E&V4hf3({Z0}WFC ziPkZmRSys1Zr$H;;PxKZ?I;C=qAQzX2{AOoR`j@BGdsJ|c3#83$=BqY`e6wHR>(o? zV=dt1Ax?cHM5pkBAX|}w^CbQZasg;t4m(R*d)TWZ z;k#@g-Uo?|lP2t>z`+ND^6N$@Tbo#WhU-d$t4Wh(2~I!uE>thTTur{2_HW@J&b9jU z`IZi}WtY3aynb_M{aIZ<*Oe?W>{x2L&w}OcJ9?i*tB4+fRt8g;dG)1de;6<| z&VB1=m!!zNAnE;U&ZW)s9^7wHOC6Fs+S@;<3rBeDSf?wZ?ZBr9@aA3rM2zJ4tSP}cd4vey)!8s6MQn<<2kbSIL z7D>4qz%Q$9mjw}shF}$dE^NwxZ3YD#DHzcmI zo3r~Ux2Fn|cDXl&I-Asq(&*~1QA-mNd%xx{WIZa&OTLs<{AMl#Q^k0L+|}#LhkK2D zm{$tYo4fm2Cn+enBMM!hOD2v5nU(uIfuj&q`t_!`Q$Ju8!RUbw(GW>$2bvmjLT{jWQpb+F81f@lZJVp5D;C90L>*Z<;A~!W4G+A-fs%EVK z@e@&GN&>1=uP<^?Xn;t?5(GPr>RdZbzEFG*hH|9Fvx+co7GT=_q=ec%go7%3ww z`uo2<`bd`B5F)#zBNl;%RcCd?@Dq4eL`6)OP($489FBM>Q!(XTykwBxu?_h~btAu= z*3r~m$R11R4OFy!@sV89vw6% zqdbEWda@52)8bvO2C71@M?AJG_O(&uf*$dZPi1`;p`xlq@@tTnp`$FCQXScox>iRe z#(wWaqoZ%41d>otO6T*~_*9%hWo#E-p!8*%#s4bApd~{OgTO^DpDp`9pq5iEOo?^m zfn7&#-PlAp5Gtv{EshM8qb!0do2pCi27!4o=wayMY`HX&&u&ygN3TihY4LcQ%yuTK zT_beYJltdY&*C`!ig`{M8iII8D>J9bzjM+_969)bQ1 z*8;LU2BUY6wlz2cJH;{kkcOi~nvX+w$GGxI$CWR7j3yt#0l7HFc^~7vdyn%TC$igv z+jVh_;66rh8_9i_*zH!gt`^Tdh^~GN3icWlT!HT~9N37d>Q$7@03=?A2An|@@5+b} zilSNoYVhnVF>jD7k*9Sd4Sr;TI3*C5Ttz6H*4np-f$ z#dnk(N?TR=jESmR8x{}Bx!~L&N=SCpB^rP+2Q8xPE8{4YMWvzYk-i@adP^H?Q5uTR zeM!t_fGMun-jg}%iqQ?{w7T~m`wv#E=QuRY+rG4 z#&mR+&q9Z{C(5>g1_jk6H=6eiC0Por1ArRF@O0GHVKbfMwtg_(ha*?}?L3I%t025J z1To8xGdMN$INnO+0H2d(B{{(|eN>C$;yFzSJ#7LL>ysYmP*4pOYdv~QIMIG%89*bT zg6GxT1BBE@7$J#BE53X|3Uhr8EwPnK$=58fpM!L{&9Dv#(Gb`Js+gIzGPjw{_LlIb zot3ZYb4!zNWdLEg^oya_HW+$silOoF)7xe2cn9OB@9&i(+s=%;_i(pX%M8>7Zwf54 zZL{75w$M=3Rb05}fzVB=RrJ+8gZhR|$1A5+EP(At@D_cbM92hMw5J`cJ~>X}ov!+_ zZ#Z=thUQ$(JUNJggBj?P7o3Rllvry_8rbd(a2jqn}B4vcKV|TMv7Hn=h1JZP!;b7^3B(De+ zf7P)5ehJcG3jZL~Zr2@wCpLzugra^KoSnr@mVQkH2dY7>KH%DMdfzawxL~{bEV#pv zW1!t9YYkQF8HNSiyEOT*y^5pIgA1d&bxK1?ntZ>(`8xY}#pqmEHcm2V9V&QKHdi`c za+{zr*Sb$xrd`*$S8IhM5^No6=d}&wi5K_5#Zy3+V=pYLc&_RkV?YptEB(XJC04~A zihP#g;CPJDnm~+J170Q&sMV49T>`agQw|=e)qslWxQ`q3jr-s~hDT*u=T%IO+Efcb z=K9laGP^OKbDI>=nzZKJ(pmA~;#xS}0_AbwkA4nD_vt-}gJvvDMwf}0JT}y#4+C6K%3K`ih$#s;lyRy93@&4?1yR*F4S2kU>Qj8`9 zABwr;Qkyd>-9&)PTD9hEg{4|^UK;>}1EYtg6RsDU2W_LQOngA5p32VL13YUqRSD?J zaj=otq+?X%j%}?bvn?mP^NyWy9l)$ql=t019!Xb+O=W|a{o(Gl**Ti0>wg78)46(8 zZYlTW^7SE$))Z1-?!5)jg!pQ}m=OKd5p{n^kn6Z+kbN6$0Hj#uo8JZQSkb@vyO)>p za+;~e%2GofO45r>iE9(D@8>4g)jE4(%l6{DaTHHVm)!mfLTNN}h`z7IoAXN#42LO6 zQQiR-dq?yQm-m@f6XJ?B2R;T=)&j%=PX7+nK`#_p6t;}*9Uf(xMqiAgh_g~A*vNq@ zfXv7C4J?;xXw5+wR%O?;LV{`~HK*gOG;DOqx@z%mO?O|uX~VS%+HPm1b>}rTF~eO< zdsu^S_=_JppLdc<$Bnp_@s52t?0?Ku}`iX|y`C^r%9X&!lwEnHx?ekg07S<`8i;ppQkr)Zx zk0e-PJjmq0oAH%(g0C24JOD#o;%Nf-D_>bB0ELeCay%SxKiD6vaD?5}MWm!yRpzay3W?GbzQtwt_yk|#(j|mpXUsx>Yx1rmc&sX? z+%sgEx4d5GtyAboEyx?x3t?JTTWFbg(DDoLciT8dZtq$oO@cO|BXTsjmq%+FWJuZ9 z8#FYj)&U?bx!g8r>HxTwjTU@~?GOzTL#A=5|A#hS5Y z615hsz;JPsZsVnNle(Q{^pIk)k1{N0Df(4v0f~}+a-0>q$dpw~Y}JTJG7y(yPfq>D801ZvuNmQ%XpQJ z9_KyuVJSzT!?7yg0~)=%mr8HE!8Sk!#vNR`to9;pgCrXRHoogP>;~tBWSPb`my%3vhv9dF5(0 z2peBE+vL-W*-e`D;UamsKz)r~nsc`x@NBshPd%WIj$YGgU4(`U+JppWsM7*~m$GH8 zlBqN()11d?PV(YyP=q%U{+h~d-Gwq_L(bMPCLCjZL;Y2h(cz(!`Fc|*O;VxZGZ^@S zoUqC9oIqgG$t&2vpiSNgnXWp~rwG_6RJcMu2?VjT5xd}@g^9jvj%nV>sb?iDCHX|x zlySGoa!@9vIBq5qz0dJ^x~BVya`OhquZ3ZR@9yeOah}i>cZYjhJUJ&Hv-S{TTRa5; z6jE)O&@_T|j1X@Qk6IHJ6KFan(CCnukYZLr(IKSHn7|uWKyOqaP|}Q7_Sa%07aVLV z67)vX|M&lyB8A@AZnqm0@jQ8#9uih~(Ze^v_yoXOl03|!tCF@wcC!n1q}`=Nj>D2< zezIYo8}|8Gw#pwpdoTLMmr2@mxDBN?R8jzBoVa;69GRrVL8vXM9?$wq_zZm4;K@JH z%fKo_MXVBlkCd&qWSwSr*rXl;){M<`A4?l!!28K#Kl_Xa-^0%cqBTyy)A7-6qIRvH z#gGR_H>i(Ju@&C1Rz>te8!z>bau(Zv1tx=a`h}U1K&;5WgO!OYkVXdU&Q_5c2+`_)^{~*~F)sJ1oKCORRLR?x9PxP)+=eKp!4lGIjnzO=Aq@qAm?BbPErFz@MM&MDt1G zUE}4qkl@K>Y{TIKTeEdA@<8rCkrEp?AQh(~5%aj5?l^G6slJ!2fvAOH2dR|#9dNlO zXFT5uH^!+vVARL%oBCl10ao;-tjbD%5peRMG1jSt9wPYbTh7n6Zp~yyFmF_AP_U*L zm_cq$QdGo+tta!$c6=|l_XZ~O;|1;=es-Q<`{_O0r{7_dNV+Jhe6LJP0-VjRz`lfH z7w=xIN(t!KH|ba1sK9iBN*VQvlW_+)CS!a00?a0k!l;PvlrvptpNdXQ=Bv4C zYDBwTxXp`njqZA0zHILuTo^*j%p9tIkBpOj2SWuXia8gs(QMLvo~AJg>@2ycVwDjP z2x4X}Tt#2#b+@x^H<317ZkwnKX`tfV1i40wkDj$tSuKw1CRomReW@l2G;zHt@Tsod zgGx}xd`(Jqbo=bWcZ2xq2kT7(+rhqhgh4Q%9i9C_U-)zd@bx3r1@5xtvH*K!NIQtv zKK2i6UZt*G*qOqc4^+KG_9)NvbBUf2yndYtkol{<2$X$ludFU7EV!Sax|mgY^D{K! zNON#rHn=tgCK$n0fL`kTtg9w+`FgJ)VNL&RQ+3g59Bk+*!t7E4C?}G@c>P>f;{f3m zwKU~R!*HABS`e8HC_96IyLRZ0u2o(5>$z+`DBSyEyqrb7>~uVyG46YJTgh_--Iq<_@^)K2659qj)uU(MA{dW>BXzc2@C~HV{yn)ht=1 z;(kDs<-z2(i;}3eAs^;X-0laZX{k~mI*tWRm6$pKcz|$QZ|GsB#=qj5-~prmPg3O* zr@*>|jujP;o}nmK@|8~@DE4-?-Qc=zB9aAJctclm6GVyhne)#f4iK-AN*#o~(H}d4 zS~+~x`(-OY{Af|uw4gfc`=Sel80f@F!8EQbR@G=A0+C-|YVoagf;G8#K2&NmKOY>c z1GG*nT2R*yBee36TztU zUl3O5Kv$MdoK&X^aWl6n{i4Ov2N~5{xU|8aMS7tecGezXsE+i7m9DvzpYd^09<73d z4+-ekjexc`dh`t1l?Gb4Wtd#LMQt7r67eDlZpnF&6GtCY4&Sp#<^)H8_*7;Q89=VJ ztX`LETuX3N8hRCMZP4x_*fu6kvOc|G2GSrk^2BsfXK4L-XN*a+Wus9K9fYXlMwjmw6a$Y}4y6q&XjAd|0Xw3*;d<95?1ev>$LA z_6sQ}uk}GQuZ%V#>b)6m=zS93v5b*41}g<5jzCMlCn)hKC($voalfZr}aoKNY7>NhOdJ(tG#-jiDK zc}D2d+iEoQ&i<(ST=l(EJd_H0*>X1wwn!(ac-*Dij0GZujCzzpWjRwvnCqPdbY+kn zk<)K#g_IUan65=?sd_W`LdT+42Bk?Xb79zQP1ALsM+vh%>kGi`l&iy4Hy0-u(8GdWV2h>^ol>)(r0EgPbwn%%z zjVy`A4?#|ES42HN2}WlDGve(SJ`SMRR<1PetM}u1mli}sdC||8Dan(^IzMMA9aEV_ z%q|OR(=$7*e<9n@mz#+aq$zy`RQfY@fnDhDplBU@&o<2FsngwV7R&W}5ykY*Po;5LYXzR= z^FV6tNK4gfdR#BD{%Y|GkO?nDQdB$}4w-uYd@hZ@|na@ux^k6+|2CcM=YGOK4SwPFI z&^C=$l zIx6u%f>IsjJ8)l1fTZBi!r)4J2b9}Qs* ze3?ch!Qjg2f&BtQ(AyC^?)g}(8s^^NSR6qmK&)I5_ID2QLPLX{%)3-71uHmXkI=I6 zH2|#T+YtOO*W37nM~tzo4V+aU65Fr9T%fgFHy}$yM>JuoXBi1njIqdTQlLlbELkFs z^Uub~1-y`$;!Wf-Es>eDJUR?w3zJ6S1q%^{b!-!u2ZoAEsVZ9#!3vyN6|&(=o*-f< z5pGkP5<;{0Fhx&}oD#%uqU6u#S+rb{d3loBrYi(2qUxGn(WuxCXHPC}P}irr_8(Ec zrR?`S$fNK(nb!a&Bz>$uw7ZonD~RzkmbC})AOxvslqBzD71@A@SAIc-zp%maWxS!y97Wlv5z zk*fW+oCqz`Apq08pc@Bb@2^4b_6IXo>#GltLFtPn1fK?z02E%t1dtX<@zakd>M!QU zY64|n_)$P*IS(L-l7g%0MsS<&^$el?Y!@6QwzGth6E@J=tj1K1$*xF(7ENn#Xp>k|(*hc9C6dLp+eJs?~%p0kACZ?apmJb$ZBmMu6Q>Hh2 zT07wtlfR_5^v@OQ?|I}nJnvSH^A8E~4RT3@+_2CSJ zBHXyMHC5q3gRe+PeK6Gb$Ci+n!7cf86Iq*nJ>Oo1>S!lvE zSwv@Y<+?FvVJ)@i2E+Kt6Ho#u^*fn6|$R%QtfJh(LXx@m#iX$%>WGksWV%q)h!n zQ)(Th5jshw3_U;h^>`S^?}M`rx{Ze3;9-2=c1f%%K7R9`a0S2iZX%DP6#L5CnTz$H_&MtYR|V1BI<` z>!sOAwukRskD|LDdYz zO|;4Amm>)nXBHU_LX4{Qk!mzvNKX3uDFq^ zo}DSY4YfZa=$$`;j82AQD#5`bBbaK; zPhx=U&^|$RIJ+O{x)BJF;l&~=dyYZv&2^C6X@K07!X-I^Df@TWqGViKH08@72(P($ z29-L0`B~-;Dv-r|@wAYsPBm3yN~G%w!@Ci5&{5SlQK=DVAvS4bOxZX**0Hy`V^r zlF;{=vgFgWhX-EW@it6wo(R)N#ftammWo{LNwwYt8JzN|_?hR>9TX6E%QU{(bG}#K zU{|&M>Kvv7U0E`(H82evQQ?}Vx7*DGG7wutvC)qBCVs@UEFp4S@l{Rp3c@hWu+%l? z@0A1r&7~`fay0<{-eT33OCLBLpeZ20H-(rUn>4&6*C1&aziXZ&a~MRiizI*mgy*A1 z9-~YDNf5(PrdY|86TGx?oe$+p(oSLH5ZLQ1-EN-yN;0;g09;8!!5+oNdvM3Rf9U$- zNWb{teOqu{Y!d9FW}w!Odpb*uPC_0}2$vg?BdbjUWdku=bOkG@7u2XDdm;=w3G^N| zbITK*=N^}hYE_beS1aaUx)wUg!zO^IHil!rvH%b+QLK+8nHBw`D8a#A!bS8_73Z2B zg!tEoLTY%d_;+ETGI6}|U^vPOH&S`naz*v!=d#8N|Ei7X+T5)ZA;F&~aa{FHu0H~~ z{&fF{Z>OMCgI6Y@>E3JFdf=k)H#!rq;%H8fO=Y*L+dN#EdbV0+WJTfXDb#}h-@NY$ zw7BCA+c4a&w{f5s@c9Bt)yVNF3efCK9l*1OtZi#hvIQK9<~FNCPDE*48R!>?O75&* zg*wNGHFyE25=P^K1uFLuafUVCUFref z*G$uhvJpE+4TX(CS$Kb)U+uJC48+`Lu9_ysT0p3(G3z&kg`IIht5!q7!GS z&bZ#@(7N{vnO(u$Sl)*$nfpeoh^-G-_IuY$Qx&{FHy<5Z$wNnZDCL2LLZA*uWg{=% z&)&Vi1ec9gPmLS#!hk}YFY}5BqC%Bqwt&K?`e5rchf0-sa82J`W91Ryc;hE&W70?+ zW*r6jl03#hRUn{&Vf?>=-I`@jnS72#3ES^KUWSVjo1j6*K@hH$6JmK@r{neL!7- zs`uh@XI!e1!YDLN9OOs{{s_TVcv&2QQy`t$nYa7Uq^K3^JKS@UwOOiP87Jv4t+vi& z#Z>6Ywkiv5u*fdnwr3{^>th|MYs%C$CBZo&JyHSNpGei`o0NdP*sd)@@v+001=81> ztw1?_r4mI#e`{%K^Apqa$27@N*bLCDZ75LcgYkMq*fajKt4+T!C9hJZXEzy400w+57-aqw0IjO!?MPnRM1A0?KkXCgInwq zXouw#`$Ru2rB5HMDW}wi$wte#9FgAZd8mg?@7CG7_l4d$BBxL9PBxvt{OsQl@t2=R zC*L7#I>UkTsM-4_Z(9Sz1W0@+o6aa8eK=ZrFE$;DqXEqg6CnOEY&v5A`6&4ZX9;IB z!vxr3ESt{Az|Oou9jd#5c~tYg)4G*8Vj^Tdh&n$WP#=!k-rdN< zv2>L4el?cSzmr00RT_sOftraVxXL zM96#)eSSQkJ{+yRyRC;~X(%JaL>ORjThC}vxS@SVIr(Cimhh~;C?u#Mt56} zEx!ENdM3g#gWGy+p+Byzr;4RRwe@tO`QB_jQ=$2xZ9UVWc@taDG-%$z)AQkV7liAB|~slaU;2XG7x=flL5Pdi9_57p^?s&=Z%nCRx+J z_SCZWgY~ZFzmYq`oxLW!={R&<;RmsXFKdWWj1Gy*H)(pi-56u?1-Ygw3sf?vVrEIc zLI0RM`Y$ruWY8qFxMS^Pcr#W?@jfbcy{{_2HI5LHVM{wjrf|afMh18&)p8 zNG%GPOKI@=>7!Z&^RiSs#ZiB9%@oMBPR4YN4xE#xSwYps5mdaU9n4u%r21c|+%}QL z&_Q5NXM#Q&{qF17oYZRj?{3oMj`4cark*66;i4>AeTUFS?!*I*^6G|l21paCYh<%^ z+G|@%L*Xs9M#*TK6t=RPA_-<>8#`r6l(OMX5M|iP+fBGju=ga{Z9%f2O!MUP52pMg zp`xRl+jyAJ$15uuk<_kZ1Ii->-w9lzbBhhWAO*?Rc#3_!p$8M4yV^c2nh?5eA#%3a z#CIRDv&aSSB>}gpeO;rgYFQ4z{&G8i~>0A8cmJxo~kp8 zPAVh7oAL{X4287i-7T1{7<6Yu4#9MwsDR&4BciI|>gKSBv3~mfIKK>5AJRMmls~C- zTBwszM(E0J^UC83y8T~**$qPArYJUlJ3S54C7G|%bVVMOaKb%*BcORR043NmHw0vvLs6+x-dwRw3uB{ zjo}*{kI)t;07U8o#liY&8O$gmQIZC6Ots{quCdkk=@SK%RA14ftf&ct#t|;J8({Ul zO)-wRa>CU|a?NEdJOepflwudo?9022^f$oI)(3b&KN5FR_<5-u>5p>|F>4cviO;DT z9<2GUV5~>aF8QeQUrzClb+SMiC*Rw<5`ZxK#2gcAnauNn62SBs27^vCLCcv&tEZ{B&@C@ZezF<1y2W}DQ1-=bRTe&IVdufnZ zN>juzAlD!N(=Xw(BHNN*PQz!j=z9Mm|2|7$H(#TioXqIQ*Fl`)*A4P#bi9c_^?*6C z{~mECzGc{xBX!2#o~2F(gHpcz0ZQ^twi9Rid$hi~3psXI<~9^&%Js{2+Bp2 z2!9q!Fp!cvx8NOB7p|ysL)^t~#Oc5r5q~CM;mX-Z%<)nGrdL#*2gyegEN#(cX{BtD zlBHRqoB{M&P--)}s;m{gzpAGreTh!AN{fR2m5%ZK1_z0Ikl*`&I2i#>NzFkpa7r7F@F-3PqPyHo zBy=J@h{B}P3J&B{+W=HrX`Bum|=x212(`U>m5XM2C&tf?H?$RxV^)@GHU5pY+Z%Gi( zu5eYp4P$I|Ld*ViL$A9Rn;?|j&Hmn%VQ~;tQRA5Yg-$|Ag3dCZyT9v*32j%H?aK|immC@_$SdKnFkJFsM9NcP12^S(K?H7n&gwJriCDLfqI?s|j zMwvFF^QFPwa_-&WAZaf6j9_}d0jB{)#!G<}80v~3cOq82lMjQ1A^lu-K$;{s01+`! zgu88wUAW8{gI%UTOfmR>r9)BGc3urF=zXDQSr(W^FVS@d@Opij-syxs$FLuBVKWQM zZ-!s+2Wea~T&-#~8g{AlznL+m+6X1s08tr`xmS8+LMhWeZj&Nf1Es7tQB1N6l6{Fn zs!qN9MuC`9;dWL~Rp4sdZ~!;Eq%J`z48%uFGtXz+oLxa6u8kgNd~Ci;s$)g;UwS&| zLuKU8ZG?Kr{N2mT*(<8ikgsWWJNs$=uk+a}5eE|`;Oa(^d@=(#QZ8g=xH9!&z@KJv^e5 zpFVo__Tt66*;~F2+)f2a%z5avrJw%w=chmLExk*>%zpgghrhxU_D(_ZE4=c{=`s!J zzyBXlO9KQH0000803~nIN>bArBUXw7004vu06PEx0BmVuFK};ibYWs_Wi4)HbTl<3 zGD3H0Za5_}LU(XDB{D*HaA7zxFHU85bZ>5RZ)S8ZN^@^+E@W(MtbGZ997WY|Pjyev zwb$%1vztvaIX9iTa%>VdSqLEzjsSshgx!P$2zP)q%o2`lHiU4B0Td7vxdr700p&jA z5)d&eiim_$K~z8mL6GHtSM~JF&Q8$p56pJ;t5@&6dUd^eb@ZM~zhRh$VOa3{@=L?G z&)|RajIICM0KdA_19iqdk)MyfFR;hY$L@F3(S2i%FSth*4mobjp@*zq?VdPh<>6xr zYgUgrdi9u{_S$#MaqeM<=WA=D6NJXz3k+kAfN4yhTDVfvecc#0CKi}#7;7Vj5oXx@ zZ$Wqr1g?qTYXgN9%WW9Nr}27(;4Q~SAz$;(LR9>}`1Bt1@BK?6#$E=~JC!amt))r((D8YGDfsd4H`Qd)V|`%a(1^2JDQs3ToN?wSSU5l zJran7Y_r)p3Ifhbi1wiF(eSrsOEi?VLvAaC{}4_afdEa0CxD8L2k z*x}+#E9h*4ID=L)-=Lg6EZV4YPNX6>(^hL|L!Fhi*H6c66`;)?pRPBZH4tse(>V#b zuT&)rPWG6et%ivyvKDreh5cAFm3L2pP)ldROf8UL%uF55!92)i7UD?pRL;1@&nuNy zzL=th)|S5Z_~cNm8pU=cb4fEcY0P`+a!JH&aX zMDsDxKJ~_60=kj_)f&^;8G$RI?XQPdtwqG%2_t4H_p~A!QIU|DaCX7aMP_PTzQs&U z$~P2}AV2}?!SQ|2OGei!Gif=WSzNDC);mGM5VoP5=Hs4@`O0F0vRiu>j0MDz@cRgU zjyz|`bDli+kY|rP50mHd@?0m+bLDx7Jg<@Gt@3=xd2eHf zbmC7yW87BM4fkO<$Kj_ioaOKn7~YP<4`6sIhabf7G!Ea7;VB$`9K+jk_#q5W=kUWA z?&RAPmN8avt*mAFaV?E&+Ron0qS@qRRAcOZUQ+OajAvVJ zR{%#^L5F_TGN4LhXBZ!Yqf*})m`TiU-Z~p$9 zyW2GPuOp3QC-<+Uqh($OmU-Hu&^Tydz%zqGkHY6T7)J=OLT!fX)9#!_&1@+k-+=FB z@MRv{ulM0}37KBT>@T`;SI>q z1{`V&f58wAy@gLOggsv&pdi$Vp%x6yz|bTN&BRbQhGt<88BOBAGmN zV*|#_#R@w@lD>1f+a1_O>^dB>ZDkE~iPiHpCc?(3-}*ccBM|U)9xb40ZNkvb7y_zx zgR=Vi#5$aDT6rizzZMZtJ;kFeU?);(+cY(Iy zE<_t{+lnSNj(omMod@)HM61?xpcdK#J7c(IU?(zk2NsB3tH{=>C%%XswUhZUj6}&< z4Vh7@AJN=z0MGWGwCcyStDJghL9IRM!a=C;Z=%A94)iA2SNZ6Kh|WG~CKC&-pO4fo zA}e65SvVTfyBEV-hZ&M*!S!Hi(}jU6nwSg%y_8;3%Nd%^tJZu_ zwG9T+$uzagYe6=suJJ@vWydFKG6`FS-OB*Cw$XH;^Rs)R;bc!uSh?Q@;Pf}ZeE1Gp z1C2I>E-%5esoRXH>)HPaz31|fE+>SNj zh9X@~!FDp%1#aj28>9QMI$+%h8sCvNWjR*?)(H1%B%ZZg7}BFqF;jWx3MiCZtyNf~ z#IOQz;Z*<2fRfS8q=8M~DmzoTFm zuE+MVi+^6!L}_-FG&dB}d|#*e0jAk?==^K9t zY`br5&bIr|`Q#p3n@{fHPt!ta_LMZY6w}_VlOWzG%_b`l3ZrW=nLLEh#HA z*5%$?)8*bn^|E+tdRaVFFMDlGFMCy<|9%g<%%!FSoHG-1H64luVdo7~#zkd-jc6o* zN28$zdZCs#8s@-KdOEiw;T{UN3>*MYyC2_TjRA;+mXv8U)*-;TQ`)$umlS#j3B7}T z^i~MHw1UDdfx^iE`m$=|GdN?m5xJkgx z9{3dmw@_}1x@?pDtdjg3!}<9U=I3b1&ry`0qrLnjI6nw*?)8-oPQgZCeIolTYG*CG zy)z8eTE>lXy5-Z9^H;p+abNL6TE;+D`Ux{a=PYN~Gb7x7Xi?T(}_G z^Q|06Me=nV0&^lU7{~+?IVi)y7MQ}ehmbW==)0d-lNdHys&;z5>OYV&V0X}vN;*SG z`ew$1*O_F1E+RmhuAphp+43!V06a$iI{;Uy&b%dYqer z{s+0=NZX@&7le6MNI#q%E#py0YtZD%jZ&ldmAzn4)KRj< z63z!GEJcw|g+_2mO3s>?3OT>D^$tacyBNwp-^B%xJSp#hRG| zR&|srlr~2x=a&dEoJSF7x-N(>C&rFtRboSInnw_7Z zMNrE?GPW~zgnWB3kU7LMhd^0DYj|a$?6bkp7+)&;NP7XUp23J{OoHF1^pJU4TGreF3ma5Hlf{FY^)~38QO>Je=MJi(M$+Rncuqh+!;{=?lhXs5nDaMOg6(X< zGJe-~pW-4a=2X%jRW?SqPmN#|YR`9OI_**UCeU}jBjc#Ty(kHBHvLWMY53#*6nhq! zB_=@PFRCkBx9^En+xKq6w{K`kv#BLX#Y7KgF69^L8TeD9Mu#^&R^Gx9(Dy7gFkeAC zud}Wf2e+c@BhgniZ2M-Z%rWm!g_Jh_9Jle&woe#aMDVroTY|&2@$0!YRMAx@{1%9Q zmdKBEwIB9{lYM<5tLJB26QZF_PkADR$f_^Z%A2GWRvcmqO5uxP)r9iG(26eiVRST^ zbp(oe9%B79Kv$^xBm)QyeEI{~zkn9Dh9;H>4i@T-T#<<@E>weJ>2r*xOu> zZnL*ik8r6WJ*%|VcCH6zR^vEPgUvi- zryBA#ndMk*y8S~aE&yc5s#JqyAK%fHvl)lcRJn2x(D%yUdkx zajABfp>`9bn6W;^yjVe@zmXTFO(Q-%tf==hs$wO+{q-q~B|ue{i5q2kIrz%9v!> zTU0ICQ?7!}hX$>bJ1qXUz+;} z%qjWYv3ziK#`zd)Sbm%;{L!mZR8ID$HY}|Ri#8t%5EcQ_%wOu&GLP;{)P@&W?4Y2b zBTAJUI@B?0grprQ&s4O8m@4cQ@mgS8X>B<|VVgq%5;}1W2mWNHYJ15LMsCO%cPVA; zWV$uo1~i+aB{}oaoTHNNCs=!(-(eG5!4vLLG~qT60@b>oqF77SC@!7^*Q92uN$Dlh z;A*6u(IOfUF)iowp>V3}*KtjXTUn{)X%ig@w%NZ@;o8N5h~y%|Mk+N9)ZO+5Z<1=~ z&eF*2rJVn;xq-f_j?4mfY;|O|Wv5n0rjxDvj!c@pa~+wn?7`~Dw6f2vBU8^_vW|@1 z_cD1!sLdq?&GgRF)Sx%{0{JAUO^q+LeKT=UfdV^LyR7~SrtrH-&hKaspU@&=Wf!sA z^KaA2))C@^IZ~cSiMO<1$kGxmfzk5Vi5S|b%(@^2pM99QkHCe#HNIe9jVG6hHX6=T;;R1~bRF2Skco5Z=!sA_+H2H0goZ;7G?7fy z4t2g(E!`igr32v)MZT-eTmyN>3QM51^t~!BvQvFNHW=N|&jz$lCbt&M+9sv+tK7!yY(UD#6L@7Oa%S z!&#%pLLq|FwKBJ%{G+g zG)eQ9qHKTFY5s<3PV=YfqBQFz&HKePALuk6Vw&~-G_xtq21)bxVw!*GH2=gjh=9)I zvkZ177tV*~M_X3UVqfstf^fPZtiN2B)9F%h8x6hI4?O>S|NKVgbB5Ok`PbXdG`6zd zcBZ&W@kv;^A1in^u(-I7<)QsJez^QNo*%3EaST6B;K$MYz)G#wLlw8EW~%iwptqxr zNs%r{56V}UNAxZ7`glddI_{ft_M$C2*$|i^`$Eu8uW&k`eN4<*9nG1b`w`Bp_trMN zFWutubZm>gtJt14-4g)nfXXttd?K0|sod#^#&FyH82wQHLQ^Z*6BQ_0L(%EKHP_vZ zTEq3vY>hJAH5fGt{+R3T!H7?F#K{;jjUsNwh=1#devBAP5w~K*XF8$}BgRw2ofvV5 zjyMt{CQ`&581cD|I2t1+QN-;Saifkn1|xD5aT`Wlrz4KTh{+Uj3r5_aBV3HgP{dsr z@gE&AfDuzD;)fXVg^suoBW6*=4Z0#>L_fY!9W&kYaZ?o{W58`dWcM@;!+<-3U}qr= zObrUSgQ)%{ia19jW58`A*y$RE0k@rCU)L}UxJi=gN|fp~Efu~|k7usC3M1as5%@;k znz`<3jQFFDz&Gl<%yrjb#Jf5I->8E!`)`83U>2GEHzJIhKLe=`FxOp+3E$TV@r`;M zbKP|q@fRI|Z`6I6>%NB(f7cQCM*WT1e?787*!8*rnf*V|?7xq&jm#c_+%?RB7LPmK zEC;u_k@e*+@!DCK=Dc&TJrrJv>3w*GKkJ|}8;!<5qiQr8t;V2pAnwO=TT#(<{B(D= zVOBcDYz8a6?{{FHG})@J2A*+fp{fIz)zVA0nej)&ZTDq>G`qXlv<)&8j>N5a&{-bP z79no%^NCHbFl{JqJ0uYAI;89@3(%aF&p?#r<^P@m=(rMKXTo*XV9Purf0|dVf&9}%9zp2f`>RLZBn&1WWHcJUPv3#b6A?tmwE!d! z(qokB$6B4;*L0r)c$3A$Xj8D!qG1z?_*UW3)W|D{0Kx~&TC?qSHm5v&2JxZP?$4No z&1-6^AKPs#5!-dL>+=mK!gfOB1wi@x6E60gPM0baS)OHl#Tr|t}a}mZflLk zV9Rz?1=f1q?oKe?m?#N?n!=4?vOl>Fgb4+UWpty#cn%t+rVv0(+V70s!?{Gb-|M!4 zuuFsy)D&rqkdexSBZR_)1B{2hbRpgjG(4iV~osDCLALaCTubudbW@-5kO4$WF!pD zY)2xz!5buia32vyP*Y7~4cV$pxQ0-eu*G=JKbbHQKuq^UfHpS;rK_5xyQ;OO?y8#k zr75Vps(wnLE7&B{J;f|-D$NXPvUN*2)vVg{zK=a`NcGLeZZ^a{Z_u4XZ^ceGhPK+>2H7`VfqhWAq5Zfs>Q=@=X?CDA_eh#gi)n1lCxm?NVR;?2{>dM<&Z`qlXFk!nS?K(`NGGi6M3BzS ze%?D$n!6;;e~M|MI!z4I+$FmDvDVd(1#qthP+*~Q(ER58U1Wr7-&qEpJK?^7cli9l zKmo=8W%uKQj(XUG_PY>;j=HFGHoE}(@6*)p6L$A&!2Q0mLfQ++KaQq5`OYXrt}+^~ zhPcWWDH9qXIm9x7W@nS|dq9(aK=?hV0T254q2G09(%TP3Z#bjL*)&^4-PLN{)uHYX z38(Tm8s&3+guop9CSmq{-}wGN&FR0-^nOrQkJ*=VrLh%X&XxXp!M>cUjIH=`uJWg0 zU(VIWR(v^E`_r&5=Ne-xzMO0PY1l7wt+5rq%(ebB?EksW*oyz>I)57W<$TZBiZADT zQoh$4<*u6R4cSBH_pRJuY{j>N2lw@`Q>URd1 z%f0kW09!l?6~f7Rw7nCI#W)V(7xRW%6*8S$B*AU;EY#NM6?f-BTyg)RY~>Q`|8Be_ zLwj&fl0CR<=xGg{?AwcbqU^=(qrJE%dV6u(c`xpX<$HjU?ruW2U+4}9-E}^?YlZHq zM0c%6cO=tYTTT~OE*A>jGlcG$K6)F4-swbdqepKP)7$9L13e`y=MFs&Tnuz~7rI{) zy61_!U#DkqU=#Cc#Lnhi;d2i0IoIPen)x8WX%3Xiy@$~MhS2|}Pwoqa-UUSOLXTdG z>0MY!zk3S3?+CpsMBeZE_Q8K!=w3#2zwOZ-!*su0y06}%%C`vXvFeAJs+H^+c$_*r z({g?kpi_Tb`x?O-!s_R|4bb&FQw_A8yQMvFe)kgjZV~xz_Q`dV$aN#hb(1I8SeEOi zO8foy7J7FGy*rs+3zo<2Lhm-Bce_V#9MeO9lf?3PfHP+HsQ#b8bBZm^r~fH59PRZx z(HkD!{;|JqEEeAP2=5<>u750b<6d7`-Yv4+MY7!O$ugd0xw}%G-bd&^B=jHl(R)zn zJwWsx^yp1sdJk5r8~X~qCxzZmMc$`;W$=X1eVph%;nAJQbf2hH2Kx!!7liIFeDr=U z^qwbrKlkW$Fuk9b(?h-PFZ6yZ^j;D#TwIe2RHT82yPDz2h-TGoyDr#Vk>DdqXOkq}_L>^Dx$N zfKDT5!VjIV=#YIX)+_+84)ltQABv2B_lfd>i1I#(@_{ExhDG_HQW-53djAo6pG%&< zV7jf?zCRPX|0cShd33W(7Xi+QKq=j2Le~s3T@_@yRj z(CZX>Gko$*7kbl(-gJ-N45l}|l6;2>z1c!YLPN7rvo z-y!Do=F)n4gz(!>`0dYp+L6z`!e<}iv#-aei}@hH8CA~bPT}*bQa(otpXI`5MX-35 z??BD`Ak4QCkdZ5#OEZB&vwiQ0ZvCbpC1XIS4#OD zD}2@op8@7G3HkI3pS8rN-{Uiv`5?fVT+Zjm!spdeKF0~4(}mAQ=95M~8-&kk#Ak!Y zXM5&@04H0{=U(CSS}C8^!sl$^a}M*#A)m8^&zZ#MERWAT=7Rud3i5ehIWOYcLoPZ3P&ae#FeCRR3e-l0^gk;#9P=u51>p|V^D0f^{5e3k zJ1Cr$!zAV%-@dsu0mE={u9KwgsaBE?5x{%^ug@}0lkoS9;t$`uuENRsx}Tyb=i)(0 zJ}DH-EcF3X6FMjG>tF)av0d;%B7=?s#WIs5$=SFD%E5DrK_ui%4V0YVNe`h~ zqf(KuY^s)1t$biLd#csmX(ekj_14HvtF<;0Vt8#N**RVH|CIDYtCkKeq48dC%jrQG zw^ONxxaHdgpVldSxIt&BMcV-YH|X2#jk|`2$XP1lLS?otwSuin>#WwL&NQroSSJ03 z>}8~?aKX`0o6EEJSo_%VmwyNU-M{_PnM-;0CULP)Vp^NO@^Cm2a^A(#SN%^EajBZ9 z1lNwxz)w7ErkJ>ruXOpVub$Kg=z6F)V^}>}wq)=2pP(x`yF^1;muj43k25_$r&_VH z+s;2NJfbFIB{V+EM<@((J_0-t>oG1xUmk11NK_}Bz9Xk1AQ7((C#E&~br4B}han#! z@|jWL%32F=O>1G&8vDHt_sWar&$xvaTG?NSFN?~#=uP&5E*>q@w(WLO?dG>o4-pRK zLeSwnHKbrd>D8rk_vsPj^*)wVQu{A(f9DCM@|2|MP4+|+F=g4IUMl07a5fwY_ryZ> z^!Gyc6otpxu+0AfbPARIdDu6cCr^FgDCmPXmA#`Iy9@VkD5pVT+i+s^NH|e=X1|w& zV8ZzuF1ht8r-|5+@V<@4B^~3G&Ioi_t$+wg3*DZV&yTc;ZW;3(cJxSX%`G?!X#X2` zZr~z&dX{Q;KEk(deruyQK2eJLK1e|??&&EJWlhCGq$xa_@NuB{)M5P|G)mw9hP~^D z@CQU7-O%=2U#@DxsYx?;2&ZaiP7G()gj12;1xVurNOA=H&XnI$q;nel38%(%A4bn{ z`2!(s{(!Ed=ylo5QQ=g!`!5E*OzD1!p3Az?i`%s`VJz={nSiUi@1kda-tEewXpRAr z%|86gFTYd?IW_}QhFhIK1@s9LI?P#XXS@HGGpXKz(sCCZAMKRCw2 zz3r>vft>jeIj1r~@?6zG%^3+PbIq!xxP&YiLby(4hf$IVB2kB`&>ZTE&B6K~n?tCy zIXwJ@*BtKpVn}nidI%`Q&Eaf}2>rLsfoy*~50C%MR<4$M5efQZI(h?h79(?lDA|9` zFz!2KNETk{c~(5IxrzFF|3T2W@Ax5^dZmf*@ZlyrJD4s!Q=>P{7gXW*HQu?U(jkfM zhu?$1Ybv+tRvdy=@u|c5J!q7^uf#TeoUctsi${;kN0Hg{@lvqx>_@3@mu3yqH{)0E z`%r#Q^9aH%`dE0uAq6kGJ}prCs|3R~c$&;2J~xWtt^K;z64xVUw%{0K@Jsi_7;`Ya ztj_NqhUR-ZLKYR9?+E{ZiwDPRRVo_so!E}>iER*M zFwkVhtz1bfZ3?P*uxdMv!qkH9KE>7=x8(e{w9UPWZFA@-GJM-?)NRwB`_eZ0aj}iQ zH?)nuGz26=)+1k(4_Q7ITWhQTswDsDd`hKic)U(!iLyrPB{bmkPs8B5Pfvh4ebVsb zUPKk2I;`LQ;~u^Tu#H&N$31Qvq1pHQhdeZ^PKDoP@;ffz8||9l1;-k6Msx&9f0bZA zHpqEpTmiqE<@r^9U1N#sqM7wD?&bG^P<}yItqgY8@c5R`bbW4ktzyiV!wqVm1^lCe z9wqds@!t=2Wp7fIuPIjLZ~gxnW)>B#t{sP3T~mjEWSB_~{!haUjWfsVaVD9Mnj`Y# z%~APnGY3@YQSibXx|=9nArfy%*feLD$k#D)cG>7LOO52Y$F@B87{T+BIs7(?-zZV> z{4W0UN^fp?>81OR zc%RCDHC;!>w0InII?2CJBl3bxbyw^1Io{K``)Gaf+X~Qu{Xk0e!*A zG+)N_QGUeuQNw<_gtIoNr}Oqim_J`!8v&!ZC6b*SNkzK{u-i%1cK53&b+HYa@=nwv3BVa~eIa(XJy(;;38HQM+Rl*92(M z=Dcn}4TT+3dG|FRD{a{db|$44uuQAB?`!Co#$GD33(I5%r?qo?@H^CkX0X>eElBni z`MA%7a6-bT;tl8?A!SMbkV$9avP(^(H_0^A+p z?+e`>*{LzzuNwHA-2E*Cenu}-X13U=Z1-*a!t;yQ>1BDo*M^L2+x1KAj{L(&&ZX* z_R^z8dkI}&HWgU5sVv2J5UVh*-n+M>te~jgzh+b}4=RdIuP9(RrEcXs`5kPC{}+lP ze;jB#zbh&@lR2?OyD>euUsIl+%mrG5rEt)O=LVMC9`dD^+a*KFp=-x4hgE<>32PMh zH9=zzRGqaI@;VOh7M#?XDoswe?_tLsqJ_514$5|Fv8^{Gbc|Cc2GA|_U&#RK$AeGV zo%p%cRWdgdL|=ZcW9aHwrm@0`nb>Ro;c`wMgfknyl5nM!a0EM@RESo#loO#MSzN_Lo>_(}8SHG|ct!neJ?j1k z+QwUrQB$gUJQDyIh`Z*D9AYep%D8r6(6oI3$iQAsBy$N_t0tpZL20%`XX~ zYozP1)B)~B4pESy8*h~CdWl|+m^s2uE$iNkUY2*SU|`t zC)k>9MbCbEc3l`K>mTcM|M(^JCPO-<_ppnx*&73zbVhT-b;j~@xH$_<$k)J}lV&ZM zS)tV7_|l9olPkJb%KAr|wNU?n6Wk68O^}dgIcn%6HwtJt$?eF5#3SVIY@9KwLa&{y z+?ls-t?w5W{aKm8pyfYEy5W}R%DS$M^X+H6vt&?=J&krej*k6Wa<$^{?72L z_52R@{2t~1rst=wUbS)m55428My)cm-|)QD0Qv3y94O=IO|+em;)Cf>rP|c0xvHG<}tf`uJDH8x`w1!31TDnD<8ml`+b4wuQW; zruJ=zlfk)|uW_WBM@Tg*hN>nOkCmz>#^ngAiAm`?+k14joZ3{Q3Rme&#AB?Sny;#y zT4xR@2NhGx1ksSZ>MQAFbgb(vFe1!R^L|HpOUdXkad`KShUrc#5zTB@?!&f{l-0rJ z|6!QaPGw(;ns6#Qvmu;K!L$1XG|T^l%`;Wo{XKf7^9#FPEO$Um($>j6m5OxMB>~RU->kxm?62b!Qe-?s8S0Z#+Q92+(N*p| zJ|4x05tWMZf{iL%&(x^ScxCW6G!K`#y_H>p zC+*wvQ_WGG+jCc$+eVF+vF^h!skb7!r6Am@%Y-qGLcrKcculJ?H&G(Q3{QxOKA-Sc zmE*Lba-3F_V}>Wk43=Y^PmX&^<(TEkG3mdTgg3f$&*!$f6&Ia`QN0aIExT-?yb~4zm zVoE-GNtGRUzNhEtWdPix+lvPVUNq#uzzCC9rgNyFrKacf0FA{2$6Q(wlk*XOe^+92Z|m_ZZgJes>c|3eV>pUu$Y{@E-!tZ ztX~UzgPP^8@L1UzhU`n|$YQ&Xe;HU!(I7=XvKL zcHr|6=lRdyc#Osfqp>F61K>rBl!#fL-xSYJ(|%~@Xu6K(Wk6jD{mnxPzhauInVRH` zs{Yro*A3Y{rt>aQu|uY_jnd~Vu}+vVnPp(Tv zu5XcCmwIyT$Z}m;QQxCQt=;}=IHpoHOzCR4oub?52o;Zcl$TV8kldb0ref54n@*Qk zcY;)RXe>=dRt@6Hg9X2XvP~ku)KzBBFN0D&fybK)Z?2Tmd=*R64suxvy-8Zfqsnv~ zrSs+U$Sk0*gwOZN9XE%bDf+!y^m~=)_ZrdfwLv)pe4S6xSBj#qAVpv4DS9VX^p(B} zfaQB#8JCTI!}gjy0_Me{YbF_z%>h(Y;oz zgrM^utGtvZX_f7w^uE7+z4~W4lYP2@u^Dfc-jz4lsQy=wjk7@cv{x_XF-N)zyZHX4 zj`%d9~hmZHI!uuBDeXGZNXXbrt#Ws?b3cZKs%l;l6?1h^6kp<-RH?yQYokCO1Y1cdmiwN>v_WG5#jTgl-r{|eh&-3hlt<9 z9>3j~-@_I4u|o8*Uva$5Ykj0@%+d~`k@Z35qp3S$)7igR$57UyzHtWS!pPy1wj zLS%iMWPQSub)nqxP+2zzY26%v9GBqHQyR_uy=zH=E}ftk6U+xg)}+tcTin5x;Lg^# z%P?wVeSq(ytyd7j8+wF@vbeKe?N2+0)2_Ch9f#2E)^t~3)Y(970eeRwv@?WsB2D;G zf8uR1v6-dt!Hng0czrqRdz0wp`x(;rv!1?pXMI0gS>M}f(N~K4 zA|~EIP*HtzHSS?reY*s-`gRSV`d0dLS(0{po%RTSoj+glwOR7@E6LX{efj!@ z*Dt($?ZNr_Mdf_W)BKLovhL=|x{zc&Vpv&s&}mosWxYV(7b3F$PGo(_C+lxS))z_E z-*~d_$+G^YvaItpzhkwmyL+qT;ROXad&s2Q%+g|M$z2>VeXoHA@7?9ORdRqBHF&~yiM7sPkSAzi#$ZdF+qRFZg4 zop>nSMLKGOmUn+o-X$b&3E9UvZ8l~43cz$vM~7tAqEC0M)D-tJ%QLull?*P{$)*D+RR_WN9GP7X2CE2Ky zX(vqvEN`H-obz;_gSOl^q#nL4_3%xphi{23_eWoSd_(Hv>r@}#@ap4Ua_3Lw`nbQ& zz$SlR_f6sZXW{!7;rpJC-@C%^9pd+{$8T@u_ikl=OEkX=bbVUp)u#igK5ZJd6c4B} z1ovpV-_)hJ+$+Tu6^7uF#JxK4PD7%W>ZnV!ya##m9!&D?;b{kTZqha~0nft1tVrGEUwS6=T+dHs#b>wT}h z7IS&M@0C}H&JV1j^W|DMmusCL;^}Xd@OnS zi1PBWmzRAwFCTk(Il^ZLk0*{WK^cbuf6N4mX{!)3kz$e(Q<8za&cLA zsT#{k`b!iOx+$-%U*|8&OC;Z4NWT9g`5u(A{L+{I&n5q#QT{*o^1m5D|g$e5K4+aU`-cob#0 ztuGD0M4|LX)&CNz2bX@ZZ|nOD1YmysZP1Rk*EVi$tT-D!sx?Ooq3Ki2QbCGY@h6>xutxGPN#v1^yEk33_k0czzx2y?vEPA8yhXIwC#9x(ezT>PW5YVmXzwpOQI3n+Uf@{ zWAJmTt<486oDLaukDwx@IhHS+aySXsq25Y9Ry^H>w+v*o7j=M>XcueA+hlng#=&|X zw6|ZPVB&mno>HFhb2zEr&o0;&u6OwoWajbJzkg69xtjw zN8=qIHm#DyI5k!cd|q&LswULKyK%zVv5DGDn;oI0H;#{7oVOA+nQ$c8QyU3&z7@`m zRyMbiR88NifSirM@54l?t%S6DGnHkn=+`m)I?JzEy0`in?BbT<($tHn54q0Ic~mjD zM!K2OhU)CR=2er5&OvTY>!>;X+oDPCDCTdj za$Z*@fYl6`>jBCU63!b4I8TihfPZF^pqa^NmheqI5eX^xYU=SNiA+cQ36uVW!_l5y zN_($iXzx9QwlCodm5S<|Wobo{;agY93SAV6{R8m!Xhp;!q?UO3p_!>j!sF!z@q4RO z1DCUM=#vTfEnFC+9Q;B6e=2q)B>$}%;`XM7k{+fJ*9!&Z;I|2!W3gcsdp93?8rv|~ z4#s8FhOt87eIm$$j-4^;l>#yG2<{AXgvOpoQ7d-?ySxz)pKj{CnOH2%3xWThnn-H7z+=IQKoZl9QC5f1_Ajo-}p4vmkW8YSQSya{ZD8nq6g;gGXmrEh+gr~5;-bYR5&6APJ+TkDr!_+K{r zUmnAk;_LJNxEJtcAJzX6m0}+jwK?z!me-FN=$^>u=_tGgyL_`b6O;FoaDe_q>`HvP zht~33svXMeYha&UPWi&9Tubu&Yw$Cn3Dy5Ec)zaiWN!anIxI!+#XTiJ-#hrXLAQYs z{P0@u)5JkpUXKO%`lPOZ(TRkj3=&>eiyH?Dm!T1D;=YBxQ|Z<%=Y8zY)TQhExE32F}f&*-{e^W<&7W3a@_%aqdS(+!v5ZbHsfHpEV&4P|`4^ zoP+0@wnW2OJ1j}ll*6V_Nfz((ve*=khu!CaNNxrM9*4l}@1ia_Oneh_@w`erB(Q{g zh88!|C$Q|ok_6Mb{jZYs<&gDc@3b)-niO$^3Xt(!y5z7?V%`) zV+zhUzKiu2tX%w{Fm^{7v#`D9WYgz`X}7XXpBSbfe{uU%vWi2^{JmhtWTd`JAY;zo zJ)eU~-)*?U*Z!dgQfA*E=HHB<1840;azUm4qj3Y+epTOD*aWdL;(YRBe4fYKWU{fs z32pjYB!G@_Fp>M0pknIudfB$a+j1HhN)tQ&ZZ_Ku3k|w(DQ@NhX-I&5D$MlH#@am7 zbbkwS_MH=;8y?TaYW@Q(!;z}+tf!|d=!=L9ZrVVgcv2 z?RzVXL!Zrc!hHqasOWt(91~BxH>!kkK7c~$I|5pa^H-Y6csQ}p0@V0KlY3koG4Y}v z;AEr#hFj?W3cs!Z-;%N!ej}mi8X@i|c-{@aL3zht*9a3^WRwg$WU2=3xQQplvEu9x zMd>VoKQ$^D_KCwinPZX#Q<}J8XyRJc8mXSRt$Db3-;1yNY_c+O==G`hq}zS!OuV>< zd+tBIx`#688+ibsj)}QwW-O|Z{Gbv^Jo4{EN=V|RYC}nW1zI5$4>_?CTDSeLw8APL zcETmJ4*6ecMN~ZEgi2_&{I9g4Djs$05?aq1Wwf?lkTDgHIhLOa48bMh{0)+Ie3d#; zqvADA@V_PH!MyyY`(DPrIvv0*^v06F*pu}bbyHyMb2|KSU~EE3cn39hr4FC3#@?>O zFRQVi>2S&%y`3rHRp#h(IgDqm@G8G+sLvo{ZWGQhy50<6C+nP#R#J#Y(bmqUkb4l? zX8^##J29xpvy)4k>!UUf7|D+H5eN+0t7@e^PTYVo&H>OMXX9bfkb4MPVq^UMkAnVZ z4o;Xtea}WguPXtA@fa)No^NW1i*Bts3&_axD2(Wy;gNQK3M6Vn%|s=fJwD_f41tJ~ z0h(3H zNslcit?^WGCSvLebg0*64d<^W%8TVtc?+ zg&judV=8v>;01J3D5tKHmy}jXDB+8M;GD)mFskYrjlskTP$xJpy~7M1e@_n3-M_{= z0lw(fkZ~EqXmjI*T6F@)`4p<*T5Tt=6?Pa|?6WU}7~8!VIIgcP)zWdOrAtUl7~?F% zk~+p-UssB@8qvN*Xc*%h2x#l;OL1Jpxs-4)##xRRQ>(&RT04b5Ln!2YJ0KeJ*&;y$ zFZ>!?Dm&JYsOdfe<$)iyrPb`6>>>acwWreO(j;<{Dts`)vw5&)F*02XMP?zhG~I{F zX+GqmIlYYL{_SNnAF4nzy^TzMuSoOu;dBBtM~y7fyuBjL$7q(qPxm`G3CcKO z_i~)%LG!|?SgutSPV?wQe5rZHk=yK_Zs38V2CV;Y88ecBsIK$S!0~c)(cg&S^#>XH zv1AAxr`a_lZHCa*Uyh1Fqn-vid&8HrVzfVJ4`9w_4Nabd)H6qIE%iM^gt(_vh$%qk zNgtVeDw4U+6XKpBLW~=|wbXa{h1f&xTKq1&99xV-H}Z0)*2M89fbHOi9$DPoC{)U6 zYu^K2vv}BJ)NbLxy-o&QkzSA z@tccRLQsz5e6;PLC3EjJ;t%F=sjP&rVxO=#(%SCTC|;uMja8=Y)SGmR zUg4ploWcQ zgGFwK++RuAgwm~o|(DIa{0iC<rnt>apT?!nw9#k?^}=@J zjpOZ2ZDso*jN+cCo1~1!OBqeDd2i4-Us;WnvKm8WHP$PugSf25Rx7KstL6RNYLRDF zi@dt3!oTLluB|sEHmGAQ_dGB9(jkf0eSr;jU;#F|5xmE$692P`rB*y2bF=6&ExOEz zE^{{Tv&#B(I$3n;kWMFiIz52y~1i5I+2Hic&Vy!iJ7elsASvO!H=+f4CYt3UC`WQhMF!WIkeUzZQC*3NV zb{esQsQV2g*3T%mOH|My&lU2VD9`cooG?WEv09|DB+?Fkk*=pKZ(l)4`5|=1YdYhJ z4sU_C=*uBNmrkP;&KR#ZXcaDmpffI5?2qsc;#;H*O_Me>UE0t#(uO*1IVU)i1HpkA zzE(9=TGbS4Ra3oIbqKersa~t{`oCL+-?qYUJK?vzk7~D2okLW+J*q32YPW3+{a)d1 zLU)1C-BIZ7c4X zYV6}xWACaO`$W~)JFCY2q-yLjlH*O z>@!tk@2DF4Sk>5Ds>VK4HTHW|WACXN`&8A~8>+_sxN7VVs>a?|HTI`fV{fe*`*1az z;F_vQpYvkZ4~gYX>!#RKIRAak7{*2bgE#K;M<)zk6UIGRiwyc!cf}vt&A3<0^}#YH zf$0*YQ@Q9@@j`79vex_r#;IIG;b9nwc-Qy_T2!~_^DjX<#0?{+lQX^PjlNqTt$;FZ z-B+zT&?W&I&r-oJF+36fQOYmlM+aLD zM0_ytb`^Y|`O5eR=zEs+6B}$n7g#(Nbaxi~6ya}Q#798iFB!jPumwNE6t4-o^8~-d z>O_15^u5UVwSz7Asf>7S(48;%J|mm)5zzMnV;c08%h=h5e%3OSgVNJY;_2i3&QJK$I8uZ85-O-y>g?Tf%x54fNRZ1aF!Mc@bz zIKK#N_kg<=fg>vcM|r?G9&iI`^H9+8hRR z3ET&XLHFC}YG+qW)}qVA^xiILv&Nl8KcBq-HCHEtmMy=q{G#%+w9l*#{gkcgw)BW} zdwOJA6(&tEj%QMvFi)k<8kBJ=B>N%qBL_wQj_@ZN7J=>c_ZhU~65p_Mo`RjTa}N73 z`TmvBrD=<4kmrbek^>|2bsT8bm!Rfi*nK0x5NZVp^xaQdA#TEDG&?BMtIfo8%S=v_ zGgvePf~LQevQUBHag-E~S;T28$1w%R!spq9(^`&$amrnT4UXgr7U>Pa4GKM5R|yKt zSN)*?u0Y!zGzF#@grsj)nBAyKuv0cc8B=W}mr6QEpplbwjzZpRMcF$WbbN+h*6oDL zQVWwk`=vkgm*WH}$C&DS0Oy7OA&)QrMJ)G0WNP+7pJ5Mtq4!(|$=<<#jKwLkJNv3` zVp^Bdggjuf*S!q6eBtBbk9-LG(HfR-uw?|2-;s9$7e!9bRnC#vC~W0?3$xpyPl|!E zlFnuZ$tf`awQ7)@5Cc#fgT~2WD-4j|4i`|U!8w<35;N)Gc9Hbba_5u#4FpSj91O57 z*vEtysOwMJqNRnmwBW~VdI7$~;I9dyh4l_L$^h>+ZiHVO{Kmj*L4YQOd)5O zIQ=U4Wyq0M3H~*++-X9dyWt#5G`XtaSE`jEk0z?xtyC-HGR;7>SE*J8cbZz3IF$r# zsEpqmMj&)4k&hv*j~I~oFMe5Z?1~Gwf-|XBhIN{lm-v!snqQ`s>xK{+uZduQX1jVY zB?rVXek80d&CUfp$1w3+D);NA^G$$7gW0r6`-|E-$C|~>4~1Qz^Bv*bh0~A-;9d;4 znN*#XiV6&3>{ z>D9Hb2uusyCmc6rn`})f}e zz4Nd40Ix*U*TtH2J8dWDr?od0s>zHCg?nqcvyM<7E{JxxwI`Yhhm*ZE;lz~RQ_1Yx z;gyWnN8(vh|Jo8AxENuStuBp$0d0^DXSA0+6Y?ya+EHm$2?t#KkH)4a#Xgb+P*%nz zQM{jY=5VW^Y8@gCw-QPe+VI1I7@!XeVqjEf)NDs3U*Ri-1-{a`lHiMI0BmjycX zamotV)oB+AG*k#h%0p}AK9}OrLAln2+=LX3*IkrEEkH!k4@bDf*D|XuMj2 z9Ap%|OL;WjL`5EMie6A2jrVbpYn`GGD38XgWXQ`&(R-Fh<2^|{!mpJprAnd~dPC=0 zxy7j@8ZUF=v39Lo{8JK*_y6!Hx>oK*DT&7GQOMPqUNrO!Y5IuaP8+6A@?rb0;&Fa1 zP2{)Q#KR+n={YLtK2Lq%@6fDX!L4mHO*PDeu+?oOiw^tWH_f3wGwhzG!w=62V*iXE zq}pWA89UnN`LtMcAHffIq2nIN9pMLc#y9~N3*mP){BDKc&*Arb_oB8b z9PKaTx--1HjC|zUTgH`qcxM?o#kH@Dt9%t#8M%eEr;Iy>DvmN*LePFPZV*-6WVGC* zy=2_0RB@7#+g$s|xRa^kBBKQf?IGhnr;3A&-0JBv6M9(p7%kAGORVrJ&M{gF(!Mcm z0uSpNqs6XtnF&3tV~m!!(j}9GDsC}a&`OtC*26l*Xemki#JG#7;u50;5$zG9bqMVc z<9SAj39sE@C#k|2hPSngI*|*!VV~^8pZe@Xy*7Y52%6cxCm%Ylx$Zs85AR-qT2D8y zYglGAPAq@TU016P$n1103j;i1mEKM40O;eWOVqPpJ>}K&T;G}i_J@}tY@gEICS*XQ z@md2}E@6wpa@KR_>4!q6oNa-rN|5dFtBckibhqt{0ya*V9UM-yuD==%njy`(240z9Dy#1mB5O4-4mK}Fvgiy+&s8~l z{Z6#*vjG1ttT$*$Cx@Tm=0%-S(BXKg%jN4A>RtZ3(Jue>xXb_U0Pga~7}a+V`X(=5 z|04t;+K(YHXx|He`|cw&j8T2}Bic$?al)IG+y@XMD^Dd65Befj*IOJxciy@WVN_k^ zxQ8X~2$cK0gmWZ3H(-X79K>8FoJRm_11%9xEt!Q+I*KPe7Y4j@ z^Ye7w&czDBN%}@03$H0^nxtz?5MNWpSM!3St=?&V5bZrYN9GZ9ckf@Zvh?qPvQ3)` zkb2Ykz@#sgs{Y*(+NSz%`0T0^e&jHQ`*?$B-Ya`yq^Zk`e^LAm(abtcnl4XT$`kDK4Xph3Le0NrnwN| zHz+Kz%e)d(Qd%uiTF^hazYmmcdw*-lws(;yWsIH2@*po<^9LI{o{VxGh-I2WM72hR zEfO@R5>Yuk@<;#S5j)NFB1X#5^b~!Y;UV@N3B6XKXNKKZNJzVO%LrV%5~8pBiMFI8 zdi^hAOvvf_WzlD)M-ko37|Yz01#ZfA{{RFj?7kY{GXk_Irra&?I{l?Y+Pn8e(vBFK zv{Tt7sa|c-eJ17w?D%-!YgEr-Amr;<8{VL%@g_F6{78mnn?nf~tjy?|eL&AO;j9&o zWqu)d$zYv)1k3Y+qw%QHTY%qL5B7@_vG91q+t^@D+x;W8Jcgc#WQcMoA1mB|MgMgy zdJyz{oaEFbYBSMr#EM*U6T!ZVr49<0tnd-|KcyKx?+ z`zBzBn`nkEsR_Xdp6u-mL+!;(q~%FcL}|) z51~mOgC|(u;m*W47GF@Lkk&1J8v$(BxN{stt+@!wA!<*|g*p=FW0~-r8&^plC;uRu zEE65+Srqkg@~s zb|l0ae!71x;<>w^a;_?;^tU0DQiykv;MED9<-YGjwA@LERL<=KA2%%iAqXG(5Ozfh z@0W}7_ln|7#2Wy8unC6T1*K@t@&t`{NFXX-uR&aAHI$Cq>)T6;=TDw2!3_znI||WO z!zhhom3aek`3S@A$Jn*?rdOEw4Oo;^Vn0Di6X{<`4q}BVj=o4lP?I7v;j`dlkWGuH zmssJOULrwu$0Ewp9>T{Sg2lo~3HXSPt5g<#RgXu6rR5p;G~ll>vBLh7%SD-3DoPPy zSW!9*8qUoVFM&79{Wl5`O{C9O{hvWF*QnOvvk$9zv-3F$z%gj-pme#3g?lIK^MISl zA~{R@u6=Vy5NZuZ<|e7!I3Lix^G`&`Rnk-&#(0~mx z*`rw*)*W0+!8^GWn2$O7iU^PKP|1v^&^LcJntNa^{Rfp5G!y&aboNdZsNPKOqns}S z;?V;zij|$EoI&hjLX0(O^QiJsKSYUm=m#2{8Ym~F?!Th#md#J;q}|Wb`{UmG{q%mH z_kI(-r@VJMe3x6}ul7bl`y!X5lH*w(>+iG&dz3E9WIfO%~^Blh%Q z#+xg1)dcHlkZm`TA!^y3!Jt~4Nb|ds2VU7-Eq>0kxB_Ptd3v&7UGj=k(g}d(FqN|n zBE}%XQ49(y%XCbMUW3&!JJ#AfR@Z>e=AdGC-ml?p6T%4*JzlX;cBHj=yoXvJ4E0$+ zY14R(MGM|3Yx6d`ALwiZatN($G#zLg%=IT^?acl@7G4Rxa9_|z&%(W95*G`G6MZ&| zZQ;ei#Wc01ToQpV-mjs zP05{Gus>_CoZIjTrSuy_2|~(NPR{mbmw{gl1)FX2NRORTX_W(_`;pz>oaQ<_9r@!0 z(#qKr_X;>OEra(IgK1+tNA&~u7Vu5UQI&NpTc!>wz5X0@6j*&{qE{8O>;d(PdrGnv`l91{YYJm%OWy8$)_B-{|L z1cGeB5pGCC9?T?&EVD*AyhxBk#9$D^<&7fXt$2ZgXi&sEA}S)Hq6ps0zkXHy-n`jt zgzx`-ft}Y~-CbRMS65e8-%zTJcMyNpWfq4BU=&BXI?UqgE~>GSlvzs7%hJ!#-iSDF zbXk^oxx{%$_DYaC+nVx7_eee7^JdWE$d^TDPeodT`p=d3F7y7d^rzQg5P zf8uK^VD7aQ>D1j7X}xtcm1(^c>gfN|LY>$G+-leI*3o;YMNSp$=yOgi%Gzsde2$Yqa8**tcT^bnh z==ab8pMK97m^Hi|{n7w(+FrQ$Cfot>WrjC*M1ctvCFQ6{b1kR1I%hK8LM}t-Dg&ML zTN~QHn9Cq$WdZ*Vgjvs{no5@zO3ixK8h}=hKIL$1k6I`Ly%i{Nfw-8H{;`W_ixc_uXEavVNZ_p=-z`wEK+fm1Lpf6e}il zdvHB7NjST@yZETN;t+B;Y6FyCZm#Fq)S0Bj>ql~SrPFib0LP;anR6?p?xfJv)t%&A zVD?my)All#kn%2_J5FV@yu=7Ppl2plqbE{6^E#>5`6-%p-hxh4sfAvDF}9&@DZl!5 zW{=W3zuL}0nJ_x_hPk(3$U} zf6-5Gq0q=8n@$~q0d#wgRZ7bH>rvw2pHSBA85AdGFnmAAOXfO@IZsuv=ZS#_Y0GMn z#^P@Vy%0}VtZZ{fxnQMfBZYYhHOz`-jz6nC-*du@y{IOaa!{^YMfAE$Qzt};LMVM{ z`a}eFHKM6IgcZa0IH2$JUGUv+@8A~_hD*~nBSLa4hn1+1uJqZi6R)xU)E$VxvzWbQ z-QZL9CZvUuBpW0){Jb9S6)k>?;d`q`dOW>%yCMG0dODy z`w^hvl+Fd<3;<3dfJLbbn2lYUfb7+MYf7cHXO66rmy`!TT2$-xed>;HV+zP@G3z}+ zfdMCnyhN`8MC^W_0_+{en5qB~Gd@iL)`l^rD?r56&rpEV!x*K6f<&x(DXAc5M{!aL z672^{X$4sj#mOj0v>Pd96=Y2mr&B?qoj|EeLC%cgcnT72H%i?Ka#|E8ry$WLqLf#V zv!Xat6eQZ5lnM%RN))H4Akhw}6t=>`C{EZ6(JrbKw!`8mPS_9;OIr$CVo4MyY>H_2 zRSMf;Q52`7AQ69BnyDbCMsfB~kcb~G%~FsvqBwghNW{yQW-CavJ1fmmkcf9J`3%{F zy={Knrmku?iUer%0Q$BL^&ZDh)e=3O#d}o3@D9PItrVqxIru-AtJ-u6yjMrw_rrUA z2vrz7tN;e9spZin}U$a_1y|B1YJz?-av-aFx)7J2W2 zcV^_h8>M_%H<~wNgKt_R&G)gxKM=h0EPV`wnIolD{^2G++dOs~1N?)`@HhZdhkQ9AkZg>k5SZc0>;Y7lqv}o0lRfMH9AQ;E=Li0u(#w9BieH5)} zEC)lHatecUol;^R-l<1~QgV$m!cj3%6E3V6s|Yox?5mH$Q#xy2)h4F0XcJF4OYadRW9Y+#sM4kPwnG#ZbI;a|u;S-& zp7f)Fjzo{WDavS(K6;a6G>=FkoO`#T&S;O?8AY`?s>+Odm?pCPF-^|cjouK$g<(}t zyCjvnIKr)@d_C+-D_<}BG6j3y0%8{D&Mi3eDzxa&on3I}&2q^xy^xsKn;=Ktw7FgB z$Hh-#gf>VfmS>>_cVcn2-YU($yQhWn>p^}w%C8goB^CA%=V@WZhJ@Z=^1ym|4{g)^ ze}C!CA8;5s~n%1dx zYW_4Lpx{rZ-%6@JZ6JEvN$sg&gL((f%{6{_BWbriLR$`sJ1$&H`rI zJkQuXvJ3uR6rf^tn_MF_RdOBXtZs|p^9rsI%@DM5iYGMJ;r7VE^8cg>=XbXI)7>3z zkB|aEY`3#}QXFXO(b1M_ZfCo{MThAa{07cjO0qLSoBV)C`@w5& z6JvbJ9=o;)#2>Ny78&}(waUuEZoRPH??<0m)U8YL&yn(j%?`RyS@DWjJnQHg;ZngynNs@9zmdLsLs!x|r$?ekES5rsk=iN_j_Tfzc&jMSq}$y_@~P_Mcow+fTc=RpOm@n zUqz16+@V1gp_CXrU$37|^OAoJgpeoe^$X$I49~H;kv08Ou|OSMEQcv_gZqX~e_kcT z=`X}#4$XNqyN^gNtA;X+;6%mUnf!cDZEB}BUN}3vd?9*7r>Q8}XymEAWoWNKXCtnK z1Nh9Qz;Az1DV7VklvuhIa4tt*@FM~(5$eLO6Vw9k*yQ`9S>bos1 z#>3|)w%r|*x81x}+npV6yOZK=w_LaUwaDkdc*`wlwcOtAE!WrHaw$swIz^@-)b~zo zH~(}M!3syg#^PUaCx2)jMOg|1LC|J!L4TmukC$2c}v*tMqW98!`Pe zFvm@$b@0SO*&M54Cczd}CG1(9R8!-$Fo`{Fwc#(MR7GYI(SL9+_lI)sN(++ipE7YR z!!5cDbeDPtij}?0Zi6TGf?q>+h*T+rK=C?ef*s~0eOlVOrpY}&+U;?*c55;ax^0P^ z%$i|>31i#Tj-v0A6X`7)-721E`UByN8c}a_8;(C0Ym7;&C?;p8F|Tdj6ArrtpdZS=mFH_UYxFwRxM+!o;rU<7`K<= z>bt}>oeTW=l)rm{KL{piC~RE2nl?>;LFkQS^?0-EC+Ji1+*!4>jMaLRcEP}{3kWJ) z^-!D1Z;GXKyWptj&pJCW!$dE`h4bjY>HAag?8&TET=p>x0Ios4ljEAau2&oaoFbZL z{t5!5>ld>U4pac(`fWyT-LTz4kvS!b~-jzX9xWxTX z|NW+LiR|goZ6|B_=dxl^D(0zQDS7rvp1mW<%E7vA`e#dTDh^Z$_0T-s{vQR15GQoj z&MmFkrgXF*1^yY;Ln)Uu(dnqWpN|(w4X4jPhaG(*rP?;#m^wn7i$JCeWX4D$gwRA; zT1B8zYNS)gyY0y+BtzSBgk%x2FdovSLOg^libBYPZaj0-O*d=nPhAIwrn>L+oK?v{ zLY=cb+GL*$XeoJW^?6F48z~I{PkzKRsgD2$gxMps|F%cUmsN7QVT~YmY2L`=+mO0T zxB82#yNudz`MmNpwSUtM=qz`13U@ki}@ICA#Qc3Zc9)wV<5N$*3?C zZ~rh}imEUc&rt8^!5-4jTYY(Pt1p|c@@C%dx_0z*AM-mnv-^dtnW)7*vO1phSdT-ix*~{?ziKRa|V<*_b5E@+?S9{-((VH_3 zXC|>{+8VcX_L`AI-x{j>k>bcI+cP;PCGpJOp=^S{S+fimPv24J!?icH1=rE$y}g^tj$zJY?x^LzcJxhzcF9Zww0m1IB^-M3b#3i1u+YfACVzet|jWpti=gG11KPTnqUwmjZuN4;8asl}RoV%d(?BVB}L?X)ONtYm6jb4yDD zb23c)SeOwUqqCx$AV{mqIac3I_Q7$lQV;RGOOy0n+)t`R^{`U)UFZ#gzuU=sIL5a| zkum@kkIFndI381(dt-*LP1}muF;hq-xck3 zdAfXYk(WNP(RS!00acmKPXT~0JDds>y_3WYN9S%vO>kN?K2L3@XCL|E9$95zO+^zOF8s`WzZgjbZeDhzs|tyeOI^AO=*DuNeV6JB-oh!&gj zPbap-VY{1A6p2_HX77?KX5CkvpQGu#ymOZ}o3quzWZcy@`Z#D5A^v-$GOA2c41SH| zdebgdqJ??>7J0r`<$1H@`98^WE9beQEl&;_MTmckud$dEc(`zC-f9lQVti z+;|@Y%)d*rdnadiXRMFiJt=sJKg!rGAY z9RE0leV*dd+Qf4OU!S+Lmdp^q=W5XM{3Gs*M)~FOSbZ|tcnDLHqx+ygb{z)P1P@~Z zGW~BwZVL}F6EWmr$z4X7Mx38C%5lox?EnW@vpYk?=Gda zCzeoT%-2#G{~Ryl|DX1L)#mV@WC|GNui8l54RK%A{U7OU9>V{z&deOsqx(Mrwx9B_ zW=P)u89b*636e^9)1L#rT-TYb;3NoPf1wK>7VOl)-To4|o!T*ddF#IkJZ@s?2Jv{geeKPKj(XjD~{$G)J6no37LyI9- zvBi)t;-b@wJX<2fzZ~M4CX_&G&TPSyGi}f8wt|<)U7cS4&)o1qRZ|aM*3~6Fxt(Mu zJTv$^`kFjTzn-6^k6*u5d;b~Qwl9SDuT9PCU_0&Jj%wH+llG26NPWS705fc%J~FTE zO*YXz!8smZrsk_6|K+>8d_`JB`~N_V!17il)A%PBCK3D#U#oJsX9fR;({?>O_z$_( zs_#%$IjVblrgB~b1yjfWFA9wNOLuanxc^RQSP=5booUaiI-U}NP))#;L2WoOHm<7` z>J=R;lx9#Pb{MF0g!pg9eR_}T*cqQv6$?#_m;0jB*Bi7|UzKNO4{BACzX?kl*P+e# zS^lc-b#0#)-MZ&1TD6(=`@*_YZN|6HINm0S2kY20B);FOyOxY4%e&yZVNZR8!iQ1CU?Vw1i6=9P94Zq z_t=ip7F?k%rSaVX8vxKpc#-c}zqS%KlEyBhrjnN-qX#Jz*mi@o5%yg?!MCg3fF;_@ zQ(ATi&ePaV+H0pFGYJhjHEeAeZ9%q0!fz)XJ4>|E$*p%UAEfU~pn+{s`%hvrUyJKk zW1puv#0okMULj~s{u<7F9XC15I-8|xK%7x>%E0k@kxw!D3#IC|po^ksa4UZ{4dtx? z?ciyskdwN#LQyk4tJ2|a5AW+FwyYcc0Y4v{@I92TQqhxUb++BdHPLPRUx8e$Q2+h> zs88_l?M7o;w%iuv^AGUNFGIH%W(>$eE7oncL<55|R0B^~y2GEFXqf%y>?NHU~EUr{%}(&qLKYj{!P`el~qx-48Ap za&fqb@9RPXElq%Rv&qoDu`h{Uw5^>?<@h`J$okM=Xjdd!?2|hl2?s;{Km;>$q8oPJ z@gKoC<&H~ywc6=uc zPxM52_7~lFzTe?|VXx#Fny>%KeDV)jMQ=;ZV{SZ!+k%z!@MnlFd&@fJhf<9`o=kGq z@J#@F)>d2)6YC_nghjL6R0EPBa!fM-EE3R?r(m&A<`P-cOZd|b^}N03crI@G?11)G z%5$sxc#b~y%;=IxA+l3TB1Nq7&se&#zuJf0Ca$s zf;mQl#JjYJFaooG3JXPzS=Og8lO{DkP|(20CSm`4TN!owR6mszocC2qS0x0nn3(lY{12l z!l%K$s9{jxE*a~J2+Hj2noTH&LX?@ET1cy=4Qq#7u64B%Wh>yFF&=diCQxU1&O9Z!ZCd1g;kg8pJ#Jw6%Df#0IC z{I|VrV`YiTaAkWLCU11RRSIfT1FzGB}XA?;SD5TgCTf4ByhjrS-iBOlwULQvr!U_e`E zDPqbthSGgqZDSTf4nEL$oGM}yuZXSX^2>aIruh{>kJU%N!fK%a8hFMAOXxRbz1_s$ zzOipA?>EK!kn%nx-iMXqx?M=9BZ^HjE0qTEl1!g!fA%Q<-EUBRg%gN;Q{{WrwpVLo&eRJgB2|S;Ryiak; zKZhxECZqMt`oRk*$|IQBu0jsKL1YzlOncBXv7i&%gPx8BU5p?I4}|1rIpeDqsEq4B z41+g)4Xs`ORT#4A>*OzPLY*;}Yx@Tqu+(D=tYj(|#Q*a(!qYs`)&pNcD4(q#Vu7 z;2YwGLALOA`J31-A7Utebq__$7|Iq7D}6g&c}gY~wjm6M@9$Uo=|urGErc&qnN{fzypgRQ6h z0JU@s=8vnv54sESD4XNo0|{90U097k56Fa&9U+7^=hgMZFr7>M`x6v2_TErfaTC}6 zlfZi%Z=4Z=X{7?@t-6nym|!t)B{6m_2ya{gpuId6IG8mC zm`W>0o@(!So_g=4v4UrpGpJ|Qzl5LSzO-e16y&btkT2~v6@`?ZHWy4#R9 zlfV88{45-95BbGzL#`u#{SWv#Zee@KA9fpZ5BcS%b5VQ9>&Y)a54VMELI+m0QCdvF zZ^O?&7q_Q=+ipY7TS7qod2C4=UUZo9a=qplyqksT#N&Cm=~ai^Cm4LN90i*MH5nR4 z92`|P?hQk^|d1>HJiUWHCA8X4NZR&?*Nzt`OwCTSK-Pw-m zl@4}asP_!njI3;wW|0%LmAQDVBLcgQHs%Vx35v?4wC!mYC7u~!-eau#gXT-L=2HB&o1Ostb;xJ+DzHqt~L{U)wk_+f%4N~i2I zCoyC7p?GHv2m4sipac(|5{la}>`RdbMk<#jX5yamz)6Xj{!IFgBxdf7@9N6w^|||N z7v;?12PnM0kGOGBr@mO+FeFkxP~2Du>W7Q_YPgSKccocBK^z^Zbp1 zvX1AhG~o4Y$Fo;Q&7{0&Dz`X7dxKh1rws-gy^`W~oE8RB&*F~6_DsZS;|lZq!8kQs zTBp@5kY~YZbqmoxZuLFPD=zCey6BUJ|92Jx*UVBEt|uZF|3+{P`83T_rfucBb^o6x z_y^pZ$;1Ve2_++)s`V~t+1Q1S)}>;{bfIo@KV-w4a~;FEt~$#u!&;ABcBFfCInupc zhr3tI%qd72`tlS$>pNcYgPpF}XLhr$7-+VtIieDS2$fIJ|Ke(;46v$4{--GxEKr5- z(8i)_q5e*Sb@SfJ_dv3a|BS)xVi#pJbs%TUttUz4kGIg*_R@`3fM&H44J9KyWt*L^ zn4uj(opmx39b)79{mRDmt;)vrHf7`bj?l*S2g3K-Zxe^z{Gd3T=5}$o&D&#kuy0Xz zu(z@u>{}u`*zXWK*tf(UT?Z|g0+NcB4=GwctZ4a&qUED8^mi-tcQN|ABlPbS^mn(v z>F#PY{qp@H+(1&3+yF81c37i+hsCb|kn4A1i(A(=YW%Vs)AVUY)4htOPb!-359{ZF zuzo%j*3Ug*{oEI$`xA=pk2Bq$i0FQo(EW*s?g71&S>3Y_8*?b@#n5?}j%Pw0onHxM zNZ;5Wqq9Su_Z(^P>`#G#w2kH$IV1eGB(=5xHbTzW`~pY7FU!e(1qP7$aq>JJc|zP7 z;67Q&-A-Y-+bO)8iQxu7aG%N%@XNSQ1FyeU;XXa`;4Bq(*RsHUhQfU&Cp~k5Oz+G{ zx&nM>MKV1VRP;~4*5Yj0TAULFZ*QCn4#Q}khtDW}TQZw*`+P)PXK=*z67lsM5x*@# z)wq2@EaDp^;)NXX!U+)rM7&5MUMvyo9I-wj>qZo@CBMjE&#D>~_5OD?=jeNAze%ma z4t2p9dMUYn0kk?xXVbT*tj~Pb&@^)PmeuX;1$rMjZ@an!&Z*>Fc2Fmr)5ytpWESYt z$*KM7C5xOh;Cy83;`IxRQleZ+mMODmFF68chY6B`x9iR)o)vEz-rMTO_9WPwfp^(u zT`#U-Zx-H758W}g*?_kbUhS*FU$5R1-Y)jO^VCZZJ*$Jf9(&Ke`_m6Rl_768d!K!W zx#z?0ByX-<%9oGVONn{5j$1fX+~n%g8RYnKrzY=S=|(wx0!!!X_;~zEy@BPQhg&ds z-{v*OA8d=yk5@^2adLdTV5J_i@;9LM@Ky|u57;*}qV5>)wJdaf za>*KEuve$-bDRa1?TqWnW(#bYi>(vjC=i2JNLS{L{fT;myHy`bj{O;~8X5F(=JnQ;!{;Z#B^cB*oE@_x@!T6(HmQQA@i4AsB0K{+Zu?c%+f~

    7{yBw?a)L_`DZvGBE^yl6T96F&@|L>`j~;^^fx1P6YrLr zJYNApq45`*HvP?zNo|4b7kPhOjp0%{6plm&wID(HY|GQrGNiS=zqe(`YI}cQ%YfGQ z{;4ffS=;-kwQOQ-@1Nc>Y_+|AM$3ZLcG`KhY*mpj*|JJSzEsQp)b>s2KSZjS1lcDt z3G!zpn=!NxYW(7A*w?Fu!5b1*g^*W(2AawS>l{PAC0!2gAA{(d*3y>GzXB7W&M%|Z zx^#XFwdU&beCh&2!3_mB1U^ln`xftGBB!6X*mMwWU|xyVe~aJUycvA9e=8(m-`qd6 z56TC^P~lD{b-Qt;7>2IdY$sG1Y{esKU^&b6zfdx9vy+oaePFx7Z?|k&M+-VJnf{gB z$zbV}x_z(iUW=Bb-I;$CHmr%No{(NjDF%O42z83o^V4#d*Pnx4S)Ls3lta6#{QgO4 z5g)39ugTiglyI%Z)%K8M*a%JN+k%3AfLkW#+4bGu04 z2mE(HobUp=z&rI)srh0@_&ScRkHS+N*?dU{@k)P<_z_cs`G6ew`|!nTYYZ5OuePV3 zX_z;hF_JW`krbs(SF#Lq0aJEA|76=G@2u4nxs>A1)U#k02N~Fs=i05A%ACaLqhMl& ziiy!jY<^P3pNomY5q~)``W+i)M`};zL%QCt=)$`_FYO<_?ZLH1^Ohpk7Gg06cRLP< z<6XoVBdOT7Xz;g=11eMWN%4oMObL}vi^_hX(ixhfs0`kT33C@3f2pR=7B;V}TuCuRd#M3*7s&>F3GePr!Pw=bNr~69 z1`-3+giyd4wi8=(R%LI`61vysY;uA~+O=A)XK!u7Lk`c{?wJr0)_x!gG}NQNrn}q^ zbcg#1mt`RAt6XgsuL#LXUTw{2i#KuuV6k1-;IE5n?OH@>3uv#6O}_SurwoE?F}oTY z--NS%hae6TRm%1MwvTQxfc-!4T)7J#K6k7yJzx?%;XRER`sm*}l~!XybEGpfG7pWI8*lzvhe7|H53vo;qyecb$o7HzyS!b zg3Si2GIEF^A&V@2Ff4EQM_8J=yPY8xvPgBnBHCm=WmNIZ1_ZUK${fAmuf*7y(fAki z8K@zy!x_Y5EFJ!LxF1M4je~J+XF_3T_&x}9Jd?VM?pdY0|5Xa=r!{_{Sbs}cg`O4D zob#`TSlMnYvsidx`yYnG_1xmVNzd&aST_7?tkrhGKbseP&w(iU2FTs^hq{(sDEQ|< zR{k4ApcxRhYSJ2)vTMC1})BDj|5UHAn6)r&PrFS(_*lzbC3BdU%6WLU2wWqWcA z*8DEi85}P)ZvQtl%gz*3E+ic5ibLn^f@Nq`V;or0UOK|^J;9P5w_gF4ccWoIYQ?Yr zBB~#$glpCkpHId4OQhY%753^?5r#zd;GtgE;&f~=9|53Kc$Vh`*BLn9jx?y29yAU` zw*mh>cnmGCxAv0zh38$Z4T~kZu-X|L!)XN#eqa6Vf!mA zeyXqW6I3q7#C)~B8pN*f8XFvH)1*oJOjg{o`S`kG)fX?NQov2i;tfW~U+5amCRz`8 z%Ns?8UBDE&R!{KM##RTa16BGxdBCOLQwO}tAR^hG8Bo0^XIJL7duKYeOfl8+cNNo> zv|CF=5T0q(EP1m$gkFBDUf+LdSj)0aMwJ=7E6&qCU>1$;6VyClaQpTW&80k5jb)c+ zo=z+fzw|Wrcz7zbgU7v|rH=R>=5rC^-^A17uDLn#&P2Ib-rg37bFFGlj}y%$YlTl^W%faVaIAe|e^oRi3X6+!V?xCzS2vP#$QoD4h5H@v=SMD%+>p%l68o zWiw3w6ibWV5g!Wk+HF~JMWkjiz2b>5ApM)e^evin*$)z&>(<^LbI`AKiWCDZ?pj zU1>VStt-pByv4>`bbe)das)C5tS4HgF)hD~XyHj+J=GrCOvIDzv~AWZ^YjhiIf9$H z&NhG}VZ|SEKM(i&#Eq4VSDAACB|^;DMXOixodLdTLcSq;LsRS-vLRZd*S8!PHP==` zw?#w)Jce-WGNT=bAxfO_VpKi5IJ8)(Hdu4HtO?yl9#5_(Q#@7~ixtQT_0C}rvg;si`c;~|9dgF5bvqe--9+DXMW2bMXy{=W8FTOgHs(QEW-G;^tnK>mLyV6Tv~nTm zn{n}kG%bOZWwdnNW3W;;UO7(Ik_pekTgu5wKhA&7FyAn}-eZxxDST<@|&ouqdMG-vO%=@2@y!EFJnq>CH z{BR7UtK5cfz_{ubX>WDDUg#DPufGjbysmsjW$R9PR~J`vc)DWhseIaX8XK+FIoZ+l z?eD-jVj)!-(!=9+;^=x@V(1)~_&K*yz`nK8WfxZ`D@nWNI3h^qgLuWKeFN{e!&ZHw zjC;rptOMAKs=1(coWcE$<^fF4V?Ssgizde67kDfp#Qy*~!)?(1A(H;W7ryciuODvS z|1|T}hU%EWUs~edhd%T{ROBT(zyGA{8}Xfx#urh|+oO9uhK4ss=J1>wkNZu;{Sqb% z#WU^O#vA1oZ)Cd?HTbfzn|m#UtBy54Q`v`x@K+4=mM8|AJ}^VMJk!6BB5}RsEE`k7 zgAo17MV+rgzWX&h(i5+0Gmn;WJ*XRNjR7!~#u;IGj->J8Q+bB>>0rH8Chuz~$#9w= zHXdS6rW#fj3aL)>2}n0a@hj87sPY^Q&r!NNZrf;)Z=l+4$1ShKlp#--NO(y-$!ZC- z1$YQCkZRGL3{X)XMwA->AyiHqswqQbaYU7i8g5oJfZgVk*i6!Yqi_gCNAc##oSm;& zTxtEa?%DAO3~c@o&vJXzkrET~>ekyLBS$f?v*`EZm`q#mq8iK$_IGtG`VxhpUgJ8G z#6M{B+H@x6j^y50gOXWvakKd&Na~E{k3mdnf&Xp7XOG*dtWrDk?~o3Nao0t-$~>l7 z0hzaV@*q>s>O)I}7!TyFS4`FVnE$nYyC!^l)OSzy-CuoAR^LJO#e`5fzidnUzGZfuy>uj(W)ZAiQJWqVin>*>$O+Lu6SQ% z+zF?DDQ1aVCAq=BvgCG4dV_x%REB|)(H>oiv)EDAM~gaMY3RWFizch0_)Uu~N*hfC z=>>@?GS|US{>OME@s@Q%u5J|lw_tK%h%UiNnoc>fZEjQgs4e?AfM?B-5XE4E?c)N6 zX(=o!j{m5^@@bVq$k`%ssyRa(tSO`CCy>nj7jKnUI@oqTz~)HL8ZKv2p_n0GTY_2n zrVXjhNU44bD#jJ4pG6YIFdO@-XCXP(Y<;vB;2Qve3*SEVor>=os@Ps>dcbw7$>1|3 zxbBafiKjJ-ZpT5Pc}^QR^8~^HLSlk8zw$pukUqmxb@IY|1m>T zw$c`d{koQ_4<6ilbs7ZL+J)Tyf)0UA5ON=;H?Gjs-PFdF(Yckh1O6F>(ka`FVrkMOU;`ODFihHB&9+Ao zM4)|JMWUJd@wNj|;)w48>p#zN{JWW>qbT2Riz4vw++l#{bJkkQhDL^eV94RRm=H$K zTH+Lks9W8@K~=m@W^Y+HZl;~WxbCj4rfq_#z#^hOfsKakB({m#Bh3h3wi`b*ly1p5 zvK99t1&+pMW>| zY1mgFo0-RFV*nZ5TJST2?MoQ`&k-k-IYMP{KF0$VBlra~#G}ZKdX>|y^SvCwQtON5 zq7d7`PB3;uVLk@uQ?(K~YiCV>jbAF3SVg9u#Taag0_9>yuB~`h>#lx5JM&UuzaZ(| z9^1o!wP87Y@DvYx8bd5RH%`Y1b)F@|cT5`pSChskrk^*I!PADEIkAs_gI_a96aqvS zfMsYn{`w7qJ|fa7-e~io8%wD-KF_Wma-GDk-f|z_;$@V-MY_=QOx*LkxaZlp=l5~X zb8*if;-2T@oUjwG^9uiOflr8d!C>{ZDZu#`;QR>C?W-GOdx3+%jiFZk z{}m|tfDaex$_J@fc{A^SAtv*Mp1=a+S5WyqgL0V7-?g%RQL-&YtT^qUE5t#447m^L zlKGcnIPu*FIC~V%XIserCdhijg9HELQYAv1k@vqMe2~EyEhtA;!ubPsi1zIeS@`%A zt3#V=OXgn-<>DsqHzvf1g&RCM?+4oY6m7qk@;--;)%-(5ssE6);8alh5&-w01wYwV z<=<$l@|TTpeHOjNVdOJS(yn!}``{sG9Rcqt_+ zrnmJYHP=8Uxe#SdvP3OadA%L{6KNq>OIHRPGqR97xh!34{t<`uiE+CW73f|rdgf^Zy-Pi-oR#hjjf1biwKc=$fVIg7J&ypA}tug0BAp z|9v4{2nxpkpU^cJ8)U71^=MnadPQa;33{y6m$Cg^fSHf(AA8|{^|5co`xpxE z-yim|{-~f2pr->)t0k`sI174;C-TQFb$H10Kj6P=gNJV!FAw)*GLdJL?A_nN@~4fL zE8yh}d|ZG{1!TFr|6Ks1m)1uVP&h7JKInE@P=HR@9P&)xxlutuT4*RhQe~ zISHQ;OFBb>YAUF2V#=hwwmgxJYySrw*S-oJd+wf&JztHEu;*xIY@OL7?W|qfGWvb0r4UInkUa(e{g}Zy9$++6nW_ABIVc%2{_VESpFpXpB zD~svq1oRhinIGSIbX)w&d~ME1D2F$-lopvepgiS0Dj@c&8iX2oJ z%(Q%l#!JH`Un4<3n-Ge7=HGN!I{HO?O#eYg)?(9t3W5#G|FR<-z&H78u#FfNlgyUg z{2aB7hgV5(=7dfb-CWQT-N5Pp4hY61fx*8+os!1jUuMYPs{4OM{*9+0wkrmpjy|By z|BI?$QyZnSFIBp5o1^_-cZVob82)c4=2%&WZdoZwvsnE3}iMh+#RG(u$g+UQ0 z(QV3gbctMZ8YvTxjk%39efu3d$e_v)x-;dORXZUpY-C^PK&^HmcLS|&Y;V-a>*P)_ zGH8^Ej7<#f8>{fg|CH3~==@MFHD3u!215WlZc=-J8tR(yGzauZd9jpl&eO%_nW1f< zyqE1#7y9U2iji`vDF<7EEQ)_zSbTjHc+-W9+ifVWUt&}FJGuN$qsxp~dCwG99&vUi z6SSU$l^}JnKwEHr%RbphJ2Z{9I$n{s4E|jXPN_>v{BzMFFNVhhf92zWO1R$lZ$b#O zF=;u1b9xp}hsfK%!+{jp&__{V!Sc6uEY%j4zlB)*&+;W;b&%%_Z`Po6C1-iA?*9qG z*}UiO=nK!xi+(q1=zP!e+#qMdB1eK;d@6W?=lY+6)v*?68G%0E4ysY_$PxGp?cjpb zGt^CBoM#k=+z{@mv%m9j_LugYs^h5mT7HAdya|lyzyPyZIupn-ngz~!8UP+dR5coI*1jU zk8MO9V}^M6e32*Px_wA^6dJziX=)#*_B;qU8eil-X!{-XEv9UH^bBfShx@ zK5j!0$#6UPFnNL;{rF#`g6Go$_rJsk7}fc9Vswc{^UlX?n1U$a^5^u%eCiba3I8L6 zviVQ$CWGiEd6Q2-vwHuyGt~|O#2*K2Mo&uvqCZ_#{*L z2~g=-LT>OMOHnvXyAVyt?pgc+c3){j=fw`L#&>Cm{olZDdv>*H$M2p8_r|c>6R}rT zsMM^!bZ}Hlh~@vwV(mnS+D9-tyVC1S#2AwEcS{azh)~b;|A9?LxMx@q@=S*BP};GV z+J|5bbvp$U<|c$dXjK_|xjoK6YnUPgcFrnnzvYV^Y`em13@Kjm-^?rG*ME>Xz*1ifYLd<<9Gs#kx{YA63#tiPfvoD-{0}DzTby-O z|BHjW`g$5Q6Di|8GVFdyd@+R59A^~c_CBc83#mnN37rP{eNX@lF2N8uyRk2*q=~?8 zb~u{3<6RxfrpBaY_rHkV@Kwy3DNn3%cqy@Zp;2ltId1QVyz0m+t$XR<0qOj~XKmK| zwzRvbY7W8pE-es^yuY`1fVnM=JcRJ}I`{#bMB{0xI?WEAz=c=kP1WmEAB_f;<}#;j z>==pkRSz`!!Ye7UOC-g(rzh^|jd|FtM>((dmW7P1vwB*|H_B2KoODM|FZ)_b0ZTgT?LtJ?yCbb#3pc&hlJmZ4`Lz6zGzS z>4yHtVI84OIWecy=zwlCjvtme?$(TMCYY>5j4C34Rs#lCi?pIAg7I*Ib1}CWFtrof z|NFcxX9d$Kufw6wkK;_k3`~c$fD(4_Jt~|vKu|SLINEj^%ST`=YaGdxn^ik7`0>NB9>?5v@O2xS<4EIc{Op&(po$6# zzJWA$@VJd*WoNd*uHgFu{XqnUD|mwE`WtATin*AeOdD$m=3<&9i~}BqsE+J z3fmWy$ie2c@-*kGTLUT2uI=k3ywr{t!uikXPWm3^q#35U0(bixGfmvDTHz)9Eud)+ z%w&lar}|5n%8gQ4RxFh@Ayt}F{WVOL2vhBWr%_|+vJXa_EkL$wp>?yYgSyAv1be7M^k_p~8mbsKw{)2g z(p!9U(ysp|xhMqpVen;fV*mdo&h{1+r>k-{I?NIy$(MElJ7@^j!AaDJ@ zPNGHkBaX%#-;eHVq$*kBIcA%%ZUHA^X_SPA-|$6lGt@1AS}hmdGiFLg%-MlOE7s@a(jju9$T5cWA6QZw%n<-G#v3B%k}rVSpCII zoN^XIK}&HfcCcIu8mXvPX6#x}i6!O8xKfH$pmDK_Li8rwU5dcL(Ks$l?$WHEHv|c4`ws!J57T@tInsPSM~SWET$fdsmo=qS@m;{2$8noe0MD7 zgsXIW)c+Nwi6d|IXtTA%44rFK2aGN2dWL*Mjg1`#L{nbgC@NSzYQJWE!;zDqZ>4I* zjg`l!_8Az0`CW4vsMHrP|DPCRrOle=%3}Gux?H+(b^jyyIy$d9<@$3iM7|l>W53pl z?kmxTUR%Xym%-m4m#wAh|DrUFR0mgO9s|Bz|WMLt( zy#?ILCDs;lM-Q(h2nS!a6dO;gu#JZSM8*i6d2CAvT?L)yL$nm@R% zf;{hMWYZNq1UFU76qMmR91!2=7)qa+Bb#cEWA+TpvJHo?N6K!;aO~h`m~kLG;GGYx zs>S$D2$K39-fFVoN8(F4NZGp2i`himfU3JcjCt}S^IaQSt@!yWwIDEZL;Xn zt>#^9P>Az&1AH?@+SE=1Gw%lJ+(*Ox zYjGb3_rKU3yi*fljwenxxCW*C5a|7f#9o2eVYjVm^y1P@<{Jl1%CC4T{YZs1}LjyK=-T@vp9}e+-^tKkH{nni$UTh za7~A;p6-v?XvkDLIxy-#f_x4@KBDDr%I%@CqtrEBHXTe1&9vPFe?6ptC!-hz9T5R6 zwX}!;gD6-UQV_g|&S0s_*TkzxWWIj=5@x(JWn@;f@+B?^h0x)nRH6)WG@PCLD)N+w9R4++S$ikYcX7u_}#kPvf2J?`_<{-@eA> z{GHmk2j5K)B9xOxbT+BUyUMULxth-?XrSszyEenvxS3p3R|zM0zr(N1*RMY+lquSQ z>xB11p_}th{s?j{@=f?K)z4H&Hv$DV@$XSqg&{ z-EsZBDbLK#nK`q5NSM%ZgC(Y74m`7w27*Lw+T;-gf1>R8`^({d_%=;yjW)Ba?n%;O zq@6Uj7*!ZqHrM|_2P|Z&MYu1VJMx>oZ}Qna&F~Rnma^| zmF5J#yPhbWI*_LgnN_nr7q73&D;AX+eOI#$kUeP?qUpz8&AIs(SS&abp>V!vu@N1dA15iTduZ zi@o_}CTF`uvSn!Wr2MT%w>?82+INQz*{Q5cx(s5}g6=1sGn$Bt)}_#BF~e^e;Vhxbk{t2##_pHF6E|x$q~vk zRo9RCpLsfxr#jD%=SekmpsJ~Z)c0`pJwknt46F7?IkO)PTHRUciB{P+yzD5mTv zmF#GIp-BOUUi6Q%MJM2x5FI<}x_<&T@7)S*QV`;@Y*FSsTl*#PeQRZ2ItP4VPxCCG z)P2Z9`GR}%a8?^Q8vDL8DFEAa|5VU)AZOk@8=oDui82A*Z^;Cj2V;Vxt(2hY5-h=i z)NhL8dZnY#L1}Aj$5Kl&>A2+n+q^JrtglJg`dK1U{`u# zvH1|O)@|%Ku>DwZuUDx(Cf3;T@-C_V{;H{VEgH2#v5D?Cd@s}^cKj?l3GI+_;Otp< z+KceBU5fCJU5L5m)rolxokaD#T^qz-4Y2BM{)t#ahhN~Xv3z0)cI;9D>2Ix={|EIx zS?6F{43WN846*PL;U4PM9Vtpdh%In+7n7AkUQ-3AB1$8vl2#Ihu-SB*N4ug52N3=X zurxPKcZJ@B%oQOTnHzYl<88y!dHy?;f)>G?oxWp9C^VRqqCP0-jj- zJzCv;GK9&BBk5=^0`5qFs9sCZJGMpZfv=Wx;X40A8uLw(^z;g zN+?YKba7YUK2zLPxX)Ir(Hm6e7vTG{&JVKVsv|yJ*ycGgz(@HYPI>Tz6>r`O&2tr& z3&SE@r~p9-2o&I=5WtT0`sjJ+5-FWeeVXTSwV$Vg&W{J3&q3#_pmp(}bsV%#1+9+< zt>>WiD(Lkp2**TtfZh}k=(;$h>tY3{hX8i4eDqD>xsPI-E#+4x$gfV&hr({^Z&1L9zfr- z87F#4bszZ#hcV7d}d=Al+^U5?LcgKAhzk}@;1D2kOVj!a4-Vat3lZa z`(8tJ#trJbQGG87BV3{Yqq?xBV|tu5y<87j(=qPsV=8ttOx{$0H-`Xr5Kp>Q@uZ9| zDVSnBsjHQU$vQX2lTKxx)M#mA>6gDT;sGz#N8i|DxsowoacfGg`xDi;^j-D1yK;cTA7YNz``qqG%!1I8PjlC#Ezg=F}yaZVfL1An6cxn`i>)_)1c30G<(Cj6u?u1ooG`*sMBj)4H_SS)gH1w{nD1K{HTUIFkG zvRd)TofhsU(O3C&r@2X2wh?3wKOb_Z`ZdvNHwvs~uoCm4J$gLO{f*!R$iWtU_O*tq;%n2Mllw&>Gn%L40IHQ&Vp`lB}64l4L3K}7HA z#a7_(Rm_pFvhN7mpmLTItY%SQ@D%2O!`um)Xz6ZSN%(DAF)dt_Pxh>3Nq?p%XVQoU z#4`tsLd78;5>>PDJa^`mj`@4yw^&pW)&Gh6a^GnHc$7v3KXfCX8IEfG%Ez<%zn@86JR8>&sqJRHA8@3jevH) zXZH%Q6ak%n&zUN~JtCmn@43?i7#T*-CHlR@bOAmX0h9e+Qh=MTQ74^Y!3n372x&|aJvHB5dzq8m@bN;FkLfx zqt0@=V)F*>SWWgnBLqqejyqEy1%bg*g^*3PExlz`-_i*34G3sj_d|yAyYYooI zV9$%SO!Y#UoLe-xY}q~Bb zfRBcNk1D{&Lcqrq;Nv0S;|lPJ5by~B_+M9i>OEn=Ju2oWL%=5$;8P*sQwnfz2w=w+ zeH5Lonl%Jz0k+5OvhoG*FywL?pOSo8_y34fx>Lc0$1Hpr%}>jOavGLgs`{zT`#3XE z9#-d4e^h7ux>SQ~x zmZRBXZlRE>%+g0u-%fB279GPCEpEAUsk_R~97hSxr5J-d^0ZM=JLtC^+iJzn@bC+I zr~u8+q5(gzk3N7ASJM6Sz_}boTcr9nN>P7_ej4Y4k$Hdz-UDjL-jC>A@*GuTfXHax z&*AtD=HtBB97xsI9Y?8mYJ7bTAyfg9GFAU|D=5!tSs(8wRQ@+`{aO4ZQ-U?aMnNQ> zzlk$Aj4~(=QqP!+W%pvc7|dfv8K)3Cu8DMnoch`o+C>$s{xe=xC+e2Wf6JREgiEf`h4MTe>k_US;s z+swUhAGMuBfMGWlVsM??5r$wq`i`Tl z@L%Xoq>cKgh-5#5?q>wwAz07Q(atCq>z<*igXhWhwC)DSfD+eaNnIu3n!!o7#;>g8 z^L~X$m|ZsNzg*FFei=tvT=p;zLfVqq`JAbWN`v0+88}d)^bHLg!DG0O#qVM4w^F-E z-2k2`=_E9?OSg_!Z3z*2rw$D{8?GRF*=&4plcE^Rd?oE!W^k)5iYIM5J1=*t zQ=H&@jdcJV!_4~w4s23p@%&vLx#Zxts-?;l$!h8Vb%^C1tq$>HWch11vvVFbTHekZ z8`HRF7VOYipFZUSauENK&NV5ZwO^q7QZ=iaXVd%iz@vJ1N~CE?|kW?8^9`3)BOka zzCRw{7;?DX99|b~qgX5i?{NJGc@-OjCO23{~%U8TEUQ58I+8u8Q4v_p}R| z;eB@(I)GZ8-{b7IxL3~@qV>Y^JtwNIq+MKns7LWF`osG2M*1VhSo#yb{Vi7C z8`R(DVt-+r;rlR&#vc(ZiiQb8oV-6xyizaRO)b-(A=I?0%A|QQ@5oIov&G&IIefh% zSw5X)^HNEp>KHsWBYphCp%TIRA7~J+e!NhMD+sQznykL7tG`N5{Y)aQT>l9F?&RO& zSJAILEx!viNco66jus+vx+(rE-un=O{}m+uNBwTlf++laL$6`#w8GHQxX z4u63c*eIyD?Cn?pHqyRK&m?MR8vgsJC4%edXM@0u;BhqT_vwe+--7$w;{FEQ-xT-P z*siL$AAk`srEYNK&O*+TDGgI zlwmGe>DCP|K?K-#x9iVyShK~Y{HfD>Ne;4kDJomAeXQr&Dtqx4aL6o^&$4^i-C90> zzL%};N$GB8(V#nTH7M zGL;&x*fM`Xtt$*hhB9!3!|3w5V%g;~UWO{~N>rXhwdNq8iZ-o34vP8tuop&@%fEmn zK%%QfeQ*lS1+hUO23-oH=K4<2Kc?qx;0`kg0h7X@ER z@Z}Su1D8+wDRjm_RUD<{z%0iJs^qNSbF!*JPQ*2s_dAiR6U+L)yB=zG2shajUKV;qI<`6wAfb@Ew@QxPPeKM>W3tkf)+sJWqoA zg~TYPD(mg|zNKH_*~G4eUl}FYPg-6jnG>!|6I(jm>SSFHmqiLGz68saw)j}$RSIR< zTUP8k*(~vj)$LELyG{ugzK%u1mN};g)|EwuRjt625QNrf@^T6BKUy z|E6%>IeOUTHA2v9I z1>HNR{ePr=2Yg(`@&CJ5uSwSFiEY3JQ%!qtXVZjC z?}iWvkPxcry#+$A2_*?Flmr3>LJ|@ZYG{FA{`;NTeMLIU;{WrlZ31Jdc9SLZhH%%4GJnL`K1=MSgmDr7tu9%sHh^ z%{jrntBwuKIU*K40y^HP?55HRDu=h4%sKR7EL09NW6j0plXh}*6`!tYKh?(GtBqux zT3cJFv0kxN&Ks5AE2L(40bGuK_k{A)N@=lLBRcmAuMtURan0}=0h2y;Qb!Z{ye`JV zF_3>qUMAQKU;w+V*kaaO-TTMTJTNgjUO?*N)2>9P(PDn@lA$i5)R#?wCFNAX-B$Av7px# z_vh?N1&)yCM@n-E?;SBAFL&RkyQztcne*1CVbly31Jm$!H6B1CfrbN zDJ`iti3t_Ei{8CxIX3x)&zu0@_{Jp4mUm-1-tF1n_8u0wuiO;eCB4_$pyIhY#n{r6 z0LwK9&m}LW zFkRAWyo*i;-=iIVmBlPgGg&+`IZS%l0f@ta@xk2_cY?7eh zCYG*1aYLY|3$8Jn_~oqWlmwBsd(L1s*>uMtzdnUiEbQA5FY-CE+EA zTZ+8$^ThgFnp~gI{dJhAC9QS6I1(&33KviKKl-|A0wc_|l*Kk`>#`1x=dZjV$wGK2 z#9>f+?sOm&qKE3}1huYFidK6MM;s4v+_C7B8EcQxOfkx%Y}dqgEhk##IpPA|MzO|N zvaRBC#AHcuQ_U?-8d#~s91iSgGIjF6$cY#+B;cEica`EK_hNm08VWNbLt(>OtJuYA zAedH7PA1GKi6~nL(CQIMqw@a#k;O)?tid{^X^R(YBS^pAFc+KhojjbM^pQQAzcLRo zu*vyhDcPLC$mrkTQ`R0sHh6;>X=1R?)a`7kjL(F|i!rb{?SW)t{W2M5;^E zO>busjad14rZ*qLSPsb%=_ax*5`*%V;-*dXHfiPN*{qss(zq;*^i!w&xDLflIRYQq z5!=LMJ7V>+f=6hOF1K?ish6bvv~fzC7Wu?wKC}WxN=f!tP{-4QI`&%&jmnY(*A|BM zdQ;>3Qzq?sOC{60B*^6o-awBv5E_kxBI<^7asx20QT6oYB^g~b0X^g}N2 zLw2W-J&CEwwCfzHNs*~KMz@?qP_R-31rsrv9ww$Fmle5U#lU92r6ZSdT6-Rc{TrvP zuIFOm=)xb9$Y(aLo0&NA2_zNo{u#^;WURK91^KCU;yY4&=X9N?k@=jZ)L@YKnIsQ1 zNkZ6|bQhQ;e@N16H`#dccwm+6)K94@RA~r*Md;o>st}TtyE`LE(W5vbTKAwxMh+Ib zx;>jVE7t^_jJnDgbQLcx*%fZsgnyVLQUxOBM5#5w>_}EmnA|;lWRp!4TXYEt`i75h zvI$(yO?YLI@#^ifb-H6^;wB9~laFcY_?RZ8oB22$(-ieJEvv`mvvzT$S-JZloMF}y z1ZKn*&}3u4;lvYu_BXAZj$L0$>HchVr zZM7Lmj7BG}`k-{69KG>Oysf^oRm7{}lwW+80iC6=7q^U;TH~sN;wG2I@1WtjggD{8 z$ylOmMrnAS!+I+(a(*i%{$!J8#_?W8t|_r6%cOe61UKp3r%2Bwx#xBfJ(qE)>jd}8 z@6aW(X_+ir*O;b9=Q4Gy`IY7<^=75+VC`^$gvMT@A>+feUlK#$trNiPQwNuh4;rDl zqb?I~?bsj9(J{6-vzmnQ(t1&odag;v6fQJyrao&Gr-vG>LVLWF-*iPa$o4yU?SpLE z!eDS2mA4NL2A4sD%P25!a+r4fhuYaZZXA012|N?tX(B{P-7+J`leQZ6>U5HZy%xH^ zm`JGmi*fBD(Jdzut?dcZ+VntLYk1?(ym6C6Z%$z#?F}gG>-EnlipW2v>`#Kka*r085gW@Cfk9i|n&w zw93D<(^a2M7PR9e@PR|%9VFK>u_o7&4RI~Yuw70TM-Ikp)C-0PFNE1lpbX(?r;&jH zkjhEHTwS82qb?y9!7Z=|&WwsxA*mX#)f-K+}F+2?0Z3D}FtdvbxxY)GeDW?OmK~Yrf zd7`1ZphESu;^~=qQ z2?A(?Vu$q#QvS@%JHgByolm1zuwKUJyg*+jHHXk@g>J%dqH}({Gl+k% z*=38aft}l6T}o(z+0#xYIV!#JBb8|$q_);Wdl%lez_dP(5~SCGucz))va;WCFArWN?#qyEj=WE=t~2V zs~!z3!vH-7tAe~@bFnlPB()Z}^4_r`2JJEG;$E*w#uD#=iN&~k9DE78bc7%g$f|T; zCUG3Fx_!`cTPVN{4k%3~RTk7RUF^=JSOC=_Q_%2NZW{P0I*%dkg0j&J>n7=<(VT@T z#B@+>k)$4&lbK|BbCr9S?5*L^-r6DPt>K)Ma(fmN?|B$I5lE)J2mUolQ?wh$!uGV= z0ZH^Cw`_ebJFKzZU4gb5#?-Q&>p0Gjl3z=d(o%s}&iJG*-2G>Kl9k3A8XIbFuuEcIfWWHP zQtZk$Wtv!JZUzLXnI=-3%MQ;BCke&0T^Ji@MRKrgE|Z(KDZs;}xHpqyac^B_cqYg4 z-sVhmHXlUD1`)D;1aCboCL@a3%m{B|I9oFLOp9dHM#yJ!-+CFP8nJu>>~vZ)tzuTn zZj$A0opC3Zo6h)0W=7Jkzxz^cK)Kh;tTzoe7cwK|0eEITbpSpxvmPISkIszFjtU}V zg9uqag4cnP4ES%!Ai}=uvMubuoUSFNfv{Csdlnuef$kJz` z1Myei4IGH3cQ=;IIcl^O%W9~N&5Wg?R&M1uVib(+1xXVh3>D84K#98i+x~d%(h?u# zW(wuF%s8eVWgRa~GeaO@nQ=_bXrPXxoO5ep?o=nplRiL!X5lW zHF{$uV$*bq@IQk$ZjHdEDd5+e`~>Z9#dmlJzS!b5?=11nhT!{%^mBycZYzrCCE@QD z-;^DNkGJ^=+r#a!E!Bi}ZB$M&GqNN~x#oy4uUYw6EpC=k`v4y&1iIS*dbdB$Nr#Mi zyF&-ZT##knN>u0++%-ATq!%4o7@m%|bTq|Vdq8*Mf}?v69Nk~UA1ib!%&TPx!t0|! zbTmP1TwgsyZVezroygE0EuJPVMWmNvGUXDS-?WEFO2V}74t5Wj?K4ct_E`#U`|^jp z6)>NPuv(2>Y8MMPadhj!)($0p!QXAr0@3vyN@D6N$j{c0`wotU1<+z%cWv1XD){Cj z5P1S}qw2;4A8yqaeD@woZ2c&!@~I!c-VE#}DwPDH42_}+I1b%NmAL3y%n*;xr-~yj z;yA6E9H&!Gam~746_m#j9H(V81stc+%U1H&Cc(4ajx0A0F+;h@IoLWw5jeEoa?1|M zS>bbEfB`TPPZ#IOO-xB{Vshb4Oo!Nz-ia|$9~QwDM=`V%%H+;aCU$wo&?K)54qNMH z$j;4Ud8IAr#;Ih#TS{y!W|;E>8D^Z9ZEMjySdoizSUZBlI*B+egsjL%gLgvk$rOwb z_eI!Mh)Rr1wGT7>eOObXwdYeYU$Gr~7L)fGUnVKHV>&1;$s`f3aoIw#d1kLPxA!|F9K|LW0ItWQg@y80||-}Uu11_AVq05*Rq`r<&NzqN?`E*vo2Dc)jL2< zPH>A6A%vq;&CR@%U(jz;IG7MK?#nPg{*E_=kTL~Rw6ufmoyx0tK`g_k(I%uZ;hqjh zQaH|lBZZmcWRjUwUM<*XV!?in7wqZ5f*nY$G+!qAYmLsLwavupQI>m5tef|WKX|+6 zLp{1~;{CK!>AdC>^ogD?u*>q!GU+l04Z>|AgRol;!X~BXa=1TV`E>@m&O}GTWO+6; z5`8oNtas z_Q`FMA@!pFZQ{08k55^Zb5+refYdlFKVrfhoL9!Rk>j;deC8k5#z;DA^y21jDPfV0 zak41La#K^2T9uOiJ&e;tpPYt0zFmq7@;KudO#FH|kEYgJbOjJ9QFH}xq~+l{umA9b z*lA>i8+QVWFporzSS~5B)d_4pkSuil2fM#~hiNx=u4h)hQ8g2pJlT(mI@6vGa_@eS z-8?7jEocDro09@E=+Sklw_Zw%D#8I4-T;LR_I(n)!i;?%?SYCjxv+DNSZiVJ5s2{6 z+9Rx{+6?lVl5^9AS7c(?C#$oop$S*2}Q z2$XW#5*-PrEwvy&b^YQ*mI3hYKctZvk^m%&w)pAINlT2mv!ShX5nov`ORZ867H2V1 zDaHJ|m7hQ9!@`a_3BvmxqU&zz+LZ=bG=wZ?$oo8B1^0QZz6a=nV=t0;D{%@wzwbev zp84IxA-$3&2<2utbh}XSXC9msYs#MBJRa2jcp-ZC1zi zCd%$jX-8SpCTSCPW%)K<1=yjF?i*;~J2;m+(K|Smf!CJ6D*Jbrz{~6|X@o_me{F8( z7J6Rl*SHH%xK4vE#faYLqxc;`3`rxFFNqqQlHR))U33cF8x6zwEs(QB-=9hE+BgQD z<+KaIB?o>-W_EkM%@CWeJxnNfwb!#<<9fdEFrnPuZqfCI3FVRPTrVqhzoG1iV7}8( z$`c=ed!vSJ@^!&^j<5Eg!dvZVKTrrfCyb%EulQBP4;rIyh#$;wlV%+${>wJmmXPo@ zx;X2s4Ht2i!3um_#@X3nmAqv;hk(0CAZz|h;HEzCTr6{2Ilf{(bW)dNpIxp?$eV6r zNiEuZ|1BZYFH|`}xXViEGUP|ZaxTM#DRmKXifAMEC9t2HCFLE%7_AW`&CuA`u~~9V zdSM5urS#%Xy51Dz)b#!v1}3eNV|k0iAknYK*z!J!rJW`5(ktKG=p#B3>}ctPZi!{0 zsP1M?2*;+Dys6mQs3|7%U}7@oIJgoFk~|_Bln;Ug78pGs&6SYCjN#3+{kL*)yQ7bE zP1dga!Y`AXYuA0*2@|8iFr%6+zMaSuM8(e{y4F;0%Bm-&s|AWoXl&^BQX~FDHsapg z*tB+e-$j9z09xMOHr;on(i{oBzIvubrgx4gRxvMqp&0HTM0Zd7Oq8oKx}qJPvPvVJ z%A$&|s~C`Z7&}fmmD4Idn?bwkAk1&6LxA^Oy4Enu(D>dAt~}w@x-OhU3F3Azh?~3u zAlaKK5%y+$z}^rctlU&l7MBA?2HiN6w03o1+Pvrv@DQ*y!#00ScT2~=FI?I*B4XG; ziWnry%ABgYhH0+l;sIS0B<4wyLEF1JAb_lsi92^^lO9+|d&}D#y(kzX*-VvNsso$c z;ie1ONgY018xPw5nZA4+s6vCjd;-34effCE%#)_his<=*z8pq$8e)b38l=%IfOMx^ zV|}ZMew$dPyR}0`lG$F8J4^W5WnCzE8%M1b4%vha$$vJ9G+{@-Ce)Vw02P@tZM9DP zpgbo1kUY+^`90gX25pv=u~7ZhG)m)fR{t)5yB(bYE)_W?bLry#yoHQ=KQ{d<1Bphf z(R62n8PQj7o-n-c!O9sKu{TO!TSZI$#4OHm5;WOlr)O+`<+pj|C!UF3gX3&SmM~?d z<=tben+9SmR&BcW0|A8NooCW(tM_R1+UiCcy|yZLGC#qI&n9$|2k-g5SL7yxGYKfn z0G77A`>}|bnRKy^-I=s^0Z^w^>ZVK*l_9>S*$}~J(&$jQiOZSd`(^Bz4&5K?A3Kw5 zQVpYCW!-GxtE@DOxL3mL)&lRRCVD6|E}1vlL@OPrO=RBaH`+7jsJB!d@EqDXq!-PM zcr`|hIFwnZ9YBim^#a?T0^79tzIPG4+r|QxeN?>_VxuIBO?(tF@AZyk$xW#gYs-Ya zFxps7>GjSW>H@GbtXm3@Sp7CfPPjkL{(5_k-_lLcNapc`hzNbO$dmOp%nb6!hUeTu|%W7;3ByArNMEhcpX!!yj zVykz28f0t7EB=7FOEu*p+(6U7b)IgbV39AaFW8ddf-QNSg(TQ>y4yRX3SclfGu<69 zx1;QAoeCvJmhDN75@k7;bVW{MT@lfw{C=x^EoCtq@xXerXFxk6>q%E+i7G^wsLCbF z{qa-hNZhb*y!%JuEPU`_pG7d zT^r>o@cwWkF>rqj{?6AeGJV}5QFSM@rZ{p!jIEK(k$pp2gbSJG27R z?8RE|8+h^x=TCFB%RlC0EsV8&)mU4{TD=<|MGG%Ct9uC4E_OxT)?GBYoS<*N6nULT zGNf~tChh!ux;=zvUQ>?X%i}-2oYrW2%BS3irtMt_cAyLI9a)dayR;VS#!0ytF)53-v--wKcRbPAu5gaV<44oR#aLiDlInR zBiBNwi)J3uHN81Zo>R87*90YU7(mJ$)J)D;7DGTp$)rna=@r83G;7aA%|-H}y}Qo~ zLJQ#hAIJ-)iicXH%;gX-n2ytHQl(uudb|;)`y@{|Bd*r)M8=GVSVBv5UOd7QS~Xch zGTX$tF-v%=>E31HnL>I)yX)tm7`Ar_e2!&ioW{6!9hjRFFlof}mW-fq&F3N=Bt}xa zDUxG=rMl>%O<-|icMg;@hk0?eH5=}Xq!jm-L$3mck`i5yxhMx8>Orv507C( zuKzyX(AE>VT>xF?@YPz|qMNt=&Dy=_=56R^trfjlyK%i)PD3%2-iR_u;I$76dTU<2 zHPqExU0uE9JGe>RHr%-m-&4}<7Iq(Rm4?epcf?ncjILv;V7Sauo0xT&6s0DPA-x=B zD}ki<0lCHU+h6a6JhO9RXcBQOR*SJ1QHDi<9rBq{S`+c^>Q8A++%mi-E*;96h`CjJ z{th(v8q8mLC!$}9fp%j##f7$-ziE?nRqDE+c9CFZ6;sF4#86gYtc@1$jzlKs@zk&} zHQ*K_n5G8QW}((1W?hJ~J3Qaw!qt?C`;>h+mST$t74#>W#+Trfv1Uqg5sfG2X=uig zRc)1)HHS(!8(wKs$V)nrk;{e_0u8)Fl5tPW1PMm>VqL znt^qbMVlo0O*w5jmar;=Lr2P=C4XDWU)L>IC9lQJ55qeGEBAI{%%tnh+&tpbs$%6y zP7q|&BbMoC`g<(mEivU`Z=qjg^V%_lZ9s|x{1oQ3k3nY<2^)=yC=WA*?ok{F^PYHt zPlTGG&Nt{U5Ie-cmw|5z z`@F_TP&ORY90?i`4r+-6wT6SHggu2wyka=0GZM66IH)}mw0=0qjRZ{$2bCg0<#5pW zNYI3E(AY@OxNy+ONYHxWph=OS$>E?;k)XD4(CA3em~c=>Bxr+hP*WsmcsM8*3Cf3q zHi`sI4F_!;3F-<5O^XC|hl6?|L7RkwHjM;L4+m`?37Q!W+AI<@BOJ6vBxuWU(5y(% zR^gznBSG7QgSL$X%?<}`7YW)PzJ+@4! zy%7uc#qm6~-lFV_yFc^orp7cZMHhibPZqPb`*RZ~6(!v%*z^Rt;59yIqIaS967eoZ zJoiStB+%*T?j=B@FY5qWK&8LK9T1y*DW|-t?al_Tw~tr)ag5-Fw~WP!S!hr2o8b&Qe0ZWQ;mhD!Xk>OQye1{QUm@Iz@N~)7HI8^(LFo_OUJ+L z)WHDogRx#K`CBwizQ+i@`4Z?z&cQpGw%*r_*EH>3d~)twi`Bat*up+R+06b3esps# zG`KE9Lr+=pTPoJ&N?vA>Uh6MV_olpiu*JKl`L=V3*fe3)tV_`2e3h?{@=fMUUGY1C zq&y;#Kj(3>!cjT=XzlP-?$#pp2?(O_I6=KF(Q7#FVEeXW(>`TY6Z51xu^X3CyWir- zS3L9XCDa8gOCkzP=jsC??#lwHcM*+@5pnNg7+i=%GVQw6ZE;p)etUH?Ub5rNUV+Uo z5u0B~_-~tZYZDeL+mpI>wfJ6!GVvqQvS90pp^5>Rj+YwaLn$MrF6|_-_yw*jx(O;U zqa({xxr`Z2Z^1NA8*_@~7gr|}C0hz}V33~5Zx=F_vK{{;ZNsybO-dcQ8`|Y4KOHjB zxOZQ{bI&@xf-LIdIPR+i;9Lu59sigvE$Ww3Y)$_JKp0F`>d!j<@gNG@w?6?822+$4 zdVjERZ_^t4X3=KVE5s11UMc>ZfSDkmw*q<bW>S+%4beS*mS#8TZvFj!AY{VH5O9I)_AFVg}k`Pl>#!ati+qkYg3cielVI0;@Ql zmQ3a*J8|zOWF61Qg5%CAl;vJsT`%^%x!Jz59AC>8g9}DjZ7vv%BYFpXoVLL{R*TcM zgtqrVemP%IUG#$NvlkWMMG1IG0m!i%ZtJ;^(vHc1jf!7mMVT!q@j%dn{Xoiyx%lph zumAMsJ4Xi#;vbNUU~chkGKg#`uVJ#c=98T->*{SNliurK8z3)pvVBCHey?&OWNoi< zs&n6A!-6+C@h;M$0H?bI^t9iro3(HTuWkl+Wfk6T{~^>@WUXJ}g?Y6>3$yfE-rMl+ z#*YAt<@zCfO!qM~>P#H2zXE{eJ|bJ0-U=RNxIeShc?RoVQ2&Esput|n%nLSdeSd_% z7k?|}G0Hj?4)$RrJE?O}^>$se`(C4{_?!0*Gni#UC~vt=(tClM)V??t19G`Mnd&%+dtDLUT~~y^tt-O&Yl|>NMu1+N?|Cuoc}!y#^i^U(9}frp zKJ0le?0G)y`5GSZOoB*g*U?)HfRhp-GfoC#NnQjpvJ)8N~z{pd&3`VuT#|5{jtVwmMM6>Apisp-r*qtWDnjkApis%UL^!L5`d#* zSG*A(z#M)D#r;#@He7rPZ>R{5ha$i|EavVIqlaRIYe(o!Q+(aMQVs}Cc2g+XO^o-Z z2;K)n5guf`Sf3d$mSm3KAMb6UWVbQi+ah=$4MljA@y_zgyA{fNTP?h|hLYXNcyEp1 zeIyj&5yrcWGTs{_cpnHwc!2TlYa)2>2}QVv@!srD6Btn7`2F!-7fN;= zo_P z`6$BewW@Y=DA~=7_vQ%Rhe8n^V!R7{ybFQ%=302K4kcstH23OAgkOdt{E{R5GLrFc zLJ@w$8Sn0AyazJ=Wvz^_4JEsl@m?Fjdv7Shy^MEHAMYaIy|xzK>qE(|XS~-(@ZJ}S za3AAc?Bm@Fc&`uPeL^LBI+P4=q6?r9O^r-zWA&d5&> zCqE-dPEI`e5=wq%C^?^iy7UavSu%pjr!*WxdSn!p!^uGov zp7bzJpuY{6*jcyfa-$bDVo z{o1iw>!$vm^Uu26QIbOd-c*1$CEzUucuN9SE5K?Acv}J9mVkE@;2jBgR{`FYfWIif zUnJl?1$a*a{;B|fm4Lq~z~3a`?+WmD33y)t-j{%XD8N4?;GYWcPYL)y0X~p`e<{Gf zB;el)@NWtDPys%afR7a5BMJCe0X~+1PZZ!23HVe2K9zva6yP%n_>ThoM*==qfX^l1 z3kCQ>0=`s$FD2kB1^7w=zE*&*CE&jb@Lvh|MghK&fNvGxTM77|0{l+`zLVcIDqxKS ze6IlHz+MD*1g{}EFqr!waRM5-1<$*S#Uv1)UE{PJsD2^7?s9m})q|&M zjLH%<6^v>xQh3LQ6C6b|3G)c~UQ6?6nLl}|r(p;5PK+iGAy0+piW9s=lh=}Cc)s9; zJVJd8P@iv9zG_z%bV6k@t6x!J{u@_v6&%}-J|qG+G%xUQ3}qaT{&MwZSnp{w=zm`kPh2 zD7ysaqZoVENze-t`OZ`V3gt;y)1J<-=8gnAMs${-W8~fs<27xWcy3BdCZ2FbL5mwS zBribc}yD6cr$);c8XGMc)SK z1H^HZVib(LSE1fK5PN&76 z?LLC;5Z_1rEFTjt5$|!xR$o|M-o~BnP9m=xI`V~nofi6a z+C9$Ko~8Wu-PlGsUCM8#>l;c+Lyf#%+p!VvLg8I;A0#*Tk~SVa>{L!uj5vvO z(lniM>Vszb_`r#Y3Cq}<{$m&c_Mn}*w z-+q$qDH(7gv}dYtc9k6Xm-cuYZq%9>{qCeoNA}d|3e@u?EFB~$$~y;jZQO&)4V*{M z9}x7B4gc9se6=s~+Tqjn=l0B{C?|gT+3r0vbrssPH{LaRjACo!w>}nmJvYIw^lYdr zP|wXkco|2z*y*okT&8?Q`^%sNYv(PrLwmPK<4Odd~-hW%ceo7xbJ> zPK5T{hE&^As$Fkd`3vNkxM#ng^}MbrP|uNwGLfR}_}ZzL_54m(dGwS~;(7{Na^06N zZ8SYGdfus*-485Z^=x@Z&;3+SfO>XA)b}jP_~X>`J(G2ns^`ZDdWM1yziYdHA@$?& z&Oh|*A5);7XP}dGEk&93Y4evot0|~+<8S}ha}bIL<2rGE_7r#HyXOMsasnF?n}TGKJYdG zcOu}GKJWnmy9xM9ANUl26A1W>5Bvjw4Fr6{2d)P2TLZv<`#_AnuD=t|JWc_>0`MgQ z=6vAy06s*(b{`0nCtcSQa6=#12;lhy9KVGEwgT8kz^(k4Z2%rfz}45CF7LTnS~7>v@gLxk91_1qjW=w4Zkk+dHIpV0ax_ijQXA3*i*9~P>AC)IzD2$Kc0 zctDN*I~V~w)(Gf9z(#%s@-+v$3@{{ce*kr+_k_*M3 zOT{lK&xEj^3#LT788QoOHza$~j3+;5V@WSIIo`Hl7HmCE%qndx9BF=U^~m6nQQe?$ z!RR`6f?_eFn46sDB8%+}cnIE8<+RaLgLg=K#rGECDVW9f*`_m&8*o) zSDE<3!rJ2RIxzmu%u89?Dv{5vX#3lPw$BH(|7P&ot1jAsyJ*?nFvVcUy|)El<~;?L zuC;P(pG3jn(6&NG)Z^Ye2%v)98T9SV{U4C!_SsZha8b~2*l^uO`+4dIj393(>W2yR zifq2a7QNYCJXm(bj-f`N4Jv_i-rS&#^5juf8zo0yIQ_tJ_{QqVL0MJfz1cTtP2 zUn`sx)CZ5i-R_UWq$qpZ9@T>jrSy7QV=U*M9s@>{E?qn%PNl0$$cG2l7h6NhyL-i; zc{^E?AIEdg#%>cgr%#K4Q-|7-M`}mKVFGwY3@>u+RYjgDsb;k@tY+mDi~tWsE2!#U zI(QLOf3|B!U#@hT43c@?A?m+k0(SI`n)ftzNx4eH@k*^CJb+lXQ4(qH#28*6b>>FF zwiyuEYwU#(c|HR|C79bHHVD7PrXR9WPtu_3?*wE*WqXlD-uped7YcVcj5Xb5 z8p)ZZOSk$ESFbnw+UaZcDI60GDeEG~ZhEiSC75N~{Wr8e*hj$y8NZD0BVw1ihiIX` zG6`c!B&>Okq!YzJl7kpD+F8adc3Rq9r2A6xQ+dy`2kU%BEU=jf-~>HbBpB^qVr(y>v2FB?fud(G{s#5e8IW^V0i*Qg$(MF0>+TD|B~YI_ zB(Z`zBHc?fn>)71m|mBFwasv^7oT!x#+*O^K^LrAbipFJ&^CkV0&&AuNu=^RkjTkr zu5-~s~cdv{~ zracP2DlYl;Ql10ajt^R*3s1`=_(kJHCLxU*;hN13;`cZ4dsJ|XpNJor?>%(>cKwK$ zY09Oo!E~=tO(Jfnw-N7n02X=J;U$Rs^mBirlQlnmSx zO04NjdfJmQl|!)HvY%JSOgfVaPd=g?UFZ0zWcH?eLyfY@ao3Vs3AWqu~ z@2PTu?hpl9c1t>01!l{Q+{iOtFy3crPRT74c`~!$5KY z9*1p|1p@1qX(YBy#H1DQxwjtGVE($~2na2M3ASUfi$&MK^4#udy*kE{sS6E|le9s) znoHPN-#E-&gy(JQOS|!K&(zaU=R01Vn@a?lVL92#U;>f#b25t88&%#4xOyM87~X zkYJy;T3~cvV9*`T4nY?zLrn34;hP))J%X{zdx+nnh6UG1o70dX{A3ptcG&=a%3)I< z7lHjJGf!DFPwd9kXitm#)^t~)S&O>E7S`=X+r5rD@>-JO}T5?;rr;W#c=Pk$dn$X z$}!LFpT~^U9(XO#!^V}mdqtZJ)0kM|QfS(!69Y)nPE*oOvsf>H7}bfz)Imuj)u<7` z;g(W9g<1fKmj(8fJq84NdhJ-z+?%S zq5xAQpi==lC167Z*iZsCQh<#lV5$O4m4J;EU}FjBQh+WAn5F>JB%oUXx+S1T0eU20 z69w2r0yb5EO(kHu0!){H%@klW37DY(GbCVh1=w5yW-7o;3D`mbwvd1=6@VP-@UiW9 z_trR_!M?zsm+;BCH^JiEp(&kL`B#yGKpeqs!|rso zpcU-`(Q5?XH{4l7Gr6z!^8QHS-9S7+_a2jop+w_7PKY1#Be-t^XW=Qm`kCp6O zn+*3&__n4q^FM*YY()XRfVh8=W7pEU1WkSbdxcWj@cu>%=<9R@W)#?;Kj#->gigqr ztK4^BKIId1OtB#ZCWziUi%y~6K;k;(`!n`xMmcU)KSYZ;hUtAArw4Rq(GK8E?8Z#F z7XBTTc?-2O=|I%+-d7Nlk7x_Ibg@}?;_Qv{(d^rB!T^gII+A_EveE}>cI z1L;ij9Rkt;@`n7S$y--!Owi=bn!1xQsVP(Pa@60$m!ljhJE@P2D#fJi#MA_h*B+!c zoo0A%ffEtygSQ$~K{rJg<0Mvm=pc4=TnQ}8Z$_nXYK>27?i58EELv?I0&cTW^WMfC z9K+OYi;C#IW6C>r23cNwnB+JAK*+ly#GEAdfoTSq-d{|zAHgY8k!W@7bG-Mc`#6E% zn&6v<^Wc91z*&BPkwn0M1;BqZlY+K5R*bJlXpfHZXNW@ojfR&khnM?0j~)uOy}z3f z(_kcc?-Ld677g_eBBS1~X%^Vke`0$5hT07v!G(N4N87slFSO`is07@^A3|vJ@ap=; z*qYqIp`-2h2WC)bdryTkc$zW*sL_xa7(>s1TJs|sLB$OOU->bdmhC+uvp5D^@spGV zKzL4`(Dn(qi2e!CJ|obYYjTH$(4yf>jkfFpPVy{Kf`9oT|MEkA7w60Tu$Q818*5vy zPLhG)h@X(c*tG<1!Ht>x~6@%gk}2&pEo^#RKrZ1TOUlA5P$@ z{lPeHXRdA~EG$RDaL8dyL_wd1n`)w$66KZjAtShJWZ@KL$Y|ENqdr;U`HCucIg>6$a?3WYM`rdyN`AS?N6YN?3bOM<^PNpnVKB!mB?en@t4O_l-Y{LPj}vcLrza?4+~3#* zr%|EmhAEP!^yX$8;|?{Fy#CHKTlO%0TL8OC-q9+}70fah6x7F(jN}-}NE(ulryH9){CteW@bUDGBB(l&+ZFc#wew$Ii45=|WCZq(J zo1B#@lc6>&3?SW-GKX81P)(AkUZYCZ+tk9)pbgdNgK&*PEi8HPGqjdf!5$iQdP3Cc z#cRO_KpJbUBe~xqrh_yS`d#+i9s?igoQeT?S=-L+Um(KuuT>0mT!GgM% zf;alSiBo~7Ub-U!{B&{wQMbx_6cg=3AaSz59hvrt8ZxbK6J$R+5uPdJ%w z$z+CwWM+^IA!|)$sbn@KbAn{nV9DYtS%Q)!gJki+l1*0KH;KCMXmnqSk|D(X2a^30 zHYlcw1>yrA$ymL~O(o>1=f4mR2ss27^>2JH(ks(rDxc+eMPWiYRry$SM)f4okH@+n zBG$sTHPtlo)BEc1G5YE)m_gCqkJeJ+VXC4HRMAXO(P4f?KL+aQ0(B#!&RX*9Sd>hA z68kH%<55oH8G+Y@OH49?EQhDm^&&nr4PIQOjwd?ChM*h!&@?B!7GVm>!=kc++bdMc zC#mCa3Ltv|FP0P*mTNYNvK{Mqbt%o}+|%q~j6t61IE#HpaB#TnaS{Z}ba6JWVF(_V zQHT!t1nqH>PR4AOi%nB&$X+%XI? z-1%zsj!6))=pSE@=PDJI%8J(+o+AD1+xW^o?i1{Z@SMoD+NS2jgha4!IZ*AZ=$3!E zN#~1IX}z*1hJ{TpJ9ys-SUX2)?iiz2ZuEyt=O72K|bsG1j9OR#3#0y5!}g!>dGGt_^9eX*915Vjj-Ln>_oqMpx#Xtd4&BsgCfBx0j*u=swR>fnz}R@w!ptRt=I z9U{jIV}XtbgQju;4fj8oW2hUgQzZoxL)OBK=s5=v{r zJ5a%v`fVQ5hKcX9Wb>#y$t+weM*LVcN=ND5p(>r{7w~Ynk~xAN#L?Un{P~A@{#!Z! zekAALZgT$3m-Bo5+Ne#!rrQ4ZG*55mdla#P?afTkksv$VEik!N+Y3|& zs;xdbk|TWDu{59^E5abA9e5K*d^i=U{A`1mu*0@(f`qcvF>3}O!;@H_oT8q@GQ9J^ z)HGDS5g>-2z~hcFOPaiXzj~Egx!|%+{KQ;@ByE*YcgUt|c=<}CQS^YMSh_z&~(FA+Q2gJ=T10WHwWL|yyf z4+Xp#4G{FBoK!NRS)yDokWK*&>&ki~x~yun_pMH}7C zYtQ+5?;#@7QfuYu(|s*M|9zk8Y7CV^3r#P&Uo>8%d68u2D65zwBlLV9Fkr5>iGjU3 zuIC7#?lWh!WGlY`H(mF3gYxTW3;IsHMnUHK66Tza2d6lKsM&73ej=tre>?OXPFh;U zZgw*qTJy&npX8TC*xEhCobqN~@)J0h_yf^%!YVVKB=|G2A>2&!&n0kj{&N3#DTiY^ z`2`$z3I|umSb@j=nz{0vyDu*cd3J!|z7(%A>wUfS@^as?xP^YXu^cN?X+2{(#(a6W zK`eW@&R8yZ-PWcx2JV^X3a=Su+l{AK8xDtFqfyP_hTb98^7bTDICOU`1QDHa!y6|Y z4KaiD8K4OJN>CSrD>J#Fk`>H-WrH&W={qHc>F+Ke0&2PYi*JK&lv1`Kt6GdTrDVd6 zgxC#BSXwumyo!iz>fV?n9lsPo!b*-~dJ_SN(+P=S3f_NzHB{c*2C}GU`bCvRnIZ%3=~o9?z*N5)q-C=Ff)2pvD|j7>m!N_sN=_oq zb!eg*iI4P6q|$rS!-dZ~;lfM0k(WG{WG|9-Zc0Kdf?zA4V=|TNWvJms=VgEWKh#;( z)-l~9u;L09NA_e+_M|TQ1-&%X_E5daEy0~fy%{u8(3>+b_i8nkY^7m(vniTsoZn2K z8H+`IUn3euB~`PGsaFeAuL+EF0wZOdl7_90s3&+cgFZ>?E!FWsk1)My(%QQNnae1} z1D6s!jr5LKL3NhkPl{W8%E_%XDNn(BDHjmsl0iX zubF;guo(Q<=Nk(1^bi?0c*W@l%rmf{=TtbYWjI&)6TQ<-JbP&~evZ;e(z7zOkZmj% zGHc*MHqIe4@pZvTx9J|0fYKbE9I=?C_hpHrHx>(zh9!~=U z>FmiO#k|2&FpoJ!*RP+)!B8(IS90%XJAcmB6(* z32MPas_Qrr7A`^8!H9fwg7vFa^bE7`88g+jUH=5#WN5&DE1g(G+|c*aTAbEObq(vE zc8#XeQb%X)jO{10DOuN_MHF+|tN80R;A+o|XSGO%uAQo#@+uLJ*5_J*rywv3%E} zrM*VIruzxGc0nDcglHjfou>C5ES9TsqkbH|WWu+}{WeB+au4PWDAq|q8?`s+&DSOp z`OGr4;0=mb+H=)Je_m@z-DfoW61grUwPy{~FJ zxLlnELDnudX82ZK))B)p@2xKa<+C{Dzx96;hckD>na43qT?+@+!o}%zIdYW==eNGm zYL|yQs%E7UdL|LA)IDoKl1nQD2Qq?eGOl|V3ma^whwObUzXNzvnN%sANoA6z*N4e9 zDU&RfGD%)h(wVeeG&`DQQURHoq?fNVNh%L^9I{O3tsY;iK$RWE2(9e3QZWgI*bK~{ ziQ4!bNYp9Z%e1x&v^2Y~(>8uf!PjWx$Ht_4v)Hn`*}bDtd1_^F%rX(f>ma>%BFXAg z?JEipGM^09oCO-&4lW|fO&q11T2VrT6G$RWAjADHG)~6&;Mo#Rf89OBB2-vpEC)(F zX>~0eZrLL4VWGrIj~K&6vV+1*_Zy(>5P%ayq5bs< za({h1?XOSp_t)R@{`!Qd9PIjt9PCY*&zUlxvt>SKG5!r82RlRJKb`QO;p6`w;|IW< zEahOHFC#MOP1?6;|9d#?e^ZX!*k397Kdm1JXxwqXqf1Us=i7s&dvmaKv-Rqi5Pf+O z;d%fH3D<8+uyDO!d|$Y(-i}-ywtYhVhR8Pk_2NmEvwC!f?ZCIlEQ#rXiO|{^qvyZf z1J%CmCj#Hw#EbOjAv@O1LmG4$HffexO>&8yJ}$dDd6Wd;adZjP@ zru(r2*i(6a{FL~<6Rt00lrV{s>H=HukV%v@6!c&d#l4?+m~u`5#D^|$KMUHhRQgJL zCFnLTQxMp!AD-d%krBwu~>zi(lEEbJQsK9rDd057jekMcmrP)Pv;UXfq z;kCC>yYWF@dv6lGOE-!CnD94W!}VsvkZW>vioY)+F83B%+VVJoMYFnVNSe!Ivo*ZN z$`R10QH!_R)Io(OboV}iVa0jsB=g5~l6ePCGCS#95FzgOikuYG83x`3jR+Zd+uVNh$6VDvFx1`v{s2FA|@ib+2_x2Bjh4>4)aj|V@F0@J+q7!o{Y!8jb+UgR#dCba z0q0RflQxp)QKX6lbnAr)iA=5khFF1eEj}<_Nhg zR#MU9;r+)P+Xdegt*X|{mH}}rdLG^6O3uv}TB;l4VEZ80HwD=m#&#z{`2bQD3e11g8lksBK}{8DE~Nj=~{#z=Pn&6`3QGRA>1*BY0u}*;XbK$i8$Bn zBG`_QDB$_pGVMLIspoUw2$uUWF+t{Nl0A{t^`;4A?Ro!vt~*z~lV!9QI3$m!rFlYG zZx;iq+70^I15!5C(5p9s&~0J`GCa(+llZ)+V&EOl^$ikgHHhYD?W7ku-9HlrvEh6} z^}#}s?r)Mm`MKmzekS>oOC%rk3;NcZeV2w9qKhTNauG2s7yAs079)n`;?RKxXp-7D z=|tv|xFKSC?U+X>k2fMoGfJ>dZz*{O^G<)4WxG5d5RG7+~^CTI3@ouHu6}nHluJEZ`Tf=)CH%`Ba@?9*=X{%f^C<;-+9J6OKg+YQ$ z^sB4Z_W?2@K`}E*KG@-ib@$z&)JC0^zU$-Uv(k#suhlv${R?p*Ers*L9Vbty3FP7shAS~Ku75XP!If<`bwFwuSRTfp7By71D75ELr!nraQ zACDpyu12NU$x;(qiocNj_F(6wZ=P3^5oiG;(D9QYpO=2TR-RxApN6|LFa_u7?*E8G zTxO8{=goZ@W@s}s^+vq=Evl5Ny!{iOdK>O{Xp9wAbgJpi#9nW>Df-kj+^-UN^%&zN zM*9Ta-2&Tv%7dnbyCt%@2nz?;HeNV592c>uEZ!{MNOD;qT6~}OM+hXcEla=3f)wn_?Py!RJ96wfYmLAby-92Z?i}jB`{FXGH%vN69!x4}#}tsX9UT!X#fT z_h&fr_!o^sXmd^x6&6z{;DAOZC2t1)=ijo=?v#CYm*ju$=Du5izPm&A-R;zOcldp0 zaNhyo?rtgB)TpEs4s%9}Rvd%rmaN_*d?&z7095Z-r6hH%A^9VIzwtxjk4DqhtDMlq zOkg*w1$>IPHjR!3y_7Npc{XSe7w|l|KzW=(d7R9nR{?re9)@(k#N4(?_y9XoZ9U0oQZ}7v?tJF~Sn39yL9^`l|FFu*=dVrQ=CI1sYYoFV1#kZ`jb{>Q^W%o57<`4s7(a~YtONhr z!&*p4EJhURK$2A0wFGL?U>+3fX@fK+pP>vA!|)EHEt#I@Yc}rYKAmH^!6&upoWTa# z9Vt5?de=|Fq4tLtrhD6zZ14dM#Nq=X{WPt`tLL;hwBsgKI@0?)G)qT>%g}h@06F)?4d`?3o_tw zeoHg$aF&ZPNWx{fMs!y7Wi8-2p|AZPl%<@+V4X;VwSPtPL#=2SN&l*o-KxUc+Vl8u z{Vy0&d;TIO@!<&k^Pmnr1L|;UxDGE2sc}by8W)yrUPKLE(){KOXEmUKUsC&i1Mkgg zU&ylQYlaJ=+Ztbc+1AzZVI;MN0z&!?g-mEDRA157HXb-A7!zLx?b$t`J&zBUIrGz@ zjEU|6E%h97eO`?T|i-cOQ`F zUTFAhV?!PL&#ogIM*8rO=aO~dQ1I<-4He(!L&CRYFnp(k@vW;_gGL-$`Hmk_`JNhb z``tezeEV3TG4&$I9^w0hmrK}elqFo=lM;L=U#*7xvl{bM$&(XRIiVP^87Z) zbKk-9T-TrpBk4bksyBr5{9lmg!ol-g*FXp(=|428H-_{4F35B7;CZfVu!NEHA3oLV zRGv6XSu+@aFtjDCDYS&ag3yb#h<}(5_&%uTqQUFAt_3=br2mp#y*b>rP)L_~?lE|t zUks^j_ZX1pzG&N9hfIIhwVVZumtTiiP=_Uh*P-*Gq10i?fI94lI@}a)H$BL6pTYAy zVn})JGa%2eb&=;SLvFWqEy=+GJT!dk>h7R(3ExtjAyAu;x!M5f3E{T5eO+yV8wNau zZ~=f{rQg3l6McDT-mJ48>+15LgNN2G>*~&+^9bMRYipO&!bm?{2U21tOS%4y;653U z6xCq5Qy2stwb{|COrheO7-_SM*HIk5bE>8ulwch0a11D9)e53qizw7CuqAKmK3~4) z0KWXh$h=)gfx<|lMND%MtGC7al`~(noW)eApqz-u*^(OL;-qk!9lEYI8(*_^+zm{e zL2{;uBJ;zzu>u;i_W&AmQn-EAm3bIRxHtnEfr{fd0^(GUh_NkiLpwsXLI1IQa%7IL zt1Q7BpHO?i91u+SWr%{)vTu^Co&H}IHXT;|EJ;T@E5Sgp?)q5$ARoHehYHU`-y;yH z7(L+_n}j{xVb8RI=>6Qo8EzQP<7)|A6vnhiIL3b@aIbKTeZ!t5Vb4C{v|q~aSMvL9 zq)-Czh5V`n-^uS9iEZyNw*N`so*^LVz!uhZ2Y4fi;a5qig96>8!$~d_=)hIpzgRk} z&nBUF@95s%F=%!@4SfAos(qWenQ~PB=KQ2o?jy%SJ!H_}A_2J;UY3uU+Q&Mq-)kAS z9SYyC37;X#U52?@yVS=rrcs^S3S@-(XTqC)>md=X&LBh4WohKL7&EeF#rl~)p7D4= z#^lQgP_au?FEt=ABa9 z&ojjjVk&6X!yG%zk-;SR{o*I~9okFc_Zu9kh~HaiwwOldmRrQPUi@%(U^DUCNBn*i z;~Nd@i{DA&hu6BU62A*$^qdF%&J{lo+SE6YA?&S_(p-|5=6Dul+zb$182cW3xq zxbI{5&Tv1;?)h*p<~Tosdm+2$!Tkis*%j`+7`_wS4={W;xc6oFoFr>c0lrI8no|;P zJf}k{$ilrR+)Eg~1n!3zz7Xz34BrOshZ(*I?tK`(58RJ1e0R9_VEA6beelXhIbi#w zwACcs^i0pn$2ed+1ax!29&nFk__lEOFnj^rZ493c_a+SA3hprs$B+`A{Q=sOgZG1b z90xDu-~$2Ln}ZL4n^ubO04~J&3{KP9w8qKW#t`!^3e6IOV(~O-mHM}im?LH|L3t)8 zP22Dm#@7D6Xrq=|Pu+KDaxX~+X9##3DULO3fZpFo1BP00siYL=lmDU!`X6oy727yY zYiE;D$`~#pl@lsZ&nHPqVAjukB>_6(PwDdhPJY3xj20N5#?cnk#2_L+7)9*&+e!TP zlwk+=i&I>xvvMFBc7puQm0!|i(1Qy!6CBnukg(u>j2}R1JAp3|_UV&Z0C~lr*L*=8a1bRp&J+Nr`r_O zc8pb0r%4bytq$!=*kGeEoSOtMC!;|`14Jfc1nP9WG&&xD>k?!#2#;&35=?m==Hvm* zm@+RxD7AXo1~63^ZiCX6(VT}H?02uX*r1%MVvchkZp1lAj|W-)wTaFL54OmT(jjyJ zC;XrAdEsk(toW*<$#={T73CQg)P3K6B?#5Mw2j`R8kug-JD1cYN-YTrEXVEm1l(d- zkzABkBSE1x%CdSLWihm8 zH2yd892~bzcyS98?~jP`oPa~5fl%yg+fov|sSn1Ey;VY|`B3b~S|oJ34?QUa?eU=} zhcImHLr)3C-Oz`g8j9QLLrko)5?b61Kgl~VqMRysX2B`O*i5b=brM-uVW^)Ah0qH>& zeSoNdN0T94Wh^pMpAHc_9g$&@6zE*uHZ|HtN4>#!u)S&GPv=N!*FZ(p+3!9=9=k?f zGsOTPXbyJGY^6H}TF{^e?}CXn(yXyY7RR>LRS(7FYO9yuVf@8r@w^x|i`(fd z?3FzQ&2z_E^d=YTIZ@Tq>q@d-t!Q*vVk)I7xY399^xFpubVes#yNBe);xOoTt)~l@ z2Q@R)NTiA+7O@{lYU;l6tAgKXjMh`}({=lEU7|5(3C?P__T-|Z*m{U>YLCVid(ef z-tpjw)`4xn@Vd|+UQ_snD=Q5IxE~zdf*xgjO3+fvu*cC!0f`g z#_|WCT9JVYeZA?OXK40{tzuv(jC#wRY7j~6y$XmI>b;j^-EsIUs&OSgC+Y5Suu)lg z^5+4CyqxFN6;e&?I8ud&>m)L5sk>wll&;#i&k?_<_ad_BV@_O5Gr;hckwPh<5+5oF z&GA`sJ<>TMg-AD1HcmnQQk#Uc*@eu2XeiOCRH9LSiRKA%Kz5}Jx(d%gQG@40#a-@e zt~-YNd#K%r*dMFd0s$1A>Ag5`^``rZ&+DA5 zlErPKE#bbb;$1@!+Cr}vK(A%!Ls95;41G8Xy`G_uM4>k@6g%fp0rW%*EE?dUNqK$ct>=b0_515V}eCg2})(CMC!6R{V8_ zFqUTzoU$04un4|^?#TEc2<6c{q|42^Lu?e&7>6{+Xw2K*ziB-nO6G!+k?!KJ1ZUEu z!=Ccy*14EwSEGmowi+S7X3k?BmwdE(|n@XyGlS)PV0hMb&?l= z8mm~Hv}s~V-&y>oNm(20Z-`FRu8z@@TsYFhRcWoO0TM$-FE5ACDkP{oN?bFfgF@tu zBJo|sCX^A8OwX0FGMO|ow_Paw;Yj$y6uv_!{E85(1S|{z*_VB@ymPv1UhO8GIg+@MG;wv33iipFkzq-B6qg4=(0ZemqWbD!Z|L zIF56qQx@`zRd7@gLNsR>`xohkA-OrTEm;&yWDt)?R>s%4$J~Xzui?7VCI1O-CK_%s zrE2Wo+x#Qlje6L>Yj3lCJKN1b_L9sg`3fGj&w;j?og$WrD-nVb94@$Op3tw#NqvrV z|400`()rgEW7x_Vz4HwF3fc&~m$^A6G|i)OGtZ}TgF*A79GCNCv=Jy4WRs0aGw`~H zV^3tzd_ej~W%|ctdYVUZu~#)v6(g9A*;HdHG&|iR7|;K)9MODmU}gr+r0rHHRxs64 zp=pfB|7fnyGnDU&i~ zL$R^3A(X_0c4OnPOoO`|sZ2VUtxJ?sl|TMmU9Mtte+hTIm`)-FozJE!!!Pl}={PoP zn*6mI&5Y$9$>=agVOgljT>&0DRoN*>MiV&exJSWwi$eq{!=hU6XihzzvpPML6+qdz z$=^g{Jd<#bLFCG_B9hLN|E)`W6WhT{)kF-kQeHcZWDGuqOd5eZWjk&YiM(=!M$K`L zRk{bSi(#6lbpT92v%mduIV9-Vf1+Np^tR19$5;lN^JU6PZj%Mi*gwq8tFhH8$5vL3 ztrU-~X}4&&=V_Q_%W6XGU}%MhSxRp!Od2CLl#}Z8(k9~DaX{B}JQUm3(y@aG>*(s* zfV`Ve8YYU>F+#XHw(M#p*sKn*+uOEdcvo6@Em6@rT}u*?6B)ukJr?z+`-NvhemUh@ z<&?|HDVO3YH|^4z)jhtg_AB+XBMinVb@-<{?+N~+CIkB8H?&vYKr2PXoqoVhlXO8l@W7qKCNP?E_@3jzJ(Fr?!FJV=|<_* zPx%a@wfYG=MzN#4sV(WdQdPBf7}|Ss4kk|2uF8QL<6~Hx@1dFk}d1X79Fi< zt?YpY+2V0->5@KDU>NSZ9+Pn%m2rq3>+2~}X|$zUW+}4lmN%tWiiF@VzX#gvL3x>jNfp*Kzw22>*E+%4%fQ= z7puvhd(W&=8a+2+`FbfXWkg*%)RUSGvUfw zA#mf~uZO^ld;gEN?*Nag$^w4#>ePfu!b}PVL|u1ntM0CAFYupoUz?W1|NrxSllN|U_nvd^X}3R%kRw_VwINCD!K61j;}USG zm2F%+U!w-{S=;j;FDO-!yMDoAI*zsc3-n9sXs!yqYRef{l%&p!twL_B4MMo_NXlG- z9H?_{72{VqdO0$&sq0ssrt8LOIyJWuA6o7sgU1=?h|g}bKD*8OOsk~NzTnS3=g+>% z`|Nh>v)hHryTgjOLqyzZMcio>T*(E0%LRYO1^bsoo^JtGUZ6!y41~=Ja zCfS@25@RN>;3N+5#l4Ual+CSiE<1}K(Bb|ZkH=+D90$|efXF6>woG+pjOXQvFQ8l@ zBhlQf8Hq(L{beg5cdwlb_vnv<8uggjifj6|_N6Ga7~`i3B2@|v z){*bZbNH66IT&mWxRcRX5T{0Ck=9qx8Oz554;M^~95)dD4{pB(r<1gV*=%BDJN6D+ zxARe4vz550IRyU~H+Qu*Qh8XCI%WbFEJ{{8@v@H~b|^BRU_;Qs9ZC(@vZ$_`ZMX{I zINXpQROG0pn-i^wVnpgE#{qsii!~l;_1l%Y2($IK5+(ji>IotvYIq?sl&Il>$b!I4 z_Yp;!HqqSDFP;x@QSf7-csRL>mO`RVY90jtw{EV5|3jLq;Q!?2F#KQDti%7|EowZH zG>ud|^BDkHrRBG6u?pOP>VdZUO`A6tBy56ipGBCd#RwBS3&%{-#{&uQ+*mJ-{7TgC zqEWKOpNd9RZ7=91Lia%|9f_)_g z>02X_>Nu`P>?6^Lrw)IU-t{3~gk@D0VR^0aM=P8fi3WKx;8K-#o3?hK(lQc_E%Wkn z_sCsJGsqs~sWS3qkB~+DCU%_FBYu_9%Gj6=3z^D%%JmC?yQW6_al6!tX6olO6Tb%H z3nINhH@R!nFx&8E^??9hQ%MZKS3`JHrP6!QE>ph!ZS!U#AZPzHxn-gF4Q?6ILos7t zWO@7)h&WKr*9GntDk$7+9!a1Vq@WvG9vRi#CPatg^pzcYU!w}zZyyv0J-ruczXLe1 zUr4gnS{!4~g%-LK{Z(>Nc2ei9eh#Ba)fS;}M@vBDOp4QW@-Uqz!sJtcj^6%qtHt8( zb7N5tXHK}h2yVEH#EYBt9WI_8MC%WUTDTy5GFDP8BB(B+Cn#T_&{RyUEl4zYiM(u1 z2~l^0%Erai2`IZJSQBbJ3eCJ?c0hW#CQ?X*kLDvk8cAv_vBeG>M08lzefD2BJ}B4<89RJRN9 zIwZoI+YvMLwb{J1U;1%!M0^LIrBx4dV*X} zBG5d7D@p{oCc~-8;F^r0HRa2F7q}EIE)xDFI);PEp60WU4kj8rJ9FC*9Ve-?Zu0Ai zrVi+8OI_zH=o#zj3nVJeJt#AIQ3;QYB}8w9_<&Mi^0qk^i>@dJX}45_$3zRqGeU z$O65KJvy$meO`~xy7ei%WW<9|p(hoBwqoRyvkKGq!1O&t`pC?`izy2{R-&xxO^!C8 zqP+eO&mZKeF5M9AP(XPfP(Cx_3Y!CQd}5x2>#=QrPQmq`V+_$Pa(CiJ39X=0QlNzn zgH2l3I~i=0o|SciAx`TX&$ab*0b$3w6{?&$@CvIrv4fvE%nCL|fzA~Q&V59> zwqg@Cmh9CL97topP|4vhqTf<2`GP{#>fpgekaI=p$r6UM7{3&>cXG4G(^yvML>P+b z?M~({G#-aKiwrHUeV+nE84C1?pGB9~#?*B|IeiM94BHRP(y1u^x|W`eE&+s3!!hE| zx+}n;id|?Q$!4#6uaX9i;`7*0@8MY}!;tUzK2e#j^$Y2#F*;ofppG7_q#80WT_Faj zRazqCI_I*cQCHJVxDmogjW^uiG+bHw8$)&O8fa8f!!t*DGs`r1>};yCzLPv_$dpvQ zxazBlmzwsIlg+#)rJt;(s#LkTLRFpBw9TKWDd;J-$Tf{BExCnU?xn*|C}OCFUR()J zS_$+rTQ+w>cI-MGm!$5({t)h;IbXuP1n5to#R`ILG|+BMNv@R1PNmPFHmiX)I+G7` zo`m60$f_U)QLuINwLRYlDWO#+ZA}03NtSJbX8r zF`G7Zcyl|5+I(CTun_+RF{d|1n&P!cFMY8 zE=E9i#AOit-n1Npb`Wz~0 zq;(YODxu?fLDwKWJ5uG%wRCPgFHi~l6XDKjx|owW4}N${Sq6S<#IqHTc}jGc=Yxz! z6xTTy^#R2>=pt6boy7xjA91afl5nN$qvGWyXhcKZ9nR%doRg*yXvcpjxg|$&)?|Oh z*$_-?i$iD#4ZWTYEf@Qpc9&*eX`RzZf{X0^jK$vcf}^sdcvNTGV89$pXVNupKHg_EeQEQ$P!uGsXEWO~imTkG%7A|jW9vClJ z`CqW|@4)#dbN+UBe&?L@B+k_}8DiE8I+0x=zW$J=XPB3Fv2-hI;2psBW$w7r8a^8$ zCMcJ~hpS(P%9YHAkeJ?16V23^`S+DY<}yRLf9*^9qG_xw$Iog&cQ>|Sg0&TKo%t8Y z7eDI>il;)?;bFA;nwKs8qe<@oTq#=HkBb=-p_U;ko^q-;#g)vQt1JV;3ojx*G8mk- z77rUYk3?*flf~D8mTLDkR(NVcFgZlYoO6{8f8HiMDpIAp&zlrAsjIZ3H)P}!X|UnY z2T!5ZtzBRGy7W}MBUH%@y}Agrq+?O4n$T~4ngE*5P=t(z=IxDv&4!VvXs%BtbOzly z94Gx8jOvmDa;JxW=Qj670+r6fCsc3g@x&FNCxz)Mk9YLs6-dTe7{&RJL0yA-64bC zbq>xGO$B{WxSlCgf81J7*-WkB>Nb~IUv+%%5<45MRI zI2U{gI0L!qoVd|lbHD{-ZU$%guw;gremp*QDrHNb3%GDEXYJA{bHS;mv2b0A15L&t zO%@_ev~&wJ>565@m#a4@c<%tIvMWIJ!mD3XaI)z@H)ehHzh>I;E4y)F4m=M*?3Lt05XgXBMytdA|Atj67yHpj_ z{e)BZNUmF`_2#gW8FG!Kz!dY(;Iu5qeoQ!7t7P`QMwAKepIh}g1=P3q2QD(28kEdS zR%XJ~mEYh-TS{#e5uwx|KYlduTI-`HydU{f2V39ysZZ2AK*@AnTMEZmwUHdS zRJET!jT)C!2LgCgTr`lL2oh1Drg6Xix~Kt7ZA1+&dF*p>TX3pXBRi921sRHUhECpE z3$*=)-7F==>J1kg(jJ3g95)~Y%`3o1hy`)zp&66`iA^NHR-y4a%PLd`%sUYBFQA5a zFlkHV*q3P$ulbH!m=zZ0>*%ZqOAp>xvq?W0EM(UOI0+=B<)jx#TJ=it=D9YK-XqK>E+#DsOk^12Zc7MB9TI zb(uBrCf~5UNqU(oXWvv%Z1v&1u4FE5-o&1fq9lDaxi>|ow?rmdr9z)$42}JPFC~pf zAAuLi%~Z+P4{=S2etRbRHAh6CW6wlKiy!*037KXgoXRt2g`~q}^J47r9g3r-$wR~% zq?x?>C|ssI*}O!f!I|RaEu-=pGCN#vyJ2(etFhP-(RoP}@!JWw0uAvY-!JHPKX)td zetH~5@m;@`{S3!lXldj&Ce)f@93Xnp5wLtDh{dK(&QzVqi2+B67K%lc@F$= z&N2|&xbenbv@xw$G@sxAvZy1a9BJu@+PZODEfmq?$QQrzWN=< z%exZQsoMo~Icr!Dx>fje+$v4cRgS`5tj@2~;WfRdPkcC1d^oc3!;#L1BfTH8^M!DN zLoZEq_f2Agl%UJU-DK%#@Wg^OA$Cs+NF62|{e)fw909~H-~x4uj&8f1Fw&c#B@c7^ zbGVQRKNUVz1GuZP^e>PMy&`ZOjzk3Uw4Y#dbd=F@a%xUa&B+@8N2y7Kxg1m`$th|Hvxj{E?)o9f)ZjK9Xm?1ef%rRk0z;U<= z9fzyXowyp^iFXw19FU<$aNaJNH^e^Sy<1UflWrcvqe&^opg47Qlg)oHg;PpP0yT{pReA|c9ET=@S;sU z{eIY)v&M5xw#G47hsA?}#dYA+ONmo;db)ZJsLWgfoC<@fMeIg>~h>}#5aB}S#ML9rbc z*Wxj$M*^+ zqyAd>AMz*q!9(@e?-h=!;5LJ69N;OJ+YEo#wVHjF;|3gzr8y{EhjKOaUR!UbZV(?S zRo@)-H?#voNPh6l4y18UmqW#rbAU)M()v~Tpifx|ogwo& zbmF#RSxTm;!0qh@4^bw=;x=bOu# zY(Db~T0&ZOn>3Wpe=AV7bUtC@&8~)8u>hT4n>)3w&Zy^+;(D;sY$apg0SEpwMwYHD>=Xt(&HB zMIzcbRyIGxIfR=~Y^=b|8ZEk~fRet&oph@w={5}EDMF&yjS64dh|l!x{2d4Ga0l*m z2kyc^eP+R}(&1Q33`$yVqRWIm-O8}F#uMi`x1l++eqmhgWqys|tj8m9M(OFh@!3z0 zrSHMDgl~svgf*_mT-mxl!nb>Ab11e(KfeO zZPQ=GZpOS%3clD(eDM^9ju%N!+fdj+v)Wzat@$OYI9&dWC=mln`dLvTB{?P9L2rq- z<(C-1e9s9+roi)}_y86Ef=HsTZ})sHNpyD_I2Y2kv?iq+CvNtX)5t+h5qb5;5YAy_ za<<&{A`UTkQ-`bqt9c3e@nss;sMXW2;Jh7|U=YOVSCPg%+4_-tvXwL0cM-KoLl^VB z-DFYlYl2~q7h#7c6<(T1e1^}Z@Z65pHkiCA#?ZUIA^!xAqVVxy)x;dM`oS0Wr@$$w zm>_uzL(@gl+t`+WEr@wXu;yTIGYl@yns<6t8_D5dXq#y$ zhs!^wbtmSCFbW~&x5)4jB7|!P?v-dSKky+&O}vKI2x0#8->~WiSxzS)WG3C*iCL3b z!JQuwchV>CBK+^sWOA*MeqWZr1Q6#tL{o5PUU)_-dozB1-CZ^OX}rd^KBqVSb2F9|<)@nLgHdLCzPJH~NJT zjW4Z;FGa+^tcZVE^T#?Zx|k``ouU)5ExZ1X4fY8sC~!pD5e0JsGLg<*D(D&-90UHH zIn|SXqGI#%5GZ#R*_08Mo?!vVfSx~`Z&6z#@m-79_OIds5bA3vp=6ywwmaU^57(R_ zx8j;J=E8Sz30tUXquzFfgbwFFNOS%Z8#Z}lm27^B)-nAVlId@#KQJYd+_p-g6jWBk zMVZ^}mLCC8f5j+b2IQ_(jVj{c@gA1)xkigkzd+f#r@Nv`*%Z6MUQq1YHB+PmMW0$Bs8VAU7bpZ>m68WzRe`7h+-BWdQ_iQxW!!Y4`Flkfj_$aNmz46&%?I*HE$yi5G>O5$zA`^m0& zQ2x@DuJE66xRK6IV2Ho5afoK7-ev=a{rJYrbcn#aEw>KaQL`bcF>?_9??nmL$Bmhl zg+-kSkogsIXm{ov5PWDnE=j%nqbdO}GX}4O+j1GC2W?!!N2eIjZqz z)w;ha8)yO>9cg_8@qXTyZ2CN%g1Cq7g{=9z_d3Ob(<-k(VH{lDC0mDC`GB=4NQ?(5Bc;9=$;A zyti-R!#<%4G#ba63+-H?61?%2s9d2kt<1?``LS(C}nP|a=eS?6lp*q9Jzjd4zm41nsk z0K1p50PO`9pvj<#zGPUWkoLrDp-Gslbq&`Vc&x%z`BtGqO;sqe%A&>h#4|wVPDt&^ zF5u%WqdkIwq^xThpm-w54&k^%>+!Y>)7MR-1fmq!LS6nLO2%7gPW(K4k=#Wgbm;Ts zbT;HT!9Dh*YTtYVJYc!i2@2& zbE-=(`m9XfxHILcQ(t2t6|IV{;Q_RbG@;?mLHHTz7ebO{8kNjUD3nt7@x=T6PE`<}Q6n}byJI}eUJR6)muetNA zbLDx>$@989&w5v$*YhCGya9=7QS)c{v{y;{sXk$gWN9Wm=b^vI{Kxiips6R z`B7>tK*stIox zVGVhyypUs|y5V+v0a}N;!L$P{>V`Y*z;JcL9d@8jb&A1-G!Htp{e-n)PdQ|Sjg$g* zM9HkY6NpD76H5=w7OOvkTH5e)gl#{`3yhYyk$xTtihW+{91ctW zj1HSYF+5-RwpfQ+p^^u~-e3wsv+Ym|gr2rT6Cre}9oiSgmI{o8c+H$m>YVdvL>(TV@Y7np zoyi7rCkz_l**l%39Tl3n16o2z9tMpZs!$Uhd`57hLXFe(NZ3zF5i%V93N2vH#PT8M zP|DeMF_UoD#cnc9*vSg*0-@^`S)pkVy2EdUCP3&NJ2Wym&#JT^phB9AobnJ`tqKh~ zJu|p+&Q|ToR;^LCC`3jzhBE&{vaxty$Sx>zV1X-iAi-QDfhHQD!l2GD_?f>@H}`-l zpZTlC+i-qE*Wq`xe^vlVLu(nii>n48VH1k(vrtxYuo|d9BexlSENiukmE$?Id>XoC zZ@?SWBI!Vcb9jHnt+rHiYvX9oz|LtQiP!hLf4E>C*ZB_;&#|twnRF7X3SpUw2LFW%MmVG;q{;MaMV7mP(M;?a!ApmBBOS_fhJsFbL}Zib zgW*)s*YNvy-Vg6M`T+Y`=*RPwDtKsfO{3Ut=UM_yM=2`09m@wQML9s{DVeG(^)YuU z224%QD-n-NGWGmeJQT?^TqO;0mqg1U{Q2KpON+$KW?90`S%)E{vsFk8I2oNC4vjU9 za^^4VOWgw#5q&is*PTf7aUPhsJSc0bB`hKIgo%e@VO;)(O2{y$K?<(a<7vW_wTP*r zrCT<~h3O6+Lp8UjTrG=4+%AS=`69`b@G4heBhyG|z3><{_FzIX^g*bM?mEj=d@0{m zwEF`GOKsOkc7I?8q3;zn(|EUZI4KU=l}emN9Hp%I5)VB$71k2151ilCcScgW$dJ5JPnjQd!6oPa) zP^FvmAg&EB?^3D%hz@#d7Z&bP_Y(pxZQmGhDf@u|m#*&@a8!MpfjtkE*r8c zzc{9$UzNYgPbWmg7tr|*YG(N{(&14*UCKqC0_ldPcM9UG4Lvg-S}khOfCbluc!3V& z03zeUBW1)xtrr39^XTHN<-{r0{qDx$4M$`gXT^qI5o*La`V6(aL4!#F8bT5jPNw3a zqzS*F@EZ)jvgI31Au<2{)$g<{opc{K$kGC`?=&LA)Ww_HYRHRA=G=>NfECDZ=LQ)B zp@nuR0ik7fXmGO0%@)DrICn6V9PSQ=ljvO&;G~iqn1v>Y2u%>_ShjidW>q)*=_f&W zB3eKgBGoeJ!X0{wOe0uvk?u}*2YE<$o(T^H&kFy}y zrg6x#c)SBQw8bK%A~gVyR3x5JQm7&W@s9UU_(?0ay+%HjqZzB!rokYvgX#RA-pc+f!~bjr;~x>Cneaw$U~eLH4AaMJzA_M~sc_e;Zq%|!T090e3dPl3<97|Foj z5`uo7P`b7|=ubgF%=lsjv2+wEqAdTGgoh(Rd~CR42UnwkJD+^zHOAxu#}!4uWv2jh+zG0}B%cNn~IFm**C`wk%si24GAI@j|kjx<%c zG6hAZpeqv{_gUl0BuF0(xiZoDoc%e|511(|N5c-0;T;JK4Wp?-&i7ZV`kD6a4~D|vzI9$ z*PZ!`y@ByWAizqo&ps>d^*+yy%2J(gVV95gjXznb@R3yldkEfY@ej`6EJ2vuj3>s3 z4wiWDu97-H9W3Dn!0B@K2V9cTPp0r$cyw_NV^)8MtPoSgd5=F(S+zPHL-IWxIzdrt zx(>_d-06CqPC&(Uoyl3H#1}L+s!d8f>1$9HH1ZvcDNrtp3U!m!cSGHDDEwvuM0lJI zbakYu;s9R^1BXa==Kb&_7<}Schpo5xY~55JW@QvfZWSP9RISF*u0jukv<>Ob1y;=M zt{8t*TM!PgP(R%rbT*S??+2WlGf)><%0{oRHb6xDQJu9*AUO`io3u;N8W=`}fqKN; zlPaK?ps3A=`caGE4lSziNzftz&?2HrQ3NWPGf3r-@HW=t3C)(6hlCa&{;Lj0L(woU z?hI4gfVekcfBq``8oE~@Rsx~))rj$4$f{>>1Qkr1O@+V>a|ugiSVJ_jcIg7j%vtfY zYL=Ob7z(%y;(EP9MiFzPJEkI9$+cB*5xo)!mWM;7j$18xcwd@2kmX@)tZM*Zx8^%x zQGdeclh&E1IBm}NMXz0&2sii39CV*&G97H}PvS#e6{eV8AVRYuG!bD~5%kh1E3sPh zFhqi1m*H!-b!p(b`|Q(Jy9NS)xlJfJU4!s-vqIN-V7ao!rM+l<=iG3s^zg}CSvF6A zI&(5cnk&P?|5c^4fi8Q{S{FsdL$Rj?M6WaC`qdQqB^zXOIdunGWV4H28f7y>FGJ+a zomMk(!DoWg;J#Z{Zwgr#28O%)fj1Q%?t~@#9$`s3?l>uYKXB@5+58Cyc+E%93GF9m zH_<*Td3d9l(8bxpxXxj*jY|-$)-+A%2|SLVRib0t=-8Cjs}Rll%m)Z2UIQmL#4KexVxXuhRS9!S~hx|USpM6qEW2?ZEjVs3Xo z7l1??mJ$P0iAakf52CLcgu0e0IT4i;Ve=$cQs#&I@Zce*)yQqDM=2LBTp4#eK zq6LVQEtAs-tuud@JZTd5^`?QIULrfV+sC$JCjl3&;vo{hxt`mKciHFtwf=~aB&{i> zHtCB;tU!IzS0@JuYHGY{74$qcUsUz99~~HoQe++-W=g6gH@Fqm$Worpu#sH=FaA+Y zMs_~D)C0lHG;x*p+j@=`lowyM%#zKca5O9|XLh|`vaXyqSCF;F+8~9iGEYSQqB`oD z)kH-SC{Jq+2oa?F6?Os4OfhRut2O>5XGvYq|MXyxqX<^(0ZB{>)zITvK(L;@WpHa*n#GgRD{A?=CwT^M$3(hi9)$i_=DanTDN(1mx( z;sx`+U~@w=&V}D_^f7gO_(l6+*^V+X&ERF(&->O=aLb+;={TL zQzY7VMLN=A2{%i1HCjbxjF5{ltou3ZITQNQoGI+dROK^|!7h(c-xBe6sd&!_-qn!w z`6D2S0s9_Jao4AiOkl=D6xfkdi8;(+I$xs^jB0d5o|Sk!CgO&>YS5KS@nc+IVMHUf z%@xUbRF9cW=wchmO6a-_;#V~a{Tw;bFKW<6I{SuC0R@>0=>70BkU5b?*Z2`I4^`25 z0g^?79&*WXORE(lrd%&l2QqyQro#lSn@SlCR}@`qocRHmSz&`uQ>kR|CFh)wfutX? zI6OZQ$+WXFqqe1z4R(`I#JHsLq_8#bSA`u}(k;h^@%lbI?b{zoLZ3o{Zvw;O3nEeV zvHO4T%6v{L|0RC4agjX6-bwMbq z`f2Hr(vtL$N%auPqIpyk#Eq&Jb#=YTP?&a}0`xpO8#ZMPL0KIO88svd(&D15o=4fF z919!Dlqx(e#JM+Cp}U6hJ_rQ}k=#P&Z}fA_)nT0VZqk9E!DP^gHwWoW)nlXHGZekE zMOGTEvy$dnV`8g+0cyq18I32wto{`{Sm%rl^Bcz2LhNsL>~A8r4q|_|V}BR1^^Gyw z8#&2pX95g6de}7F(Zd*~M$-Ty8l|O^)Q!{WDAAmcb^Rc>u21Q-oxk24*Tiw2e9au^ zu@j>(ZfCZ4!^kiy3v&3N8&{o-N_wzp+*YUHBRUJ>9G)f=6avhfF)tiv~jlF)q=UK{2;STQR{OnefzBIxC03v_M=^9K4_1a87IDiR_5tk(LhR+Lj` zMbx<)cdVQpg>=U8tH$vhP|`Rc+ql-c@7UeBn*gNmT7d2V=4@PP<@s^AlgCN6O7Fz- zt^lsT1lPHlk0a3LQh0BQat=8=8uKk;C^Dyl%B(RzfD9`k^r|N`;K33h`)cD0krt0J zuZa7X&#|K>i_40E5MvR<)qGX6Z0@gcuMENAUfDt`|C7utV^liIQqJN_`c%Ynj9?VC z3!9NL(i|!tfWHs*<1j~RJU>_bmp4%L2gx5xggz@wdjJR$&O@UtO8VR|t&G9(fx6}- zztlHxA!imoSYq%%P(i>6kI|yR`AX#3;!5PzC=3kfY;h^_>WCe++P>;I6;R^DRY}eD z$wKeN$BBOC6BvEFG8nAIvEw6h=0m4Jyw@RHc^7)`Lrzq2^k0-AoB5B5x#S^tF|M1E zt^9dcCC8mu*Hy_P_DK7xNDh{oU}8CtpwIlB-g{#G2@Nw?~J{7IY6i>M}I|8j~P z8y3uAIkG>u2R>FUfd5spZ1(d>$&KGrKNSVF>?HMzg|3d-3UT{OJs3lq3* zQ^5skXW+L+`Zb8iErPtg0B37CUJjh@rM-Z~0wo0<396PL7<*iI9d_n6ap_bn^y?vkOR2`36Ome6Hpda z$aiNG-(f;TUUi@s<$Wk4qpa8{^AIM~jUbra@ZQ$78E+KAFrAeNy+!EDYcUfXO+BiG zfjm0WVIRBtsBUh9xkCw#rHC~6jnznKue14UnS;CQjPi_1`y7!Lqk!KIB3g7YEskVb%mRLU zn7CwxiXH26QrN}BIGW&DE{M?|`Rpw!;b^AE(O!CV71ASR#KRlUWG+7ndF^IjxrT_B ztGjzqA1X#tYe>^ByPT-zBDE7ONG(~k{-4k0v*lhsQ>B9xNm@#@J%(wUCEC&=C7jIs z6li}r-m_(7!DmyAEO;X7dAZeCSr-3C0*R61rUVj^al-Pw7lABcmgS&AGru74nrYJZSYMzs&dl)Wisar?UxK6CB&;Ka%f z5NTweuwm&y3v9&X>?&-G+o>^TT7o~zYL(fJ$~i^|{;@=_l|t}i$O=p7La}3o>>o=_ z@}Siu$FS^gFJvF%Cw{tV^JXIv&MgE$V&RQJgpI+9FUaAe^=ZuEi893O1+dY3zWn?~ zqQXjiv`Av5m3Wnp7%+!?zsV<%e}ItRfrgi=408?*2v+IlTt+@_Bd_PyILJfqDvrqS zjf2`*OaO^qwT6)27P!ViUN?6{0Fb&L_*`m^(YQ(H(;&_y6sr?|ytfFAazELx`77VO~0oc&Uvp%wu{QK*(>{xSdWa{tP7EzkE0i_!!~9m^@*> zuU*Qa&UmMsJri?(q4cPOPZ2u!EW+tjp@Zv@)F%?D&k{QLEUykerBDY)46Z-0AV&}I zlH<8&@<5GU?s#dZ*mZ)ZvXf0-C)#iB%rvv?=a)a(zRIaY(_I|}#ymltO;5?AY{o79FChz1mgv6XmNOP`>JuwZ2uI z9BFtImiYsjwmgTB25g}HYBZNjKS_Y@itvT1LgsGx608cE^BK^AHlV@Wg$|%W*&Kv` zZd4IaOsEdZt1cu!AMrF_(A=E{?}D5F)k7mY)jw6f`a$KZU-Ad4kEy-p-l=jTP@a7^ zDt%<%wNe55CT4-7WYOd4a`XUrg5?P^N9iL$l1JNBKU0onq3Te1o_#~^vm!YIJ8V`< zl@6z|`!?Gi<&-PGzqwE5+Ft!ec#lrtfAdiH}o?a{bziYkz-$h0IzxZbI z@(={(-ORj*Jr;18S~wQq$sDtwcByz|?KX?GCpwJ6?Qs=JXCU)BLyxcmquwCUW#zNcfF%BAb1UmCuv|l4}TjKt$ z)+U7q?$%P|9?h#-8x-yuR0b0JG&jLp^W0X0;+8c}2qZF{({K|qE}H&A=0k_}#qd8+ zjSk9P4)wKGqA^JXI3QCX$bs)MS0c=T&nXb$!21-~g9EQ(fPv?TM_J=KjU<}r9%`Zm zmKE-_tnfm|f4)c<;p?3y0wX*Go9J#bde;jhd_6VMW1c4Rn~Q`I#`uWLILTT3k9RiU z;)cP$Z7X?EUiqWl| zzu4LfB%STMpuNl3qLVkra`IgL5~h7HcY{NF@bR`l+CNRU78B6NyTNN~iS|LZwLuZ@ zLcH~qJ|~TH{$qon((^-K6HtedBug zWrW{tjNcuM-z=jZnCH$sy;E#*6%oBn7~#7JhTDY^9*UUmCui>x7WghNs<)|yldDF+ z)MPwCUJTydW)~RM&BeCUx6S`TyG~__jGW@WzK2Bbv@&H5968^yeMby zg@^^#_~wG#11hPn`-tftp#S$HMeZo)mM}%u3yM5QklrmQG7KqltekyNP~<_?+;OWI?;J^vQNKZ)9P+DZ$5e$n7G4v`0a-SgFpLt)UsPl2EH!l z|L}a$)(?Co1_&Qjd*>iNBwFGzBE!R?C5EG7+m?*VW1=x0^ESpqg^e*0mtn`k8-Fb5 z<+T1pGlM+S=S_l+&vQQRb`r?Fn6-OInDNIQkim?PpqUBs6do65{Bf@?en>6W@0;aw z5v&)JZ)Iw)>SOJ#A3Kw8fBn6n*Yy<5$04T_?{!`CJ1Ktx{JC=DCX>ngc}TbqPdI>s z`(UEX?ICBM5Wd3`UM=*HS}$BCX zG*1BX^(4#J(~f-Y4nLgmJqpTLpcHo6p)H^BD&`VP;IL@fpL>DeeM$h3KySb0rB@@d zA+I1078Anqsu#Qzc~UK0eHAt`>uap7UtX`Uu_XYm>a*zNOwFH<3xH=uDW;LxRMV^3 zF%PbmlkmLi%&SAs-WwNDVAWinrbE=F()S2j*BR%{2?b?Pla&au76RGl>XZPW53z zwIQ#1$*ai-LxVM$Av9U;cdOk}^`!vpo*;DHyh2?!38Jb4s6L*wp@{}u{+knBY^~;p zAh2J1*A6_T=J~34YFCDI%FC=%UL~Ec(@C2}H zQE-Om+1{4bXh&YllNz*=vjmgPc9ajo0M760gw`u6JHIKU{Rm<%OaTA)b+5?0Oc_~Z z6d^J*Kx8(4Sh%WW)Mj2)@>(7{lvPhGdRB;T;l!fzag6K0LoMVtemlB1(X8HWuOQBB- z&3dW^YW^41{1w)Wd#95rBXiEfIA(Z8Lh)&eO#B&Iqh2POWI=fI>i~e)w@F*S^@!wui z?;EDx4+Pr31@*=v^+GiH`vX(&2QT%$DWqQ8)e6ZLRqI+Uhe~CR#o#XU^o>v|KRPvo zQfa}O&mnjHN1<1K^eWbGSg-6T^on}~?tiL1+;5ruZ>c%)|HKERJiqu<;a~kX&%&cy zHOsQBvz?wIL#*e1av+AD;#LUphvXMy0`?St@)~)9SZ5=z3nRZ98uQH2QTu=jfx>sH zJ)mrv(Q%|@5CwBWF*6$^7aP+P5yHt+mWAK?@-0$VzC||s`qm?02g5-r02;WXe59U9MI5 z*c98(671afDh-46hL7vZQ|$$*Z&dSkDa>Zmg<>DNk%k$-9!H&={oYbzat)!Cgg)5# zDvRepThZd)Z*0h;ewVg#q6>X9?6~iudi49h)jZz}cOD!?dh2J_Tfeb>Um(lbU*R>k z2?@P=JT=kpUS(C%75Q0Edouy|i=g&6;fib)q~7e+RzDYWMdU2jA23I_U6G&dV!;*J z*S2;}wBOv%J*If^^|s#rh4A0M82*w*_$!)?zYMQAO+);*BK%dYclcvbh`)}{RX&aJ zA20C7Si~QnF8n2}DE?S~z#QhrU$Tq!;O|72#vfBl;BPSgK?nZ;;vXjb#}WRaUgB>E z{38UBU*JDM;2#nAN4)qO#qkdl{#&~7H|%0P_&d?1@%MZ2SEaA)zDWh+-;eQM%3Y8= zLshLg<3BYTX`m?5Z#C*^-ZdEK7vi zvP5`N>Jt&Xwss=gTBY9~u(kDa7BL_zEBGweX&Ygu9~HA9_VlBi=%W3o_kiC%_l~W{ zwY<42JX-r0lBYo|PlHLG+Rk*jfC*EMY{;(da^M zp?O?nY?N6-6}iU12C*s{N;oBiDw>FmL;J|HLs=UQ)jaO;Al63P3vER1@jUQpyQdor z9|L0gWxNl$do%~>h&gBkd~e0$8<@<4?7BU(#ZI(WPyKhZt)~+CdJ6XttR%V)W4exD zx}M;o>qv*LmY!-Pi1Gi#hx2Wdy47a%yx6v!m-&=UOE^eMR?nD=kWnF!T&4W!^-WbUmpw%iq%Y|vt!nByD z$7!;M7Futm^=5W#40F>sf@G}Vrb)<6gUEc0V{RI!d0eM4T46{34ynkpD9{rElE-`Q z`x7kS#f^7>0WWSc_5F#p$Fqd58t>KP1dX@P)IBe6{gnr@PG_k;@{W6f;j#I;BP3hxHi6r%&GB(&!S5;f?P=|6oY<@Oo51bYPLQ>V_M3tv zyPDdso!hV7+kO*@wBOdet#P8(a|btWRSb=_wNo=RR);gSv9)Ndt-Xykp|G*UHoUOd z6iA!X^CwY{F)WfiP#(70^02YV={;=d74>OLqt$1aVAt(oAt$-O?ctCly8 zzabz=IpU#7%tKR{hw%7T+|xJ^c<4w#+ZI8EiYzGTTwhJZ>@UByO35M9Vx*XA;zed3T%F(r!b>3IF5C4T)J( z?*uU6B{HrtsqYTP2xN{mFaQr<)X%K^Y6`$^3vA8WE z|H06P=Rg}=uko`tKLoYC0k;?as8eY1xH$Zu+kTqL!FE3a_Z}x6(5@=85{4p@HK+!n!llh(6i0FzT8c^13$MqQZdI^$yI2@?dUO{}`BetGxqL=0IY3v$1-N zM2D@7M!UbQMj5wt$o)upju=p$BPOVQl-r34l&!)nm4Iq=C9`>SaB|>DdH9A z8j{^s-%qrG_Cu3xs&8@eYNnTYKdx(?cRosmMT@+a9PKV<%dS z9lQO&^T97$7x4IjleN5Yo@0+*?ehHAWb?_Ssx@jH!pvxgW48QHb zdOZ)n3&2Y6?l0*FcKDrVhszJ_$nyg+{5+mz&@TMI?aTUsGld^Gm&hFUiCc56q6_x2WOfvGYe%o$npwovJBOB7I{b2c=Yliq`r=jX;PI-q z@2yu=1{wCM`hd)DKiR8s|NB$H((CSmC;>FOR}&v+N6LkTK%zHZRcR#9tLls1?6p@l z)2_Ui)ZR+C?~Gy7G$vR@SteihyqeFgl+fZ*K= zzty0bMuB$5b8DW_i~3P`^!h!z^R(WruqJuKTj4;@9Xk6_yOs5$b{2lr0z!Nj;YZCv z{&|F~=K|qJE%5qLI~VbzA~+O05~#58FulN=noo*ieh=Oh9`H2;epAHnI@Rq>Jp`dw z;P;}$Pxr4_93J!XnU8;ayWV^HwLZ_)9zfpI;`X-`F=lo+j*#7=3MUFr?Vy3PPK-XE z?d5KH-W2kBn`N|I-V_tw$aOk|H)L}*ZKxw#jS0A`qSI@ui0}s6Dx;V;WjDg-3=on$ zCg5_pQ)r{+SW@Y7rx>n4ZlMELKsL8WxNadEiV4*LdDTL%I1*d|7RP|l&;_&d=HE$W z&vlXNrSc%vl?SP|k09B^c}Zcbv0I+yDh5M+c^J-D`bZYOgPU%=dI=Ao){R6ks?)_B z;sk2FYcIU&c_Z#0mAMHM%QyLQyK6MwgpVfANR&Y2k@9@kP@eBzlKaMYrAD8E454!a z7Ka5+JIOA}KTw|X1IkmrUhW&^TMzoxHrI=P?Y+6~Z<%YGea`gRvgH`<-SUifF^mS5 z$7rUnj~HF}i*2*d_@%&RA6*b7U?!WrkdHcWAt7*hxjYVo%HzOiQTAOXdtx_oXgKgXGMElJ{3T^jvu*>ZlrMQ{}^g7hs2d2IM3 z_%{xIbHwiv9G{rUBM*byNAb%R?H}?-BY1bI$ zCI&LLv}|yU)3fb(jBD%P*|03pdN-oMRMT_&I#h%H;vA&fxnzSe0sD*ldUYXDEw8_L zw(6a{n#3J=q*twgs2777i-ae6p}T)`dsE{f zN4DK5IW)Rm>Ty`33`EP+zCmP&%T=3)7@0j)OVBCu%wb+ZHxeL&2sG1^-@_X}FS3u@ zy4-;fdb8)*t}+N+uJn<_aT4;@^W+lezFA=1MRY#Q8YEa|Y1Xu3ml>>JZhr@?plt4l zVCe)FCg32!{sh)j9$pNZhl@dir)ZGiaoK6(9)_+4lqbpQa^FY-oWHFw@JqCwI^=8) z%hVq3W9_X0XO?5rADrbl(Ps;;W7?N!J@v=gESABAyW_pbrT3E@ds-HqCOI6yeR!T5+PqMJtlmrY{D2eTdhl@1c3_T~Vbi zWoy0s0c_I`((E-;GvL<^zazQLmwI(#!OD1EF@?p*{@lR?+kqOdn3{)8{4g~!CWPfx z2YcyrfL6FTo)mQ3B&?iXsgIPo!w&=lqZn-4vbSKx%YrrZ4}o>PF00^*K=O2k%;{1GOUe zI;|nzI)r)aFygJ$bfZDeF2izPafXM{(b`SWiAINc6)Aox2XbkGs>|B(X6T?CHDFpkG~aa>UZ$BAwn zSJ;ICjw@{(ooK(AErH{agySkNjwcX~D;dXC7LEhuY_4}Wu4EinQ~gwAcr4?1oP{IwppNeyj>j^NCs6%s z1dh8298X{zPw?V+Y!Mu{a^rZcT^Qhayp5w1?Ke*-f#Vv&@kB30Y~{OE@QV3g3^x`2UIV zU#7>~f2N7azmh-up~N>SU>#ZLvZ{%&c_27~3*_v1SmWoVDZ;+YTBgYP1mxL*A`8$s zYkV{|6Xkp_QPvg`rS+^lu!=y{Gf;fTOYIVy)X6(dh-25< z6?iuFIMGGVyPWOgJ4)PVN$2|oO+Jf%FW~mOnA>lrefQc$8XkLDre!W*B3w$qTquap zNefu1fJ>PUmwM@NK@oPPMv=3BrslW=(fX{X7ARSHcV{1Jwj|>MyBLpTIMFtpE!p^1 zvhQBIP|I7t-fYwMGN$d74s9PH(p=FKZ7*Z=t|0&}7w9c?uC=>{F}%i$;blc=D`&4F zvR+O9*C8$)au38USvwN9*Hv4@z05AgLtH01|4b0qy>^%9)AlBtw%0OkZ_w<%(l+qJ zQ)WhyVz|C18ehv;-b`>@C$L_zn2qBOoyL#^^YvGGla(zMbv=FU** z+WGK=-q%jjlbD!(2ozY!X00t(B{plX>$95mTDurevpUg5brYUZw92cSuFG%Z9TcmL zZ{aq+O|#FrpCj>}1mH%x8*4uFouB2gq}z$Z@4%Wz_GDFVVN%>hz}_lIv4?Zp#9d5{ zyS&u6rHBsC-U*SkHBx|JvB4d^VuR9v%<3B;tywz64eL%FWtqA6;D0&3;QnuE7@qO< z2?k4%yIP`*BA-H|x1}qe+1JYZihF(8>RAl?hU~~R*Ow&i zqVlATm#Y#<+w1x)(yq6Q@sQSu&hwW)|G_zDximfRXL>%APtON?qUZgL+{0A;0|L1v z4m}@c{2un=cYjHGW_zY*$tsbay{^xq=lymu9(p>_rRn)VzKs|yTl9Q{>G>DUK35m_ znLY!*sX%i)A=apae&=IYezGUK@CYOP1cCIZKzL6&Wr4KO6O8i{UYs8(MdQqIwRj-e zV?AoZc-gwA|B<@o?Bk?{d#=2;Y~{>ceXKlTmS?WIa#bR8^}0TbxgN2L@i3PYU8o1Y z2eK;OGbSF*m)n#rw@)&kJ>$sjLqwUUdy?BH8PDeklBWcody%g}1w6;7KIcXC$x@_U z-9nA~Y!A)K0$j3gq;an+wrKpMU5tmuPISpLCZ5vr_KDwZ%kT3{*B3SWY(JFW$8kLb z&>n9~9)tcJPPe{AelPRIf1FuXxdZz7)NC<4MHJR{Nr_ zZ`GRD;_{5_%Nh-x;A8DlMn3&*PjXxuitYXw6jbeZJ$Z4Zt9?cK|3dSv$$KkVEwXp7 z>$KSWdAk@7dpprZ=3tIyK6dMn7xH<1lWdKZy~@14!OQD754;l3W9G9HfY#s5a-XsuT69m}D+5Pt>)8I`n4PGszfh=d=(C~y>uu{Po$UsM%9mmSiJmj(JAU!Q<(J;vt@>GiI!Q@ZX&eXCm-*;Nje409#Y z>QEX-e7#4jTUQnu7Mngo(_67ASuKi9uj{l1DPOgV@eEQr(Z$X=$9=A^d*$Y}e7X6| zmYcU&ZvN_(o6q34FSOc!;kUmfH}CXHZr)-Fyh|{?Ehw-r5`G2A&AUv5cfCY-tC*TB z5Rkti1n(9Xkav0|Af=&W0qHe#e?UM=*S)B3bz1`Rw|oIvMgsCquLPttG%O%}gr>Iw zQnFeUkY3km3CLS^F&+VNqKnv-TY(K9^2*2CTApv(X8Ta@v3z`>dHO);L*Y;+F8ZJy z_Zxd98}Bjl9};-)3*`5s<=4akA2R+Qdhvhn|JHvhUG1)aq*{4ZHzeVGr-z$4Iw^N! zj~rK977XUN|L53qXQ*Vg$Z@@{)AD5Avy1U~GEQ{Sv01#RDeUFB_qDu!_bj_V^bzyi zKQy~P^bQf|?^+N2p^q5VPYIZh1*-cah5tc#e>B0fv@6NpUpH~1wkXaA{* zG1p{Fbe6_aXX&3kG(C5gN&<#$&}*oyHu%Uc#?uB)bkR1b0QwHdJ3l_Z4W`?2{~5Qz z7hbu?bJ6EQ8P8jC|7EY_{xe4ZD+2Iyf&Ky5E`K8d{E8{?m6rmamFIj>`KLXZywa5~ z`XiOgtNsN^HN1r-Lk8!|UWtEcICxU?{}T~d36!iH8L-ziTMYP_U5tkTo#r+ zB4qJY#M6gQsI?mU#Ot|vCD}X$8&}C;qO9g*ddQpf10#~&bs7L;9t@-~4}pKH7y2c2 zSW|rX>P~psr0-n`S!z@%IBX53tX||z-UpM<&@mZPa6luOLs*pBmNs?u9^TyhV(!y? zm>W~f-6biRs*>Y5L{sj12CB&!j6gN;+r9#RrAett>WcZaU(%a&^DwBRQAuNH^9IYJ@u8f;wt8DUE}a^c(Q% zj*2O8r3M#inCxb(n$Nu^Flw8# z{8Ha+!&9c&*m#zP=NqYS@W@%Dh^V)r9J|z(tGD}@zEo=dS-~j;Y$86jypx&>S2@nz z5U{~txU>RFDXYAlCt$`f@~b5G(}w?H?*J1%Gi!^ zfiIxkswc@S4dsNsK`CdExOk^M!SI>`4nk(i8rVN2mh{CtHvtJJK*FAQ>1`_KrfT|D z$=)iAJA`SgFdhvpwhGr;5J$CKn**{Yo6DX3?wEkLUbg9;t-=Je##@Cojz<6{enl6d zBJdWgoC`!76)`e9LF3n$A1Hj265Vn+%C6LN%cT=ttgpEUcy+1QKOLPf!#FQ?2J!Pm z=I5=6pWFT+F%M6&d3Z8WYm&{lElCk7%C!~Nx97pP$pMDzOV?-ST2f$>MGH=HT5wYF z77Y7S$8e&Yos!pZC2m=(*=G?4S4> zT~Ruj+iX(lHY2q=(XP>>cAe;AZH9M4%<<~o_WU-R2W@&Lwb?e@X44!Ug!lFhgzw)b zDcY6@wVjtxC60mLh9z(yKeBI(*pNl|$EmmhN)>b%^~FB(6D!dukk8JsRi$WsCxTt&%qNKLJ=+ z7xRx3q5QLmkLNHS@5s6buYmxU|7sqBnMb7CiT>}5uzrQUMRo@tbekvNA?4>;MS1=W zc~aU&8llZ@k6G)C>@0kmj{!hoLxlWtb{EY5Kc`VjT-`K>)yRCRW3EsmMvNB(7C7ZKAfI@QNhvd1=j1{jZ2gjKrp#Ujy1~4b@*zY2HfAc znm8Np>m$m$fJ(=J^mGtdh)KWJJ7p+O8r^mf9ihY?3W3H+_M~a3MU;d87liwTkmrql#Ix@g18Jb700xf2CR`g4H7w@!D_@Y2A&y0a1+yE zteFXONBW`sqi^6z8J?cK2^Uwbb?`T5J!1Ko6L=URCqD5H*D5Ahi?UjHsWlt1HE+6G z(*;HoEak(2^a7Hz2{W_R0cGGrFpc32e2l~w_#}$7!@MIP9W)`eD!>0{Qq~M1>(oWFtlEiXO zc!44{E#S_mW+lwcIt&bfmEb*TB~>!(cCh)ucFK=}LaNqsj@DA(n!*-%!(|4=y}7ui za9&(HCHSQ#BNqaTJaESaBTjb_#Xat+9!nZ_-V&N@Uc!mYV+0<-seU*Kz>ElE+>+oK zZ!R(NjOS5%(|M>LKD^X$7ER&vX}X(7e;3f-h4l9o`n!n!zKUgpPff~&D4BReB|i}V zQAt*6u@&?jMS*Jh4QH)OkEH3a9hAT1uE}l6TOMb157C&w(CT2>%nEIsPRp zWPemi`@mB20oO~nuivcimvZ}7k`AxQ_T{2kKOq4txrr--o4B+vvo0gEE~mdMtf2eT zg%~&SMwO#+i(Iob?outqZCnR+pCQ}gx4%T9wC8J9$h+ugeL_4>_FTnd3Lg+$g$E2U zxPFEIqr5^4r;n3C81|+WV~P(|LtypROoEl)8)ODdmd<+Bfc@MW4K$cXmVMKr$FbKi z!HlfBG#{-aP8V+EuD6QvYCCER8^Ep9L{aDFxXAY6vxpnW1~sGkD%Sg4g9*SK>n+!-Zd$CjY)^XM zas>RZEko39_}?4;cNWZ+o}0OmF3Upz6zO?z5hyQ2qsJMnhS!*rIUNm{U9*W8P6}ok z7^br8>hy1v-$^Y&OB5hE>f-U?eF$%E-=B#ZvEpyb3{i6Lel3#};lI9C{LoU7waT32(trkY>7rOB`Gz`l z`)@j^aZL7sjb^L`M%wIh73|n77){|#16S~*Pp75RMA!}12^Hsp{3GE;{*ho83}yDs zThGtRUbpplYq7{pR|m{CQt@V1YtvPx9yw#UmznOM_Jo^La1rhe=4?&k+>7*fBog*zST=aw4uW=Q zLGf8HxdlP7ojNZo!kq=h-g4DH&z%RG!Cg*XeAax-9M73%_Nz^tef(aF&J^}p`ks7U z@X}dmlkB5vzwgbys4mTEHH;F~z3?}&dVF|1gd!}OHrg~{b=-4qq@P#AqoKmIvi^fr z^u}roA}YHyB*ML3DiRguE)rItNSIS3!biCPxJZmCr)+k_XI{MnRYYF^Zh9PkIJR8>_cyl$phTkNb)|%64C1tv}LCq>AOs1aH zN|Ga5*1h8%FLhkZ&UP+uKfBKdNPKw*EZ3$B=D-ipI=6X) zo%SOfj0v=pkCFQ^=BZt#mrtImfIgmR*wP(zOTU%3X@NWlE%<0gS>CT9#ZGpP zvlusWKSy2gk~d&m3&+!7%vUxwj+a4OIoZD*)pILS$QQsIDyfzkXouYsFax*K&%t}E z#Had5WaS!m6;;n6jAGbHu3C;OxnEjx!Cp#z~7m7pdc;#8M%At^a|WF zoJMGPDZ0^BSPtI;bDt5IVytYRk$VD1cL}DfRY2e!Gdy0*{nq03^S6}Q5R^$L{5!-O zm|1fHdGw?uAI|w6)wJTED|5D?5%Mu7ut11ZE)jSX`V!AA6QRe8V~>At1s|aV^(=V6 zd(?;@xcLfSZseZA`s0)lPiZ4YnMUquOnnk;?|Oir(RfH-csZV`JP; zn0Vi!4hk&8keZ7S9#X>42v3J4nhn>)fwiAS{*MdR{xjkqxog*sdoI{<3*`TDll=3A z=VPrGu-1cEYdP)WL3u=`ppV@oGS1D9t1#VxGta0 zc@=xxELShE7e90P81yowK2$06Ij_Js%U{5GhwKRZV9QEGcQOwq;2kQQ5fTE$A()_x zn2CYDczRbQJ7T;1lqL_5KyeEuDQ@qxz>$-KKXPpb?uYAx9n{nUd(fUZHtX4ePf^Xe zOcUou9^9>`9~_iv@&1FGRrQR(jF7#!D3!J|4@Rq^iKIE5k>d}8l%TW7ccBz|$_jyv zDp4ISR|a*Fk^2{otaogeV>tJ!EHMUTf!$!QdkrJd-^3k8N1Qca4RQr{36-D$tPCi?y5S%sI$hBrrCR|I? zaI<=N(7c0ZMLY1h9ULQRgUm-u*)p(}M8Q@!46Fy~+!k{J`S`%+LP3YONdQ=ZowyXR z)8Yf`z>;=W1}^8Q8zPSn%C?{LMhJ<42IRj8!6}LEi1l5F`&u~5Vd133ZTH&-{JA@2h6vj}S z8NNh@!-X+C7)A_7km0Ms82T{77}Ty-NMkpLIglkTmiBK}xhv_Gm6UEAFC~sA8G+*<<7*@E4H9wOHUcN` zihK$R8={3UTGBQUuIq^sx2x-}!syP|sMCi~!5l;B6k*c~6_|_L{uA*3abQRYKlU2# z*h_G;aFr9D{etorTC;>V^m^zQZ!j;bCm12`d*m(mFO|u}XAU73v8=l=_asTezhv7{ zFrbY{e_AEOA9x%eto{M>6RB`w_%VFMSjkGwHe3a>8bY_?7QB=Xq@JQWuP|RNTJeNu zwH0`@XT*8~{>oI1J? z8~nriGy1?(y({Tc(HUj>M8_5mIWBpbd?*GTQ<(PwC7X6)a23PknQ^4kxGJon*Cs#QSY? zwXc=CnvrDW;^3fRk`Vz>jf97%+6g&lXoS!jGdvIN$?M7RJhT{1erI{{^)rsvbMDdF z+H@Ra3dH_Wu3`C$Gc3>3c?phzQhHqe!sGJabgz||5l*A(0*@+;)1bOA;+(NFALvVl zDhKmPgq@h)8wSf{L4$=V%l$QYurR>h@tYhWzesQWO?gM8;iopRGhF1M@QZeaf2HW( z+}?VDo#8j_48JR9K;6+7X3b*VhiTn@lim26yBjYCcjHCfjo63vq5R9b&D@9QgZl6n z-G`TCA6`at|El`!4{3KVy@xZ8WVN*EIifap(DQJ3>u)@r6t<>i!~bw*t$wq+2Pn(% z=iQEETq~Q;-6r6vNDqE={4P?G5!N!RB>zFM1a{FulHG;P(8UgV_OQKO@Y%yyt~mSN@i6i&-dMOa*>ba|Ag`}U>!N8= zMXBPlNK$&LRBPFIy)MZC!*8AzNRaC`M9pZUPp}#eqxe!h)|EAwb$Zet-xQF`l7i5+kwB? zr`+e|vEW-t!Ox*}ApiTv@jnCd7m)vTc(Au4{6z5cKIYHa^1sSeowG9x)mC^?sg*AKvLmuCvx?$l}<)(&mu*x>ubi5tLU1M z9x8I(Z7a=KOLydQl+3Dhv&eN_^)PZ3SvM8Ax@j>%k;{P#dxr5{`RumKce;nhF8n6% zLh_wn1!LD&)W!FO#IF0u3ilT&cJ*Q_JV<)pE3GgYJLv?;evl3EU~t6fRe0>einEta za$=WDlbgn_>ub`ZXqvcUm$pbU#x7Fp>LeYzbZ&vzCG+Tq)bJ!Lr!B^^-qZ^Id!G}_ z9&lorlgF@Za}i=$FB!}FIL(Gw_N0tuePk@_6YPh*3X5gE-Lb5f76-BHUmeRF*bZDR z7|T+?*8;(@>|XN6YmPtSr#oLEf9%V#Yyicww2@X~qXg=xerWEa5zg8b0eaITZxGq0 zAN}oLB>(KoUNM*ye@J@8Q|J|qsj|WB6@!DlqHiJoSw(6V`HcR7Dm);`x~xv}R#fo(AO**_A_ryRvU#U8xOb^aVXO!m6zEEe5KG9pOs(}l|Yn!G$qMJ0OmilP$k{jXP# zPuAmO8T3N0uBSqw^^6RzC+8X-FIadxx9}<~sv@%q6~oL1b@XLcG2lyVmQsl70V|?N za(}?nEPv5>w;*p=(Rindf;!=S>74UuQh%)fI^{>c3FTt#tS!hE78_P0M#}Y*+*E+z z@>b-J^^-+YD`&5LMo&4~mz^mm=Q!j%!dXV{$lz#5zZ*#}CgSf#HstvNGvRro zXfO}M=n-xNp27Lzej^uA{L#o!!QpTyv2i#IXS`wGEA#>e{T$y=Ei5+D6)+sQkavc+ z!=T-72E~hEPP}jqPe!8HlxV#;n#N;7R?qABtT*_yah|$?$ z-Z-0{9z??Ol9aqx1)ocDrN}U9Eg(^0Y4;jobfC=gA0_!$h%Yr@?*4_)Krsai}P32iUc9Vs*SfUtZAnykdQ$@aAN=Rm1jCzzYZ7?}69K+6l~w z)mQTg{iA)=2QvE52Qsqo0~uh5@XGm^6PSWGVWC2gO=tFeMzw^0myGAh3HEi)s2(RH zjYs3uy4gNi-_+ZC(mZb#{7~0ZXAtcF+RjF}tvx-b7pP^s;EDH<4U|c6yFZ zM(z`KQFeOQ*Nk_1Mc0hVew$hBX%&P0`^jwCke6yY2b=AY2UXgXvKklZ*1nu-3 zxJYMI`F0`uyrtwblWo1v8v_3?>wVr+cF@9_((ZlVQ)H8;gJ+WKtg9!pO{S98PfD9i zbIz=$vRS4EPb8D=Lic^7*tu!WzR#t}P4|7**Q9mPG;!_wv_%qe-$!aSdR9-uI=A4N z6|UU!rjXYB7kTAA?-^$);N&qZ+gOBs9<>sJ_B5xNFfBeS_j%LU>&HzC_Cji8=;i=* z(EGf}S{y9(Ornk4c@DK)(*Z`iL3VN4fVYKoXy`+3ceTe z9M9+Odm-z2;x2eE#1t5SUNclVm?fU4xteZ?^n%HGJWssOk%w>ysE0S~X3B{dGg2EF zxii(oI1;xRQ80;q1ImVx$~l=>Vg^s>&+%MYLlu@qX|CMNs=_=tQ_q8M@;s>Sg}m^B zb1%dxj?>#r_w+WyHNDm0Sx`(Z0!d&1Ul`pGS`Qf*j@3oo^J*<54~@ zcmT{U7=~egK9@}Y68(J{1MbnV8_WQSH>w?HfFf6|J~1;}iwXL~j04}`8-*_v7WbEt zZRgw9Ip13t66Y6E%U>x{oS)AvUrf3!kS%}CIp15%jb9ubUFR1b=dt4Kucte4-lfS+ zBB9eFj<>ZEYR0in7@}9G5dAgd%O$>C z<2<^TYE@u#M`+VJupNkGbIE6BYKiCH5lOrkEhTmxSu9z@eYJrsu~zogOzf-INv93mR~v#y@S4J72{oYAi#nDt z!pDc}Nh#eVJW@;S*(z3^{o(J($ALlS!hif-KUhJKXS@IB@YhBt@3jz~%teN>AlrxA zA9#&MbBrxN3suaP!#dX1r@Ul=SYO^o#{@njFbhqvgoI)SeimvY+2H3O8~6gnZT>72 z;t|L0FIqXsNiW}_NqNhoH-*~Yj{q{jIm zHS9nFs$nx8Az$q(pvJAFMxrf`ppx(+taw-;nbkyZb%;y|#7Q%ddEFEPQ zmUAB+To#toQVx;lUexoN9uT4PS{%ItyhgV_HY!j~2QCM;1LX_O3DqFxK0AZ{Jefbbyz7=Nh5a$kQ#o_0h*WU zvGaC8I<*F5;6>gxn-=KEo9HTpd3;K}iwuN+YkUB!SG>UIdvmd%>nw?q>MUuM){D=Q zP;uuhiK?Kpq=WJ-302R-KXAPhuTf_@OZp-@=t0fhjxpYm#=ts9YFq4PTkLUcQIBk~ zo4X+#znlSp9SC6C_9|20Mc&(NirvZ-yV(?&m!;V`O{UnZO!0QGDJUt_^H;02UTlkZ zf^4x{+v2da1*)F6N45WWaQpW;?SIeJ{^7d)`?&q@JMFJc?WcllfUHbx%YM~#yvTc( zo4!vqeIGY{zi#?|YC8V4GxkH<_p7$Q8{GDHgWA4E>%?t;FR1PNblXqJwxim4@2j?- z3T}G^TR#n05r>Gy@BH919BZi_WPr9;vhj^OTFygE7DEMpZ=B44EOu_5$@?{fFGoS_ zDV0|l#p8p`;b}uaxhimx+L-|(7gKYi!qPg0jlw7W=tW4J9qGBhv?N?;R<-H5Kdd29 zRmBBiUW)Z4-bErAVX@N&)>)8HUFx94M)Jdiq@SOqCIw3+yJLoHuZu}4r=RafV9V3E`Xp9Z@=C7owy*J-=3{XYxx z{ZF*-Uy#0!rpx<+W8fjY{#=cN%Qz0`U86e%zpLWSst)~gaEE$LC%w2t^gBNpKA+hc zU%-rtK=CzVeDR%`C(sRFobp*Tw@IkBmyYPE4%h>T^#-2N@8C0f)0b*lBqzd~l?v>U z{&E#-b@i7kQLC}P0e(u+UoNs|EByW({_e*eKx=z=wYWlFtN(cK2ghq>8kH*9$V0SZ z`aPK?>8fe168>`48~r3G(Fi}GkSQpqd80!Fwrcbt(YB57$5Ar?k3ew0zsFj=W>)2J zd?^H#v;#&2y}>mFU!H+h6`pP0INP{!w)dv;y*H8X62MlK`O)5h7id~kv^Uz@iIzbm zB)&7fRg)GxE{{0l@~G{c3p)4tkU`()OLX1mOVaoGuJL`ot3|rcXA0Otiw%a74g0v` zHr?kl<+|n>_=>nw141aDLt96)6u5P!uX0EH)pANxVx^P{?!(c%$Bjam&?HKJr< z4J6VYG&sdNeos1Hp>nCIM(+1YKZ@pDNs_80U+`-Q)KX@pqs{l&y7<&TPq);7w946? zoEMF#%HXF;G=66m!H?tety#Nb36f8UY@AEJS>L1+>fL>`*=BFq$nSc6D0zUk6#12 z$xw2^8b6Ycr$yU|jh$%AcT`lnk zZocBVe%6N^>VCQnjYfgYbK0S-7;1f!9H}}@u6Ss!tSA* zw+q}uDIRm3dni8fC9KhX<5a<54~a-M=#0E1RSoL9!JSTDb1EhAh+ z_7e~iZ8`-v;<2tcI*tR#U@Fq$*K? zygx{-O784ZMlPZWwPILC)*QSY-!nBlK^KGY=MPkI7fM!z%o3^bu5wOIe>yd}4N%8z zfMTwavA(6keptb&I&(BWEpOvWwiMC%Y>*nC!?R@$Ay<;uNAH@eA%W5Fztl9iocG z6f)aA4T?$UbxewpF$sr%-ftX-e#h&J zeEknz|E*$DLU2sF>ck}BFKqpG)xPQatu)VUrDBS*e)H0AZf!G^Y%q!GFR*^|@N1;g zdHr^kozUY~G0E@en1mUbxAFQ7F^);LpV*O%!l(E0ECh1#FRju1ff_g*?q!Hm^pFtj zuPYc~dDnO(T;-7vDMtd;^*%Yb7bWdP=e}c?c5am7_9vE}^#zWtFh5VSCW=}*cwJ|G`c1!l6U`;C5u&U5#VLP~7{#m!n zlV#%BVr)Tj`Bk*cE5#Kd%r2j-Tt3L>*LwKB+vizrEQvl(f}M4q(dM(5@%auSZQZjhf)KAZFiiEm)05OrQvBK})Oy+wL%wT(DTIU(fSvcr7@C z$4MkRevBR`iE^A^MrJD>Cy9ETBrtn|9w)`g4e)OR+Nk&gwQ*?F!gXSjbYT>gI@B=6 zArPpIStWEaBNwmLSSkZ!Daub{2}^-j|0KPd6wQr84=Ck~Aub&plSww$RR>pOnBc(Wx z6tWrHkVeW18YuxDDT#WdRFNaaJx-Q;_`iFcL~3z36cYVGYuQNM_Nxhhy4SL3RM#kp z@&~PDcWPhZaS|OgPDm(?lge_OpgZNo^4KVb*D-t@kJoW(oYV-OHg(?Lc~!) zx;Ak%F>)&?jyRYc?vKF5T{%BJ#NP?$4cY*eWWP=(zdqhh6_@{?WKp6n;3g8U>| z`$@wyyem%;1O%1`PC`$zNqNG&icaflqT#cjf=FtFhzS9 zW4jF{8!QqCUSBML{}pHj85t)@F)mLowT_JeUV~U_rdu3q z#3IWXoMN#_Qta{is!bq(8(ki9IL3Mp$n!3`=`?i z%&g(|&q~4mS;_66Z|go}|EwJ3pB1%#Hjw^_-JBO-pRA78)%dz9URP26**w@k(;fe; zA966-Qm_iCdKC zMoB!($iyK8p`na?SiPx3=KE^t>h4pCs!)K2}wpT2(5F zURhTwnyeT*YAv}o(k!z#`eQt66Hm>R%_ncYK+|q(_SSmZTU!>kCmZ46|89Rx*YeOM z>$zRBX0S_AQr}bAqx+S8vR05!rfZ+PP5LBueO?CpVI91#t^BZEupicU{IG$)u=%vU z|0eTkCytUGi!h&h#aOV%UPH+R6Wr?8^XZQq8}DSltk3S#Q2S*w>6e(18P0y$O#5YH zW=E3OgpAzS?QM_R@FJCGu`%-))4~4VCY9i{W3NxXmwrTY@gG_Z_!e&D@sMoVNa;?@hKdb6XMK z&aZym!FkBM2TDxOc>uR%J>Amf=iTJ5&en_Z;74!5vzB8De`Yq{6C@`?J>Td)XU(t+ ze7ENo`#Rt4F~w^@-!)XZ2>Lo}xO`T<4-Ay2c;ShehCdg-{g~AUdLXZ^&7bSRjMNqo z+-&?|9XeSrZqiSE(EW0_#^3v(Z|3CGNB7R;8~IpHJ+e;1SpqEt-e8R}K-%g9J`HUC zfR9=~&Y$nBAD!~(Pb5b>P4InuOipQr&#b5C3`6Vp3F=#uhL+2~5BcRILF8vGfxbt! zLL92Z$KB;~AXVrlJmNM#*k0P;i@bh3CNV2f@z4$Ke!&h+NztNfyA~e$(wPvE@PG6z z>9x``YGu@JfQXM?or&LOh>DL2kq`9c7>}sfb!7IyVf}NEqx1)+NZTz$#qM22n<-v_ zk7`%^U-!1C`(2Q(bpX;WhGab`$D<)Uo;w$8Obx>itNrcC5DEO9wJ7*=68=LI#i$t2 z0|doF8u~#rHH0|m6C#4`K~FE@fBc00EJ(xtQ%nHfzi*7fc-NKuO1kuat~;}-MQ-Otj3Wwk#YTGzA_u;reRO0KSSA-QR-sY5=hszp32R7u40{ zhU%)s0(G@&mb$7ZH7G9b_(h0bYw>E#CBCvmw-Q49`66B&UZF~SJ49VQwn>O*uVKIT zg|2-ChR7z-dB5tJsC$^Nr1*5T5I-%(@Aj1jdBcz5)iuy%#6;w)GnQLkR{S+v!o>9jt~PR$c7MQT=wu z8pU^2_CCm4q@;Xkdt~kh+BfEDKN!56vFhUZY9(*p3cji*et;4~)*{xum#QOflaexR zlq&naE_<{ZUsVw!a#_Gg@Jb z$}!eZ*rikinX;0xs;==NWGnj{PTXiOV@^X6s3%0926#1So4UH|h`L%uPk06i!BZ@_EU~Xx56IWBT9dZSM9zNbk#!i8!W`4xfltvUR5#i z-4W{QrEBV{^d)uG`!#jt+pezO@1d?X|E{h+7|mBL#Ko;#M{DurM2@1-;+9=1BE73) z(_eGd)%N8oN)3Hewe4u4x_T`|UCq~5+jZ`Rvg+!XzADj6T^+hdU48SMx-#v6PRdqh1Q>*lRiSDxkS>ULS8 zj+m#T%36K(?i9k-%`&D2Xq}v_p5r>o>1d_(^xgmJB?9SA8D+g#wzK^CHg9PE#&-` zAlmAg?jCv7P)yRJyZ(22O|wFc{g;>UScO=!OkocnQSqhIa+Xrnb3pgjo6`0$r(EC& zTwLT-Q==!Rm%5tYMUA6jJ$W3p5bgEV@Bi{u53xm#t-D2Su+_ht@T%Qmbv1O0x_VGz z_^(qHxhxjA2FLrfz2rNK-8B+BMTp)j5%EgotVV2!JoKbO!X+|xvO=OIa^fk4#7U&> zRD~o->|qVIBWC z>=RZ$;vkXYao`ER%E$;&6FdZYhPB4(n3&#bBtvn3%Ve5lb`>S;X_OuDyX6 zPCV8MMwS7RO~}d7N=^eYno12GtB^*ZEFzP0m7GRm9Bmw8hbwC|5fg+TcqS}kWEJ?r z1S+*=oRafD@iet!^aj<6JH<+>Jznb5P4pAjs8qQzs?`5O?o5SL0t79;XtUC}n&dgB$3->Iw}jj>M#LSPeu9koZsD1Vph5XNRmXN`v6w<+SiAw#TOLg}AV=lzV zw3HD6NTe4_JypWtiNYWt5_&MwU3BwQC7%0VRXmR&0z7LjDxSwZX82@vF& zI8gCCx4!c5)yVnA%A$9Q(gN$Q@-(+ zr!64~hZS-S5N!J)-HLdltqLK3$sk4iKiCgjU*3Q0C5QY(g@P;yEe z&k!>EYX_M|8h%z%At}au;+d>VRWe>7WUnq&**HeX4`8vCmbc0h=wkyWCKagun3?&VUOJptnkAv5Wdl1ZbE)v$~+ClI>Te**!dtw>9fJGZHg_j zF9OC^Ba)B@-*S)!gyh7qre3VGN} zCZ2^m6f)UdM@Z!jj0^{4BQA5r)nUp$&zO6OXT@8Lye#HRBr#95bdh8_F0W+g(}YUB;G1|j`4@}^mv5a08R zj1cS0x)B&RUfHFPjb^(DjF~U)XQVqIcM#9lixkgpKxllu!bo}ZZLFVB;+-X95Uw-@}@3z z$XrNB6|Lc6b15MK&GVJHmXNzN^0m1o0@th4E-@ki*+Iz5uR6&4gd7^-ARiHO`gaHU zl#uFoI>;fi;pFX%EHuA1zagZJMvj@M3Gwe>yY85|Ni& zNEjjSx{zo>j!0yL_{JFkWUa32aql@oHdj>0Wbb)GjLHg`=KYnBT2&PCg7+dJW1lND{fm%wTA!`ne+Ze7qL8<}{}QsRfuMu)qYxtSh6NN}! zt>IT*laL`oAt$^(Lgr`Dq-aijeY^6k_{gxGr6L zv@e#Bi@L4^UmVx2tx?ujf|1e+sq9N6WU{tTnlG7ZK67sE<{FtvcA+5CJCwv)%oYy)(<*Q3bb*q^K0jhyp!C!~a~{deD; zge2+O|MvBaG9gBl9K^^7;j!+CGE<7-GrJNAvj#-@f?`xLYdCwIj!~r~a<{f&c`KWc z7llFs)<{A&X{4q#nvhR)sfN~ALdI$vHn$!L(Wk97j*!mr3c1~Sj7rtkE$v{9kBY*P zVtFKTr}YH2qQUQ~6+Nw|snmW;$+-`Z2#k=Wl$`smDIv8#U_B3|gs3;0k@r0hTC+*c zt-BeS1IS!LdV5u=2d$S0`AH*vt@%8fdk{ zAtS71gw*mVWTdr%N2Q^VG1e+VPH5y|YYo?>XNPgt8-$G3I_F#KLaZ^t+7LAnc(!a; z$V6*%2+u@oDWYsgS3vT~yaMaSEAY?Iz?`-O{Pn9zw>HRLHZ|K9amZ zBh#(-qI@8E`D%sCus)ztQ*l7jHX=JzcV~920w$2iAStIXQ=Lm_?R^4Nr zC#%-op^&}SuOW54YyD1bZ=*}SXI-XJ{UbdR*>C+7;w>LqfAg#tt&oqbD};crZkWIRGgk6u2u3C;^XNKrw+6@Vrqg(2=8x!)NZkNx#HH62qn}zV$c8h5As7=}r z{dP<0(@eA=Zeq+Y!%jZPg^ZQwUE$f^ z?u2}x+g`@LlaN?#!?Jcy()mz8A?56QLU>Z_`$FofU_THY9K$QyeM5Mv*!>Bqq(@x9 z9z;kDja0XXMh8d8G= z#bfr;kh&hTmxt6f*V;_1SG7CS*@#h3vCW5OTNf z(+})3gq+trpV$|u_V&^~bHx$+Padb`6weX+pAh6EY%mb%lcq{q@ZFkbiiLWetNU z_Gz~s`L%n2_5*t4AD)BM!6#pY)jZ%O4@Q4rIHO0s0Qm3Io|bRR^;D z(gw2q9)LUaY1F++&EfL;Z856E^80E+D#4)k8oZ!A!3Z$3~1=#v8-J1P6L`<2^$?QiTS z$1Zghz7PC=I2toy5=9Dc6H5fPVMcQKbGv#H9wr%*){*qNocRG z`Rk~?8DayqqicT33>=4D^G{B}c+xe01od0j{QIb%y5@gI{nRzT#Z(;MUGq;t{!379 zGub^ue)5_%5?4@wu>q4VoJN1(k`a7iz)45O1qfSE~d1DDeYrQ`jC z8t)!4F%xl*c=$V}<0ZX)J=4;?xZf*n72;lddU71_h`)QYzP`gk!~);BE!!eF2RM!K59wW( zn3nNyeur(Gw$C!fc?c;!F^m-BIZ}-0NI(9C=^G}OZ}|bIyNqHw>JU=ypAyi1j6=zw zf6r<{RK)heyc_`9c90M?fa2ZWI)iG9M_>(GALxf5xA~w9@gB%)KFEn#?|jydH}SX;-vtSF~(bv}_krv`chI`|bq!(=(ak{Ermpf2277BW)PN z>0AHBG_Ol~4dQi5FYv1i;7@%Abz|=gZ>0E60Mg-iGsW?S zw4+SpQ~XG4%QU_(fb{d8Oy|q=XEKd%79iay)A&9B(mJyIcA39H=HnX%NcYP0F`3>Y z)A+Ul(pXs@*PkR;rg2@2w7g8?`WWd_nZ|W0(xx(vZ?z%4q~tGPdcVwXwvB0?Oye7G zNHHEE#kfLx&Oz!C{cq)U)n|<{9qd=x!1vE7rZphWAsx^V)3wD~@T)OEe}MJLgh8>Q zFYwKDmB)4b+(EpqNBW?oU5Q%ag|*0MiMMAmodod;>BR$_K0c1=8^Q9N6Yli zQ%onz^emF!IlnZFzgJ;geDoE}*Dx+{KNRQdoImqB9v_P(T`%eMwM-v{b}t1zA1KfI z{*i(-Mc@+!A}K|j2=~x<84GD&k{S=N?uUA7B&Ud2n9q7jx-mIJ7{6nFZLt{E#mhj> zm;HHM;rh5!x!R%$%-350M~ZTKgTL&AdNKeA%CnG(2nWPEtw{?V!Eac)7{`#p8)-|3Da+yF^y}B`QT5zQLi5P-6b9H0Nd-? z`gAdHFTwN4uW{d*^*7#E(E9 zJj(q(Y9Fs#T3uoK%*R6f0)BmUHm7fq`yc=R(2l?d^mpjT46yg+loSyS>%xCs;}7Gv ze=w}Kpx=;o{fB9lE=;>`LmE6^MFAc;lBorLhxC?ioPN7H(;<>}k#vmBe8)O-`mL@^ z@9xC3kEE$F%vWF152BgAFp={&%XIc&PLG%P_bZXs6MvGuD$*M|alVS;o!-3uIJ=eC zb32yt{KD(l6fwc@P}PXm{|xbeC9V%)zh9SWbakXDVmFNg*yqFipI0?S zEO`&&UDa4I@-XUATTF*}s(G~(F?U${z3gS1olHMC_fSS>jGcLM!XNj z^?h^1JFwh&Et&Fq%p+ctd`o10O_19f_);`!>v%^fTxK_4_1! z5B4p+fWFz7_nCED;C=|&-yHWp!Sm7sgL(c(it84nO&{kp&T~j#ieP+BbxzN?hv}1R zk(y%q-E!Z557PznnO+`>?KH&~gK*zril!r&zt?!qA6lR3(w^LoScvxzf!>b*%>sJ- z2-8+Fy$tBXKvM>@T`$P_c9v}C)3V)5BpuZT?dlQ58?pRLFwQ4{opWTrbH5#aUbsyyPD(v9_%Ci^;C1**Ly_w=6sHo3*+Gg$bDJT{*9PUZiM5lpx=*? z<=Forp5<`AL%jHHa7A$+%p3mztw!fUUXclDF~lR%#(gw#>6Cszf{$-`;`vlsKfeI0!T_Bvu?gFGL2^GYsal%pp#E9oicAH(=im(!On(R%yrn_`i)D zuQ*Osp|_`+LHVh2KU@j)Zw2Y@ur6%}^fI)+m_{@;@-WG|5*#B(YG=ExdqFqD&;SBA z-p@C@UB>-(OmTb-1HR#HIe)iI&z5$&qaEwj7UVn(c!!RxZ!EOqQd4MmTdpU)1M{uC zjn{#HWNMDd~1eZz)64gcru|i(ofCuk~nqqJ8JN?72(E8T7N) zhWt1GnkM~gS|R@RJJ6Lw*w5+@Vn13xg#Bl|^d~$wLcc?*{80H-s2{rh3-#;)^|ZP4$6=l9o!@H~zb z&(o0N`5IE(-y_BOA1TiNNb!6PX^U`7^Z7$Z?a#sTUj)8y?`JCRMVcb|LA4R4 zZ^-X-3({cxn#8X`xfZa__YU>weHN!p(Y&4z(L>dK4dPuS-Y=;qaQ#`Maf&0~IzmW#pz2i{sH>B8aNb$T0DehO0;<+kP>~Eyl|47jvkYfK+ zxw%a7JQXRPnbUonLF_`Z_U zjz51yd-ur4`_oAAoDu0`xGo?aK+-Vo&U@5tkG1&o89klu9%r|ULmI=Lm&OgT@T zgmKav?ECW~_Nz}}Uoa5Lb)tPuuw8SYp7gJo#z}hOG*f#4(@RI0{xhHHw=zAs6Vs_{ zkwP45!*nN%&#^#Hc3}VgThi$e55^Bwv>xqCCJznOyL0|ya-V#v57Jms@&c{{I_JOC zm+{zs?BB0~eWswl(R!hCe*2$TP6mvN7eVfWKe^ADJLmt|hs(!3$mO@e`gb1Gci}74%&O_Phe?`PCq|9mKJ9kX`}nlO2%$<8w@Bh=zoB&i`1}^Nys? z^kUjko*T53^n|SU`B_}=pVAKHnsNPmXnn)|^)}df5X7gwKwG~ih|X!q^f^hVNP4L} z)8+M%)~2te>>tW;?PJjQ?=5_;S`+4*&jD}Q4AY(SCr{vWsr&>?!#FR+^s6#Vmz6`x z_Z5x|<$38i$cxy@@;;aQ>2+YIGl16~EyOvXdmw)N26TYWL+$!0lIieCSU>D{z@PsB zdQUT+4^P7Qx-yihHH`0P|1p&BXa4~>&U)bO#`JB1fFg|B4Hq0X?-of%l z%Xx2WQ?v)K%Su50(c77#{~<*?{2|9-$zeV6A6k!cIewgx@#l<;KWAiroRM(^X|IM% zG0vQkapjDRH%RfjIY_5<=k)R(On1rrm_bZ2ej)vPjVwQd=`~sJJj+Av$Nnq>dSe{@ zL&hVdyuZotoPqwTFf7B)k#nK`|mySmyTwN@f~RmiDN$?Z6MRwA4u`O1k%d+OcP~3&J#%S{sqz>>mjwo$kBWb zym%AD)nS&{dIa|emWTzvyASO8YcW1Q%Z(GF&#;^G7sfZZ5I)!{iILagA6G=VH{x5H zkN5El@_S#v`!8JXiD5;P@9JxU6m#qOf3@%R z?CO-C7t8ezSjhHTnCu>BEbl2PuQ2-*O`n40RDY`S+^?26P3Lu7{ziVhmY%aJy1k3S z-}Acsme{ut@8esd@1wkax>@;9dnmgODZ{i}IbL4`k3+U|Xuoe9rtDHs{@et|UZMK@ z|6Q(N`t9u$D%UQV?e%CG$G@)ckD+nHBMv3I{qpAh78}cY-l*L5;%ZUk z-zfh6SN@IH^*hJ@jglRI+Zhu7p1V#QE{fd$B5&Uf#>X?s9DfRzSNJ?$n4DB8r%oAO z2j57)Pm5^x(E5*FhcC3fXNt&oxrlt;tfKK1DI|_ySVwvE?~UQm4fSr z>&>%$2RY>ni`PXdw+6~pf_8;H9z3rWwfy1!MXR@PevmiF@#CA<_kZUL?iZy`(c4?p zb}ISUF9WYLKVOgky@db9Up4E$@u%H@U$s~H)BmO2?Gpc+|JKg>@Acq^;QmYhy}q(A ze@&t1sXM~HbjXKzew-pY9E5!x*r|nl-g=?jkG~}E`@VcTpAWag=T5Wgi8R;`w#-Tp z`(S_A7U;9lOz%r#I?#aqBG7jLzZd8Xz=vc7?;G35=g*MVkZIg6B5fekxL-t?DATw< zY$Km*Ya^elYcr^DyLBu=Kf2eM$e&Kn!Fz-+mY+8taD(-TyPkt`{io!W-Oh4uR_@RS z-WOIG<&H;|cvkM;J}k!NzF6pv8*09~nOvv*&DOO_k6?Rv#D-$d_;l76-2b`Iuk(CD zrspsmKf>qM zCT8`>e|Rp_iG!JDy@J#dZ_UBykWxg`F5ur?SkL)M38D$;`Am`}o}uTeSiermoZgts z<8xaGZj}s9HwsBV2~mRK~SVEr{p1*bbe`sptVmLK853v0*H z0_E5)pOs1w-+*2AmE!c%(7)4Q96u}j_tvrrqL(Q|t+JpW$ej!Jo!3){1wboaWB*O3 z``F6vmT1+J>DW>DJOIl{?3y61LR`4o#UrN6bJRN|&1%B&isvcjUkrM5i4kHM`WsPa zUcFxY%m0z{ThQ~Vmayo#aEPDue6uB<`kmwBFI(ujaAzO4^TzuJC11%Mm%;1Zo5dMb z&uwyFuj&ugQ|S?`uSXn=X(!?jNb#)u4swM ztA!}(qKu~q^K&7_06pUMP``R9&HXW}VuJV*`r*ln70D0qIjwm;P%l$F4Suj5`e*F{ zd@jZD1EySl3-n_=_|;CJlVJXMA818eh|i&1Mzn|YdSNK*y9f4@C$hL5Xs4z_gU3J4 zBR{}+FSd_q_3cb=>4MY}JNAR$R<%SzzT2-XQCix=`oU?}PoPJqVys8CA)K%HE7EgY z4t;kW1?Z)-~3H7$dFKq(t9L@9uj5Gi61d$TMY5Xk` zv{wbdlZRVkfb9{_LBA{y_lQphIrZVU%6^CR6rgDTe)(*Fv|}YGS8F?tLreTniqlGt zqAO&7CHyK#Zq3#Be5j^D_oJ!}=ks!;=m*t6-lx)DIIpKe+AHa*?m}b?=eTia35Y|P z94~I8e6~YlXm5RJXLFz*CNbRte$gIi7W7Nc;f^2YlYeo!e#6;rgCT!VLzdg_6y6_a ze!Nf2&p)S#y$$icypqG^M-6BDJ_7Vo3_jOni5I&&@n<67YalK@E%kh^K?415Onw7S zzuSQ0q)H!dz;RNge}r@sualky@-{=%U7hOKfDHyj}>~gQ8c)nN(cD_W`8kKGAM4#U+>uk1`uEY%>21<|`%6u4yubN-c)@lk{R`9k z+70x+H5TRFxF5qtgqHV+vrrD7KRcc5-iKEd&FDS4ilUmF@7;3ZTyjGDy=E->L$DrY zM)0{*)e(FyRU7Cpqs{SANFfN7ijf&;>dDZ&G&5!X+>8;{> zHA#z7-res1LAn*#w}qs%j{!UFnZb5=YleKjv(Rz!-{f{1;m8S<@0Q#1y8Xm*dXET| z@5D#d-r4fLKnHmr>&f!+xr2~;H&+O5*MDhGze4P!#`B-a1?@F>gxm*?;Q4IA;Qv-% z{s>2YXubE!^XO@13f4RE27X^yJyU^y^A(OK>#qFY`+Y_s^8UZ@rx!->yo7v@CI7$a z$I$XD_hrDFl;QXmY)2>u>-tw9|C5$NtblamiR_nZ9f$98t_6I|dd|o57ommDmKduy_N(Dow$F0V%N}DPj)flYzkm;l=FXMEl z@|d3FFL|8#?~>^n$ML75OwpUuNo)7xw@SQXpetPh(qmoeV!|gL58{Virj++6Sbc?I ziRWZ`Vg~YCVy;YQ_QHHyERyLKy)fSvD`fiT6`1cA>ty=M3i`^d*e=ue35WEd;i>4PduNvs(XMp=?6RVaD?KE;oJez}M`V{5ja=!`*(su(E8Vzt z1<})$&dshU2Ds8~T2~U|Dg8X9^Rp|{(-^RR5;K2-*+09QIOXE+&^ldQbMZf)T~nk~ zV*ZC^vdi8Vsj;@zIE9R z#dog!ZP|^*&#wHpvzrJ{WhZ}sc2iNZvXlQwb~6!h<#(#vLez1kk7VB_8oScpWVaH1 zUFkE~ZAAI1obG=f(``j{SNdFbJ8_FE{d;zM@qjCRCHoFB)s?n#I*S)w>FAuUV!bP! zl+#1(a-}Qe^b{wnvVA+fC}5>_uV@+I{4tQ9ne%|S!0UVl#5foKfSkc%rYoJDGgPc}rN`xDiNmh+q?~M#S&h?oL3(=5 zDACfDo}DvBte5FEJ%m`0^N85tN-xdH74NyyYjX0$MVa0S=`A_=;)*N1E9Y_HukNJZ z%b6hBQ2M!~jWFIn$(bbh-#*_XFkc*UrAI*eM9xz>eeGW%c2=D#UZV2*!W!O!@oAcv zFVmYxbNUrZtN1caETi-!e_M*j)5IGx-I(IS(ERn|f{^-Z)V>YZu;>@`~04FR&IA@-kH72EIQGM&n7+5vyJ#{(zhXh{5iz^|LlR~ z+bt#J(~LR93*Dbu@|r`!&=njA(Y)r8W#}KNOH*(D&;I6-U7RJadF1$iK5s6$z`3H= zeDcn4BsrGO^8EtRr4hKq8akTrT0l-Wg6r{25J(-bJaPkFj+SrWwUEqf40aw&XM0|Y zN!KQPeOg9_G=cMl{JV^dLPP#tMkb;m|1Kxf(U5&TU_$KTHG&wBD1y?Z-* z+w*#2Z3cd7&+5kp(gOX_p4E>Hqzk&TI~yNuBu?mt?yNp+Bra$eKWriaXc#|iB5`OK zKWrvz(J+44Om?ARe6of7g@*CT7V^9qUq82!cbrR8o0~Hq76`3}g4}b)I;X?85T3V`+WyK1K@B?b*B4sf*BdarAz8 z|3U7fn^2dhmRo^mQdjXlPORvK)HSK=p|_{7`gMXdL!U}9-oZiIqQB3i^~d`p>49!W z-Gn-#6`a3iDk1jXr^rn755a^?B&SFk+TMe;|5IcI`cwvM52wguw4Tn6e~Juf4f`KV zXJsAf{@l^-)ZM8kw}$(ZN9Q*`d!HsbhQH>gGo-LJ+^;ujtbaU1qS}Dv^|XKRK1*8L zgO6l^;oo7UtC9cCk{vKK?EE%R=@fE{qug#**QD+-t#(j z@AH11XI<$R$=v9ZB#TRhlh-jq?{B+Whm)v4`&WDbbq&6!8pHm8*VdO^K)a)cg}LFJ zVZA8J7xptNaMe4e@aIoub%U|LNU-Wb#21Eb$TD8B49$0HJ{a2=Yh4r^++yeSW}Za4 z!@tw$In8naeC7~5hq$2OkP>7JS0mW*fDMlk)KN<(l7jg$KJ@h+7KBF`uUd>Oc6yV7 zv&8o<&E6h;N7f8FdySp{O9$bP_;B&<4AdtoG_31N3g3@N8~#OCP5w9y55EIgW{4;h z&PEL?-koisFpJ0PIRpPzI?i2P-*V@|=z&uN^92<=@zN&V%|Si=cmkp#x^fac{_ z2QKD}h}`SJqs5TiPq#+DMA&__B`d60n^0DiBlreVh?DG32;MaGh6P5bexS+DI=}G= zmA!ZY5!m8Q-1Er@Oiw~b+{tHF?5`D%DujvMDS{^p_7tjor7^BilKWik=N&-(p^9Qk7NV-4n;%PdhHS`iHU!1!$sxL=oL0LO{ut}rF4 znQ};XX-6K3;Scm(ll$((&W|aw(X3WlLE}l8A$9(xwreLIyDwbhwqui3*`xD!>ZW>{ z3#9owzu193)#OOiN2FMl=ElZAY@W%#{vW=jpyfFyBd(?H*4b4J)oMXmwSOp|H#C6< z^);7EUtWIQcDa!zOh(1d4DC*_)4LPswW}<t5EqiNOc+=Fav9pWxOMo#=trByyrHDdgL1TIwE@82mPY!%cWJwt|$7m z%awC3w~A!Gx~QMt7Yg@b7I=pRAd=JtG4u!^y@DjTqjSCz0&wWP)q-Hvf}K}@St7td zF8~60jgz622eGjyZgEwEaDCqpbbiX|&P`GTaNi~H$oSu<5;M3(Vdo27m>YB#)F*w8Z-8{>17)Hs$HA=FGgLsvm$#sW0 zmiG487=VdYnS#vh6aT}%V`FFrHm1US_Y`h05KqAQqTCnl ztm<;I$HBL+xX2!ZZb$!c-9c(yD;)davqTx!Kjpl;0%SM4jn#R%|E}G0kh=K$LS5%P zks~P&ZDd}gN*NGxS}kw>hw(9xUCHM+ul^IVni{G^+gj~^xbwzt@WtXWkC=S^>`fe` z^4~LuX0!YcKfH?}d31b;|A)0#8Htlu^8fpXkuB>OnTxYHbz9lv1GeZFt~+R9I*su$ zq~Z0x!hF~ni*x=z+@>I0oL5bQtZFHbJqghwt7uY&C-LmYV}7O>60CfT(i-{sk4uci z_EPD~|8O-jh7_L3lJGx_rQAtdEe9hJ8{m+(R)Y$5ro{*(5wQ$wxej6V2{-~nWP*Lt z9XOA4I30CNH>2DsmP04`ieWzX*C-Ux6%t_U6b^Hszfh1s_e-hG^@qL#eK4A2gp{(1 z0YpOzK4o5iFe;@d|GwH#WkgE-p33018uH!`MxvaGT_vcY_Nq$b&3$U3V-%08T=$WB z?6`f+_V185b-@c~|0eRCHOUJbjnfW6OV@{2Azz?~XsC$#)i&xAD`ddh{R=JAZN2>H9v_waokT??Q9IbbK>W3g#`z)k_JXh}A=-KXAJmCn$Z?4OzE= z4x^T2Qav@+F@MMc%%TDpgX%`>1<-6@#W`O<0(DPu=ClW6Ly4G&V$`L+t5y;j=5z`> zar&0H>8^-|QeOn_O?L=b!HMhEO>@UPW|qE6SdI7w1LUE`&>10Lc4tM| zBy?l*M$|9$!R~ix8VPriu0C?^(9nvh(ggL9igLdn>!D7RHz*f?o~T)+~m>Tq5McILKWrnq!7lYhv^fU>T> zCO39SST8?hVf>dl7(49PDqsD>hzH)(dn!S$c#{Tba_OFp8YJ1{r=zB@NJ;tg?$bla zR*aDf?Rw#EJt|xStO=lXSVXgUN4@s(azuzQFh%dL;RYle#JO|(m#%k=9YQdvEbP}7 z(K#chFx`*@#KKi&aRx{zRXcxk)RW_~eHJOT(m(bnskA({nsyDXt_l0XWRBlXN0sBcWqMg=U zuZLtAllkd`$Az($M5y@B`oj<^3ql-AbZ!8zjU=_Qs|?=(9>{u;XE=_ZMUl%`K2syK zO_z+woa)!w=6RaP=IUp>hs;w>1Q7l0v7iS2gs;ah4mXs?$vI#^=jpw87|ZTR-v-|+ zIJppfx$|K{4(QwARifvkId7&AxJrvk+c(ZRzN(2m^C6_g;l}S@_dzl)_dleR@e}h}>RfXX$9voqT(1nRjqth+ zxVP@t{jsRT;ZsXLSU|yble0eL<_4azVjakZD#CT6(1L@lEQWHG@%*i|WZK)HRF(~C ze&?2=5Y~+hEs}_k>PR#(NBXaZn{f{F7FpUxDlfc#Hz*ua78)1CBVQNgC<(qhC8; z=J|$o6MAG#yVcI^eY-?F>hCa?z}F*egA*j576g8*f_#Jt`*sPwBRfFglV%BB=f>U3 zJ+|2ZTrj6Zd_JU-qL+Lh$f2RUaA;T{hS4S^t?P)R5H!}m(7NJ1Au`>ay*j$LR?saZ zYT=68^+^;-QYLsc5&5*XL4wy0Xq2$VkVGVwPD(=Ib6( zjlJj#W>zJ?qh?Zf537w09hc-)uq3;*$?)c2+BGgA?~V28%YE-Oxm?ixFX+#0Jv)av z02n!g06XVJXg2za?+wlxPU&Y1>+2_%@5Z;<~)9}wZ%g%FC;R){pyu?pOzMFwXYUo(Gq`HStMs{9OCiRPu}mh zwt&7V{y}wu4(0fK*6kjC|zxMM+ zj`>0oO!Stu&0ud0^)Sbo?~%tP|K3F#f`eN1c^r1{HFd$Vs5Nf(5`Aw_h363)DZV!{ zyZ3u>fv~w9gNPN zs*)sY`}~ls_+&<9ap?N*n<38|tewOTZl1@^c_&Ih2gp(KAN-%Lij02}qr|J!(%V{( zi^TLqaG__SaBt3&{0&xxDEo&sZY$Ef*DYJ_iXA80?7}Hh;IO2HW20>xNfycd-qL&M z^^thO6OVdy(XHed-e5nB`SYG?+%}PP;NvT*IM}js*3%PMi=^#7>+K2z6K^N%k&P=Y|PVBKhQowLeuf!ETx(~RK%(a1HUXRiT6B>qAzv|Z_S7%r8T$~5Bd$`BE z$eZgtXKG8FIa2`M`kRB8Nn981JF{b-vph*qk;JF>zSkxoL!pu&>??C&7=Gy6kaKGc zOTI%I@B(E*IC>>&$>}doLlN()n&;N9u@=GQLCiObA7@9uPmxXXH_j8s`I3~3K5qL# zxm;5u!IB5AsVja^_OCi4O@6+PAG75-Y1}7RM%6z^>ThNXTNTreI`>~UQFIyqR@4wx zFY@(sL%jdHvWCqD#%gVtA~FMAoY3HyB>}C3SU!`iZGAEpZ1Oy^ijX3?RTON~VPh0p zh6>86xMKFfPhpm+{2qG&O^3r-w?SC!ABESgDbF2gev{koBP+xos>A6WW|4K9KU$$i z>}CJ$>ypv3Uo(sTM4dLgCm{ok7|ZA{KCES?G_Q4w5=aH9HzH%u)>A1dVVC;x&!A6^~~X_nD9fUnSV{*3Nhvi#3$i2y+J#idUvntMlg%B-&^qq{{k~TDzwO zgz0{1dc}IbN7T^_0t&GAId>()eLzD9z%={~)csPvo4Fz4yhCq@xvV8G{C4C_hpkZZ__ z5h(0k3=SIci;a65e^NYw|8WS(M;xng=Ypov7V_3`S`lTO+_}P2X*T1BkRrs5M!=}l z?c^L-MA<6KIa7|@oe8X2@*DcxI@F|^=o8eJE4wi!g!_m1dGVE}R#B4Ks3nVqXlUl} z(i2e<)sm;Mzp2Q^m6m{eN>CX$!n4D)Sn(A-_wY=GFCpU>OWXMEl-pqsMy$1aQ&aZb z?!ga62b)vgj{zr1;=*4WH^Z)Wyv_Bo`_Q==`R6cU26>A{gmzy#XB(5(G$GmD9L?HC zXy|-?rRllccImzlPJFK8x((`Z7PGux{37P|z?zmPblz?k%ybHyOE(Pqyv_*Vut&^4 zvxc3 z$5r(*8O%gveDNA(SCIU2Sz(sWMsj3(Nf2Dzkmw)#eR@K3RE#+Lv__uH+hQQ&* zEcaAjA(?UM4zX)q1{^ONhZQ1wnJ8mEeBYn&8;y%pD%QwOqxqBi2fV`4Vt(B_axJtM zTBgXItIhjCap}zkZg400nvi+7@k`U&FW}6&2CxUEJlK!xc}^*Ne22yhAgi~AI=wN- zQy<~t?%>4Jyf!YRwu(rOdOOcQX{(id=y+s00e1y#oPkS=@G*sEfhv1ILtQg+%(l%-)rC+B|Rh*(}ZhaP7?cRkO$vT=r;SgYwbbVT>(rWxd~;peau8nO^HN1`^Aj&TO0Nz7%_Lc_VGe#8h?|CaLQ+4pXKM*64;%zOK;ZNJY{VI6wm| zx#RwLDg%*%iQ3(So%gbd{)z79#sA4>8PaXG-Efib<4R7TYm+SYt>%Sj3}PTF_|%4z z{1M@f_@W5rHR%1>YY2%};F~?)=p=KVD`bgRd0+Il!%YO*66BOtfGLYk(n|36c4x(b zI}Ux=6Pk%j$6DIF$mcDHtHAWiQ1{C)8r zW5auHptErXIJV0iQZOXklGySLBHXLm5?AEVU6jvyqxuXlADgbK3j<5C9&5IJZ?$3h zNIB+Qzw`4D)R{JA-zQHdjN&4rd`|=BiA6r1ok^ zuD{zZPc|$C`uV^Y!Da)3;yF~M@Wl0vRjs;TIU@&evj%(4gDv6;u`UWl(Ka|f8`S!^ zEIPU&#e;{G3H-fvwIxDI5h?+2lxmjA*6f=&Qcq-|!EuhBs4on9@7RQM_z3s=RdY_* z*~KH&``NtI6@O~W2Q&W?=kyI?`gNDHaQ*8-8%#Ui5~rx1mARc>rin#4v%ZM$-?FxK+_h%xrfX0p~~rc z#rrQkGoJZn7~1C~r7fgoiqAfYJ-xjd(pcs0$AtdI$!*XY<%gnOy7uZwXO04Aa9R!?6;lCZ=Nw{WTyW4#08VvSdis-2+P z8*p{OO`#o4;|5}s)==+`RKU`lwCszZTW{97B?CHm6-`fNvvsBf6;+w^Khuw`)u~;L z9!<%)0)80QaX-JzFZ;hm;mHbZ`KBocgu$h6*YssK5m4x30)4k$-i0hO)I?$vME&`EQEZ4{auULKF?5 z$p{|@BrsjrJT(t8N!vtJ4wYVrz;M(Zjd{QF<8+@;GodI$cXI-?*OYo;f)M<TB|yZN zB&CZ~kPziQTq5!HR-+Gi3z^_QbJ10)n8JR8m$2kkE4w5~{-WVNY% zTQ-cW{CFl}1l%1zCyYI$%)}w}*+I#>()i`=+z%&y;W90_262^0(AIVm06sMDo86mZv_bDM8X_y%hPr9-KbOJ@h4Fj& zbaww4w0cE?{24I#vPSTkB-MiER6=jHsqmFD)8Vy8rLzqN6H9RdzYzqkCgI0ZY+d|= zBjvAslANG-47HI+EzGP#@)pCWs)OO?x@awMUlA)~S>ayqGDnY78qIf*+R`#}z{gD8 zcc|H7;yN%$hO?Y%1w9V0DlG0IeK|0v>Nm#3bfzW0h~2jy|0~v|I>_g)MhM?MapX6Ieq*sxRF7KZ07tNm=XHI7G*Z#UFnRh6Q~5n0!?XUQ4)r z8_8f?E=QGCGAk1s79z8VV=Ni{ex9c*uKHX7oq&?kVDD6bgKWMmjNm9=8IN6=;DFt? z6%W2CY?@+26`@tz<$4<75&|!c&%wRSBNuy(YlWX#jwKghUd+Mf1>+vS(Zz zE6#YYOAn?!LFmv8-aMuYQw`g?Q*5bw$gZfmV-lL0@@BN)XyD7IFV0op-HtDK%d*SG zA7|}g!k;VHe)C`qD!^Em>y)HKHkmYkO{wb8;+))@N9rU!KrpsQ5(%ni+xL>kW!xZv zUu=4(`TwR7%@*v$B#ioA$H|<~?Pj>rDE^`Snq9i-pHx<7^pWqosTmnk^Q}{{D_8cj^o=K~$G20xo?*mawdIeKRkcWF0LXex-i($!}8|#mH_qykGoW zO#(*wOBmP%tZ${Ny#AU(kAOpSd)~c$Z_Rngst6cPy7!zrkQ!7p8ZTeI85F%CRba>J zYhyY41&A~qWbM9Rj{Jt05!sT>j38U<8Hl8{FQ}q3cS}DD$4pMUTA`b?vW@M6qxY~M z`htzygQ!p$`aj3t)elB{gJI4lpd|THn_riXPK9^QMb}fVPqXda9x<=EP4NT?oEO)$ zGk!3}ST>|(XST%aRm~o%@3wUX&usDJY5mW=L0w@Ibjd_j{s?}S>bUzVKKNZn@pI}= z1`VCRE6j>yWwMK%Cwz-cH@$ihoKt6zUBpz*{gqGw0jk?%6KGe6&+f;mi2HV!%kgOA ztBxHb)Evk{hW-$eGY7Jw#fdQYPlnic^m1^JturEzRIM!tK0+)TH~TFKxz{6)^#92R zY#UT}Cn>%s0YdB>zk`W(Q}y?~`McN8z9=Wm^8S+)6Kc&x6AhN;B#mM?l1ha z$!IOIfG_HXCe*~eFuV@ktqnEK%+uDq{@16-es^QoM=I;u#bbhySF*`x&$ibq2K^c{ z_db;cz`$2df{n}F;^;#z1-|_{akr^X08fzm71D0@T;bD@+B=xH9ya2+=A?5%sqF2S zM$h$4N6?|Gj7Rim9`SOnEPk4wvT}i*MS-QOzVryg}+X2AtIDAvuUvVivyp5={~4VJ)zjceVofD6&I1Z z<^eBSbS^%9U19b;p|`=877fK`1~IJFz(AAZ0*5%F46Op&^lSj+UWojN;h!0hzNV{; zS2AZ|wtjJJWbD{^?^jZZWHvd@?|x{(-tw)@h$)|vk?z%tMyAq@$ge+2CaPCsf`6SW zgncbL2Hzvs0&apZYKa6{}s;FWANAOO1IB{%<)kB$_+xYG*tnGjFl?mo>>p%mRPL5hY>XMz9#jOFX^wN$^IEcAi@l z4-819Z*2efb|?B%A(g(FcI13Wcqx~oC@(d!l|Dy1Tst=Nx7OR7L`?Hq$>(t}uzVcP z&c)}gc%Qq;7Rm#!^r;nwtealb0$7m-)3gP z*fX)6b8%;c8z9V)iUVXH7Rj%ZY<~ML>PcTDyoL3z#<03+p)Z(RsLe8=>>M{hwS025 z0zRbYQ`B^yLA>oCo0ETp*`fht1m~>E=5uAC|Fe>Eq zMo@=JN&C)tK!=>NbIpMN^%mJg!*>eyZONqSBDIoUUfC}vwXM(f^2=BiWujP+=^7<$ z6#kgQeQiCyyH1FLq-0$8=SVyC9B%)vCnff(${JYRVK>vxGBDyt0O_0PcBM#!XpbDt z^*V*^4mW;G&V5cjnsMfxbBz74kSQyM?Y_BQvdVqn1U^(`yKTUY`!`w8>p;%QJN<9T zW5N|;$C;ydrn?>usAwaR^FAz-GC^~SPk^UQal`)w=Wl#@@GV%c*yTHE{TI$Wp162p zi~49(7X2`;(`O+zS7Q%f+Lo***WtDQtL%L4c#a3V?Bl6Qo;uE9PVe06;0$$lcRkPj z?g_vT%YLU>Se#++J1Ere9-}emLMA_IEp+)zQ5o8$mt4#x&5E2xi}du*sM3(m2R~o- z{Y&xsTsk*fB9o2pCwY`_(>tSt?Qjv&Cx_9by1+Y&Xl>Ivsq6#CjWas99`>6u7JC59 zn0Yi^H?w1Nd8wj20@B6 zB`Hwbj>n(K0W+u7z()+*VcT_&=b&z|xdkh<4WM%gOy!?;YZ0Tuu{frD@8@Y~a_^%@ z`267Q>wbz&WtOx}wy59NB!;Wrc;RH~Y;@~Aq?Zoze+*X*-?@Tn2JV5Zv#PSCdYkUc zY0S#5Gi@{d%RFq)=XvstRNfhS?ZQ*iU)x{ast_9oS`2#RlD9XppG=;cR%VV!-fk|K z^WMI_6B}#+TUdr%BAUXs`L`E$3fVHkGvNj8HTI+d0&B#?4vcTa{a)s1KYx#6#!w;W zu*+6>h6gMW?L?Yix}h?k+uGbp)#e})+3{}QDd|c0IIfdh?t3=B`;g%ojQ3@3?21lv z4Y%AJgsEx*OBV1>Z+++Qx(UXbj#6UB40n|0NC3bo-ld@$Bu2JG+6G!=BfZ

    s?x~Ju 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 z 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

    %ZCY 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

    tZ+kXVl z;i~eU2-!JcPUyOxK{O7Te1HG4z3`kkD~~bG$_5^KFQZswLXi-@9&@#;O_Czm3b%v{ z*6?u_Xts@HOY4~_XHGA*;&y!A!RDXcJQ@JYoo}O(mIpuK-}nrE)M@nIY>>REGN6rqJ-tW- zpA&76tWhG2Ih|g0gU|W*1cly-PbBB*@5DMxhXSCYS!g?pu=vEe{*D}NmG%*>vQucA zl4^tFUh=sD&T98i(+ z1>4K{^aN3%1ima7uWDmd6vukdymPtVIV@1^6OY$m3nup8-@LXSgYf&)-)``;f4^J& zd)~V^(ShLCO{B&zLtZhcQZMOYcG%^5yikurkf7qEQVy4Q1Qb7_pGg+sL0WM}cuuTB z7F_3mXCA2xu=L!UEsj*CI8Y1(<(1UEYRAbqnv{rWF&&6um`n6J5KaolJR#&O%VWH! z<$)lA?P-4It3rbLUJks@~)4=Q;YQN_=_c?pD0>Yn@4 zbIMBiIa9(>QQ-V3lmalgXexU|H}PX8373Z5kOXj)Fxl0vCn%UEL#yb#boA{`82l3Vwmgo2s2@ zy!=9OJ>-OUr*Kw%^x!*deavN%JiGD{z3rM+9a(+Wq-s$?@lB#w=4@da#5%K~kW3 z?gG=nD#BSkL~Cqic+gtm(QF+qSKVZQD*K6FZrSZQEuC6LzeQo{4R9Vsm1CdA~nZYZq?q zyH;IP?KFW~15#MMSN*>|!=X1cexCf=w^JbsTZiDu9 zQPE95b<2j0i<_S9Ism$sBU^J1?z*(cTpdQ9Uz@ElWA|F9qegMQIRf|U5$9NUN9-k% zqBJIR+5g=sK&9zRA!R)d{%sB(Fg{I7$tY{Tz*`vK5Oj>fq>9D~OvmSqZ0vAX;aa;$Mto-6yZABxwNKt=Rv zd3IZqvaBc_6Ynim)>tCJHnwg$__c<8P+2Pd+vK;hCM_vub4#q`i<0FwMY7Z4iNZ;E z%w}T9F58k^VfDRZN5USsu_NXxF$d->_|iZBZSIJ{TQnx%N}E4>T31J*iZi|mW=veZ zj>q~MW=v9^C)M{l5ofty>S3FhRR@n@k{Td__Xn4OA;jzRk>iQdvY=E%(f%K$CEl#N zv8C-dCJiSA4sBFeGg;`172+verh=5#dw46wG(CCoZGu%gh4NBK+4XwWbjy%)lODW3 z84R6etRLMrMgKI~>@0+sbUsqBZ%v6>jc)iE%|3V-vi(6^cot+jEFra8268Via=Jy2 z35esWajh--l@n=q?^EnJIt-mrPOBxgx=g>L5zk*d5OsB#@TgHP_brTT-zY0xf6BcO z9(c+FLJT2=g$)ECml)X+W47{eHYogScYTyfR_@r+vQy@U4Ca=Z6sfrpuku^PSIH~w zogVMl(n*G;gky0Zl(#Fwi17pp%_Zk~86p#q@=sQ>?rLLp!ir2HRFtOOiXUm}cl?HJl$~vf#`}_7Z;2 zb4j%!9#`l}4G_-`)SmHFzA81*T9PM3zaf85ak2=r|1M)7v5BJq}Z_LlI-ODQsjS*tuL~+ zIEY)1Ia3xt!AR%4q-RLUajMAvrAtt$*&Vl?ZqF;tN)mL*gyvS2eWT_L(kzLSjrmtc z2`EGnCkUkH4#WXhW0(@CrlHFhYpz)cX(w!9Vhhsn>~%C=@+LcJO4$vWC`_(Pv@rvH zhqlM4@?ovJ)LAz%7JR3(kV9Xd0r6HAE0y8B<2OlqX*;Dpn^j1O%2gZ}-Q+_RIJ|t_yU1T@wxyr_XLlM~zr(CQ)R)yzC#ZJ;!pcnG?YxKHv{E~b=OZO;p=y2PCddf0IY zxm2{V4qLP_?isK3l=Y!e>*n@rPvQ2NxAF7`d!6_6(FDKs)C520@<{f<0jb0EGPPx- zdn~h0V?&WF)kFH_C@WMv@oHZqp6^48PC;!amc5r`*sz85!e_PjjIMMk|R`BU$Ht23=IAPMiwrnv^F4Q5II; z&L9W{T(I}XR6^4d6a&p*8#={!(`S9reUUVlZageto36ynAC$B$UX80`Q-POP@-;8u z%D8A08jWEKEI~9gFD24Gr*Av#-tfK=Up`#^@rL=|738hs_=7vqOxyha%b6wyEN}bM z`@T}C*SQy5_OI}Q`*1d2^N;($zb-Ewrd6dztADrq))R@fbxycGTFCm*GF~ zCP`~+8)tm{_JEZvzyaNG&|9IKsMqlBDv550bNB1mpEm0KBi6&xy%v3-Rh?UQ-_WWf zvOZsn#GH|By~GBkg8C!Nm)>v>t>$K;_9^z#)WPw-Gi5mIZyemEx&wsG^B>*I*_z&P zTBJn$2cF}<;!KHp9--oz?umRn1c753qyLT?;)QotQS)F*HiKpAg|(8Y2>+nYm^%u~ z)Qd|^jPmF*#haySP2&AFI^SW>QKor~Ccw+bQ4Y@<$Jb4y_TU-V81|w!fNwCiHxeGI zCqO4^9g>_ih>Fj-JY~<=glsVR?MpuvfzR2$Xil7q)WFCogiR8;Qfvt#9X%(A+SETR zKE@nipgbD1$7e~CCOw#BegAXfG17HU6h41*xy#ueXJwF0 z^k?fVCgumK%mRcT8*|68S{U@059?*c(ueQvHimm3T9}Vdvd5P|MYa`3;vVD`{fFPD z`%i@xj8xAeLr56!eWT&BfG(jL(8)0OmQ%Rvv1COh8Y{tzzwN4B2vI82!Fr@OYE`Lz(I zO}^bnC`-MR{DDlWIwU`H^VO4E|B`r^O0R)ESD>UOdP4OJJoVZXq&|2|kRSERIS8W9 zL5E&jU*bL?uHJXF)wi*I1G}E*q$5e4W{Ou9QLnLo3}=u6Ue{GeoEHgGdrbQstbX^{ zXMM|x(X4*mUEfo~hZO-&KHiq)r=)eO&vxGXo;O4u2n>LYjpbnfeh}ovmHp}`N+-b` z-$lcbp$Fcv@|wLgoR~81+s<>sBvcE4+^5@odUb}!ciK2u@96H<_-a*~_d3Mx6s9d&$R9zNM zC?n0Q^HV9WH-ae~H0E8p3{KzZS8Y9K@YywR)dWT@oh^WuWWSs<8*LW~|Ls3zYGF`wJM>cku`uOb8}>wEJ%p%KfM4 z*GZ!RYnL2!Fv&dqI{%Ro~3XI9rZPZQP-k?43b;r>q1 zOsJRH{!I^Z-377E!`#Nuc3G4Wc*j|RQ0`xrgqZH@=l^B3lW7UpAGbd1I`e`|B}#jZ$~5<)v+y78s_Tp6=C&41imq((g;$1USL zWh&sBrY_3Eo&Y!Ho<`{-rgNZ^9hFAY!u3(a&W40sHlfIWR(x$4a!Lh@`iQ%&A*AsY zzirr##dWM1vILRWjFbMry8aeZQP&HPZ#H1V3+}1n72Sbu=n-ZT=&jlALvR^XLb)eYnBTB7CSsGX>2o6WE8Se(gV`d^-p9<% z=7@9)jqd)4Ew4Z8Pkl%E^R1p&5xfq1ILz_m$BiS*%qy`Mlc$_Ek<5+`5;=#>#ySz* z_5zaVAvP?(Iv4LE9ffm&#~P|pPG@WWZK6CwI!t^2ci(NpjW8AJL(#VAD*#9z57^#J z8hZ81u`?-65x4DM_w+q9VB+NRHK=+sy#rIba4H!>(%2>6C+Qt@m%INOqj)N=@ag_(w7qPUK&77ge$wOIzF&YoK6>Xr zUKUDwwf^@tVH{R?Z1mQD8t^S%W9&lXtjdd-Ui3K!FFa zJsdpWiG1}j{?}RepNS{MsjtBU)1c>>YO}wubno0-=!b>qhTzz(iMYo_FaFp~IxKo^ z=k=gkfir(loHY%g7oYK(1a_u+BPWqe>@|y9)a+X~EYs~Ml$>`N&%#~x$PqGmw?eb? zp>}jHD%f^=W;&woLZP|b(!Q?B4{1g#_ib+bh84s$P1v>0OSq$;z^A`5Q3tziMn0RR z;`nZN+Zzhm$@A~E01qxXAojDYlE(xg>?>p4_Cgm1`uG`YS3X@tnFw#i%Eh()vLL(( zF0vr9msSsz`(!d&7_MU%g~Sf{FVuE|F7#BjKL@(+Gi52O5P{KTQ9ZgWxJtK0Ck>*J z|M(Br&T{K>oYWb^EA zAM$39!>}}Mj7LgmaMpKJ5zp$Euy)dCUDnO&HzaV{SGz8a=d|gRqYyr=`rx`?Zepm! zg#~hV2DC3t`F;FwInRIPtM`9GD%$v$phWiZ^23Fc7TatSYOyf%9$9M{?kv9Q#*B!} zUfP6wN%om#KJ#-+>Q<<>3gTD=oDcLU`gM|^B-+DdqYiGNw8k2>bjqXJ>x;~8{`X^b zJ6x5hYA6fW)#~~Fs6PVZ0>AK(H>j68&L|nHPVa&2KV28P4!sM*-J>yGxW$d-&E<45 zNW1a@*jtgy(mR}9D@H`vizoM5Aii48yE7>CNxcZ=;g3`3lh(}5f0F^B&y_{5!JRmh zFq3zJyVkq&;`Z-T^agvN`)}hPPN({_0gq@9JKOKNZxJT~YljJik)Uozg*U&R)#+u2 zUeACJt5^LexPT^;72enI+>7Nkra6aRmk;*s^USBo0IG?H>PyivhhEx`lF0}AGtrDp zp^*k_0m1scr$+JxqH$QQmNv`JUtI{;Ma}LUS1>WUYXaG5kpB6FC%grTkm(vzvt9wE zaQwN^W6z2^!=dF&4cGyQr4HcPRnc@41O-iZv2j**_8Jt4faWU*V%lYjfWM*W#NXqN(UKe24=lu|w&0-|{t-beci-;S=U#WsK@*p9FV zoqYAK&w!#16}^tFnUL47yFN$^4cOY=^kg;ptL*zJ)H9O%aP9p@w$&Uty%#U?zjXX* zhE$}mZeP;($*(5@?P90*Hs8+%?K8divikly{KK}Zmn``)9r+XHO<6R@1;RwBG@#a$ z;uAHjcd0(<6VX81z2%eA_?m7_+r65SNv&yu_|vV2!{$V#hUeqUD)xEm|I@9HyA`~D zP-6Y*D`o-srRP0=lRh!G(Dob1Rn_s2?bq}_%lwEd=0aj)hJxb8y!D1Yp{q_TRs#uo zRZ?AeIG-Gg5|9Gb)1b->Yuzj|{@Fv?bTS{QLMP#W@E+s5@uUBL=H8T+-L?7C$J%%_ z5Km46mr3`JLJw=y@9bsRM1W zY$O8VJfM29xaxW>KT+OR#RMW8_SxX(*e$36i7ZkxPTHaaq3zOIb!HW3@D9AqI6pC{ zR}GjrpfL#61UL-62(-#;TY$Gk%^nF8Iz5awmS16^TEzP|iL)L3Bxmq>?WI}7c{hZ! zF1n~HRyO668KUmsh|thzV+)bk-!@~I1JK|D+bCnFk$@#9s6FIS3FU%MOhtkaS8txT zo?=%}SwZ=4SToc8>i@BR;MlBQBgTjXAJThvITWDKu2pQ@G`9Z+FBnqeM~vMO6i_)Q^n>gQ z*1&jBJQ>YKHeFQc@!y}KE=J&TfQSr^_i)O1VhDcED3x15 zt(~^j8;Iw(7PYzGCN-*ve3Rp*7NT`cSUB#Q+`%WVOCkKjzM+I#`6NFRu1GGhG$hDPpdj@1`FnjUGyY4e_wkm@ z$=m_aU{lb|3#UYzL*0B@y}z31VhAhTxqzoDft@bgMtQuYKNlaa9Fyg4Q=lt*mc-(y z!`BOGk8|c_9xig7$T5)8rN_m}i-?Lhd4%eA?I)Z$zD?Uj%MM9Ao|sAOCEAtQM1j(N zz{kZ;*}d3Gsd5CrqNavE$<5EarH0r2$@mtYknhgGL%{_@ zDz^J?_aZCYGs`w@K?B67$cV@sGG&siA_2iWL$XEHn|)9varwAd`L+0X_~u4XjNHsL z-)Hrp4gCCN{?hN2mPt8ZWWprye!%*)(=+`HQ8$pOYbuQAj#|*)PK|>ZKW^b#d~(S4 zSUiAM;Wn^B_x2@4&9jPwqCxE>=39R<*d#=T8-pZ=9L*?Y?lAe*-gNW)zvL|aEe1g!TYqXy6 zD0#I5!n6v9dJv)o<)OC2Uhp{SA$fz4kjJ<^3|0421NpDB8oupwcsi){+;GxAuay>Y z4i%wDsn$)R3Rrjb1{+(44;_JVVE|k`i!B_-jmfKW&9$3{MNBeQShH{Qks(e5{XAIl z0w&mQ+gJ$-WM(wX-*yOg zEW@?Qg{Zn}l3@Cpdd3mp#J!e0`FEJ%r#aZzjNo?k4-dlW3<^4ZkgLeM;C4EmaG+Up z;im`d$kU*9yw8^;+|dh$omjXacdj6{u-8JaJs}tog~h!t18Gdr;iup0sGowbd7&7Q z)XCo_gU0&w&_7Uv&@Sls&0ldT}QQwaRi;2HVKUFFq{?`pDUhJ!zdoc<8bXy(89rVug19#XT za-r>>^1pC>|1RtiXUT4Le#`#w-uMX3n|_hane2I`lQ=hMx|pWU=^P*;*e3 zdI5~4EFV%|(~nblUNJ8xKfwRSkFR6$n^Ax#6+VUw-j)nI>V6|n`{HxsA%TKkK;%rv z1-p~YeIMpQF4RhyF7-bE+sB9gVI?MMN(djwSyWuF zHjf}%o?K7(MT!^Gqe4M@NOk(}ki-Y6W9hx_or12-PpslwQRIcHo zZRbPQk;cWj4X02q$#!z!?3T3O=#oe^FMEtIwrO5lA$q*QC|h3l9a^h#%pjTVICAmp7nA~e!Lp?V zsHZ*5jQh}zb55xQ>+bY9_+3m6?!frT>?aQXeJ_^Ic6|fQW4@(ra{RApA1Jh$W+U7Ppb`TjroIT-2KvA!x(&W~BVOI7i3Ds(giBIK zY}>uSi<7_U%&YSKlvDJ!D(d}-YxdM_8}t(^Y&#bganNV1Lxcj-Q*U0P@cW;a@3q#Y zYRWj?aAXWCCk>qC^rjpbO>OtClFi>gzw-xrc~~~rf6WaK86;_PAz4m?C-^>2;gWDh z*{Ex!X`BDe-n%&54e`@u!Z7wPixy4;J;**+!IE$zN_QQ{<|MSftAUbmCUT)_9s{qU zn2D-*+$}NW>8f}P<^;^0Y%sfoEqZ}D5tSB=#!<@n~t> zsa`wj13duWotVsH2x``^`5_>4JMgd6EF1%z0Ukuib=T*-kq8F;XoD8#1DycIrT(Za zyR~72WP&;)k|i2J2u>wo0I**5Y##v7_Cy^#Io~|x7&oJ{3_q`DngwER`_<U~I&KX8b~?#d z#jOSH4*{gBPAY}P*9m2}{uaLx#y`@!ElJ!GOZprcd(QE7crId3hI?n>CFF0lHz<9! z=pRc@usfJG4vX7HyokKwn$@tKj@YCjtVVB>?x|{!U|04P$JA>G?5a57T$u78dQ-Rh zbt`d57?S5n_gFQZSP}$}bxJLW9p_wU9J}D_w#ha`6tUp$g4|YwNpbb=(?|y_VzKq~ z_g17$v5v8T^>C4*^NMVcejoYFXa$#aK@pvTL*#ejJN@VjbV_lmseI2(2I>&n{C`{* z*eT*9GGCZR3G$xwz;=yh0+NQQ!NC;5CI@pIHzO1_@nzDztsWIyfN{mKt)3*UeBc4z zSDYw)g>(nL;%X@y! z4l=H5*5N{3u$Xl1XWy|->L+A6%=-Q%3Tlas{Gvc{v(rigBCB)EGf9MYEaM!Iq8`e~ZbWpbOVDsMU4TaD%{ZeeBpt`$>}4z8u3(v!R>L*hBcb zk;Enh=l^ATw~ursMwS-fYw!fsTtbs^BQ#r?p)+Ayj9gJzOXVt40Zr&+Ut1Buc&p{2 zgYQxhhkU`PiptM~yv)s1DwYLFc$h=#Vk|e`LRqTTF6&|%C;ABAPTw`x!oHuP){zva z@$}pzcdT8J-o{ia7o`?{v}?i*z|aX+QR?{tW;CM3T-O=^*D`8Xj(;RoOROSMALM74 zATNh46?roygd5>yjZ0Uj`d-#7a0J>bFHz)yg4s&@}fb-~G^17;!BA*6eGk zFhU~k4Xy6(p{OtdC}ya*sxqYLMPL()Z7UDkz(U=i@mZ|n+wb}Lm$!yr$zofT0xgUe zj9iQs9`RT|GXG9xdN1r!e&ZQIijXV*Bq*5}1|YwGMV7b}_DLW`72hH zr&^N`NSa9fkLaVfhN$jxq3X(HSjs+>Su$hGD z8dkflBFD_e&DIJs%%;sQL=G!P%Je!D^_d7YYBqIoBQr4lV_IIv5Tz*w@3zzp;uy*w z6Xtf0&3vxtsmgKZePs!L8L)SI>P5T8o^2=JDo?Bz}e9SM)VLUr39>&?BXRMfW#pVV-6C0cc z$!MO8LbZK8;3gDnxDL*1y3Jz{TzM7HFxo>DjBUr{lWFr<0!M4e-X69!TopY_b0?ys zOsxH-mu*Kg(A<4o=kvAvuO`-2;n=?hoMkL=WzIb?f$2k5P2t2`{Fsoln}F$aRl#t{ zHhW1DD`_7+tkCQ`j3{lbc#QMh{Zt+nSBqv;7a73jp(!fG5gUE=Ox@hdcZhQ$tDD=6 zP|M^5abOsT@Gic;g&sei)^{4cRRptK70HcG7px(}gJRFT1!Y;|fcH@Hgpt-%2GDbz zJ!LszBH8VXY{5qBD&cOzbH=Qkj(OOHQVT!u?>`^h^<3*90UmD(UO1S&->7ubLShqa z+gpE$)hCZ@t4eBGC*2-AC4C0bi~lPXPu}#cWz|)#9YmHJRb5(LBX$DSH!C zWsa-N$O?Z(pYc&K$P?j)nHxau`0(eYsxmf9#thl;rmC`f)OZrUi1n2D!$#Fs1uvx{HvxGrS7J%0KP)vmH}whfbg z6j*m=HhnxCQt~xIxpV!w{Ccs50?@)W`7DtJ4_`hZDYMK;4jw5bYy-8WQfJjpu~`~u zaL3e6k^ZQ4p#=IMwL+o(@MJ6rl$d1k-=*R(JVRs>(kO>w>a=$V1}&*l z2B(XXshDKr@Zx1OrthijrAlLP#Qw>CptFmgSDpqBx)%~+U=4m02|lM&1>kOqzdzhg zSg^x$`PrsMF_vceM3wZv!9f@n34Xr|GZ#hF)_ z==>tuN$fIK8AIQtH|$G~uJCT^SJ~evjlT;6^%AWNh3jbVIHR<;J6XpGup$4x`7oDY3Le^HOJ%sC-y z1p9Z0!crNdf+n{*fw~p_*thh5g9db|m?BneYHsLv$6-)S8h*$M@&*JAhzVEqLDLt6 z4X~6gJ%TQ-0|xAH`{hQVL{fo@KuapuKHeD7(5Xabq6T>-D1bKTdD6^?0k~?&l2yCw zK9iQbieV^iZVN0?U|k;^E1DBUGiw~6DjT)gQ$J7}P`TkA*e^Yga%c!3xL--P--=$P z@?e%s*wIu{7%~3!gTUpSS5=UmAILj!Id~|0juktWB=oL=D?^OFEjd>84C^eQ`YlNh!;EB&kD(jb3L>LSh*7SU^X8V>OyFZ>h2qw6ljs5@ z&?|OKsYJ7knQt~k>Abu$GzimcpIkkgsj7{V7VuL&(4};xV;t1*Vc)q(9YjISl4)## z@-SVDk>N=4%>H1<+!V=`J>tcfi=T+L#kZ5Igct$Sw*uw!5ZR4S-ZKX}4o3Z(9=}Tt zShB;JJ*|J2Hlu)N*c->W`C4Q$9L79BhxKB+YQMqvZAWy_j^W68f3@Kq&?utHY^aG^ zU>n>(w-36;vvP{LC#U&vnqX-lfDhz7Y+ZrT*mcIm6Q{5OyJ6iPq9*9eq z8*|EK;|^e6)1vIgm@e?9{P*cZeIYbS44st!`5AKScW-O+W(u{mx@3*pR*`=xtg zOb@uGALBn8b^WfU-|u)5*Dd=P1WH@_I5T57GR>>sgs+rvkkpyPK#8}j_G0#nwd;1{ zus9y;eHil74bQszc?|+SnQpKd(nYA=Iq7&HtT}^K=5Uof>p%6sLzKtQg3I5&~vw*F2aI~1LU1lvc*RMEM z$5{z&R#|{VRV`m3&^_!=mtF?~90*eNrrK2sn9TxXaQ@{lfCRclsucm+$$~!aqX>7u zY*H{?p&I%%uqUfQfKU@kJ2}B3AwSs)hJ)a1lHv@lYFLaO&xH(d(6xVA!oFdsajkn< z1>v3DyZ9P%pJ(igh6;*L3r~`9&^4eu*+M(@AxK7JIp@yKk(qz7RM+0TvaU+&-W%9} zZKx?2v4x>rY5{ns3P?k=n`0{Nu&9t;Zz|Jj%kV%UO>|)3UUcV~GhQ=_eb`;nP+{R{ zC1tI_T{Qp~*+Ks6xwf+~tQ>l@8|Qq&CoWyuPCYvxZ?z$U8-4X{Boldfm~&J6m3*74 zXn?ZDed}Za$AIM0QQhn=%RuJxM;Bl%U!!a`E_17dH`>FqdgWb=Gq3FufiEJvS$fej z+A;WE7wJ~g>M@xZ=awcS!3^jC`O0UwM+wv@s%zy(H8j*=%qrSJ2yA`+vT&~S00^K8 z$Sa@OUEEU6$=j8TNB_zIFVe6){dezgL1rrn@cDRA(08}>eMncqjOLZ>k$Fg;3N;SD zR`)M6OJbPes4Bce#m3cBQSTs&VhmrC>X6eGizjPuF)%~r!xi!U}Cb1<-j%+s?dbDE5yBQn?jIb;Pe=9lQ4zX zO$URon|8%);TRIVTTj#m#2CnK?*vk@IrPBa4q)=-)!m@XC^}Oml;-@SXf9RM?;y>d zmO;5`PQUNJAq^>yHB(vFbkwB+eTxKQBIFj&FrJyFvm|K*lfv1S67NUe|Hyg|5i{P0 zWp!f`(RKu%Yr#|s(C(-QW^qA;$@+WR5+q9#O(&=qXpjzEH`Qmlp)Kg+Xcm?ZO!pb5 zs1>GNGgr!{W!{ktT&Ff(kge} zOZ>`wtE?ENr6fzdEZUUI$B;5iE^1Twq*3!MYYF=_ zrxXG?OftjGUnVnWD_%M&beV^e#>FG4NCo1 zz;la_DfWP=Jz0yBsW>~k=Lf_7HW;LlnwdE+Y znq_f55BoD4Uv!Ad!31(&Yh`lqwd5*8wenHNuFO?tA@wXUOMKCN=xLC~6(tm!h z*RGl^h+}*Iz0K~JdagBTinv>2-X=eKG0OKj9^4njYzt;RTOpbATbVxnalZnX!v(lw zAGpmeknjs1okm+ZM+f<;{LhU?RdgR$h#4A?X1_1@v%i*E09YG3G)PCfT^?6L z=lB5^=4gt#ok{AV4s$arR4FsssV3*_m1eqgm``kpx20=RrzWHa@?T5EFGSr7`e`Cx zg`Z6)eS(-EOo0>R4}U9=i#>pSs)jg4 zSw;}pQl5;ZP;v!1bW6vIVoNy9>*TP+f>TSVKnnciuZOc3%hct(>RK8KBkm^&ShGpj zwGF(bcq(_qn_p%fC;VWBd$;nV<8tiZF>hsS%3qtE!ob`)#Tn47o*CK2lLV!c!u`uk zMmx>>N+dDa2U4z~hAaBV*;gir{y|h=sIe_lS};^XfzehlS(Z8{e_ehX<`EmSal|_D!W( z0F`nx2Cd95J&Uj|wkeR}y=pwio567o$Hs?-WERKDhXt_gzI-iX2H@(pf7WT7y>C1a ztc(WP%==b$f(+l_7^J?oJ!NgXSeH&cZ4*Gz<*IW6fIX$cvQTh&ZjT(E775SatNl+3 z%ZFvqbC+Id*Y94BaO?q>TLQqv*zGL}V3xMzO=%erN**|OV1a4r9Yi~2oZ{%#k!7)} zvdls{TI(MFU4KmYYg4w&f)}8pWV@=n%%@4fFSG2Hnl2>0ETyT>56HyQR1x_eM9dOU zz{VzuFXn?95K>1jN+dS)y!XyFtdrD+tRag%#B}80K=V9H-bnVL{e!9(UrJ^zRF-sL zZG=pmw~ur{CmAKwG)%>d)KI$>+FN_DN+@eT`}ocv*@lwv*aAaW`SJ&)`=4Hxo>bo~ zx!%D*>6iR-NV9a(>-?^`Qmw!Xoy`2ml$@PcJ!O7x`q6n0*OT^~+t%VWK0W?R-{=3- z8p#6CbPPqH`mX+*jy#G#J%bY_kg3e=?Vj+Y%OaDFH2M!*+z-aU$meK{>)$yPgbP+; zD(R-fR*s?<_fE$R$-mCI6G%cm(~ej*w*cXank!o)B3#&QW@oNY;`cp^pd`;4#DLg$bWIoQxVLX-TAV{gs?h;_dta5N`Jwx>4DmHa5T7hHwg*GMX- zAINXE-hOu9Bi@(4bSu4}pAJh4tg$CsR#$-S~fe~`ko@c%#*N^C~Mn4BQTqK?PRhelL!a?_&;bpU?i`2yujRR3u*ERZ#X8FFT zOmI9tdZA5us!a|~PWIvZ`m{7^P}-|b_O8+X&zT$Ttr*OShcmWm?sey) zJXD6jH5^P{wW$Sj9fg{2r?!GaAq3RU*VJG#0y17X(1D~+(Cga*A8$u0TC}?%7q?SI z9@J^CjY?jp5l;~O=jWb~h4oAhljfe#zDj@eL%crz5zSF>#78sjl&lqG^tqv<);_Ah zcPqoZItKzJF0YkKKG9X-FdK^%*U(-emNXlAi{|*=H~6$}E?!o#0&JNyZO1C$?2c5W zx{gxOTXmJz;rxFkzr=5IesU=I6MFHpYFRCOCfu~cP+77<4j*##BN-13j;t27^@|J- zj%!fkW(R+lU?q|_@Ql`YfnSAf4q%8OD?Z95?fC9dYBcW9JL}>v$8Y1?@igngsrKK4 zUCf&F+`mlfPN@{vSXcQJmJ+$K{79j!1{WB$OA0#aMX`u}(h0r})REizRA9M!Da{rc z2(OSiQhHWM^PpgsI-}Fw^j!58NiCH9VmB~jdte5vlp%^0%{k)QX22%qq*HNz|4u&^j8^G_$SC zVVX`T>$U@RjX3mr-|{qJ&g}~~H0zd)Mt)T)q^f3Lw2Ae6O&#zXve_usG@4u{(?Bwh zy<33Tn+88m!d+fC+{SL^sNt^M*g!Ndti_1yp8VMKk% z0WLyw*rJOKZYO;D1Y>nhDM4dyzs zi$&vsPxPJLWJVyDVm3=;_Mpf3ujqXnGF4-JtF}CtQyyCKfW$oBkR{8yHwWt4@qp)9 zo17yGe(Gq_&|7oS=z{hBTMkSt*;>RzQRX@bWfPog8zy?oE7yLEXLOq_W2VC>KZG#r zI+ApVZHYoaX4b)5Gie}ZlgM(t zTXdHxW$h{wf2^F*&mnbnRGW7KdudtmKVw*b6`#52z4LFO*-SXb57PZiGFyPWSSL5# z8L5HgEdg}Xc~bTdon2O#%FpsW-=oXlBp(WtGzr!AEeuFwF{1~rzI;;P#zVE-u47LF z<$cCTZio#eNWGuz1rIKV3!VqhBC$ZIZwRXBv$!`yGF952h)PAU<2$q^Yd1c5s`eZJXp3I*s{odEr3& z8G7oj(GSCBB-yfBd(2zY9wO@DO@RaJKr->p2$hDq2%iwr`(3Q6;tt!da5>CaJ(ABw zremCv?spCl$?U}A9u(@&@VvRF6@!$(*wo$(P_RtUSj(xoCKliu$+qdA1&PJE=ruv? z^<@ds5UY&QANIwUMJX=RHFm`mCkB%>Sa!ufXZE#>M`>WbCa~b^mAZj|@Kp;&+)No{ z`nw&~o|#L6F>z&81=sO>a^BNg1t$HN;`3&3Rj5X{S2=2?{ey=a>y$Ea z&?0Y`W`)98`^iN9j3Gu{dh6e6v3jhnXrtu(y^+iA#f(dn(P?qI4=W4y1;=<9=@|D{ zB2b68J?l+#K=M^rG8}8GxF8!rvlc*-u6ICV5P1EA5J;$a9DtI%iOHgBPqSo)FjS_#sUs255T2G$>+L>#g}A{d#AV)5tQ*(nMt!9uS&_v;NB9gIKjC zqBl#_O;bhNEK?|cUZ3~06lJ2Y4n|>YNqczYsTk8(+g>LZ6h8Rz+B)(T<>ASL-i_g; z&5PJgj7lrHO&QgOVBos5=)op6gQGv@B&6=4I|48cGcFi;t4*6K^N7C#OF zVU+(lu4G*r3!6by-cxcqh67+JORBK}=9MMYHxTEx$91i0BZ{@j4~;aJNDiuV`fFn2 z6t1O=XuD6lk}PTY(GJ49p}N&zFtOO~yqvBjT8pfOYtqu(#adJ?>$fT}Di#?EZe$*c zT8~Hw$QB@)o$SS;&`u#-a`6iPhQ5SQ9>(ifKx*q1Sl&t-7oB7?AoS3qyERT9{xrcZ zTlUGpv`h@I)q?IDS+>!$1p4v@EfYbIMzlW^*vWuLjSOfn=F zfJ3bJ66S*kz{aQQ&_S1Mi^bQr(u5URmqM#w?)?`5C|fb^~bwj@YFRLgmj#gE1e9XG5W0B4vR3-30yH9KsYk(=9Q zLZfB)$%QUuN+^?#5Nb}V<-KRe{{7&xgST@Tkx_kEJ31g%Zt;0n$+rE9Y*uiXL%BQO=H%ps*}osC1`PSTg^O zDN{5kwfm|vjZ!kJkYs7iWW}`xUA27EL4j}q-Ew6!NL_5C25Q{KcO%wX8I2(bMVwF| zi;XF|YutSfYdEgd7alHtv|<=8u1nHLs-upRA zPD5?@qtIDe1Sr}&wky+en_xbGc7ruTihpEO6aKD>i&8gWp8Q~VGpc~TTW8snWqBnBUvPy~O zmKlXvNt_3#v;V^IvBOoAt)pmN^rE34;a(9lk5&JNLj6D_I$_3s3Z)?4&zw;t)|95G zjy;eNGc-_kJPGS_K91g$Ty7LG5KnFCeB$57VPT0oE|yO5u;MjO2gN;OUWS=ja!EAW z{-uV5@-WSaY45MP!MJS8jT;7sOxzj;1IeeeBXUKUW^87Dos_H6=D@ogR?&f^h{Qxk zdHr>YZ*rr|o`w;sXN}N@xs{AU9~^)*HPVsf4=PV)da;NTW@l=%ykHcDNBG+AC5qlj zu2zh2N7@G1jKz0epu1IrvJKI|T9gTL?hHiJid7n1Lpm@NC}`Eda?CyeLPU)b$sKH^ zbV7>O<~6=qkFj$sZn&rr84w`aes+|dGL$o9+e$O>p(FezuvUeW8Xu8!(MI$fP?F?~ z4dpGM&!f5#AFw7dy+X=0&U`@H{7s|P;uZQ_oPb=nS_Hy()0a3H?eT{$#4W2bE(jd3 zG^DcKt+VDMlA#kChZJaXs|B%26Os@`(9f|u(1;w0-k8$j=k$e1UYN??28+T5H0dY* zkE{0pYbt5`hu3w*MFp&&2(pTZbdX*Gi!>n=>C#nN=q2<}R79jp??gHQLQjw`U1_1W zP((_A5L!qegpe<|`~1J>d9UltotZf^cm3US$RTG=`TM{m2c(t!>~B0wp4Qj#BNDYq z#UsIIMC2JMMS5mej8_ckPd87SO$T_N1mV|~kPBT%E0l{$!-=h$Jai2w$1mA*)_x0+ z)iQbGm{G|8H{q|2itBoTYTIMozA^nf|bEq2D?-uf~#;%JcWH7=8Tt*IM(6 zcIMNh`ovh*u#%VDfDcc-f__mqZs`wFtDwsxP1y&x1wZ#St&5l|3;v=hGqj!uP0psM zs1gSWI7VfhH**sIU^7Jv>witFzlhNMam{XQR4A|9+4Pvp29cQ(OwWbOEwp;-00CXL zd@4))v@fy76=wdFOdM`Bf2#J2lCE}!w0Y4_Oarl=^fS0Z7aw}WG!VUY-E$f^t0^|1 z-Tb~0SBPkhrrRz=2tFMnj+(OM=1A8~s(e!jA1}o3sYIwe<`18&{j+;*IDk2Kg$*|} z@i6aCN`eyB&jUh}{3;e04rKpCO*BPBlRxg7x1dYd;$`mcGL|xS)SlbPqa%YZFDMOqle!m_ zT8Jaefp6ZO(T^R!XwFVPhIl`qDGoWKbl}h7QXBpet%JfTtstSao|P78%Hh=*v`#MGd5Kkk#uS;s!=tm9QfU9%ddqEaCx%9v2fOVZ9Y6Npebywv~Q!ynf_u&2DaiO@$Rp}?I zw5e)2{%0qjpLHjts$uupZmpbk3+;m}BID=jO;cYReA2<{Mdz%JjYf@R2AT$l94F}j zg;eJpXw`iMEn4+evBO3;XqMJNAK;adV)!Z+TZyv?MOCSr4=V8B_ zre3!(`x~qGF5#?W`2FuP0jZzUFL-V7C^}rQIk5Z|ERyuu`$FBM(DUGPa01YP%toVK zH%Cp|l#yYyZr!q{rr6XH>-)6s@%&Gd$6TH~1&H7XMFE>BLfd;LqI^<5ZY~$kCUqm8UD#M zI_sXCa!O}wQCQff2&o($UHr^x?6BeXeATJ$K(eGq-1PYF_y(&0ML?rT6&Mm_y7;-U zP364XaEf2l1GnMEW|as@ki|k?^)IUai(-FKNa>@D>$YGFN3`T?_e>0ns`~Z`j;MEeY2eGH{327(yvM?p9Yg z;<-V^Y%X}&{c~FNPhFwUh1cnPAMS~2{4t-3;tE#$UMIK4B!++Ff~|bKb4Ee40<)7= zBN=7|7x1x*nkSLSxjZ=e7Oqjn?2u2!Gb&~G)~$s+F5wiFdJuhd;k-*g&+Y!AdWW27 z+cLD6PEW!s{xqzvUqks-A$GuC&9YImxoM0mX;FwOFL{1BCA6(4ev|5prXH@crZL`^ zqOQZPbc!(I)`@2Jdp>NdNo7J||*h9*Wn~BUJ+B=0bNZr9#UR9r3q-}p9 zOCC(=zPoDGiT8wDB%U(!03hdRqzvFqj_#Z}3`2dkgdp z^_uPaq^RpVHNB==7#+OeCM|b`gJmYR{)O-{sN5JB1h#glQ~5lx?EG5g6_2UBWpK~6$FI19f0Sz zfKw)RpmPgPQ+!p+fZ{=le^^fTck`SdJ8eFls#Tg)2O6cvqV_)-%r&VenV+{2Y8-kZ zK17)}`SFr$1tdXN@gbC~Q!BFsd6kqeQy@wbo9sp?73sP_K6SWkA^8~F@muI>f%-dW&Y>dSa`t!HNx$=u_#*?Bm5=Qjp)6^;(8Sv|dY8rvNsRDOT z#Q_^_e&(Z_TUb2xRQh;P=)3=Y?4nj@e>s2imdKwR8~v6cmO7>Hr(|LIt~+C2D8~0X za0=TuV;Mme0t^F`(hy6I_{b@BR=jtDs7VF<03-0l>#|*hjOUO}_bQ`tFKR)5FJ);n z1-F?}BfG1Y^`Tx!H?G4+5+G9(6wC|f7Eo!ptKCWZ1VTs{8PTn`aVFLk8XaSAW^fCR z>}o+y8&2sS<@JR$t}dc(w!RifQ{23*-J@O;n@U$?CnQjKF3+Y?>qgsP?{7E~HOwiF z|GVhKm0HmWC3x}o@}Z)T>8WBCX{*h7#THcXaId2P!%R+1Rt1&2UvSeK{fL4h{U|)Q zU9h&1J%PJxaas>oL~YdDPX?X@rWIJ6pGBw*NyXF*cpA@1-rYL&v2syYt!)!jm$yn> zPsU@g7-}03kNqU~_7mp23fvu%Aa+2HM-%PWhHF)ki2?-x^&INy+*9PIlR+q-`vF>D z!(uO`#$q=ByKvN+zHn<%@;h_Zd4CB};Wm~ZE#JPKD4?Ib?1k2wXNJ~mLh-o9{jLR8 zE4Ng$W!&7IW{NAg#&vjVN1_)iRT^!#yyvOGuT7fr_7rd3%#V!;YPGOW_jeTPm(@Z; zD{8NlohCSrZlcVdWgKGHnaxw)@_13mY~NBaoO?10Kpx6Xi#DHo#aFBp>(eR|7y0+9 zP3313R#a1trt07F@O(Bq4bVEZ{4Bsg?e@XXoo-xegQW29nS2qyRH@*kR$nizG*!ve z*+9^T*8Fa9+IT@BH(rifi!)`vqB$Y&1-wg`ErGnB{ABKCz3;&q2g*Q)_>%DeDGYtQ zY1`!J6-Vu{PdMXC-&*}HYvT`rS!R1BZ57LGMrDOk^6UjzagN7?iN45b+aN z-k41mLMD!e%)iIhlCCaj$5M7SNp7nd92e9{Q#FEF_w6H-2so*MQnwhXp4)GsPxlB! zoZ;Is_f5-YQzg!3+b23o8YHY`Wev5N9n-1ENVU9J%zX4^Q>WYeRHfxf?f3}f;8x=a z?sr_9U$!7aNUa5Wf5-aUB8KE!_$lc7v)89YJA0^tkPZxIRmd(sdiUPZv+s|q_1P0W zl5B~v{NBpM@63VY_7mi5{vYm3%hnzFz+w^sy+7qLV++M$B6o!NwDN#8t4l8k>ZtC% zNL%gjp8~a}KLwU2e6I;f4Cfy~1!{#Hy@iD#v&)TeODc{z=%%+W^e}7pnA_gdtwU|T zN>YAmX2Xl@=iSw5W$=b%0W>&Lx;0^-4kJD6|kLHY;JgIrGx zSTS?0b8T=1qp7RhE8 z?%fmz6B#dCf6 z9L6rVaR(*V{brJopIO{`@vj}&dZT}o1ECnpkKcL%S6BbwLx=EQ7MdOXdc<)`CUCcS z$lF|Y0MuN0*!v`+B2ms)fZLjVA<9`KE~UhH*3+tayLunRqfQnc@{1x(*q)+u<7Ra_ z?Z)^bqvaCEuYC{Xe-cN-?eTb5yU_2=7Ez2wmG1lI%EuS(Fnj}ypO{2NOFQw6%nj5h zF1}vF9x;|h|JL^7Aho*<-6680LB;#zI9P1AMY5*PwH4f7X7bORC-GWVz?FL)_xYAL z^s+qjFKVf$tXNz%8C~RDtVpyL<4}LrCefy!XbxWHHMwk#2Qiyi*ov*l?w_~bRzO0`a9ZmG+=GV^Lrc5r}($dJ4M6{V%d61{~a&j z3h(TbhZlFSe*NOLS$Bz(o|F4iJpegD@wl$#QC_n-jivY_^}kTeZHq`vDrRJ~*_GOS zg0);B@%ph;2;8H+78`#%uqP^jN}7ugsm@z2Kys-8Wb$V(@9Kgzn?;9Sxjw1DzuR)_ zHN>?lArlX+Lnk1h_AqMa0_1OFLzkdMr}{B<&a1yGUf;N?af$2xw+Q9G4B{VfJ$vw1 z-eW`9CcW~x_IG*jesY~F`18-lj~{=F=z90ZErv_1;_)RVek$D^w+LiZgZ;p{E^JVb zZyP44_sDDI5Nf~OFlp(8n;;I+H}zOs_3lfSMO2Sf_oT@7DxCC4-}B$>XseA~@jm$x z&x*2AxJCbmlg2Y01I^^?`!*;$rv;Up%_d`JTLc3;1xul=natVR0M~l6{YtE7bpXXX z-FW_~niBNH{6)@X@`+G0>#WXQXL6-)vyUe2sVCN*C7hFiHMJ?o7-Z9a!Qs2LC*x$> z_qTS&ZhAL7aUU#A;z@?t zB~k6AsV&creMS0Ib3g27zo%N3rn!bN`|s5mTn=C1V0BQ?%`JZXh%Df53aWe(KI9}4 zr7yj5>9pzgF<^hpyyADD=AZaD;3TS{3RYVnkn1>Fs{u+O!@jxgyVf4B_x3xDjuM^}7S9AF|74JN%)#Fc zT#Q;NmVXWwoV`Dd6V5w2*`GF6sFQ<8VTRqVnJ=`gH51p7C}1#fjf9UoooOIy<@)t; z7`NRZj1K5xpod`y@th*Q@3n3kgD37wlII-l;EvQV&W?Nixgt@-6aQ$7%S{h&JY752 zv@;VdE5MFe0kvgq=3{bfb^HfQNce;-C$xR;yaQp&E4ZZ;kV_%H&be%6-JxR2DQ2f5 zO-K=dI5_LIoLahy+vl&i%SL532m5#qJ3dIFkDT$`>w0R&Y#1~b#VUK`Z4E23W7d85Z zAJLDL3pOqTAJXOGzv2VO7d&Qkg12&vz;Up$H6^Fm*+pUVUY+Z&FHTMiF_fu8?&IdP z=Z*D;F7Ny)SRO@brW{vH_z*<@Kr_w@pmiiZh9J#S60F?Yz}2$(#YeCoR*NGi*^ra0 zPj0ST0qY@cZYLp1?eNil;@b` zS7Ng=&AiiHWQ8c^ZP$KEOHK&gM^&Us{($7sVFHFM7+l&~j;+=!Bd7|Yw*m{-7WKw3 zE)uxF)5lfzyy;DTEwyovzy%b6)aR%$V)+mTN;%Or!c_xr9k(zxS%nc>hW%#n?yyJj zvOV-+vsc|Q%oH+J00x{7Bl`%^H%>{d4o4rfR=XP~Vo5o?z;a4=(&08VJ@s+OEV~$2ZSA-fa+rB| z8DEXBcd|#V_~3@>%dq4ruC^-itt^~dhJ}ZV7FJii>XHt*w(<5)Cb%vrb2{hH?NQU` z6%^J?DsrnvS6qO4Iw)>mUs>aV_D`?~S{N>4n>Aty*vc4M+Sv;*rjpCR)qLc`HW$M& zB|)M~nF4tz8CP$AtEtFG8sC()*h$s`P|aDeB$g&eOudhHCfo7n54laP!>61flo5Po zz<7vE>r=cr*ti5fC8t6!y}Va5Y;e5TqIW-}{&oFy7=YN}5%3CYA@vkD$vE#s`&7b0 zUPa9anCsJR`6&g1eS>F8IdSC!lOq<}3PN%jRaHR0on0&l% z^%at!(fVP{(`631=c4#e6njw}NX}r9>O|69Yb#Mwly9dD>0OP>m%wrJQg`;HLT)@c zFd3}B_+4pLvLN*op^(JVGhNo{)v7d8vmWBfe7sgrl(N5A+0sRl>umF{3t6U$hCuz7 zezG>r|8z8h1m|dBM`qNK7C4xEKIK44Y@rp80PcU!6z8h$|2sI8QgkH5UrVv5=|1u8 zBbv_a+U}QJL{Zqa)=dPrr5D}4WihkDl0V_d%ZJ^Kjz_6etFKR~2b)&wZM$yixMxjS zEaWCTh#^Qd~l3!L4yZlr>%+0d0sDchNSrRT!XtWwyyp?sp zxGLwasYR~@K%X8hBo%$YU%GWH$*QnddyPyEmrz34?koreK458F$hLZFG5>@Vh}ymU zfN8-HtP@ZzGb`W#l{|=WUB{cDt#=+j1>R}|A1&H~v~UfSjx_7$&9GD3)iCPsZzvW& zORq}&Fjy8kVuk|lqEY2*_?#ttqqy|@;Jb50*=A24kuLh==inQtsD6i#kp1y3*4cZq zA(_M>A_@ogZG*P@x4Kv<9#7Wi@-CF{yjsWi_{)`{A;6|9ZJs$T74T}M8M_gZfCKrE zzw~>%YuRuB4r^hJ#vF@3gep)!7_N_iosPK|&sn3w$eWk@IZR9Go9+A8MqVkz)S7e>%p%POW(Ys9SeJ4?6ZCdV3Q?o#MOXn)`GWW z9*%T~dL{IB$1)4TFjPyoF;%+Y2;Yo@mhD*iv@y zYg}PV@jas*MFnH;iBw)KvYz;Ov#HtY1V3ERv@m({yh6&PMiblY)kb};j?_P`9t1}0 za&=6pHeI5fP`!J}<HPq{6}r`GaHO{c45L*TO>ffN6e@A|jI;On+EVYRjAOmh-KV~#+RxDRt^bf+?+=xt zf!RygD^~VLqd$P5LJX~9XO(av_ExW>(Ir~teCw5?CqMe%&?*(X-eI(d`7M^Pmlkbz zE$IG3yhAJR2G0M$(pgC!o$Qj9@ST`&6qA*Lz#Rn!L~s?kbCJU*WZG4Q>S$b$7jl6w z1^35re!{f2{(;d~O*>>>J?x4NL`pPH`mJ=BbW}RZyvw}Lyq*8GD<&(d{diLtt5##xwe&$C+`Z@PW{+dcNZ|-L#jEAfLaUX^yG!@YBqHyD2CpgA% zitXs8L`%zGTE&NVZSI~h|CWp(usp{)gY>8Mzs3W{y~|jg`VIVZ&Kac;e}@h9k4L1R ze~HSN0MdR}-@|xr!^)QSgUg_Rht9nna-UAaCXyXH*5ggzX{+7v+IL>dn(`dt+AOMx z|Ivp@eU}O#r5W`#Bzw9RW|{F|{;95JDP2p&Kh)4G%(m0HF@)zw7pW3em$xjk$602B zvO5SubrRssH<>KGZ_U)i==xRb9yIw}Kl&Rt^h1AX{_BM$z*kcQ`7Kn1f$q>Q`Va7v ziVIU(nZKP5gL(aes58gsT7SZ36S8uC98;k0IN+@BF^dPat?`RRn-Uu>u=s%&cE8thiAJRN42Ypxcg{hk_HHM2P6Z&P zx5M21)BS*8v1enIEQhjz_4B7Kz5<{_&j94Ic-Jm|#_y->nud0h9(ffP(xET$ z(`xs*yo#N+Y8@g4k5XpTfh*|8HN{B)+btezojZ`e8U3LgPohC}G3_a#E$Qz$iDzVNOM38( zl(po1*ee_JKHSS%9^2Sd!`{5p>)fGfQ}jeM%|xaUz9QLelc}V82qFZ`%G>8@lejmN zLT(^4tJnv9#Lynjz17)$KD=m?AC*IA$SD@8e--c0JT~k7RZ})&Q^wiHudLoFY_f16 zS#Ypfh+ti4|7Fv3~ zr%ye@8Xjz?tcJ2{og5cMbK3XWUrhDCnEL8sY9NzUnDtubc_@)hbn0FJT9ny8W8wM` zK5b?b6n&UR!j8e)7a0k=qnhH^)g0^|cVCi1oApR1iIzRAm+o$Ap0TS%%kSr`T+dmX zTi;YZV$4LzPqH;byunu2?E00hVA^GdJVt1P#p}q_^*Yb&Rc5JvaX=Y*`8Yi1@VI8M z93FQRNH@`K@2+Dln}L%;E>F95_}oC=n9;V8O~x4@MW=^e%0}V%k&<}v`GF~~i)h*D zg-+rC?O!ZXc! z$?98R-K4TR%T_`X1yK}5A?4=(ILsD_V%>QMiwyX7Jv1%Sn*;86HTBMT4j)6~11DPP zzv76tw(H3ScErMVXCi(?&18Rl+w>tEK3tZ=egm1Vj}tBt>fS_Lw7CuWV!%a*bJ2*I z8Y6y4-WyRdot)I0zG*eo^zmWqJHx;fUSj>Ynhs~m>IvJV-j3AjVU_ioklWN{H<+3? z=vMF*C&hpxhvodQ&vqx2tUH(e7O(e`Q=}H^yY^bSv~^uQnjsO(^ZgF_pX0_nGEm;M zV|Kb}$7e+erhV7vN+G}{(9>N}YH-vyJo6D^RF$Bz$lcK<9zj3*O);}G4psyscLY5m zU}79sJ_~h9mVW%X(-Acw(t>*5>v$kI_`)*E?A`W9>lb63oOy#S-H^_}M+kMKyz_I+ zpBZ7U7p-FhL|9<{mO1g;?=g|mhwu1+DWOw~s;8E|pRyO6L_J#r7Kwk36-bC_HTrm% zCxCX{|FBErX|c$-l}6NkZ$}7*UCQC8&-z2b)caC%!PFycv}5;)W70i;RYLIMIT_D` zZ-2x*xbgf$QGAzRd|e}nlLzFMk&AEDTxIq%znZs&CeWiJH-Kx}L3y-x)qi3T|(qK=PKmr@^W>5OMx>ze0LQGMrw zuXqq@7kaEqKikfrqIv^NtUf4twC1FCIOS>9e12u#nRmwy@5c@8GnPyCMZ%_G+YCTM zF^G-3+xKM)j}JBK#vzf~ZrquLV`ks&HcptI)jjOi5Bc_^HL160{mQm(#G}DNTFI;1 zjEU^4LV>m=i&P3T&gbp?zQJH~C(xqCFMO`6+11d)AVqyg#p$&kM^qi7W>hI)x?m5Y zNvV-(McNI^7KvLge=tITH6h4An-GcD3+i{ynF-vufwR33vNF@z^q!1*lGwARv1aPmsOBaCO9tsY zK~2BXn?H27X$=My!Vi2PVacVKcF2peco-HoH}P=pKnQ+)Dsq@ z?8#I&UgV2%81Xk=AB+kpjXAD#lQ*;vljr%cwQFWol7DA4=&{QYymI3E_!t>1KNdSF zB2XF?N7fV*9r}rVt=r@>&go`m${i2Zw$&>=_7;_T(m4yL;&2WCzDViLzlUL`V`|}X zZVGmAbe)em)^F;W8ca<{;#xFGb*!)3emTCaUzdY@OxkdfMHAk=?efXuJ(;Zh3JWKs z#RR}75PvT=2Z$IPuDzs~m2A6hxiK{n?gQ+~2>}@jj~0*DmvTie9-K3djg&4zCdWnO z-r4w&rZPExvFOKo7e)J`|Jq+U8ksP)f`z-azmx0KUOzJRkuAQ({w64382wj^!*;>E zwjR`Ow^vsij%jqDaTCJ?0%Yq z9an@u?HC0zk|U!n$7)VR40jo0qUz=auox@=Vt*S5&!@mxg2D~`WP8>)Mf~OL@YMlB zs!;y^jqqnOJ3at}rOv@uj^aeEotJSwyN}()v}AwMHglI>RFqwkB1f<7cizQHdJG!^ zy{2Vb(l6>v6ay@MaG;BE*W@$W)oP`}`H39*@RZ!Fbh|Wga9st6NfZI%ZcbfB0ectUYev?4@FFoG*Jh zHkA8y#Aaooii^>7kDJwNp65~Nt9P&V5T_p87GrN=U6M5s;I(VeZ7u6vBxelkJ$>8S z?_iW*UcRCZLUWeepTj@z$;V~#)nbb=efSEtCZ)39uJ=vd-MicF!zaz*`Z)JtIrE>N zYm(jPBXk*nYz9a@VrorW5~Xk}&S#j{gm$$DGC4rJcDZ^7=H*1M%n`b{3;h_ znsZ`lrSC|Y8~!{(+th5nnMvJi^ipP@$Q^CRvhxAjEo<}_y)u{_Sf(VF>O!~0pJa`f zo@amvw%lu)Oq`x-;YeI9fGo9YJI1t|KOIvq9DF4k4wOxa)3#v(Kw;nwbK=b^`-sFt z%-kbj)|~xK+zLh}+_`CUG@{u${aaH;gZ8ZVz^YGXNe?@_?*{D;=Yj7i`fM@PNf`&p zob`gHP)*#@kQFv_rY%$*|H8(4)&d1G|H_r_ni}2^-e1+LewYi93XV(MRy~y3kgt1h z1~V`{O*VVoY^xpopnWyHe{a?Nkhj7(JrQalMIyx|=C~MnI3?jtv_0jEx$0eeE1UzE z9d=wC8!M!%DqtuTSwU!&k9kp)p17iH-1v|uc`M%H5<>Gs9XIM$^G@Vi-AEQPTJ7h( z#2j|Sc!&mx-S^H#aEhc8EaaT*5F+SEXD~zfMmkKevG0zcM)K0n7Bx{-jb(adfKBd2^O9fzmkz>AH?a=*B%9kS(5e@C~!7pjr2-+;@A0?}dOt*ihrTX__ljW=HIUY<$!ARn>T2n-0N{_VWA+oLY2RVo zbxD$?_ZYUHnSakgn4b=2;TaFr5dt3JkiWe|p6xuG>lESI4oA2|aP3n67`^)^aGssu z^5YH2I8#ru#i44zf>Gy=T(wKz+<|Jlr?%N@(XHmb`O>j35>@@o@1b6cZ@wjd%$iv% z$Xw|0&9K%657ajUB>@IefWQ{wE&}g=1dFe6k(t#i#&miaFEqK-g|Fp-m?|&d+q~H7YTP^lD#_g<#G-&9?vimw@0AXB0AQN3Ib z)eqQ~SsWsn!XJ%63F6>+b%&%BhEKyTs8L`dfyf@_RqnG{~K zH~Cl(*x~FM!~*l|SMi5P;K4AsRGBH6cSMQuu=A{RQWTdbdgVqj3Bt3|=A#Sn7`E|T z0KlR7?wl$4-0s`ixCFp!@h_4}T({CMcQ}Q@ZlE6_>Y(S>^Y>G@+4V1yZA$o=EW-Fv zOqqud354BRb|wX${o%RWuOg{H;~SJ;3vKIdG!rHE9KZVT?o?`0fCyNo$rGO>o~K4B!4Pky%jgtcZF_O*S9W zQF&C;#$^}h%3}=>yHo@@icLVjdQhDG?X+PF+8-Q1ccd7ZN!ELdsa1@C0i`_YG00J+ z+EvrmHtBV*O-80eRc*5l7}34-yy_u4 zMaCvm4Zq2Hv1&gS_q-3mw|bo78B|NEzne@4sD+EIr@Is`alD2-5fq(S^!e*_IyVcT z-n^Yy4174U^{l)zUbRbvGble3fRIg?|LufAc*}l+_Pg-`q30iR*~`APTJ1KJeqk~6 z2Q8HSG&S&$4SXdh`Ext=ATvzsTkflasIF`-_KkW0H=mP^b-kV1Soi&XsA!>Rw>)jtz*qe2d+c(HE=SeN>O=U4R#Az8#M&+C{+!w^*h&qlnYeY} z?qOF9LN2FirA1g~P_DO#-6#qm7rSDUHVYTEivl+MpM6L@BnFB_aoXp)*q0eB912dL zqK`~bd;8_GqH)&;hy|=qPoyvOYw|6uF&L=A8p?v zwwTeXAG!lHvmsO*{`N(-=$mj*`0H(;XwZSG;Fy|Q?2{la=lV`Ir{h@bdlEssCp=wV z2S&=7ttaQnFRkt&I0}4~)8%>L8&2JO93FBl-^Ve_7S(ZfJ0N*CF(_XK>iQr_4LmfG zWiN(d9&AtnyN+b(uocHF*LlcifPV(IwB(O12VQ*eEivTt1DRO;Zqm9|^eP=8?~(lJ zd_`Q3Uxa#&GVx(e@c__2#UJ+2*7BBo9*~zKW-YyWAT#8pQR)++_-m>gcM5Kgh42?3C~YeHlob~W5zea@j3 zYJ*Z-3Uv!$x{P}=so^v4(!V*QG;MwC?1U);mIJK=eBOQbRYSJcI*g*J(#+!%$}PsK zX&L2*A24F%khP;)nPlZVNudsMzc)rFkGrZ~yZx#>e^OM!_I7DbHG@yq-j(dB=?g>R zkD+fANjGmNp`H%e(__F2nA&K($q=brSzgc(v~^*MRp{;AXyf+5EVM-a&AC@>biQ|X z-a(?7zJAtKgxh%XrF&H{KguoxK=fwD(gDFlo9bdAv~dj}8pnnNOYa8|HEmEfL`_N9 z3V4R&Wym>lY857!$Zw7EjODkXniAb!QYDC6FHwTTt)*|D)!}=r90IHPw$2>3OWNu)#h^nR)tUx344O&U0l`&cor4=x(oQtYZd8;z@I+wtJi1yAf?U7Luu%@UA zSl_YmNETpu0h;)I%2f9U9UtACbN5?x`5*4#6IbSJ5p;(yaP6Nb&hb}|wojG2zJw)T zXtlKswKWRaEfN2dzy8D9Ta%Bg`Wl(#2ED22*x(dw1)ITP0ONkI^yrg31101#yH_23 ztjsticF&@7+_RU#z^<2-x7PZ6@=SGD-DYzesPn6WxDF|3-HG+r(_>o3ZTk6@Qauql8mZr9!I?rC^qd z+!HNb>Ilf7y0?(G{JS*$A&T*P*qHXQ&l+lIszP|&1f%%8Vd3xDdh;aYfQmz0<71bG zs8ORYB`AZ25>%GEE>wCWPafQdp!e54WK+!%1*o+*IU?+4(`|_5vl0m_aknt+iaA zTN*s?>tFm1(oA|e+;oM1ui~N=-t|1NrTd53f?m}CgiUS}a3KW}a*?lDx22OOvPvmz{LUm2egNndecnAz%SVstclo;ya#) z-!4_L_R$ewt!+0IvjaMgqy@p5V`fHajYZlSWI1#4E(m^UfXXqssbc#>G-p+`RM;}K zV?DZ6cwg;({36PS8QmgPB-Cqur$tKWcUZe(dia|LEJ5suDiA?(X6Tc31KPx`X|k+|B&%x~uug zx*Pjl|H3VI;mQYV{Ys4v*|(Kp#cvCjEWXxvG`+K>{a+z}DgC9tpKsPYOFR5#yKLm2 zj_Co{#-Di5${wv~Jt(m?Res+8Q1y9#UEF7EGOOZL8Tb#2%IH5EEiYuDpANauV|)}a z$Y`+HPy>8r?vivpA`4A7q|xHweV5O{uUyJE zQCuzpz4`{r4afy>CR|}bdsb!j!n3Bbz4D-Ot@6-u#mV^1^OGW*e_&&HpFq7bSUY6Y zV(haki>d{UNaakWc_-V$z2i>!Sf#1YZ0EFK_MgM@oIYn7bdnTF%}@p346FOlxPFgg z&L_ugLYpkOim|=7cDY143W%H+mf)HOg!HTxUj_TyGMUTNMT^C?{f&|0;}xf`E61#iS4Sza@DeUF+23H z*=Yx>9Zgd6H}wrD?_;mo4b#STe8jtLL0MOMF_p1Pla0v%=b&0~@br7KK{=pSP&}x* zWC?-4vy8x}3qhwo-eVag&R_-))#dXPM_!L;j0j1!VzW&J$Y39Vrh69E6q$;OBKu>+}p%G+OgwI5%VD&DIn-Z)R@evF2$fa-A}s0fs^z87FH^!|6>pi!Y6HvPp@ zIjixHwFr-_XxS0*yqLQhBxSHl??*aiOjN}+ntbyIq>nx<*+Pw~buYZy);)Cd;|pla zGx%gw#r~49@`?dfg9>TgoR<5yaDpka^yl3^uc-_f6AzFm2}h|C!YY%sO)|4I*JBeF{ipSgPSx;RH3=>Ia%{4WMkMjwqL9Xq)= z{#EnAFWp?;7yRRye~d2Imed=KFp91_t4`+-(hy<^gIjrFIjz?U#hQjn?C$ydrTt!qg^CjuR2+) zO2J;M=CEHSk*1l3u1n+!CoPgU2WiGJd}NMfj-XTFQ=Tv|TUMduHRPS6dH2k>t}?iT zykHvl|5k(MGf;=ucO9`EBXyzD!Oz}hGtGZYrsM0<6ST*(Z0nsmoWHBp>4}BJW?B8x zIFpYQVHe39`AdY$=sg<8H=tLD1;J&_x=qHWER%C)c#L|(KhYs2paSm{`+k?Q_-omK z<_$j9s{%I}jCuv?#NBf1qG)aiV>6C=81j#XC5>i3mH$iQ5>x(-|F)pS^ufkLV?!xVg?S@Q>AJX{L21l?G#p zeh=L?PzC7ky60k#X^fE10{*9+lW-O(^MBnk`~TaKn#=mrGG2-%hfw+}=(iXQ$o)2! zk87dml|GC)iR}~W9LfAKl(w{1X%6v~#(wkv9~TA~k47D<&{klYooDLO-d}rWRV1DA zWtGq~7nb~=cG~}G2dV#S-oK8#cxKXnndtd{&W9&h{_@si)|&)ljV#dLVy8Ex1zF1z z@E=QcxU~OgF6v=R$v?iOjfP(}gaZH9E!zLbO|7(5<^P47mUBTo|KP>Yst>%Kc%A#7 zIQ*;V)V_%UMSowK3m^Ue{N9>OiTfXki|YSK46B$~6?KNYJ8UYlL+6on0Ho2x=ogDi z9WF6(RTQWEEtIuWR9i*Q;o=$m!$5)2aGEzq<^rw@nO<`$D;0vO7@jBbm;QWcMGNfN zMXn$>Nuk}SHa(D;AeoAf>Z$*P$~!eeN~k9tM;g_o5`i`1|9~pNCFb9V7)EwQoW;ek zlx^oBiI&)OD$BAo$eEA)jZn}!Ig8&&hu2b#mOgZs*#si-x+VIW327!b^xc$Y09;6E*#Z+W*43h!*eMl8i^I z*J%)2c(C^iao%MGH~vA~8QvT}{7Eog!N;moIO__pgmnKI$w zOS9ykboDEa4jK9JyL4qqNNxekKdzd1Kx-iO|c>p3eqYpqk+s~fn6Q83&-p|}qWKfGKyW{gT*!fs%(O`X2QmBWYc-J*61 zcKieY{L5GE@n1$KsBfE&|6H>l-7$JZM}+ zWGrk9sZDMKW4B>s%X#RgUGLm=u>F9-Yu?vCHwl%8pq7pR)C2^!;6%`##9qh7wa61E zr_t6NAAR<`f@-?8J^~8-#M7fZyyD1I>Om3{9dt6!R-+-=wRQIQsIId%Nb# zsmD~0RutbyGmgW+IZ2P=kIEIzmB8#>h$0n z`!`PGcfC3?>7iU%n$McNh6;g#LA#?2soTv5-9W3R12}N8<)9O2eb?7<4!-9db3SIr zwYhvxKgP=WL}M9sSJF9QWJUSL#6fovhZx-P*n4a-<2Yl&RibL9%T7O2z>yedcQ=FG z(P(08%I?)*ri9x>;4{3(Ah%>2oJ1M)l?*8)O%1lWRhUYdDkDl3Uq6eY7m#=JXjGx3 z@CZQa2b`o4tJVUNh?CaBGDGFEcScy#`5QUqTRY{_o3fcoU4 z1we=KvJI&L9qWN!41Glz3X6{QKshYp!J4JTF< z(5Vk5=p{CCTcnHeIyjGNsn>JgdI2&>7`S~IIqW>pN97uVv7NqQ=!|l z5Z)lSX6gqEQ(yJXQ3UW%5Z~CvrzNi6m{EBJp_ra_ezv^e z&d-U9Ynu~3ZO7qa96ufJKVlQPcBF8fss@`attidkgx#L_yZiMc2N-MV5U-`TF1_Oy z$8tN^BS*n~XmLgv#PBj9O~aVaF0%!nEaT5=2%pUjD7804251wEyB$9U zs52M}m0jC36xVC1=z&R&|3QdtRAkpr^r%(1CAl@`E-D8MDzqzu-lTxr>Uk=Cn)V&e zO=x6RnmYNu4sHSxCYVctXInNkTwtt4fHz^TcbF@~t3Js^e-D(l>s6a@#Bn&rAXVXG zlcj{&8;-R|ZI`jhGQcby!WdnmQO7;uG;8Pm9G%DLpaYXcxNIun91LNA{8%ScDXI=L zj+qtoeu{>-j^-G1BUr|#W}`Ntv+{%(W`p9o*Mw|h!m%ZvZZRTtf@#)iQw{g|SRJBI z0Yc2OCl++u9BnrxaUVwye3M~q#r%{K&-LCUed^y01kcq81p|2s=dB9kl4mU%DjU$U zWoFOj+-K#QJ<06MuiJ^upbvFw1svJFSchyE(KzSA{2_Ht^-eLR zeMjVdWlM8L#tE7ja(kZ3AMwmpn{U2ezCH3k?7V*qaIXxEYtTzm%^%%T9qprKRmtj-U)*0AU=ETsPOISy0(Ht z@2APl&&cw~JEg|H&$yVO=`#M)W}8*?RFS0|JP)Nl2-ByL2~Q{ICB*6x5Et0xF6#HE zop`f4*#+G^^pbW))Ir?O?bnx3mqzNopl%i2Pud0r zZ!}jxo?^2X9#4GpZni)7Odq>R{`gt{=|HsE`uNDj{JgR{G<^MwB&5zd^L_IA5hjAa zShr`IjpR?r)wbSR2URMEfCRaqvxKJfKH<^FrC)Uh2i^_af%`hkwoKpGxKL#q#FJli zOS9ofE;+ur?!tXJl(aThx)-kDE|JrD^d7t*coBLVqy~k_WMdR$EqE`s`xg|XVozI6 z-L|eTgAH6JWcfp-3(;kM{;s19DnzF$Fic$2!=4K}Stw?y|k5xU<3znNaXmgW#IDkc6h zD!e_p9yc252bA~;%y52M_43-19%unv%IqNdYYTvv*s`H?GLINf{s+!PO`keg*g>GUrF_;>ZDZPbO4u7Leo7@ zA35{6@8Z)!{|WBPN__*tlJ@DM`G1@TZtw0GxtRwJgoe7lcEd)z>qvS#VeFo+dE)hF zh;QKDa-g!bZTRAyOY21Q(#MH1qYB)NodCyvs%>195@&odzP6=XCG!VzH}LzewQ%Xe zCwKKEG+?f|v3mcvbL|)=04lfoX!PF|>?m zd>FFf%FR(U_3#tB7q+7)wA08@uWS(>{#2eNo!!wo-9OtRqhW>$Arke2H@MNePe1|> z4rLS`7e74>JWTe4Pu*M{Q=W;0d>K0%dTh2x6HQ<31$oW4MH+0-{K;jE6L$k1jR{{z zJ2gq}jV>=Ntt8!k-4CzDY@I|^ z=RzVFOK=w)9~hM6en0hcJk4ivB}Mny)9&T7r^&QuPus+QH+RlM1a60zEdF>0@6Q-^ z6MVY65IDPx6qST}x9<{POe}X@C%60@r!XEy7p|BnF0~$CYu@)iZfbc7F3ax;<_k>E z5BYMZ1TAyg%+^-*F(z=|FX4VNe7j!{OfLOWkW0j5DvE1*LlkW1@T8WmG!XI!x0OFz zXL3gOx;x-61lI!Bydqn$?;*H$1Z^np06)HFYZ1>o^_i0OaeWZYB1M?veWHs#s36`bRgb$c8PcF zW%R$%d(!(%)C>=eu1j|=@4i0;KF)NdfTR@J_-#456+4($`9h;_md>Auk)wgK3J!&V zw*!Uqvp+(#rB44&a|Q5c$9DvMbNoIR93oS}P59I?kDG~E;Gtzeva3rMl6N-TW_q@S z>AkDt5~8sg!&ue{?pGM=$SgsS%ttU{7nV6jLO#c6qN*vIEktYT2o}{H_LWx}Y8hN@ z&FNxl8MvQ0RIyZ4t8LEdvS}HdpUrj<(f#UvCaW%rrU=G=mJ z)pH4>W|fI&S_V3L^Z}ZL71bts(okV}vq{~zV7qV#m)1)#9LwAL+aX#YdPQ|~6~*zZ zqPkOk2QYOc#JB{~+l@QF&{f5KjFdN9uZQ$~AUHfk&%j42Xc>&_`a%KWkN`t7bR-!{ z)zgG>%bS6!ep<@m96J6u#6-Gl89Zq{95C`1)e$V9K~Z0Tv`ZtIU9ly}wBVTG6m@IHYSLMx|4N5KLhz}2GGjIcOE2{JD&D24J zhli3)4Rt=1=l@h*h@uC5SjX!wa=}1Uyp3B!wW&3A)paXYA02*&VBb^L)>Xpf%^s5U zm(qXR_ANF^g1xm2VtnX7Q7AvnpN5^FdGF3&Sa!&pwKv~_L39tPB?cW7Er5AFUT5@U z0WE{A6;>!&Q5|dZAh;AYC5xxwjKqgkNj|`1NKu_t(+}`bIOOvJ(|5!|7{sv%ge6Tf zucvfEhB`kH92PR)m0#0bX_7wZ1m@jwR8+rM;ex6w{L`zAyW^^;rdpwc@+z1$|1Jny zr<>O+X<_oA*D`Q!P6V%pLmca!-~Y2sR0pRu^MZBc&3-tVSo)%QFKDllbWl`OS2x*N z05H5o4Oj64@hYl|S3JS>INqY~R*3^8Dyqp=2*Ix-AY-%FznHKO59yqN$FoIs9?e!z zf99c_7T`6FmVtHiH_K#9!9Ps~mdU6!)8!*S8z@iG+pQpthg8urplDVCyJC2IH(tLu ze#<;m>610|GS0oKOKJPr{DN12ZJ7(Yplvh4ejv8c}03D{eJdFWVo&2o&I zx%IkWA|#2H0eUUDk8DM?|B5^GQX#?jM28N}Jk)V5ndnQpZH9~(l8!sC3x2iDIN-O` zU3N}l)#(JA@xv9|Xm)kzjD!TdK{8$U7uCuB4ndP!48h=T61MnpO_&r?GFua5ilp?R ztfw}ggszSwjP2jh=9{jUS*7B* zumAFrc@kGt&jvU_+l%Th{)vI>u>}D~Cl<-rv)upKq1y`o2te4^SfpKwaJ2u%u>LT= zS0{k(CT#=z-Uv?Ms3JZiAVlU6VVIk6S~S;&@s9?iP_NLle-TcDQ~^RQnN@zw0*+mY z&~Rxn`-+E{t4al<4)IF(h88wOhupXt1;37=Hb|%7XH}R!n{s(>C02H`{cRd?`SWJXHFvofKWnm*(NRJ`} zaj)5!7qPd+P*XEK;V9*r3EGIcUZF0Ep{CO%7XY1(Fyx;|+~o75Xj@&wkacyzHWz4RvjtRCckKype%aFi&j*nN zjjs_iiJ7Cp#1IkiEM%`xBTZ#e7$jh64bW}ZO@vB4Rvvmwb&W(V5dlCL<(`5cmx5Wa z6%$5suIn!y?2`3~{&^SXmC2yk6=LO%?AI0R@@Dy>Fw9WVmv-?Yg7*#7Tr-#dC~YCgO`c97QDGz@jLav)Yu)J4=<_o^CNnwAhVC^ zVyi{X703{FhyIB3pQ>r0bVTGAe?@qoDF4s@$N-AZY>R*73;CHPAhLiluctO1woWiG zVPRxZvWvB9=yJ0fk;To!e|*gx5TQrtBNSI)5#6tW?Y+?VIclA3UXP<%?0BlE?stup z1vR%yd1$>fj*mDuRSR%luWSMBdbg+!VnS?*;&I3?N30GMLl)>`9DgXP`&l~#4vd5x zT8l=nQ_t(kRZAW}7S-Vx@>-hXTZuIq_jeNv__eO|G7(vYG_Le95m+6YyhSbgELhDm zD4YC*t3EDNlGzrsn&NntSs%nr?86kNH+_f^Nc0~N1Tw_kP9EX}%EZz3k41sd2Rbdi zV}se^mir+X*Xqo+fNGBaSR*}yIFKMt@Z(iDhd=8Ue|%Bn|^n4CGl8M}g?) z7Z{vKkK38``JC`>ioHc;fZ>MjHCtfRVw6~X11$_Yxcx75gN}H*95us@7Z#x;hlf$3 zIM>w7J}!$AQ1kFC@tSjR503YhrW3}otNa9XF%jH@?R}N+O>qoYFw1Xw(f5cxzmUB6 z3@R6%wNUE-o(_ZDee)(fHkVJ}cfvU~S1^09os4*pu0REoW13*P!~e7qx1j&w8*<0} zL^yEcvD5DpL1UhD3tnd)`nIhB{Xn`s-hhT$1-^VquTb85tzCkuKMBiy|4$pPkMn<4 zq{R}tAQPjSsmZVtw?-ESKf`1GZtg!|R-DFg((fabGs>%gMAB&no+SrkVH50``G(7g3dZy2s)nSDMc@mquvS$Vq!VRw)Z9B$swUAvQ7 z51bPxlKls~{{ztf0P`keo5N2d!q9}#&fgiBoT&C-OC$Q!C)K z|3C`mXHh@{Wt3lgDPe8ti{ZVnyo}~US5fU{rvx>VH~T0--*<{S014S)9J>_N-A@gH zg%!-qPCpTJNLN(z*m*(?!XSrRpYS_S&i=#HBDhh(?8>Jld>waQ&)iNL`XGNillK;k z8wUL*rDFlWa;M%tMhhg3JO6WxwI?~(>y&TSD>zlRX=o?zmM2V+x)cs=m+a{8W}07M z-=_p~L}u~kgZkR1KAnl#0o}42fj23hXg6R_=C(yiymQSk8uuv{@KPj==u~xI{?yhc z-~O8$-$)w9DecXWeS1Gu`G3xKOnxJhI6-rgC}x#py6=-j7nF;D+ztA(*|)i1s4ub4 z{LP6dRbfr9T|fM`j@5539FhY!#@yHqz%bo32Jm?}56pHbnDP2J3mup@ zZD1jpmZ%*4m-PLZ(7l^~H8TdyUlHBZI&n0AMM^q8N4U^2o>KQ>AwHbFN63O3I%q!q z+0f+O4x#NFdf@WwLZV6Z1(Qm`&`Q`(mB7>yoRLU%F3gH*E8L?;n(Hq`b)VNWz~&gUN^8TF zv0+)~YlXjL@vJgELrIY8S_ZGz%zHzq2S^qlD31{eHJzvReT8eV-b>+%YT;8?%O^r* zbB|B}k|!>E;1Y9^oq1*KlHwS`d>vIF45pB;F)uLh^(iplasXI8T-=jL(+)6Amu5q^ z!=dW_L}y&d*wf5f29Y2QsFJ)H@nu_|HWR;JZ8??16a~qL{dg=6KS#C;9Ma$k9o)`Q z3e4$A=4+V(L#U4YvA+zlg(hah{<#R2>y=1^9Zpz58q;%UwWYf z{2&qafspV*KcUoqcT%VDa_M7Dg&OPvZWMW!1b2e^6gEC_wYLH?mRA9J`;2H*ez*~8 zosqqPT}r*X8`XWUyZZYUHc~g~;GAwGH$uPL^n0Q3~l4m1!KqgXgFQs z5%qqqB|?E5;jVt=VXpq=;jg<|!{C8-TDM(|6+0V}n+6-Jz4cwbVRC+#eTAKu3hTZc z_IFfavM^SGiB_7LqYm7f{SLsV9TS2VH%wS2cT5;2NG9~vJN=>w6fvL@Q}yz|wk`N! zT;SIFkpvxnhqqPPcd>ub2-T_ER{mA&L6=`t@H)ejaeo{fQH`X`#o6}o_y^ULpy|7=@;anvY6|cXC+bSE(kSV}2 zJYVtPfXK3o_)7?BsAd@x;@U70J|EyOCXV17z51tpq!*<8d8O#ZYaZ-!6&bv#1V6ky z#&bLgaVu=UzyWIu=0EOk9|pL<%q4F?KgQT}dXrh5+_8v#+N+QAK4*p6(_!T$J`u22Al!na72-#lD~ub@XI)Bn=Gw^KM(x2(S8b$% z9?Id=KXBPE%A!d*0;#ZRX|p1y*a{!k2Wfd z9SY~wF{%%fa5NY5u^t;wY0h-l-8X%`%frf3xwMhQsqxUZWSq&Yw?%BWLREYsnD~-`vrR@pHmK8ea zQyH6{3)1%m{-*#@3a*t{_&DjZwn@@R(n@LEaYb#yGR7ljDr2*vvd_H!@F(mg)}LuD z=&AWl9AwLHS7RD|e;26Olt0Bn#L?3(Aq2{<-qjt?of_H4Go43Wq?2}EeO*{Lb~f^H z{c4gq{}ZzMdHW`#y86*YPuEPZsz>!b2aPdFxWIJwYi8OT3>iFs8S<?^U{LJd7z^V0C&uI{1&C^p3zyjC{A@h*S zLZU^`Ew#H{}c427h0#S%sa(vu1X_H?Xd8aSPx)iN~~uOs>{AC{(piPB_3%M znWi47@%$wa<}5o~Yj!LgBE6V0|V57t; z2@7y)9S0?@6h}(iJD7K7*Vaid>|Lm%WO7z9S(5jz|FehS`HQpy6lK3kW3d27L3k*^ z7@d;5!}OnsVcubDC&Rmab4n8xB;t#qD4QdV&jOsxM>X!fVA&~c=lD+;D2%-JtdB`4 z_kfYGXzo%m?^Le&x^VZx;1MXBD@u6shr$1@_29zh+Tqb&8vEUVAkF;^g6^(ECOxf> z-r8NS9#ZaJUMXBT9r`W+t9x`qOBZ)qc3dV;rWi*+U%B_`+Lv~_r4bbEh0_lKr)lj^ z;)vZfxt&MRrSnhe1yJc2aUnw+mAy`s+Q1BUNeDvWl=+q6_J8}{;ZQX{LErGn&tLp=oyy+Lk7DJX+;3h~Nr=Ax5T9k1e zQfQ7S_U?h4wk`<IX1LIEPHvA@3o-@6?WZf*%5xo;L1!OrL&SnSXdnJ`(@b=HBll zK0x2?+;1Xwe;)&bp0yK)HduOX4-AQa3PKJgyLRs1C7bs6UXJWt>;YHrM<>nKJDtai zdF3Fx<*l8eS(_;#Ni0${IFD8?Yic*eUPZRMgzOqpbv!)DT#OOmmy&PigO>Y%e+_bT0m{J;FJ3n z>XzWA7EKpqhx5}<=efz&^-km-5OT}m@|c~ww0;3}xt%qU^&j7Nxh*$=xU9P!1-d@; zn|Q9ay26@+pRQY-pQcw0;0LRM4cmVi2N`P_VcpxWeeU;?*jf|Uu8UVg9$FCVkHxE@ zC)cp92Mc&DZX}9&>BCG{VK+h({xBZc;{#tt zmZ0*dA=ZL{J#a!q@NM@30^S)4f1p5U!a{E!Lw%p>*PdpPPn(Z&?N5Y=(1%C1jt|f) zpwGiWo$twAsaa^3+Q~)}a%x=@UUwSOe+q;?ly=BLko(v77X=2gZhyn0aYGQ{g>a;o zxj|^dlO58RcmmKFyjd5Vd`iD+ux7B1s0%*2hC@UBo-UD3R!>U^InT{P5--LzH&om^ z0+=UZC~>pa*9yEpk1UkAX^%9QxiP@)@i=qB6$j=>{kt!wCV99iE|mJ$tpt?%=M)>V zKLZ5b%_%*39SrqrG9{5rGrBN_oSxAGLeI}&OtR;j(oFYXaLti35QKMi=wT=NZi)xov3GS?HoJq;D;nv{+m&c3?WaLe#QJ1ujkEs;i13a{NaSRtoM)K==97ZVCI$E zhxJ>CkD_JW7(MmB;7>Xn79@pQp@cm>kuX^G+#zriA$s$`cHd3X6B+@N>xY}qN8K5S z+93N1?RI45F)rr93ke7dw)9d zP!#a$^yIK^4Nz^c7h<|j+>?LSfttWyaM_!6K#$qkYCf`OpZD) zcKgAQ0!CQ99%#uJ$X|oXFG`80pMmHPI7c_cm#ttL3&uORj}40m#j?MwM_+g#E-LS- z#PRGYjoB0@>LI&H+>`y0)Cc!F^*j{3N$i7T-803)M%VVk$Lc2Yr%nd@id=MsP0mdW zfKPr&-Ez`lXV3e3-ah;R?i?T&47i)syO?i)k*-PIg^%7*p{8eYyfDNF!fprIc<~^4 z`}p-cQZ2m>gKp~P$n$1W;g(jG7Y5IOmwPb4b=vE@A(7ojvI}ovOFcLba=ed)Q||sx zUj~phK~L}QpLm9ELq2Ry6W)KsN9f%?CI&rebU!h}Let?fNz#D#(mpjv-K1{QBnrmk z(D&WtyMZd*X^d+jX^i{$A@4UiutPF>>skFW0%`}4Ot;-;7l9o+h;g%oC(7FpIKDBV7a-?``%9__(HzrhQAd#>2;o;<~4$FI&>bx{3JQsH#B zOzCo>s5%cJA&VZ|5bosL(wkI)QTxYcy@RXZY z!bhJz7|R(WMvvmA0bZxhpNFU*q}VwE90dFd|F(mqysLXJ?z{)Dz35`>hU-lGJU+XZ zUA>a7{xAXBcu+Gd{2L;OV07A;J#RSL!0++xhnGt;nIV~OLTZj?o8hN72q)O=xwVt| z@l9ki{Ft*ou=8?x3g8P`y_G&g(%c*8`?}tLT3V+^)%)_Z>pWKi0oQM)lKi%}^OHY? z*bTGg0^vL^Ar0HXXD6@=tKpf<#VU^0dm}_+zN^udxQQ(6VcJA?bz$Xhxo*kTZ0>4` zKD2ayc?uQ*t5>8;_I)@~Pxf7JnMcB6(Vqy-%sX$Xw~**J!7WGJ;yoW1 z5?h0Q9QnH52KI&$hahS~S}tX8uDq<5!S9mSS0Z3v7=cl60~eRtyFZi3z9Bn{zFt8) zivXn?7#tFa?2vX@yVgSFwse(lFHiLhOVtLnT%s;*ySmn*TBW7B{VuB)2emlveb%q5 zyqEf1x1E8fhaD#ekjT~t8{f+oU*FL4y$*vXsI&PIO4U`!Arh%ryVDaX25m7hW+2%Ci#Vb zAKBYjPV&=^3QmH^LkbUQd-mbQ{2R;Xo`|5Xec#guWzFGW_~}6#`~b4FhPXZb72Jax z(zAZGlNq#h1A-sZ^z08N)tT+p)!T0h-)fi7nX`S-e;_Rpu-I?Rs`0yi~! zpFm9~OZu=z#L%R{-C}*8te@A(JRQ$!sZ$Tm?qk4oMzE`q_eWT+)Z_YN;c>{>=Ki8g z`>xgW9PYk!;o3z~5{liA{eeP`3WI%cL-e}>?^XJqXzr8x;h~X!{x=}P9)}ysErST) zV{SOO@k|daya71v?uF?|vA@xxQwU@w3=8ggs)$-jOiLib(}n zz&47z4o7CKWaZu`9cBEwcl$v){1A8<2g;iUq#XIp%jhR@{qO@DOU+d*l&Ul`48AUJ zmWx>{S0X9oH(=JieP2xL&O_8TjkTs(=b7jsoKs^KS9LJnW+OeNQ2;Ob$ZF}Qok!{V6exx05O9Iax>=crmN8N`)_>M$D3 zP-;+OMTi@MO2K`;3ZN6r;<6*{cq-D^DawER8h(B#$Br#U zZ}usJUONH`7Wb|o8Hr}Bo|;b*b+j#OKx7+t=?Q{d&MQl>8(!2u_J3WnXk6yhRN8-0 zfsgwp@eA`cxY%CC;q!iJJI1VV5uKnmLwFIU?f5shbgDo07#-zC-B{aIRhW5P^WMRe z_Gf6qY`HUy{n4r)AzGa&j8;vv6{6&QNw4)7GG`4bRXm%u&aHsC66W^v$<0--5_bLb zKj-W_J;w!62|M1upSMp}d;WrL(_M@!U1LC$_;;I|#oXYBiy8JezgcR_&f`mMA3upu zpht75*p;^Fx7*yu7|TP7x@>-}HU&pbaH?J|0CYK2Dp>tU$Z&x-GtQ4H-!Uq za|wuCGOQ#hR|F4gmgd?=YecR(>?j(RX+OfY82lx5U-la_BD&HF_8w2eJTPLe6|e8F zNz~>)-dOHKwVzzifBo3o+pts8!82?k4Kb(bl1q>!RRI!}0-|SQc~>Ovno7;3aeBj@ z=z}y`xhV5EHyP;bCKrnJu)YqF9z+3>#8ts`89_S-gZjlUduh*jsf(}r9+bHqx2TmU zOh{ay+m!qk>^XCGj?Dx(ZSP%`1+QOFm%op#$1ZR28-^UzMqs6ONf)lm~ zH!anwr_kUUbm6i1v6koS*3Zj45_Hrf0j5~UrNE|4Jxx{Bs14);1RuUHj$rf>DC{BHh3m{z4;}>7VyLf| zGwY26{;6Yo4cNWRFmBL_N9t0rTBf%LF_m$=>%Q&wLGC}Y1Cp&F=IRr}llCstS@YdQ zpf&7+#Ga4WQ#eGNSjvg6KS zCT7PI-FDB{9z#wJ>E*w9(P6LP;^jO(IR4a&{YwD5)N1>!Z22N5?4DHEr&HT$p}4l! zIbIrVqBVT`+@8q+lAZi8_7$_^;IQ(|R^@j)f{$3vq;_-)-Bf@Xt#&LYb~dg8&0_P6 zyGf$MVcPj*;R@JPQHU?j)i%+g=0s7*Le!gw4I&JC&YW-+0X9E*#$s8}kHi?l&7OVYKdS1Ng zsdwg}7w;~Ch)G63DylekesiQD^>Ma)ODS+`sV5ZmYN@FYn8VkMM{+*kP_V0o{pQS8 zcz3v^caR|?6XSvOVhKf=-nXa7=pRFxB!FBm3-dY31zhTXn*c(1N~+!?8-+pN!DlZ*ZH~ix$JPB&cSnp3@^G=YkK4Rd>74C#-;BI^v^}eomAg?_IE1h*Xd0+m2vN~{>a@m5aoMk z$wOsf!<6~rW{d{hB(OB=ynJ}nCH_Pm~DpoyE>_mYH) zNzsd%Byv3yl)_;Ocu(usIaVu7M@@JYcjLX&H?{4k_dfdl%lg4*bW3r2j^9e287C*R zhjiu;_(K+XrYFj01e-T?n>q2a;zxGpD#Ecl7}x~DUn~9@%9K1Et*wYA=VT52tA#(W zD=OxaRr+2mYc3_bj`8d{HM>F_9VHjW8DDJL!f8X+P7Yn(=Te;KDj!x}efjkaOhP0? z;b@s-LS=I}9D!dPf-&>Qf|(0QB*u>9`{j_sbzTqLw8K#0_ve_`jc$Dg!soK-(xFnnl zkx*8NE=F`~E^bb32*O7 zk1s7-2tU+kI{+JP%DRN~yS#cE-qQ^?@gySb+*U%Z$U?Kdi@7c=NS;k+lcAe49Tj7x zZHqACwDdUaI2hhnH_8WEDo!D!+SQd_Y2uH~#cAP!S{A-4-v2|^9dWJi-Hn_*2V+x~U+d(5Mf zy)M>*s3)$L$#=H#kgG;@u)dfgv5VUrHLl(0{-;J1P&Ok2d{bmx)1*2(S|LS$A&dQP zz|@IvuEXs|t@toWjgSHJQd`i=F(Q_itzU9zOXz;d4&fe#W5>sQFcWQ5d7q0GghiF( zkrc+wJu~p0mH#E_*Pv3Yw9&ecv1byI#}-YkQx=>`OyC)0`MMGM!^t~~pv6~iJ*XgN zz{K2%x|%x!YlMKdTK2{$w)wnizZv<3ThhBfERV3sibHK@#@ z=V*f+@!872#wU_?%f_|!O{uLO4aeE1`IP?7-g~}R28v8VdCGmZtXv|W_upcQ33E;f z$;Sxw4e}4bGWc6ch%{HVjnGlQW#K*Nd6miUN$fm6%%QSHn#qlK<=RDioia%K?$ihUL0!EgrE{c-TkE>%+}@t^#MruS=G`_+)9kOY zHFUdJ8rO8Yb3?tPyT-*OR7~vbJG8(SnLydF%u#aFt#GTNJ6(%jk%*gk{jLvABAN;T zAEA6!*pXW?d)k<-lovv!(*2<&M)pz0SiV23^$dlD?uSe!!5j&>1i!0C4^(?|MI9TM zSj>54CYh~^@xF}-GI0VX?auB3B4Rr$&D6lv?5ZCsY;Y#d&i3C~h@^>~xz&;p4+*~8 zR%K4m*HXPbAbb&oQ-xE_lg?E8^BG+aC%v?|cFmS0=e5^3vDDI>3fK91PtoelJ z&lo-#+bB(@OdCBeHeaG7g-y#XolVUaeP9Nz_|DjRes!fvcDJ2nZ$?;rJ;lJ6O__H7 z&BD?63d8C{VN#DhyRpPJNh1okpMroy0TF(S37{!O>L}B%9WtqS-$0s@M&>)7NOdpQ6Jy-o47%y9#o(4d*&`Z~RHrPSr6qgS|c#`aRA&cGdk^xb9; zn>4g@t(h5zZI0cSC%u|7v9lY&t;3b@FBl0h{7pXmg1m}mx-*c67jt3qvbvHhMp>7V z+RPwF2W!ZFqZx4?I;$dkuZ7|r$U|Q9QT>E@Fux+nF%fG#fQnwZL+Nyf%DAv-yd+UF z$7{+dRu5A$(ZcHo0~?{5d_I+#$C#yEdt9%LGtJ1gMU7=;CJt}(a{=?g9##X?RXY|WUa9+FtMc-9_|76XNAXW8Y9g0`bSahT|_Es4iN=G+5a~u@9te?baGC+?U zKF;P>r5D8GCIv=U72`og+`rvoCPt=vkWYK12PX7o1uaN4}l5kYrehM(^$pl^Gf%?-tFF@7!ScQdwocsTl`;m4p z6Sn6Hl^?y%wzm{xMV)_Z+#N>mphmKwEd4bM z3jA&?c5KP0{%<}3f2;XMBwU2`xAJzw=B(1*5tHuox^0hkBN@#qWScMe4;K||Br_uZ zW23zVS&{>39K$OSy!QU;KBDf`DBFMWzkd9}O8hnIajtlbMY?Dj`8=&Iz2J?=x9>Pg z=;U9pnd((oFO=7DXK7z>xKGc1^hh>nCe)WX!6FH!>&d#+&B!EGN}5vPgaC7CE8n8g zWtFPL81@r0Z%MF6ODBd_Mz^1(!i{ul5;?$*o z1xM@1W@kt?)ijoro!6Cp+LqaU39l|>n%4#gp8t8JwfvEp5{ARP|JQgfgWU~(QZ`qf z>4{VzOw@>&GK)oTZexFYXC`La*3Z>;Z+mSfm+ddv*h@){ir3aY{D0ybig&&7Q$}O>UPNExsHGJ?;t%Kb4sWg z{9~71=mpvbw6r+RX)dRf-55WLcn%9UmOszpx~L-b_D%N(!u6y+N*vq}!Dmy@(|?2W zjJJ&hYD6;}7^F7yyniS798 zC1>C?_(AP&etib$XrSF3uga+W*wasdimnl3FLyDK^3N?F{w3GJpU?Vpj$pynpMLEh zMkWob8wgL(un)=(inp{Q$pLjOQWw$ABiWEQ@+_sPX@6Z+c=jH1WgKbBw9rYRTF!9 z4HIN!ElxRP35|6z$fw0&*Zk$i)IA~nKq0^#1?$(aD#5uE<)}Mo>zDVyvfSi|o_DnPqi{qU$ zamA@>{0YJNevgytPg!3A`eYVJ4jp7dabt7x6Z3bN;$^-SH-6&yh(KO~1&tV+r>|*t z!FPe{L$OHk^Rr^%=B!)Rq0MxwS9UR%bNErhShRwA!*>Ck{YeyFJND*Gdl*u$-C33@ zH?g&aQ1NV{r01*UKSAf4KjA7(JGrO2&X5g{U}0}``fzl!)f9h z>LaEI<4$+=EwZw~!X#t)IWA7`zS83xc7c6f{((0l>pA()1xx!fD(BWcSvfe!bW({% z>kAVoO$-m@KY_%B1A*+idPRL(kN_rA8wN`4;ESNr#T*cj(;O3L%Cy+MFW{Wqn`r57 zTy)8rH9}j*Wop~upMZo#jBe+K2tDfVV+@Z8M2m;wr=PI$?^gqt+$_uvnl=R5s)~x= zCbZ4m;qpa6rA%R^*)j4zY#?JTeR3Lgi0t2XW_FNk~h)X0zUEH@gl|NEL zwfUQE^}UsVbjB&a1*R(R(zf3-JWqOk-!Csm@k{jDtW0>$o0Y2`jwv{E`DQL1 zS!+Jp@_f*6dnt4F_;Ft1+}a^z2>7ggOwX&tOC|5k#@`gVqk(Vt0=l{KJE9SEGQ12a z_aFsj74?f@JT&`fKM8fz;aBdL!z3Tf-qc05)HE$%T-%UE@30UGD;2!U(~kMNn!uPE z{wJMme5un+&Vo(l6)=`86*pgzg77$$Mjvr}OOl>jHkcTw zD6OnH#UoIsO|7ysO>NaUA0RvR_APngJE08JIZjuA3(3^PmaoQq`JDevEq zg8rkK1S3Eybicui=XOQ(Mj0Plu^wL-$4RQiXzCBVdFS)~6Nk!uwzC&M-KFfr>taPV zpm2hCQbs+VnD9wMTQKu5)uffeOVDZY^YUz>54N?k9@|N$y|U?d6eG%C^UB7^%hz~x zNAQs@96YPNTly?|7U@&cZ)g^x6l&EKEgZ-VnwO>CVc7Lc5;al$9wcZiB+8QCYR2rm zRxCRpMaPN?^ehoIQ?{JAdAHgSlL!k*kJop}EoMg7_?4v5kx!p5EQE~Nn+3@Vmwv6s zt7xhXGDWLRl#NOleLMU4mBAZF8KW%XvCm}F6d01crJhCgA1TQ7G47_c@NVAbFSk95 zdT*bTH2;O9%xt>?2HmSzh<8mR*X zx|x?XH9~)9Mq92AV~RM?>B+eL*A41m>ltoF7z?+nj(i2M(7eOTmXbu=x! zYaK>a^_GVrS69J#V|PrtI>1-2Z8D6Dv!{f@7X5KL+2_JELtZ4ZHQ4>;!&C$57-rV> zXG$=z^mEHm52;CFl2!HPDV4FjXE3Sys}#ayu)9kp#-q?~$Q2oQs1V7mdQkDeicGe{vMO{>+EBQA`k#?T%jB{pSh|7L0!txi3sqJ1ap? z`M3A^0zw}!N%VsUxDnOhI+g}knNl(E+FTUz^yj>g*IC{CZ6)}^FKD`dMv~C+!dCE> z_DEx;MA>vQvgXHI>f9FXQNiFF8)6P;>r7v5GJ^8y{N$=~C-#BJV7C7QNkF#0f5~d9 z5>q5xV^k_vXIk**SOxz=!1L+^8m|)d1#plKJh@m}gf6YrLO^7!G!Pixc*f!@%PouA z2~)>EXyu(}4)Z+hC-9B+I~A_7a4FcgZg!IW??MZ^UG#3dIU@&3MG@)cddQjA4cWHf-CJl@EOw%o_6 zWXoO6(O>3<>u&Y!V-2DX#QtR$2m~fk1p7+;8HingMV3V}GHj5Vs@PC-+Et>zJT*_( zs)KQ{T*m9`s0gA4<9U9?3w2VowNnGPc}^_k=RG8*WuXQ>u5Y4aGa5Uk$4qeT$j6r4 zGfW?pV^nG8vKm{?^x2H3${e(h;Q(?F}ONE}L`%ZJi9xo?IA| zSwaoQ5rz2?W!MU8ta=`THMN$i)iyIBBp9W| zSH0<~w7Ff)kSK1J8+dx+FifXls#loAqW&&}0jV69CE-0+uT>!n#^&efLzW0g<$zV2 z*jb^!VjW?yQt@;U5N0VFx_#p;4%iCTP81Z(lB6TEowkZ&()jrypm1UYzS^zD_I_!5j|k#T_>?LD|6Geikc>oGQNz&nnU`XB-R%)P`+TCQ2wYehbtg{=9CTFJ2OYZQdX!p&_A<1Up=q%YTVJy??7pH0cvahbwdWu|x_^fE1EKR<&+} z%ly&S=g>WlT%CgXUp3@PHgT-NDeer#0`cW#SVOgX{x}i4#^iYbPojD)I?R6b*jqIt;UY%|2b z^sGulfNFG^9jph>N|gH9X}qf>F7h3UU>(8=H?ciw{G&z$ci${UqpecI0 z%&9z#VAi*GtI9L-2~=Eg(0RMnH5_+Sx3B?d=bUAkm<7I>zREVX^*#c z{6-Mo857Q%%2x`adFNcxFK6+9a^QT~0cbm;-_KO~oWVia_enKzJ6@?xo4r<2Ug&Ma z(hpI2zV=#%kB>9(=Kes)Gd~wV9>a~6H1tGkx~V~3Xmel0eaJF!xkZifRS)MSJ#|7e zmWe0!5@wJb4|%}K!1|1tuM;^Q^2oH1n?%w^MbRxD8d%XAU5h3|j)_!J*}B%ChjzVW ztzAchws(G%-5}`Z)Hiu8T~K4`-C6d&&6;=%_{}CvN_bw0%ZiTQanCY@?}5VSbPjac zC6T(GuHM|m716kp!+H$=>bbMWH7mYIP<`NMf>%5M2pex1(^J5zUMRPyj*QPaihRS!rj3@tRd;CP}E z_T>yev~^Hx9z)B6$<*|IZoJhTpCOZ5>HK0{6dW1W+iV3}xPWOaSq0*annlXfJ8bwF zrA&UScmgQT%ZKsh?4;bc zsw5QM;6`$$W{j)oT`we*NBI_^i;opz6B2lTNa2#;=YVwUl9ou{e$6lQHy>Gu0Z&??k3t z!V_1eFXp3Lq;ue!gCDCwMRieo0*CvEtU|#x8@Ov0=ISWem0e+-jwfLLqqq*K&P20T zcQ+}R9a|tYGWUxrUz@>?3=|wgK^c%5Z_t6onW*tpRA_utXGvul1!zA>vQlD^4tvkz zpE8++=WR1KE$mxHbJomvB4yAvW7f&kxm%aq$+qt0$%5w{OaX19ziMm+lZR!)1z|4d z2yCtpsDwK1DAcAoFMd3wtrh{_BS_tf5cJ|a+>!!n4o(7-UY59>mww4y1vywv3t0fB zo8smfB>+uG{iX}6y%f+85L!<$7Hl#6UqZqGPnDXMmsm_45^*UyQzhkMVZCFsB!p1?Y9hzys zd?AGz^IplZw}rf1e2kSh_;{PMkJo20=8lY)Tjn!7z7}B0cg&blVtB>}>)K&A0Aedo zhLwgAM_n2nM^#-ye(*I4N9;mOxaCef zqnKe8z@EHL)?5_ZC~`4OmJH4kOU|84C+Q3{NySux9uATWJDC90rl}u)wQN>2B^;x= zip{{IYrJ_L{?_O(4ES1Oeh9g9CK9MA(@>t?KI|AB+a2^~v6Z!XUh;HthVP{?`h-zr zu?rNGmh9t;0Z)6-C8j}~`y$?>Ro;FDlSvxf=8bm}8HbT%tU8Hif}KJe8o+|-ls_%w zDQrGUVv5?K*;Y2BWo&^7=!t6#r>*EFi3Ne*m!o=%mem1~^eE7b8KCr+!aG zaCm(*ff~IM6>`ZlsLjnK|fd;Fa|YX5uGDP+loLk+j3^`}rnua|zhp&RHyMBrG62i&39) z3t<5fox?uXjX4`#ae9cxv4!hK@~tsNuRh1=y*qs)O=AP^>7}i{IpHU4kco^`CNfeH ze12BGF@Nc@=OvHGX}(U4rC7Z%dl+U5y%#VHGI_1Tc-Si)US^r^0j6u{`Hm%D2Q*rw z9x@IgjolyDN@JV~W^Z-)cw?{1%R2ZLAxk`iKE_rTsy@w>D-~S4@L8)G;?O$gdiE%m++@WU$!uC{PsFqVk2b1)+B!(k zFJI3}O-m-+RFb%SEs2mrq`;Ay4#Jvrg?ciIuz?zlB+My||M;YPn@yv{s3s1q(`0+k z^*nBj3uKnm4qOwYC=P210+kkkn<(Qgk%Iyv(+zd1RxMLYG+8QAX3JSjduy!*S>GWCowdZwpGh(3pS z_rHXB1* zZA(8V7K^>$|6OX2!AyA7!f5+q zNUYy!i&<2OlR2jM(b%OML-4RBxZ4zC89bK#Kf9+IWp;=%Bm-IvnIRG%lgpY<){QHX z(Vz}H>9z(tof#U-j#Gdn4NjBZn4V4b>`jTu(b#>FaYCNU_KYd=lx@Y$B+h|IVnIga zV!8&T-LyhZHD?Y{m5k}Qm~U}7P_=~`1wF}{}FD4vu)^p65#>tn?4a*uURyjAIqb#|{YX4|?f`#J*tSuP=A%QLZEIyX* zdJFL|*L855IRIYlw2#RS7MpIGPF0n>48i9hf!S?uO8^D3V&tVo(Dw>t&EdBWMMl|l znvot~)hIf@(?G3mzSPOcrlVn$j?eUjLmaHPr{(kqEQVYP_lfX#PM z**cCE@=cOJ(_)E+kA1C$m=3C-h7QI%Lyw*Jh*FYBPg7!#c^q4$gqm?D z+at#c*vcrN@nK&s&Unx-(L|+x6bK{zMUG&qZeW;E*1rE4IMW()btG< z!g()tu1FnI6PLxW8y6ge;EB@)!Snoep7l(Tp-B2FThSj$GiVDmF+RM~}!?zy7P zK2bm%Zl1q~FuGQLe9~WaGD>3H_1ue`K-GMZM~25lnroUa&b%LDFq4gWQkO6+zDtH*@*zlT{S*sqmitsNO9IjphNVEc^0{9^*r8$$2VNi zt>1IunbA*-B)j*qdn`Ulnw;Ye4fB^azp%X^%L&K`HeK1bEA#gCL*zWc94wn74U54G zo))5at1UPQ{e<5!vc@QYT&IgAJ#paympJJKDRIkwLHqCrn)0#e3W_ZzYd}u40;G8v z(pYw(iz52TAKWTyU3`A6U2EbC)UbCE`3WXAK|sAwg{>X|q&7snw^j{eK(i4Hd0O}y zIa<9`Zq%xCx*Tk4NGm0x6V(vd#eACpnm7rFicR=kf_53qm6u15#x&?Z?UeJi2AjR8=rE&ermpXE^Kd-H}upMX(&=ISvm`H0iOB2}!ioOq{z2a=Iv6wJ! zB4J*D#Ytf=t&te^%@@OXF-*$WzM7iI4^~TP@&=z*)zQTF-N@5ev;*wtEnZ{P{YA3_KKF2u@x_w@7QM-?h=@7!lU2(Rc&p zs?3U_1DI6JjQgey@O^Scg<(x97Bdp8H~q2QOc7w>5(I3P4GfJzkTF_DP`*L|i47D9 z1-f7|vLnw|ODAg#@@t7h^9;?HSYz>ctBDpe@k28VFIkRN>n))R7A(_W69yu9fdnQ= zI`E4uHAe?ddU802U}BE9>!GNg!vwN`IRsMWiu0EpfAX zC=mi70`2M>cdf3So~T79$chy@1RmXb7-(e=Hm}{g$jAkp3r%hW4a2U|Ga*_eouds1vGS*}J2aJ&J3^6_O9s$*i4HP{WHZAGg` zWwoeOtIpTL(S2NueM*>St#0sEM?#K6*as)&V}+Oj-3SaBlEt95cm@aun~$yA-o{b| z>!d>;c{vj|=VI0ZUHJSWejD^RF`duAa#Oy7c9G=8Mz-=VXgq6TSDioRpcY^2M8s5e zx^_ic`4YdkJTxy2ZDDBZRvo@%kO01<7IP+Qj1=Zo34SN2Qm%-I5n4jzdox55GW%G& z(S&4(U(K~X(rQfyEvqF1OfMXb1V`q=uqJ85d6=cIP+?!wpkZ%3QAM7CAA6mwg+p;6 z!hUl>?2wjLLWTKj-?zcV+cZW3L#DxS%v%&K+bG+CC6${R-HrU1))>rDt?>? zc@bRsgCBk5%w^%5m0G|`1>i>&aCJoxXdRWVaK(w>9q6P~qJhJ5A>w#0NL%@bwt;h8 zHBl{Gz#GR=0&iBG1fI`2c~MAs>BsMUtbaPpjHS>&UbRUzYq-`hrz?C?lt$0QDOABt z>8!jTYsMl0-$WH4`=srPC;_!kPCtwLtx$2E-78x8#gla3@ipO!^kBCEBavznz(J9M z6IiR~Wd}L0?amKY=S5_FssK)-_QJ~u-Nbi{OSqRD6IZXbg_ZEj(-=6*E6(=P_hKEC zw)E?u_)Nh;=q1WQnRO{q0c+pa@tCYRfML*6xWH{)l`lDY;>`n|<=Aohv6Gq85uRaF zK~d&O*F5=EZfyj>XlC(E3f97yS0~A;eXCl^4q`RVvcnLE3-p;58FsjLR}lury#RxV zhK$z9Wy!5JG()N2AU+*62li{54Sa4@rU3C`0rIbH=j)hfJ1y^yk5x%i&GS1W))S2% zj(2hD2^|49i7*ai+N_biw@PKa!4OXqcDp)Ps2xm5TD93}c4)#u@^J?n`Ziv|f69h? z%pC1FH{+xdQ&ln@Xt86=9XpsJ-)R#lZcXEY>SyI)_+2m!`DS|DLK_?|c(}WZ*`$fV z4>@M1JsZ^gc3D|J-f2r}UJ^68JE~h6H%hnooEv5H&V90Zb4HuEegOVgUTAJO1k6qf zcLLHHSEs?%0DPVPVxCn9QGj2W^4p_wYcEl5E$~wdZySU{m#AJG0KIytGFK?W8ETg* zRSjFs%?R7IA#I5*J7ZdXhOlJ_ao+fsq(E+UwVzuZXz?|eE){U?428vbYE2bz75JyN zaET(x2OC~(8UvTk7dt_1*{zbeT+eAp@3d047OA$Es61TiN$EJX#<;qkhQ`fx?NraG zTql&PvsbCDXQ(;PL#cO42Sb>?T>w|4G`iyvhl3+_+86!$z)wB!r0ItAD0O39;!&8N zl&;5)El}+n()FhRzM@8`+qq;lsI@LdFJKB34%3dP4A{Fxf=cv*Ve#}Rq}Pzyp!3lE zQ>I}Q(J*YtfUZ(1b?G%d_-pC{<>3y0H8D)1s6t_?G_!D!yFHK`O+4)Ve7!WEYFA!2 zt!0gdU;D!DqLBR7JTE%>*wpGIn}}T-@>n-qh*>|A8v%E(_rakhZ~if z5C?w&vb$g!w+IzzQ1~hp&t2SmX@c|;OObBYbRjRx(uHXig%#oD8e`b5QiG?ZF$#$W z(G3xK>8A&&8a+!4MI@+nYeH___q_9dMAweIdR3bnjQ20J+5-=-C?HI;~;BD8>+3ZmF_!7CD)wz|GpRt z8y-8^3@iI)O=wMEnlipUa2VIj$b4eu0iummpH3dmz}v>r&yK< zSn}d8QBx+3ISO0wO71dJqp7l`H%DID4-Zid-S)#7g@dYY=*>kc6VEv>cIRu98XqHa zZfEoq^%T~2^5d}=OP`xD?scmndp`C6wku25t5V684^ZatP# zKc<;XO~C@1 z1q5Oaw2P^k#YCKk+r>!>_!6-X`)s!6q_Bj7R#NfG6<WYJCQ)pRwU-v?A6eQGRDlXi?nH)BXaAKGTVLyN1)&=q7S&z2$$fN=*xt)25GX4S{*-4CEHEpp)AZc_cHc8 zGdL_;>7_h-%}(};L+EnDuIxQ5Q%MpZKKqDdv4*k~QCxr}C>vJYXSa~Ka>w8tW5k7pLKA$xk7fjOE34e=70=Fio=+X*_NK9C8%7e3at-(T$N5m^HB}G<~);Cnx%Kr zid1%KNiJ4dKb2Hv&$X|t9xD;0R~1=ZiPA4qKKfjGntW_Ee?+g`SDZw%mzN|_)0NUP zUZ0ew2eT!}y~Kf}rEZ#V&{5U+F$!H+7Kv)ttKSn&@S8Avp9+;^WrpsOD)|i=wiDTv zy!Ijcvq`?lr=Z`=!5dn?ff}a-kea6o3yO3@`GO*+32slO=ZlBcTFbv>36w(|9_mf# zbFFJXYqlwC!SJ=DqR$E22!0mc{8A3G7tbKnH9i@3_rPl5hraQ}8Krg{4#w~bm(iO| z=a}rgDPu#%HJ6P0ipJHzX~oBL_CU<7ofcoXI|lVij^mFvKNaZ9S7P}t&`i6mSVzb| z$fLBL3!h|Gm4BS5N!Mj%&vyA34xy%r!<4n0+NWuePC}=sJgBS)RgXGB=~4AgL=7E|!qA?j+$ZghQ2`8KGI>O1^B zV@Ufe66%aQx*`eYxRe#;@97G%=yCs-Y2LAjEB5HOjRWOeQ<0je!a2g$sgz6xhDnrF zkS`yF(K6xK!+(9&dF>z=O>jt26tN|%#$UL_iT7ApSHPT zZoKpqL_fpop0b$C=4`}HgNxPIiZ*l!xvquu7ADho9BSsX>|v+R=aisQM7JUfXHp~VF}9DY;qy&Gt~)s_3Q@X`Z|?698NtMC!mIL@Y-TtYmTo5a(zJvhI%+W zHj*k^k4yN3EPFV~TwB(xDKUFxTUJsPv$%U{tbf4dc8^kB_o8rj<7a!jPy#Dbo}tl>vwN2J=bLm6W@h(g z31n@G2{Gu^oGVMUlgSqTGELU=%I?(k;ZB3NB)jvlWXjcE4v~1?zgZ5Qx1PyvaPw|Q z6y5!IuX5|7H679ifGnr&N0Km>lf?(!HclBxc0Q&P^XCNd=}=CTF=CrcZuruA=;T?O*qW3(npTe;!pd!v{`wL(ZbWB zIiipL#{yVg-)DgmsHa{^+HF&wdO1>7&#Y`)JVEmee^lm|)Y6NjeeUH+d!<`sg50R) zyz(uQNP9(F#HRhy#&js=(pZ?0GZO?&M zel*&&)$GcS#*qO3M{CN(muuW)<~a9_%uz)vnOkO^3NLpqs_Qj4lHqTa{x<0E4E>#^ zzpnxQ02R6S!oNdmzd-!}^#klehbcVX+Z2#FM|>XW|VVJ{NYoD<$XOG+VbpTg7WlY{gv<~iz_X{A+VlY6evHWYRo&xAMI zermo5PVZ%OIsLHSRyC(Op-=bwVmG~8YN#2-@^Iv7t@@knC!T7r)|nLLl~bv@Cx$j% zDAjI1?ywPf1~gG2s;sxf!{JM9>6o!6 z1oBADdL|gG5T!a{b9$>K!xL2g$Zn_CvQPs{t=7BhSZbpso)j{{*0PMQ0IqT805EoZ z?1bk7{!zvEA+UYiI7znlrKOy{T}bRz58qx>7f+evt-6r(@KJIcB=7pbH7uMMO!d>A zB{RI7qJO6|j7@CpRy_S{+k!1U{UH*uP}=2{PCJvay2%xVINODrGDIW`zYy-?&}pqp zI54S8N}srf$)9^btYRb6zE-KuBTA!cccr_EV)hy~TD zB~>}>skO^SY84yZ-=fHJ`-G$DlD2@PwoJ%&MBh<_^)c4E1I(lsWVKAMs%KUB#y+2_ zv06?@Pe7|;bN>)a{BUUN#u|}K!FZ*gqq_TwjL@=Ag<{VreQFu*Wv$v2O4$&Ot!^6| z&iIr&MUu)({?S*GzvQ0v@_52cZMIEnA#N|2;?3@g=8432gboDFre@(YgX-G$w@W)_ zbqkqos4K}xr&%i9u(30E=Y>ktB)x`HQtZgIMiel#=divdif@N@GtunHn(6gNmwPO+ zgg|a_R=ONkr;tq9YT)v)EJNpL9bC;Cv*#{atkqLXPv1BGvS}8nQ%TVu5 zsyyrKd`nH4lzoq9wc|ZhAGRj)dUdBEhj&7}I~_uDC$!AHN)3dEs+-EwK)!bYN3#o< zuxBt%Y~$3av~$Xu(({Rxn~tltu}k^)@^`7^4d`7?KS7?a$TExQm~_gpJQ7whZ`a!G zYent9@R{TsZI}c(LL=R{mA-+Giq}bg(vHyTzk#ZKq+QkA)gr4pTI>0nR)yBm^uE(2*HVl!X$Gx+0g#AgjhO7UyQIO{6aM>QbRVR z2E3EWJ^yo)6p35cRf%@Fph&oC*C>p>h%p*iFZ7eL!1r;f~5wsVC7CVy(r&ADq+2yUUZS=N>wdn8l zYOA-Y(~Gp1KU1^ryV#wJE36LfT8gH$73qO29n17UZOW*^+7*?)Te8>?U0My)n!99; zQm^-o8z)ySeb$w}p_45%ahK?t?8|~?N*4YoY+tS&ugAOi_JvM%*Wj{ZBrgkDGU`_} zt7-6dt}iJmrE&pRM@RW#^(LYrYiM$W`*8jjms-_T?|Aya$rD`8v-fr$&ygKEVV`rz!?Hi3< zOulGqo4f*rW-HRNTYcRxbb#Ss`wJbhLfs?0?UFv0vJ&t#@0mUh(L`Qf$tCtY&SJW*MC3 zixO4=x*LZdL|D#R2voBmOI7V z^wTdJIcYz0EmLvHsV}+Rlj;e2)*`|6%&i`8uSAj7JrAw8kk0H&ODB00n5B%ByZYSA zPxo0?u|5nsUqAJKFtbR{SgtwWVpahPBt!=t>Ni zT+P)_3Qc^?=30|P%Vz`a1@hd5rE2c51c}uUTq3Bg92A1%#$)5A7BgF#EVFIJEcqs$ zgfBN$mq=(?gIm+2@iePkkz3U8>QeGbT3t!nh-Q8C8I@*?b-!dUk!t7C#zXEE{OEp6Cfr=@KuhUJ~!pk8?Aw?dH?nR!#oA4y9X zLxagw?Q9Dx4yIB#x4aRvWR~fv<&LZ+r+lHkmhFnJV8tx)$O`6hM@U)HGu#mj;Td?p zoW9pFM?#CL@GflZBBGT>-|87ObH-|NzsuZD9p9E`fapPdPRC%q{6Is4Xdio)ADYWt7EO!=%=|<*SDiaZ|4K# z+6%64hu8K@O0K(6ImU1SpF zCf-2VM-AlS=+=-qSv1thqYvEohRo2O3B|fS6mra_^a|gccrcAkNn@8u420R}+XP0~ zHH570NZS!U<;Mty@Y2}AX`WQhoxUxcuZP>j;hb7-;!qCernJRjd{R+uNfu+pq1Ka`EN3@bCdfRfm61N>Cx$$*w50kOpa4)NXtE4 z5026ANar~2&4;Dt>CcVOI1c7tNb>+mo8;Nb<>3bx+>)U9B6Jl#d0gUZVlHcr7usn9 z`)Rql3rV3Kw{S3r_@$Kp8uNT8dFgGj^qr?d*1I{W^==EQjlQy!TJP%1s*S$3tXga9 zsd^9t->W}>!jhx{MlZ1t4bmfEJ6G))`|!r8H)W<%t9#mEW}j**dFdsObX~cgt1RJ8 zt_K1~%ON3!6^*p0iHmIB+aQZAI{M@PgTwU_*AZs2XRKU0K z{p@eCVy)3TShUg*mX+E)Zs-&=X!=pfM1t(@7wCT?0(Kz zCzya`-N)gH?w>jOD~fI|C|i=+flYDGyP_(yQ-#bfZO9~ z9mkSQ^JL*xy&q@xoJSrkK3M}GE$R#piI4z2eJC26h1@RbOS$8oxLL9Alc7c4pNA{8 zR{E*7dqgF)sQ-vv)V~Fbm$J)k>@}ZizY6=gF21P0dnJ=wnY}{z(Mnamw%tN<4Oqf{ zVa(sU=?Q1sNI#(BzDk#V?*UCThE2^|%?Yc3q-}G#!w=bn_WhHd+KYGj&#ZKkE5X4f z$Gg+(_cRP7gzVB%-9tiBFL96 z%CemK59(Fj!IIET*1Eh)jQz-BPp9~+!;mLLgZQVG7eD!E#yA}jahXvxxV+SOgDOv& z55BaLEWa&AWK`)V;dM_eJ-+++yM91?sj-K}bj`K48gA>aHEtiY`SR;K<;PxTeeoDY zl&Y3l<_S0MGRr(6bG33!v8VjDzQ))xzL#BcD=240wB^K}mKIBFEtc75$LT1qbPcmp z&&mm+qeN*AF1Pit_GqD29|fn6mK!wZ7uV@-bH#EI`K$ZF;G#?H<&{f|CGYKYot>5P z;WI=F^^4H1akLPtVbh33evnp2PzS^LpD-6X3vwdh%Gmd0zAx(5e$s~CQcR_$9`;$c z#Z1-ek^Z!LhDP}EVml-J;PPUc@j1A>c!8O*#jfv0d1HUL9YZe;IU^wo%?7Pb*iduk zoGQyag)L{BD;rz6Tn*uLWW;0`6iUBL+5V`wE@PQgMLO@x)Bz8rJ0m<@jrMPxo)w#7 z7)o^sZ`m$ZI$XuTdY^ZR*>EBDrtEvXV@}oB}5E#1viwE5u@T)7wv7L-&Xp>e%(LdKmuRL4S{^ zqx2WtokzfRlw3zMOgri|z^#|giO*uiw%oWYNYv|KjZSo9RhHAuc2a5g014G+UwV3B zxjxd#P};i2uB61jF`*vFGJbuM+WI26hD0z*?>B736~lSoBjaU(@EdH|?-x%yc{r4F zIC*aCa}Z%wR$uI(7T&V>1*PQBcZ*|{4BXf*BdDbjR(I4kP*7JRV}fQ8{be^>25}Bw z$x5 zzden|tNK+owcdMK?Fo*}%3n!KK<;IUCBMZnIOU`@~H+xlhA z>U>*IG!DykcT-8{Ve9R-k*&LHu`)Mx?J4>#<)ymt3+>LSY{aBEIW44OHJxIj8`Eiq zbmh{zZPQd8w-Vk!C@$?`J?tW@!^|gPdIGVi#f!@))9p*pu#8t(*d4cx{vZ=)qnm3!%9CGf8Nc9d6QbHZuCS$#blogpsr8K` zViMH-;d1fGU{iUbl(ly$tyrqo-$h$ZUWc;!uJP;tR}{(rKS?TJ)TJI;q26qy}sJOz^6#sbsqpvTQE$FxBj;wo6r(l_0Ixt&jP0bIi8cJ*+Fp^-a-O9i1%7 z>52=2ckA<(N%YgUYOGmlC-=$0^zU~`trgekI(cCST;b<^s=eS-HWBwuP=EJr;3xxbkD-7~H6_vHTKPrvui>;F}C_Nv^f-dt{V7yQ|@6`dRK zPY1!z^laU{@FTg+Bdg*2k=*91@9OGRo3HMG5UaPtpN{Qay&d3$R5~yg;-R zTUP^iJ0x&5m)oK+p)bJ~61sYCZqpln7$a_{@Y^ZP!}Ry&H4yG=9b43v+y;udb<@J< zGzbY8P|~?t(vBC_*#O(OBk(60Skt)?^}BqaO% z3*fzu%Dr{d^FN%U+@aQx`v)jDYBA$-TLObPEuq0bvEXX%F>*jg;8@$6)6VTuIn_FQ^?q2!ydz8OB9{8`1HF8*}$r-whQ`Ll*U*YRg9f7bD5J$zR8 z<~A*S4>)?j@f;yKwr`$82Q|dz=RbyyKM@DE>Km?T$7D|rRImkulK!q?Xw$+k^~l#? zJ|&n>t?ucBY!VYi248v;k95^>Gd?)=~SWRhfUijWMH~|*kjj3Lj zyG?c6rg~Iv^W3KA53lLzgn*kDUfAA)ffqK{ae!>tyzmZFg5filPDptJe*{{+xu<(Iem9+mVeqrLP3JeA$BupvxVkB^^EjB$3nwB6=~N2q z-mziR)t`m>;e_4v{3%n4|0JdOPpbv9om1LwLi~J>{xW7Yb&nO&rgBJ^{dzQtis@%7k(Lg zqNfLd9bFrCbZuIAGyUnjF4qM;vZJd@<-nt3N7r?bIW|Jqj;?NY!0?8-NWJ$~$g&Hw z(^5a)`QP_Da?98xaC;S;i+035VAu;GNKz08?NuzXwrl+5C2O`eGjxV{KXjS zde9~44Nm$1ZseMh=X0AD-pCFA98_-8b5N&E&oR6nV?mTnS3h?>K(;j@ie&gkBI3_c zW^WYK1~(dnz!Kwh$Ze-~c@qry)vIsm>C^;2`CY4kHoS%ZUw3`3^EP$;Z3_QgcU?}0 zp^5Mto1fpS2hTlRhkG=9J;T>)cpJmpG<*ZYH)!}ShVRmFFT=fNF#dLr`EH)a83_|_ z^GFX9>=9ms@JoT-CEwqd?+4`jA34=^0)CX!y840Mo*tkcTtY4vmxe|v(A-0JVSpDh z0??n$SKmrB;)UZq>$xeo0h~C!QUk~e(mb+AD4+?eH;>@5vmKTS-3(>%O;dKi=D~$K3~#rT}L^n7`z=^rKDNkS)^qBmvcOOlzfxwj@g;sX#WJ zaDiQju(1RRfRdP!lYP5DM{3Oskx(t&N*y|bq*5Yx=nS1gshnXNYC<p~GXVf7lZnx6K=6R)M3@MFaNIolO`Ju?864S?)j%yBOXwfDGSx^S;gF+S4+RzZOqTAy(eb)Eu|elZDSo z6&SGcZgW4vQ5)B2>-8TX`<6)_^QJ<~WHdJ$(c>+eVofIIP_e*`|5_CPJ_~c+cR*nJ zP$7%$wKW2n8^6QUQt3LV5_47Y>q*#Y7(@StJY44@MVZ&3Lvu3?ljG}n7JAckB(Gzs zP!{T4^Y61VYjGaaq&bYH9QcLQrkTzt`mcmLHy1R1v6a~O{l?meB9dTHs0oFmO32CIXPn}tfhP|o=fM!&D4>JS52g9@>Yeb0q-`hk!I-D zy^N8xOGz8T5E}nsDD;M*dVpj zNyWDTq3T;4XX2w48XbZINrufvmihC~nW-(sOO}G<3o*@JZji)+#;v2P>!ifH^^#k^ zi6%bM;nOAh(tMDX;T+`MdfJZxSPaHeBq0f;BoTWgkx*f?kyCsG3`|Q6ECNP&<*DPt z057HV2vaTL;Z6dX7JCkt_9~{_B7H>jvr}9<%}?kO;vt?mOEwgJo7jsI+O|-Fb8bM( zOW}~FacQTa_iUh6V^*W6Od%FVQxJkLTIqfl!X%{t30g1}Ii5u_X(p_L5=Ai|dT~-o z&6H;uaj)QcSQjt{Ww!s3BQiV14o5q;BbEx5rJT4<2#P)`two`?}lP^MRG zoz7cHLYL<6#&I|JAj)^^4pdZndT9#E`U^T@Dap%_V)Gb9BNa_l9?`?Ct0LD?TOOwg z`e_xmS<$6p(-!na{DrWOTfi)Z(`?rElhh5inZ!CvCSco8sxt|h zk^&`CtU^OFkmhsjh0;u5~O7p1B0``Y0Rfc1tI(#E6K40K>{o+Gcr(PjXAVyK5Hd1s4dt=r5KD2`Kb#-DA0u5p{Fl(N@Gwr>-x}B zM46e-vobR;9~w#|g_M9=M-f3Yjz0qoEK3U<-3-$e_4=9wpTgov?S zB*uu?B^ofSWdysGJ`(J9QW<{GQYh9gFC12?VucRlR?Eid&9ZDE@@UlWs0(e# z@drr8QLRm%a5P9ApGSgygwF%K3pq~{j>>{un7Tem6OMP6Rm4TB z&*Xr79#FHKe(n=(iZZkonT7VjZ7nLLy|oA--+apB<#k0$!KM*VRa0kcF-MWjugHA6 zj|0z8nR07YraB3QWSzMCZqElqZ8=q+hb|*fJRngcNJN^Z+?wc4(<`z zSKu6Zj?tka&2PGk_)`J$UqDocm1^rh!a&#ZjQABxASMIw*Ws_T_Z#eGu6QBrPcRL2 z4ky-GhHzHmi@K%wnkuIfNW{6VSE#M6ix5Im zjS^n1i!97q7ezzUVCpVr&@G(z(yF|gUoX<=yETRlNbGK7twT@O64{{E4zx~>%h-;K zK!|TzYw@NeW?YseaaodJneW)~EYCb~$D}zbW5luVfNh72l_+7awG`)dXX`SnSFP6+ zGvbN)>0UT#lH4A;NYY$UY4r0AmG)r}jJ3DccNJ(C0#}uY>)^AD)-@=ahMCXj6BfBV z^*)IWb9z9VBrVx=Y$%r4Scp5M(NUN4Hi>P!tz{gVI9Sk--|n!i5}xeP7Y}BJhpBQ= z=4npet5@p5UW*yr^EzoA9o#P+?FK`TfHblwK{41b5+Lu+8t!Z&L$emefXld31MG{{ zS;%ck)A(sTXPS1LwV^TH|7q#}bdL2$5sJ4pV>}TDjuWLq z>CVbpvouZHDyNcyQr({`4-3Bl@}D}Pj>ZzrETkq?$gPp4PZJL-&Naq0Pi#~2Opvuk zN-HIy7!oAnVWpkD0m;C)_-LZg(0mBR^g)!AEk!2-c8Q1EHJBx0Z=Hv0g02iR=lxB&)X+tE04@ibLOYN~8}^&(3;L zms%>APAN^E226tT$c|u~7cB7{iTK8I#o0}EoK`D_8IQY-7t*XTXq8f}0@y3dW_PjhpGS+Zl4CX=4rnRUIe`!a{ZEZqf~POMx(EXQ7Ry z7&%Wi<+KNj7FywBD!Wn)zRW1mlR}=EZ414ZQ>Zl|$43541+l>?kAEgw#?jKl{lm0(?@dU2)id$+wQ1qAC7 zuE7ULh|LbTLp-_2|Ln(kmbvWCev+$u4HXT^{FKhCoeDujkKVK%y=l*~+TxX>mS@#0 zSWa2I9|6T6c&80c9~NWFeHP_fHr3f%xKJ%N&d9l!I%!mAUh0&Q`6GZ-B*dQrvLFA5 z+68lirT@+I64P>t-AkP~7ifGvrsvu4V?uyK!Q8^aD6a-|-BQW*0AA9bOIda91&VTe z-vD-Lcec#)LLK}XTu>yE6U^WmyWiza+yc%>>+Z*Irujd(hsY&0DQ+Q(-Gha^fb?)! zwq-}M`TDy_=4Bhj5{2)uTrTJ!4M@{Ujqk45Hk6qI+ezTQx8*iXkjx$#! zowT-^dJxPWD0!X}^3`lr*md>*KEbkAoZT;DcXmI01bY=FUF``zZcw5szJV^{9vURK z7~C!eg~CQQU6vgMm_5K6%IpD4RbgwSY>h^!2vJ(TM!xJuPGn~Yk%du}7lo7LtwUcLH8>*exAG!b)a@x- zcM?&g?NXI`aPM8AC5;N-jLGHd8Ynf+u@t(x(aM0SOt4x>l}kNNDjsjlD+sS%F*?-6 zimf<|UVD(K2jxT2JPddbk`Jp;R>r~}IH{%ioaka$!SQ-dr1DcXL&>Amewv!IQ=ci9ulEoSIHh=+RIq1n;+IaDh?Dr&U=CHmF6iWPyd91Q(?aa!G{C6PoVqv$8iUJDW`M+2`ewMvA>k zBc46OK$`A0jO%_a!7eN=49Lb4dB+H z4#lNsf+;38A`xNT1(xYCi;qpNZ)~O&fwrnK)7uc zyeuDHD!$App5}3f`rl7V5qIud69OkWr4&5)7rDC^G@Tbzmr#>VcVLcLXcPUIP*!xq z0uF3Fw-pPA=%U<3cUbkpO>N@XR+`zO%d*2%kw*>kb_}Je1v8WYi)b_7Lw1|bGn%J1 zTOwYH2PF&5K$N9;P;~NxmL;s4)){#n)jXdr#7xniFvzKAe~-Mb6}Sdco9 zxfkVz48`U-sPCiZ!gPG3uLJqW%UgJSy9k#dvj?M zD`r6l@T_~Dr{eQ@%WNM<77i&v`B;HSPmN7d*h42^=ajqi zoK%a_li{V#lWA5%2(71>Am=cS^i{p{>Z;!Pk61;=H2F3)?u_t-cYTZC$qZjfXw1n6 z7ys3XM}}`v@|}5{c-h5c5~c-o8n!Jk3U~wD}rA_?d-u|st(bfyxuf=RT+%XbI?m+NO22ww9&&jP+$BxVOxUZ20 z92arPGm)BzuiBvp^`8)tO|>cTvfg5AE{E*F$laoqB?d{6>SdHRCW3UtQHNfF@}1L* z7zoX4v>I_72!I9-HcCk%Kq=|gH35=p#n`&XZ8fl8&PQU{5#ntjUc$I@U^>s8vlUI| z>;w)E))V38a&B;vG{d*Fkd$r7_Ieyk4KPeVQ5O3gjUQlyKe|#@lEFEy1h= zMnib=fkJ3FIn0TCt#&TW8*L6mj*);^Qa5XIMqCLg4kU`lbWE0Fj%h!x-6*zJx5ewc zULK-WgqR0I1IP3BD+;_g0Lz;UA>Med^b)={^mwAt3<^kFu3Tl=#LwwFIu{TU}$8s)Yo zOG)b7){H*re;l`#5^$0lv=^a#+D~Fsl#+7cI>|SfNY;JKDoFiy8v>}@URnFNBlTc3 zJ972)uQhXQqLE=1=hmCh)aTX{z~#H&K9Q)4Yqx;&Jy%(ShTlh+lvISWN#$SFowBsWBtC*Lw1VsVm5X8SS?*O%K?uS2Wi zoLr_YV1@U7!~0BTM|@o>(o_)U{m$F7Rs?ZYCP;@qa>%vR-5|NMLF%o#m&g|hlsekF zz`jkX2tS0wBz#><(yaF*aG3Bt?~-qQW(}ZRYEV7}lf#-k#FHoI`5o%azC)ea>w|iE zURBR)xLKJ|cS~ozm_A|aFdTQ~jcz=kc;CwPtxH8~HigMtU)WTY$Z5Z6=6Q1LjU_N{ z%F+Bw5)fPby!FPldN`ehYpErQwPMks*BY`ccvddyrkJOjFKw_=kbxJqRJg*XFFS*jjOCruhEkeZQte|k& zW(64|QF6TINRHRkJkG!?9g_M=yH?CGZz#0i2#ewEuGy>7#8#rM&T9&0w>5iN!3qpp zVAwl?TWdYRxU@NABWek`B;=tLBUQb>+7`r`h53jHI(yDO`rWxd{k?yAm(4M2opWXUbKRmth zjywPRM?X>ZZ~4<_bARx_{FD27zWnLS|0waq2flye%%2SW<*_q=ddt82ufNm#2fzD! z_L=V3so%G6dg}L2-16ch5B%!PeZTe0^qq^pF*Wqv_k7#^<8S_(-~P4W?qh%amp^!> z^_#!CuBY%bzgN1Y_^HpoH1kRG4+#xIFa`(MCE^C~y66A?cbH+Nt^NNqMgnytl5kRR zEI2kf=HL7G_1jD%@eQI#qE5}XjdNok`4$ztvE9C%{OHR8qubcj4%WZng@_gD z#oFBgqsRE%^*`{v+LQuN+s%j`W`hg*7Xfy!0d22w|BWsB0k$iF?@yp`F*rJ6e2EJm zy3vK}-g)T9DR?z3GI#J}b>h1h3yk;P$f7lO{8;q;Q7m^u=^HWJ4W;i&KE9zCM_hbE zFW{>c`P7Ti$c+|9{}Uwcp6h;{%GSlMU(0xJCi?BL&GHjtV{O=vQ)_i}0eHf2{1{_g zHQv9{PUc!BZ#vg1a;=1`3ZFI{`EiIbCUqUb3LEc{pbtwvBTN)nn1U^@dsn1iGeLU^ z1u4I+c~V0Ja8@?YmH2y%=(j^%DWe@^Yb%@uZAnlY^3Kc{@+<8%W1|=(9pS!<%&6wX z9F&-`a>Q0tMOjR8um64Uja6>g7=wfnVVOL4kol_0sR~t&j|`4Fk!dd2lTIM%MlsYZ zzX=evKNGQCMt+18#-tOUgsS{Y=q|HRu@|=~1XPuRH zXJfIL8H>jfv1F`)m6#Dr#jKbeOUE*?Y%CYc$DG)@SRq!7xv?L{ekq*>3Rz8-yj`fjCfr=Pr3Kt-G{Sq z&Y_H#;N!I4f^ShF(5apU_1vVM>($e@w9O8M=mp-WVEZ5_?1F~BqCJb+^St(aOO=t+ zfM;!a!Ne^qas}LyCxGY6ML3tJs3bgB;Vft6f;qpdn@pA5#S`@>2D}ua-ucFRBB*G8f}-m= z!A&la15ysLWk4|)Ls_S@sp#q}sP$Dq7vKb`lw4OO{}rNN8JS*5>(@G#G*WH8OA2FY z(mQZ2!+EWZQs}ebJRGnzU)l}JjdULXHZ-kZ59< zH>E^XCxQx_rTDfd0I>`YKydD99Av1*m(ZXm7 zz6a+mB-sYv+q$s1O-OQ-oVoQBfuP&kt7BV_hrYdt0J&S^W(u9%x*M51IGu2|!tvqU zYO8j$c)ftMC)K+j*lt&h2>UW^o9(NE4)8jSyk~UYU^nybJ~$5`W+{x>f~s1e$*dg$ z(`M)moUHcd-FgV#g>17qs%mzV7GvPk*{yK8qU@%+)>2*WK!YwYdWRR zCebOE;9R!UPA&qk!C`TGrG1-Jc-Ni%E@IwL8GulWc>q~k1vucI=0eC;hzR^7zrUng zGG_zxxh^ejMy$=)8oUerpKp^FCst>4lGGviBGn9>dqKA z3}P>?3gAtCKC3JgH>D7U5hW9kVgXkpO(b&n!Hd`JofI4kP8tr(4>?&lIon7$IZ`G_ z!B0AQ2R^{_faei{WuiP=wS!R!q8V5Bq&#qk0*|-^=OsALLAUV~g7k>9!MnH(6L@i& zpHYs7m#saT>+ztu1MQ(8`NSAZW0oPfnVO~ z-m%$!jIf%8(BZ$xs!a3+F+ZM zb-ex^clWwoxRy#?xFB7)z=3lTILAiQs@(03=ctR!Vzof6Rf?3lF@v|)bSY;f;~7|J zW7a7Ox11IDSp-NY^Nl!CY~mD~;9bw&_3&7pDpFEWA73xUpa%!?B9A_vY%;2bA=Ns_$;3X0iNq4F!ztXDX& zC;_&J*?3+8&m%{UbL1HQtiYcIQSRZ2&Pqkx<&AGi^tX_$le2ZgTVQViUZ1@_r@kPm zFR-o3hHb>yP~VW2 z$H`;8Jht+~E;v3X`w`~tq}FeHX+5s$;`=rZHaYHTh)B2W*7MYPWu>36# z&%|N7CC=|-laQonSZs@#Fji~Eh2T#J`#wRbeBw>888Vq%G-(PTC`FshJC_BsZ?hdx zQ*L%NPT~ed8cr5YP7mJDlLt5j$C5gql*gPrj>}_S%4Qp*Ss-g?#fVt*C_h>!fI{m; zMpLvoB*sH&slv(b=NW90r>(Mp%3#e&@ek<%-5k$`UBPAWO$N65ibNcQDr*?L0AlXE zBwT00UJN}T!^kgI`Qleqw>Pal8STkxkEuN=?Xk2cu02WZNo14UvRU^vTw;Vd>Fm1a{gRG0W@%&2<_ud;0`ZDa1$b{lgy zwE?3W42Xf5I(x&4yV_o(2LMhW&0FqDfjRs%6^Y``!T^X*l(OLSEksG?`VWa)LyZM-e!h@6}eQ%hJ{5{v1n z#tR@s!W3V@!|kosX&thac`78K6*dMsQ9bf!@{ynQ9HYcmqwt0ZF+-XPmOK`^OauVr zL(D9|_LoU9EG*)T`+V^jt46^#TbW*hz6K911*CAOTxX9PL05!)R-gbT1u(Emn$^P-Bj76Y4-g;tClG%ohkXRTJ7f z@4y6SDXRWfk-GoQWDvMCg{fyN>Es*N`NkkA}Ee9F4*{&?(XI{ z;q`rm9ABx{cNt*RI=ae`<=({(hFi}SVzH2c9kG$7%^nqXoU#%Giz@=~A}^Ie2zw4* z3}7v*?wENauHM#lXgKn%ulvQSHQT?q*Xd%$WE(vcEcgjF+j6hA0h8^LNd{F)TCpGl zyDTe$yHrVESTp!=){iTbFm*GFyWDE4hB2xU%it|xUJfu=mILf%AP)cmvX@8N7F=Eo z#&}$EQVKIIxNUWYi_+bZ#iS;jpK=#_cqOpE$nN6^8yx7%&kwIt(p2O2iFhuJL2a^eW#C0VH zl)>#)yfwZBb~5nZIJ(=x&etoXm0}%;#4pMlFeaONN`v)fl3>%){O%yJzUow#*4(>d zhY0TpN=<>q!aLwq5S|`qhmi_or>D8jQ1_c*0RqNeBmwL*@*2#uc#-9qSc{e5NwZ}V zm^_0l45|(_M^r-CNkTDrPti~}n}c0kY=IC^n}AYJl;B|w!!TViCZD#%5^1Z(vMxeZ zrhUb0jRutsaL4r-dRZe?v6o47E%8C+2oeC}bn!)pzg*^I%6kGuw@ z`dJM52b}4uSnUK@%)MXLF~n{eU+E^nI|X08+Jl{=Gyz!Xk^dcH*sQO1l-wYXg(CKa zwWfc?mQ|ly@9|SHmO-*X{D0uNl+|e06`F6T=LPk=rk>xGXOpPrLgFc7N3fbfAl^`^ zuWM^U9fv8%cplb&6#4-H*8$03+2bL(P%s$->_TI|4XPg}G&8=M+we0LaM|=Jes_Yk zM96z$NDrGDU*#17yMcPuCs+{L1X2v4R5NoLyBe$sLXWzb;T6b5Q9fgMJ(>$CvU>$8 ze3@1Ia=0XaF;aJ541r4#aEa@uwWo+%_#j*bo5QG2Knn#w8OARlNlpL`i|2Lfr8;$2 zk;G&ik%%g;jN(!aeG(9PFIlqG^K7-y^LX$q!KMj3m)H`Tp^ghe+3bkDw44y4J8a^) zsENFo58h!{mSw?Z4!kCT*Ek@10)gxaoRPqpu(&f(acA@nh!?IjyfEF_DBW3}ANaUJ z<_z-5!tH4>p}8!TEOP^v*$yNur7rUnw+y4klDr|!25V)}NejY6j-P@ozv8)FY{cA; z^Kzb-pUoTwYIBhQ!4)0`&^EM%?6@Q5)5+!pbNo2fnzVu%MCEhL9%D3~1RM&ONt$?G=|inuuGX*jTz zuw+6w!)sckbX-P~h2yfa51GL(Vwv|5*ZX3*lC4KvWfZv~VHT8DF!NMM2*NrNZ`2d6 zY}|9wq3D>-j=slhZxSjJbtR)Md-Z0AYQ*w}$V!Be!nB#eu6P{~WZ0O2WfRpQ5$sAE zj9=0<+hH{N!EDP60{~?8qySS2SP|#&N}71f!^$|^YHb#jcO^bo!+MBqRB;!DO5CX) z?=>(;?Jg0GZP`=8HWQ2iFXE>R*tY~D4^p;U_Cl;SC{U1;-dqLU&<=H1LG6+qHMBh$ zUgBG7CsbHoxA2faNf&VxnG2@c46`%nZzNro0|Z$;Hxu%(SyOllnjTC`z~~%S%?lXe z1Szw9(lU0cp<6aR_}J*A=YCwTqDxpLSgf{DIr0pGxFI&@X(C|}g_l%VMK*Z`KP(D& zidRgBS^Z;k1_ek8@yYs&wF3s^piQ#RZ5|CJU~@d$fGW3bB$Xq5nX+mtY6wK>7u(YF zo^4Y$aGQ(VMjB;ogA=2zd5|rlmK~-;naVksR;)o$oarEoz%n*L^?Ultqe?yP_z@Na z&H1_sNMgX_@WLN$O7hR}I5uwvH)W4o9iEWP-y1H6t=^DMA7aW5<&Cyq zSSU-k4rw9{afd0}12A782Ixck6=I#B;KxJg0qIJx!~q)x0)Nh{3p~IbEoa(-n;dFO z|MRIfV|GA#=K$wJ0a-(tGnIWyN0Ok|3nCYsHeQOOpPpulNSq9_`$gkwKCUz#@`2x7 z-gA&&zfwBAYiNkFlh-`m!K>^j5x;G2#8$&PR+%s5WUF2PBUnDN1r4Svn2{ws_d45n zUa?@tR)Q?fvDqkU+{5JvbA+fg%@eX=DGZgg}CCESFW=jwc6?-;dsRNsP@&HUnMa--B~RVx3etofMon*(pK# z6be$WHf6d(L;4v%q*^vI=U}FNWn#fZm)i=YUW*DP*&>^1_e^fP42F z!ZguThcqt>N()h~3*7nzM~L94-F2bxY1Nw35rt0+g-?eRJ}neJttgB#NZlg=z`wFp zV5-TFx@onrDW@Lt0&lqC=13qsn_i4I-1sNnRv0}GFE-;3cP)PJY?nsJ~gO%p< zoc?(}DkwG^B4POT)#j`OW;q}yVog2~YsztVbBSM2<6|}IO+Iw;xC_Nn1+~lJ17gf? zc;$GJPnoGhWuCz;6q9!?s2yz29yE}h1yfRIIJMgB2PF)>-QON~GRl{aym2YQmPbk+ zmONBkQXYvYlO1_ek=Kg6$;g`!YBORAl!?4K-KsY1(vdeSRp;fAlSf(}St+=b)I}U` zZ|!jnoo|QE3lwkaH^qSXB5%Dn7jd@4o@B<5*UqUG0!c)WHm@2snQRCt9?M03Y)(gk zC!>6M$(NFcB@a7_XMKn8ITnF3kvFHYZ7VSqd9BEsj=Wi^MAe*=ha-=)JhDUPF(!Lyz+yUc?|y5@SQ^Vwb~~1J*`E{c>TWA(g06x5%STvO*xR7bGXGetp(;&PQkFWrxy1oMG9V2C+=Q2HC)8r zKkPktu+8A{23PZ<{ItPEQa3^aROh`Mv>+W4SqeJ=A}%h9_`kT(k84ERW<%3f^SZ56 z68z4Jj~}53W1KL?iIjk=c|RT+Td=XyNl!jZrDxn^;d?cn$Kh*1C&L~HUR3uadfDWo z9KL4JyjEO+9x%H}@3%#U6I2Y&`P5wEXs@0=Al|M;crIr(^5nm+4q3b~u~-($vcI{^ z@0JtYahE6szdH#&nM?4dT`_oFHtJsIb-<8X<^*rjhkLWtaD(sU^lIum#AUoU_Z^(k zi=Ym+$@KM>918DcjmTD)MQFm}vv58Iw<%WAzAZaie@!)Q6YtxmE@*BO7uz~&1KUEe zRp$FDNBOXMugrm{Ma}%J$0P4vVLPOyCvRr8%2HaH^@F68=C;NK+3^H1Hd~`>UJ!a+ zNNYvW#3a}D^JjXbIP!~T`mP>%9p&Xc(U#hF*`4BZUD<7D2?N8TK8WMCmL;5)w7l<0 zs&`(XyX5h(`mvDjtvL0H_HCJ>fs{1M$}2Br@yn)c7Lv{Vd(phjDk|&vtkuFMnoPzL zk_RQqhazDChKXcbr@5ewJ~~=$z%Oa>HkL1)>T@x3cDts4b$}E7Vw)<$^WvR`O<$9~ zPNI{RjpUHB)`<&lj^3>4&Wv@>)~v*I_3Tn zCp$?AxQ@mPaDzqmpJ)Gz?4D!DOUNo&USW5U-RA+$vG-Zvd=F>gx*Oj@Tqm3Y9G`&~ z(w+LQ3H#($NoRPg1jym!fGfS6(TQoj1Ui&a$0QeYDbWdAR-JstZS&DG7bw5Wt9`Ll zC;$Ew5_2 z#{R2ZpLEYf_Fn<|Wkr88-KjTO1cIsVDoHgnM&2fckKI(>Y)OK3ug<$3yc4;}z?zpWYowgj(i9?)E zEkQfmmY|){5)|pgy+7L-uJM?&X#(x!fIMt@IJW9?C({`!>zus7E{~Navo5K}Hmk=d z{*0AFou?g zrV!9qe!5dj0y}2lMS8>73|j(w&5b`dRhhhR;?SLskJKh-#wHH!JvcS-*mR82nVc>- z7&C(5`)ZHPOdOh?7@gVv>FJ3>+xLtdtko;G`u86m9v>U|Ozp_+U0pqWUHI!8;K!hZ zy1I6B^@vB}`+NF(`?`C(k&?mP@*VBp(On(w*|~FM$4J+3-{8*bj-J7;-k#yU?yiyQ z$Y{^Nj#_{3&XKPEzMVaNqdP}OD_z|?`g;5NM|boL_ttjw^>pHR9qbzJ8X4^!s8x1Whr6mfdj>};qdmhrdV5EDhbzOi zu7Tk$!mfL8V5GZipnGtzf24bmN**5Bv6D*e-PzYys|-^`RP*paWyj8*{(;&^_s(i} zch5*|xH>#M+*9cp=Dx;Kkptn*P?Cl!u?dk679UZQ9S9=D#yZd_jhe!IU zJR;4=PNMW9MCrr&rJW6&^MIOV?^kY)r2k|IaH~Sjoe65j|^7_s{OraM72g} zb&q!U>>L=~(YvEI(zl~$WOQ((r@wD-u$!=~?buNp9`5cZx(@X3=pCr^ckdh+*h%CX z9v~8p43CUyCkHg@{+%NqyAc+f^Ir z=^;9FcXthrcK7#HhP(SJgMHm2eS?&vyT5;=+Fk7%9T~24jaG(<5vZ4k`)btx{e!*3 zUETd7m0|MjtX6uvyLa}C5zI%CEM?wFW7GBx(d!5RPGKIea$ikbE${kG4H9eTv44jnLzJ7UHs zm>W>T*tB2qCnqKkk5{JrgOqjKWNm76Vya#_G*a_Fz2~#{`J);=pWr@n8AdT?6N(dogmUz$3~AZ4s}UQ^$Ll3bTWgG_?xKvs?a+o4$VweMrJ}ffKiAorltrb zF6d`#GhsK8m{V9#`7;M6+DG$)G2>n^!hN-w-hPoCcTChLscVPF#>a?2kByCw6W>wu zgzrdLkl;EzbC}rWQJGZyiBVq**6pmwe(}}voB!z_jJUboL%06bH{RKw`rQABH6QrF z>p%Es|NOP5UpxF4o&Vuq-TxOafBXAWFIQ)O@VkG}@9%m4AEiHc=vU5s>jQ<)@4Ng* z-~X+rmj)Z>3J)$_8vXPWx!)ap;AkFAHDhI*S7xg{5^NQ|K8X8s>Uxp`NM~{ zz4I$SxA%*c5BLA!rpreY{V(o#>)d_83tznU`I{|d&+ zzX$h}_k8VNEWh%v3x_}XYo8b^{mwP-6PQ)+xNU#A_GoQis`Q zQxfsW{#8Ru!?*1jd*o29x_{5q$aP63hQFu_+drvhq-}?4GkskjeQfN|z(*gOtPFIM zJMhuz@&47hw@+4wjer03s72S{_l-6G{`1${TmB1oOiY!>$M3C-9Wv_EBQ*4D+pFW_ zD)xsTq*4mojXRARLi7j2Usd|P5ht2`*f382Ly};hTF0rkQ{vAXUobk2TR8lFXygp9f&(rq^eNWN%cj)^nu%@p|MDC99TxA@Jt<3lL==(YPK2G0%O5bnL zcZt6L&EV1xQ*hB(tH5{bwS_6*1yXiZ0E@j-Dh+=L|^pX3J zvB&rYa_=-AB;Ri1v&MZC-c9aZviIGcHpUhQ*IZ$la!l zszi1~4jCf^@u{>uOfR3}&=S=27^nIY!zQ>KT^Ig#7}*f7NiOLK#Y#^6-Nz-&C_5Yz zRK^U$f8Ka6<Jm<@veA_a_uq8L%lC8pKC9{+Q|;5V zI`p@0XOEGl^2A(EmG}*IjoNu&bsrj>$GR@h>RxK^Bk5Drvy06tqFuvmFvtH9`MN@W z`03yOM}KEh2F!ihJ%87T{Pged;_rU}P)h>@6aWAK2mmH;(n>lu;0gej003xr2LM3; z003-hVlQxSa&%#0Y-KHOWpp$!B{D*DY&9h^LU(CyI3+SdcW^i*GD3H7VK^}_PGxs= zZ*FsMW^^t}b8l`gcx`O#z58?AHkK&-^L|zLf8h205NAqm+eyYdk0f^$*-n&=A8SdI zs!38e5Q&yJVUrz_Em^ZQ_iz7j4geB-bps?oc1uiEEUB9W&I<+ zpW>(Dt*5ouzFe`t*fi=W{38!u`|8p8UuxqmzLEdDyZi_B^V8sw@-hyPZB{Fi-qk+- zK-VeFXq;yr@xD2G_ttwC2HxWYNAbeo(?xBVr_FJ`e9D3A1o!=Ja2J0g(S~XQ{ViqS zCaIUf&-|KtH}JBTEb$M9fCkX`IllMxdD{qIKILB;p!r4v&42gvBz=5#m*sS|_~tIB zKmGElCf28Mn1>_^|4D&YF}?M|ILk@w7jS=>QR?|AUFu25)2}^0Vxp%@tu;x>O5l3K z*>%pT#mUELhL4!gYzv$pC<$oVM~+i`laYkv-a1Wg!hn%%NwWONi<9_?PyA~d9C^zm zy(MYzB#EOtkN7^#m^39!s!~qofG>!EHuy=hT9Z7y45Ki= z>$5b75bH1wLZ6KkUwOCJlu1hJUE&Og8wz zk;f)mk|@L38c-WA``vtnA0Lt=M;&*Z9j7U=%}-eVDVxF*np+YJi02V_^?Q(I0#n;$ zl*zo4^57-O>3O)K|HX*+9f^a8QLpcIQ_-_Rm#gDH@|bGfWK4lD_QZt%Z+i`tF=EXW zRhq0&^O)~qV*zG&a}*q^Y>lVy7H2twZ#DMrD0ZD8dt-)xKkDR2fg8?}#5oCLU;_YI z>^QI!0e|{zs^+xj8xH^S04bgdQ(+6mRSfrs?pzLzq&=7<5hd|a%gQ}Krnp`Pty0k3 zX4xji6gP~cZe2$ErN-Pr>-I9PP99lL+)t?;N0rR7>t1%@hxX}_1l+WX>BpRtFHe4B zC?SmS#U^HBMt5E4sme@O>{6O<(m1Ps+%&KeC=Smp<1g|#+u(t9xrriXSgY2wcq^q$ z0@%BWw@TPgd_5~fvJPSs77H9WiIPm$r*m>m;w#FTz}Mg>na6ZMPEq_zlD}?D`+Yg% z8N9&f4Vs)dU8(~$&kWz!KtGMwn;Zl-%v#prk*Qq3FpNnFQ%(S%4WGgmUHBtA|MqjA z+~S)x_X*kMK)EG%pscTGOjCX~9m{*dF`e>+2NW|;0 z>W9maa#+|hXWNkQP4gWg@%>He{0!L>b-O1>Ap!ewf)opHG}D=p6jvub+pN@HA#ujGBVyW{Y=@4hixT{k%pI>pMxEvD|I*$$A!k)w?eA0pxMM_1%GwJe*AHgtX6CX zmJ5yXh7sNnQv%*`7zGTKr+-*17Jqn(Hev0IQfwYx&TPwGgkkS7x^TH)R6 zS;GOE%MjmN(=@+( z%U&9+%GP4ALe~)djoaMbnuMvxP6?){;^(_{ngEqRYQLP^jkp^56yRB)2wSpzW%h6g zsPn$t19fxwN+N(2+POO*7=F$?e_)sp1RhwaSVu{!aE7THWxg=M8iYXNQ^B1-h{PP!% z6}&RRBnsXVsVSAJIom>;`o35>-f`METsxtog+UhR1qu5~}r+P{qe|&Sn8lBEu z6Y6YQO1-3hxFV4qV}Xz5)LN)bF+ROSz=a)x)uT6DP^>=3WF&jHTxQgc2eLZk804$X zG>PKZPh`|l{XhNUTKUTvMkm&{n@~G2dMl}5AeYir8Gm##fn1-hEuDSjU@pnkm}7jK zJ`L>{^l9kSnpcJ&gGMsp*}b;nF|%nSr@lz1ADU{-$2omD9`QcVEBdi|hjCQ-%b1Qx zkramQLya}b8Ei5{0!Hz~M>?qv$vO`i%Ie$VBRk3KN<5Nb2=bYT$jZFy^9BeM5&}YcwXe#aSsyp_U1QKM3{~NqjT;(FWDU%#b^>4l< zq9`HYy?ci7h;}0+Au9>lNkKQM z4JR1j&Zf&2vOt3PKsO$QKMzVs6c{MfC8F^jTic9kY+ypxqm z5MT6#yqBNb*=DzJ9g>eanO@DhJil90CjwCB!a3o8XMSZj%7Xux_6BQIYokX1fk zRwPhYs9wS@u?k~MTaXn?FmFL5f%qgA2~2q{KwaROv)TH{TR%Z)Pt9x=KQTr@zXnPV zhHl?7v$FKlfQ{3<#+16d^5Eb&(5-JWP=?!3p10PAv9-4He%@f`4R&8P*j53Zx7h>V zW=}R*o~%xosKRnCzWDXI?p6zL@=QJ)$xssj@+x1>AE~ko-@-~4^kZx(p0_5~odlRS z-UqSqcJqJUeCN$~Pd49fA?5nF&*ocb?zkw-bRGKF+|i02s0VR?+9m<>5o$g{?a2{p zo0!h~>w)jDr&-dloCe+%?yv@d2&ZT7yg$8o_8f|aQZO!8B=;WE#nl3^fArb2XMcL~ z?29MQKRbW^*C2%@*VoAX;dB*JG!|X^Og9Q$Pc{)#5xqNX`TTXqbnG>Yl~S_1$Tyqb z55e?qW&Lb(&o=jXHuqMu?0a%U&Y0D`&PTS+h*wSxwirAo>&g~!;)SIK<(=V)$AA3n zv(KOZ`HRm#wPvVoUA|k$Gb`{1p}@CEz^um)Lys55OACcw&XM z=LaL&47XaGYuYTBD!TLD`XKh!8q?=Zb>39>WK*q4 z=DeF8_-@Lpz`Tk#tNvSR+`6a2nDwnQWRC+-)~hpYy-{nykqPdKMkger=hz9${90{m zyldHgg0fk$OP7~jCz~jMC~_a>X8&f|qRX$yT6)Vir;+W1%SpP0%l6e}8=~-6|h1ww>Tehf#ayta(ly{J2RUN3qGKAn_rd@MbrT124+(z$zH>f5vu&v_` zHDb`^(GeMX*5Te8vf$_Hw&ho~mIH-g*N$!D%zT1*2q%~}&df-MteaBuvXvr;3iMkR=wMxGp63DT5eNZK;5JM$`PNwI72(iBP;|g_ zXy{#pn zABp2A(r|lffIA7QBfj_{VFsxt`sau((-IN9geWh((-wbwOR|G7iYl!;PLd=IL`jH? zIArw7*s$=1_xR%cm~bRr%@V-Sf-Ok0V;Cm4|iabf0~ z)1t%$tm)nPG0pRqXfJ{5sD}0FvUK>gzqn(%qtcpBT7bph{>f+oqZdRNk@O#uO&l=% z*8dg8+Qct`j=9c<(|&o)je?fmG;={6XBi;#IaX#{% z?maTEIMKIbb9xm+50&ECI$B>oZStl=_uZJY_2%*=yJ&mEcOV`utrv7 zsV-GH|D6-HI%}2)*C1}qaLlR`w5E{3g~U}Azx59}*w8@D8ecfMt~MK%I5M9%thr?fxpQ{K8p<177k7jqKBf zhZPwr)Z%Ca=oEuM2Bwy;umopy_H{&H*>_q)C&_BfcB?pl!!%G-k&5G-?R}RU-Yhra zz76TH9Z@FVi}IqHQu#)TW0+sVxw}F%h7Bw=^eM;?5O(kpMsAq4N#wL^@i-0)2{6sF z1OWz0%4tWXXw%$y4eM;6Ul!M@tbWq4dMe&ov`(4v+P=KyQC~fqOKUjUFmE(?P7rpfGqrM z;H8E2ulQep`rMfUe-#8OKYCL6Y(z5Ltu7N?SAi}WaLg7mFe(%nOMHtDo~WPH2=F$^ zMVC;#u0g%Z_6cTh@=k+n?l7>HdaFk{RioOapSlY+bY+#O&lb;cAMZGKvaSkIex|x z7Nt;#&Jj3`19ocBc8Z>mO~x4HUx!gp9O;Tqc_!dN z?@Nm{ruq8GHNhwyW=ZF^E(M#?c6ywqtj%ehfBu<%Xctpvj1nBuqShx6K`aLT z&1#cDps>dyO^R;U!gJw8NenqUF{Oc)UmHJH3ASP;*=n=;fyP()H7B0_9E6Lz6AGXNtnB|wDqzxyk4nX&u}K3P<*?WgeX4`B=ky=2hpW?0i0yN?TNbYXPAzMIzOHIYo3^n{*FT8E*22sTqetC=Llh*FieEGd#l*aPaR#(y+>Zb-i@A6qg)FT(K!! zF%et0y#3Y1xoi&YsYQ$#y+ z#uc^F++>zFQRPX_;Hx-g2A1svXK<4+D}oJNNjw%Im`2ztvRTv5x|29gZf>FNhzZRt zLhLq)xeMKC5|`m0ez)JmUtTgTBXZScQgDk;gs$g=$xbO%y^P7)sygmJyOlJYUEJcX z{1KVeA*-BM)wBUY6NcSsuk%+Jhy)XL94l5l{Bu&)As%)AV0*_VqfJs3MUk7Ac>F}8 zoy^pqAe_w8Z>RQ9ZQn|ps4h-*U0sbv2cfobmlj$W*fBjjkU59AqQ3ZGP?9-H{56+Y zy`&iyYBn^iD_uUyA$s)eP+oS4Cu}`M;u_EV>W6J=GK+eRCW9`8Z> zLpGkS$qS&bmc^z#V3p1FT5^0fKszZQg% zq>w9&4wt-4Zp;*pX0 z-@JbM#rq%c`DdRWd5>NvoAiOtQo&Vcn^wc^pu=#5*CK-lrSWzV=+1RMl|3ikYvBx}QnvxbdO;O<3iv@*uG?A2HGakO#G+z{xP z)%ghp^d?h{rg3`B<2UGEELb}d!I~4=^Q*VeYGmJfi&x9Nf4vLs$-K5(sBn;;TR3`| zMqe;1g+KQ{m9p@t*0Lne6m0=Gy{tHuMVby{zDiU( zd4`>u6XuZN<7Xlaub(Nf+{CE(xHaHIR<@E%Yv6@0z-Syp1e`^@Ait*Ev50UjgBlz9|@NeNN>Pm(xtlv${v_!>-C z+c=h)oBM$z+z=1MQB6kK52P+);RhLx*+vevN9Z-O`i5b-7Q;at6^^$jXf`qthoKpZ z;r0$q@^-kGiln^JQ0hD_@XaCN=Yq$zS}wZhgrcgjPHmn%!OkdX1d1v%)f%dO?EZQ| zTbM+TCT$`Wm3I704nd%S?b?h_{jKBMR;tBg3iZ=5(A zkrkp^pgj#$R3Dt#(Sse|ZoR9{n^^0&s+|8pZKBRG|D+64ecE= z((pcUf}=Ca)@>B|zI*THmCWxED+-Lpq7xO)|MFlCWwO9qe{7z;-hY?j%pzo*3m{^FECKT99{qSVUwo;nqwL`Ntb7&pQrj@MT zk)$vyvYQ*_sk9;Ia->%t6MJ&=MlqGTM`e<&nxR~z+{)->tfO>KcV(p<*nY?{!O8+h zbzM7)_ax$7$pvbuiB}X!5kf7Ronm*90`huR0%j4GRoTK!sp7J;Y?_js-Y6@>`^azY z>Q#SdalFYBah|@#K75deUoAEhF3S%pcm@gOjexP1Sq)3xo9j+yb>Q1YLtxTu=W;LA zi=inuy0$rBE#uOZyGI)A&{xp54SL^J(>>U`=T$Y^1+!hiKO3ag%7R)oy=HdJtqj9; z5idRl`Uk6$X}3dYh^?Y4<%!Ic#%3ccbScX!UtdC+d%?o8O7RqdR?w5Axuu^OV z8JJozV@9g%ttHeIP;gQP5EKo3AcUaO4Dx`?D-+psv>kPe;OM)NL)mK`YSz$)usXV3 z0}nw(yK+D5TxYXt?jd~lOh->9e42G>XXQNd`gotLHxbFVE)KJ_3OQn?3Iq0BL4nKK zQL`hzYcaPvm6jlr^ook3AOBsE;`*RT+$zhXF~YK*>cy{pP*zhiyD{iPP+Y@$S5e&# zXhpIdiPgB2SU8w~{mvT`&~))5L99ek3t7vJVQ~t!L}F_2A*w zR)3s_u!u~W{K-DQqQ!5>TW^#MG;&2CiE!m=ZkG5t?|<4x`T>)7^TB3w+LG?LUrkGR zzDrI;`Equvq~9@n*<)3Y^rxZ`eM?1z-K`IWH>$e!%_!B{Sy&(py;5!U%H1KcWv|@g zqw|)i+imjOpkFicNQ=aMT$yDz2+$tkkk!#E+Qj0q(H#SHpo z29B|ht%h-C4ahjeKmtf}Y zCS6~l^~CLEh!C-{MzvHhzo?$mQxeFXhHb%@FZuCSbsNbImbGof`$a4}rUUo0R}ERF zB67k`@Tqs&tLZ4EB2C9L3aKt+d(=@q_xhiCujHW3wHxl39q?s3N z@M3{qGE}_P?3vOBu3H1Gr~DN7jlEn-!n$81H6$ln8cm$5Q{d_#%G%%pv!Yo>u6lW? z#H+%ysE)=UCOH$;b;K48SN16-3`ocY#Xk!%wr7}aWrVcIiiZw{Gop$T8=s~WrWH{S zVGQa>RR@gZAt$y^z(`7j-=n1U9x=Hw5#pn0#JaL;#g6^4Nf}x4^3fwuaf(d`?w>em zkc*8~HUzb((Q_JSZ2XrbCu93@)Vs}fnyi^67*eqw-nffaU+VRw5h7_ zfgo~^n7GdsyNvbSr2UNEPFsGp2p^d^dYFi0s>70tSCPtII4$Kh9hGxK%U06v@iMzn zs(WPMzly8A$K2gcO7C28Pw;DPIZ*>(OTMBGc7ZS79k1 zR(_3cxwR@#n`T`5#HUwrlG0ICHWWW-9B9{@%P90crih~e1Yi6Ovh|ef1EJdQ#KoyI zig4%E^hbQ{h1ye5)$m-r!B@`IO|6fzQZ7MEH%R=vybov{#hRY3qkqcGy%>*l;+;R5$WFD1XqG@;Xvw z`Ck41Hq$8qQ-M9`Av|cr&!ao;pAoUj@dh}5R0S?cA$k_w zFiMJ0rZ7xfl-ZoCbyT;VzVwrz{@G6|CmuH#;C+R#B+JKd?oOnFEuQ%F$mOX%+2=>zqu0qMedPV?(_iX{w1D>I(lkEepUWksKFC|kAChD} zlvL#vXv9WyOskH`ToQ{PiceCC8gnSMME-^^hHE2N{a#`a!Mf&iNwG!|@jV2*0$H(S%n0*i|9M<4#x&4QvTd$Cco|HTTI|)5 zLC>M-v&XI2V1CEgZk71(+kmc&pyD!%{qElVuREbLQp!(2Y4x_MK!1pH+5nTOZ4}3D zsY$H?_b$K*Oa`Fp1e>6HT8_L^vN;{?mUZgjWuxPr({N5}cbrYaj(p46yo_;w&)I?W zWLIn5G#GF%grBRIYU|2I_O^X9v2?{IYAEPYu#!H*OEqv$6NBp}44||P$?_v~d-=q_ zrUAC%xg}}vB#EIKukX_=tAwHO>}w3@au;sHv1IZ>wC@nl1RF&IB6w4Bfn#n1+GZP= zI<)X_nrp&*Y*I4=BkER6$t3~X2Y9=fOA4M^!Ze(fq)H9+P7?66X>$bwm*YTkVhLsb z0C)tPVFWVgWg8T; zT$C3wVFdvD54d1L1yAfnvTAAb;yTNc; zRWQ0|Rnko+&kmBSXtQ1?Y5s;y95NdlB8ZqQSmx16jP9*N>O&dQB|p#kd^V``R2}$| zmZkc*t^}z{OnKv@%%rY{qe=8KRre*9K^6@2I=hwZ{zsSdMwPCoyARarHCAY13pmC0DClHYcdpCat zD@tRX52n~O{bp*l0p}DtPky6upDKH5j{|7|idy7s#D(V?aFau82{c<*gs!9|wmUt0U37!`A(YH}@Sw_DIU{2#@vN(-zNE(tjmk`>~gIm3E zBj0nDHzbZPHwAhI1(?g?>oI7{QXC$jFYhz$7uBEe4ds?IUr&xyz|;nvMn9 z!gP!jKmB5dw#9HQ#iiQdWaNiO_L37XlMP#@d!~y7P@^iNa?X8Z(>F;HQKDZpb{sxQ zs77U!GU+~Y>LvBV6^ZtYQxd9imsC0FUUEu0RriclrLT8PUMaKgGqc_;ml-v=rXQ1K z0=P*SSI)g(>^u7{TNVge;6qs}38amCzuu+ol)x(t-FTk?G-oJY``(3+1K6T<|e_6?WRiRSb^#hGaB&7mIiq zQ(p1d>`NHKW5`rlr`aWL7#=UfjM0)l?k98~D0@1inYW2oBqmpoM8X8_iI?D26N#cb z_J{l`rF@U=)o~<1K+zG?sIQ7Zc$Z0j?WtgtKov9BTz|^j806pbhIPr|5t@4RJ-H_F z6)gkXX!=Pegr@5M)(<&ttrfDX3Q03uikTspf{T?>6owqBwiHA~Mp>dC-83ji!d=^h z+iQr(8~rZ5tX%&?7}K|S>u-7;6tOo&z(7rxraVNZ8c=C|M`k*Km!dFlEaA zBsRD-cPZJ+E+vEIvHBNY-?sj7sB(M6cOuxDj#LxpsJf3IJrwy~qsd^pTkjk;QtaA( z#-!F1rCHe561#5-pljvu!Z&+Vv|5yQOk`0WPRjCo%#*U1DYzYCj4HeD?fKe~9ot6k zAh~-}c^mqZS*dV5OE#E2n#6gUM3{&pA%N&uCVNSMb)MNnwsLJ=?SRiH zMf{!g*iy~H`!zbiRP7xMYrJvX)lfmds6Y0BW=V9@zx<>@S?<&3q_U01fg#)%Dc_qmV8JYdvpqYLI8YI+b4fyo+V*^(v=1L?6W^{p> z%WOB?P?4F;;z&KRUPtJKN#d&c!;KuQw-93w)ifqid#2DSvrSe~jbzHijHw|8fk-1; zq!tfX{WTN5Svy@!C~`wZ^a{gd>&<L z9IOkYcBt87ob9!0se4|qf65T?#m~oV%c77)DN8t%CQ5-qP8c*RZBa$-Y37t7Z)i@S zZnP}EJ6LCm@#^iXtx~6L64!FW8${}62!G2pO~i)HtQ26^A`3f&+U)rGVG~0cx0gq zbwi$QF-;*nbrnCXDu;E%Xqm0A^xx8yBbS4Z{9JD=wPaW_yHD~!V& z`|hHoZJB~zk=iS@`Be2qvXPm=!#!SQK3NYIM778y#Sw$*z0CNU*+xapU0S&&0Nr`z z>M^`jZ0!`P%LoMXVNeH?cs$RR+HuOY{Lre_?LMH+HBNQJ=9>Dy9S1?kvt4`CDc@d0 z9yF>r0J2jpOonk)q?oZIquHY;qi`m=Z&uLuSnnY znHZ}_otEmy#}AlL*2=^*q_wqTM){NkN;jm}ic~Wa%U-8ttggXW-IP2uzH7t{OHgG0fZXgx<{|L(Wf{M|g{``be5ppmw-8GZQV9*v*Ixxs_Kf>V2EeY}uS=7NUfXQK zOInS6qE?%EbntzfT860cvAJKu!>^DEepIIuNu~|2W;v>6O-g-f>C*fHGii?qEv2CZ z_>;U5R@ZF!Eia@j6hy0(?36r}P8np_OGD=i~o1lZI$&mWa( z76OrSSE{PI;#F;-E8Zvt?|d??x7&!BLiarw!JD;UBVDh)6Z7=jzIDqh(zt!6E$t78 zc)$$YHX*Lgu=DuchD=ZMEiVVywJFzfme~?Pd|J>kEDXM#aM1L6iy3HBNZKB36O}${ zY!Aey8@-;w^N(@>J&m@XBGedI)tXHQmb!!Upbf6i6m3?2DatgUB51;C4~^>cO8%#4TGqrfNSGMHt<#F+{&fw@GZeZzDTDYngHBd}Z^)O+ zg}htaALtUEHUGU?wy+TI_bSxgP7i4P&0AjScOgawD`X#nYN@;9$l|*tS9o|KPyT}t32sx$OVN?&Q(MArYPBMy=J)qii-8kQy z8gvDUl~MuwTZ^u?3Q8dw$9$X%tn^qlbJf40G@GmcY1%(?L8vau+`q~@O`=v|b4t;< zMzOJb>OK~luTi%2o{b`e4J?^maufC}%1*rHCRWaKzDON80MZ}t73faQgSooAEmDrw z;bF%S%S9W58ci>8E~nIN!)*isz0V{yX;9O&E3lsuccG+Mvd^ivbJ%pQP2ah?qHU_q z)uVPX#iG+`E}CROtwXQ>*|NkAzYb^xskt6#J6+t@1??;fiukuw1D(DSXt}QEx|r2n zt63Lwe11H{3a#al=iU|vEsf{7fMo|^CNI&rpVb-ny)a|Jz{v_UszpMq6>4msRLOnT zL-Yg1sFE1PQ&dYphw7U9m6<8bjs{0woWxIj!UP~V0s*)sY49Y8qdSlIKFzXF_1#!FnxAA$2@$ySV^d#lmP__y%|;zX+Te%wvLXS8JB9_pmqzj%+YXDi+Z*sE zMwn<}Q#9JkIW-kK2aLmXOERRdmu+x0FE>$i_t%P^F1G`)SK`E5C0JvFy`B|$JuF|fBxBIya4N)v_1(jv(Nzj*XJT3x^*}N-khb!7N+D$N!-!McXmE{rO7?v zsYH|+;cPs%i4$18HdCw{3@uLa2g*~$3o#;F)mitIvqs+HG5IP0v&FD-xP9fsH+MPJ zjT0Y}5dar^;HO{gFrpX^><5+P>c*!a#CQdd>@VAxeM3pShm6zGQ4;)76{9lgzOuD; zpLL+zZQRODu=|yB?=7#{A#g=>&p!LdWC8xT+$|^FTehO-{$RPvp&ys2#hm-c(~~I4 zv>TgTllY3(JQG=zobP0u zf-qqF7H_~>ZV9#C=C_R)c!4NhQt7@8^d0X#mXrx<2CU@wNNEbU3dkmYKRD!OcAW-&iNQg?!dknW8^dniVBOqkSAR~EZ{1IfX@Z!_qw;*P6GK3jxF^E-m z$U*N9L%Qz@jAFSf_cJ_1x^_Q9cHPk2k~`QvuV_qDQr;}vx}@orJdWsa*FQ(Q;`&EB zz?$cOCkm%*+l+H!x^^mgpCrE1Q|y&FnV|vOLRQx4LAhsq_9A*iBep=0M%N)@Zt7p( zX_l7~lPIBcRl{MM1yjBxfNZl~+%V$5H%U&BCOz12dmS>el|sbuguW2$$L}yKvo`ZI zyxbI}-A5EH%P4`2ggCIUgYLORK>BRI1gK7L(|cbOZ+ZR))*IapRWv)HFW;mqr3lj%lkntNOEE)_K}L~dqf<6KoAJ1GksfA#L{{g0hXLMJ&d4R{x1Ny=AcT63kXszl zoW6@Wowh@Yb{tI4-hASVR~?_y1+e(zEGKC$O8n_@^vAM{;w8NbV~j!p*AB!4t$g7#_hGA!Hb+E#W=-&<&GM%mJOIqgJq^Db|{%j z@Hc*9_SPg!c~wob1+FPPa`Gu?byU4;yho&KjKJg5A3@fAM6N(Wg~d!OPF4*5ENfL& zqT0i}Qhg?qXjN$7j*a|SV#XqVf+|l};~4t*1B)QOq*1ss@D(YNRW@q#0y)Zf&~sv+ zt%3-?C8IX1{2$nBtw zJ|(xh`DXZey+Sz`Gdao#vQ$~ny-?l}G^owN20eDHyV?w6(+VSnt&mE_96O^_b%L=8 zbzzTE7tTp_F)gjw>@U8sB~&lIa4b~H1XBo=B}!d5C)LHYv^qm0$c|RWp`2><>I`Gk zN(N{BPX(NRSs|WQ;Fo&}_W@&UHt_H_D^xEc>6{U?HpA2+%fT5@WZhG^4;W*!p`UlF zBhjOX%6CT6`VkP2`MDmGMW{ zRCl?ZtyLtDxzkbV_@i6R*2r|`noehv5=!Ks*fG|MTo!lMT5XEa$t9Ap?9fZ8>E?`J z^*N@{S3mt?Q)B(~i))=FXP8R5c&eXO8LQP3btq}InZ~B!x0^7qLOB@7CA})+k4+_D z)Y;n7fkzJJl3I;9Mz`eC(2g0OhE8pGW%vpBdhs9#?ho_if zRx9CDMk8UlK(7b!c){#*UK7Y$M^KSJjI%JHB1jA2a7V5muK{DY^dB6M#DmmsVLU(DBCkv5lY^?O%GH|^9?hR zW>wZk*DNZH5wJ^9n@*++UlZQH{F2gGRGxQ@v3aQLv8;V4qAEvWjB!BgvB;?&9Y`f? zRTtDsOzMd6sv&^J%&*3`IfhhhItB#gYTYqdAIPn4x}$!a$smYMpaD{ zN$J;^N{zK{1ImuvQ8NbskgFryM-X0V3BuxU1$ADrV=ixup)DV0nDiWb6kaWQcL9ni z^=XJL(y|5@Fh<>BHhde78>4*gBKd@ScVuRns4!w4CeN#VSS!QQK+w3k6QIL8Gu3bt zB`jm5ly~B9G>v)%*Yh3|xTDW|VoshlX#%fsUc)J73;JF~DgbOKC%~5+d+Il(tOIt_ zVA_wym}IOZh+xu~w#}_D+#U09Lxra1#w%F(vG#lIqH^kk9=5>2p|bufvEI zTQPQwx73=U!Es^S8OXF+qKO*~=39<<&)sS@GM|g3YQQh4nu}u;FIUk=tj)=10B3ne zB=+)Z-n}bD@{o&a?zq($skCP6k{GRn#&#MUZXXScC1^VsG*Y$xo($?;v%l`#v01^t z4vK3QjaJs%aM+*&x zKKqQ{Pn1R8xch?FcvA|s!kJ9lvw@%2Jy3Po%Z00?0ZaGPO7n|q?+cG#cVR1XcwCvs zRVxO;qP8Nh_F07@SMsP@A9fsGRpu;#Iw)qHCu`$7tYmHO#)X$`!;U}D7ix+E_qdAd z8O|l=nrrBVuK?5CC9i-}sg7@F)k15CvT=HXx?5Sfy!nZxqRv|}1FMK*han|BF$8q@ z1sv@4vSy*$9DWo;z`Xl=64Rlm?8+O>*-!7EY$A>?52z6e7LYHt|4}gK$JJL@b#*A_ zJfwi5RjK1TK3W(PZAUcm5{yJVa2l{!Ct;k6W>DFYM;BL%>P1t<6}EUw-ZHiy)hF+K zo;O^&fnGyl9Oic|4Za#v&?{1Vr8eKBD~t2N$PHw?s%jM4l}F2kw9u4OiRlS5Pc~^U zYmUc);OqQ8xq-sMd&v!;tacUpzDSyll1m7*;8B?Z80c}eIE`;e8j?7d5W4L2Ac*nr z1|i56VnoCtPez6~N6$&i5A{sb+Rj6Hz&VEd-=;$)*TZSSQM2w3tNn%wylKXV0=jg) zjt}&K^$V%dyC>jvPxp9~o?DyjW~zD0PmQ%IkfX46^zI|(szQ^$_PdYh(P^B{BU6yA zF~Z?>9;vO*-uku?ATAOflXOfyjKTaC0>KshBvM8}(QwxUMls}n`PX3-r2U#+42;U= zE?#*h=SFCDk$m{-@5_OGBzR*&Jb|1D5h)Z$S6g^B%juI+v=m(;6vx=S#&0C6dv&DI zIyv*IGmRzIy9krg(adD-&T34J32xeQ1J8?msA8z<1INw?<*TgX#O$B=SD@ zd{d#_*H&XHj0ezWOa<3gi!pS`BpY0N@s%ub$oikktrMt-L*qDm;R&v}5Q; zrjWrt0h?{JF4JBQkW|Czbbq_Gb<%0>)TTkCxl5b2FwGs>bcAW{&ZeQk=gw?ebeh|N z>CtKKL1m)H=l)YVdVKCZwVO_J->IFNY3@0-%NCgXO=%bcbFV3FQq6s)dQfZbo79hf zbI+t*6q@@bnNX|V)EFH;Bla|Q?!xK;#gz2F7@Gm^orrzFn0N`i_+s28;MVch1B$7a zz^Dvx@A~Wm#*{4JF31sC;NGj+2aG9Mz`dIzvcSE=whtInvOu^^N94f>zTjSPOuQXG ze=+WM?ACwU1B$7)<53yl-hnAdX}DpE6BiF7QQcZy=>B!q-fQN)>J?UOi8awX517f8s^GuxvvodNZ0pgU&3 z32${jFv-N{qd+?D(?2X0i$6T&8M#TElQ5RaN@c2~X63mC>EJy^IbLVmTSvr)s-amJ zP*GTBB|30Apwy4ofGp(V4X)0@i|X9MfZEx84O-l0T!wf_O4t{a0o4pm+thd&X6q#D z8-@IVvZtXg+9qC+m|TfWttVcxhMHw0itgAS@~f0)$tLxwPM&FlLIDDb6&Y()m{Sgf zcbVkZo(e_@R55d{YP<3_rp&jzVV&YE#F}@PoaM|R^}mcdrEwNlV+mbC4fC@>COV7 z{$;2|5e6kw6D#?Y$fc&m)z6KFw${M0PLW9pd6p73Rz=Sm!u>Wrhxk_~!lHFVt;m4V zu%cPU6m%awC0-SE8Pw5u84>!C*&tzD^yXxs7F~>swQYMl*vb^S2NVw-7?*g7S4PVv zThcJOSm$9JGvcWFl3@KZH2cUV6HsCTxFpXWF}yJm;-hRC_1&NqyRtA-@#s-YFUUA) zkPAw+N`g-!kM~15k3@+)*nl30pssQ6H{EvcoBTIL>W47?eIZWIhV}Q)1SDD6=0coY zTlytL2?>gF=N7j6W>u>;OctkCaiU$doj+V4F(Q~hB-(An;8BIn4bM^QeBYyk3Umdp zh=Q@kGf_19k)7dN{|k9oe9f@Us23!%@wqLB*pzY zI@s-PUU>7uv$e?$kts(@R1|X$X{Ng_+v&n@xCbv-Y-=D((}N$RAdhG&GIY&NBjaTR z(Lo5gtnl9sa3AhCl3w%$4wPJ6(f{ffsj*#*@upj!Nc9$9zfqmmIR~z}Rmd5_Vh2Q3 z2>4IF6t>`4XYY0e-p1X%Ulo(AgZnS^2PnR7W!2zVFrpGqVn!G!TtButuOAF9l!E~? z`2}Dq7xUzP8urs|4^5y;dDwH!Z)r76yng1zGR3xHPwbt__{buD!fBvvoUWwPKsZG( z^|6t7`6SC*LM_}0^iE-|3z%cM`OJm?(Vlz=A7FD6fd{uq#w=+2B51Ou=g7WpzR3!Y zccG)P1FtJjwYii&?9KI_oY_hNccM&n?MXMHez+29+Yq+4=pTk%dYpY<0zJj~i^saJ zH#ssSfX#QeCzAW;cIY*RI5{>Y#+97enAi&u)Eiw_kk%>9co=_e*EXT3 zh<30QKY`^S+U2K58g2`97N<O~~J`s$INJrWD|t4E8)&u6Lsa~qa1B75Az7*i+u#C8v-l*(p#p< z%7a=OkG!XKRGv0*=_|yX1BDrna-y4lP{^$>gNi=MxILa?dvqAeJb!%KU_B&nJKm55 zWQuJJ@`8$mr|g9~in?@77!yQneHL=%Rm?}skyn?x+uZmDf{k(<$`d1Hx3*!=S2u|h z_I7IYI^P!i80I*arsu9U9X~Rzxl*!|pxoqCW$VBy zBGwP%+>rufkaQ;K5Q0K3U~6rk50nH{yWu1ZlR*gppFm*0850_EWwASlo`V8=jMsyz zDSvyHf~ZWy&plYD?Gh8&gCdPx@TG^$>~`Lp5U+VM<0X0!aCXMxKm&!V@@YVAo2Py~ zaXV^%m;DAWp3xj?5oNPbx);id-$Bq_qjXj)zX0}4#zXlbox70Mnvy&fB`U!1ENd$q zc>!ILO_cL@B`^gcVB~pe-7W9{)~{9)CWLDhCa5nHQ3kL|G0jx{hMfH)gPI&QUR4lk zatG(K%Kde+-b4g^?j?&mv25cb&i%ko<;J3FU-REXfquwJd0v*zm*s0V8$VO^J7IC$ zG)vsn7G6BW1HjjSJkzUIl9X^CL7UE6FAj?3J#N)@5ZF7g3%a=4(75o=8BO^aS^MPo zAedfP>Lr;p%gHJ))D3wFEn1ajKJ2}bKdgXvp0u9&cy+v1NfhCRG&L^qkJ}ZGk6>ig zILZwwDtyad);Y-)^LSwl_0_LK|C&R~iy3i|=qkJ3m{|sgq}d}3{L{XXtdJL_10ksh zB-Y-N#eZ{|kkH5fwEd!Dl-otS*Myq()~-3N-}$Jd#E#NNluS~v;>;;Z@)~Yo9MF%> zFJ8CnoKt||-Lm7B1Yy@D&P&P`$tsMg3?X47!wM^^b^0D#uPYgfWwP1y&^9ntb>jo; z-G^=rzOg3>Kp^3sQ|Eq^rG`C?!kGv<(8)#eKaZclm zskX{e=r~>)Ndg}h9g4_tQIynV8y>b;s+COHi(C?zQIR~kB$*rzX5kvWi%Z#cvWWuF z^&#SkH3SJ&b)!8D${eZy$?du@wSWN;0LQe^lk$0>oDE@sv@q2r)= z(bZ$qVZ#jBactQbBnbM{tUhWu@oPE(M3;BwUx4tyOk{!zdi% z$Oh?2RV>`zJ>Mp@SJmcA;TDTEt6HoE@Kg+2wOx~Y?Q)W=?^=8+ip2c%%TXW0fejoA zyMab@rAD9_U7;qRv@mAn2wFU)=tm&1$*$oKe-n|k$Y$zkT@W5*d%h()rv05$ZkC*? zc1Z8|njMGo3@&}&#gT3_FdoK<$X{io3E5)7{!u-bbI9+jpFrC%)BU`*goaGry;dBo z4zBra=u_2>UWRFw%XSkYY)sLSLcuxOV;X|ordhcS-46s8x)p*YvW@T4EL(1%#U2MR z=mlZ71bOF*50!ligy1G`rH9`3O#n^+m5m@t!>ceR(I7_J%UOX6ml-3vL3ndBvA{3K zaMQ=F0qO&cz*n(<%bx7(g@sv)wmoK?Ya%XR#!+2i`w+7ZRQyNJJy3PR7#Ro+WIOg) z<+)MAv)kxloRd%+WSq=|)=8b^Cp7uk+AwXBoP|~%w%nnidW34j10wEYRL>nMQs)A; zJ6>N^*i&(C=G&q0ZErc{oI6%1I>(sIF($iYWR5hkyy)zvj`dJn=BYY8*52fqI#r~t zgay{CY)5Gy7tR#6wFVN=BTzyyG5EFpI{xCg} z0{8Do#_MKVyM-$3-)oXpiWQnsqx#{$HEx_*rr{y%`j@W`$oU$sg7itLTpuZvDtx=# z>>WTh!>Y9$4QX_Dz-454jzRMuh%w0{vX>NZ2Ww=4Z!xZF`f_N0I?#8uVx}b%j^Mg2 z5Q%hNlCtexJRMTlwW0;1i;fD`IIU(GS>W`xB6xkOzS@dcECi=j z5^6*^1W8buSz3^VvIU@A6~z@_QNDKA(w}azH*xEs#NBgIv?R5_%$7EzmBkGneTcN| zAdE$QKNZuPxbC|kKn!v(k0(YQSI?f(8$gs3OApm%t1cGkeRe`8LC|_cw?jNM^IcG| zW_RCvTJj`uaW|nyK+U}J>YYbhA^;Cv=gLbvg58wFn%{1MAkG0>Erva z17B$QRYB7M3PHn%oNQtPFO+m0Z}>F|R|(wL-`jKCIhMup<#Ty_Hr8tm;w)aR*12wK z2Rpb>czhJ{^wxwG^eUlBJKJ*Tcjd4W$5cPu@hi4I`ivGMarr6#wz=VPzVKZBqeXNYb50{A`lwGY5KIGq zN3!b^cGfobbYHUE(GW3y`ZNePD$M4u)2!3&R0rRAzt0ZNtUS;TN z4oFUfakF7IwikuJQ3*MY(JVo3G5AMFK#x-Z9!|{CXZEQ+YgcL3cS@q~2#t*RboV%V z>D6|`->1o%rup5;HB|QrG%qQ@DM|o8dPZQWubn3Yswj3? zeG{Z1)d*mm{a3y}PU2sEK4&?96?RRT;8*9+h)r}lOY1tI>P*vtJKjUgCa>;!p<%qP z^S}tX7mGKLzMTKe6j&EP?_WfRF5p(rC^ZA7U&g11#5Tmyb|PnCKyAyhHA;z4q3y~N zW=mMf)^N(4KGE?#yeg*d{ti(UhOGHQ+XtAf`fvps=j2W|wCtg)`W6yz!LO=yrgCx% zvW%bZS{ii^BYm*I*UAQ?I8diaw?mMdg^Rlf>a1K`vZ^dymKH1!#mji{;?`DGRtpj9 zEr-bxZ|6m`1=pEd?dNsN_B~H>JaR+Co=+Sw&j6c*ao%NbEADS>6f0vjt}LbMZ_BKJh&XhIyg`7 z%$CBoMxp0T9irV5B0V z_q28x-ryzJJBh1^w$v5tdK#C3;nq9;Oagh2bDegg&c(qD;Q?WCZLz)fk@_3oDD<&X zV+gC^qXW>Bdz7`nzyiN*DNypEQPV-x;Oc&9P?doBQ4*n=GY(FL+9{Y1F~y`Nwfocf zts%4{q%3r1ITdd^s4u6_ftmhJ=|5k2%~xJq1!Vk~e{~T)i~wc@W9x}!``Tz{sNhW& zT|bNG9FTY@i>wRw59GFw8zd#S95H^Gxn!5CL)rBA2Adt2K9`2GUUy-k`@ z*~DSUPIX?4x>M7Rgp5_~S>Lbp_;*%ZiQ^t1_odRFhy4oddCeq)-cnfufBXVXE&IK- zN=;qRrQ#Jz0vMmu@e0a6T?1n)7tWbpw02Td~2^eU$sZtI;gf7}u)-A1YsL*b6g>T_&1%6)8|2R#_-4NCS zR>Bw3juTq|Y>FONOj@Jb75o+gy=6xTyr&r||8N!&H~VE_9n=n@HGmO;zS9}eqV#h= zz4`GV_Q)kW7(g6eS(D$Tm?NOP6mFQ`@#s74<~pK)jR-?i0v2SU+59$9d$w`nQ!$wt z2lZQJHjq){6I94VQijuBQS-=klNDcS_ShBCh7=)EbgwjF@w99B32e69=9*b zw~)DPs*cz@UKUJg$ts8LzzWGom2f1r#T3+H$k;e_t>Xdo}@PV zdlNBMYollL(xj#nSiO0#QO8o>Y>l4TDxS7UIBhA(n{?98}V@q*W6QiJtX@fr@?`iw&oC@t-4haIE+%+zm; zcc^@Slb(nUNX&Y_TR#^4K#WNmkv*YkJ0Q*px?SJML@^6{pz1=b64}P?=e)s17u#CV zG8k_pb4D`qSA%}jmUwx@ltsjhI5>aZx!WrEBrV`|^{1{1kPgr4l5?1%!0!oc3W8cp z&BCHKunA;UkgY~R2aip3L@TFjXzw4VdBFK4V73`U}c%x2WSXB`aiIwF2Ep0UT> ziWsVbPm3wr+hOIhRtYD@oIEurPi?vCPDE*EGbIiXg>k@EGv#%I%UkbWF0tyz=cc1u zS9y{wjaBnHNmm5pv23jxm831WGI5Y1a24KwHZ34P$6zUieO6C7*rTsc`Srb04lCK@ z>rL)u*U2UVueY4LJ2}P4`p5=t*8}`>>G8RFf`P$0YlWUS5 zBv%3OnWxgK{QR>$;~|G>=8vGo^B4Qa9|qIRAE3p>J~HTH=1|EYRQCJDpLzc&-Pd=y z?q%|5zH0z!<_?xO-9z@A&HU-K$kB2-NRwRJeBR8~R<=HWaj0ya4UrD6UK}o4X9IKF zT_M|_4w9?$#@fl#vx8;oY%Vq9FbM?B~yjz zX*3RTpk@v!Tls!*XtpnE9NN2x`q@&b-Le1l%bsyaxFvu3W#-Uo@$DuI_KZIW(!74! zPEbIagFHV8p3Zmdj27TaKU?oz;%oudy!6_Zo+QsfF29+#Rl_k2_l%1G(Y@u(=}PdX znil-&|Jz0@bN+-Y9sV>@lN&7A&OsYI!n#k`qEN4mF4nkuBzoxTFxX_wuxL{kw3QSZ zP%+Y2Fsj*#lgdXUadH-uy%7^Qz)h<>_z7|riM9lnC27H9*PrQHtoOc$UCuFa`r}YIty9tzceWU>9auX zy+DcTS%)K5v&-iIgiDm{IsmCELcM2k+Fx zFofwK&g&QRf&Cza=^&0}7xTGn?}Ulp4o+)H&li+?Cl>tFJ8e+=eDK~svA}9S(~5;G zI5dmJ-iXD;^mmlAp}L=9F>$E*Y;x|OSnvu@`;d+M(=W4F?2TAlq~Wxx0_$na0vE%YIn0p?2AaW7E;`Q{W1&Eq=IyU z1o%KnKy@4W@>jB5M1z0CxInWcWhjLiBRWj0$v%nhvB^~VHDU6}g!Phon~V{U@tJ`f zDDyK>4!khWyntptjRO+rnG5Q^W|H#m@*mVMRw@7MQ@f|8=6tUWdCsA8i|{EsU1yR~lv-4AA+2tYsQs@*M<{QMMRs+g={i zTRA!x;h@Ct`?Gg%-R;nlPlcO-forTwrsr5iPar~o$N;t-0L$3YY82}oxGA_}lOOfQu%``JW{n*UJ<>&Dv&I!{B3c$@XIR7H6PR2!=rj(;s z2p}ik!UI7~H*p@WC|{65r^d4u zQPWzcV8JxDvt}SdT}E3 zoJW{aTQc<`+}{-Z)Z78iW-huyDp1=LUdO_k4b@qG62Y$!y2l8?K3>t7ebFh22PIhr z$KuxMP72(!#kVx3Y3MIbU&WghO}ir%jkn+)JsyNwe^VMt7bMa0TY^szV`jK<48hIF92a zCm=Na;!)WUnG$7)=OM~IkfVB0mEcnn1=L*>PE|T;o7iZt60~~exX>EaTq;X>E&d- zG!~0V=pAEwwr_k_d7c-+EXqXhw}%eFD|}bkDk2X}JTfC?&@`}01UkSkvnQrj2AQcg z7-GFN%@GxlUNmtl2fg*geo2HYHBlFy(ahe8t+QLQN;PDS@=n5oR>=+RrG@ybO~m)l z6ln+#0N$Z@Y}2#PYThHt+FQk4OfY7^R@7eoz9CVV-<>2YHn4s+B7Z!S2RH^`aW7FE z-Pu2Pc(kK1i3SCS$xDe=x!#2d*(nGq!#vh?whV#6u6 zEC{rbvms#`80n*P(|yNh%_!5_f!k@@ujZKDnWq~n?am#9{i~M%{cppJS*`5VC1XFn z>-=`BA$!cg_>N@PCrLoJ3821)LwK3Va?M6%v<&2y*pjx^L%i6VEzt~(9UP{-y$;zH ztpbAiz2KPRRMiR6(ZHgONjM7q=+iaYY&AHK)2j`*%OC^(m3*kWvvH)^YYN_w2M&~F zpVE|q=LnyM``qrwtJh=&NY?bSQEvDL3T{pG787xw%gw2En%sl|(@aZ}(kC$2ARsxhp}DtidmP!t$tGp=&rPZ%6z6>tWhCMZ zIH5ktJfF{7gd#ZKsRX|N?&nErLpz)nWekS8XUn(@KO$My%j)6mJ8wjCbQEx~LQ43d zy;w-VWhSN{b1vl^&>|LN6SFa+JGeb?U?OVobO@iwZz35dVz$Ahx@5ZN?yr?SPQ1nT zLf8-E#9JjPRqQi(-Nrtsvy$Jp+%xT3!EiSv#Z|7zk~s^{!lK;DL7r!(cV{Q|DiJ0i zeKrWE1u$Rl0(0?J|JvqlqJ{*qeV1+2?5~XK*a;Ru6~=?+O$X<=wjE;uzT-3{cV^%b zcx4>uPS}@BEx<-$2BTlTI1Z%m(_~H4+>n$qmPWih7ExDVCTc_K^XJC_?ljKnmA2(~ z3`xKEg2)OT1;*D=LiEYEgr~;@PsA?h!Y3mBM+8uWh-gE2$)6t+L^wlf!v`m!F@d{a z_Sq65VD(qYM!qs8oY1dSn}`8Ky^ILl2Xd1@M9Y0{oF9O_-4%wLv}f0Zpj_U?-ks! z@$j|ryf7TsvAr;yPL8}VI{5ZNlpm=sDR2ld$n~o$qTnj-k?J5{KIPxr@{b54x4D{5 z_>HW73X(l{lUQET-Go%Y>`NZvb`{>x9i<0qDD=Fk^NaV9F~y%%=Cl`-vB#gO$?x3n zDUf{~Z8BZ=5I&1nYs@^lVbef9Bu`wr+$@)%VUr#{J41o7g7!(2WZJ>D@NC9!skw%1 z=7w&)REB@VyvLh7fqSWl=JZ|6q2QMo8O3N)#r1epKB%lS<>OsE+;I5- zRht{NjZqIZ!y3|r=MPqH{v+X9z zDbCXW`IfylSU99VwBR1W-?(k)tx1@A?4WD9o;9VUaK^eM7nWe}mkuH5RLl5m#45BM z5RYXtkt~*wk`M|phzmDP-cs93yN|$Z8FrdfucUfVT&aey0X^(`xcfV0g@LQDAiZ6W zpEjtbjz0;n6aSw!)E~(0AdMisZ~dzUVNn6;!y84Y#2w2ZyotPd0n_j49~O(nAD*K1 zC(dWhnxr}X*h>+@dyGo_zTI0#gqe`+P!$GL?3?@oXf%b`lU&;qIduiUL7g2+t2V

    L-hZ!BtqT19_QSH!ALFafPD>=En2Ikhe(Cl_x{YDu(sk5PxBrA#o9XjvlGg>!0M zOinJ*J>80uFS?*RQ}WdrCLq_#WOHeWTzn{( zs*FE{ou7twjQlioYT+xx52Dicj?sFAsDy!XkiwW>y*%c*21hb!;|Qa^k35?DpSrw~ zLh!c+0pb&*1^^aKxOwQGXr+q@{6?=2NP364c9tt|osJhYSl?MsYE?Pa#|7z&hiJLCQ=&78vE%44|Gek27MKChhd2 zn0bQF0J7C5vsy@z)6SqAVNsPLhJw1z8x`=)M^@GCQ?X(@<|cP-h&nU}lO#}*zWF9= zBn>5M9phNvdhyouJZVjr<+rkp8s+fMNfO`ClznR)DWTXO(64E`fRs@5EUdw67ihHv zE{joM%U@n*8lhb=11$-7&SuxmZewO&QYeGjtL33~!cvfzfs+YP)c)GM$sE8UbI`0O z7<2L1TEgD&&XzaUt5&I(MR&xlCL=Z$Qb*Accd@m`NksG|wqEUa3n+M$sh8r$%Uft5 z4WB~|{vp-h8{#AHhU3bGFBW%~wg$94lBLSsu)Wu*aA!Y)?TN>Ax=Xffeam6V`6k_U zVY1g~zyZZ3X;r|5OKDA@-J>*x_9~?4Kd{`yT$zHML9oSU=x-vDT2Kvb%>nuep>@ig zCq|`3%ccz)9ahsaY6w+}bma^srp>9H5wzdwc2xSRs*8!`3JTzY_Ts;rDVqc1%IRyw z@jb6%s2v$HF?%GqDw|{_#Tihj} z*|p;|fZcLZDKceIa->qY_2^N|!$|4VfM!qn~0BYpF??2>Yw+$weZc*C|83=0=*SEv#kmYZ%O0Btq=EgcN_*EEKT>>T8U zV}LH=7O^Pc!EXg5M_%?@xL(8J51DX@zNsXF_C9wW{TODsYhXW6tdP_RuK1n-6>*?B zq^`ljk2-jy53P~Q$(L*;FaEYb(xl&i`0B5Gi< zIK7IKRM(AgE=nsiRrpEPfsFLBhB$EG1slBH1N>mV(GlD(RQ>U@$FQc@y}_@~L?=Je zw&Q3uwi451>OfwyRvUru2r+?wBplXiEjJn1g7D(qI)As(Zc@XTvff-qp)Zi;t4e8x z$W%i>mt+&=3-671#3xX_o#|XZ+63&GO}4YvF#N;U%yG_+5|Ap8oe=-YR4Z z)F&5pi32Nub4!5N&b3t%IO^!oLHko(k$VSi4P; zdAOpBDx5D#PB{FPF{-R@BY7u{Q6@-~VLMbPug&BJkdoI#N|2Qqm{6WNC4Rm|7#uS6 zbx5N?yBSNlnBY{nPQx28q?R~Fow)n9m@ISlfB&T*tJak$_cbCkt?;g@v{;Gm4%V7#ZY^?AGPBx8Dh|> zw1GO1BTC?S637-RN-1&Y?Grmu17MG@&DyYTM=rj*#dfA)z0$S!HpxY0emn-tg@d+L zxLOnFC`eOu|LHj)Z4$!BBz~FT2|rKoiZ;0|G;y>#!whsRSHS(3CLcvA&i!7OZ5W#| zj6ci-vW7P(@PIRuP3d)>opIcIPxYP&*s_ZVMH;Zj27!T7R z3V82gKVe1V)64?>i=Ay|D0xd_VdfcN9QBb`sWG<@qq=5l+r8q_g9ZT&|u>;L`!=Kkzl_x z=qawwYsYut z(~8(;d{xTD2DqS>qUtB&I>C)<8t5+)l%Ecx=9=bGj}gjD(gr#6#NCoF#sX!DdWJh2 z_GQa#M;LobX&ZW*jB>}c!k#0JIK{Ljd8dWkjVTRWxiUMjK@d&+6=^F@Bg4Gi312^x z-@?U9ljd%g$$PjJPjBc4x@0>)v%$08OC^;jeA_& zH>sm@_7?o``p+49{Hkz5?6gzNbWn4n=L@iZNRqV$6(6x-_S=Qfit$9JZKPK9j6EjO zeQbFISrJpkZBlqj#>AnJ82w0i;m)aH;%a^Uz6n$9%*oScR=eUd4`HS8@m!HujBe)U zK35waijb!QQ2bUJR~a)uoQa2+@EAf54f1;{(62TbT8%P0RM!2x+~o3t%XaU)t*G4U z?~ht|z;Z2Z;}KDL8D?Y%V`^fB3<-0GxU^i&`PXzs7Oy_$G|pgO)5HT~18bj&X2n_A ztvSQd*^yL?E|MmjdZ}f!FJn9dF&mW~2*{=_UIgdh7yymJfcq>U#`Ka>xFNm4U_M6F z%u8-#Z%zE)$Q4~MjVU(nYuxIt^L+i6r%!KhZx?Y%AU|0>{Rblw$Kuh~I!`gSQ2I3* z2P@cG0?J4dH4z5n8ZNsY9Bsy9H#oXDg_0y;v-z!(Xx&KX6{FyekH6|hZMO+VNAjOR z7C0;w;exAfjnc_#qD(%(Sp(Jh~zzVCGs~;3p(AdE+NSJ zlXF%E_fZ+_k$iVO@wY-sUfs|*N6(9X7V5kj=GD-DYrJWdy`mJI>W zez`mb$onxQx;|kOCh1+7aZF?}Bch7oEZDY=`^_3<4W2Gebse*fGG#5+xg!|Q;kLCe zn0Qq?7NmyG?h3H#S*a`_Wz*fQhXDy7KEx&lBzTgrA;&`DyD$i-Ztji-0ykk6UPjoI zYm?E`$~}pe*r$Y~Y5{@K_+VJZvZ8%3Ziay^ zg8%RapbU>QEAQZL=2yPtJ5C@Q>h<1tLd3`ONY>^5zv zuDDE@_DQIISic_SMCd@g0k*>iK{^CD4gys&MqOT{n0wTf)|l26X~DH&fxcVTTOAdY zI^j~WDbm~KnOJ}?;_&wk?M+?R`-mV$_9bRFy&zn%+xLnb5gj zn~0{$k{O-6?Q^?zj}9lZ@OKU(SIZdVX!l|0>#6u!eMq-@zJ0QZmA$x5>@8wNu0WYY zAi6iISq0)Y-dy_3hIi#CiTk?&Nv)|88n7N^Bi8O~Og$C4!#eYd^Hh^QbP2?}5FDYI z@>>&&#t5#kG)mEGxmV;FSv|X}RbO}J1Mi=Ge0R4RH!Sm@B##0lFpkJFdAm4{ef(#Fw32U&n-k^ycBSC-wA*=5N)Zg$0)VZ4uEx@_ zJ5*TKA)V!DxExg{7xi6xNL8&iER;9GDg%5>08H#1O3M5F6YcjT&1k=7WIrS%=r5y0 z_OZsjy2#Yo7TK#IjsM8NYp>PGsCCL=jk;U0T_@{Jgl_I~ZSKN+Om^GXUakd0xhT=p za@!XF9*J4EYLkE6djZ|u9lB5V=d9RS?oIpWk*IB7I}GQ`^y`1RCg1I90b6vt5|Yt+ zz*=s-Y^%%Rh|PF4B)7Arnn8Y*WD(CO!fH3%mw-*TE|ZO@vM+rnV#YbuYQ$8lg3pjp zNZ(=*k%@x|7#OiPW&Ba~@+77B0MCiXhLd_pL-={=fij)Ijr*-iDjChwi&#pdO;_YH zn!+`~-V?Kse{mCeEjz#CTDC_Z{h{4BJxjt&>HVx!J{;2xT0_5|TfjXvs`K$?y^1AR zDfH3Dx)ZN*6RR>Bw+`sXbyUhA&{tw32NWk39+OjREm0KPwbFRm2;oLIy59Hme4Nr7Xl!6Lhj3#^mB`EG{8(9g zy4#X`*VauK=0W$^5pqoFmYLMBl&^+D=E9L%mNe_a-Id#RJG<@s5FemmxVZKNuOYu~ z#m~$yJnxm1ir>FUl86#*)A^x`Vv^+iEhtot{aU`}eGcv_*#jll;f)>u$u{D#nC3x= zruM3yh4>)#>Aa$>-;)>`+wIpRI7HU_7#g=#J(~}i?#^72=?e%!kq6A)@z4?zSpeS0KCO$7pcJK;mwYq4=G?%^-l3$z*Wm>S4-=}il&v?);Z3`Hs(##)bN>dT=J}M+egABb@ zm96OY#6u@&CaPHL5?Si+S*>lcp=R%~`sM^N?*d zYxq3NFbad*kdS8w7+n}tKdcwh-wO1&MfCO9%Rhg^IdMiw>R-QRc46jX+?pcoaN>ZzL-YIGAT$<7~-Xq%BBP>uCHz=_E3_0 zInf&8TXUo}@}3|mzji_deN{i+f=27ho^xkl*h$mS;>KhaVwXKIrb*aEl-UM!a;?)z zZ%Cby53+q;sOo;@8ianxl<^9cEaN%*lAd2NoHrN%)=<}kI&9bt?5ONG!J8!>$30{X zoD?@yhNgFQYBgbK*wU%+uW`RNG|{Oa8WV7qeatqj4QT%NfG}9$#cES-`jqER<7LuJ z0dHU|kJcwe^AuBA5$aOT>#Yj_`!HM?>5)`;#n2FJfwQWuw6?6+YJo1`hT2n1>Vr=T zzfq;d*;dJVUzuN#kR4aCH3q>6bOLdbOn;pwt2WVUly>fxo1-R<#V~-ObIl_GX)e|s ztf+w5v!wHiTb@xcLa^~OFgzHX6Sl1QU8tb6=dba}P>t$D^Yll=FRlI9v z;Q!y=we>b`Ea~U{7lI$oB!HvYJfEBaoVi6fb3^Q8u-Ggxv_#8eC(*9n@q<;Y#Uv)sDS;U#(W=??gVn3mG^R-)cE^R`rvF-pEACmoggUuGLP zNv@@C2gv=n32g!^BlGzaj;+{?z9uWRP1g4F^evxEj^pXl!WfApMr;sqi|oC?GVp5W zoWh;t<452RPwIBkzi?-`2~LA;J1ZDVZF+fqYNR;mrzUZo z9nXYAXnW!FbPQW$1Kf@=L<`NTe94-hISd}nX=|)>wQ5)A3y!#8m@cN$PGzG*gd0< zMY2w^D0L#wmQ&05)9NJy(yxeihW=BxYc{lK-t)wwn@B_oau`V*Y%R0^LJ?Jt!A=>3 zlCoP=#KX86_}(6tXm$vi4PQ%18eZJhO~|!7e7ueBTYAF~TsEiTN?0rx4$Mu8v^q9L z1eK#L7>ca)B^9Ce^RJ?UwHCv~YBr!>y69X)3Al!64du425w}{kTfcrny;T|=v3vAj zuDckA!W-(h{>sM#Tz0HY)nJ1nb2)OCMHkK_%uuzLv=1TF(tJ&tMrjie$A-1EDRKDl z_8ZXW!ZCw+)NO66jWch&owrR)I}kYqBr=8r?(4>=0eXe^*Jh7j78Je|C-Qy^iE zbZt$bM@95bbI@#nb(~dnEO))#E z;x+sIUuVC^tKAZg)@3Ffg@(*bregTUWL70r%7)NT-0USpkZ^JIlxOjpBz<5S@*DMu z{PMi1rv6U$iPUB!V#CGnqI9v3tI=jEOCXnoW)O!+0?)u=H|-Nl&)O6pZaAw^!n}r1 zg#F1sv~Q?9VK$MHo-92>$qk>3iJs>$At&AWjz%lBLfXdo9I!h2LCt+sD(nuyS@f0z zg=R%h1O=e;0p^(>FkWOI1C)RWfe?lRqdlaSCAF>B5$LUc(TL`c=6f#0fa=V#?FfyN`teynu;DXTrGd(j@`dREbwDsY z9IM@ZbY7kMs;*%x2+KG9K{b7;{6_BSxp)|EY{D;*`NEa z{g#~s0LeDxw{Xx^XSWf2RmEgjnzd%X)-lhKH^RBgL0^nx@jz1x1_apU z^nOspZ!2A}H`aFt*|v1g%t0lj)MwPxySlf1JlU5dv;dCYc!Y3HqjUu0_rMl;L>7GGr|S0PJ!xl4zBMh_m^`nzIKk8vexM?A8X#-D7zXORa93zGd{GGB;iUA0kyOdXsK<==5&_Z=EC$C zmR#evmr(<}_yidB3=_SkjtO3>H_c>8|Mh7<8Clkz2u?Q6z zwE|wYGk&Anj}xeZ-zj_q3Td=3$puP{2=X$n?Bg}e#MbyIZwS55MY`G*cr!9K6gYsY zD9u{y+b(B&7xP+KwWrzVjw#<-10r!5Rzq)HH1yV1L(}PJu+7-h9*nQPf7F(2w>0k2 z#oak9vj`W01+bLcCWdHNY3Si94qPxz_w#DCc=br5p=Hx^%V`j$(0s(Zm6SRRCNdzM zZnFC9*-3D_8Y;ixRp1Xwpm@KNqa-*eL7%;fm5M~TXiF$#<~Pz*o@_&K#x$O6Ht{N9 zFHpLlMK_R;t-V0CIxfzF>e=6z(uEp81BzKK}I(C0pgS6-(yawOYx%TWn zw9IQquzk-g_<9Z6zE+%CYL~fF3*Z1PI#_* zA5%yW!Ij}<=z~>pmm=?FJUKpLv`zq{)uNXZ0BZF#ejlJ#qs!5OS}m$Lo#W${c;hjg zAHzpR{p&{>MA_J%E{7Acyn1=^M`3ex6XUU4oy`JdN}{#isApin_iKDaJr8AgE4(6j9T14T3GOI-Na^o_#YRCV*=;C$B?-yukBoc zqd6UqdK)c`j5Bc_^T{~SY5sNI%pN6p#oAGl*{cF(tCo?Ut6w`s3@fg64`X%`605aY;H``MAx<`WcU~7Rk{xu1m&ep58 zOL;7tuTMp?VUkj8wvToHWn+8|VVsctH5K)EOpwR8c9MM`Z9$~S+AFIrBZ=4i!|N-# zIYmHtSrt3bpo);k^7LX-^G`k}eS$4D?TpkLMJ=BY$xijSx zT>L;?K=y5i7M5ojFAHwCgA7XsTbNFoFXI*77KiMf z5$kGSuJ_=?6+7Z}0;vKzHtMYiJ^(dt-*ckzX1-WwdCwD}0V*6f^7iGeodr-^-L}Vr zyGwB`u0?_rr?|Tn*J6R-6xZTVDDKwc4#f#l+>1NKic_pWftT;zxl-;ocfNV=C6jX| z$*kZ0@0E4-UVERjb6E2NFC`pLfzrFd@l*H0vD%YvfZ7v z*p6M=13Ht*0aw@uHs(QrQn2kuI$H^gGn7(Tuy5h&>XxhE`mTxp6uEO#MU+_1%LFGN z2;rTKn_jj^FwL>d-BrQg;`b`Da+W@*}nrP($G#BJAzOUpEG`k@!(Gd3% zhntlDIB`M$jw!Xb6phQkGl3#83-Ky^3ADzOck4RJSHM;JP+U`?|8ltje-SxWovX}u zhyh{Bey;#azK+W_GK}&447J)-@%_uy&OtO!OVZHmmWM$V3p#i>rrV;2_kA_lKt;dWZQl%YSJCkb zEQw`QM`N&E^2tHc!-sk^9ExTnLr5y)*Q16~1^eA#Lk9(`-oS}xw2d*5x>>p7sIiPR zcl+W3YBZvJFH|@uv5r!Af1JU%W8=K=+QlweL*F{t2U#5`8Vnnh%69|nzn2;{z1HOC(EVo2 z6a()lr4`O$hD=p~JKJ7IgMl+vQ+rKX-XgN+8@plGJ{KfoWyh)>{{NRdst`e2&A0*J4V$E>tZop~K(Z(cT8MzbWjRffH^ zqWvh|7|3zkd@*A3vsw4vY%*?~ITpj9e6?6SSRm>UW08TJeO=dq5G;a~?L1wvR?0r} zw>;C#U5z#B@ELU>wyEi~^1OUtX9slt@L<6b7!dDK1WGvuT#VHwzW|M@q z9l@12S0gX6;~fZHdt)M*Aw_MBh;^#k^ps7-CauGZ+%_AFTFv!`09F>Up`&=Z8XHMJ z-G}uiQPq+n5;WIz)C~1>!5p?9QnC2qQ&MpT!M-*G1Y7_WYJ!zQ^&5(m{N!dhHi#@#!C<&vHxSP&JcxKBkw_I zf6-xN>2;HVjL;d^Diy_rQ8%AFir|8Fw+M3Umo(hY=!mf{^yIO2iH{03+#Z`AF97Fi zkWIp4hf{0ka8=;T18JOnHeWiwbe0<;5W{XfzP*p4c&7tFy~~uj$z&zQB=kIt)ifKj zC#+}hFl$Scv9#r(*B9t=6L_7mY6L)@y0is6be!WoU3JC?;kF_ATH_|y8fU(=NcJAX zi^OUJ16-DvY9zz%07rgCwDU=^xc-Pi!=LLCN2y&wr5~#VNi>GyPS__Gq|KQplof=I zlb2U$lrn5{;2r*;UVIMoP4YSrc>vGcMJNr+M$~huno+iIwSn5c7-iWZ;~kY-UFJkT z>&kRPyih1B!ZK!Hi?3*Izc~okj{89^XXBklp0ViGf>g62?oz6NlC@s;y{q#LxF&ar znnAdItyIZYpkb|YwKL=XG_L-3_vVn&?w5c4!lvj_TZsST>h_GNf2P$e(nfV<)tqo< zvRpaeImJ!o;xTiYgp27W7D9r^yTV6L7xO#RsgYW;ggDpLru2%!=S3c1CFP_+~Km9%_GQo_iesUY<$~wj3F!T^YJDR z9Y2#gVr)u%^LH$PW5V#>G?!kOWm5cdbM)%?%e02+Upw0bMh;SwfjHS@WV-3+He^=W zJCmsX#V-~JXs;$0AkE_(2@l=+@O8MIqDxz4sg?I& znRk~kPIzzkKOA8?KTA9^`C-`}{BBLopu@Aj_gC7{l!z39J%JeRfZoXET%!`dr_*rY z+AlNOa@AZ}bNa-+vr+a2Lx(g%P=MRKT6l)x_p(lwqNs4HUyewd?G82@%lS)uMTR!t zTs}~Ua+qCxH@x@$0x2D_G9GQ_7XB0+$b8Wr?QX;H8E z*J>31^tF|_hys7Lp{&_aDh*Ffw%wpV7L@mR?K1kKBeLHY$U_%D zu7sF*28|EhGWMDcas74LT43ct8oHy_2KllQd} zmf4iIvvw_TzFA+CBW0L7+jsZ!Okvbb{2;XqPirXud*~zKRvROif->-`M413W9CK5ak6KEa4)M4q2SOP4%2VB zYzh@MaMJck)utB*Z(oUZis9LNyc!k;Me%#a0cE<1NzAljkjsW-EG<7lMt2idz`TrE zlQOA#&2eIO+m0wm-F&SVnUcESNr}HxYx{s-uiptD(b`makb(HqYo_~=JY;JD`!%`Dn!x)P z&lRipMbRaC#V6*}_jp>YEwfA~DPL3+6gh+#essr&XU-4oQa4IM0|tO<@?9t-I>?t0 z0;xG7im~t9*u_>=w)#Dgk&pxycDiIhn<{WN$~7yP#jWo7M-R6zxxOY&=3amh4?8X! z&RdTsT)~?`LCLA8ceCU$KhLRkJqLp|kSj|SjI}P?K2C|)X?Wu8kMCv=Pb}@Ulp0AB ze@*bvN}>JH+M`fvShgSNu*XFc7E>Pe!Hr45uAzY{b5*O=FO(qVxL5S0OUVP8KAJuzpv; z_bVUV+4E8cA#)Cgqq3X1`CV)P!PzFAEBw?o6)(cYAw7_IOk0G6sRtc^tF+Rzd7zB%%CH9aRmo@W?`vfBE zR3n!CD4uahShL>ETp$ur{+2Q1oULn&cBPNJO8sVL=fT*?mFy^iwq(`&E{}D0urFQa zm8tT;h!0}C#x)FhovKmBsiD!?$l@*Ly|Yag7RC(ABLrm*tb6B`qI0%GqZ6m~f=puV7(UZPrs%H@rRcKG<(A zYLRzy^%&A!76jZIX}?ACxeX53yH4z*4L>|!k>MlqSq(aP6c1Up6-L3DJ}DWV4nKOi zSI}`8=xM8p@XnZe;Botg*|^sKky2Fw4jvx>03ZYCK~wVU&978qU;zMCcmMzu`l+Iv zq?EFT6uX0kmbyY*1}An0?HQ%Cz>&Ob>wb|s2$P@GBSQSk0*?%=vXhikNS5^7$xF%F zD!lYFzBO~i6=Gc!jAnD)_yJdDLwwPm!uUgAz#@dkZ3L4aol<2cGg)E?7Y;k28@JVTZGx6Be?7S@_l8fs01=*T024J8UsAW))FER zG9=5u$HuN45fX|vImf#5`6rRTvNaY2H4<-?Q7qmtlYG96v zEC@vRDvC!7EzH#2$E3{wQhagX_>PD8u|HI zteSzp>eVyF-o;xe%KH`N`SzsLQHAZh^@%Q9WNyo9tL=@O2<`j-9<+L9(xS`IfJMgw z0C1o|>k0zdyKua5ba6Gcw`X^9dC{(8ph7Bx?@&ya|4XT3(kzQwqLX6s@4XT z5ohv!!nVj}o8mZ?tqEefK!u})uo9PN{WQF$*fV8nfMEuE3`ngI>4F^!-SWey6q>_$ zGg@Wyq~s<{aV2NZOD?Tp?V?c;=RAc@P+g6&zh?#bkrmA*>eNZ<&8Tylj#-Qiy?{&; zYp`V3TznyZ_F6*uBY56`(9 zic}T294ZE)7!9=nc#3#gZWaJNg3jK^9L3OfQgEFQ?PSt65d@z*2KUq?B51@C5CyJ) ztF&3DcHPT&#`?T{gX$S_#blO1i_}~h1yltdGh~Nl_PV0B0l7K1J}9*WW0rEy6^$Lp zo_yUugLgPF=Lep7iw+iT5+FXPKRDtskjrE%DROaZ68nyha;+$ySfJyf3Fpd4Vn}uK zEGRxWvlPy7x?+MO^;`nK%Q%eLMBhhpe1h1RWRMixKZ{ArW8rUkd7WO{aBXFa?TB0%u+LKhsaiqZM*FFH$&E=Av7fj{A zjEBYUj|MB@;8d?Y0Go}Umod_*RI1llY?XCHkpp(C~A&6hRE#4z*$WBp1A~dM5I6MfdtVpdFW{=e%x(MhY2c#4{so zlJ^SVTUz}jQVOrkN-_FtJQx&iuzqg}Be7cxmY_}GAAL9;bZ;ODa&)zHbT!uWaeky?Cln%9WP{V>Q~aER#R;yYrk#> zao-;k1q+&(=1c=J8sS0*t#+q*x@gSL(OZx14Idxm21=9husEY8qGs)_qr;XIQ*F6+ zaAUsKDW*r?bK>pyLoa3lGC-ckWCC+5nPxgSZIY?>k8}&_+DuGT?_6%SNV~8RKrvrm zQ@+15we4VYpqs-S&;FT5DE8f$w|7#nMcKjy5+<({<@rlvTjKNjptdUe#=-5Sr)$$h zZ-&8XJ!jtinncyy$)X?3@4i@PT?xvC0RTFnzEFeu!pYR!&eYnH!^INp{>I$Wg~P$p z)zre&)s({=1h!;z0)w0^!LDzhU+`P<37B&6@$++j(f zcvq2X_br$cm!ni}gZ7YEiZ|rzYy-{Dy$KXATqLrre|Pzpq$v3(@{sTFKk8uR;Pk==x%+28NUA+pf~q8&Xex_Ukrw z9c7$H^Jd>VNo5=v*d30s0`Mw{+qGTthjh8u2HbJ=8;&n=paF3YeW5`E;`fI!*bY}rYG@IZKQ{!8 zA}|U7K=_-LAQYu+>EQ};bOBkpvdg=G9N8V+T%0V;pECA4+AS3e-~fPb6af8i41Q?p zV*kdB!_m?enz1-qn1U@{uyb=f#ah_gKV|k>&VOxg0st!TP@gadKEnMKCbT(t%4{Z! zoAZr=>I{3Tv(Fg*Kbf3=Mdxy+Ltu6z0HAmGlo@t_^jDaFqI2l%fJvhfs`C~FK>nLQ zZSs--!Q|onEAspuf^x!J0RRR$)F-GbUG)Eg`V&=wKi(o%;6qg*B0oWW#>e<4>MuD> zHK@kOwEzI9#CVFzWy1b1s6SCv86525H3bb|WTYpmR7U@a;{Hp%(zvehe3c6TP_8{i z!R6xpL)D+4{zR2~neaF^8q`;rPf+dKh5ZKk!%-)g>dcgAV(s4<6ym93JW9RhutttPDzY=x- zeo*{g5KcJh-!%Vk3i^{8iA7%bp5{S+{cJ>l_-{2r79so3f;gd7ak2m3)$5Nb1VP|B zDj)>_u<<~8Qk>2@#s9ImC$;;t8H;~au+f9^-{vp=y`B5R?&+ZMUv_rhl>a$|d}{tQ v(fXIUyFcZhrCm<}PqUMM0fGW3|NnCpRRsjZKZ+oPKGBf?fP^4Q=)3;`75l9( diff --git a/trunk/packages/Newtonsoft.Json.10.0.3/lib/net20/Newtonsoft.Json.dll b/trunk/packages/Newtonsoft.Json.10.0.3/lib/net20/Newtonsoft.Json.dll deleted file mode 100644 index c1f29c2967a53897cfd45c61cc80b7e287863cae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 498688 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�{zCk^d&5G)fuluA~d^~bHhYw$&LFImWU zadnViuEJSeGWXjeIbh%!K#u8)isR-j#f{2I%gGqlg-{XG|h%DA%ubC3Qg6NZUEu7)o@Has&_aPvBZP8=nG~ zLzvLvxUIkk44GX{4ow+Hc1+G7zERRIz#o$%%`T+Lsl)zJr(upX>oZ2lip|%TVX0vv zWCsOy8>)-p#to8l>j!!o9V;uIRBH@fiVMp=gtE0QiK|J0+R=*mLXMMT*d5zF_S(Y3XD%ZppKBRVx1(dK}9(R!ESXy>Kg1ICCssAqStJudl3Vuy zCu1;hamG*UYH*{P&pjVmF~$reWW})Q+Xm>{d_i?FJ|>uoU+HX^JTLW*}Mh#`0@OBp_nV= zglXY|_|?WIa@AUXaI>FQ)@DqE=(#&grTsp;|YLVl`JELAI0CHR`k7sA?fww$fh z3R7WevRckoC-c*lQY~MeC=@D%a;Y30>m&t(g> za+s^;r*pYte!N^6haRGFH(g(xkmE|7``fpXxGYGn}SUcrgQVps9TrHQMoT^O}Cc;W_B44RZSMuY<>FFHm5Kc^l<#KKu1)dt8C`^^c zbCXk3ljvo63SF#}E46HOyfR*^O_sx{@zMmkIvq|{xcJFeXt#wLcMbyO1Clq%)0j2!cBk!BFJ0L034x z=Sv5IU^Nk}SXQq4%)C&VovD`8>t+s@mNVrroX^ZHybxA1D+`&KmF3LB(fQ0`sq*#G zp>Qm7APh5yS5_A9yZ7FsM~{xpx4PuY!rZ-Iqg!6KUfI~6TUZJ+)o`UWGrK$%1V4u{ ztAmFT!piC*RHDqP;o?$QDXoy>%zS3$aF}^Wl2~30D>JnjB4BMS^QC3NXXZ;wt6(j! zgrzDJpGpLe{~uBO(vcbE8qwp0vroDb>`a)cEWMltADo?CIQry~*_D~a*-$YV5Vnpv zg{7>mW9n$s)-eN}9~V>a-7=;Z-X2>C=YrslMDT#;rT4MQ| zNxE2?uV#)CD>#<>kFMn9sFsf$3RlJ!mJZ$P^uB34eL)mbjSI=QE>sXFmUh%#!CR2Yr-tEoI2dM+|^;mYBK_LlQZB6w2$&i-(vFz(vv!wYkZRBd@?b_T&7otd4bbD?-n z?`Z0!Ozp_Z5xNL6Tvq?HP|HMp7ma(zFZ7q6{flq?;E!+q+lxDY^@rOZJF@RzzqIG| zKl%OdJ$CIEm;dm;{Cdy*|LUVJ|MEwV-uCNl5l_w2PlzxR(%JW_gM@Hc}O{^HUP{{9c&>iUO^yMN`Ih5z)ei@Oi}lV?x; z&qp4(W8t+wed1cG@!Y@slYjBhKYjdEedQPb^wWE2S;4P9^6X1N;>o8q4E-j*o4?%? z+g=pX|EteHB|S!;$tyAV zEB^X;R{34Sc47K+LGb3wbWsn2iKLranb(}XxCyA1FkSaZFk=?# z9>dg}%-rd3x1~B58@7{?xyTltAp~bTYh;yxCz-#Kt-V8APWtn!UfzI|AB%s_b=x5RIem_@U>C$2LX`I{ln!&u6cS;Zye zeF--qoA5vL>4NM zWUf-*8kPxu!=&yct$J(EZ%^<9sih|wxRyRRo`0I0+VgT+CnJffOVyP$!~H#N<$KEW zA!;gLq`~s3j<>F-t;(4Xddb^ay{w{J6-w5U)~)p=F7iRoEonB_QhOaK&3%^7gOp_1 m$|akStH|Nw)44iU+8_V@KP~~@qB5s@O^x@*fB)Y};C}(LuM30# diff --git a/trunk/packages/Newtonsoft.Json.10.0.3/lib/net20/Newtonsoft.Json.xml b/trunk/packages/Newtonsoft.Json.10.0.3/lib/net20/Newtonsoft.Json.xml deleted file mode 100644 index 0647513..0000000 --- a/trunk/packages/Newtonsoft.Json.10.0.3/lib/net20/Newtonsoft.Json.xml +++ /dev/null @@ -1,9815 +0,0 @@ - - - - Newtonsoft.Json - - - -

    - Represents a BSON Oid (object id). - - - - - Gets or sets the value of the Oid. - - The value of the Oid. - - - - Initializes a new instance of the class. - - The Oid value. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. - - - - - Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. - - - true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. - - - - - Gets or sets a value indicating whether the root object will be read as a JSON array. - - - true if the root object will be read as a JSON array; otherwise, false. - - - - - Gets or sets the used when reading values from BSON. - - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. - - - - - Gets or sets the used when writing values to BSON. - When set to no conversion will occur. - - The used when writing values to BSON. - - - - Initializes a new instance of the class. - - The to write to. - - - - Initializes a new instance of the class. - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. - - - - - Writes the end. - - The token. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes the beginning of a JSON array. - - - - - Writes the beginning of a JSON object. - - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value that represents a BSON object id. - - The Object ID value to write. - - - - Writes a BSON regex. - - The regex pattern. - The regex options. - - - - Specifies how constructors are used when initializing objects during deserialization by the . - - - - - First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. - - - - - Json.NET will use a non-public default constructor before falling back to a parameterized constructor. - - - - - Converts a binary value to and from a base 64 string value. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Creates a custom object. - - The object type to convert. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Creates an object which will then be populated by the serializer. - - Type of the object. - The created object. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Provides a base class for converting a to and from JSON. - - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). - - - - - Gets or sets the date time styles used when converting a date to and from JSON. - - The date time styles used when converting a date to and from JSON. - - - - Gets or sets the date time format used when converting a date to and from JSON. - - The date time format used when converting a date to and from JSON. - - - - Gets or sets the culture used when converting a date to and from JSON. - - The culture used when converting a date to and from JSON. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from its name string value. - - - - - Gets or sets a value indicating whether the written enum text should be camel case. - - true if the written enum text will be camel case; otherwise, false. - - - - Gets or sets a value indicating whether integer values are allowed when deserializing. - - true if integers are allowed when deserializing; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - true if the written enum text will be camel case; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from a string (e.g. "1.2.3.4"). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts XML to and from JSON. - - - - - Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. - - The name of the deserialized root element. - - - - Gets or sets a flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - true if the array attribute is written to the XML; otherwise, false. - - - - Gets or sets a value indicating whether to write the root JSON object. - - true if the JSON root object is omitted; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The calling serializer. - The value. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Checks if the is a namespace attribute. - - Attribute name to test. - The attribute name prefix if it has one, otherwise an empty string. - true if attribute name is for a namespace attribute, otherwise false. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Specifies how dates are formatted when writing JSON text. - - - - - Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". - - - - - Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". - - - - - Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. - - - - - Date formatted strings are not parsed to a date type and are read as strings. - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Specifies how to treat the time value when converting between string and . - - - - - Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. - - - - - Treat as a UTC. If the object represents a local time, it is converted to a UTC. - - - - - Treat as a local time if a is being converted to a string. - If a string is being converted to , convert to a local time if a time zone is specified. - - - - - Time zone information should be preserved when converting. - - - - - Specifies default value handling options for the . - - - - - - - - - Include members where the member value is the same as the member's default value when serializing objects. - Included members are written to JSON. Has no effect when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - so that it is not written to JSON. - This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, - decimals and floating point numbers; and false for booleans). The default value ignored can be changed by - placing the on the property. - - - - - Members with a default value but no JSON will be set to their default value when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - and set members to their default value when deserializing. - - - - - Specifies float format handling options when writing special floating point numbers, e.g. , - and with . - - - - - Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". - - - - - Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. - Note that this will produce non-valid JSON. - - - - - Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. - - - - - Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Floating point numbers are parsed to . - - - - - Floating point numbers are parsed to . - - - - - Specifies formatting options for the . - - - - - No special formatting is applied. This is the default. - - - - - Causes child objects to be indented according to the and settings. - - - - - Provides an interface for using pooled arrays. - - The array type content. - - - - Rent an array from the pool. This array must be returned when it is no longer needed. - - The minimum required length of the array. The returned array may be longer. - The rented array from the pool. This array must be returned when it is no longer needed. - - - - Return an array to the pool. - - The array that is being returned. - - - - Provides an interface to enable a class to return line and position information. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - The current line number or 0 if no line information is available (for example, when returns false). - - - - Gets the current line position. - - The current line position or 0 if no line information is available (for example, when returns false). - - - - Instructs the how to serialize the collection. - - - - - Gets or sets a value indicating whether null items are allowed in the collection. - - true if null items are allowed in the collection; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with a flag indicating whether the array can contain null items. - - A flag indicating whether the array can contain null items. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to use the specified constructor when deserializing that object. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the id. - - The id. - - - - Gets or sets the title. - - The title. - - - - Gets or sets the description. - - The description. - - - - Gets or sets the collection's items converter. - - The collection's items converter. - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets a value that indicates whether to preserve object references. - - - true to keep object reference; otherwise, false. The default is false. - - - - - Gets or sets a value that indicates whether to preserve collection's items references. - - - true to keep collection's items object references; otherwise, false. The default is false. - - - - - Gets or sets the reference loop handling used when serializing the collection's items. - - The reference loop handling. - - - - Gets or sets the type name handling used when serializing the collection's items. - - The type name handling. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Provides methods for converting between .NET types and JSON types. - - - - - - - - Gets or sets a function that creates default . - Default settings are automatically used by serialization methods on , - and and on . - To serialize without using any default settings create a with - . - - - - - Represents JavaScript's boolean value true as a string. This field is read-only. - - - - - Represents JavaScript's boolean value false as a string. This field is read-only. - - - - - Represents JavaScript's null as a string. This field is read-only. - - - - - Represents JavaScript's undefined as a string. This field is read-only. - - - - - Represents JavaScript's positive infinity as a string. This field is read-only. - - - - - Represents JavaScript's negative infinity as a string. This field is read-only. - - - - - Represents JavaScript's NaN as a string. This field is read-only. - - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - The time zone handling when the date is converted to a string. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - The string escape handling. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Serializes the specified object to a JSON string. - - The object to serialize. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting. - - The object to serialize. - Indicates how the output should be formatted. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a collection of . - - The object to serialize. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting and a collection of . - - The object to serialize. - Indicates how the output should be formatted. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Deserializes the JSON to a .NET object. - - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to a .NET object using . - - The JSON to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The JSON to deserialize. - The of object being deserialized. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The type of the object to deserialize to. - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the given anonymous type. - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the given anonymous type using . - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The type of the object to deserialize to. - The JSON to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The type of the object to deserialize to. - The object to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The JSON to deserialize. - The type of the object to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The JSON to deserialize. - The type of the object to deserialize to. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Populates the object with values from the JSON string. - - The JSON to populate values from. - The target object to populate values onto. - - - - Populates the object with values from the JSON string using . - - The JSON to populate values from. - The target object to populate values onto. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - - - - Serializes the to a JSON string. - - The node to serialize. - A JSON string of the . - - - - Serializes the to a JSON string using formatting. - - The node to serialize. - Indicates how the output should be formatted. - A JSON string of the . - - - - Serializes the to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output should be formatted. - Omits writing the root object. - A JSON string of the . - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - and writes a Json.NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized . - - - - Converts an object to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can read JSON. - - true if this can read JSON; otherwise, false. - - - - Gets a value indicating whether this can write JSON. - - true if this can write JSON; otherwise, false. - - - - Instructs the to use the specified when serializing the member or class. - - - - - Gets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - - - - - Initializes a new instance of the class. - - Type of the . - - - - Initializes a new instance of the class. - - Type of the . - Parameter list to use when constructing the . Can be null. - - - - Represents a collection of . - - - - - Instructs the how to serialize the collection. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Instructs the to deserialize properties with no matching class member into the specified collection - and write values during serialization. - - - - - Gets or sets a value that indicates whether to write extension data when serializing the object. - - - true to write extension data when serializing the object; otherwise, false. The default is true. - - - - - Gets or sets a value that indicates whether to read extension data when deserializing the object. - - - true to read extension data when deserializing the object; otherwise, false. The default is true. - - - - - Initializes a new instance of the class. - - - - - Instructs the not to serialize the public field or public read/write property value. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the member serialization. - - The member serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified member serialization. - - The member serialization. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to always serialize the member with the specified name. - - - - - Gets or sets the used when serializing the property's collection items. - - The collection's items . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the null value handling used when serializing this property. - - The null value handling. - - - - Gets or sets the default value handling used when serializing this property. - - The default value handling. - - - - Gets or sets the reference loop handling used when serializing this property. - - The reference loop handling. - - - - Gets or sets the object creation handling used when deserializing this property. - - The object creation handling. - - - - Gets or sets the type name handling used when serializing this property. - - The type name handling. - - - - Gets or sets whether this property's value is serialized as a reference. - - Whether this property's value is serialized as a reference. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets a value indicating whether this property is required. - - - A value indicating whether this property is required. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified name. - - Name of the property. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Specifies the state of the reader. - - - - - A read method has not been called. - - - - - The end of the file has been reached successfully. - - - - - Reader is at a property. - - - - - Reader is at the start of an object. - - - - - Reader is in an object. - - - - - Reader is at the start of an array. - - - - - Reader is in an array. - - - - - The method has been called. - - - - - Reader has just read a value. - - - - - Reader is at the start of a constructor. - - - - - Reader is in a constructor. - - - - - An error occurred that prevents the read operation from continuing. - - - - - The end of the file has been reached successfully. - - - - - Gets the current reader state. - - The current reader state. - - - - Gets or sets a value indicating whether the source should be closed when this reader is closed. - - - true to close the source when this reader is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether multiple pieces of JSON content can - be read from a continuous stream without erroring. - - - true to support reading multiple pieces of JSON content; otherwise false. - The default is false. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - Gets or sets how time zones are handled when reading JSON. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how custom date formatted strings are parsed when reading JSON. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets the type of the current JSON token. - - - - - Gets the text value of the current JSON token. - - - - - Gets the .NET type for the current JSON token. - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Reads the next JSON token from the source. - - true if the next token was read successfully; false if there are no more tokens to read. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Skips the children of the current token. - - - - - Sets the current token. - - The new token. - - - - Sets the current token and value. - - The new token. - The value. - - - - Sets the current token and value. - - The new token. - The value. - A flag indicating whether the position index inside an array should be updated. - - - - Sets the state based on current token type. - - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Changes the reader's state to . - If is set to true, the source is also closed. - - - - - The exception thrown when an error occurs while reading JSON text. - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Initializes a new instance of the class - with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The line number indicating where the error occurred. - The line position indicating where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Instructs the to always serialize the member, and to require that the member has a value. - - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Serializes and deserializes objects into and from the JSON format. - The enables you to control how objects are encoded into JSON. - - - - - Occurs when the errors during serialization and deserialization. - - - - - Gets or sets the used by the serializer when resolving references. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how object references are preserved by the serializer. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) is handled. - - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - - - - Gets or sets how null values are handled during serialization and deserialization. - - - - - Gets or sets how default values are handled during serialization and deserialization. - - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets a collection that will be used during serialization. - - Collection that will be used during serialization. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Indicates how JSON text output is formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled during serialization and deserialization. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. - - - true if there will be a check for additional JSON content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Creates a new instance. - The will not use default settings - from . - - - A new instance. - The will not use default settings - from . - - - - - Creates a new instance using the specified . - The will not use default settings - from . - - The settings to be applied to the . - - A new instance using the specified . - The will not use default settings - from . - - - - - Creates a new instance. - The will use default settings - from . - - - A new instance. - The will use default settings - from . - - - - - Creates a new instance using the specified . - The will use default settings - from as well as the specified . - - The settings to be applied to the . - - A new instance using the specified . - The will use default settings - from as well as the specified . - - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Deserializes the JSON structure contained by the specified . - - The that contains the JSON structure to deserialize. - The being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The type of the object to deserialize. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is Auto to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Specifies the settings on a object. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) are handled. - - Reference loop handling. - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - Missing member handling. - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how null values are handled during serialization and deserialization. - - Null value handling. - - - - Gets or sets how default values are handled during serialization and deserialization. - - The default value handling. - - - - Gets or sets a collection that will be used during serialization. - - The converters. - - - - Gets or sets how object references are preserved by the serializer. - - The preserve references handling. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - The type name handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - The contract resolver. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets the used by the serializer when resolving references. - - The reference resolver. - - - - Gets or sets a function that creates the used by the serializer when resolving references. - - A function that creates the used by the serializer when resolving references. - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the error handler called during serialization and deserialization. - - The error handler called during serialization and deserialization. - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Indicates how JSON text output is formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled during serialization and deserialization. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets a value indicating whether there will be a check for additional content after deserializing an object. - - - true if there will be a check for additional content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Represents a reader that provides fast, non-cached, forward-only access to JSON text data. - - - - - Initializes a new instance of the class with the specified . - - The containing the JSON data to read. - - - - Gets or sets the reader's character buffer pool. - - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - - The current line number or 0 if no line information is available (for example, returns false). - - - - - Gets the current line position. - - - The current line position or 0 if no line information is available (for example, returns false). - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets or sets the writer's character array pool. - - - - - Gets or sets how many s to write for each level in the hierarchy when is set to . - - - - - Gets or sets which character to use to quote attribute values. - - - - - Gets or sets which character to use for indenting when is set to . - - - - - Gets or sets a value indicating whether object names will be surrounded with quotes. - - - - - Initializes a new instance of the class using the specified . - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying . - - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the specified end token. - - The end token to write. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Specifies the type of JSON token. - - - - - This is returned by the if a read method has not been called. - - - - - An object start token. - - - - - An array start token. - - - - - A constructor start token. - - - - - An object property name. - - - - - A comment. - - - - - Raw JSON. - - - - - An integer. - - - - - A float. - - - - - A string. - - - - - A boolean. - - - - - A null token. - - - - - An undefined token. - - - - - An object end token. - - - - - An array end token. - - - - - A constructor end token. - - - - - A Date. - - - - - Byte data. - - - - - - Represents a reader that provides validation. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Sets an event handler for receiving schema validation errors. - - - - - Gets the text value of the current JSON token. - - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - - Gets the type of the current JSON token. - - - - - - Gets the .NET type for the current JSON token. - - - - - - Initializes a new instance of the class that - validates the content returned from the given . - - The to read from while validating. - - - - Gets or sets the schema. - - The schema. - - - - Gets the used to construct this . - - The specified in the constructor. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a []. - - - A [] or null if the next JSON token is null. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets or sets a value indicating whether the destination should be closed when this writer is closed. - - - true to close the destination when this writer is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. - - - true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. - - - - - Gets the top. - - The top. - - - - Gets the state of the writer. - - - - - Gets the path of the writer. - - - - - Gets or sets a value indicating how JSON text output should be formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled when writing JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written to JSON text. - - - - - Gets or sets how and values are formatted when writing JSON text. - - - - - Gets or sets the culture used when writing JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the destination and also flushes the destination. - - - - - Closes this writer. - If is set to true, the destination is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the end of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the end of an array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end constructor. - - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes the end of the current JSON object or array. - - - - - Writes the current token and its children. - - The to read the token from. - - - - Writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - - - - Writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - null can be passed to the method for tokens that don't have a value, e.g. . - - - - - Writes the token. - - The to write. - - - - Writes the specified end token. - - The end token to write. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON without changing the writer's state. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Sets the state of the . - - The being written. - The value being written. - - - - The exception thrown when an error occurs while writing JSON text. - - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Initializes a new instance of the class - with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Specifies how JSON comments are handled when loading JSON. - - - - - Ignore comments. - - - - - Load comments as a with type . - - - - - Specifies how line information is handled when loading JSON. - - - - - Ignore line information. - - - - - Load line information. - - - - - Contains the LINQ to JSON extension methods. - - - - - Returns a collection of tokens that contains the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the descendants of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, and the descendants of every token in the source collection. - - - - Returns a collection of child properties of every object in the source collection. - - An of that contains the source collection. - An of that contains the properties of every object in the source collection. - - - - Returns a collection of child values of every object in the source collection with the given key. - - An of that contains the source collection. - The token key. - An of that contains the values of every token in the source collection with the given key. - - - - Returns a collection of child values of every object in the source collection. - - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child values of every object in the source collection with the given key. - - The type to convert the values to. - An of that contains the source collection. - The token key. - An that contains the converted values of every token in the source collection with the given key. - - - - Returns a collection of converted child values of every object in the source collection. - - The type to convert the values to. - An of that contains the source collection. - An that contains the converted values of every token in the source collection. - - - - Converts the value. - - The type to convert the value to. - A cast as a of . - A converted value. - - - - Converts the value. - - The source collection type. - The type to convert the value to. - A cast as a of . - A converted value. - - - - Returns a collection of child tokens of every array in the source collection. - - The source collection type. - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child tokens of every array in the source collection. - - An of that contains the source collection. - The type to convert the values to. - The source collection type. - An that contains the converted values of every token in the source collection. - - - - Returns the input typed as . - - An of that contains the source collection. - The input typed as . - - - - Returns the input typed as . - - The source collection type. - An of that contains the source collection. - The input typed as . - - - - Represents a collection of objects. - - The type of token. - - - - Gets the of with the specified key. - - - - - - Represents a JSON array. - - - - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads an from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the at the specified index. - - - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Inserts an item to the at the specified index. - - The zero-based index at which should be inserted. - The object to insert into the . - - is not a valid index in the . - - - - - Removes the item at the specified index. - - The zero-based index of the item to remove. - - is not a valid index in the . - - - - - Returns an enumerator that iterates through the collection. - - - A of that can be used to iterate through the collection. - - - - - Adds an item to the . - - The object to add to the . - - - - Removes all items from the . - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Copies the elements of the to an array, starting at a particular array index. - - The array. - Index of the array. - - - - Gets a value indicating whether the is read-only. - - true if the is read-only; otherwise, false. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - - - Represents a JSON constructor. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets or sets the name of this constructor. - - The constructor name. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name. - - The constructor name. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a token that can contain other tokens. - - - - - Occurs when the list changes or an item in the list changes. - - - - - Occurs before an item is added to the collection. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Get the first child token of this token. - - - A containing the first child token of the . - - - - - Get the last child token of this token. - - - A containing the last child token of the . - - - - - Returns a collection of the child tokens of this token, in document order. - - - An of containing the child tokens of this , in document order. - - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - - A containing the child values of this , in document order. - - - - - Returns a collection of the descendant tokens for this token in document order. - - An of containing the descendant tokens of the . - - - - Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. - - An of containing this token, and all the descendant tokens of the . - - - - Adds the specified content as children of this . - - The content to be added. - - - - Adds the specified content as the first children of this . - - The content to be added. - - - - Creates a that can be used to add tokens to the . - - A that is ready to have content written to it. - - - - Replaces the child nodes of this token with the specified content. - - The content. - - - - Removes the child nodes from this token. - - - - - Merge the specified content into this . - - The content to be merged. - - - - Merge the specified content into this using . - - The content to be merged. - The used to merge the content. - - - - Gets the count of child JSON tokens. - - The count of child JSON tokens. - - - - Represents a collection of objects. - - The type of token. - - - - An empty collection of objects. - - - - - Initializes a new instance of the struct. - - The enumerable. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Gets the of with the specified key. - - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Represents a JSON object. - - - - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Occurs when a property value changes. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Gets the node type for this . - - The type. - - - - Gets an of of this object's properties. - - An of of this object's properties. - - - - Gets a the specified name. - - The property name. - A with the specified name or null. - - - - Gets a of of this object's property values. - - A of of this object's property values. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the with the specified property name. - - - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified property name. - - Name of the property. - The with the specified property name. - - - - Gets the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - One of the enumeration values that specifies how the strings will be compared. - The with the specified property name. - - - - Tries to get the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - The value. - One of the enumeration values that specifies how the strings will be compared. - true if a value was successfully retrieved; otherwise, false. - - - - Adds the specified property name. - - Name of the property. - The value. - - - - Removes the property with the specified name. - - Name of the property. - true if item was successfully removed; otherwise, false. - - - - Tries to get the with the specified property name. - - Name of the property. - The value. - true if a value was successfully retrieved; otherwise, false. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Represents a JSON property. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the property name. - - The property name. - - - - Gets or sets the property value. - - The property value. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a view of a . - - - - - Initializes a new instance of the class. - - The name. - - - - When overridden in a derived class, returns whether resetting an object changes its value. - - - true if resetting the component changes its value; otherwise, false. - - The component to test for reset capability. - - - - When overridden in a derived class, gets the current value of the property on a component. - - - The value of a property for a given component. - - The component with the property for which to retrieve the value. - - - - When overridden in a derived class, resets the value for this property of the component to the default value. - - The component with the property value that is to be reset to the default value. - - - - When overridden in a derived class, sets the value of the component to a different value. - - The component with the property value that is to be set. - The new value. - - - - When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. - - - true if the property should be persisted; otherwise, false. - - The component with the property to be examined for persistence. - - - - When overridden in a derived class, gets the type of the component this property is bound to. - - - A that represents the type of component this property is bound to. - When the or - - methods are invoked, the object specified might be an instance of this type. - - - - - When overridden in a derived class, gets a value indicating whether this property is read-only. - - - true if the property is read-only; otherwise, false. - - - - - When overridden in a derived class, gets the type of the property. - - - A that represents the type of the property. - - - - - Gets the hash code for the name of the member. - - - - The hash code for the name of the member. - - - - - Represents a raw JSON string. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class. - - The raw json. - - - - Creates an instance of with the content of the reader's current token. - - The reader. - An instance of with the content of the reader's current token. - - - - Specifies the settings used when loading JSON. - - - - - Initializes a new instance of the class. - - - - - Gets or sets how JSON comments are handled when loading JSON. - - The JSON comment handling. - - - - Gets or sets how JSON line info is handled when loading JSON. - - The JSON line info handling. - - - - Specifies the settings used when merging JSON. - - - - - Gets or sets the method used when merging JSON arrays. - - The method used when merging JSON arrays. - - - - Gets or sets how null value properties are merged. - - How null value properties are merged. - - - - Represents an abstract JSON token. - - - - - Gets a comparer that can compare two tokens for value equality. - - A that can compare two nodes for value equality. - - - - Gets or sets the parent. - - The parent. - - - - Gets the root of this . - - The root of this . - - - - Gets the node type for this . - - The type. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Compares the values of two tokens, including the values of all descendant tokens. - - The first to compare. - The second to compare. - true if the tokens are equal; otherwise false. - - - - Gets the next sibling token of this node. - - The that contains the next sibling token. - - - - Gets the previous sibling token of this node. - - The that contains the previous sibling token. - - - - Gets the path of the JSON token. - - - - - Adds the specified content immediately after this token. - - A content object that contains simple content or a collection of content objects to be added after this token. - - - - Adds the specified content immediately before this token. - - A content object that contains simple content or a collection of content objects to be added before this token. - - - - Returns a collection of the ancestor tokens of this token. - - A collection of the ancestor tokens of this token. - - - - Returns a collection of tokens that contain this token, and the ancestors of this token. - - A collection of tokens that contain this token, and the ancestors of this token. - - - - Returns a collection of the sibling tokens after this token, in document order. - - A collection of the sibling tokens after this tokens, in document order. - - - - Returns a collection of the sibling tokens before this token, in document order. - - A collection of the sibling tokens before this token, in document order. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets the with the specified key converted to the specified type. - - The type to convert the token to. - The token key. - The converted token value. - - - - Get the first child token of this token. - - A containing the first child token of the . - - - - Get the last child token of this token. - - A containing the last child token of the . - - - - Returns a collection of the child tokens of this token, in document order. - - An of containing the child tokens of this , in document order. - - - - Returns a collection of the child tokens of this token, in document order, filtered by the specified type. - - The type to filter the child tokens on. - A containing the child tokens of this , in document order. - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - A containing the child values of this , in document order. - - - - Removes this token from its parent. - - - - - Replaces this token with the specified token. - - The value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Returns the indented JSON for this token. - - - The indented JSON for this token. - - - - - Returns the JSON for this token using the given formatting and converters. - - Indicates how the output should be formatted. - A collection of s which will be used when writing the token. - The JSON for this token using the given formatting and converters. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to []. - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from [] to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Creates a for this token. - - A that can be used to read this token and its descendants. - - - - Creates a from an object. - - The object that will be used to create . - A with the value of the specified object. - - - - Creates a from an object using the specified . - - The object that will be used to create . - The that will be used when reading the object. - A with the value of the specified object. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - An positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - Creates a from a . - - A positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A , or null. - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - A . - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - An of that contains the selected elements. - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - An of that contains the selected elements. - - - - Creates a new instance of the . All child tokens are recursively cloned. - - A new instance of the . - - - - Adds an object to the annotation list of this . - - The annotation to add. - - - - Get the first annotation object of the specified type from this . - - The type of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets the first annotation object of the specified type from this . - - The of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets a collection of annotations of the specified type for this . - - The type of the annotations to retrieve. - An that contains the annotations for this . - - - - Gets a collection of annotations of the specified type for this . - - The of the annotations to retrieve. - An of that contains the annotations that match the specified type for this . - - - - Removes the annotations of the specified type from this . - - The type of annotations to remove. - - - - Removes the annotations of the specified type from this . - - The of annotations to remove. - - - - Compares tokens to determine whether they are equal. - - - - - Determines whether the specified objects are equal. - - The first object of type to compare. - The second object of type to compare. - - true if the specified objects are equal; otherwise, false. - - - - - Returns a hash code for the specified object. - - The for which a hash code is to be returned. - A hash code for the specified object. - The type of is a reference type and is null. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Gets the at the reader's current position. - - - - - Initializes a new instance of the class. - - The token to read from. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Gets the path of the current JSON token. - - - - - Specifies the type of token. - - - - - No token type has been set. - - - - - A JSON object. - - - - - A JSON array. - - - - - A JSON constructor. - - - - - A JSON object property. - - - - - A comment. - - - - - An integer value. - - - - - A float value. - - - - - A string value. - - - - - A boolean value. - - - - - A null value. - - - - - An undefined value. - - - - - A date value. - - - - - A raw JSON value. - - - - - A collection of bytes value. - - - - - A Guid value. - - - - - A Uri value. - - - - - A TimeSpan value. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets the at the writer's current position. - - - - - Gets the token being written. - - The token being written. - - - - Initializes a new instance of the class writing to the given . - - The container being written to. - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the underlying . - - - - - Closes this writer. - If is set to true, the JSON is auto-completed. - - - Setting to true has no additional effect, since the underlying is a type that cannot be closed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end. - - The token. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes a value. - An error will be raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Represents a value in JSON (string, integer, date, etc). - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Creates a comment with the given value. - - The value. - A comment with the given value. - - - - Creates a string with the given value. - - The value. - A string with the given value. - - - - Creates a null value. - - A null value. - - - - Creates a undefined value. - - A undefined value. - - - - Gets the node type for this . - - The type. - - - - Gets or sets the underlying token value. - - The underlying token value. - - - - Writes this token to a . - - A into which this method will write. - A collection of s which will be used when writing the token. - - - - Indicates whether the current object is equal to another object of the same type. - - - true if the current object is equal to the parameter; otherwise, false. - - An object to compare with this object. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format provider. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - The format provider. - - A that represents this instance. - - - - - Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. - - An object to compare with this instance. - - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: - Value - Meaning - Less than zero - This instance is less than . - Zero - This instance is equal to . - Greater than zero - This instance is greater than . - - - is not of the same type as this instance. - - - - - Specifies how JSON arrays are merged together. - - - - Concatenate arrays. - - - Union arrays, skipping items that already exist. - - - Replace all array items. - - - Merge array items together, matched by index. - - - - Specifies how null value properties are merged. - - - - - The content's null value properties will be ignored during merging. - - - - - The content's null value properties will be merged. - - - - - Specifies the member serialization options for the . - - - - - All public members are serialized by default. Members can be excluded using or . - This is the default member serialization mode. - - - - - Only members marked with or are serialized. - This member serialization mode can also be set by marking the class with . - - - - - All public and private fields are serialized. Members can be excluded using or . - This member serialization mode can also be set by marking the class with - and setting IgnoreSerializableAttribute on to false. - - - - - Specifies metadata property handling options for the . - - - - - Read metadata properties located at the start of a JSON object. - - - - - Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. - - - - - Do not try to read metadata properties. - - - - - Specifies missing member handling options for the . - - - - - Ignore a missing member and do not attempt to deserialize it. - - - - - Throw a when a missing member is encountered during deserialization. - - - - - Specifies null value handling options for the . - - - - - - - - - Include null values when serializing and deserializing objects. - - - - - Ignore null values when serializing and deserializing objects. - - - - - Specifies how object creation is handled by the . - - - - - Reuse existing objects, create new objects when needed. - - - - - Only reuse existing objects. - - - - - Always create new objects. - - - - - Specifies reference handling options for the . - Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . - - - - - - - - Do not preserve references when serializing types. - - - - - Preserve references when serializing into a JSON object structure. - - - - - Preserve references when serializing into a JSON array structure. - - - - - Preserve references when serializing. - - - - - Specifies reference loop handling options for the . - - - - - Throw a when a loop is encountered. - - - - - Ignore loop references and do not serialize. - - - - - Serialize loop references. - - - - - Indicating whether a property is required. - - - - - The property is not required. The default state. - - - - - The property must be defined in JSON but can be a null value. - - - - - The property must be defined in JSON and cannot be a null value. - - - - - The property is not required but it cannot be a null value. - - - - - - Contains the JSON schema extension methods. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - true if the specified is valid; otherwise, false. - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - When this method returns, contains any error messages generated while validating. - - true if the specified is valid; otherwise, false. - - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - The validation event handler. - - - - - An in-memory representation of a JSON Schema. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the id. - - - - - Gets or sets the title. - - - - - Gets or sets whether the object is required. - - - - - Gets or sets whether the object is read-only. - - - - - Gets or sets whether the object is visible to users. - - - - - Gets or sets whether the object is transient. - - - - - Gets or sets the description of the object. - - - - - Gets or sets the types of values allowed by the object. - - The type. - - - - Gets or sets the pattern. - - The pattern. - - - - Gets or sets the minimum length. - - The minimum length. - - - - Gets or sets the maximum length. - - The maximum length. - - - - Gets or sets a number that the value should be divisible by. - - A number that the value should be divisible by. - - - - Gets or sets the minimum. - - The minimum. - - - - Gets or sets the maximum. - - The maximum. - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). - - A flag indicating whether the value can not equal the number defined by the minimum attribute (). - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). - - A flag indicating whether the value can not equal the number defined by the maximum attribute (). - - - - Gets or sets the minimum number of items. - - The minimum number of items. - - - - Gets or sets the maximum number of items. - - The maximum number of items. - - - - Gets or sets the of items. - - The of items. - - - - Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . - - - true if items are validated using their array position; otherwise, false. - - - - - Gets or sets the of additional items. - - The of additional items. - - - - Gets or sets a value indicating whether additional items are allowed. - - - true if additional items are allowed; otherwise, false. - - - - - Gets or sets whether the array items must be unique. - - - - - Gets or sets the of properties. - - The of properties. - - - - Gets or sets the of additional properties. - - The of additional properties. - - - - Gets or sets the pattern properties. - - The pattern properties. - - - - Gets or sets a value indicating whether additional properties are allowed. - - - true if additional properties are allowed; otherwise, false. - - - - - Gets or sets the required property if this property is present. - - The required property if this property is present. - - - - Gets or sets the a collection of valid enum values allowed. - - A collection of valid enum values allowed. - - - - Gets or sets disallowed types. - - The disallowed types. - - - - Gets or sets the default value. - - The default value. - - - - Gets or sets the collection of that this schema extends. - - The collection of that this schema extends. - - - - Gets or sets the format. - - The format. - - - - Initializes a new instance of the class. - - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The object representing the JSON Schema. - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The to use when resolving schema references. - The object representing the JSON Schema. - - - - Load a from a string that contains JSON Schema. - - A that contains JSON Schema. - A populated from the string that contains JSON Schema. - - - - Load a from a string that contains JSON Schema using the specified . - - A that contains JSON Schema. - The resolver. - A populated from the string that contains JSON Schema. - - - - Writes this schema to a . - - A into which this method will write. - - - - Writes this schema to a using the specified . - - A into which this method will write. - The resolver used. - - - - Returns a that represents the current . - - - A that represents the current . - - - - - - Returns detailed information about the schema exception. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - - Generates a from a specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets how undefined schemas are handled by the serializer. - - - - - Gets or sets the contract resolver. - - The contract resolver. - - - - Generate a from the specified type. - - The type to generate a from. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - - Resolves from an id. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the loaded schemas. - - The loaded schemas. - - - - Initializes a new instance of the class. - - - - - Gets a for the specified reference. - - The id. - A for the specified reference. - - - - - The value types allowed by the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - No type specified. - - - - - String type. - - - - - Float type. - - - - - Integer type. - - - - - Boolean type. - - - - - Object type. - - - - - Array type. - - - - - Null type. - - - - - Any type. - - - - - - Specifies undefined schema Id handling options for the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Do not infer a schema Id. - - - - - Use the .NET type name as the schema Id. - - - - - Use the assembly qualified .NET type name as the schema Id. - - - - - - Returns detailed information related to the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the associated with the validation error. - - The JsonSchemaException associated with the validation error. - - - - Gets the path of the JSON location where the validation error occurred. - - The path of the JSON location where the validation error occurred. - - - - Gets the text description corresponding to the validation error. - - The text description. - - - - - Represents the callback method that will handle JSON schema validation events and the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - A camel case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Resolves member mappings for a type, camel casing property names. - - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used by to resolve a for a given . - - - - - Gets a value indicating whether members are being get and set using dynamic code generation. - This value is determined by the runtime permissions available. - - - true if using dynamic code generation; otherwise, false. - - - - - Gets or sets the default members search flags. - - The default members search flags. - - - - Gets or sets a value indicating whether compiler generated members should be serialized. - - - true if serialized compiler generated members; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. - - - true if the interface will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. - - - true if the attribute will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. - - The naming strategy used to resolve how property names and dictionary keys are serialized. - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Gets the serializable members for the type. - - The type to get serializable members for. - The serializable members for the type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates the constructor parameters. - - The constructor to create properties for. - The type's member properties. - Properties for the given . - - - - Creates a for the given . - - The matching member property. - The constructor parameter. - A created for the given . - - - - Resolves the default for the contract. - - Type of the object. - The contract's default . - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Determines which contract type is created for the given type. - - Type of the object. - A for the given type. - - - - Creates properties for the given . - - The type to create properties for. - /// The member serialization mode for the type. - Properties for the given . - - - - Creates the used by the serializer to get and set values from a member. - - The member. - The used by the serializer to get and set values from a member. - - - - Creates a for the given . - - The member's parent . - The member to create a for. - A created for the given . - - - - Resolves the name of the property. - - Name of the property. - Resolved name of the property. - - - - Resolves the name of the extension data. By default no changes are made to extension data names. - - Name of the extension data. - Resolved name of the extension data. - - - - Resolves the key of the dictionary. By default is used to resolve dictionary keys. - - Key of the dictionary. - Resolved key of the dictionary. - - - - Gets the resolved name of the property. - - Name of the property. - Name of the property. - - - - The default naming strategy. Property names and dictionary keys are unchanged. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - The default serialization binder used when resolving and loading classes from type names. - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - The type of the object the formatter creates a new instance of. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer that writes to the application's instances. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Get and set values for a using dynamic methods. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Provides information surrounding an error. - - - - - Gets the error. - - The error. - - - - Gets the original object that caused the error. - - The original object that caused the error. - - - - Gets the member that caused the error. - - The member that caused the error. - - - - Gets the path of the JSON location where the error occurred. - - The path of the JSON location where the error occurred. - - - - Gets or sets a value indicating whether this is handled. - - true if handled; otherwise, false. - - - - Provides data for the Error event. - - - - - Gets the current object the error event is being raised against. - - The current object the error event is being raised against. - - - - Gets the error context. - - The error context. - - - - Initializes a new instance of the class. - - The current object. - The error context. - - - - Provides methods to get attributes. - - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Used by to resolve a for a given . - - - - - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used to resolve references when serializing and deserializing JSON by the . - - - - - Resolves a reference to its object. - - The serialization context. - The reference to resolve. - The object that was resolved from the reference. - - - - Gets the reference for the specified object. - - The serialization context. - The object to get a reference for. - The reference to the object. - - - - Determines whether the specified object is referenced. - - The serialization context. - The object to test for a reference. - - true if the specified object is referenced; otherwise, false. - - - - - Adds a reference to the specified object. - - The serialization context. - The reference. - The object to reference. - - - - Allows users to control class loading and mandate what class to load. - - - - - When implemented, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object - The type of the object the formatter creates a new instance of. - - - - When implemented, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - The that will be used to filter the trace messages passed to the writer. - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Provides methods to get and set values. - - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Contract details for a used by the . - - - - - Gets the of the collection items. - - The of the collection items. - - - - Gets a value indicating whether the collection type is a multidimensional array. - - true if the collection type is a multidimensional array; otherwise, false. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the collection values. - - true if the creator has a parameter with the collection values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the default collection items . - - The converter. - - - - Gets or sets a value indicating whether the collection items preserve object references. - - true if collection items preserve object references; otherwise, false. - - - - Gets or sets the collection item reference loop handling. - - The reference loop handling. - - - - Gets or sets the collection item type name handling. - - The type name handling. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Handles serialization callback events. - - The object that raised the callback event. - The streaming context. - - - - Handles serialization error callback events. - - The object that raised the callback event. - The streaming context. - The error context. - - - - Sets extension data for an object during deserialization. - - The object to set extension data on. - The extension data key. - The extension data value. - - - - Gets extension data for an object during serialization. - - The object to set extension data on. - - - - Contract details for a used by the . - - - - - Gets the underlying type for the contract. - - The underlying type for the contract. - - - - Gets or sets the type created during deserialization. - - The type created during deserialization. - - - - Gets or sets whether this type contract is serialized as a reference. - - Whether this type contract is serialized as a reference. - - - - Gets or sets the default for this contract. - - The converter. - - - - Gets or sets all methods called immediately after deserialization of the object. - - The methods called immediately after deserialization of the object. - - - - Gets or sets all methods called during deserialization of the object. - - The methods called during deserialization of the object. - - - - Gets or sets all methods called after serialization of the object graph. - - The methods called after serialization of the object graph. - - - - Gets or sets all methods called before serialization of the object. - - The methods called before serialization of the object. - - - - Gets or sets all method called when an error is thrown during the serialization of the object. - - The methods called when an error is thrown during the serialization of the object. - - - - Gets or sets the default creator method used to create the object. - - The default creator method used to create the object. - - - - Gets or sets a value indicating whether the default creator is non-public. - - true if the default object creator is non-public; otherwise, false. - - - - Contract details for a used by the . - - - - - Gets or sets the dictionary key resolver. - - The dictionary key resolver. - - - - Gets the of the dictionary keys. - - The of the dictionary keys. - - - - Gets the of the dictionary values. - - The of the dictionary values. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the dictionary values. - - true if the creator has a parameter with the dictionary values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the object constructor. - - The object constructor. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the object member serialization. - - The member object serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Gets the object's properties. - - The object's properties. - - - - Gets a collection of instances that define the parameters used with . - - - - - Gets or sets the function used to create the object. When set this function will override . - This function is called with a collection of arguments which are defined by the collection. - - The function used to create the object. - - - - Gets or sets the extension data setter. - - - - - Gets or sets the extension data getter. - - - - - Gets or sets the extension data value type. - - - - - Gets or sets the extension data name resolver. - - The extension data name resolver. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Maps a JSON property to a .NET member or constructor parameter. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the type that declared this property. - - The type that declared this property. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets the name of the underlying member or parameter. - - The name of the underlying member or parameter. - - - - Gets the that will get and set the during serialization. - - The that will get and set the during serialization. - - - - Gets or sets the for this property. - - The for this property. - - - - Gets or sets the type of the property. - - The type of the property. - - - - Gets or sets the for the property. - If set this converter takes precedence over the contract converter for the property type. - - The converter. - - - - Gets or sets the member converter. - - The member converter. - - - - Gets or sets a value indicating whether this is ignored. - - true if ignored; otherwise, false. - - - - Gets or sets a value indicating whether this is readable. - - true if readable; otherwise, false. - - - - Gets or sets a value indicating whether this is writable. - - true if writable; otherwise, false. - - - - Gets or sets a value indicating whether this has a member attribute. - - true if has a member attribute; otherwise, false. - - - - Gets the default value. - - The default value. - - - - Gets or sets a value indicating whether this is required. - - A value indicating whether this is required. - - - - Gets or sets a value indicating whether this property preserves object references. - - - true if this instance is reference; otherwise, false. - - - - - Gets or sets the property null value handling. - - The null value handling. - - - - Gets or sets the property default value handling. - - The default value handling. - - - - Gets or sets the property reference loop handling. - - The reference loop handling. - - - - Gets or sets the property object creation handling. - - The object creation handling. - - - - Gets or sets or sets the type name handling. - - The type name handling. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets a predicate used to determine whether the property should be deserialized. - - A predicate used to determine whether the property should be deserialized. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets an action used to set whether the property has been deserialized. - - An action used to set whether the property has been deserialized. - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the converter used when serializing the property's collection items. - - The collection's items converter. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - A collection of objects. - - - - - Initializes a new instance of the class. - - The type. - - - - When implemented in a derived class, extracts the key from the specified element. - - The element from which to extract the key. - The key for the specified element. - - - - Adds a object. - - The property to add to the collection. - - - - Gets the closest matching object. - First attempts to get an exact case match of and then - a case insensitive match. - - Name of the property. - A matching property if found. - - - - Gets a property by property name. - - The name of the property to get. - Type property name string comparison. - A matching property if found. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Lookup and create an instance of the type described by the argument. - - The type to create. - Optional arguments to pass to an initializing constructor of the JsonConverter. - If null, the default constructor is used. - - - - Represents a trace writer that writes to memory. When the trace message limit is - reached then old trace messages will be removed as new messages are added. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Initializes a new instance of the class. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Returns an enumeration of the most recent trace messages. - - An enumeration of the most recent trace messages. - - - - Returns a of the most recent trace messages. - - - A of the most recent trace messages. - - - - - A base class for resolving how property names and dictionary keys are serialized. - - - - - A flag indicating whether dictionary keys should be processed. - Defaults to false. - - - - - A flag indicating whether extension data names should be processed. - Defaults to false. - - - - - A flag indicating whether explicitly specified property names, - e.g. a property name customized with a , should be processed. - Defaults to false. - - - - - Gets the serialized name for a given property name. - - The initial property name. - A flag indicating whether the property has had a name explicitly specified. - The serialized property name. - - - - Gets the serialized name for a given extension data name. - - The initial extension data name. - The serialized extension data name. - - - - Gets the serialized key for a given dictionary key. - - The initial dictionary key. - The serialized dictionary key. - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Represents a method that constructs an object. - - The object type to create. - - - - When applied to a method, specifies that the method is called when an error occurs serializing an object. - - - - - Provides methods to get attributes from a , , or . - - - - - Initializes a new instance of the class. - - The instance to get attributes for. This parameter should be a , , or . - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Get and set values for a using reflection. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - A snake case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Specifies how strings are escaped when writing JSON text. - - - - - Only control characters (e.g. newline) are escaped. - - - - - All non-ASCII and control characters (e.g. newline) are escaped. - - - - - HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. - - - - - Indicates the method that will be used during deserialization for locating and loading assemblies. - - - - - In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. - - - - - In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. - - - - - Specifies type name handling options for the . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Do not include the .NET type name when serializing types. - - - - - Include the .NET type name when serializing into a JSON object structure. - - - - - Include the .NET type name when serializing into a JSON array structure. - - - - - Always include the .NET type name when serializing. - - - - - Include the .NET type name when the type of the object being serialized is not the same as its declared type. - Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON - you must specify a root type object with - or . - - - - - Determines whether the collection is null or empty. - - The collection. - - true if the collection is null or empty; otherwise, false. - - - - - Adds the elements of the specified collection to the specified generic . - - The list to add to. - The collection of elements to add. - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert or cast the value to. - - The converted type. If conversion was unsuccessful, the initial value - is returned if assignable to the target type. - - - - - Gets a dictionary of the names and values of an type. - - - - - - Gets a dictionary of the names and values of an Enum type. - - The enum type to get names and values for. - - - - - Provides a set of static (Shared in Visual Basic) methods for - querying objects that implement . - - - - - Returns the input typed as . - - - - - Returns an empty that has the - specified type argument. - - - - - Converts the elements of an to the - specified type. - - - - - Filters the elements of an based on a specified type. - - - - - Generates a sequence of integral numbers within a specified range. - - The value of the first integer in the sequence. - The number of sequential integers to generate. - - - - Generates a sequence that contains one repeated value. - - - - - Filters a sequence of values based on a predicate. - - - - - Filters a sequence of values based on a predicate. - Each element's index is used in the logic of the predicate function. - - - - - Projects each element of a sequence into a new form. - - - - - Projects each element of a sequence into a new form by - incorporating the element's index. - - - - - Projects each element of a sequence to an - and flattens the resulting sequences into one sequence. - - - - - Projects each element of a sequence to an , - and flattens the resulting sequences into one sequence. The - index of each source element is used in the projected form of - that element. - - - - - Projects each element of a sequence to an , - flattens the resulting sequences into one sequence, and invokes - a result selector function on each element therein. - - - - - Projects each element of a sequence to an , - flattens the resulting sequences into one sequence, and invokes - a result selector function on each element therein. The index of - each source element is used in the intermediate projected form - of that element. - - - - - Returns elements from a sequence as long as a specified condition is true. - - - - - Returns elements from a sequence as long as a specified condition is true. - The element's index is used in the logic of the predicate function. - - - - - Base implementation of First operator. - - - - - Returns the first element of a sequence. - - - - - Returns the first element in a sequence that satisfies a specified condition. - - - - - Returns the first element of a sequence, or a default value if - the sequence contains no elements. - - - - - Returns the first element of the sequence that satisfies a - condition or a default value if no such element is found. - - - - - Base implementation of Last operator. - - - - - Returns the last element of a sequence. - - - - - Returns the last element of a sequence that satisfies a - specified condition. - - - - - Returns the last element of a sequence, or a default value if - the sequence contains no elements. - - - - - Returns the last element of a sequence that satisfies a - condition or a default value if no such element is found. - - - - - Base implementation of Single operator. - - - - - Returns the only element of a sequence, and throws an exception - if there is not exactly one element in the sequence. - - - - - Returns the only element of a sequence that satisfies a - specified condition, and throws an exception if more than one - such element exists. - - - - - Returns the only element of a sequence, or a default value if - the sequence is empty; this method throws an exception if there - is more than one element in the sequence. - - - - - Returns the only element of a sequence that satisfies a - specified condition or a default value if no such element - exists; this method throws an exception if more than one element - satisfies the condition. - - - - - Returns the element at a specified index in a sequence. - - - - - Returns the element at a specified index in a sequence or a - default value if the index is out of range. - - - - - Inverts the order of the elements in a sequence. - - - - - Returns a specified number of contiguous elements from the start - of a sequence. - - - - - Bypasses a specified number of elements in a sequence and then - returns the remaining elements. - - - - - Bypasses elements in a sequence as long as a specified condition - is true and then returns the remaining elements. - - - - - Bypasses elements in a sequence as long as a specified condition - is true and then returns the remaining elements. The element's - index is used in the logic of the predicate function. - - - - - Returns the number of elements in a sequence. - - - - - Returns a number that represents how many elements in the - specified sequence satisfy a condition. - - - - - Returns a that represents the total number - of elements in a sequence. - - - - - Returns a that represents how many elements - in a sequence satisfy a condition. - - - - - Concatenates two sequences. - - - - - Creates a from an . - - - - - Creates an array from an . - - - - - Returns distinct elements from a sequence by using the default - equality comparer to compare values. - - - - - Returns distinct elements from a sequence by using a specified - to compare values. - - - - - Creates a from an - according to a specified key - selector function. - - - - - Creates a from an - according to a specified key - selector function and a key comparer. - - - - - Creates a from an - according to specified key - and element selector functions. - - - - - Creates a from an - according to a specified key - selector function, a comparer and an element selector function. - - - - - Groups the elements of a sequence according to a specified key - selector function. - - - - - Groups the elements of a sequence according to a specified key - selector function and compares the keys by using a specified - comparer. - - - - - Groups the elements of a sequence according to a specified key - selector function and projects the elements for each group by - using a specified function. - - - - - Groups the elements of a sequence according to a specified key - selector function and creates a result value from each group and - its key. - - - - - Groups the elements of a sequence according to a key selector - function. The keys are compared by using a comparer and each - group's elements are projected by using a specified function. - - - - - Groups the elements of a sequence according to a specified key - selector function and creates a result value from each group and - its key. The elements of each group are projected by using a - specified function. - - - - - Groups the elements of a sequence according to a specified key - selector function and creates a result value from each group and - its key. The keys are compared by using a specified comparer. - - - - - Groups the elements of a sequence according to a specified key - selector function and creates a result value from each group and - its key. Key values are compared by using a specified comparer, - and the elements of each group are projected by using a - specified function. - - - - - Applies an accumulator function over a sequence. - - - - - Applies an accumulator function over a sequence. The specified - seed value is used as the initial accumulator value. - - - - - Applies an accumulator function over a sequence. The specified - seed value is used as the initial accumulator value, and the - specified function is used to select the result value. - - - - - Produces the set union of two sequences by using the default - equality comparer. - - - - - Produces the set union of two sequences by using a specified - . - - - - - Returns the elements of the specified sequence or the type - parameter's default value in a singleton collection if the - sequence is empty. - - - - - Returns the elements of the specified sequence or the specified - value in a singleton collection if the sequence is empty. - - - - - Determines whether all elements of a sequence satisfy a condition. - - - - - Determines whether a sequence contains any elements. - - - - - Determines whether any element of a sequence satisfies a - condition. - - - - - Determines whether a sequence contains a specified element by - using the default equality comparer. - - - - - Determines whether a sequence contains a specified element by - using a specified . - - - - - Determines whether two sequences are equal by comparing the - elements by using the default equality comparer for their type. - - - - - Determines whether two sequences are equal by comparing their - elements by using a specified . - - - - - Base implementation for Min/Max operator. - - - - - Base implementation for Min/Max operator for nullable types. - - - - - Returns the minimum value in a generic sequence. - - - - - Invokes a transform function on each element of a generic - sequence and returns the minimum resulting value. - - - - - Returns the maximum value in a generic sequence. - - - - - Invokes a transform function on each element of a generic - sequence and returns the maximum resulting value. - - - - - Makes an enumerator seen as enumerable once more. - - - The supplied enumerator must have been started. The first element - returned is the element the enumerator was on when passed in. - DO NOT use this method if the caller must be a generator. It is - mostly safe among aggregate operations. - - - - - Sorts the elements of a sequence in ascending order according to a key. - - - - - Sorts the elements of a sequence in ascending order by using a - specified comparer. - - - - - Sorts the elements of a sequence in descending order according to a key. - - - - - Sorts the elements of a sequence in descending order by using a - specified comparer. - - - - - Performs a subsequent ordering of the elements in a sequence in - ascending order according to a key. - - - - - Performs a subsequent ordering of the elements in a sequence in - ascending order by using a specified comparer. - - - - - Performs a subsequent ordering of the elements in a sequence in - descending order, according to a key. - - - - - Performs a subsequent ordering of the elements in a sequence in - descending order by using a specified comparer. - - - - - Base implementation for Intersect and Except operators. - - - - - Produces the set intersection of two sequences by using the - default equality comparer to compare values. - - - - - Produces the set intersection of two sequences by using the - specified to compare values. - - - - - Produces the set difference of two sequences by using the - default equality comparer to compare values. - - - - - Produces the set difference of two sequences by using the - specified to compare values. - - - - - Creates a from an - according to a specified key - selector function. - - - - - Creates a from an - according to a specified key - selector function and key comparer. - - - - - Creates a from an - according to specified key - selector and element selector functions. - - - - - Creates a from an - according to a specified key - selector function, a comparer, and an element selector function. - - - - - Correlates the elements of two sequences based on matching keys. - The default equality comparer is used to compare keys. - - - - - Correlates the elements of two sequences based on matching keys. - The default equality comparer is used to compare keys. A - specified is used to compare keys. - - - - - Correlates the elements of two sequences based on equality of - keys and groups the results. The default equality comparer is - used to compare keys. - - - - - Correlates the elements of two sequences based on equality of - keys and groups the results. The default equality comparer is - used to compare keys. A specified - is used to compare keys. - - - - - Computes the sum of a sequence of values. - - - - - Computes the sum of a sequence of - values that are obtained by invoking a transform function on - each element of the input sequence. - - - - - Computes the average of a sequence of values. - - - - - Computes the average of a sequence of values - that are obtained by invoking a transform function on each - element of the input sequence. - - - - - Computes the sum of a sequence of nullable values. - - - - - Computes the sum of a sequence of nullable - values that are obtained by invoking a transform function on - each element of the input sequence. - - - - - Computes the average of a sequence of nullable values. - - - - - Computes the average of a sequence of nullable values - that are obtained by invoking a transform function on each - element of the input sequence. - - - - - Returns the minimum value in a sequence of nullable - values. - - - - - Invokes a transform function on each element of a sequence and - returns the minimum nullable value. - - - - - Returns the maximum value in a sequence of nullable - values. - - - - - Invokes a transform function on each element of a sequence and - returns the maximum nullable value. - - - - - Computes the sum of a sequence of values. - - - - - Computes the sum of a sequence of - values that are obtained by invoking a transform function on - each element of the input sequence. - - - - - Computes the average of a sequence of values. - - - - - Computes the average of a sequence of values - that are obtained by invoking a transform function on each - element of the input sequence. - - - - - Computes the sum of a sequence of nullable values. - - - - - Computes the sum of a sequence of nullable - values that are obtained by invoking a transform function on - each element of the input sequence. - - - - - Computes the average of a sequence of nullable values. - - - - - Computes the average of a sequence of nullable values - that are obtained by invoking a transform function on each - element of the input sequence. - - - - - Returns the minimum value in a sequence of nullable - values. - - - - - Invokes a transform function on each element of a sequence and - returns the minimum nullable value. - - - - - Returns the maximum value in a sequence of nullable - values. - - - - - Invokes a transform function on each element of a sequence and - returns the maximum nullable value. - - - - - Computes the sum of a sequence of nullable values. - - - - - Computes the sum of a sequence of - values that are obtained by invoking a transform function on - each element of the input sequence. - - - - - Computes the average of a sequence of values. - - - - - Computes the average of a sequence of values - that are obtained by invoking a transform function on each - element of the input sequence. - - - - - Computes the sum of a sequence of nullable values. - - - - - Computes the sum of a sequence of nullable - values that are obtained by invoking a transform function on - each element of the input sequence. - - - - - Computes the average of a sequence of nullable values. - - - - - Computes the average of a sequence of nullable values - that are obtained by invoking a transform function on each - element of the input sequence. - - - - - Returns the minimum value in a sequence of nullable - values. - - - - - Invokes a transform function on each element of a sequence and - returns the minimum nullable value. - - - - - Returns the maximum value in a sequence of nullable - values. - - - - - Invokes a transform function on each element of a sequence and - returns the maximum nullable value. - - - - - Computes the sum of a sequence of values. - - - - - Computes the sum of a sequence of - values that are obtained by invoking a transform function on - each element of the input sequence. - - - - - Computes the average of a sequence of values. - - - - - Computes the average of a sequence of values - that are obtained by invoking a transform function on each - element of the input sequence. - - - - - Computes the sum of a sequence of nullable values. - - - - - Computes the sum of a sequence of nullable - values that are obtained by invoking a transform function on - each element of the input sequence. - - - - - Computes the average of a sequence of nullable values. - - - - - Computes the average of a sequence of nullable values - that are obtained by invoking a transform function on each - element of the input sequence. - - - - - Returns the minimum value in a sequence of nullable - values. - - - - - Invokes a transform function on each element of a sequence and - returns the minimum nullable value. - - - - - Returns the maximum value in a sequence of nullable - values. - - - - - Invokes a transform function on each element of a sequence and - returns the maximum nullable value. - - - - - Computes the sum of a sequence of values. - - - - - Computes the sum of a sequence of - values that are obtained by invoking a transform function on - each element of the input sequence. - - - - - Computes the average of a sequence of values. - - - - - Computes the average of a sequence of values - that are obtained by invoking a transform function on each - element of the input sequence. - - - - - Computes the sum of a sequence of nullable values. - - - - - Computes the sum of a sequence of nullable - values that are obtained by invoking a transform function on - each element of the input sequence. - - - - - Computes the average of a sequence of nullable values. - - - - - Computes the average of a sequence of nullable values - that are obtained by invoking a transform function on each - element of the input sequence. - - - - - Returns the minimum value in a sequence of nullable - values. - - - - - Invokes a transform function on each element of a sequence and - returns the minimum nullable value. - - - - - Returns the maximum value in a sequence of nullable - values. - - - - - Invokes a transform function on each element of a sequence and - returns the maximum nullable value. - - - - - Represents a collection of objects that have a common key. - - - - - Gets the key of the . - - - - - Defines an indexer, size property, and Boolean search method for - data structures that map keys to - sequences of values. - - - - - Represents a sorted sequence. - - - - - Performs a subsequent ordering on the elements of an - according to a key. - - - - - Represents a collection of keys each mapped to one or more values. - - - - - Gets the number of key/value collection pairs in the . - - - - - Gets the collection of values indexed by the specified key. - - - - - Determines whether a specified key is in the . - - - - - Applies a transform function to each key and its associated - values and returns the results. - - - - - Returns a generic enumerator that iterates through the . - - - - - See issue #11 - for why this method is needed and cannot be expressed as a - lambda at the call site. - - - - - See issue #11 - for why this method is needed and cannot be expressed as a - lambda at the call site. - - - - - Gets the type of the typed collection's items. - - The type. - The type of the typed collection's items. - - - - Gets the member's underlying type. - - The member. - The underlying type of the member. - - - - Determines whether the member is an indexed property. - - The member. - - true if the member is an indexed property; otherwise, false. - - - - - Determines whether the property is an indexed property. - - The property. - - true if the property is an indexed property; otherwise, false. - - - - - Gets the member's value on the object. - - The member. - The target object. - The member's value on the object. - - - - Sets the member's value on the target object. - - The member. - The target. - The value. - - - - Determines whether the specified MemberInfo can be read. - - The MemberInfo to determine whether can be read. - /// if set to true then allow the member to be gotten non-publicly. - - true if the specified MemberInfo can be read; otherwise, false. - - - - - Determines whether the specified MemberInfo can be set. - - The MemberInfo to determine whether can be set. - if set to true then allow the member to be set non-publicly. - if set to true then allow the member to be set if read-only. - - true if the specified MemberInfo can be set; otherwise, false. - - - - - Builds a string. Unlike this class lets you reuse its internal buffer. - - - - - Determines whether the string is all white space. Empty string will return false. - - The string to test whether it is all white space. - - true if the string is all white space; otherwise, false. - - - - - Specifies the state of the . - - - - - An exception has been thrown, which has left the in an invalid state. - You may call the method to put the in the Closed state. - Any other method calls result in an being thrown. - - - - - The method has been called. - - - - - An object is being written. - - - - - An array is being written. - - - - - A constructor is being written. - - - - - A property is being written. - - - - - A write method has not been called. - - - - - This attribute allows us to define extension methods without - requiring .NET Framework 3.5. For more information, see the section, - Extension Methods in .NET Framework 2.0 Apps, - of Basic Instincts: Extension Methods - column in MSDN Magazine, - issue Nov 2007. - - - - diff --git a/trunk/packages/Newtonsoft.Json.10.0.3/lib/net35/Newtonsoft.Json.dll b/trunk/packages/Newtonsoft.Json.10.0.3/lib/net35/Newtonsoft.Json.dll deleted file mode 100644 index 78a1763f8405aaf91cdc5c4e7a22d2b329d1a954..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 460800 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≀@WtAD+9=a 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

    }4l1gJ@6pZ)7YfB{Va=*VhJe$aRJW(E< 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 f&gc4Ad4K%(4;%xTB=-ym* diff --git a/trunk/packages/Newtonsoft.Json.10.0.3/lib/net35/Newtonsoft.Json.xml b/trunk/packages/Newtonsoft.Json.10.0.3/lib/net35/Newtonsoft.Json.xml deleted file mode 100644 index cb7b932..0000000 --- a/trunk/packages/Newtonsoft.Json.10.0.3/lib/net35/Newtonsoft.Json.xml +++ /dev/null @@ -1,8944 +0,0 @@ - - - - Newtonsoft.Json - - - -

    - Represents a BSON Oid (object id). - - - - - Gets or sets the value of the Oid. - - The value of the Oid. - - - - Initializes a new instance of the class. - - The Oid value. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. - - - - - Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. - - - true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. - - - - - Gets or sets a value indicating whether the root object will be read as a JSON array. - - - true if the root object will be read as a JSON array; otherwise, false. - - - - - Gets or sets the used when reading values from BSON. - - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. - - - - - Gets or sets the used when writing values to BSON. - When set to no conversion will occur. - - The used when writing values to BSON. - - - - Initializes a new instance of the class. - - The to write to. - - - - Initializes a new instance of the class. - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. - - - - - Writes the end. - - The token. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes the beginning of a JSON array. - - - - - Writes the beginning of a JSON object. - - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value that represents a BSON object id. - - The Object ID value to write. - - - - Writes a BSON regex. - - The regex pattern. - The regex options. - - - - Specifies how constructors are used when initializing objects during deserialization by the . - - - - - First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. - - - - - Json.NET will use a non-public default constructor before falling back to a parameterized constructor. - - - - - Converts a binary value to and from a base 64 string value. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Creates a custom object. - - The object type to convert. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Creates an object which will then be populated by the serializer. - - Type of the object. - The created object. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Provides a base class for converting a to and from JSON. - - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an Entity Framework to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). - - - - - Gets or sets the date time styles used when converting a date to and from JSON. - - The date time styles used when converting a date to and from JSON. - - - - Gets or sets the date time format used when converting a date to and from JSON. - - The date time format used when converting a date to and from JSON. - - - - Gets or sets the culture used when converting a date to and from JSON. - - The culture used when converting a date to and from JSON. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from its name string value. - - - - - Gets or sets a value indicating whether the written enum text should be camel case. - - true if the written enum text will be camel case; otherwise, false. - - - - Gets or sets a value indicating whether integer values are allowed when deserializing. - - true if integers are allowed when deserializing; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - true if the written enum text will be camel case; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from a string (e.g. "1.2.3.4"). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts XML to and from JSON. - - - - - Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. - - The name of the deserialized root element. - - - - Gets or sets a flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - true if the array attribute is written to the XML; otherwise, false. - - - - Gets or sets a value indicating whether to write the root JSON object. - - true if the JSON root object is omitted; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The calling serializer. - The value. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Checks if the is a namespace attribute. - - Attribute name to test. - The attribute name prefix if it has one, otherwise an empty string. - true if attribute name is for a namespace attribute, otherwise false. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Specifies how dates are formatted when writing JSON text. - - - - - Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". - - - - - Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". - - - - - Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. - - - - - Date formatted strings are not parsed to a date type and are read as strings. - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Specifies how to treat the time value when converting between string and . - - - - - Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. - - - - - Treat as a UTC. If the object represents a local time, it is converted to a UTC. - - - - - Treat as a local time if a is being converted to a string. - If a string is being converted to , convert to a local time if a time zone is specified. - - - - - Time zone information should be preserved when converting. - - - - - Specifies default value handling options for the . - - - - - - - - - Include members where the member value is the same as the member's default value when serializing objects. - Included members are written to JSON. Has no effect when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - so that it is not written to JSON. - This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, - decimals and floating point numbers; and false for booleans). The default value ignored can be changed by - placing the on the property. - - - - - Members with a default value but no JSON will be set to their default value when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - and set members to their default value when deserializing. - - - - - Specifies float format handling options when writing special floating point numbers, e.g. , - and with . - - - - - Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". - - - - - Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. - Note that this will produce non-valid JSON. - - - - - Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. - - - - - Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Floating point numbers are parsed to . - - - - - Floating point numbers are parsed to . - - - - - Specifies formatting options for the . - - - - - No special formatting is applied. This is the default. - - - - - Causes child objects to be indented according to the and settings. - - - - - Provides an interface for using pooled arrays. - - The array type content. - - - - Rent an array from the pool. This array must be returned when it is no longer needed. - - The minimum required length of the array. The returned array may be longer. - The rented array from the pool. This array must be returned when it is no longer needed. - - - - Return an array to the pool. - - The array that is being returned. - - - - Provides an interface to enable a class to return line and position information. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - The current line number or 0 if no line information is available (for example, when returns false). - - - - Gets the current line position. - - The current line position or 0 if no line information is available (for example, when returns false). - - - - Instructs the how to serialize the collection. - - - - - Gets or sets a value indicating whether null items are allowed in the collection. - - true if null items are allowed in the collection; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with a flag indicating whether the array can contain null items. - - A flag indicating whether the array can contain null items. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to use the specified constructor when deserializing that object. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the id. - - The id. - - - - Gets or sets the title. - - The title. - - - - Gets or sets the description. - - The description. - - - - Gets or sets the collection's items converter. - - The collection's items converter. - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets a value that indicates whether to preserve object references. - - - true to keep object reference; otherwise, false. The default is false. - - - - - Gets or sets a value that indicates whether to preserve collection's items references. - - - true to keep collection's items object references; otherwise, false. The default is false. - - - - - Gets or sets the reference loop handling used when serializing the collection's items. - - The reference loop handling. - - - - Gets or sets the type name handling used when serializing the collection's items. - - The type name handling. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Provides methods for converting between .NET types and JSON types. - - - - - - - - Gets or sets a function that creates default . - Default settings are automatically used by serialization methods on , - and and on . - To serialize without using any default settings create a with - . - - - - - Represents JavaScript's boolean value true as a string. This field is read-only. - - - - - Represents JavaScript's boolean value false as a string. This field is read-only. - - - - - Represents JavaScript's null as a string. This field is read-only. - - - - - Represents JavaScript's undefined as a string. This field is read-only. - - - - - Represents JavaScript's positive infinity as a string. This field is read-only. - - - - - Represents JavaScript's negative infinity as a string. This field is read-only. - - - - - Represents JavaScript's NaN as a string. This field is read-only. - - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - The time zone handling when the date is converted to a string. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - The string escape handling. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Serializes the specified object to a JSON string. - - The object to serialize. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting. - - The object to serialize. - Indicates how the output should be formatted. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a collection of . - - The object to serialize. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting and a collection of . - - The object to serialize. - Indicates how the output should be formatted. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Deserializes the JSON to a .NET object. - - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to a .NET object using . - - The JSON to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The JSON to deserialize. - The of object being deserialized. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The type of the object to deserialize to. - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the given anonymous type. - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the given anonymous type using . - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The type of the object to deserialize to. - The JSON to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The type of the object to deserialize to. - The object to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The JSON to deserialize. - The type of the object to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The JSON to deserialize. - The type of the object to deserialize to. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Populates the object with values from the JSON string. - - The JSON to populate values from. - The target object to populate values onto. - - - - Populates the object with values from the JSON string using . - - The JSON to populate values from. - The target object to populate values onto. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - - - - Serializes the to a JSON string. - - The node to serialize. - A JSON string of the . - - - - Serializes the to a JSON string using formatting. - - The node to serialize. - Indicates how the output should be formatted. - A JSON string of the . - - - - Serializes the to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output should be formatted. - Omits writing the root object. - A JSON string of the . - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - and writes a Json.NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized . - - - - Serializes the to a JSON string. - - The node to convert to JSON. - A JSON string of the . - - - - Serializes the to a JSON string using formatting. - - The node to convert to JSON. - Indicates how the output should be formatted. - A JSON string of the . - - - - Serializes the to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output should be formatted. - Omits writing the root object. - A JSON string of the . - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - and writes a Json.NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized . - - - - Converts an object to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can read JSON. - - true if this can read JSON; otherwise, false. - - - - Gets a value indicating whether this can write JSON. - - true if this can write JSON; otherwise, false. - - - - Instructs the to use the specified when serializing the member or class. - - - - - Gets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - - - - - Initializes a new instance of the class. - - Type of the . - - - - Initializes a new instance of the class. - - Type of the . - Parameter list to use when constructing the . Can be null. - - - - Represents a collection of . - - - - - Instructs the how to serialize the collection. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Instructs the to deserialize properties with no matching class member into the specified collection - and write values during serialization. - - - - - Gets or sets a value that indicates whether to write extension data when serializing the object. - - - true to write extension data when serializing the object; otherwise, false. The default is true. - - - - - Gets or sets a value that indicates whether to read extension data when deserializing the object. - - - true to read extension data when deserializing the object; otherwise, false. The default is true. - - - - - Initializes a new instance of the class. - - - - - Instructs the not to serialize the public field or public read/write property value. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the member serialization. - - The member serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified member serialization. - - The member serialization. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to always serialize the member with the specified name. - - - - - Gets or sets the used when serializing the property's collection items. - - The collection's items . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the null value handling used when serializing this property. - - The null value handling. - - - - Gets or sets the default value handling used when serializing this property. - - The default value handling. - - - - Gets or sets the reference loop handling used when serializing this property. - - The reference loop handling. - - - - Gets or sets the object creation handling used when deserializing this property. - - The object creation handling. - - - - Gets or sets the type name handling used when serializing this property. - - The type name handling. - - - - Gets or sets whether this property's value is serialized as a reference. - - Whether this property's value is serialized as a reference. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets a value indicating whether this property is required. - - - A value indicating whether this property is required. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified name. - - Name of the property. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Specifies the state of the reader. - - - - - A read method has not been called. - - - - - The end of the file has been reached successfully. - - - - - Reader is at a property. - - - - - Reader is at the start of an object. - - - - - Reader is in an object. - - - - - Reader is at the start of an array. - - - - - Reader is in an array. - - - - - The method has been called. - - - - - Reader has just read a value. - - - - - Reader is at the start of a constructor. - - - - - Reader is in a constructor. - - - - - An error occurred that prevents the read operation from continuing. - - - - - The end of the file has been reached successfully. - - - - - Gets the current reader state. - - The current reader state. - - - - Gets or sets a value indicating whether the source should be closed when this reader is closed. - - - true to close the source when this reader is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether multiple pieces of JSON content can - be read from a continuous stream without erroring. - - - true to support reading multiple pieces of JSON content; otherwise false. - The default is false. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - Gets or sets how time zones are handled when reading JSON. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how custom date formatted strings are parsed when reading JSON. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets the type of the current JSON token. - - - - - Gets the text value of the current JSON token. - - - - - Gets the .NET type for the current JSON token. - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Reads the next JSON token from the source. - - true if the next token was read successfully; false if there are no more tokens to read. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Skips the children of the current token. - - - - - Sets the current token. - - The new token. - - - - Sets the current token and value. - - The new token. - The value. - - - - Sets the current token and value. - - The new token. - The value. - A flag indicating whether the position index inside an array should be updated. - - - - Sets the state based on current token type. - - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Changes the reader's state to . - If is set to true, the source is also closed. - - - - - The exception thrown when an error occurs while reading JSON text. - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Initializes a new instance of the class - with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The line number indicating where the error occurred. - The line position indicating where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Instructs the to always serialize the member, and to require that the member has a value. - - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Serializes and deserializes objects into and from the JSON format. - The enables you to control how objects are encoded into JSON. - - - - - Occurs when the errors during serialization and deserialization. - - - - - Gets or sets the used by the serializer when resolving references. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how object references are preserved by the serializer. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) is handled. - - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - - - - Gets or sets how null values are handled during serialization and deserialization. - - - - - Gets or sets how default values are handled during serialization and deserialization. - - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets a collection that will be used during serialization. - - Collection that will be used during serialization. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Indicates how JSON text output is formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled during serialization and deserialization. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. - - - true if there will be a check for additional JSON content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Creates a new instance. - The will not use default settings - from . - - - A new instance. - The will not use default settings - from . - - - - - Creates a new instance using the specified . - The will not use default settings - from . - - The settings to be applied to the . - - A new instance using the specified . - The will not use default settings - from . - - - - - Creates a new instance. - The will use default settings - from . - - - A new instance. - The will use default settings - from . - - - - - Creates a new instance using the specified . - The will use default settings - from as well as the specified . - - The settings to be applied to the . - - A new instance using the specified . - The will use default settings - from as well as the specified . - - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Deserializes the JSON structure contained by the specified . - - The that contains the JSON structure to deserialize. - The being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The type of the object to deserialize. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is Auto to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Specifies the settings on a object. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) are handled. - - Reference loop handling. - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - Missing member handling. - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how null values are handled during serialization and deserialization. - - Null value handling. - - - - Gets or sets how default values are handled during serialization and deserialization. - - The default value handling. - - - - Gets or sets a collection that will be used during serialization. - - The converters. - - - - Gets or sets how object references are preserved by the serializer. - - The preserve references handling. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - The type name handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - The contract resolver. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets the used by the serializer when resolving references. - - The reference resolver. - - - - Gets or sets a function that creates the used by the serializer when resolving references. - - A function that creates the used by the serializer when resolving references. - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the error handler called during serialization and deserialization. - - The error handler called during serialization and deserialization. - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Indicates how JSON text output is formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled during serialization and deserialization. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets a value indicating whether there will be a check for additional content after deserializing an object. - - - true if there will be a check for additional content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Represents a reader that provides fast, non-cached, forward-only access to JSON text data. - - - - - Initializes a new instance of the class with the specified . - - The containing the JSON data to read. - - - - Gets or sets the reader's character buffer pool. - - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - - The current line number or 0 if no line information is available (for example, returns false). - - - - - Gets the current line position. - - - The current line position or 0 if no line information is available (for example, returns false). - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets or sets the writer's character array pool. - - - - - Gets or sets how many s to write for each level in the hierarchy when is set to . - - - - - Gets or sets which character to use to quote attribute values. - - - - - Gets or sets which character to use for indenting when is set to . - - - - - Gets or sets a value indicating whether object names will be surrounded with quotes. - - - - - Initializes a new instance of the class using the specified . - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying . - - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the specified end token. - - The end token to write. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Specifies the type of JSON token. - - - - - This is returned by the if a read method has not been called. - - - - - An object start token. - - - - - An array start token. - - - - - A constructor start token. - - - - - An object property name. - - - - - A comment. - - - - - Raw JSON. - - - - - An integer. - - - - - A float. - - - - - A string. - - - - - A boolean. - - - - - A null token. - - - - - An undefined token. - - - - - An object end token. - - - - - An array end token. - - - - - A constructor end token. - - - - - A Date. - - - - - Byte data. - - - - - - Represents a reader that provides validation. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Sets an event handler for receiving schema validation errors. - - - - - Gets the text value of the current JSON token. - - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - - Gets the type of the current JSON token. - - - - - - Gets the .NET type for the current JSON token. - - - - - - Initializes a new instance of the class that - validates the content returned from the given . - - The to read from while validating. - - - - Gets or sets the schema. - - The schema. - - - - Gets the used to construct this . - - The specified in the constructor. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a []. - - - A [] or null if the next JSON token is null. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets or sets a value indicating whether the destination should be closed when this writer is closed. - - - true to close the destination when this writer is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. - - - true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. - - - - - Gets the top. - - The top. - - - - Gets the state of the writer. - - - - - Gets the path of the writer. - - - - - Gets or sets a value indicating how JSON text output should be formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled when writing JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written to JSON text. - - - - - Gets or sets how and values are formatted when writing JSON text. - - - - - Gets or sets the culture used when writing JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the destination and also flushes the destination. - - - - - Closes this writer. - If is set to true, the destination is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the end of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the end of an array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end constructor. - - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes the end of the current JSON object or array. - - - - - Writes the current token and its children. - - The to read the token from. - - - - Writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - - - - Writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - null can be passed to the method for tokens that don't have a value, e.g. . - - - - - Writes the token. - - The to write. - - - - Writes the specified end token. - - The end token to write. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON without changing the writer's state. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Sets the state of the . - - The being written. - The value being written. - - - - The exception thrown when an error occurs while writing JSON text. - - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Initializes a new instance of the class - with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Specifies how JSON comments are handled when loading JSON. - - - - - Ignore comments. - - - - - Load comments as a with type . - - - - - Specifies how line information is handled when loading JSON. - - - - - Ignore line information. - - - - - Load line information. - - - - - Contains the LINQ to JSON extension methods. - - - - - Returns a collection of tokens that contains the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the descendants of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, and the descendants of every token in the source collection. - - - - Returns a collection of child properties of every object in the source collection. - - An of that contains the source collection. - An of that contains the properties of every object in the source collection. - - - - Returns a collection of child values of every object in the source collection with the given key. - - An of that contains the source collection. - The token key. - An of that contains the values of every token in the source collection with the given key. - - - - Returns a collection of child values of every object in the source collection. - - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child values of every object in the source collection with the given key. - - The type to convert the values to. - An of that contains the source collection. - The token key. - An that contains the converted values of every token in the source collection with the given key. - - - - Returns a collection of converted child values of every object in the source collection. - - The type to convert the values to. - An of that contains the source collection. - An that contains the converted values of every token in the source collection. - - - - Converts the value. - - The type to convert the value to. - A cast as a of . - A converted value. - - - - Converts the value. - - The source collection type. - The type to convert the value to. - A cast as a of . - A converted value. - - - - Returns a collection of child tokens of every array in the source collection. - - The source collection type. - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child tokens of every array in the source collection. - - An of that contains the source collection. - The type to convert the values to. - The source collection type. - An that contains the converted values of every token in the source collection. - - - - Returns the input typed as . - - An of that contains the source collection. - The input typed as . - - - - Returns the input typed as . - - The source collection type. - An of that contains the source collection. - The input typed as . - - - - Represents a collection of objects. - - The type of token. - - - - Gets the of with the specified key. - - - - - - Represents a JSON array. - - - - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads an from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the at the specified index. - - - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Inserts an item to the at the specified index. - - The zero-based index at which should be inserted. - The object to insert into the . - - is not a valid index in the . - - - - - Removes the item at the specified index. - - The zero-based index of the item to remove. - - is not a valid index in the . - - - - - Returns an enumerator that iterates through the collection. - - - A of that can be used to iterate through the collection. - - - - - Adds an item to the . - - The object to add to the . - - - - Removes all items from the . - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Copies the elements of the to an array, starting at a particular array index. - - The array. - Index of the array. - - - - Gets a value indicating whether the is read-only. - - true if the is read-only; otherwise, false. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - - - Represents a JSON constructor. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets or sets the name of this constructor. - - The constructor name. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name. - - The constructor name. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a token that can contain other tokens. - - - - - Occurs when the list changes or an item in the list changes. - - - - - Occurs before an item is added to the collection. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Get the first child token of this token. - - - A containing the first child token of the . - - - - - Get the last child token of this token. - - - A containing the last child token of the . - - - - - Returns a collection of the child tokens of this token, in document order. - - - An of containing the child tokens of this , in document order. - - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - - A containing the child values of this , in document order. - - - - - Returns a collection of the descendant tokens for this token in document order. - - An of containing the descendant tokens of the . - - - - Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. - - An of containing this token, and all the descendant tokens of the . - - - - Adds the specified content as children of this . - - The content to be added. - - - - Adds the specified content as the first children of this . - - The content to be added. - - - - Creates a that can be used to add tokens to the . - - A that is ready to have content written to it. - - - - Replaces the child nodes of this token with the specified content. - - The content. - - - - Removes the child nodes from this token. - - - - - Merge the specified content into this . - - The content to be merged. - - - - Merge the specified content into this using . - - The content to be merged. - The used to merge the content. - - - - Gets the count of child JSON tokens. - - The count of child JSON tokens. - - - - Represents a collection of objects. - - The type of token. - - - - An empty collection of objects. - - - - - Initializes a new instance of the struct. - - The enumerable. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Gets the of with the specified key. - - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Represents a JSON object. - - - - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Occurs when a property value changes. - - - - - Occurs when a property value is changing. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Gets the node type for this . - - The type. - - - - Gets an of of this object's properties. - - An of of this object's properties. - - - - Gets a the specified name. - - The property name. - A with the specified name or null. - - - - Gets a of of this object's property values. - - A of of this object's property values. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the with the specified property name. - - - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified property name. - - Name of the property. - The with the specified property name. - - - - Gets the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - One of the enumeration values that specifies how the strings will be compared. - The with the specified property name. - - - - Tries to get the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - The value. - One of the enumeration values that specifies how the strings will be compared. - true if a value was successfully retrieved; otherwise, false. - - - - Adds the specified property name. - - Name of the property. - The value. - - - - Removes the property with the specified name. - - Name of the property. - true if item was successfully removed; otherwise, false. - - - - Tries to get the with the specified property name. - - Name of the property. - The value. - true if a value was successfully retrieved; otherwise, false. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Represents a JSON property. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the property name. - - The property name. - - - - Gets or sets the property value. - - The property value. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a view of a . - - - - - Initializes a new instance of the class. - - The name. - - - - When overridden in a derived class, returns whether resetting an object changes its value. - - - true if resetting the component changes its value; otherwise, false. - - The component to test for reset capability. - - - - When overridden in a derived class, gets the current value of the property on a component. - - - The value of a property for a given component. - - The component with the property for which to retrieve the value. - - - - When overridden in a derived class, resets the value for this property of the component to the default value. - - The component with the property value that is to be reset to the default value. - - - - When overridden in a derived class, sets the value of the component to a different value. - - The component with the property value that is to be set. - The new value. - - - - When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. - - - true if the property should be persisted; otherwise, false. - - The component with the property to be examined for persistence. - - - - When overridden in a derived class, gets the type of the component this property is bound to. - - - A that represents the type of component this property is bound to. - When the or - - methods are invoked, the object specified might be an instance of this type. - - - - - When overridden in a derived class, gets a value indicating whether this property is read-only. - - - true if the property is read-only; otherwise, false. - - - - - When overridden in a derived class, gets the type of the property. - - - A that represents the type of the property. - - - - - Gets the hash code for the name of the member. - - - - The hash code for the name of the member. - - - - - Represents a raw JSON string. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class. - - The raw json. - - - - Creates an instance of with the content of the reader's current token. - - The reader. - An instance of with the content of the reader's current token. - - - - Specifies the settings used when loading JSON. - - - - - Initializes a new instance of the class. - - - - - Gets or sets how JSON comments are handled when loading JSON. - - The JSON comment handling. - - - - Gets or sets how JSON line info is handled when loading JSON. - - The JSON line info handling. - - - - Specifies the settings used when merging JSON. - - - - - Gets or sets the method used when merging JSON arrays. - - The method used when merging JSON arrays. - - - - Gets or sets how null value properties are merged. - - How null value properties are merged. - - - - Represents an abstract JSON token. - - - - - Gets a comparer that can compare two tokens for value equality. - - A that can compare two nodes for value equality. - - - - Gets or sets the parent. - - The parent. - - - - Gets the root of this . - - The root of this . - - - - Gets the node type for this . - - The type. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Compares the values of two tokens, including the values of all descendant tokens. - - The first to compare. - The second to compare. - true if the tokens are equal; otherwise false. - - - - Gets the next sibling token of this node. - - The that contains the next sibling token. - - - - Gets the previous sibling token of this node. - - The that contains the previous sibling token. - - - - Gets the path of the JSON token. - - - - - Adds the specified content immediately after this token. - - A content object that contains simple content or a collection of content objects to be added after this token. - - - - Adds the specified content immediately before this token. - - A content object that contains simple content or a collection of content objects to be added before this token. - - - - Returns a collection of the ancestor tokens of this token. - - A collection of the ancestor tokens of this token. - - - - Returns a collection of tokens that contain this token, and the ancestors of this token. - - A collection of tokens that contain this token, and the ancestors of this token. - - - - Returns a collection of the sibling tokens after this token, in document order. - - A collection of the sibling tokens after this tokens, in document order. - - - - Returns a collection of the sibling tokens before this token, in document order. - - A collection of the sibling tokens before this token, in document order. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets the with the specified key converted to the specified type. - - The type to convert the token to. - The token key. - The converted token value. - - - - Get the first child token of this token. - - A containing the first child token of the . - - - - Get the last child token of this token. - - A containing the last child token of the . - - - - Returns a collection of the child tokens of this token, in document order. - - An of containing the child tokens of this , in document order. - - - - Returns a collection of the child tokens of this token, in document order, filtered by the specified type. - - The type to filter the child tokens on. - A containing the child tokens of this , in document order. - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - A containing the child values of this , in document order. - - - - Removes this token from its parent. - - - - - Replaces this token with the specified token. - - The value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Returns the indented JSON for this token. - - - The indented JSON for this token. - - - - - Returns the JSON for this token using the given formatting and converters. - - Indicates how the output should be formatted. - A collection of s which will be used when writing the token. - The JSON for this token using the given formatting and converters. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to []. - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from [] to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Creates a for this token. - - A that can be used to read this token and its descendants. - - - - Creates a from an object. - - The object that will be used to create . - A with the value of the specified object. - - - - Creates a from an object using the specified . - - The object that will be used to create . - The that will be used when reading the object. - A with the value of the specified object. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - An positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - Creates a from a . - - A positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A , or null. - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - A . - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - An of that contains the selected elements. - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - An of that contains the selected elements. - - - - Creates a new instance of the . All child tokens are recursively cloned. - - A new instance of the . - - - - Adds an object to the annotation list of this . - - The annotation to add. - - - - Get the first annotation object of the specified type from this . - - The type of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets the first annotation object of the specified type from this . - - The of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets a collection of annotations of the specified type for this . - - The type of the annotations to retrieve. - An that contains the annotations for this . - - - - Gets a collection of annotations of the specified type for this . - - The of the annotations to retrieve. - An of that contains the annotations that match the specified type for this . - - - - Removes the annotations of the specified type from this . - - The type of annotations to remove. - - - - Removes the annotations of the specified type from this . - - The of annotations to remove. - - - - Compares tokens to determine whether they are equal. - - - - - Determines whether the specified objects are equal. - - The first object of type to compare. - The second object of type to compare. - - true if the specified objects are equal; otherwise, false. - - - - - Returns a hash code for the specified object. - - The for which a hash code is to be returned. - A hash code for the specified object. - The type of is a reference type and is null. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Gets the at the reader's current position. - - - - - Initializes a new instance of the class. - - The token to read from. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Gets the path of the current JSON token. - - - - - Specifies the type of token. - - - - - No token type has been set. - - - - - A JSON object. - - - - - A JSON array. - - - - - A JSON constructor. - - - - - A JSON object property. - - - - - A comment. - - - - - An integer value. - - - - - A float value. - - - - - A string value. - - - - - A boolean value. - - - - - A null value. - - - - - An undefined value. - - - - - A date value. - - - - - A raw JSON value. - - - - - A collection of bytes value. - - - - - A Guid value. - - - - - A Uri value. - - - - - A TimeSpan value. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets the at the writer's current position. - - - - - Gets the token being written. - - The token being written. - - - - Initializes a new instance of the class writing to the given . - - The container being written to. - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the underlying . - - - - - Closes this writer. - If is set to true, the JSON is auto-completed. - - - Setting to true has no additional effect, since the underlying is a type that cannot be closed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end. - - The token. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes a value. - An error will be raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Represents a value in JSON (string, integer, date, etc). - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Creates a comment with the given value. - - The value. - A comment with the given value. - - - - Creates a string with the given value. - - The value. - A string with the given value. - - - - Creates a null value. - - A null value. - - - - Creates a undefined value. - - A undefined value. - - - - Gets the node type for this . - - The type. - - - - Gets or sets the underlying token value. - - The underlying token value. - - - - Writes this token to a . - - A into which this method will write. - A collection of s which will be used when writing the token. - - - - Indicates whether the current object is equal to another object of the same type. - - - true if the current object is equal to the parameter; otherwise, false. - - An object to compare with this object. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format provider. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - The format provider. - - A that represents this instance. - - - - - Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. - - An object to compare with this instance. - - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: - Value - Meaning - Less than zero - This instance is less than . - Zero - This instance is equal to . - Greater than zero - This instance is greater than . - - - is not of the same type as this instance. - - - - - Specifies how JSON arrays are merged together. - - - - Concatenate arrays. - - - Union arrays, skipping items that already exist. - - - Replace all array items. - - - Merge array items together, matched by index. - - - - Specifies how null value properties are merged. - - - - - The content's null value properties will be ignored during merging. - - - - - The content's null value properties will be merged. - - - - - Specifies the member serialization options for the . - - - - - All public members are serialized by default. Members can be excluded using or . - This is the default member serialization mode. - - - - - Only members marked with or are serialized. - This member serialization mode can also be set by marking the class with . - - - - - All public and private fields are serialized. Members can be excluded using or . - This member serialization mode can also be set by marking the class with - and setting IgnoreSerializableAttribute on to false. - - - - - Specifies metadata property handling options for the . - - - - - Read metadata properties located at the start of a JSON object. - - - - - Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. - - - - - Do not try to read metadata properties. - - - - - Specifies missing member handling options for the . - - - - - Ignore a missing member and do not attempt to deserialize it. - - - - - Throw a when a missing member is encountered during deserialization. - - - - - Specifies null value handling options for the . - - - - - - - - - Include null values when serializing and deserializing objects. - - - - - Ignore null values when serializing and deserializing objects. - - - - - Specifies how object creation is handled by the . - - - - - Reuse existing objects, create new objects when needed. - - - - - Only reuse existing objects. - - - - - Always create new objects. - - - - - Specifies reference handling options for the . - Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . - - - - - - - - Do not preserve references when serializing types. - - - - - Preserve references when serializing into a JSON object structure. - - - - - Preserve references when serializing into a JSON array structure. - - - - - Preserve references when serializing. - - - - - Specifies reference loop handling options for the . - - - - - Throw a when a loop is encountered. - - - - - Ignore loop references and do not serialize. - - - - - Serialize loop references. - - - - - Indicating whether a property is required. - - - - - The property is not required. The default state. - - - - - The property must be defined in JSON but can be a null value. - - - - - The property must be defined in JSON and cannot be a null value. - - - - - The property is not required but it cannot be a null value. - - - - - - Contains the JSON schema extension methods. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - true if the specified is valid; otherwise, false. - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - When this method returns, contains any error messages generated while validating. - - true if the specified is valid; otherwise, false. - - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - The validation event handler. - - - - - An in-memory representation of a JSON Schema. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the id. - - - - - Gets or sets the title. - - - - - Gets or sets whether the object is required. - - - - - Gets or sets whether the object is read-only. - - - - - Gets or sets whether the object is visible to users. - - - - - Gets or sets whether the object is transient. - - - - - Gets or sets the description of the object. - - - - - Gets or sets the types of values allowed by the object. - - The type. - - - - Gets or sets the pattern. - - The pattern. - - - - Gets or sets the minimum length. - - The minimum length. - - - - Gets or sets the maximum length. - - The maximum length. - - - - Gets or sets a number that the value should be divisible by. - - A number that the value should be divisible by. - - - - Gets or sets the minimum. - - The minimum. - - - - Gets or sets the maximum. - - The maximum. - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). - - A flag indicating whether the value can not equal the number defined by the minimum attribute (). - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). - - A flag indicating whether the value can not equal the number defined by the maximum attribute (). - - - - Gets or sets the minimum number of items. - - The minimum number of items. - - - - Gets or sets the maximum number of items. - - The maximum number of items. - - - - Gets or sets the of items. - - The of items. - - - - Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . - - - true if items are validated using their array position; otherwise, false. - - - - - Gets or sets the of additional items. - - The of additional items. - - - - Gets or sets a value indicating whether additional items are allowed. - - - true if additional items are allowed; otherwise, false. - - - - - Gets or sets whether the array items must be unique. - - - - - Gets or sets the of properties. - - The of properties. - - - - Gets or sets the of additional properties. - - The of additional properties. - - - - Gets or sets the pattern properties. - - The pattern properties. - - - - Gets or sets a value indicating whether additional properties are allowed. - - - true if additional properties are allowed; otherwise, false. - - - - - Gets or sets the required property if this property is present. - - The required property if this property is present. - - - - Gets or sets the a collection of valid enum values allowed. - - A collection of valid enum values allowed. - - - - Gets or sets disallowed types. - - The disallowed types. - - - - Gets or sets the default value. - - The default value. - - - - Gets or sets the collection of that this schema extends. - - The collection of that this schema extends. - - - - Gets or sets the format. - - The format. - - - - Initializes a new instance of the class. - - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The object representing the JSON Schema. - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The to use when resolving schema references. - The object representing the JSON Schema. - - - - Load a from a string that contains JSON Schema. - - A that contains JSON Schema. - A populated from the string that contains JSON Schema. - - - - Load a from a string that contains JSON Schema using the specified . - - A that contains JSON Schema. - The resolver. - A populated from the string that contains JSON Schema. - - - - Writes this schema to a . - - A into which this method will write. - - - - Writes this schema to a using the specified . - - A into which this method will write. - The resolver used. - - - - Returns a that represents the current . - - - A that represents the current . - - - - - - Returns detailed information about the schema exception. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - - Generates a from a specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets how undefined schemas are handled by the serializer. - - - - - Gets or sets the contract resolver. - - The contract resolver. - - - - Generate a from the specified type. - - The type to generate a from. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - - Resolves from an id. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the loaded schemas. - - The loaded schemas. - - - - Initializes a new instance of the class. - - - - - Gets a for the specified reference. - - The id. - A for the specified reference. - - - - - The value types allowed by the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - No type specified. - - - - - String type. - - - - - Float type. - - - - - Integer type. - - - - - Boolean type. - - - - - Object type. - - - - - Array type. - - - - - Null type. - - - - - Any type. - - - - - - Specifies undefined schema Id handling options for the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Do not infer a schema Id. - - - - - Use the .NET type name as the schema Id. - - - - - Use the assembly qualified .NET type name as the schema Id. - - - - - - Returns detailed information related to the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the associated with the validation error. - - The JsonSchemaException associated with the validation error. - - - - Gets the path of the JSON location where the validation error occurred. - - The path of the JSON location where the validation error occurred. - - - - Gets the text description corresponding to the validation error. - - The text description. - - - - - Represents the callback method that will handle JSON schema validation events and the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - A camel case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Resolves member mappings for a type, camel casing property names. - - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used by to resolve a for a given . - - - - - Gets a value indicating whether members are being get and set using dynamic code generation. - This value is determined by the runtime permissions available. - - - true if using dynamic code generation; otherwise, false. - - - - - Gets or sets the default members search flags. - - The default members search flags. - - - - Gets or sets a value indicating whether compiler generated members should be serialized. - - - true if serialized compiler generated members; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. - - - true if the interface will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. - - - true if the attribute will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. - - The naming strategy used to resolve how property names and dictionary keys are serialized. - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Gets the serializable members for the type. - - The type to get serializable members for. - The serializable members for the type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates the constructor parameters. - - The constructor to create properties for. - The type's member properties. - Properties for the given . - - - - Creates a for the given . - - The matching member property. - The constructor parameter. - A created for the given . - - - - Resolves the default for the contract. - - Type of the object. - The contract's default . - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Determines which contract type is created for the given type. - - Type of the object. - A for the given type. - - - - Creates properties for the given . - - The type to create properties for. - /// The member serialization mode for the type. - Properties for the given . - - - - Creates the used by the serializer to get and set values from a member. - - The member. - The used by the serializer to get and set values from a member. - - - - Creates a for the given . - - The member's parent . - The member to create a for. - A created for the given . - - - - Resolves the name of the property. - - Name of the property. - Resolved name of the property. - - - - Resolves the name of the extension data. By default no changes are made to extension data names. - - Name of the extension data. - Resolved name of the extension data. - - - - Resolves the key of the dictionary. By default is used to resolve dictionary keys. - - Key of the dictionary. - Resolved key of the dictionary. - - - - Gets the resolved name of the property. - - Name of the property. - Name of the property. - - - - The default naming strategy. Property names and dictionary keys are unchanged. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - The default serialization binder used when resolving and loading classes from type names. - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - The type of the object the formatter creates a new instance of. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer that writes to the application's instances. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Get and set values for a using dynamic methods. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Provides information surrounding an error. - - - - - Gets the error. - - The error. - - - - Gets the original object that caused the error. - - The original object that caused the error. - - - - Gets the member that caused the error. - - The member that caused the error. - - - - Gets the path of the JSON location where the error occurred. - - The path of the JSON location where the error occurred. - - - - Gets or sets a value indicating whether this is handled. - - true if handled; otherwise, false. - - - - Provides data for the Error event. - - - - - Gets the current object the error event is being raised against. - - The current object the error event is being raised against. - - - - Gets the error context. - - The error context. - - - - Initializes a new instance of the class. - - The current object. - The error context. - - - - Provides methods to get attributes. - - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Used by to resolve a for a given . - - - - - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used to resolve references when serializing and deserializing JSON by the . - - - - - Resolves a reference to its object. - - The serialization context. - The reference to resolve. - The object that was resolved from the reference. - - - - Gets the reference for the specified object. - - The serialization context. - The object to get a reference for. - The reference to the object. - - - - Determines whether the specified object is referenced. - - The serialization context. - The object to test for a reference. - - true if the specified object is referenced; otherwise, false. - - - - - Adds a reference to the specified object. - - The serialization context. - The reference. - The object to reference. - - - - Allows users to control class loading and mandate what class to load. - - - - - When implemented, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object - The type of the object the formatter creates a new instance of. - - - - When implemented, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - The that will be used to filter the trace messages passed to the writer. - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Provides methods to get and set values. - - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Contract details for a used by the . - - - - - Gets the of the collection items. - - The of the collection items. - - - - Gets a value indicating whether the collection type is a multidimensional array. - - true if the collection type is a multidimensional array; otherwise, false. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the collection values. - - true if the creator has a parameter with the collection values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the default collection items . - - The converter. - - - - Gets or sets a value indicating whether the collection items preserve object references. - - true if collection items preserve object references; otherwise, false. - - - - Gets or sets the collection item reference loop handling. - - The reference loop handling. - - - - Gets or sets the collection item type name handling. - - The type name handling. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Handles serialization callback events. - - The object that raised the callback event. - The streaming context. - - - - Handles serialization error callback events. - - The object that raised the callback event. - The streaming context. - The error context. - - - - Sets extension data for an object during deserialization. - - The object to set extension data on. - The extension data key. - The extension data value. - - - - Gets extension data for an object during serialization. - - The object to set extension data on. - - - - Contract details for a used by the . - - - - - Gets the underlying type for the contract. - - The underlying type for the contract. - - - - Gets or sets the type created during deserialization. - - The type created during deserialization. - - - - Gets or sets whether this type contract is serialized as a reference. - - Whether this type contract is serialized as a reference. - - - - Gets or sets the default for this contract. - - The converter. - - - - Gets or sets all methods called immediately after deserialization of the object. - - The methods called immediately after deserialization of the object. - - - - Gets or sets all methods called during deserialization of the object. - - The methods called during deserialization of the object. - - - - Gets or sets all methods called after serialization of the object graph. - - The methods called after serialization of the object graph. - - - - Gets or sets all methods called before serialization of the object. - - The methods called before serialization of the object. - - - - Gets or sets all method called when an error is thrown during the serialization of the object. - - The methods called when an error is thrown during the serialization of the object. - - - - Gets or sets the default creator method used to create the object. - - The default creator method used to create the object. - - - - Gets or sets a value indicating whether the default creator is non-public. - - true if the default object creator is non-public; otherwise, false. - - - - Contract details for a used by the . - - - - - Gets or sets the dictionary key resolver. - - The dictionary key resolver. - - - - Gets the of the dictionary keys. - - The of the dictionary keys. - - - - Gets the of the dictionary values. - - The of the dictionary values. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the dictionary values. - - true if the creator has a parameter with the dictionary values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the object constructor. - - The object constructor. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the object member serialization. - - The member object serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Gets the object's properties. - - The object's properties. - - - - Gets a collection of instances that define the parameters used with . - - - - - Gets or sets the function used to create the object. When set this function will override . - This function is called with a collection of arguments which are defined by the collection. - - The function used to create the object. - - - - Gets or sets the extension data setter. - - - - - Gets or sets the extension data getter. - - - - - Gets or sets the extension data value type. - - - - - Gets or sets the extension data name resolver. - - The extension data name resolver. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Maps a JSON property to a .NET member or constructor parameter. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the type that declared this property. - - The type that declared this property. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets the name of the underlying member or parameter. - - The name of the underlying member or parameter. - - - - Gets the that will get and set the during serialization. - - The that will get and set the during serialization. - - - - Gets or sets the for this property. - - The for this property. - - - - Gets or sets the type of the property. - - The type of the property. - - - - Gets or sets the for the property. - If set this converter takes precedence over the contract converter for the property type. - - The converter. - - - - Gets or sets the member converter. - - The member converter. - - - - Gets or sets a value indicating whether this is ignored. - - true if ignored; otherwise, false. - - - - Gets or sets a value indicating whether this is readable. - - true if readable; otherwise, false. - - - - Gets or sets a value indicating whether this is writable. - - true if writable; otherwise, false. - - - - Gets or sets a value indicating whether this has a member attribute. - - true if has a member attribute; otherwise, false. - - - - Gets the default value. - - The default value. - - - - Gets or sets a value indicating whether this is required. - - A value indicating whether this is required. - - - - Gets or sets a value indicating whether this property preserves object references. - - - true if this instance is reference; otherwise, false. - - - - - Gets or sets the property null value handling. - - The null value handling. - - - - Gets or sets the property default value handling. - - The default value handling. - - - - Gets or sets the property reference loop handling. - - The reference loop handling. - - - - Gets or sets the property object creation handling. - - The object creation handling. - - - - Gets or sets or sets the type name handling. - - The type name handling. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets a predicate used to determine whether the property should be deserialized. - - A predicate used to determine whether the property should be deserialized. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets an action used to set whether the property has been deserialized. - - An action used to set whether the property has been deserialized. - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the converter used when serializing the property's collection items. - - The collection's items converter. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - A collection of objects. - - - - - Initializes a new instance of the class. - - The type. - - - - When implemented in a derived class, extracts the key from the specified element. - - The element from which to extract the key. - The key for the specified element. - - - - Adds a object. - - The property to add to the collection. - - - - Gets the closest matching object. - First attempts to get an exact case match of and then - a case insensitive match. - - Name of the property. - A matching property if found. - - - - Gets a property by property name. - - The name of the property to get. - Type property name string comparison. - A matching property if found. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Lookup and create an instance of the type described by the argument. - - The type to create. - Optional arguments to pass to an initializing constructor of the JsonConverter. - If null, the default constructor is used. - - - - Represents a trace writer that writes to memory. When the trace message limit is - reached then old trace messages will be removed as new messages are added. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Initializes a new instance of the class. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Returns an enumeration of the most recent trace messages. - - An enumeration of the most recent trace messages. - - - - Returns a of the most recent trace messages. - - - A of the most recent trace messages. - - - - - A base class for resolving how property names and dictionary keys are serialized. - - - - - A flag indicating whether dictionary keys should be processed. - Defaults to false. - - - - - A flag indicating whether extension data names should be processed. - Defaults to false. - - - - - A flag indicating whether explicitly specified property names, - e.g. a property name customized with a , should be processed. - Defaults to false. - - - - - Gets the serialized name for a given property name. - - The initial property name. - A flag indicating whether the property has had a name explicitly specified. - The serialized property name. - - - - Gets the serialized name for a given extension data name. - - The initial extension data name. - The serialized extension data name. - - - - Gets the serialized key for a given dictionary key. - - The initial dictionary key. - The serialized dictionary key. - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Represents a method that constructs an object. - - The object type to create. - - - - When applied to a method, specifies that the method is called when an error occurs serializing an object. - - - - - Provides methods to get attributes from a , , or . - - - - - Initializes a new instance of the class. - - The instance to get attributes for. This parameter should be a , , or . - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Get and set values for a using reflection. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - A snake case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Specifies how strings are escaped when writing JSON text. - - - - - Only control characters (e.g. newline) are escaped. - - - - - All non-ASCII and control characters (e.g. newline) are escaped. - - - - - HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. - - - - - Indicates the method that will be used during deserialization for locating and loading assemblies. - - - - - In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. - - - - - In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. - - - - - Specifies type name handling options for the . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Do not include the .NET type name when serializing types. - - - - - Include the .NET type name when serializing into a JSON object structure. - - - - - Include the .NET type name when serializing into a JSON array structure. - - - - - Always include the .NET type name when serializing. - - - - - Include the .NET type name when the type of the object being serialized is not the same as its declared type. - Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON - you must specify a root type object with - or . - - - - - Determines whether the collection is null or empty. - - The collection. - - true if the collection is null or empty; otherwise, false. - - - - - Adds the elements of the specified collection to the specified generic . - - The list to add to. - The collection of elements to add. - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert or cast the value to. - - The converted type. If conversion was unsuccessful, the initial value - is returned if assignable to the target type. - - - - - Gets a dictionary of the names and values of an type. - - - - - - Gets a dictionary of the names and values of an Enum type. - - The enum type to get names and values for. - - - - - Gets the type of the typed collection's items. - - The type. - The type of the typed collection's items. - - - - Gets the member's underlying type. - - The member. - The underlying type of the member. - - - - Determines whether the member is an indexed property. - - The member. - - true if the member is an indexed property; otherwise, false. - - - - - Determines whether the property is an indexed property. - - The property. - - true if the property is an indexed property; otherwise, false. - - - - - Gets the member's value on the object. - - The member. - The target object. - The member's value on the object. - - - - Sets the member's value on the target object. - - The member. - The target. - The value. - - - - Determines whether the specified MemberInfo can be read. - - The MemberInfo to determine whether can be read. - /// if set to true then allow the member to be gotten non-publicly. - - true if the specified MemberInfo can be read; otherwise, false. - - - - - Determines whether the specified MemberInfo can be set. - - The MemberInfo to determine whether can be set. - if set to true then allow the member to be set non-publicly. - if set to true then allow the member to be set if read-only. - - true if the specified MemberInfo can be set; otherwise, false. - - - - - Builds a string. Unlike this class lets you reuse its internal buffer. - - - - - Determines whether the string is all white space. Empty string will return false. - - The string to test whether it is all white space. - - true if the string is all white space; otherwise, false. - - - - - Specifies the state of the . - - - - - An exception has been thrown, which has left the in an invalid state. - You may call the method to put the in the Closed state. - Any other method calls result in an being thrown. - - - - - The method has been called. - - - - - An object is being written. - - - - - An array is being written. - - - - - A constructor is being written. - - - - - A property is being written. - - - - - A write method has not been called. - - - - diff --git a/trunk/packages/Newtonsoft.Json.10.0.3/lib/net40/Newtonsoft.Json.dll b/trunk/packages/Newtonsoft.Json.10.0.3/lib/net40/Newtonsoft.Json.dll deleted file mode 100644 index 71ba70200c51b98a16d5fc4687417709de47aac1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 525824 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

    - Represents a BSON Oid (object id). - - - - - Gets or sets the value of the Oid. - - The value of the Oid. - - - - Initializes a new instance of the class. - - The Oid value. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. - - - - - Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. - - - true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. - - - - - Gets or sets a value indicating whether the root object will be read as a JSON array. - - - true if the root object will be read as a JSON array; otherwise, false. - - - - - Gets or sets the used when reading values from BSON. - - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. - - - - - Gets or sets the used when writing values to BSON. - When set to no conversion will occur. - - The used when writing values to BSON. - - - - Initializes a new instance of the class. - - The to write to. - - - - Initializes a new instance of the class. - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. - - - - - Writes the end. - - The token. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes the beginning of a JSON array. - - - - - Writes the beginning of a JSON object. - - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value that represents a BSON object id. - - The Object ID value to write. - - - - Writes a BSON regex. - - The regex pattern. - The regex options. - - - - Specifies how constructors are used when initializing objects during deserialization by the . - - - - - First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. - - - - - Json.NET will use a non-public default constructor before falling back to a parameterized constructor. - - - - - Converts a binary value to and from a base 64 string value. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Creates a custom object. - - The object type to convert. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Creates an object which will then be populated by the serializer. - - Type of the object. - The created object. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Provides a base class for converting a to and from JSON. - - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a F# discriminated union type to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an Entity Framework to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). - - - - - Gets or sets the date time styles used when converting a date to and from JSON. - - The date time styles used when converting a date to and from JSON. - - - - Gets or sets the date time format used when converting a date to and from JSON. - - The date time format used when converting a date to and from JSON. - - - - Gets or sets the culture used when converting a date to and from JSON. - - The culture used when converting a date to and from JSON. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from its name string value. - - - - - Gets or sets a value indicating whether the written enum text should be camel case. - - true if the written enum text will be camel case; otherwise, false. - - - - Gets or sets a value indicating whether integer values are allowed when deserializing. - - true if integers are allowed when deserializing; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - true if the written enum text will be camel case; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from a string (e.g. "1.2.3.4"). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts XML to and from JSON. - - - - - Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. - - The name of the deserialized root element. - - - - Gets or sets a flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - true if the array attribute is written to the XML; otherwise, false. - - - - Gets or sets a value indicating whether to write the root JSON object. - - true if the JSON root object is omitted; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The calling serializer. - The value. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Checks if the is a namespace attribute. - - Attribute name to test. - The attribute name prefix if it has one, otherwise an empty string. - true if attribute name is for a namespace attribute, otherwise false. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Specifies how dates are formatted when writing JSON text. - - - - - Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". - - - - - Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". - - - - - Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. - - - - - Date formatted strings are not parsed to a date type and are read as strings. - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Specifies how to treat the time value when converting between string and . - - - - - Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. - - - - - Treat as a UTC. If the object represents a local time, it is converted to a UTC. - - - - - Treat as a local time if a is being converted to a string. - If a string is being converted to , convert to a local time if a time zone is specified. - - - - - Time zone information should be preserved when converting. - - - - - Specifies default value handling options for the . - - - - - - - - - Include members where the member value is the same as the member's default value when serializing objects. - Included members are written to JSON. Has no effect when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - so that it is not written to JSON. - This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, - decimals and floating point numbers; and false for booleans). The default value ignored can be changed by - placing the on the property. - - - - - Members with a default value but no JSON will be set to their default value when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - and set members to their default value when deserializing. - - - - - Specifies float format handling options when writing special floating point numbers, e.g. , - and with . - - - - - Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". - - - - - Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. - Note that this will produce non-valid JSON. - - - - - Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. - - - - - Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Floating point numbers are parsed to . - - - - - Floating point numbers are parsed to . - - - - - Specifies formatting options for the . - - - - - No special formatting is applied. This is the default. - - - - - Causes child objects to be indented according to the and settings. - - - - - Provides an interface for using pooled arrays. - - The array type content. - - - - Rent an array from the pool. This array must be returned when it is no longer needed. - - The minimum required length of the array. The returned array may be longer. - The rented array from the pool. This array must be returned when it is no longer needed. - - - - Return an array to the pool. - - The array that is being returned. - - - - Provides an interface to enable a class to return line and position information. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - The current line number or 0 if no line information is available (for example, when returns false). - - - - Gets the current line position. - - The current line position or 0 if no line information is available (for example, when returns false). - - - - Instructs the how to serialize the collection. - - - - - Gets or sets a value indicating whether null items are allowed in the collection. - - true if null items are allowed in the collection; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with a flag indicating whether the array can contain null items. - - A flag indicating whether the array can contain null items. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to use the specified constructor when deserializing that object. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the id. - - The id. - - - - Gets or sets the title. - - The title. - - - - Gets or sets the description. - - The description. - - - - Gets or sets the collection's items converter. - - The collection's items converter. - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets a value that indicates whether to preserve object references. - - - true to keep object reference; otherwise, false. The default is false. - - - - - Gets or sets a value that indicates whether to preserve collection's items references. - - - true to keep collection's items object references; otherwise, false. The default is false. - - - - - Gets or sets the reference loop handling used when serializing the collection's items. - - The reference loop handling. - - - - Gets or sets the type name handling used when serializing the collection's items. - - The type name handling. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Provides methods for converting between .NET types and JSON types. - - - - - - - - Gets or sets a function that creates default . - Default settings are automatically used by serialization methods on , - and and on . - To serialize without using any default settings create a with - . - - - - - Represents JavaScript's boolean value true as a string. This field is read-only. - - - - - Represents JavaScript's boolean value false as a string. This field is read-only. - - - - - Represents JavaScript's null as a string. This field is read-only. - - - - - Represents JavaScript's undefined as a string. This field is read-only. - - - - - Represents JavaScript's positive infinity as a string. This field is read-only. - - - - - Represents JavaScript's negative infinity as a string. This field is read-only. - - - - - Represents JavaScript's NaN as a string. This field is read-only. - - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - The time zone handling when the date is converted to a string. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - The string escape handling. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Serializes the specified object to a JSON string. - - The object to serialize. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting. - - The object to serialize. - Indicates how the output should be formatted. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a collection of . - - The object to serialize. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting and a collection of . - - The object to serialize. - Indicates how the output should be formatted. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Deserializes the JSON to a .NET object. - - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to a .NET object using . - - The JSON to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The JSON to deserialize. - The of object being deserialized. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The type of the object to deserialize to. - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the given anonymous type. - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the given anonymous type using . - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The type of the object to deserialize to. - The JSON to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The type of the object to deserialize to. - The object to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The JSON to deserialize. - The type of the object to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The JSON to deserialize. - The type of the object to deserialize to. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Populates the object with values from the JSON string. - - The JSON to populate values from. - The target object to populate values onto. - - - - Populates the object with values from the JSON string using . - - The JSON to populate values from. - The target object to populate values onto. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - - - - Serializes the to a JSON string. - - The node to serialize. - A JSON string of the . - - - - Serializes the to a JSON string using formatting. - - The node to serialize. - Indicates how the output should be formatted. - A JSON string of the . - - - - Serializes the to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output should be formatted. - Omits writing the root object. - A JSON string of the . - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - and writes a Json.NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized . - - - - Serializes the to a JSON string. - - The node to convert to JSON. - A JSON string of the . - - - - Serializes the to a JSON string using formatting. - - The node to convert to JSON. - Indicates how the output should be formatted. - A JSON string of the . - - - - Serializes the to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output should be formatted. - Omits writing the root object. - A JSON string of the . - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - and writes a Json.NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized . - - - - Converts an object to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can read JSON. - - true if this can read JSON; otherwise, false. - - - - Gets a value indicating whether this can write JSON. - - true if this can write JSON; otherwise, false. - - - - Instructs the to use the specified when serializing the member or class. - - - - - Gets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - - - - - Initializes a new instance of the class. - - Type of the . - - - - Initializes a new instance of the class. - - Type of the . - Parameter list to use when constructing the . Can be null. - - - - Represents a collection of . - - - - - Instructs the how to serialize the collection. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Instructs the to deserialize properties with no matching class member into the specified collection - and write values during serialization. - - - - - Gets or sets a value that indicates whether to write extension data when serializing the object. - - - true to write extension data when serializing the object; otherwise, false. The default is true. - - - - - Gets or sets a value that indicates whether to read extension data when deserializing the object. - - - true to read extension data when deserializing the object; otherwise, false. The default is true. - - - - - Initializes a new instance of the class. - - - - - Instructs the not to serialize the public field or public read/write property value. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the member serialization. - - The member serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified member serialization. - - The member serialization. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to always serialize the member with the specified name. - - - - - Gets or sets the used when serializing the property's collection items. - - The collection's items . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the null value handling used when serializing this property. - - The null value handling. - - - - Gets or sets the default value handling used when serializing this property. - - The default value handling. - - - - Gets or sets the reference loop handling used when serializing this property. - - The reference loop handling. - - - - Gets or sets the object creation handling used when deserializing this property. - - The object creation handling. - - - - Gets or sets the type name handling used when serializing this property. - - The type name handling. - - - - Gets or sets whether this property's value is serialized as a reference. - - Whether this property's value is serialized as a reference. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets a value indicating whether this property is required. - - - A value indicating whether this property is required. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified name. - - Name of the property. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Specifies the state of the reader. - - - - - A read method has not been called. - - - - - The end of the file has been reached successfully. - - - - - Reader is at a property. - - - - - Reader is at the start of an object. - - - - - Reader is in an object. - - - - - Reader is at the start of an array. - - - - - Reader is in an array. - - - - - The method has been called. - - - - - Reader has just read a value. - - - - - Reader is at the start of a constructor. - - - - - Reader is in a constructor. - - - - - An error occurred that prevents the read operation from continuing. - - - - - The end of the file has been reached successfully. - - - - - Gets the current reader state. - - The current reader state. - - - - Gets or sets a value indicating whether the source should be closed when this reader is closed. - - - true to close the source when this reader is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether multiple pieces of JSON content can - be read from a continuous stream without erroring. - - - true to support reading multiple pieces of JSON content; otherwise false. - The default is false. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - Gets or sets how time zones are handled when reading JSON. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how custom date formatted strings are parsed when reading JSON. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets the type of the current JSON token. - - - - - Gets the text value of the current JSON token. - - - - - Gets the .NET type for the current JSON token. - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Reads the next JSON token from the source. - - true if the next token was read successfully; false if there are no more tokens to read. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Skips the children of the current token. - - - - - Sets the current token. - - The new token. - - - - Sets the current token and value. - - The new token. - The value. - - - - Sets the current token and value. - - The new token. - The value. - A flag indicating whether the position index inside an array should be updated. - - - - Sets the state based on current token type. - - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Changes the reader's state to . - If is set to true, the source is also closed. - - - - - The exception thrown when an error occurs while reading JSON text. - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Initializes a new instance of the class - with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The line number indicating where the error occurred. - The line position indicating where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Instructs the to always serialize the member, and to require that the member has a value. - - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Serializes and deserializes objects into and from the JSON format. - The enables you to control how objects are encoded into JSON. - - - - - Occurs when the errors during serialization and deserialization. - - - - - Gets or sets the used by the serializer when resolving references. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how object references are preserved by the serializer. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) is handled. - - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - - - - Gets or sets how null values are handled during serialization and deserialization. - - - - - Gets or sets how default values are handled during serialization and deserialization. - - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets a collection that will be used during serialization. - - Collection that will be used during serialization. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Indicates how JSON text output is formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled during serialization and deserialization. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. - - - true if there will be a check for additional JSON content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Creates a new instance. - The will not use default settings - from . - - - A new instance. - The will not use default settings - from . - - - - - Creates a new instance using the specified . - The will not use default settings - from . - - The settings to be applied to the . - - A new instance using the specified . - The will not use default settings - from . - - - - - Creates a new instance. - The will use default settings - from . - - - A new instance. - The will use default settings - from . - - - - - Creates a new instance using the specified . - The will use default settings - from as well as the specified . - - The settings to be applied to the . - - A new instance using the specified . - The will use default settings - from as well as the specified . - - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Deserializes the JSON structure contained by the specified . - - The that contains the JSON structure to deserialize. - The being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The type of the object to deserialize. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is Auto to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Specifies the settings on a object. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) are handled. - - Reference loop handling. - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - Missing member handling. - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how null values are handled during serialization and deserialization. - - Null value handling. - - - - Gets or sets how default values are handled during serialization and deserialization. - - The default value handling. - - - - Gets or sets a collection that will be used during serialization. - - The converters. - - - - Gets or sets how object references are preserved by the serializer. - - The preserve references handling. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - The type name handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - The contract resolver. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets the used by the serializer when resolving references. - - The reference resolver. - - - - Gets or sets a function that creates the used by the serializer when resolving references. - - A function that creates the used by the serializer when resolving references. - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the error handler called during serialization and deserialization. - - The error handler called during serialization and deserialization. - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Indicates how JSON text output is formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled during serialization and deserialization. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets a value indicating whether there will be a check for additional content after deserializing an object. - - - true if there will be a check for additional content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Represents a reader that provides fast, non-cached, forward-only access to JSON text data. - - - - - Initializes a new instance of the class with the specified . - - The containing the JSON data to read. - - - - Gets or sets the reader's character buffer pool. - - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - - The current line number or 0 if no line information is available (for example, returns false). - - - - - Gets the current line position. - - - The current line position or 0 if no line information is available (for example, returns false). - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets or sets the writer's character array pool. - - - - - Gets or sets how many s to write for each level in the hierarchy when is set to . - - - - - Gets or sets which character to use to quote attribute values. - - - - - Gets or sets which character to use for indenting when is set to . - - - - - Gets or sets a value indicating whether object names will be surrounded with quotes. - - - - - Initializes a new instance of the class using the specified . - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying . - - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the specified end token. - - The end token to write. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Specifies the type of JSON token. - - - - - This is returned by the if a read method has not been called. - - - - - An object start token. - - - - - An array start token. - - - - - A constructor start token. - - - - - An object property name. - - - - - A comment. - - - - - Raw JSON. - - - - - An integer. - - - - - A float. - - - - - A string. - - - - - A boolean. - - - - - A null token. - - - - - An undefined token. - - - - - An object end token. - - - - - An array end token. - - - - - A constructor end token. - - - - - A Date. - - - - - Byte data. - - - - - - Represents a reader that provides validation. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Sets an event handler for receiving schema validation errors. - - - - - Gets the text value of the current JSON token. - - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - - Gets the type of the current JSON token. - - - - - - Gets the .NET type for the current JSON token. - - - - - - Initializes a new instance of the class that - validates the content returned from the given . - - The to read from while validating. - - - - Gets or sets the schema. - - The schema. - - - - Gets the used to construct this . - - The specified in the constructor. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a []. - - - A [] or null if the next JSON token is null. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets or sets a value indicating whether the destination should be closed when this writer is closed. - - - true to close the destination when this writer is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. - - - true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. - - - - - Gets the top. - - The top. - - - - Gets the state of the writer. - - - - - Gets the path of the writer. - - - - - Gets or sets a value indicating how JSON text output should be formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled when writing JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written to JSON text. - - - - - Gets or sets how and values are formatted when writing JSON text. - - - - - Gets or sets the culture used when writing JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the destination and also flushes the destination. - - - - - Closes this writer. - If is set to true, the destination is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the end of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the end of an array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end constructor. - - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes the end of the current JSON object or array. - - - - - Writes the current token and its children. - - The to read the token from. - - - - Writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - - - - Writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - null can be passed to the method for tokens that don't have a value, e.g. . - - - - - Writes the token. - - The to write. - - - - Writes the specified end token. - - The end token to write. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON without changing the writer's state. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Sets the state of the . - - The being written. - The value being written. - - - - The exception thrown when an error occurs while writing JSON text. - - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Initializes a new instance of the class - with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Specifies how JSON comments are handled when loading JSON. - - - - - Ignore comments. - - - - - Load comments as a with type . - - - - - Specifies how line information is handled when loading JSON. - - - - - Ignore line information. - - - - - Load line information. - - - - - Contains the LINQ to JSON extension methods. - - - - - Returns a collection of tokens that contains the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the descendants of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, and the descendants of every token in the source collection. - - - - Returns a collection of child properties of every object in the source collection. - - An of that contains the source collection. - An of that contains the properties of every object in the source collection. - - - - Returns a collection of child values of every object in the source collection with the given key. - - An of that contains the source collection. - The token key. - An of that contains the values of every token in the source collection with the given key. - - - - Returns a collection of child values of every object in the source collection. - - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child values of every object in the source collection with the given key. - - The type to convert the values to. - An of that contains the source collection. - The token key. - An that contains the converted values of every token in the source collection with the given key. - - - - Returns a collection of converted child values of every object in the source collection. - - The type to convert the values to. - An of that contains the source collection. - An that contains the converted values of every token in the source collection. - - - - Converts the value. - - The type to convert the value to. - A cast as a of . - A converted value. - - - - Converts the value. - - The source collection type. - The type to convert the value to. - A cast as a of . - A converted value. - - - - Returns a collection of child tokens of every array in the source collection. - - The source collection type. - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child tokens of every array in the source collection. - - An of that contains the source collection. - The type to convert the values to. - The source collection type. - An that contains the converted values of every token in the source collection. - - - - Returns the input typed as . - - An of that contains the source collection. - The input typed as . - - - - Returns the input typed as . - - The source collection type. - An of that contains the source collection. - The input typed as . - - - - Represents a collection of objects. - - The type of token. - - - - Gets the of with the specified key. - - - - - - Represents a JSON array. - - - - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads an from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the at the specified index. - - - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Inserts an item to the at the specified index. - - The zero-based index at which should be inserted. - The object to insert into the . - - is not a valid index in the . - - - - - Removes the item at the specified index. - - The zero-based index of the item to remove. - - is not a valid index in the . - - - - - Returns an enumerator that iterates through the collection. - - - A of that can be used to iterate through the collection. - - - - - Adds an item to the . - - The object to add to the . - - - - Removes all items from the . - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Copies the elements of the to an array, starting at a particular array index. - - The array. - Index of the array. - - - - Gets a value indicating whether the is read-only. - - true if the is read-only; otherwise, false. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - - - Represents a JSON constructor. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets or sets the name of this constructor. - - The constructor name. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name. - - The constructor name. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a token that can contain other tokens. - - - - - Occurs when the list changes or an item in the list changes. - - - - - Occurs before an item is added to the collection. - - - - - Occurs when the items list of the collection has changed, or the collection is reset. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Get the first child token of this token. - - - A containing the first child token of the . - - - - - Get the last child token of this token. - - - A containing the last child token of the . - - - - - Returns a collection of the child tokens of this token, in document order. - - - An of containing the child tokens of this , in document order. - - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - - A containing the child values of this , in document order. - - - - - Returns a collection of the descendant tokens for this token in document order. - - An of containing the descendant tokens of the . - - - - Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. - - An of containing this token, and all the descendant tokens of the . - - - - Adds the specified content as children of this . - - The content to be added. - - - - Adds the specified content as the first children of this . - - The content to be added. - - - - Creates a that can be used to add tokens to the . - - A that is ready to have content written to it. - - - - Replaces the child nodes of this token with the specified content. - - The content. - - - - Removes the child nodes from this token. - - - - - Merge the specified content into this . - - The content to be merged. - - - - Merge the specified content into this using . - - The content to be merged. - The used to merge the content. - - - - Gets the count of child JSON tokens. - - The count of child JSON tokens. - - - - Represents a collection of objects. - - The type of token. - - - - An empty collection of objects. - - - - - Initializes a new instance of the struct. - - The enumerable. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Gets the of with the specified key. - - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Represents a JSON object. - - - - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Occurs when a property value changes. - - - - - Occurs when a property value is changing. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Gets the node type for this . - - The type. - - - - Gets an of of this object's properties. - - An of of this object's properties. - - - - Gets a the specified name. - - The property name. - A with the specified name or null. - - - - Gets a of of this object's property values. - - A of of this object's property values. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the with the specified property name. - - - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified property name. - - Name of the property. - The with the specified property name. - - - - Gets the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - One of the enumeration values that specifies how the strings will be compared. - The with the specified property name. - - - - Tries to get the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - The value. - One of the enumeration values that specifies how the strings will be compared. - true if a value was successfully retrieved; otherwise, false. - - - - Adds the specified property name. - - Name of the property. - The value. - - - - Removes the property with the specified name. - - Name of the property. - true if item was successfully removed; otherwise, false. - - - - Tries to get the with the specified property name. - - Name of the property. - The value. - true if a value was successfully retrieved; otherwise, false. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Represents a JSON property. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the property name. - - The property name. - - - - Gets or sets the property value. - - The property value. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a view of a . - - - - - Initializes a new instance of the class. - - The name. - - - - When overridden in a derived class, returns whether resetting an object changes its value. - - - true if resetting the component changes its value; otherwise, false. - - The component to test for reset capability. - - - - When overridden in a derived class, gets the current value of the property on a component. - - - The value of a property for a given component. - - The component with the property for which to retrieve the value. - - - - When overridden in a derived class, resets the value for this property of the component to the default value. - - The component with the property value that is to be reset to the default value. - - - - When overridden in a derived class, sets the value of the component to a different value. - - The component with the property value that is to be set. - The new value. - - - - When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. - - - true if the property should be persisted; otherwise, false. - - The component with the property to be examined for persistence. - - - - When overridden in a derived class, gets the type of the component this property is bound to. - - - A that represents the type of component this property is bound to. - When the or - - methods are invoked, the object specified might be an instance of this type. - - - - - When overridden in a derived class, gets a value indicating whether this property is read-only. - - - true if the property is read-only; otherwise, false. - - - - - When overridden in a derived class, gets the type of the property. - - - A that represents the type of the property. - - - - - Gets the hash code for the name of the member. - - - - The hash code for the name of the member. - - - - - Represents a raw JSON string. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class. - - The raw json. - - - - Creates an instance of with the content of the reader's current token. - - The reader. - An instance of with the content of the reader's current token. - - - - Specifies the settings used when loading JSON. - - - - - Initializes a new instance of the class. - - - - - Gets or sets how JSON comments are handled when loading JSON. - - The JSON comment handling. - - - - Gets or sets how JSON line info is handled when loading JSON. - - The JSON line info handling. - - - - Specifies the settings used when merging JSON. - - - - - Gets or sets the method used when merging JSON arrays. - - The method used when merging JSON arrays. - - - - Gets or sets how null value properties are merged. - - How null value properties are merged. - - - - Represents an abstract JSON token. - - - - - Gets a comparer that can compare two tokens for value equality. - - A that can compare two nodes for value equality. - - - - Gets or sets the parent. - - The parent. - - - - Gets the root of this . - - The root of this . - - - - Gets the node type for this . - - The type. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Compares the values of two tokens, including the values of all descendant tokens. - - The first to compare. - The second to compare. - true if the tokens are equal; otherwise false. - - - - Gets the next sibling token of this node. - - The that contains the next sibling token. - - - - Gets the previous sibling token of this node. - - The that contains the previous sibling token. - - - - Gets the path of the JSON token. - - - - - Adds the specified content immediately after this token. - - A content object that contains simple content or a collection of content objects to be added after this token. - - - - Adds the specified content immediately before this token. - - A content object that contains simple content or a collection of content objects to be added before this token. - - - - Returns a collection of the ancestor tokens of this token. - - A collection of the ancestor tokens of this token. - - - - Returns a collection of tokens that contain this token, and the ancestors of this token. - - A collection of tokens that contain this token, and the ancestors of this token. - - - - Returns a collection of the sibling tokens after this token, in document order. - - A collection of the sibling tokens after this tokens, in document order. - - - - Returns a collection of the sibling tokens before this token, in document order. - - A collection of the sibling tokens before this token, in document order. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets the with the specified key converted to the specified type. - - The type to convert the token to. - The token key. - The converted token value. - - - - Get the first child token of this token. - - A containing the first child token of the . - - - - Get the last child token of this token. - - A containing the last child token of the . - - - - Returns a collection of the child tokens of this token, in document order. - - An of containing the child tokens of this , in document order. - - - - Returns a collection of the child tokens of this token, in document order, filtered by the specified type. - - The type to filter the child tokens on. - A containing the child tokens of this , in document order. - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - A containing the child values of this , in document order. - - - - Removes this token from its parent. - - - - - Replaces this token with the specified token. - - The value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Returns the indented JSON for this token. - - - The indented JSON for this token. - - - - - Returns the JSON for this token using the given formatting and converters. - - Indicates how the output should be formatted. - A collection of s which will be used when writing the token. - The JSON for this token using the given formatting and converters. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to []. - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from [] to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Creates a for this token. - - A that can be used to read this token and its descendants. - - - - Creates a from an object. - - The object that will be used to create . - A with the value of the specified object. - - - - Creates a from an object using the specified . - - The object that will be used to create . - The that will be used when reading the object. - A with the value of the specified object. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - An positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - Creates a from a . - - A positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A , or null. - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - A . - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - An of that contains the selected elements. - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - An of that contains the selected elements. - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Creates a new instance of the . All child tokens are recursively cloned. - - A new instance of the . - - - - Adds an object to the annotation list of this . - - The annotation to add. - - - - Get the first annotation object of the specified type from this . - - The type of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets the first annotation object of the specified type from this . - - The of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets a collection of annotations of the specified type for this . - - The type of the annotations to retrieve. - An that contains the annotations for this . - - - - Gets a collection of annotations of the specified type for this . - - The of the annotations to retrieve. - An of that contains the annotations that match the specified type for this . - - - - Removes the annotations of the specified type from this . - - The type of annotations to remove. - - - - Removes the annotations of the specified type from this . - - The of annotations to remove. - - - - Compares tokens to determine whether they are equal. - - - - - Determines whether the specified objects are equal. - - The first object of type to compare. - The second object of type to compare. - - true if the specified objects are equal; otherwise, false. - - - - - Returns a hash code for the specified object. - - The for which a hash code is to be returned. - A hash code for the specified object. - The type of is a reference type and is null. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Gets the at the reader's current position. - - - - - Initializes a new instance of the class. - - The token to read from. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Gets the path of the current JSON token. - - - - - Specifies the type of token. - - - - - No token type has been set. - - - - - A JSON object. - - - - - A JSON array. - - - - - A JSON constructor. - - - - - A JSON object property. - - - - - A comment. - - - - - An integer value. - - - - - A float value. - - - - - A string value. - - - - - A boolean value. - - - - - A null value. - - - - - An undefined value. - - - - - A date value. - - - - - A raw JSON value. - - - - - A collection of bytes value. - - - - - A Guid value. - - - - - A Uri value. - - - - - A TimeSpan value. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets the at the writer's current position. - - - - - Gets the token being written. - - The token being written. - - - - Initializes a new instance of the class writing to the given . - - The container being written to. - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the underlying . - - - - - Closes this writer. - If is set to true, the JSON is auto-completed. - - - Setting to true has no additional effect, since the underlying is a type that cannot be closed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end. - - The token. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes a value. - An error will be raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Represents a value in JSON (string, integer, date, etc). - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Creates a comment with the given value. - - The value. - A comment with the given value. - - - - Creates a string with the given value. - - The value. - A string with the given value. - - - - Creates a null value. - - A null value. - - - - Creates a undefined value. - - A undefined value. - - - - Gets the node type for this . - - The type. - - - - Gets or sets the underlying token value. - - The underlying token value. - - - - Writes this token to a . - - A into which this method will write. - A collection of s which will be used when writing the token. - - - - Indicates whether the current object is equal to another object of the same type. - - - true if the current object is equal to the parameter; otherwise, false. - - An object to compare with this object. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format provider. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - The format provider. - - A that represents this instance. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. - - An object to compare with this instance. - - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: - Value - Meaning - Less than zero - This instance is less than . - Zero - This instance is equal to . - Greater than zero - This instance is greater than . - - - is not of the same type as this instance. - - - - - Specifies how JSON arrays are merged together. - - - - Concatenate arrays. - - - Union arrays, skipping items that already exist. - - - Replace all array items. - - - Merge array items together, matched by index. - - - - Specifies how null value properties are merged. - - - - - The content's null value properties will be ignored during merging. - - - - - The content's null value properties will be merged. - - - - - Specifies the member serialization options for the . - - - - - All public members are serialized by default. Members can be excluded using or . - This is the default member serialization mode. - - - - - Only members marked with or are serialized. - This member serialization mode can also be set by marking the class with . - - - - - All public and private fields are serialized. Members can be excluded using or . - This member serialization mode can also be set by marking the class with - and setting IgnoreSerializableAttribute on to false. - - - - - Specifies metadata property handling options for the . - - - - - Read metadata properties located at the start of a JSON object. - - - - - Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. - - - - - Do not try to read metadata properties. - - - - - Specifies missing member handling options for the . - - - - - Ignore a missing member and do not attempt to deserialize it. - - - - - Throw a when a missing member is encountered during deserialization. - - - - - Specifies null value handling options for the . - - - - - - - - - Include null values when serializing and deserializing objects. - - - - - Ignore null values when serializing and deserializing objects. - - - - - Specifies how object creation is handled by the . - - - - - Reuse existing objects, create new objects when needed. - - - - - Only reuse existing objects. - - - - - Always create new objects. - - - - - Specifies reference handling options for the . - Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . - - - - - - - - Do not preserve references when serializing types. - - - - - Preserve references when serializing into a JSON object structure. - - - - - Preserve references when serializing into a JSON array structure. - - - - - Preserve references when serializing. - - - - - Specifies reference loop handling options for the . - - - - - Throw a when a loop is encountered. - - - - - Ignore loop references and do not serialize. - - - - - Serialize loop references. - - - - - Indicating whether a property is required. - - - - - The property is not required. The default state. - - - - - The property must be defined in JSON but can be a null value. - - - - - The property must be defined in JSON and cannot be a null value. - - - - - The property is not required but it cannot be a null value. - - - - - - Contains the JSON schema extension methods. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - true if the specified is valid; otherwise, false. - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - When this method returns, contains any error messages generated while validating. - - true if the specified is valid; otherwise, false. - - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - The validation event handler. - - - - - An in-memory representation of a JSON Schema. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the id. - - - - - Gets or sets the title. - - - - - Gets or sets whether the object is required. - - - - - Gets or sets whether the object is read-only. - - - - - Gets or sets whether the object is visible to users. - - - - - Gets or sets whether the object is transient. - - - - - Gets or sets the description of the object. - - - - - Gets or sets the types of values allowed by the object. - - The type. - - - - Gets or sets the pattern. - - The pattern. - - - - Gets or sets the minimum length. - - The minimum length. - - - - Gets or sets the maximum length. - - The maximum length. - - - - Gets or sets a number that the value should be divisible by. - - A number that the value should be divisible by. - - - - Gets or sets the minimum. - - The minimum. - - - - Gets or sets the maximum. - - The maximum. - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). - - A flag indicating whether the value can not equal the number defined by the minimum attribute (). - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). - - A flag indicating whether the value can not equal the number defined by the maximum attribute (). - - - - Gets or sets the minimum number of items. - - The minimum number of items. - - - - Gets or sets the maximum number of items. - - The maximum number of items. - - - - Gets or sets the of items. - - The of items. - - - - Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . - - - true if items are validated using their array position; otherwise, false. - - - - - Gets or sets the of additional items. - - The of additional items. - - - - Gets or sets a value indicating whether additional items are allowed. - - - true if additional items are allowed; otherwise, false. - - - - - Gets or sets whether the array items must be unique. - - - - - Gets or sets the of properties. - - The of properties. - - - - Gets or sets the of additional properties. - - The of additional properties. - - - - Gets or sets the pattern properties. - - The pattern properties. - - - - Gets or sets a value indicating whether additional properties are allowed. - - - true if additional properties are allowed; otherwise, false. - - - - - Gets or sets the required property if this property is present. - - The required property if this property is present. - - - - Gets or sets the a collection of valid enum values allowed. - - A collection of valid enum values allowed. - - - - Gets or sets disallowed types. - - The disallowed types. - - - - Gets or sets the default value. - - The default value. - - - - Gets or sets the collection of that this schema extends. - - The collection of that this schema extends. - - - - Gets or sets the format. - - The format. - - - - Initializes a new instance of the class. - - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The object representing the JSON Schema. - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The to use when resolving schema references. - The object representing the JSON Schema. - - - - Load a from a string that contains JSON Schema. - - A that contains JSON Schema. - A populated from the string that contains JSON Schema. - - - - Load a from a string that contains JSON Schema using the specified . - - A that contains JSON Schema. - The resolver. - A populated from the string that contains JSON Schema. - - - - Writes this schema to a . - - A into which this method will write. - - - - Writes this schema to a using the specified . - - A into which this method will write. - The resolver used. - - - - Returns a that represents the current . - - - A that represents the current . - - - - - - Returns detailed information about the schema exception. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - - Generates a from a specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets how undefined schemas are handled by the serializer. - - - - - Gets or sets the contract resolver. - - The contract resolver. - - - - Generate a from the specified type. - - The type to generate a from. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - - Resolves from an id. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the loaded schemas. - - The loaded schemas. - - - - Initializes a new instance of the class. - - - - - Gets a for the specified reference. - - The id. - A for the specified reference. - - - - - The value types allowed by the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - No type specified. - - - - - String type. - - - - - Float type. - - - - - Integer type. - - - - - Boolean type. - - - - - Object type. - - - - - Array type. - - - - - Null type. - - - - - Any type. - - - - - - Specifies undefined schema Id handling options for the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Do not infer a schema Id. - - - - - Use the .NET type name as the schema Id. - - - - - Use the assembly qualified .NET type name as the schema Id. - - - - - - Returns detailed information related to the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the associated with the validation error. - - The JsonSchemaException associated with the validation error. - - - - Gets the path of the JSON location where the validation error occurred. - - The path of the JSON location where the validation error occurred. - - - - Gets the text description corresponding to the validation error. - - The text description. - - - - - Represents the callback method that will handle JSON schema validation events and the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - A camel case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Resolves member mappings for a type, camel casing property names. - - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used by to resolve a for a given . - - - - - Gets a value indicating whether members are being get and set using dynamic code generation. - This value is determined by the runtime permissions available. - - - true if using dynamic code generation; otherwise, false. - - - - - Gets or sets the default members search flags. - - The default members search flags. - - - - Gets or sets a value indicating whether compiler generated members should be serialized. - - - true if serialized compiler generated members; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. - - - true if the interface will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. - - - true if the attribute will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. - - The naming strategy used to resolve how property names and dictionary keys are serialized. - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Gets the serializable members for the type. - - The type to get serializable members for. - The serializable members for the type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates the constructor parameters. - - The constructor to create properties for. - The type's member properties. - Properties for the given . - - - - Creates a for the given . - - The matching member property. - The constructor parameter. - A created for the given . - - - - Resolves the default for the contract. - - Type of the object. - The contract's default . - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Determines which contract type is created for the given type. - - Type of the object. - A for the given type. - - - - Creates properties for the given . - - The type to create properties for. - /// The member serialization mode for the type. - Properties for the given . - - - - Creates the used by the serializer to get and set values from a member. - - The member. - The used by the serializer to get and set values from a member. - - - - Creates a for the given . - - The member's parent . - The member to create a for. - A created for the given . - - - - Resolves the name of the property. - - Name of the property. - Resolved name of the property. - - - - Resolves the name of the extension data. By default no changes are made to extension data names. - - Name of the extension data. - Resolved name of the extension data. - - - - Resolves the key of the dictionary. By default is used to resolve dictionary keys. - - Key of the dictionary. - Resolved key of the dictionary. - - - - Gets the resolved name of the property. - - Name of the property. - Name of the property. - - - - The default naming strategy. Property names and dictionary keys are unchanged. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - The default serialization binder used when resolving and loading classes from type names. - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - The type of the object the formatter creates a new instance of. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer that writes to the application's instances. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Get and set values for a using dynamic methods. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Provides information surrounding an error. - - - - - Gets the error. - - The error. - - - - Gets the original object that caused the error. - - The original object that caused the error. - - - - Gets the member that caused the error. - - The member that caused the error. - - - - Gets the path of the JSON location where the error occurred. - - The path of the JSON location where the error occurred. - - - - Gets or sets a value indicating whether this is handled. - - true if handled; otherwise, false. - - - - Provides data for the Error event. - - - - - Gets the current object the error event is being raised against. - - The current object the error event is being raised against. - - - - Gets the error context. - - The error context. - - - - Initializes a new instance of the class. - - The current object. - The error context. - - - - Get and set values for a using dynamic methods. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Provides methods to get attributes. - - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Used by to resolve a for a given . - - - - - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used to resolve references when serializing and deserializing JSON by the . - - - - - Resolves a reference to its object. - - The serialization context. - The reference to resolve. - The object that was resolved from the reference. - - - - Gets the reference for the specified object. - - The serialization context. - The object to get a reference for. - The reference to the object. - - - - Determines whether the specified object is referenced. - - The serialization context. - The object to test for a reference. - - true if the specified object is referenced; otherwise, false. - - - - - Adds a reference to the specified object. - - The serialization context. - The reference. - The object to reference. - - - - Allows users to control class loading and mandate what class to load. - - - - - When implemented, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object - The type of the object the formatter creates a new instance of. - - - - When implemented, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - The that will be used to filter the trace messages passed to the writer. - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Provides methods to get and set values. - - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Contract details for a used by the . - - - - - Gets the of the collection items. - - The of the collection items. - - - - Gets a value indicating whether the collection type is a multidimensional array. - - true if the collection type is a multidimensional array; otherwise, false. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the collection values. - - true if the creator has a parameter with the collection values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the default collection items . - - The converter. - - - - Gets or sets a value indicating whether the collection items preserve object references. - - true if collection items preserve object references; otherwise, false. - - - - Gets or sets the collection item reference loop handling. - - The reference loop handling. - - - - Gets or sets the collection item type name handling. - - The type name handling. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Handles serialization callback events. - - The object that raised the callback event. - The streaming context. - - - - Handles serialization error callback events. - - The object that raised the callback event. - The streaming context. - The error context. - - - - Sets extension data for an object during deserialization. - - The object to set extension data on. - The extension data key. - The extension data value. - - - - Gets extension data for an object during serialization. - - The object to set extension data on. - - - - Contract details for a used by the . - - - - - Gets the underlying type for the contract. - - The underlying type for the contract. - - - - Gets or sets the type created during deserialization. - - The type created during deserialization. - - - - Gets or sets whether this type contract is serialized as a reference. - - Whether this type contract is serialized as a reference. - - - - Gets or sets the default for this contract. - - The converter. - - - - Gets or sets all methods called immediately after deserialization of the object. - - The methods called immediately after deserialization of the object. - - - - Gets or sets all methods called during deserialization of the object. - - The methods called during deserialization of the object. - - - - Gets or sets all methods called after serialization of the object graph. - - The methods called after serialization of the object graph. - - - - Gets or sets all methods called before serialization of the object. - - The methods called before serialization of the object. - - - - Gets or sets all method called when an error is thrown during the serialization of the object. - - The methods called when an error is thrown during the serialization of the object. - - - - Gets or sets the default creator method used to create the object. - - The default creator method used to create the object. - - - - Gets or sets a value indicating whether the default creator is non-public. - - true if the default object creator is non-public; otherwise, false. - - - - Contract details for a used by the . - - - - - Gets or sets the dictionary key resolver. - - The dictionary key resolver. - - - - Gets the of the dictionary keys. - - The of the dictionary keys. - - - - Gets the of the dictionary values. - - The of the dictionary values. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the dictionary values. - - true if the creator has a parameter with the dictionary values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets the object's properties. - - The object's properties. - - - - Gets or sets the property name resolver. - - The property name resolver. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the object constructor. - - The object constructor. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the object member serialization. - - The member object serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Gets the object's properties. - - The object's properties. - - - - Gets a collection of instances that define the parameters used with . - - - - - Gets or sets the function used to create the object. When set this function will override . - This function is called with a collection of arguments which are defined by the collection. - - The function used to create the object. - - - - Gets or sets the extension data setter. - - - - - Gets or sets the extension data getter. - - - - - Gets or sets the extension data value type. - - - - - Gets or sets the extension data name resolver. - - The extension data name resolver. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Maps a JSON property to a .NET member or constructor parameter. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the type that declared this property. - - The type that declared this property. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets the name of the underlying member or parameter. - - The name of the underlying member or parameter. - - - - Gets the that will get and set the during serialization. - - The that will get and set the during serialization. - - - - Gets or sets the for this property. - - The for this property. - - - - Gets or sets the type of the property. - - The type of the property. - - - - Gets or sets the for the property. - If set this converter takes precedence over the contract converter for the property type. - - The converter. - - - - Gets or sets the member converter. - - The member converter. - - - - Gets or sets a value indicating whether this is ignored. - - true if ignored; otherwise, false. - - - - Gets or sets a value indicating whether this is readable. - - true if readable; otherwise, false. - - - - Gets or sets a value indicating whether this is writable. - - true if writable; otherwise, false. - - - - Gets or sets a value indicating whether this has a member attribute. - - true if has a member attribute; otherwise, false. - - - - Gets the default value. - - The default value. - - - - Gets or sets a value indicating whether this is required. - - A value indicating whether this is required. - - - - Gets or sets a value indicating whether this property preserves object references. - - - true if this instance is reference; otherwise, false. - - - - - Gets or sets the property null value handling. - - The null value handling. - - - - Gets or sets the property default value handling. - - The default value handling. - - - - Gets or sets the property reference loop handling. - - The reference loop handling. - - - - Gets or sets the property object creation handling. - - The object creation handling. - - - - Gets or sets or sets the type name handling. - - The type name handling. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets a predicate used to determine whether the property should be deserialized. - - A predicate used to determine whether the property should be deserialized. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets an action used to set whether the property has been deserialized. - - An action used to set whether the property has been deserialized. - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the converter used when serializing the property's collection items. - - The collection's items converter. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - A collection of objects. - - - - - Initializes a new instance of the class. - - The type. - - - - When implemented in a derived class, extracts the key from the specified element. - - The element from which to extract the key. - The key for the specified element. - - - - Adds a object. - - The property to add to the collection. - - - - Gets the closest matching object. - First attempts to get an exact case match of and then - a case insensitive match. - - Name of the property. - A matching property if found. - - - - Gets a property by property name. - - The name of the property to get. - Type property name string comparison. - A matching property if found. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Lookup and create an instance of the type described by the argument. - - The type to create. - Optional arguments to pass to an initializing constructor of the JsonConverter. - If null, the default constructor is used. - - - - Represents a trace writer that writes to memory. When the trace message limit is - reached then old trace messages will be removed as new messages are added. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Initializes a new instance of the class. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Returns an enumeration of the most recent trace messages. - - An enumeration of the most recent trace messages. - - - - Returns a of the most recent trace messages. - - - A of the most recent trace messages. - - - - - A base class for resolving how property names and dictionary keys are serialized. - - - - - A flag indicating whether dictionary keys should be processed. - Defaults to false. - - - - - A flag indicating whether extension data names should be processed. - Defaults to false. - - - - - A flag indicating whether explicitly specified property names, - e.g. a property name customized with a , should be processed. - Defaults to false. - - - - - Gets the serialized name for a given property name. - - The initial property name. - A flag indicating whether the property has had a name explicitly specified. - The serialized property name. - - - - Gets the serialized name for a given extension data name. - - The initial extension data name. - The serialized extension data name. - - - - Gets the serialized key for a given dictionary key. - - The initial dictionary key. - The serialized dictionary key. - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Represents a method that constructs an object. - - The object type to create. - - - - When applied to a method, specifies that the method is called when an error occurs serializing an object. - - - - - Provides methods to get attributes from a , , or . - - - - - Initializes a new instance of the class. - - The instance to get attributes for. This parameter should be a , , or . - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Get and set values for a using reflection. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - A snake case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Specifies how strings are escaped when writing JSON text. - - - - - Only control characters (e.g. newline) are escaped. - - - - - All non-ASCII and control characters (e.g. newline) are escaped. - - - - - HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. - - - - - Indicates the method that will be used during deserialization for locating and loading assemblies. - - - - - In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. - - - - - In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. - - - - - Specifies type name handling options for the . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Do not include the .NET type name when serializing types. - - - - - Include the .NET type name when serializing into a JSON object structure. - - - - - Include the .NET type name when serializing into a JSON array structure. - - - - - Always include the .NET type name when serializing. - - - - - Include the .NET type name when the type of the object being serialized is not the same as its declared type. - Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON - you must specify a root type object with - or . - - - - - Determines whether the collection is null or empty. - - The collection. - - true if the collection is null or empty; otherwise, false. - - - - - Adds the elements of the specified collection to the specified generic . - - The list to add to. - The collection of elements to add. - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert or cast the value to. - - The converted type. If conversion was unsuccessful, the initial value - is returned if assignable to the target type. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic that returns a result - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Returns a Restrictions object which includes our current restrictions merged - with a restriction limiting our type - - - - - Gets a dictionary of the names and values of an type. - - - - - - Gets a dictionary of the names and values of an Enum type. - - The enum type to get names and values for. - - - - - Gets the type of the typed collection's items. - - The type. - The type of the typed collection's items. - - - - Gets the member's underlying type. - - The member. - The underlying type of the member. - - - - Determines whether the member is an indexed property. - - The member. - - true if the member is an indexed property; otherwise, false. - - - - - Determines whether the property is an indexed property. - - The property. - - true if the property is an indexed property; otherwise, false. - - - - - Gets the member's value on the object. - - The member. - The target object. - The member's value on the object. - - - - Sets the member's value on the target object. - - The member. - The target. - The value. - - - - Determines whether the specified MemberInfo can be read. - - The MemberInfo to determine whether can be read. - /// if set to true then allow the member to be gotten non-publicly. - - true if the specified MemberInfo can be read; otherwise, false. - - - - - Determines whether the specified MemberInfo can be set. - - The MemberInfo to determine whether can be set. - if set to true then allow the member to be set non-publicly. - if set to true then allow the member to be set if read-only. - - true if the specified MemberInfo can be set; otherwise, false. - - - - - Builds a string. Unlike this class lets you reuse its internal buffer. - - - - - Determines whether the string is all white space. Empty string will return false. - - The string to test whether it is all white space. - - true if the string is all white space; otherwise, false. - - - - - Specifies the state of the . - - - - - An exception has been thrown, which has left the in an invalid state. - You may call the method to put the in the Closed state. - Any other method calls result in an being thrown. - - - - - The method has been called. - - - - - An object is being written. - - - - - An array is being written. - - - - - A constructor is being written. - - - - - A property is being written. - - - - - A write method has not been called. - - - - diff --git a/trunk/packages/Newtonsoft.Json.10.0.3/lib/net45/Newtonsoft.Json.dll b/trunk/packages/Newtonsoft.Json.10.0.3/lib/net45/Newtonsoft.Json.dll deleted file mode 100644 index 77a5d89e605cf08d4826b1ba7580a582736acd7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 653824 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

    !$vlI5l-Dd3x zMBwK2PleAr&K*{Yz9;8fg;_A80%KE(MAC&9m_WB;)lIAV;Mw?FYak~V^TP*f?L;Hbv?-Cf_ zzb*Fd_mWH9yW~-4^YknsD?5BwWzNQ3ynCe7`aqgI-|7BnpM%fU45Ky|lh(Qw@5ziz z;MDn7nq%fJm8;JZAv%E;f?A{ipvPb4TK>oIZ#a;En(*U@cf@j3p3ZNMAp_8forzREY)n8*BTE+jvQI3WwYM7Oov@n;HX*H zJR^wAJRxu`yy+@=vy!Fd?j}LQ(Ya7ksEDjWbqpTSc@C8IP!z7RkoV5DaMoNOEHHlb zmi189yH#G&+E?5qPs2_s>LI}bJ%2C$(rm8%AZYFq+)!m{js*(}(o>00;bh{~!4O4! z$mtvx64;gVTbRsc4nR8J-qu4pSYY(%jk}c1SKAME2?`b%!FxTIX7ka}WWg@MVQfE! ziXb4&5Ff$9BNqo=o*&3Xrziu%Y$XQ8VJhSA)bRd$wdI~tRi#>X0IjMI!-~W( zjjZ)Tnw0f5zMZV`tu5$uTk9Ttl17cJ&H7P|88;KRex3zGHW4g8JYCM` zCVxCq_gR-+;8g-)s5(|B!%Eg6)r#4zJ1W`jgGdvyTQ@b_f~~RYz}V?>E;sod>S!h0 z)&;zps+`@rmbA=Id3a{GUb1c2=3Lab%oi+ump%C3OW@$Ym!u01%p}TcvuBc~%Uq() z{J%}qgS&~kB^)2hp2bMpk@>Bq*g^g0vxva^Jzg=vD{&AlH~!%6EL~e#3)(T4y(ouP)e)98`zAXbpUCCZDnBAP04b*OE z_}wVTlz1k<#JV(!iDNdR@f5#Hjyc6yPCe!rEGz1jd~Nlyw~$yYtEMiilm?d$EOlov zwhfdj;UVAo*&iSFn5X^j@kdVfIHuNBa%*4y+S>BVj$EGFrt;7~5_N7x)L0ES0-c+S zZlrsH=CXlh_6#2St(KZ)e1iA}H&iMimC2>}vgyIFv9yxw1)w$-@kYK;8z?%SmJJjw z7O8A@#1V}Q7F>Fd-+%@(a;-3}HdqM?+tnC}XX8?ul3p4tUZYCX7*Czi{poMO7~1|? zc|;Ef1*M0=j2@Aq)0~fcmE}++3p1dv-b4eGIrZpDc6ie%+3XW7xKYcF^boW7obTF~ z^Xq(8RIBYrDw;>}Xr22n4LV0hmMHq*0aD#gL2!-JJ1gDVxM z9LAL;`f#(gA5L<|$1!?IPue!jRPrROwraY%v5+*g;kx0kOYvR8E=ePPbQ-*Iyyf8F zK!R8qsI7E4*+J>}P-|a4v%^CjprF8Ia9 zxn6h^8cVipEazxcIX>IVjl*)a(*!tCfcpZd=4y`?;Nb#11VEP1Or^40^9&&2_R$@+ z+C`6;-e%IqVDimMjQX+dSrWsqeHjdlE&NKg4Y_=ABz~L$cBB)_6$zlTAQ?>n>ar}z z$^`J2l*XzA@URqPbprTJim@gET$Eze3JFBVK#Xdwm_Q!c!6_vWEest_Ie|=daQYI6 zcF-J7e*)Rw!C9I>v~YAd%M!@LJ2;gDq7|0I8Au=(c5nt0h?Z;)XDER%4Rm=^Tb@9) z=yN#L1ad(KXE=d$)|0ig6gGEo(qdTKp_7)w(H)$$Al7wo(vn~Sm++Goh4l|A@LF0H zTRJ$kgrCkTgeOc~t$1h$=a2-_SrF9LC6J3dIEN+>&BR^W?~_2D+`$=3Ae~i5ZG8gK zs>OvmEP-?uJG{B$_+j)(a1J-fyrem`!Rtvcy4c&?F$%}JljwL-?rMAl2Dgq5>^+=# zj~v*$c6j2yBJuCE3rBr4@g7aQI}OWuk0jnJ6Yox&ao(#E?^TI+rxrW!T7TldI`Qu` zDCfT>@m`a7cN$X?yqNgc3JF4|B_#;u6rq?Pbec$luq;I=B?z7Nksu7D2;~H!(>M}@ zp%kGnLFlxM1R*V-T7QDjX%-1WnuoQe2|}kXCkSaapgG&sfKH=H5Yj@bAy)g}sz_}h z@$b~dgur1g5%ZGf4ebq&fk^vu`px#^`OIrQ<@$6#^G*6#{Z`u+%Gd(SJ9kBG{)J$* zjv8l8btlbm{w6t3=r~^_=b0Vni{*T1$N3UDujn{mD(5pgPR`B-tygxOoQ@4zdpb_e z#s;n1I?h+fd3(qCN;&W7IB%Bos~zVpa(=Vpd=<|6ACbep0E@@5h*?ggVu{WsLz?Tn zIWZPY*S19u7NFwIiM3!lI!8`h5ow)xtIHzpK6_8)%qlOF`p6p}-F(l@os8Uyjhw0K)FvDcbKF7WKyScKXTzIOY5H5Wb}Z$plN->Q zwh`gNj1X$Y9l2>k)r10CT5@iKyb69p5U!s5Sh#w_N)z5ELFQD^SBKkQw8O%6c;hUA zD2gX0C8`JiAfui_{_)h5$Q}C=%Q)laCQkM5n8=2;tEVd7@GQr_xgN+OdGja1@kgc; z1|C4ss*aK|tcjA0Im(-nqxQ&+&5*^=4+wC4WU4 z*%e8_s9eZ9%a-A3E2YFWVlMU&&2NRd`l{i^BUsdI*ig-FY%n?9u)dn#xGs-nb+xc@ zMFGoD00QO8C$CRonuUCzX{6)jGi!#(rVOGnh#4e zHf8jtz#7&c56R5`$DjW2v{&WlU!z>?OL|N?*QCdMV=ox7V*-8?;QC|~(@4Ge34H6H z@a(Qn0N){h$!Qv4m5Z{&_15?4y}VtIW^&Q`g*r0RaOBdt6+Hd?jsU!jtIB_pe`Cyx zcF^3HWg6?f=mKY3wUpZ~dSJU)jaqygrB;0c$+L-;Jj*}N-gx*j`3L43SW9uq*N2|C zk`Q}Dv_}#uBW+Qs<7&%9-uG|O80e)j>}YtRa;2j(mqa~0l}{p)wD2LMA-YgKn9}cM znB7S>mGU_}G3w3jgh2EpK3w>jdvfY%cE}{;=o7EPb9*s7|;wzu{k3myaid2UIq1L?nvwCTHA+5uF9~@dA1&)=~>38@>cUDV$OB?<*u1 z#j<3^3jVL-zj+;$QH{97N}3D0Bz1GYU>rwN-x6ADu0~J6Bf%O7EJx@bEe{8?16d2b zv6^>G8$_jCvQCW0lT;oixmQ;17jVc3qks20)UWuG#URKDl>ULPdK z_&2ujzQ<+J)g-BL^nmA*e~BxKOI%qr)}`>?5^9vKv&dOz0sB@i1D?wy1ge)!mJ6M_ zyQ$D&%FpH7GsJd{c(nB8?A-L%NMC1ID-Rc!W~#FqfE%1*8sH&WO<~+jBAr{v*A2~X zV2+*&S)pn~yi7087fZ~S29~gN((gCNM{|PZ>^$Sgfv_{6cB=YZJ?=IDNgXHhFnR;f z+J>pg1ff=#e5}{Hf_^D_8$Qhoyw+3Yc)J`NS>&wb<0!V~$;0Y0M6xzGc~okRHa1e4 z(G%&un)G?}=+iEiZBv}AfWRX~fEit2j|z^jT#DNLi)n+lNx)tnD3>QF{hgKv+d5zO z9Zdba_)ccR)#KQE&3ILNi<4Arb>Ldzc=p~n+oyDl#!KO3%X1B&w2bO%Yq2@w*?XK- z7o`1WlF~`tMeNU51SIZ3i7ncA|0E)pv}3pu=i=QqwZUs$t6X|HgxAg!6G?a)h0v__ z2mQel*HQ--Rre(2yt8_+)T)pA0E8Bmo%)vpl-Mgs6^p@RL^dCK5xq4!6 z$sLgfjW!;>xa39`mt2Y9k4g%~cjdNX-*SttNDz?3xu$vGGP{dpbj$3FPMO^-cyF2Q zGC)t6&Fx=iNva;zQ)1Jd5<6>AiJj0>Vn^&-V%cb31-9xyG3=9YYB3wm`zKcQQ*$wu zS$24vS8J?JvUkn)=&jVRVz_*2(5sE_51v?=9ogokgU@sj@uXHbzLIh9!R&_4T?1>^ zNPLpe8`)0Vwc&~eX5-Z~8&7_8I-!PbVyODV#3l1}^)~|=ki6(J(d-?|9s!_FPo|Ab z3^(o*4EQ#as7BW+y0t{tsHQ;Y%moFr1P7?ouB^v18N1)j3eOq>2L-Gl44}4O{e7`N zNc;SK+IC=XNq%EreusT&g%UHBAbPqOOM89e-XHLD(K7%`2flUAx%M+tEbDjOnOxS^ zI=7JWWMy5*hDrC_t+2|sYe>WYfWI{3yN*j6Zb^PKuN`3&I87Nnp}bV7RO{7pQZoMb zm7CV2xGTW*_QMTwmq*Wn#r);bvoWIQh+UCkn>Yxf=cZ1$SDuEMQ!&2Sq7b76cGpW*ikt~3-k{4EU$)l`Gm#9B|J$~+ON~4+0Ad1pCor+)V&kmpP z7F=1&K~}#-Z8vLv!H!1|vHC4aZ}`Iilv^L7m#cc=>gYPS3|CJVNuN5s=y|vq4n6ez zsAG=J-`S@r^JcD}JLrcuCIdH1+yy#k65K4&93x(s>(5445)Cus9!KkQF3uG$&J|oO zKiOmFx+Tp1V0fYl>8Xug_`f8eLzw#u+;1q>cHC@dMS~3WEps>dP#fgjJB@@k@FWO( zer_~sn`IPXz|Ee&a+(>GgRFLtHPeL@!Vp*622!mw%{`jyNnFRLkEOVL`sH&&ug|i? zry`%{cYJVYjj(q9B`?cdcHyOV%;2ciys6knr=m?E7S< zG7S%EXB?5vb)YkpbD)L zzG%a}0bA!;a|~~P(ROL>>6{w=iY6KV%}9bA?Ix0UV4oKq)aS+Wx!0Rf*e0qWWV$oB z?kY!2_svRjMifwjY$oS|%L>+h3E!*Jz(|X_f#Xdsn8@n@vrIpJsX`?*;+M%mIY^KH z$(Z^jd{mtoPpKcdg1LJ11U`f`a?F-x#xLiSdWgMvw^7tu^Z|}sN-x@vwdUX=&?^Y3 z6BbDfp-WlH=_?buzO{=UJ`vgMlVlrAuciBCj9%n9K~ip&$2IyeHF0TK98+M|bgW$* zG*6CDo**Y|M6Cnl$<45udRU&^(#ew(7v~8Q%O2i4?4^u#%IsAlkmkgzz~2@#`#d#eLv>=#Bf3oqr~J z_zmE4jzc}7$2{SUIPDlW_BY9{`p~`&+v}9@S*mF!v3OYd@LuuX|BD91AFl$0@aWJbXZ?D)WyzZ=J5_N+~Ie11WmM^sIo2cP?ZDlPGKq!qIY3ya))w1%(QhLq}9alCZLl6 zU+CCL`8m=Ni>{>X=H3IAU3&cwEPKP-`L^FH*t~qAo#4dp!?tf8B{0h)vvWY4v!dO0 zK(A;mDM{O{lU5HCuB>&cFFs>&9;Vet^*LpU{@JRJvZMV0Ma@EOWx|nVVh?n2n^QKTXv~cx z7QY(^l8T8>Phykt!sUsLC|o`<3c7=4n0EcnaxF&8T12ItL!dcYiD^to2MH^e1C1Vv zzy_Q8H(d#6$a1l&?xj&J>QR!6*VwRrzgX4lrrq$OSbO_ti&fou{q7{zZkZk4liQ1< zz48{aI*6^&Cw)z)`=b}o?G!Fvd=Lh7@j~X}ix+~_Uy?+~wPSISCJ?8%O$xF;8a+v! z-e`Zo`RRI4&j$fAu4ZvE|Lkv}2PC zuU2oM(*=I?VrDir9)_9osF&ZTpKX5>#A4{pehf48XFrbNwSJ~~&?m4WX%1%ui$2K* zRZ#LtAa?-aZo-`y?N9L;iasqIwZ)vBb^U?pe+HQ7e-;z^cgYB5{}aP&1sl?628qVJ zX5=^RAS65%hm7`u~Hs=zj|n`rnoj%-)URwYGJlQQn!?jC`W+@TrqG z-^DcAyiF8m=%Ew*7rRk+|Yz(;r|!;D>^%V51-L8L}_qRG7I0{@4$!w0{g- z{QU$I{_c?x%>ER^YhAgBKl7TAPxLcBWQP31nI5=UBG#W{EY1=uQ^k3Y;`{~viu0F3 z_h)}4Bbfa)hSz%8qBzZKMn2JR_zhPa%ERI}xtUC5H#r zL`(P(nfw>Qll=7XUL2*BAt#OWig%^$j1t5QQC{*!i0^acTm1Q3Lbtb9!hwMhq7?}**+P;Y(IwATHlFW={Bz! z`RH+GMJxYB@Fd;K@V0bE)?JK7q!>ja-dqI_n=K7s*&7ZDZ%D9t`9$<>jr!d1^(#3- zHCF8&lJcyd)0^GJJ=U*gGxvx8U%|g0SAiBsq{{iAVaA5TcvulE(D9G^VPjd?C9cQ( zj4Wm2W!6IX{m@Nro@hN^FFMR{6rUcHLw06yo81_2<40b5aGBrs=3h4%E|W@@N#*>( zGYJV|CzJ9nlk#~zJI6iST*sz2?}|}F3^nDIBsur*Bsp(MCg)Ypx(r79COF(bk&<~m zpETavo5uf_a{rel5{<)L!s6QW{GqYvN@G9fKH}-=2_&#yv_U4~Ri)31IOb7|Hu2#i znIJ>aq#O@(EVxi^f;}bp=-k^8Fx79!+C3taLDK@_Bkp>n zJ4QD~PFwz~$c9~Hw=a%NPHX=t#LE2M(z0BG2X~a=r4-B^gJCa^6@$6^VULgF6U-gY zmjl;&k_^`gd~Q;kRFUFHUO$G z(Qd{JV4!+Lb4 z*zK{pSkb4{b;y^9S`Ou2t1(*J^z0gSm?^ER#|CW?bJtn7bI5Z>82a z#;+YQWIPP%1rp|Si5i}2Yg$vdm)olM9i+$|0&_VSy6(lLRPz~~wX$^HV(IME#crS3 zsg<3SAGnu}KBJVrcX3MPq~G*S=hh#U&f)kG3AZOvwVNwjukUc{T0)oQ@IZZCXa!C- zJrXijh(Wj9!VL1iWUP4<{>?S*OEAX#A-!o+oP7+Rz2Rf|wlC#VZ|$4vP8vI@X2U&c ziw7K=qPq^3YK?tx3k(a?0sspxcN`KhN=A<_5Bj&Kh(4xfljr{q!8O z>bDcret+%>cza3G{JAG~Tz5a7%6T4dCSRyZZ{(@CSp!0ua~OhT~@`935q2?pf#o zu?6HavFr^mmp+hZ<2yDlpNOSQBbwzS-7E9=#YY45w^X1PczV99p(bH3z;;n$PBjxt z^H4Zn0q0CEOT$d zvNwDY-}Z|Io0m`YG`MS4D!~A+m5C}d45MrJO58rt<1^bnZV!`WPU>b-G*3X6hoRj) z`HSlMkW+P0YV9GroK_5{<7Rwq>pf`>CPk!Sz~Q|cmaq0Ay&1(~76@2bKelTeLxD%Zz$>|15=yZ$7ayNPx>{J4$!^CMF z({nAw}?^9NF|@59`?Y46$iH3UMc!Fuw06izdjFK)KGCbedK8)dhA;yiEIP8IR&R`cd~59q8& zg2wtnCD^UENvQHzsh$amaoS{KNq$dyAHKkq)i1ZcFq(NnL0Wm)4Q+VEpt(LAwPHfY z2um^!M7Dl9nKVPsHN)3|e04T-ic-k0tjTZxL0XJ;&sZcn7>!H_v1D|>2p_ECz5r@n-$wa^K2S^f~yTIuCHR$Nv?LyYP?E=bVFX`}GQ&Xf_ z=Qg^7eX+a9ZJj9ZQHXG8CLGE|KPC2ZcP*Xo3Pz-nxTps{de_#EBc6XAG@h{a(^5+Q zKyj9dGncnG`xb7e|FFewVWcCB85_>;>4{e;($AUA{FZ(dlW#fSegXr~Sfw=kT#ZYW^6YhHy0!A`^KeLK zH`nn8OVsE}X;1H(=3=^wWKFZwt!8r3JHYO1OuCgl+P<#57`AfJI}Nkndv zGx~P5tU9+-XVZre{6qMfI_i3++re|eLZPA$^Fh&P&SgxwyGF}bt$OxUORd-X?q0SY zk{?M)_T8Nkv*MMD8JSa_npvjFw%X>ifw;E$fKJ=g;Axe=r9oycS!9#aW^u@m zJ}T~b7zp*InsXg$I|6Z+)oYljKVR*+58#!(Go zs;6+jD;cPGly(5IC=-Jx%Xp3gKfys zue;#i`5b|d7yW_cd#&fu%Js5Hajf+XthJG-K*5zwzhd6>D@K0;vGvogXPqrxVy|qE*V&7`mh^Z%PF{zKU@U?;yu8-a1XRLXUr4>@KS*wQt^Y}V=0Aix`Y&*X z=ar?VggJ~p58zuGe@953S5Pixx<^N*SjGrRi&fh2k}Vb)MkTYFJ$ z?F7>vY!@e<^nroBdy%6I+gCDs;6Sx24;J?tuUq3sQA9(AUmCMa2`x>t*E6U(K%x}$ z1^|1*omvAg5Ypzfha~*WDV=Fc^Y-X5l43ETwvEiGe`(5+)sC)X(wqAZ zE=z-riR{B?3go93eVPo|@=cuWYbjM^X5R%-`nE5`oP9CnJ@-wrf$Vv@O8t94qi0dy z(WLk~Lgk{nAdrve@U(j0mqO-K2!e$nCqjObriyE!(7c?1VJC04VZ zr8s_w$Jo4lB6|9U1oBBYePmEbOEl3re=gJ8t`>ULp20Bd+I1MKaM4G|(#MW`!LG)e zKVcTTY3Ha^ru`h^-8bzoSK7bp(*9iW)th$hgrq6`x6=N!PTF^-X@A+`v_HF>cKPg^ z_T#cFTwGi6sp*K+1`(o={(Yb>54ad(om(dp$N_i!&9x``6#d#iQeL+%pf$GMt54;= zh(>1MB>u7a81R5Tj{&oFr#^>lUL3}N2lROgn60nrGqq)L7y};A=XqeZex%R+k6s+c zfCuz>6PPXg6pmRO<`Ud3`+R(n&%7#mk{c_I1?L)le#fUbHw<_{pNHQMbo+c7TQ|(S zDo}l^$CIJ9%13k=|Ad^aPk3k#_TzhGZ*{%7PJ}j2K~qFqj~+#Nm8i38=P9)7k+>|G z{~m;UoZnyU{DG45QxzdsIe%tmUt$&#^P!1ZcIFy0q?f)N=DryJoG_-pt+saZ*I`FQ zaoEif!j(q+OT5dCrTO?*So-F~OkwzydAH8`>D@(Ly-S`&?}S~qC@j0H3d`P_SZ5ZQ zhW^Q-&?}vAWPx|&ouY%@_){9$Ii;7b;D9u=PGZpXGB;#azR3-x9@>6a|0K2dFInAK zVngf|9+z5-SlzF!!z$kDmOT1R&)z~PtM8CnZd2mFg0AvvL{jBEdipnH{rrtO$!j?m z+I_LfyX`Fm)@2OpoXwFWlp=l^oshe2dh}!P;C?Qrc-GQk=_Vy3xLs-6d?sFDbFx2o zPBYKvhD*Z@{r$QAFvJm!s(bURSgT=t9i4&atb1T5EN^B?m*M3HG1rHH0q*z~ZrsBC zoJ^ti&?65ktl7@HGd$AA{}BG;{IB7ED*r9~L7JFuTwPepgef!ekiyz%E#`D#?cp-F zH!f}+eq81WgTdz8@o#N#_S@Sr4L}zFG$h1y3dtOqCtVN?D6*^!At>&edhfMy+NBN>on)GC)zt2!A~knO!> zS?lQz*&ovSX3K7vVGbx@^lMefY(CudxO}+1lC@WcS522v+n};Np`Y6j^@q7=1cHMI zTAC%iD!Ek=oBqXqE1ng2^>fJKTwl&gn5%@_JH?bZRa6M?kd$-TjB(-BxVa(-esz`I zax}@FZxzY(C^~B>l{A}rszuJFHb=muS}0C#N_MJ+yENIYdy;eIGbfOE1ge#+AFYDj zqBkDYmPz%*om9{0c0i?}GW}E#W`~fDt^tsBzsq?8|3gj~UL$<;Y*>$P18?C#`u~vml?UkcDX{H^BmiH^f}VMeCI@lu8)=*1cEd zWp+{)?0;GQyxZdQXWwOJF#8TOv$OwUCi!!_vt(!A=`7*w+npsh`yR76zTal{<+E?a z3}@tWd_T|eEr8>D!mIUdA32h)yjrh&!>RQ&Z}s+-N9B0ucl)sO9G&~Ih6s37nVye1 z0MG3gXhMmc@Iw}nzFkRq7|sZ=b35bG><0}&-yu~vE*Ub_zEM*_TZ!O!VaL&pV^DFB zQznbN7c-pEcTpSyxHx`i2>SNK@q3)@Kk%s&#~(Wm#o=2zP(fX3{|OJJbSBRJLsqbn3 zQyBhiCJ>^&T>;|Wa0%`d(G!M0>l>oJy@-JjvwWZ!3d5hx$(Yf%H|jiYhu9V9Op=EA zq>xp{T0iLL9g_KBX&VD{=7@)*e&Mnsbg!)TD9n+%x0Wef1}kczpbN*AWn`4ugu)N03SpV_(-e(;u=Q49%ci~m1 zK5_}pia8(khIilo-9DTH=Dg>*!J(hN4(DLKHiYIk6rqKlZd{Yx;`Z9Zv3!I}$={_r z8Tb4;cj27XR4;uGC=eOZYv@Va-&e2m@8Msz2>&^_68g?+^wA+B`ZDzPSkaz-wYl16 za%VYp*h615B@=xO6yLtnhvLQWJ}0EMcO1Ke3HSC=cuDSvY?#~Y(d^X@UJq8aOQY%g zHu1A9b>D5Q+j@33c?01v-@S!U^W1)TmN<)a>|Iw>gvsO?knv^ii4e}j?z|73LGuXT zo(CCU=G)UDEbSe9RYDH2K1sNdHWA4hZBehuL=+h?5m{fJ%|J=-GP6VYWpG;0*2D%k z0p9_7^hT^jFKi=P)V5{GQaQSs$a#6{ep~hevb1*_m~j(5jQR-5pln)_1Eu{ z)@H>e(xq=HIB3SP#7{)aaLxZj9s6}&tv35JY{{0WHzNmcfz2-A{l=em`u-rp(3%;h zu4H-g6!}WAo}Ckg>0%hJeuN*~^zdm8nxe-ZU4gvrCshFZ?D#@g@Y&|IPRYlO&8;f?H&9`>XNb&O+k$jgJ-#^IH$ z3XBUvG2IRmqMR=J9$lI2u@1XAN)cE>QN(Vy`0Ru8XF z$`E|caPFb{jfV08$BPIgJJvOKv+hG(H*j&%zkvDzmi`waSH0}mz_XwlBuxi z`b<2V=;GHA`WFx|ei#5es?oEsZ26VY%=1QhUJPvWH!bLu7gJ*f3mkVJg`+Jj?lRbQ zv|*65@HdQ~f=fFA`|jK~+pi;`96>0BU}&3T_Oqm)^9iNB;jPMplc8a3G};ilba?9W z{Yib0y3*X%e!WQXs6&U;U5-?FZ}5WFmRH)1999+~3ROLQXH{zo5rmpf#|;Ld5oErAuL`?m+kQ z;wD}R^`*{b#cZ+1YZrOS)$y$I(3*RQ`#oySn%k}=ZJIlvy!Z)ZOwn(KKFXjPg)n*| zZZuc6S&|j6RvX#`uEuY_d6;i{xZ($fbiQG;&kiAlcB!C|ZT&-Ksa;rx*F%&F!YQs< z%vH3(_Bw#b9joe!FY*dD?npFKYfd!zUNFHCr`m-RmByry*szQ5g4+7VhQ-dcx$(YX zDr)MzY`DxW#dx6uu^!v?$dfM%-B5pn*ZQaUGtDz@DWl1vZz~tKTB3WanltI2?+f3n z;k!0O_MnS*?Zr%|>=oO&&rzdoH{(C8m$*&U`cP6gHZPwD85rI4{xNbTPjBj>m-TIn zJheB|M2nxcWV-L`+4eZIzSCT&aXp7*k9u)s%C>Xd6jgzIhwH|GB7DDJW$UB4>}tj5 z;F8j1@aeJ<*+S($Y?tC&mN2y1hnyVcH&E<|~v^2RRm%I$7 zccJ3@kQbU^9A@WkjaiciMXmwZ5UOYx_ zAPcrLVLZLey<>NJAt|2bVWH(Y2MY&JO!7QASjdqU-m;6=L!i35zVNU#Wcs@EQ2oF` zEM0T(QnT_tTV$=~ci)0eBj4DG{P72myyWMqyUz`B!@JL|@At;E&Blk$t+x(H!1V!- zgO|0&%bPm9*cez0M>iHj^s0rU6McG~Qqvzh^I!L_)D+3?Vql-( z_(yygd4m07!8N4STknN(OXS@%eAf49jdaL9@h+ZjaSQiaRfcMPhu1piq%@=A2>Lfv z_oDPmZ#X{_I_nnG@!g?B*P&=QCn*y-F~78NjAP!nGqpTlXzX)4cf$TW+H`a z?NNqW11E^KGqG{xif@d!1Y#d?8J=5&Wi`jWG_X9#yyipz2&&}&e| zI4OL)a{1d-1YC^Z>)lf_J8D-j(FRlEE;gRjjZKdmuiILM0?wXJNhax8$#_ zc^^o=9&TlSgEEtWKBAJQKuRp7~+EQPp}HO$)=@iwz_jJaucrM%#={=6!bz zpvRh9N-GQSoU=WK26Q>~XBD8fZ0c;^dZJR!y85}#FK)$eQ7b;1bdSx;C%RdM$_%Q( z2~TTnwPS~JHX!AP;&Ut$eS^CgYRAUs0*qdzYVZ=zUWaux$&Ym}sm)6o*1y~cJJG9! zWp(d-(%*zno$zX&%^qEJllW~+@xZ*o&3$1pn{O4H4>C686TJpXdJTRLrf>6;v1Ln= zs`{a%ev_2UxXN!4SKA=c=G_uxhHfUfzB`T6{SfXauw=$RKA%r#()J^^%c2*-qi$Lp zrz!YD@K%+x#_zf2QcIkyiJuRyWxTXS>T1z6`008qj8U*#oP1x%ip9UkpU{-oe|W<8 z$+Sy`{>o-5AICzC8LG)<7Ah=9c9+|4BQyF6`Pl_>qA;Vc>x!P1I37>b<7az?z2V!H zZM<$!j9yDdX$`WRhc+Bq%v%S=&F>?Vv{8#{{$iwnN59@d5~K@-MAx1Xxpyogw|r`@ zmsH~k?RVm@EGf)>38q+uW@lt^EM5-rvGHL25L)we277FLV0|xw0cXDmKC*_r;k)*U zYXE4MnlbMVC2+;;$1H94sRc)W5}2!Nl3i^eKiltyq%^a9nK;-2`ii2e9TB50SKB%7 zQG`0G6}`@?skKx3{>(9O^sTFF8N*Vr2a4-b?hI9wJMWUgB5fx{s*6jWUVA9k zk3+=uTS>Zt*?T2l*zL{8sY0((=nn_Sn~_g1t+GbDAzZ)31^11J z8}HFVr|`ag4a6J@k=ySTonDSN3u@AS2Ve;8+Pta5fo7;huM$adC@kFc!_jLA%Bq#DzDsm}56~A5WZ{sFz@ht6+L$hb5B?R>&rK zA`{-_ZHG7(5eTP2kk4gnUWAe);RMAsQ5PtBAd)VCgz`H?jT>~ zLCFh_@;C!O!l654Z$>aj+45agT=|}=;KqEDvT8aT-AW78xgl?PJyo>6-Ns}!hwn&6 zV?!+=^sE6RvR*jQlOP&SM}0S(hPi~IlTBN1;lfRR+sUSb%!8meseC*by@W&()3n3e zt~LKqvZKJ;kS>DWeFcQyTd6b0GUn+%&6N7+OJHC7^N+@)tA31{3H;9S5JXZ-#3tzpDQS1wIg`3miYV!SI z`|$u>Ui!MrlR2^zf0G!y62#44gE`M_UDei3_2ssF0>FyWW)>DH+(md5?*X6c1HGSo z60>m%mC_aG-e54`5*}myMa>BhuoFu%Mq79;pJi(oO$>##ixO#Mp<_+r?@dm@A&rz8 zN2c6eG}YG$L0+xSt(fYP2oo$9Y}oC=ImV7(tqbB#ddY6e70MaRSmq9gQr%Qa3dOfK zrJj_62RvsR-fpRJzUtFw$pG~&Y>~E~0Hv$_>V{J5_o_0VqEN05>B^<6JfyZ zFlo!OU$K5jOwehf8NcYY(F0$cy^;@ooSzwmch1K$9tnhSGv0~Gp1SF~XB9=ok*wxA z@a}7PqT;JfYwzUo?uc;2tN=5ypN`jR?&%E!xG419}= z|Lo92#qo3Dt<+f0F-9z$ur>L>_y7xMTW$9N`3m8i!EoQ*V3|ncON&Gni7LH>=Qkon zNX{xQ%S@i+@_a(4uU!qRPtHA$n7nwGGDWwg-$ZZNz8+Wm20ruh)$Qn?adC+H^*tG! z7{jQaq^Z-_;fCjAejosiQfT!xzFpO}$Uv7{5Oay^rml;+&74Hb1$h?k_ z0F2BVbaXD1=V34Mjh3*=haD)zsf(4w9eVOp)M7mN)@R7T%;RJUh)oZ${Cu`<3U3 z4%Y`cZ1V6$mWR3ai!qaqiDPVDKGAKofU=W6=0=WT?14aXx+-EH#mH=AB6NL6v;;7U=bWP5|`Q#h`I2+92S!Ee2O}BU1x_CG;7cLMrNr z!i>6*qaP!|C%5$xjOLtR)Nid}7^)(&HA1bTi3&Jb~#wxSwdXzp2KJ>d}9aN>_7Aoa#J@ zI+wHh6LSy(Jwa@AhA3(kJd8Oc6UKvlqPLUZLuCh#-hqQtVD}9RGh3uTj(vXw%~clU zNk6{2{Yk3JSRwi^>ecKIts35;3iNWyoGsjbZ)|UFC7~REUHh-&2xm?w)-7xwWfBge zKf$a7D#{RMyUP#0c!*n4Q=V*@$C3{wpDj+s$7m8(k7crVfd|1}9sX))QiH z_&0km(U zA7fh<3Ul9G+^RpSLV1Pt4f2WJNy*NAZ!yltx-DNm(YwH5ei3H4w3#`My4AiD46Rvy zjCVMrZ}e`EO1beR^~9|M8s&V?t|Tg|0Ie@1d!ABOv>rZ&Icn2`7F`8W^U#HJ(;g(f z8;6dRv0)Bx*_}DwrSbEK8LeDggm#=}_D8Uii{~k_Er@h8?N7m|ay*><89tmG$<4@O zEDyUwH{^vwRm0;Q#YgFyEH%D28n+uM(`6LlH~T_FzNU6P*tsgc+l zep;FOBuZqk;L&3sCFCB)9E>&})&7jQq;Cmle*yNwvpJV&z2|;0=)Pcl3%RDDy}_v- zcRROIvKln|bH#-crq3#_s})z-LscSTKedlYx#Z_9&496fXqN8=C7+1aRa{)XmBdD9g% znVjlENE^Qf-Z4fZcdBXV52;cEy$FS$*kTe*p0yN0;IB*DAA?TUg zZzc!=fRK$thmaFO$W(&kKt@3T5W+a`5DG%b4dkM4CkO(7kc*2Bp(KR-fb9?)1pz?F z$7LaC#c>xFUW3-~=i9+WC)@uLWqzvamyOub?KDjlxgXA~*T{S=In+2b@zf-b87tda zucc_3Wq-I$w^lSH-*ZUuKd5K%GYIC-<;cGzXuJgIvjnvN#$oXuX1#>cogyrYqX1HVnh&?&!i24k*_jI)% zyI!u#)&06;9S)tFjGpo9$hYEVI%FO)if+X*#LnhWANLN22D4*P0L8&@Eb?XMYDd}5 z%3!`aSlE09VJi6w$C9P1`1J%mnk|{kkUDL5ZnIno$B#l)RC$5@7B^ka4V0n^w3=&z z;2hm`Yrlbj=LYA{(Q~~%jNgc}QiKGdkcPWZ`A(>8wkK3}pHO8Bh3wabDx{$f;R080 zY&aH2*H_7nA7g4&1^;7vZLk(HI%eUMqPvz23?O7sc>q{EmJ+_PhHz9Z)SSK|$gQs`a<(sosqmb!a!4 zjrIrIuEJ^krS_naP$oJPnkTt4ZZ?}PhOP5YP3F_%hlQ=%JC4z?RXr{B=?hz})ZtFO z+~q}{N=#=C-C>Pyr3ffUcaYzwkpJf(j{jrepL$hkzlAI)`Xw$QYQO1 z=uxiZ4l{f$jNb;HjT?o`ndHm;)rYiih4plefRKZh!5oeW5v{6ccE7%T7c+vsLe5R^ z86<*`&C&nVG(i*m7)1*qhoCjdUxl>`OsB1y*6XyyZy3$De1T--T^nG@!TrW`6~Vyu zijHf%+&z!hIKF$fE>#w>aCSPENT*4T7BdS+#!VHI2_r94-oQc9YRnbOuyH&tM(&j? zOM~ieHw+FiTsI4hY=*JARX&|Ur?xQXnIjBRV^jKRlN>kk%)5E}Yw&gRDoLuhTE0FE zSemcBd7vV)Jb*9$X z?^XLIr?6jYl2ynKOO2~<%V6>WmLB8?o%ATJUPgY@BkB;>Sr+-_OegdM&5s){T|XPK zP&%EK*TROh1T`Dn*l{?0)M-{V2W<>=?C}m}e1~zU`QVe`;Vg^itv&JlZ}s?dR9Q}@ zxO&VaDG2j>!~g2kYtR>5$i9DDcXwy@pW6~-Ud<-no>64laF)QnJo^K}!-_W+l1kbs;Vn?Np=Iy_z@c z=LLzrUIZ?wLYqTdpG-Rn5ADD@=MfE%Xja5<>()e!sEM3ptaZj2Nw)$p=)w1T@I80; zU|s8LDKfi0J(SY4SmLJa%iew%HTP=mR>0-a!jV4(F;zH(9!$`3R|CHN&1pd@oSW9=0wg zOnZol@YP;CM3EMKTga8-cS51uIGYv7yRh}40W+@RFS$%}3rmNpZlAF{kR-Sg=;)MI zL-7NlYfB*{gxvRIL@|wFI=iXm9pv5(x$!qLukrR)%bj^mZjSX+@A~``>agAe?%2G1 zB+_oE7F9VtZ~6QhK8w!B(^2x2KfE1{*2A zQ%9E0$9I!2+rUfKjJ`X-X=_HexQ&sygmjJZa-|UwL>T(Li%Hf3wyR_nm}jhQ9m#v! z>q4#$>OPcPQTm9y{z_oG2xY5FW;esVt4(d!j3|zN_(MfwE?S|;Y;Bv(oW)M?gW(gk zNm}*>g)h&?av|;J8-0!_5ms?8QJ5<7o@o_YNo*hj zf%^I@vcd!r1AZk$SP}o2uvT3feLi<;MwN7mTX*CTDse0?m*0XIDC6g69>CJiR=?P{ zY8i;&D#U)O>{_%A59V;5BBvI)*iVyP%T?_3xxDx5>}SZXMJVw5%dS;3cIM6;F*bY5 zvNxTtkSZ3f0_5WtDaHQ@N<8esJWyd)JNsF(uf)FjXX1IFxOX`t{z?`@#?U}%@AAXt zE;*(K%6pej%3XGh4fO3@UYEPiF*ne^cX=dtzhkh+ZA=b19(u?cA3bEmORjk_M`zxv zR_9k6ONQHbFyC_-nTy{C7)3qT=mhD}>N$j9{Ww`w< zEwYnrM<4GS=O1twBS?GmH}(MMHLSwXP?M(p?jxHTzCe^@=w zZT^_X!Kr}8b{_jBW}>9W0myO5lpjNhov%LN^K?9kOslm(@93JgT@ACBL}H0RHF0A% zp*TLAbEDJWIs>ik`AQ&_OzC2no24(2a=I_5Q~MzNIXTB0i1Q(eb3t(iuJ>@uso$tC zM}}E6Wsr*QLn?$-2SNHUo+%PMSqHYT4^N1#6P8{emJn2N0AO$U#gwObK(!_7B*sl9 zbP~(tOh_CLVPz}W8ZhsYo5@5`&A0CBMwePP&$v2|_$Lnjq(PyYySpH^V&MC6|ZOF>5Wy}xpGF@X4^~69BKd4%oXh)mINPd-)rW|_MgpM)n-%x zzPi2E%r)(M3|=d=8v@Kr1XM5jovm-;Ut&75rYQ@5=XFHNx$HImPPYC$WJ`ry{1F&O zr;g3hFuqHO|Ji{xvy~8a0;!U3txP9BnUbxxt|C|6 zGSpo?O?8Tdm0?=#p1)}fR$W( zxu!K~@Kpy!b90|UJ*Q`0ba>0%O?qpl^uEm637o2%A0sa=Adk38S-Ze^K(W>FZvpC~ zysD3Y<^RLln}Eq#RQvy(_w9X_q-Q2G$s{BJGT~*qJ3xkICJ_jWq9BlfAd9R5vcJ%i zATV?Ys|o=X1Q7uhMZK zsTKACV%m8U+|HiCggQQqzpc7Ti`K3$SmNR1fM21=YQnV`R2NgZ79*oOfqEkkT9|?; zr!!6?!91S{QBTWK)qsDwdH#$1S4;DT2Zt98W4Wa<=TOGX*XX!Q7qHI|uk{Mi8^>sR z9R}s5FanbPia83z~9wG+H9Pz`r-u~YmTl$Lj=(}+wT)6fUHnL>f6kuF#@W_O}+%9wG zHMXtGBxCCgulv<_0cG%)BbppE=>oRK)zQ@R1daKLet`ADWqGAV<}CN7OAkBf*ddD*e@cIB4@~{>GwTn z`@>@XANym;^gOLU1P>kX5qYcb;O;s)!XueR+<`IbA>EHN+ z*C3LN(a8;)ONleU%IDC`aaiK-LpB3j1I}ieYM@cp(9GuJ6GWj&S;pAZWWvqIB+%e8 z;j)8$Zj1*L`ts-dRv_+Fh3(>nZFFwgniFjPIx~V3!fd2~u9$u&)f1qeq+&-!sIjTm z3PL?t;H5SbsqklFkIU;F=qy`U9tAQiEwwT*#e>|^t zpWcFyn#zK18_iYQHFQQ7TBUF#Hy;~6qEha|*ih-WHXkTg4}6Z!cByI?l)d;&Hl)w;$jZr>ihGhsynine?KtzN)FWlFRKn zrHUX0n2w|frjH}6!GwO}A1Y(bSi@Uf*VLE04Qk_$TE*@D^g<5SX`!gd4>WDlO9y`I z7tPwcfNA(=%-Zs}&)N>mANsU|py&a$u+GRFu!&GRJItjebHR|fy9uuO-#i4YNC4&m zFp>bw17P@5)QJ>5yZcTWDQTHd{AUW}W3F3HoN=^%YLkb++7gLLTJ)Q1D97gNb06B^l~#9AOKlHFFY#kmcN7Ek++R|8zP9jH|E1FyU<;jS3@}+p zj>7h3!7ffluDt@&Zss(@E$XQ4>gXf>FNZrHKVhhI@p!vopPtmPq)+e;E_ZEv>iG8% zCJhBmw4Tt>eo&I7^ELWT9e>CL{Lum)RzSlK%a@V8k)wGa$D;(mJ=(i3Pa>FyfL90r z>v|Gyn{_>bFUPtH?m~s;M8(!XH4lK36M%W(S?{JK;#mzJJgYFJc-CTu;h^_rT0H9l z<5|PD;%9K#F{E)k;)TJ4K0FgsPJIpB&a^IWww=(cf(FxdLEZC8wsZH~)MlW;jtio9sXK@Ls@PUb znU`J_(f#Pugkz-A*1_<*kRDcGru(J{Eyy=Tkg!yuN4TEbK_5iY;V|B(A2jR>TD*^8 zbWLRYoy({vydrz@<49jWHrTv>!tf;Za5$-{L+f`i$12we{U*GD>rcm{aP>?(HurEw zQ>a}AQ+bsA9FLOEoKHDEZRI##nuEwExt_(K6C~1f2Oy+}i4dRa@=*jDW%re)5QW4Hlgo_jbIZi%$QW2<+ zWT1!P>M!6L)cfg_@uvtJ{|P_MSE@vSKOpc=1!l`%Zk{Hv-+eAjcApxScJkS@@;clw zc$qU8_hDnWwfap6D~C^D!qoIHa1ibN5~rhJ@Bc2(6J~|$Ar^_j=QLhHriRy9rV1vM zbDqAotS6Ln{8GunKatLUy|U*(rdXtAA^IYGo_W5Mc)px?zLI#@Xu3Gu zb8sGHiO$2u+Ij9vJV?JBCqmtW3 z0L%kmodEBn{PG0e3{I`5tt{dM81p zzvPWAJX!0w zvnTIQ6!X2QqPU)+F zfQ?zg@hAsp;!iss<;tXc2c{2w>$T6=t(y9R#&sHOZvlyCS?^_3IXw&y_=Cup#$2B? zrg>-u%}cuPgzlGk2BV(&F1yfFf+8-lB?5&F7pY~9L+1SEk80Nfi%!A=YYurDTxZia z<9{M_GZl90X?Z9=FaB?V{+cYh9Yciy2l{;i>KrP1(C-pZ*HFoWmL{NHUTMt^x}<+^ z0dqr@+#(13OAE-muKD>6xTFOv3{?sX9B_vgusBpHE_6VaK*tvJmWC>&?Hur#7O*^2 zDLddsHHTVtL(;0|0WcxJwUD_y>?!2fBRJ7^^o-W)%M^o{m&?_FHV=S}3BWu6u1Emp z0dQpkFb{yM5`cLCGzGZGxuN4*y2(Odwk($_lvr0M$;<=bngn1T0M{k}^8k2F0x%DN z*Cqh-0C-&jFwctucXNO<=3wFy1?_`u>S8<;$G*3^QYMDV6i>nRCBcNsS)a#*q}vnG ztu&k^0f9n1zC?GX+xUf76CgWTOwDFZ0xy$unbV}Oedw>cUq?i1cJlzZJ^`2qz@`LX z9soBa0P_I2F#(td!0Qu$c>ug20hkBC8xw$e0Nj)S%md)&1YjOcaHOiF62B=4Fb{xR z5`cLC+?oK)1K`aGz&sdt5z%os!6EIBZ`H#f{wuykALM7Jv7Zm3tB_Uc?MYVkaco~C z$40k-f-ZT6fOR{%$aig)&ebjC zuY{B_G3(&7k=OkV$TDnAah^@|pAg+M-k0aoUl+PC2Q&4+`V#lyY-(+n4tH1Dr3>n@ zyO=JDPwYNi;=XjaOFV11P}{ySa=4#nUGaknwT4sUvvXi3(Ep+Qj#mjY1JptHfv}(w z4Z(H5qF|6`f%gxeAL!}Lay>C}st?2i|7#dDFTaHJ=a4=-I5OL8%q|6q9tG$d#=gZ4 z!Gzkr5dVV&o!Ej=i)NjDfuQIf%yLoUt;ATdxsQ#g=hM2^w0rap^=KIHzzKBoPIcyI zf{C}{O2hM?Bpm+%9BpGMDH@mYGoH!8m@0ychH!4;c154V87+^`jPFS?nu0iZJjQo- zc6mqR_e$N*eWXiW2o2y;b~Mgj+Y0Klv?i3fro4&wP7%!LXK@B%z5L( z$Y5Z_28~Y#?QzK8_L~BWG?8))_MvJrlAYGC~-E`?I<)> z5QgqMPm`AIm4=S){Cebgn1RvTI)#YUTDJ35jsczyiw`HeY^^`6=?3?N+B4=l9~+)q z2*}5Kt610-P(YX;-;dAu0t;7&@s!KNlQMSlnJYMLI8S}vHhP-1XECU_5KLT%oG>3B zM9PjZ&Vi=h88${Kam3~|e`y#$MCs;@ytFWJAkpWI)C%h^q3k?J93Q2E6tgCit(J<} z_#^;brLfr77adFqmJNrEGlWT;MBY7akwQAK8YY%OIg5O_apP;sCLF7>`?-7vM@GY# za|KlYLDBd;$h^giB`%!{O{}mf5^ZJ}U3nLbj1<;gL3z#KdwiEKu{LPc&PpyDzZ-}S z!9(sObAW!372Bm980ihNVPPHH^*~`q_$qyE#ws4YsiZdD-O1H zwVIyC-YJ33X^XN0#m#Z)2XxrZ#~W42Ms;##y6K}`_rOa>DTn%Km@l9`7KiG!YQDBK zZ?eex!m#l`QW$r;A=UPMU0W_I)aKfAu~J*Y`ek2qI9O3qVZdcy**9VZBEF3ktPt!V(r8$OJNAVY(&zZsnj<;RBmDo7e|DmoW&VGacW=Yhzv3kSNu1H| z0(3LEf0%7g<>Vnq!B)9X*Df|wVCHmhR~n6c*Hl@i$q|6My_;=s1ALzsqQ61_AT7** zz@`oks*97tvYUHaB1Mzdv-C&T}wk=07MSZ=xcg0MCg##b54x#eo)7cDzzi<#>3 zLmjnjpxda1AnEyQRqwGJCfW+0UkJ}Vs~M~qR$V7(c}4$%wbmm#d( z@C>^VspW_fsBY8Tu%NuHal^TFub~AoF3@h;d8;-varjwm z^;gZ`UYEaLOx9(4yEIvvwMY$&up0dX;+lD|Fk~y8+|2Fc=|wF%E-59rLM7K-=EI@+(fId^s|IfWaAIlD_72k>0|yAkuimv1}f^^jZ~ zCNUQuv#ppYr<;HsbWd(GQc#&gX}hy|$4gXZ*LEb`+sR_6UR;LvZFmz=b!Cn_Pam$# zS=2+_bAQMsJ)yH{Xl%*lCaxR{&0EO;OMB9?EC2&p4 z{7}ryhWOSqHoHsQs4n)cb=^C#`cFn06&B5PA0b2T-PTUXToC`Gq&0O6PK9fcO$Owm zC;){vUo9mNmXuJ`Bjq4TW;d(_6-YW%@ z^>lf9Ipp}XT-4~tZiIrkkh2s8Qf|TnZG2>#`E>JAl}$D9%ox=u#4o0|);iw2wmP*z zn7;yxa^l$MvtaxHLT_AuqAxtHUR>jzp3?;+WAFQnsb{~cAu*h9e3%hqje^mxbBnI5 z#iC7B_6m?q9hFk@`X-i;#^{H9LnF=7)%Hw}vOz9c8J}#crNwHQ4oc!F>*_c2#zY$m zEdG?bOC`&EZNBj%%5QMH=d>LCSxuaFy7JjB5cdS27y}*Evt9T4l(dZX981^K z%F}TQBFSE^=Y5i$9GncM^mMYV>gK5*&UpH{8$bi93kFvm2CE~6M0=Q9>AhF0?@{-V zF=l}aRpy~cCNLyRyM;clpVXZr9P7*qFA|Q?PDUC@T=<^ddBQQ*tnd=y`Dl>zvI=79 zIjXiT)ERJ6)%ieg1#5K<$<2cmJoAi|DGp1Esf+s^=EOSERI;Y?kMl=t_{J|KZ;U@K zL|47>t7IILPU{J;QO%>NE|t+L;}qwGje}0|W8KGb1mb$Vwr`3S23PFnz6R4fq{cn% z^#0;`YL;l-Cfz@~rhN(5v4Fc^ydh_cdVOiwcsxM^Yddx~ zYiUfk_j*%ihfib{YVRc(fw&8%d$jBa!p4y&`>JJAo5tMwOPI`u>U%ams$g3&K68rq z*^0sbUMmLYaqSgDmh6lrCSTI0Xh_yj()*J!WoS9ZJ?cAu3HNUHRg3GS9y^Bzaw`X4x(Ir&Z}W7GsZx{i^mBfR==L#;+S=1c8ZG*s$~-L_=W@_rxw zI!La)3r8;C1jD z#|m>hu^+J70a<%1wKgBX{s6MJ2ONmj(vlsIUqy<1{20aEw37C5@4?PVqDDt3(w0-Q z>vyEAwYk}Qn`PgZC?PoD|KwffM(zrbD;p!rGpy+0k z>~O*42;3;hyzN`beVdL9=1wv!gvcmo2ma}8%;aQD-(p`#NRQ@l3mL61DpA|5R3Bty z(7Ml19Ypc*)3}Hb*W&1HbMCU}v?Fg49^HEl5>Qc3qMI?0S$Si|*GzE25Uc@J821W%nxE`mGHJ3~B4_kIMxh;B2+Jd06Zl#h0%2(^A%MQeW;Z>12?{(`Bkifb56@C9nB zwbfmxSE{te1upO7R*OFVNK7ck1dwa{8Mj5#lXUld#O+{j$G9GopAW9s-IKzkb#Kv` ze!j`(W@M0EePd(3iE;>eZkf-C(fO@(HbwarS+wESGjyv@%FNe#wkXV=l*QVF&O5Fk z{4!|9H95S;^d@%?Pxn{xft1X@ zpJ~<0S=egtU$Zv1*Y?TAx>iyv=LU|*#wX()b|L*{L*JCKxjn0?x>iJvFA01(*MCIb zDN1LJE^7;0sXJP63l_Jd0KQF1{erABl-cbY>3nEzU}TvKHMOSBR@$Pa?IfR~&&O8E zNu@NqVp=o1&r14y>K>g(&bAq*b3aKtkjv0s+CJB6+4yd`t}Wh!cbF2mz*KYC7J1m$ zJQeqO*OT_VOZlihbv)qOQyXvEN&b?+uJ|x6jn$9L656rxW9w)l&breE$5e44^mkX;COIyW#r6v6)^pqB=6q1hUEQh3H(+&>F%4bEg@YzDQ zEbHyeHmc{eh*L|2FN9X-N~dR5T*H=HhfSnvpE{Ik3+(A(9<;+$O3vH((vebcsX9m( z8>HPg?s%!U6mnCy6r(6q-ty934x+Fjoi(;0>yDAS+%Zx|kR2%6F;X?yI=E%~0R%n^ zvyGMK>X=n4{!{@xcK4X(o*-o90(Pc+c8ktjiC>aX-HY(RUF^3zea7Dt{C|c2cha#s zyU<#KV{mL_WvbA0)x$;O3;Dhr8h0BJ) zn0p>2h|BmwPn#MM&}KH~0!ul+T3gv{p_ueR?MzR-TzFpGjjc1xdJu0JZkN#I66`#g zQCncvYSlqSxBjRVJ=rEfT*xN0X7&`9+-B?db@f$qaOpTbU7`zP8X#+ z+jtXw%f)Wnc4H00#gCpOu1MhVjr4=-;M(QwMwqv}t5RIB{0ue6@*S%CkKc*L2?Eg^ zHbkr@+}Q872Cj5-wS1pcgQhKP^`fT*%=IfMyLcuJ4cy+i9H6g}p4{^Z*(ax`M)sN3-kk@`OUb=wCvVwkbFKDz zt+`fvy(x2T7!RojIHvz^IFQzDGDsODMFBGQ-m2)vA%-}Z>HrQXDZM17O^;BL|D?KQQ8I(7TZMV zrVk8_KA{#^QOP3Jbjf-zVd#(jQxuT%(@UBH3Pu6i zyg2^!l1$@Qnb(L0v<|zd(=8mAtPU&)_@hOpziB`s9?=#VgmM&W)-2NO%9N&yd z>{c1W{d^dPYcB+&320JGSc+jVC=@Y%Fa0py&3NF&6(`@*exE0PE4c;BPiLj;TE1@; z?F_9Hw$RDE1I?PRBNqF0k_$4kHYDfxw+uvRjPut_}jeDrd{a*CmrF;1WtruSaP#f^!{Wqb1(#VC4I#sB8e78!d_5HNyyRhl_+(RPDRn{RCHBmGvgXZ;%3$^y%(VM zV>i~1t3(6OgMaj#>&`QB=)EZpeVxQBWwq|M8P25I`J~!;t9ED%SgX^!N_2S%M(6-& zb##Az(p}C%HNDHz^1`gyQ-r{Gq(wzQwUbyWwGXZxjYnF0^+WO4PQ9-p3FVZ%x*!V0 z`6G_ke8C1O^EvH_WN{x**U?YXY*uYJQnF1imPK1)CNAT}s3fqCa+qU12rE}XK`Cb& zS+krppQSD)PHhgB+c`7yOJli;5C)U-itLxgvW&f9((1#MXxWxSSOoKo&Gh75>1fT~ zm?F~3XS4UeK=YR|r#PC=r#KcAbBrj_6v9UNLVo!B1pl&OBfI@=-lUX4zL~ii+F~W` z)*}+S69EsZM(<0+4%*?mtt&RB*zrhu=XKC(mrUA#oYVNupjfSM5o5zYxx{9cV3w=3J&WT%1cGMvgrYPdJ+!>thbcBT z{~}2LI4fAWiD9~I+=maed$L5--|S8J`J0rk@-cV4%eL+2ooDVo@fg79$7y=Zd=KcW zl&@XLGNG($XI4s=39H^PEZ2_%{CB=MaPO$IB6e0+Ryv%Ba=A}o#TE8OUc5f*p$?X?(Y=jy_RY=C3 zqSYaB4bhcwpjamOupp%gRj0SRzjt;|x889qS7y5vv)k2i$5xbqZA7V^1ztbmc^{`d zZN!(|C5bsb+&#AKYfB8{D76+#^0sA zYikl}tMam%n`?Hc>|mr;U*O_E1v^Y=O2ZMU#IGiyN6nK(QwSX6GA)$*CMb8T?C9n$ z6izS$gLG0r?aBm84&T2Q#!S z+wg*amv2scG99dq-MIP_d@0{A#l0W}@7=YOxknNB^DK5+wmm0{dK){h^NSm2 zE+2zH+$roEm_fbrht7zCXcrnJW@5v<#5Ae-HZWiF9GJxusLU^-Lf5eFk1u3q<9Sba zAktYJT;5k)uuAhz5svODT6y$Ie%#4`G4Wk)wM;?W`iNc}bW}1nuBmkfm4f@*5KVBs zW&qa~&#Wy)rskA2QWEDk_E|~?7iSB~z0Uu<**38&TIRZxOHCv9jcqPbXF0Lhr%+Gch$bYuJQ z!ySY9Q?RF!ZsgoW?ABBQ@e}mfOwa=(i*k+XdQVU#bS-6k%O$X#U+89r9;%?D^P`gz zS0h@Q;@oyBGeqY=3RomqVCB6f+ zPDK^VjvLC=MGnd#Rx1<5N;1jUS3jTKQ`opUX-LQBrf5ZGQk~2?&%AN1?elU@YL{~i z^T2e5S$eQ9$=NvAz*{tF4(kbVSX{}2A6Cc)jO(U@f2`m|7OW6$_N!B*hE5R9KFmo` zv=8emEm-vj#;dkt-_YRIJn7`pZU@d?Xl7bzkgrrY6ss|s+I_8jD^O3U2RPTC(qUIa zv(VtAnXKp4p71INcb=0{cSM4mG;oq&D!DpoT|M{s&XiB*+S)cnM^R!EF8b+#3jpY= zgwc_}>+E(#ouv7*3Qs^jI);ErsYkCP%#U4+Z$9@vGTFQLvT>U>qs+^;XA~N=Ex}0T zuI;DFAG-Z#*QDZXIaFGgaEs~YWZ&tpLvXui;Mggf!evhzg9EA2*veO{CDn1ueEVfCzC)XSS%fLVl3=}OstSbFeU!}aH;71Ilyo)}69Wt5kNP>VsKR!E_;ASyO&=8k3y+YXU{ZjkBz*-I@Ca_3;y~42Qbu7Ci$o zXIyIFm{8o-mZcrJ#(hcA{S+@6DmX#5o0w@@FB9YpVQFTO+Ea3-?SX5a4JTrqrI&K1 zyIw|tD944IWK}Y=?Iu5BuFCLkQ3dUfBGcn)^k?V@FIw5NJ7K9TYlo0z5s5Z||?JCe;OGMO$a&zn=a zuWI%$T>pld!-1p2!V3b2Z_%~;tmcEcd9bssWOas)z<{9QzZaA){7~- zU|u-~%`Ia*=?3P`jI(TQffs~9zE99?HH4EoKf;XeuD=;REU?3n<~txQ?iws3h3HV{ z5fZYzj&kYF*;qRQ~nr~CwU_wdaoyZC^&2JYd8=XLM&TzT))fb(DUt-j3bQ(U{ zgR~oD(Mf!5*|kGg!x+^U>n4?(1&P}qZBX3SjWF(p^;ve0Q7GA;&181X3?1dpI0F2K zHZw&*)Az)_2#WMQu|}vz@=|+T$AtUab&i)gUP$=M*$MFCXykxkfZ=O*K_|dh8wu^Q z7QOG(F=BwBX;Zt)&A@eboQ-~HSGsf`Yj_e&cP7p7cZY zgO{P-3L7E4R^6f*s*f&1Bi119BF#{J*|MBnpBbtzT;}TK&l>IC3`&1Fe^;i)gGd*s z&$-l_XOp3;t>Yl|*GW29bY7_T(+ttizew>k{>S-$7ysOh%b=!};qFt`T_*8ua<(CH z*FB3)zi}>c)}070E)iHp>l8=8SEPXJJK6*%u z>6;PWBjcZCYX^-};khw;bRb*9^f>&RsVl!;^CwqSm}YrUF%2wZb2%5kiVl@pv&Eyo zuh6&f<}%mOsKN_r@}P_fS>`VpYCJf)a=t81J zZ`7PUe{#@3JBX67XQSxyH6N zEnYYo$V-{b$!Do~eXBsgS(qZ5qq1?tBvs|GM>AHU>a7?NM^)9aKT_w$ahGsOJ6Bs+ zXxxU+D_*o0Gvr^ouKmR%%w3dr3!R0vG|1p`vN~(vqRb1~IM_X{KHN3@kLrw)N$=H~ z^!)V|$Kcfbl@ZVOEN!zrHbFLiqKuVMiot**fgT?<|wYj*?BZe`oa!x4kUJRT|r0MJe^;vSL#%evo3j>pRfn z1Rq={lW?LC*Cdqu}U!||1442_H4hT(ApO=sQO0aWvVQOq%nok;r zLQ77(a^LBX+S`?H*DLPVv0}%@j4W!AqD#j&y&zLNGqbbCNWe|)`))|ypf8BW%iKs` zGliNYj=Q~L(xvP?hK)AX$8NA)PGQH6X?;s*@~wmuh$dzKwY#v!dPEm~EMTobtbnH~C)q!6-#iuCYUw^{tUG#AaW*ZPQS{cD;pg}H?P$AP=EwUC(NMhR@!9S|YYxh1E~mIOF#Ai*rise`WR9S9Xe&0r zt@RiMa|?ZKCs>oYuqN6rAwYpu%0}nW9#{*5HI?*+s}y`sVRad}UbZ79SA1)bSwvZ0 zuQ}BfnNnfvZjotCd0uMe(@Si)|7{m#-UJCmlNBn zPg+Rae2dKjpI5S~!zw1;by|pHHrdZF|KVn9O`D#-?qp8RKT#&1>QWx<*~L@nk1e|A zH*IRLYfU0ksI(PgB#NOTV^4Ci&9H7^pZRDZX)$a!B#ep{;hC4>Y?uq8SCC_TE(?oa zmYyB&SDz2wZOuG%jP{OuK)7#!Ub1%2NV;b*?RmRrB=x{TYE3D)8ixhQ)42IpQ(6>^ z-e~-SmKHs{mUSnBxzX!sRpfJHn#)lOI}Iuxs+X1_%Xbqx+8p`5ijcY4nCu9$33!RT zKFsD`c17I$b!wNkE!~af0lhJ&x0ozMUR#VwwbWjSP`>0Dn(Si~#b)TUG(*p==OTtUcibOppW!B!C8Fq8_Ntua9IhyA$$gIuW z^*eXuC0f&lO@APG*0oyg>XvS|VnJYqMNq^{8qk*<(0-Bq~ptZclLqtLChoFYddUZKSl z7OUNxPL?3kJXwUdlX}w&6x5qZSgSYTDq4%@mKQj#!jw>x&h%Uba~w~t9n>_px~n@pOewSL&%Z_+I7Hfzk% zfo;dI%Dr$K^K>;kfOX1pFfSPyl0@+M)yYGNIAYpVUXW=WKNC0+h3;;6V`H-D!4HHbk+?^A+ov(BnOTqlv?BXZ7-8yceD>J+?54$4vm)>J5lbxKKdk;hmIQsn@(uXCkSTUb5nGEf(lTAKKZhpf*5Hg+ZU^985@@Ji>O_RK2vHaB-bhQqJLI<+Y2+mMu~v+q-Lh`WoX4TLbVO^p5Gh8}A{r zDbLA!xEV-ApE^&z71*}sNq;wK%FKHEHd5RP+>L8aa(AVjyGA$DrX{B^gcP3rvJ{3K zRxAM9E|iJ!HWe#d$!o~S4`ths$&)~;MU2MO3R-aE5S`XSU&ZDDV?pPN<;j^rPDW+H zaYi+HeJl-7#_a0J@fg3Ysbq*fK>Nv#HQ`xy-ow zX+?`3r)a})$(mcdkgA3)%mH*5^y{v<58vg^gu?hDO1)r&OW`_$kS6q-tuo@av%CI5 z>wfyYw#!ID=e6?Xp5J+`1ecAsUhb>&yw7XX`Bqx_%J;A2TiEz77da`L1XElMU#RSr-PPE3fev$B-(m{t$3R;s6LN=a4ctkqr$VovQ zRJZGO)TE%J^>th@aW`WF!|dj=pmV)fZ_q@@2{|1-M}tr|46wkhh(TxzdQ$_c9qWcv zETx|k%Vja!Wf5ZIWI0m-S=kuP#;2(uH~E5a;G=xl0M#Z%I!Tdkb;aW-)QSn?93MX^ z);Wr$cMi6&wg!XAy9UuJn0zO13hiL@(~`*r5%2Dl*M@6qr-#mD6WbEK4cquI^>HSX z>IZw!tSefey*%j1HfU*n^C?X7&i09MGd_-eDnfJ zhP9=jz#G=zkfh67u&)0ED<~EphBWgQ#gD#9_~1w(i1t=>f^~>NXJMH~Umb<|OY+e< zM5yhDX=5tUS*;cG(d&U&ye^&#?m@s;n_Y6z3MH4YXxVla>Ls2nR?+MC73|zp?RC55 zdoMx;_P7P?t090I4x+Eq=wc|tIld z-yV>0e3y^+<$K*6m^{o>pJ)*SixZ|oW`J`}8Vo-g#Dn1At?9TQH)R#x0fKlQ;OJWv zFkXPqMNjAe&N6ccgT|+;S9J*H>~S#h_>#pnewa)yfm(93tI zxZX~81X&o+j)0EbRAo<5!!S6{olb?sOQDg@{;ul0V(Ip2!6r~ClG~Hong|Wb-|F-C zk>}f#r;*;|jCX`!MTUB9n#IzJ2*qd`+e-&kH0B+RS2>`7hTuDaMUV=^A0{^*Cq;`EW- z(=0WsRi;qT>m7hy&UC^8)^tvg?eFq?=s71qI%3{9$LQtg0Dcy=y@TTiCeV3p@4)yA z6R3L>WTOym>0ajEEOB2Mhy4v=BgxIlv^p~fuE}&enbs_OW9}W)ZxMV{t{$y0&rQy%d@vaOi0HxiONrY2ccKL2pP?qrk0`dzmfuUA?xyVH zJ3ur;(V@g+``kF3Vd41Ycf&8o_mO7VkeOxo{&3SfXpF|274Hs0XNZz@Fk|=2!GyAe z=8NpDzX{O=6Dm%87#S}41?T@OFqLYM!+|Vw{(QWKk1gd=4Uhey}l;y>2kY|6cysUBw{cBqJj1R1@R$D5jI&OGt-Er8hXP%}Fh%R%{oXON%MnhUGsu)Or<~m?=f_k| z^^kce_{S4~c>tgg>SCDZXkD(2enS7%gOGEO_?LKx59Xza>7Xa3fRaZeaG6fa!)GL~ z4BUM{o7MQFvO{rHZeM6qX!41cgJ#rry7V*UpHe#7TDqO1xF=Yf3re!9NjBvra)p>S zbLvt@@)CKXmoR&Fav$HlEl8ixkA^e43Y1e{8lMSg`(^87oMti!-j#kpgw0Q@^we4| z4A4<@G0cqr%*99R`{*Egnihq{`LUdA^i!PS{ShKYe-j`VJtY9Gt7ts65q(CjMO!4g zL3mNn;&5F&-Dk)uXzz@hpVjw-ej9Jq0FsQ@lvZMT@){qacpBO|t0x^VDAnfDm| z3YjUtI>wG^E)NH{%{V%L&&OHCdX6|qKNKf4p1{%CYoQKk?Q>+ArnN8VdqTgBugpkm z3Uajed5fxFM{B`^{9!D~P5c_6_W%iL;>%J1NqFLGQUD2s;teUll>+d7jkT(>Y!R@_ z_(AjmC4=rA-cO{GnLmu=wDEpD z6+wQm=_tzK)$;7(PsRJ0R5J531x&(we=36f;N8$F@8v45#h;4z)2U?U4x-{WMHF9@QK zvWq{pf{&zulZ0u5j1n>p)_&D=8OKR8lVl%)8tZ=rBndyxRG z&^NS0%^T^L*Bkw+{-IWI7@L1FhR+nEweEi~6~p{tB&U_Zjjiz5ypeu~PxNhjLpxMn z7<<{$+=)5oUD_-E++ng~U`l^FBj#SP@IX6AF+VGHdty?opawTAJ~< zu^nv|lXOo{N|((~C}b@r$Y0Jb1nU69%k&U`t*J8qMSdz_9UiF?J?D zHfu`bTiH42UEvI6N9v5S@9%){C_7wZ{jZarVb}gk($WQcxAv)Dgt}~>Y96+wUrGSx z0r2GnU>*QpNdV>n@YMuh9svKD0L%m6YYD(S0KT38%md)Q1YjNj-$(%F0r1TPU>*SX zCjj#R_*Mci4}b>}fO!CXI{}ynz;_aWc>ruq0OkSk-2`AB0N+ah<^k|v0x%DNhZ2B! z06d%k%md(&1YjNj-%kMM0q}zaU>*QJOaSHq@Mr=s4}c#f0P_HNECHAYz~c$PJOH*N z0P_I&uLNKo08b^j3Jx9kt@|?&v{w!iX zmXD^;_-*?@bTxwj@!zEy3oC;0g&J(P>*L0t{iIpg_**g*!tu8&Mf|RGf;;qq+#;}i z-)rNj(+J%ME&T{cyg z?D!(e8^lZa)w~d9hN$B^g3;}g5^3J}acY*Is#(U5m-pxL zhRvU;S-0T%g}x^gA&g%^gkVBJ@gUhI03|`+5ZqyW0#Sxp8r#WS;`l@Y29Av}5F%-W z@aZk(s^M41DuFv^Q9a&AJ)Ctq6k*nXgbAhjOCnH(_mBdb3z$te&fD z7q`n)n#0~(DA|)c10x+J6tHgK+FMt39|xPayyQIdM{3gXia0nZ*A`cb{VN75#gc?T z)m`S4Dn-+;^l5`Wo{qt=Cc3eR)+<>A=bK7Yretl_S>yrfI@L7ta22;ZRPF)kBG+=_ zTd6eaD8u1E{ARpie1iZhdCjW2%zenxlR;6iJ%ch?H^i^PhXto&WVg))TX(OxKa9sc zhO#i|qk__y_e{mWWmeg`a=|SOuNDR~8!w;B@M3)2=~Kv2&W#?YNn#FNxLIF~xIS{0 zyr?oO5*AI*<}<+Mq|F!lTztek52yYeq0GJaV}+Bj>?01@?4#u4 zyH}4nZThSPhW8>yjG8Rdm%2xvdS=C41lD@SZzIPc_aak#3x15F8=CdOq_OlHu%?FA zANbsW*sN?LjVG!8gumWtF^VQ~?6l$J{lSE$2SoJo`LuK`C=CZL<6?Z1>i!OX7;o>D z6Wy&+EMP8s58Borw6WSxS<9nW@tu#?k&`s>Vla{MYq}URr6o(Q-E{T-PtYi(C9fa3 zWaS>`mX>sF?Vh{GveJ^r&fQX3RbkwhmR$1p-}kPnAue;FtMXOHf+ihaG$W7YQ*#4Q`XumAF2PE%fo{$Z!Jt2o~W zbj34&Jbu;whDf2SPQg3+MT?zTdeEiH>w%$sW7X~!MW9toOqo%%(@34U_uMO14O>Z7 zwN;-{(3KYS#aCYZcGd4MJ6v(I^4xjW-mh8pv|-tD{HmK*U2k56uKJKtz0^`2^}bDS zRi34fpMKja&cet;pj8(s%FY($ut%=Ba}^v8LCRxQ9q(wj1)citXTH0~KBXl`Tyy8A zh2<}+4!n2Or%CEStBzLGr;r{J^t+C4uiDM9DAlUhE9gE8y5J*+{7R|6R2=!!9snCE-+JqEnL1?&-!y(KZfc0f|21p+n= z_;@SkVgb)I;BQ*M9R)nnfPZNLw-az50~W4La1IE#Ge1G}PE9||EEh1dMBF&a$0zbL z+Sv+B!t{JyyhdTar$R2_q_86t21`Cu*eevqG1JrxKL|YDpuo2(Fv0gBL0*@JykC%4 zry(B@zP+)i$bsxIRec!%+@(bSXj6KNgojLZ_cE4%E_3xD5RnI6WUZAAJc{$Ca+LdT!Ck4AnD{?V{y7u{AU{{kzYecY$~5 zY$k~ArQ$q1k&V6xT5hMHOm)6g!1C4E0KW{dk~?`^d3F??ZPZO$%G{YOx-nN6=D<+B zCp;EyIH~@~YoB%GB>lN8bMalS{*qJdL`^?R{Wp|DcJw`&cpQSL_cz{?Aai>bw=eaw zjT&h_CK~>g$vlH5Y=ASsXPc{vk?=M_gyC6l?g1!HI)jhIZa{X5_vPh)-7yO{4vkb!NhC; z^?dXb>5RB93l>HHj{PrNB^nOiAoYGoaRkJ zvhMQ}q1yyVB%Kn21=*&G&UL;T#?xla>yN%6Jd}Hu*{3~4<1G4w6+w2K(5+%mop*ay zR9W?b0xR)@%n0?IAwJUVc6@y>9G(E7tOoZD$4zSL(jP?nPfX9RGo4-^JQOIKSkZq_ zQmjBN&leE)RJjjw0)qTuXA(ta(wg;gnD9@E?tgD|A2vIo`}~A{+wBoJK!0?fF#4|n z`|2!MRabI%jeBxxs)9+g^mxVCMu6FQ%MU<1?F3RTULAcKr#@224jF(sBRA8Wk+V5t z@oG0`7^j@8kt#ltK% z)?gC8AdhkIxf)A~K2s%f0G~Yi8iBDG`pMw03oKr~2A?DZi!Zln(d`-j2R^7|29+cZ z^G3edM`jM?AC0EWf5J&V!~ffecpU$7N3~<~xh$TOjlK!iHqJ@eyKc4`_;Qw{C>})L zBF*S!DLhM_FCO2*Ptx!b!0}#pIcD#lmv#FNA4u0=j-}G+G<(PTTKTjWWLHeL{#JNT zC_N-?Mj6%aeo|$4n_z~Tdg>eOodW^d`ZUKGwRhxbcGG>a?x$E|=;~n1M1x}U0BeqE z^AE(=Gn`hQ+sd)c!1<(4QQi1*D6Y3s9j;X3jd`6NATN}p zr;&NJzwzjGet)qny6#B(kjM6k=Y^$QNZ!T`NjgA?68z ze67O!!15S%*zV1h*d)OPGeE-?0cgnYln&Jm%+yXPj2;km_<5+`@%dE3?F$xWKJ$p< zllF9I2a*U{pKc}|a<>Xt6 z>ogoRM0@H!aN&ib5atp4pN+dC{~g}#{eN_s2n=81F7V%po4^-)c;Y7c>O1*oF3eQ7 z&kvkD%p%FpBL4L;$p1X==eyB=y&n+;d%_sK73%HA#lgY&m5@c#Sfxk`^J2?-S&)rS zGY^2i1YjNja}$7h0Q4sS^8i4K<#3n>z`O)t9su(bfO!B6CIIsQK)U8|mrvm0L%kmhXi0A0Lbnf4)Xw5ngGlLU?>5Y2f(rf zU>*QFB>?jPh!TK#03h;nxtQlBe;&N}^5`K(ItRkfIOnf&`lIjR*j<1TsNg@ui~SQw zIf&6AM|9C$h|y0+bWx0EaZKnpwogyl*t+rEl^NWry$_O%{j-|$g7~{&5wVOVlS_)TeO5IOf+?G)dD62iAsdIeZ(kp^XH(ouvQP_PQcmtT4LK_uYC{P z@K)yGq5kaM(a*>z8X!)&Iwu7-NHC#{;fIvCEBSgYU)(7yX2<(TRxNM`q8|?rS1EQO zejVW$Ep1W_)?7lOEI&Z5Fi3X-$r|ri8^)f|yr97A13EA+x?|!zk<7S}gSzA4M|n|& zD3k=#u<}JkqGjXDTR{1uf&p(3aQCboU)$jAs`emCp=?-|#-@}tWrs7JQ2&`-5%N}~ z+?()0rhC?++AI@m>YmEp%m<&hHXRFN&Z){g@s^LT$AhsHx>!ffICkQkqXb?e_*j}B zX!A(rOtd1I8*-UJaDPF#v&cudHd9^}qWqAvBE~oHO+v|1))0?50G)=}8pp=a9X2!qSAg4Y3i+Q41`-JP9F zp)UkT$OuG#SpSS~0*&q}I&zD+wuMw1=NmZ0)Lxl`HY9h&Zp$3>Uy1*JGB4P3 z7UB*}aHOY@)TGhkO6qi>xRd4H-Nn1mo56SU?h3gQLYapIBMHDf(p5N28SfTfi%y;rC6Yo_%!T8$+RaQX|X~wcCscB^s?dLPEb*K~Ej?hvQmd#^7XEICW z<%n+l9jzS0SVZCgmaiKJ<9D}m_nn{-K!;efi}0tHik29kONhp_evW1!bDI4rUW&9bkKsBv72mC=KtuACSe^I{g z24(a#nQ=vZUMuLYQ-Y9I8r`I{)F6m`)ot14YL&)hYsdSx2;;+{*4iP#gu>jH38ZRR zs8lMaxociCVeE8)?c2xxuqo17+&4&(7E!9xfzzDaL|%s4MkTGlYFT;V=6k4Aomon` zPtsv)=k3bT_%n(GF2`sot%A;)qBQ<);I&j@5?C4rVSM~lu#Wy6SGS45xnNQf9e9WF zQ6!ljrW5ioe))`H=d#HN<6|d9 zoy8@^pP+H8OGCGoE}RzC1w@Mto%p8~I%!5sLZ{FcI$N(3bnU2^Ga{CuOPX2=8XT(# zynU(%t~ana2L}$L9a5oEp$KDfteZxswzxDY!dPtU^e`z@IL>u?Z%D5qjL%cLX}x%e zg^A7H#QtD%4@>nTjKynD54+I9#MMp@lOjeKi?y8|Ce@2D7Nb7B4$_vuU@c*j2u=DD zo`)1Adq(yo-=k8TNcEOC{rMV@__NsocRJ>x_un9aj@jt%mdm z$!8-)5X;8Fr(p|Yami^4mOhD#)(%Ti@C`&a6PBT4=-esr#XdV}e)#MZ(YVEdkv=AH zefB$+QnXurkxSw0ZIQLH>#TMcjW_H*y=i(n%X4QXCZ^PsZF|1z9<&3+C{8wpHj%|->sK6 z6kDEZLysUeb(^u(1pG#;ozm2H^{CXsJfeeL5cfu#T zIw4Q5Y`#Z41~n|_HktRmAg=YX!l-R|8|dH3-pt?+=OTpg)eSw#Qj6@5<@oPf*Zz$} zLmL$m{hB!O`&3NV(6yI&T>1F@Dzk^KaF=GXg?0w)jufK}@ICeOtc{D|bll;CbG7b- z0C*6Nvg&^PBP{u0W22-=53?I*L46@>k61Euxp^!%{y25gu9h_r~WGP0jjwJX`Z$;MX^+LR>`=gI9<50reLZIcR)c0JZ(x56vR)sx{Wr_8VX*l-+7M_!I4d$crGnVFrh_^iihGnc zLHBv84c|B1_-Z23bdk&o&gN>8ixY4jf>ig?LVOkqO|BfB?!#ehXN=13MUZoCz6(y* zqG+OFpRQ=fe$nBebtveXXVfxR2KJiJ`U}`AalLMxT-1rbOe<}=P=4bz*V0z#obhf< z&>VpndNN^iH*>R1-jL)w*WBIQh$EnK6SI}T<~Dc1%}?kHVGXR*U&yj2bD01U!k03K z^~hWH7xh>^FCm}%d_H4_BW$iRH``okZuAvO)*Lne+~!`m`3ZeF{C{=$1&IDr9nJWD zsm6JE9ws?Vywucp5M8M}c`fQfp)*hzU6oMri{&{Z9cb~Hrr&NwwX*h6)^AYOaQ%nq zSteNBakx(5{bW1-B8RLmdZ|l7nr!Aw(&#UUAL87FH_GEDHCxX5A*qJjjWOPH%0T4 zFVU!oOutr^zZN>vt3}bT5uKU7C2oyiJRVO0qct9{WG18FJyUqY=-1@W1n>00mNb5z zl-+^aiePT!=hvz6%tpeV;Mh*K$c%63w-;{IG5Ppw^bs@qo575IZp>3zpT=JYyy8cp zTLOL?Ha@wJpJKxGOjEPCn{oIJzTv{?KsA@z%;g(|_b5($n=0|gnbQ9Lxzc9iwt@PU8seZtvp7hi-P#}B;6hISOM>puiS6Z-Yh>8!3X6U zO>3Ng3!EC~``Z``oBNrYZ6085u6dxjZk(?+|J>%jxcLcvxpDYEZX61b8t13C^3gbd zz~}Q4!x1(QF*n;h*j!m+D>q+k{<+PAaPt%Ta`^x5@Cy*#uUa$C57RiO>E-&Sr%tZz zzfE4@`VZSUrJeKfSrmmML+6Rk=Bw5ApgL5jB!w|gd46l|5NI3xH+^hPr?iPhPtv{S#^g!5Fosmh^*N0<0&?(=0=P6OkM)0GI$!B} z)fTvd`#MRBf6A0}o=RhFvJW_R)mU>$+~s0xIU7|n(Z>5ys#+mE`plGee#K9@>Lj*m z#xeIWg?5^s|N5A_@%7J<)(^15e6de~sdMCe3f+5$3vaw8s2% zn}_4(C-mj${C^#t3*g2Pb<(-D#_48{|9DFqHjgtm+dR?SToaS-U+2y&^J9`O*_RGl|tW^!Ub50$pLHIDZZo> z`nD7mCp&ePzqr9H?E&G=$fb8Z+chX>h! zU&?Hk;)WwSxWt2=h33y}hAm9y`|Y~$e3~k~+nmPVxL4fx8gw&`D1s?Fx|$MW=Rdj` zmq$5j9r@5#wK}V>!zWx`LRO)s0>+c8eev6fjTOyH$deiPDx5;CzL=Og1#20;~}z{uThU5r0UVXi?70x zo02N{BChZOFKq?5y7_{4OsQF?Pd0Gua@F{lq;_2@cF8KheS=cb)veEJTIfr@R80^c zkgn9cnJP65jHLY4FVD@rW%Vx44Fe@{nKuDxA5eW)INzHOBBylWlT(bn_rhHLjc(_xvG6RAvYz!o_SPH(x{!MrR@ z_h6bHG;gh=9eyZ!a5YFqw3}52oz!y3Wric->$AS}bL*D0;1X+^>Hh1VJB=tigTe8K zT19a3wZ6jNhN~lK6RRfWslvhqjBoZNf58tSljsZ zX0E^O5EirfW8z1^m0EC~N;e9HbM-tmv;9?Wy%EhyOY2d!`})rtkE(}mwS!t*w%0cX zhAGBgOeoOrqhTX{lV9=N4T-^#?Hl6)X{mC?8w0msA#L*eo#7);ooFo!JWQ-raSCw2 z0f&SBB;49j=S)9R*|N5GsqO2Y#SP2$gq1C}V`L07UCd2iY1eRM%@#lZ0V4>d z%kM^tUp{*Z$7`=ZC+RWKVdH>Xl74g61`!9XhqFf*mR;6Y%|*J;Q|l}QBeRAJM(rpU zNKU}ht34DNBg$q_I)`7C7~%WNxJ}%*;ims#95eHQ%Lv!@{A(~I;iDH5U_yhg5<^G= z1MDWK1xp>Hml2jO!RR@P{449RN;Zj(V!Gm2vK^y`Oii#7fP2*2%wia;Eb9rav^keH z*D(qoJ~^|k6w{@(j_&16kXEw1B^&(_QLzUSFgg{|m?`Buh-d5l zOo3M`@bsBeR?kk=r?*fkjK6@4dyAD~Qn+<8r-8+Zzp0&2QLmQ^m7u3^%=H8J0;{62c<;zJ+}gOjs^0W2qFrC zg8Tk_QBj`@0YP!!Q4t~hzTb1|_PyORS^VdhPkL_EsqNIMQ&p! z`S#cG;f52vjyGM2*(Dus2IQszT%r`b73s#Y*6c9nE?$A|$z`t$rqik(rcrhf)YAJ1 z*onSD`Zl(5q;KP8p}vxeXWGH*p8$Du_&vkIy7^%cRI=B>xVQ#=U)35bn!!?7mCR@IgiO%a9$+kS!{z4PcB7 z8bw9dq58q^GHkQ;Gh`UiLbu12*T1p#BLwqGnWFhW(0CWs$>sypU94XOM5^>jEFq7q zJvhv41HMjh8TcdP9_pY19CIL`@*&K`HvGnTlYlKVKxcVoTHY^|;xVq9!NFL4J^lD` zh^i0fa2SAXe^Ms`OAPxOKL#N%&<%n4I?F@xtXw{J^%Dd`j{%pAPSR=~(~j4vBNDUElBBW)gxr>8GG=X&o-0!k3Rh zZTuM=o3EnT6j+d2HUDu&xl^N5vm3WDLPPclB$e&IgteKh))aiCMztl>zYly@I>#Po zmROkBx6$E0!8{9mZ-WJMVX3Zw`kc~gKhc3KpG43m;={UzI*%v7m()#Ofps4DATE=y zGkLjulaqmb{ilKaB;IHioyR(S-3j_s=h1=Ou?Inb|4Y_V_8@+VmQx)lb(2q;a@I>8 z_9R}FL|)G1xP1Me1Fgx1xMxn*@pUKY)BG*Xp8)@9;tz%5sTd%%9yVGmk@z|CwuN$%o^K5J~1a^H=}?-$H(iu_#Lwft<$A?*ybLXNngHQ{M(Jjso} za$^eDeS(UH%&>y95LB68KY<;N6TSva70rPc*IrzU|1w@*>Zy5EPj>9x2=e5r9=y

    >do#f&8+nLD*yMFk4n}fPAh6;4D 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

    8M2Ko&KjzxD{O-~YDl}X44Fy7n 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°QEsh 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 - - - Newtonsoft.Json - - - -

  2. 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 KyVSlj9QZ#-gk~lH diff --git a/trunk/packages/Newtonsoft.Json.10.0.3/lib/net45/Newtonsoft.Json.xml b/trunk/packages/Newtonsoft.Json.10.0.3/lib/net45/Newtonsoft.Json.xml deleted file mode 100644 index b386458..0000000 --- a/trunk/packages/Newtonsoft.Json.10.0.3/lib/net45/Newtonsoft.Json.xml +++ /dev/null @@ -1,10760 +0,0 @@ - - - - Newtonsoft.Json - - - - - Represents a BSON Oid (object id). - - - - - Gets or sets the value of the Oid. - - The value of the Oid. - - - - Initializes a new instance of the class. - - The Oid value. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. - - - - - Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. - - - true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. - - - - - Gets or sets a value indicating whether the root object will be read as a JSON array. - - - true if the root object will be read as a JSON array; otherwise, false. - - - - - Gets or sets the used when reading values from BSON. - - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. - - - - - Gets or sets the used when writing values to BSON. - When set to no conversion will occur. - - The used when writing values to BSON. - - - - Initializes a new instance of the class. - - The to write to. - - - - Initializes a new instance of the class. - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. - - - - - Writes the end. - - The token. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes the beginning of a JSON array. - - - - - Writes the beginning of a JSON object. - - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value that represents a BSON object id. - - The Object ID value to write. - - - - Writes a BSON regex. - - The regex pattern. - The regex options. - - - - Specifies how constructors are used when initializing objects during deserialization by the . - - - - - First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. - - - - - Json.NET will use a non-public default constructor before falling back to a parameterized constructor. - - - - - Converts a binary value to and from a base 64 string value. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Creates a custom object. - - The object type to convert. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Creates an object which will then be populated by the serializer. - - Type of the object. - The created object. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Provides a base class for converting a to and from JSON. - - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a F# discriminated union type to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an Entity Framework to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). - - - - - Gets or sets the date time styles used when converting a date to and from JSON. - - The date time styles used when converting a date to and from JSON. - - - - Gets or sets the date time format used when converting a date to and from JSON. - - The date time format used when converting a date to and from JSON. - - - - Gets or sets the culture used when converting a date to and from JSON. - - The culture used when converting a date to and from JSON. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from its name string value. - - - - - Gets or sets a value indicating whether the written enum text should be camel case. - - true if the written enum text will be camel case; otherwise, false. - - - - Gets or sets a value indicating whether integer values are allowed when deserializing. - - true if integers are allowed when deserializing; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - true if the written enum text will be camel case; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from a string (e.g. "1.2.3.4"). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts XML to and from JSON. - - - - - Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. - - The name of the deserialized root element. - - - - Gets or sets a flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - true if the array attribute is written to the XML; otherwise, false. - - - - Gets or sets a value indicating whether to write the root JSON object. - - true if the JSON root object is omitted; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The calling serializer. - The value. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Checks if the is a namespace attribute. - - Attribute name to test. - The attribute name prefix if it has one, otherwise an empty string. - true if attribute name is for a namespace attribute, otherwise false. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Specifies how dates are formatted when writing JSON text. - - - - - Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". - - - - - Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". - - - - - Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. - - - - - Date formatted strings are not parsed to a date type and are read as strings. - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Specifies how to treat the time value when converting between string and . - - - - - Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. - - - - - Treat as a UTC. If the object represents a local time, it is converted to a UTC. - - - - - Treat as a local time if a is being converted to a string. - If a string is being converted to , convert to a local time if a time zone is specified. - - - - - Time zone information should be preserved when converting. - - - - - Specifies default value handling options for the . - - - - - - - - - Include members where the member value is the same as the member's default value when serializing objects. - Included members are written to JSON. Has no effect when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - so that it is not written to JSON. - This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, - decimals and floating point numbers; and false for booleans). The default value ignored can be changed by - placing the on the property. - - - - - Members with a default value but no JSON will be set to their default value when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - and set members to their default value when deserializing. - - - - - Specifies float format handling options when writing special floating point numbers, e.g. , - and with . - - - - - Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". - - - - - Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. - Note that this will produce non-valid JSON. - - - - - Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. - - - - - Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Floating point numbers are parsed to . - - - - - Floating point numbers are parsed to . - - - - - Specifies formatting options for the . - - - - - No special formatting is applied. This is the default. - - - - - Causes child objects to be indented according to the and settings. - - - - - Provides an interface for using pooled arrays. - - The array type content. - - - - Rent an array from the pool. This array must be returned when it is no longer needed. - - The minimum required length of the array. The returned array may be longer. - The rented array from the pool. This array must be returned when it is no longer needed. - - - - Return an array to the pool. - - The array that is being returned. - - - - Provides an interface to enable a class to return line and position information. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - The current line number or 0 if no line information is available (for example, when returns false). - - - - Gets the current line position. - - The current line position or 0 if no line information is available (for example, when returns false). - - - - Instructs the how to serialize the collection. - - - - - Gets or sets a value indicating whether null items are allowed in the collection. - - true if null items are allowed in the collection; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with a flag indicating whether the array can contain null items. - - A flag indicating whether the array can contain null items. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to use the specified constructor when deserializing that object. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the id. - - The id. - - - - Gets or sets the title. - - The title. - - - - Gets or sets the description. - - The description. - - - - Gets or sets the collection's items converter. - - The collection's items converter. - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets a value that indicates whether to preserve object references. - - - true to keep object reference; otherwise, false. The default is false. - - - - - Gets or sets a value that indicates whether to preserve collection's items references. - - - true to keep collection's items object references; otherwise, false. The default is false. - - - - - Gets or sets the reference loop handling used when serializing the collection's items. - - The reference loop handling. - - - - Gets or sets the type name handling used when serializing the collection's items. - - The type name handling. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Provides methods for converting between .NET types and JSON types. - - - - - - - - Gets or sets a function that creates default . - Default settings are automatically used by serialization methods on , - and and on . - To serialize without using any default settings create a with - . - - - - - Represents JavaScript's boolean value true as a string. This field is read-only. - - - - - Represents JavaScript's boolean value false as a string. This field is read-only. - - - - - Represents JavaScript's null as a string. This field is read-only. - - - - - Represents JavaScript's undefined as a string. This field is read-only. - - - - - Represents JavaScript's positive infinity as a string. This field is read-only. - - - - - Represents JavaScript's negative infinity as a string. This field is read-only. - - - - - Represents JavaScript's NaN as a string. This field is read-only. - - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - The time zone handling when the date is converted to a string. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - The string escape handling. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Serializes the specified object to a JSON string. - - The object to serialize. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting. - - The object to serialize. - Indicates how the output should be formatted. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a collection of . - - The object to serialize. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting and a collection of . - - The object to serialize. - Indicates how the output should be formatted. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Deserializes the JSON to a .NET object. - - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to a .NET object using . - - The JSON to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The JSON to deserialize. - The of object being deserialized. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The type of the object to deserialize to. - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the given anonymous type. - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the given anonymous type using . - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The type of the object to deserialize to. - The JSON to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The type of the object to deserialize to. - The object to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The JSON to deserialize. - The type of the object to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The JSON to deserialize. - The type of the object to deserialize to. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Populates the object with values from the JSON string. - - The JSON to populate values from. - The target object to populate values onto. - - - - Populates the object with values from the JSON string using . - - The JSON to populate values from. - The target object to populate values onto. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - - - - Serializes the to a JSON string. - - The node to serialize. - A JSON string of the . - - - - Serializes the to a JSON string using formatting. - - The node to serialize. - Indicates how the output should be formatted. - A JSON string of the . - - - - Serializes the to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output should be formatted. - Omits writing the root object. - A JSON string of the . - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - and writes a Json.NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized . - - - - Serializes the to a JSON string. - - The node to convert to JSON. - A JSON string of the . - - - - Serializes the to a JSON string using formatting. - - The node to convert to JSON. - Indicates how the output should be formatted. - A JSON string of the . - - - - Serializes the to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output should be formatted. - Omits writing the root object. - A JSON string of the . - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - and writes a Json.NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized . - - - - Converts an object to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can read JSON. - - true if this can read JSON; otherwise, false. - - - - Gets a value indicating whether this can write JSON. - - true if this can write JSON; otherwise, false. - - - - Instructs the to use the specified when serializing the member or class. - - - - - Gets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - - - - - Initializes a new instance of the class. - - Type of the . - - - - Initializes a new instance of the class. - - Type of the . - Parameter list to use when constructing the . Can be null. - - - - Represents a collection of . - - - - - Instructs the how to serialize the collection. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Instructs the to deserialize properties with no matching class member into the specified collection - and write values during serialization. - - - - - Gets or sets a value that indicates whether to write extension data when serializing the object. - - - true to write extension data when serializing the object; otherwise, false. The default is true. - - - - - Gets or sets a value that indicates whether to read extension data when deserializing the object. - - - true to read extension data when deserializing the object; otherwise, false. The default is true. - - - - - Initializes a new instance of the class. - - - - - Instructs the not to serialize the public field or public read/write property value. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the member serialization. - - The member serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified member serialization. - - The member serialization. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to always serialize the member with the specified name. - - - - - Gets or sets the used when serializing the property's collection items. - - The collection's items . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the null value handling used when serializing this property. - - The null value handling. - - - - Gets or sets the default value handling used when serializing this property. - - The default value handling. - - - - Gets or sets the reference loop handling used when serializing this property. - - The reference loop handling. - - - - Gets or sets the object creation handling used when deserializing this property. - - The object creation handling. - - - - Gets or sets the type name handling used when serializing this property. - - The type name handling. - - - - Gets or sets whether this property's value is serialized as a reference. - - Whether this property's value is serialized as a reference. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets a value indicating whether this property is required. - - - A value indicating whether this property is required. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified name. - - Name of the property. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Asynchronously reads the next JSON token from the source. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns true if the next token was read successfully; false if there are no more tokens to read. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously skips the children of the current token. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a []. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the []. This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Specifies the state of the reader. - - - - - A read method has not been called. - - - - - The end of the file has been reached successfully. - - - - - Reader is at a property. - - - - - Reader is at the start of an object. - - - - - Reader is in an object. - - - - - Reader is at the start of an array. - - - - - Reader is in an array. - - - - - The method has been called. - - - - - Reader has just read a value. - - - - - Reader is at the start of a constructor. - - - - - Reader is in a constructor. - - - - - An error occurred that prevents the read operation from continuing. - - - - - The end of the file has been reached successfully. - - - - - Gets the current reader state. - - The current reader state. - - - - Gets or sets a value indicating whether the source should be closed when this reader is closed. - - - true to close the source when this reader is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether multiple pieces of JSON content can - be read from a continuous stream without erroring. - - - true to support reading multiple pieces of JSON content; otherwise false. - The default is false. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - Gets or sets how time zones are handled when reading JSON. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how custom date formatted strings are parsed when reading JSON. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets the type of the current JSON token. - - - - - Gets the text value of the current JSON token. - - - - - Gets the .NET type for the current JSON token. - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Reads the next JSON token from the source. - - true if the next token was read successfully; false if there are no more tokens to read. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Skips the children of the current token. - - - - - Sets the current token. - - The new token. - - - - Sets the current token and value. - - The new token. - The value. - - - - Sets the current token and value. - - The new token. - The value. - A flag indicating whether the position index inside an array should be updated. - - - - Sets the state based on current token type. - - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Changes the reader's state to . - If is set to true, the source is also closed. - - - - - The exception thrown when an error occurs while reading JSON text. - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Initializes a new instance of the class - with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The line number indicating where the error occurred. - The line position indicating where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Instructs the to always serialize the member, and to require that the member has a value. - - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Serializes and deserializes objects into and from the JSON format. - The enables you to control how objects are encoded into JSON. - - - - - Occurs when the errors during serialization and deserialization. - - - - - Gets or sets the used by the serializer when resolving references. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how object references are preserved by the serializer. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) is handled. - - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - - - - Gets or sets how null values are handled during serialization and deserialization. - - - - - Gets or sets how default values are handled during serialization and deserialization. - - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets a collection that will be used during serialization. - - Collection that will be used during serialization. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Indicates how JSON text output is formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled during serialization and deserialization. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. - - - true if there will be a check for additional JSON content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Creates a new instance. - The will not use default settings - from . - - - A new instance. - The will not use default settings - from . - - - - - Creates a new instance using the specified . - The will not use default settings - from . - - The settings to be applied to the . - - A new instance using the specified . - The will not use default settings - from . - - - - - Creates a new instance. - The will use default settings - from . - - - A new instance. - The will use default settings - from . - - - - - Creates a new instance using the specified . - The will use default settings - from as well as the specified . - - The settings to be applied to the . - - A new instance using the specified . - The will use default settings - from as well as the specified . - - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Deserializes the JSON structure contained by the specified . - - The that contains the JSON structure to deserialize. - The being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The type of the object to deserialize. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is Auto to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Specifies the settings on a object. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) are handled. - - Reference loop handling. - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - Missing member handling. - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how null values are handled during serialization and deserialization. - - Null value handling. - - - - Gets or sets how default values are handled during serialization and deserialization. - - The default value handling. - - - - Gets or sets a collection that will be used during serialization. - - The converters. - - - - Gets or sets how object references are preserved by the serializer. - - The preserve references handling. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - The type name handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - The contract resolver. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets the used by the serializer when resolving references. - - The reference resolver. - - - - Gets or sets a function that creates the used by the serializer when resolving references. - - A function that creates the used by the serializer when resolving references. - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the error handler called during serialization and deserialization. - - The error handler called during serialization and deserialization. - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Indicates how JSON text output is formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled during serialization and deserialization. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets a value indicating whether there will be a check for additional content after deserializing an object. - - - true if there will be a check for additional content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Represents a reader that provides fast, non-cached, forward-only access to JSON text data. - - - - - Asynchronously reads the next JSON token from the source. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns true if the next token was read successfully; false if there are no more tokens to read. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a []. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the []. This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Initializes a new instance of the class with the specified . - - The containing the JSON data to read. - - - - Gets or sets the reader's character buffer pool. - - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - - The current line number or 0 if no line information is available (for example, returns false). - - - - - Gets the current line position. - - - The current line position or 0 if no line information is available (for example, returns false). - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the JSON value delimiter. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the specified end token. - - The end token to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously closes this writer. - If is set to true, the destination is also closed. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of the current JSON object or array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes indent characters. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes an indent space. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes raw JSON without changing the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a null value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the beginning of a JSON array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the beginning of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the start of a constructor with the given name. - - The name of the constructor. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes an undefined value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the given white space. - - The string of white space characters. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a [] value. - - The [] value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of an array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of a constructor. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Gets or sets the writer's character array pool. - - - - - Gets or sets how many s to write for each level in the hierarchy when is set to . - - - - - Gets or sets which character to use to quote attribute values. - - - - - Gets or sets which character to use for indenting when is set to . - - - - - Gets or sets a value indicating whether object names will be surrounded with quotes. - - - - - Initializes a new instance of the class using the specified . - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying . - - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the specified end token. - - The end token to write. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Specifies the type of JSON token. - - - - - This is returned by the if a read method has not been called. - - - - - An object start token. - - - - - An array start token. - - - - - A constructor start token. - - - - - An object property name. - - - - - A comment. - - - - - Raw JSON. - - - - - An integer. - - - - - A float. - - - - - A string. - - - - - A boolean. - - - - - A null token. - - - - - An undefined token. - - - - - An object end token. - - - - - An array end token. - - - - - A constructor end token. - - - - - A Date. - - - - - Byte data. - - - - - - Represents a reader that provides validation. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Sets an event handler for receiving schema validation errors. - - - - - Gets the text value of the current JSON token. - - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - - Gets the type of the current JSON token. - - - - - - Gets the .NET type for the current JSON token. - - - - - - Initializes a new instance of the class that - validates the content returned from the given . - - The to read from while validating. - - - - Gets or sets the schema. - - The schema. - - - - Gets the used to construct this . - - The specified in the constructor. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a []. - - - A [] or null if the next JSON token is null. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Asynchronously closes this writer. - If is set to true, the destination is also closed. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the specified end token. - - The end token to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes indent characters. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the JSON value delimiter. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes an indent space. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes raw JSON without changing the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the end of the current JSON object or array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the end of an array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the end of a constructor. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the end of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a null value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the beginning of a JSON array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the start of a constructor with the given name. - - The name of the constructor. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the beginning of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the current token. - - The to read the token from. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the token and its value. - - The to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - null can be passed to the method for tokens that don't have a value, e.g. . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a [] value. - - The [] value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes an undefined value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the given white space. - - The string of white space characters. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously ets the state of the . - - The being written. - The value being written. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Gets or sets a value indicating whether the destination should be closed when this writer is closed. - - - true to close the destination when this writer is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. - - - true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. - - - - - Gets the top. - - The top. - - - - Gets the state of the writer. - - - - - Gets the path of the writer. - - - - - Gets or sets a value indicating how JSON text output should be formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled when writing JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written to JSON text. - - - - - Gets or sets how and values are formatted when writing JSON text. - - - - - Gets or sets the culture used when writing JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the destination and also flushes the destination. - - - - - Closes this writer. - If is set to true, the destination is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the end of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the end of an array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end constructor. - - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes the end of the current JSON object or array. - - - - - Writes the current token and its children. - - The to read the token from. - - - - Writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - - - - Writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - null can be passed to the method for tokens that don't have a value, e.g. . - - - - - Writes the token. - - The to write. - - - - Writes the specified end token. - - The end token to write. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON without changing the writer's state. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Sets the state of the . - - The being written. - The value being written. - - - - The exception thrown when an error occurs while writing JSON text. - - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Initializes a new instance of the class - with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Specifies how JSON comments are handled when loading JSON. - - - - - Ignore comments. - - - - - Load comments as a with type . - - - - - Specifies how line information is handled when loading JSON. - - - - - Ignore line information. - - - - - Load line information. - - - - - Contains the LINQ to JSON extension methods. - - - - - Returns a collection of tokens that contains the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the descendants of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, and the descendants of every token in the source collection. - - - - Returns a collection of child properties of every object in the source collection. - - An of that contains the source collection. - An of that contains the properties of every object in the source collection. - - - - Returns a collection of child values of every object in the source collection with the given key. - - An of that contains the source collection. - The token key. - An of that contains the values of every token in the source collection with the given key. - - - - Returns a collection of child values of every object in the source collection. - - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child values of every object in the source collection with the given key. - - The type to convert the values to. - An of that contains the source collection. - The token key. - An that contains the converted values of every token in the source collection with the given key. - - - - Returns a collection of converted child values of every object in the source collection. - - The type to convert the values to. - An of that contains the source collection. - An that contains the converted values of every token in the source collection. - - - - Converts the value. - - The type to convert the value to. - A cast as a of . - A converted value. - - - - Converts the value. - - The source collection type. - The type to convert the value to. - A cast as a of . - A converted value. - - - - Returns a collection of child tokens of every array in the source collection. - - The source collection type. - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child tokens of every array in the source collection. - - An of that contains the source collection. - The type to convert the values to. - The source collection type. - An that contains the converted values of every token in the source collection. - - - - Returns the input typed as . - - An of that contains the source collection. - The input typed as . - - - - Returns the input typed as . - - The source collection type. - An of that contains the source collection. - The input typed as . - - - - Represents a collection of objects. - - The type of token. - - - - Gets the of with the specified key. - - - - - - Represents a JSON array. - - - - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous load. The property contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous load. The property contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads an from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the at the specified index. - - - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Inserts an item to the at the specified index. - - The zero-based index at which should be inserted. - The object to insert into the . - - is not a valid index in the . - - - - - Removes the item at the specified index. - - The zero-based index of the item to remove. - - is not a valid index in the . - - - - - Returns an enumerator that iterates through the collection. - - - A of that can be used to iterate through the collection. - - - - - Adds an item to the . - - The object to add to the . - - - - Removes all items from the . - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Copies the elements of the to an array, starting at a particular array index. - - The array. - Index of the array. - - - - Gets a value indicating whether the is read-only. - - true if the is read-only; otherwise, false. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - - - Represents a JSON constructor. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets or sets the name of this constructor. - - The constructor name. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name. - - The constructor name. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a token that can contain other tokens. - - - - - Occurs when the list changes or an item in the list changes. - - - - - Occurs before an item is added to the collection. - - - - - Occurs when the items list of the collection has changed, or the collection is reset. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Get the first child token of this token. - - - A containing the first child token of the . - - - - - Get the last child token of this token. - - - A containing the last child token of the . - - - - - Returns a collection of the child tokens of this token, in document order. - - - An of containing the child tokens of this , in document order. - - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - - A containing the child values of this , in document order. - - - - - Returns a collection of the descendant tokens for this token in document order. - - An of containing the descendant tokens of the . - - - - Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. - - An of containing this token, and all the descendant tokens of the . - - - - Adds the specified content as children of this . - - The content to be added. - - - - Adds the specified content as the first children of this . - - The content to be added. - - - - Creates a that can be used to add tokens to the . - - A that is ready to have content written to it. - - - - Replaces the child nodes of this token with the specified content. - - The content. - - - - Removes the child nodes from this token. - - - - - Merge the specified content into this . - - The content to be merged. - - - - Merge the specified content into this using . - - The content to be merged. - The used to merge the content. - - - - Gets the count of child JSON tokens. - - The count of child JSON tokens. - - - - Represents a collection of objects. - - The type of token. - - - - An empty collection of objects. - - - - - Initializes a new instance of the struct. - - The enumerable. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Gets the of with the specified key. - - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Represents a JSON object. - - - - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Occurs when a property value changes. - - - - - Occurs when a property value is changing. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Gets the node type for this . - - The type. - - - - Gets an of of this object's properties. - - An of of this object's properties. - - - - Gets a the specified name. - - The property name. - A with the specified name or null. - - - - Gets a of of this object's property values. - - A of of this object's property values. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the with the specified property name. - - - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified property name. - - Name of the property. - The with the specified property name. - - - - Gets the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - One of the enumeration values that specifies how the strings will be compared. - The with the specified property name. - - - - Tries to get the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - The value. - One of the enumeration values that specifies how the strings will be compared. - true if a value was successfully retrieved; otherwise, false. - - - - Adds the specified property name. - - Name of the property. - The value. - - - - Removes the property with the specified name. - - Name of the property. - true if item was successfully removed; otherwise, false. - - - - Tries to get the with the specified property name. - - Name of the property. - The value. - true if a value was successfully retrieved; otherwise, false. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Represents a JSON property. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the property name. - - The property name. - - - - Gets or sets the property value. - - The property value. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a view of a . - - - - - Initializes a new instance of the class. - - The name. - - - - When overridden in a derived class, returns whether resetting an object changes its value. - - - true if resetting the component changes its value; otherwise, false. - - The component to test for reset capability. - - - - When overridden in a derived class, gets the current value of the property on a component. - - - The value of a property for a given component. - - The component with the property for which to retrieve the value. - - - - When overridden in a derived class, resets the value for this property of the component to the default value. - - The component with the property value that is to be reset to the default value. - - - - When overridden in a derived class, sets the value of the component to a different value. - - The component with the property value that is to be set. - The new value. - - - - When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. - - - true if the property should be persisted; otherwise, false. - - The component with the property to be examined for persistence. - - - - When overridden in a derived class, gets the type of the component this property is bound to. - - - A that represents the type of component this property is bound to. - When the or - - methods are invoked, the object specified might be an instance of this type. - - - - - When overridden in a derived class, gets a value indicating whether this property is read-only. - - - true if the property is read-only; otherwise, false. - - - - - When overridden in a derived class, gets the type of the property. - - - A that represents the type of the property. - - - - - Gets the hash code for the name of the member. - - - - The hash code for the name of the member. - - - - - Represents a raw JSON string. - - - - - Asynchronously creates an instance of with the content of the reader's current token. - - The reader. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns an instance of with the content of the reader's current token. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class. - - The raw json. - - - - Creates an instance of with the content of the reader's current token. - - The reader. - An instance of with the content of the reader's current token. - - - - Specifies the settings used when loading JSON. - - - - - Initializes a new instance of the class. - - - - - Gets or sets how JSON comments are handled when loading JSON. - - The JSON comment handling. - - - - Gets or sets how JSON line info is handled when loading JSON. - - The JSON line info handling. - - - - Specifies the settings used when merging JSON. - - - - - Gets or sets the method used when merging JSON arrays. - - The method used when merging JSON arrays. - - - - Gets or sets how null value properties are merged. - - How null value properties are merged. - - - - Represents an abstract JSON token. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Writes this token to a asynchronously. - - A into which this method will write. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously creates a from a . - - An positioned at the token to read into this . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains - the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - An positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains - the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - A positioned at the token to read into this . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - A positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Gets a comparer that can compare two tokens for value equality. - - A that can compare two nodes for value equality. - - - - Gets or sets the parent. - - The parent. - - - - Gets the root of this . - - The root of this . - - - - Gets the node type for this . - - The type. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Compares the values of two tokens, including the values of all descendant tokens. - - The first to compare. - The second to compare. - true if the tokens are equal; otherwise false. - - - - Gets the next sibling token of this node. - - The that contains the next sibling token. - - - - Gets the previous sibling token of this node. - - The that contains the previous sibling token. - - - - Gets the path of the JSON token. - - - - - Adds the specified content immediately after this token. - - A content object that contains simple content or a collection of content objects to be added after this token. - - - - Adds the specified content immediately before this token. - - A content object that contains simple content or a collection of content objects to be added before this token. - - - - Returns a collection of the ancestor tokens of this token. - - A collection of the ancestor tokens of this token. - - - - Returns a collection of tokens that contain this token, and the ancestors of this token. - - A collection of tokens that contain this token, and the ancestors of this token. - - - - Returns a collection of the sibling tokens after this token, in document order. - - A collection of the sibling tokens after this tokens, in document order. - - - - Returns a collection of the sibling tokens before this token, in document order. - - A collection of the sibling tokens before this token, in document order. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets the with the specified key converted to the specified type. - - The type to convert the token to. - The token key. - The converted token value. - - - - Get the first child token of this token. - - A containing the first child token of the . - - - - Get the last child token of this token. - - A containing the last child token of the . - - - - Returns a collection of the child tokens of this token, in document order. - - An of containing the child tokens of this , in document order. - - - - Returns a collection of the child tokens of this token, in document order, filtered by the specified type. - - The type to filter the child tokens on. - A containing the child tokens of this , in document order. - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - A containing the child values of this , in document order. - - - - Removes this token from its parent. - - - - - Replaces this token with the specified token. - - The value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Returns the indented JSON for this token. - - - The indented JSON for this token. - - - - - Returns the JSON for this token using the given formatting and converters. - - Indicates how the output should be formatted. - A collection of s which will be used when writing the token. - The JSON for this token using the given formatting and converters. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to []. - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from [] to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Creates a for this token. - - A that can be used to read this token and its descendants. - - - - Creates a from an object. - - The object that will be used to create . - A with the value of the specified object. - - - - Creates a from an object using the specified . - - The object that will be used to create . - The that will be used when reading the object. - A with the value of the specified object. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - An positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - Creates a from a . - - A positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A , or null. - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - A . - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - An of that contains the selected elements. - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - An of that contains the selected elements. - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Creates a new instance of the . All child tokens are recursively cloned. - - A new instance of the . - - - - Adds an object to the annotation list of this . - - The annotation to add. - - - - Get the first annotation object of the specified type from this . - - The type of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets the first annotation object of the specified type from this . - - The of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets a collection of annotations of the specified type for this . - - The type of the annotations to retrieve. - An that contains the annotations for this . - - - - Gets a collection of annotations of the specified type for this . - - The of the annotations to retrieve. - An of that contains the annotations that match the specified type for this . - - - - Removes the annotations of the specified type from this . - - The type of annotations to remove. - - - - Removes the annotations of the specified type from this . - - The of annotations to remove. - - - - Compares tokens to determine whether they are equal. - - - - - Determines whether the specified objects are equal. - - The first object of type to compare. - The second object of type to compare. - - true if the specified objects are equal; otherwise, false. - - - - - Returns a hash code for the specified object. - - The for which a hash code is to be returned. - A hash code for the specified object. - The type of is a reference type and is null. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Gets the at the reader's current position. - - - - - Initializes a new instance of the class. - - The token to read from. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Gets the path of the current JSON token. - - - - - Specifies the type of token. - - - - - No token type has been set. - - - - - A JSON object. - - - - - A JSON array. - - - - - A JSON constructor. - - - - - A JSON object property. - - - - - A comment. - - - - - An integer value. - - - - - A float value. - - - - - A string value. - - - - - A boolean value. - - - - - A null value. - - - - - An undefined value. - - - - - A date value. - - - - - A raw JSON value. - - - - - A collection of bytes value. - - - - - A Guid value. - - - - - A Uri value. - - - - - A TimeSpan value. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets the at the writer's current position. - - - - - Gets the token being written. - - The token being written. - - - - Initializes a new instance of the class writing to the given . - - The container being written to. - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the underlying . - - - - - Closes this writer. - If is set to true, the JSON is auto-completed. - - - Setting to true has no additional effect, since the underlying is a type that cannot be closed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end. - - The token. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes a value. - An error will be raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Represents a value in JSON (string, integer, date, etc). - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Creates a comment with the given value. - - The value. - A comment with the given value. - - - - Creates a string with the given value. - - The value. - A string with the given value. - - - - Creates a null value. - - A null value. - - - - Creates a undefined value. - - A undefined value. - - - - Gets the node type for this . - - The type. - - - - Gets or sets the underlying token value. - - The underlying token value. - - - - Writes this token to a . - - A into which this method will write. - A collection of s which will be used when writing the token. - - - - Indicates whether the current object is equal to another object of the same type. - - - true if the current object is equal to the parameter; otherwise, false. - - An object to compare with this object. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format provider. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - The format provider. - - A that represents this instance. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. - - An object to compare with this instance. - - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: - Value - Meaning - Less than zero - This instance is less than . - Zero - This instance is equal to . - Greater than zero - This instance is greater than . - - - is not of the same type as this instance. - - - - - Specifies how JSON arrays are merged together. - - - - Concatenate arrays. - - - Union arrays, skipping items that already exist. - - - Replace all array items. - - - Merge array items together, matched by index. - - - - Specifies how null value properties are merged. - - - - - The content's null value properties will be ignored during merging. - - - - - The content's null value properties will be merged. - - - - - Specifies the member serialization options for the . - - - - - All public members are serialized by default. Members can be excluded using or . - This is the default member serialization mode. - - - - - Only members marked with or are serialized. - This member serialization mode can also be set by marking the class with . - - - - - All public and private fields are serialized. Members can be excluded using or . - This member serialization mode can also be set by marking the class with - and setting IgnoreSerializableAttribute on to false. - - - - - Specifies metadata property handling options for the . - - - - - Read metadata properties located at the start of a JSON object. - - - - - Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. - - - - - Do not try to read metadata properties. - - - - - Specifies missing member handling options for the . - - - - - Ignore a missing member and do not attempt to deserialize it. - - - - - Throw a when a missing member is encountered during deserialization. - - - - - Specifies null value handling options for the . - - - - - - - - - Include null values when serializing and deserializing objects. - - - - - Ignore null values when serializing and deserializing objects. - - - - - Specifies how object creation is handled by the . - - - - - Reuse existing objects, create new objects when needed. - - - - - Only reuse existing objects. - - - - - Always create new objects. - - - - - Specifies reference handling options for the . - Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . - - - - - - - - Do not preserve references when serializing types. - - - - - Preserve references when serializing into a JSON object structure. - - - - - Preserve references when serializing into a JSON array structure. - - - - - Preserve references when serializing. - - - - - Specifies reference loop handling options for the . - - - - - Throw a when a loop is encountered. - - - - - Ignore loop references and do not serialize. - - - - - Serialize loop references. - - - - - Indicating whether a property is required. - - - - - The property is not required. The default state. - - - - - The property must be defined in JSON but can be a null value. - - - - - The property must be defined in JSON and cannot be a null value. - - - - - The property is not required but it cannot be a null value. - - - - - - Contains the JSON schema extension methods. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - true if the specified is valid; otherwise, false. - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - When this method returns, contains any error messages generated while validating. - - true if the specified is valid; otherwise, false. - - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - The validation event handler. - - - - - An in-memory representation of a JSON Schema. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the id. - - - - - Gets or sets the title. - - - - - Gets or sets whether the object is required. - - - - - Gets or sets whether the object is read-only. - - - - - Gets or sets whether the object is visible to users. - - - - - Gets or sets whether the object is transient. - - - - - Gets or sets the description of the object. - - - - - Gets or sets the types of values allowed by the object. - - The type. - - - - Gets or sets the pattern. - - The pattern. - - - - Gets or sets the minimum length. - - The minimum length. - - - - Gets or sets the maximum length. - - The maximum length. - - - - Gets or sets a number that the value should be divisible by. - - A number that the value should be divisible by. - - - - Gets or sets the minimum. - - The minimum. - - - - Gets or sets the maximum. - - The maximum. - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). - - A flag indicating whether the value can not equal the number defined by the minimum attribute (). - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). - - A flag indicating whether the value can not equal the number defined by the maximum attribute (). - - - - Gets or sets the minimum number of items. - - The minimum number of items. - - - - Gets or sets the maximum number of items. - - The maximum number of items. - - - - Gets or sets the of items. - - The of items. - - - - Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . - - - true if items are validated using their array position; otherwise, false. - - - - - Gets or sets the of additional items. - - The of additional items. - - - - Gets or sets a value indicating whether additional items are allowed. - - - true if additional items are allowed; otherwise, false. - - - - - Gets or sets whether the array items must be unique. - - - - - Gets or sets the of properties. - - The of properties. - - - - Gets or sets the of additional properties. - - The of additional properties. - - - - Gets or sets the pattern properties. - - The pattern properties. - - - - Gets or sets a value indicating whether additional properties are allowed. - - - true if additional properties are allowed; otherwise, false. - - - - - Gets or sets the required property if this property is present. - - The required property if this property is present. - - - - Gets or sets the a collection of valid enum values allowed. - - A collection of valid enum values allowed. - - - - Gets or sets disallowed types. - - The disallowed types. - - - - Gets or sets the default value. - - The default value. - - - - Gets or sets the collection of that this schema extends. - - The collection of that this schema extends. - - - - Gets or sets the format. - - The format. - - - - Initializes a new instance of the class. - - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The object representing the JSON Schema. - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The to use when resolving schema references. - The object representing the JSON Schema. - - - - Load a from a string that contains JSON Schema. - - A that contains JSON Schema. - A populated from the string that contains JSON Schema. - - - - Load a from a string that contains JSON Schema using the specified . - - A that contains JSON Schema. - The resolver. - A populated from the string that contains JSON Schema. - - - - Writes this schema to a . - - A into which this method will write. - - - - Writes this schema to a using the specified . - - A into which this method will write. - The resolver used. - - - - Returns a that represents the current . - - - A that represents the current . - - - - - - Returns detailed information about the schema exception. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - - Generates a from a specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets how undefined schemas are handled by the serializer. - - - - - Gets or sets the contract resolver. - - The contract resolver. - - - - Generate a from the specified type. - - The type to generate a from. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - - Resolves from an id. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the loaded schemas. - - The loaded schemas. - - - - Initializes a new instance of the class. - - - - - Gets a for the specified reference. - - The id. - A for the specified reference. - - - - - The value types allowed by the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - No type specified. - - - - - String type. - - - - - Float type. - - - - - Integer type. - - - - - Boolean type. - - - - - Object type. - - - - - Array type. - - - - - Null type. - - - - - Any type. - - - - - - Specifies undefined schema Id handling options for the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Do not infer a schema Id. - - - - - Use the .NET type name as the schema Id. - - - - - Use the assembly qualified .NET type name as the schema Id. - - - - - - Returns detailed information related to the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the associated with the validation error. - - The JsonSchemaException associated with the validation error. - - - - Gets the path of the JSON location where the validation error occurred. - - The path of the JSON location where the validation error occurred. - - - - Gets the text description corresponding to the validation error. - - The text description. - - - - - Represents the callback method that will handle JSON schema validation events and the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - A camel case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Resolves member mappings for a type, camel casing property names. - - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used by to resolve a for a given . - - - - - Gets a value indicating whether members are being get and set using dynamic code generation. - This value is determined by the runtime permissions available. - - - true if using dynamic code generation; otherwise, false. - - - - - Gets or sets the default members search flags. - - The default members search flags. - - - - Gets or sets a value indicating whether compiler generated members should be serialized. - - - true if serialized compiler generated members; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. - - - true if the interface will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. - - - true if the attribute will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. - - The naming strategy used to resolve how property names and dictionary keys are serialized. - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Gets the serializable members for the type. - - The type to get serializable members for. - The serializable members for the type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates the constructor parameters. - - The constructor to create properties for. - The type's member properties. - Properties for the given . - - - - Creates a for the given . - - The matching member property. - The constructor parameter. - A created for the given . - - - - Resolves the default for the contract. - - Type of the object. - The contract's default . - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Determines which contract type is created for the given type. - - Type of the object. - A for the given type. - - - - Creates properties for the given . - - The type to create properties for. - /// The member serialization mode for the type. - Properties for the given . - - - - Creates the used by the serializer to get and set values from a member. - - The member. - The used by the serializer to get and set values from a member. - - - - Creates a for the given . - - The member's parent . - The member to create a for. - A created for the given . - - - - Resolves the name of the property. - - Name of the property. - Resolved name of the property. - - - - Resolves the name of the extension data. By default no changes are made to extension data names. - - Name of the extension data. - Resolved name of the extension data. - - - - Resolves the key of the dictionary. By default is used to resolve dictionary keys. - - Key of the dictionary. - Resolved key of the dictionary. - - - - Gets the resolved name of the property. - - Name of the property. - Name of the property. - - - - The default naming strategy. Property names and dictionary keys are unchanged. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - The default serialization binder used when resolving and loading classes from type names. - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - The type of the object the formatter creates a new instance of. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer that writes to the application's instances. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Get and set values for a using dynamic methods. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Provides information surrounding an error. - - - - - Gets the error. - - The error. - - - - Gets the original object that caused the error. - - The original object that caused the error. - - - - Gets the member that caused the error. - - The member that caused the error. - - - - Gets the path of the JSON location where the error occurred. - - The path of the JSON location where the error occurred. - - - - Gets or sets a value indicating whether this is handled. - - true if handled; otherwise, false. - - - - Provides data for the Error event. - - - - - Gets the current object the error event is being raised against. - - The current object the error event is being raised against. - - - - Gets the error context. - - The error context. - - - - Initializes a new instance of the class. - - The current object. - The error context. - - - - Get and set values for a using dynamic methods. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Provides methods to get attributes. - - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Used by to resolve a for a given . - - - - - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used to resolve references when serializing and deserializing JSON by the . - - - - - Resolves a reference to its object. - - The serialization context. - The reference to resolve. - The object that was resolved from the reference. - - - - Gets the reference for the specified object. - - The serialization context. - The object to get a reference for. - The reference to the object. - - - - Determines whether the specified object is referenced. - - The serialization context. - The object to test for a reference. - - true if the specified object is referenced; otherwise, false. - - - - - Adds a reference to the specified object. - - The serialization context. - The reference. - The object to reference. - - - - Allows users to control class loading and mandate what class to load. - - - - - When implemented, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object - The type of the object the formatter creates a new instance of. - - - - When implemented, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - The that will be used to filter the trace messages passed to the writer. - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Provides methods to get and set values. - - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Contract details for a used by the . - - - - - Gets the of the collection items. - - The of the collection items. - - - - Gets a value indicating whether the collection type is a multidimensional array. - - true if the collection type is a multidimensional array; otherwise, false. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the collection values. - - true if the creator has a parameter with the collection values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the default collection items . - - The converter. - - - - Gets or sets a value indicating whether the collection items preserve object references. - - true if collection items preserve object references; otherwise, false. - - - - Gets or sets the collection item reference loop handling. - - The reference loop handling. - - - - Gets or sets the collection item type name handling. - - The type name handling. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Handles serialization callback events. - - The object that raised the callback event. - The streaming context. - - - - Handles serialization error callback events. - - The object that raised the callback event. - The streaming context. - The error context. - - - - Sets extension data for an object during deserialization. - - The object to set extension data on. - The extension data key. - The extension data value. - - - - Gets extension data for an object during serialization. - - The object to set extension data on. - - - - Contract details for a used by the . - - - - - Gets the underlying type for the contract. - - The underlying type for the contract. - - - - Gets or sets the type created during deserialization. - - The type created during deserialization. - - - - Gets or sets whether this type contract is serialized as a reference. - - Whether this type contract is serialized as a reference. - - - - Gets or sets the default for this contract. - - The converter. - - - - Gets or sets all methods called immediately after deserialization of the object. - - The methods called immediately after deserialization of the object. - - - - Gets or sets all methods called during deserialization of the object. - - The methods called during deserialization of the object. - - - - Gets or sets all methods called after serialization of the object graph. - - The methods called after serialization of the object graph. - - - - Gets or sets all methods called before serialization of the object. - - The methods called before serialization of the object. - - - - Gets or sets all method called when an error is thrown during the serialization of the object. - - The methods called when an error is thrown during the serialization of the object. - - - - Gets or sets the default creator method used to create the object. - - The default creator method used to create the object. - - - - Gets or sets a value indicating whether the default creator is non-public. - - true if the default object creator is non-public; otherwise, false. - - - - Contract details for a used by the . - - - - - Gets or sets the dictionary key resolver. - - The dictionary key resolver. - - - - Gets the of the dictionary keys. - - The of the dictionary keys. - - - - Gets the of the dictionary values. - - The of the dictionary values. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the dictionary values. - - true if the creator has a parameter with the dictionary values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets the object's properties. - - The object's properties. - - - - Gets or sets the property name resolver. - - The property name resolver. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the object constructor. - - The object constructor. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the object member serialization. - - The member object serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Gets the object's properties. - - The object's properties. - - - - Gets a collection of instances that define the parameters used with . - - - - - Gets or sets the function used to create the object. When set this function will override . - This function is called with a collection of arguments which are defined by the collection. - - The function used to create the object. - - - - Gets or sets the extension data setter. - - - - - Gets or sets the extension data getter. - - - - - Gets or sets the extension data value type. - - - - - Gets or sets the extension data name resolver. - - The extension data name resolver. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Maps a JSON property to a .NET member or constructor parameter. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the type that declared this property. - - The type that declared this property. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets the name of the underlying member or parameter. - - The name of the underlying member or parameter. - - - - Gets the that will get and set the during serialization. - - The that will get and set the during serialization. - - - - Gets or sets the for this property. - - The for this property. - - - - Gets or sets the type of the property. - - The type of the property. - - - - Gets or sets the for the property. - If set this converter takes precedence over the contract converter for the property type. - - The converter. - - - - Gets or sets the member converter. - - The member converter. - - - - Gets or sets a value indicating whether this is ignored. - - true if ignored; otherwise, false. - - - - Gets or sets a value indicating whether this is readable. - - true if readable; otherwise, false. - - - - Gets or sets a value indicating whether this is writable. - - true if writable; otherwise, false. - - - - Gets or sets a value indicating whether this has a member attribute. - - true if has a member attribute; otherwise, false. - - - - Gets the default value. - - The default value. - - - - Gets or sets a value indicating whether this is required. - - A value indicating whether this is required. - - - - Gets or sets a value indicating whether this property preserves object references. - - - true if this instance is reference; otherwise, false. - - - - - Gets or sets the property null value handling. - - The null value handling. - - - - Gets or sets the property default value handling. - - The default value handling. - - - - Gets or sets the property reference loop handling. - - The reference loop handling. - - - - Gets or sets the property object creation handling. - - The object creation handling. - - - - Gets or sets or sets the type name handling. - - The type name handling. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets a predicate used to determine whether the property should be deserialized. - - A predicate used to determine whether the property should be deserialized. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets an action used to set whether the property has been deserialized. - - An action used to set whether the property has been deserialized. - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the converter used when serializing the property's collection items. - - The collection's items converter. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - A collection of objects. - - - - - Initializes a new instance of the class. - - The type. - - - - When implemented in a derived class, extracts the key from the specified element. - - The element from which to extract the key. - The key for the specified element. - - - - Adds a object. - - The property to add to the collection. - - - - Gets the closest matching object. - First attempts to get an exact case match of and then - a case insensitive match. - - Name of the property. - A matching property if found. - - - - Gets a property by property name. - - The name of the property to get. - Type property name string comparison. - A matching property if found. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Lookup and create an instance of the type described by the argument. - - The type to create. - Optional arguments to pass to an initializing constructor of the JsonConverter. - If null, the default constructor is used. - - - - Represents a trace writer that writes to memory. When the trace message limit is - reached then old trace messages will be removed as new messages are added. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Initializes a new instance of the class. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Returns an enumeration of the most recent trace messages. - - An enumeration of the most recent trace messages. - - - - Returns a of the most recent trace messages. - - - A of the most recent trace messages. - - - - - A base class for resolving how property names and dictionary keys are serialized. - - - - - A flag indicating whether dictionary keys should be processed. - Defaults to false. - - - - - A flag indicating whether extension data names should be processed. - Defaults to false. - - - - - A flag indicating whether explicitly specified property names, - e.g. a property name customized with a , should be processed. - Defaults to false. - - - - - Gets the serialized name for a given property name. - - The initial property name. - A flag indicating whether the property has had a name explicitly specified. - The serialized property name. - - - - Gets the serialized name for a given extension data name. - - The initial extension data name. - The serialized extension data name. - - - - Gets the serialized key for a given dictionary key. - - The initial dictionary key. - The serialized dictionary key. - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Represents a method that constructs an object. - - The object type to create. - - - - When applied to a method, specifies that the method is called when an error occurs serializing an object. - - - - - Provides methods to get attributes from a , , or . - - - - - Initializes a new instance of the class. - - The instance to get attributes for. This parameter should be a , , or . - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Get and set values for a using reflection. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - A snake case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Specifies how strings are escaped when writing JSON text. - - - - - Only control characters (e.g. newline) are escaped. - - - - - All non-ASCII and control characters (e.g. newline) are escaped. - - - - - HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. - - - - - Indicates the method that will be used during deserialization for locating and loading assemblies. - - - - - In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. - - - - - In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. - - - - - Specifies type name handling options for the . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Do not include the .NET type name when serializing types. - - - - - Include the .NET type name when serializing into a JSON object structure. - - - - - Include the .NET type name when serializing into a JSON array structure. - - - - - Always include the .NET type name when serializing. - - - - - Include the .NET type name when the type of the object being serialized is not the same as its declared type. - Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON - you must specify a root type object with - or . - - - - - Determines whether the collection is null or empty. - - The collection. - - true if the collection is null or empty; otherwise, false. - - - - - Adds the elements of the specified collection to the specified generic . - - The list to add to. - The collection of elements to add. - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert or cast the value to. - - The converted type. If conversion was unsuccessful, the initial value - is returned if assignable to the target type. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic that returns a result - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Returns a Restrictions object which includes our current restrictions merged - with a restriction limiting our type - - - - - Gets a dictionary of the names and values of an type. - - - - - - Gets a dictionary of the names and values of an Enum type. - - The enum type to get names and values for. - - - - - Gets the type of the typed collection's items. - - The type. - The type of the typed collection's items. - - - - Gets the member's underlying type. - - The member. - The underlying type of the member. - - - - Determines whether the member is an indexed property. - - The member. - - true if the member is an indexed property; otherwise, false. - - - - - Determines whether the property is an indexed property. - - The property. - - true if the property is an indexed property; otherwise, false. - - - - - Gets the member's value on the object. - - The member. - The target object. - The member's value on the object. - - - - Sets the member's value on the target object. - - The member. - The target. - The value. - - - - Determines whether the specified MemberInfo can be read. - - The MemberInfo to determine whether can be read. - /// if set to true then allow the member to be gotten non-publicly. - - true if the specified MemberInfo can be read; otherwise, false. - - - - - Determines whether the specified MemberInfo can be set. - - The MemberInfo to determine whether can be set. - if set to true then allow the member to be set non-publicly. - if set to true then allow the member to be set if read-only. - - true if the specified MemberInfo can be set; otherwise, false. - - - - - Builds a string. Unlike this class lets you reuse its internal buffer. - - - - - Determines whether the string is all white space. Empty string will return false. - - The string to test whether it is all white space. - - true if the string is all white space; otherwise, false. - - - - - Specifies the state of the . - - - - - An exception has been thrown, which has left the in an invalid state. - You may call the method to put the in the Closed state. - Any other method calls result in an being thrown. - - - - - The method has been called. - - - - - An object is being written. - - - - - An array is being written. - - - - - A constructor is being written. - - - - - A property is being written. - - - - - A write method has not been called. - - - - diff --git a/trunk/packages/Newtonsoft.Json.10.0.3/lib/netstandard1.0/Newtonsoft.Json.dll b/trunk/packages/Newtonsoft.Json.10.0.3/lib/netstandard1.0/Newtonsoft.Json.dll deleted file mode 100644 index b9258ef90d4359a225c2694221b7358811db1669..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 624128 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%0A5PptTPhEH7UBN5-qR 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®+4>RNWr6u%H5ewE@#)9R5U8$ZIg6;%$p=fp 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�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 z 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 diff --git a/trunk/packages/Newtonsoft.Json.10.0.3/lib/netstandard1.0/Newtonsoft.Json.xml b/trunk/packages/Newtonsoft.Json.10.0.3/lib/netstandard1.0/Newtonsoft.Json.xml deleted file mode 100644 index f7a4e30..0000000 --- a/trunk/packages/Newtonsoft.Json.10.0.3/lib/netstandard1.0/Newtonsoft.Json.xml +++ /dev/null @@ -1,10467 +0,0 @@ - - - - Newtonsoft.Json - - - -

    - Represents a BSON Oid (object id). - - - - - Gets or sets the value of the Oid. - - The value of the Oid. - - - - Initializes a new instance of the class. - - The Oid value. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. - - - - - Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. - - - true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. - - - - - Gets or sets a value indicating whether the root object will be read as a JSON array. - - - true if the root object will be read as a JSON array; otherwise, false. - - - - - Gets or sets the used when reading values from BSON. - - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. - - - - - Gets or sets the used when writing values to BSON. - When set to no conversion will occur. - - The used when writing values to BSON. - - - - Initializes a new instance of the class. - - The to write to. - - - - Initializes a new instance of the class. - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. - - - - - Writes the end. - - The token. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes the beginning of a JSON array. - - - - - Writes the beginning of a JSON object. - - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value that represents a BSON object id. - - The Object ID value to write. - - - - Writes a BSON regex. - - The regex pattern. - The regex options. - - - - Specifies how constructors are used when initializing objects during deserialization by the . - - - - - First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. - - - - - Json.NET will use a non-public default constructor before falling back to a parameterized constructor. - - - - - Converts a binary value to and from a base 64 string value. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Creates a custom object. - - The object type to convert. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Creates an object which will then be populated by the serializer. - - Type of the object. - The created object. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Provides a base class for converting a to and from JSON. - - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a F# discriminated union type to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). - - - - - Gets or sets the date time styles used when converting a date to and from JSON. - - The date time styles used when converting a date to and from JSON. - - - - Gets or sets the date time format used when converting a date to and from JSON. - - The date time format used when converting a date to and from JSON. - - - - Gets or sets the culture used when converting a date to and from JSON. - - The culture used when converting a date to and from JSON. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from its name string value. - - - - - Gets or sets a value indicating whether the written enum text should be camel case. - - true if the written enum text will be camel case; otherwise, false. - - - - Gets or sets a value indicating whether integer values are allowed when deserializing. - - true if integers are allowed when deserializing; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - true if the written enum text will be camel case; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from a string (e.g. "1.2.3.4"). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts XML to and from JSON. - - - - - Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. - - The name of the deserialized root element. - - - - Gets or sets a flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - true if the array attribute is written to the XML; otherwise, false. - - - - Gets or sets a value indicating whether to write the root JSON object. - - true if the JSON root object is omitted; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The calling serializer. - The value. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Checks if the is a namespace attribute. - - Attribute name to test. - The attribute name prefix if it has one, otherwise an empty string. - true if attribute name is for a namespace attribute, otherwise false. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Specifies how dates are formatted when writing JSON text. - - - - - Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". - - - - - Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". - - - - - Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. - - - - - Date formatted strings are not parsed to a date type and are read as strings. - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Specifies how to treat the time value when converting between string and . - - - - - Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. - - - - - Treat as a UTC. If the object represents a local time, it is converted to a UTC. - - - - - Treat as a local time if a is being converted to a string. - If a string is being converted to , convert to a local time if a time zone is specified. - - - - - Time zone information should be preserved when converting. - - - - - Specifies default value handling options for the . - - - - - - - - - Include members where the member value is the same as the member's default value when serializing objects. - Included members are written to JSON. Has no effect when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - so that it is not written to JSON. - This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, - decimals and floating point numbers; and false for booleans). The default value ignored can be changed by - placing the on the property. - - - - - Members with a default value but no JSON will be set to their default value when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - and set members to their default value when deserializing. - - - - - Specifies float format handling options when writing special floating point numbers, e.g. , - and with . - - - - - Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". - - - - - Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. - Note that this will produce non-valid JSON. - - - - - Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. - - - - - Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Floating point numbers are parsed to . - - - - - Floating point numbers are parsed to . - - - - - Specifies formatting options for the . - - - - - No special formatting is applied. This is the default. - - - - - Causes child objects to be indented according to the and settings. - - - - - Provides an interface for using pooled arrays. - - The array type content. - - - - Rent an array from the pool. This array must be returned when it is no longer needed. - - The minimum required length of the array. The returned array may be longer. - The rented array from the pool. This array must be returned when it is no longer needed. - - - - Return an array to the pool. - - The array that is being returned. - - - - Provides an interface to enable a class to return line and position information. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - The current line number or 0 if no line information is available (for example, when returns false). - - - - Gets the current line position. - - The current line position or 0 if no line information is available (for example, when returns false). - - - - Instructs the how to serialize the collection. - - - - - Gets or sets a value indicating whether null items are allowed in the collection. - - true if null items are allowed in the collection; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with a flag indicating whether the array can contain null items. - - A flag indicating whether the array can contain null items. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to use the specified constructor when deserializing that object. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the id. - - The id. - - - - Gets or sets the title. - - The title. - - - - Gets or sets the description. - - The description. - - - - Gets or sets the collection's items converter. - - The collection's items converter. - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets a value that indicates whether to preserve object references. - - - true to keep object reference; otherwise, false. The default is false. - - - - - Gets or sets a value that indicates whether to preserve collection's items references. - - - true to keep collection's items object references; otherwise, false. The default is false. - - - - - Gets or sets the reference loop handling used when serializing the collection's items. - - The reference loop handling. - - - - Gets or sets the type name handling used when serializing the collection's items. - - The type name handling. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Provides methods for converting between .NET types and JSON types. - - - - - - - - Gets or sets a function that creates default . - Default settings are automatically used by serialization methods on , - and and on . - To serialize without using any default settings create a with - . - - - - - Represents JavaScript's boolean value true as a string. This field is read-only. - - - - - Represents JavaScript's boolean value false as a string. This field is read-only. - - - - - Represents JavaScript's null as a string. This field is read-only. - - - - - Represents JavaScript's undefined as a string. This field is read-only. - - - - - Represents JavaScript's positive infinity as a string. This field is read-only. - - - - - Represents JavaScript's negative infinity as a string. This field is read-only. - - - - - Represents JavaScript's NaN as a string. This field is read-only. - - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - The time zone handling when the date is converted to a string. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - The string escape handling. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Serializes the specified object to a JSON string. - - The object to serialize. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting. - - The object to serialize. - Indicates how the output should be formatted. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a collection of . - - The object to serialize. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting and a collection of . - - The object to serialize. - Indicates how the output should be formatted. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Deserializes the JSON to a .NET object. - - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to a .NET object using . - - The JSON to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The JSON to deserialize. - The of object being deserialized. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The type of the object to deserialize to. - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the given anonymous type. - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the given anonymous type using . - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The type of the object to deserialize to. - The JSON to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The type of the object to deserialize to. - The object to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The JSON to deserialize. - The type of the object to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The JSON to deserialize. - The type of the object to deserialize to. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Populates the object with values from the JSON string. - - The JSON to populate values from. - The target object to populate values onto. - - - - Populates the object with values from the JSON string using . - - The JSON to populate values from. - The target object to populate values onto. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - - - - Serializes the to a JSON string. - - The node to convert to JSON. - A JSON string of the . - - - - Serializes the to a JSON string using formatting. - - The node to convert to JSON. - Indicates how the output should be formatted. - A JSON string of the . - - - - Serializes the to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output should be formatted. - Omits writing the root object. - A JSON string of the . - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - and writes a Json.NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized . - - - - Converts an object to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can read JSON. - - true if this can read JSON; otherwise, false. - - - - Gets a value indicating whether this can write JSON. - - true if this can write JSON; otherwise, false. - - - - Instructs the to use the specified when serializing the member or class. - - - - - Gets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - - - - - Initializes a new instance of the class. - - Type of the . - - - - Initializes a new instance of the class. - - Type of the . - Parameter list to use when constructing the . Can be null. - - - - Represents a collection of . - - - - - Instructs the how to serialize the collection. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Instructs the to deserialize properties with no matching class member into the specified collection - and write values during serialization. - - - - - Gets or sets a value that indicates whether to write extension data when serializing the object. - - - true to write extension data when serializing the object; otherwise, false. The default is true. - - - - - Gets or sets a value that indicates whether to read extension data when deserializing the object. - - - true to read extension data when deserializing the object; otherwise, false. The default is true. - - - - - Initializes a new instance of the class. - - - - - Instructs the not to serialize the public field or public read/write property value. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the member serialization. - - The member serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified member serialization. - - The member serialization. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to always serialize the member with the specified name. - - - - - Gets or sets the used when serializing the property's collection items. - - The collection's items . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the null value handling used when serializing this property. - - The null value handling. - - - - Gets or sets the default value handling used when serializing this property. - - The default value handling. - - - - Gets or sets the reference loop handling used when serializing this property. - - The reference loop handling. - - - - Gets or sets the object creation handling used when deserializing this property. - - The object creation handling. - - - - Gets or sets the type name handling used when serializing this property. - - The type name handling. - - - - Gets or sets whether this property's value is serialized as a reference. - - Whether this property's value is serialized as a reference. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets a value indicating whether this property is required. - - - A value indicating whether this property is required. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified name. - - Name of the property. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Asynchronously reads the next JSON token from the source. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns true if the next token was read successfully; false if there are no more tokens to read. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously skips the children of the current token. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a []. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the []. This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Specifies the state of the reader. - - - - - A read method has not been called. - - - - - The end of the file has been reached successfully. - - - - - Reader is at a property. - - - - - Reader is at the start of an object. - - - - - Reader is in an object. - - - - - Reader is at the start of an array. - - - - - Reader is in an array. - - - - - The method has been called. - - - - - Reader has just read a value. - - - - - Reader is at the start of a constructor. - - - - - Reader is in a constructor. - - - - - An error occurred that prevents the read operation from continuing. - - - - - The end of the file has been reached successfully. - - - - - Gets the current reader state. - - The current reader state. - - - - Gets or sets a value indicating whether the source should be closed when this reader is closed. - - - true to close the source when this reader is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether multiple pieces of JSON content can - be read from a continuous stream without erroring. - - - true to support reading multiple pieces of JSON content; otherwise false. - The default is false. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - Gets or sets how time zones are handled when reading JSON. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how custom date formatted strings are parsed when reading JSON. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets the type of the current JSON token. - - - - - Gets the text value of the current JSON token. - - - - - Gets the .NET type for the current JSON token. - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Reads the next JSON token from the source. - - true if the next token was read successfully; false if there are no more tokens to read. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Skips the children of the current token. - - - - - Sets the current token. - - The new token. - - - - Sets the current token and value. - - The new token. - The value. - - - - Sets the current token and value. - - The new token. - The value. - A flag indicating whether the position index inside an array should be updated. - - - - Sets the state based on current token type. - - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Changes the reader's state to . - If is set to true, the source is also closed. - - - - - The exception thrown when an error occurs while reading JSON text. - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class - with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The line number indicating where the error occurred. - The line position indicating where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Instructs the to always serialize the member, and to require that the member has a value. - - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Serializes and deserializes objects into and from the JSON format. - The enables you to control how objects are encoded into JSON. - - - - - Occurs when the errors during serialization and deserialization. - - - - - Gets or sets the used by the serializer when resolving references. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how object references are preserved by the serializer. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) is handled. - - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - - - - Gets or sets how null values are handled during serialization and deserialization. - - - - - Gets or sets how default values are handled during serialization and deserialization. - - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets a collection that will be used during serialization. - - Collection that will be used during serialization. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Indicates how JSON text output is formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled during serialization and deserialization. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. - - - true if there will be a check for additional JSON content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Creates a new instance. - The will not use default settings - from . - - - A new instance. - The will not use default settings - from . - - - - - Creates a new instance using the specified . - The will not use default settings - from . - - The settings to be applied to the . - - A new instance using the specified . - The will not use default settings - from . - - - - - Creates a new instance. - The will use default settings - from . - - - A new instance. - The will use default settings - from . - - - - - Creates a new instance using the specified . - The will use default settings - from as well as the specified . - - The settings to be applied to the . - - A new instance using the specified . - The will use default settings - from as well as the specified . - - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Deserializes the JSON structure contained by the specified . - - The that contains the JSON structure to deserialize. - The being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The type of the object to deserialize. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is Auto to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Specifies the settings on a object. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) are handled. - - Reference loop handling. - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - Missing member handling. - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how null values are handled during serialization and deserialization. - - Null value handling. - - - - Gets or sets how default values are handled during serialization and deserialization. - - The default value handling. - - - - Gets or sets a collection that will be used during serialization. - - The converters. - - - - Gets or sets how object references are preserved by the serializer. - - The preserve references handling. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - The type name handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - The contract resolver. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets the used by the serializer when resolving references. - - The reference resolver. - - - - Gets or sets a function that creates the used by the serializer when resolving references. - - A function that creates the used by the serializer when resolving references. - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the error handler called during serialization and deserialization. - - The error handler called during serialization and deserialization. - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Indicates how JSON text output is formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled during serialization and deserialization. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets a value indicating whether there will be a check for additional content after deserializing an object. - - - true if there will be a check for additional content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Represents a reader that provides fast, non-cached, forward-only access to JSON text data. - - - - - Asynchronously reads the next JSON token from the source. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns true if the next token was read successfully; false if there are no more tokens to read. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a []. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the []. This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Initializes a new instance of the class with the specified . - - The containing the JSON data to read. - - - - Gets or sets the reader's character buffer pool. - - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - - The current line number or 0 if no line information is available (for example, returns false). - - - - - Gets the current line position. - - - The current line position or 0 if no line information is available (for example, returns false). - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the JSON value delimiter. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the specified end token. - - The end token to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously closes this writer. - If is set to true, the destination is also closed. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of the current JSON object or array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes indent characters. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes an indent space. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes raw JSON without changing the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a null value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the beginning of a JSON array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the beginning of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the start of a constructor with the given name. - - The name of the constructor. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes an undefined value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the given white space. - - The string of white space characters. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a [] value. - - The [] value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of an array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of a constructor. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Gets or sets the writer's character array pool. - - - - - Gets or sets how many s to write for each level in the hierarchy when is set to . - - - - - Gets or sets which character to use to quote attribute values. - - - - - Gets or sets which character to use for indenting when is set to . - - - - - Gets or sets a value indicating whether object names will be surrounded with quotes. - - - - - Initializes a new instance of the class using the specified . - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying . - - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the specified end token. - - The end token to write. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Specifies the type of JSON token. - - - - - This is returned by the if a read method has not been called. - - - - - An object start token. - - - - - An array start token. - - - - - A constructor start token. - - - - - An object property name. - - - - - A comment. - - - - - Raw JSON. - - - - - An integer. - - - - - A float. - - - - - A string. - - - - - A boolean. - - - - - A null token. - - - - - An undefined token. - - - - - An object end token. - - - - - An array end token. - - - - - A constructor end token. - - - - - A Date. - - - - - Byte data. - - - - - - Represents a reader that provides validation. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Sets an event handler for receiving schema validation errors. - - - - - Gets the text value of the current JSON token. - - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - - Gets the type of the current JSON token. - - - - - - Gets the .NET type for the current JSON token. - - - - - - Initializes a new instance of the class that - validates the content returned from the given . - - The to read from while validating. - - - - Gets or sets the schema. - - The schema. - - - - Gets the used to construct this . - - The specified in the constructor. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a []. - - - A [] or null if the next JSON token is null. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Asynchronously closes this writer. - If is set to true, the destination is also closed. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the specified end token. - - The end token to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes indent characters. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the JSON value delimiter. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes an indent space. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes raw JSON without changing the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the end of the current JSON object or array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the end of an array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the end of a constructor. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the end of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a null value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the beginning of a JSON array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the start of a constructor with the given name. - - The name of the constructor. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the beginning of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the current token. - - The to read the token from. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the token and its value. - - The to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - null can be passed to the method for tokens that don't have a value, e.g. . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a [] value. - - The [] value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes an undefined value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the given white space. - - The string of white space characters. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously ets the state of the . - - The being written. - The value being written. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Gets or sets a value indicating whether the destination should be closed when this writer is closed. - - - true to close the destination when this writer is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. - - - true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. - - - - - Gets the top. - - The top. - - - - Gets the state of the writer. - - - - - Gets the path of the writer. - - - - - Gets or sets a value indicating how JSON text output should be formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled when writing JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written to JSON text. - - - - - Gets or sets how and values are formatted when writing JSON text. - - - - - Gets or sets the culture used when writing JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the destination and also flushes the destination. - - - - - Closes this writer. - If is set to true, the destination is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the end of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the end of an array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end constructor. - - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes the end of the current JSON object or array. - - - - - Writes the current token and its children. - - The to read the token from. - - - - Writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - - - - Writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - null can be passed to the method for tokens that don't have a value, e.g. . - - - - - Writes the token. - - The to write. - - - - Writes the specified end token. - - The end token to write. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON without changing the writer's state. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Sets the state of the . - - The being written. - The value being written. - - - - The exception thrown when an error occurs while writing JSON text. - - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class - with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Specifies how JSON comments are handled when loading JSON. - - - - - Ignore comments. - - - - - Load comments as a with type . - - - - - Specifies how line information is handled when loading JSON. - - - - - Ignore line information. - - - - - Load line information. - - - - - Contains the LINQ to JSON extension methods. - - - - - Returns a collection of tokens that contains the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the descendants of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, and the descendants of every token in the source collection. - - - - Returns a collection of child properties of every object in the source collection. - - An of that contains the source collection. - An of that contains the properties of every object in the source collection. - - - - Returns a collection of child values of every object in the source collection with the given key. - - An of that contains the source collection. - The token key. - An of that contains the values of every token in the source collection with the given key. - - - - Returns a collection of child values of every object in the source collection. - - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child values of every object in the source collection with the given key. - - The type to convert the values to. - An of that contains the source collection. - The token key. - An that contains the converted values of every token in the source collection with the given key. - - - - Returns a collection of converted child values of every object in the source collection. - - The type to convert the values to. - An of that contains the source collection. - An that contains the converted values of every token in the source collection. - - - - Converts the value. - - The type to convert the value to. - A cast as a of . - A converted value. - - - - Converts the value. - - The source collection type. - The type to convert the value to. - A cast as a of . - A converted value. - - - - Returns a collection of child tokens of every array in the source collection. - - The source collection type. - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child tokens of every array in the source collection. - - An of that contains the source collection. - The type to convert the values to. - The source collection type. - An that contains the converted values of every token in the source collection. - - - - Returns the input typed as . - - An of that contains the source collection. - The input typed as . - - - - Returns the input typed as . - - The source collection type. - An of that contains the source collection. - The input typed as . - - - - Represents a collection of objects. - - The type of token. - - - - Gets the of with the specified key. - - - - - - Represents a JSON array. - - - - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous load. The property contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous load. The property contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads an from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the at the specified index. - - - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Inserts an item to the at the specified index. - - The zero-based index at which should be inserted. - The object to insert into the . - - is not a valid index in the . - - - - - Removes the item at the specified index. - - The zero-based index of the item to remove. - - is not a valid index in the . - - - - - Returns an enumerator that iterates through the collection. - - - A of that can be used to iterate through the collection. - - - - - Adds an item to the . - - The object to add to the . - - - - Removes all items from the . - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Copies the elements of the to an array, starting at a particular array index. - - The array. - Index of the array. - - - - Gets a value indicating whether the is read-only. - - true if the is read-only; otherwise, false. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - - - Represents a JSON constructor. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets or sets the name of this constructor. - - The constructor name. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name. - - The constructor name. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a token that can contain other tokens. - - - - - Occurs when the items list of the collection has changed, or the collection is reset. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Raises the event. - - The instance containing the event data. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Get the first child token of this token. - - - A containing the first child token of the . - - - - - Get the last child token of this token. - - - A containing the last child token of the . - - - - - Returns a collection of the child tokens of this token, in document order. - - - An of containing the child tokens of this , in document order. - - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - - A containing the child values of this , in document order. - - - - - Returns a collection of the descendant tokens for this token in document order. - - An of containing the descendant tokens of the . - - - - Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. - - An of containing this token, and all the descendant tokens of the . - - - - Adds the specified content as children of this . - - The content to be added. - - - - Adds the specified content as the first children of this . - - The content to be added. - - - - Creates a that can be used to add tokens to the . - - A that is ready to have content written to it. - - - - Replaces the child nodes of this token with the specified content. - - The content. - - - - Removes the child nodes from this token. - - - - - Merge the specified content into this . - - The content to be merged. - - - - Merge the specified content into this using . - - The content to be merged. - The used to merge the content. - - - - Gets the count of child JSON tokens. - - The count of child JSON tokens. - - - - Represents a collection of objects. - - The type of token. - - - - An empty collection of objects. - - - - - Initializes a new instance of the struct. - - The enumerable. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Gets the of with the specified key. - - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Represents a JSON object. - - - - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Occurs when a property value changes. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Gets the node type for this . - - The type. - - - - Gets an of of this object's properties. - - An of of this object's properties. - - - - Gets a the specified name. - - The property name. - A with the specified name or null. - - - - Gets a of of this object's property values. - - A of of this object's property values. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the with the specified property name. - - - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified property name. - - Name of the property. - The with the specified property name. - - - - Gets the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - One of the enumeration values that specifies how the strings will be compared. - The with the specified property name. - - - - Tries to get the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - The value. - One of the enumeration values that specifies how the strings will be compared. - true if a value was successfully retrieved; otherwise, false. - - - - Adds the specified property name. - - Name of the property. - The value. - - - - Removes the property with the specified name. - - Name of the property. - true if item was successfully removed; otherwise, false. - - - - Tries to get the with the specified property name. - - Name of the property. - The value. - true if a value was successfully retrieved; otherwise, false. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Represents a JSON property. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the property name. - - The property name. - - - - Gets or sets the property value. - - The property value. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a raw JSON string. - - - - - Asynchronously creates an instance of with the content of the reader's current token. - - The reader. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns an instance of with the content of the reader's current token. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class. - - The raw json. - - - - Creates an instance of with the content of the reader's current token. - - The reader. - An instance of with the content of the reader's current token. - - - - Specifies the settings used when loading JSON. - - - - - Initializes a new instance of the class. - - - - - Gets or sets how JSON comments are handled when loading JSON. - - The JSON comment handling. - - - - Gets or sets how JSON line info is handled when loading JSON. - - The JSON line info handling. - - - - Specifies the settings used when merging JSON. - - - - - Gets or sets the method used when merging JSON arrays. - - The method used when merging JSON arrays. - - - - Gets or sets how null value properties are merged. - - How null value properties are merged. - - - - Represents an abstract JSON token. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Writes this token to a asynchronously. - - A into which this method will write. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously creates a from a . - - An positioned at the token to read into this . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains - the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - An positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains - the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - A positioned at the token to read into this . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - A positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Gets a comparer that can compare two tokens for value equality. - - A that can compare two nodes for value equality. - - - - Gets or sets the parent. - - The parent. - - - - Gets the root of this . - - The root of this . - - - - Gets the node type for this . - - The type. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Compares the values of two tokens, including the values of all descendant tokens. - - The first to compare. - The second to compare. - true if the tokens are equal; otherwise false. - - - - Gets the next sibling token of this node. - - The that contains the next sibling token. - - - - Gets the previous sibling token of this node. - - The that contains the previous sibling token. - - - - Gets the path of the JSON token. - - - - - Adds the specified content immediately after this token. - - A content object that contains simple content or a collection of content objects to be added after this token. - - - - Adds the specified content immediately before this token. - - A content object that contains simple content or a collection of content objects to be added before this token. - - - - Returns a collection of the ancestor tokens of this token. - - A collection of the ancestor tokens of this token. - - - - Returns a collection of tokens that contain this token, and the ancestors of this token. - - A collection of tokens that contain this token, and the ancestors of this token. - - - - Returns a collection of the sibling tokens after this token, in document order. - - A collection of the sibling tokens after this tokens, in document order. - - - - Returns a collection of the sibling tokens before this token, in document order. - - A collection of the sibling tokens before this token, in document order. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets the with the specified key converted to the specified type. - - The type to convert the token to. - The token key. - The converted token value. - - - - Get the first child token of this token. - - A containing the first child token of the . - - - - Get the last child token of this token. - - A containing the last child token of the . - - - - Returns a collection of the child tokens of this token, in document order. - - An of containing the child tokens of this , in document order. - - - - Returns a collection of the child tokens of this token, in document order, filtered by the specified type. - - The type to filter the child tokens on. - A containing the child tokens of this , in document order. - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - A containing the child values of this , in document order. - - - - Removes this token from its parent. - - - - - Replaces this token with the specified token. - - The value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Returns the indented JSON for this token. - - - The indented JSON for this token. - - - - - Returns the JSON for this token using the given formatting and converters. - - Indicates how the output should be formatted. - A collection of s which will be used when writing the token. - The JSON for this token using the given formatting and converters. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to []. - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from [] to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Creates a for this token. - - A that can be used to read this token and its descendants. - - - - Creates a from an object. - - The object that will be used to create . - A with the value of the specified object. - - - - Creates a from an object using the specified . - - The object that will be used to create . - The that will be used when reading the object. - A with the value of the specified object. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - An positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - Creates a from a . - - A positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A , or null. - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - A . - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - An of that contains the selected elements. - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - An of that contains the selected elements. - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Creates a new instance of the . All child tokens are recursively cloned. - - A new instance of the . - - - - Adds an object to the annotation list of this . - - The annotation to add. - - - - Get the first annotation object of the specified type from this . - - The type of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets the first annotation object of the specified type from this . - - The of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets a collection of annotations of the specified type for this . - - The type of the annotations to retrieve. - An that contains the annotations for this . - - - - Gets a collection of annotations of the specified type for this . - - The of the annotations to retrieve. - An of that contains the annotations that match the specified type for this . - - - - Removes the annotations of the specified type from this . - - The type of annotations to remove. - - - - Removes the annotations of the specified type from this . - - The of annotations to remove. - - - - Compares tokens to determine whether they are equal. - - - - - Determines whether the specified objects are equal. - - The first object of type to compare. - The second object of type to compare. - - true if the specified objects are equal; otherwise, false. - - - - - Returns a hash code for the specified object. - - The for which a hash code is to be returned. - A hash code for the specified object. - The type of is a reference type and is null. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Gets the at the reader's current position. - - - - - Initializes a new instance of the class. - - The token to read from. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Gets the path of the current JSON token. - - - - - Specifies the type of token. - - - - - No token type has been set. - - - - - A JSON object. - - - - - A JSON array. - - - - - A JSON constructor. - - - - - A JSON object property. - - - - - A comment. - - - - - An integer value. - - - - - A float value. - - - - - A string value. - - - - - A boolean value. - - - - - A null value. - - - - - An undefined value. - - - - - A date value. - - - - - A raw JSON value. - - - - - A collection of bytes value. - - - - - A Guid value. - - - - - A Uri value. - - - - - A TimeSpan value. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets the at the writer's current position. - - - - - Gets the token being written. - - The token being written. - - - - Initializes a new instance of the class writing to the given . - - The container being written to. - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the underlying . - - - - - Closes this writer. - If is set to true, the JSON is auto-completed. - - - Setting to true has no additional effect, since the underlying is a type that cannot be closed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end. - - The token. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes a value. - An error will be raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Represents a value in JSON (string, integer, date, etc). - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Creates a comment with the given value. - - The value. - A comment with the given value. - - - - Creates a string with the given value. - - The value. - A string with the given value. - - - - Creates a null value. - - A null value. - - - - Creates a undefined value. - - A undefined value. - - - - Gets the node type for this . - - The type. - - - - Gets or sets the underlying token value. - - The underlying token value. - - - - Writes this token to a . - - A into which this method will write. - A collection of s which will be used when writing the token. - - - - Indicates whether the current object is equal to another object of the same type. - - - true if the current object is equal to the parameter; otherwise, false. - - An object to compare with this object. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format provider. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - The format provider. - - A that represents this instance. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. - - An object to compare with this instance. - - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: - Value - Meaning - Less than zero - This instance is less than . - Zero - This instance is equal to . - Greater than zero - This instance is greater than . - - - is not of the same type as this instance. - - - - - Specifies how JSON arrays are merged together. - - - - Concatenate arrays. - - - Union arrays, skipping items that already exist. - - - Replace all array items. - - - Merge array items together, matched by index. - - - - Specifies how null value properties are merged. - - - - - The content's null value properties will be ignored during merging. - - - - - The content's null value properties will be merged. - - - - - Specifies the member serialization options for the . - - - - - All public members are serialized by default. Members can be excluded using or . - This is the default member serialization mode. - - - - - Only members marked with or are serialized. - This member serialization mode can also be set by marking the class with . - - - - - All public and private fields are serialized. Members can be excluded using or . - This member serialization mode can also be set by marking the class with - and setting IgnoreSerializableAttribute on to false. - - - - - Specifies metadata property handling options for the . - - - - - Read metadata properties located at the start of a JSON object. - - - - - Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. - - - - - Do not try to read metadata properties. - - - - - Specifies missing member handling options for the . - - - - - Ignore a missing member and do not attempt to deserialize it. - - - - - Throw a when a missing member is encountered during deserialization. - - - - - Specifies null value handling options for the . - - - - - - - - - Include null values when serializing and deserializing objects. - - - - - Ignore null values when serializing and deserializing objects. - - - - - Specifies how object creation is handled by the . - - - - - Reuse existing objects, create new objects when needed. - - - - - Only reuse existing objects. - - - - - Always create new objects. - - - - - Specifies reference handling options for the . - Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . - - - - - - - - Do not preserve references when serializing types. - - - - - Preserve references when serializing into a JSON object structure. - - - - - Preserve references when serializing into a JSON array structure. - - - - - Preserve references when serializing. - - - - - Specifies reference loop handling options for the . - - - - - Throw a when a loop is encountered. - - - - - Ignore loop references and do not serialize. - - - - - Serialize loop references. - - - - - Indicating whether a property is required. - - - - - The property is not required. The default state. - - - - - The property must be defined in JSON but can be a null value. - - - - - The property must be defined in JSON and cannot be a null value. - - - - - The property is not required but it cannot be a null value. - - - - - - Contains the JSON schema extension methods. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - true if the specified is valid; otherwise, false. - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - When this method returns, contains any error messages generated while validating. - - true if the specified is valid; otherwise, false. - - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - The validation event handler. - - - - - An in-memory representation of a JSON Schema. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the id. - - - - - Gets or sets the title. - - - - - Gets or sets whether the object is required. - - - - - Gets or sets whether the object is read-only. - - - - - Gets or sets whether the object is visible to users. - - - - - Gets or sets whether the object is transient. - - - - - Gets or sets the description of the object. - - - - - Gets or sets the types of values allowed by the object. - - The type. - - - - Gets or sets the pattern. - - The pattern. - - - - Gets or sets the minimum length. - - The minimum length. - - - - Gets or sets the maximum length. - - The maximum length. - - - - Gets or sets a number that the value should be divisible by. - - A number that the value should be divisible by. - - - - Gets or sets the minimum. - - The minimum. - - - - Gets or sets the maximum. - - The maximum. - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). - - A flag indicating whether the value can not equal the number defined by the minimum attribute (). - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). - - A flag indicating whether the value can not equal the number defined by the maximum attribute (). - - - - Gets or sets the minimum number of items. - - The minimum number of items. - - - - Gets or sets the maximum number of items. - - The maximum number of items. - - - - Gets or sets the of items. - - The of items. - - - - Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . - - - true if items are validated using their array position; otherwise, false. - - - - - Gets or sets the of additional items. - - The of additional items. - - - - Gets or sets a value indicating whether additional items are allowed. - - - true if additional items are allowed; otherwise, false. - - - - - Gets or sets whether the array items must be unique. - - - - - Gets or sets the of properties. - - The of properties. - - - - Gets or sets the of additional properties. - - The of additional properties. - - - - Gets or sets the pattern properties. - - The pattern properties. - - - - Gets or sets a value indicating whether additional properties are allowed. - - - true if additional properties are allowed; otherwise, false. - - - - - Gets or sets the required property if this property is present. - - The required property if this property is present. - - - - Gets or sets the a collection of valid enum values allowed. - - A collection of valid enum values allowed. - - - - Gets or sets disallowed types. - - The disallowed types. - - - - Gets or sets the default value. - - The default value. - - - - Gets or sets the collection of that this schema extends. - - The collection of that this schema extends. - - - - Gets or sets the format. - - The format. - - - - Initializes a new instance of the class. - - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The object representing the JSON Schema. - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The to use when resolving schema references. - The object representing the JSON Schema. - - - - Load a from a string that contains JSON Schema. - - A that contains JSON Schema. - A populated from the string that contains JSON Schema. - - - - Load a from a string that contains JSON Schema using the specified . - - A that contains JSON Schema. - The resolver. - A populated from the string that contains JSON Schema. - - - - Writes this schema to a . - - A into which this method will write. - - - - Writes this schema to a using the specified . - - A into which this method will write. - The resolver used. - - - - Returns a that represents the current . - - - A that represents the current . - - - - - - Returns detailed information about the schema exception. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - - Generates a from a specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets how undefined schemas are handled by the serializer. - - - - - Gets or sets the contract resolver. - - The contract resolver. - - - - Generate a from the specified type. - - The type to generate a from. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - - Resolves from an id. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the loaded schemas. - - The loaded schemas. - - - - Initializes a new instance of the class. - - - - - Gets a for the specified reference. - - The id. - A for the specified reference. - - - - - The value types allowed by the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - No type specified. - - - - - String type. - - - - - Float type. - - - - - Integer type. - - - - - Boolean type. - - - - - Object type. - - - - - Array type. - - - - - Null type. - - - - - Any type. - - - - - - Specifies undefined schema Id handling options for the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Do not infer a schema Id. - - - - - Use the .NET type name as the schema Id. - - - - - Use the assembly qualified .NET type name as the schema Id. - - - - - - Returns detailed information related to the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the associated with the validation error. - - The JsonSchemaException associated with the validation error. - - - - Gets the path of the JSON location where the validation error occurred. - - The path of the JSON location where the validation error occurred. - - - - Gets the text description corresponding to the validation error. - - The text description. - - - - - Represents the callback method that will handle JSON schema validation events and the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Allows users to control class loading and mandate what class to load. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object - The type of the object the formatter creates a new instance of. - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - A camel case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Resolves member mappings for a type, camel casing property names. - - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used by to resolve a for a given . - - - - - Gets a value indicating whether members are being get and set using dynamic code generation. - This value is determined by the runtime permissions available. - - - true if using dynamic code generation; otherwise, false. - - - - - Gets or sets a value indicating whether compiler generated members should be serialized. - - - true if serialized compiler generated members; otherwise, false. - - - - - Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. - - The naming strategy used to resolve how property names and dictionary keys are serialized. - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Gets the serializable members for the type. - - The type to get serializable members for. - The serializable members for the type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates the constructor parameters. - - The constructor to create properties for. - The type's member properties. - Properties for the given . - - - - Creates a for the given . - - The matching member property. - The constructor parameter. - A created for the given . - - - - Resolves the default for the contract. - - Type of the object. - The contract's default . - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Determines which contract type is created for the given type. - - Type of the object. - A for the given type. - - - - Creates properties for the given . - - The type to create properties for. - /// The member serialization mode for the type. - Properties for the given . - - - - Creates the used by the serializer to get and set values from a member. - - The member. - The used by the serializer to get and set values from a member. - - - - Creates a for the given . - - The member's parent . - The member to create a for. - A created for the given . - - - - Resolves the name of the property. - - Name of the property. - Resolved name of the property. - - - - Resolves the name of the extension data. By default no changes are made to extension data names. - - Name of the extension data. - Resolved name of the extension data. - - - - Resolves the key of the dictionary. By default is used to resolve dictionary keys. - - Key of the dictionary. - Resolved key of the dictionary. - - - - Gets the resolved name of the property. - - Name of the property. - Name of the property. - - - - The default naming strategy. Property names and dictionary keys are unchanged. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - The default serialization binder used when resolving and loading classes from type names. - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - The type of the object the formatter creates a new instance of. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Provides information surrounding an error. - - - - - Gets the error. - - The error. - - - - Gets the original object that caused the error. - - The original object that caused the error. - - - - Gets the member that caused the error. - - The member that caused the error. - - - - Gets the path of the JSON location where the error occurred. - - The path of the JSON location where the error occurred. - - - - Gets or sets a value indicating whether this is handled. - - true if handled; otherwise, false. - - - - Provides data for the Error event. - - - - - Gets the current object the error event is being raised against. - - The current object the error event is being raised against. - - - - Gets the error context. - - The error context. - - - - Initializes a new instance of the class. - - The current object. - The error context. - - - - Get and set values for a using dynamic methods. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Provides methods to get attributes. - - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Used by to resolve a for a given . - - - - - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used to resolve references when serializing and deserializing JSON by the . - - - - - Resolves a reference to its object. - - The serialization context. - The reference to resolve. - The object that was resolved from the reference. - - - - Gets the reference for the specified object. - - The serialization context. - The object to get a reference for. - The reference to the object. - - - - Determines whether the specified object is referenced. - - The serialization context. - The object to test for a reference. - - true if the specified object is referenced; otherwise, false. - - - - - Adds a reference to the specified object. - - The serialization context. - The reference. - The object to reference. - - - - Allows users to control class loading and mandate what class to load. - - - - - When implemented, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object - The type of the object the formatter creates a new instance of. - - - - When implemented, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - The that will be used to filter the trace messages passed to the writer. - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Provides methods to get and set values. - - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Contract details for a used by the . - - - - - Gets the of the collection items. - - The of the collection items. - - - - Gets a value indicating whether the collection type is a multidimensional array. - - true if the collection type is a multidimensional array; otherwise, false. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the collection values. - - true if the creator has a parameter with the collection values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the default collection items . - - The converter. - - - - Gets or sets a value indicating whether the collection items preserve object references. - - true if collection items preserve object references; otherwise, false. - - - - Gets or sets the collection item reference loop handling. - - The reference loop handling. - - - - Gets or sets the collection item type name handling. - - The type name handling. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Handles serialization callback events. - - The object that raised the callback event. - The streaming context. - - - - Handles serialization error callback events. - - The object that raised the callback event. - The streaming context. - The error context. - - - - Sets extension data for an object during deserialization. - - The object to set extension data on. - The extension data key. - The extension data value. - - - - Gets extension data for an object during serialization. - - The object to set extension data on. - - - - Contract details for a used by the . - - - - - Gets the underlying type for the contract. - - The underlying type for the contract. - - - - Gets or sets the type created during deserialization. - - The type created during deserialization. - - - - Gets or sets whether this type contract is serialized as a reference. - - Whether this type contract is serialized as a reference. - - - - Gets or sets the default for this contract. - - The converter. - - - - Gets or sets all methods called immediately after deserialization of the object. - - The methods called immediately after deserialization of the object. - - - - Gets or sets all methods called during deserialization of the object. - - The methods called during deserialization of the object. - - - - Gets or sets all methods called after serialization of the object graph. - - The methods called after serialization of the object graph. - - - - Gets or sets all methods called before serialization of the object. - - The methods called before serialization of the object. - - - - Gets or sets all method called when an error is thrown during the serialization of the object. - - The methods called when an error is thrown during the serialization of the object. - - - - Gets or sets the default creator method used to create the object. - - The default creator method used to create the object. - - - - Gets or sets a value indicating whether the default creator is non-public. - - true if the default object creator is non-public; otherwise, false. - - - - Contract details for a used by the . - - - - - Gets or sets the dictionary key resolver. - - The dictionary key resolver. - - - - Gets the of the dictionary keys. - - The of the dictionary keys. - - - - Gets the of the dictionary values. - - The of the dictionary values. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the dictionary values. - - true if the creator has a parameter with the dictionary values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets the object's properties. - - The object's properties. - - - - Gets or sets the property name resolver. - - The property name resolver. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the object member serialization. - - The member object serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Gets the object's properties. - - The object's properties. - - - - Gets a collection of instances that define the parameters used with . - - - - - Gets or sets the function used to create the object. When set this function will override . - This function is called with a collection of arguments which are defined by the collection. - - The function used to create the object. - - - - Gets or sets the extension data setter. - - - - - Gets or sets the extension data getter. - - - - - Gets or sets the extension data value type. - - - - - Gets or sets the extension data name resolver. - - The extension data name resolver. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Maps a JSON property to a .NET member or constructor parameter. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the type that declared this property. - - The type that declared this property. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets the name of the underlying member or parameter. - - The name of the underlying member or parameter. - - - - Gets the that will get and set the during serialization. - - The that will get and set the during serialization. - - - - Gets or sets the for this property. - - The for this property. - - - - Gets or sets the type of the property. - - The type of the property. - - - - Gets or sets the for the property. - If set this converter takes precedence over the contract converter for the property type. - - The converter. - - - - Gets or sets the member converter. - - The member converter. - - - - Gets or sets a value indicating whether this is ignored. - - true if ignored; otherwise, false. - - - - Gets or sets a value indicating whether this is readable. - - true if readable; otherwise, false. - - - - Gets or sets a value indicating whether this is writable. - - true if writable; otherwise, false. - - - - Gets or sets a value indicating whether this has a member attribute. - - true if has a member attribute; otherwise, false. - - - - Gets the default value. - - The default value. - - - - Gets or sets a value indicating whether this is required. - - A value indicating whether this is required. - - - - Gets or sets a value indicating whether this property preserves object references. - - - true if this instance is reference; otherwise, false. - - - - - Gets or sets the property null value handling. - - The null value handling. - - - - Gets or sets the property default value handling. - - The default value handling. - - - - Gets or sets the property reference loop handling. - - The reference loop handling. - - - - Gets or sets the property object creation handling. - - The object creation handling. - - - - Gets or sets or sets the type name handling. - - The type name handling. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets a predicate used to determine whether the property should be deserialized. - - A predicate used to determine whether the property should be deserialized. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets an action used to set whether the property has been deserialized. - - An action used to set whether the property has been deserialized. - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the converter used when serializing the property's collection items. - - The collection's items converter. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - A collection of objects. - - - - - Initializes a new instance of the class. - - The type. - - - - When implemented in a derived class, extracts the key from the specified element. - - The element from which to extract the key. - The key for the specified element. - - - - Adds a object. - - The property to add to the collection. - - - - Gets the closest matching object. - First attempts to get an exact case match of and then - a case insensitive match. - - Name of the property. - A matching property if found. - - - - Gets a property by property name. - - The name of the property to get. - Type property name string comparison. - A matching property if found. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Lookup and create an instance of the type described by the argument. - - The type to create. - Optional arguments to pass to an initializing constructor of the JsonConverter. - If null, the default constructor is used. - - - - Represents a trace writer that writes to memory. When the trace message limit is - reached then old trace messages will be removed as new messages are added. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Initializes a new instance of the class. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Returns an enumeration of the most recent trace messages. - - An enumeration of the most recent trace messages. - - - - Returns a of the most recent trace messages. - - - A of the most recent trace messages. - - - - - A base class for resolving how property names and dictionary keys are serialized. - - - - - A flag indicating whether dictionary keys should be processed. - Defaults to false. - - - - - A flag indicating whether extension data names should be processed. - Defaults to false. - - - - - A flag indicating whether explicitly specified property names, - e.g. a property name customized with a , should be processed. - Defaults to false. - - - - - Gets the serialized name for a given property name. - - The initial property name. - A flag indicating whether the property has had a name explicitly specified. - The serialized property name. - - - - Gets the serialized name for a given extension data name. - - The initial extension data name. - The serialized extension data name. - - - - Gets the serialized key for a given dictionary key. - - The initial dictionary key. - The serialized dictionary key. - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Represents a method that constructs an object. - - The object type to create. - - - - When applied to a method, specifies that the method is called when an error occurs serializing an object. - - - - - Provides methods to get attributes from a , , or . - - - - - Initializes a new instance of the class. - - The instance to get attributes for. This parameter should be a , , or . - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Get and set values for a using reflection. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - A snake case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Specifies how strings are escaped when writing JSON text. - - - - - Only control characters (e.g. newline) are escaped. - - - - - All non-ASCII and control characters (e.g. newline) are escaped. - - - - - HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. - - - - - Specifies what messages to output for the class. - - - - - Output no tracing and debugging messages. - - - - - Output error-handling messages. - - - - - Output warnings and error-handling messages. - - - - - Output informational messages, warnings, and error-handling messages. - - - - - Output all debugging and tracing messages. - - - - - Indicates the method that will be used during deserialization for locating and loading assemblies. - - - - - In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. - - - - - In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. - - - - - Specifies type name handling options for the . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Do not include the .NET type name when serializing types. - - - - - Include the .NET type name when serializing into a JSON object structure. - - - - - Include the .NET type name when serializing into a JSON array structure. - - - - - Always include the .NET type name when serializing. - - - - - Include the .NET type name when the type of the object being serialized is not the same as its declared type. - Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON - you must specify a root type object with - or . - - - - - Determines whether the collection is null or empty. - - The collection. - - true if the collection is null or empty; otherwise, false. - - - - - Adds the elements of the specified collection to the specified generic . - - The list to add to. - The collection of elements to add. - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert or cast the value to. - - The converted type. If conversion was unsuccessful, the initial value - is returned if assignable to the target type. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic that returns a result - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Returns a Restrictions object which includes our current restrictions merged - with a restriction limiting our type - - - - - Gets a dictionary of the names and values of an type. - - - - - - Gets a dictionary of the names and values of an Enum type. - - The enum type to get names and values for. - - - - - List of primitive types which can be widened. - - - - - Widening masks for primitive types above. - Index of the value in this array defines a type we're widening, - while the bits in mask define types it can be widened to (including itself). - - For example, value at index 0 defines a bool type, and it only has bit 0 set, - i.e. bool values can be assigned only to bool. - - - - - Checks if value of primitive type can be - assigned to parameter of primitive type . - - Source primitive type. - Target primitive type. - true if source type can be widened to target type, false otherwise. - - - - Checks if a set of values with given can be used - to invoke a method with specified . - - Method parameters. - Argument types. - Try to pack extra arguments into the last parameter when it is marked up with . - true if method can be called with given arguments, false otherwise. - - - - Compares two sets of parameters to determine - which one suits better for given argument types. - - - - - Returns a best method overload for given argument . - - List of method candidates. - Argument types. - Best method overload, or null if none matched. - - - - Gets the type of the typed collection's items. - - The type. - The type of the typed collection's items. - - - - Gets the member's underlying type. - - The member. - The underlying type of the member. - - - - Determines whether the member is an indexed property. - - The member. - - true if the member is an indexed property; otherwise, false. - - - - - Determines whether the property is an indexed property. - - The property. - - true if the property is an indexed property; otherwise, false. - - - - - Gets the member's value on the object. - - The member. - The target object. - The member's value on the object. - - - - Sets the member's value on the target object. - - The member. - The target. - The value. - - - - Determines whether the specified MemberInfo can be read. - - The MemberInfo to determine whether can be read. - /// if set to true then allow the member to be gotten non-publicly. - - true if the specified MemberInfo can be read; otherwise, false. - - - - - Determines whether the specified MemberInfo can be set. - - The MemberInfo to determine whether can be set. - if set to true then allow the member to be set non-publicly. - if set to true then allow the member to be set if read-only. - - true if the specified MemberInfo can be set; otherwise, false. - - - - - Builds a string. Unlike this class lets you reuse its internal buffer. - - - - - Determines whether the string is all white space. Empty string will return false. - - The string to test whether it is all white space. - - true if the string is all white space; otherwise, false. - - - - - Specifies the state of the . - - - - - An exception has been thrown, which has left the in an invalid state. - You may call the method to put the in the Closed state. - Any other method calls result in an being thrown. - - - - - The method has been called. - - - - - An object is being written. - - - - - An array is being written. - - - - - A constructor is being written. - - - - - A property is being written. - - - - - A write method has not been called. - - - - - Indicates the method that will be used during deserialization for locating and loading assemblies. - - - - - In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the method is used to load the assembly. - - - - - In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The is used to load the assembly. - - - - diff --git a/trunk/packages/Newtonsoft.Json.10.0.3/lib/netstandard1.3/Newtonsoft.Json.dll b/trunk/packages/Newtonsoft.Json.10.0.3/lib/netstandard1.3/Newtonsoft.Json.dll deleted file mode 100644 index 96725e64dde6311910c3cb322ccad38efd4ca268..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639488 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 z 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�TsJ&gT;+PW_;cZ5aJ@Q1$`$gm4E)jpAYv6dr!;;V$#36B@o z4NnkP`5q_!TzD*8ug;M2#quTj5-@Sw@CoR0;+7HH8I#0*YSP$;Cyo8qq_Ou;8vFH0 zV?Q%#>|>M0es$0v<_VA9w}Cyl*#(%7#|8vF4{W4}CU?B^zp{l=uRcTF1mg-K)Y znKbsnNn?4SaAJ%7^rW$mOd5ONq_Gc88vD^nV?RG>>^CQky?fHwFHRc!u}NdUG->P; zlg55>(%7%XvEz&tJ`zWcH_Ui4j@>b4w512|aiECj?=g08<=wq#CdZB)uz$^SDI8jG zoji|cE}ld19E0b?2_BB8H{s!WdxTTI1VfsX+)T#Er6=~yFg|zdx6nydr`2vpH>BUv zyaL_mHrthNuBGH6d&y4uD=4)Yf|&O!;4L*Ny@p_eahV7<_=-n*IQ=M(jP(z6E$bfi z2mE#r_uM%$;;4utqBVHf?_vMIx*pH1c)o-Ol39PjgZZE}uLZBq#=}t&ZbMmD;K7Ek z^>I93#PbV0&*8ym+^ixVyxzgW&3udBDY+ca`|;d^=i7L20@K0?1n3>3E<6Y0xd6{) zc;1L-;BEN9DCTR@eIFwEaw{DQ7)FYC*&g;ga@arV^-{s1im>}hLD%7jpc62B7PJZU z=*vKUd=gZ{9fpV~ktVE7Y??u_J+PH$@}IL)9x zBIp|%=mZSkNA&D;cZ4tW?(K9_!6t)`^IaIKoY=r8U>H3(@lzu?lv8hKDixe$@ShO; zgBth*41ZGjdm}k)JN0%#InXUfoVyHJCKW!s9EHn0Ywxxn&4SrGZ&3KXg2^jvK;c-$U?agst)rF#H|GpE8nLMf@qL;An&2 zG!!L&0){`M`JFnFL)+2YIW-l$%HS^${(2Wr@=JgmY(;*j>B-^FX{kVO&yAfIs8I7s z^jS@$b0l{u6Y1PV$4np4%wSOmnmt$3)kY_f5kBJf5lk5}W03y?;A}%%(2H^FRd7Fs z>b~ROn7#TNF)G_Q>Vn^wpUSpYaCbo#{Jh``h>6zxmRM_Q zy5`4oUtfTH{F`$vB<@|1FJ`ahqSt~aj&ULHZIIx$1%()RR0G%(15aoGXT(4pT#U$P z#=v76z}^^mQUf?^JmBmYh;IZNo;yXG7edcF{{_ABjF;5{cRtR3i3fm|2p}HLA)rb< zH(mb^h^kmW$JtJLgBy|0tS;|VTpo#y&#R%nTOVh0t!szgTCTB8!NU&EGfxICAI9-P zA0nM%c?#D)drC7(GfTatS$LOK$DYwM9(Z->Jm>+^b*=CrZdVgO|5Xn zW%x6q6-mvc0=1%(b4y#C{4&=mEHz)XMrSC;?j#O4HdQ|Xj>G}SY2eHl%}3&Z;}Yj; zNvmfx4&&@#2dkspSxYtejlq>T@bid68xhYMyPgJMLDgF*(|L&@q;!YvzX@5w*N~|! zILw$mBcxn-4Pt;q;k=e~v= z6{HFeKF36z;cHN!AxogdIciGAN+?=vsu8FZl|$4O)6Fj(z^Ua1I{_Akg7+|$22Fwj zk)KB-PM?XyBe|JmPiw=m>W1mzbqfAP$Yupwb?;+#7e+Vcpsa%bBL$h;asc&2Aahd= zpcx8+*5!&Cl^k#_kef2Hp6cJMT(BYkF8bDwUeF3|BpCVUI#!QOP2gaOtXn;TkyHvH zRz{A}%6O0oYZ&m8;a-d9cX-eQ$jj{)z^&lnQJPhF4#aaco&oHmV5NT-6S9Nr=p

    Hygu$VKpg#Oq2G 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%0ABh8@nld=dN@AE>h_k7XDfZvX%i)&TYwoFtzD^ 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%0Arw!wKpJvd(oA1l=z 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

  3. 6^pu4H`~I*|0ihbM=J zLFSFX$n+uucs+8)p%$mah@zCJbx0CVhRDR&Ed*@-g^Y-8fMt#m)EbI`uOaEw$~ zTvQb}ycV8qF0-hAFe4l6GDgv8XYqWZj6bPM3-^Yjujf8CO8w!7a}W=%+x)DGrqyGn z@2QE&jAL1%6b0eP78jSSdIK$Y2=2o1Dfqgg-;ak!7vlJLj~)yLedI0A8;o_Zg9Mi` zVtj9;*%2dPhb)XUptG>N_p5Hdf0!1-q345Bn6q0F_MpRei zQCd{|UP<*3R#vN-6}yAJlc&Dy{y~_E(ua0&in0^#X=kI3k*Ac?W6U}W5kCTqLgj!% zs8dt21{ZTN={Do`51rT9t*~j zZvS^L5d|T(--nFw&)x}699>pG=q}9}y^}7m#$57+^PigGSbz_tjrs7&;o$~6yFmE@ zoJ4@qelx|6xAr7#GP`?uUaC5pb-=5((W2;j6OKV-w4|9{5|(CqAPLO`-*nBC-E4=p zq-yUq6PkG4%maC$3EZ_B9dqeHVf60^XI?Wi)Qwms99rOHkHOGQbP1?2pI8iBaT)Yu zubNe5XJ|_zCShg<@<*HScxVN`c|FC)bB7!ZI~`n!Wbw5}(A))}BXK7~0cVDp10KE@C&3B#jz8 zaeFP8>1;2x=Mgz=Ps_DuIBj_XH)p@OyQ7}DnHj#K8upAlMu8>W`8DBYMYhsSF#LOa zb~(MzmlK-l;XL&7a$1HAt(#fEFU(A@qtZe5xLHYLy>vqD_Kl8XwVGL7rvK$|G$R*R zkUML7J&uX9b5RpzlRLela1LIPOH!ecGLVt!wM7DcZ#+Jmo=t~VV7O*y{iKUKAdUU9 zJL;WW_6PTLYow8UA7a4i<>}Pq?(><+D&1^#`#DXKF)VebnVUV3HouvM9ZsGAmwX!4!CXhF1TPcVQ!}w-95?W?A zFbzb&X<6>k%{sga(O8{$#5UV?1;nf@`61n`L6|h7JPrzAX0u>nmYtRfa>3Pwua$}C zfulmRGdV*xJr_o4{O0r=1-mjmo2faPy)ZPw&CtdQf}wya7bC!A*nMsZXU&YbtdgE_ zm|9&a;x%j0?fJHj)HXUMWa1C>G&-#_f6}a;O431aV`xdPa~3Adw&XJe>bE3>#pJ_A zjZQ&9YS$jSCo^+VcX7R}f$+|%ji}es6%?VPM6nO1WDO4;4B~D1Dfxml+|pP+sV&JJ z4w%Hi4Yns!CQF9XEKD6YvV;T(Ig2FC?f!E$u_Tj*rDxJIk=~CuG%tANhtSJ zv!I^D*@V4-cg#*7owQU=2AX$r8>K<;r3D6AR-l7xL~wNAMe}Mjc&32q*eV#Y%}fBr zrrAaKOReA+`#ro7XnzO-%k3}Tl@@L$9-I$P`O6+1j2S}9{5c%pPaiXlYo#!4ST8Ex zX+n(Lb~XKazIBQk0l4YQeRXN64Q_rpU1@Zz&107$T?kq!jH1UyRTD)di>4s%k2yqUu@3_35fHNu zdXUnb$u6B zQJh9hIM^Rwp5ym}50?%PCkh+x?}Nr>gqtMXMoP7*McCgM!3_p*F3{RV2s#(T7hVRy zt-%0F%gJM_!;W9P+Zh2f99eejst@;O3A_@Vnej$MsQ9r5BDeeH1CAimLko~R*e(4S zg9^T87ROvh{ZRmf=d|k8S$yyu?>PW%EV7GDT$XV_-iwfDcjAd`-iom=V#h3cW}KM? zdvc_Yx$eP5$|Bl)YSh}71Kanr`g=Uw13E8E4PO}dP?gBjIJ8MJG}=<0G2U099LbZsMo z=zLMzyf$}R*Odlh1L&<0bg-Xvy61S zN@~Gy_I)nN2iZfTl!J_W*Xo1zgaC2RpTes?gBXYfG?BvWSSTY9CpthtUKpbTSAc-! zHY9@UPV; z?k6j60lRu+p>U!%)NO2`2?RBkSO+BQT6vsKh5F4J^G@Sdc3+f(=1);&)M+Fv+4_$uB*Pnuz!UZW)A-ngUOizX8 z09x9?#nc=;xM!vFU8JdnO(ve2x^ImqbAudBraU6 zge#^^89i7G>*}!HIeGV#r*&*Dc(bR5Y!Mu` zTa1?jieS!nj9|&Kg(mfgN!U+;f**_{PzsXpM6%&FSEc4QWUEq#J>q+?@;Qm+Kn9Ij ziq(^jH-No*E_6DUNQ3mv(@YAxCMIYQ*hdi(YvFoDsPYw{n9(*<%$b~BYWuymsbYax zPg?qzcHv~B2c=w`D|0`z7$+&k4(+0VC4fll^?Qq%wKf({jzzJK8i)&NHwi2Q<~T** zQQS4A$|x}RxaZkCF)yMB3OE?!;KsYBmKl6nNVLcH40ayeTgem{z&P<3qfRR%NY7)I z{*cj(?-r&;>tJj_jsZOnylQeVGmLCaIJHNjt+4f#_CAXRTSBZhV<2iCX;%4+xZ93xMGQM_b;_!+E1^v>%U_v48i<=| zxiPUQ6ug_7CB&^3d4aq|JZLcsShV#NP;QUyph+KF1{&6rP)lkau0^R zC%EhqGX$Z;>+5^KyJzQxbqie`LCJNF8wnN<>Z)+%elAEa?%?myy%A(WGg8ne3Tgsg z>aZY(2_3wJ_eLJV0q#N2&POb>+u@x*FmU)v0CWumAy*NfcLQlL=Fl4!uNPA$}>HWrj)}8 zE?ML#vTd5&%9K8o<8ev~A{DQ7nOZ|xk}COxm_aGiQ!4%mE?S4s_)LNH+yu-}c&CAX z*;k%IhV~Y?3q@B_uBi!6NUB1I;Bacu2IU4F%gJVTCmA~$EnZwE%X01kuyhZ`*vD95 zrLb@&2xx~Qdk_SGO<82(e!8iw(MxM%=!TitDJlsq5_FFirllAB%LGdRm70NY3ny0) z87%2hEUG;ju8>nxkU=fTactnkw8$e5Y(5^tNBTbOl2BFmh9NoA;m5L3YiAJj@M#H& zJYp!0vwUGAc3^PDUK{D@;MgeNS82UZxVN$@*O^PXM8A9 zh-`&YJu2yXxT~D%$({5KH^fjvL1KBN7bs!uEIL^5l4TA~$`v^-AF+PlzGd-#(J9l% zkOA~Q9VGrdj-v(&FBA}uYANWJ+*F$I8srit9^Kc7t%Unq7LT`mx&LWI4AP_C+2QdU zi#6{ikbP}|rVE_0{FA|p7><3n z56XDVFX#+=skcU4%yG>!@IG=VNZt9+qsPDjeQHD5Oct?V5R$9IQ+-efPZ3<6YEj6J zO+Jw@40?SOUi_AY#^J14*{wPvTNXVvxy4eLF@O5ofWcOYx3MrTgB*q-2A|nj6sHrq z1FjnQzkRNTTado7F# z_|nrPPvNH*KN>=ReBOKf!V|FX=U1TXvs3TZN z^W4B2MSRlPSf5QebKwmUu@oW9gLMcD^0XjQc$B?@Rf>iqe8MA?Auw=F4gwCSZecVJ z{>u0#XHfV|yS;Ren3mHmT*xq2bP!%}5(O@cVd`+RZp~3S!oysmXdl7H?_MMH9wWmtzdaCH-Gw z93A9m5@P%_xZuP61QhfVf2}^wPCcp@WdGozt8BMjoP?n(gqoTBQf7m-8 z^QAZ|fMo~%u?^hb9$5g4iFs%R9})Np9W$NZJmj~dEMjhJJy@S3WEaFLd*T^f3p}3U zi_ZZG;Y{OS8>&o(kH;7A$4v82dd96Gc>XCQ7iS9qn2qzHw}Z%WFq&F9eUc*&{< z_s^r=o=}V3h3rC?uVHU!ioaTFtn?w>24W0&bqUgYLLC=9Q6~2wc3c)Ywg!(bkB`X= zrcy?T8op>L-H!1Y>97ER4Cc1XRMvHlrUT5uH4!`|fnmVuF&3r;0X?O1EkwH#OebE7 z?*TjQGdgiL1LZaOAj=ocu{elwa9XD#L377FFgWAW4wuJ|Q>i%6b8M5-?)j6Hq=SEl z9MrRMo`6F-@xP?`jbHZ;<4J+y+Lmf?fXDFw6822N~o%1X4wHW34uz{J)Ta6o~2 zZfER_1x}UpU{0!mLQb3}K+u$PZ)8q22@vx68Ilt0d&?;*`e8Hr+2Ex6+(MI-4$JZQ z8O|$yggQP1LgtoVG>9`9<_imCMzWN^ZipvMFvke6K7D+?J0%eJVwIk2bA0v!9{7*5 zq|JN#?Dh#cmQ;WXVKmr|o&@Jgw85Y8;Hl-sK)a_k80a!bQHKV@g>ht~7pXbsO?+U2 z2i2kFzZgEk2j%gMb{s8BIV+f;-I&h7LBWhWlohpeA;`nf+-u;Dph}DX~4-Q@$ z3ImO~za*QFK^_GLdOjFD$BVYzQ3O~X#Y}!z5X++gITnS$Ah5sM_yVE6Jc=CqCFIlu zXJuyL2lh22#clRDm3}9yIv{n@p`|QbU63F}xHUmaLJX)DpW&@O?jGYIEW>YfN!hVv zF^pcN3iC58Xs7H&809#8+?7@od=x%`o28((VDoCgi+n)DBF-A24>1;`NZ{zUA+Hv| z!+zf8@feoZQQ-d6!NB|}f=BPe$c!P6+@?5ie{_`BA(X!#-YrrLW*r3}c`AUu7dt1B z0i|OLo`*BVDu`$!mkWA z3eVYtyAEEjQ6;HHU6}}NPL)h4)VH<^~SH)=_Y_%V%n=9c2!Y#3zXOL%kBtI`{GA)P1|g#mj_LxOejzy{P&*2q?OSo;_ zRNcFi*_jg3;E}1>S?TUE$4*|AF{`tleW)iPtj`qDSC?tJvZzS71>-DOjD)j`+YA^c zlqXqUz0YR=-SnW*Cj(;37z78@#B#AWz7+yK+7#DeDPMLrWI1yv^8$5q5H@BVO}pz#H=N5gyc%%V_CS7&{j)81zlOdQ|}XfkQq%z_kRS! zj@*DZ%25SBR@}q_)rL?qfw;|&8_@Z^hnrI1gCYpW^Tq(&G$bKppit?bLI^hk2<9B! ztr-mPE`!Zz8(bTLtfPH#i;|+bZsOE6AdVUPJ+d6g73hQ>-bAiSZV0#`L=Fr3vp#{_ z&vEQ}#EamFoio=(=HRC*VuZbp5w2;B4ESU>^E-3lyp)-|n830$Czu(o{@{#_dwMF% zf)ldKL%cxdL$_kB35Wf*?5u~Hy?pwtjs}o9sj_Y)aMY~{cCVz7Jsge=xcSc)-N?sC z4zqQPMS|-UeFBQa&~R&7oSdSBo1kOE?2#Bd8I5BC=b$wqG}@XLZvWJ(@=@FQUo^m; zm(YB?WlA>KGQmb#g4p8D$+&w_f;pxZu(#Qg6dG+wIXr6C&t_>4v!k~dXcNl3cFm%h z#BNSWIt1@|Y<~V_8=;@gx(-K;{@8M499+@SP*H2`t!V`_7^`9%l1NQq1C2vW;^?L% zg$Aai9*)h{(x{Ma@i?V=qiCf8JUppqW7&8ZMbA8yuWJO;-|eyA5A1=CQ&#osk?`n~?)1pQ)9zZPFpw2%#G*+H3)bwpvn*4Am-O z-9|fVa1N*q9%^q(61}O_!}|T$aaB$&3!AzkOKA0qT=6uU(h&Osy$g+%#U$2YK!7q6 z3mUmI;kYQ<0u}`DOL3&5|!f)Nd0Rn~D@Q2{IgApoFZGI=3H{oXF{uNy#i#Ic?bH=Tt} zU*zoF$Zy)zG`_rHJG&((s4wXohwA8n9s|GaFl^VoK4BwHUk99UVv~t z{Xvi{Q@F(zAk_MVAn#T}H)r~(OrVY+=vhFDq;1OT>)^{hRB0L8ns#&ma^p0Bpd)7H zZ6q}4LZ~I93ITFtbS6aZx=)mrB&>jL(}gUyp1ux6N*q(PEQcbSCj(xzhR_l`uB2-T zNRb>mLw0u<>^D**A*x&>5#k?72Bjl@jTcuvHOHY=uJdP5oIMY5NPH7bH#9uB%*Tm$ zt)Z=e2p8R*jNoTcCyTmw#tes=Ma!()p2-f!bf891y)YI8UHDDrP%oEcSd}c}_r|CI z9vr^Kw}xGqz;Ii+H<>d7jRd{{zRi0Mhk?<9u_-?x;_4S?O7F2 z0unsHiKoKIptz+n1QPJzJhYBI7edGoLU8KijXqwp2#~`Qd%qJp{r-eqr@{UFLP4RX zLHXs_-I0AcwmQWOYYDdoX9&gVuq|v#>|JTYl}-&0RO3@Ko7P0BVf>1aGGVZaNOjw@ zZ#6`qlc@-R&soUdx2|bR!(Fg5=?#ar`q40rr(Mi~UI0dJwq`0Aaa`7gRTm>P|0`g- z9S1QUPJ^%q&D=FB&CF^sLr@>bI2KIqFr0DpSzmGU8{t*YJK>kY;j80%S1elZ34M3? zLp2RlI&`1z^0g+r#!;C&brvU0<6a@on0El&*ipqrD|iDpp^#{QKN$?3*i7P1{S&H- zjY+Y{IU!ubgYM*s5d+$+`xe8}0CvGY%wbOR*kpzpyZ|hp7ds!|iju`1kQ|;^A-s%9 z4V&NN_b9Ege1O2;+v5zl?xu22k_d4BkqFQtnkX1yhRP+#X(|LTxh7Fz<_i#Eei%nU zz9~Yv-4Q&l@Li*z{sY;!d4Lyy*KDW|K0;+~P&RxJRIDg46!n18^sVFL=qi=e@RBTJ zZRECUpu{S~TwE2n;|x(brr2Kqu~#)P;piFkf{H2U=fiVax#YJ6?~>Cl?oAI)DkJH1 z9al84jB39CI&8Ogr0m4&3os*NoxrTA+ z92wGT>x$zJe3`iY)Msrziz`zGnCQC?zTB3H8lKO(IZyDHUj6EbCCv57c6m(;LUZ*&;VKu z;v{pfvQ|TuA=MCotbu+3s-FQu@F^t*`Pc@2Kz!&7U}2bPc1O5N)g8t6{DN$2pE>g| zWPi|(0djF#IunnL&kpZ`K;S$&c#On*sMZ1|DVPM0r(I}Jrveo0to24tWY)tFgoI*l z^WkM%Xfm)KSwwiEs}wLIWsh;-nvE@zRjd$DP63WO1nX)+u(FMQt-6Ybd5&XAH~w}ZS5@GJ(MyK9krkexPUj2i?fyS)L9%2 zIs=2=0kB%;36{5t+s;CFmM52-=7IFoM@f?4l3>zVkT{98Z=7F+1Wj z&_iBg$l^qPU2@2PVUvGKFP039OLehzE(*m2BEC&}j4%ZbHg-#?dqP5-eJ;VWPEWVifS;OWOL?3Kl*jF=N|s;51bkAS3AUqJjV~Z)^3qjbPv)qt z!+tB6UC=Y>oCg}Xt^Wz+5@HPuG^{~bRtwQAT!*7{9fT{f*{tyFgr+4fP9BE_CncIV z3U*UjNvk>A9de)o88fP2;0^Acj33dFq5!(m+2t@L0{;sByG-TW$zoK(xr}Y_yZ*`c zwnQk&x$VlDz*4t;t+CUyiGhQ(0>C;b22I#b^vPa~!V7nn6*yDG!&Jad7H-K^nMYFP zm)a5+Rqcj{2{X{gE((CNfw&mIADPK)6x6Z=^dfqUW?++qvpDB9-KWeFg#S*~vjmY5ekrJAs$x}4nOM;V}*)pP^Qjh};( zOlS+DMp^b8j>TNHF9UOfvndC2GTKvAMSB`%x;^1c98|3lAP_c^Q9MfHAr!BTCmjN~ z(<$18^x$q&^MEtX?tz*%;0PjiRw2h18{(v8X_&?!12hxDhNWSrEK!4mrZ?#)m1VSP z4Me`6=@pnPr|%7EYnK?|L}reGYi4D0MfQ`tEc$j~Oj@k%91iY$(KG`14d)mMimezo zJoUjC>vJ%UiI~I~_S=yOaOTC>L-6EKY!Vq+qZ9!N24WN+RUW|c+VcV)9%#>@!cLgl zp5xQ1P}6~lO-1ZGpHtGXIZ@*d->gmrRGVuW@aQ_8&*cjN^&I%tsNRa#0|qJCi&6`b zpy<@z5x6@j3KEcpAXw$%DV9=fR)Uts4u~?TjFCeo8|Bk99AOWnXnlU7f<0wnbA}dK zF=@?Ho_#vJol=6~s74hNE*b zA}#ufsOCsV%y;6I%sySe2enxzu}fab)2qtZ2uzDL*wc@>f|EI`j)sF1sL&CjlJgO) z3X($%1YF5t1;K3~N|8DT1vW{n)q-si!z8r^q*PBwK8wV+;?k@;uTC_M;c%%q)EZtN zCE6N9oSX#%183p5;VecpIi*_NVkQak&>t(_ORhXh--oH~%(t?Ewx5C-wh-_WeDVbz z=f&*dEKiXkA-j{m8k~>gHCs1$#@0t-b4I9K?izkSoUBhH+h z7^aDSF?5Q5+*iEiXB5E#I#`~%6MU~tlx~FHfnplYg{9>-@R7|ZlN#OnkVDWnJ z+@?)NE^)Jcy^tKBuq9N7<0Jlr%?0Mi(ADEa-3IO$aPPdL?GcYd{0hc?&z~?N-37?- z`n%bj^ftI|2WIchX*Ed?YHkhH3${i%>N)sjekqi5F9nE&jES%iSJvEKEJlK#VtOUf z5{Mc+TP+eQ#tAyIxL*I3R%(~B8=sgxw?2ZZHZ|HzZJal`BI4xY%0&A+{EAmg41eyo+VRTm1Av0Ys@H zo`kMY>cQCfA?yTJI5;oCAY}y@^g=EOAsZ7>wAOT^1!?Z*(B%ukiC_%Le`6~mu(9aWs zYzQx;TW_Ty&U#quMM#-6`xjEkK!u>$Hra&`$2wo0g)sIRm{X5T+z{yy$g#W=r!Jue zdU%8=5DGH0mpoUVplZTlW#7ES19E;lG=ey#O(+M_gr*JCOgrp0s@^qyLeWwQVJjsh z=?F`BYPp1m!!KQWELuY;ymC9)E>nph}yc8@K6Z%Mqt8%aq(_^WanZq6Y!G{-zhmZ8cFz}qT$vR1H_9$T7V{l99gsgB(C`uGqEke zxf*S7s0q4wL8dJ!I>qGmG=fa4Q$|3m^!$mkMzT7lAo+yRzkwzBXgVeC^OjSV{PRXIvk&~ z3hDB7e=bB!at)9}<0m`<{r52*-^KcxZ6D2~u;b+swh=vo@Gv3aMD0VI(uM65yE zr?B~{W&@E4C?Pr>A}pO*YMsn*Y=CSH&l1+snvenQam`qAbP z+*6p#&S8~m)iayiAs-Vkhe6uFL_qPSGMcMPWvi!Z$9gOcGeSh;V{}`uTF3b5NgV=|AX^-B_$y}-kRCpZARgr& z5%vefGHF0!tDJBnyzwn0I}^-W3jQ!=BXw;7V%ho)u=tz?I3AUjBLA?w3FG%0r49%7 zm4mD+JyX>HLtG#>X7RiNx|*|oh#G-$?KNN;J)Sf}KT;HG21AkYd4dUNe237l0(c7I zWm101b{6YIvb_%@_r=b$E>631%EBH@#0*CXuel?+A4BQ9wtS!ll;K2f;GG$OyT%JLT2kxs2MPLyjG zHbKwBqt9%C4hS#EQ74pgrP~p{QBzt}oaTO;bJPZQj0_}+uOz?_Z~F{OR3*Y*+sy(A(g09%!ionY)=9d>Hc zN6HhV2dqefv1SPs1sEn4XmK4?QN^wXqrpru_UPKufCD9_QWIt6Mf{m)PEJf7; zURE7|Frr(RAu`x6NfT`=nQhJG!)iC4bP>cpG@+=g1&YBmvj!=qnUJo*7L64HBcB>m z+356CcGOS4MzPie=u(AMu?5!A0J7NzFuuH**G#-MG>sL8!8hRXD|s;|n@;YZ*cmZ} z?YF031|`_j8T)8>a>5gzU&n@#_Pn~suk1=OW+c}mMx7mkC3Aw~l-E%so}y;5%2K27 ziJag<>?@YAg7(L!@Yl!LbTS^FS7gQQCP)=HZ$&svg={r>(JFY43;J0X@1H9uaW*{D zhD%_Anu=1#s{r7x`=4NoD>kqi`E}$8YPR)62G}?(99f|3Vu76-tqClR@wKM0_tVl2 zBY%}Q!`is-&T-AuHY)nWTI#SvE?%CA1(QAj0z_WAHNpL6T6{^otf^LDHSxF?2|T!i z?}D6W^XKRsK!%x8Qh2T&lLmbvA};sT@}ssI#G8#hO^EI_>TQ2amK~yYUhwJ=_%J*O zhbM~%oNX>JzseWGLEIwTG1p{58m#iP7ZV(#un^*PK68J`EGoBmzOEz^J}sz9kGm zsY-Gfk~oMdNdRZ%jRiwpEZ|{qL3Sa6d~j&STb4?G0;9e0D%7bbSBnXSI?r*83Nz0x z<4fqJ$ENu5e+EFQEXM2C*hJ7dMZM;PR%M99aiZL@mU7$n^DG>kd5o$Aqu34^#IC_*aa|TrZu=0m&6TMi z?n9Xet?dLCS*aR{QDc5$4By;^+8Vj)r^&+$KBdYO_98H_jEaDm0K{lmRH0>-?K5y( zvb<=^yyTu<-OOs>W$Y_6xeKJkMz7wTSn+sUO5p6aCIHw9M_F#F)-+D9 z5#rWVYl`<9TT@v!IGokG*Mv&C&$5M1Wf07C7V{4>_*A$CWuKoF7K+tC@o}?|1tg6Q z=*rK&+NL(-RLJ_D5gcA$L7nzl;fTbM9F?hOQ_Hbd=f#T;6RXN8NzSa-N?=Z+m6W4V z$2FM>BZmUuQm8Fg#Ox3}bFkU*0da+Vz5*OoM|R6KC`w9qs;ma-gp`Dv{tAREDT?_0 zGR4e5WhHfH3997?g`*`$@iS+dLNZ^eRM4oIf_B?pv?gpP&1j5p<}n@dP*QRUfu6B% zb|;W$I(KFl*l6SAhZxjEWSk~al4fysCySaWk;PGOz+?KJ@HLVN#h5GyJGyy^=Ol9= z`q_XnBS=hE6uGik@)l61aqA13So9d}dDys}hZjfdv{3T+)HBtSijF6IgJXB36u7FL z<7VK|1yNKWymygDSr#`AtsZnF6q_OXBm{FOGvU%t>PHFslDsi(LgVq7xXa00CI-w+ z&lMd|U#)pg`t-{4E@U||9k%munuM}lcjO>Ez>tfZFvM8gXfIh1e@t3P+X4>!g`*Z4 z3X*MB8*nAH#AiXXXh;CxgwM&OlT4aZumDdf>%>`iHpe*<6ME+&VMzJnjhj4?Ba>!G z!|^b9DR}5js_=0Tn4q_D;T5+%+0{yqPepgUJZT@h=w#5E#LM-hIC*x=a~)*1>^u)m z0H{?>KguKF92fC|GJrgzvdMij_hrrDGAe|zh!;?V(-A6->>+d}eC$h%tB3g&FhMD6 zQWS6sV#23g*DfHwJmf<~YWQ)?6A+&8rf-60orrlSsbe|JXqGW`55^em1a9ZS&S5dk zuKmukvRekn)!f8x3BbkNwr;R(YTV4!ZqY8={oupp!^4ZmLs7TA_ObC$UYdST2umOCo)XDhGvG};31`bd)i9{F8KM^ z%AdTu55KHP8sZDYb9C2=;GCXEN?kX4`*GoVCQF~t%FTh8D z=wC<$>V^<4rXh%(b3T3^A|@)C_ZZJiK7xRo)i6<=!1)!f94DB}Iwkdlz_C$0g6z#F zkrZ_POEH~<3PUCNSRrav6f$iSFMlhVwv6II2?dr_@ieW9>wccXGNdb!N z(4-b?vP@QODaO=F(AB$^H-Qd8YxKlRDh2L}k4L031%PA2Gh4MBIl$c3RXU6&)vZ~Q zdBtYcG}iVWfC!-pq)<}?Q1(8->|K^{#P?T%B!#uh0yq9l0I-8jPS@_kOeSzvWx?}* zMsqor7Hhgoi3c(gCArv1XLO<{5K~AQ;&bS8&GfVbi$rtri^qIcjABC;tugyqO6XFm zKT89vh%e3YN*V@{!Gm7j_~@jr6uRVbp7?n@l(VtIqz%q6dnqAOzIgo{$8EZRj+uh` zY!XFQUE_}Pm*JN25@2BcLh;0I=HoytU|63bZaaXhM~i(6-2zKxY7?$zV)d_Cz%Pmh z*21odijwKQd6COJqL?}EdVZs zeFkz6VsjKoLf|VtakT;tYqKYcop?wO#vnY=1ej%$3sD9LwUTRs-+QW$a8hhwTO*C5 zo|e{Y$!~42f0+v&7OB?&X%J`<8>w`~Gch9T-d!#D^9;l_&*N+rqA8{Vhz@!1_(hhP zLztRa`*Lem>?}{<6B0Q<)PrWjY>pp)ijM|XgI_$o-nS4;9ZXV=x% z=%p{1ty4W7zb#@oOmmSmI11hS?MELSo}L~~)GkbFy!u~>Cvodpr$>eertK$T`vk!L zr4oer;6`03p^MZk@!X%?*cu+=nZ>HFAIt#_Tv$VX;v{qOvECcZ)InZhaNeDmg2^a% zgy20QXqG@EsGppKw~Rc7cEWCj*axE&b8zwk&~$Av0hvF=D~iLTAuJ|Ps{r+o-99=t zsqp9n`1Q+^OH}|1roGA>tPvr?N8bfzBOu8a$WHkr1fOA!`gryF1%CMgAAU}r@hAH0 zMXnhpYI_AD*Gf5GrL$wUnhShZYqdG=GA+-yY?@=AR(0Nd%*R0BQ`1RnHIP!Yr<{pP zujQXLkNm3A?1u}3BzDoZ9O4RN4h2YuI~Npu@idYlmNvX$MF?_mE}LbkH4t811(l@O z9P$K>P7NBZ5FuA^3=Oe(6PTp}Oy^woyuWpmh))!EsWW8ebWceFRWSK9BjNUNA3sf1K}7=Hb_A(HZOaH`Z8Z>aA)MXn7bm;`Fb8hf=q0UK)gf5XItV8T`2*F{i>^Tt z#O7l}9VGuAK};_Ir|u$~R*IP+a}DVC>J8N)s#-@t%*M)Vps_xs;uQ%m3no0UQ6-Eu zl@Q#zHNUXPvjZi|9GpaukJuZ|avoQg6X}Q<*;os>t;LpXY!<}IJ#*6vH-I2sWv=LH zX}c3|RPy0^9R7`m2<*#R5n9HaR_L(;rD>=iYc1e>_GJjkc_T!k5zwznIsps`ID_gp z>@Xy|tx8X-bnniN=TK=-Dd9>{KR`^5NKv});875KGxcN;a_}jIFZS^S#=!mrC^-R0 zrek^inYl5fbVuXSi&H3+NVEbBr#2k14A~+@3eg-@<73nz&G|MjnyGL@4lb{MA|ims z_<${UW{4g>KlLDOWC1EnPx7{BJ`K(Z#)LSd)5w;nO(Th}$-yBo)S0dmR0qN7ymUb~ z^a?INp-k`coIWWbW`o298s3u#Anu;M5(FRGJcli;380~fCK?);5Ff=5*HUt>R%omr zDVdBp!YPgS{x2A|M~iSjK!83DS_&;>pergVj8XHwMWB-R5o&w`!+`!GJtM%r$AjLJ zr2Hchz&tRGlOPrrkEG-Fr6A_YgT>}oB>)M1=DF37&pBV#{OwaAY*X8iQhidJ~a{h(xBW zGo`bx&-ejnt4twGqHb#0%`7s_{+W4(p&GL9y~^Et(L@4;mlejF=Ozom+l6uh7D>OR zCZUIr(RpqOOus#?R@sB|WYV=rfo-xbd01%SF&X=!KMh^GOnILmd|@TUc82G9^Z+Xf zhe5-U5ZpB_e2Cb3g|Hn{G{DGrjM{*Z;@=GjQBsQ#OxYid1IVm4A&lOJ5D+zlXhsh~ z`=E9RV=XA(dWyP@<^E{!oC>*vF%TML!W{77#g2!cAa{|Mo$%>VkaGNy#@+NeRqtd- z5SRVnybC=iW5BH}c0M>efvXqgtm?}kp;-YB6H7g;W$_qa@ANR6*n7qYz~pseRrvi( zhaC<=B9Uy=I}fb}K@iuf;niv~p)kxNYSm-Dr={Ww`OyS{Iu|d+ z7CrM*({iNSqm?~OI_{bH3CiRljuP17vlxOPNFgK6cS11LeHWEBC`yJ<5@!XpEl#1E;|E zEAWA9U$_rGTs-tQFZGG3UO-=S4ar^dja4$@7ap_pd$fUzvU6cd5*~ra0Xp=Y*0EMr z%qnT;(%|eYzy0=tFf+9Ac7Z|UY3r>U+cfI)!BD)rB^J=syW|C{z4!uAc&DL~`okzD zf>0J9myG}~aDwdwN3O?g?CnTPp&y%KJS(%98Gus!u3X-f^-(Ou%IOS|DijZ7(m&f| ztu+v;g65Uh3zaGz?F8#bTczS*se>U$qv_cXdq8oZjp$|%z0K{z72!JhSYOP0NCyTh z^}&ZrhxQp6`$m{a6GAW=wuDa>f*7PJR+da;wB+JMSC#`@FZRq)S1y2^`ywp@*i0%o zvHE6EOH&EX)+pjxAFyDpGiM)p59!20y(k68JL=?6hA^O*Nrw?gCoo_s`MUUgn#YZ8 zQBrzD(-dx=1I(WX!|&cXEgLq^}m){Xv44oy2on*78Vm`LH{O{MPh{(18>S2lo^!NV(}eqi^24X90$guTOSny z6Quwyf%fo(#sRL6fQzR{gT1lwLa`%*5gqXnic9SFvkU$ZU@t`Mj?NI}{>q|51I9ck zP-F^mrt?WXD{TQ%7z+f1A`4!9X@8m70&*baCHNj@DyGF-yauuUKy`b9l~bNx5yL!N zz5#rFEFjU(f`=ovYHv4am?U_im%s=MLuH8verdxD0Nz`P;qjRV`5SeEtc1gmgIOqO zUML0RE}Ww2i05_qX;T0Pd5&G;KTSpPdym#hC;y=(ugB{h4W4<>u!od7Y20iMdZ8%s z!>WApwEFn7?z5^OAOryOY-|t4&nh}EAHiM60RDLFaYVpwQ)6pW1DMa&yy7+~fYLVh#fa=TS_kx#@&z@f@f^fV*lx8cCJH`Gg~{ zB5V;^74haGK)WU7+^^@10OX8eUkjBx22vO~RWzJ3kYdPz;KMyOaDFV$!$HF5EOluj zQ;wnKGiq(xBl~ELLc6&Bf=_{={elj?R zO%M<4yZ~Qwg1;ZzEJXDsWLW`h0%FWHtV%Ow119xipg7MDaueXAH|ia~*$85jdj zdAM$PDat(TR6|lkDvs>1sVeM5+!(vaS#(d78mW4FGQC5{l6~C88`mJ!?YY#U_Ow&- zlZ|F^vy2WOz_sqFIzsiRLI?0X26AN|KPI>2X?oW!LD)mv$qB^na30CJ7&q9Ns5HrQ zYXW$~mh2jqirVVhwotrlT{H&xvjNyqC|!EM7zk-bO8AR|jz3rn?rY8>e`(nx_#z8S zn?NWAfhWmmbz%&jh5R{4+5$#raXrcM;d%vGxn|p=Nsn<{OjtWqQufj#VYG5s2hdl< z$=NUp3eF$U(5ygenLrG>1oZO@M-pJ3ARni=^fu9{Y=<1WjvaH15s%>Az$3MmH6Fe- zI9d-wvU^jRql?QXwF0BEJ^1d!>tpm0p7!Mp0Cm%8w)I&)wwrKnh+raD3;1XP;(?t;@dLjim2DGKAf9fohL0aN^?4dopwIS68VCsO7^|H5}P-8Qh!5&}0zw^cGP$Qh$rm4~FCx*FeDC z;F#V!>Wr{`a7gwbbs`vD{*3nri-89h^pQCQGZzrU&a{dB5yIl$T-?;mygele8)I6M zKi-iw zv#WF>0~CS+hl@{);`8gca*f%>nK!|GCVbDUf`>f*vYQZ`gSC(xB<~{1z3c@(n+9DF zKOr(bOY-WSo`;QWgQDB9q<~MEUGNep4N7sm_c?iiZyTI-dw8wT%tYZuLNgzY1|Fl3 zDaW(nBVG;HsA#f(Ft}J+5u!nHZzg4BAibQK;qW)JirX~mW~n|=hHq8EzJ;w2rdVn4 zy2VBHERFAnhHQbn;mcB&coR?iz(i!&ws;2s7fASFSz91{$I!yUMO~}lRT2XlOQ2vB zfdhAId_%C%yPPA-4c1D!l3l-rZfg@W-K85IzlRntw1ejFP=uj#CU;NtFkOU`i;EGiZj5|#34(S6N$e~K z74g&X#+}@NW44~S6MKBxJTqhm3x2RccBD-SCAi6AL3A>PK~H1&%*%Xi++kXs=iu(8 za4KOKhi?|^1@iHdI)3i`_67dK&*5)>TUFH?Tln``RlPM|%~kVN^``y(VyhZdC)KdR z*FUQZgwLzn2wzqc#BNuQ0J&Xt@efZJ0z03O3kBbr;nOKnB%6K=^m)+~1&!x2uQ9%f>FM$M*X%;$zgXj~KqI zfNrtlzqQ!ys)tw?IVM(OjK9Z7;UK*H7+w7hU_C(Iw|pO?uD$93@|**HW`EfxK4FQv zU@W%w=BiuoJhj#?kygF@R~>Y^k3`SFjaUmP(EBQn-2#w{x<8i4!(0_on^V|?Ga!n_`mwTdNc^_aN?`? zcF_-Smy1w+|EEOj`g_R6qONM#fP#u{1BmKBDcz zgMd0*-Y!PWnbgwXNBnt3>^}=V!zXiMFK(k8kx4s%2yq)Zp96IU_@DLkQU9&4woxD6 zdB#7X5Zmze;V);2Xo$C)kb~&YT8QdILP!2_^#tKjf&SJ0reV5oN=}|FVAd!xjMeWKKpr_ z)qZ;|oG;D%^=i8QT;`PV#&h}UtFC2JLJ^4HAZ`p3q--olXzmI+r`)`Z~4__4zwnB>sHcREPT6JGnt$U!CN7&OmWQ*C@ zY~O8H?^!=3LAl@gQ`9P^p!&mogh-tRSo67RBT$pCaKcpY{wb&-@xV^Lp|c1F+0NE^ zL%K+M?vzxehDJqrUXy~8h0w{P(>c|qp7=S0{=NJ^z5wYN+O{DX<|OdAQbFf9oG9@C z5V002@L1`hxhH^%X!kGx9wnS468ijbC!0VLcZt8vg$@4mq`xa8Pk#IRc-0F_q4ka5Dex zW|6@ew|%QPF?xw5+pwwTj^xC$LN-CJl^xJ@?KT+2Y2|&w!~i};-JG-u2Jiy4X>rlb z-Rb>dAGrA5qbmk{{{?F1|L<2n#lQRbUm^09?^g%-_YwYoAB*)qaQ-xe$lT6VJH`LM ztZu!_33u+MdY7y#9{U6A0-V=xP=-9i7l1j3U;VUwhjNbzLDLd*dH%br7~XbFo6g>f z@$qi^uJP^fYz}djm|Jw_Juej*&dc_}^o)hWQ@ub9VgIxpp~K(z@|jJai#xtANM4G5 ze8pB(FGZ(Om^d;ebw+Bt!SWGJN};Q$`xhIijWwki;f^9wk#!VGQryzK*LwEGUsu)M zE_#&jX!dr98pejAoQbRI`)kzivRL(`eU90_vtiTb?`ACn-JZ3#^}5!Rbm!Da#(BA- zFaKEwq|8yJjs}TDO8S^ZlH0oKG^Ty46wCibeep<_@F7Yp8bxN(B%WK^97FVZXerz_ zlv;9>FY0~yFY6UI3zU1dJ_*f^5bsaXJeiv&o{NByI9{UTl*oDBvz%_FFuwpHGXLv{d5|Je!n>nN?7f49nJzqBxo;&q*>n2P3??HG35{XynPgb=e>s5iV7t{hcu z#MwM|lU@phMUjCbA<8234NkY?s*v1d= znEu=dlE~=n+!P{7(8zMWZ(*@}e}eAa`T@I5eRm;QK;O(`4?5pBe}>Iez4;f_&#LOz zn;`c|y#2(sQsQSg_1wlu>za#-+}Y!Q3F)gwPBo{=kdYEUvd94ArsIl|89-`W&* zh{tW$oYaXA>ycDqg?%{6(B7HR8ZOL-Z$1kmPyw#L_QMLH(xQr!^cTUtWm zwc7h)A3aYtqGU1QEYBVVTjm_f)>4k+R(E>6*YEeMwm>#QtL}T7D{x^uL@Fch8R8<3 zS1Qv6m;+)K$Iq2`A8R3&hG}BbuD`z8al-3zUaFV>eAkertx}>fH(MLZOskUHPJ~j+ zMdc)sn`WCP;%VyLcn5U*^|anxf03s347Fc>u-uIaU#C@h)nLn78iO@iw{1O@({W{B zlQ+Ubkdl!GQcK54b?Y;mf7@Q+e+BgYRa;M959(fPkR`%>M`*i0eUPt?vj0n+FDeCMw@7;f z)Ow3I`tFgp?fj-NNK&OK7C-4c)g1QXHmEr{v}Eb_v$#|TWxMuo5+|3o1s9aOlH2=u9g!YFW^xPF{>^Bb`j;rLQlFeI|iPVd7l}Ha$ZE60{(vRxvmQu-ORd2fm zaoU_{y!ni`eF}hI>V)yPV}{}s)gDB`o|UHkzC;6{ z&JU?{Im9xb#;rqyuL4|0zP6OXH%nCK_RHPZoFNcFp;7OwOL_NUj_8T9Ue; ztp<@eXD5g*SJjuavfe+=mip+M((`nq0OF#@trrKFc{jkb_2fK4&(``{Cd-C|)0AIM zDNOfP*%~*loA^Y8<@Jiyfl4m5eBi{VbJcj${P}n_Rv%II^Y$YxUk4{Q?)@QxgxUTB z&RrskpQDGtS!arS6GtN)mrG8GF<18W-QS@-wthl~(YM{vqI$&kNuK4;Zo-U?oBd9e-*mKT?@3q>xIIVihHSp!Cgx;#HxPMlDrzQR>HDN_;A7 zWnS(GQgdS;pzdaG^E#?O6O8naM?TZ{>`*7A@X=PGcCOgeJU>)TnhUlOSf>EjOl0ss zQvQ4%vQ#*payOEpN}@=9u8|rzPu^s+xc8H4IX~w>?RHb$iDo(l)2Zg?C21%R^mKL} zq1`S{8`H+T$Fq;Uj5Kq>Lw;^FsdnBoVDdM&5^2jd*j_bdC6Yn(AWe;;#Amk;`Sa*oO6?ZDJ8@0l~i$Yl~maxS>c;|NlHZx^+2ONpdZf2ggKAUuAF zeCYq)>u5RQS+zio(ZG0iGGuhJ8DxDSBXVqGA)XjP`^(uSIPREtWp-YXHnAg@MpVhL zRQs;@$}IL z=GnAWCtiFBNXA>K@a8lF-96M9K{xsvs1QD~zmM!M-2309bN)R3U$0g|Y!R_V#FeJl9m~(#xPM*!36u?g3;|fqi{hq8 zTh7TH!Dc0y1K}S?&Y&FO!Z@IR*)gn=Gej=LQ?}q9cR>lF&>Lv$Epjdptvfu&sE(mZ z(#0|I-tPG3*R<7_q*<3BhuW@D1G#JW7-^{iLTKIcB!Q4JgWqT;cj;n(E-$&P)+W9} z2>ms=)~02vtj%Y)wCB1Fq0C!&yWFbY04}T?qlKiLC2y$N;yrJw1jq{~x6UAk{3;i- z>++UnJ=H0Na9Jz${mptY=AV}R*~ID+1Ms=Hmi*PHH|vLZdU;PxY5(WW={wFfg>x!K zo7_CG>5qulb^7S_RoAMytp?O=GOJ@y_3~fe$7Fca1(~J~XkC+^gcdJD10Dsj`~pax zwr!>mqJ%?fAE54(J#Zn~)2jE*YIRk=Z0~8lZ0>q61nO~7+)azeBhl9h$*sxNb(N@i z_4s`>)8^pT<<)Ic?4by!tAb7YNpse(Z1wG38#Q#iH5&&v2V0_ec7eI3i;@I$84kIU z)Q6?{#g=+k#6T`_)f*tVf0%TfWS(3VVFKSf91E2qAP(;`#a;fY?SvjyX7e5EH5Bq6RXRscNjTmw&aIrJmv8#j%qF8jJQ; z2iOUP(bxCw$YDQd;H5E@{dG}Ur$y5`Z(@P%Is0L*PRT@$0-mW^UjE1SB~Cm< z+N3$@COMQdCpj8P03EGd~T{ZGO>wXja^?(m!?OH+&(?t|8$y>{&B=|l%~Rv_`vD-KW8<)jRJm| z>2-7?p~wZMXV#9Og`wnz9nIX~wnVc3Fl!jEx9iv2sBO5TAz;?O=R%7%Yt?&T=MbHC zdYG2Fa@jF)(!dgTY9azvq@%Q&}22xe-7lm;?P7Y9p zr=l2kKAb@Jq2{Sd2u&pQmmJu0cjPLav4pwe2Praf%rDr_Uy#(+1wr{hb5}`#&}ii# zMnn+CV`hKVR$3wtOP46+`-I%;w3;I^{Xss*kxRaxZxOB!&wSQL16|_G*fP;Q^;I*I z?`8D<)4VqEhwZf`?}jUC{Db_YE7auAsNN%< z^3dUNMlPxP>F2hJG6R;pJ9o^-u$lUmDy;I$|Iz_4pVFLQl9tP}&F_2V!z8j0!D)Y* zW(sD0U%KfJ#MMQG4hB-PY`$>xJoL@MHc5qa=5PX&(He{RgZegQj_M1JmlC1-8|ut1 zk)%E{7pHtac2Pr)L}+a?tzPBz8tOGCpKxs`I#f~0XZ@~k$k8{=KiYgz-qNGtJ)IMd z7!>}@@~nqFA(yc|qo3+q zeV*J!2yMTgm*zI8ud}v&_2WF>lstG-5#G~3ePBc(`I)D=%|5 z6T*=&kQ|Ukmz{Dtn|DXcTvy|zDbDk<>qMF~U6_t1*IyKofm!DY&tee@{&KOnTy9jo zHRZWEj+M2haZg7#jv-0UK$9sh^h5!lTe(zA-o0+k=Hh*K+C2V!tj`=s2xtFyP$9b# z^iSaD_9xjn_$T13{~UMSQ$1+eTo`dUzHh-Mj%hmr9oi*FDM`iQ>^1sygC@H3B zjHZF{`ZHUJw(`VG3>oQgUBk%<(57fhB~8`I>(n_hB0S`Y>hwhCFsXAEyXcfyQ<#)0 z@(3amhHY0LS`Wp!3b&yhYQE%}c0Q?sy7c=ywEtYLS~;}*wBYQu4TnM@XYaq->Rgs1 zXhUP3K+S~^E|CF$4xAuSqXRIX;uSYk$G;pWs&D@2dd)g}RBFcZ12LzOC7t=*mGp`f z%cT|a@NLJa^u=6QdCoHz&#XK*Cx^_9F1zz&;Fb}assd%1QzC=W!6h3Xsm6i%f6 z`UH?>oP(HiyWa*ScmOW#z)HAxV@}TfFl7(h2xeLw?in66JN;;a>BS+jh)Z;4Wz3k9$lUlr8&Z<^G zJ>UtzUTBScWlBU94oC{1%G}pX@b)nf3*BJBwV5`8>g_)@G=`n}cPS4MyMAi9gDzJ& zH)*x&SJ`HHLB^66Fi9`}A6WpzL6GbU{iZYELZf_OZJn+!SErbYt4eSPNk>EU za@|Q%oN=JjrUnDs`wUZ=G%;M}yiX$0^{LKzZ7s5>5{~8X<aygNX#ZEaUgWfrpxTt?e$R(9EJrhqyK7Fq_^Wow&M~Zz=3v<2 zT=;QVs`7Z~d#Rk9xuLAu&u3O_8Z{m?Yb+V}w$ z?R2C_r=6592O%f>l-eg%@yRPGO)llS?u4k~3T7|mY0Vzx`xE=`SM7!ojxtx)U#&dO z>orxey_Y7`q>wB6$~&27VW9}4_DxHdq<4fTnkjzcGrsGT0)DPt&TNL?K5Up9Oqli#}-2T4xA@^4DdC>T2 zhNT6L*JdTnvyb#XVoa9>=qq~bpZ@XynO=wZMJ%9u0x@@l8D=jjPZBM3 z6yq^RUje?}yM^C$6kT0YQg`f{#{m!P!Bm9WwN)$;UcFD0*7>Yzz`igwcck;}<@{j2 zHT zRNQ<#;!4{>8wH%b?`Ly9t_&xq$77BB+kS1K5>4WwlRrva8o3i4-L(1gAaX==CzGbD zEZZoxsUiYNye5Ib^gp>N+9Xa^oMuAlwq8gCA`=4S!L>v8$Goiv`uM zUxgpLcI|gL<2fF>wDZO zi&MMltom)dE5_~Px0>n*S6bf64ayTE(amX_l;;H}kjLh<-X`=TZ*z=A^3#u7z=fgd z<)=9<`-$Uc2^X$OMz~4qK660y?QgftLYG_P+-0?Gn{r-A7}9&5zFOCp+_gdJntSWX zwh=^$Tto6N!7RH{M4Me@MBd$Iosu2Yv^+6VH((t+F@wF(S%!&iwg)?*J<0u;1*ieq7I+ z?nQg4>aM@idGn9H^3x~pV|Mxftv8P0!Q5oeb!KIEdERelt;v$Qi25U%ctKR%4FveAH;Jr)~j4PKxkcT-J2mJbqZ z=6%rCI&9SvAA?cUAn4Keq>bS@Mxm4O{8LHQA5*xXcr2wGDFz?F;~^VLwB{)4_`d4A zhq7d7DU?=#v6ce%p7Ld*1cbRV22IT(H-yn2uD{8L%g_qa+)Jg?s6>(_Fe1lGnc z3v(5yE3dv+&S>>Ed#gE-hKg}}Uhsz$-Tbp#S>L{HVrK`de<=$w+Rd@nRf#y~@}eI#cpRZDjnY1e&*4g! z6ag&VubU%G<{wv$IE5=qGd10+Y43lt_Gxt`CRfTP_ErzL`l`0JFln}M{rO@c7|{WqvP#VjPRL9|bN)q-n|JQ2%s?%wt0gLnbhh0WO!sMIxD`oK#$BmpFHJThozqt6jHO?qRAX)e~LajL($ z-NQ9|oX>oOd_6E7sVw&q+R5#|O&t{u)|rpKC#w<(itO?k$~6r}J}I$9MOIi4@eHc=xjfJSC{)J}q%*8Lv^1e-X`2CQh!hU%DrPC(W6*1-Vi3t@c*K%m1xy6{c03X87B!2$3bXbC4?0 z)qv>gdU&q#tktpiLbN*nAL#BEv-keA5nN4F{?m6;@wX>1)9h7gZ&vT5_ZKRd6?0TA zy&{~gu75@jUn#wv=e7Q)`mU~4jC8BE|eEzhVS4wAHViI}PK{5T)(L@^d%Ub_IBIc>? zYNZY8hr!g|J)2eP=Kb_}WP2_G`aGtVa3p;5&Ow;+oVWC>dKoV_jh4$qjfCrqNVCgx zObar7GQE@f>^7ydX;rVKlkUD=*R415!%5w!6PXnBfDV>uRXJffcSAGz+u-}>SBC?%<7 zjtP>&(AT)Fb@Che{W<4Xv^{;6O3Bve)?G$pYfGKRF;nM)h$jVu_#Ro2^a2ocB!hMa zmw2czKjrJDH`KW1?r=%Qg`|S(>t%diTr$JV{D3)R_@^)-Z@lW|e-Kq{B0wpm=c2c> zW^!0*GjKVTOB9Z(6Lv0V9Y~3sNoD=ykT`vMrA|wc3y2uR%YWC#OqBcZb+Hg-tR;y+9q;s>f^`4-H8_vZR`cDlcHFGqV^7%q>>dt)3p35!F zB){6q*+l6(H!Hmf>>v+}lCLytOL$=ERm(15&Tl^6he4kbO5bq2G}my?-n`HIc;q&g zz2O?|hrJrs=!T_z#9^*qv2?)i8py3n6aEiMJ+d6v%A1=8qZMj zhP%`016?WtrCGb#2p-z#Z$9$2&%>gYKl%-*6e%zHzmkD~XadT?y(}ObFGdce>)s>rC09I% zTXW8ge5G)iqpIHci>Y^i+Uli!keneMmc;3akCg6^GhnrDx6ds(Mk;Eq(>u(<&(p3` zN$s~Jsmn!`93%UZ`hc?dUXLrH^3+zFhFyQI3&i3w$%Wi>Ui0?ijI3RMEObv{IWt8Z zw$EhS+FWN=Z-;kiS-Y*&n}4tRd$1z@ruIH?oip@t^8^jPvb9H%8 z=TefzsOTeQ$t{*#5nh;!^5DyV(Y_s+O$V;X8^3JQ)}1+2w%stx=jA8t=gXD?4Srl>zuV&z||PKwjS>B2{(Lv-}I=(y!=)%`Ab zeo@}gUq6}9*W-4CZmMomyW$*DUtN)2Uwr0J-_X-A_Pmy68|h?CWpnL!nj_TsP_y|e zHI_3~)cW#2x{|5Q+La3CWP(`RRCURzh=*1p>}_?H(;#2drY9bmU^+qhl;(~*n2g?i zOf?a4`X{xyLAXT8_gwZgTD-V5?gKs26|4>rP={pnv7X{olrvRAvpOPZzZ3a5OF1(= z9Rb_vOG&hy%1p06BmXb|{X=wM&>+6~>5>RpdqZ+W=M=V)@w(Q_NqHTf>*ZQW`q%9} z&8LJsbbiRp?pc1ow6@qnlD$TbBDrklXphBv`OmKIs?M|aX`VHV|ChbDkCMAO^Zb5Q z{ZiF$rK*wuVOPtgu^7a-5#6nBy)eQSATfXegC*HGgV$K=8=ND0bRRjXUD z5qsc_be1_s&dR$u3t2cL=im*KgOHK9_u-BIU!~?z6CR|K=pS z17^{X%I&LMlxXG3r3?RQ1$1od&WO5^#dd2Vt|wDJSN~Mnq9~-?oO#p{6D8W^=5m6* z*2u|{rc3KN4q6OLdbM_eQqxVN{IMCm=^%gX_*RU|EBsD@)rxEH%4DH6WUW54BrK#uCqIx}eKCg)?TD%6w-(JXT->{mK znkwPHbSsZ;t*6}lJe<8F@Gf4&kG6sY^@EAN^|G7)*7G07xy=?4BkWdGM;uBQrAx(D&q!@&A~ z0}K}O?L_(z$HJwY##h8AatakJ(uh}`fwD9K{H zsH1LRncK=XR0*oUsL}GRxU~;<0;)KAMptbm-0hDQrPLrr_o!nlU%$I^*;c6S7M7%M zMYyNx2EEZ2wi>h`76oO8#TUh)#^1Qqiw{ZS(z_8>RGw`l;H_2&S9ph%=9R*HNEi=^ z4Dmt1`nf}mLL~d#P3sR@;Uu|YO+CPhbp)D1`CnZc4Q1(uV>-hr%~Nf}ZDjd00ewH0 zBTY~Uw=YLrsIKvT+OZar0tY)kSN!_PXXh`m?s&#Yo%`o&rR5*~Z5BW*zIY)N(pZq7 zMK0k~G$JMUa z*Gyp;1gWdJnZKnla&0RRDc)2fcq;Bfi1V>`13=~DDnTMktm@`7;_KTFTU*q8mv-E4 zBgT9YQ9_q-bZg|OdpyY*Hh!;BS9GFvem7U&r#EUd@x~TWElhyLa~g3ikk=KVQ@XKk zN-MhJkO_Qsy*I|)R#(06(ko7`liOL#+wt-rEZ#5{GD*yPp)WW{H90Zqn8EdKk}IFC zG`iNKN^sW}xv5{LS{YK6q08syh3k2ZsK*=wpp8sxmd8ygsu#y{dNxd?m^388IK|ZP#E8Hq@ z-rTmU@cNnU#x5kfrg1Jj#CPA&{Y00c=f_ff{)FuiJ{cj#QZT} zDBWV`4y{I(7-6a@yR`|O2xy$U2<5GpVstg%)Cf*n3MGrf*|SDC;%AK?<*RK8&h8g3w0GIMi z{qQstC^X?PNRA0CVHAo|KfZHJDgASya$Db=f;twDE+9zxkLw4GZfq}!DTT(Jo>k8p zYEqNP%En1q_1bGtXUSGLt&XVYAsh?gCLZ^|w?!qax$e@RPIt0m8jXvt9UgDX+Fe@v@l3aJK zzi~X_`fgVWiZ?DjLiH;i(Lz%Ydkb08y$vY1uIF;3t3RF^uY$!pgX%df@g0}jLf9&i zJ5RS1Y-v%FdYVoV4$4d8nFjb@s&A69rWwlA5O=*;RZw+G__z2Ay+?h!a;>Dce0<#w zs8oWv!VE}ALDCe8jq2{OE-Ty%s{KfuyVUU5>3}GfD#rn z1H~>4C5o{{FiAwf0@WvUTY~v`AUiC=>kTw&{9ld1!Phn=_&HQ#7;WsCjN6Ql#OL;}Ea$U_in5a34SG_vXov+;I zAyys1><;UBIl`p>}sO^bWQF2w3ieUcS%zbUC zrhK`aFF#U9DRMbKsiZUKRGXQ6`6so4yzC3|ax;02fO)zlmCTJ~V1aaZ6U_+t8Taw7 zbUxLZ#y6eYcSWxJY9hBUw~sm~pT*W{blRtySCHC|i_#QDqChf}s~)73YG=8bQVokU z9*Z++PjaeJ6fe|bJnv&X@2eBAmguK3OY=o7KCZXg7V{B5^@`CPjESGZ<61ixs|k`xi3NrPFmsy<=CYwG;hfVn75OxT@DOKT zvNh8NJaeTxV8rr?j73gG$#em(AaU9}#B`a?s2Tdtj1!Peccz*ZJzxI07%r8<(cO~i zZpoFOFau;;V7%^@mIw-DlHD!sWUg9n>29Ho$pUSW3}n`#%p3yBuB*!`2QE)^<;sr| zq03{_Wx@4`bh%_!$Rsh7Bxu*yr*HwScx1B4WmZPP$dw=C=Xv6>bmTl9g|+ZjQdMO6 zF&{NkS8{xpxw2c}kz9G!@!AoJn>#`&b4OfAmr?;LS3R4}9qEecOA?GbDPP0-M~rupBFD4DMgx*rVMv?_v`^}ih+^J%Eq zeEF4pbtJTxwXO_ngFEZo+2CI3+$)27g>$b6?lsO0yIIS~6`i|SYk%i_iTUOaOBB&u z^4lbP=}_!Tf5O-5=4t&kK8myfG)=qQYADs7_^MT-ez>@E-OTOEDM(TWEbwuaBkYt}Z$AWXr z;!~#-TYZNm3&9j756B&i}FcNRL^h=MCQ%YLU8Pe7h{d z3l`zUT7+~Q!LjL!MuV3vLdMl##!|k#EY)hgQYN<|CvlyQnz~!Mo6_mds6~oIT7T(u zsu_ia9|BjdqU>q384OJ5lWj{iQ`{`6)gLyckm$Hj&06^ym79>&Xm0ZENVSo$Dc#hR zY$AG-ASMJ+^1F%NxCzirO;X&Nnp(*`jiQG=eSPYx0=+4a(6hQ^q;us@^rh>m`L*MR zy9;dFGil+RNz-5A)kFut$NijFI|y{OTj%zudL(iN2eii~rOXrTCkFl(MYSAlH93GZK>ICPL1s_-EtrFQmYwa=i%54Q$h#zex{x&M84_&=o3U>xU zYmi)3;hmAU2ArA}X_vxl`6L->=6kI%t<24$kzvBk;?_}DFOccChy=hTHk~cN%r{8N&s5{coxjkx0cekX?TXnT1&~*#o zXPzK8jgOtp`y^Dl_l${imNio`%he$GB$gMO#i4aROnl(cXYswTQfRw4(oL%Q@H$Vd zbkyRkq<($^3g{{{b6cw-^a*U&U^7CPY*3hd#De1~CO5{r^W%k7YkoXmx!c0{IxDiQ za$kPj3(Csfp1CV`w<6XFk{eO#EEd@n9%_45SH?-@D9M0lj7}Hog2!Z)n^`lFLe2OB zz#0e>)8)vI9;LD?&5VF@w3OfKLJT5y za7#p@NvOjb@0MbOcRNDK2Q}f8)E0Q7W%&cXKELHrb1R@-xcU=;^$GKpA%=uZkw99k zC|HFiW(Sh3g;dm3$QBBkiDEV@Ki*D?z9iFBub23-z5&GDD?_6X}d$D&#Q)u42lo8U6V&D1b=GQc|hJO=%&vxel>T zXlPz)Q!UJ6&ODPUN=?cgVOFqR#Auh|fO@Rw=2q!eo@1%@LDlkD6N{-lh(pMoH76_4v7Z zoQTk{gg_$;T{{w`Lo;ulnz7|Ds1>+fHKr$271D@J2j5 zeFf@=0k0pfs3jD-4M^IF9Vd|0H92VvgbO6R31@D%y`*T7?n4y+!`99PLcs zdQ27dexgc-68ZBB=s|Q3)!{x#WF^v9@c%GC{zE}_ai)D7eHG`q5a+o#&LJO1U&VPM zkQ1Tn!947v=&L9%g%ZEyvMKv;eHH$rkj;xUk`YO&(mZ95-YClmNeqB)#o7Gw^ z<41fVeU<130q_r$Ncz03FwGt(ywf!u1NN#|(0mP382D_5H5MP*?&{#xWpo}hKe6t> zSjM`?S81=nMH$b}z*4WGW?-%Sl&-|W&t}zyzX?1k7J_ZzZ_*8+H)vD`e-kSG<5eU+ zN#Q@I7pf^4__ydJ1ao=Rl%ILYz>EgQ%|n(s8E@$h| zQO<^!%~W?eC|wdo0$?H5e^~h{fB-(?8BkaYD0swT{6RzavX8|kdRiN>#oT*V^bfQZ z!E)7?G8Cl_?GXBltE2#fh2Z>k|w2T`|uOhs1h?`B+FxGj|<&V6Eb zyx`l}Q&`bGp%a=vRc~!WW@w7xs|1vv1hc0kBW6zlRqb;2l&OidRAoc^oITa4ru7bk z3T0%Dm&ij7*ss*7^jU6E>ri%wIKMuyr* z(7c)$>Ig#+8aLtgre*pU%Cx##kTnv~DBMvt4y}B|R0`ZT^D{wqC-krLgh$7a*pIG+pnNjTD`)8 zC0)c^z$M`dMh>&jL)+Oi7;u`PdzmqN#$?FsnIJ<(olF_EL@&-u1Wk-*&cO0L3603L z(Snb@tg=(q9P@~Lu1PS}%o>d1>jP&st+eWZH)^5@f4PtX7H80XNQ;`ANi(A@#k47t zM0agZHFs-+LN@^#)V~}C^)H+AmEg3giWP{Vvnm6s}kvUAJs+_k5PLXiJ_9FDI;pB#^jpXZ(^Fhz%~fR=d2Z^^Rpjn zT8B@Xp=h_hW?+$BY+I!beI!O=VlZEsmhEP(Z*ekobtu0qdO+j@8u$7=&%I8duGts`J4rf{7xv zjp}NTV0Cqdx=`B1^ee@#SnFg}(D;`*doW*zkAYEx<|?(4Esk(~&Hud1un zX;1@@pc@wxMy$h&Hu-7}cfNW()RiQyZqARRSQQx;T8aHWV#dnkbLAtUSZ#4AZgV(PK7w#C ztJ@$b;lgxFP3j~wlJYL2Ab_5h@~hfArOrjLYZfNi7!1=gtDU*Z8AAG)pkO_%vyhY^ z53bK!4D(PMCN#E(2}!&MQXPozrw9Wr2_z?k^3|JbR*#xVDUp#kXN*u?qpUV-Hfy)Vznfl?pT+1=mQ);p+dP8k&Hlus2%=jBp}bD%8Rpf9*A zic$H*TdHo|z*6PMjR;v#hF){K1rfy(_N;t>k8>JL)|y#lu0CHa5JYE#z9?0;x`Nbm zBNo1mxo5E6B1dKXbLf$kF=*^?^Ze9K|x zR^6T-%NVimMM0|G;i|#a(EPelm{q5n@GKY`KOkx!y~1dIht!d|eb9|ISiM_&rE!D% zYSU8&^3|=PG@~}k42PL5XD<|T)oRqcc=fR{I^YCI&)DTxT+UZVW=fn z9pgy5!)yU3k1g%C@*y4)KNzc+#e5WK^`by;sU@h^bP2PNph_<#bv4cwh<&JSR{eL= z)~iD_>uL!m8D+z_lmdLv{3}0aSC|VNM{*NbxPr8Zkl^jp$oJF&-zyvA1`zVDiyXZ3 zs;~x33RGOcO5-dyZ7j+(;)Hmu1}IG9E^o3~-=wknMOt|72+V^n%y^`WzgGU*`D^B{ zlfM*yZELj{F9Go~*okO8{LH7|1&I?U1-cQyi?+5Wyhqhz@q_Trm5;9!`z-d~bu>9C z`Hr)yJ+{zZx4J0Jy4s^{)72hiw)WVwwrShAE9WvAzNy!+hQEuLtl+TgQ=LwJ8w*Qt zvRdE8eDxCp!FC@u%DWw-wu`&+v6yXJe%rOFJp4`YhwyUcW66gq1K8>s*mNy$HJClZ zPvt|Ya(pQ5iYcUK=0lhlp_JA0mKpiQKU&pfelkV#qN^$VW+3c&N8foLYl@(qP0@ZT zACT!Ttq8JgsEIn323eJY6l+y9h77{6Gg-LWHqJVLUa)(aul)>GkKRq$fxD|vOfhuH z7T8G%FtkBB*Ao;Rop2V&{CZN$AU9N0aus?tg$9>hNv(J*d%wS#Nts=>@KveKe3>%< zKAAzSi;8-v>N=b(WB|g_02|J6f6L|>5m7WMa?DQ_J`bGA&(cb->c`J&d7JW`Oszp? zIDVNcce4@;c8*2oj=J_gSI+aR_7rk+4?Ed8_b^tYM8O9stI7u=hW$!_{;BHOs(BWZ zWfn!93q!GLkIg&s@p|4|*%ZdPvTG{J%EaSb*^8mM@>S}|B{GR?Wihn!+cwfyO6Y*2 zP^>Fw`6ry*IN}3rNyf!-rW*od=U1}>;hJm{!(jk2`jRH$Cm-B46WnG=cC@P%#gIb& zYIDj|a)SL8wd~E`uSMaH&81}@g;y}K(a*%~NYwjEQx z2phae1Jv$24aW7aO$mm8Thh z(JgBx2GK>kxLG878c}q!9~+}%;B5m#d2d%2x|@Be`P+%OnMv7#^t{{M61Zu#<|!~{ z5wYgjN2Y!WNaLE6%9qlNqQ{v))chquw77AN6Jc?i(G0T$wnb&)C zSJ!FNmYr`-WF#%-v4jSZ8MYH8n+_^Oj0J(pUR-pRSywhljEpICWnkI1$LnY9%F7DPSO;6?r0w~q-;M(hec#1 zLac#aEh&rK=$yIM~ObKN#@W{@VFQfT+Fo9l3Zl$NGvOr#SY!oq1rga z`maEsi&ttD!6vyVi&eeCFR%iYvwe_~zIa?jYmkRJoa*T~B1o8zJe^IIQavrYLu71B z`sU|OIb3l%4yid2T)yCzNR3^Ie6?Zo)i!rp6+3563WpOmpF6Eu-;%37eRFDge(otL zxrhzw#9JIOLBaxn93| zT4+hkpCDZxIf6~ZvZyXu^`uX4`rC=C{YW(MP0YLMX1!n*r@3CY7EP3|p71rQT+~j; zRoPi9JMkqAT#sA#A~ZtEdW#LNl*m`D+0-8?LCr7T;R~-106Uav zZl{q7pSfqjyB3@*&IJmb6rM47)g`cgs_-b6#u9SFD{Q9+xuAre3(W+wA#texfcLqsa_zJ;Jz3< zUi2O>2alKWV4y;V$ORAm0@L9pB`(;&(K*#*HC0i)$fUgcYMyQGoUN|d^t?8}$m=!p z5@%zTo*>UR%#)6Cl}>GHG@q{u3;JUYpMtMcfv|6V?mR@y&0V0zenxR$QPr76WSqNT z{PT)N<_PFl_}QoqFknYiZxMvI{i4U*+XnDm59eF}c+LR6YXHv~3h#v!w*7tX{os7R zZf~q;VM%_#LJ8BM)gRi@sR>DKM3%6;$R;9Hm)XNEK6%qFgEvn3Fx{RzI#^&0AxK(z zyI&jIloW_|V~x$gkzS3G^S*4PJIV|uNU(EBgk|HD(^sURUhGCm=*?GOL&GvcozGX# z5s4OZf!~@`M{b5Jt3NV)QFD~1CB#CpUgHCQx^TYj`5f}*Ei(RPIZ%p z28K*AFQaKV3NZJf)xyWV7S4xSIB&J^vF)ONE??EpIPWdXrjf0cxFRTMA>G zSB(}cDZ0vejM0wmfIgO1IgfSva$X4KRC~f(QpHq=i)!lIZGftx*l_mfc55=dDP`qi z#TGB#>I)5@s4kOq*iQCcw7j!E?{`Dq?^@nj(YRdU*m1rpu4gN;MPKQotNB<CkA9mhbNh%)zqn6*ro@6qn+DrP%hiwDSlo2$0|Hk4n7u4e=uwm* zc0-T`Mr_kDnOO?o$D9)$0*H>zlDb)KjL8TAq;d)O(pr3fwoWZIn;I0tAETA6ldRP$2^DfWry>%m4I!n4%n>w zJVDDlirR0x-mxINib<|cu#I(OeKOBxSUVaKP-<@%UCTfB1f0>%b!xHTT1I|mjW+hP zCzm5<9QQ~jbvHmyDrZf^#c{iVy$6INw&Yi7J!Xn8MXy4vecWwVJ@zV2WfTL)kigP6%QxxU0S3EKOs z$^=}zMT|qIdJgs^H}BmO=Cfyd0%tkouB$1oVm1fTjf=#Qf&Z{3wPqXU8zhF%0%%e* zYZ)=>n8e4(4lOHc3wSqcw1EKBxG9J;=krH7w`cuMeny)?sY<#VO-ARBJs^(FAKUF| za%?xFP%Vb0^T$T=l^4*^k3B%JVrjC`#;V62kR(R)Ikwv-XO8VI(qA6ihZ_oXYkx^C zoY6Yv;q+UxnoVtuR$$#x0rp;jC_7Trhci%-D`VTSSY=Nc*ehQPQqmz}zI45zdKUG1jp;v$E8a&A)&wq-X$nRp1ZH19= zqC)aV@3WgGj_z`wZ@JI6-DiktJVqsN(l*E_f3(DjB`qz!ZcaYV`RC60=NdDkPrNQH zXCBe!pX#6UGt}P_3!$-;e~8ASXh*{`(99{~=c*wBNqhv`msx$?Bom%LRI0M=1m5neTRkuFG&7=#ILr( zTD854YAIn8V^vchI6nuwmeGFxDqsCYzWSH>>d*4kpXaN;%vb-yN~n$d`I#4Km~KF2 zLBEUv{}S%ECTJFA{7d2nBmnbEE5i|$A(KCP#Co+;`I&?()2!U(XCOr}tm@4W%23-R zL+y)KkQS$aAA<2tZce$afhaD83_|M^h&qy{*~{o`PEm35a+#Vhy^YizEx}8V(N{xv zmUP(Xay8Pp`c{7C@%#)!K!=ThXY728_pmkR83=ToATh0Nz5=HESC9~W(m{ux1)P5& zs>@xogUa2{67q%Aii7L~qFS)jmrOf!r1d@~d#4N?uG5(l`Od-``ebYjJ@aIZR%Cxw z$}4{vo5ocqVSNDm9vm{tj0H=f&o<#&QJ=gG%#JqaXWn%jbrgO#4T&Nst8a7#O=`{QkP z7Vae-f9q6hQbhfuNEU-Uy7+6hqR}H8db&KwNG*%w(zgTg-?ldQE^OGAW^YY8KS|V& zG`=bSf-M@%xH2l2UB{%Hr_DMN$7UTBx4k!smZdvD5*<3mDZkv&71rv?KdJLtxsuuC z{G?REI1i}W5D9faku>2PM{0~xbZ{DCh|CRenBmqPK#w%UYK+p;%>jBvQ6v9|r5zQN zQ$kngD$waCC{a3V=!$J0;)LR)b4PnAAu;V@jLOvvz?AZ6FD-FFzBQO3IRqLADF&D~ zRtjlQF&cHKlGi3J2P}bVJ)z8w@Sz~;vO;!1*b=ha5RgP)|C#(xBEDz$JMH`E)JO7bzQ3Ca%k9?>fV6Ty#Y_MyLWA>U7+d_YM{^pN|0!0 z001sK1Js?KT|PZEDeey`?$=o_@~&kO0v-r7_!K(r4mg0%2wKqmLe!O=82heu4Wz!9 zE?e{Q4W=>8SU_hiWCikL9yPW!Em?(=AwC&T*VzvRfDf}0Z1uOG#-tcJ^LT6 zFYH3Z!SRs>fw5?m| zLYJr}bd|&a%aS|#WL+jthD>Un-gKHdI_=nH}KM zb%0L?z^A?VU|?H=v_x60SNH`za;P^4_Nh9sPX(|~p-v&1-SuZmgZhAE;BGW8xs+cm z_S2ttd}CTZ7iUStVKz!gO8zXTtV79BE0&IUrXeDS6qkbdJX=}=L{1$p743z(XyUsi z@O#lSC_2?rQMiakP5SX#1qF(|;@XZ6Aj(fd$hly7Em+zIWI9m)TuW`cM zM`>s>F~w)s#w0D4t3jK294ODo@aJ6%ve!=wJ3@bLMXC%OFB`F+Bt&`P*p`v1mGWR~qZ4h1yW&CVqX)Y}MS1&k$ ze1XH0D%kmj1^dw9$*vx{tEC0kT<8_%K4z{|`LSws!K5&&FkwXD+t9JJ1A5^SK#z5X z1f34jy9*#??`JlLVl_b0y-#2Z4t#&%zjCXl<#shrMS8cZHW2pi3k@VZwo)VRHw8x> zy8)ENa_I8Piij6SwAEnCDMWlFj`&Jl#B%|nSp@N19PwOTL|dQ}M6)R3g*f5`A~Gc{ zLTD=Bm~H(%Ry6w>S|@8HEX`XLvn;QZ4Na~7We zJL>yKoSH45=PVSAw8xs$XTI{C-_O0(eq;G`v?hw0%TaV9ilWve2JWx#xVbNCj-mwr zKN|X9uYGu|SEx)to|M~0FSKhk)KYZ!SBgO0f?CH)wx$lWb zcl95?^X)9b-7!9 z_tojG$$t$RAefLL?3y_b2v&C;<{1P1zm|s-ujMtiyS;6MJKV43Re@`x+xdSjukBoG zFS0nB?%H1$-PZ8`t5Ncof8G2rIW#M;X6Cq9gp-kyk(SXZgVif;9Ffr>qf16c#xfaM z895nu$=EC-FJrlk6*8`naixr_WUQ2NwT#cn_`HmQjBXjLWPCwJQO0T+zais`GN`1e z`5GC&DdSohYh_%A!M!`10)4JG+FTD+Mxcsla--4XMkuiuEt;SG2SEApjmfC_Cs3k! z9J-{Vmq&l=rvSe4wrGdFYIuOR0Cq%rmT@-^cC4)TzRO>iuYiX5?vd=>ywLKWG(PZj zD;Mj}f80T+-C>9xB$M!T4i=fZ^Aw#HGQC&O1L#j01Q4TJ)WdZvZN6KU4a~4ELGRHwOEeV;pnw zXNqwQRv7=i&ypi{AaC?ql^#@a&1BEtE_jvTGbPUL$c-rkvBUl|B~Bw~VZQg*AJ)bWI@!!`pNnNO^0%FVN-_3XW>U|niUwrXpws8sC^9$)4jsm zxhDEPd_HE~Z>HWc6|IsQGC|0gZ^L?M);*`G$B6Pf&`c#4IQFR(?DZ0`uF?+n18E(o$mSkh z%jg-^Sbs|EeYGi|b>2oK0Tn8(U&RWUzCobp{Cf?qduwigl=)g6t)`;(___G({Fmqp z@(8ct&40N5%EjN7U-zp$SDy~=+<$!^bukTUH%2$`|GVI*cbC2ono@&*|aYXC7Kg0iE?updM8>FJm`{WOK@dZqBGHz$Rw5} zvWZ+GpZM#JHNvNfsgmG`zX9A-61qhjr>d@)$g zW6|>(Jk`OTkf(z8%cLD)nxQFpoMEqvQWk>8^A4h28+szy+C*~h!*9*)BfIkJg34wb zxj1Pi;|&=v$aqo4vofBSaYn||Tsd`@ZU%Z=#``ktqM-K(thC7au18?4|1#%g2(9$r z75-cF-!%czbDEHJkEkf8bHV?OV0j@}p7j~u) zYUp+*`Hm?YeDjqqjPkpXF-h?zZDMpamvm+Et{#%1Sk8IILaEs5@z&OEyYaa-$F|=pg2pF zv~qh`M!D0WmaCj$yP#5St08M1`N}Ki;m`g9oCBETa8B8;7G-tv9y^?#-zJbBTb;6Z zwem?oDzVA$6tMB*U`ok*!%qx`wo`-HZ5EtV(p* zLBNQE;Q$svmA+h7(ydl+T!1IX7GFE@QAZ=1JKQLchZI{U50(BE8IQ}T$T$UXHA9a5 zn58Qezj~-fdQKIoXyPTISUn}?-zwDKeg8_)Qv0*yDTPx`v!#FO_q zp@h|w0Czds2?F!f=DX?%Wp-3KJTKz~#kK%L!|28n1K8Ih4z zv=3ywCibmGg`*ZM%{wxgRKvrh$0I%#RAyS<96SZ&Jy~2g5KZ1ce9d2*0wA71ixsU) zVK$wW|Jaj_3|4LqGgi`tM%??NXrk%d3fYRjxk?b`=kAKrB>f>g69R*@o7J_j9x?vhPQiHC zC!e$AkHk?j)+|-}9)7WdBuf0aIL)o~$@z3GA;%AKpYd))fyy@bO3p<`N{~$0T)?~f z3Q$zb*yMaqhB{N{cMe(HTXUTkoKI?qTtM`YiS2>)Qs_c0ZftwE=6BI-S{ONBv$_1` z=W>-zY5gGpa-8XuVVZ!}Fys)~XI9p)4QROn&tt0a8OPbLnrxlfB%duZEbMl{w${5F zzseSMZPk`QJGSuSd+fBaqV_uY8VrRzzQ9AYJ{Hsd0%t|I@sNF?tTVT0JNCV{KeKu- z4zwaU_?Y9obDX!+Bc`2kLo?vQ3~|?LK-JF^Fix0AEdIk<^1-N|2c_)P>^Gup$bUs{rZZF|s5j^LqT%FD3p=1sd+3*8x5Cv^agA5Vbv~Pv_ zVQ#Guz%5NWLQVdWP|zns3j5loZ2AS4;+c>Fi%apGOYxjf!8gf*PQtD-ms`XzBXY0{nY!me&Ma6P4~NGed8{B) zgL1|tJOdx*j1Of3{dwpAygi&M^^#6RXCcb(U|FWk8hDzl$8BeXaqFPeTiLomZ3KUd ztK4g`#gp@WIDORsv1^{2z1nXDG+?#2gdf9-V$>w0S6Y!*%F2_SlzxS*Ys|VPrK=cN z=mc{^)()VQPXK}Oh@;Z$#N<$+5{(eeqH~1# zY*V(`IB{aJ^hSY!WJ|erIY>?8IG^`pw?5hCryZ$JsG8X?%?-62&E=a+f!PQ)tADN$ z;fr+dOtSHuvmv%qMT|F{pX7C(Ci`lcn+3ON)h~7hKkS3`^}!GOV5q99iQhSX*Jx6C z*9i2ABhV{yRNiwT@0sI$=Xl>73FqL2D!9^O!HoQHthHooWzCv3D{IlLm;gKHfSqfJsOz$>3)8E% z$QC_(E1OZZ(#HKz_)LoTX>eTl!~HsK?1br+6ya7RdC(4jv&g#lWEQqz>m{|g(tTFA z&l>xrvzekrBbJL~rmdXk*2vC-7Rs&CRcNDpmeS2f3xl4Ka23 zuqg4GxX5|IMO2!BqIDl0`( zL7l^u)l*X5F1l`u^rRq$xg4>1g2YGW6&fE|2X{Pa3_J;yy;w>iE}?{P>@Qcl#WJZJ z2dJuCfJtZQ?;)8pluKfISsY|yJA^rbT}!6pvmOPBZdW|L{#A#K0vwi|wJ4p9Q4|nz z;Lg{E+~s!3MdY|FjV@6xK;Yt7pF&LL(sJmrF0EY7Ujw8Vrd$EaN$mAhklUrhqn4z&ohW$W;nV3K^D&AMZJHpOIFX{yPh9hE5M?QddL4>_+x zh}it3vmXz=85g(^(aE9eabRflrGr@dQc`_#)zhBg=*=j!ZzAg3JSXNki3Q1wOp{`Z zT02thb@AQ^^yBc6f|k+0iJGT$I2||JQ*3U`r2Yjb&FP(+!JY&ZgJVnTNjXV3BA0dZ z)+x6IVzvhh?;<%xLEXE>X$_WCusAtHU9<$BW|O-3paam~`wl<$REO_8%TL7CllJW93fI;^?A!J1J`J zl`S;0RrH8&8KigUeIx>E4v8clNfJ#fU1C7o`G~76Nye=nZQe`xaM~@4d~D*VG!`DR zB9TtO37m7dvQ;o#8DJ+~FSfxEpnQyn{kgm9Fuj{Q0CJnN~FWW~J>jIN||ykwEjM zx!JAe_bA%DdXh&KTQ7{2Ul$>o$yBy%L1(mQb)BHOQ2p(6wW2Vwt2*H>uGrpgN4lLq zT-ZvR;6oPN*@aMO1F%cOkwmkp>!V9cB(oF>j>%g8#!+lTn2QTEtg9Rbg3d$cRtjk> zR2`=~@wGFaCtJ;uY{r+n5A+5X)M6X_}a22Qa$5zDhYJY&Gxah%M8n$IaMH*bDPt0If6;;)EWr4@vy7f%v9mxYAR zlaZ~|2A;WNTbrVlPv){9W)L)H76`(?I161wAgNwQ{I%Zh^(}MQHhlIK;)r**)1fBf zr>fEn6$>IkuYJ7PVc~k25@;^2JvYK+OoNlhdo0ww7{U$P4bEzd`WOK78ne^~`v8j={6FUsEEW{H<hOIc|Wvjb5|@&dvw6dKi@0sTW_*Jf@hoJXZgI>!&8j&AV-35K$rfCAyTgUU zFeq`{B&)$lApkju8WHM7oa4C(Dp*X{MxJ6T3 zjOUGX?2#qv-Di&@PRodQ=~jp|`H z+9!E{LJj_`Ldl!wLR4`fsiB$i4kJAT z9TIh}@~LYA1YJ_Kj~bvo$$~tvd&#juX>L?7PYDbclNY9-UAe+bE(}{~w>BRMUUgcE z9vq|b(u7H)Y^e;@pENn0-Kj!wNv8a`nw3f;i36!T!*c*YH^4v^QJb)b2@a(Nh=D^{ z^cJ6rR-|AY%jPX%-g;{&76X6Qhnh zD<1`06^zP|TnD94xx_`#7JHnWJlai!GwW~t9Ib}Kj?{5Mm#(74+PneBzHlgMD@p>( z-3T7$@K_{gFjX0|p73q-hq$dM9)-1dYcwh3DivI@tnneDzs6MhvYeeQI-OZ-KX_Gp z)z4`isF%i0KWBD=?n9i|%DJCUsxqDwSn%oRF;(k|)MhK6&?jBO!g~h+ZAxcoiV&d7 zEy~Wl)_;rs3&UEx75=MBv(@SO7l#l_qkuqYfi=T!$5j*q+4U5It$c-}BdbGkR^z!$ zNOPmHiMOY+bmM^ak3S2JNM`fB-IQWR5Iz#@-OdTLEwKCK?<$_PvK;>^l9 zRUN&>IjRIut6L?3g*qQz6KF0bS_&9Vnmgn+U}B+j%co05tBiIT%`!S=q-3N>3|&HeFDSY%j-Td)YE-b}Z0r4mTjE zGGYQ%yAP9(IhcN+PAV5_fX>8#&V)4qvhfuaXZU;^?|G*OX#0p2UF>XN%cuCjtUV4F zeQ>bUpg|rsdNa9m)q^g2*@$Rt&(Huib_|{=wyN*uwF`s;CqVTA^`zrFcBM$Da6)U6 z2-Z}wt|;;%1~DWiBwx5+uSdO`)CBGhcSv2`dJ@%dsKkUpe6gIis~Y$2QZ zoWht)UnJ;CKhNG6l+k<;V#Q%WtFJ>yI*}x1XQtSKw~d%3&~lVh_;t~hn3OBWh zR{}`g*Lhy(1g~1eBQR{u7dA8Mso+jKVG9{#6J3a8^0hi(GNii6eYUhk(1$izVMI?| z->d-x-|h5@Y2Bv!lmrMq+o%)0R>EpEN!ZRHnZ_|+ z0JkY>dOda089H*dK%JXI-lZb4d8;g9l6_ z=2Q@1_?TcNvQ!$~$$uzVTwhW>uea0#7GxszP+dHCzLPN{0{fgUf$(n3M2U;ZBC^n=CK-)y`SdFQKXO!n6&`*nquevRoyF&gOpNd zt80R#&;@UJ{0t+-mCB}`6RX4MwDoFG94X{!nTf}_)#LS)XVDIZINl{f9uL(7J>?A4 zlEpN^6ZtB?Lsx)Sjb_1eB8yz8IjD<6CLOr)9jjG~r8V*ckUQEn0zau*ak#mSjOJ}a zS=%{KJ>lw6i!v_r4l09eH2l(92^lF0j*JkX?iCuCipd0gAPhaPg}DZ2>(L04XT5rc zO*$3R=aiuOGSGCdsm6>>=aG-Dk5;DVxdyHw5|ImWG?x%RO^bLSJ|)pC0|OlVv})jI zPe_E2;IUGlET0W`Qv{zvj&K(myi%5eC5M1}Z7L?Lgt2z>78`DC#Ktm1o~vIcZP`JW z#dUolN0IWpFngm`mVA zAU%*Gsp$qO$`ps2p_d~ACT@mau5{MY)ZOl$LzSg&^jpBF7v@m`x1&Nzw8Uk_a=t3D zvV#E1h!5m{JErKn1`BUuy=&?5F@}F$p1JDt=6Jz5Z12pB4Mf-tt&kZTi16v4)(zW+ zHihcm(56hQw>A|aUOxbWxJxW0_Tn~f1i$UWQ`gQt$=25h@ebG5YQMEuMm$6m)?~1> zGum>xoO&ibL4q)}-T)8)()46&$-jN zq~VZ{wyE;zaJgzSUQWmsGCEmbj+4RniF#j_KgF|>BQ3ByFF#3}98dR}=E>$TCUj6~ z*l6j1yEg2ai%Uu?c#l{Ky=(EFX7_Zrt6)k?tw~=7cdmQ205ne%%Ybes*93A{Dfl6b zT&qBFdCfW+Rz6Hj>$ZQ}?#KL+>-0F-z%m5u#2V~yAMwXpt4gLd>&$v+^`!y}eVJ8!wW|r>ut!`MOkzu6Teo8BKzn9rz^GP%M=M=7p(Lk$WqiECdZ|N$VR`x zPN-Ul*X0Od1m+@hsXJYp`p2^%wI}C*nH8f; zQgDw{QAXw_S(S{PN}eA3-gKJ%odslINX z89%^y(_GvwUMuS zRm`)PHFyGsw?p|!BBDh2v`WVo0Gr}*fThCEJV}z{1}Y9xanT9URT%ulg%NewqhLgu zX>*^qHB`}U-0T{a#L38{?GZ|wecMIqvhmDJj)jH8&dRBR%t)as-IPAUg^TT7Kq3hsTG_$T!C> zpO_D?nHpf7&yl(%A>_u}$AiE`rXEK|dbLb*^!|c$6)~Bc-D;CQCNQxqKNo$X~kSGHY>b|e>WfSu*DWu zAMP{XYK!~aGvHs!4==_J6Nz+7!ofJQC(!24bFCG<}{{ID=>h6RbiWKyhv z+Q<*aA9sUA5}hV3SR8WM+J{J8wM;lUb6#pMpL~TaAk?(8|1ooR4il1}x2%zU7c_Pa z$84O6d=0lpD-rT6Y(6o&Hl>IkDqF}K0_&rfDPnA?BpkkGaM;YYyF<&6zR!`(}Cc58K_1sjK0*3zH7Xy*C0G>qoXs>t^#^L^ROGbG{IfxMrW$>#pGZ0^Ul zQpO4yYf@`%`+VA>ogjkcQGOja2Z3dlUorc8X1;G`LP=ecH}J@nUoi7od3T!iX{>BE z7m&B*!S-^@wKB3YiWci!8@U@>Z8MwOU@bql!CJ^^Ylh&I-)#?(tHlbz)z%x%5`l7enJ{fjl* z`C5rt=P~%2Ws8g|tn&nX=(7Z_x0X)TpRYEXDWc?AMv-};7UN9X=Vm}G+vnwFi+l#x z);F{XCZyp}JC~*_M&(dkYUY4y7+P*zTt{_OpEmQf0oOEDU5evE3SnjWy4fKE;b(_r zml9GvVey=Kv|}wTv-+~MRaGGZkV=)qebVlearrTXby(TR)uLNVs2aaA+5^ChRTASi zA@iE0BiD4WH~>x=vgm6KqIvWv4Z4faIBWJN&Hh##<&=4wS$#+L@^doj_GSLu%)d1A z7iRv_%)i2vJvy;}=e`3I4^43sf-Yd;Uu9n+s_eO^^w9Lg z{;7$*)9db>n%KW?$MC+=_)t&r-h+F_Mu)#zI($=aZ~s8A{taxh&t~W9?cLDZZyr8; zuzzsJew|Hh5O8-{!L3~b&wvY~%-@B02d1AV>2Bg1?9H*F{l zuHQJ^J2_G=pWoO zJP15UH@p!_KM19V=2LoSX=-}vKN9*gCG;qS9-dF=ZHM;{jgJn0mZTouGqP!9aJ{%? zq(uGq?d|K|xM}Z(^&3jV0~`8>_ii5U9~{`cxesgLkM4TB@SL&F<~N8sNLn?{D<($Yp6 z!{GYf(x(1?7_P6cck|x9!GWPYeFHT;O6yvdiw^4hxTCGI5M=puWw`jUO0Ed#*yC5rIC@Lf!={Vn_zx8cm3Yp4gEu< zjeR4%d-_WQ1M4^K**Gvf+}AfU%q^8IT;*gY-wlcA>UH;Q-??LYX#dF2fsvkXlnzWG zac=s4-@5h4qRfih4h)T#9-27ty=|jYlVd}N@4*=@OGNE)T}4r6B1(O|G*%j#Dn-%S zMD)d5CngUc7=3Wxbn(A`rg$ewriw29^^%aRvEv5S;8irN!VOKJc0yLLp;4TKgOUB6n-ZW-STMw z8dBbNU}BsOY5|;qC>l&ey^F!wSvoWwsJCsxC=uuf>2FFzn=X~=-k}3irF$o)roS;X zcCb_{Jb8X45#4yH)XGt4-!{5`bZTFTO7OJ@@ir!+{>w?fZD@L^mX6+Gb0QkJR64`D z5o6E#mr5y&cT69ky;!Xu+`G4Qpq4xBczYt+dMOz99+(&|O-n&&MU>yQe{^_aB&NHV=5h$2V%)k92ywPl*>5MJ4VRVe*Y%gcHGSaVa6{%)-%_%20f2iBj_)ZQxM%2|8X5bkz^^8v+b%^5%ikqOV2nBBKBs`FQbbx-NRp~YcQy_d}z4zCyw>i6=+-+>9b#kx|gr$)9VqOV+v zB5H*$<3)tYdYbZONfRdre(&JKbZG?9G7lBx_~kTBhsxNPghGu9>yZhU(?D)VPZ=xS zb8u`dPI{RlLHRC_{_EkW%k4f~n{I5K>*1oyP4DPGFFl-dIq5@}dCSBEYE~@52WZWg z!#%b1C=anD9-!jyNJQH%hkL{~8kkO&Ms^;aEX|Y4162OyNQQt1U1@3O=y)t$2dKr{ z64A|h%!h(;9TB77u3^ zd_f0Wr&mk1Tn;s2)?h@@AlTI$KCMHUhe9J$41)jPIPr#GC+CgSz~4CM&Gbiq^Tf2| z%VD2-l212~oOy{)?~mrue1V3o*8D55&DVz>YOJ6F}$`<4G*D6#DT6W)5v98X>4>{9aXHRD3`^Q z+)L%spkazL4V8iKu7s`Ur{U(`RY2h7_Q;egDDn zlFdMfT?Xl)mQEHlvxWFUkEMAmPS$`S?R{w;qvQF~mRk>$>V+Ydwlw9ej$L&()D)uW zl8GS0&CFs?F%x2SGyoNrCb!S&=Do#{fX%M#Vg3CxTVCrcqt?qq&Q2H zI%Kkc|HQOOBPRnk_3eh#mn_iD^OGS17E?MMzapjX9h%;^&SZfG5QlCX9kY?h_CuxN zgVQDFv~n&!*R=?oyAO^{kD>uw65j2J=+?!_)_~Uz)=WJj^m6m@(q!jinpGoWw~dy@ zm||GEYv{ z3SuFI%c06xB6@H>fp?Uc`yLzpPmRsj(VY*$Iug1EhK5;^n3@=)Gy9U4Qw-*}jSj1O z9y)N?O?MpF-T$R63nUo~vDlQEL%SxC?hLlOMyIA1fkI=ukGJi1?qm6Dnpu@tCm1PB z9w-eXo<@qJ`-{{2O2u2W1~xUxgvH)b0zh$Han}_7qr#O~Q`7WCbo`nv{V01HGEZ zVw&}2%+6%j&0}K|4~6QD2r05axp>Ga9^qR&q|9>W;vt<&=2LE4G>t@A1J^)ewBLoL zy<^c>HNv$~#yh4<<56@4Yc;-1ZFlV72S-w|QTe|}MCDnlS9&68_C=;Qiw_Yh`>&uM zP6Y+=;De>m?SwO7xwfofaqkwDUsHY9kBc)Be6cs=BMCL(OKw&|1_T3!>ksFcE)h-GZCP^JEG|8iRf-E58qRoUO(vCqsFH+(mfhS9WFjJIyQ!`PZFo=)1-%rdk?Z2 zS1KZXq>L9Q_7=nHG>tgA=FtE0DW$hzJI(C2OmVZ!l~-6yVn{wukbk8geS|L*(KRZsov z_aAwu{}*rcf9+fUAB^q&qyO+{$hRoE@a5;8i4u3;t8GXBh`;9Z+y(Q`X*6~JvUPS@ zzrJJJj)8AIv;Xh??!VvmPd?mu(|7*!52m%_;MN--*jD;}X>4LrYjO|x?E+H|sLT(1 zlMMz?{egM1JNRF}WAs7hmLAw~V0b~4i9O#9z#iCNnx67I8CcPuA9da2$e!qbq6p#N z&txwKSL653>f%MwcW#|Hux)JYZj}CLd}uUg#&EU{BF3u)!GJ&U6 z`O`nWBwFt;TKsQ3Ai9%C|1aNr`O3YOZ&?qEDzSk1gzKX1yp`kN>3!0ASU4>o<)vcj zPxku1;9s9k*(i(fj|0iI^uk|%%1eKXrB|K*HUHZAj_~(B0J7Ic(djwl+%1Cc&=(%_ zaTYw~tynq!0{_(GCx7vr{zCr29lpVT9mN0L=-biS=(_*Ez4KXZDv09n31(AwiVKOG zi;9BKV57LGMG;zQBBW9!h=L-tRz*Wd7g`@geFb-Jbmu#`(7kWqLKm*Y@0*+3d(+-5 z+zIxCGk5OHIcLtFVbXzyAJV0KF+b~R9h~!7^y_42#c(pt#!_5~Gw4fv$s{gp6z|2e z7*|%5*CqHKyaT_5Kf+((pYTx};)38ec?@-KLh4Z; z7G&4FS!eyJtM9BhtNR4izo15{?QypCw37ejh@Um%%B{k8zRg8TM<>*3a+!-k+=>UZ zE3r zCY?@Nw|8;K!~`p#%aTC6Z@yxw20n>aCjQq}jio`7IZxdA=OV~rmP9R}*xtjH)iCcE!^Tq&@VX#wqLwfVV|Po~0~}$d6H42Qy(sr^m8*M*Y08_kjMP T41AtTf42PcxIUo&E(3o6$L(Ft diff --git a/trunk/packages/Newtonsoft.Json.10.0.3/lib/netstandard1.3/Newtonsoft.Json.xml b/trunk/packages/Newtonsoft.Json.10.0.3/lib/netstandard1.3/Newtonsoft.Json.xml deleted file mode 100644 index 6aae8c6..0000000 --- a/trunk/packages/Newtonsoft.Json.10.0.3/lib/netstandard1.3/Newtonsoft.Json.xml +++ /dev/null @@ -1,10559 +0,0 @@ - - - - Newtonsoft.Json - - - - - Represents a BSON Oid (object id). - - - - - Gets or sets the value of the Oid. - - The value of the Oid. - - - - Initializes a new instance of the class. - - The Oid value. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. - - - - - Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. - - - true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. - - - - - Gets or sets a value indicating whether the root object will be read as a JSON array. - - - true if the root object will be read as a JSON array; otherwise, false. - - - - - Gets or sets the used when reading values from BSON. - - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. - - - - - Gets or sets the used when writing values to BSON. - When set to no conversion will occur. - - The used when writing values to BSON. - - - - Initializes a new instance of the class. - - The to write to. - - - - Initializes a new instance of the class. - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. - - - - - Writes the end. - - The token. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes the beginning of a JSON array. - - - - - Writes the beginning of a JSON object. - - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value that represents a BSON object id. - - The Object ID value to write. - - - - Writes a BSON regex. - - The regex pattern. - The regex options. - - - - Specifies how constructors are used when initializing objects during deserialization by the . - - - - - First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. - - - - - Json.NET will use a non-public default constructor before falling back to a parameterized constructor. - - - - - Converts a binary value to and from a base 64 string value. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Creates a custom object. - - The object type to convert. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Creates an object which will then be populated by the serializer. - - Type of the object. - The created object. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Provides a base class for converting a to and from JSON. - - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a F# discriminated union type to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). - - - - - Gets or sets the date time styles used when converting a date to and from JSON. - - The date time styles used when converting a date to and from JSON. - - - - Gets or sets the date time format used when converting a date to and from JSON. - - The date time format used when converting a date to and from JSON. - - - - Gets or sets the culture used when converting a date to and from JSON. - - The culture used when converting a date to and from JSON. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from its name string value. - - - - - Gets or sets a value indicating whether the written enum text should be camel case. - - true if the written enum text will be camel case; otherwise, false. - - - - Gets or sets a value indicating whether integer values are allowed when deserializing. - - true if integers are allowed when deserializing; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - true if the written enum text will be camel case; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from a string (e.g. "1.2.3.4"). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts XML to and from JSON. - - - - - Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. - - The name of the deserialized root element. - - - - Gets or sets a flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - true if the array attribute is written to the XML; otherwise, false. - - - - Gets or sets a value indicating whether to write the root JSON object. - - true if the JSON root object is omitted; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The calling serializer. - The value. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Checks if the is a namespace attribute. - - Attribute name to test. - The attribute name prefix if it has one, otherwise an empty string. - true if attribute name is for a namespace attribute, otherwise false. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Specifies how dates are formatted when writing JSON text. - - - - - Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". - - - - - Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". - - - - - Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. - - - - - Date formatted strings are not parsed to a date type and are read as strings. - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Specifies how to treat the time value when converting between string and . - - - - - Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. - - - - - Treat as a UTC. If the object represents a local time, it is converted to a UTC. - - - - - Treat as a local time if a is being converted to a string. - If a string is being converted to , convert to a local time if a time zone is specified. - - - - - Time zone information should be preserved when converting. - - - - - Specifies default value handling options for the . - - - - - - - - - Include members where the member value is the same as the member's default value when serializing objects. - Included members are written to JSON. Has no effect when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - so that it is not written to JSON. - This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, - decimals and floating point numbers; and false for booleans). The default value ignored can be changed by - placing the on the property. - - - - - Members with a default value but no JSON will be set to their default value when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - and set members to their default value when deserializing. - - - - - Specifies float format handling options when writing special floating point numbers, e.g. , - and with . - - - - - Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". - - - - - Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. - Note that this will produce non-valid JSON. - - - - - Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. - - - - - Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Floating point numbers are parsed to . - - - - - Floating point numbers are parsed to . - - - - - Specifies formatting options for the . - - - - - No special formatting is applied. This is the default. - - - - - Causes child objects to be indented according to the and settings. - - - - - Provides an interface for using pooled arrays. - - The array type content. - - - - Rent an array from the pool. This array must be returned when it is no longer needed. - - The minimum required length of the array. The returned array may be longer. - The rented array from the pool. This array must be returned when it is no longer needed. - - - - Return an array to the pool. - - The array that is being returned. - - - - Provides an interface to enable a class to return line and position information. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - The current line number or 0 if no line information is available (for example, when returns false). - - - - Gets the current line position. - - The current line position or 0 if no line information is available (for example, when returns false). - - - - Instructs the how to serialize the collection. - - - - - Gets or sets a value indicating whether null items are allowed in the collection. - - true if null items are allowed in the collection; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with a flag indicating whether the array can contain null items. - - A flag indicating whether the array can contain null items. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to use the specified constructor when deserializing that object. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the id. - - The id. - - - - Gets or sets the title. - - The title. - - - - Gets or sets the description. - - The description. - - - - Gets or sets the collection's items converter. - - The collection's items converter. - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets a value that indicates whether to preserve object references. - - - true to keep object reference; otherwise, false. The default is false. - - - - - Gets or sets a value that indicates whether to preserve collection's items references. - - - true to keep collection's items object references; otherwise, false. The default is false. - - - - - Gets or sets the reference loop handling used when serializing the collection's items. - - The reference loop handling. - - - - Gets or sets the type name handling used when serializing the collection's items. - - The type name handling. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Provides methods for converting between .NET types and JSON types. - - - - - - - - Gets or sets a function that creates default . - Default settings are automatically used by serialization methods on , - and and on . - To serialize without using any default settings create a with - . - - - - - Represents JavaScript's boolean value true as a string. This field is read-only. - - - - - Represents JavaScript's boolean value false as a string. This field is read-only. - - - - - Represents JavaScript's null as a string. This field is read-only. - - - - - Represents JavaScript's undefined as a string. This field is read-only. - - - - - Represents JavaScript's positive infinity as a string. This field is read-only. - - - - - Represents JavaScript's negative infinity as a string. This field is read-only. - - - - - Represents JavaScript's NaN as a string. This field is read-only. - - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - The time zone handling when the date is converted to a string. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - The string escape handling. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Serializes the specified object to a JSON string. - - The object to serialize. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting. - - The object to serialize. - Indicates how the output should be formatted. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a collection of . - - The object to serialize. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting and a collection of . - - The object to serialize. - Indicates how the output should be formatted. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Deserializes the JSON to a .NET object. - - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to a .NET object using . - - The JSON to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The JSON to deserialize. - The of object being deserialized. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The type of the object to deserialize to. - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the given anonymous type. - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the given anonymous type using . - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The type of the object to deserialize to. - The JSON to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The type of the object to deserialize to. - The object to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The JSON to deserialize. - The type of the object to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The JSON to deserialize. - The type of the object to deserialize to. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Populates the object with values from the JSON string. - - The JSON to populate values from. - The target object to populate values onto. - - - - Populates the object with values from the JSON string using . - - The JSON to populate values from. - The target object to populate values onto. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - - - - Serializes the to a JSON string. - - The node to serialize. - A JSON string of the . - - - - Serializes the to a JSON string using formatting. - - The node to serialize. - Indicates how the output should be formatted. - A JSON string of the . - - - - Serializes the to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output should be formatted. - Omits writing the root object. - A JSON string of the . - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - and writes a Json.NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized . - - - - Serializes the to a JSON string. - - The node to convert to JSON. - A JSON string of the . - - - - Serializes the to a JSON string using formatting. - - The node to convert to JSON. - Indicates how the output should be formatted. - A JSON string of the . - - - - Serializes the to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output should be formatted. - Omits writing the root object. - A JSON string of the . - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - and writes a Json.NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized . - - - - Converts an object to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can read JSON. - - true if this can read JSON; otherwise, false. - - - - Gets a value indicating whether this can write JSON. - - true if this can write JSON; otherwise, false. - - - - Instructs the to use the specified when serializing the member or class. - - - - - Gets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - - - - - Initializes a new instance of the class. - - Type of the . - - - - Initializes a new instance of the class. - - Type of the . - Parameter list to use when constructing the . Can be null. - - - - Represents a collection of . - - - - - Instructs the how to serialize the collection. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Instructs the to deserialize properties with no matching class member into the specified collection - and write values during serialization. - - - - - Gets or sets a value that indicates whether to write extension data when serializing the object. - - - true to write extension data when serializing the object; otherwise, false. The default is true. - - - - - Gets or sets a value that indicates whether to read extension data when deserializing the object. - - - true to read extension data when deserializing the object; otherwise, false. The default is true. - - - - - Initializes a new instance of the class. - - - - - Instructs the not to serialize the public field or public read/write property value. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the member serialization. - - The member serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified member serialization. - - The member serialization. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to always serialize the member with the specified name. - - - - - Gets or sets the used when serializing the property's collection items. - - The collection's items . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the null value handling used when serializing this property. - - The null value handling. - - - - Gets or sets the default value handling used when serializing this property. - - The default value handling. - - - - Gets or sets the reference loop handling used when serializing this property. - - The reference loop handling. - - - - Gets or sets the object creation handling used when deserializing this property. - - The object creation handling. - - - - Gets or sets the type name handling used when serializing this property. - - The type name handling. - - - - Gets or sets whether this property's value is serialized as a reference. - - Whether this property's value is serialized as a reference. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets a value indicating whether this property is required. - - - A value indicating whether this property is required. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified name. - - Name of the property. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Asynchronously reads the next JSON token from the source. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns true if the next token was read successfully; false if there are no more tokens to read. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously skips the children of the current token. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a []. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the []. This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Specifies the state of the reader. - - - - - A read method has not been called. - - - - - The end of the file has been reached successfully. - - - - - Reader is at a property. - - - - - Reader is at the start of an object. - - - - - Reader is in an object. - - - - - Reader is at the start of an array. - - - - - Reader is in an array. - - - - - The method has been called. - - - - - Reader has just read a value. - - - - - Reader is at the start of a constructor. - - - - - Reader is in a constructor. - - - - - An error occurred that prevents the read operation from continuing. - - - - - The end of the file has been reached successfully. - - - - - Gets the current reader state. - - The current reader state. - - - - Gets or sets a value indicating whether the source should be closed when this reader is closed. - - - true to close the source when this reader is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether multiple pieces of JSON content can - be read from a continuous stream without erroring. - - - true to support reading multiple pieces of JSON content; otherwise false. - The default is false. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - Gets or sets how time zones are handled when reading JSON. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how custom date formatted strings are parsed when reading JSON. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets the type of the current JSON token. - - - - - Gets the text value of the current JSON token. - - - - - Gets the .NET type for the current JSON token. - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Reads the next JSON token from the source. - - true if the next token was read successfully; false if there are no more tokens to read. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Skips the children of the current token. - - - - - Sets the current token. - - The new token. - - - - Sets the current token and value. - - The new token. - The value. - - - - Sets the current token and value. - - The new token. - The value. - A flag indicating whether the position index inside an array should be updated. - - - - Sets the state based on current token type. - - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Changes the reader's state to . - If is set to true, the source is also closed. - - - - - The exception thrown when an error occurs while reading JSON text. - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class - with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The line number indicating where the error occurred. - The line position indicating where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Instructs the to always serialize the member, and to require that the member has a value. - - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Serializes and deserializes objects into and from the JSON format. - The enables you to control how objects are encoded into JSON. - - - - - Occurs when the errors during serialization and deserialization. - - - - - Gets or sets the used by the serializer when resolving references. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how object references are preserved by the serializer. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) is handled. - - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - - - - Gets or sets how null values are handled during serialization and deserialization. - - - - - Gets or sets how default values are handled during serialization and deserialization. - - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets a collection that will be used during serialization. - - Collection that will be used during serialization. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Indicates how JSON text output is formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled during serialization and deserialization. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. - - - true if there will be a check for additional JSON content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Creates a new instance. - The will not use default settings - from . - - - A new instance. - The will not use default settings - from . - - - - - Creates a new instance using the specified . - The will not use default settings - from . - - The settings to be applied to the . - - A new instance using the specified . - The will not use default settings - from . - - - - - Creates a new instance. - The will use default settings - from . - - - A new instance. - The will use default settings - from . - - - - - Creates a new instance using the specified . - The will use default settings - from as well as the specified . - - The settings to be applied to the . - - A new instance using the specified . - The will use default settings - from as well as the specified . - - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Deserializes the JSON structure contained by the specified . - - The that contains the JSON structure to deserialize. - The being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The type of the object to deserialize. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is Auto to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Specifies the settings on a object. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) are handled. - - Reference loop handling. - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - Missing member handling. - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how null values are handled during serialization and deserialization. - - Null value handling. - - - - Gets or sets how default values are handled during serialization and deserialization. - - The default value handling. - - - - Gets or sets a collection that will be used during serialization. - - The converters. - - - - Gets or sets how object references are preserved by the serializer. - - The preserve references handling. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - The type name handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - The contract resolver. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets the used by the serializer when resolving references. - - The reference resolver. - - - - Gets or sets a function that creates the used by the serializer when resolving references. - - A function that creates the used by the serializer when resolving references. - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the error handler called during serialization and deserialization. - - The error handler called during serialization and deserialization. - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Indicates how JSON text output is formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled during serialization and deserialization. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets a value indicating whether there will be a check for additional content after deserializing an object. - - - true if there will be a check for additional content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Represents a reader that provides fast, non-cached, forward-only access to JSON text data. - - - - - Asynchronously reads the next JSON token from the source. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns true if the next token was read successfully; false if there are no more tokens to read. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a []. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the []. This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Initializes a new instance of the class with the specified . - - The containing the JSON data to read. - - - - Gets or sets the reader's character buffer pool. - - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - - The current line number or 0 if no line information is available (for example, returns false). - - - - - Gets the current line position. - - - The current line position or 0 if no line information is available (for example, returns false). - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the JSON value delimiter. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the specified end token. - - The end token to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously closes this writer. - If is set to true, the destination is also closed. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of the current JSON object or array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes indent characters. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes an indent space. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes raw JSON without changing the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a null value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the beginning of a JSON array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the beginning of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the start of a constructor with the given name. - - The name of the constructor. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes an undefined value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the given white space. - - The string of white space characters. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a [] value. - - The [] value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of an array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of a constructor. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Gets or sets the writer's character array pool. - - - - - Gets or sets how many s to write for each level in the hierarchy when is set to . - - - - - Gets or sets which character to use to quote attribute values. - - - - - Gets or sets which character to use for indenting when is set to . - - - - - Gets or sets a value indicating whether object names will be surrounded with quotes. - - - - - Initializes a new instance of the class using the specified . - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying . - - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the specified end token. - - The end token to write. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Specifies the type of JSON token. - - - - - This is returned by the if a read method has not been called. - - - - - An object start token. - - - - - An array start token. - - - - - A constructor start token. - - - - - An object property name. - - - - - A comment. - - - - - Raw JSON. - - - - - An integer. - - - - - A float. - - - - - A string. - - - - - A boolean. - - - - - A null token. - - - - - An undefined token. - - - - - An object end token. - - - - - An array end token. - - - - - A constructor end token. - - - - - A Date. - - - - - Byte data. - - - - - - Represents a reader that provides validation. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Sets an event handler for receiving schema validation errors. - - - - - Gets the text value of the current JSON token. - - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - - Gets the type of the current JSON token. - - - - - - Gets the .NET type for the current JSON token. - - - - - - Initializes a new instance of the class that - validates the content returned from the given . - - The to read from while validating. - - - - Gets or sets the schema. - - The schema. - - - - Gets the used to construct this . - - The specified in the constructor. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a []. - - - A [] or null if the next JSON token is null. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Asynchronously closes this writer. - If is set to true, the destination is also closed. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the specified end token. - - The end token to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes indent characters. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the JSON value delimiter. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes an indent space. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes raw JSON without changing the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the end of the current JSON object or array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the end of an array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the end of a constructor. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the end of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a null value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the beginning of a JSON array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the start of a constructor with the given name. - - The name of the constructor. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the beginning of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the current token. - - The to read the token from. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the token and its value. - - The to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - null can be passed to the method for tokens that don't have a value, e.g. . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a [] value. - - The [] value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes an undefined value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the given white space. - - The string of white space characters. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously ets the state of the . - - The being written. - The value being written. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Gets or sets a value indicating whether the destination should be closed when this writer is closed. - - - true to close the destination when this writer is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. - - - true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. - - - - - Gets the top. - - The top. - - - - Gets the state of the writer. - - - - - Gets the path of the writer. - - - - - Gets or sets a value indicating how JSON text output should be formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled when writing JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written to JSON text. - - - - - Gets or sets how and values are formatted when writing JSON text. - - - - - Gets or sets the culture used when writing JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the destination and also flushes the destination. - - - - - Closes this writer. - If is set to true, the destination is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the end of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the end of an array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end constructor. - - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes the end of the current JSON object or array. - - - - - Writes the current token and its children. - - The to read the token from. - - - - Writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - - - - Writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - null can be passed to the method for tokens that don't have a value, e.g. . - - - - - Writes the token. - - The to write. - - - - Writes the specified end token. - - The end token to write. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON without changing the writer's state. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Sets the state of the . - - The being written. - The value being written. - - - - The exception thrown when an error occurs while writing JSON text. - - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class - with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Specifies how JSON comments are handled when loading JSON. - - - - - Ignore comments. - - - - - Load comments as a with type . - - - - - Specifies how line information is handled when loading JSON. - - - - - Ignore line information. - - - - - Load line information. - - - - - Contains the LINQ to JSON extension methods. - - - - - Returns a collection of tokens that contains the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the descendants of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, and the descendants of every token in the source collection. - - - - Returns a collection of child properties of every object in the source collection. - - An of that contains the source collection. - An of that contains the properties of every object in the source collection. - - - - Returns a collection of child values of every object in the source collection with the given key. - - An of that contains the source collection. - The token key. - An of that contains the values of every token in the source collection with the given key. - - - - Returns a collection of child values of every object in the source collection. - - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child values of every object in the source collection with the given key. - - The type to convert the values to. - An of that contains the source collection. - The token key. - An that contains the converted values of every token in the source collection with the given key. - - - - Returns a collection of converted child values of every object in the source collection. - - The type to convert the values to. - An of that contains the source collection. - An that contains the converted values of every token in the source collection. - - - - Converts the value. - - The type to convert the value to. - A cast as a of . - A converted value. - - - - Converts the value. - - The source collection type. - The type to convert the value to. - A cast as a of . - A converted value. - - - - Returns a collection of child tokens of every array in the source collection. - - The source collection type. - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child tokens of every array in the source collection. - - An of that contains the source collection. - The type to convert the values to. - The source collection type. - An that contains the converted values of every token in the source collection. - - - - Returns the input typed as . - - An of that contains the source collection. - The input typed as . - - - - Returns the input typed as . - - The source collection type. - An of that contains the source collection. - The input typed as . - - - - Represents a collection of objects. - - The type of token. - - - - Gets the of with the specified key. - - - - - - Represents a JSON array. - - - - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous load. The property contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous load. The property contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads an from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the at the specified index. - - - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Inserts an item to the at the specified index. - - The zero-based index at which should be inserted. - The object to insert into the . - - is not a valid index in the . - - - - - Removes the item at the specified index. - - The zero-based index of the item to remove. - - is not a valid index in the . - - - - - Returns an enumerator that iterates through the collection. - - - A of that can be used to iterate through the collection. - - - - - Adds an item to the . - - The object to add to the . - - - - Removes all items from the . - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Copies the elements of the to an array, starting at a particular array index. - - The array. - Index of the array. - - - - Gets a value indicating whether the is read-only. - - true if the is read-only; otherwise, false. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - - - Represents a JSON constructor. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets or sets the name of this constructor. - - The constructor name. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name. - - The constructor name. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a token that can contain other tokens. - - - - - Occurs when the items list of the collection has changed, or the collection is reset. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Raises the event. - - The instance containing the event data. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Get the first child token of this token. - - - A containing the first child token of the . - - - - - Get the last child token of this token. - - - A containing the last child token of the . - - - - - Returns a collection of the child tokens of this token, in document order. - - - An of containing the child tokens of this , in document order. - - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - - A containing the child values of this , in document order. - - - - - Returns a collection of the descendant tokens for this token in document order. - - An of containing the descendant tokens of the . - - - - Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. - - An of containing this token, and all the descendant tokens of the . - - - - Adds the specified content as children of this . - - The content to be added. - - - - Adds the specified content as the first children of this . - - The content to be added. - - - - Creates a that can be used to add tokens to the . - - A that is ready to have content written to it. - - - - Replaces the child nodes of this token with the specified content. - - The content. - - - - Removes the child nodes from this token. - - - - - Merge the specified content into this . - - The content to be merged. - - - - Merge the specified content into this using . - - The content to be merged. - The used to merge the content. - - - - Gets the count of child JSON tokens. - - The count of child JSON tokens. - - - - Represents a collection of objects. - - The type of token. - - - - An empty collection of objects. - - - - - Initializes a new instance of the struct. - - The enumerable. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Gets the of with the specified key. - - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Represents a JSON object. - - - - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Occurs when a property value changes. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Gets the node type for this . - - The type. - - - - Gets an of of this object's properties. - - An of of this object's properties. - - - - Gets a the specified name. - - The property name. - A with the specified name or null. - - - - Gets a of of this object's property values. - - A of of this object's property values. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the with the specified property name. - - - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified property name. - - Name of the property. - The with the specified property name. - - - - Gets the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - One of the enumeration values that specifies how the strings will be compared. - The with the specified property name. - - - - Tries to get the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - The value. - One of the enumeration values that specifies how the strings will be compared. - true if a value was successfully retrieved; otherwise, false. - - - - Adds the specified property name. - - Name of the property. - The value. - - - - Removes the property with the specified name. - - Name of the property. - true if item was successfully removed; otherwise, false. - - - - Tries to get the with the specified property name. - - Name of the property. - The value. - true if a value was successfully retrieved; otherwise, false. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Represents a JSON property. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the property name. - - The property name. - - - - Gets or sets the property value. - - The property value. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a raw JSON string. - - - - - Asynchronously creates an instance of with the content of the reader's current token. - - The reader. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns an instance of with the content of the reader's current token. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class. - - The raw json. - - - - Creates an instance of with the content of the reader's current token. - - The reader. - An instance of with the content of the reader's current token. - - - - Specifies the settings used when loading JSON. - - - - - Initializes a new instance of the class. - - - - - Gets or sets how JSON comments are handled when loading JSON. - - The JSON comment handling. - - - - Gets or sets how JSON line info is handled when loading JSON. - - The JSON line info handling. - - - - Specifies the settings used when merging JSON. - - - - - Gets or sets the method used when merging JSON arrays. - - The method used when merging JSON arrays. - - - - Gets or sets how null value properties are merged. - - How null value properties are merged. - - - - Represents an abstract JSON token. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Writes this token to a asynchronously. - - A into which this method will write. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously creates a from a . - - An positioned at the token to read into this . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains - the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - An positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains - the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - A positioned at the token to read into this . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - A positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Gets a comparer that can compare two tokens for value equality. - - A that can compare two nodes for value equality. - - - - Gets or sets the parent. - - The parent. - - - - Gets the root of this . - - The root of this . - - - - Gets the node type for this . - - The type. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Compares the values of two tokens, including the values of all descendant tokens. - - The first to compare. - The second to compare. - true if the tokens are equal; otherwise false. - - - - Gets the next sibling token of this node. - - The that contains the next sibling token. - - - - Gets the previous sibling token of this node. - - The that contains the previous sibling token. - - - - Gets the path of the JSON token. - - - - - Adds the specified content immediately after this token. - - A content object that contains simple content or a collection of content objects to be added after this token. - - - - Adds the specified content immediately before this token. - - A content object that contains simple content or a collection of content objects to be added before this token. - - - - Returns a collection of the ancestor tokens of this token. - - A collection of the ancestor tokens of this token. - - - - Returns a collection of tokens that contain this token, and the ancestors of this token. - - A collection of tokens that contain this token, and the ancestors of this token. - - - - Returns a collection of the sibling tokens after this token, in document order. - - A collection of the sibling tokens after this tokens, in document order. - - - - Returns a collection of the sibling tokens before this token, in document order. - - A collection of the sibling tokens before this token, in document order. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets the with the specified key converted to the specified type. - - The type to convert the token to. - The token key. - The converted token value. - - - - Get the first child token of this token. - - A containing the first child token of the . - - - - Get the last child token of this token. - - A containing the last child token of the . - - - - Returns a collection of the child tokens of this token, in document order. - - An of containing the child tokens of this , in document order. - - - - Returns a collection of the child tokens of this token, in document order, filtered by the specified type. - - The type to filter the child tokens on. - A containing the child tokens of this , in document order. - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - A containing the child values of this , in document order. - - - - Removes this token from its parent. - - - - - Replaces this token with the specified token. - - The value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Returns the indented JSON for this token. - - - The indented JSON for this token. - - - - - Returns the JSON for this token using the given formatting and converters. - - Indicates how the output should be formatted. - A collection of s which will be used when writing the token. - The JSON for this token using the given formatting and converters. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to []. - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from [] to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Creates a for this token. - - A that can be used to read this token and its descendants. - - - - Creates a from an object. - - The object that will be used to create . - A with the value of the specified object. - - - - Creates a from an object using the specified . - - The object that will be used to create . - The that will be used when reading the object. - A with the value of the specified object. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - An positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - Creates a from a . - - A positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A , or null. - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - A . - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - An of that contains the selected elements. - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - An of that contains the selected elements. - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Creates a new instance of the . All child tokens are recursively cloned. - - A new instance of the . - - - - Adds an object to the annotation list of this . - - The annotation to add. - - - - Get the first annotation object of the specified type from this . - - The type of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets the first annotation object of the specified type from this . - - The of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets a collection of annotations of the specified type for this . - - The type of the annotations to retrieve. - An that contains the annotations for this . - - - - Gets a collection of annotations of the specified type for this . - - The of the annotations to retrieve. - An of that contains the annotations that match the specified type for this . - - - - Removes the annotations of the specified type from this . - - The type of annotations to remove. - - - - Removes the annotations of the specified type from this . - - The of annotations to remove. - - - - Compares tokens to determine whether they are equal. - - - - - Determines whether the specified objects are equal. - - The first object of type to compare. - The second object of type to compare. - - true if the specified objects are equal; otherwise, false. - - - - - Returns a hash code for the specified object. - - The for which a hash code is to be returned. - A hash code for the specified object. - The type of is a reference type and is null. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Gets the at the reader's current position. - - - - - Initializes a new instance of the class. - - The token to read from. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Gets the path of the current JSON token. - - - - - Specifies the type of token. - - - - - No token type has been set. - - - - - A JSON object. - - - - - A JSON array. - - - - - A JSON constructor. - - - - - A JSON object property. - - - - - A comment. - - - - - An integer value. - - - - - A float value. - - - - - A string value. - - - - - A boolean value. - - - - - A null value. - - - - - An undefined value. - - - - - A date value. - - - - - A raw JSON value. - - - - - A collection of bytes value. - - - - - A Guid value. - - - - - A Uri value. - - - - - A TimeSpan value. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets the at the writer's current position. - - - - - Gets the token being written. - - The token being written. - - - - Initializes a new instance of the class writing to the given . - - The container being written to. - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the underlying . - - - - - Closes this writer. - If is set to true, the JSON is auto-completed. - - - Setting to true has no additional effect, since the underlying is a type that cannot be closed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end. - - The token. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes a value. - An error will be raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Represents a value in JSON (string, integer, date, etc). - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Creates a comment with the given value. - - The value. - A comment with the given value. - - - - Creates a string with the given value. - - The value. - A string with the given value. - - - - Creates a null value. - - A null value. - - - - Creates a undefined value. - - A undefined value. - - - - Gets the node type for this . - - The type. - - - - Gets or sets the underlying token value. - - The underlying token value. - - - - Writes this token to a . - - A into which this method will write. - A collection of s which will be used when writing the token. - - - - Indicates whether the current object is equal to another object of the same type. - - - true if the current object is equal to the parameter; otherwise, false. - - An object to compare with this object. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format provider. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - The format provider. - - A that represents this instance. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. - - An object to compare with this instance. - - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: - Value - Meaning - Less than zero - This instance is less than . - Zero - This instance is equal to . - Greater than zero - This instance is greater than . - - - is not of the same type as this instance. - - - - - Specifies how JSON arrays are merged together. - - - - Concatenate arrays. - - - Union arrays, skipping items that already exist. - - - Replace all array items. - - - Merge array items together, matched by index. - - - - Specifies how null value properties are merged. - - - - - The content's null value properties will be ignored during merging. - - - - - The content's null value properties will be merged. - - - - - Specifies the member serialization options for the . - - - - - All public members are serialized by default. Members can be excluded using or . - This is the default member serialization mode. - - - - - Only members marked with or are serialized. - This member serialization mode can also be set by marking the class with . - - - - - All public and private fields are serialized. Members can be excluded using or . - This member serialization mode can also be set by marking the class with - and setting IgnoreSerializableAttribute on to false. - - - - - Specifies metadata property handling options for the . - - - - - Read metadata properties located at the start of a JSON object. - - - - - Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. - - - - - Do not try to read metadata properties. - - - - - Specifies missing member handling options for the . - - - - - Ignore a missing member and do not attempt to deserialize it. - - - - - Throw a when a missing member is encountered during deserialization. - - - - - Specifies null value handling options for the . - - - - - - - - - Include null values when serializing and deserializing objects. - - - - - Ignore null values when serializing and deserializing objects. - - - - - Specifies how object creation is handled by the . - - - - - Reuse existing objects, create new objects when needed. - - - - - Only reuse existing objects. - - - - - Always create new objects. - - - - - Specifies reference handling options for the . - Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . - - - - - - - - Do not preserve references when serializing types. - - - - - Preserve references when serializing into a JSON object structure. - - - - - Preserve references when serializing into a JSON array structure. - - - - - Preserve references when serializing. - - - - - Specifies reference loop handling options for the . - - - - - Throw a when a loop is encountered. - - - - - Ignore loop references and do not serialize. - - - - - Serialize loop references. - - - - - Indicating whether a property is required. - - - - - The property is not required. The default state. - - - - - The property must be defined in JSON but can be a null value. - - - - - The property must be defined in JSON and cannot be a null value. - - - - - The property is not required but it cannot be a null value. - - - - - - Contains the JSON schema extension methods. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - true if the specified is valid; otherwise, false. - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - When this method returns, contains any error messages generated while validating. - - true if the specified is valid; otherwise, false. - - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - The validation event handler. - - - - - An in-memory representation of a JSON Schema. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the id. - - - - - Gets or sets the title. - - - - - Gets or sets whether the object is required. - - - - - Gets or sets whether the object is read-only. - - - - - Gets or sets whether the object is visible to users. - - - - - Gets or sets whether the object is transient. - - - - - Gets or sets the description of the object. - - - - - Gets or sets the types of values allowed by the object. - - The type. - - - - Gets or sets the pattern. - - The pattern. - - - - Gets or sets the minimum length. - - The minimum length. - - - - Gets or sets the maximum length. - - The maximum length. - - - - Gets or sets a number that the value should be divisible by. - - A number that the value should be divisible by. - - - - Gets or sets the minimum. - - The minimum. - - - - Gets or sets the maximum. - - The maximum. - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). - - A flag indicating whether the value can not equal the number defined by the minimum attribute (). - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). - - A flag indicating whether the value can not equal the number defined by the maximum attribute (). - - - - Gets or sets the minimum number of items. - - The minimum number of items. - - - - Gets or sets the maximum number of items. - - The maximum number of items. - - - - Gets or sets the of items. - - The of items. - - - - Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . - - - true if items are validated using their array position; otherwise, false. - - - - - Gets or sets the of additional items. - - The of additional items. - - - - Gets or sets a value indicating whether additional items are allowed. - - - true if additional items are allowed; otherwise, false. - - - - - Gets or sets whether the array items must be unique. - - - - - Gets or sets the of properties. - - The of properties. - - - - Gets or sets the of additional properties. - - The of additional properties. - - - - Gets or sets the pattern properties. - - The pattern properties. - - - - Gets or sets a value indicating whether additional properties are allowed. - - - true if additional properties are allowed; otherwise, false. - - - - - Gets or sets the required property if this property is present. - - The required property if this property is present. - - - - Gets or sets the a collection of valid enum values allowed. - - A collection of valid enum values allowed. - - - - Gets or sets disallowed types. - - The disallowed types. - - - - Gets or sets the default value. - - The default value. - - - - Gets or sets the collection of that this schema extends. - - The collection of that this schema extends. - - - - Gets or sets the format. - - The format. - - - - Initializes a new instance of the class. - - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The object representing the JSON Schema. - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The to use when resolving schema references. - The object representing the JSON Schema. - - - - Load a from a string that contains JSON Schema. - - A that contains JSON Schema. - A populated from the string that contains JSON Schema. - - - - Load a from a string that contains JSON Schema using the specified . - - A that contains JSON Schema. - The resolver. - A populated from the string that contains JSON Schema. - - - - Writes this schema to a . - - A into which this method will write. - - - - Writes this schema to a using the specified . - - A into which this method will write. - The resolver used. - - - - Returns a that represents the current . - - - A that represents the current . - - - - - - Returns detailed information about the schema exception. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - - Generates a from a specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets how undefined schemas are handled by the serializer. - - - - - Gets or sets the contract resolver. - - The contract resolver. - - - - Generate a from the specified type. - - The type to generate a from. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - - Resolves from an id. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the loaded schemas. - - The loaded schemas. - - - - Initializes a new instance of the class. - - - - - Gets a for the specified reference. - - The id. - A for the specified reference. - - - - - The value types allowed by the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - No type specified. - - - - - String type. - - - - - Float type. - - - - - Integer type. - - - - - Boolean type. - - - - - Object type. - - - - - Array type. - - - - - Null type. - - - - - Any type. - - - - - - Specifies undefined schema Id handling options for the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Do not infer a schema Id. - - - - - Use the .NET type name as the schema Id. - - - - - Use the assembly qualified .NET type name as the schema Id. - - - - - - Returns detailed information related to the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the associated with the validation error. - - The JsonSchemaException associated with the validation error. - - - - Gets the path of the JSON location where the validation error occurred. - - The path of the JSON location where the validation error occurred. - - - - Gets the text description corresponding to the validation error. - - The text description. - - - - - Represents the callback method that will handle JSON schema validation events and the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Allows users to control class loading and mandate what class to load. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object - The type of the object the formatter creates a new instance of. - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - A camel case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Resolves member mappings for a type, camel casing property names. - - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used by to resolve a for a given . - - - - - Gets a value indicating whether members are being get and set using dynamic code generation. - This value is determined by the runtime permissions available. - - - true if using dynamic code generation; otherwise, false. - - - - - Gets or sets a value indicating whether compiler generated members should be serialized. - - - true if serialized compiler generated members; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. - - - true if the interface will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. - - - true if the attribute will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. - - The naming strategy used to resolve how property names and dictionary keys are serialized. - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Gets the serializable members for the type. - - The type to get serializable members for. - The serializable members for the type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates the constructor parameters. - - The constructor to create properties for. - The type's member properties. - Properties for the given . - - - - Creates a for the given . - - The matching member property. - The constructor parameter. - A created for the given . - - - - Resolves the default for the contract. - - Type of the object. - The contract's default . - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Determines which contract type is created for the given type. - - Type of the object. - A for the given type. - - - - Creates properties for the given . - - The type to create properties for. - /// The member serialization mode for the type. - Properties for the given . - - - - Creates the used by the serializer to get and set values from a member. - - The member. - The used by the serializer to get and set values from a member. - - - - Creates a for the given . - - The member's parent . - The member to create a for. - A created for the given . - - - - Resolves the name of the property. - - Name of the property. - Resolved name of the property. - - - - Resolves the name of the extension data. By default no changes are made to extension data names. - - Name of the extension data. - Resolved name of the extension data. - - - - Resolves the key of the dictionary. By default is used to resolve dictionary keys. - - Key of the dictionary. - Resolved key of the dictionary. - - - - Gets the resolved name of the property. - - Name of the property. - Name of the property. - - - - The default naming strategy. Property names and dictionary keys are unchanged. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - The default serialization binder used when resolving and loading classes from type names. - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - The type of the object the formatter creates a new instance of. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Provides information surrounding an error. - - - - - Gets the error. - - The error. - - - - Gets the original object that caused the error. - - The original object that caused the error. - - - - Gets the member that caused the error. - - The member that caused the error. - - - - Gets the path of the JSON location where the error occurred. - - The path of the JSON location where the error occurred. - - - - Gets or sets a value indicating whether this is handled. - - true if handled; otherwise, false. - - - - Provides data for the Error event. - - - - - Gets the current object the error event is being raised against. - - The current object the error event is being raised against. - - - - Gets the error context. - - The error context. - - - - Initializes a new instance of the class. - - The current object. - The error context. - - - - Get and set values for a using dynamic methods. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Provides methods to get attributes. - - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Used by to resolve a for a given . - - - - - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used to resolve references when serializing and deserializing JSON by the . - - - - - Resolves a reference to its object. - - The serialization context. - The reference to resolve. - The object that was resolved from the reference. - - - - Gets the reference for the specified object. - - The serialization context. - The object to get a reference for. - The reference to the object. - - - - Determines whether the specified object is referenced. - - The serialization context. - The object to test for a reference. - - true if the specified object is referenced; otherwise, false. - - - - - Adds a reference to the specified object. - - The serialization context. - The reference. - The object to reference. - - - - Allows users to control class loading and mandate what class to load. - - - - - When implemented, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object - The type of the object the formatter creates a new instance of. - - - - When implemented, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - The that will be used to filter the trace messages passed to the writer. - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Provides methods to get and set values. - - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Contract details for a used by the . - - - - - Gets the of the collection items. - - The of the collection items. - - - - Gets a value indicating whether the collection type is a multidimensional array. - - true if the collection type is a multidimensional array; otherwise, false. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the collection values. - - true if the creator has a parameter with the collection values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the default collection items . - - The converter. - - - - Gets or sets a value indicating whether the collection items preserve object references. - - true if collection items preserve object references; otherwise, false. - - - - Gets or sets the collection item reference loop handling. - - The reference loop handling. - - - - Gets or sets the collection item type name handling. - - The type name handling. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Handles serialization callback events. - - The object that raised the callback event. - The streaming context. - - - - Handles serialization error callback events. - - The object that raised the callback event. - The streaming context. - The error context. - - - - Sets extension data for an object during deserialization. - - The object to set extension data on. - The extension data key. - The extension data value. - - - - Gets extension data for an object during serialization. - - The object to set extension data on. - - - - Contract details for a used by the . - - - - - Gets the underlying type for the contract. - - The underlying type for the contract. - - - - Gets or sets the type created during deserialization. - - The type created during deserialization. - - - - Gets or sets whether this type contract is serialized as a reference. - - Whether this type contract is serialized as a reference. - - - - Gets or sets the default for this contract. - - The converter. - - - - Gets or sets all methods called immediately after deserialization of the object. - - The methods called immediately after deserialization of the object. - - - - Gets or sets all methods called during deserialization of the object. - - The methods called during deserialization of the object. - - - - Gets or sets all methods called after serialization of the object graph. - - The methods called after serialization of the object graph. - - - - Gets or sets all methods called before serialization of the object. - - The methods called before serialization of the object. - - - - Gets or sets all method called when an error is thrown during the serialization of the object. - - The methods called when an error is thrown during the serialization of the object. - - - - Gets or sets the default creator method used to create the object. - - The default creator method used to create the object. - - - - Gets or sets a value indicating whether the default creator is non-public. - - true if the default object creator is non-public; otherwise, false. - - - - Contract details for a used by the . - - - - - Gets or sets the dictionary key resolver. - - The dictionary key resolver. - - - - Gets the of the dictionary keys. - - The of the dictionary keys. - - - - Gets the of the dictionary values. - - The of the dictionary values. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the dictionary values. - - true if the creator has a parameter with the dictionary values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets the object's properties. - - The object's properties. - - - - Gets or sets the property name resolver. - - The property name resolver. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the object constructor. - - The object constructor. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the object member serialization. - - The member object serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Gets the object's properties. - - The object's properties. - - - - Gets a collection of instances that define the parameters used with . - - - - - Gets or sets the function used to create the object. When set this function will override . - This function is called with a collection of arguments which are defined by the collection. - - The function used to create the object. - - - - Gets or sets the extension data setter. - - - - - Gets or sets the extension data getter. - - - - - Gets or sets the extension data value type. - - - - - Gets or sets the extension data name resolver. - - The extension data name resolver. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Maps a JSON property to a .NET member or constructor parameter. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the type that declared this property. - - The type that declared this property. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets the name of the underlying member or parameter. - - The name of the underlying member or parameter. - - - - Gets the that will get and set the during serialization. - - The that will get and set the during serialization. - - - - Gets or sets the for this property. - - The for this property. - - - - Gets or sets the type of the property. - - The type of the property. - - - - Gets or sets the for the property. - If set this converter takes precedence over the contract converter for the property type. - - The converter. - - - - Gets or sets the member converter. - - The member converter. - - - - Gets or sets a value indicating whether this is ignored. - - true if ignored; otherwise, false. - - - - Gets or sets a value indicating whether this is readable. - - true if readable; otherwise, false. - - - - Gets or sets a value indicating whether this is writable. - - true if writable; otherwise, false. - - - - Gets or sets a value indicating whether this has a member attribute. - - true if has a member attribute; otherwise, false. - - - - Gets the default value. - - The default value. - - - - Gets or sets a value indicating whether this is required. - - A value indicating whether this is required. - - - - Gets or sets a value indicating whether this property preserves object references. - - - true if this instance is reference; otherwise, false. - - - - - Gets or sets the property null value handling. - - The null value handling. - - - - Gets or sets the property default value handling. - - The default value handling. - - - - Gets or sets the property reference loop handling. - - The reference loop handling. - - - - Gets or sets the property object creation handling. - - The object creation handling. - - - - Gets or sets or sets the type name handling. - - The type name handling. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets a predicate used to determine whether the property should be deserialized. - - A predicate used to determine whether the property should be deserialized. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets an action used to set whether the property has been deserialized. - - An action used to set whether the property has been deserialized. - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the converter used when serializing the property's collection items. - - The collection's items converter. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - A collection of objects. - - - - - Initializes a new instance of the class. - - The type. - - - - When implemented in a derived class, extracts the key from the specified element. - - The element from which to extract the key. - The key for the specified element. - - - - Adds a object. - - The property to add to the collection. - - - - Gets the closest matching object. - First attempts to get an exact case match of and then - a case insensitive match. - - Name of the property. - A matching property if found. - - - - Gets a property by property name. - - The name of the property to get. - Type property name string comparison. - A matching property if found. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Lookup and create an instance of the type described by the argument. - - The type to create. - Optional arguments to pass to an initializing constructor of the JsonConverter. - If null, the default constructor is used. - - - - Represents a trace writer that writes to memory. When the trace message limit is - reached then old trace messages will be removed as new messages are added. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Initializes a new instance of the class. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Returns an enumeration of the most recent trace messages. - - An enumeration of the most recent trace messages. - - - - Returns a of the most recent trace messages. - - - A of the most recent trace messages. - - - - - A base class for resolving how property names and dictionary keys are serialized. - - - - - A flag indicating whether dictionary keys should be processed. - Defaults to false. - - - - - A flag indicating whether extension data names should be processed. - Defaults to false. - - - - - A flag indicating whether explicitly specified property names, - e.g. a property name customized with a , should be processed. - Defaults to false. - - - - - Gets the serialized name for a given property name. - - The initial property name. - A flag indicating whether the property has had a name explicitly specified. - The serialized property name. - - - - Gets the serialized name for a given extension data name. - - The initial extension data name. - The serialized extension data name. - - - - Gets the serialized key for a given dictionary key. - - The initial dictionary key. - The serialized dictionary key. - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Represents a method that constructs an object. - - The object type to create. - - - - When applied to a method, specifies that the method is called when an error occurs serializing an object. - - - - - Provides methods to get attributes from a , , or . - - - - - Initializes a new instance of the class. - - The instance to get attributes for. This parameter should be a , , or . - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Get and set values for a using reflection. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - A snake case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Specifies how strings are escaped when writing JSON text. - - - - - Only control characters (e.g. newline) are escaped. - - - - - All non-ASCII and control characters (e.g. newline) are escaped. - - - - - HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. - - - - - Specifies what messages to output for the class. - - - - - Output no tracing and debugging messages. - - - - - Output error-handling messages. - - - - - Output warnings and error-handling messages. - - - - - Output informational messages, warnings, and error-handling messages. - - - - - Output all debugging and tracing messages. - - - - - Indicates the method that will be used during deserialization for locating and loading assemblies. - - - - - In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. - - - - - In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. - - - - - Specifies type name handling options for the . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Do not include the .NET type name when serializing types. - - - - - Include the .NET type name when serializing into a JSON object structure. - - - - - Include the .NET type name when serializing into a JSON array structure. - - - - - Always include the .NET type name when serializing. - - - - - Include the .NET type name when the type of the object being serialized is not the same as its declared type. - Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON - you must specify a root type object with - or . - - - - - Determines whether the collection is null or empty. - - The collection. - - true if the collection is null or empty; otherwise, false. - - - - - Adds the elements of the specified collection to the specified generic . - - The list to add to. - The collection of elements to add. - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert or cast the value to. - - The converted type. If conversion was unsuccessful, the initial value - is returned if assignable to the target type. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic that returns a result - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Returns a Restrictions object which includes our current restrictions merged - with a restriction limiting our type - - - - - Gets a dictionary of the names and values of an type. - - - - - - Gets a dictionary of the names and values of an Enum type. - - The enum type to get names and values for. - - - - - List of primitive types which can be widened. - - - - - Widening masks for primitive types above. - Index of the value in this array defines a type we're widening, - while the bits in mask define types it can be widened to (including itself). - - For example, value at index 0 defines a bool type, and it only has bit 0 set, - i.e. bool values can be assigned only to bool. - - - - - Checks if value of primitive type can be - assigned to parameter of primitive type . - - Source primitive type. - Target primitive type. - true if source type can be widened to target type, false otherwise. - - - - Checks if a set of values with given can be used - to invoke a method with specified . - - Method parameters. - Argument types. - Try to pack extra arguments into the last parameter when it is marked up with . - true if method can be called with given arguments, false otherwise. - - - - Compares two sets of parameters to determine - which one suits better for given argument types. - - - - - Returns a best method overload for given argument . - - List of method candidates. - Argument types. - Best method overload, or null if none matched. - - - - Gets the type of the typed collection's items. - - The type. - The type of the typed collection's items. - - - - Gets the member's underlying type. - - The member. - The underlying type of the member. - - - - Determines whether the member is an indexed property. - - The member. - - true if the member is an indexed property; otherwise, false. - - - - - Determines whether the property is an indexed property. - - The property. - - true if the property is an indexed property; otherwise, false. - - - - - Gets the member's value on the object. - - The member. - The target object. - The member's value on the object. - - - - Sets the member's value on the target object. - - The member. - The target. - The value. - - - - Determines whether the specified MemberInfo can be read. - - The MemberInfo to determine whether can be read. - /// if set to true then allow the member to be gotten non-publicly. - - true if the specified MemberInfo can be read; otherwise, false. - - - - - Determines whether the specified MemberInfo can be set. - - The MemberInfo to determine whether can be set. - if set to true then allow the member to be set non-publicly. - if set to true then allow the member to be set if read-only. - - true if the specified MemberInfo can be set; otherwise, false. - - - - - Builds a string. Unlike this class lets you reuse its internal buffer. - - - - - Determines whether the string is all white space. Empty string will return false. - - The string to test whether it is all white space. - - true if the string is all white space; otherwise, false. - - - - - Specifies the state of the . - - - - - An exception has been thrown, which has left the in an invalid state. - You may call the method to put the in the Closed state. - Any other method calls result in an being thrown. - - - - - The method has been called. - - - - - An object is being written. - - - - - An array is being written. - - - - - A constructor is being written. - - - - - A property is being written. - - - - - A write method has not been called. - - - - - Indicates the method that will be used during deserialization for locating and loading assemblies. - - - - - In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the method is used to load the assembly. - - - - - In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The is used to load the assembly. - - - - diff --git a/trunk/packages/Newtonsoft.Json.10.0.3/lib/portable-net40+sl5+win8+wp8+wpa81/Newtonsoft.Json.dll b/trunk/packages/Newtonsoft.Json.10.0.3/lib/portable-net40+sl5+win8+wp8+wpa81/Newtonsoft.Json.dll deleted file mode 100644 index e9e9a4a822116c129c88b9ee9961d011acab6700..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 433664 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≪ffdkbB4KIoOV_a|4 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

    -g>(DxjJRJ93{ICn@(D=R3F5bEo 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 diff --git a/trunk/packages/Newtonsoft.Json.10.0.3/lib/portable-net40+sl5+win8+wp8+wpa81/Newtonsoft.Json.xml b/trunk/packages/Newtonsoft.Json.10.0.3/lib/portable-net40+sl5+win8+wp8+wpa81/Newtonsoft.Json.xml deleted file mode 100644 index 9550e31..0000000 --- a/trunk/packages/Newtonsoft.Json.10.0.3/lib/portable-net40+sl5+win8+wp8+wpa81/Newtonsoft.Json.xml +++ /dev/null @@ -1,8555 +0,0 @@ - - - - Newtonsoft.Json - - - -

    - Represents a BSON Oid (object id). - - - - - Gets or sets the value of the Oid. - - The value of the Oid. - - - - Initializes a new instance of the class. - - The Oid value. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. - - - - - Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. - - - true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. - - - - - Gets or sets a value indicating whether the root object will be read as a JSON array. - - - true if the root object will be read as a JSON array; otherwise, false. - - - - - Gets or sets the used when reading values from BSON. - - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. - - - - - Gets or sets the used when writing values to BSON. - When set to no conversion will occur. - - The used when writing values to BSON. - - - - Initializes a new instance of the class. - - The to write to. - - - - Initializes a new instance of the class. - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. - - - - - Writes the end. - - The token. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes the beginning of a JSON array. - - - - - Writes the beginning of a JSON object. - - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value that represents a BSON object id. - - The Object ID value to write. - - - - Writes a BSON regex. - - The regex pattern. - The regex options. - - - - Specifies how constructors are used when initializing objects during deserialization by the . - - - - - First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. - - - - - Json.NET will use a non-public default constructor before falling back to a parameterized constructor. - - - - - Converts a binary value to and from a base 64 string value. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Creates a custom object. - - The object type to convert. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Creates an object which will then be populated by the serializer. - - Type of the object. - The created object. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Provides a base class for converting a to and from JSON. - - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a F# discriminated union type to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). - - - - - Gets or sets the date time styles used when converting a date to and from JSON. - - The date time styles used when converting a date to and from JSON. - - - - Gets or sets the date time format used when converting a date to and from JSON. - - The date time format used when converting a date to and from JSON. - - - - Gets or sets the culture used when converting a date to and from JSON. - - The culture used when converting a date to and from JSON. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from its name string value. - - - - - Gets or sets a value indicating whether the written enum text should be camel case. - - true if the written enum text will be camel case; otherwise, false. - - - - Gets or sets a value indicating whether integer values are allowed when deserializing. - - true if integers are allowed when deserializing; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - true if the written enum text will be camel case; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from a string (e.g. "1.2.3.4"). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Specifies how dates are formatted when writing JSON text. - - - - - Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". - - - - - Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". - - - - - Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. - - - - - Date formatted strings are not parsed to a date type and are read as strings. - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Specifies how to treat the time value when converting between string and . - - - - - Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. - - - - - Treat as a UTC. If the object represents a local time, it is converted to a UTC. - - - - - Treat as a local time if a is being converted to a string. - If a string is being converted to , convert to a local time if a time zone is specified. - - - - - Time zone information should be preserved when converting. - - - - - Specifies default value handling options for the . - - - - - - - - - Include members where the member value is the same as the member's default value when serializing objects. - Included members are written to JSON. Has no effect when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - so that it is not written to JSON. - This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, - decimals and floating point numbers; and false for booleans). The default value ignored can be changed by - placing the on the property. - - - - - Members with a default value but no JSON will be set to their default value when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - and set members to their default value when deserializing. - - - - - Specifies float format handling options when writing special floating point numbers, e.g. , - and with . - - - - - Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". - - - - - Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. - Note that this will produce non-valid JSON. - - - - - Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. - - - - - Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Floating point numbers are parsed to . - - - - - Floating point numbers are parsed to . - - - - - Specifies formatting options for the . - - - - - No special formatting is applied. This is the default. - - - - - Causes child objects to be indented according to the and settings. - - - - - Provides an interface for using pooled arrays. - - The array type content. - - - - Rent an array from the pool. This array must be returned when it is no longer needed. - - The minimum required length of the array. The returned array may be longer. - The rented array from the pool. This array must be returned when it is no longer needed. - - - - Return an array to the pool. - - The array that is being returned. - - - - Provides an interface to enable a class to return line and position information. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - The current line number or 0 if no line information is available (for example, when returns false). - - - - Gets the current line position. - - The current line position or 0 if no line information is available (for example, when returns false). - - - - Instructs the how to serialize the collection. - - - - - Gets or sets a value indicating whether null items are allowed in the collection. - - true if null items are allowed in the collection; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with a flag indicating whether the array can contain null items. - - A flag indicating whether the array can contain null items. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to use the specified constructor when deserializing that object. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the id. - - The id. - - - - Gets or sets the title. - - The title. - - - - Gets or sets the description. - - The description. - - - - Gets or sets the collection's items converter. - - The collection's items converter. - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets a value that indicates whether to preserve object references. - - - true to keep object reference; otherwise, false. The default is false. - - - - - Gets or sets a value that indicates whether to preserve collection's items references. - - - true to keep collection's items object references; otherwise, false. The default is false. - - - - - Gets or sets the reference loop handling used when serializing the collection's items. - - The reference loop handling. - - - - Gets or sets the type name handling used when serializing the collection's items. - - The type name handling. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Provides methods for converting between .NET types and JSON types. - - - - - - - - Gets or sets a function that creates default . - Default settings are automatically used by serialization methods on , - and and on . - To serialize without using any default settings create a with - . - - - - - Represents JavaScript's boolean value true as a string. This field is read-only. - - - - - Represents JavaScript's boolean value false as a string. This field is read-only. - - - - - Represents JavaScript's null as a string. This field is read-only. - - - - - Represents JavaScript's undefined as a string. This field is read-only. - - - - - Represents JavaScript's positive infinity as a string. This field is read-only. - - - - - Represents JavaScript's negative infinity as a string. This field is read-only. - - - - - Represents JavaScript's NaN as a string. This field is read-only. - - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - The time zone handling when the date is converted to a string. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - The string escape handling. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Serializes the specified object to a JSON string. - - The object to serialize. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting. - - The object to serialize. - Indicates how the output should be formatted. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a collection of . - - The object to serialize. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting and a collection of . - - The object to serialize. - Indicates how the output should be formatted. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Deserializes the JSON to a .NET object. - - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to a .NET object using . - - The JSON to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The JSON to deserialize. - The of object being deserialized. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The type of the object to deserialize to. - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the given anonymous type. - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the given anonymous type using . - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The type of the object to deserialize to. - The JSON to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The type of the object to deserialize to. - The object to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The JSON to deserialize. - The type of the object to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The JSON to deserialize. - The type of the object to deserialize to. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Populates the object with values from the JSON string. - - The JSON to populate values from. - The target object to populate values onto. - - - - Populates the object with values from the JSON string using . - - The JSON to populate values from. - The target object to populate values onto. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - - - - Converts an object to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can read JSON. - - true if this can read JSON; otherwise, false. - - - - Gets a value indicating whether this can write JSON. - - true if this can write JSON; otherwise, false. - - - - Instructs the to use the specified when serializing the member or class. - - - - - Gets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - - - - - Initializes a new instance of the class. - - Type of the . - - - - Initializes a new instance of the class. - - Type of the . - Parameter list to use when constructing the . Can be null. - - - - Represents a collection of . - - - - - Instructs the how to serialize the collection. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Instructs the to deserialize properties with no matching class member into the specified collection - and write values during serialization. - - - - - Gets or sets a value that indicates whether to write extension data when serializing the object. - - - true to write extension data when serializing the object; otherwise, false. The default is true. - - - - - Gets or sets a value that indicates whether to read extension data when deserializing the object. - - - true to read extension data when deserializing the object; otherwise, false. The default is true. - - - - - Initializes a new instance of the class. - - - - - Instructs the not to serialize the public field or public read/write property value. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the member serialization. - - The member serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified member serialization. - - The member serialization. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to always serialize the member with the specified name. - - - - - Gets or sets the used when serializing the property's collection items. - - The collection's items . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the null value handling used when serializing this property. - - The null value handling. - - - - Gets or sets the default value handling used when serializing this property. - - The default value handling. - - - - Gets or sets the reference loop handling used when serializing this property. - - The reference loop handling. - - - - Gets or sets the object creation handling used when deserializing this property. - - The object creation handling. - - - - Gets or sets the type name handling used when serializing this property. - - The type name handling. - - - - Gets or sets whether this property's value is serialized as a reference. - - Whether this property's value is serialized as a reference. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets a value indicating whether this property is required. - - - A value indicating whether this property is required. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified name. - - Name of the property. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Specifies the state of the reader. - - - - - A read method has not been called. - - - - - The end of the file has been reached successfully. - - - - - Reader is at a property. - - - - - Reader is at the start of an object. - - - - - Reader is in an object. - - - - - Reader is at the start of an array. - - - - - Reader is in an array. - - - - - The method has been called. - - - - - Reader has just read a value. - - - - - Reader is at the start of a constructor. - - - - - Reader is in a constructor. - - - - - An error occurred that prevents the read operation from continuing. - - - - - The end of the file has been reached successfully. - - - - - Gets the current reader state. - - The current reader state. - - - - Gets or sets a value indicating whether the source should be closed when this reader is closed. - - - true to close the source when this reader is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether multiple pieces of JSON content can - be read from a continuous stream without erroring. - - - true to support reading multiple pieces of JSON content; otherwise false. - The default is false. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - Gets or sets how time zones are handled when reading JSON. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how custom date formatted strings are parsed when reading JSON. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets the type of the current JSON token. - - - - - Gets the text value of the current JSON token. - - - - - Gets the .NET type for the current JSON token. - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Reads the next JSON token from the source. - - true if the next token was read successfully; false if there are no more tokens to read. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Skips the children of the current token. - - - - - Sets the current token. - - The new token. - - - - Sets the current token and value. - - The new token. - The value. - - - - Sets the current token and value. - - The new token. - The value. - A flag indicating whether the position index inside an array should be updated. - - - - Sets the state based on current token type. - - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Changes the reader's state to . - If is set to true, the source is also closed. - - - - - The exception thrown when an error occurs while reading JSON text. - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class - with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The line number indicating where the error occurred. - The line position indicating where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Instructs the to always serialize the member, and to require that the member has a value. - - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Serializes and deserializes objects into and from the JSON format. - The enables you to control how objects are encoded into JSON. - - - - - Occurs when the errors during serialization and deserialization. - - - - - Gets or sets the used by the serializer when resolving references. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how object references are preserved by the serializer. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) is handled. - - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - - - - Gets or sets how null values are handled during serialization and deserialization. - - - - - Gets or sets how default values are handled during serialization and deserialization. - - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets a collection that will be used during serialization. - - Collection that will be used during serialization. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Indicates how JSON text output is formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled during serialization and deserialization. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. - - - true if there will be a check for additional JSON content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Creates a new instance. - The will not use default settings - from . - - - A new instance. - The will not use default settings - from . - - - - - Creates a new instance using the specified . - The will not use default settings - from . - - The settings to be applied to the . - - A new instance using the specified . - The will not use default settings - from . - - - - - Creates a new instance. - The will use default settings - from . - - - A new instance. - The will use default settings - from . - - - - - Creates a new instance using the specified . - The will use default settings - from as well as the specified . - - The settings to be applied to the . - - A new instance using the specified . - The will use default settings - from as well as the specified . - - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Deserializes the JSON structure contained by the specified . - - The that contains the JSON structure to deserialize. - The being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The type of the object to deserialize. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is Auto to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Specifies the settings on a object. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) are handled. - - Reference loop handling. - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - Missing member handling. - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how null values are handled during serialization and deserialization. - - Null value handling. - - - - Gets or sets how default values are handled during serialization and deserialization. - - The default value handling. - - - - Gets or sets a collection that will be used during serialization. - - The converters. - - - - Gets or sets how object references are preserved by the serializer. - - The preserve references handling. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - The type name handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - The contract resolver. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets the used by the serializer when resolving references. - - The reference resolver. - - - - Gets or sets a function that creates the used by the serializer when resolving references. - - A function that creates the used by the serializer when resolving references. - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the error handler called during serialization and deserialization. - - The error handler called during serialization and deserialization. - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Indicates how JSON text output is formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled during serialization and deserialization. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets a value indicating whether there will be a check for additional content after deserializing an object. - - - true if there will be a check for additional content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Represents a reader that provides fast, non-cached, forward-only access to JSON text data. - - - - - Initializes a new instance of the class with the specified . - - The containing the JSON data to read. - - - - Gets or sets the reader's character buffer pool. - - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - - The current line number or 0 if no line information is available (for example, returns false). - - - - - Gets the current line position. - - - The current line position or 0 if no line information is available (for example, returns false). - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets or sets the writer's character array pool. - - - - - Gets or sets how many s to write for each level in the hierarchy when is set to . - - - - - Gets or sets which character to use to quote attribute values. - - - - - Gets or sets which character to use for indenting when is set to . - - - - - Gets or sets a value indicating whether object names will be surrounded with quotes. - - - - - Initializes a new instance of the class using the specified . - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying . - - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the specified end token. - - The end token to write. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Specifies the type of JSON token. - - - - - This is returned by the if a read method has not been called. - - - - - An object start token. - - - - - An array start token. - - - - - A constructor start token. - - - - - An object property name. - - - - - A comment. - - - - - Raw JSON. - - - - - An integer. - - - - - A float. - - - - - A string. - - - - - A boolean. - - - - - A null token. - - - - - An undefined token. - - - - - An object end token. - - - - - An array end token. - - - - - A constructor end token. - - - - - A Date. - - - - - Byte data. - - - - - - Represents a reader that provides validation. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Sets an event handler for receiving schema validation errors. - - - - - Gets the text value of the current JSON token. - - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - - Gets the type of the current JSON token. - - - - - - Gets the .NET type for the current JSON token. - - - - - - Initializes a new instance of the class that - validates the content returned from the given . - - The to read from while validating. - - - - Gets or sets the schema. - - The schema. - - - - Gets the used to construct this . - - The specified in the constructor. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a []. - - - A [] or null if the next JSON token is null. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets or sets a value indicating whether the destination should be closed when this writer is closed. - - - true to close the destination when this writer is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. - - - true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. - - - - - Gets the top. - - The top. - - - - Gets the state of the writer. - - - - - Gets the path of the writer. - - - - - Gets or sets a value indicating how JSON text output should be formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled when writing JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written to JSON text. - - - - - Gets or sets how and values are formatted when writing JSON text. - - - - - Gets or sets the culture used when writing JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the destination and also flushes the destination. - - - - - Closes this writer. - If is set to true, the destination is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the end of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the end of an array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end constructor. - - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes the end of the current JSON object or array. - - - - - Writes the current token and its children. - - The to read the token from. - - - - Writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - - - - Writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - null can be passed to the method for tokens that don't have a value, e.g. . - - - - - Writes the token. - - The to write. - - - - Writes the specified end token. - - The end token to write. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON without changing the writer's state. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Sets the state of the . - - The being written. - The value being written. - - - - The exception thrown when an error occurs while writing JSON text. - - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class - with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Specifies how JSON comments are handled when loading JSON. - - - - - Ignore comments. - - - - - Load comments as a with type . - - - - - Specifies how line information is handled when loading JSON. - - - - - Ignore line information. - - - - - Load line information. - - - - - Contains the LINQ to JSON extension methods. - - - - - Returns a collection of tokens that contains the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the descendants of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, and the descendants of every token in the source collection. - - - - Returns a collection of child properties of every object in the source collection. - - An of that contains the source collection. - An of that contains the properties of every object in the source collection. - - - - Returns a collection of child values of every object in the source collection with the given key. - - An of that contains the source collection. - The token key. - An of that contains the values of every token in the source collection with the given key. - - - - Returns a collection of child values of every object in the source collection. - - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child values of every object in the source collection with the given key. - - The type to convert the values to. - An of that contains the source collection. - The token key. - An that contains the converted values of every token in the source collection with the given key. - - - - Returns a collection of converted child values of every object in the source collection. - - The type to convert the values to. - An of that contains the source collection. - An that contains the converted values of every token in the source collection. - - - - Converts the value. - - The type to convert the value to. - A cast as a of . - A converted value. - - - - Converts the value. - - The source collection type. - The type to convert the value to. - A cast as a of . - A converted value. - - - - Returns a collection of child tokens of every array in the source collection. - - The source collection type. - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child tokens of every array in the source collection. - - An of that contains the source collection. - The type to convert the values to. - The source collection type. - An that contains the converted values of every token in the source collection. - - - - Returns the input typed as . - - An of that contains the source collection. - The input typed as . - - - - Returns the input typed as . - - The source collection type. - An of that contains the source collection. - The input typed as . - - - - Represents a collection of objects. - - The type of token. - - - - Gets the of with the specified key. - - - - - - Represents a JSON array. - - - - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads an from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the at the specified index. - - - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Inserts an item to the at the specified index. - - The zero-based index at which should be inserted. - The object to insert into the . - - is not a valid index in the . - - - - - Removes the item at the specified index. - - The zero-based index of the item to remove. - - is not a valid index in the . - - - - - Returns an enumerator that iterates through the collection. - - - A of that can be used to iterate through the collection. - - - - - Adds an item to the . - - The object to add to the . - - - - Removes all items from the . - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Copies the elements of the to an array, starting at a particular array index. - - The array. - Index of the array. - - - - Gets a value indicating whether the is read-only. - - true if the is read-only; otherwise, false. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - - - Represents a JSON constructor. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets or sets the name of this constructor. - - The constructor name. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name. - - The constructor name. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a token that can contain other tokens. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Get the first child token of this token. - - - A containing the first child token of the . - - - - - Get the last child token of this token. - - - A containing the last child token of the . - - - - - Returns a collection of the child tokens of this token, in document order. - - - An of containing the child tokens of this , in document order. - - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - - A containing the child values of this , in document order. - - - - - Returns a collection of the descendant tokens for this token in document order. - - An of containing the descendant tokens of the . - - - - Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. - - An of containing this token, and all the descendant tokens of the . - - - - Adds the specified content as children of this . - - The content to be added. - - - - Adds the specified content as the first children of this . - - The content to be added. - - - - Creates a that can be used to add tokens to the . - - A that is ready to have content written to it. - - - - Replaces the child nodes of this token with the specified content. - - The content. - - - - Removes the child nodes from this token. - - - - - Merge the specified content into this . - - The content to be merged. - - - - Merge the specified content into this using . - - The content to be merged. - The used to merge the content. - - - - Gets the count of child JSON tokens. - - The count of child JSON tokens. - - - - Represents a collection of objects. - - The type of token. - - - - An empty collection of objects. - - - - - Initializes a new instance of the struct. - - The enumerable. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Gets the of with the specified key. - - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Represents a JSON object. - - - - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Occurs when a property value changes. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Gets the node type for this . - - The type. - - - - Gets an of of this object's properties. - - An of of this object's properties. - - - - Gets a the specified name. - - The property name. - A with the specified name or null. - - - - Gets a of of this object's property values. - - A of of this object's property values. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the with the specified property name. - - - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified property name. - - Name of the property. - The with the specified property name. - - - - Gets the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - One of the enumeration values that specifies how the strings will be compared. - The with the specified property name. - - - - Tries to get the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - The value. - One of the enumeration values that specifies how the strings will be compared. - true if a value was successfully retrieved; otherwise, false. - - - - Adds the specified property name. - - Name of the property. - The value. - - - - Removes the property with the specified name. - - Name of the property. - true if item was successfully removed; otherwise, false. - - - - Tries to get the with the specified property name. - - Name of the property. - The value. - true if a value was successfully retrieved; otherwise, false. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Represents a JSON property. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the property name. - - The property name. - - - - Gets or sets the property value. - - The property value. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a raw JSON string. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class. - - The raw json. - - - - Creates an instance of with the content of the reader's current token. - - The reader. - An instance of with the content of the reader's current token. - - - - Specifies the settings used when loading JSON. - - - - - Initializes a new instance of the class. - - - - - Gets or sets how JSON comments are handled when loading JSON. - - The JSON comment handling. - - - - Gets or sets how JSON line info is handled when loading JSON. - - The JSON line info handling. - - - - Specifies the settings used when merging JSON. - - - - - Gets or sets the method used when merging JSON arrays. - - The method used when merging JSON arrays. - - - - Gets or sets how null value properties are merged. - - How null value properties are merged. - - - - Represents an abstract JSON token. - - - - - Gets a comparer that can compare two tokens for value equality. - - A that can compare two nodes for value equality. - - - - Gets or sets the parent. - - The parent. - - - - Gets the root of this . - - The root of this . - - - - Gets the node type for this . - - The type. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Compares the values of two tokens, including the values of all descendant tokens. - - The first to compare. - The second to compare. - true if the tokens are equal; otherwise false. - - - - Gets the next sibling token of this node. - - The that contains the next sibling token. - - - - Gets the previous sibling token of this node. - - The that contains the previous sibling token. - - - - Gets the path of the JSON token. - - - - - Adds the specified content immediately after this token. - - A content object that contains simple content or a collection of content objects to be added after this token. - - - - Adds the specified content immediately before this token. - - A content object that contains simple content or a collection of content objects to be added before this token. - - - - Returns a collection of the ancestor tokens of this token. - - A collection of the ancestor tokens of this token. - - - - Returns a collection of tokens that contain this token, and the ancestors of this token. - - A collection of tokens that contain this token, and the ancestors of this token. - - - - Returns a collection of the sibling tokens after this token, in document order. - - A collection of the sibling tokens after this tokens, in document order. - - - - Returns a collection of the sibling tokens before this token, in document order. - - A collection of the sibling tokens before this token, in document order. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets the with the specified key converted to the specified type. - - The type to convert the token to. - The token key. - The converted token value. - - - - Get the first child token of this token. - - A containing the first child token of the . - - - - Get the last child token of this token. - - A containing the last child token of the . - - - - Returns a collection of the child tokens of this token, in document order. - - An of containing the child tokens of this , in document order. - - - - Returns a collection of the child tokens of this token, in document order, filtered by the specified type. - - The type to filter the child tokens on. - A containing the child tokens of this , in document order. - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - A containing the child values of this , in document order. - - - - Removes this token from its parent. - - - - - Replaces this token with the specified token. - - The value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Returns the indented JSON for this token. - - - The indented JSON for this token. - - - - - Returns the JSON for this token using the given formatting and converters. - - Indicates how the output should be formatted. - A collection of s which will be used when writing the token. - The JSON for this token using the given formatting and converters. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to []. - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from [] to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Creates a for this token. - - A that can be used to read this token and its descendants. - - - - Creates a from an object. - - The object that will be used to create . - A with the value of the specified object. - - - - Creates a from an object using the specified . - - The object that will be used to create . - The that will be used when reading the object. - A with the value of the specified object. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - An positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - Creates a from a . - - A positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A , or null. - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - A . - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - An of that contains the selected elements. - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - An of that contains the selected elements. - - - - Creates a new instance of the . All child tokens are recursively cloned. - - A new instance of the . - - - - Adds an object to the annotation list of this . - - The annotation to add. - - - - Get the first annotation object of the specified type from this . - - The type of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets the first annotation object of the specified type from this . - - The of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets a collection of annotations of the specified type for this . - - The type of the annotations to retrieve. - An that contains the annotations for this . - - - - Gets a collection of annotations of the specified type for this . - - The of the annotations to retrieve. - An of that contains the annotations that match the specified type for this . - - - - Removes the annotations of the specified type from this . - - The type of annotations to remove. - - - - Removes the annotations of the specified type from this . - - The of annotations to remove. - - - - Compares tokens to determine whether they are equal. - - - - - Determines whether the specified objects are equal. - - The first object of type to compare. - The second object of type to compare. - - true if the specified objects are equal; otherwise, false. - - - - - Returns a hash code for the specified object. - - The for which a hash code is to be returned. - A hash code for the specified object. - The type of is a reference type and is null. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Gets the at the reader's current position. - - - - - Initializes a new instance of the class. - - The token to read from. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Gets the path of the current JSON token. - - - - - Specifies the type of token. - - - - - No token type has been set. - - - - - A JSON object. - - - - - A JSON array. - - - - - A JSON constructor. - - - - - A JSON object property. - - - - - A comment. - - - - - An integer value. - - - - - A float value. - - - - - A string value. - - - - - A boolean value. - - - - - A null value. - - - - - An undefined value. - - - - - A date value. - - - - - A raw JSON value. - - - - - A collection of bytes value. - - - - - A Guid value. - - - - - A Uri value. - - - - - A TimeSpan value. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets the at the writer's current position. - - - - - Gets the token being written. - - The token being written. - - - - Initializes a new instance of the class writing to the given . - - The container being written to. - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the underlying . - - - - - Closes this writer. - If is set to true, the JSON is auto-completed. - - - Setting to true has no additional effect, since the underlying is a type that cannot be closed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end. - - The token. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes a value. - An error will be raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Represents a value in JSON (string, integer, date, etc). - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Creates a comment with the given value. - - The value. - A comment with the given value. - - - - Creates a string with the given value. - - The value. - A string with the given value. - - - - Creates a null value. - - A null value. - - - - Creates a undefined value. - - A undefined value. - - - - Gets the node type for this . - - The type. - - - - Gets or sets the underlying token value. - - The underlying token value. - - - - Writes this token to a . - - A into which this method will write. - A collection of s which will be used when writing the token. - - - - Indicates whether the current object is equal to another object of the same type. - - - true if the current object is equal to the parameter; otherwise, false. - - An object to compare with this object. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format provider. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - The format provider. - - A that represents this instance. - - - - - Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. - - An object to compare with this instance. - - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: - Value - Meaning - Less than zero - This instance is less than . - Zero - This instance is equal to . - Greater than zero - This instance is greater than . - - - is not of the same type as this instance. - - - - - Specifies how JSON arrays are merged together. - - - - Concatenate arrays. - - - Union arrays, skipping items that already exist. - - - Replace all array items. - - - Merge array items together, matched by index. - - - - Specifies how null value properties are merged. - - - - - The content's null value properties will be ignored during merging. - - - - - The content's null value properties will be merged. - - - - - Specifies the member serialization options for the . - - - - - All public members are serialized by default. Members can be excluded using or . - This is the default member serialization mode. - - - - - Only members marked with or are serialized. - This member serialization mode can also be set by marking the class with . - - - - - All public and private fields are serialized. Members can be excluded using or . - This member serialization mode can also be set by marking the class with - and setting IgnoreSerializableAttribute on to false. - - - - - Specifies metadata property handling options for the . - - - - - Read metadata properties located at the start of a JSON object. - - - - - Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. - - - - - Do not try to read metadata properties. - - - - - Specifies missing member handling options for the . - - - - - Ignore a missing member and do not attempt to deserialize it. - - - - - Throw a when a missing member is encountered during deserialization. - - - - - Specifies null value handling options for the . - - - - - - - - - Include null values when serializing and deserializing objects. - - - - - Ignore null values when serializing and deserializing objects. - - - - - Specifies how object creation is handled by the . - - - - - Reuse existing objects, create new objects when needed. - - - - - Only reuse existing objects. - - - - - Always create new objects. - - - - - Specifies reference handling options for the . - Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . - - - - - - - - Do not preserve references when serializing types. - - - - - Preserve references when serializing into a JSON object structure. - - - - - Preserve references when serializing into a JSON array structure. - - - - - Preserve references when serializing. - - - - - Specifies reference loop handling options for the . - - - - - Throw a when a loop is encountered. - - - - - Ignore loop references and do not serialize. - - - - - Serialize loop references. - - - - - Indicating whether a property is required. - - - - - The property is not required. The default state. - - - - - The property must be defined in JSON but can be a null value. - - - - - The property must be defined in JSON and cannot be a null value. - - - - - The property is not required but it cannot be a null value. - - - - - - Contains the JSON schema extension methods. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - true if the specified is valid; otherwise, false. - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - When this method returns, contains any error messages generated while validating. - - true if the specified is valid; otherwise, false. - - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - The validation event handler. - - - - - An in-memory representation of a JSON Schema. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the id. - - - - - Gets or sets the title. - - - - - Gets or sets whether the object is required. - - - - - Gets or sets whether the object is read-only. - - - - - Gets or sets whether the object is visible to users. - - - - - Gets or sets whether the object is transient. - - - - - Gets or sets the description of the object. - - - - - Gets or sets the types of values allowed by the object. - - The type. - - - - Gets or sets the pattern. - - The pattern. - - - - Gets or sets the minimum length. - - The minimum length. - - - - Gets or sets the maximum length. - - The maximum length. - - - - Gets or sets a number that the value should be divisible by. - - A number that the value should be divisible by. - - - - Gets or sets the minimum. - - The minimum. - - - - Gets or sets the maximum. - - The maximum. - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). - - A flag indicating whether the value can not equal the number defined by the minimum attribute (). - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). - - A flag indicating whether the value can not equal the number defined by the maximum attribute (). - - - - Gets or sets the minimum number of items. - - The minimum number of items. - - - - Gets or sets the maximum number of items. - - The maximum number of items. - - - - Gets or sets the of items. - - The of items. - - - - Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . - - - true if items are validated using their array position; otherwise, false. - - - - - Gets or sets the of additional items. - - The of additional items. - - - - Gets or sets a value indicating whether additional items are allowed. - - - true if additional items are allowed; otherwise, false. - - - - - Gets or sets whether the array items must be unique. - - - - - Gets or sets the of properties. - - The of properties. - - - - Gets or sets the of additional properties. - - The of additional properties. - - - - Gets or sets the pattern properties. - - The pattern properties. - - - - Gets or sets a value indicating whether additional properties are allowed. - - - true if additional properties are allowed; otherwise, false. - - - - - Gets or sets the required property if this property is present. - - The required property if this property is present. - - - - Gets or sets the a collection of valid enum values allowed. - - A collection of valid enum values allowed. - - - - Gets or sets disallowed types. - - The disallowed types. - - - - Gets or sets the default value. - - The default value. - - - - Gets or sets the collection of that this schema extends. - - The collection of that this schema extends. - - - - Gets or sets the format. - - The format. - - - - Initializes a new instance of the class. - - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The object representing the JSON Schema. - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The to use when resolving schema references. - The object representing the JSON Schema. - - - - Load a from a string that contains JSON Schema. - - A that contains JSON Schema. - A populated from the string that contains JSON Schema. - - - - Load a from a string that contains JSON Schema using the specified . - - A that contains JSON Schema. - The resolver. - A populated from the string that contains JSON Schema. - - - - Writes this schema to a . - - A into which this method will write. - - - - Writes this schema to a using the specified . - - A into which this method will write. - The resolver used. - - - - Returns a that represents the current . - - - A that represents the current . - - - - - - Returns detailed information about the schema exception. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - - Generates a from a specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets how undefined schemas are handled by the serializer. - - - - - Gets or sets the contract resolver. - - The contract resolver. - - - - Generate a from the specified type. - - The type to generate a from. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - - Resolves from an id. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the loaded schemas. - - The loaded schemas. - - - - Initializes a new instance of the class. - - - - - Gets a for the specified reference. - - The id. - A for the specified reference. - - - - - The value types allowed by the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - No type specified. - - - - - String type. - - - - - Float type. - - - - - Integer type. - - - - - Boolean type. - - - - - Object type. - - - - - Array type. - - - - - Null type. - - - - - Any type. - - - - - - Specifies undefined schema Id handling options for the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Do not infer a schema Id. - - - - - Use the .NET type name as the schema Id. - - - - - Use the assembly qualified .NET type name as the schema Id. - - - - - - Returns detailed information related to the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the associated with the validation error. - - The JsonSchemaException associated with the validation error. - - - - Gets the path of the JSON location where the validation error occurred. - - The path of the JSON location where the validation error occurred. - - - - Gets the text description corresponding to the validation error. - - The text description. - - - - - Represents the callback method that will handle JSON schema validation events and the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Allows users to control class loading and mandate what class to load. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object - The type of the object the formatter creates a new instance of. - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - A camel case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Resolves member mappings for a type, camel casing property names. - - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used by to resolve a for a given . - - - - - Gets a value indicating whether members are being get and set using dynamic code generation. - This value is determined by the runtime permissions available. - - - true if using dynamic code generation; otherwise, false. - - - - - Gets or sets the default members search flags. - - The default members search flags. - - - - Gets or sets a value indicating whether compiler generated members should be serialized. - - - true if serialized compiler generated members; otherwise, false. - - - - - Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. - - The naming strategy used to resolve how property names and dictionary keys are serialized. - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Gets the serializable members for the type. - - The type to get serializable members for. - The serializable members for the type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates the constructor parameters. - - The constructor to create properties for. - The type's member properties. - Properties for the given . - - - - Creates a for the given . - - The matching member property. - The constructor parameter. - A created for the given . - - - - Resolves the default for the contract. - - Type of the object. - The contract's default . - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Determines which contract type is created for the given type. - - Type of the object. - A for the given type. - - - - Creates properties for the given . - - The type to create properties for. - /// The member serialization mode for the type. - Properties for the given . - - - - Creates the used by the serializer to get and set values from a member. - - The member. - The used by the serializer to get and set values from a member. - - - - Creates a for the given . - - The member's parent . - The member to create a for. - A created for the given . - - - - Resolves the name of the property. - - Name of the property. - Resolved name of the property. - - - - Resolves the name of the extension data. By default no changes are made to extension data names. - - Name of the extension data. - Resolved name of the extension data. - - - - Resolves the key of the dictionary. By default is used to resolve dictionary keys. - - Key of the dictionary. - Resolved key of the dictionary. - - - - Gets the resolved name of the property. - - Name of the property. - Name of the property. - - - - The default naming strategy. Property names and dictionary keys are unchanged. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - The default serialization binder used when resolving and loading classes from type names. - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - The type of the object the formatter creates a new instance of. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Provides information surrounding an error. - - - - - Gets the error. - - The error. - - - - Gets the original object that caused the error. - - The original object that caused the error. - - - - Gets the member that caused the error. - - The member that caused the error. - - - - Gets the path of the JSON location where the error occurred. - - The path of the JSON location where the error occurred. - - - - Gets or sets a value indicating whether this is handled. - - true if handled; otherwise, false. - - - - Provides data for the Error event. - - - - - Gets the current object the error event is being raised against. - - The current object the error event is being raised against. - - - - Gets the error context. - - The error context. - - - - Initializes a new instance of the class. - - The current object. - The error context. - - - - Get and set values for a using dynamic methods. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Provides methods to get attributes. - - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Used by to resolve a for a given . - - - - - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used to resolve references when serializing and deserializing JSON by the . - - - - - Resolves a reference to its object. - - The serialization context. - The reference to resolve. - The object that was resolved from the reference. - - - - Gets the reference for the specified object. - - The serialization context. - The object to get a reference for. - The reference to the object. - - - - Determines whether the specified object is referenced. - - The serialization context. - The object to test for a reference. - - true if the specified object is referenced; otherwise, false. - - - - - Adds a reference to the specified object. - - The serialization context. - The reference. - The object to reference. - - - - Allows users to control class loading and mandate what class to load. - - - - - When implemented, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object - The type of the object the formatter creates a new instance of. - - - - When implemented, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - The that will be used to filter the trace messages passed to the writer. - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Provides methods to get and set values. - - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Contract details for a used by the . - - - - - Gets the of the collection items. - - The of the collection items. - - - - Gets a value indicating whether the collection type is a multidimensional array. - - true if the collection type is a multidimensional array; otherwise, false. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the collection values. - - true if the creator has a parameter with the collection values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the default collection items . - - The converter. - - - - Gets or sets a value indicating whether the collection items preserve object references. - - true if collection items preserve object references; otherwise, false. - - - - Gets or sets the collection item reference loop handling. - - The reference loop handling. - - - - Gets or sets the collection item type name handling. - - The type name handling. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Handles serialization callback events. - - The object that raised the callback event. - The streaming context. - - - - Handles serialization error callback events. - - The object that raised the callback event. - The streaming context. - The error context. - - - - Sets extension data for an object during deserialization. - - The object to set extension data on. - The extension data key. - The extension data value. - - - - Gets extension data for an object during serialization. - - The object to set extension data on. - - - - Contract details for a used by the . - - - - - Gets the underlying type for the contract. - - The underlying type for the contract. - - - - Gets or sets the type created during deserialization. - - The type created during deserialization. - - - - Gets or sets whether this type contract is serialized as a reference. - - Whether this type contract is serialized as a reference. - - - - Gets or sets the default for this contract. - - The converter. - - - - Gets or sets all methods called immediately after deserialization of the object. - - The methods called immediately after deserialization of the object. - - - - Gets or sets all methods called during deserialization of the object. - - The methods called during deserialization of the object. - - - - Gets or sets all methods called after serialization of the object graph. - - The methods called after serialization of the object graph. - - - - Gets or sets all methods called before serialization of the object. - - The methods called before serialization of the object. - - - - Gets or sets all method called when an error is thrown during the serialization of the object. - - The methods called when an error is thrown during the serialization of the object. - - - - Gets or sets the default creator method used to create the object. - - The default creator method used to create the object. - - - - Gets or sets a value indicating whether the default creator is non-public. - - true if the default object creator is non-public; otherwise, false. - - - - Contract details for a used by the . - - - - - Gets or sets the dictionary key resolver. - - The dictionary key resolver. - - - - Gets the of the dictionary keys. - - The of the dictionary keys. - - - - Gets the of the dictionary values. - - The of the dictionary values. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the dictionary values. - - true if the creator has a parameter with the dictionary values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the object member serialization. - - The member object serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Gets the object's properties. - - The object's properties. - - - - Gets a collection of instances that define the parameters used with . - - - - - Gets or sets the function used to create the object. When set this function will override . - This function is called with a collection of arguments which are defined by the collection. - - The function used to create the object. - - - - Gets or sets the extension data setter. - - - - - Gets or sets the extension data getter. - - - - - Gets or sets the extension data value type. - - - - - Gets or sets the extension data name resolver. - - The extension data name resolver. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Maps a JSON property to a .NET member or constructor parameter. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the type that declared this property. - - The type that declared this property. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets the name of the underlying member or parameter. - - The name of the underlying member or parameter. - - - - Gets the that will get and set the during serialization. - - The that will get and set the during serialization. - - - - Gets or sets the for this property. - - The for this property. - - - - Gets or sets the type of the property. - - The type of the property. - - - - Gets or sets the for the property. - If set this converter takes precedence over the contract converter for the property type. - - The converter. - - - - Gets or sets the member converter. - - The member converter. - - - - Gets or sets a value indicating whether this is ignored. - - true if ignored; otherwise, false. - - - - Gets or sets a value indicating whether this is readable. - - true if readable; otherwise, false. - - - - Gets or sets a value indicating whether this is writable. - - true if writable; otherwise, false. - - - - Gets or sets a value indicating whether this has a member attribute. - - true if has a member attribute; otherwise, false. - - - - Gets the default value. - - The default value. - - - - Gets or sets a value indicating whether this is required. - - A value indicating whether this is required. - - - - Gets or sets a value indicating whether this property preserves object references. - - - true if this instance is reference; otherwise, false. - - - - - Gets or sets the property null value handling. - - The null value handling. - - - - Gets or sets the property default value handling. - - The default value handling. - - - - Gets or sets the property reference loop handling. - - The reference loop handling. - - - - Gets or sets the property object creation handling. - - The object creation handling. - - - - Gets or sets or sets the type name handling. - - The type name handling. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets a predicate used to determine whether the property should be deserialized. - - A predicate used to determine whether the property should be deserialized. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets an action used to set whether the property has been deserialized. - - An action used to set whether the property has been deserialized. - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the converter used when serializing the property's collection items. - - The collection's items converter. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - A collection of objects. - - - - - Initializes a new instance of the class. - - The type. - - - - When implemented in a derived class, extracts the key from the specified element. - - The element from which to extract the key. - The key for the specified element. - - - - Adds a object. - - The property to add to the collection. - - - - Gets the closest matching object. - First attempts to get an exact case match of and then - a case insensitive match. - - Name of the property. - A matching property if found. - - - - Gets a property by property name. - - The name of the property to get. - Type property name string comparison. - A matching property if found. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Lookup and create an instance of the type described by the argument. - - The type to create. - Optional arguments to pass to an initializing constructor of the JsonConverter. - If null, the default constructor is used. - - - - Represents a trace writer that writes to memory. When the trace message limit is - reached then old trace messages will be removed as new messages are added. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Initializes a new instance of the class. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Returns an enumeration of the most recent trace messages. - - An enumeration of the most recent trace messages. - - - - Returns a of the most recent trace messages. - - - A of the most recent trace messages. - - - - - A base class for resolving how property names and dictionary keys are serialized. - - - - - A flag indicating whether dictionary keys should be processed. - Defaults to false. - - - - - A flag indicating whether extension data names should be processed. - Defaults to false. - - - - - A flag indicating whether explicitly specified property names, - e.g. a property name customized with a , should be processed. - Defaults to false. - - - - - Gets the serialized name for a given property name. - - The initial property name. - A flag indicating whether the property has had a name explicitly specified. - The serialized property name. - - - - Gets the serialized name for a given extension data name. - - The initial extension data name. - The serialized extension data name. - - - - Gets the serialized key for a given dictionary key. - - The initial dictionary key. - The serialized dictionary key. - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Represents a method that constructs an object. - - The object type to create. - - - - When applied to a method, specifies that the method is called when an error occurs serializing an object. - - - - - Provides methods to get attributes from a , , or . - - - - - Initializes a new instance of the class. - - The instance to get attributes for. This parameter should be a , , or . - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Get and set values for a using reflection. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - A snake case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Specifies how strings are escaped when writing JSON text. - - - - - Only control characters (e.g. newline) are escaped. - - - - - All non-ASCII and control characters (e.g. newline) are escaped. - - - - - HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. - - - - - Specifies what messages to output for the class. - - - - - Output no tracing and debugging messages. - - - - - Output error-handling messages. - - - - - Output warnings and error-handling messages. - - - - - Output informational messages, warnings, and error-handling messages. - - - - - Output all debugging and tracing messages. - - - - - Indicates the method that will be used during deserialization for locating and loading assemblies. - - - - - In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. - - - - - In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. - - - - - Specifies type name handling options for the . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Do not include the .NET type name when serializing types. - - - - - Include the .NET type name when serializing into a JSON object structure. - - - - - Include the .NET type name when serializing into a JSON array structure. - - - - - Always include the .NET type name when serializing. - - - - - Include the .NET type name when the type of the object being serialized is not the same as its declared type. - Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON - you must specify a root type object with - or . - - - - - Determines whether the collection is null or empty. - - The collection. - - true if the collection is null or empty; otherwise, false. - - - - - Adds the elements of the specified collection to the specified generic . - - The list to add to. - The collection of elements to add. - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert or cast the value to. - - The converted type. If conversion was unsuccessful, the initial value - is returned if assignable to the target type. - - - - - Gets a dictionary of the names and values of an type. - - - - - - Gets a dictionary of the names and values of an Enum type. - - The enum type to get names and values for. - - - - - Gets the type of the typed collection's items. - - The type. - The type of the typed collection's items. - - - - Gets the member's underlying type. - - The member. - The underlying type of the member. - - - - Determines whether the member is an indexed property. - - The member. - - true if the member is an indexed property; otherwise, false. - - - - - Determines whether the property is an indexed property. - - The property. - - true if the property is an indexed property; otherwise, false. - - - - - Gets the member's value on the object. - - The member. - The target object. - The member's value on the object. - - - - Sets the member's value on the target object. - - The member. - The target. - The value. - - - - Determines whether the specified MemberInfo can be read. - - The MemberInfo to determine whether can be read. - /// if set to true then allow the member to be gotten non-publicly. - - true if the specified MemberInfo can be read; otherwise, false. - - - - - Determines whether the specified MemberInfo can be set. - - The MemberInfo to determine whether can be set. - if set to true then allow the member to be set non-publicly. - if set to true then allow the member to be set if read-only. - - true if the specified MemberInfo can be set; otherwise, false. - - - - - Builds a string. Unlike this class lets you reuse its internal buffer. - - - - - Determines whether the string is all white space. Empty string will return false. - - The string to test whether it is all white space. - - true if the string is all white space; otherwise, false. - - - - - Specifies the state of the . - - - - - An exception has been thrown, which has left the in an invalid state. - You may call the method to put the in the Closed state. - Any other method calls result in an being thrown. - - - - - The method has been called. - - - - - An object is being written. - - - - - An array is being written. - - - - - A constructor is being written. - - - - - A property is being written. - - - - - A write method has not been called. - - - - - Indicates the method that will be used during deserialization for locating and loading assemblies. - - - - - In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the method is used to load the assembly. - - - - - In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The is used to load the assembly. - - - - diff --git a/trunk/packages/Newtonsoft.Json.10.0.3/lib/portable-net45+win8+wp8+wpa81/Newtonsoft.Json.dll b/trunk/packages/Newtonsoft.Json.10.0.3/lib/portable-net45+win8+wp8+wpa81/Newtonsoft.Json.dll deleted file mode 100644 index 4b0917adea63f26b2f8762382871ab73da643141..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 623616 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 c$4dKm|NehYfhSj+syWD7 - - - Newtonsoft.Json - - - -

    - Represents a BSON Oid (object id). - - - - - Gets or sets the value of the Oid. - - The value of the Oid. - - - - Initializes a new instance of the class. - - The Oid value. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. - - - - - Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. - - - true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. - - - - - Gets or sets a value indicating whether the root object will be read as a JSON array. - - - true if the root object will be read as a JSON array; otherwise, false. - - - - - Gets or sets the used when reading values from BSON. - - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. - - - - - Gets or sets the used when writing values to BSON. - When set to no conversion will occur. - - The used when writing values to BSON. - - - - Initializes a new instance of the class. - - The to write to. - - - - Initializes a new instance of the class. - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. - - - - - Writes the end. - - The token. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes the beginning of a JSON array. - - - - - Writes the beginning of a JSON object. - - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value that represents a BSON object id. - - The Object ID value to write. - - - - Writes a BSON regex. - - The regex pattern. - The regex options. - - - - Specifies how constructors are used when initializing objects during deserialization by the . - - - - - First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. - - - - - Json.NET will use a non-public default constructor before falling back to a parameterized constructor. - - - - - Converts a binary value to and from a base 64 string value. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Creates a custom object. - - The object type to convert. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Creates an object which will then be populated by the serializer. - - Type of the object. - The created object. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Provides a base class for converting a to and from JSON. - - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a F# discriminated union type to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). - - - - - Gets or sets the date time styles used when converting a date to and from JSON. - - The date time styles used when converting a date to and from JSON. - - - - Gets or sets the date time format used when converting a date to and from JSON. - - The date time format used when converting a date to and from JSON. - - - - Gets or sets the culture used when converting a date to and from JSON. - - The culture used when converting a date to and from JSON. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from its name string value. - - - - - Gets or sets a value indicating whether the written enum text should be camel case. - - true if the written enum text will be camel case; otherwise, false. - - - - Gets or sets a value indicating whether integer values are allowed when deserializing. - - true if integers are allowed when deserializing; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - true if the written enum text will be camel case; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from a string (e.g. "1.2.3.4"). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts XML to and from JSON. - - - - - Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. - - The name of the deserialized root element. - - - - Gets or sets a flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - true if the array attribute is written to the XML; otherwise, false. - - - - Gets or sets a value indicating whether to write the root JSON object. - - true if the JSON root object is omitted; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The calling serializer. - The value. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Checks if the is a namespace attribute. - - Attribute name to test. - The attribute name prefix if it has one, otherwise an empty string. - true if attribute name is for a namespace attribute, otherwise false. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Specifies how dates are formatted when writing JSON text. - - - - - Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". - - - - - Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". - - - - - Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. - - - - - Date formatted strings are not parsed to a date type and are read as strings. - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Specifies how to treat the time value when converting between string and . - - - - - Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. - - - - - Treat as a UTC. If the object represents a local time, it is converted to a UTC. - - - - - Treat as a local time if a is being converted to a string. - If a string is being converted to , convert to a local time if a time zone is specified. - - - - - Time zone information should be preserved when converting. - - - - - Specifies default value handling options for the . - - - - - - - - - Include members where the member value is the same as the member's default value when serializing objects. - Included members are written to JSON. Has no effect when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - so that it is not written to JSON. - This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, - decimals and floating point numbers; and false for booleans). The default value ignored can be changed by - placing the on the property. - - - - - Members with a default value but no JSON will be set to their default value when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - and set members to their default value when deserializing. - - - - - Specifies float format handling options when writing special floating point numbers, e.g. , - and with . - - - - - Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". - - - - - Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. - Note that this will produce non-valid JSON. - - - - - Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. - - - - - Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Floating point numbers are parsed to . - - - - - Floating point numbers are parsed to . - - - - - Specifies formatting options for the . - - - - - No special formatting is applied. This is the default. - - - - - Causes child objects to be indented according to the and settings. - - - - - Provides an interface for using pooled arrays. - - The array type content. - - - - Rent an array from the pool. This array must be returned when it is no longer needed. - - The minimum required length of the array. The returned array may be longer. - The rented array from the pool. This array must be returned when it is no longer needed. - - - - Return an array to the pool. - - The array that is being returned. - - - - Provides an interface to enable a class to return line and position information. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - The current line number or 0 if no line information is available (for example, when returns false). - - - - Gets the current line position. - - The current line position or 0 if no line information is available (for example, when returns false). - - - - Instructs the how to serialize the collection. - - - - - Gets or sets a value indicating whether null items are allowed in the collection. - - true if null items are allowed in the collection; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with a flag indicating whether the array can contain null items. - - A flag indicating whether the array can contain null items. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to use the specified constructor when deserializing that object. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the id. - - The id. - - - - Gets or sets the title. - - The title. - - - - Gets or sets the description. - - The description. - - - - Gets or sets the collection's items converter. - - The collection's items converter. - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets a value that indicates whether to preserve object references. - - - true to keep object reference; otherwise, false. The default is false. - - - - - Gets or sets a value that indicates whether to preserve collection's items references. - - - true to keep collection's items object references; otherwise, false. The default is false. - - - - - Gets or sets the reference loop handling used when serializing the collection's items. - - The reference loop handling. - - - - Gets or sets the type name handling used when serializing the collection's items. - - The type name handling. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Provides methods for converting between .NET types and JSON types. - - - - - - - - Gets or sets a function that creates default . - Default settings are automatically used by serialization methods on , - and and on . - To serialize without using any default settings create a with - . - - - - - Represents JavaScript's boolean value true as a string. This field is read-only. - - - - - Represents JavaScript's boolean value false as a string. This field is read-only. - - - - - Represents JavaScript's null as a string. This field is read-only. - - - - - Represents JavaScript's undefined as a string. This field is read-only. - - - - - Represents JavaScript's positive infinity as a string. This field is read-only. - - - - - Represents JavaScript's negative infinity as a string. This field is read-only. - - - - - Represents JavaScript's NaN as a string. This field is read-only. - - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - The time zone handling when the date is converted to a string. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - The string escape handling. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Serializes the specified object to a JSON string. - - The object to serialize. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting. - - The object to serialize. - Indicates how the output should be formatted. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a collection of . - - The object to serialize. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting and a collection of . - - The object to serialize. - Indicates how the output should be formatted. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Deserializes the JSON to a .NET object. - - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to a .NET object using . - - The JSON to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The JSON to deserialize. - The of object being deserialized. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The type of the object to deserialize to. - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the given anonymous type. - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the given anonymous type using . - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The type of the object to deserialize to. - The JSON to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The type of the object to deserialize to. - The object to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The JSON to deserialize. - The type of the object to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The JSON to deserialize. - The type of the object to deserialize to. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Populates the object with values from the JSON string. - - The JSON to populate values from. - The target object to populate values onto. - - - - Populates the object with values from the JSON string using . - - The JSON to populate values from. - The target object to populate values onto. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - - - - Serializes the to a JSON string. - - The node to convert to JSON. - A JSON string of the . - - - - Serializes the to a JSON string using formatting. - - The node to convert to JSON. - Indicates how the output should be formatted. - A JSON string of the . - - - - Serializes the to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output should be formatted. - Omits writing the root object. - A JSON string of the . - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - and writes a Json.NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized . - - - - Converts an object to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can read JSON. - - true if this can read JSON; otherwise, false. - - - - Gets a value indicating whether this can write JSON. - - true if this can write JSON; otherwise, false. - - - - Instructs the to use the specified when serializing the member or class. - - - - - Gets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - - - - - Initializes a new instance of the class. - - Type of the . - - - - Initializes a new instance of the class. - - Type of the . - Parameter list to use when constructing the . Can be null. - - - - Represents a collection of . - - - - - Instructs the how to serialize the collection. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Instructs the to deserialize properties with no matching class member into the specified collection - and write values during serialization. - - - - - Gets or sets a value that indicates whether to write extension data when serializing the object. - - - true to write extension data when serializing the object; otherwise, false. The default is true. - - - - - Gets or sets a value that indicates whether to read extension data when deserializing the object. - - - true to read extension data when deserializing the object; otherwise, false. The default is true. - - - - - Initializes a new instance of the class. - - - - - Instructs the not to serialize the public field or public read/write property value. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the member serialization. - - The member serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified member serialization. - - The member serialization. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to always serialize the member with the specified name. - - - - - Gets or sets the used when serializing the property's collection items. - - The collection's items . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the null value handling used when serializing this property. - - The null value handling. - - - - Gets or sets the default value handling used when serializing this property. - - The default value handling. - - - - Gets or sets the reference loop handling used when serializing this property. - - The reference loop handling. - - - - Gets or sets the object creation handling used when deserializing this property. - - The object creation handling. - - - - Gets or sets the type name handling used when serializing this property. - - The type name handling. - - - - Gets or sets whether this property's value is serialized as a reference. - - Whether this property's value is serialized as a reference. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets a value indicating whether this property is required. - - - A value indicating whether this property is required. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified name. - - Name of the property. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Asynchronously reads the next JSON token from the source. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns true if the next token was read successfully; false if there are no more tokens to read. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously skips the children of the current token. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a []. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the []. This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously reads the next JSON token from the source as a . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Specifies the state of the reader. - - - - - A read method has not been called. - - - - - The end of the file has been reached successfully. - - - - - Reader is at a property. - - - - - Reader is at the start of an object. - - - - - Reader is in an object. - - - - - Reader is at the start of an array. - - - - - Reader is in an array. - - - - - The method has been called. - - - - - Reader has just read a value. - - - - - Reader is at the start of a constructor. - - - - - Reader is in a constructor. - - - - - An error occurred that prevents the read operation from continuing. - - - - - The end of the file has been reached successfully. - - - - - Gets the current reader state. - - The current reader state. - - - - Gets or sets a value indicating whether the source should be closed when this reader is closed. - - - true to close the source when this reader is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether multiple pieces of JSON content can - be read from a continuous stream without erroring. - - - true to support reading multiple pieces of JSON content; otherwise false. - The default is false. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - Gets or sets how time zones are handled when reading JSON. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how custom date formatted strings are parsed when reading JSON. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets the type of the current JSON token. - - - - - Gets the text value of the current JSON token. - - - - - Gets the .NET type for the current JSON token. - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Reads the next JSON token from the source. - - true if the next token was read successfully; false if there are no more tokens to read. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Skips the children of the current token. - - - - - Sets the current token. - - The new token. - - - - Sets the current token and value. - - The new token. - The value. - - - - Sets the current token and value. - - The new token. - The value. - A flag indicating whether the position index inside an array should be updated. - - - - Sets the state based on current token type. - - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Changes the reader's state to . - If is set to true, the source is also closed. - - - - - The exception thrown when an error occurs while reading JSON text. - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class - with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The line number indicating where the error occurred. - The line position indicating where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Instructs the to always serialize the member, and to require that the member has a value. - - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Serializes and deserializes objects into and from the JSON format. - The enables you to control how objects are encoded into JSON. - - - - - Occurs when the errors during serialization and deserialization. - - - - - Gets or sets the used by the serializer when resolving references. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how object references are preserved by the serializer. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) is handled. - - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - - - - Gets or sets how null values are handled during serialization and deserialization. - - - - - Gets or sets how default values are handled during serialization and deserialization. - - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets a collection that will be used during serialization. - - Collection that will be used during serialization. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Indicates how JSON text output is formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled during serialization and deserialization. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. - - - true if there will be a check for additional JSON content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Creates a new instance. - The will not use default settings - from . - - - A new instance. - The will not use default settings - from . - - - - - Creates a new instance using the specified . - The will not use default settings - from . - - The settings to be applied to the . - - A new instance using the specified . - The will not use default settings - from . - - - - - Creates a new instance. - The will use default settings - from . - - - A new instance. - The will use default settings - from . - - - - - Creates a new instance using the specified . - The will use default settings - from as well as the specified . - - The settings to be applied to the . - - A new instance using the specified . - The will use default settings - from as well as the specified . - - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Deserializes the JSON structure contained by the specified . - - The that contains the JSON structure to deserialize. - The being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The type of the object to deserialize. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is Auto to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Specifies the settings on a object. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) are handled. - - Reference loop handling. - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - Missing member handling. - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how null values are handled during serialization and deserialization. - - Null value handling. - - - - Gets or sets how default values are handled during serialization and deserialization. - - The default value handling. - - - - Gets or sets a collection that will be used during serialization. - - The converters. - - - - Gets or sets how object references are preserved by the serializer. - - The preserve references handling. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - The type name handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - The contract resolver. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets the used by the serializer when resolving references. - - The reference resolver. - - - - Gets or sets a function that creates the used by the serializer when resolving references. - - A function that creates the used by the serializer when resolving references. - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the error handler called during serialization and deserialization. - - The error handler called during serialization and deserialization. - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Indicates how JSON text output is formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled during serialization and deserialization. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets a value indicating whether there will be a check for additional content after deserializing an object. - - - true if there will be a check for additional content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Represents a reader that provides fast, non-cached, forward-only access to JSON text data. - - - - - Asynchronously reads the next JSON token from the source. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns true if the next token was read successfully; false if there are no more tokens to read. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a []. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the []. This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Initializes a new instance of the class with the specified . - - The containing the JSON data to read. - - - - Gets or sets the reader's character buffer pool. - - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - - The current line number or 0 if no line information is available (for example, returns false). - - - - - Gets the current line position. - - - The current line position or 0 if no line information is available (for example, returns false). - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the JSON value delimiter. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the specified end token. - - The end token to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously closes this writer. - If is set to true, the destination is also closed. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of the current JSON object or array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes indent characters. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes an indent space. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes raw JSON without changing the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a null value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the beginning of a JSON array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the beginning of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the start of a constructor with the given name. - - The name of the constructor. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes an undefined value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the given white space. - - The string of white space characters. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a [] value. - - The [] value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of an array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of a constructor. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Gets or sets the writer's character array pool. - - - - - Gets or sets how many s to write for each level in the hierarchy when is set to . - - - - - Gets or sets which character to use to quote attribute values. - - - - - Gets or sets which character to use for indenting when is set to . - - - - - Gets or sets a value indicating whether object names will be surrounded with quotes. - - - - - Initializes a new instance of the class using the specified . - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying . - - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the specified end token. - - The end token to write. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Specifies the type of JSON token. - - - - - This is returned by the if a read method has not been called. - - - - - An object start token. - - - - - An array start token. - - - - - A constructor start token. - - - - - An object property name. - - - - - A comment. - - - - - Raw JSON. - - - - - An integer. - - - - - A float. - - - - - A string. - - - - - A boolean. - - - - - A null token. - - - - - An undefined token. - - - - - An object end token. - - - - - An array end token. - - - - - A constructor end token. - - - - - A Date. - - - - - Byte data. - - - - - - Represents a reader that provides validation. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Sets an event handler for receiving schema validation errors. - - - - - Gets the text value of the current JSON token. - - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - - Gets the type of the current JSON token. - - - - - - Gets the .NET type for the current JSON token. - - - - - - Initializes a new instance of the class that - validates the content returned from the given . - - The to read from while validating. - - - - Gets or sets the schema. - - The schema. - - - - Gets the used to construct this . - - The specified in the constructor. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a []. - - - A [] or null if the next JSON token is null. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Asynchronously closes this writer. - If is set to true, the destination is also closed. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the specified end token. - - The end token to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes indent characters. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the JSON value delimiter. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes an indent space. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes raw JSON without changing the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the end of the current JSON object or array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the end of an array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the end of a constructor. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the end of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a null value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the beginning of a JSON array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the start of a constructor with the given name. - - The name of the constructor. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the beginning of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the current token. - - The to read the token from. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the token and its value. - - The to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - null can be passed to the method for tokens that don't have a value, e.g. . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a [] value. - - The [] value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes an undefined value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously writes the given white space. - - The string of white space characters. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Asynchronously ets the state of the . - - The being written. - The value being written. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asychronousity. - - - - Gets or sets a value indicating whether the destination should be closed when this writer is closed. - - - true to close the destination when this writer is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. - - - true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. - - - - - Gets the top. - - The top. - - - - Gets the state of the writer. - - - - - Gets the path of the writer. - - - - - Gets or sets a value indicating how JSON text output should be formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled when writing JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written to JSON text. - - - - - Gets or sets how and values are formatted when writing JSON text. - - - - - Gets or sets the culture used when writing JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the destination and also flushes the destination. - - - - - Closes this writer. - If is set to true, the destination is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the end of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the end of an array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end constructor. - - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes the end of the current JSON object or array. - - - - - Writes the current token and its children. - - The to read the token from. - - - - Writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - - - - Writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - null can be passed to the method for tokens that don't have a value, e.g. . - - - - - Writes the token. - - The to write. - - - - Writes the specified end token. - - The end token to write. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON without changing the writer's state. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Sets the state of the . - - The being written. - The value being written. - - - - The exception thrown when an error occurs while writing JSON text. - - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class - with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Specifies how JSON comments are handled when loading JSON. - - - - - Ignore comments. - - - - - Load comments as a with type . - - - - - Specifies how line information is handled when loading JSON. - - - - - Ignore line information. - - - - - Load line information. - - - - - Contains the LINQ to JSON extension methods. - - - - - Returns a collection of tokens that contains the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the descendants of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, and the descendants of every token in the source collection. - - - - Returns a collection of child properties of every object in the source collection. - - An of that contains the source collection. - An of that contains the properties of every object in the source collection. - - - - Returns a collection of child values of every object in the source collection with the given key. - - An of that contains the source collection. - The token key. - An of that contains the values of every token in the source collection with the given key. - - - - Returns a collection of child values of every object in the source collection. - - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child values of every object in the source collection with the given key. - - The type to convert the values to. - An of that contains the source collection. - The token key. - An that contains the converted values of every token in the source collection with the given key. - - - - Returns a collection of converted child values of every object in the source collection. - - The type to convert the values to. - An of that contains the source collection. - An that contains the converted values of every token in the source collection. - - - - Converts the value. - - The type to convert the value to. - A cast as a of . - A converted value. - - - - Converts the value. - - The source collection type. - The type to convert the value to. - A cast as a of . - A converted value. - - - - Returns a collection of child tokens of every array in the source collection. - - The source collection type. - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child tokens of every array in the source collection. - - An of that contains the source collection. - The type to convert the values to. - The source collection type. - An that contains the converted values of every token in the source collection. - - - - Returns the input typed as . - - An of that contains the source collection. - The input typed as . - - - - Returns the input typed as . - - The source collection type. - An of that contains the source collection. - The input typed as . - - - - Represents a collection of objects. - - The type of token. - - - - Gets the of with the specified key. - - - - - - Represents a JSON array. - - - - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous load. The property contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous load. The property contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads an from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the at the specified index. - - - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Inserts an item to the at the specified index. - - The zero-based index at which should be inserted. - The object to insert into the . - - is not a valid index in the . - - - - - Removes the item at the specified index. - - The zero-based index of the item to remove. - - is not a valid index in the . - - - - - Returns an enumerator that iterates through the collection. - - - A of that can be used to iterate through the collection. - - - - - Adds an item to the . - - The object to add to the . - - - - Removes all items from the . - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Copies the elements of the to an array, starting at a particular array index. - - The array. - Index of the array. - - - - Gets a value indicating whether the is read-only. - - true if the is read-only; otherwise, false. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - - - Represents a JSON constructor. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets or sets the name of this constructor. - - The constructor name. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name. - - The constructor name. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a token that can contain other tokens. - - - - - Occurs when the items list of the collection has changed, or the collection is reset. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Raises the event. - - The instance containing the event data. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Get the first child token of this token. - - - A containing the first child token of the . - - - - - Get the last child token of this token. - - - A containing the last child token of the . - - - - - Returns a collection of the child tokens of this token, in document order. - - - An of containing the child tokens of this , in document order. - - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - - A containing the child values of this , in document order. - - - - - Returns a collection of the descendant tokens for this token in document order. - - An of containing the descendant tokens of the . - - - - Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. - - An of containing this token, and all the descendant tokens of the . - - - - Adds the specified content as children of this . - - The content to be added. - - - - Adds the specified content as the first children of this . - - The content to be added. - - - - Creates a that can be used to add tokens to the . - - A that is ready to have content written to it. - - - - Replaces the child nodes of this token with the specified content. - - The content. - - - - Removes the child nodes from this token. - - - - - Merge the specified content into this . - - The content to be merged. - - - - Merge the specified content into this using . - - The content to be merged. - The used to merge the content. - - - - Gets the count of child JSON tokens. - - The count of child JSON tokens. - - - - Represents a collection of objects. - - The type of token. - - - - An empty collection of objects. - - - - - Initializes a new instance of the struct. - - The enumerable. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Gets the of with the specified key. - - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Represents a JSON object. - - - - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Occurs when a property value changes. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Gets the node type for this . - - The type. - - - - Gets an of of this object's properties. - - An of of this object's properties. - - - - Gets a the specified name. - - The property name. - A with the specified name or null. - - - - Gets a of of this object's property values. - - A of of this object's property values. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the with the specified property name. - - - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified property name. - - Name of the property. - The with the specified property name. - - - - Gets the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - One of the enumeration values that specifies how the strings will be compared. - The with the specified property name. - - - - Tries to get the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - The value. - One of the enumeration values that specifies how the strings will be compared. - true if a value was successfully retrieved; otherwise, false. - - - - Adds the specified property name. - - Name of the property. - The value. - - - - Removes the property with the specified name. - - Name of the property. - true if item was successfully removed; otherwise, false. - - - - Tries to get the with the specified property name. - - Name of the property. - The value. - true if a value was successfully retrieved; otherwise, false. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Represents a JSON property. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the property name. - - The property name. - - - - Gets or sets the property value. - - The property value. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a raw JSON string. - - - - - Asynchronously creates an instance of with the content of the reader's current token. - - The reader. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns an instance of with the content of the reader's current token. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class. - - The raw json. - - - - Creates an instance of with the content of the reader's current token. - - The reader. - An instance of with the content of the reader's current token. - - - - Specifies the settings used when loading JSON. - - - - - Initializes a new instance of the class. - - - - - Gets or sets how JSON comments are handled when loading JSON. - - The JSON comment handling. - - - - Gets or sets how JSON line info is handled when loading JSON. - - The JSON line info handling. - - - - Specifies the settings used when merging JSON. - - - - - Gets or sets the method used when merging JSON arrays. - - The method used when merging JSON arrays. - - - - Gets or sets how null value properties are merged. - - How null value properties are merged. - - - - Represents an abstract JSON token. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Writes this token to a asynchronously. - - A into which this method will write. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously creates a from a . - - An positioned at the token to read into this . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains - the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - An positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains - the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - A positioned at the token to read into this . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - A positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Gets a comparer that can compare two tokens for value equality. - - A that can compare two nodes for value equality. - - - - Gets or sets the parent. - - The parent. - - - - Gets the root of this . - - The root of this . - - - - Gets the node type for this . - - The type. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Compares the values of two tokens, including the values of all descendant tokens. - - The first to compare. - The second to compare. - true if the tokens are equal; otherwise false. - - - - Gets the next sibling token of this node. - - The that contains the next sibling token. - - - - Gets the previous sibling token of this node. - - The that contains the previous sibling token. - - - - Gets the path of the JSON token. - - - - - Adds the specified content immediately after this token. - - A content object that contains simple content or a collection of content objects to be added after this token. - - - - Adds the specified content immediately before this token. - - A content object that contains simple content or a collection of content objects to be added before this token. - - - - Returns a collection of the ancestor tokens of this token. - - A collection of the ancestor tokens of this token. - - - - Returns a collection of tokens that contain this token, and the ancestors of this token. - - A collection of tokens that contain this token, and the ancestors of this token. - - - - Returns a collection of the sibling tokens after this token, in document order. - - A collection of the sibling tokens after this tokens, in document order. - - - - Returns a collection of the sibling tokens before this token, in document order. - - A collection of the sibling tokens before this token, in document order. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets the with the specified key converted to the specified type. - - The type to convert the token to. - The token key. - The converted token value. - - - - Get the first child token of this token. - - A containing the first child token of the . - - - - Get the last child token of this token. - - A containing the last child token of the . - - - - Returns a collection of the child tokens of this token, in document order. - - An of containing the child tokens of this , in document order. - - - - Returns a collection of the child tokens of this token, in document order, filtered by the specified type. - - The type to filter the child tokens on. - A containing the child tokens of this , in document order. - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - A containing the child values of this , in document order. - - - - Removes this token from its parent. - - - - - Replaces this token with the specified token. - - The value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Returns the indented JSON for this token. - - - The indented JSON for this token. - - - - - Returns the JSON for this token using the given formatting and converters. - - Indicates how the output should be formatted. - A collection of s which will be used when writing the token. - The JSON for this token using the given formatting and converters. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to []. - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from [] to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Creates a for this token. - - A that can be used to read this token and its descendants. - - - - Creates a from an object. - - The object that will be used to create . - A with the value of the specified object. - - - - Creates a from an object using the specified . - - The object that will be used to create . - The that will be used when reading the object. - A with the value of the specified object. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - An positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - Creates a from a . - - A positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A , or null. - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - A . - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - An of that contains the selected elements. - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - An of that contains the selected elements. - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Creates a new instance of the . All child tokens are recursively cloned. - - A new instance of the . - - - - Adds an object to the annotation list of this . - - The annotation to add. - - - - Get the first annotation object of the specified type from this . - - The type of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets the first annotation object of the specified type from this . - - The of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets a collection of annotations of the specified type for this . - - The type of the annotations to retrieve. - An that contains the annotations for this . - - - - Gets a collection of annotations of the specified type for this . - - The of the annotations to retrieve. - An of that contains the annotations that match the specified type for this . - - - - Removes the annotations of the specified type from this . - - The type of annotations to remove. - - - - Removes the annotations of the specified type from this . - - The of annotations to remove. - - - - Compares tokens to determine whether they are equal. - - - - - Determines whether the specified objects are equal. - - The first object of type to compare. - The second object of type to compare. - - true if the specified objects are equal; otherwise, false. - - - - - Returns a hash code for the specified object. - - The for which a hash code is to be returned. - A hash code for the specified object. - The type of is a reference type and is null. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Gets the at the reader's current position. - - - - - Initializes a new instance of the class. - - The token to read from. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Gets the path of the current JSON token. - - - - - Specifies the type of token. - - - - - No token type has been set. - - - - - A JSON object. - - - - - A JSON array. - - - - - A JSON constructor. - - - - - A JSON object property. - - - - - A comment. - - - - - An integer value. - - - - - A float value. - - - - - A string value. - - - - - A boolean value. - - - - - A null value. - - - - - An undefined value. - - - - - A date value. - - - - - A raw JSON value. - - - - - A collection of bytes value. - - - - - A Guid value. - - - - - A Uri value. - - - - - A TimeSpan value. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets the at the writer's current position. - - - - - Gets the token being written. - - The token being written. - - - - Initializes a new instance of the class writing to the given . - - The container being written to. - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the underlying . - - - - - Closes this writer. - If is set to true, the JSON is auto-completed. - - - Setting to true has no additional effect, since the underlying is a type that cannot be closed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end. - - The token. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes a value. - An error will be raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Represents a value in JSON (string, integer, date, etc). - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Creates a comment with the given value. - - The value. - A comment with the given value. - - - - Creates a string with the given value. - - The value. - A string with the given value. - - - - Creates a null value. - - A null value. - - - - Creates a undefined value. - - A undefined value. - - - - Gets the node type for this . - - The type. - - - - Gets or sets the underlying token value. - - The underlying token value. - - - - Writes this token to a . - - A into which this method will write. - A collection of s which will be used when writing the token. - - - - Indicates whether the current object is equal to another object of the same type. - - - true if the current object is equal to the parameter; otherwise, false. - - An object to compare with this object. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format provider. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - The format provider. - - A that represents this instance. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. - - An object to compare with this instance. - - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: - Value - Meaning - Less than zero - This instance is less than . - Zero - This instance is equal to . - Greater than zero - This instance is greater than . - - - is not of the same type as this instance. - - - - - Specifies how JSON arrays are merged together. - - - - Concatenate arrays. - - - Union arrays, skipping items that already exist. - - - Replace all array items. - - - Merge array items together, matched by index. - - - - Specifies how null value properties are merged. - - - - - The content's null value properties will be ignored during merging. - - - - - The content's null value properties will be merged. - - - - - Specifies the member serialization options for the . - - - - - All public members are serialized by default. Members can be excluded using or . - This is the default member serialization mode. - - - - - Only members marked with or are serialized. - This member serialization mode can also be set by marking the class with . - - - - - All public and private fields are serialized. Members can be excluded using or . - This member serialization mode can also be set by marking the class with - and setting IgnoreSerializableAttribute on to false. - - - - - Specifies metadata property handling options for the . - - - - - Read metadata properties located at the start of a JSON object. - - - - - Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. - - - - - Do not try to read metadata properties. - - - - - Specifies missing member handling options for the . - - - - - Ignore a missing member and do not attempt to deserialize it. - - - - - Throw a when a missing member is encountered during deserialization. - - - - - Specifies null value handling options for the . - - - - - - - - - Include null values when serializing and deserializing objects. - - - - - Ignore null values when serializing and deserializing objects. - - - - - Specifies how object creation is handled by the . - - - - - Reuse existing objects, create new objects when needed. - - - - - Only reuse existing objects. - - - - - Always create new objects. - - - - - Specifies reference handling options for the . - Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . - - - - - - - - Do not preserve references when serializing types. - - - - - Preserve references when serializing into a JSON object structure. - - - - - Preserve references when serializing into a JSON array structure. - - - - - Preserve references when serializing. - - - - - Specifies reference loop handling options for the . - - - - - Throw a when a loop is encountered. - - - - - Ignore loop references and do not serialize. - - - - - Serialize loop references. - - - - - Indicating whether a property is required. - - - - - The property is not required. The default state. - - - - - The property must be defined in JSON but can be a null value. - - - - - The property must be defined in JSON and cannot be a null value. - - - - - The property is not required but it cannot be a null value. - - - - - - Contains the JSON schema extension methods. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - true if the specified is valid; otherwise, false. - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - When this method returns, contains any error messages generated while validating. - - true if the specified is valid; otherwise, false. - - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - The validation event handler. - - - - - An in-memory representation of a JSON Schema. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the id. - - - - - Gets or sets the title. - - - - - Gets or sets whether the object is required. - - - - - Gets or sets whether the object is read-only. - - - - - Gets or sets whether the object is visible to users. - - - - - Gets or sets whether the object is transient. - - - - - Gets or sets the description of the object. - - - - - Gets or sets the types of values allowed by the object. - - The type. - - - - Gets or sets the pattern. - - The pattern. - - - - Gets or sets the minimum length. - - The minimum length. - - - - Gets or sets the maximum length. - - The maximum length. - - - - Gets or sets a number that the value should be divisible by. - - A number that the value should be divisible by. - - - - Gets or sets the minimum. - - The minimum. - - - - Gets or sets the maximum. - - The maximum. - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). - - A flag indicating whether the value can not equal the number defined by the minimum attribute (). - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). - - A flag indicating whether the value can not equal the number defined by the maximum attribute (). - - - - Gets or sets the minimum number of items. - - The minimum number of items. - - - - Gets or sets the maximum number of items. - - The maximum number of items. - - - - Gets or sets the of items. - - The of items. - - - - Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . - - - true if items are validated using their array position; otherwise, false. - - - - - Gets or sets the of additional items. - - The of additional items. - - - - Gets or sets a value indicating whether additional items are allowed. - - - true if additional items are allowed; otherwise, false. - - - - - Gets or sets whether the array items must be unique. - - - - - Gets or sets the of properties. - - The of properties. - - - - Gets or sets the of additional properties. - - The of additional properties. - - - - Gets or sets the pattern properties. - - The pattern properties. - - - - Gets or sets a value indicating whether additional properties are allowed. - - - true if additional properties are allowed; otherwise, false. - - - - - Gets or sets the required property if this property is present. - - The required property if this property is present. - - - - Gets or sets the a collection of valid enum values allowed. - - A collection of valid enum values allowed. - - - - Gets or sets disallowed types. - - The disallowed types. - - - - Gets or sets the default value. - - The default value. - - - - Gets or sets the collection of that this schema extends. - - The collection of that this schema extends. - - - - Gets or sets the format. - - The format. - - - - Initializes a new instance of the class. - - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The object representing the JSON Schema. - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The to use when resolving schema references. - The object representing the JSON Schema. - - - - Load a from a string that contains JSON Schema. - - A that contains JSON Schema. - A populated from the string that contains JSON Schema. - - - - Load a from a string that contains JSON Schema using the specified . - - A that contains JSON Schema. - The resolver. - A populated from the string that contains JSON Schema. - - - - Writes this schema to a . - - A into which this method will write. - - - - Writes this schema to a using the specified . - - A into which this method will write. - The resolver used. - - - - Returns a that represents the current . - - - A that represents the current . - - - - - - Returns detailed information about the schema exception. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - - Generates a from a specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets how undefined schemas are handled by the serializer. - - - - - Gets or sets the contract resolver. - - The contract resolver. - - - - Generate a from the specified type. - - The type to generate a from. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - - Resolves from an id. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the loaded schemas. - - The loaded schemas. - - - - Initializes a new instance of the class. - - - - - Gets a for the specified reference. - - The id. - A for the specified reference. - - - - - The value types allowed by the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - No type specified. - - - - - String type. - - - - - Float type. - - - - - Integer type. - - - - - Boolean type. - - - - - Object type. - - - - - Array type. - - - - - Null type. - - - - - Any type. - - - - - - Specifies undefined schema Id handling options for the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Do not infer a schema Id. - - - - - Use the .NET type name as the schema Id. - - - - - Use the assembly qualified .NET type name as the schema Id. - - - - - - Returns detailed information related to the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the associated with the validation error. - - The JsonSchemaException associated with the validation error. - - - - Gets the path of the JSON location where the validation error occurred. - - The path of the JSON location where the validation error occurred. - - - - Gets the text description corresponding to the validation error. - - The text description. - - - - - Represents the callback method that will handle JSON schema validation events and the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Allows users to control class loading and mandate what class to load. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object - The type of the object the formatter creates a new instance of. - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - A camel case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Resolves member mappings for a type, camel casing property names. - - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used by to resolve a for a given . - - - - - Gets a value indicating whether members are being get and set using dynamic code generation. - This value is determined by the runtime permissions available. - - - true if using dynamic code generation; otherwise, false. - - - - - Gets or sets a value indicating whether compiler generated members should be serialized. - - - true if serialized compiler generated members; otherwise, false. - - - - - Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. - - The naming strategy used to resolve how property names and dictionary keys are serialized. - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Gets the serializable members for the type. - - The type to get serializable members for. - The serializable members for the type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates the constructor parameters. - - The constructor to create properties for. - The type's member properties. - Properties for the given . - - - - Creates a for the given . - - The matching member property. - The constructor parameter. - A created for the given . - - - - Resolves the default for the contract. - - Type of the object. - The contract's default . - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Determines which contract type is created for the given type. - - Type of the object. - A for the given type. - - - - Creates properties for the given . - - The type to create properties for. - /// The member serialization mode for the type. - Properties for the given . - - - - Creates the used by the serializer to get and set values from a member. - - The member. - The used by the serializer to get and set values from a member. - - - - Creates a for the given . - - The member's parent . - The member to create a for. - A created for the given . - - - - Resolves the name of the property. - - Name of the property. - Resolved name of the property. - - - - Resolves the name of the extension data. By default no changes are made to extension data names. - - Name of the extension data. - Resolved name of the extension data. - - - - Resolves the key of the dictionary. By default is used to resolve dictionary keys. - - Key of the dictionary. - Resolved key of the dictionary. - - - - Gets the resolved name of the property. - - Name of the property. - Name of the property. - - - - The default naming strategy. Property names and dictionary keys are unchanged. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - The default serialization binder used when resolving and loading classes from type names. - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - The type of the object the formatter creates a new instance of. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Provides information surrounding an error. - - - - - Gets the error. - - The error. - - - - Gets the original object that caused the error. - - The original object that caused the error. - - - - Gets the member that caused the error. - - The member that caused the error. - - - - Gets the path of the JSON location where the error occurred. - - The path of the JSON location where the error occurred. - - - - Gets or sets a value indicating whether this is handled. - - true if handled; otherwise, false. - - - - Provides data for the Error event. - - - - - Gets the current object the error event is being raised against. - - The current object the error event is being raised against. - - - - Gets the error context. - - The error context. - - - - Initializes a new instance of the class. - - The current object. - The error context. - - - - Get and set values for a using dynamic methods. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Provides methods to get attributes. - - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Used by to resolve a for a given . - - - - - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used to resolve references when serializing and deserializing JSON by the . - - - - - Resolves a reference to its object. - - The serialization context. - The reference to resolve. - The object that was resolved from the reference. - - - - Gets the reference for the specified object. - - The serialization context. - The object to get a reference for. - The reference to the object. - - - - Determines whether the specified object is referenced. - - The serialization context. - The object to test for a reference. - - true if the specified object is referenced; otherwise, false. - - - - - Adds a reference to the specified object. - - The serialization context. - The reference. - The object to reference. - - - - Allows users to control class loading and mandate what class to load. - - - - - When implemented, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object - The type of the object the formatter creates a new instance of. - - - - When implemented, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - The that will be used to filter the trace messages passed to the writer. - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Provides methods to get and set values. - - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Contract details for a used by the . - - - - - Gets the of the collection items. - - The of the collection items. - - - - Gets a value indicating whether the collection type is a multidimensional array. - - true if the collection type is a multidimensional array; otherwise, false. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the collection values. - - true if the creator has a parameter with the collection values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the default collection items . - - The converter. - - - - Gets or sets a value indicating whether the collection items preserve object references. - - true if collection items preserve object references; otherwise, false. - - - - Gets or sets the collection item reference loop handling. - - The reference loop handling. - - - - Gets or sets the collection item type name handling. - - The type name handling. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Handles serialization callback events. - - The object that raised the callback event. - The streaming context. - - - - Handles serialization error callback events. - - The object that raised the callback event. - The streaming context. - The error context. - - - - Sets extension data for an object during deserialization. - - The object to set extension data on. - The extension data key. - The extension data value. - - - - Gets extension data for an object during serialization. - - The object to set extension data on. - - - - Contract details for a used by the . - - - - - Gets the underlying type for the contract. - - The underlying type for the contract. - - - - Gets or sets the type created during deserialization. - - The type created during deserialization. - - - - Gets or sets whether this type contract is serialized as a reference. - - Whether this type contract is serialized as a reference. - - - - Gets or sets the default for this contract. - - The converter. - - - - Gets or sets all methods called immediately after deserialization of the object. - - The methods called immediately after deserialization of the object. - - - - Gets or sets all methods called during deserialization of the object. - - The methods called during deserialization of the object. - - - - Gets or sets all methods called after serialization of the object graph. - - The methods called after serialization of the object graph. - - - - Gets or sets all methods called before serialization of the object. - - The methods called before serialization of the object. - - - - Gets or sets all method called when an error is thrown during the serialization of the object. - - The methods called when an error is thrown during the serialization of the object. - - - - Gets or sets the default creator method used to create the object. - - The default creator method used to create the object. - - - - Gets or sets a value indicating whether the default creator is non-public. - - true if the default object creator is non-public; otherwise, false. - - - - Contract details for a used by the . - - - - - Gets or sets the dictionary key resolver. - - The dictionary key resolver. - - - - Gets the of the dictionary keys. - - The of the dictionary keys. - - - - Gets the of the dictionary values. - - The of the dictionary values. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the dictionary values. - - true if the creator has a parameter with the dictionary values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets the object's properties. - - The object's properties. - - - - Gets or sets the property name resolver. - - The property name resolver. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the object member serialization. - - The member object serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Gets the object's properties. - - The object's properties. - - - - Gets a collection of instances that define the parameters used with . - - - - - Gets or sets the function used to create the object. When set this function will override . - This function is called with a collection of arguments which are defined by the collection. - - The function used to create the object. - - - - Gets or sets the extension data setter. - - - - - Gets or sets the extension data getter. - - - - - Gets or sets the extension data value type. - - - - - Gets or sets the extension data name resolver. - - The extension data name resolver. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Maps a JSON property to a .NET member or constructor parameter. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the type that declared this property. - - The type that declared this property. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets the name of the underlying member or parameter. - - The name of the underlying member or parameter. - - - - Gets the that will get and set the during serialization. - - The that will get and set the during serialization. - - - - Gets or sets the for this property. - - The for this property. - - - - Gets or sets the type of the property. - - The type of the property. - - - - Gets or sets the for the property. - If set this converter takes precedence over the contract converter for the property type. - - The converter. - - - - Gets or sets the member converter. - - The member converter. - - - - Gets or sets a value indicating whether this is ignored. - - true if ignored; otherwise, false. - - - - Gets or sets a value indicating whether this is readable. - - true if readable; otherwise, false. - - - - Gets or sets a value indicating whether this is writable. - - true if writable; otherwise, false. - - - - Gets or sets a value indicating whether this has a member attribute. - - true if has a member attribute; otherwise, false. - - - - Gets the default value. - - The default value. - - - - Gets or sets a value indicating whether this is required. - - A value indicating whether this is required. - - - - Gets or sets a value indicating whether this property preserves object references. - - - true if this instance is reference; otherwise, false. - - - - - Gets or sets the property null value handling. - - The null value handling. - - - - Gets or sets the property default value handling. - - The default value handling. - - - - Gets or sets the property reference loop handling. - - The reference loop handling. - - - - Gets or sets the property object creation handling. - - The object creation handling. - - - - Gets or sets or sets the type name handling. - - The type name handling. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets a predicate used to determine whether the property should be deserialized. - - A predicate used to determine whether the property should be deserialized. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets an action used to set whether the property has been deserialized. - - An action used to set whether the property has been deserialized. - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the converter used when serializing the property's collection items. - - The collection's items converter. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - A collection of objects. - - - - - Initializes a new instance of the class. - - The type. - - - - When implemented in a derived class, extracts the key from the specified element. - - The element from which to extract the key. - The key for the specified element. - - - - Adds a object. - - The property to add to the collection. - - - - Gets the closest matching object. - First attempts to get an exact case match of and then - a case insensitive match. - - Name of the property. - A matching property if found. - - - - Gets a property by property name. - - The name of the property to get. - Type property name string comparison. - A matching property if found. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Lookup and create an instance of the type described by the argument. - - The type to create. - Optional arguments to pass to an initializing constructor of the JsonConverter. - If null, the default constructor is used. - - - - Represents a trace writer that writes to memory. When the trace message limit is - reached then old trace messages will be removed as new messages are added. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Initializes a new instance of the class. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Returns an enumeration of the most recent trace messages. - - An enumeration of the most recent trace messages. - - - - Returns a of the most recent trace messages. - - - A of the most recent trace messages. - - - - - A base class for resolving how property names and dictionary keys are serialized. - - - - - A flag indicating whether dictionary keys should be processed. - Defaults to false. - - - - - A flag indicating whether extension data names should be processed. - Defaults to false. - - - - - A flag indicating whether explicitly specified property names, - e.g. a property name customized with a , should be processed. - Defaults to false. - - - - - Gets the serialized name for a given property name. - - The initial property name. - A flag indicating whether the property has had a name explicitly specified. - The serialized property name. - - - - Gets the serialized name for a given extension data name. - - The initial extension data name. - The serialized extension data name. - - - - Gets the serialized key for a given dictionary key. - - The initial dictionary key. - The serialized dictionary key. - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Represents a method that constructs an object. - - The object type to create. - - - - When applied to a method, specifies that the method is called when an error occurs serializing an object. - - - - - Provides methods to get attributes from a , , or . - - - - - Initializes a new instance of the class. - - The instance to get attributes for. This parameter should be a , , or . - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Get and set values for a using reflection. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - A snake case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Specifies how strings are escaped when writing JSON text. - - - - - Only control characters (e.g. newline) are escaped. - - - - - All non-ASCII and control characters (e.g. newline) are escaped. - - - - - HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. - - - - - Specifies what messages to output for the class. - - - - - Output no tracing and debugging messages. - - - - - Output error-handling messages. - - - - - Output warnings and error-handling messages. - - - - - Output informational messages, warnings, and error-handling messages. - - - - - Output all debugging and tracing messages. - - - - - Indicates the method that will be used during deserialization for locating and loading assemblies. - - - - - In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. - - - - - In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. - - - - - Specifies type name handling options for the . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Do not include the .NET type name when serializing types. - - - - - Include the .NET type name when serializing into a JSON object structure. - - - - - Include the .NET type name when serializing into a JSON array structure. - - - - - Always include the .NET type name when serializing. - - - - - Include the .NET type name when the type of the object being serialized is not the same as its declared type. - Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON - you must specify a root type object with - or . - - - - - Determines whether the collection is null or empty. - - The collection. - - true if the collection is null or empty; otherwise, false. - - - - - Adds the elements of the specified collection to the specified generic . - - The list to add to. - The collection of elements to add. - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert or cast the value to. - - The converted type. If conversion was unsuccessful, the initial value - is returned if assignable to the target type. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic that returns a result - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Returns a Restrictions object which includes our current restrictions merged - with a restriction limiting our type - - - - - Gets a dictionary of the names and values of an type. - - - - - - Gets a dictionary of the names and values of an Enum type. - - The enum type to get names and values for. - - - - - List of primitive types which can be widened. - - - - - Widening masks for primitive types above. - Index of the value in this array defines a type we're widening, - while the bits in mask define types it can be widened to (including itself). - - For example, value at index 0 defines a bool type, and it only has bit 0 set, - i.e. bool values can be assigned only to bool. - - - - - Checks if value of primitive type can be - assigned to parameter of primitive type . - - Source primitive type. - Target primitive type. - true if source type can be widened to target type, false otherwise. - - - - Checks if a set of values with given can be used - to invoke a method with specified . - - Method parameters. - Argument types. - Try to pack extra arguments into the last parameter when it is marked up with . - true if method can be called with given arguments, false otherwise. - - - - Compares two sets of parameters to determine - which one suits better for given argument types. - - - - - Returns a best method overload for given argument . - - List of method candidates. - Argument types. - Best method overload, or null if none matched. - - - - Gets the type of the typed collection's items. - - The type. - The type of the typed collection's items. - - - - Gets the member's underlying type. - - The member. - The underlying type of the member. - - - - Determines whether the member is an indexed property. - - The member. - - true if the member is an indexed property; otherwise, false. - - - - - Determines whether the property is an indexed property. - - The property. - - true if the property is an indexed property; otherwise, false. - - - - - Gets the member's value on the object. - - The member. - The target object. - The member's value on the object. - - - - Sets the member's value on the target object. - - The member. - The target. - The value. - - - - Determines whether the specified MemberInfo can be read. - - The MemberInfo to determine whether can be read. - /// if set to true then allow the member to be gotten non-publicly. - - true if the specified MemberInfo can be read; otherwise, false. - - - - - Determines whether the specified MemberInfo can be set. - - The MemberInfo to determine whether can be set. - if set to true then allow the member to be set non-publicly. - if set to true then allow the member to be set if read-only. - - true if the specified MemberInfo can be set; otherwise, false. - - - - - Builds a string. Unlike this class lets you reuse its internal buffer. - - - - - Determines whether the string is all white space. Empty string will return false. - - The string to test whether it is all white space. - - true if the string is all white space; otherwise, false. - - - - - Specifies the state of the . - - - - - An exception has been thrown, which has left the in an invalid state. - You may call the method to put the in the Closed state. - Any other method calls result in an being thrown. - - - - - The method has been called. - - - - - An object is being written. - - - - - An array is being written. - - - - - A constructor is being written. - - - - - A property is being written. - - - - - A write method has not been called. - - - - - Indicates the method that will be used during deserialization for locating and loading assemblies. - - - - - In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the method is used to load the assembly. - - - - - In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The is used to load the assembly. - - - - diff --git a/trunk/packages/Newtonsoft.Json.10.0.3/tools/install.ps1 b/trunk/packages/Newtonsoft.Json.10.0.3/tools/install.ps1 deleted file mode 100644 index 0cebb5e..0000000 --- a/trunk/packages/Newtonsoft.Json.10.0.3/tools/install.ps1 +++ /dev/null @@ -1,116 +0,0 @@ -param($installPath, $toolsPath, $package, $project) - -# open json.net splash page on package install -# don't open if json.net is installed as a dependency - -try -{ - $url = "http://www.newtonsoft.com/json/install?version=" + $package.Version - $dte2 = Get-Interface $dte ([EnvDTE80.DTE2]) - - if ($dte2.ActiveWindow.Caption -eq "Package Manager Console") - { - # user is installing from VS NuGet console - # get reference to the window, the console host and the input history - # show webpage if "install-package newtonsoft.json" was last input - - $consoleWindow = $(Get-VSComponentModel).GetService([NuGetConsole.IPowerConsoleWindow]) - - $props = $consoleWindow.GetType().GetProperties([System.Reflection.BindingFlags]::Instance -bor ` - [System.Reflection.BindingFlags]::NonPublic) - - $prop = $props | ? { $_.Name -eq "ActiveHostInfo" } | select -first 1 - if ($prop -eq $null) { return } - - $hostInfo = $prop.GetValue($consoleWindow) - if ($hostInfo -eq $null) { return } - - $history = $hostInfo.WpfConsole.InputHistory.History - - $lastCommand = $history | select -last 1 - - if ($lastCommand) - { - $lastCommand = $lastCommand.Trim().ToLower() - if ($lastCommand.StartsWith("install-package") -and $lastCommand.Contains("newtonsoft.json")) - { - $dte2.ItemOperations.Navigate($url) | Out-Null - } - } - } - else - { - # user is installing from VS NuGet dialog - # get reference to the window, then smart output console provider - # show webpage if messages in buffered console contains "installing...newtonsoft.json" in last operation - - $instanceField = [NuGet.Dialog.PackageManagerWindow].GetField("CurrentInstance", [System.Reflection.BindingFlags]::Static -bor ` - [System.Reflection.BindingFlags]::NonPublic) - - $consoleField = [NuGet.Dialog.PackageManagerWindow].GetField("_smartOutputConsoleProvider", [System.Reflection.BindingFlags]::Instance -bor ` - [System.Reflection.BindingFlags]::NonPublic) - - if ($instanceField -eq $null -or $consoleField -eq $null) { return } - - $instance = $instanceField.GetValue($null) - - if ($instance -eq $null) { return } - - $consoleProvider = $consoleField.GetValue($instance) - if ($consoleProvider -eq $null) { return } - - $console = $consoleProvider.CreateOutputConsole($false) - - $messagesField = $console.GetType().GetField("_messages", [System.Reflection.BindingFlags]::Instance -bor ` - [System.Reflection.BindingFlags]::NonPublic) - if ($messagesField -eq $null) { return } - - $messages = $messagesField.GetValue($console) - if ($messages -eq $null) { return } - - $operations = $messages -split "==============================" - - $lastOperation = $operations | select -last 1 - - if ($lastOperation) - { - $lastOperation = $lastOperation.ToLower() - - $lines = $lastOperation -split "`r`n" - - $installMatch = $lines | ? { $_.StartsWith("------- installing...newtonsoft.json ") } | select -first 1 - - if ($installMatch) - { - $dte2.ItemOperations.Navigate($url) | Out-Null - } - } - } -} -catch -{ - try - { - $pmPane = $dte2.ToolWindows.OutputWindow.OutputWindowPanes.Item("Package Manager") - - $selection = $pmPane.TextDocument.Selection - $selection.StartOfDocument($false) - $selection.EndOfDocument($true) - - if ($selection.Text.StartsWith("Attempting to gather dependencies information for package 'Newtonsoft.Json." + $package.Version + "'")) - { - # don't show on upgrade - if (!$selection.Text.Contains("Removed package")) - { - $dte2.ItemOperations.Navigate($url) | Out-Null - } - } - } - catch - { - # stop potential errors from bubbling up - # worst case the splash page won't open - } -} - -# still yolo \ No newline at end of file

    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�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⋘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