QuadDraw revisited - drawing program work in progress
#19
New version 1.6 below.  I added James Jarvis suggestions.  Press D to pick a draw color, and press E for eraser.  You can now load any image file QB64 supports by pressing L, and you can pick a filename when saving a BMP image, so you're not limited to just one now.  Gave it an updated menu with the new options, and current colors are shown.

- Dav

EDIT: Fixed a typo. Now pressing F works.

Code: (Select All)
'============
'QuadDraw.bas v1.6
'============
'An odd little drawing program.
'Draws/paints in several areas of the screen at same time.
'Coded by Dav for QB64 JUN/2022

'NEW FOR v1.6:
'              New menu to show the new options available.
'              PRESS D to choose a draw color
'              PRESS E toggles Eraser On/Off (Hold & draw for neat effect)
'              PRESS L to Load a previously saved image file.
'              Can load any image file format that QB64 supports.
'              The current Draw & Fill colors now shown in menu.
'              Can now choose the filename when saving .BMP file.

'CREDITS: SPAINT SUB was made by Petr.  Thanks Petr!
'         text SUB was made by bplus.  thanks bplus!
'         (bplus helped me out how to draw lines without gaps too)
'         Thanks to James Jarvis for draw color and eraser idea/code!

'----------
'HOW TO USE:
'----------

'Left click on mouse and hold to draw on the screen.

'Press 1,2,3 or 4 to set how many areas to draw in, default is 4.

'Use the +/- keys to change brush size (1 to 50 allowed)

'Right click to fill/paint the areas with color.
'Default fill color is picked randomly, but you can select one.

'Press D to select a new draw color for brush.

'Press F to select a fill color (doing so turns random fill color off)

'Press R to toggle random fill color on/off (default is a random color)

'Press E to toggle Erase on/off.  Hold it while drawing for dotted lines.

'Press A to smooth the screen using AntiAliasing.

'Press S to save current image as QUADDRAW.BMP in current dir.

'Press L to Load a previously saved image on the screen.

'Press U to undo last change made to image.

'Space = clears screen and starts over.

'ESC = Ends program

'================================================================

DIM SHARED quads, brushsize, randfill, eraser, menu&, blk&, fill&

menu& = BASIMAGE1&

SCREEN _NEWIMAGE(1000, 600, 32) '_DESKTOPWIDTH * .75, _DESKTOPHEIGHT * .85, 32)

centerx = (_WIDTH - 200) / 2
centery = _HEIGHT / 2

wht& = _RGB(255, 255, 255) 'used often, so variable it
blk& = _RGB(0, 0, 0)
fill& = _RGB(RND * 255, RND * 255, RND * 255)
brushsize = 3 'size of drawing circle (brush)
quads = 4 'start with 4 drawing sections
randfill = 1 'default is use random fill color turned on

CLS , wht& 'start with white screen

_DELAY .25

undo& = _COPYIMAGE(_DISPLAY)

'====
main:
'====

_TITLE "QuadDraw - Quads:" + STR$(quads) + "  BrushSize:" + STR$(brushsize)

DrawMenu

DO

    WHILE _MOUSEINPUT: WEND

    mx = _MOUSEX: my = _MOUSEY

    IF mx <= (_WIDTH - 200 - brushsize / 2) THEN

        IF _MOUSEBUTTON(1) THEN

            IF stilldown = 0 THEN
                _FREEIMAGE undo&
                undo& = _COPYIMAGE(_DISPLAY)
            END IF

            IF stilldown = 1 THEN
                stepx = lastmx - mx
                stepy = lastmy - my
                length = INT((stepx ^ 2 + stepy ^ 2) ^ .5)
                dx = stepx / length
                dy = stepy / length
                FOR i = 0 TO length
                    FOR d = 1 TO brushsize
                        newx = mx + dx * i: newy = my + dy * i
                        CIRCLE (newx, newy), d, blk&
                        IF brushsize > 1 THEN PAINT (newx, newy), blk&, blk&
                        IF quads > 1 THEN
                            CIRCLE (centerx - newx + centerx, centery - newy + centery), d, blk&
                            IF brushsize > 1 THEN PAINT (centerx - newx + centerx, centery - newy + centery), blk&, blk&
                        END IF
                        IF quads > 2 THEN
                            CIRCLE (newx, centery - newy + centery), d, blk&
                            IF brushsize > 1 THEN PAINT (newx, centery - newy + centery), blk&, blk&
                        END IF
                        IF quads > 3 THEN
                            CIRCLE (centerx - newx + centerx, newy), d, blk&
                            IF brushsize > 1 THEN PAINT (centerx - newx + centerx, newy), blk&, blk&
                        END IF
                    NEXT
                NEXT
            ELSE
                FOR d = 0 TO brushsize STEP .2
                    CIRCLE (mx, my), d, blk&
                    IF quads > 1 THEN
                        CIRCLE (centerx - mx + centerx, centery - my + centery), d, blk&
                    END IF
                    IF quads > 2 THEN
                        CIRCLE (mx, centery - my + centery), d, blk&
                    END IF
                    IF quads > 3 THEN
                        CIRCLE (centerx - mx + centerx, my), d, blk&
                    END IF
                NEXT
            END IF
            lastmx = mx: lastmy = my
            stilldown = 1
            DrawMenu: _DISPLAY
        ELSE
            stilldown = 0
        END IF

        'if right click, fill sections with random color
        IF _MOUSEBUTTON(2) THEN

            _FREEIMAGE undo&
            undo& = _COPYIMAGE(_DISPLAY)

            IF randfill = 1 THEN
                r = RND * 255: g = RND * 255: b = RND * 255
                fill& = _RGB(r, g, b)
            END IF

            _DISPLAY

            SPAINT mx, my, fill& ', blk&
            IF quads > 1 THEN
                SPAINT centerx - mx + centerx, centery - my + centery, fill& ', blk&
            END IF
            IF quads > 2 THEN
                SPAINT mx, centery - my + centery, fill& ', blk&
            END IF
            IF quads > 3 THEN
                SPAINT centerx - mx + centerx, my, fill& ', blk&
            END IF

            DrawMenu

            _AUTODISPLAY

            WHILE _MOUSEBUTTON(2) <> 0: N = _MOUSEINPUT: WEND
        END IF

    END IF

    'get keyboard input
    key$ = UCASE$(INKEY$)
    IF key$ <> "" THEN
        SELECT CASE key$
            CASE CHR$(32): CLS , wht&: DrawMenu 'scpace clears screen again
            CASE "1": quads = 1
            CASE "2": quads = 2
            CASE "3": quads = 3
            CASE "4": quads = 4
            CASE "+"
                brushsize = brushsize + 1: IF brushsize > 50 THEN brushsize = 50
            CASE "-"
                brushsize = brushsize - 1: IF brushsize < 1 THEN brushsize = 1
            CASE "U": _PUTIMAGE (0, 0), undo&
            CASE "A": Smooth
            CASE "S"
                saveimg$ = IBOX$("NAME OF BMP TO SAVE-> ", 40, _RGB(255, 255, 255), _RGB(96, 96, 96), 0)
                IF saveimg$ <> "" THEN
                    IF LCASE$(RIGHT$(saveimg$, 4)) <> ".bmp" THEN saveimg$ = saveimg$ + ".bmp"
                    SaveAsBMP saveimg$
                    a$ = IBOX$(UCASE$(saveimg$) + " SAVED!", 0, _RGB(255, 255, 255), _RGB(96, 96, 96), 2)
                END IF
            CASE "F"
                new& = ColorPicker&(200, 150)
                IF new& <> 0 THEN
                    randfill = 0
                    fill& = new&
                END IF
            CASE "D"
                new& = ColorPicker&(200, 150)
                IF new& <> 0 THEN
                    blk& = new&
                ELSE
                    blk& = _RGB(0, 0, 0)
                END IF
            CASE "E"
                SELECT CASE eraser
                    CASE IS = 1: eraser = 0
                    CASE IS = 0: eraser = 1
                END SELECT
                IF blk& = _RGB(0, 0, 0) THEN
                    blk& = wht&
                ELSE
                    blk& = _RGB(0, 0, 0)
                END IF
            CASE "R"
                DO UNTIL INKEY$ = "": LOOP
                SELECT CASE randfill
                    CASE IS = 1: randfill = 0
                    CASE IS = 0: randfill = 1
                END SELECT
            CASE "L"
                openimg$ = IBOX$("IMAGE TO LOAD-> ", 40, _RGB(255, 255, 255), _RGB(96, 96, 96), 0)
                'if filename given
                IF openimg$ <> "" THEN
                    'if file exists..
                    IF _FILEEXISTS(openimg$) THEN
                        'test loading image
                        o& = _LOADIMAGE(openimg$)
                        IF o& = -1 THEN
                            a$ = IBOX$(UCASE$(openimg$) + " NOT VALID!", 0, _RGB(255, 255, 255), _RGB(96, 96, 96), 2)
                        ELSE
                            _PUTIMAGE (0, 0)-(_WIDTH - 200, _HEIGHT), o&
                            _FREEIMAGE o&
                        END IF
                    ELSE
                        a$ = IBOX$(UCASE$(openimg$) + " NOT FOUND!", 0, _RGB(255, 255, 255), _RGB(96, 96, 96), 2)
                    END IF
                END IF
            CASE CHR$(27): END
        END SELECT
        DO UNTIL INKEY$ = "": LOOP
        _DISPLAY
        GOTO main
    END IF

    _AUTODISPLAY

LOOP

END

SUB SPAINT (x AS INTEGER, y AS INTEGER, clr~&) 'Color everything in the X, Y position regardless of the border color.
    'SUB by Petr
    DIM m AS _MEM, m2 AS _MEM

    m = _MEMIMAGE(_DEST)
    W = _WIDTH(_DEST)
    H = _HEIGHT(_DEST)
    P = _PIXELSIZE(_DEST)

    SELECT CASE P
        CASE 4 '                             image is 32 bit image
            Virtual = _NEWIMAGE(W, H, 32)
            m2 = _MEMIMAGE(Virtual)
            Back~& = POINT(x, y)
            Back2~& = _RGB32(1, 1, 1)
            Empty~& = _RGBA32(0, 0, 0, 0)
            DO UNTIL a& = m.SIZE - 4
                a& = a& + 4
                IF _MEMGET(m, m.OFFSET + a&, _UNSIGNED LONG) = Back~& THEN _MEMPUT m2, m2.OFFSET + a&, Back~& ELSE _MEMPUT m2, m2.OFFSET + a&, Back2~&
            LOOP
            d = _DEST
            _DEST Virtual
            PAINT (x, y), clr~&, Back2~&
            _DEST d
            a& = 0
            DO UNTIL a& = m.SIZE - 4
                a& = a& + 4
                IF _MEMGET(m2, m2.OFFSET + a&, _UNSIGNED LONG) <> clr~& THEN _MEMPUT m2, m2.OFFSET + a&, Empty~&
            LOOP
            _CLEARCOLOR Back2~&, Virtual
            _PUTIMAGE (0, 0), Virtual
            _MEMFREE m
            _MEMFREE m2
            _FREEIMAGE Virtual
        CASE 1 '                             image is 8 bit image (256 colors)
            Virtual = _NEWIMAGE(W, H, 32)
            m2 = _MEMIMAGE(Virtual)
            Back~& = POINT(x, y)
            Back2~& = _RGB(1, 1, 1)
            Empty~& = _RGBA(0, 0, 0, 0)
            DO UNTIL a& = m.SIZE - 1
                a& = a& + 1
                IF _MEMGET(m, m.OFFSET + a&, _UNSIGNED _BYTE) = Back~& THEN _MEMPUT m2, m2.OFFSET + a&, Back~& ELSE _MEMPUT m2, m2.OFFSET + a&, Back2~&
            LOOP
            d = _DEST
            _DEST Virtual
            PAINT (x, y), clr~&, Back2~&
            _DEST d
            a& = 0
            DO UNTIL a& = m.SIZE - 1
                a& = a& + 1
                IF _MEMGET(m2, m2.OFFSET + a&, _UNSIGNED _BYTE) <> clr~& THEN _MEMPUT m2, m2.OFFSET + a&, Empty~&
            LOOP
            _CLEARCOLOR Back2~&, Virtual
            _PUTIMAGE (0, 0), Virtual
            _MEMFREE m
            _MEMFREE m2
            _FREEIMAGE Virtual
    END SELECT
END SUB


SUB Text (x, y, textHeight, K AS _UNSIGNED LONG, txt$)
    'Text SUB by bplus.
    DIM fg AS _UNSIGNED LONG, cur&, I&, multi, xlen
    fg = _DEFAULTCOLOR
    cur& = _DEST
    I& = _NEWIMAGE(8 * LEN(txt$), 16, 32)
    _DEST I&
    COLOR K, _RGBA32(0, 0, 0, 0)
    _PRINTSTRING (0, 0), txt$
    multi = textHeight / 16
    xlen = LEN(txt$) * 8 * multi
    _PUTIMAGE (x, y)-STEP(xlen, textHeight), I&, cur&
    COLOR fg
    _FREEIMAGE I&
END SUB

FUNCTION ColorPicker& (xpos, ypos)
    'ColorPicker& Function by Dav, SEP/2020. FREE TO USE FOR ALL
    'Function Returns color picked by user if one selected.
    'If no color selected before Closing, function returns 0
    'Click CLOSE to close the ColorPicker image.
    'ESC key cancels selection and closes picker too.
    'The xpos/ypos is x/y point on the screen to place colorpicker

    '=== Save users display status
    DisplayStatus% = _AUTODISPLAY

    '=== copy background screen using _mem (thanks Steve!)
    '=== Used this method because_COPYIMAGE(_DISPLAY) didnt always work
    DIM scr1 AS _MEM, scr2 AS _MEM
    scr1 = _MEMIMAGE(0): scr2 = _MEMNEW(scr1.SIZE)
    _MEMCOPY scr1, scr1.OFFSET, scr1.SIZE TO scr2, scr2.OFFSET

    'Create Colorpicker image
    v& = _NEWIMAGE(463, 239, 32)
    DIM m AS _MEM: m = _MEMIMAGE(v&)
    A$ = "" '...COLORPICKER.PNG encoded by BASIMAGE...
    A$ = A$ + "haIkMo7KDGOh77_oaBfFFfOhBL9c5gGWaX9BRK62K46AkHnS9I=`09EP<4V="
    A$ = A$ + "e25F]0eB;]jK;#YFXUEJQJGM573`644fjGM:62H66L42I^89^HF<co`T]oHo"
    A$ = A$ + "anW]TUUk;O2BnLONnmjek3L7m>li;cS4;]LohSGjC_[gM=C6WciL>WciL>Wc"
    A$ = A$ + "iL>WciL>WciL>WciLOFMgBE9=CX6XN80S0C0W7n48C2O2LNH2H480e3e0c4^"
    A$ = A$ + "5XZHUa7hn4hl`4`8#0Z7Z1V9L;#boQOFngVWjlLWGjhUNN]SGkiAW:SK^U[]"
    A$ = A$ + "lUDW:cUmbnoNZbCf>]MJkdfYVnIk\bR]CKWf>o\CkdEn=KWEVBc:SC0I:[oV"
    A$ = A$ + "IUa7h\MJkd=m>KWEVBc:SC0I:[oVIUa7h\MJkd=m>KWEVBc:SC0I:[oVIUa7"
    A$ = A$ + "h\MJkd=m>KWEVBc:SC0I:[oVIUa7h\MJkd=m>KWEVBc^e?go9QI1;0NB80_0"
    A$ = A$ + "LLhL`73oW4nHhL`aQG02`C2;0V5L[`W;f]2c2F0lT#0N1hh`iP?6n?anHhL`"
    A$ = A$ + "aQG02`C2;0V5L[`W;QK5V5\0h9Q0l2`aQc1O<lORma`iPS3_04PW4F0<;hFQ"
    A$ = A$ + "?G\2mk?k:?V]c:CYIf>]MJkdfY[h>KWEVBc\MJkdfY]CGaMf>[<UVIkdfY]C"
    A$ = A$ + "KW^Rk\MFI:=cfY]CKWf>M5gIk\bDJV]CKWf>]Mj:^cfIUYd<KWf>]MJkdELW"
    A$ = A$ + "]c:CYIf>]MJkdfY[h>KWEVBc^]_ho:QI3;4J02```aPc2O4l_BhSPc273662"
    A$ = A$ + "#3`2QI3g6l5SMK`\Q52=01HHhH`IQ?2nGan8h\`aPQQ0d0\#Hf`]1Oa4^=Hf"
    A$ = A$ + "`2Q6P0<<L<h\`71o[HO4LFhH``#0J0F8<KhfP_H\2mk?k:?V]c:CYIf>]MJk"
    A$ = A$ + "dfY[h>KWEVBc\MJkdfY]CGaM5[fiMOgIbl\?KV<o_o_IbLZC5[gNcTiaOl<I"
    A$ = A$ + "^iK>oom_okObmoloDhG>R>OR>oR>O_J^LT[C[X[GIOJ59j?Knc?oWNAG^cge"
    A$ = A$ + "[LY#_lUVIkdfY]CKW^Rk^FKWcJFIbl7n35fie#3=i]Ql]X>EQdifgn:\;7AO"
    A$ = A$ + "Mi[A5miR>?oKo]Ynd:j[Ib>mR>=BkRjWf>]MJkdfId\MFn^[UfiBFBj?onX?"
    A$ = A$ + "jbg7eRIk<jngmn_Oj^L4meW[NGdOFJ?]V\[Gf>]MJkdfY]cK<gEKk<ja[lZM"
    A$ = A$ + "AM6f]bgVZfiEC[;JAomhYEQNOGceR^ogf>]MJkdfY]cKlgEKk<ZoM]<f3CcG"
    A$ = A$ + "KfRniAN]\XonIOO>_FGfo\I]MJkdfY]CKWgH^[VfiDMO>GcJ^L38jiDcT=NO"
    A$ = A$ + "nbgbGk<OgWcX?GdUSXWoB5bUSX_f9KAoL=Sj\AGgcgoO3AOnb]fiMlUoW9<7"
    A$ = A$ + "HA#3#066>:l>`72oc4n#hMPS2331X1HA`LPk0nba^3H>`RP6P0<<LDhMP?4n"
    A$ = A$ + "Wan#hMPS2331X1HA`LPk0nb9L7`LP51=01HHhX`k0O8l?SmQ`k075662#3`R"
    A$ = A$ + "Pi0g1lUSU[Ik\lMG=]cle4Rj:5JS]Hd>cg^B7[#_L\a=>iO=A??M;T[oIOIM"
    A$ = A$ + "ZJWAONZ#O>5WVIkdfY]CKW^Rk^JJWikna5MO=;Tk7Gdb^CT_=I]cYjaHm:g7"
    A$ = A$ + "^2mbAaX9VVfIQd8]MJkdfY]CGig^JJWikaR==]c\Ol9cgV\fIQNjGXOMi[e5"
    A$ = A$ + "mL8bfY]CKWf>]MjRV]c2[M6][lJ#9j[?G?N[AbnjT]CKWf>]MJkl6cIk<n[["
    A$ = A$ + "#NMg4mlPZ#kKf>]MJkdfY]cK<W]ch_^XO^W5bRNMLV[gO7\MJkdfY]CKWOfH"
    A$ = A$ + "f>CNiX#Oo5<JCem1MZJWlm8g\?fE<KWge=m?BhnP53[62`NQS0_=l1`o8Q?0"
    A$ = A$ + "NKh8`NQ0\JHa`m1g5LCa^;hnP53[62`NQS0_=l1`o8f70_=L4H_#0F=\HhnP"
    A$ = A$ + "k2^Y4^;hnP53[62`NQS0_=l1`o8f70_=L4H_#0F=\HhnPk2^YHiJf>;OGY\M"
    A$ = A$ + "6mlP]#OO??OkjIk<jnNF8_?fNU5eJW\gKL_JNmMJkdfY]CKWGIf>;OGY\MF\"
    A$ = A$ + "N<8_Nf>S4mhaVVniTmNd[]CKWf>]MJkl6cIk<g_GnTfgOiSJ]5Sg;h]MJkdf"
    A$ = A$ + "Y]c[<KWU_cfInOO`;jgKJ5jRjWIohgJkdfY]CKWf>_aLf>Wjg3ISnMDJQnNO"
    A$ = A$ + "OJN_A`W[#f>]MJkdfIUiliIKQmn_NdmWl`7>oW>A;kgKi;GN=ZHkdfY]CKW^"
    A$ = A$ + "Rk\MVlegiTmn5dEnMEFd___WZW7Af>]MJkdfY]cK\W]c2k[;k[GA?6^iKGii"
    A$ = A$ + "<DiBkL6glO?QZQU0[12`NP33W2^8lgChR`YP33k12`JPU0E3c0^iHc0Z6F2\"
    A$ = A$ + "680k1><L:hR`O?f5QC176f34Pe0;1Z6V1Lc9<3XJH9`JP0\7h``YP;2omHG4"
    A$ = A$ + ">5LHH?#0F3\4XJH6`=7;GcfIik\MVnfITlMO?;dgOL]MJkdfY]CKWEVKjlg1"
    A$ = A$ + "IIoJj8O[L\MV_oo7\MJkdfY]CKWgH_Rm_k[CCk\#K1UjOoMF8GN]MJkdfY]C"
    A$ = A$ + "KW^[\[Vfi6ghTOj5mHIVf_^YZ54mj3Q_F>^bmI=Ok:?oNbgUSXE8G>R^<TMc"
    A$ = A$ + ">O?V]5j?_cLmJD9jeCZ]CKWf>]M6=KWU_kZYM6e6bgRN<MSj6i[_4meLef2R"
    A$ = A$ + "fE^_Mika?>je;BJ_LT_G7WGijeDmn=DQLocW\EX_6?Cc\MJkdfY]CGaMG=]c"
    A$ = A$ + "YZaD8;jiZJaXM>E?WGCkUS[VNGf;kF\]CKWf>]MJkl6cMef>_FJFijaU<];k"
    A$ = A$ + "WS^5bkI1iJAombe?3edln0?Gf]HKWf>]MJkdfi=VkZ]M6Y#NO2PKbNNoTfag"
    A$ = A$ + ";PBKo<GMc\O<YCck3lA;jh`lWoenmQ]Dd>_WKiCBHN#]#S#06267>9lN`WT`"
    A$ = A$ + "k1W467622#S#]`lPk1^UHg3<?XFXA8031S3W4N?hCRmN`9QaQQP0d8D;<?hN"
    A$ = A$ + "PK9Qk1V7D;d84PQPaQC2_7l9aN?hT`h`##0J4Z5V7L?`]4;GcfIik^FJWARN"
    A$ = A$ + "_hIOkKZKXAoN^T?nX5cfITXWK#CEc;jcOUW3ACUXWSACeS=MdekNk=go>ldf"
    A$ = A$ + "Y]CKWf>]MNSi^FKWI;ZW5eKbnmb^Xk;fTmk6jBUXNNdi;_L4mWG\>mRj_ijg"
    A$ = A$ + "IWG_TVIkdfY]CKW^Rk:V]CIkdfY]CKWf>o\`\MFI:=cfY]CKWf>M5gIk\bDJ"
    A$ = A$ + "V]CKWf>]Mj:^cfIUYd<KWf>]MJkdELW]c:CYIgkgh_V`32?6\F8032_<L2h2"
    A$ = A$ + "`O=Q;0W0NIH#80[5N<h1Qk5n6a^Gh1Q73F;4P1QG6>1L1h_6k2`9PG6642`J"
    A$ = A$ + "Q73N#hNQ_A2g;lP`S1[52`P`;3W0^0lGSM1h4`;3321H]`S1?8L_`g8FQnmW"
    A$ = A$ + "MU7cfIUYd<KWf>]MJkdELW]c:CYIf>]MJkdfY[h>KWEVBc\MJkdfY]CGaMf>"
    A$ = A$ + "[<UVIkdfY]CKW^Rk\MFI:=cfY]CKWf>M5gIk\bDJV]CKWf>]Mj:^cfIUYd<K"
    A$ = A$ + "Wf>]MJkdELW]c:CYIcjfo;9l``bPe21H#hP`K0W3n;9L>h=P32321H]`bP76"
    A$ = A$ + "V5LkaV5l``bPe21H#hP`K0W3n;a>7l6`1Q1Q0\FHI`33c2^m4V5l``bPe21H"
    A$ = A$ + "#hP`K0W3n;a>7l6`1Q1Q0\FHI`33c2^mH5jgOfEN<KWEVBc\MJkdfY]CGaMf"
    A$ = A$ + ">[<UVIkdfY]CKW^Rk\MFI:=cfY]CKWf>M5gIk\bDJV]CKWf>[\KWZlU]c:;f"
    A$ = A$ + ">]MJkdfYVnIk\bR]CKWf>_a_MjL^Y_IkdfY]CKW>W;MKfgiO>Qi3;7F74PM3"
    A$ = A$ + "70N=h\`O>Qc2_6L0Hg#0F7\LHn`\Qk<f\Qi3;7F74PM370N=h\`O>fIQG3>0"
    A$ = A$ + "\K80[3F><OHf`MV`\Qi3;7F74PM370N=h\`O>fIQG3>0\K80[3F><OHf`M6c"
    A$ = A$ + "iLUGcfY]CKWf>M>GjV]CKWf>]MjL^d=KWf>]MFif>o_ogoKVgomOo9eOj?mW"
    A$ = A$ + "bLQ;LQ<WolWOBm^_kkVigokomCZCNbCVi]N[gJBMRCLR<ofOk_MBmKn=oV<_"
    A$ = A$ + "j[nZI>lQ?L>=nhSWiGo[oeInEoZOeTJ\a6;c_hGl;b<b8S<Y6L`1clcoiolL"
    A$ = A$ + "JGkJGIjYWNb[]^e]ViIOfW=_J_mfcdJ[]VC]dB;IJZYVblcnIo\LJM[KMIFc"
    A$ = A$ + "JFCVj[_n9EMeEGVE^bEViWlCn9idBGjBc\TU\TlJ1;H1InAoXODNm0?`3TCo"
    A$ = A$ + "PO`?8cgokomclmnNO_9eLVcLblMn>OW<cLVcLBm]ofOk<cH6c8cMOggM>MWG"
    A$ = A$ + "jkQNkgn]?YnVOc_IV_nGo[Wi[menJCZ_jGm[Vi[lEn:I^YKjVbY_dGj;Ui;l"
    A$ = A$ + "5n2CZ?oWocWYZZZ:QomonOKkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]"
    A$ = A$ + "MJkdfY]c:`fiLWa5CX6H5#C#060f?<1L6hR9L6H2Ho`0#0J2F1D3<GH6aV;D"
    A$ = A$ + "3\2X98030k7V0>3LaHW1V0f?<04PVPE0e0c5VA2c5Z1F1d44P1Pm3C0W1^H\"
    A$ = A$ + "c0C0k7602#C`:PJPi2c8V]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY"
    A$ = A$ + "]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]M"
    A$ = A$ + "JkdfY]CKWf>]MJkl6[fimo]nS9\0HU`C11HG`nPS3W6nS9LJhh`nPM11hYPE"
    A$ = A$ + "2;0^OhK5knQ50[4N:80k2f7LLhd`O<fYQS3k3f54PW2F9\0hnQ_E2g?\0HU`"
    A$ = A$ + "C11HG`nPS3W6nSa>=LLHO`^P0lD`:Q50g?l]RIkdfY]CKWf>]MJkdfY]CKWf"
    A$ = A$ + ">]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY"
    A$ = A$ + "]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>_aZM>_INn4F4\:XI80m3S175>9Ln"
    A$ = A$ + "4>9LDH<XO80=3[2F4<?HVaV7\8HE#c#0j763>:LBhla>9LDH<XO80=3[2F4<"
    A$ = A$ + "?HV9<?HA`ZPVQ0d?<6LDhT`iSMBhX`H#o#0J6F5\8HN`<SIkdfY]CKWf>]MJ"
    A$ = A$ + "kdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKW"
    A$ = A$ + "f>]MJkdfY]CKWf>]MJkdfY]CKWUk]c7jkn^9lX`C0=31XOh5QG1NChMCh=QG"
    A$ = A$ + "1NAXO80=3?1lX`31OgH?4lX`C0=31XOh5QG1NChMSmV`[0_8d?4PVQW0NDhQ"
    A$ = A$ + "P_K2?4lX`C0=31XOh5QG1NChMSmV`[0_8d?4PVQW0NDhQP_K<KWf>]MJkdfY"
    A$ = A$ + "]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MFng>M>gdc\MJkdfY]CWcU^Ikdf"
    A$ = A$ + "Y]CKW>W;McfY]CKWf>M>GjV]CKWf>[#KWQB\\fY3UF9_NEEYedd1a#VZ:YBN"
    A$ = A$ + "NEJoWYYK6V94:]BcNTiNV4Z5Z3F?4PnPAQaQG7>C2_><><:d74Pe3e1e2?2<"
    A$ = A$ + "gH?2D;D7\N80m1S2S3_>LVH_><><:d74Pe3e1e2?2<g4N4XFX>Hm#0j36567"
    A$ = A$ + "NMh<aNMHLHDX?80[7Z3Z5N4H^abi^>n=]\MN]O#dfY]CKWf>]MJkdfIj>8Jk"
    A$ = A$ + "dfY]CKWf>]MJk<M74]MJkdfY]CKWf>]MV^3Rf>]MJkdfY]CKWf>Cg1AKWf>]"
    A$ = A$ + "MJkdfY]CKWYkPX]CKWf>]MJkdfY]cdM#dfY]CKWf>]MJkdfIj>8Jkl6[fI=E"
    A$ = A$ + "OZ4F:D?\180k461>4<1LZ4V0>4<2\C80K0Z7F:D3DM\JPU2e3K02`>QAP31C"
    A$ = A$ + "0W:f4`QPAPM21H3#m`BQJPZCX6HY#m`6P0\CH4h#`4`YR=1L8H4HW#0f0D?\"
    A$ = A$ + "DX6XjHiLG7oVFf>_f?8JkdfY]CKWf>]MJk<M74]MJkdfY]CKWf>]MV^3Rf>]"
    A$ = A$ + "MJkdfY]CKWf>Cg1AKWf>]MJkdfY]CKWYkPX]CKWf>]MJkdfY]cdM#dfY]CKW"
    A$ = A$ + "f>]MJkdfIj>8Jkl6[fi2OPg:QU3=0K42`>PQQ3073N[4>6L0HHH7#0f8d0\L"
    A$ = A$ + "HQ`34KQ`bQ6P=21H7```1PS1_E\S17066f14P=2=0;7F8l09\#Hi#3`6Q0\3"
    A$ = A$ + "HHh0`aPg:faP3033k02`6Q6PU3;4NPHiLG7oVFf>_f?8JkdfY]CKWf>]MJk<"
    A$ = A$ + "M74]MJkdfY]CKWU1]CWc=]=KWf>]MJkdiLYKf>]MJkdfYciBg\MJkdfI5Jk\"
    A$ = A$ + "ZB\\fY3QBZTWGEEB=MM#\j;maUB9_FEJoY[>=Mc`<EEEYEJV]CKWf>]MJkdf"
    A$ = A$ + "Y]c<YJf>]MJkdfY]CKWf>cTZ]hOh_;Q77F=d24PNQm2_4L4hgU`APG2f;d;4"
    A$ = A$ + "PFPE3?>\Hh76Ka`S3[6J12#_`NQG2>2lkRM4hUPm2m21X5He`S3;6nQ9\Hha"
    A$ = A$ + "QE3]01XGH_`;171nMa>2lB`NQNQ0d2\JhaQ53o`HiLf>]MJkdfY]CKWf>]MV"
    A$ = A$ + "afY]CKWf>]MJkdfY]c;?KWf>]MJkdfY]CKWf>_>Oc#KWf>]MJkdfY]CKWYkV"
    A$ = A$ + "Qf>]MJkdfY]CKWf>Cg=3]MJkdfY]CKWf>]MV^K6JkdfY]CKWf>]MJk<Mg<\\"
    A$ = A$ + "ZMFK=CT`ZP6QFP0d;<4<6<><A2S3S131m21X5XAHE#]#=aZ5F5d8d24PNQQP"
    A$ = A$ + "aPaQ9R=><6<4d;4PFP6QE1e2eT#]`ZP6QFP0d;<4<6<><A\aQaPQPNQ0d2d8"
    A$ = A$ + "\:XFXVHiLf>]MJkdfY]CKWf>]MVafY]CKWf>]MJkdfY]c;?KWf>]MJkdfY]C"
    A$ = A$ + "KWf>_>Oc#KWf>]MJkdfY]CKWYkVQf>]MJkdfY]CKWf>Cg=3]MJkdfY]CKWf>"
    A$ = A$ + "]MV^K6FFe>Gf?nECX>H]`C31hiQ1QAQ32_J2746564NN80?=\FX>HI`?>fbP"
    A$ = A$ + "jPe2?=4PW76465>8lZa>8<:<8ll#0NJH]#M`bPOL2;3Z3F;ld#0NNH#HDhP`"
    A$ = A$ + "[6kP`X`P`c31hYQe2e1;3naaL>Gie\MJkdfY]CWcU^IkdfY]CKW>W;McfY]C"
    A$ = A$ + "KWEV]cXOdMUBI_Z[:DBUl:FXd:kcZZ[ZT:iE[Z:YbNEERoW4gf8DJUhljBo1"
    A$ = A$ + "UBYIf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWLf>]MJkdfY]CKWf>]"
    A$ = A$ + "MnYA6KWf>;kKW[H97>QjQVPFQ0d3<0<2\Oh`9\OH4H0X780]2=1e3[0FB\E0"
    A$ = A$ + "e3=1]21X7H0H4Ho`QS]OH4H0X780]2=1e3[0FB2[0Z7J2J52#?`0`8`nQ37K"
    A$ = A$ + "o`8`0#?#0J5J2Z7F1\THiJf>]MJkdfY]CKWf>]MnYA6KWf>]MJkdfY]CKWf>"
    A$ = A$ + "]MJkdfY]CKWf>]MJklbgf`fY]CKWf>]MJkdfY]c2Hf>]MJkdfY]CKWf>]MJk"
    A$ = A$ + "dfY]CKWf>]MJkdfY]CKWLf>]MJkLj[M^ZUNX4J0J6f44P]3m333S17:QaPQQ"
    A$ = A$ + "nQ]31HC#c#3`ZPU6KE#3#c`VP0\MXOHHH<h#a6366j7f>4P=1=3=0[2FJ2[2"
    A$ = A$ + "J0J6f44P]3m333S17:fH``#o`fQ0\9XIX1HE`BSU[IkdfY]CKWf>]MJkdfiW"
    A$ = A$ + "6I\MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]c;OK3KWf>]MJkdfY]CKWf>;P"
    A$ = A$ + "IkdfY]c:cfYciVnV]CKWf>]MjL^d]jFanCXAHm#K#0j6j36265fO2S231m1M"
    A$ = A$ + "31X=Hm#S#M`:RE7d8\NX=80M3m131S2k?fX`##O#g#0J3F?d8D7\R4Z3J4F?"
    A$ = A$ + "d64P^QnPQPAQm7KDH8X?XK80]1[7J4Z3FA<WcEN=KWf>]MFQf>Sni4F:Ue2G"
    A$ = A$ + "jS;UbN_DEEEBUlHHEUFI]Z3EEBUlV6EEB==Mc`;M8=DBUVIkdfY]CKWf>]MJ"
    A$ = A$ + "kdfY]CKWf>]MJkdfY]CKWf>]MnoKf>]MJkdfY]CKWf>]MVafY]CKWf>]MJkd"
    A$ = A$ + "fY]c;?KWf>]MJkdfY]CKWf>_>Oc`bZfI3odOI2[3f8d64P^QM0k666nU9<<\"
    A$ = A$ + "KH7#g#0J3f8\>X1hW6[1HM`6QfP0d=\3Hg```_<f``^QM0M31X=HS`jP6POJ"
    A$ = A$ + "2=0[3f8d64P^QM0k666nUa66f=\3XK80]1K4F7d0lCSUcIkdfY]CKWf>]MJk"
    A$ = A$ + "dfI6KWf>]MJkdfY]CKWf>_l\MJkdfY]CKWf>]MJkljl=3]MJkdfY]CKWf>]M"
    A$ = A$ + "JkdfY]CKWf>]MJkdfY]CKWf>]MnYcfY]CKW9W]CKWf>]MJkdfY]cde>K\nAB"
    A$ = A$ + "XIX5XM80K3j5j76269QQPnQNQ]11XMX5XIXAXnH=2=3]0]31HK#_#o`#`8a6"
    A$ = A$ + "2j7j5f64PfQFPVQ6QjCXAXIX5XM80K3j5j76269f##o#_`fP0d>d2d<d8DO\"
    A$ = A$ + "L>KWf>]MJkdfY]CKWf>cHkdfY]CKWf>]MJkdfiUW]CKWf>]MJk\<XMjL^Y]I"
    A$ = A$ + "kdfY]CKW>W;McfY]CKWf>M>GjV]CKWf>[<KWQZZ^T:kEmUnhBYTWGEEBUlHH"
    A$ = A$ + "EUD9^NEMEUDI_Z^d7G:Ull:DBUhljBgFYD:=[Ye\W4f0d:\I80K5j1f9<0\W"
    A$ = A$ + "460f9d3\E80K6J5f0d4\VH=1K0J5f<4P]2m0k460fC\1PM2m0K52`VQFQ=0="
    A$ = A$ + "1[9QVP=0]2K62`FQNPM230k9f0`>QNP]21Hc#[`6PVPe4;GcfY]CKWf>]MJk"
    A$ = A$ + "dfY]c;ONIkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWGilbfY]CKWf>]MJkd"
    A$ = A$ + "fY]cYNf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWLf>]MJkLj[M^nV6"
    A$ = A$ + "8QFPfP>P0\5XKXGX?HP4j3j5j6f24P>PfPFPe3=5Km#;#K#7#0f2d=d;d7<#"
    A$ = A$ + "\nPNQ^Q]01X3X=X5Hm#C9\NX5X=X380K1j6j5j368FO#_#g`FP0d1d6d2\NX"
    A$ = A$ + "YHiJf>]MJkdfY]CKWf>]MNic;KWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkl"
    A$ = A$ + ":WGf>]MJkdfY]CKWf>]M>ecfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJ"
    A$ = A$ + "kTcfY]CKWCO]cFf`>CHC#k#W#0j2f6\MXGHW9d;\MHK#G#0j4J7f4d2\QH]0"
    A$ = A$ + "K2J7j42#G`fP]3m2k<F_`fQ]1M11XCXMHC#;`6BX5HC#k#W#0j2f6\MXGHWa"
    A$ = A$ + "j5f>\=X;80M2]3K2J1f#\L=KWf>]MJkdfY]CKWY[MjL^Y_IkdfY]CKW>W;Mc"
    A$ = A$ + "fY]CKWf>M>GjV]CKWf>[<KWEEEEUDI_[Wol>?mY?M9Ef;4Z^T:iiEXT:aomj"
    A$ = A$ + "BOLYDRK7NY?^DJjjflCe\MJkdfIUKk\D=KWf>]MVoIkdfY]CKWCeY]]CKWf>"
    A$ = A$ + "C^fJ]W4J7j0j42#G`FP]1M3mT#g`fP]0M11XCX3XMX=XeH]1]3M0M21X;H;`"
    A$ = A$ + "fP^QNRe=\=H;#G#0j4j0J7J3J=QfPfQ>P>Q0d5\5HK#g#?aj6f6\5X;80M2M"
    A$ = A$ + "0]3]1]6;GcfY]CKWf>]MJkdfY]cXIkdfY]CKWf>]MJkdfiU?_\MJkdfY]CKW"
    A$ = A$ + "f>]MJkdfY]CKWf>]M>IWff>]MJk<i\MJkdfY]cYjdffY]CKW9W]cdf>cjOgf"
    A$ = A$ + "Y]CKWf>]MJkdfY]CKWf>caY]]CKWf>C^>flFCXcY`c01hiP^V2K1fJ2K1jJ:"
    A$ = A$ + "lL#0N6XcY#7`Vc\e>nDMVeonEnhliIP0lL#GCQ]0K=fFP^V2?74PW1jL:d1\"
    A$ = A$ + "i4j0jL:l<#0N>X[Y`FP]6K;#GCQW32`c0M>5j0fL\L=KWf>]MJkdfY]CKWf>"
    A$ = A$ + "SV]CKWf>]MJkdfY]CKWGnlbfY]c?3g>_R>f\]CKWf>]MJkdfY]CKWf>]MVcC"
    A$ = A$ + "KKWf>]MVLf>]MJkdfiDMJKkdfY]cTcf9KUiX?>E]c9kcIkdfI9^MNmjkSHkd"
    A$ = A$ + "fY]cTcfY]CKWEV]CWciL>WciL>WciL>WciL>WciL>W;OkoC[%%L2"
    btemp$ = "" 'decode string data to image data
    FOR i& = 1 TO LEN(A$) STEP 4: B$ = MID$(A$, i&, 4)
        IF INSTR(1, B$, "%") THEN
            FOR C% = 1 TO LEN(B$): F$ = MID$(B$, C%, 1)
                IF F$ <> "%" THEN C$ = C$ + F$
            NEXT: B$ = C$: END IF: FOR j = 1 TO LEN(B$)
            IF MID$(B$, j, 1) = "#" THEN
        MID$(B$, j) = "@": END IF: NEXT
        FOR t% = LEN(B$) TO 1 STEP -1
            B& = B& * 64 + ASC(MID$(B$, t%)) - 48
            NEXT: X$ = "": FOR t% = 1 TO LEN(B$) - 1
            X$ = X$ + CHR$(B& AND 255): B& = B& \ 256
    NEXT: btemp$ = btemp$ + X$: NEXT
    btemp$ = _INFLATE$(btemp$, m.SIZE)
    _MEMPUT m, m.OFFSET, btemp$: _MEMFREE m

    'Put colorpicker image on screen at xpos/ypos
    _PUTIMAGE (xpos, ypos), v&: _DISPLAY: _FREEIMAGE v&

    '====================================

    '=== Now get users color selection...

    '=== no selection made yet
    selected = 0

    '=== main loop
    DO
        '=== Get mouse input
        WHILE _MOUSEINPUT
            '=== Get mouse x/y
            mx = _MOUSEX: my = _MOUSEY
            '=== Only poll this area
            IF mx < (xpos + 473) AND my < (ypos + 243) THEN
                '=== if click button in area
                IF _MOUSEBUTTON(1) THEN
                    '=== if clicked in CLOSE box area
                    IF mx > (xpos + 352) AND mx < (xpos + 457) AND my > (ypos + 5) AND my < (ypos + 72) THEN
                        GOTO donepicking
                    END IF
                    '=== made a color selection
                    selected = 1
                    '=== Get color where mouse pointer is
                    clr& = POINT(mx, my)
                    '=== Make Red Green Blue color values
                    red = _RED32(clr&): grn = _GREEN32(clr&): blu = _BLUE32(clr&)
                    '=== show color selected in box
                    LINE ((xpos + 246), (ypos + 7))-((xpos + 347), (ypos + 70)), _RGB(red, grn, blu), BF
                    '=== Update gradient strip with color...
                    '=== ...only if mouse not in gradient strip area
                    IF mx <= (xpos + 246) OR mx >= (xpos + 457) OR my <= (ypos + 77) OR my >= (ypos + 107) THEN
                        c = 0
                        FOR x = (xpos + 453) TO (xpos + 242) STEP -4
                            LINE (x, (ypos + 77))-(x + 4, (ypos + 107)), _RGB(red + c, grn + c, blu + c), BF
                            c = c + 4
                        NEXT
                    END IF
                END IF
                '=== update screen
                _DISPLAY
            END IF
        WEND

        '=== ESC key cancels picking and closes
        IF INKEY$ = CHR$(27) THEN
            selected = 0: GOTO donepicking
        END IF

        '=== don't be a cpu pig
        _LIMIT 60

    LOOP 'UNTIL INKEY$ <> ""

    donepicking:

    '=== wait for mouse button UP to continue
    DO: mi = _MOUSEINPUT: LOOP UNTIL _MOUSEBUTTON(1) = 0

    '=== if user selected color, say so
    IF selected = 1 THEN
        ColorPicker& = clr&
    ELSE
        ColorPicker& = 0
    END IF

    '====================================

    'Restore background as it was
    _MEMCOPY scr2, scr2.OFFSET, scr2.SIZE TO scr1, scr1.OFFSET
    _MEMFREE scr1: _MEMFREE scr2

    'Restore display status as it was
    IF DisplayStatus% = -1 THEN _AUTODISPLAY

END FUNCTION

FUNCTION BASIMAGE1& 'quadmenu3.png
    v& = _NEWIMAGE(185, 593, 32)
    DIM m AS _MEM: m = _MEMIMAGE(v&)
    A$ = ""
    A$ = A$ + "haIkM5L\TL[SD7eAI2b5T98G#7eeoAI0b1T1Ye^D4[;<KPO\i^hWC2#`ZZ^["
    A$ = A$ + "^kGb8bHV7KFTPPIaR4T4lOm_nGo`ob````````````````hFaOnWoigbh^U7"
    A$ = A$ + "3ScRoh?nS_mGoeOm]o[okokFlgomOo]8]g]ln\#XCFQMBK6XoS_Bjck\ML5g"
    A$ = A$ + "Fae_KinIP9jRMBK7b__HLMh8lKEkkW:VX3nUOiGngh\LL0g_neQ#GN5mmlko"
    A$ = A$ + "n_oafV<A7l3o`?l_aEaa3l9[COV86_aEdN4mQmYfVLGLl#WnKof_mAZCOeJo"
    A$ = A$ + "VPX]hWnYOjYgN4cG[J^LklmN<Ok<`cOGLlX>lSoh?^MO7ijb>eg\^k^iUG9o"
    A$ = A$ + "Hbh#2^kTfSX=>hjC6O?hVCBWZmIW_o\Z]n:hSk`aWFVQL7iIdOn4MU:=LmMW"
    A$ = A$ + "iNYdKCCoTd]B?L5coNBm=d_CKkfYmhXLl9_GZPb6#G5oNG>NdWaTn=#n6YmX"
    A$ = A$ + "fm2c5n<ee757OEKi[:7OJkAT^9fQ8B7nn`IiTlk;GeLA#MO7>nS#WZZ_XOWc"
    A$ = A$ + "Dg2m46_dTb;J[VT^E]W#?5bo[47?6ohSRSO5La\nj:b_LMoAaa3L6>nEDGQ="
    A$ = A$ + "5jjG8n]9]EH<H_[LlY]7g977j\[8ohjnTdn\ihGag[2meT_W4UGl^`TjeTl2"
    A$ = A$ + "]mO5hh[hTAkhTahRjcTgI#oBCh8_ZLlhkZCTW9ieTfQXlVXKWXGoZaaG=o4d"
    A$ = A$ + "6<]n<Y\AN>IN^_ZLl9lgMd_[dKAi=AO]B^#iQg[<7O>7OWiQQd>YnlYcaAjF"
    A$ = A$ + "YgROOBN]:O<7G[CVlMIcaeUadjhZlKZ=LFeN2NgIGGa?=>nTa12Nk>S1mMRS"
    A$ = A$ + "3KR3K`?M>:k8;WQk2\ZnlETS3i=\g4\=2f?7CT]_2LlPO7O;3?3\UKHWSX^T"
    A$ = A$ + "eK1feN;CZSGeJ>L5f=lMSSSiFc_O_[^kCVS3M3hfX?0PLl7Q;NVa=I>nL>nZ"
    A$ = A$ + "eQ`LlO#^?^#OiWQgm<ihhkAWMOGn^aa_2MkW<7_Z__[NOWMfgEfY\nZaa_2M"
    A$ = A$ + "gGA>nEckNdLL\Fo1>kIBhMRS?Y]J7k1n9cainnV`YfIM^^bgKjdkWefh_KLl"
    A$ = A$ + "Y]1CeOOEhhCGcaG9>>VOlELVKnThhk^>WVSoOF6?B>n^f8hZ\=ndj_ih?6>n"
    A$ = A$ + "TeTmCQS_khgckYXW57OWe8gLlILlMGKaG=>n>fhJGKRMEf6OWiS\cLifaF^C"
    A$ = A$ + "\EbD>>FS_[TSSigOek]fM`cPS?mL]LD>ndmYEFNNVLlMZ7PkLdcGKGkfdcGm"
    A$ = A$ + "Zd\37?`DK;o8hh7iKS7QS?]]8cagQc^kN^hZ\=n>ckLR>2bediX?5XMkZF7S"
    A$ = A$ + "Mihkf^LUiIdn4ii>WO#VKl8>GfkbagI\IhLYLULl0WI]aSW?_?P>kI0_[Mk:"
    A$ = A$ + "b_<7o^>cbkFggiLPO4kS_KMLglMWnD^BKSOfnc3m8_7gbfjiZgoI?2>nMik9"
    A$ = A$ + "VP#fbmKL6>nE]oBNVLlPKMeLl0k<g0<GdlI0VGge9ia^]K[BoZg]bLl9]oa_"
    A$ = A$ + "o<Wc9f3\in>VJGR:>nTnLfM>WCihinUWTn[dfhMllLI\CkS:oPn>k[nQm83T"
    A$ = A$ + "g;o:XfoIhM:EN^:obOo?;Shmklm9#FG<9?al6Pl<iihj93DGAn2O^gDM5gf6"
    A$ = A$ + "oF^NR_7?AgaLlYeEd_<l?OCd3?B>>JcgIN2ig1Ikm4m]We?<P^]jgEcoHBNF"
    A$ = A$ + "aIDS[2]oM?C7?<3TOCZC[T?U]chnhGY[fmiW8gLN>iIbjk9eo[b^Q[`^SG]B"
    A$ = A$ + "70M;on>_7nkPJoWEUWAJWTWLn5?W:oPnNWlLJmJRLamoL4M5W7WY]h8bdAd="
    A$ = A$ + "?3>NPYnU`ELL3SGIPm1fDLgb[QaA0nfVih66666666666666666666666666"
    A$ = A$ + "6666666666666666666666666666m8lU0`_oT1^K?_KiSQBF1PONahNAd>l?"
    A$ = A$ + "ocol=>l\USPo6lREQG5^C87:m67Rd4Ym^KSW4RgG_KmjESX>Ee>m\UU9lU<_"
    A$ = A$ + "i>iiCNGT3g9?OZln9aaWdWicl<jO4>C`c_;Mg>_?V3?CoZC6CUGh3^^;il:0"
    A$ = A$ + "6khTjlcRSO6>3lWF?KMhA3`g2n<UgYSC92_kLlMiA?;>N7W1n]a:I7g_:WmN"
    A$ = A$ + ">M7dm=Whg2i]kgOfLXMn6Yih?of0h3>kBccdoA^BNQo8KUNmI:_kd^K>ncWc"
    A$ = A$ + "0IXCfEn`fGM>ncBNgIL:AhMWS3Kf>e6M_:LlX_lG1il:ih_ZcUoMWS3T_[2N"
    A$ = A$ + "5J;FaakTclm[dcBoQi]7o;k;RQ?#_:4O?jI:_kn]k?5>>l7g_:LLhkX179SP"
    A$ = A$ + "_de>5?oMi7BEnjNLo]E5bgON?3m:7FaioDhh0[\1fcVkXh<[N?DM_Yl\#nMb"
    A$ = A$ + "9S98hGikMT7]lYTYES?gLl7?WQ_;5jjg9?>UW]=WI<I<1igQO6_CZTY#6<7o"
    A$ = A$ + "nhh<FegHfGZOg]9Cgg:h>9jA;_EmG_JnkVSoj8Kin`_SaY`HjLk2inIl=7Eo"
    A$ = A$ + "3#We5<7oePc4oFnnIkEXm0cKNU\7QWAohEkSDcaO=hh[6SBn^=j>j37lI5`L"
    A$ = A$ + "#k2hNHkA:OMlGca_G>nZmWEN<:?Sn3EHenEIU]P0?jI;OCNo;KGikVOnYbaG"
    A$ = A$ + "mMnll<_;KYLELl75?j8kCI>H>nm8?gmHDV`QV\Fn_3Ll?UnbOehhC7SbM?Na"
    A$ = A$ + "_2Llkf^aORLlM\5nM_N?VSonPG5>nZeG6WiGPh_1^Sc8IWN;Z;MWAR\NmAba"
    A$ = A$ + "IMF6M1T6ca_nfTS6^3>nTg9kTgWeh]DkoWYOSaLlG7>NH[aXOcWmhG>cIFnI"
    A$ = A$ + "YGaM7?S^0hh?JKhK>nnLVGic1<2h\WNgf5ZC6mJ0I>N6EnN9E8deimO`M>_i"
    A$ = A$ + ">ilCSS3O^Fl_lIC8?^\W1GYj<B\2PgLGL68caoZlMMAlI^=j3oIj71H`kk0U"
    A$ = A$ + "nlCQSWKWDc=iEh<B<5gIoR:NL5^KnM6MbiW677nQW:l<i:W1g]N4m5ZVWg[h"
    A$ = A$ + "j6fY;OEN?d```````````````````````````````````````````````hC7"
    A$ = A$ + "aIT<Of2AllI><R3gCIicQ8olEYMEnSOCUOib[CfEY]kgScWj:mCn>E7nKWXL"
    A$ = A$ + "cYYZ<DY50g;TilUm1<Ejf:MJWnH7M63fW<eUfGA`WiNUoO?noX^V3X^V3EY="
    A$ = A$ + "oKAk[:XT7EN0^IGJAkjZlZR3bj0>TKSWV^<?[jIjZO#oa?CEK9oLCe_IMb:o"
    A$ = A$ + "LdMcO?277gA7ij6RCmn0kOQ[B;2h<3GmK[lGaIMkZkn_En#KTGZcTh4^`4N#"
    A$ = A$ + "nlh?9m#fkJKh`Tk<>TVEe;D>hMaEQgQccYZ_RhlFWeG`_TamoRf?FoXB;2hl"
    A$ = A$ + "V[2hLcci777^CXhfPlgl[^;4hgOamY2O>QInRjMC`KH>KnkoikaGeg`Po2JB"
    A$ = A$ + "m3jF>Pc8OFVII2W9jY_g4bd>jPkV7_377bmSRSge?N57_ZMEm=TEn\?V;PhH"
    A$ = A$ + "oA5cADOS1nB2EJ[lA3:>f^e?EJ3`OkE9CkDnlkH:M0bgGincELL<_4F?L6>>"
    A$ = A$ + "do`7jTS;[GgQSGUfPgEicnZhhlMmjD>^:oHO1HPS`agAG`LL^LP\^cg6D_S5"
    A$ = A$ + "eUX]=OOXoZkWEDLLl=OF?L6>>b_Xl#KQR[=I\:X<ZBK0<_=^^Y6[Rb78MF>N"
    A$ = A$ + "F6jdgG97WU]LM8hfE];EiYZ?2<WDnKE_KLLDGHm`IhhXoS<OP;KEkZBoRahf"
    A$ = A$ + "UF<_]b4loVOEnb^c`acQW57WiSi_GVOfc<n7niNGlU#CWWmIih:kU`cmL5_="
    A$ = A$ + "2ikBn^dR_WfU?IoWiE>F5>=inhNDLL>]lLZ`g[fUS7bLEmkMefQZgK_2>^bf"
    A$ = A$ + "8\nNWaZ4aeIG5lN07Df5=hg\]1>37?KG5nK4?:>^J^PLIQjidl<;g:k75QkV"
    A$ = A$ + "oN4>^bVX?2>>nF7[GWf64]GEcOJGkZ4U9o]f[H>WIlXihANcbPb^8kTWQ>V_"
    A$ = A$ + "gLElUg=K7ZnnoE`aIK07jVc`a_JkZLDK7>e^:?J>NghUbbeInf#8klh;ccoo"
    A$ = A$ + "^ibk`aEOkm\LLelnODLl<WBmL:>nEKGU:K=\S]k^J>NGkU:?ij[J>>_[LlZj"
    A$ = A$ + "QjmJ>^:KDa]3ZbAe^Ri6ZJ3FI3Vc`aid4bZBG];7WU9ULVoN4WFUnAaASbFm"
    A$ = A$ + "ndId_ZgAH>`[hl#E]KMfSNjMhmEaaEQ:kSW3WUS?i>I3?g^Ll^nLcf=ZcfM8"
    A$ = A$ + "PeJEE?W<oME8o>fZbWK7OGhh\^=?6P^m<GN^F<7QWG4fS8LJVHk#D>MYMW_["
    A$ = A$ + "[hh#gXZ[<?LG>N5?7fh1i;FCa:mM8OEjQZhgaf\1Zd1A8T=nkkgim^D5hkj7"
    A$ = A$ + "XSa_5aQj<6WK<_3ln;_V^0AJbgM?iiYWoklj2WCSj^7:[kQl\:]`F08nlcUS"
    A$ = A$ + "Caa1hjJF6PmMbigdegVoVIffWln4;;31bj2TFHSS>M9\OhDmKDfim>YZm6[]"
    A$ = A$ + "0nVb[6770_o10m;g_B>mEg]=ij7c9hh`k;LJHiQAfVfMY5b<7O47gVfa5EeE"
    A$ = A$ + "V7bigTegF=7o8`fb<nK>oIm]B?D5o4m;o>fZfkLkh[87W_[OP>NeMY3N_6PC"
    A$ = A$ + "SjiknK4g>gm#CBkdhjd?LoN:MaAFOKnml\]?gAO[d3EaOdkf9F7TCk>jCS_N"
    A$ = A$ + "XZOjkF^<<<<<<<<<<<<>;jli6Io#`>nVS:o[2WW8^En^3UO>YK=eZl=9LlH?"
    A$ = A$ + "eeE_DeCEnTS7b9Te9nb5>OGUV>OnbIeOI<YmnE7[>W4En21eJTUe;[b_Yn^S"
    A$ = A$ + "^b=GVMeY:on2JkkTEN=OEiO`aFigDFa3cbadj5;[kn<EU3#eI?oEL=k?37?2"
    A$ = A$ + "ZmTDWN^SgXfcQZ0\_lZm<adc=9_OK`n2X[N5bI^^PlQiSE[UC>PmVJF>cm9W"
    A$ = A$ + "38?Ik`cb?og:M1o>:GFk^W3#MA]N8_Z#a7H>h?oco\Loam[oj_nMem`>_\^Q"
    A$ = A$ + "?S>LnSfB^<id5YA]Ohhe;AEWDkQMNoFXTENmfimX2bWEUWJ=jk>_TlJ;[f3#"
    A$ = A$ + "\\7oMdVTe5iOGYCSo6]_M_O`?c[jjI>US7eIFg`aYfgC8^:OO#N]TGYkEU9J"
    A$ = A$ + "?DiM^]EEWhfK\fRlnnWUEV[bk7?T?Ce=INANn8ZdfMn:ZhhlkAiO_RSG]g3#"
    A$ = A$ + "JDmmoEWScmi0M2FWJU?#8kk>Rb:B;GVQ^6]CAJAjHm]Z>Eic9F9[1H>M>PlQ"
    A$ = A$ + "3H\6Q\4b9_gfbHbim#aaEkcmZgSbloE?3GNEmImEPScSEYj<B4a3^IDVZmWM"
    A$ = A$ + "U_k#mmB\W6[f;H[>;f#>EOcQUE`Cbeklo7iCenU5k1EeNKCeWI>O[fc:hgh#"
    A$ = A$ + "NoFb?7ZC:OQWjI#mAMnbOgihlLIRPRScQlN?^JnhA0UkDOgAW?PYJO0]Jnai"
    A$ = A$ + "mOJgL5AnEMV9hm<Oen=7LcZm[Deil\SS[l;1Mkk_:onGecTmeCOJLLEKDDOj"
    A$ = A$ + "hhP_EmmOFoPfi:n5KKZ^c[`4kZ`Q8=X>=a6#E_CRn01G\SWgIk`MhhE_cUi["
    A$ = A$ + "ZgSDSk7?GD?bfl9;?:kPm9aaahTELLeHE`Hnj\[2_WjZ>3MZn_DlAU=iFaaQ"
    A$ = A$ + "L4boDIUCGngc]eQ\D=F\:K]];7GI[alLTil60W9VL#io8beEUM`Ngihif>Nl"
    A$ = A$ + "^ZdaaY\E\bF5IM_J<9#gcYCI[?hcWkZC<_0WcREb:hhLN6aUkgTiBZgMcngc"
    A$ = A$ + "SbagM<7idYlANiggigQ`LligIQ?ikCRS?eOH_bfQEfEYbgMXnfQZoLlMV^jT"
    A$ = A$ + "BVDfbGIG5ENVWk7cK2^1>_Oi0\3dIhhEfIDe7>;GQN_b_NVeOOK#0mWMglgc"
    A$ = A$ + "`aW\^:ELLU_H9g73c[ZlM7ELL^MVKOW\^Fh<o>anKMLLejGQaU`iMDODSGnX"
    A$ = A$ + "]1A8Of:DL>^l[\1LWOYA5#kck`JMn<hhLJDl:eJVb[o2F3iEnGi9[cI4`HVj"
    A$ = A$ + "TeYLLFVDcWU_G9FYKaH\PLdI3DdNQW1fc9o<Q<aSi<B3GFIKZ[NG5mQg=WQG"
    A$ = A$ + "9L7Ll^m_42#7^JOPTKWG9[:oOEW=PfQS_B>c_;>USWOf9g??\mWHiBIGHfoW"
    A$ = A$ + "VgWFIiEEg=7G7Pn96_j:Og1h#MfBGiOU[TEeLWjfOHINl:>NW_#QmK9kbaAo"
    A$ = A$ + "V[2<7?:cX_k9jiLIQiCVG[FEMoMINWIO\BgJ>GU>ejESh`jbWANMeRO_cgMT"
    A$ = A$ + "i#H\O0lIl=?WYEbJl_8n\o1YCFil\Jm1IOQ263Ngl2[TG`]P=IagMHi<;_hM"
    A$ = A$ + "1ffWIiBM6YAomlLY30O8CNOFl>Ik#0fVIEO3Z:MZhheUGaMSaQ?aG]XheibC"
    A$ = A$ + "i[7ZTEF^`hDG9[ZlTKWkl5:Zk#^>iUiZ`fSEbINLeig]F9GZg;ZfG=MemGMD"
    A$ = A$ + "iO>VV^9aeUo1G_cG]Ti1CBg>bj4\[NJ7i\:_I^El_[l=:XOj#OZhZEb5F7fL"
    A$ = A$ + "IYZCCZk66kRSdW9\]o^gE?_Sm?KlnSSdOiA_7ZLOc6666666666666666666"
    A$ = A$ + "666666666666666666666666666666666666666666666666666666666666"
    A$ = A$ + "666666666666666666666666666666666666666666666666666666666666"
    A$ = A$ + "666666666666666666666666666666666666666666666666666666666666"
    A$ = A$ + "666666666666666666666666666666666666666666666666666666666666"
    A$ = A$ + "666666666666666666666666666666666666666666666666666666666666"
    A$ = A$ + "666666666666666666666666666666666666666666666666666666666666"
    A$ = A$ + "666666666666666666666666666666666666666666666666666666666666"
    A$ = A$ + "66_kh?ocolKomOogBlGoeOm]SVfh_iOGml8moaOl7okonOnWoio3aO7?CGi7"
    A$ = A$ + "aGUWEeE^<Rb^C^EUA6MjU>iahiPX=\;4l0`1VTFT_AKK>0nR:mAn7ooZl4l\"
    A$ = A$ + "ZWWOV:nMGIPgUDb]Z<bQ#^Zbk:iaheQSWKWWTfLoNLlof_mKOGnn;ob_lMLO"
    A$ = A$ + ">4lWhIidQWW3AL1bec>>8T_Oogom_YTKEIT3Q\a?g:iahnhh:NC`?nYOjWng"
    A$ = A$ + "me]:]An5YUKc3N0Wf8=o`?l3OGJoaOl7Ua5mg[NN>4a58G?iW;b?EL:i6b86"
    A$ = A$ + "K37RjUZoO0UlHL_Ll:NSZOH>]8>>OgQSG5Gec[TeELl:iVO?6LLd?<[3RPjM"
    A$ = A$ + "S8m#><7omQS?QSeaEVbaag2Rl0OWo:ihP360UADNac`O[Pih:IEE7P<7i;#F"
    A$ = A$ + "Nbck]2iiKKL]Ll:^T:N>^XMYR[DU_:>8\G1hNZb_J\3:>^Jlh`V:inJkhhlk"
    A$ = A$ + "]A0LI57_K<hOG692\]Z<^6>>cQbl\Ecm2SKOG>N4_R32KZ4?K0>?[2:>NUME"
    A$ = A$ + "P]I#ID=NLeH^S#<>557WcO6IKGF1lmU#6^KNbk<VHCS9LLHk3`_fI\:An3kS"
    A$ = A$ + "[2Ef>\:D=ng>NNU]3cLLnIahDjhhAlhm7UnW7c^2VSO]LlZaZXnF]:]AkAUm"
    A$ = A$ + "9jhhQ\4f^;BWR7Z\M8N_R3Mca;:3eH>#Neaai#NNU\<SnRaHQhaSoMIV8hna"
    A$ = A$ + "OLLLelh2N[RS[VcYjkj[6[B87H]#E??6Kk4IEaaAn78hMZnU[\iYJ\G#W0n;"
    A$ = A$ + "WG\ME>27gS7oibage^:WafQ:N#gc[Te>kZ4laXoLF6E_7U]?N>T7WRjm5f^:"
    A$ = A$ + "ll?AolHL<:PgQLoh_VLlMVcYZ_cMNNU\^RS[6GBTolHO0GS3inYSgGZhh[hW"
    A$ = A$ + "Nlh?O>>\UQRg\37Wi:Zeb7fIDeOj>O7#9[Mf><noZa3Qan^ZLi`Zm[BgH>P="
    A$ = A$ + "6kPihG;7G5j\?N57_bNPi`DKB6QX_dc`akf?9A8TEekVHL3MQc`a=^O>>jcK"
    A$ = A$ + "G>>FWbZfnlgj[\mlA:o8Xhh[fKShm]S`akToLMem7O?8JkcfJ8SlJ<2NK>]i"
    A$ = A$ + "nQanc3aU]78nN;n^?V;5?NClkEY5ffY[lc_kXZ_il7UQZ>V;o0idc8nMHSoZ"
    A$ = A$ + "OgLlk7ie_A1<F1EJ1O^bFIIK4`P]gPJ_<MTb_cnhlk^ib0l#F>hgOZVKHENK"
    A$ = A$ + ">nm3\n;EHEJ1g[jI`_?I^DX_o<Rh>Ki_S\dY;Z`:MH^>HHHHHHHHHHHHHHHL"
    A$ = A$ + "Oh8nJ44GNoic[1GgNfo:Uo\L<MM0kT=Pli33n:U:oeB5Zle;WAogi3FZBCEm"
    A$ = A$ + "F97M]Y\?SYBOmZQMme8M[eLF_EUVZccbAAFNVZWG]g0R0JO?jJ[_b?\Di[IF"
    A$ = A$ + "Yo[F?i\NUCSZ^dUnZl]K=HOUgW1kh[AF]FdA0f^]jgAngM65WRlN:4[SnTc2"
    A$ = A$ + "`4>nTeN_kmeEU1j?HGOmbZejG]?d#NVU94gTfdZcfD>TGKikVC?QSG]g=HmQ"
    A$ = A$ + "JOBocol?;KSFMNFbHjhJbb>fkQCF7#l=I^=;O^8En16Em=RkGoeOmkn^?GgE"
    A$ = A$ + "nQ5\NoCeoln7FMf<Di9fWHiW]JOM6b?gn5a5][[dG_Z[1kIhhAmF5GGKTJ=j"
    A$ = A$ + "[j3LehJbjLNo]<1Ek=;5OZZnRmG#N]7_JO=CFoam5[dmZaN`O3XKoi7iSBVD"
    A$ = A$ + "kCigQmI`IK?`N82j6\OBZJSZ>?;:>nZaeTOGXJO[dQ:n5fKDCihLiNeWGT\n"
    A$ = A$ + ";ca[hLZcI:VC9G>G177j[Gec<j>]7AMP3h\Xckc8>4j]0CVGHVSGegL^M<ON"
    A$ = A$ + "afA7GEgAiaS5hA`aInd:Om2GflL^ElFEnfaaaN:;n]#nZl38Ai1MbMcS_:>>"
    A$ = A$ + "g?2oLim=DE#=6kYn2RlLgc]GahQAo9GAMoAaaal1akk:>NE#e73O>kZ6S=2l"
    A$ = A$ + "hLjj7O27?7^KNlEbaIn5o\8O[d5ig5>37?gNQa7Qi5aXb^F?K>^J_k^37WC;"
    A$ = A$ + "??`ZcPT:daai#eiFUO^Genc?27?#eI#[RS3nFn\hPdVGcRlgOQ^58O61bjol"
    A$ = A$ + "HaEQ:kcLGmS7l:<76VSei[GDc_W;;eIi[boeMF>Nf^:<ohE2k`a3mGfoR4eK"
    A$ = A$ + "niaHdD??OF1HI1l5X;IkL0T;c`N68nho[2h\m`mcLgS7OGm?gg1VO377caEc"
    A$ = A$ + "1m8ci\b7>VaMcW?;7WKOQoTOjc_b^:HM4H>>jK28cmHK6Rgo`HNcfjQ;ckVS"
    A$ = A$ + "[j7_Coe=F142iPiXE[GaEaacfEi^icG=77O_Mjc?mmlEfEIR=3EmooZaaESa"
    A$ = A$ + "n\LL57E]n=G97o:Fcj79h_SQc_>7WJl^AM<\YA>0khe5V:KZee9cOj\IHei4"
    A$ = A$ + "K7>>c;DS=C=oR0[dYX\fQScQ#ND[YZRSGeGTZm[jK;MfEIeJBOgHeN[8o=YE"
    A$ = A$ + "Y5]iMQc`acl>DFkJc`YLLehHcQ^_S<E?=US[laFE?_RSGE>AlCfK=_kLl>O6"
    A$ = A$ + "B^_B<WcZdVmclMQc<oT:K6n8hh8=EnQilIWWgc:MjdlLeV^>WEcSG5_RS7YE"
    A$ = A$ + "IOl:oGCFg<QSo^<^5fWQ`noP\?KHU_>1lSlLob[maAihlNkBa_fiMKl]ilJM"
    A$ = A$ + "XVk4GOcee^_S`jDU?QA93lj55?7\SBF?RnM`cSd6??R3U9ZcEee#?V[Oa_YT"
    A$ = A$ + "9<Vm9c[oE3Mn<4^_b#O<aGWXnm[`>CIil\nR1f6H:>NEm=k;EfEWVeCEb0o<"
    A$ = A$ + "Ef[[JoAaoMTfLmHUo[9on<BKWoQiEWSW[[ClO9X]oXnGTc8Sibl\eg:o\R:M"
    A$ = A$ + "ibMW_O\BW>eG_DU>ElLLX_P^jJ^>Rjg:Ij:KG=<<<<<<<<<<<<<<<<<<<<<<"
    A$ = A$ + "<<<<<<<<<<<<<<<<<<<<<<<<<<<<nJQ^k>Y7eMkb>gIBkNo:]:]k6?GnMjTh"
    A$ = A$ + "gike:LOoLTdbbDGkgWhMDeEbgj2`_ROUUi:olddkG9h?4biMW_c#UOEgYE8O"
    A$ = A$ + "EnE:^ndiO9Hmg>YUomMJk>S>lC3Cl7bG]>HR_<[RSY2inoZB3lWW:>^bgkF5"
    A$ = A$ + "OfOK\ck\hL2_CJiO;Of\kNG11XGfE7nY1UocQm;HAHU_Eh<LlX_;ULX^WBDY"
    A$ = A$ + "5l>Uo=61h3TZ^W?h0^;6hbGio#H^FT6ni`m7b>YU3IO<1o<AL:oD[b77fY3_"
    A$ = A$ + "KnhcRSGiWm^:oAZbo1^cM?3WF`CEnl?>oVjkAAl<WTmA91Dj:^>2o[cddZ^?"
    A$ = A$ + "JjhhMj`9Y5j`?AO6aAm]n#?WWgT2Zai\Ckc4oYJ57W[KEnL=5gCY7bne`S`a"
    A$ = A$ + "[d[kTfS`aImBW>lC\_lc`aWL7^NeLLegIQoJBeWO>0oSM>4e1U_2<RGMGJZd"
    A$ = A$ + "3lcnZaagA7J>^^Ol:kB50n;a\^k<]?L0m3GaEhoF=nSLjbo6olH<m\O=DY[`"
    A$ = A$ + "M0;lemMgUS?K>>7bj#caenV`:ohGUo_kZJOPol6U1?nkZ_7cLllhGbiAeccc"
    A$ = A$ + ";YCGaj6EJ_C>>[3=7OoaZ4jg[\OLegIamc1olLLAI[hDio>?n6Vo^377mS7b"
    A$ = A$ + ";^W=Z\Eb[`HEP>l\n5eGAl^=NLEJSlTi?ZkL[:KeDegM5g[k^R82:N;F[Y9Y"
    A$ = A$ + "mAca[dQ7egFoZSc>NL\6dEn^D5_hAHGU9g_U`^8Zk56EMGIgjSbaEgIBEYm>"
    A$ = A$ + "hhffQ_>S7_ZmYj>iDE?j^o>ESGWe1<?#U^GIkZlEgfQAk[JmmkhhIoYM5jFk"
    A$ = A$ + "KlmPcdnXFK7ej:Z^CL#8T=5WSe1<7G=7fZe>JBJ[\1C^^a]AhNM#EO<7OfnE"
    A$ = A$ + "YSS_;V\o9P>OJkSJM>Dle^kR[:k\_B7\ZnPm5#ENGUfZ0VScZi3QgE<7Omn>"
    A$ = A$ + "<?FTW17?K_fY]?Z_M[hhEk?U8Pa8\;7_[>U[;EScX:]EQlHW[^7^bf3LWm3a"
    A$ = A$ + "W87W__WbP7WmE]OEP][P^FMW914ce?Wfhgan3;OG>QmaD>MP7XF;V`6IlMaE"
    A$ = A$ + "N\8\lQW[C7Pk::0FoU_;UhiV[B[j^RFM_B]jN73]a[dQOZLl\>_K>SGin>4X"
    A$ = A$ + "k>C2l9H_F>]XMUS[j>X[:NEiRjYBnFmNNEMBIkiYY]BoT_OmZ^7^bf3LZ>l^"
    A$ = A$ + "iR?:X^[TNdgOAMU7GVZOOU<WcWMS_CnVD_VNGQ=9]CeAlm>6o>eDMhMc5=<<"
    A$ = A$ + "<<<<<<<<<<<<<<NM#WO4B]gH?:jlU=Hm>hhRWSCKf7TXTmEbA\^7h<<eM^CW"
    A$ = A$ + "VfYb0ZOilQmM=MjW_2nkW75Vj;J>;jF3oZmUElL:OOBU\_BN3NBW?l9kWAVV"
    A$ = A$ + "f9b#gN;9GOF]7DNDn^\?Mdaa3NFfgelXhhXOL>^Ena7eN3^CNGaQbm1?U_]B"
    A$ = A$ + "6V\WPVFVa_keYilLlli#>j[jZf[:<7?G>PcV3Ek[:\gBZhhEb[bo[X>kmacb"
    A$ = A$ + "k5<EJanEKU<XfkSAlLLajDbLl8>eIehCm<kl\hhimHgE^O\Zf3Pim9Rjg_:>"
    A$ = A$ + "n>W74enAOgd2I#]7fEeehMX9Y5kQZkVgl>QZfN\OnDWih[bg1U;7enXm^hh:"
    A$ = A$ + "O=d^YMG>NEMEaackM<SSaa3mHdfYV;oEMFUai:6kacYk1lW17_jLS]CJ_2>^"
    A$ = A$ + "J\:im=lMcMNG`ZiLZhZGQ_3:7PMeVd^OeLl#6ckCkG9>>7`lS<7oJihEkibc"
    A$ = A$ + "NFUif^kRSSdVUkGA>>V?\ihWWScfkPiZGU_3:G>:oAlc^Ol#VQ?R#IGUGQaZ"
    A$ = A$ + "0o`hWlIIhI`aEfEIG>n>cilEc^:kTf7=7GUFLVj^KNck4>RMEP]c[>O:CmM#"
    A$ = A$ + "_RfEiEZOl>K7n9jgfNfLlEf4o:lM#idHkZHK7nZaa?[_3jXLL4ZlgA8XfK7l"
    A$ = A$ + "cGIKKeJJFUf>o#GUmRZlogVSoJaag5_2LlEcUXbG?gUfELLN?4XZ7EUYihO]"
    A$ = A$ + "ihH]ZZ2:^#gmQFN>`Hn1EY=KWj>O]8TQZm`8kSV<7oa0f?21MnEcaIO74kgJ"
    A$ = A$ + "ZnMl]Mh7Pbnh8H7=U?#ZKm0cnM7\GAZV7aZd2iKR<`nkWLn4Y5jP\??:0VOo"
    A$ = A$ + "ZjUA?HKiMeLl<WYR?emkEca5fF_JN_:^#HCRZlSUWYYMR<4fm[bOoTUC^lD_"
    A$ = A$ + "CH>nnhIi?IDfJLb_GIWb0MnCX>K\1^cEh_OV:3ao?W?Zm9kTjW]MXQQQQQQQ"
    A$ = A$ + "QQQQQQQQQaS4Mn?X7U_lX[lDW]^ZdGU6T7\?9jXegSj7QbYAmKZjj[ROFjC2"
    A$ = A$ + "khk?^:\SObYkN`>k_ObaSf#NMaWFOInaAlS#\<Zb3ekD[>7#l_SjjEjWUnd`"
    A$ = A$ + "Tke][^olMlC>Mb7FC6VSSm88c7Dn`5E8g?gAmS#\<fmKMk=C^\N6nIY?=DEo"
    A$ = A$ + "ImhE^^nZkXB^]5W;3EO#ifaH=]SekS3acckg?enWBEOS0lO9LJ[lS#Ek]`#6"
    A$ = A$ + "SOG5`Jcgaa?ZOF:Wg?[mLg[:VL^1#LGekm:>>gfQkW<egVifGEOcX\baEaa["
    A$ = A$ + ">k3kTfZ_?4b#EohChhlNPaLl7;7We9[lS#lHKgUSc]MX?=F^DL8<NWLhAbai"
    A$ = A$ + "dRjHl<#>DekYLlM??PVSgcaif;LgobjT_[aF4VL>5DSE1k=_LJQM4#0W]PZn"
    A$ = A$ + "9W>FU7177eWlihXS7FaaSj0j3H7oca>Ll\>nCd_h^cm\LEohEfj2__PmnJ57"
    A$ = A$ + "W3icO0caEm=G=NGeMFocRSWOo2l_S`acQMlcBVS?SSS_gG]_Z1ZfcdEkei>>"
    A$ = A$ + "NXockMJ^mTihhLB<9l<ihZaWcOGIG>ncXOLU<m^S9SE1Wm5^NGfH#jjEmScS"
    A$ = A$ + "E1n97el[Z6gN>Dm>dcTS[6oDU\?e^:khWUfQSW?kAORWaXYciDe7nge8:2C7"
    A$ = A$ + "?^ZmGe_Wjm?FN[\SgMcaEYiEb^:OZnI^cHk#doBgicAe_`D>^b^gL0c7VKgE"
    A$ = A$ + "OcoIcaceCU_[hEc^:OZWaXcHk#Pc>Nl:>nT_EXTGDFLJOfLLf>WWQS_[_;`f"
    A$ = A$ + ">lJihicVH5>27GI7=eLiDLLeH5Z\S]JNgX_C>]ElN5o=oN6dCLJNDLlEe?4R"
    A$ = A$ + "Ok[VME>27OG<USG]V9LPiRZaX7Q>KY[Z_ML7FVDlgLMBmNWihVScQ:>Nel#i"
    A$ = A$ + "fm9LLfWnLDo84?oHelUO6LlZmSCF6b?kWX]3cn?8HW?XCQmT^JO:DfFE`NEI"
    A$ = A$ + "oT3R;nG8GIkJ1I>7?\3C>Mij0JkRO;GOcPmY9ij;N?TW;MVSWcG^>Qo6[GIU"
    A$ = A$ + "MjbnA9^^\jgceeLMBY;cj><Gf?EK72`fXBMg:LecAIZObYJn[ZhINWZLDeG6"
    A$ = A$ + "lj1LDo84GW`k:Ec7?o>EEIdmkWa?;mYJk`LK8Kg?dVaaMU_Gaf[JJLCOnZj#"
    A$ = A$ + "WonY[N2>[J^dZl=nkLLlOGIW^EbDe_gEWFiSSnD]MXQQQQQQQQQQQQQQQQaa"
    A$ = A$ + "acb?2=YLjnm\oDIEnaU=R?OfUhjFgiIJU\Y>gZ6_>HeM9nc\L:C`gnNokCEn"
    A$ = A$ + "an8WEWk8T^^bMEn4Q?amjaW2F]WMD[eaSZLF52>9FOR^m;5FSVEgYJA0iGGI"
    A$ = A$ + "Zf7TL8kkS<N]Pb?mT?caZeBnAE>:^:OF3`j\cW?^L0g?dZmE=cWSkA:ekG#f"
    A$ = A$ + "`N_Rc;n^\7U[j^?aheRSWgKYEkGR7Ei`QZm?H`Uhc\?cKE?KgM1XZ\cHJN1O"
    A$ = A$ + "\Ua[3ZhNH?Y1ob6BON^KE#=>n9UcD>Nl<lnN>7ZfcYh\oZ^;0[hhEOC`gMV_"
    A$ = A$ + "?#am`g_IKI0>nZPbgX>YLhlA=F5EOn1W:W>L>?Ei9Vk:_gmh0^S=alLia3Y6"
    A$ = A$ + "[RjmUk^meHmL1ELlEn>8h7#cmo?YL:C`gno?[IX_eLP7ONn<XEI?4nlFG5`g"
    A$ = A$ + "Tfag7U3gMk[A?g3OCG]G;in1[fgbkD>E1LV]bW9PL8j_UW3JT^8NlNY:<afQ"
    A$ = A$ + "hMQSjkSbkKMSG3>>kgJhaG>I\:hIkj7GE>LPk7>B;>;?i#`Uih`hlc_CZhYE"
    A$ = A$ + "LLfV?[\[2\i3>C>1`hc=7oeRS[\ga^LlYS7o8fEQkc6aaf2?R;hhP_Qc86;7"
    A$ = A$ + "ac5YEEfkJGUPgWeEli?bheRSW]gA^M3nFB`ID8?^iM:W9LLELZPj\#7b0kKR"
    A$ = A$ + "DWCKD>7a^:AmAMFU^kfi_bhXnHVc>NLEiXhI7US[V;YJLo[hh#fhaiHK7nnP"
    A$ = A$ + "En^fZWS?KSEHWbAacDLL>4b2?F5UOG8BG<NRL8T;ENV3kbaiWehmTSo8:7>N"
    A$ = A$ + "57Gi;VQ=Db1<odEfl[JO4T3VSoNSEk7`9SKiZ:7>D=G?EjZR?jgNRO0Z;LVm"
    A$ = A$ + "5PWcimS\O42[]7`EjoPVD>`^K8NDfHO9Rid1kXTCGfo0a??6GEN>a\O02_7b"
    A$ = A$ + "bFWLTmC#im50Z[ffQ_FXc7cLUn?X9U37O4WbW3YBGElAoi<_68?_Q^i#G97:"
    A$ = A$ + "OO4WGgMk[aam[>?RbIBLEn<XZh12^NWO0JGIKZO>j^KO=<<<<<<<<<<<<<<<"
    A$ = A$ + "<<<<<n?a>nKZ[0H_iFi[\DY1acY_:_FU^LIEmLIoEDg_YdOkDG3Pk9LnLO?Y"
    A$ = A$ + "LVZ[D]1EUeW6Vj_Y^:<iLWaYAMVVAkgZP:MibZJ_\Ti5LJhg7[dKCZ[Mg[Fh"
    A$ = A$ + "<neE>CeE[Z_LmjC2Ml4NoaN5Xk<4SeMDe^akCFdolZP:MIooEgcQd`bLNo_X"
    A$ = A$ + "fGl#_MTj:7PogZZLhh[dEZdZ:[kV?nXihEnKZ757GiG9DnM=eNl6l\ZnccW7"
    A$ = A$ + "CV;Smd2c5HOf2BCeM5J5g3kmV9eE>_SmDSJo4cgShXLhh[dEZm>Yb_Qm8jGk"
    A$ = A$ + "^AWoV2]UGIia]Ci0h6:>KeM=;JCh0_7YD?[j<1UooWUS?Y^biMei2Q[SELl8"
    A$ = A$ + "DY[D]_:M3O_fm^S9nK:^nbc?JZ_bR?[>LiQmlZRS[>C?Chh`_HYNFEOPLNXh"
    A$ = A$ + "QChhZa;XZ[Zaj7U9lcAIO>YZLDLl:MeD>>_G<Og1GoDnK:VS_j\ePf0^\D]c"
    A$ = A$ + "lOGMN=ig?hf2>mimd:WOhIE_CW3hlDO5LlMZ[`>7imak>Ll:MURS[^oOoThh"
    A$ = A$ + ":MAeg[EmSgIc^8_Dn:a^fmZfR8XVggIih[T7`3?27WUYZjZJ>]XnVmm1C7?>"
    A$ = A$ + "NfYeGh;nnDihZnEiiPfEO[^GO[>o1ZaIV3HnBC\GbEcaalCEYk8LLVkEEG17"
    A$ = A$ + "[bn:Ef>\SScQ:>^b^BXoY?UaS[N_NUoV:`TaZ4jN^OLel[hilZhhZbk:hhi#"
    A$ = A$ + "T6NNRacND>^jmIEM5b?>[5EeeYLl>MUihOCNg;P_O];7G=NL^=FIW`X]PU1e"
    A$ = A$ + "m1aIih\]7`Llhj#eghgQSgEGcn>>83C\aG57_CGmEL>WChZXm<kG?aH^ahhD"
    A$ = A$ + "8K?0lL;;\_m]o_gWHIXZMkXLLENb1<F]S`aW4Df#BY[DbK57_CGI>^>DIo`0"
    A$ = A$ + "k<Nl9SK\B_[lY:?3>>bWMih:iE5DmI[VOi>Ll>MeGA>^BGXlgDEeIUOaR1Ng"
    A$ = A$ + "#=6KeJIS_3T3ESUl<LLejoX6?\R7V[3E[andjZJ\Q:KJ>USgY[Dik:mjk>hf"
    A$ = A$ + "\>k`Nfj\JOAQn2cQ8]:>nZnKDeU>>n>f#n\Ll^jjT_W0On\:?ELlY[[[:lET"
    A$ = A$ + "SSh?knFYRScb1j?EEnM]5:I^SS?eViMkKZ:n\jK4Eee>KUV_k<fQSgY[DUE>"
    A$ = A$ + "^?=>>V?ON=ScnKZLlWUS7mK2Km6i9kK\`gSShanU8?gE`5ZF[2EM1l:DfiW5"
    A$ = A$ + "n?;EnUc7Tf\n00b:\a=7gTj:R7aYT9d^4eSLiXbc9jZ\?Q9W?OR[140??a8>"
    A$ = A$ + "ln<7oIA^M8o^S:N>>ULa]5Mb<WOI^2WOZh[VS=NOIUlgEGEaWig#^DUSjIGY"
    A$ = A$ + "[DUE>^?=>>Kg_8^EnKZ[Z\#nFI3BEig9GklKMUcdd2\boO]:_Q<6i3omR\MK"
    A$ = A$ + "[JG>Z^R]=`EgNKHHHHHHHHHHHHHHHHHHHlZ2\?IcWeHfGbDMNfDnFYZdFEfl"
    A$ = A$ + "iL6n0WEiGENN5jSMUYl_eik^PnJR_9[;=:Omc4O]EGkOGKKg_eiW`N5#gN[="
    A$ = A$ + ";[U9jKoWnMV^m?KVW\bg#UeQC:g[0WAVH>CEXjL[YZCkh_OVj[]fQ3L5n9\k"
    A$ = A$ + "6Zc;27`j[]:MXm_[M1[Yf:N0dC[:K\OX^ZeLn<bDF>jb7X3jB3b[Yn0\YbNe"
    A$ = A$ + "jFfUgHm??ZO2k^ihC>?EaM_WJO8ba5ee8]MW3C\g92Nb4O35f38L8O6T^Rm:"
    A$ = A$ + "FEOEk8CMkaa\o;0kgULJZl=I:^Sj>RFiK<ZleFacW[cMW5DLVZEg_Yik<mSN"
    A$ = A$ + "GdO7LlYgYZAPS[JOYVok^m`\jIamMY:]ZmTdIaE8C:mZJ_]eiKbP>ObIX3aa"
    A$ = A$ + "iAEL\^BE6LN7mWmY`aAo<ZkDE><QSSn_Dj<EnEeF[B;dQlin?6cd:ogEeh5_"
    A$ = A$ + "2IZSSSmX;g_KU_9[jlHYRS;CdoNn>cE]?<E?7G_DOWhMQS[6?>VK5__;i`4>"
    A$ = A$ + ">VoO>__2>>^kSEf;HbHHS`cTSSk3jlhQco>?NGhKbDn<8N\:8]:i7foPg?`M"
    A$ = A$ + "LLnK\En9\g5>NP>O7LN?FZnMFgXn6<o\X^c14?OGM[hCilGmNKf^IE#i?N?S"
    A$ = A$ + "<eaac1EO;Q>Bmm>UN?7Rj8h_Q\=aGKackDaMioVKGcao>`akJCVJk`80MM>X"
    A$ = A$ + "No0WA6>Ti8Lo>EQlkQLMB=6H5FaaW:CCihQLam?7l5N<N[hh`>9XLSlHR_fZ"
    A$ = A$ + "[?^hII>^Z_;8c_CLl0ZiE4QELLHW8XWIm3g>QdbQLOVhlLem=TLiV7?ndaZ\"
    A$ = A$ + "Koh[TYYfEAaMEfSZj<:cSE9b[\ODNU_fRKgilOZO2kMQSSch8PBNaH9iPZ?A"
    A$ = A$ + "^=9J?D]9ELLelOjjO=G^kbaEjS[#VDLLnK:lcSiF`aEM6UihRda]U:K`7aU]"
    A$ = A$ + "MXboJa]eEcYmMQS[JoRn1FYGS0ccDfcE5`LTDi7;?XOcZb^b^:X?c^cKfdaZ"
    A$ = A$ + "\[<eaaalgF]N=A0So?7fa^:ZjDff]Ck?Xb?Qm^baE]O[hhMiW:dUO7a66EhZ"
    A$ = A$ + "6?nEJk#l^hDOCfIhhZamcbad_im9aa3iE]>JCiILKGdWjdekA=OPEci<2MLl"
    A$ = A$ + ":ofE6MboAT9l=T^OW3Q\Z\5n>LLU?f^b^kEki0l]?eH_[ZC:OXD>LggCL`>K"
    A$ = A$ + "MQ^i8^RSGeWWbWMb1<VVSba_Rgi?R<M4>^JnjkbainVD1f_YDmm6Eo?_[Ll0"
    A$ = A$ + "Q<Dacan1I:7WCCgJhXdU84aWmM>MQ9SKi:hiCUY:k^Tc7EM#=_nMhhMSc?k["
    A$ = A$ + "]j6cD57W]O?Gn:I?G7bc1h^#N?TQoO^m4LXhm1\6S:^EN>mie;9NG9o\8nHn"
    A$ = A$ + "]Ao?ii2bfQ6fE;olILeLl0WAVRjFf7OaoNTGH=?ceQ\_9;WG`oKQW5LDDf8>"
    A$ = A$ + "<fg9]UP_UmMHif5<6kLkHf?Qae7F>Ima[077][\^PO_?#gLfZB3ZOEaGiKX2"
    A$ = A$ + "mGfgi<M^SG1>[<anS>EnXZ3Zi:ca1n\:^>IG]_33lXlCHZfjG14jPlLbDnEY"
    A$ = A$ + "EnA9>=PCD5O^oWZbEml[TScRc:CkR8oDn0[Mm;F8ObbNd^Veg[Z37Y^eiW`Z"
    A$ = A$ + ":K33333333333333333333333333333333333333333333333333330h_4j^"
    A$ = A$ + "c[^Sb[bWcFmkik=4>n9g3EC;O>m`gL]jNbZ2kLgFEUf>I6bk^eo?5<m>_jIG"
    A$ = A$ + "NC^k\Dn07EI\bWW<aW^FUn>OD3O?IEQ9g]EX>GUFlk:IYb7=bUaMc5O4HWkl"
    A$ = A$ + "ZWMi=i^cBaaEn_OUo:CUOlin]:mMg5DZd^B7>aW\QgO[B;Z3knKi`WHoi:oQ"
    A$ = A$ + "4gfn8_gdj:_9gMFC^;AR0lg9LnQngQoD8caWLG#Yl[\\_E7aeik0Z^Gdhb?T"
    A$ = A$ + "cZn9POPA5ZleIZk]\GQkR]7=7Wi2#oL5mW_CiYjS>gF0oA2W6EK9h_LkIW?0"
    A$ = A$ + "IjM1eZb?WfMhhC[784iCEOeMnc_L0jTG9OQbEci#OJ`oeVmaBij=?o:5DSUO"
    A$ = A$ + "Wb;WfYgMFX_>^<jhhikQ:^>V3Eg5DL0O72gYB\O\j\LLEM6?3ZS:OCj>Ll?Y"
    A$ = A$ + "nbgi>_Z[mG5DcQIWbS_3?Z^k\D]Wi#577UIEOF:OnG>DMG#Qb<k[8?27_ZNX"
    A$ = A$ + "R7j4T?Z_GnEUS7HjMNEN\:XOl:KA1>9kokgYlVNgI]RS7UYJL=LJFYGhl5lV"
    A$ = A$ + ":kZPgaWh;_jVc9j38k[3cQLo6PK?US[N?nCTS[jc:[3jN^>oiGGoGC:?FgcL"
    A$ = A$ + "Lh;9GeO;Jgj\5YR3b_SYVO6nn#7?oZ\MH57G=nLnkUELL>T;SkVCn8`ZklZ9"
    A$ = A$ + "LdL0Se^BOeEN:O3oAVKJ>MLk>O?Dan5DEMQUclHhR_cE=F\EcQKjHE`hlij7"
    A$ = A$ + "7ZdEE1Tg\?mlC0Zk99eMN5GW?chaWDNZfXZnAEf?DenFMW:`n=f0Zk2ZZa77"
    A$ = A$ + "LKDOP_;VOgUW?k4>NU=#W`a[6G57N7la\W5:K7DMWGUiiHMaikfd<PN=?FUY"
    A$ = A$ + "UGUmab1LW>`YU;3d^E=fc\MEZhLZ0Vg;77hli0\GdIihZaZ`_C1oY?WV9Ll^"
    A$ = A$ + "_kn^2^M_k>_BEggMlhC;_8]OG325Z\c#Ekh>c_JWk2ZL0S;YjK9Em?NF>>KG"
    A$ = A$ + "eMihg=?lIbaE[i;FC?eL7AjGQM;?>MMgMFES[7]gELL>MMj5l]UEg9FX?Dni"
    A$ = A$ + "ieAUiTZedEmNF57?gW0jkQCcGE>n>giEGam#gdbKjJHdISj8Pg??;77mi[jO"
    A$ = A$ + "^cN=A0SYI7>NU<Faac_o[jgh[<7?`dklZ[j^FLBiaQ^mKA7o5LcEgk[lhFfi"
    A$ = A$ + "^PBIoB4bfl[RS?IoBU_cZDlgLLZiWoEWS78__kheDoAH?YEU7:;dNagMF[RW"
    A$ = A$ + "oM\GV`LT[B7:G>]iOGEnh_Eci68?WcLnW_S\PMIbP_oM`mI=B;NN<g6EnEYW"
    A$ = A$ + "n:aa1OJbMNec\lZ\YEElEc1>;oMcCV[WkLG#5fCYjnPZJO7bfTFI?C>OP<`Y"
    A$ = A$ + "UO_BUOEj_kVkM7Lm<Ndf:][lZ^gTV6_JMdkB3GG[nmEioDmWZN<Efhd6oM>>"
    A$ = A$ + "n_kdCg=Wc`````````````hM6:OfaSXLVD6\_:1[38W^:oUB>]7aWZd9_:iF"
    A$ = A$ + "UWLi>9_kl1:Ei;GOgY^Rl:[WideM6H^K>k^#]O9N4U3_>K[TS>IJbi\HeN0^"
    A$ = A$ + "[N>ao^`e9DfLiZbON]Dkl1:IOSDGmMRoPY;MLJkBgMcI?;77kM][N]OHmD^<"
    A$ = A$ + "2NcZmbBVKe]?\PMYWNF>VXCb1H3L^>E]W\DjBen5XJ=maJCFiOPhm\BGJVlN"
    A$ = A$ + "OWo8Z[>m:SZmfiE]7EZhhieICeg7gV7O;mWoiOnkdolo7[cWJo;ZZ[Zji4ok"
    A$ = A$ + "2_ggS0F[mZjI57?ZGZmDB4`N;CaibkeV:i5?o_n[oZlm?^]9R;BKUo6;_O>_"
    A$ = A$ + "K^kk<7?JkRfMUL=iLAXf7FMi9gWTJoeVc7UL41EMm\LlX\IOCd:IQgKSX>Z:"
    A$ = A$ + "GnIanNYB6O7g70k`aanSM5NTLLeN>WK;Z>?cEi9GGc?kDok2B;cI>:7?W68g"
    A$ = A$ + "Ek9BNn3En3VYLlO#\?;Q<Rc=eEg7h[27OjITiIbaS_[V3EkifMhhCm_;Z0OV"
    A$ = A$ + ";?:7?;o8?[hhZc[J>D]GkAo1HO;RoFYo2m<6[hk6>JohMfFBmN>c5>:7Wc;>"
    A$ = A$ + "MMkgkSbaEm=GiO1INdAihClM:MmiZbOei?9n]9LlLmk^i\?B>>`Zm1ZZMUeE"
    A$ = A$ + "7UScOGVi6H>FZnfVbaiWSih`o^<9LD>^Jlnlg8DLlhoGmN_jk0L0_C?aO?Mg"
    A$ = A$ + "Lg717OjHENTmS[VS9g_kIhhkhOGbQ:>aIhh[hTPkbeY:o1cIhhhKdhlJiaSo"
    A$ = A$ + "mU3WV[PSSn\DlNEON7QS7S3U7c_RKEigT?37OeH#P=#HiHJo37I>W0OZLllj"
    A$ = A$ + "ng]OnOTSEIB0W]\YiIW?b#5PoMQcOecN6>>oN3cWEe9E0cCn:hhhKdOj[1dM"
    A$ = A$ + "=NlYS1^Z]kZhhZgg`hCidN6>^J^^LJFMVWc?kE`aOW67N57?7Z^[Lhcde:O["
    A$ = A$ + "RZ]71ffLXLIMOT7<7]b_mXh7hk?LL<7WiOMng5^<EmYN6>NVoFmNUZNZ6?=\"
    A$ = A$ + "O2olC]EC>l8_CdNEhh71EU1fc8[f_:h<kb?;jK97`kQ[2Xm\SSG]6TZa=XBg"
    A$ = A$ + "IhhigIZhhC\eB4`ilOEh[67o:ond:MJUmZbnG4EOF:KV[\Y=7`HOH>NU>#5_"
    A$ = A$ + "ZNXVokAihigSRWKbL0jFO0eLaS#V3<QSo^=^5hg=Ro=Tm<DgE:WiMY0EUAf_"
    A$ = A$ + "ZP_1cnX2hkFSd5?KfWISagPhQ?O0aY:CPlhZbnEgLJQN:W7aoRh#j2K`TCWR"
    A$ = A$ + "SSm7FGITemAl\ON1Y1n5GN=LRoFE6QlU?cn#7ZJcc?oSRGl<Agl8_bjBEITm"
    A$ = A$ + "M8:O_B4GdnPg3DfaB5OW?E1YAMWNEY3Da[Z7\oFAY;hdX:3hoFhlWCc>n3V8"
    A$ = A$ + "n#GZJ3Fml?:Nac0MngS[lNj\cVSid5]1ii_VUQZW];_WDVMbIWoMIR\LVbPS"
    A$ = A$ + "KJM]CGQOSm5<kD>G9_``````````````````````````````````````````"
    A$ = A$ + "````8So7XoSA%%%0"
    btemp$ = ""
    FOR i& = 1 TO LEN(A$) STEP 4: B$ = MID$(A$, i&, 4)
        IF INSTR(1, B$, "%") THEN
            FOR C% = 1 TO LEN(B$): F$ = MID$(B$, C%, 1)
                IF F$ <> "%" THEN C$ = C$ + F$
            NEXT: B$ = C$: END IF: FOR j = 1 TO LEN(B$)
            IF MID$(B$, j, 1) = "#" THEN
        MID$(B$, j) = "@": END IF: NEXT
        FOR t% = LEN(B$) TO 1 STEP -1
            B& = B& * 64 + ASC(MID$(B$, t%)) - 48
            NEXT: X$ = "": FOR t% = 1 TO LEN(B$) - 1
            X$ = X$ + CHR$(B& AND 255): B& = B& \ 256
    NEXT: btemp$ = btemp$ + X$: NEXT
    btemp$ = _INFLATE$(btemp$, m.SIZE)
    _MEMPUT m, m.OFFSET, btemp$: _MEMFREE m
    BASIMAGE1& = _COPYIMAGE(v&): _FREEIMAGE v&
END FUNCTION

SUB SaveAsBMP (filename AS STRING)

    'This SUB adapted from SAVEIMAGE SUB from the QB64 wiki

    image& = _NEWIMAGE(_WIDTH - 200, _HEIGHT, 32)
    _PUTIMAGE (0, 0), _DISPLAY, image&

    bytesperpixel& = _PIXELSIZE(image&)
    'IF bytesperpixel& = 0 THEN PRINT "Text modes unsupported!": END
    IF bytesperpixel& = 1 THEN bpp& = 8 ELSE bpp& = 24
    x& = _WIDTH(image&)
    y& = _HEIGHT(image&)
    b$ = "BM????QB64????" + MKL$(40) + MKL$(x&) + MKL$(y&) + MKI$(1) + MKI$(bpp&) + MKL$(0) + "????" + STRING$(16, 0) 'partial BMP header info(???? to be filled later)
    IF bytesperpixel& = 1 THEN
        FOR c& = 0 TO 255 ' read BGR color settings from JPG image + 1 byte spacer(CHR$(0))
            cv& = _PALETTECOLOR(c&, image&) ' color attribute to read.
            b$ = b$ + CHR$(_BLUE32(cv&)) + CHR$(_GREEN32(cv&)) + CHR$(_RED32(cv&)) + CHR$(0) 'spacer byte
        NEXT
    END IF
    MID$(b$, 11, 4) = MKL$(LEN(b$)) ' image pixel data offset(BMP header)
    lastsource& = _SOURCE
    _SOURCE image&
    IF ((x& * 3) MOD 4) THEN padder$ = STRING$(4 - ((x& * 3) MOD 4), 0)
    FOR py& = y& - 1 TO 0 STEP -1 ' read JPG image pixel color data
        r$ = ""
        FOR px& = 0 TO x& - 1
            c& = POINT(px&, py&) 'POINT 32 bit values are large LONG values
            IF bytesperpixel& = 1 THEN r$ = r$ + CHR$(c&) ELSE r$ = r$ + LEFT$(MKL$(c&), 3)
        NEXT px&
        d$ = d$ + r$ + padder$
    NEXT py&
    _SOURCE lastsource&
    MID$(b$, 35, 4) = MKL$(LEN(d$)) ' image size(BMP header)
    b$ = b$ + d$ ' total file data bytes to create file
    MID$(b$, 3, 4) = MKL$(LEN(b$)) ' size of data file(BMP header)
    IF LCASE$(RIGHT$(filename$, 4)) <> ".bmp" THEN ext$ = ".bmp"
    f& = FREEFILE
    OPEN filename$ + ext$ FOR OUTPUT AS #f&: CLOSE #f& ' erases an existing file
    OPEN filename$ + ext$ FOR BINARY AS #f&
    PUT #f&, , b$
    CLOSE #f&

    _FREEIMAGE image&

END SUB

SUB Smooth
    FOR x = 0 TO _WIDTH - 201
        FOR y = 0 TO _HEIGHT - 1
            p1~& = POINT(x, y)
            p2~& = POINT(x + 1, y)
            p3~& = POINT(x, y + 1)
            p4~& = POINT(x + 1, y + 1)
            p5~& = POINT(x - 1, y)
            p6~& = POINT(x, y - 1)
            p7~& = POINT(x - 1, y - 1)
            p8~& = POINT(x - 1, y + 1)
            p9~& = POINT(x + 1, y - 1)
            r = _RED32(p1~&) + _RED32(p2~&) + _RED32(p3~&) + _RED32(p4~&) + _RED32(p5~&) + _RED32(p6~&) + _RED32(p7~&) + _RED32(p8~&) + _RED32(p9~&)
            g = _GREEN32(p1~&) + _GREEN32(p2~&) + _GREEN32(p3~&) + _GREEN32(p4~&) + _GREEN32(p5~&) + _GREEN32(p6~&) + _GREEN32(p7~&) + _GREEN32(p8~&) + _GREEN32(p9~&)
            b = _BLUE32(p1~&) + _BLUE32(p2~&) + _BLUE32(p3~&) + _BLUE32(p4~&) + _BLUE32(p5~&) + _BLUE32(p6~&) + _BLUE32(p7~&) + _BLUE32(p8~&) + _BLUE32(p9~&)
            PSET (x, y), _RGB(r / 9, g / 9, b / 9)
        NEXT
    NEXT
END SUB

SUB DrawMenu
    LINE (_WIDTH - 200, 0)-(_WIDTH, _HEIGHT), _RGB(96, 96, 96), BF
    LINE (_WIDTH - 200, 0)-(_WIDTH - 195, _HEIGHT), _RGB(164, 164, 164), BF
    _PUTIMAGE (_WIDTH - 190, 10), menu&

    IF quads = 1 THEN
        LINE (_WIDTH - 178, 64)-(_WIDTH - 143, 110), _RGBA(255, 255, 0, 100), BF
        LINE (_WIDTH - 178, 64)-(_WIDTH - 143, 110), _RGB(255, 255, 0), B
    END IF
    IF quads = 2 THEN
        LINE (_WIDTH - 142, 64)-(_WIDTH - 102, 110), _RGBA(255, 255, 0, 100), BF
        LINE (_WIDTH - 142, 64)-(_WIDTH - 102, 110), _RGB(255, 255, 0), B
    END IF
    IF quads = 3 THEN
        LINE (_WIDTH - 97, 64)-(_WIDTH - 58, 110), _RGBA(255, 255, 0, 100), BF
        LINE (_WIDTH - 97, 64)-(_WIDTH - 58, 110), _RGB(255, 255, 0), B
    END IF
    IF quads = 4 THEN
        LINE (_WIDTH - 56, 64)-(_WIDTH - 18, 110), _RGBA(255, 255, 0, 100), BF
        LINE (_WIDTH - 56, 64)-(_WIDTH - 18, 110), _RGB(255, 255, 0), B
    END IF

    Text _WIDTH - 55, 319, 22, _RGB(0, 0, 0), STR$(brushsize)
    Text _WIDTH - 57, 317, 22, _RGB(255, 255, 0), STR$(brushsize)

    LINE (_WIDTH - 160, 180)-(_WIDTH - 40, 300), _RGB(164, 164, 164), BF
    LINE (_WIDTH - 160, 180)-(_WIDTH - 40, 300), _RGB(255, 255, 255), B
    CIRCLE (_WIDTH - 100, 240), brushsize, _RGB(0, 0, 0)
    IF brushsize > 1 THEN PAINT (_WIDTH - 100, 240), _RGB(0, 0, 0)

    LINE (_WIDTH - 35, 380)-(_WIDTH - 10, 397), blk&, BF
    LINE (_WIDTH - 35, 405)-(_WIDTH - 10, 421), fill&, BF

    IF randfill = 1 THEN ran$ = "ON" ELSE ran$ = "OFF"
    Text _WIDTH - 36, 431, 22, _RGB(0, 0, 0), ran$
    Text _WIDTH - 38, 429, 22, _RGB(255, 255, 0), ran$

    IF eraser = 1 THEN er$ = "ON" ELSE er$ = "OFF"
    Text _WIDTH - 76, 456, 22, _RGB(0, 0, 0), er$
    Text _WIDTH - 78, 454, 22, _RGB(255, 255, 0), er$

END SUB


FUNCTION IBOX$ (txt$, limitnum, fg&, bg&, delay)
    'This function either gets user input or shows info.

    'If limitnum is 0, it just shows info (message box)

    'text$: Your text to show
    'limitnum: how many letters of input to get
    'fg&: The Text color
    'bg&: Background color of box
    'delay: optional delay period for message box only
    '       (and If set at -1 then wait for a keypress)

    '=== save original place of cursor
    origy = CSRLIN: origx = POS(1)

    '=== Save whole screen
    DIM scr1 AS _MEM, scr2 AS _MEM
    scr1 = _MEMIMAGE(0): scr2 = _MEMNEW(scr1.SIZE)
    _MEMCOPY scr1, scr1.OFFSET, scr1.SIZE TO scr2, scr2.OFFSET

    '=== find center x/y of screen
    y = INT(_HEIGHT / _FONTHEIGHT / 2)
    x = INT((_WIDTH - 200) / _FONTWIDTH / 2)

    tl = LEN(txt$) + limitnum 'total length of letter spacing used
    x = x - INT(tl / 2) 'recompute x based on text length

    LINE (x * 8 - 24, y * 16 - 32)-((x * 8) + (tl * 8) + 8, y * 16 + 16), bg&, BF
    LINE (x * 8 - 24, y * 16 - 32)-((x * 8) + (tl * 8) + 8, y * 16 + 16), fg&, B
    COLOR fg&, bg&

    LOCATE y, x: PRINT txt$;
    y = CSRLIN: x = POS(1)

    IF limitnum = 0 THEN
        IF delay = -1 THEN
            a$ = INPUT$(1)
        ELSE
            _DELAY delay
        END IF
        IBOX$ = ""
    ELSE

        entry$ = ""

        DO
            a$ = INPUT$(1)

            '=== Return exits with data
            IF a$ = CHR$(13) THEN IBOX$ = entry$: EXIT DO
            '=== Handle the backspace
            IF a$ = CHR$(27) THEN IBOX$ = "": EXIT DO
            '=== ESC cancels
            IF a$ = CHR$(8) THEN 'Backspace goes back a space
                IF LEN(entry$) > 0 THEN
                    entry$ = MID$(entry$, 1, LEN(entry$) - 1)
                END IF
            ELSE
                'add letter entered, if not over limitnum
                IF LEN(entry$) < limitnum THEN
                    entry$ = entry$ + a$
                END IF
            END IF

            LOCATE y, x: PRINT SPACE$(limitnum);
            LOCATE y, x: PRINT entry$;

        LOOP

    END IF

    '=== Restore the whole screen
    _MEMCOPY scr2, scr2.OFFSET, scr2.SIZE TO scr1, scr1.OFFSET
    _MEMFREE scr1: _MEMFREE scr2

    '=== restore original y,x
    LOCATE origy, origx

END FUNCTION

Find my programs here in Dav's QB64 Corner
Reply


Messages In This Thread
RE: QuadDraw revisited - drawing program work in progress - by Dav - 06-03-2022, 12:59 AM



Users browsing this thread: 10 Guest(s)