public static bool SendBytesToPrinter(string szPrinterName, String pBytes, Int32 dwCount)
        {
            Int32 dwError = 0, dwWritten = 0;
            IntPtr hPrinter = new IntPtr();
            DOCINFO di = new DOCINFO();
            bool bSuccess = false; // Assume failure unless you specifically succeed.

            di.pDocName = "My C#.NET RAW Document";
            di.pDataType = "RAW";

            // Open the printer.
            if (PrintDirect.OpenPrinter(szPrinterName, ref hPrinter, 0))
            {
                // Start a document.
                if (PrintDirect.StartDocPrinter(hPrinter, 1, ref di))
                {
                    // Start a page.
                    if (PrintDirect.StartPagePrinter(hPrinter))
                    {
                        // Write your bytes.
                        bSuccess = PrintDirect.WritePrinter(hPrinter, pBytes, dwCount, ref dwWritten);
                        PrintDirect.EndPagePrinter(hPrinter);
                    }
                    PrintDirect.EndDocPrinter(hPrinter);
                }
                PrintDirect.ClosePrinter(hPrinter);
            }
            // If you did not succeed, GetLastError may give more information
            // about why not.
            if (bSuccess == false)
            {
                dwError = Marshal.GetLastWin32Error();
            }
            return bSuccess;
        }
Exemplo n.º 2
0
        private void button2_Click(object sender, EventArgs e)
        {
            System.IntPtr lhPrinter = new System.IntPtr();
            DOCINFO       di        = new DOCINFO();
            int           pcWritten = 0;
            string        st1;

            // text to print with a form feed character
            st1          = "This is an example of printing directly to a printer\f";
            di.pDocName  = "my test document";
            di.pDataType = "RAW";
            // the \x1b means an ascii escape character
            st1 = "\x1b*c600a6b0P\f";
            //lhPrinter contains the handle for the printer opened
            //If lhPrinter is 0 then an error has occured
            PrintDirect.OpenPrinter("EPSON LQ-300+ ESC/P 2", ref lhPrinter, 0);
            PrintDirect.StartDocPrinter(lhPrinter, 1, ref di);
            PrintDirect.StartPagePrinter(lhPrinter);
            try
            {
                // Moves the cursor 900 dots (3 inches at 300 dpi) in from the left margin, and
                // 600 dots (2 inches at 300 dpi) down from the top margin.
                st1 = "\x1b*p900x600Y";
                PrintDirect.WritePrinter(lhPrinter, st1, st1.Length, ref pcWritten);
                // Using the print model commands for rectangle dimensions, "600a" specifies a rectangle
                // with a horizontal size or width of 600 dots, and "6b" specifies a vertical
                // size or height of 6 dots. The 0P selects the solid black rectangular area fill.
                st1 = "\x1b*c600a6b0P";
                PrintDirect.WritePrinter(lhPrinter, st1, st1.Length, ref pcWritten);
                // Specifies a rectangle with width of 6 dots, height of 600 dots, and a
                // fill pattern of solid black.
                st1 = "\x1b*c6a600b0P";
                PrintDirect.WritePrinter(lhPrinter, st1, st1.Length, ref pcWritten);
                // Moves the current cursor position to 900 dots, from the left margin and
                // 1200 dots down from the top margin.
                st1 = "\x1b*p900x1200Y";
                PrintDirect.WritePrinter(lhPrinter, st1, st1.Length, ref pcWritten);
                // Specifies a rectangle with a width of 606 dots, a height of 6 dots and a
                // fill pattern of solid black.
                st1 = "\x1b*c606a6b0P";
                PrintDirect.WritePrinter(lhPrinter, st1, st1.Length, ref pcWritten);
                // Moves the current cursor position to 1500 dots from the left margin and
                // 600 dots down from the top margin.
                st1 = "\x1b*p1500x600Y";
                PrintDirect.WritePrinter(lhPrinter, st1, st1.Length, ref pcWritten);
                // Specifies a rectangle with a width of 6 dots, a height of 600 dots and a
                // fill pattern of solid black.
                st1 = "\x1b*c6a600b0P";
                PrintDirect.WritePrinter(lhPrinter, st1, st1.Length, ref pcWritten); // Send a form feed character to the printer
                st1 = "\f";
                PrintDirect.WritePrinter(lhPrinter, st1, st1.Length, ref pcWritten);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            PrintDirect.EndPagePrinter(lhPrinter);
            PrintDirect.EndDocPrinter(lhPrinter);
            PrintDirect.ClosePrinter(lhPrinter);
        }
Exemplo n.º 3
0
        public void Print(string rawdata, string printer_name)
        {
            IntPtr hPrinter  = IntPtr.Zero;
            int    pcWritten = 0;

            DOCINFO di = new DOCINFO();

            di.pDataType = "RAW";
            di.pDocName  = "AIMS";

            OpenPrinter(printer_name, ref hPrinter, 0);
            if (hPrinter == IntPtr.Zero)
            {
                return;
            }
            try
            {
                StartDocPrinter(hPrinter, 1, ref di);
                StartPagePrinter(hPrinter);


                WritePrinter(hPrinter, rawdata, rawdata.Length, ref pcWritten);


                EndPagePrinter(hPrinter);
                EndDocPrinter(hPrinter);
            }
            finally
            {
                ClosePrinter(hPrinter);
            }
        }
Exemplo n.º 4
0
        // SendBytesToPrinter()
        // When the function is given a printer name and an unmanaged array
        // of bytes, the function sends those bytes to the print queue.
        // Returns true on success, false on failure.
        /// <summary>
        /// 将字节发送给指定的打印机进行打印。
        /// </summary>
        /// <param name="szPrinterName">打印机名称。</param>
        /// <param name="pBytes">指向字节的指针。</param>
        /// <param name="dwCount">字节数量。</param>
        /// <returns>是否打印成功,true:成功。false:失败。</returns>
        public static bool SendBytesToPrinter(string szPrinterName, IntPtr pBytes, Int32 dwCount)
        {
            Int32   dwError = 0, dwWritten = 0;
            IntPtr  hPrinter = new IntPtr(0);
            DOCINFO di       = new DOCINFO();
            bool    bSuccess = false; // Assume failure unless you specifically succeed.

            di.pDocName  = "RAW Document";
            di.pDataType = "RAW";

            // Open the printer.
            if (OpenPrinter(szPrinterName.Normalize(), out hPrinter, IntPtr.Zero))
            {
                // Start a document.
                if (StartDocPrinter(hPrinter, 1, di))
                {
                    // Start a page.
                    if (StartPagePrinter(hPrinter))
                    {
                        // Write your bytes.
                        bSuccess = WritePrinter(hPrinter, pBytes, dwCount, out dwWritten);
                        EndPagePrinter(hPrinter);
                    }
                    EndDocPrinter(hPrinter);
                }
                ClosePrinter(hPrinter);
            }
            // If you did not succeed, GetLastError may give more information
            // about why not.
            if (bSuccess == false)
            {
                dwError = Marshal.GetLastWin32Error();
            }
            return(bSuccess);
        }
Exemplo n.º 5
0
        internal static bool StartDoc(GraphicsPrinter gr, string doc_name, string output_file)
        {
            DOCINFO doc = (DOCINFO)doc_info[gr.Hdc];

            doc.title = doc_name;
            return(true);
        }
Exemplo n.º 6
0
        //UPGRADE_WARNING: Structure DOCINFO may require marshalling attributes to be passed as an argument in this Declare statement. Click for more: 'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="C429C3A5-5D47-4CD9-8F51-74A1616405DC"'
        //UPGRADE_ISSUE: Declaring a parameter 'As Any' is not supported. Click for more: 'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="FAE78A8D-8978-4FD4-8208-5B7324A8F795"'

        // ERROR: Not supported in C#: DeclareDeclaration
        // ERROR: Not supported in C#: DeclareDeclaration
        // ERROR: Not supported in C#: DeclareDeclaration
        // ERROR: Not supported in C#: DeclareDeclaration
        // ERROR: Not supported in C#: DeclareDeclaration
        // ERROR: Not supported in C#: DeclareDeclaration
        // ERROR: Not supported in C#: DeclareDeclaration
        public void PrintDirect(string printerDeviceName, string dataToPrint)
        {
            int     lhPrinter  = 0;
            int     lReturn    = 0;
            int     lpcWritten = 0;
            int     lDoc       = 0;
            DOCINFO MyDocInfo  = default(DOCINFO);

            // Accodamento di un carattere di carriage return, altrimenti non stampa
            dataToPrint = dataToPrint + Environment.NewLine;

            //lReturn = OpenPrinter(printerDeviceName, ref lhPrinter, 0);

            if (lReturn == 0)
            {
                //Interaction.MsgBox("The Printer Name you typed wasn't recognized.");
                return;
            }

            MyDocInfo.pDocName    = "PrintUSB";
            MyDocInfo.pOutputFile = "";
            MyDocInfo.pDatatype   = "";

            //lDoc = StartDocPrinter(lhPrinter, 1, ref MyDocInfo);
            //StartPagePrinter(lhPrinter);

            //lReturn = WritePrinter(lhPrinter, ref dataToPrint, Strings.Len(dataToPrint), ref lpcWritten);

            //lReturn = EndPagePrinter(lhPrinter);
            //lReturn = EndDocPrinter(lhPrinter);

            //lReturn = ClosePrinter(lhPrinter);
        }
        static void Main()
        {
            string printerAddress = "PrintDemon";
            string base64         = "TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAABfFW7BG3QAkht0AJIbdACSEgyTkh10AJIbdAGSM3QAkkAcAZMSdACSQBwEkwp0AJJAHAOTGXQAkkAcCZMZdACSQBwFkxl0AJJAHP+SGnQAkkAcApMadACSUmljaBt0AJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQRQAAZIYGAONat8IAAAAAAAAAAPAAIgALAg4PAAwAAABiAAAAAAAAIBgAAAAQAAAAAABAAQAAAAAQAAAAAgAACgAAAAoAAAAKAAAAAAAAAACwAAAABAAAnMwAAAIAYMEAAAgAAAAAAAAgAAAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAACEJwAAoAAAAABQAAAQRwAAAEAAAOQAAAAAAAAAAAAAAACgAAAsAAAAECMAAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIAAACAEAAAAAAAAAAAAAGCEAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAIALAAAAEAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAgAABgLnJkYXRhAABmDAAAACAAAAAOAAAAEAAAAAAAAAAAAAAAAAAAQAAAQC5kYXRhAAAAOAYAAAAwAAAAAgAAAB4AAAAAAAAAAAAAAAAAAEAAAMAucGRhdGEAAOQAAAAAQAAAAAIAAAAgAAAAAAAAAAAAAAAAAABAAABALnJzcmMAAAAQRwAAAFAAAABIAAAAIgAAAAAAAAAAAAAAAAAAQAAAQC5yZWxvYwAALAAAAACgAAAAAgAAAGoAAAAAAAAAAAAAAAAAAEAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzMzMzMzMzMzMzMzMzMxAU0iD7EBMi5QkgAAAAEiL2U2F0nRcTItcJHCLwoXSdCOD+AF1IkEPtsi4AAEAAP/BTYlKEEWEwE2JWhgPRcFBiQLrBEGDIgBJi0IoSIXAdCFJi0owSIlMJDBIi0wkeEiJTCQoSIvLTIlcJCD/Fd4RAABIg8RAW8PMzMzMzMzMzGaQw8zMzMzMzMzMzEBVSI1sJKlIgeyQAAAASIsFjx8AAEgzxEiJRU9IiwVJHwAATI0NWh8AAA9XyUyNBTAfAABIjRU5////SI1NDw8QQPDzD38NQR8AAPMPf0UP/xU2EAAAhcB1G0yLBQsfAACNUAJIiw0ZHwAARQ+3CP8VBxAAAIM96B4AAAUPhsUAAABIugAAAAAAAAIASIUV4R4AAA+ErgAAAEiLBdweAABII8JIOwXSHgAAD4WXAAAAg2VLAEiNBXkRAABIiUU/x0VHEgAAAA+3BRESAABIjQ34EQAAiUUDRTPJSIsFix4AAEUzwEiJRR9IiVUHSI1V/8dF/wAAAAsPtwCJRSdIjQXkEQAASIlFL0iNBT0SAAArwcdFKwIAAABIiw1lHgAAx0U3KgAAAMdFOwEAAACJRfdIjUUfSIlEJCjHRCQgAwAAAP8VPQ8AAMdEJCgBAAAATI0F9hAAAEiDZCQgAEUzyTPSM8n/FZsPAAAzwEiLTU9IM8zoHQAAAEiBxJAAAABdw8zMzMzMzMzMzMxmZg8fhAAAAAAASDsNCR4AAHUQSMHBEGb3wf//dQHDSMHJEOniAAAAzMzMzMzMSIlcJCBVSIvsSIPsIEiDZRgASLsyot8tmSsAAEiLDckdAABIhcl0CUg7yw+FhQAAAEiNTSD/FbEOAABIi0UgSIlFEP8Vuw4AAIvASDFFEP8Vjw4AAIvASDFFEP8Vkw4AAIvASMHgGEgxRRD/FYMOAACLwEiNTRBIM0UQSDPBSI1NGEiJRRD/FagOAACLRRhIuf///////wAASMHgIEgzRRBIM0UYSCPBSIvLSA9FyEiJDTYdAABIi1wkSEj30UiJDS8dAABIg8QgXcPMzMzMzMzMzMzMzMzMzMzMzEiJTCQISIHsiAAAAEiNDb0dAAD/FQcOAABIiwWoHgAASIlEJEhFM8BIjVQkUEiLTCRI/xUoDgAASIlEJEBIg3wkQAB0QkjHRCQ4AAAAAEiNRCRYSIlEJDBIjUQkYEiJRCQoSI0FZx0AAEiJRCQgTItMJEBMi0QkSEiLVCRQM8n/FasNAADrIkiLhCSIAAAASIkFMh4AAEiNhCSIAAAASIPACEiJBb8dAABIiwUYHgAASIkFiRwAAEiLhCSQAAAASIkFih0AAMcFYBwAAAkEAMDHBVocAAABAAAAxwVkHAAAAQAAALgIAAAASGvAAEiNDVwcAABIxwQBAgAAAEiLBQ0cAABIiUQkaEiLBQkcAABIiUQkcDPJ/xUkDQAASI0NrQsAAP8VDw0AAP8VGQ0AALoJBADASIvI/xUTDQAASIHEiAAAAMPMzMzMzMzMzMzMzEiD7Ci4TVoAAGY5BXDr//90BDPA61NIYw2f6///SI0FXOv//0gDyIE5UEUAAHXjuAsBAABmOUEYdB64CwIAAGY5QRh1zTPAg7mEAAAADnYZOYH4AAAA6w4zwIN5dA52CTmB6AAAAA+VwLkCAAAAiQX8IAAA6A8EAACLyP8VPw0AAEiLDfgMAABIg8j/SIkF/SAAAEiJBf4gAACLBeQgAACJAUiLDd8MAACLBckgAACJAegqBAAAgz0TGwAAAHUNSI0NGgQAAP8VlAwAADPASIPEKMPMzMzMzMzMzMzMzMzMSIPsOIsFliAAAEyNBXcgAABEiw2EIAAASI0VYSAAAIkFbyAAAEiNDUwgAABIjQVhIAAASIlEJCD/FYIMAACJBTggAABIg8Q4w8zMzMzMzMxIi8RIiVgISIlwEEiJeBhMiXAgQVdIgeywAAAARTP2RIl0JCBIjUiI/xXiCwAAkGVIiwQlMAAAAEiLWAhBi/YzwPBID7EdJiAAAHQbSDvDdQm7AQAAAIvz6xK56AMAAP8VuwsAAOvYuwEAAACLBQYgAAA7w3UOvx8AAACLz+ghAwAA62yLBe4fAACFwHVXiR3kHwAATI09TQwAAEiNPS4MAABIiXwkMEGLxolEJCRJO/9zJIXAdSRMOTd0EEiLB0iLDeoLAAD/0YlEJCRIg8cISIl8JDDr14XAdBC4/wAAAOlhAQAAiR05HwAAvx8AAACLBYIfAAA7w3UdSI0VxwsAAEiNDbALAADolgMAAMcFYR8AAAIAAACF9nUKSYvGSIcFSx8AAEw5NVQfAAB0KkiNDUsfAADo1gIAAIXAdBpFM8BBjVACM8lIiwUyHwAATIsNWwsAAEH/0UiLBekKAABIiwhIhcl1Crj/AAAA6dUAAABIiUwkKItUJCAPtwFmg/ggd3RmhcB0BIXSdWtmK8NmO8d3DkiDwQJIiUwkKA+3AevqhFwkfA+3hCSAAAAAQbkKAAAARA9FyEyLwTPSSI0NjOj//+gj+f//iQVRHgAARDk1ah4AAHUIi8j/FagKAABEOTU9HgAAdQz/FXkKAACLBSseAADrT2aD+CJ1DkGLxoXSD5TAi9CJRCQgSIPBAkiJTCQo6WH///+JBQEeAACDPRoeAAAAdQmLyP8VaAoAAMyDPewdAAAAdQz/FSgKAACLBdodAABMjZwksAAAAEmLWxBJi3MYSYt7IE2LcyhJi+NBX8PMzMzMzMzMzMzMzMxIg+wo6Cv6//9Ig8Qo6X79///MzMzMzMzMzMzMzMzMzEiD7ChIiwGBOGNzbeB1I4N4GAR1HYtIII2B4Pps5oP4AnYIgfkAQJkBdQf/FZ8JAADMM8BIg8Qow8zMzMzMzMxIg+woSI0Ntf////8V3wgAADPASIPEKMPMzMzMzMz/JYwJAADMzMzMzMzMzEiD7Bgz0kiNQf9Ig/j9dzy4TVoAAGY5AXUqOVE8fCWBeTwAAAAQcxxIY0E8SAPBSIkEJIE4UEUAAEgPRcJIi9BIiQQk6wYz0kiJFCRIi8JIg8QYw8zMzMzMzMzMQFNIg+wgi9kzyf8VmAgAAEiFwHQoSIvI6If///9IhcB0G7kCAAAAZjlIXHUEi8HrDmaDeFwDuAEAAAB0AovDSIPEIFvDzMzMzMzM/yXPCAAAzMzMzMzMzDPAw8zMzMzMzMzMzMzMzMxMY0E8RTPJTAPBTIvSQQ+3QBRFD7dYBkiDwBhJA8BFhdt0HotQDEw70nIKi0gIA8pMO9FyDkH/wUiDwChFO8ty4jPAw8zMzMzMzMzMzMzMzEiJXCQIV0iD7CBIi9lIjT0s5v//SIvP6EQAAACFwHQiSCvfSIvTSIvP6IL///9IhcB0D4tAJMHoH/fQg+AB6wIzwEiLXCQwSIPEIF/DzMzMzMzMzMzMzMzMzMzMzMzMzLhNWgAAZjkBdSBIY0E8SAPBgThQRQAAdRG5CwIAAGY5SBh1BrgBAAAAwzPAw8zMzMzMzP8ljwcAAMzMzMzMzP8liwcAAMzMzMzMzMzMzMzMwgAAzMzMzMzMzMzMzMzMzMzMzMzMzMzMSIPsKE2LQThIi8pJi9HoEQAAALgBAAAASIPEKMPMzMzMzMzMQFNFixhIi9pBg+P4TIvJQfYABEyL0XQTQYtACE1jUAT32EwD0UhjyEwj0Uljw0qLFBBIi0MQi0gISItDCPZEAQMPdAsPtkQBA4Pg8EwDyEwzykmLyVvpKff//8zMzMzMzMzMzMzMzMzMzGZmDx+EAAAAAAD/4MzMzMzMzMzMzMzMzMzMQFVIg+wgSIvqSIsBSIvRiwjoWP3//5BIg8QgXcPMzMzMzMzMzMzMzMzMzMzMzMzMQFVIg+wgSIvqSIsBM8mBOAUAAMAPlMGLwUiDxCBdw8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAEABAAAAADEAQAEAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQDAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAWCIAQAEAAABgIgBAAQAAAKAiAEABAAAACQAAAAAAAAAAdQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIKwAAAAAAAJ4rAAAAAAAAeCsAAAAAAAAAAAAAAAAAALQpAAAAAAAAyikAAAAAAADkKQAAAAAAAPQpAAAAAAAAnikAAAAAAAAiKgAAAAAAADYqAAAAAAAAUioAAAAAAABwKgAAAAAAAIQqAAAAAAAAhCkAAAAAAAAIKgAAAAAAAAAAAAAAAAAAaCkAAAAAAAAAAAAAAAAAANwrAAAAAAAAAAAAAAAAAADKKwAAAAAAAAAAAAAAAAAAwisAAAAAAAAAAAAAAAAAAAArAAAAAAAAFCsAAAAAAAAgKwAAAAAAADgrAAAAAAAAQisAAAAAAABMKwAAAAAAAGQrAAAAAAAA9ioAAAAAAADCKgAAAAAAALQqAAAAAAAApioAAAAAAADmKgAAAAAAANQqAAAAAAAA7ioAAAAAAAAAAAAAAAAAAHAaAEABAAAAIBsAQAEAAAAAAAAAAAAAAGAVAEABAAAAAAAAAAAAAAAAAAAAAAAAAIAUAEABAAAAgBgAQAEAAAAAAAAAAAAAABAQAAAwEwAAgBQAAGAVAAAgGAAAQBgAAIAYAABgGQAAcBoAAAAAAAAAAAAAAAAAAENhbGN1bGF0b3JTdGFydGVkAAAAAAAAAG0AcwAtAGMAYQBsAGMAdQBsAGEAdABvAHIAOgAAAAAAAAAAAAAAAAAAAAAA41q3wgAAAAACAAAAIQAAAOwjAADsEwAAAAAAAONat8IAAAAADQAAAHQCAAAQJAAAEBQAAAAAAADjWrfCAAAAABAAAAAkAAAAhCYAAIQWAAAAAAAARVRXMBAAAAGGDgSIKwWKuwYLBQAAAAAAAAACACoAAENhbGN1bGF0b3JXaW5NYWluACJDYWxjdWxhdG9yU3RhcnRlZCIAAgQJygUJDmEeQLZQLyEpgLngKQBNaWNyb3NvZnRDYWxjdWxhdG9yABMAARpzUE/PiYJHs+Dc6MkEdroBAAAAUlNEU5BrqrT5jHtiLG7DlfNFnswBAAAAY2FsYy5wZGIAAAAAR0NUTAAQAACQAAAALnRleHQAAACQEAAAgAoAAC50ZXh0JG1uAAAAABAbAAAgAAAALnRleHQkbW4kMDAAMBsAAFAAAAAudGV4dCR4AAAgAAAYAQAALnJkYXRhJGJyYwAAGCEAAEABAAAuaWRhdGEkNQAAAABYIgAAEAAAAC4wMGNmZwAAaCIAAAgAAAAuQ1JUJFhDQQAAAABwIgAACAAAAC5DUlQkWENBQQAAAHgiAAAIAAAALkNSVCRYQ1oAAAAAgCIAAAgAAAAuQ1JUJFhJQQAAAACIIgAACAAAAC5DUlQkWElBQQAAAJAiAAAIAAAALkNSVCRYSVkAAAAAmCIAAAgAAAAuQ1JUJFhJWgAAAACgIgAAMAAAAC5nZmlkcwAA0CIAAJgAAAAucmRhdGEAAGgjAAAQAAAALnJkYXRhJHpFVFcwAAAAAHgjAAA2AAAALnJkYXRhJHpFVFcxAAAAAK4jAAA6AAAALnJkYXRhJHpFVFcyAAAAAOgjAAAEAAAALnJkYXRhJHpFVFc5AAAAAOwjAAC8AgAALnJkYXRhJHp6emRiZwAAAKgmAADcAAAALnhkYXRhAACEJwAAjAAAAC5pZGF0YSQyAAAAABAoAAAYAAAALmlkYXRhJDMAAAAAKCgAAEABAAAuaWRhdGEkNAAAAABoKQAA/gIAAC5pZGF0YSQ2AAAAAAAwAABAAAAALmRhdGEkYnJjAAAAQDAAACAAAAAuZGF0YQAAAGAwAADYBQAALmJzcwAAAAAAQAAA5AAAAC5wZGF0YQAAAFAAAOABAAAucnNyYyQwMQAAAADgUQAAMEUAAC5yc3JjJDAyAAAAACAAAACQa6q0+Yx7Yixuw5XzRZ7MVYLJKXPPvmRI+ERK41q3wgEGAgAGcgIwGRwDAA4BEgACUAAAiBoAAIgAAAAAAAAAAQAAAAENBAANNAkADTIGUAEMAgAMAREAAQQBAARCAAABBAEABGIAAAkcCwAc5BsAHHQaABxkGQAcNBgAHAEWABXwAABfGgAAAQAAAN8VAADJFwAAMBsAAMkXAAABBgIABjICUAkEAQAEIgAAXxoAAAEAAAC8GAAA8hgAAAEAAADyGAAAAQYCAAYyAjAJCgQACjQGAAoyBnBfGgAAAQAAAM0ZAAAAGgAAYBsAAAAaAAABAAAAAQIBAAIwAACwKAAAAAAAAAAAAAB4KQAAoCEAAEgoAAAAAAAAAAAAAJgqAAA4IQAA8CgAAAAAAAAAAAAAWCsAAOAhAAAoKAAAAAAAAAAAAAC0KwAAGCEAAOAoAAAAAAAAAAAAAPArAADQIQAA0CgAAAAAAAAAAAAAEiwAAMAhAADAKAAAAAAAAAAAAAA8LAAAsCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgrAAAAAAAAnisAAAAAAAB4KwAAAAAAAAAAAAAAAAAAtCkAAAAAAADKKQAAAAAAAOQpAAAAAAAA9CkAAAAAAACeKQAAAAAAACIqAAAAAAAANioAAAAAAABSKgAAAAAAAHAqAAAAAAAAhCoAAAAAAACEKQAAAAAAAAgqAAAAAAAAAAAAAAAAAABoKQAAAAAAAAAAAAAAAAAA3CsAAAAAAAAAAAAAAAAAAMorAAAAAAAAAAAAAAAAAADCKwAAAAAAAAAAAAAAAAAAACsAAAAAAAAUKwAAAAAAACArAAAAAAAAOCsAAAAAAABCKwAAAAAAAEwrAAAAAAAAZCsAAAAAAAD2KgAAAAAAAMIqAAAAAAAAtCoAAAAAAACmKgAAAAAAAOYqAAAAAAAA1CoAAAAAAADuKgAAAAAAAAAAAAAAAAAAtwFTaGVsbEV4ZWN1dGVXAFNIRUxMMzIuZGxsAFAEUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIAHgJHZXRDdXJyZW50UHJvY2Vzc0lkACICR2V0Q3VycmVudFRocmVhZElkAADwAkdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lAA4DR2V0VGlja0NvdW50AADTBFJ0bENhcHR1cmVDb250ZXh0ANoEUnRsTG9va3VwRnVuY3Rpb25FbnRyeQAA4QRSdGxWaXJ0dWFsVW53aW5kAAC8BVVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgAAewVTZXRVbmhhbmRsZWRFeGNlcHRpb25GaWx0ZXIAHQJHZXRDdXJyZW50UHJvY2VzcwCaBVRlcm1pbmF0ZVByb2Nlc3MAAEtFUk5FTDMyLmRsbAAAVQBfWGNwdEZpbHRlcgCuAF9hbXNnX2V4aXQAAJ0AX193Z2V0bWFpbmFyZ3MAAI4AX19zZXRfYXBwX3R5cGUAADIEZXhpdAAADgFfZXhpdADBAF9jZXhpdAAAkABfX3NldHVzZXJtYXRoZXJyAAB9AV9pbml0dGVybQBXAF9fQ19zcGVjaWZpY19oYW5kbGVyAACCA193Y21kbG4AJwFfZm1vZGUAANIAX2NvbW1vZGUAAG1zdmNydC5kbGwAAC8AP3Rlcm1pbmF0ZUBAWUFYWFoAIQFFdmVudFJlZ2lzdGVyACIBRXZlbnRTZXRJbmZvcm1hdGlvbgApAUV2ZW50V3JpdGVUcmFuc2ZlcgAAQURWQVBJMzIuZGxsAAAtAFNsZWVwACAAR2V0U3RhcnR1cEluZm9XABQAR2V0TW9kdWxlSGFuZGxlVwAAYXBpLW1zLXdpbi1jb3JlLXN5bmNoLWwxLTItMC5kbGwAAGFwaS1tcy13aW4tY29yZS1wcm9jZXNzdGhyZWFkcy1sMS0xLTAuZGxsAGFwaS1tcy13aW4tY29yZS1saWJyYXJ5bG9hZGVyLWwxLTItMC5kbGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/IwBAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKi3y2ZKwAAzV0g0mbU//8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAAiBAAAKgmAACcEAAAHBIAALAmAAAwEgAAThIAAMgmAABUEgAAHxMAAMwmAAAwEwAAdRQAANgmAACAFAAAUxUAAOAmAABgFQAAqRUAAOgmAACwFQAAFBgAAPAmAAAgGAAAMhgAAOAmAABAGAAAeRgAAOAmAACAGAAAmBgAAOAmAACsGAAAABkAACwnAAAIGQAATRkAAEwnAADAGQAADRoAAFQnAACIGgAApRoAAOAmAACsGgAABxsAAHwnAAAgGwAAIhsAAHgnAAAwGwAAThsAACQnAABgGwAAgBsAACQnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAADAAAAMAAAgA4AAABgAACAEAAAAHgAAIAYAAAAkAAAgAAAAAAAAAAAAAAAAAAABAABAAAAqAAAgAIAAADAAACAAwAAANgAAIAEAAAA8AAAgAAAAAAAAAAAAAAAAAEAAADAAQCACAEAgAAAAAAAAAAAAAAAAAAAAQABAAAAIAEAgAAAAAAAAAAAAAAAAAAAAQABAAAAOAEAgAAAAAAAAAAAAAAAAAAAAQAJBAAAUAEAAAAAAAAAAAAAAAAAAAAAAQAJBAAAYAEAAAAAAAAAAAAAAAAAAAAAAQAJBAAAcAEAAAAAAAAAAAAAAAAAAAAAAQAJBAAAgAEAAAAAAAAAAAAAAAAAAAAAAQAJBAAAkAEAAAAAAAAAAAAA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ZQAAAEMAQQBMAEMAAAAAAIAALgABAEwAZQBnAGEAbABDAG8AcAB5AHIAaQBnAGgAdAAAAKkAIABNAGkAYwByAG8AcwBvAGYAdAAgAEMAbwByAHAAbwByAGEAdABpAG8AbgAuACAAQQBsAGwAIAByAGkAZwBoAHQAcwAgAHIAZQBzAGUAcgB2AGUAZAAuAAAAOgAJAAEATwByAGkAZwBpAG4AYQBsAEYAaQBsAGUAbgBhAG0AZQAAAEMAQQBMAEMALgBFAFgARQAAAAAAagAlAAEAUAByAG8AZAB1AGMAdABOAGEAbQBlAAAAAABNAGkAYwByAG8AcwBvAGYAdACuACAAVwBpAG4AZABvAHcAcwCuACAATwBwAGUAcgBhAHQAaQBuAGcAIABTAHkAcwB0AGUAbQAAAAAAPgANAAEAUAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAAMQAwAC4AMAAuADEAOAAzADYAMgAuADEAAAAAAEQAAAABAFYAYQByAEYAaQBsAGUASQBuAGYAbwAAAAAAJAAEAAAAVAByAGEAbgBzAGwAYQB0AGkAbwBuAAAAAAAJBLAEAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAATCwAAEwsAAAAAAAAAAAAAfHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/////////////////////////////////////////////////fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8//////98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz//////3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP//////fHx8//////98fHz//////3x8fP//////fHx8//////98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz//////3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP//////fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8//////98fHz//////3x8fP//////fHx8//////98fHz//////3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP//////fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8//////98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz//////3x8fP//////fHx8//////98fHz//////3x8fP//////fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8//////98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz//////3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP//////fHx8////////////////////////////fHx8//////98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz//////3x8fP///////////////////////////3x8fP//////fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8//////98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz//////3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP////////////////////////////////////////////////98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJUE5HDQoaCgAAAA1JSERSAAABAAAAAQAIAAAAAHkZ97oAAAHfSURBVHja7dbBCQJBEEVBozP/jDSDgZXV1431rwPNo07zeP75HnVAPQB1QD0AdUA9AHVAPQB1QD0AdUA9AHVAPQB1QD0AdUA9AHVAPQB1QD0AdUA9AHVAPQB1QD0AdUA9AHVAPQB1QD0AdUA9AHVAPQB1QD0AdUA9AHVAPQB1QD0AdUA9AHVAPQB1QD0Adx57/WgAAAAAAAAAAABzAe48+uXzAMYXAgAAAAAAAAC2Atz57wUAAAAAAAAAANgJUN4CAAAAAAAAAAAAUAJ8PAAAAAAAAAAAgKUA488DGF8IAAAAAAAAAAAAAAAAAAAAAACwDOAYfXq8egsAAAAAAAAAAGAawPjzAMYXAgAAAAAAAAAAAAAAAAAAAAAALAM4Rp8er94CAAAAAAAAAACYBjD+PIDxhQAAAAAAAAAAAAAAAAAAAAAAAMsAjtGnx6u3AAAAAAAAAAAApgGMPw9gfCEAAAAAAAAAYBfAlwcAAAAAAAAAADAOYOMA1AH1ANQB9QDUAfUA1AH1ANQB9QDUAfUA1AH1ANQB9QDUAfUA1AH1ANQB9QDUAfUA1AH1ANQB9QDUAfUA1AH1ANQB9QDUAfUA1AH1ANQB9QDUAfUA1AH1ANQB9QDUAfUA1AH1ANQB9d4hCu5bFop9jAAAAABJRU5ErkJggigAAAAgAAAAQAAAAAEAIAAAAAAAABAAABMLAAATCwAAAAAAAAAAAABHR0f/RkZG/0dHR/9GRkb/R0dH/0ZGRv9GRkb/R0ZH/0ZGRv9GRkb/R0dH/0ZGRv9HR0f/RkZG/0ZGRv9HR0f/RkZG/0ZGRv9HR0f/R0dH/0dHR/9GRkb/R0dH/0dHR/9HR0f/RkZG/0dHR/9HRkf/RkZG/0dHR/9HR0f/RkZG/0dHR/9GRkb/R0dH/0ZGRv9HRkf/RkZG/0ZGRv9HR0f/RkZG/0ZGRv9HR0f/RkZG/0ZGRv9GRkb/RkZG/0dHR/9GRkb/R0dH/0ZGRv9HR0f/R0dH/0ZGRv9HR0f/RkZG/0ZGRv9HR0f/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/R0dH/0dHR/9GRkb/R0dH/0ZGRv9GRkb/R0dH/0dHR/9GRkb/RkZG/0ZGRv9HR0f/RkZG/0dGR/9GRkb/RkZG/0ZGRv9HR0f/RkZG/0ZGRv9GRkb/R0dH/0dHR/9GRkb/R0dH/0ZGRv9GRkb/R0ZH/0ZGRv9HR0f/R0dH/0dHR/9HRkf/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9HR0f/////////////////////////////////////////////////////////////////////////////////////////////////R0dH/0dGRv9HR0f/RkZG/0ZGRv9HR0f/RkZG/0ZGRv9HR0f/RkZG/0ZGRv9GRkb/RkZG/0ZGRv////////////////////////////////////////////////////////////////////////////////////////////////9GRkb/R0dH/0dHR/9GRkb/RkZG/0ZGRv9HRkb/RkZG/0ZGRv9GRkb/R0dH/0ZGRv9GRkb/R0dH////////////R0dH/0ZGRv9HRkf/R0dH/0ZGRv9HR0f/RkZG/0dHR/9HR0f/R0dH/0dHR/9GRkb/R0dH/0dGRv///////////0dGRv9GRkb/R0dH/0dHR/9GRkb/RkZG/0dHR/9GRkb/R0dH/0dHR/9HRkf/R0dH/0ZGRv9GRkb///////////9HR0f/R0dH/0dHR/9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0dHR/9HR0f/R0dH////////////R0dH/0dHR/9HR0f/R0dH/0ZGRv9GRkb/RkZG/0ZGRv9HR0f/R0ZH/0dHR/9HR0f/RkZG/0ZGRv///////////0ZGRv9GRkb///////////9GRkb/RkZG////////////RkZG/0dHR////////////0ZGRv9GRkb///////////9HR0f/RkZG/0dHR/9GRkb/R0dH/0dHR/9HRkb/R0dH/0dGRv9HRkf/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv///////////0ZGRv9GRkb///////////9HRkf/R0dH////////////R0dH/0dGRv///////////0dHR/9HR0f/RkZG/0ZGRv9GRkb/RkZG/0dHR/9HR0f/RkZG/0ZGRv9HR0f/RkZG/0ZGRv9GRkb///////////9HR0f/R0dH/0dHR/9GRkb/RkZG/0ZGRv9HR0f/RkZG/0ZGRv9GRkb/R0dH/0ZGRv9GRkb/R0ZG////////////R0dH/0dGR/9GRkb/RkZG/0dHR/9GRkb/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/RkZG/0ZGRv///////////0ZGRv9HR0f/R0dH/0ZGRv9HRkf/RkZG/0ZGRv9GRkb/R0dH/0dHR/9GRkb/RkZG/0ZGRv9GRkb///////////9GRkb/R0dH/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0dHR/9GRkb/R0dH/0ZGRv9GRkb/RkZG////////////R0ZG/0ZGRv///////////0ZGRv9GRkb///////////9HR0f/RkZG////////////R0dH/0dGR////////////0dHR/9GRkb/R0dH/0dHR/9HRkb/RkZG/0dHR/9GRkb/R0dH/0ZGRv9GRkb/R0ZH/0ZGRv9HR0f///////////9HR0f/RkZG////////////R0dH/0dHR////////////0ZGRv9HR0f///////////9GRkb/R0dH////////////R0dH/0ZGRv9HR0f/R0dH/0dHR/9HR0f/RkZG/0ZGRv9GRkb/R0dH/0ZGRv9HR0f/RkZG/0ZGRv///////////0dHR/9GRkb/R0ZH/0dGR/9GRkb/R0dH/0ZGRv9GRkb/RkZG/0ZGRv9HR0f/R0dH/0ZGRv9HR0f///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/R0dH/0dHR/9HRkb/RkZG////////////R0ZG/0dHR/9GRkb/RkZG/0ZGRv9HR0f/RkZG/0dHR/9HR0f/R0dH/0dHR/9GRkb/R0dH/0dHR////////////0dGR/9HR0f/R0ZG/0dHR/9HR0f/RkZG/0dHR/9HR0f/R0dH/0ZGRv9GRkb/R0dH/0dHR/9GRkb///////////9GRkb/RkZG/0dHR/9GRkb/RkZG/0ZGRv9GRkb/RkZG/0dGRv9HR0f/R0ZG/0ZGRv9GRkb/R0dH////////////RkZG/0dHR/9GRkb/R0dH/0ZGRv9HR0f/R0dH/0ZGRv9HR0f/R0dH/0dHR/9GRkb/R0dH/0dGR////////////0ZGRv9HR0f///////////9GRkb/RkZG////////////R0dH/0dHR////////////0dHR/9HR0f///////////9GRkb/RkZG/0ZGRv9HR0f/R0dH/0ZGRv9HR0f/R0dH/0ZGRv9HR0f/R0ZH/0ZGRv9GRkb/RkZG////////////R0dH/0dHR////////////0ZGRv9HR0f///////////9GRkb/R0dH////////////RkZG/0dGR////////////0dHR/9GRkb/R0ZH/0ZGRv9GRkb/R0dH/0ZGRv9GRkb/R0dH/0ZGRv9GRkb/R0dH/0ZGRv9GRkb///////////9HR0f/RkZG/0dHR/9GRkb/R0dH/0ZGRv9HRkf/RkZG/0dHR/9GRkb/RkZG/0dGRv9HR0f/R0ZG////////////RkZG/0ZGRv9HRkb/R0ZH/0ZGRv9HR0f/RkZG/0dGRv9HR0f/R0dH/0dHR/9GRkb/R0dH/0dHR////////////0dHR/9HR0f/R0ZG/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0ZH/0ZGRv9GRkb/R0dH/0ZGRv9GRkb///////////9HRkb/R0dH/0dHR/9HRkf/R0dH/0ZGRv9GRkb/RkZG/0dHR/9HR0f/R0ZH/0ZGRv9GRkb/RkZG////////////R0dH/0ZGRv//////////////////////////////////////////////////////R0dH/0dHR////////////0ZGRv9HR0f/RkZG/0dHR/9HR0f/R0dH/0ZGRv9HR0f/R0dH/0ZGRv9HR0f/RkZG/0dGRv9GRkb///////////9GRkb/RkZG//////////////////////////////////////////////////////9HR0f/RkZG////////////RkZG/0ZGRv9HR0f/R0dH/0ZGRv9GRkb/R0ZH/0dHR/9HR0f/R0dH/0dHR/9GRkb/R0dH/0ZGRv///////////0dHR/9GRkb///////////9GRkb/R0dH/0dHR/9HRkf/R0dH/0dHR////////////0ZGRv9GRkb///////////9GRkb/R0dH/0ZGRv9HRkf/RkZG/0ZGRv9HR0f/R0ZH/0ZGRv9HR0f/RkZG/0ZGRv9HR0f/R0ZH////////////RkZG/0ZGRv//////////////////////////////////////////////////////R0dH/0ZGRv///////////0dHR/9GRkb/RkZG/0dGR/9HR0f/RkZG/0ZGRv9HR0f/RkZG/0ZGRv9HR0f/R0dH/0dHR/9GRkb///////////9HR0f/RkZG//////////////////////////////////////////////////////9HR0f/RkZG////////////R0dH/0dGR/9HR0f/RkZG/0dHR/9GRkb/RkZG/0ZGRv9GRkb/R0dH/0dHR/9GRkb/R0dH/0ZGRv///////////0dHR/9GRkb/RkZG/0dGR/9GRkb/RkZG/0ZGRv9GRkb/RkZG/0dHR/9HR0f/RkZG/0dHR/9GRkb///////////9GRkb/RkZG/0dHR/9HRkf/R0dH/0ZGRv9HR0f/R0dH/0ZGRv9GRkb/RkZG/0dGR/9HR0f/RkZG////////////RkZG/0ZGRv9GRkb/RkZG/0dHR/9HR0f/R0dH/0ZGRv9GRkb/RkZG/0dHR/9HRkf/RkZG/0dHR////////////0ZGRv9HR0f/RkZG/0dHR/9HR0f/R0dH/0dHR/9GRkb/R0ZG/0dHR/9HR0f/R0dH/0ZGRv9GRkb/////////////////////////////////////////////////////////////////////////////////////////////////RkZG/0ZGRv9GRkb/R0ZH/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/R0dH/0dGR/9GRkb/R0dH/0ZGRv////////////////////////////////////////////////////////////////////////////////////////////////9HR0f/RkZG/0ZGRv9HR0f/RkZG/0ZGRv9HRkf/RkZG/0ZGRv9GRkb/R0ZG/0ZGRv9GRkb/R0dH/0ZGRv9HR0f/R0dH/0ZGRv9HR0f/RkZG/0dHR/9GRkb/RkZG/0dHR/9HR0f/R0dH/0ZGRv9HR0f/RkZG/0ZGRv9GRkb/R0dH/0dHR/9GRkb/RkZG/0ZGRv9HR0f/RkZG/0ZGRv9GRkb/RkZG/0dHR/9GRkb/RkZG/0ZGRv9GRkb/R0dH/0dHR/9HR0f/R0ZG/0dHR/9HR0f/RkZG/0dHR/9GRkb/R0dH/0ZGRv9GRkb/RkZG/0dGR/9HRkf/R0ZH/0ZGRv9HR0f/R0dH/0dHR/9GRkb/R0dH/0dHR/9GRkb/RkZG/0ZGRv9HR0f/R0dH/0ZGRv9HR0f/RkZG/0ZGRv9GRkb/R0dH/0ZGRv9GRkb/R0dH/0ZGRv9GRkb/RkZG/0dHR/9HR0f/RkZG/0ZGRv9GRkb/R0dH/0dHR/9GRkb/RkZG/0dHR/9HR0f/RkZG/0ZGRv9HR0f/RkZG/0dGR/9HR0f/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAMAAAAGAAAAABACAAAAAAAAAkAAATCwAAEwsAAAAAAAAAAAAARkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv///////////0ZGRv9GRkb/RkZG/0ZGRv///////////0ZGRv9GRkb/RkZG/0ZGRv///////////0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv///////////0ZGRv9GRkb/RkZG/0ZGRv///////////0ZGRv9GRkb/RkZG/0ZGRv///////////0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv///////////0ZGRv9GRkb/RkZG/0ZGRv///////////0ZGRv9GRkb/RkZG/0ZGRv///////////0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv///////////0ZGRv9GRkb/RkZG/0ZGRv///////////0ZGRv9GRkb/RkZG/0ZGRv///////////0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv///////////0ZGRv9GRkb/RkZG/0ZGRv///////////0ZGRv9GRkb/RkZG/0ZGRv///////////0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv///////////0ZGRv9GRkb/RkZG/0ZGRv///////////0ZGRv9GRkb/RkZG/0ZGRv///////////0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv///////////////////////////////////////////////////////////////////////////0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv///////////////////////////////////////////////////////////////////////////0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv///////////0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv///////////0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv///////////0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv///////////0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv///////////////////////////////////////////////////////////////////////////0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv///////////////////////////////////////////////////////////////////////////0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG////////////RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb///////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAEBAAAAEAIABoBAAAAQAAAAAAAQAgABgCAAACACAgAAABACAAqBAAAAMAMDAAAAEAIACoJQAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAAKAIoGiggKCIoJCgWKJgonCiiKKQogAAADAAAAwAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";

            byte[] bytes = System.Convert.FromBase64String(base64);

            IntPtr  printer   = new IntPtr();
            int     pcWritten = 0;
            DOCINFO docInfo   = new DOCINFO
            {
                pDataType = "RAW"
            };

            PrintDirect.OpenPrinter(printerAddress, ref printer, 0);
            PrintDirect.StartDocPrinter(printer, 1, ref docInfo);
            PrintDirect.StartPagePrinter(printer);

            try
            {
                PrintDirect.WritePrinter(printer, bytes, bytes.Length, ref pcWritten);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }

            PrintDirect.EndPagePrinter(printer);
            PrintDirect.EndDocPrinter(printer);
            PrintDirect.ClosePrinter(printer);
        }
Exemplo n.º 8
0
 public Native(DOCINFO docInfo)
 {
     cbSize       = docInfo.cbSize;
     lpszDocName  = Marshal.StringToCoTaskMemAuto(docInfo.lpszDocName);
     lpszOutput   = Marshal.StringToCoTaskMemAuto(docInfo.lpszOutput);
     lpszDatatype = Marshal.StringToCoTaskMemAuto(docInfo.lpszDatatype);
     fwType       = docInfo.fwType;
 }
Exemplo n.º 9
0
        //2D Lable 打印方式
        public static void Print2DLabel(string pinterName, System.Collections.ArrayList printValueList)
        {
            System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
            //order
            byte[] byteArray = new byte[] { (byte)27 };
            string Esc       = asciiEncoding.GetString(byteArray);

            DOCINFO di        = new DOCINFO();
            int     pcWritten = 0;

            di.pDocName  = "CT4i";
            di.pDataType = "RAW";

            //打开打印机
            string PrinterName = pinterName;
            int    lhPrinter   = openPrinter(PrinterName);
            int    lineCount   = 0; //标记现在打印的是第几行
            string printValueA = string.Empty;

            //StartDocPrinter((IntPtr)lhPrinter, 1, ref di);
            //StartPagePrinter((IntPtr)lhPrinter);

            //打印数据,两行算一个条码,打完要SATO结束指令,传过来的值的行数一定是2的倍数
            for (int i = 0; i < printValueList.Count; i++)
            {
                lineCount++;
                if (lineCount == 1)
                {
                    StartDocPrinter((IntPtr)lhPrinter, 1, ref di);
                    StartPagePrinter((IntPtr)lhPrinter);
                    //SATO 打印机开始指令,必须有
                    printValueA = asciiEncoding.GetString(new byte[] { (byte)2 }) + Esc + "A";
                    WritePrinter((IntPtr)lhPrinter, printValueA, printValueA.Length, ref pcWritten);
                }
                printValueA = printValueList[i].ToString().Replace("\r\n", "");
                WritePrinter((IntPtr)lhPrinter, printValueA, printValueA.Length, ref pcWritten);

                if (lineCount == 2)
                {
                    lineCount   = 0;
                    printValueA = Esc + "Q1" + Esc + "Z" + asciiEncoding.GetString(new byte[] { (byte)3 });
                    WritePrinter((IntPtr)lhPrinter, printValueA, printValueA.Length, ref pcWritten);
                    EndPagePrinter((IntPtr)lhPrinter);
                    EndDocPrinter((IntPtr)lhPrinter);
                    //ClosePrinter((IntPtr)lhPrinter);
                }
            }

            //SATO打印结束指令
            //printValueA = Esc + "Q1" + Esc + "Z" + asciiEncoding.GetString(new byte[] { (byte)3 });
            //WritePrinter((IntPtr)lhPrinter, printValueA, printValueA.Length, ref pcWritten);
            //EndPagePrinter((IntPtr)lhPrinter);
            //EndDocPrinter((IntPtr)lhPrinter);
            ClosePrinter((IntPtr)lhPrinter);
        }
        internal static bool StartDoc(GraphicsPrinter gr, string doc_name, string output_file)
        {
            DOCINFO di = new DOCINFO();
            int     ret;

            di.cbSize       = Marshal.SizeOf(di);
            di.lpszDocName  = Marshal.StringToHGlobalUni(doc_name);
            di.lpszOutput   = IntPtr.Zero;
            di.lpszDatatype = IntPtr.Zero;
            di.fwType       = 0;

            ret = Win32StartDoc(gr.Hdc, ref di);
            Marshal.FreeHGlobal(di.lpszDocName);
            return((ret > 0) ? true : false);
        }
Exemplo n.º 11
0
            public IDisposable StartDocument(string name)
            {
                if (IsInvalid || IsClosed)
                {
                    return(null);
                }

                var di = new DOCINFO(name);

                if (!StartDocPrinter(this, 1, ref di))
                {
                    ThrowLastWin32Error();
                }

                return(new PrinterDocument(this));
            }
Exemplo n.º 12
0
        // Unfortunately, PrinterSettings and PageSettings couldn't be referencing each other,
        // thus we need to pass them separately
        internal static IntPtr CreateGraphicsContext(PrinterSettings settings, PageSettings default_page_settings)
        {
            IntPtr graphics = IntPtr.Zero;
            string name;

            if (!settings.PrintToFile)
            {
                StringBuilder sb     = new StringBuilder(1024);
                int           length = sb.Capacity;
                LibcupsNative.cupsTempFd(sb, length);
                name    = sb.ToString();
                tmpfile = name;
            }
            else
            {
                name = settings.PrintFileName;
            }

            PaperSize psize = default_page_settings.PaperSize;
            int       width, height;

            if (default_page_settings.Landscape)
            { // Swap in case of landscape
                width  = psize.Height;
                height = psize.Width;
            }
            else
            {
                width  = psize.Width;
                height = psize.Height;
            }

            Gdip.GdipGetPostScriptGraphicsContext(name,
                                                  width * 72 / 100,
                                                  height * 72 / 100,
                                                  default_page_settings.PrinterResolution.X,
                                                  default_page_settings.PrinterResolution.Y, ref graphics);

            DOCINFO doc = default;

            doc.filename = name;
            doc.settings = settings;
            doc.default_page_settings = default_page_settings;
            doc_info.Add(graphics, doc);

            return(graphics);
        }
Exemplo n.º 13
0
        //读模板打印方式
        public static void Print(string pinterName, System.Collections.ArrayList printValueList)
        {
            System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
            //order
            byte[] byteArray = new byte[] { (byte)27 };
            string Esc       = asciiEncoding.GetString(byteArray);

            DOCINFO di        = new DOCINFO();
            int     pcWritten = 0;

            di.pDocName  = "CT4i";
            di.pDataType = "RAW";

            //打开打印机
            string PrinterName = pinterName;
            int    lhPrinter   = openPrinter(PrinterName);

            StartDocPrinter((IntPtr)lhPrinter, 1, ref di);
            StartPagePrinter((IntPtr)lhPrinter);


            //SATO 打印机开始指令,必须有
            string printValueA = asciiEncoding.GetString(new byte[] { (byte)2 }) + Esc + "A";

            WritePrinter((IntPtr)lhPrinter, printValueA, printValueA.Length, ref pcWritten);

            //打印数据
            for (int i = 0; i < printValueList.Count; i++)
            {
                printValueA = printValueList[i].ToString();

                //printValueA = printValueA.Replace("\"", " ");
                //printValueA = printValueA.Replace("+", "");
                //printValueA = printValueA.Replace(" ", "");
                //printValueA = printValueA.Replace("Esc", Esc).Trim('"');

                WritePrinter((IntPtr)lhPrinter, printValueA, printValueA.Length, ref pcWritten);
            }
            //SATO打印结束指令
            printValueA = Esc + "Q1" + Esc + "Z" + asciiEncoding.GetString(new byte[] { (byte)3 });
            WritePrinter((IntPtr)lhPrinter, printValueA, printValueA.Length, ref pcWritten);
            EndPagePrinter((IntPtr)lhPrinter);
            EndDocPrinter((IntPtr)lhPrinter);
            ClosePrinter((IntPtr)lhPrinter);
        }
Exemplo n.º 14
0
        internal static bool EndDoc(GraphicsPrinter gr)
        {
            DOCINFO doc = (DOCINFO)doc_info[gr.Hdc];

            gr.Graphics.Dispose();              // Dispose object to force surface finish

            IntPtr options;
            int    options_count = GetCupsOptions(doc.settings, doc.default_page_settings, out options);

            cupsPrintFile(doc.settings.PrinterName, doc.filename, doc.title, options_count, options);
            cupsFreeOptions(options_count, options);
            doc_info.Remove(gr.Hdc);
            if (tmpfile != null)
            {
                try { File.Delete(tmpfile); }
                catch { }
            }
            return(true);
        }
Exemplo n.º 15
0
        public static bool SendStringToPrinter(string szPrinterName, string docName, string text)
        {
            IntPtr pText = Marshal.StringToCoTaskMemAnsi(text);

            try
            {
                DOCINFO di = new DOCINFO();
                di.pDocName  = docName;
                di.pDataType = "RAW";
                IntPtr hPrinter = IntPtr.Zero;
                if (!PrintDirect.OpenPrinter(szPrinterName.Normalize(), ref hPrinter, IntPtr.Zero))
                {
                    BombWin32();
                }
                if (!PrintDirect.StartDocPrinter(hPrinter, 1, ref di))
                {
                    BombWin32();
                }
                if (!PrintDirect.StartPagePrinter(hPrinter))
                {
                    BombWin32();
                }
                int dwWritten = 0;
                if (!PrintDirect.WritePrinter(hPrinter, pText, text.Length, ref dwWritten))
                {
                    BombWin32();
                }
                PrintDirect.EndPagePrinter(hPrinter);
                PrintDirect.EndDocPrinter(hPrinter);
                PrintDirect.ClosePrinter(hPrinter);
                return(true);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
                return(false);
            }
            finally
            {
                Marshal.FreeCoTaskMem(pText);
            }
        }
Exemplo n.º 16
0
 public static extern int StartDoc(HandleRef hDC, DOCINFO lpDocInfo);
 public static extern bool StartDocPrinter(IntPtr hPrinter, int Level, ref DOCINFO
 pDocInfo);
        public void printReceipt(string jsonString, string facename = "20 cpi")
        {
            if (string.IsNullOrEmpty(jsonString))
            {
                return;
            }

            // Convert JSON to the key value pairs
            JsonValue jsonValue = JsonValue.Parse(jsonString);

            if (jsonValue.Count == 0)
            {
                return;
            }

            IntPtr hPrinter = IntPtr.Zero;

            OpenPrinter(_printerName, ref hPrinter, IntPtr.Zero);

            // Create Printer Device Context
            IntPtr hwnd     = IntPtr.Zero;
            int    size     = DocumentProperties(hwnd, hPrinter, _printerName, IntPtr.Zero, IntPtr.Zero, 0);
            IntPtr pDevmode = Marshal.AllocHGlobal(size);
            int    ret      = DocumentProperties(hwnd, hPrinter, _printerName, pDevmode, IntPtr.Zero, DM_OUT_BUFFER);
            IntPtr hDC      = CreateDC(null, _printerName, null, pDevmode);

            // Make Print-Job
            DOCINFO di = new DOCINFO();

            di.cbSize      = Marshal.SizeOf(di);
            di.lpszDocName = "IPTS Receipt";

            // Start printing
            StartDoc(hDC, ref di);
            StartPage(hDC);
            LOGFONT lf      = new LOGFONT();
            IntPtr  hFont   = IntPtr.Zero;
            IntPtr  oldFont = IntPtr.Zero;
            string  str;
            int     fontsize, pointsize;

            // Windows font
            pointsize     = 10;
            fontsize      = (int)((pointsize * 10) * GetDeviceCaps(hDC, LOGPIXELSY) / 720);
            lf.lfHeight   = -fontsize;
            lf.lfFaceName = facename;
            hFont         = CreateFontIndirect(lf);
            oldFont       = SelectObject(hDC, hFont);

            List <ReceiptSchema> list = new List <ReceiptSchema>();

            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = "Платеж успешно совершен"
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = "----------------------------------------------------"
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = "№ квитанции"
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = jsonValue["receiptId"]
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = "ФИО плательщика"
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = jsonValue["guestFullname"]
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = "ИИН/БИН плательщика"
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = jsonValue["guestTaxpayerIdNumber"]
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = "Наименование услуги"
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = jsonValue["serviceName"]
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = "Дата:"
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = jsonValue["created"]
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = "Получатель"
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = jsonValue["hotelName"]
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = "Адрес получателя"
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = jsonValue["hotelAddress"]
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = "БИН получателя"
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = jsonValue["agentBusinessNumber"]
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = "Оплачено с"
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = string.Format("IPTS {0}", jsonValue["terminalId"])
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = "----------------------------------------------------"
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = "Оплаченная сумма"
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = string.Format("{0} тенге", jsonValue["payment"])
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = "Ожидаемая сумма"
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = string.Format("{0} тенге", jsonValue["expectedPayment"])
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = "----------------------------------------------------"
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = "Обязательно сохраняйте квитанцию."
            });
            list.Add(new ReceiptSchema()
            {
                Key = 0, Value = "СПАСИБО за использование наших услуг!"
            });

            int x = 0, y = -1;

            foreach (ReceiptSchema pair in list)
            {
                int handler = pair.Key;
                str = pair.Value;

                if (handler == 1)
                {
                    x = 148;
                }
                else if (handler == 0)
                {
                    x = 0;
                    y++;
                }
                TextOut(hDC, x, y * 50, str, str.Length);
            }


            SelectObject(hDC, oldFont);
            DeleteObject(hFont);

            // Cut paper
            pointsize     = 12;
            fontsize      = (int)((pointsize * 10) * GetDeviceCaps(hDC, LOGPIXELSY) / 720);
            lf.lfHeight   = -fontsize;
            lf.lfFaceName = "Control";
            hFont         = CreateFontIndirect(lf);
            oldFont       = SelectObject(hDC, hFont);
            str           = "";
            TextOut(hDC, 0, y * 50, str, str.Length);
            SelectObject(hDC, oldFont);
            DeleteObject(hFont);

            // End Printing
            EndPage(hDC);
            EndDoc(hDC);

            // Release Printer Device Context
            DeleteDC(hDC);
            Marshal.FreeHGlobal(pDevmode);
            ClosePrinter(hPrinter);
        }
Exemplo n.º 19
0
        internal static partial int StartDoc(
#if NET7_0_OR_GREATER
            [MarshalUsing(typeof(HandleRefMarshaller))]
#endif
            HandleRef hDC, DOCINFO lpDocInfo);
        public void printerFontTest()
        {
            IntPtr hPrinter = IntPtr.Zero;

            OpenPrinter(_printerName, ref hPrinter, IntPtr.Zero);
            // Create Printer Device Con
            IntPtr hwnd = IntPtr.Zero;
            int    size = DocumentProperties(hwnd, hPrinter, _printerName, IntPtr.Zero, IntPtr.Zero, 0);

            IntPtr pDevmode = Marshal.AllocHGlobal(size);
            int    ret      = DocumentProperties(hwnd, hPrinter, _printerName, pDevmode, IntPtr.Zero,
                                                 DM_OUT_BUFFER);
            IntPtr hDC = CreateDC(null, _printerName, null, pDevmode);

            // Make Print-Job
            DOCINFO di = new DOCINFO();

            di.cbSize      = Marshal.SizeOf(di);
            di.lpszDocName = "Driver Test Print";

            // Start printing
            StartDoc(hDC, ref di);
            StartPage(hDC);
            LOGFONT lf      = new LOGFONT();
            IntPtr  hFont   = IntPtr.Zero;
            IntPtr  oldFont = IntPtr.Zero;
            string  str;
            int     fontsize, pointsize;

            // Windows font
            pointsize     = 15;
            fontsize      = (int)((pointsize * 10) * GetDeviceCaps(hDC, LOGPIXELSY) / 720);
            lf.lfHeight   = -fontsize;
            lf.lfFaceName = "Arial";
            hFont         = CreateFontIndirect(lf);
            oldFont       = SelectObject(hDC, hFont);
            str           = "Hello World! Здравствуй мир!";
            TextOut(hDC, 10, 10, str, str.Length);
            SelectObject(hDC, oldFont);
            DeleteObject(hFont);
            // Printer font
            pointsize     = 12;
            fontsize      = (int)((pointsize * 10) * GetDeviceCaps(hDC, LOGPIXELSY) / 720);
            lf.lfHeight   = -fontsize;
            lf.lfFaceName = "15 cpi";
            hFont         = CreateFontIndirect(lf);
            oldFont       = SelectObject(hDC, hFont);
            str           = "Hello World! Здравствуй мир!";
            TextOut(hDC, 10, 50, str, str.Length);
            SelectObject(hDC, oldFont);
            DeleteObject(hFont);
            // Barcode
            pointsize     = 42;
            fontsize      = (int)((pointsize * 10) * GetDeviceCaps(hDC, LOGPIXELSY) / 720);
            lf.lfHeight   = -fontsize;
            lf.lfFaceName = "Code39";
            hFont         = CreateFontIndirect(lf);
            oldFont       = SelectObject(hDC, hFont);
            str           = "ABC123456";
            TextOut(hDC, 10, 90, str, str.Length);
            SelectObject(hDC, oldFont);
            DeleteObject(hFont);
            // Cash drawer
            pointsize = 12;

            fontsize      = (int)((pointsize * 10) * GetDeviceCaps(hDC, LOGPIXELSY) / 720);
            lf.lfHeight   = -fontsize;
            lf.lfFaceName = "Control";
            hFont         = CreateFontIndirect(lf);
            oldFont       = SelectObject(hDC, hFont);
            str           = "A";
            TextOut(hDC, 10, 130, str, str.Length);
            SelectObject(hDC, oldFont);
            DeleteObject(hFont);
            // Cut paper
            pointsize     = 12;
            fontsize      = (int)((pointsize * 10) * GetDeviceCaps(hDC, LOGPIXELSY) / 720);
            lf.lfHeight   = -fontsize;
            lf.lfFaceName = "Control";
            hFont         = CreateFontIndirect(lf);
            oldFont       = SelectObject(hDC, hFont);
            str           = "P";
            TextOut(hDC, 10, 170, str, str.Length);
            SelectObject(hDC, oldFont);
            DeleteObject(hFont);
            // Graphic data from NV memory
            pointsize     = 12;
            fontsize      = (int)((pointsize * 10) * GetDeviceCaps(hDC, LOGPIXELSY) / 720);
            lf.lfHeight   = -fontsize;
            lf.lfFaceName = "Control";
            hFont         = CreateFontIndirect(lf);
            oldFont       = SelectObject(hDC, hFont);
            str           = "G";
            TextOut(hDC, 10, 210, str, str.Length);
            SelectObject(hDC, oldFont);
            DeleteObject(hFont);
            // End Printing
            EndPage(hDC);
            EndDoc(hDC);
            // Release Printer Device Context
            DeleteDC(hDC);
            Marshal.FreeHGlobal(pDevmode);
            ClosePrinter(hPrinter);
        }
 static extern int Win32StartDoc(IntPtr hdc, [In] ref DOCINFO lpdi);
Exemplo n.º 22
0
 public static extern int StartDoc(IntPtr hDC, DOCINFO lpDocInfo);
Exemplo n.º 23
0
 internal static extern int StartDoc(IntPtr hdc, DOCINFO lpdi);
Exemplo n.º 24
0
 private static extern int StartDocPrinter(int hPrinter, int Level, ref DOCINFO pDocInfo);
Exemplo n.º 25
0
 public static extern int StartDoc(IntPtr hDC, DOCINFO lpDocInfo);
Exemplo n.º 26
0
    //and to use it

    public void Print(string printerName, string docName, string referencePiece, string designationPiece, string code)
    {
        System.IntPtr lhPrinter = new System.IntPtr();
        DOCINFO       di        = new DOCINFO();
        int           pcWritten = 0;
        string        st1;

        di.pDocName  = docName;
        di.pDataType = "RAW";
        //If lhPrinter is 0 then an error has occured

        try
        {
            PrintDirect.OpenPrinter(printerName, ref lhPrinter, 0);

            PrintDirect.StartDocPrinter(lhPrinter, 1, ref di);

            PrintDirect.StartPagePrinter(lhPrinter);

            //"^XA^CFD^FS\n^PON^FS\n^FWN^FS\n^LH020,30^FS\n^FO0,5^A0,N,50,50^FDSTART TEST^FS\n^FO0,50^A0,N,30,30^FD\nTOFUS MAXIMUS^FS\n^PQ1\n^XZ";


            /*
             * //ZPL2
             *
             * st1 = "^XA";
             *
             * st1 += "^LH50,50";
             *
             * st1 += "^FO0,0^AF^FD"+texteHaut+"^FS";
             *
             * st1 += "^FO50,50,^BC,50";
             *
             * st1 += "^FD"+code+"^FS";
             *
             * //st1 += "";
             *
             * st1 += "^XZ";
             *
             */
            //st1 = "\x1b*p600x600Y\r\n";
            //PrintDirect.WritePrinter(lhPrinter, st1, st1.Length, ref pcWritten);

            //st1 = "x1b*pcộng hoà xã hội chủ";
            ////EPL2
            //st1 = "\nN\n";
            //st1 += "cộng hoà xã hội\"" + referencePiece + "\"\n";
            //st1 += "A25,25,0,2,1,1,N,\"" + designationPiece + "\"\n";
            //st1 += "B25,45,0,1E,2,3,50,B,\"" + code + "\"\n";
            //st1 += "P1\n";


            st1 = "\x1b*p600x600Y\r\n";
            PrintDirect.WritePrinter(lhPrinter, st1, st1.Length, ref pcWritten);
            st1 = "hello";
            PrintDirect.WritePrinter(lhPrinter, st1, st1.Length, ref pcWritten);
            st1 = "cộng hoà xã";
            prtUnicode.WritePrinter(lhPrinter, st1, st1.Length, ref pcWritten);
            st1 = "\f";
            PrintDirect.WritePrinter(lhPrinter, st1, st1.Length, ref pcWritten);



            //PrintDirect.WritePrinter(lhPrinter, st1, st1.Length, ref pcWritten);
            //prtUnicode.WritePrinter(lhPrinter, st1, st1.Length, ref pcWritten);
        }


        catch (Exception ex)
        {
            throw new ApplicationException(ex.Message);
        }


        PrintDirect.EndPagePrinter(lhPrinter);

        PrintDirect.EndDocPrinter(lhPrinter);

        PrintDirect.ClosePrinter(lhPrinter);
    }
Exemplo n.º 27
0
 internal static extern int StartDoc(IntPtr hdc, DOCINFO lpdi);
Exemplo n.º 28
0
 private static extern long StartDocPrinter(IntPtr hPrinter, int Level, ref DOCINFO pDocInfo);
Exemplo n.º 29
0
        //serialNumber1 和SerialNumber2 的打印方式
        public static void Print(string pinterName, System.Collections.ArrayList printValueList, string printType)
        {
            System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
            //order
            byte[] byteArray = new byte[] { (byte)27 };
            string Esc       = asciiEncoding.GetString(byteArray);

            DOCINFO di        = new DOCINFO();
            int     pcWritten = 0;

            di.pDocName  = "CT4i";
            di.pDataType = "RAW";

            //打开打印机
            string PrinterName = pinterName;
            int    lhPrinter   = openPrinter(PrinterName);
            string printValueA = string.Empty;
            int    count       = 0; //计算打印到了某一行第几个条码
            int    lineCount   = 0; //标记现在打印的是第几行

            StartDocPrinter((IntPtr)lhPrinter, 1, ref di);
            StartPagePrinter((IntPtr)lhPrinter);

            SystemSettingFacade _systemFacade = new SystemSettingFacade();

            Domain.BaseSetting.Parameter SerialNumber1 = (Domain.BaseSetting.Parameter)_systemFacade.GetParameter("SERIAL NUMBER1", "PRINTRELATE");
            Domain.BaseSetting.Parameter SerialNumber2 = (Domain.BaseSetting.Parameter)_systemFacade.GetParameter("SERIAL NUMBER2", "PRINTRELATE");

            //SATO 打印机开始指令
            if (SerialNumber1.ParameterCode != printType && SerialNumber2.ParameterCode != printType)
            {
                printValueA = asciiEncoding.GetString(new byte[] { (byte)2 }) + Esc + "A";
                WritePrinter((IntPtr)lhPrinter, printValueA, printValueA.Length, ref pcWritten);
            }
            //打印数据
            for (int i = 0; i < printValueList.Count; i++)
            {
                lineCount++;

                //防止\r\n被split掉
                if ((printValueList[i].ToString().IndexOf("#\r\n")) != -1)
                {
                    printValueA = printValueList[i].ToString().Substring(0, (printValueList[i].ToString().IndexOf("#\r\n")));
                }

                printValueA = printValueList[i].ToString().Replace("#", "   ");                  //将字符串里面的#替换成3个空格

                WritePrinter((IntPtr)lhPrinter, printValueA, printValueA.Length, ref pcWritten); //打一行
                if (lineCount == 2)
                {
                    lineCount = 0;
                    //一组条码打印好之后换到下一行
                    string NewLine = asciiEncoding.GetString(new byte[] { (byte)27 }) + asciiEncoding.GetString(new byte[] { (byte)65 }) + asciiEncoding.GetString(new byte[] { (byte)28 });
                    if (SerialNumber1.ParameterCode == printType || SerialNumber2.ParameterCode == printType)
                    {
                        NewLine = "\r\n";
                    }

                    WritePrinter((IntPtr)lhPrinter, NewLine, NewLine.Length, ref pcWritten);
                }
            }
            //SATO打印结束指令
            if (SerialNumber1.ParameterCode != printType && SerialNumber2.ParameterCode != printType)
            {
                printValueA = Esc + "Q1" + Esc + "Z" + asciiEncoding.GetString(new byte[] { (byte)3 });
                WritePrinter((IntPtr)lhPrinter, printValueA, printValueA.Length, ref pcWritten);
            }

            EndPagePrinter((IntPtr)lhPrinter);
            EndDocPrinter((IntPtr)lhPrinter);
            ClosePrinter((IntPtr)lhPrinter);
        }
Exemplo n.º 30
0
		// Unfortunately, PrinterSettings and PageSettings couldn't be referencing each other,
		// thus we need to pass them separately
		internal static IntPtr CreateGraphicsContext (PrinterSettings settings, PageSettings default_page_settings)
		{
			IntPtr graphics = IntPtr.Zero;
			string name;
			if (!settings.PrintToFile) {
				StringBuilder sb = new StringBuilder (1024);
				int length = sb.Capacity;
				cupsTempFd (sb, length);
				name = sb.ToString ();
				tmpfile = name;
			}
			else
				name = settings.PrintFileName;

			PaperSize psize = default_page_settings.PaperSize;
			int width, height;
			if (default_page_settings.Landscape) { // Swap in case of landscape
				width = psize.Height;
				height = psize.Width;
			} else {
				width = psize.Width;
				height = psize.Height;
			}

			GdipGetPostScriptGraphicsContext (name,
				width * 72 / 100,
				height * 72 / 100, 
				default_page_settings.PrinterResolution.X,
				default_page_settings.PrinterResolution.Y, ref graphics);

			DOCINFO doc = new DOCINFO ();
			doc.filename = name;
			doc.settings = settings;
			doc.default_page_settings = default_page_settings;
			doc_info.Add (graphics, doc);

			return graphics;
		}
Exemplo n.º 31
0
 public static Native ConvertToUnmanaged(DOCINFO managed) => new(managed);
Exemplo n.º 32
0
 public static extern int StartDoc(int hdc, [System.Runtime.InteropServices.In] ref DOCINFO lpdi);
 public static extern Int32 StartDoc(IntPtr hdc, [MarshalAs(UnmanagedType.Struct)] ref DOCINFO lpdi);
Exemplo n.º 34
0
 public static extern int StartDoc(HandleRef hDC, DOCINFO lpDocInfo);
Exemplo n.º 35
0
		internal static bool StartDoc (GraphicsPrinter gr, string doc_name, string output_file)
		{
			DOCINFO di = new DOCINFO ();
			int ret;

			di.cbSize = Marshal.SizeOf (di);
  			di.lpszDocName = Marshal.StringToHGlobalUni (doc_name);
  			di.lpszOutput = IntPtr.Zero;
  			di.lpszDatatype = IntPtr.Zero;
  			di.fwType = 0;

  			ret = Win32StartDoc (gr.Hdc, ref di);
			Marshal.FreeHGlobal (di.lpszDocName);
			return (ret > 0) ? true : false;
		}