Results 1 to 11 of 11

Thread: filtering ATPA1 based on other ATPAs

  1. #1
    Join Date
    Oct 2012
    Posts
    1,258
    Mentioned
    40 Post(s)
    Quoted
    588 Post(s)

    Default filtering ATPA1 based on other ATPAs

    original post
    So let's say I have 3 ATPAs

    ATPA1 := TPA1.toATPA(30,30);
    ATPA2 := TPA2.toATPA(20,20);
    ATPA3 := TPA3.toATPA(10,10);

    I would like to go from having these 3 ATPAs that've been made, to then taking ATPA1 and seeing if any of the TPAs of ATPA2 or ATPA3 are within X pixels of it (ATPA1).
    Wonderful Paint Image




    Any help/input is appreciated, even if it's simply 10x


    edit: More in-depth explanation of the issue here: https://villavu.com/forum/showthread...23#post1376023
    Last edited by acow; 06-11-2016 at 09:16 PM.

  2. #2
    Join Date
    May 2012
    Location
    Glorious Nippon
    Posts
    1,011
    Mentioned
    50 Post(s)
    Quoted
    505 Post(s)

    Default

    Simba Code:
    1. for i := 1 to high(atpa) do if (distance(middleTPA(atpa[0]), middleTPA(atpa[i])) < 10) then writeln('found!') else writeln('not found!');

    edit: probably not what you're asking. you're saying ATPA, but the pic makes it seem like you mean TPA?

    also, from which points do you want to measure distance?
    Last edited by Citrus; 06-11-2016 at 03:16 PM.

  3. #3
    Join Date
    Feb 2012
    Location
    Norway
    Posts
    995
    Mentioned
    145 Post(s)
    Quoted
    596 Post(s)

    Default

    Kinda sounds to me like you wanna use clustering in the first place, not TPAToATPA, but I am not sure what your real goal is.

    If you can't find another way to solve what you want you should know that it would turn out horribly slow to do what you want as soon as the flattened length of the ATPA get a tad large.
    Last edited by slacky; 06-11-2016 at 04:01 PM.
    !No priv. messages please

  4. #4
    Join Date
    Apr 2015
    Location
    Pittsburgh
    Posts
    14
    Mentioned
    0 Post(s)
    Quoted
    7 Post(s)

    Default

    You could try putting ATPA's 2/3/etc in an array and then using some nested for loops to check distances between their TPA's and TPA's from ATPA1. So something like:

    Simba Code:
    1. for i:=0 to High(ATPA1) do
    2.   for j:=0 to High(AATPAs) do
    3.     for k:=0 to High(AATPAs[j]) do
    4.       if (Distance(MiddleTPA(ATPA1[i]), MiddleTPA(AATPAs[j][k])) < 10) then
    5.         writeln('found!')
    6.       else writeln('not found!');

    I think that should do what you wanted, maybe?

  5. #5
    Join Date
    May 2012
    Posts
    499
    Mentioned
    23 Post(s)
    Quoted
    228 Post(s)

    Default

    Perhaps something with the ATPA bounds -> T2DBoxArray
    Expand that BoxesArray (array1), and check for overlap of each box?

  6. #6
    Join Date
    Feb 2015
    Posts
    422
    Mentioned
    41 Post(s)
    Quoted
    226 Post(s)

  7. #7
    Join Date
    Oct 2012
    Posts
    1,258
    Mentioned
    40 Post(s)
    Quoted
    588 Post(s)

    Default

    I was being less clear with explaining what I'm trying to do as I thought I was, my apologies.

    In the picture there's 3 ATPAs
    ATPA1 is red (3 TPAs)
    ATPA2 is blue (2 TPAs)
    ATPA3 is green (1 TPA)

    I'd like to go through each of the TPAs in ATPA1 and for each one check if any of the TPAs in ATPA2 or ATPA3 are within a certain distance that first point. If it is, then do something!
    In this specific case I wish to throw those TPAs out of ATPA1, when atleast 1 TPA of ATPA2/ATPA3 was found within X pixels.
    In the image, the second TPA of ATPA1 would be the only TPA remaining (the "not found!" one).

    Just incase you're wondering: This specific usage is for combat on Rs3, ATPA1 is the monster(s) and ATPA2 & ATPA3 are to let me know if the monster is already in combat with me / somebody else (if they're found within X distance from ATPA1 then ATPA1 was in combat), though this is also something that would be useful for relative filtering in general so I'm pretty interested in getting it done properly. Taking the input from @slacky; it'd most likely be best to reduce all of the TPAs in each ATPA to single points (at their middle), before filtering.

    @fady; That is exactly where I got the idea, having used that guide to make this procedure that was in the combiner script, however it's only for finding the TPAs of an ATPA within X distance of a single point. Definitely a great start, though I'm not sure of where exactly I should be heading after that for this.

    edit: changed "a single point" to "single points" for clarity (love you clarity! )
    Last edited by acow; 06-12-2016 at 02:05 AM.

  8. #8
    Join Date
    May 2012
    Posts
    499
    Mentioned
    23 Post(s)
    Quoted
    228 Post(s)

    Default

    Simba Code:
    for i := 0 to high(ATPA) do
        if inRange(length(ATPA[i]), 50, maxInt) then
        begin
          box := ATPA[i].getBounds();
          box.expand(30);
          for j := 0 to high(ATPA2) do
            if box.overlap(ATPA2[j].getBounds) then
            begin
              ATPA.deleteIndex(i);
              continue(2);
            end;

          for j := 0 to high(ATPA3) do
            if box.overlap(ATPA3[j].getBounds) then
            begin
              ATPA.deleteIndex(i);
              continue(2);
            end;
        end;

    I'm not sure if continue(2) works like I intend, but I'm sure you can figure out some alternative if needed.


    Maybe this helps:
    Simba Code:
    function shouldDelete(box: TBox; ATPA: T2DPointArray): boolean
    var
      boxes: TBoxArray;
      i: integer;
    begin
      boxes := ATPA.getEachBounds();

      for i := 0 to high(boxes) do
        if box.overlap(boxes[i]) then
          exit(true);
    end;

    function acow(): TBoxArray;
    var
      i: integer;
      box: TBox;
      TPA: TPointArray;
      ATPA, ATPA2, ATPA3: T2DPointArray;
      color: T2DColorData;
    begin
      if color.gatherIn(TPA, mainScreen.getBounds()) then
        mainScreen.filterPointsPlayer(TPA);

      if (length(TPA) > 50) then
        ATPA := TPA.cluster(20);

      SortATPASize(ATPA, true);

      for i := 0 to high(ATPA) do
        if inRange(length(ATPA[i]), 50, maxInt) then
          result.append(ATPA[i].getBounds());

      for i := 0 to high(result) do
        begin
          box := result[i];
          box.expand(30);

          if shouldDelete(box, ATPA2) then
            result.deleteIndex(i)
          else if shouldDelete(box, ATPA3) then
            result.deleteIndex(i);
        end;
    end;


    Also you should probably gatherIn both the colors red/yellow in 1 atpa!

  9. #9
    Join Date
    May 2012
    Posts
    499
    Mentioned
    23 Post(s)
    Quoted
    228 Post(s)

    Default

    @acow, What method did you end up using?

  10. #10
    Join Date
    Oct 2012
    Posts
    1,258
    Mentioned
    40 Post(s)
    Quoted
    588 Post(s)

    Default

    Quote Originally Posted by Thomas View Post
    @acow, What method did you end up using?
    Learned from what you guys posted, then researched up stuff & tested it out until that good ol' magical bot stuff started to happen.
    Code wise it's a hacked together mess with lots of room for improvement. Functionality wise it's close, getting there in regards to effectively filtering them out & thus far I'm pretty happy with the cpu efficiency (simba averaging ~0.7% on my i7-3770 ).
    Here's exactly where I've gotten to with it, if you'd like the rest of the script & an account to try it out on, just lmk and I'll pm it.
    code

    Simba Code:
    1. function attack(): boolean;
    2. begin
    3.   findColorsTolerance(gTPA, 12566445, mainScreen.getBounds(), 9, colorSetting(2, 0.12, 0.6));
    4.   if (Length(gTPA) < 1) then
    5.     begin
    6.       writeln('found none to filter');
    7.       result := false;
    8.       exit;
    9.     end;
    10.  
    11.   findColorsTolerance(healthTPA, 393382, mainScreen.getBounds(), 6, colorSetting(2, 0.07, 0.18));
    12.  
    13.   findColorsTolerance(ringTPA, 4572375, mainScreen.getBounds(), 5, colorSetting(2, 0.18, 2.89));
    14.  
    15.   gATPA := gTPA.toATPA(10,10);
    16.   gATPA.filterBetween(0,2);
    17.   healthATPA := healthTPA.toATPA(60,10);
    18.   healthATPA.filterBetween(0,2);
    19.   ringATPA := ringTPA.toATPA(40,40);
    20.   ringATPA.filterBetween(0,2);
    21.   gATPA.sortFromMidPoint(mainScreen.playerPoint);
    22.  
    23.   for i := 0 to high(gATPA) do
    24.   begin
    25.     for h := 0 to high(healthATPA) do
    26.     begin
    27.       if (length(gATPA) < 1) then
    28.         exit;
    29.       if (i < 0) then
    30.         break;
    31.       if length(healthATPA) < 1 then
    32.         exit;
    33.  
    34.       baseTPoint := middleTPA(gATPA[i]);
    35.       healthATPA.sortFromMidPoint(baseTPoint);
    36.       healthTPoint := middleTPA(healthATPA[h]);
    37.       writeln('gATPA[i]1 is: ', gATPA[i]);
    38.       writeln('i1 is: ', i);
    39.  
    40.       if inRange(healthTPoint.x, baseTPoint.x-55, baseTPoint.x+55) then
    41.         (x1 := true) else (x1 := false);
    42.       if inRange(healthTPoint.y, baseTPoint.y-55, baseTPoint.y+55) then
    43.         (y1 := true) else (y1 := false);
    44.  
    45.       if (x1 and y1) = true then
    46.       begin
    47.         writeln('it''s in combat! deleting point1');
    48.         gATPA.deleteIndex(i);
    49.         i := (i - 1);
    50.       end else
    51.         begin
    52.         writeln('it''s not in combat1');
    53.         end;
    54.       healthATPA.deleteIndex(h);
    55.       h := (h - 1);
    56.     end;
    57.  
    58.     writeln('length of gATPA is ', length(gATPA));
    59.     if (length(gATPA) = 0) then exit;
    60.  
    61.     writeln('length of ringATPA is ', length(ringATPA));
    62.  
    63.     for g := 0 to high(ringATPA) do
    64.     begin
    65.       if (i < 0) then
    66.         break;
    67.       if length(ringATPA) < 1 then
    68.         break;
    69.  
    70.       writeln('g is: ', g);
    71.       writeln('ringATPA[g] is: ', ringATPA[g]);
    72.       writeln('gATPA[i] on line 206 is: ', gATPA[i]);
    73.       baseTPoint := middleTPA(gATPA[i]);
    74.       ringATPA.sortFromMidPoint(baseTPoint);
    75.       ringTPoint := middleTPA(ringATPA[g]);
    76.       writeln('middleTPA(gATPA[i] is: ', middleTPA(gATPA[i]));
    77.       writeln('gATPA[i]2 is: ', gATPA[i]);
    78.       writeln('i2 is: ', i);
    79.  
    80.       writeln('ringTPoint.x ', ringTPoint.x);
    81.       writeln('baseTPoint.x-55 ', baseTPoint.x-55);
    82.       writeln('baseTPoint.x+55 ', baseTPoint.x+55);
    83.  
    84.       writeln('ringTPoint.y ', ringTPoint.y);
    85.       writeln('baseTpoint.y-55 ', baseTpoint.y-55);
    86.       writeln('baseTPoint.y+55 ', baseTPoint.y+55);
    87.  
    88.       if inRange(ringTPoint.x, baseTPoint.x-25, baseTPoint.x+25) then
    89.         (x2 := true) else (x2 := false);
    90.       if inRange(ringTPoint.y, baseTpoint.y-25, baseTPoint.y+25) then
    91.         (y2 := true) else (y2 := false);
    92.       writeln(x2);
    93.       writeln(y2);
    94.  
    95.       baseBox.edit(baseTPoint.x-25, baseTPoint.y-25, baseTPoint.x+25, baseTPoint.y+25);
    96.    //   smartImage.drawBox(baseBox, true, clgreen);
    97.       writeln('drew baseBox');
    98.   //    smartImage.drawCircle(ringTPoint, 3, true, clred);
    99.       writeln('drew ringTPoint as a circle');
    100.  
    101.  
    102.       if (x2 and y2) = true then
    103.       begin
    104.         writeln('it''s in combat! deleting point2');
    105.         gATPA.deleteIndex(i);
    106.         i := (i - 1);
    107.       end else
    108.         begin
    109.           writeln('it''s not in combat2');
    110.         end;
    111.       ringATPA.deleteIndex(g);
    112.       g := (g - 1);
    113.     end;
    114.  
    115.     if (length(gATPA) = 0) then exit;
    116.   end;
    117.  
    118.   if (length(gATPA)> 0) then
    119.   begin
    120.     writeln('found ', length(gATPA), ' valid');
    121.     moveMouse(middleTPA(gATPA[0]));
    122.     fastClick(mouse_left);
    123.     useThresholds;
    124.     result := true;
    125.   end else
    126.     begin
    127.       writeln('all in combat');
    128.       result := false;
    129.     end;
    130.  
    131.   mouseOffClient(OFF_CLIENT_RANDOM);
    132. end;

  11. #11
    Join Date
    Oct 2011
    Posts
    805
    Mentioned
    21 Post(s)
    Quoted
    152 Post(s)

    Default

    Something like that?

    yellow dots is TPA found, you can make atpa from it if you want:



    Tested on your beautiful MsPaint artwork
    Simba Code:
    program new;
    {$loadlib AND_TPA}
    var
      bmp,w,h : integer;

    procedure MainLoop();
    var TPA1,TPA2,TPA3 : TPOintArray;
    var distance_X : integer;
    var ATPA : T2dPointArray;
    begin
        distance_X := 200;


        FindColors(TPA1,2366700,0,0,w-1,h-1);
        FindColors(TPA2,13257024,0,0,w-1,h-1);
        FindColors(TPA3,5156894,0,0,w-1,h-1);
        AppendTPA(TPA2,TPA3); // because we want to find TPA1 next to TPA2 OR TPA3, right?
        FilterTPADistTPACmpr(TPA1,0,distance_X,TPA2,3,3);  // I used compression level of 3 for faster processing

        ATPA := SplitTPAEx(TPA1,6,6);  // of cource now you can make atpa from tpa, if you want

        DrawTPABitmap(bmp,TPA1,2809625);
        DisplayDebugImgWindow(w+1,h+1);
        DrawBitmapDebugImg(bmp);
    end;

    begin
       Bmp := BitmapFromString(763, 616, 'meJzt3V2u9Mh9H+AeC1BgCfpw' +
            'BAcyMhmSTQEDB1YMGBZgnwtJCAJDAhIB2oBuDJxc2wvwFnzuvAXdC' +
            'NBNziLGO8jZwmwh6lBNm+Lwq8kmq4tdfB78PXjnnG52Nd/y1E/FKr' +
            'Iofq+8yvP8/O+qf61/Xv2z85P6z9U/syxrXn89TFH/of5t/a/t49S' +
            'fUv2w/qDmyO33Ngev/lwdv/h39RGyq+YjmvfWb6wP2/6sTjubT6lf' +
            'WR+q/kMlv2o+tD5g+187n9g+P9XL2mem/kPzufXH1cdvWtj8wfl3/' +
            'p1/59/5d/6d/9Dnv37jBQAgXXVkit0KAICA6tme2K0AAAhI4AEAkl' +
            'cv74ndCgCAgOpV0LFbAQAQkMADACSv3iwfuxUAAAHVt+KJ3QoAgID' +
            'qexXGbgVs4Iuf/3QnFftMANBV33s5ditgA9FzjsADsFtmeEhG9Jwj' +
            '8ADslhkekhE95wg8ALtlhodkRM85Ag/AbtWPUI/dCthA9Jwj8ADsl' +
            'sBDMqLnHIEHYLfKsszzPHYrYAPRc47AA7BbFi2TjOg5R+AB2K2iKA' +
            'Qe0rBVXPnlX/349FW//OSPvvj5Xwo8AM+rSjtZlsVuBWxgZc75zc9' +
            '+evpOeRr3D3/ytS9+/jcCD8AzyvPcw0NJQ+jAU/nnz74u8AA8o6Io' +
            'LFomDVsFnh+eTl/85PPm5//445+cTt+qA0/nVwIPwLM4n89uPEga1' +
            'geeX373B4Nrdd5+VmWe79eZ5zd//j2BB+DpZFkm8JCGlYFnuk6f/s' +
            'X8q1qxzwQAXWZ4SEbQwPPDz38k8AA8ryrwWLRMGgQeAMZ4tATJCJd' +
            '22hu4vvjRZwIPwNMprmK3AjYQLvA0G7Vm3oEw9pkAoKssSzM8pOEB' +
            '0ztztmgJPAA7ZA0PyQgUeJrVO+60DPC8iqIQeEhDiLTTPFdr5i0HB' +
            'R6AfarSjjU8pGHztNO+x/KctcoCD8BuWbRMMnaSdgQegB06X8VuBW' +
            'xgJ2lH4AHYIYGHZOwk7Qg8ADtUFIXAQxp2knYEHoAdcqdlkrE+7dy' +
            '3J0vgAdg/9+EhGTtJOwIPwA5Zw0Mytgo8N918fmjsMwFAV5ZltqWT' +
            'BoEHgDGPn+H5wadfpl2PPJm0CTwAjHn8nZajBxKBJ1UrA8+GFftMA' +
            'NBlhkfgSUb0nCPw7NnL20d7mu7ldLp8vMVu1CpvH5fr9zi9vZwul4' +
            '/YzYG9e/y29OiBROBJVfScI/Ds0/ulCgavneuSAk/t9PrenJOPt5f' +
            '+C6rjnl7eZl7tbWta1YmaHe+vp03a2fH6ful8UNUDrn2B46oCz4O3' +
            'pUcPJAJPqqLnHIFnh8bGa4Hn0ouCg8cJHXjmxJ457ZzZWrNhR/b4h' +
            '4dGDyQCT6qi5xyBZ4eaVFC5vL/Gbs6W1geezjTIYAh8TOCZ/hZz2j' +
            'm/tTPnlEiPRcsCTzKi5xyBZ4ea0Ta9YW594GmuE728vCw9S82sy81' +
            'LRc1fQf9SVDuOTnz6/HY2gacTitoflMDkHvexhkfgSUb0nCPw7FAz' +
            'ViY2vXNZHXjaieXt470+1PyFLpsEnlrzdzR4qEXtrM7C68vb4K/a1' +
            '8XmrAIiPXZpCTzJiJ5zBJ4dEnjGNNeJ3l9P7StBM0/UhoFn+rLjyn' +
            'a2NZ0hvek+5sjzXOAReNIQPecIPLsysXSkP0b3Xzw4Ot8c5ZsXtEN' +
            'IM0w37+qswr2ZGQYv/awMPJ0ouPTa34aBZzrGrGznYEvuCzwzO0m/' +
            'ze2fWDUdUZV2six75CdGDyQCDxzBzMDTyRIdnfF3k8DT3mE98VmdA' +
            '/a/QnN9544xtP9FmvMw86rWhoGn/R1vnvCl7RxsydLAs6iTXL4aeD' +
            'orrgWeiAQegQeSNCfw9O/WMj2crQw8vx8yX0bHzf5i2rG003HHGNq' +
            '+TtRp5Gne1aIQl7T6Z2B9Oxt3v3FpJ7l89a5B6/+y2EpKgefPPv3y' +
            'dPpV1aM++85fCzzAZXINTztOTGzqaQ/oKwNPoz30tz+rM/Mwcbe99' +
            'jHvGEMHT8uiCZCtAs/0F1nfzsZ9U0N3dJJLL/BYMrQTeZ4nE3i+/a' +
            'df1r1L4AFqE4GnGTenNwe1R+r1gWcwnDRzCO3fticWBmck7l7DM/Y' +
            'tFkWCTQJPZxZu5gXEO6JL+69g0RatOzrJxYqdvSqKIo1Fy03aEXiA' +
            'xljgmTMC9nPIVouWOwZH8Jtbiu4OPP3rRJ12jkWswW86P/BM6/8tb' +
            'NLOThsWnav7Oskl6b2BT+3ZA88n3/x1//9xBB6gNjb0NOP1xG3o+j' +
            'kkUODpH3bOmH534Jkz63XzKsyGgWfsr2CTdl5amWTpLQfv6yTTLSe' +
            'iZ7+kJfAAE8aGnjmXRfrj3cMCz5w4cV/gmT7y/KtFmwSeiSCxVTvX' +
            'PFvkvk5yEXj26tkXLQs8wIQ1gaf/nIIEAs+cPUdzBusNd2mFa+fKJ' +
            '6nd10kuAs9eVWknmWdp/fF3/1XgAdrM8IydkJtmPsE8UOBZ3871z4' +
            '01w5MYgUfggYQ96RqeRc2bH3hm3tinNp1kggae9e1cn3Yu93aSi8C' +
            'zV+fzWeAReCBVT7FLa3rR8s379c0PPINbisYaMz1eBw08K9u5Sdq5' +
            '2KWVnLIsn3qXlsADTNj2Pjw3N08N3oDljsBzs3ljnzXzbExnjzkP2' +
            'QwaeNa08+49WYNW3odH4NmVKu1UmeeRnyjwAA+z7Z2W2wfsvKWzF2' +
            'l94Gk3r/PGic+aMOcCTefrz1m7snngWdPObdPOZXUnEXh2xQyPwAM' +
            'Jmx567nhM0vRzJDcMPJfZt+ybGXjG7uPXN+cuQOECz5p2zt/bNf9x' +
            'D2uepSXw7EoVeKzhEXggVTeHnqUPwr6Mj4BV8Hi/fGyyhqff/v5nv' +
            'X18zF/Ds/TuxDfv7Bco8KxsZ4jAc1n3tPT5n0JoAo/AAwmbOfT051' +
            'KmR+fONqL+7qqtAk//s5oLK4sWLS99/tTN1wcKPCvbGSjwdL7IzU4' +
            'i8OxTcfXITxR4AIAHK8syz/NHfqLAAwA82Pl8FngEHgBIW5V27NIS' +
            'eAAgbUVRuA+PwAMAaTPDI/AAQPKe/caDn3zz19N7D7//jZPAAwAH9' +
            '+z34RF4AICb8jwXeAQeAEhblXaS2Za+k3rkyQQA5qgCz1Ov4dlhPf' +
            'JkAgBzpLQtfSf1yJMJAMxxPp+feg3PDuuRJxMAmON89chPjB5IBB4' +
            'AOBqXtAQeAEieRcsCD8AefFwup5e30+n0ejpdLu+xm0NqzPAIPHAc' +
            'p9f35iZdH28v/Rc0Y+5Sby+n67svL28fEy97fz1t0s6O1/dL/7Mu7' +
            '69Lz89WqrByjS2nl6oZH28z33Vf4Lnvszgga3gEHjiIZmTsRJS20I' +
            'FnTuyZ086ZrY2VAcZCSHNyptOmwEMIWZYJPAIPHEFnGmRwfHxM4Jm' +
            'OMXPaOb+1UWKAwMMOFUVRZZ5HfmL0QCLwwDE114leXl7qP8y8wHRp' +
            'jao3x+KJMf3t43Idlk/Tnz6/nU1C6I/1Sy+KPUaIwAMzPfvDQ3dYj' +
            'zyZwEztxPL28V4Hj/kD6yaBp9ZEkcFDLWpnlRBeX97G2tN80MRs0o' +
            'MJPETkkpbAA0fQXCd6fz21rwTNXNm7YeBpz/P0P31lOwcPJfDAxS4' +
            'tgQeOoZnuqJNDM/LOvKq1YeCZjjEr2znYkpnvbWetid8Ofq/ms+pm' +
            '96PL9NKm+mX9d3XWbw+e/MGYdN+hJvzhOuPISqH28e/4y+IBXNISe' +
            'CB5/bjSTLPMHPg2DDztkbETeNa3szGxvGfM9HecuEDW/6xNAk97GV' +
            'Jb56TNCTwzDzVt+hJh81tpZ7fM8Ag8kLz+3MXSq0UhLmn1o8j6dnY' +
            '+YtG7JjJSO6RN/LZJAisDz/XsvIy9uNOA6cCz6FDT2ieh85fb/MW5' +
            'GLdn5dUjPzF6IBF44Gg614lqi674bBV42gGmP1Gwpp39Lep3DL5jj' +
            'e/sLxv7bfPzsdU4809O/2XtNrRPxXTgWXSom5pg005K9sU/C9vSBR' +
            '5I21hWWXS1aJPA05nluHk9a1E7p4f4mcaW8dQtf61a8fKVmZzO92q' +
            '+0frAM3jZaHAZ9s3AM/9Qc/QvbDU/2c/2fwaVZfngXVoAjzQ2iC+6' +
            'WnRH4JnWHxxXtnPsJoSLRuH+xan2katD1d+uM5VRj/jTa4Y7J+e+X' +
            'VqD2W/mouU5h5qjfZ6rb7HDrXCMefyiZYBHGrxOVJt/VWvDwDN24W' +
            'OTdvaPNh2Txt7YbmSdDeqfTFy9ujnrclkdeAb/Fu4LPPP/Qvs6F/j' +
            'uOwiPl+e5GR4gVdPj2vz/mb9J4JlY47FVOwdbsmjyoX99qv5JfZB+' +
            'vOlHoEvqgedy6+ok+1SlnQcvWgZ4mMHHiA+aHrM23KUVtJ2DbV60m' +
            'LYJMPVsUvt6VvsLNsdsWt5uWPKB5+YaIXbIGh4gYWM3YOmb+QTzQI' +
            'Fnq3YOtvm+zdf1ON6+nlW/oElE7Vsjdk5L8oGnM8NjufJTyPPcDA+' +
            'QpM7NdadND3xBA8+G7Rw87NLt0u1FyO3rWfVvmyzRfvjF2ELrJANP' +
            'fw2PDelPoSgKMzxAkubsoJm47/Hgy0IEng3b2Xb3RqQ/PEWiyjFfv' +
            'Z5Va2Z13i/vdas6L0g48HRuz3jfQimiqNKOXVpAkmbeIGXOQwGCBp' +
            '6721l91pwndi0di/+QlK533ulPXzQveHt7HXxBwoGn8xXa59lDJXY' +
            'uyzKBB0jP/As6c2ZCwgWeNe0c267eueaydA9R55Y+Ew/PqvXPyVje' +
            'GLtT8eupauHAw0PHzlWswDM4F3ffgzx4vLIsH3ynZYAHmH72d9ucO' +
            '/uFCzxr2jnnJof3TTu0F1FPPx598CPG8kZ/9Us7Mu088ExE0+ZsuC' +
            'HPnhVXsVsBsLFFz9y8eWe/QIFn6bNBO+28GXjuvsgyOBXT1o4u/W8' +
            '6kTcG2/wUgWfiyqMLW0+hSjt5nsduBcDGFq3XvXlVK1DgWbquePrZ' +
            'Cm0r19D+YZXOyHEmHq1+uZU3+rvSOuthdhh4+o/Q6rj7gaQ8zPkqd' +
            'isAAAIqr2K3AgAgIPfhAQCS51laAEDyPEsLAEieOy0DAMkzwwMAJM' +
            '+2dAAgeQIPAJA8Dw8FAJJXlqXAAwCkzSUtACB5Ag8AkLyiKLIsi90' +
            'KAICAPFoCAEieXVrAYb19XE6nl9Pp9PZyulw+YjcnWS9vH6eW6oxf' +
            'Pt5iN4rDsYYHOKzBwPN+qX74alzeRHMyDxJ4Tq/vzdf8eHvpv6DqZ' +
            'KeXt9NyTRftpMeO99fTJu0c0/yFTr+r+f+syuX9df7xgyqKwiUt4J' +
            'gCBZ5mSFo0lKRnbHBPNfB00t3gtGHowDMn9sxp55jX98ucvr3PwGM' +
            'ND3BYAk9Q+xz1wmnCwESue0zgmY4xc9p5840zA8+uwm1RFC5pAccU' +
            'aA2PwFNrzsPM6yzPrrlO9PLysvSLNzG7+r/rv42a6F3thDnx6Uvb2' +
            'b7+9eyBx6Jl4JgEnqCagfII0zvtxPL28V73q5vpZfDtdweeWnPaBw' +
            '91RztTCjwuaQHHJPAEdajA01zueX89ta9bzfzuGwae6SuJd7QzpcB' +
            'jhgdI3uBs/2DgaUaBwaGnv4Ki/bLp9RXtVw5uXzqNXFzoN6nz9puj' +
            'ZP/jJt7Sf/HSYWviPDSf249DzU/6+bN/wOk9UM2ntJed9L9FZzXLm' +
            'mDW+TpLL+dtGHimY8zKds4M8/vc6ijwAGkbixbtKf05gaczOHbUR5' +
            'gZeG6uO+2MU50mDf4v7v67pr/+4Luml9TOnwdbGng657b9QZ2kOv9' +
            'EfVQnaui71CP12De9b7lRP640zZ55VWvDwNP+G++cn/XtfOrAcz6f' +
            'BR4gVTeH+/4IOxh4pofd09aBpzNMNE26XiQYbUZ/cJnz9Zsxcc6LZ' +
            '2aeRYFn4lOmQ2an/TNPVPXTj4+3iVx3xzxP+zpRpyUzDxjiktbEjN' +
            'bd7XzqwJPnuV1aQKombrDW/k/9zcAzcbWlfn375zcHhfoFg5MJzQe' +
            '1f9ufjmgfuR3GJt7V+bhm7OtfUeoPUu2PmL8waXoNTyfw9M9GO4B1' +
            'mtRuT/uvqfOV2+/qn8P2b9ufdcckz+A3XXS1aKvAM9art2rn0sAzf' +
            '9n2Awg8QKra8wODY+7MNTzteYM5/3N1zaLlZqQYbNLgKNb+pu3f3v' +
            'z6dVPrX/X/t3/HHQu8ZwaesQM2p3F6t1H7PLdPVP+LjCXD2uA5nGN' +
            'scF90tWiTwNOZWLt5PeuOdj514HHjQSBVg7MlbUsDz0RyaFsUeMYu' +
            'lg1OXIwNH4Nj1s2v31a/eM725PlD2MzAM/jb9jkfO439iDJ9oqZH4' +
            'bvH6LGsuKjb3BF4pvVP2ibtfOrA4+GhQJLm/Gd8/i6t9vWXTQaFm4' +
            'uCFgWe/viyaBRbdPvf+asy1gSeOYtA+jEvSuCZ+CLzrxZtGHjGztg' +
            'm7ZwZeG722CgEHiBJc0aQ+YFnMJ+MjSzzbw03YWXgWTR8z1zaPf2t' +
            'J77mHYFnznWWfiiaPlFr4tCY6XfNv1q0SeCZ+KvZqp1PHXjKq9itA' +
            'NjYtoHnMjkn01n1MT0o9HcetUf8wWYLPIPH76+tenzgmbOPbOJr3v' +
            'Hp960Q26qdTx148jw3wwOkZ/PA0xj8n9gzd2ndXH4cN/BsOzwdYYZ' +
            'nzmRdbeYTzAMFnq3auTTwbHsP85XKshR4gPQsWgSyKPC0DW7lnhgU' +
            'brZq88AzZ0Im0F1T9raGZ/PAs2hmbPqwQQPPhu186sBzvordCoCNz' +
            'dnmsz7wXIYG7jmBZ350mdOkwXfdsUtr0TA6/5g72aW1eeCZs5O9HT' +
            'YmrhYFDTwbtvOpnxNnhgdI1fSNXC4jt4IZfHDV6+l1bBi6L/CMTVw' +
            '0Y9P6wDPnPjzVazr34Zme5Kle/vbyuu19eCbuETTx19ceoPv34XlM' +
            '4JmZEuckz6CBZ8N2PnXgMcMDpKo9JnbGkc46nJuBZyylDOaEwR82q' +
            'WnshsadRdHrA8+iOy13XtyfCgh348GxwNP+61t6p+UHBJ751wEXrU' +
            'faPPBs286nDjxmeICEzbxL28zAM6EdJ6bvJTh9B56Xf3sI0gaBZ6I' +
            'lbYuepXV6YOC5rHiW1gMCz817U/c/d+LLhgs869t5c8HzxGNBdvUs' +
            'rSzLzPAACRv7z3U1cL99fCy90/LM/+APBq3mgGMxrDrOhmt4Or8aN' +
            'PaU0kVf9uaZvzvwXFY8LT1o4Ln75ttjZy9Q4NmknQIPwLPoDPrNf4' +
            'SXLlruB5U5Fyka7RGq89vp7eRrAk+tHxsmWj4Ye+4YuTYJPLX+mZ9' +
            '+dGbowLPo+VNzXh8o8GzSzmQCT1mWeZ7HbgUAQEAWLQMAySuKQuAB' +
            'ANJWpZ0sy2K3AgAgoDzPPTwUAEhbURQWLQMAaTufz248CACkLcsyg' +
            'QcASJsZHgAgeVXgsWgZAEibR0sAAMkrrmK3AgAgoLIszfAAAGmzhg' +
            'cASF5RFAIPAJC2Ku1YwwMApM2iZQAgeeer2K0AAAhI4AEAklcUhcA' +
            'DAKTNnZYBgOS5Dw8AkDxreACA5GVZZls6AJA2MzwAQPLcaRkASJ4Z' +
            'HgAgebalAwDJqwKPbekAQNo8PBQASJ5FywBA8qzhAQCSZ5cWAJC8P' +
            'M8FHgAgbVXaybIsdisAAAISeACA5Ak8AEDy8jwXeACAtBVFYdEyAJ' +
            'A2gQcASJ5LWgBA8ixaBgCSV6Udz9ICANIm8AAAyTufzwIPAJC2siz' +
            't0gIA0lalnSrzxG4FAEBAZngAgORVgccaHgAgbQIPAJC84ip2KwAA' +
            'AirLMs/z2K0AAAjofD4LPABA2qq0Y5cWAJC2oijchwcASJsZHgAge' +
            'SFuPPiDT788eG17PgGAlULchyd63ohe255PAGClPM8FHoEHANJWpZ' +
            '3Nt6VHzxvRa9vzCQCsVAUea3gEHgBIW4ht6dHzRvTa9nwCACudz2d' +
            'reAQeAEjb+WrbY0bPG9Fr2/MJAKzkkpbAAwDJs2hZ4AGA5JnhEXhY' +
            '6eXt49TycjpdPt5iN2qVt4/L9Xuc3l5Ol8tH7OYAbMAaHoGHu71fq' +
            'mDwevqqtANP86vK5f01VgsBlsqyLMnA82effnk6/ar6b/Jn3/lrgY' +
            'dBzczMx9vLHW+vcsDp5e3UI/AA7FBRFFXm2faY0dNOVd/+0y/r/yY' +
            'LPIxZGXgSHvrnBJ4Ech1wKEk+PLRJOwIPE1YGnubt76+nzdsWl8AD' +
            'pCelS1qffPPX/esLAg9jVgae0+t7ktM7F4EHSFFKu7QEHhYReMYIP' +
            'EB6UrqkJfAkoFkJ/FqNp7/fBdXdCdX8fExnk/hgnum/pu2Oj5h475' +
            'z2tL/m2Kc3L2iHkPWnq70S6fTvl+cmAk9zfIEHeC4pzfC064+/+68' +
            'CzzPqjODNLErH4KRKZ+yeeMtjAs/89lw2CjyLTtfgnvr6UG8f7wIP' +
            'kJjyattjRk87As/zakbw61WT0bTQH21f3y9jL+6P+w8IPIvac1kde' +
            'JaerrG00yHwAMlIdVu6wPOk+je3aV8Aas+ZtPdGtYfvzkDcfksnS4' +
            'Rbw3NHe1YGnkWnq934/tdvH3Mi8NyMhQC7UpZlMru0BJ4ETI+2l9b' +
            'MSfu3TXQZHIXb8aM9uIcLPHe0Z33gmX+62rNP0xcHBR4gGSktWhZ4' +
            'EtBfhdvRjMXNC9qD/lh0mY5J2wae+9qz1aLljv7pard87A5CAg+Qn' +
            'jzPzfAIPPtxcwTvD7hzVpUMjvuBAs997QkUePqHbeexsQ31E4Hn5i' +
            'cC7FOVdixaFnj2444RfDDMjL2rHUICBZ772vOwwDNnikbgAdJjDY/' +
            'AsyuBAk97N9MeAk+/PQIPQFB5npvhEXj2wwzPswSewTXSALtVFIUZ' +
            'HoFnP6zheVjgmdM8gQdIRpV27NISePZj5Spcu7TG3rXodE0EHoAnl' +
            'WWZwCPw7McdI/glifvw3Nw81XzcysBzs3ljnwXw1MqydKdlgWc/7h' +
            'vB77vTcjPN0n5L9evX0+uc5bjb3mm5fcDOWzpPslgfeNrN67xx4rM' +
            'Anlpxte0xo6cdged53TeCX5Y/u+oy/nDPmfuPJgLPtu3pWB94Lree' +
            'Jjb4WZ0DepYW8FyqtJPn+bbHjBVyPvnmr6f/6/39b5wEnp27ewS/L' +
            'Hw6eW1w3N8k8NzXnrGYVAWP98vHJmt4+u3vf9bbx4enpQOJOV9te0' +
            'yBZ9vzeShrRvBaP8NML9FpX9+Z8/rGzcCzSXv6u6u2Cjz9z2oyzJx' +
            'HSwg8wHMpr7Y9psCz7fkEAFZK9T48cWvb8wkArJTqs7QEHgCgkeqz' +
            'tAQeAKCR6p2WBR4AoGGGR+ABgOSltC19P7Xt+QQAVhJ4BB4ASF6qD' +
            'w8VeACARlmWAo/AAwBpc0lL4AGA5Ak8Ag8AJK8oiizLtj1m9LwRvb' +
            'Y9nwDASh4tIfAAQPLs0hJ4ACB51vAIPACQvKIoXNISeAAgbdbwCDw' +
            'AkLyiKFzSEngAIG3F1bbHjJ43ote25xMAWMkaHoEHAJJnhkfgAYDk' +
            'CTwCDwAk73w+CzwCDwCkLc9zu7QEHgBIm8Aj8ABA8tx4UOABgOSFe' +
            'HgoAMCuCDwAQPLKq9itAAAIKM9zMzwAQNrKshR4AIC0na9itwIAIC' +
            'AzPABA8szwAADJM8MDACQvyzIzPABA2gQeACB5ZVnmeR67FQAAAVm' +
            '0DAAkrygKgQcASFuVdrIsi90KAICA8jz38FAAIG1FUVi0DACk7Xw+' +
            'u/EgAJC2LMsEHgAgbWZ4AIDkVYHHomUAIG0eLQEAJK+4it0KAICAy' +
            'rI0wwMApM0aHgAgeUVRCDwAQNqqtGMNDwCQNouWAYDkna9itwIAIC' +
            'CBBwBIXlEUAg8AkDZ3WgYAkuc+PABA8qzhAQCSl2WZbekAQNrM8AA' +
            'AyXOnZQAgeWZ4AIDk2ZYOACSvCjy2pQMAafPwUAAgeRYtAwDJs4YH' +
            'AEieXVoAQPLyPBd4AIC0VWkny7LYrQAACEjgAQCSJ/AAAMnL81zgA' +
            'QDSVhSFRcsAQNoEHgAgeS5pAQDJs2gZAEhelXY8SwsASJvAAwAk73' +
            'w+CzwAQNrKsrRLCwBIW5V2qswTuxUAAAGZ4QEAklcFHmt4AIC0CTw' +
            'AQPKKq9itAAAIqCzLPM9jtwIAIKDz+SzwAABpq9KOXVoAQNqKonAf' +
            'HgAgbWZ4AIDkufEgAJA89+EBAJKX57nAAwCkrUo7tqUDAGmrAo81P' +
            'ABA2mxLBwCSdz6freEBANJ2vordCgCAgFzSAgCSZ9EyAJA8MzwAQP' +
            'Ks4QEAkpdlmcADAKStKIoq88RuBQBAQB4eCgAkzyUtACB5dmkBAMl' +
            'zSQsASJ4ZHgAgeeVV7FYAAARkWzoAkLyyLO3SAgDSZtEyAJC8PM/N' +
            '8AAAaavSjkXLAEDarOEBAJKX57kZHgAgbUVRmOEBANJWpR27tACAt' +
            'GVZJvAAAGkry9KdlgGAtBVXsVsBABBQlXbyPI/dCgCAgM5XsVsBAB' +
            'BQeRW7FQAAAbkPDwCQvPuepfWDT79UCVeIngYAEd33LK3oI7IKWiF' +
            '6GgBEdN+dlqOPyCpohehpABCRGR7VrxA9DQAium9bevQRWQWtED0N' +
            'ACISeFS/QvQ0AIjovoeHRh+RVdAK0dMAIKKyLAUe1akQPQ0AInJJS' +
            '/UrRE8DgIgEHtWvED0NACIqiiLLsqXvij4iq6AVoKMBQEweLaH6Fa' +
            'KnAUBEdmmpfoXoaQAQkTU8ql8hehoARFQUhUtaqlMhehoARGQNj+p' +
            'XiJ4GABEVReGSlupUiJ4GABEVV0vfFX1EVkErRE8DgIis4VH9CtHT' +
            'ACAiMzyqXyF6GgBEJPCofoXoaQAQ0fl8FnhUp0L0NACIKM9zu7RUp' +
            '0L0NACISOBR/QrR0wAgIjceVP0K0dMAICIPD1X9CtHTACAigUf1K0' +
            'RPA4CIyqul74o+IqugFaKnAUBEeZ6b4VGdCtHTACCisiwFHtWpED0' +
            'NACI6Xy19V/QRWQWtED0NACIyw6P6FaKnAUBEZnhUv0L0NACIyAyP' +
            '6leIngYzvbx9nFpeTqfLx1vsRq3y9nG5fo/T28vpcvmI3Rw4qCzLz' +
            'PCoToXoaXDT+6UKBq+nr0o78DS/qlzeX2O1EI5A4FH9CtHTYFqVA0' +
            '4vb6cegQfYRFmWeZ4vfVf0EVkFrRA9DaYlPPTPCTwJ5DrYOYuWVb9' +
            'C9DSY1izdeX89xW7LxgQe2IOiKAQe1akQPQ2mnV7fk5zeuQg8sA9V' +
            '2smybOm7oo/IKmgF6Ghwg8Aj8EBQeZ57eKjqVIieBmM6+9DbXqsY8' +
            'PvNW1Mv/nh76R+z2fDVP0LnBe0Q0iycbt7V2Tg2drRGeyVSc3luIv' +
            'A0xxd4ILSiKCxaVp0K0dNgzMzA08kSHZ15oU0CTzPpNP1ZnQP2v8L' +
            'bx7vAA9Gdz2c3HlSdCtHTYMycwPP6fhl7zWAOWRl4rheZRsNVP5yM' +
            'pZ0OgQciyrJM4Flaf/bpl6fTr6r/Rn32nb+O3pgQFaKnwbSJNTztO' +
            'NEJBu1pn3a2WRl4Gu3rZe3P6mwla88FdS6xtY85EXhuXiwDVjLDc0' +
            'd9+0+/rP/zJfDAViYCTzMFNJgK2nGoCRvrA8/gYyCaiab2b9uzT4N' +
            'Xu+as4RF4ILQq8Fi0vKiatCPwwIbGAk87hAyuT74M5ZCtFi13NNGl' +
            '/YKm5WN3EBJ4YA88WmJmffLNX/evyAs8sJWxwDNnlUs/hwQKPP3Dt' +
            'vPY2Ib6icBz8xOBrRRXS98VfUR+fAk8ENRY4BmcVOnoh6KHBZ45Uz' +
            'QCD+xBWZZmeOaUwANBrQk87d1VAg8wyBqeO+qPv/uvAg9s6+AzPIN' +
            'rpIENFUUh8CwtgQc296RreBY1T+CBiKq0Yw3P0hJ4YHNPsUtretHy' +
            'WPMmAg/wMBYt31ECD2xu2/vw3Nw81XzcysBzs3ljnwU82Plq6buij' +
            '8hxS+CBzW17p+X2ATtv6TzJYn3gaTev88aJzwIeTOC5owQe2NxE4L' +
            'ksf5bW5dbDRjcMPJfJx4FNBx7P0oKHKYpC4FlaAg9sbjrwXBY+Lb0' +
            '2FpOq4PF++dhkDU+//f3Pevv48LR0iM6dlu8ogQc2dzPw1PpzKWNL' +
            'hWud55j3d1dtFXj6n9VkmDmPlhB4IDT34bmjBB4AeC7W8NxRAg8AP' +
            'Jcsy2xLX1oCDwA8FzM8d5TAAwDPxZ2W7yiBBwCeixmeO0rgAYDnYl' +
            'v6zPrkm78euf/Hv/n+N07RG7lVhehpABBRFXhsS59TAg8APC8PD51' +
            'ZAg8APC+LllW/QvQ0AIjIGh7VrxA9DQAisktL9StETwOAiPI8F3hU' +
            'p0L0NACIqEo7WZYtfVf0EVkFrQAdDQBiEnhUvwJ0NACISeBR/QrQ0' +
            'QAgpjzPBR7VqQAdDQBiKorComXVqRA9DQAiEnhUv0L0NACIyCUt1a' +
            '8AHQ0AYrJoWfUrQEcDgJiqtONZWqpTIXoaAEQk8Kh+hehpABDR+Xw' +
            'WeFSnQvQ0AIioLEu7tFSnQvQ0AIioSjtV5ln6rugjsgpaIXoaAERk' +
            'hkf1K0RPA4CIqsBjDY/qVIieBgARCTyqXyF6GgBEVFwtfVf0EVkFr' +
            'RA9DQAiKssyz/Ol74o+IqugFaKnAUBE5/NZ4FGdCtHTACCiKu3Ypa' +
            'U6FaKnAUBERVG4D4/qVIieBgARmeFR/QrR0wAgIjceVP0K0dMAICL' +
            '34VH9CtHTACCiPM8FHtWpED0NACKq0o5t6apTIXoaAERUBR5reFSn' +
            'QvQ0AIjItnTVrxA9DQAiOp/P1vCoToXoaQAQ0flq6buij8gqaIXoa' +
            'QAQkUtaql8hehoARGTRsupXiJ4GABGZ4VH9CtHTACAia3hUv0L0NA' +
            'CIKMsygUd1KkRPA4CIiqKoMs/Sd0UfkVXQCtDR2Nj//j+/O/X8v/f' +
            'X2O0C2CkPD1X9CtHT2MTH5Xd/9Lf/3I86jb/95JPf/d+32M0E2B2X' +
            'tFS/QvQ0Jvzit5/NrP/x288++fx7E4Gn8t3T6X/9y3fq18f+ZgB7Y' +
            'ZeW6leInsaEOwJPO9XU9bW/+09N5vnvf/91gQegzSUt1a8QPY0Jiw' +
            'LPZ59/7xe//Y+Dv20yz3/9/PSL335f4AFomOFR/QrR05gwP/BM1/m' +
            'fMoEHYFB5tfRd0UdkFbRC9DQmbBV4vvf3/7kOPD/6u5NLWgBttqWr' +
            'fgXoaEzZJO0MLu+J/c0A9qIsS7u0VKdC9DQmrE87/+1fPjud/kM9v' +
            'fM//+kbzc9jfzOAvbBoWfUrRE9jwsopnUYVejrrmWN/M4C9yPPcDI' +
            '/qVIiexoStAk+zG13gAeio0o5Fy6pTIXoaE7YKPP3YE/ubAeyFNTy' +
            'qXyF6GhM2WbTcvvFgs4wn9jcD2Is8z83wqE6F6GlM2CTw/KK1Ld19' +
            'eAA6iqIww6M6FaKnMWGrwPO3v/0vp9O32jvTY38zgL2o0o5dWqpTI' +
            'XoaEwQegNCyLBN4VKdC9DQmCDwAoZVl6U7LqlMBOhpTtgo8ze0Hmx' +
            'vyxP5mAHtRXC19V/QRWQWtED2NCYuWJfdvtlNXe5e6RcsAHVXayfN' +
            '86buij8gqaIXoaUxYFHg6jwftzO3Ylg4w6Hy19F3RR2QVtEL0NCbc' +
            'EXgmtLNQ7G8GsBfl1dJ3RR+RVdAK0dOYsGHg6cz8xP5mAHvhPjyqX' +
            'yF6GhOWLk4efKhEs25H4AHo8ywt1a8QPY0JW+3S6lfsbwawF56lpf' +
            'oVoqcxQeABCM2dllW/QvQ0Jgg8AKGZ4VH9CtHTmCDwAIRmW7rqV4i' +
            'exgSBByA0gUf1K0RPA4CIPDxU9StETwOAiMqyFHhUp0L0NACIyCUt' +
            '1a8QPQ0AIhJ4VL9C9DQAiKgoiizLlr4r+oisglaAjgYAMd33aAkAg' +
            'Cdy3y4t2MQXP/9pMhX7XAIw5b41PLCJ6ClF4AE4iKIoXNIilugpRe' +
            'ABOAhreIgoekoReAAOoigKl7SIJXpKEXgADqK4it0KDip6ShF4AA7' +
            'CGh4iip5SBB6AgzDDQ0TRU4rAA3AQAg8RRU8pAg/AQZzPZ4GHWKKn' +
            'FIEH4CDyPLdLi1iipxSBB+AgBB4iip5SBB6Ag3DjQSKKnlIEHoCD8' +
            'PBQIoqeUgQegIMQeIgoekoReAAOoryK3QoOKnpKEXgADiLPczM8xB' +
            'I9pQg8AAdRlqXAQyzRU4rAA3AQ56vYreCgoqcUgQfgIMzwEFH0lCL' +
            'wAByEGR4iip5SBB6AgzDDQ0TRU4rAA3AQWZaZ4SGW6ClF4AE4CIGH' +
            'iKKnFIEH4CDKsszzPHYrOKjoKUXgATgIi5aJKHpKEXgADqIoCoGHW' +
            'KKnFIEH4CCqtJNlWexWcFDRU4rAA3AQeZ57eCixPCCH/PKvfnz6ql' +
            '9+8kdf/PwvBR6AQymKwqJlYgmXc37zs5+evlOexv3Dn3zti5//jcA' +
            'DcBDn89mNB4klYuCp/PNnXxd4AA4iyzKBh1geEHh+eDp98ZPPm5//' +
            '449/cjp9qw48nV8JPAAJM8NDREEDzy+/+4PBtTpvP6syz/frzPObP' +
            '/+ewANwBFXgsWiZWMIFnuk6ffoXm1/Vin0uAZji0RJEFCvw/PDzHw' +
            'k8AIdSXMVuBQcl8ADwGGVZmuEhlihpp72B64sffSbwAByBNTxEFCX' +
            'wNBu1tr0DYexzCcCUoigEHmKJO72z4RYtgQdg56q0Yw0PsTw+8DSr' +
            'd9xpGeBQLFomogennea5WtveclDgAdi/81XsVnBQj0w77Xssb7hWW' +
            'eABeAoCDxElk3YEHoCdK4pC4CGWZNKOwAOwc+60TETJpB2BB2Dn3I' +
            'eHiJJJOwIPwM5Zw0NEQRNI0D1ZAg/Ac8myzLZ0Ykkm7Qg8ADtnhoe' +
            'IHhB4btrq+aGxzyUAU9xpmYgEHgAewwwPEQk8ADyGbelEFC7wPL5i' +
            'n0sAplSBx7Z0YomeUgQegIPw8FAiip5SBB6Ag7BomYiipxSBB+Agr' +
            'OEhougpReABOAi7tIgoekoReAAOIs9zgYdYoqcUgQfgIKq0k2VZ7F' +
            'ZwUNFTisADcBACDxFFTykCD8BBCDxEFD2lCDwAB5HnucBDLNFTisA' +
            'DcBBFUVi0TCzRU4rAA3AQAg8RRU8pAg/AQbikRUTRU4rAA3AQFi0T' +
            'UfSUIvAAHESVdjxLi1iipxSBB+AgBB4iip5SBB6AgzifzwIPsURPK' +
            'QIPwEGUZWmXFrFETykCD8BBVGmnyjyxW8FBRU8pAg/AQZjhIaLoKU' +
            'XgATiIKvBYw0Ms0VOKwANwEAIPEUVPKQIPwEEUV7FbwUFFTykCD8B' +
            'BlGWZ53nsVnBQ0VOKwANwEOfzWeAhlugpReABOIgq7dilRSzRU4rA' +
            'A3AQRVG4Dw+xRE8pAg/AQZjhIaLoKUXgATgINx4kougpReABOAj34' +
            'SGi6ClF4AE4iDzPBR5iiZ5SBB6Ag6jSjm3pxBI9pQg8AAdRBR5reI' +
            'glekoReAAOwrZ0ACB55/PZGh4AIG3nq9itAAAIyCUtACB5Fi0DAMk' +
            'zwwMAJM8aHgAgeVmWCTwAQNqKoqgyT+xWAAAE5OGhAEDyXNICAJJn' +
            'lxYAkDyXtACA5JnhAQCSV17FbgUAQEC2pQMAySvL0i4tACBtFi0DA' +
            'MnL89wMDwCQtirtWLQMAKTNGh4AIHl5npvhAQDSVhSFGR4AIG1V2r' +
            'FLCwBIW5Zl9dMl6uRT/7me9mn/uf7X+tHqzb9Wv61/Uv2h3u3Vfn3' +
            '9mubP9Uc0r2neW/+kaUDTjOoP9Qvqz63/2Wln+yOaAzb/7Lek+WHV' +
            '2vogTfubP9evaXReXH/N9jet/llfFqx/3jlFzVdoflW/sVa90fl3/' +
            'p1/59/5d/6d/8ec/+Yj2k1qn/z6aPlV++3Nh7ZP5rmlbklzeuvfdl' +
            '7cfHT7NLb/Xupv1GlM802bj2j/qvle9V9lc4SmnzSnqP3G9kmrz21' +
            'z9prv3vSrTlfsdM6x8998kfahnH/n3/l3/p1/59/5D33+/z9dU1GR');
            SetTargetBitmap(bmp);
            GetBitmapSize(bmp,w,h);
      MainLoop();
    end.


    As ATPAs:

    Last edited by bg5; 06-17-2016 at 09:07 PM. Reason: SPOILER fail

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •