*** Squeak 5.2 Release Notes *** The two major changes of this release are the re-integration of Etoys code and a reworking of the meta-model of objects for code execution, which includes the support for proper block closure objects. By re-introducing parts of the Etoys distribution, you can now find even more interactive morphs in Squeak. The new objects for representing code make the concepts of Smalltalk more explicit. We introduced a new super class called CompiledCode whose subclasses represent methods and blocks. During execution, these code objects result in Context objects. This update thereby also includes support for objects representing blocks as objects which are independent of the methods in which they have been defined. A number of other improvements to the standard library and the tools are introduced in this release. New file handling dialogs are introduced which provide a convenient way to load or store file content. You can use them in your objects through the "ui requests - files" protocol of the UIManager, e.g. by sending the #chooseFileMatching: message. The dialogs are already integrated in the core tools and protocols. This release also substantially improves the implementation of Squeak Environments and integrates them with standard tools such as the Workspace or Monticello browsers. In the standard library, this release provides a more extensive TextConverter hierarchy and improves the MIMEConverter infrastructure. Further, the classes for handling emails and MIME documents have been refactored for easier access. Finally, this release includes a number of fixes, minor improvements to tools, and refactorings all throughout the core packages. Some major refactorings are the removal of calls to the deprecated #clone message, removal of the redundant #ifNotNilDo: method, and a more modular version of referring to the current world of a project. For more details read on: Detailed Improvements in Language, Tools, and the Environment Balloon - Balloon primitive methods now return default values instead of failing if there is no plugin available - ExternalForm from the EToys package has been added Compression - Improved error messages for ZipArchives - Fixed issues with the ZlibPlugin Compiler - Extended support for full blocks (e.g. InstructionStream, Decompiler, source mapping, super sends) - Added further support for the SistaV1 bytecode - Made reindexingLiteralsDo: more robust - Changed the handling of the Undeclared dictionary - Made the method generator encoder-specific - The maximum number of literals changed to 32767 - Added support to pretty-print code snippets - Fixed issues with the decompiler, the evaluate:in: messages - Renamed DecompilerConstructorForClosures into DecompilerConstructor - Moved BlockLocalTempCounter to Kernel as it is used to implement BlockClosure>>numTemps, which is used more broadly than simply the decompiler and debugger. - Moved CompiledMethod>>startpcsToBlockExtents and its support machinery to Compiler; it is used both by the Decompiler and the Debugger and so belongs in Compiler, not in Tools. - Removed references to the #braceWith: message Collections - RFC2047MimeConverter class was deprecated as the name is too formal. It is replaced by the QEncodingMimeConverter converter. - The CharacterSet hierachy was consolidated - Improved the CharacterSetComplement collection filter protocol - Added a Bit7MimeConverter - Added support for writing Strings to binary WriteStreams - Added a convenience method for selecting a MIMEConverter - Added at:ifPresent:ifAbsent: support to SequenceableCollection - Improved the implementation of WeakIdentityKeyDictionary - Extended the convenience API of Text to be closer to the one provided by String - Several improvements of general collection messages in Interval, RunArray, ArrayedCollection, Heap, and SequenceableCollection (including index-related search methods) - Extended the HTMLReadWriter (alignment, strike through, nested tags, DoIt/PrintIt, write stream emulation, ...) - Extended TextAttribute to be treated as blocks - Improved protocols used by initializedInstance - The TranscriptStream characterLimit became a preference - Improved hash messages in the String hierarchy - Adapted code for Spur (e.g. bytesPerBasicElement) - Unified storeAsLiteralByteArrayOn: and printAsLiteralFormOn: to printAsLiteralOn: - Improved performance of #isSeparator - New LinkedList implementation - Added HalfWordArray and DoubleWordArray - Improved the redirectToStdOut preference - Fixed issues and simplified the implementation of Streams Chronology - Added support to create a DateAndTime from a UNIX time value - Added a convenience protocol to wait on a duration: Duration>>#wait Environments - Added an exception to allow callers to choose an Environment - Added convenience messages to dynamically scope the activation of an environment to a block - Fixed an issue with unbinding bindings from other environments - Fixed an issue with the Undecleared bindings Etoys - Integrated the new file saving dialogs - Improved Kedama protocols and performance - Enabled drawing on Kedama worlds - Migrated method standard library message sends to new protocols - Adapted access to the current world to match the current Squeak convention - Ported required methods from the Etoys development image - Made Etoys morphs use the new UI theme mechanism - Adopted the new environments protocol - Removed obsolete classes (e.g. in Kedama) and methods (e.g. Cursor primitives) - Changed ScriptableButtons to hold on to their own action scripts - Improved the mouse handling for tiles in the viewer - Improved the handling of sounds in players - Refactored and consolidated loading and opening sexp projects - Moved parts of full project loading into the System package - Moved some code into Morphic-Extras - Removed dependencies to Rome/Pango, VideoForSqueak - Removed the stop button in the sugar navigator and added a request for confirmation to quitSqueak - Made loading Etoys project more robust with respect to the capabilities of the environment it is running in - Fixed an issue when saving a script which referred to other players by name - Various minor refactorings throughout the package Files - Mitigated and issue with a read-only file stream on the changes file under Linux - Fixed an issue caused by a missing synchronization before an external file read GetText - Removed deprecated API calls - Updated the exporter to respect dynamic translations Graphics - New message to dye forms to support mono icons for UI themes - Improvements to GIFReadWriter, in particular usage comment and #writeHeader - Point>>magnifyBy: now accepts Points - Rate of Display>>flash: trimmed to 50 ms - Added thriceLighter and thriceDarker for more visible gradients - Added a message for creating a rectangle based on the center of the rectangle - Copy and warp bits primitives handle primitive errors and try to mitigate the failure - Added support for reading rgba HTML colors - Improved BitBlt>>primDisplayString:from:to:map:xTable:kern: to use the primitive to use the primitive as often as possible - Support for ExternalForm has been removed (see Balloon) - Fixes to named crayon Colors - Fixed double transformations during the creation of fonts with emphasis - Fixed the fallback code of MatrixTransformation - Fixed a bad variable inference in MiscPrimitivePlugin - Fixed an issue in warpBitsSmoothing:sourceMap: Help - Added a new topic describing all core packages HelpSystem - Made file-based help topics and search more robust Installer - Added handling of SSL errors - Added a convenience script to install (or update) Metacello - Changed personal SqueakSource repositories to default to port 8079 because 8888 is often used for testing Kernel - Added Float>>asApproximateFractionRelativeDecimalPlaces: - Updated #xor: to work with blocks - Added #** as a convenience selector for #raisedTo: - Improved the performance of #raisedTo: in some cases - Added Fraction>>gcd: and Fraction>>lcm: - Corrected digitLength for negative SmallInteger - Updated messages to access the set of sent messages in a method to work with full blocks - Integrated the new multiple bytecode set aware scanner - Changed the Monitor class to be a subclass of Mutex - Added isCompiledCode - Improved performance of Integer>>#isPrime - Improved CompiledCode handling and accessing of literals - Added CompiledMethod>>scanForInstructionPattern: as a convenience method - Random now makes use of primitive implementations for entropy gathering if available - Improved the handling of rejectors and resolvers of long-lived promises - Changed the Promise semantic to be closer to Javascript: resolving a Promise with another Promise causes them to be chained together, resolving or rejecting a Promise that is not pending is a no-op - Introduced #isPromise - Introduced, #>>= as an alias for Promise>>#then: as a binary message allows for more convenient chaining of Promises (also added #>>) - Redefined CompiledCode>>#= in terms of hasSameLiteralsAs: which is a subclass responsibility - Added full blocks support to various messages (decompileWithTempts, pcPreviousTo:, =, ...) and refactored what is now the CompiledCode hierarchy - Added full blocks support to the debugger and the instruction printer - CompiledBlock now refers to outer method for full properties and pragma protocol - Moved BlockLocalTempCounter to Kernel - Moved CompiledMethod>>startpcsToBlockExtents and its support machinery to Compiler - Uses the new file dialog for object saving - Made saving of projects aware of different word sizes and different kinds of blocks - Removed the method UndefinedObject>>suspend - Moved messages to access global Morph objects (e.g. currentHand) to Morphic - Added support for custom compiler classes for class-side methods - Improved the implementation of Context>>arguments - Cleaned up pinning protocols - Removed methods for pre-v3 bytecode sets - Made output of method chunks more robust - Added primitive implementations to hashMultiply methods - Cleaned up and extended the send simulation (e.g. added #directedSuperSend:numArgs:) - Added a preference for setting the preferred bytecode set to use - Regularized literal printing for the Kernel literal classes - Renamed MethodContext to Context and removed BlockContext and ContextPart - Updated comments to reflect the shift to CompiledCode and Context - Made printing exceptions more robust - Optimized #bitCount in SmallInteger - Changed #sign to answer 0 for negative zero and negative NaN - Added #isMethodReference to MessageList - Added CompiledMethod>>tempNames - Made serialization via ReferenceStream more robust - Changed naming schemes for byte sizes, for example HalfWord was renamed to DoubleByte - Optimized large integer fallback code for multiplication and division with small integers - Improved handling of Uniclasses in environments - Fixed an infinite wait after a rejection in Promise>>#waitTimeoutMSecs: - Fixed defects in the #nthRoot: implementation - Fixed a simulation error when attempting to step a terminated process - Fixed a restriction in BytecodeEncoder>>computeMethodHeaderForNumArgs:numTemps:numLits:primitive: that caused Etoys to have to implement an unnecessary override - Fixed an issue with #flushNonKbdEvents - Refactored parts of StringHolder - Removed several obsolete private methods from previous CompileCode classes - Removed some obsolete primitives (e.g. millisecond delay) - Refactored Semaphore methods Multilingual - Added an UTF32TextConverter - Improved the exceptions created during conversion to Unicode by adding new exception classes and providing more details in exceptions - Added String>>utf8Encoded and ByteArray>>utf8Decoded - Added new TextConverters for a number of missing encodings - Renamed Latin1TextConverter to ISO88591TextConverter but keeps the Latin1TextConverter around - Made determining the localeID more robust - Fixed issues to make the Japanese locale work more reliably - Fixed an issue with MultiByteFileStream - Fixed issues in the ByteTextConverter classes and refactored classes across the hierarchy Monticello - Improved security/privacy in Monticello's HTTP repositories - Enabled the use of shared web client instances by default - Removed 'flush cached versions and ancestry' from the repository menu - Integrated new file save dialogs - Adapted load and store logic to handle CompiledCode classes - Restored diff naming logic - Added environments support to Monticello, including integration into Monticello tool menus - Simplified some exception handling code in the MCRepositoryInspector - Changed "history" to "revisions" in Monticello tools - Improved the displayed information in the Editions list - Made the MCSnapshotBrowser more robust with respect to nil class categories - Added the ability to "demote to the bottom" a repository of a group, so that other repositories will be checked first. - Fixed a defect in MCCacheRepository MonticelloConfigurations - The upgrade/update process now suppresses deprecation warnings and logs errors instead of stopping - Extended the Monticello Updater protocol with methods for updating up to a specific version number - Finished a refactoring of MCMcmUpdater moving more methods to the instance side - Minor improvements to the MCConfigurationBrowser Morphic - Removed many references to the global World reference (instead use #currentWorld) - Refactored BorderMorph to make use of BorderStyle just like regular morphs - Improved the reset of the mouse cursor in drag-drop operations - Improved the offset for drag-transfer morphs - Added theming support to TransferMoprh - Added cancellation as a third option for true/false choices - Cleaned up the protocol for drawing border styles - Improved the layout of ProportionalSplitter bars on window resize - Improved the reuse window feature - Moved the following classes to MorphicExtras: ScorePlayerMorph, PianoRollNoteMorph - Deprecated *Colorized: messages in favor of Form>>#dyed: - Improved the rendering of scroll pane borders and made it respect UI themes - Improved the caching of the soft drop shadows of morphs and thereby reduce memory usage - Restored PasteUpMorph>>privateOuterDisplayWorld in order to re-enable the event theater morph - Removed the MorphicProject>>restore logic - Improved text drag-and-drop support - Improved the text cursor appearance when dragging text - Integrated text drag-and-drop with the undo mechanism - Added support methods to TextEditor - Integrated the new file save dialogs - Added support to pretty-print in Workspaces - Added horizontal scroll support to the multi-column list - Improved robustness of windows requesting #windowColorToUse - Migrated code to use the new class-side ImageSegment protocol - Extended BrowseIt to also show accesses to selected instance variables - Added nClicks: support to MouseButtonEvent - Intensified the menu gradient - Added a preference to exclude the close and the control menu buttons for DialogWindows - Refactored how #explorerContents are determined by moving the default implementation to Object - Removed some unnecessary #copy implementations - Changed the accept dropping behavior of the world to open the morph created for a dropped object exactly where it was dropped - Made the TextEditor environment-aware - Fixed a regression causing an accidental scrolling when yellow-clicking the scroll bar - Fixed layouting issues with smart splitters - Fixed that paste initials can not be undone - Fixed a mouse-focus issue in dialog invocations which reset the mouse focus too early - Fixed a defect preventing two debuggers to be open at the same time - Fixed a defect in drawing filtered lists with bold list items - Fixed error recursion handling in Morphic's debugger - Fixed blinking opening parenthesis - Fixed a defect in the event handling causing the user interface to become unresponsive when a morph is hidden during #mouseDown: - Fixed a regression in the halo invocation which caused halo-invoked morphs to come to front - Fixed an issue in TextMorph>>#userString - Fixed an issue with the use of #shadowPoint: as used in halo menus MorphicExtras - Extended the menu of the PianoRollNoteMorph and improved the ScorePlayerMorph - Added a menu button and improved the layout of EnvelopeEditorMorph - Added bouncing without infection to the bouncing atoms morph - Integrated new file dialogs - Made layouting in FlapTab more robust - Reworked FancyMailComposition to be independent from the new MailComposition class - Made the hand drawing in the EventRecorder more robust - Added Kedama to the default flap, added the FrameRateMorph to the supplies flap - Fixed a drawing defect in BouncingAtomsMorph - Fixed system window layouting when flaps are activated - Fixed defects preventing opening TabbedPalette - Refactorings in BookMorph, HygrometerDialMorph, ThermometerDialMorph Nebraska - Removed direct dependencies on Etoys - Minor refactorings Network - SocketStreams now makes use of IPv6 unless old networking is requested - Added TLS to ProtocolClient subclasses such as the SMTPClient - Updated MailMessage infrastructure which a more distinct separation between MailMessage and MIMEDocument - Added a new Toolbuilder-based MailComposition tool - Made the SMTPClient aware of cc and bcc - Improvements to closing Sockets - Fixed issues with ServerDirectory PackageInfo - Changed lookup to respect environments PreferenceBrowser - Improved the preference wizard for first time setup - Added a #Class type preference view. Protocols - Made "show home category" of Protocol browsers behave similarly with Hierarchy and PackagePane browsers by letting it toggle both on and off instead of only on. - Added missing nesting to mainCategoryListMenu - Fixed an issue with uni-classes that are not in the environment Shout - Added support for custom Shout parser classes for class-side methods SqueakMap - Creating a new release now uses the previous release script as default - A new informative template was added for new releases SqueakSSL - Added a message to check whether certificates can be verified on the current platform Sound - Enabled drag-and-drop for wave files from the host system - Added SoundPlugin primitives that deal with multiple devices etc. ST80 - Fixed a defect in MVC related to deprecation warnings SUnit - Added a way to run a failed test in a MessageTally - Made TestRunner aware of environments - Fixed the "Browse" action in the TestRunner - Fixed minor defects System - Improved the emergency evaluator dispatch logic to first try to find another project which would allow for opening a debugger before resorting to the traditional emergency debugger - Moved methods from NativeImageSegment to ImageSegment - Restored ImageSegment reading and writing facilities - Made preliminary loading of 64-bit image segments more robust - Allowed for automatic dispatch between image segment types - Added menu item for installing Metacello to the "Do"-menu - Refactored SoundService - Added #explore:label: inspired by #inspect:label: - Added a gray-based dark UI theme - Small updates to the provided UserInterfaceThemes - Improved robustness of #browseAllCallsOn:fromMethodReferences:labelled: - Deprecated #inspectorClassOf: in favor of #inspectorClass - Renamed PrimitiveOSError to PrimitiveError - Provided UI theme specs for drag-transfer-morphs - Changed the lookup logic of properties of interface themes - Allowed for automated setting of pragma preferences based on a provided getter - Updated the space analysis logic for Spur image segments - Added an "open windows at pointer" preference - Added support for the serialization of the new CompiledCode objects - Adapted the lowSpaceThreshold for 64-bits - Updated and fixed a defect in SmalltalkImage>>#specialSelectors - Extended the primitiveErrorTable with new primitive error codes used in BitBlt primitives - Made the SystemNavigation environment-aware - Improved the environment-awareness of references - Added methods to quickly increase/decrease font sizes - Made the application of patches in Smalltalk>>#run: more robust - Replaced VM-level ImageSegment loading with a Smalltalk implementation for old projects - Improved browser robustness when classes are removed - Added a way to send error logs from the debugger on a server declared in a preference - Fixed the project loading dialog for Etoys - Fixed defects in VM statistics - Fixed a defect in setting the default text style - Fixed the field menu of the SetInspector - Fixed defects in AutoStart deinstall SystemReporter - Improved the font in the report - Improved the VM parameters tab (new parameters, spur parameters) Tools - Added some more canonicalArgumentName implementations and removed SequencableCollection>>canonicalArgumentName as it does not currently work for creating stub methods - Added a debugger menu entry to copy a bug report to the clipboard - Deprecated some more code from FileList2 - Changed #inspect/#explore/#browser calls to all return the domain object - Added a dyeable checkmark icon - Improved interactions for MessageSets when no method is selected and fixed an issue resulting in new MethodReferences being installed - Integrated new file dialogs - Added keyboard handling to new file dialogs - Changed inspector to show a Character's code in the inspector label - Adapted the debugger, inspector, and PointerFinder to work with the new CompiledCode and Context classes (and thereby also with full blocks) - Improved the browser spawning logic - Made the evaluation of code snippets in the debugger more robust when no context is selected - Improved the selector discovery mechanism to include symbols in pragmas - Unified the construction of Browsers - Added the "copy value" action to object explorers which adds the currently selected value to the clipboard as text - Added drag-and-drop support to the object explorer - Included non-temp stack contents in the ContextInspector - Added graceful support for stepping through the termination of a process - Changed method category creation so that the newly created category becomes the currently selected one - Added support for environments all through the tool set (senders/implementers, hierarchy browser, class browser, workspace) - Enabled un-filtering the message list in the class browser even when no method is selected - Made the printing in MessageTrace more robust - Improved the list of methods of the recent messages tool - Fixed a defect in the initialization of MessageSet - Fixed an issue in PointerFinder - Fixed browse local senders for the class side in StringHolder - Fixed a regression defect in the labels for senders/implementors browsers - Fixed a race condition in debugger which caused emergency evaluators to spawn too early ToolBuilder-Kernel - Added a callback to pluggable tree specifications to retrieve the currently selected path in the tree - Added double click callbacks to pluggable tree specifications - Added various convenience selectors - Added new convenience selectors for saving files - Added a multi-column list - Made the new file dialogs available through the UIManager - Added a message to indicate some sequential progress - Integrated the new file saving mechanism into image saving and package file out ToolBuilder-MVC - Added compatibility methods for new UIManager protocol for choosing files - Fixed drawing defects ToolBuilder-Morphic - Added the FileAbstractSelectionDialog hierarchy for choosing directories and files (see DirectoryChooserDialog, FileChooserDialog, FileSaverDialog) - Allowed for canceling the confirmation step when adding a new item via ListChooser - Added a callback to pluggable tress to retrieve the currently selected path in the tree - Added double click capabilities to PluggableTreeMorph - Improved the layout of ListChoosers - Clean-up in Shout styling callback in PluggableTextMorphPlus - Fixed an issue with the returned selection from an empty List - Renamed #morphicOpenWith: to #openAsTool as the methods are all within the ToolBuilder-Morphic category - Made PluggableTreeMorph respect the Theme color - Enabled keyboard navigation in list chooser - Made pluggable trees work with nodes with dictionary-like children Traits - Added support for environments - Added #collectAsTraitComposition: for collect: resulting in a TraitComposition - Fixed an infinite loop when showing the hierarchy for Traits TrueType - Made the loading of fonts and handling of fallback fonts more robust WebClient - Added support for token-based OAuth2 authentication (note: server-part only provides basic support) - Made decoding more extensive and robust - Accept text/html by default only when the user has not specified their own mimeType - Removed some retry logic which masked legitimate SSL errors - Improved the decoding of chunked WebMessages - Fixed the handling of IPv6 literals in URLs XML - Added LazyAttributeListSAXDriver which always passes a Dictionary as the attributeList. The previous SAXDriver is now a subclass of the lazy variant - Introduced SAXHandler class >> #driverClass which returns the SAXDriver to be used - Various optimizations to XMLTokenizer and SAXDriver skipping the initialization of empty Dictionaries for xml node attributes - Deprecated the misspelled #applyLanguageInfomation: Major Deprecations - SmallLand was unloaded because we have now UserInterfaceTheme instead of ColorTheme. - ContextPart, BlockContext, and MethodContext have been deprecated in favor of Context - RFC2047MimeConverter was deprecated as the name is too formal. It is replaced by the QEncodingMimeConverter converter. - Deprecated #setAuthorInitials:. Use #authorInitials:. - Deprecated #exploreAndYourself - Deprecated Object>>#clone. Use #shallowCopy instead Known Issues - List filtering in multi-selection lists may break sometimes, i.e. in the TestRunner - Collecting colors via Form >> #collectColors: might lead to unexpected results because the Color black will be treated as transparent color here. - SqueakSSL has no SAN support for all platforms. This can be the reason why https://www.github.com cannot be accessed but https://github.com works. - There can be issues when using interface languages other than English due to automatic translation. This will be addressed in future releases. - You cannot apply a user interface theme from within MVC. - Some core packages depend on Etoys packages in this release. These depenencides will be removed in future releses - The UTF text converters might accept invalid character sequences - On some virtual machines a FloatTest can fail Compatibility Notes - The package 311Deprecated was unloaded - The class structure for CompiledCode and Contexts has changed substantially ! ]style[(32 277 23 137 13 27 7 5 6 49 8 271 21 123 47 22 20 142 19 152 13 28 13 479 61 2 7 160 11 79 8 904 11 94 22 659 14 643 10 135 12 52 11 208 5 1219 5 167 7 88 8 947 4 51 10 267 6 874 7 2871 12 620 10 836 24 337 7 664 12 2160 13 28 18 18 16 266 15 174 18 179 8 62 7 411 11 43 17 95 9 279 5 73 9 131 9 90 5 130 4 58 5 163 6 227 12 1821 14 103 5 2114 18 484 15 102 19 13 27 779 6 179 8 73 9 387 3 9 26 385 18 442 12 76 10 25 23 95 4 4 9 8 3 55 22 24 18 51 9 147 3 214 9 11 19 68 12 5 8 27)b,,Rcode://ObjectsTool newStandAlone openInWorld;,,Rcode://CompiledCode;,,Rcode://CompiledMethod;,,Rcode://CompiledBlock;,,Rcode://Context;,,Rcode://FileAbstractSelectionDialog;,,Rcode://UIManager;,,Rcode://UIManager>>#chooseFileMatching:;,,Rcode://Environment;,,Rcode://TextConverter;,,Rcode://MimeConverter;,,b,,i,,i,,i,,i,,Rcode://QEncodingMimeConverter;,,Rcode://HTMLReadWriter;,,i,,i,,Rcode://Environment;,,i,,i,,i,,i,,i,,i,,i,,Rcode://Promise;,,i,,i,,i,,i,,Rcode://Form>>#dyed:;,,i,,Rcode://PianoRollNoteMorph;,,Rcode://ScorePlayerMorph;,,Rcode://MailComposition;,,Rcode://BouncingAtomsMorph;,,i,,i,,i,,i,,i,,i,,i,,i,,i,,i,,i,,i,,Rcode://ImageSegment;,,i,,i,,i,,i,,i,,LFileAbstractSelectionDialog Hierarchy;,,i,,i,,i,,i,,Rcode://LazyAttributeListSAXDriver;,,b,,b,,Rcode://TestRunner open;,,Rcode://Form >> #collectColors:;,,Rcode://Color class >> #colorFromPixelValue:depth:;,,Rcode://SqueakSSL;,,Rhttps://en.wikipedia.org/wiki/Subject_Alternative_Name;,,Rcode://(WebClient httpGet: 'https://www.github.com') explore;,,Rcode://(WebClient httpGet: 'https://github.com') explore;,,Rcode://Project current chooseNaturalLanguage. 42;,,Rcode://MVCProject new enter;,,Rcode://FloatTest>>#testTimesTwoPowerGradualUnderflow;,,b,,Rcode://CompiledCode;,,Rcode://Context;,!