Sensor Factory Calibration

Started by Greg, November 28, 2018, 02:19:44 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

dfort

Tried finding the addresses on the EOSM and got lost. Did better with the 7D.

ISO 100:
EDMAC#9: addr=0x3d9fc0 conn=15 cbr=0 name='''''' size='''5360x4'''
EDMAC#0: addr=0x1ca23e84 conn=2 cbr=0 name='''''' size='''480x16'''
EDMAC#1: addr=0x1ca26084 conn=28 cbr=0 name='''''' size='''(432, skip 80) x 192'''
EDMAC#2: addr=0x4006e50 conn=0 cbr=0 name='''''' size='''9380x3516'''
EDMAC#6: addr=0x1ca3e204 conn=18 cbr=0 name='''''' size='''4096x18, 3072'''
EDMAC#8: addr=0x4ece3c conn=0 cbr=0 name='''''' size='''2000x224'''
EDMAC#9: addr=0x46cce8 conn=15 cbr=0 name='''''' size='''8x3516'''


ISO 200:
EDMAC#9: addr=0x3e9b18 conn=15 cbr=0 name='''''' size='''5360x4'''
EDMAC#0: addr=0x1ca23e84 conn=2 cbr=0 name='''''' size='''480x16'''
EDMAC#1: addr=0x1ca26084 conn=28 cbr=0 name='''''' size='''(432, skip 80) x 192'''
EDMAC#2: addr=0x4006e50 conn=0 cbr=0 name='''''' size='''9380x3516'''
EDMAC#6: addr=0x1ca3e204 conn=18 cbr=0 name='''''' size='''4096x18, 3072'''
EDMAC#8: addr=0x4ece3c conn=0 cbr=0 name='''''' size='''2000x224'''
EDMAC#9: addr=0x4816a0 conn=15 cbr=0 name='''''' size='''8x3516'''


ISO 400:
EDMAC#9: addr=0x3f9670 conn=15 cbr=0 name='''''' size='''5360x4'''
EDMAC#0: addr=0x1ca23e84 conn=2 cbr=0 name='''''' size='''480x16'''
EDMAC#1: addr=0x1ca26084 conn=28 cbr=0 name='''''' size='''(432, skip 80) x 192'''
EDMAC#2: addr=0x4006e50 conn=0 cbr=0 name='''''' size='''9380x3516'''
EDMAC#6: addr=0x1ca3e204 conn=18 cbr=0 name='''''' size='''4096x18, 3072'''
EDMAC#8: addr=0x4ece3c conn=0 cbr=0 name='''''' size='''2000x224'''
EDMAC#9: addr=0x496058 conn=15 cbr=0 name='''''' size='''8x3516'''


ISO 800:
EDMAC#9: addr=0x4091c8 conn=15 cbr=0 name='''''' size='''5360x4'''
EDMAC#2: addr=0x4006e50 conn=0 cbr=0 name='''''' size='''9380x3516'''
EDMAC#1: addr=0x1ca26084 conn=28 cbr=0 name='''''' size='''(432, skip 80) x 192'''
EDMAC#0: addr=0x1ca23e84 conn=2 cbr=0 name='''''' size='''480x16'''
EDMAC#6: addr=0x1ca3e204 conn=18 cbr=0 name='''''' size='''4096x18, 3072'''
EDMAC#9: addr=0x4aaa10 conn=15 cbr=0 name='''''' size='''8x3516'''
EDMAC#8: addr=0x4ece3c conn=0 cbr=0 name='''''' size='''2000x224'''


ISO 1600:
EDMAC#9: addr=0x418d20 conn=15 cbr=0 name='''''' size='''5360x4'''
EDMAC#1: addr=0x1ca26084 conn=28 cbr=0 name='''''' size='''(432, skip 80) x 192'''
EDMAC#2: addr=0x4006e50 conn=0 cbr=0 name='''''' size='''9380x3516'''
EDMAC#0: addr=0x1ca23e84 conn=2 cbr=0 name='''''' size='''480x16'''
EDMAC#6: addr=0x1ca3e204 conn=18 cbr=0 name='''''' size='''4096x18, 3072'''
EDMAC#8: addr=0x4ece3c conn=0 cbr=0 name='''''' size='''2000x224'''
EDMAC#9: addr=0x4bf3c8 conn=15 cbr=0 name='''''' size='''8x3516'''


ISO 3200:
EDMAC#9: addr=0x42dc40 conn=15 cbr=0 name='''''' size='''5360x4'''
EDMAC#2: addr=0x4006e50 conn=0 cbr=0 name='''''' size='''9380x3516'''
EDMAC#0: addr=0x1ca23e84 conn=2 cbr=0 name='''''' size='''480x16'''
EDMAC#1: addr=0x1ca26084 conn=28 cbr=0 name='''''' size='''(432, skip 80) x 192'''
EDMAC#6: addr=0x1ca3e204 conn=18 cbr=0 name='''''' size='''4096x18, 3072'''
EDMAC#8: addr=0x4ece3c conn=0 cbr=0 name='''''' size='''2000x224'''
EDMAC#9: addr=0x4c61b0 conn=15 cbr=0 name='''''' size='''8x3516'''


ISO 6400:
EDMAC#9: addr=0x44d2f0 conn=15 cbr=0 name='''''' size='''5360x4'''
EDMAC#2: addr=0x4006e50 conn=0 cbr=0 name='''''' size='''9380x3516'''
EDMAC#1: addr=0x1ca26084 conn=28 cbr=0 name='''''' size='''(432, skip 80) x 192'''
EDMAC#0: addr=0x1ca23e84 conn=2 cbr=0 name='''''' size='''480x16'''
EDMAC#6: addr=0x1ca3e204 conn=18 cbr=0 name='''''' size='''4096x18, 3072'''
EDMAC#9: addr=0x4ccf98 conn=15 cbr=0 name='''''' size='''8x3516'''
EDMAC#8: addr=0x4ece3c conn=0 cbr=0 name='''''' size='''2000x224'''


ISO 12800
EDMAC#9: addr=0x457a80 conn=15 cbr=0 name='''''' size='''5360x4'''
EDMAC#0: addr=0x1ca23e84 conn=2 cbr=0 name='''''' size='''480x16'''
EDMAC#1: addr=0x1ca26084 conn=28 cbr=0 name='''''' size='''(432, skip 80) x 192'''
EDMAC#2: addr=0x4006e50 conn=0 cbr=0 name='''''' size='''9380x3516'''
EDMAC#6: addr=0x1ca3e204 conn=18 cbr=0 name='''''' size='''4096x18, 3072'''
EDMAC#8: addr=0x4ece3c conn=0 cbr=0 name='''''' size='''2000x224'''
EDMAC#9: addr=0x4d3d80 conn=15 cbr=0 name='''''' size='''8x3516'''


Plugging this into the module:

    if (is_camera("7D", "2.0.3"))
    {
        SENSOR_VFPN_ADDR_100 = 0x3d9fc0;
        SENSOR_VFPN_ADDR_200 = 0x3e9b18;
        SENSOR_VFPN_ADDR_400 = 0x3f9670;
        SENSOR_VFPN_ADDR_800 = 0x4091c8;
        SENSOR_VFPN_ADDR_1600 = 0x418d20;
        SENSOR_VFPN_ADDR_3200 = 0x42dc40;
        SENSOR_VFPN_ADDR_6400 = 0x44d2f0;
        SENSOR_VFPN_ADDR_12800 = 0x457a80;
        SENSOR_FULL_WIDTH = 5360; //if an error occurs, it prevents buffer overflow
    }


Does that look about right?

g3gg0

maybe i wasn't specific enough.
using
int PROPAD_GetPropertyData(unsigned int property, void **data, int *length)
you can read the memory address of the properties i wrote.
no need for searching, you just need PROPAD_GetPropertyData to retrieve the RAM addresses you just searched for.

some example (untested)

int (*PROPAD_GetPropertyData) (unsigned int property, void **data, int *length) = 0xFF06934C; // 7D.203, see stubs.h where they are defined
unsigned int *table = NULL;
unsigned int table_length = 0;

PROPAD_GetPropertyData(0x0101004D, &table, &length);
if(length != SENSOR_FULL_WIDTH*4)
{
    return;
}

// table should now have the RAM address you tried to find manually
table[0] = value; // patch table entry 0



advantage of above code:
- you are doing it correct (as most likely SPT tool does)
- doesnt matter when RAM addresses change (they are not guaranteed to stay the same, may even vary between boots!)
- you do not have to find RAM addresses for all models, just using the property function for that

disadvantage:
- the PROPAD_ functions are commented out for safety reasons as it is not good to mess with property data in RAM. which is exactly what you are doing anyway. so you went down that rabbit hole already ;)
- i didnt test this code

advantage/disadvantage:
- need to map property ID <-> ISO which is a good thing to document!
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

g3gg0

5D uses these dark offset table properties:


uint32_t dark_prop_ids[] = {
0x0101004D,
0x0101004E,
0x0101004F,
0x01010050,
0x01010051,
0x01010052,
0x01010053,
0x01010054,
0x01010055,
0x01010056,
0x01010057,
0x01010058,
0x01010059,
0x0101005A,
0x0101005B,
0x0101005C,
0x0101005D,
0x0101005E,
0x0101005F,
0x01010060,
0x01010061,
0x01010062,
0x0101007B,
0x0101007C }


in 5D3 code this setup is used to determine the property.
the raw iso value (0x40-0x99) is used as index to this table:


uint32_t dark_prop_ids_by_iso[89] = {
0x101004D,
0x101004D,
0x101004D,
0x101004D,
0x101004D,
0x101004D,
0x101004D,
0x101004D,
0x101004D,
0x101004D,
0x101004D,
0x101004E,
0x101004E,
0x101004F,
0x101004F,
0x101004F,
0x1010050,
0x1010050,
0x1010050,
0x1010051,
0x1010051,
0x1010052,
0x1010052,
0x1010052,
0x1010053,
0x1010053,
0x1010053,
0x1010054,
0x1010054,
0x1010055,
0x1010055,
0x1010055,
0x1010056,
0x1010056,
0x1010056,
0x1010057,
0x1010057,
0x1010058,
0x1010058,
0x1010058,
0x1010059,
0x1010059,
0x1010059,
0x101005A,
0x101005A,
0x101005B,
0x101005B,
0x101005B,
0x101005C,
0x101005C,
0x101005C,
0x101005D,
0x101005D,
0x101005E,
0x101005E,
0x101005E,
0x101005F,
0x101005F,
0x101005F,
0x1010060,
0x1010060,
0x1010061,
0x1010061,
0x1010061,
0x1010062,
0x1010062,
0x1010062,
0x101007B,
0x101007B,
0x101007C,
0x101007C,
0x101007C,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062 }


7D uses only 73 entries for this table.
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

dfort

Quote from: g3gg0 on December 17, 2018, 11:09:01 AM
- the PROPAD_ functions are commented out for safety reasons as it is not good to mess with property data in RAM. which is exactly what you are doing anyway. so you went down that rabbit hole already ;)

Interesting--it is commented out on all platforms except the 100D:

/** Properties **/
NSTUB(0xFF129D54,  PROPAD_GetPropertyData)                  // check FF0CAAF0 later
NSTUB(0xFF128748, _prop_cleanup)
NSTUB(0xFF128100, _prop_request_change)
NSTUB(0xFF12867C,  prop_deliver)
NSTUB(0xFF127F10,  prop_register_slave)


Check back later!

Greg

I will not modify these properties. I'm using this with ADTG modifications. So if I started the camera without ML, the pictures will be worse than the factory calibration.
Maybe I did not clearly write what I mean by the publication of the module. I just wanted to create something that will present effects on other cameras. To see if it is useful.

We're in Reverse Engineering, so I'm trying to show how these registers work, RAM editing is more secure when I do not know what it does.

If someone can not find the address in RAM and does not understand what this code does, he should not use it at this stage.

g3gg0

Quote from: Greg on December 17, 2018, 06:11:11 PM
I will not modify these properties.

hehe not exactly.

you *already* edit the property RAM image.
exactly the same you get when calling the PROPAD function i wrote. it will return the property's RAM buffers you are guessing right now.

right now, you are already there:
-> writing a few bytes beyond end of buffer -> risk of bricked camera
-> triggering a write-back of the properties you modified -> risk of bricked camera


using PROPAD is just a cleaner way of getting to the RAM buffer, not by trial and error but by asking the camera.
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

Greg

I thought that your clone from Santa again wants to change the value in the ROM of my 500D.  :P

Greg

500D properties :
VFPN correction (photo mode CR2 and FRSP)
0x0101004D - ISO 100
0x01010050 - ISO 200
0x01010053 - ISO 400
0x01010056 - ISO 800
0x01010059 - ISO 1600
0x0101005C - ISO 3200
0x0101005F - ISO 6400
0x01010062 - ISO 12800

HFPN correction
0x01010096 - ISO 100-12800 FRSP
0x010100A1 - ISO 100-12800 CR2


Attempt to read the RAM address and size using g3gg0's code :

g3gg0

great!
thanks for helping reverse engineering those.

i wonder what would be the effort to generate a dark frame from the data in the properties.
dump data to SD card, build an image with HFPN and VFPN only applied and use mlv_dump subtract feature to remove that noise.
just like with the normal dark frame processing using VIDF frame, because mlv_dump doesn't support the DARK block yet.


if that works, it would eliminate (?) the FPN detection in mlv_dump.

of course that DARK mlv block (see there) would have to contain this image.
as long user doesn't switch ISO during recording, writing that block at the end is enough.

(could be integrated into mlv_meta, which isn't public yet)
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

Greg

Canon photo mode function :

if (!raw_iso)
  assert("Iso != 0", "Param\\HivshdParam.c");
PROPAD_GetPropertyData(dword_FF447038[raw_iso - 64], (int)&v2, (int)&v3);
return v2;


Canon live view function :

if(raw_iso < 72)
  raw_ iso = 72;
if(raw_iso > 104)
  raw_iso = 104;
PROPAD_GetPropertyData((signed int)(raw_iso - 72) / 8 + 0x1050000, (int)&v2, (int)&v3);
Then it calculates the offset in the table (depends on the mode and position of the crop mode)


500D VFPN correction (live view)
0x1050000 - ISO 100
0x1050001 - ISO 200
0x1050002 - ISO 400
0x1050003 - ISO 800
0x1050004 - ISO 1600 - 12800




Live view on newer cameras works differently, but the address property seems to be the same.
5D3 ROM string "LiveView Gain Table Ver0.2" :
0x1050000
0x1050001
0x1050002
0x1050003
0x1050004
0x1050005
0x1050006
0x1050007
0x1050081
0x1050082
0x10500D1


BTW, we can find hotpixels table, also possible focus pixels.
For 500D this is EDMAC#8 [DEFM] engine.

g3gg0

5D3 gives me those hints for defects, not sure if it is the track you are looking for.


    while ( v6 < 0x800 );
    PROPAD_GetPropertyData(0xE000001u, &dst, &length);
    memcpy(dst, (void *)data.pDestAddr, 0x2000);
    prop_request_change(0xE000001u, dst, length);
    msleep(100);
    DryosDebugMsg(0x93, 0x16, (const char *)"DefectsDetectionForLV");
    PROPAD_GetPropertyData(0xE000002u, &result, (int *)&dest);
    PROPAD_GetPropertyData(0xE000004u, &v17, (int *)&v13);
    PROPAD_GetPropertyData(0xE000003u, &v18, (int *)&v14);


here the properties, which are not quite helpful.
whats their content in your camera?


      <PropertySubBlock ValidFlag="0000FFFF" Id="00FF0000" TotalLength="00007074">
        <Properties>
          <Property Id="0E000001" BaseAddress="00EEDF40" Length="00002000">
            <String>________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________</String>
            <Data>00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF</Data>
          </Property>
          <Property Id="0E000002" BaseAddress="00EEFF48" Length="00002000">
            <String>________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________</String>
            <Data>FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Data>
          </Property>
          <Property Id="0E000003" BaseAddress="00EF1F50" Length="00001000">
            <String>________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________</String>
            <Data>FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Data>
          </Property>
          <Property Id="0E000004" BaseAddress="00EF2F58" Length="00002048">
            <String>________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________</String>
            <Data>FFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Data>
          </Property>
        </Properties>
      </PropertySubBlock>

Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

Greg

Quote from: g3gg0 on December 30, 2018, 01:40:12 AM
whats their content in your camera?
I do not remember, I just changed some values in RAM related to EDMAC#8 and I saw more defective pixsels (photo mode cr2).

I think that this code is more dangerous now.  :P
https://bitbucket.org/Gr3g01/ml-cmos-cal/commits/642112e37a254c4965280663694b87c6c45ed723?at=iso-research

For the safety of users who do not know what they are doing, the code downloaded from the repository will not be compiled.
//static int (*PROPAD_GetPropertyData) (unsigned int property, void* data, int *length) = 0xFF05A57C; // 500d.111 stubs.h

g3gg0

recommendation:

make "PROPAD_GetPropertyData = NULL" global and assign the address in the firmware version check.
if the variable is NULL, just dont call the code.

the properties might be valid for all camera models
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

g3gg0

whats the exact content of the table?

the 5D3 has a physical resolution or 5936x3952, so the table consists of pairs of two 16 bit words with 5936 entries.
in this pair, the fist value is always 510 or 512 (right y-axis), second one varies a lot (left y-axis)
the second one also has some wird gaps in it.

any idea what the second value is for?





here some excerpt



Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

Greg

Using this module you can change the value of B and click "Read column sensor value" and look at diff.
500D also affects column_black_level - https://www.magiclantern.fm/forum/index.php?topic=23086.msg209326#msg209326

500D
[EDMAC#9] Starting transfer from 0x30A10C to <15>, 4832x4, flags=0x10000


Here, you can also see some 2 parts :
5D3
[EDMAC#24] Starting transfer from 0x174E100 to <15>, 2968x4, flags=0x40020000
[EDMAC#24] Starting transfer from 0x174B2A0 to <15>, 2968x4, flags=0x40020000


Maybe someone forgot about it and treated it again like optical black.

g3gg0

hmm maybe we have offset/scaling pairs?
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

Greg

ISO 100-1600 (analog) changing the first value (A) by 1 affects column_black_level by 1.48
ISO 3200-12800 (digital) changing the first value (A) by 1 affects column_black_level by 2.96
Each camera may react differently to changing these values depending on the SHAD configuration.

update :
- stdev thershold,
- validation,
- save to file,

https://bitbucket.org/Gr3g01/ml-cmos-cal/src/iso-research/modules/cmos_cal/



To run on another camera need :
if (is_camera("500D", "1.1.1"))
{
    PROPAD_GetPropertyData = 0xFF05A57C;
    SENSOR_FULL_WIDTH = 4832;
}
- calibration ratio (1.48) may be different than 500D

timbytheriver

Very interesting developments. Thanks to the brains behind it! :D

I notice that commit 4952e34 is cmos_cal.c - compatibility with other cameras

In layman's terms does this mean it is now possible to run the cmos_cal.mo on say 5D3, and if one can discover the correct RAM addresses add this data and complete a sensor calibration?

If one knows what one is doing – of course... ;)
5D3 1.1.3
5D2 2.1.2

70MM13

this forgotten thread needs some love...

perhaps some fresh eyes can look at it!