[3/3] ipa: mali-c55: Add imx708 tuning file
diff mbox series

Message ID 20250304231254.10588-4-dan.scally@ideasonboard.com
State New
Headers show
Series
  • Add Mali-C55 Tuning Script
Related show

Commit Message

Dan Scally March 4, 2025, 11:12 p.m. UTC
Add a tuning file for the imx708 with black level offsets and lens
shading table data.

Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
---
 src/ipa/mali-c55/data/imx708.yaml | 325 ++++++++++++++++++++++++++++++
 src/ipa/mali-c55/data/meson.build |   1 +
 2 files changed, 326 insertions(+)
 create mode 100644 src/ipa/mali-c55/data/imx708.yaml

Comments

Kieran Bingham July 21, 2025, 6:51 p.m. UTC | #1
Quoting Daniel Scally (2025-03-04 23:12:54)
> Add a tuning file for the imx708 with black level offsets and lens
> shading table data.
> 
> Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
> ---
>  src/ipa/mali-c55/data/imx708.yaml | 325 ++++++++++++++++++++++++++++++
>  src/ipa/mali-c55/data/meson.build |   1 +
>  2 files changed, 326 insertions(+)
>  create mode 100644 src/ipa/mali-c55/data/imx708.yaml
> 
> diff --git a/src/ipa/mali-c55/data/imx708.yaml b/src/ipa/mali-c55/data/imx708.yaml
> new file mode 100644
> index 00000000..75b8398a
> --- /dev/null
> +++ b/src/ipa/mali-c55/data/imx708.yaml
> @@ -0,0 +1,325 @@
> +# SPDX-License-Identifier: CC0-1.0
> +%YAML 1.1
> +---
> +version: 1
> +algorithms:
> +  - Agc:
> +  - Awb:
> +  - BlackLevelCorrection:
> +      offset00: 65536
> +      offset01: 65536
> +      offset10: 65536
> +      offset11: 65536

I think we've moved Black levels to the Sensor Helpers now ?

> +  - Lsc:
> +      meshScale: 6
> +      sets:
> +        - ct: 2500
> +          r: [


Are these tables converted from RPi tuning files ?

If so - can we have a conversion utility to support converting other
files, and also keep this up to date when more parameters could be
converted and supported ?

For example, I expect the white balance and CCM tuning could be
converted straight across too...

> +              227, 209, 187, 167, 150, 134, 120, 109,  99,  89,  81,  73,  67,  61,  57,  57,  57,  57,  61,  67,  73,  80,  89,  98, 109, 120, 134, 150, 168, 188, 209, 227,
> +              218, 202, 181, 161, 143, 128, 115, 104,  93,  84,  75,  67,  61,  56,  53,  51,  51,  53,  56,  61,  67,  75,  83,  93, 103, 115, 128, 143, 161, 181, 202, 219,
> +              210, 194, 173, 153, 136, 121, 109,  97,  87,  76,  67,  60,  53,  48,  45,  44,  44,  45,  48,  53,  60,  67,  76,  86,  97, 108, 121, 136, 154, 173, 194, 211,
> +              204, 187, 166, 146, 130, 115, 103,  91,  80,  69,  60,  53,  46,  41,  38,  37,  37,  38,  41,  46,  53,  60,  69,  79,  91, 102, 115, 130, 147, 166, 188, 205,
> +              197, 180, 159, 140, 124, 110,  97,  85,  73,  63,  53,  46,  40,  35,  32,  31,  31,  32,  35,  40,  46,  53,  62,  73,  85,  97, 110, 124, 140, 160, 181, 199,
> +              192, 174, 154, 134, 119, 105,  92,  80,  67,  57,  47,  40,  34,  29,  27,  25,  25,  27,  29,  34,  40,  47,  56,  67,  79,  92, 105, 119, 135, 154, 175, 193,
> +              187, 169, 148, 130, 114, 100,  87,  74,  62,  51,  42,  34,  29,  24,  22,  20,  20,  22,  24,  29,  34,  42,  51,  62,  74,  87, 100, 114, 130, 148, 170, 188,
> +              182, 164, 143, 125, 110,  96,  83,  69,  57,  46,  37,  30,  24,  20,  17,  16,  16,  17,  20,  24,  30,  37,  46,  57,  69,  82,  96, 110, 125, 143, 164, 183,
> +              178, 159, 139, 121, 106,  92,  78,  65,  52,  42,  33,  26,  20,  17,  14,  12,  12,  14,  17,  20,  26,  33,  42,  52,  65,  78,  92, 106, 121, 139, 160, 179,
> +              175, 156, 135, 118, 103,  89,  75,  61,  49,  38,  29,  22,  17,  14,  10,   9,   9,  10,  14,  17,  22,  29,  38,  48,  61,  74,  89, 103, 118, 135, 156, 176,
> +              172, 152, 132, 115, 100,  86,  71,  57,  45,  35,  26,  19,  14,  10,   8,   6,   6,   8,  10,  14,  19,  26,  34,  45,  57,  71,  85, 100, 115, 132, 152, 173,
> +              170, 149, 129, 113,  98,  83,  68,  55,  42,  32,  24,  17,  12,   8,   6,   4,   4,   6,   8,  11,  17,  23,  32,  42,  54,  68,  83,  97, 112, 129, 150, 170,
> +              168, 147, 127, 111,  96,  81,  66,  52,  40,  30,  22,  15,  10,   6,   4,   2,   2,   4,   6,  10,  15,  21,  30,  40,  52,  66,  80,  95, 110, 127, 147, 168,
> +              167, 145, 126, 109,  94,  79,  64,  50,  38,  28,  20,  13,   8,   5,   2,   1,   1,   2,   4,   8,  13,  20,  28,  38,  50,  64,  79,  94, 109, 126, 145, 167,
> +              166, 144, 125, 108,  93,  78,  63,  49,  37,  27,  19,  12,   7,   4,   1,   1,   1,   1,   4,   7,  12,  19,  27,  37,  49,  62,  77,  93, 108, 124, 144, 166,
> +              166, 144, 124, 108,  92,  77,  62,  48,  36,  26,  18,  12,   7,   3,   1,   0,   0,   1,   3,   6,  11,  18,  26,  36,  48,  62,  77,  92, 107, 124, 143, 166,
> +              166, 143, 124, 108,  92,  77,  62,  48,  36,  26,  18,  12,   7,   3,   1,   0,   0,   1,   3,   6,  11,  18,  26,  36,  48,  62,  77,  92, 107, 123, 143, 166,
> +              166, 143, 124, 108,  92,  77,  62,  48,  36,  26,  18,  12,   7,   3,   1,   1,   1,   1,   3,   6,  11,  18,  26,  36,  48,  62,  77,  92, 107, 123, 143, 166,
> +              166, 144, 125, 108,  93,  78,  63,  49,  37,  27,  19,  12,   7,   4,   2,   1,   1,   2,   4,   7,  12,  19,  27,  37,  49,  62,  77,  92, 107, 124, 144, 166,
> +              167, 145, 126, 109,  94,  79,  64,  51,  39,  28,  20,  14,   8,   5,   3,   2,   2,   3,   5,   8,  13,  20,  28,  38,  50,  64,  78,  93, 108, 125, 145, 167,
> +              168, 147, 127, 111,  96,  81,  66,  52,  40,  30,  22,  15,  10,   6,   4,   3,   3,   4,   6,  10,  15,  21,  30,  40,  52,  65,  80,  95, 110, 127, 146, 168,
> +              169, 149, 129, 112,  98,  83,  69,  55,  43,  32,  24,  17,  12,   8,   6,   4,   4,   6,   8,  12,  17,  23,  32,  42,  54,  68,  82,  97, 112, 128, 148, 169,
> +              172, 152, 132, 115, 100,  86,  71,  58,  46,  35,  26,  20,  14,  11,   8,   7,   7,   8,  11,  14,  19,  26,  35,  45,  57,  71,  85,  99, 114, 131, 151, 171,
> +              175, 155, 135, 118, 103,  89,  75,  61,  49,  38,  30,  23,  17,  14,  11,   9,   9,  11,  14,  17,  22,  29,  38,  48,  60,  74,  88, 102, 117, 134, 154, 174,
> +              178, 159, 139, 121, 106,  92,  79,  65,  53,  42,  33,  26,  21,  17,  14,  13,  13,  14,  17,  20,  26,  33,  42,  52,  64,  78,  91, 105, 120, 137, 158, 177,
> +              181, 163, 143, 125, 110,  96,  83,  70,  57,  47,  38,  30,  25,  21,  18,  16,  16,  18,  20,  25,  30,  37,  46,  57,  69,  82,  95, 108, 124, 142, 162, 181,
> +              185, 168, 147, 129, 114, 100,  87,  75,  62,  52,  42,  35,  30,  25,  22,  21,  21,  22,  25,  30,  35,  42,  51,  62,  73,  86,  99, 113, 128, 146, 167, 185,
> +              190, 173, 153, 134, 118, 105,  92,  80,  68,  57,  48,  40,  35,  30,  27,  26,  26,  27,  30,  35,  40,  47,  56,  67,  79,  91, 103, 117, 133, 152, 172, 190,
> +              196, 179, 159, 139, 123, 109,  97,  85,  74,  63,  54,  47,  40,  36,  33,  31,  31,  33,  36,  40,  46,  53,  62,  73,  84,  96, 108, 122, 138, 157, 178, 195,
> +              202, 185, 165, 146, 129, 115, 103,  91,  80,  70,  61,  54,  47,  42,  39,  38,  38,  39,  42,  46,  53,  60,  69,  79,  90, 101, 113, 128, 144, 163, 184, 201,
> +              209, 192, 172, 153, 135, 121, 108,  97,  87,  77,  68,  60,  54,  49,  46,  45,  45,  46,  49,  54,  60,  67,  76,  86,  96, 107, 119, 134, 151, 170, 191, 207,
> +              216, 199, 178, 159, 141, 126, 114, 103,  92,  82,  74,  66,  60,  54,  51,  50,  50,  51,  54,  60,  66,  73,  82,  91, 101, 112, 125, 140, 158, 177, 197, 215,
> +             ]

I love how you can 'see' the shading in the ascii data!

<snip lots of ascii data>


With BLC handled however it needs ... 

Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Dan Scally July 21, 2025, 7:19 p.m. UTC | #2
Hi Kieran

On 21/07/2025 19:51, Kieran Bingham wrote:
> Quoting Daniel Scally (2025-03-04 23:12:54)
>> Add a tuning file for the imx708 with black level offsets and lens
>> shading table data.
>>
>> Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
>> ---
>>   src/ipa/mali-c55/data/imx708.yaml | 325 ++++++++++++++++++++++++++++++
>>   src/ipa/mali-c55/data/meson.build |   1 +
>>   2 files changed, 326 insertions(+)
>>   create mode 100644 src/ipa/mali-c55/data/imx708.yaml
>>
>> diff --git a/src/ipa/mali-c55/data/imx708.yaml b/src/ipa/mali-c55/data/imx708.yaml
>> new file mode 100644
>> index 00000000..75b8398a
>> --- /dev/null
>> +++ b/src/ipa/mali-c55/data/imx708.yaml
>> @@ -0,0 +1,325 @@
>> +# SPDX-License-Identifier: CC0-1.0
>> +%YAML 1.1
>> +---
>> +version: 1
>> +algorithms:
>> +  - Agc:
>> +  - Awb:
>> +  - BlackLevelCorrection:
>> +      offset00: 65536
>> +      offset01: 65536
>> +      offset10: 65536
>> +      offset11: 65536
> I think we've moved Black levels to the Sensor Helpers now ?

Errr I'll have to look; the ISP needs them at a specific bit-depth and possibly the BLC algorithm 
would need a patch to convert from the values in the CameraSensorHelpers then - which I assume are 
at some normalised depth. I'll post that and a patch for the CameraSensorHelperImx708 in a v2 of 
this set

>
>> +  - Lsc:
>> +      meshScale: 6
>> +      sets:
>> +        - ct: 2500
>> +          r: [
>
> Are these tables converted from RPi tuning files ?
No; I ran the tuning script from patch 2 on a bunch of images.
> If so - can we have a conversion utility to support converting other
> files, and also keep this up to date when more parameters could be
> converted and supported ?
>
> For example, I expect the white balance and CCM tuning could be
> converted straight across too...
>
>> +              227, 209, 187, 167, 150, 134, 120, 109,  99,  89,  81,  73,  67,  61,  57,  57,  57,  57,  61,  67,  73,  80,  89,  98, 109, 120, 134, 150, 168, 188, 209, 227,
>> +              218, 202, 181, 161, 143, 128, 115, 104,  93,  84,  75,  67,  61,  56,  53,  51,  51,  53,  56,  61,  67,  75,  83,  93, 103, 115, 128, 143, 161, 181, 202, 219,
>> +              210, 194, 173, 153, 136, 121, 109,  97,  87,  76,  67,  60,  53,  48,  45,  44,  44,  45,  48,  53,  60,  67,  76,  86,  97, 108, 121, 136, 154, 173, 194, 211,
>> +              204, 187, 166, 146, 130, 115, 103,  91,  80,  69,  60,  53,  46,  41,  38,  37,  37,  38,  41,  46,  53,  60,  69,  79,  91, 102, 115, 130, 147, 166, 188, 205,
>> +              197, 180, 159, 140, 124, 110,  97,  85,  73,  63,  53,  46,  40,  35,  32,  31,  31,  32,  35,  40,  46,  53,  62,  73,  85,  97, 110, 124, 140, 160, 181, 199,
>> +              192, 174, 154, 134, 119, 105,  92,  80,  67,  57,  47,  40,  34,  29,  27,  25,  25,  27,  29,  34,  40,  47,  56,  67,  79,  92, 105, 119, 135, 154, 175, 193,
>> +              187, 169, 148, 130, 114, 100,  87,  74,  62,  51,  42,  34,  29,  24,  22,  20,  20,  22,  24,  29,  34,  42,  51,  62,  74,  87, 100, 114, 130, 148, 170, 188,
>> +              182, 164, 143, 125, 110,  96,  83,  69,  57,  46,  37,  30,  24,  20,  17,  16,  16,  17,  20,  24,  30,  37,  46,  57,  69,  82,  96, 110, 125, 143, 164, 183,
>> +              178, 159, 139, 121, 106,  92,  78,  65,  52,  42,  33,  26,  20,  17,  14,  12,  12,  14,  17,  20,  26,  33,  42,  52,  65,  78,  92, 106, 121, 139, 160, 179,
>> +              175, 156, 135, 118, 103,  89,  75,  61,  49,  38,  29,  22,  17,  14,  10,   9,   9,  10,  14,  17,  22,  29,  38,  48,  61,  74,  89, 103, 118, 135, 156, 176,
>> +              172, 152, 132, 115, 100,  86,  71,  57,  45,  35,  26,  19,  14,  10,   8,   6,   6,   8,  10,  14,  19,  26,  34,  45,  57,  71,  85, 100, 115, 132, 152, 173,
>> +              170, 149, 129, 113,  98,  83,  68,  55,  42,  32,  24,  17,  12,   8,   6,   4,   4,   6,   8,  11,  17,  23,  32,  42,  54,  68,  83,  97, 112, 129, 150, 170,
>> +              168, 147, 127, 111,  96,  81,  66,  52,  40,  30,  22,  15,  10,   6,   4,   2,   2,   4,   6,  10,  15,  21,  30,  40,  52,  66,  80,  95, 110, 127, 147, 168,
>> +              167, 145, 126, 109,  94,  79,  64,  50,  38,  28,  20,  13,   8,   5,   2,   1,   1,   2,   4,   8,  13,  20,  28,  38,  50,  64,  79,  94, 109, 126, 145, 167,
>> +              166, 144, 125, 108,  93,  78,  63,  49,  37,  27,  19,  12,   7,   4,   1,   1,   1,   1,   4,   7,  12,  19,  27,  37,  49,  62,  77,  93, 108, 124, 144, 166,
>> +              166, 144, 124, 108,  92,  77,  62,  48,  36,  26,  18,  12,   7,   3,   1,   0,   0,   1,   3,   6,  11,  18,  26,  36,  48,  62,  77,  92, 107, 124, 143, 166,
>> +              166, 143, 124, 108,  92,  77,  62,  48,  36,  26,  18,  12,   7,   3,   1,   0,   0,   1,   3,   6,  11,  18,  26,  36,  48,  62,  77,  92, 107, 123, 143, 166,
>> +              166, 143, 124, 108,  92,  77,  62,  48,  36,  26,  18,  12,   7,   3,   1,   1,   1,   1,   3,   6,  11,  18,  26,  36,  48,  62,  77,  92, 107, 123, 143, 166,
>> +              166, 144, 125, 108,  93,  78,  63,  49,  37,  27,  19,  12,   7,   4,   2,   1,   1,   2,   4,   7,  12,  19,  27,  37,  49,  62,  77,  92, 107, 124, 144, 166,
>> +              167, 145, 126, 109,  94,  79,  64,  51,  39,  28,  20,  14,   8,   5,   3,   2,   2,   3,   5,   8,  13,  20,  28,  38,  50,  64,  78,  93, 108, 125, 145, 167,
>> +              168, 147, 127, 111,  96,  81,  66,  52,  40,  30,  22,  15,  10,   6,   4,   3,   3,   4,   6,  10,  15,  21,  30,  40,  52,  65,  80,  95, 110, 127, 146, 168,
>> +              169, 149, 129, 112,  98,  83,  69,  55,  43,  32,  24,  17,  12,   8,   6,   4,   4,   6,   8,  12,  17,  23,  32,  42,  54,  68,  82,  97, 112, 128, 148, 169,
>> +              172, 152, 132, 115, 100,  86,  71,  58,  46,  35,  26,  20,  14,  11,   8,   7,   7,   8,  11,  14,  19,  26,  35,  45,  57,  71,  85,  99, 114, 131, 151, 171,
>> +              175, 155, 135, 118, 103,  89,  75,  61,  49,  38,  30,  23,  17,  14,  11,   9,   9,  11,  14,  17,  22,  29,  38,  48,  60,  74,  88, 102, 117, 134, 154, 174,
>> +              178, 159, 139, 121, 106,  92,  79,  65,  53,  42,  33,  26,  21,  17,  14,  13,  13,  14,  17,  20,  26,  33,  42,  52,  64,  78,  91, 105, 120, 137, 158, 177,
>> +              181, 163, 143, 125, 110,  96,  83,  70,  57,  47,  38,  30,  25,  21,  18,  16,  16,  18,  20,  25,  30,  37,  46,  57,  69,  82,  95, 108, 124, 142, 162, 181,
>> +              185, 168, 147, 129, 114, 100,  87,  75,  62,  52,  42,  35,  30,  25,  22,  21,  21,  22,  25,  30,  35,  42,  51,  62,  73,  86,  99, 113, 128, 146, 167, 185,
>> +              190, 173, 153, 134, 118, 105,  92,  80,  68,  57,  48,  40,  35,  30,  27,  26,  26,  27,  30,  35,  40,  47,  56,  67,  79,  91, 103, 117, 133, 152, 172, 190,
>> +              196, 179, 159, 139, 123, 109,  97,  85,  74,  63,  54,  47,  40,  36,  33,  31,  31,  33,  36,  40,  46,  53,  62,  73,  84,  96, 108, 122, 138, 157, 178, 195,
>> +              202, 185, 165, 146, 129, 115, 103,  91,  80,  70,  61,  54,  47,  42,  39,  38,  38,  39,  42,  46,  53,  60,  69,  79,  90, 101, 113, 128, 144, 163, 184, 201,
>> +              209, 192, 172, 153, 135, 121, 108,  97,  87,  77,  68,  60,  54,  49,  46,  45,  45,  46,  49,  54,  60,  67,  76,  86,  96, 107, 119, 134, 151, 170, 191, 207,
>> +              216, 199, 178, 159, 141, 126, 114, 103,  92,  82,  74,  66,  60,  54,  51,  50,  50,  51,  54,  60,  66,  73,  82,  91, 101, 112, 125, 140, 158, 177, 197, 215,
>> +             ]
> I love how you can 'see' the shading in the ascii data!
Me too!
>
> <snip lots of ascii data>
>
>
> With BLC handled however it needs ...
>
> Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>


I actually have a newer version of this tuning file with the lens shading adjusted to be less heavy 
around the peripheries (that's the only change) - this turns out to be too heavy in certain lighting 
conditions; I'll post that version in the v2 of the set. Should I keep the ack (with BLC removed 
too), or would you like to see that version of the file first?


Thanks

Dan
Kieran Bingham July 21, 2025, 7:23 p.m. UTC | #3
Quoting Dan Scally (2025-07-21 20:19:32)
> Hi Kieran
> 
> On 21/07/2025 19:51, Kieran Bingham wrote:
> > Quoting Daniel Scally (2025-03-04 23:12:54)
> >> Add a tuning file for the imx708 with black level offsets and lens
> >> shading table data.
> >>
> >> Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
> >> ---
> >>   src/ipa/mali-c55/data/imx708.yaml | 325 ++++++++++++++++++++++++++++++
> >>   src/ipa/mali-c55/data/meson.build |   1 +
> >>   2 files changed, 326 insertions(+)
> >>   create mode 100644 src/ipa/mali-c55/data/imx708.yaml
> >>
> >> diff --git a/src/ipa/mali-c55/data/imx708.yaml b/src/ipa/mali-c55/data/imx708.yaml
> >> new file mode 100644
> >> index 00000000..75b8398a
> >> --- /dev/null
> >> +++ b/src/ipa/mali-c55/data/imx708.yaml
> >> @@ -0,0 +1,325 @@
> >> +# SPDX-License-Identifier: CC0-1.0
> >> +%YAML 1.1
> >> +---
> >> +version: 1
> >> +algorithms:
> >> +  - Agc:
> >> +  - Awb:
> >> +  - BlackLevelCorrection:
> >> +      offset00: 65536
> >> +      offset01: 65536
> >> +      offset10: 65536
> >> +      offset11: 65536
> > I think we've moved Black levels to the Sensor Helpers now ?
> 
> Errr I'll have to look; the ISP needs them at a specific bit-depth and possibly the BLC algorithm 
> would need a patch to convert from the values in the CameraSensorHelpers then - which I assume are 
> at some normalised depth. I'll post that and a patch for the CameraSensorHelperImx708 in a v2 of 
> this set
> 
> >
> >> +  - Lsc:
> >> +      meshScale: 6
> >> +      sets:
> >> +        - ct: 2500
> >> +          r: [
> >
> > Are these tables converted from RPi tuning files ?
> No; I ran the tuning script from patch 2 on a bunch of images.
> > If so - can we have a conversion utility to support converting other
> > files, and also keep this up to date when more parameters could be
> > converted and supported ?
> >
> > For example, I expect the white balance and CCM tuning could be
> > converted straight across too...
> >
> >> +              227, 209, 187, 167, 150, 134, 120, 109,  99,  89,  81,  73,  67,  61,  57,  57,  57,  57,  61,  67,  73,  80,  89,  98, 109, 120, 134, 150, 168, 188, 209, 227,
> >> +              218, 202, 181, 161, 143, 128, 115, 104,  93,  84,  75,  67,  61,  56,  53,  51,  51,  53,  56,  61,  67,  75,  83,  93, 103, 115, 128, 143, 161, 181, 202, 219,
> >> +              210, 194, 173, 153, 136, 121, 109,  97,  87,  76,  67,  60,  53,  48,  45,  44,  44,  45,  48,  53,  60,  67,  76,  86,  97, 108, 121, 136, 154, 173, 194, 211,
> >> +              204, 187, 166, 146, 130, 115, 103,  91,  80,  69,  60,  53,  46,  41,  38,  37,  37,  38,  41,  46,  53,  60,  69,  79,  91, 102, 115, 130, 147, 166, 188, 205,
> >> +              197, 180, 159, 140, 124, 110,  97,  85,  73,  63,  53,  46,  40,  35,  32,  31,  31,  32,  35,  40,  46,  53,  62,  73,  85,  97, 110, 124, 140, 160, 181, 199,
> >> +              192, 174, 154, 134, 119, 105,  92,  80,  67,  57,  47,  40,  34,  29,  27,  25,  25,  27,  29,  34,  40,  47,  56,  67,  79,  92, 105, 119, 135, 154, 175, 193,
> >> +              187, 169, 148, 130, 114, 100,  87,  74,  62,  51,  42,  34,  29,  24,  22,  20,  20,  22,  24,  29,  34,  42,  51,  62,  74,  87, 100, 114, 130, 148, 170, 188,
> >> +              182, 164, 143, 125, 110,  96,  83,  69,  57,  46,  37,  30,  24,  20,  17,  16,  16,  17,  20,  24,  30,  37,  46,  57,  69,  82,  96, 110, 125, 143, 164, 183,
> >> +              178, 159, 139, 121, 106,  92,  78,  65,  52,  42,  33,  26,  20,  17,  14,  12,  12,  14,  17,  20,  26,  33,  42,  52,  65,  78,  92, 106, 121, 139, 160, 179,
> >> +              175, 156, 135, 118, 103,  89,  75,  61,  49,  38,  29,  22,  17,  14,  10,   9,   9,  10,  14,  17,  22,  29,  38,  48,  61,  74,  89, 103, 118, 135, 156, 176,
> >> +              172, 152, 132, 115, 100,  86,  71,  57,  45,  35,  26,  19,  14,  10,   8,   6,   6,   8,  10,  14,  19,  26,  34,  45,  57,  71,  85, 100, 115, 132, 152, 173,
> >> +              170, 149, 129, 113,  98,  83,  68,  55,  42,  32,  24,  17,  12,   8,   6,   4,   4,   6,   8,  11,  17,  23,  32,  42,  54,  68,  83,  97, 112, 129, 150, 170,
> >> +              168, 147, 127, 111,  96,  81,  66,  52,  40,  30,  22,  15,  10,   6,   4,   2,   2,   4,   6,  10,  15,  21,  30,  40,  52,  66,  80,  95, 110, 127, 147, 168,
> >> +              167, 145, 126, 109,  94,  79,  64,  50,  38,  28,  20,  13,   8,   5,   2,   1,   1,   2,   4,   8,  13,  20,  28,  38,  50,  64,  79,  94, 109, 126, 145, 167,
> >> +              166, 144, 125, 108,  93,  78,  63,  49,  37,  27,  19,  12,   7,   4,   1,   1,   1,   1,   4,   7,  12,  19,  27,  37,  49,  62,  77,  93, 108, 124, 144, 166,
> >> +              166, 144, 124, 108,  92,  77,  62,  48,  36,  26,  18,  12,   7,   3,   1,   0,   0,   1,   3,   6,  11,  18,  26,  36,  48,  62,  77,  92, 107, 124, 143, 166,
> >> +              166, 143, 124, 108,  92,  77,  62,  48,  36,  26,  18,  12,   7,   3,   1,   0,   0,   1,   3,   6,  11,  18,  26,  36,  48,  62,  77,  92, 107, 123, 143, 166,
> >> +              166, 143, 124, 108,  92,  77,  62,  48,  36,  26,  18,  12,   7,   3,   1,   1,   1,   1,   3,   6,  11,  18,  26,  36,  48,  62,  77,  92, 107, 123, 143, 166,
> >> +              166, 144, 125, 108,  93,  78,  63,  49,  37,  27,  19,  12,   7,   4,   2,   1,   1,   2,   4,   7,  12,  19,  27,  37,  49,  62,  77,  92, 107, 124, 144, 166,
> >> +              167, 145, 126, 109,  94,  79,  64,  51,  39,  28,  20,  14,   8,   5,   3,   2,   2,   3,   5,   8,  13,  20,  28,  38,  50,  64,  78,  93, 108, 125, 145, 167,
> >> +              168, 147, 127, 111,  96,  81,  66,  52,  40,  30,  22,  15,  10,   6,   4,   3,   3,   4,   6,  10,  15,  21,  30,  40,  52,  65,  80,  95, 110, 127, 146, 168,
> >> +              169, 149, 129, 112,  98,  83,  69,  55,  43,  32,  24,  17,  12,   8,   6,   4,   4,   6,   8,  12,  17,  23,  32,  42,  54,  68,  82,  97, 112, 128, 148, 169,
> >> +              172, 152, 132, 115, 100,  86,  71,  58,  46,  35,  26,  20,  14,  11,   8,   7,   7,   8,  11,  14,  19,  26,  35,  45,  57,  71,  85,  99, 114, 131, 151, 171,
> >> +              175, 155, 135, 118, 103,  89,  75,  61,  49,  38,  30,  23,  17,  14,  11,   9,   9,  11,  14,  17,  22,  29,  38,  48,  60,  74,  88, 102, 117, 134, 154, 174,
> >> +              178, 159, 139, 121, 106,  92,  79,  65,  53,  42,  33,  26,  21,  17,  14,  13,  13,  14,  17,  20,  26,  33,  42,  52,  64,  78,  91, 105, 120, 137, 158, 177,
> >> +              181, 163, 143, 125, 110,  96,  83,  70,  57,  47,  38,  30,  25,  21,  18,  16,  16,  18,  20,  25,  30,  37,  46,  57,  69,  82,  95, 108, 124, 142, 162, 181,
> >> +              185, 168, 147, 129, 114, 100,  87,  75,  62,  52,  42,  35,  30,  25,  22,  21,  21,  22,  25,  30,  35,  42,  51,  62,  73,  86,  99, 113, 128, 146, 167, 185,
> >> +              190, 173, 153, 134, 118, 105,  92,  80,  68,  57,  48,  40,  35,  30,  27,  26,  26,  27,  30,  35,  40,  47,  56,  67,  79,  91, 103, 117, 133, 152, 172, 190,
> >> +              196, 179, 159, 139, 123, 109,  97,  85,  74,  63,  54,  47,  40,  36,  33,  31,  31,  33,  36,  40,  46,  53,  62,  73,  84,  96, 108, 122, 138, 157, 178, 195,
> >> +              202, 185, 165, 146, 129, 115, 103,  91,  80,  70,  61,  54,  47,  42,  39,  38,  38,  39,  42,  46,  53,  60,  69,  79,  90, 101, 113, 128, 144, 163, 184, 201,
> >> +              209, 192, 172, 153, 135, 121, 108,  97,  87,  77,  68,  60,  54,  49,  46,  45,  45,  46,  49,  54,  60,  67,  76,  86,  96, 107, 119, 134, 151, 170, 191, 207,
> >> +              216, 199, 178, 159, 141, 126, 114, 103,  92,  82,  74,  66,  60,  54,  51,  50,  50,  51,  54,  60,  66,  73,  82,  91, 101, 112, 125, 140, 158, 177, 197, 215,
> >> +             ]
> > I love how you can 'see' the shading in the ascii data!
> Me too!
> >
> > <snip lots of ascii data>
> >
> >
> > With BLC handled however it needs ...
> >
> > Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> 
> 
> I actually have a newer version of this tuning file with the lens shading adjusted to be less heavy 
> around the peripheries (that's the only change) - this turns out to be too heavy in certain lighting 
> conditions; I'll post that version in the v2 of the set. Should I keep the ack (with BLC removed 
> too), or would you like to see that version of the file first?
> 

No - keep the ack ;-) I don't want to review a bunch-of-numbers(TM) ;-)

--
Kieran

> 
> Thanks
> 
> Dan
>
Paul Elder July 22, 2025, 11:43 a.m. UTC | #4
Quoting Daniel Scally (2025-03-05 08:12:54)
> Add a tuning file for the imx708 with black level offsets and lens
> shading table data.
> 
> Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>

Looks good to me.

Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>

> ---
>  src/ipa/mali-c55/data/imx708.yaml | 325 ++++++++++++++++++++++++++++++
>  src/ipa/mali-c55/data/meson.build |   1 +
>  2 files changed, 326 insertions(+)
>  create mode 100644 src/ipa/mali-c55/data/imx708.yaml
> 
> diff --git a/src/ipa/mali-c55/data/imx708.yaml b/src/ipa/mali-c55/data/imx708.yaml
> new file mode 100644
> index 00000000..75b8398a
> --- /dev/null
> +++ b/src/ipa/mali-c55/data/imx708.yaml
> @@ -0,0 +1,325 @@
> +# SPDX-License-Identifier: CC0-1.0
> +%YAML 1.1
> +---
> +version: 1
> +algorithms:
> +  - Agc:
> +  - Awb:
> +  - BlackLevelCorrection:
> +      offset00: 65536
> +      offset01: 65536
> +      offset10: 65536
> +      offset11: 65536
> +  - Lsc:
> +      meshScale: 6
> +      sets:
> +        - ct: 2500
> +          r: [
> +              227, 209, 187, 167, 150, 134, 120, 109,  99,  89,  81,  73,  67,  61,  57,  57,  57,  57,  61,  67,  73,  80,  89,  98, 109, 120, 134, 150, 168, 188, 209, 227,
> +              218, 202, 181, 161, 143, 128, 115, 104,  93,  84,  75,  67,  61,  56,  53,  51,  51,  53,  56,  61,  67,  75,  83,  93, 103, 115, 128, 143, 161, 181, 202, 219,
> +              210, 194, 173, 153, 136, 121, 109,  97,  87,  76,  67,  60,  53,  48,  45,  44,  44,  45,  48,  53,  60,  67,  76,  86,  97, 108, 121, 136, 154, 173, 194, 211,
> +              204, 187, 166, 146, 130, 115, 103,  91,  80,  69,  60,  53,  46,  41,  38,  37,  37,  38,  41,  46,  53,  60,  69,  79,  91, 102, 115, 130, 147, 166, 188, 205,
> +              197, 180, 159, 140, 124, 110,  97,  85,  73,  63,  53,  46,  40,  35,  32,  31,  31,  32,  35,  40,  46,  53,  62,  73,  85,  97, 110, 124, 140, 160, 181, 199,
> +              192, 174, 154, 134, 119, 105,  92,  80,  67,  57,  47,  40,  34,  29,  27,  25,  25,  27,  29,  34,  40,  47,  56,  67,  79,  92, 105, 119, 135, 154, 175, 193,
> +              187, 169, 148, 130, 114, 100,  87,  74,  62,  51,  42,  34,  29,  24,  22,  20,  20,  22,  24,  29,  34,  42,  51,  62,  74,  87, 100, 114, 130, 148, 170, 188,
> +              182, 164, 143, 125, 110,  96,  83,  69,  57,  46,  37,  30,  24,  20,  17,  16,  16,  17,  20,  24,  30,  37,  46,  57,  69,  82,  96, 110, 125, 143, 164, 183,
> +              178, 159, 139, 121, 106,  92,  78,  65,  52,  42,  33,  26,  20,  17,  14,  12,  12,  14,  17,  20,  26,  33,  42,  52,  65,  78,  92, 106, 121, 139, 160, 179,
> +              175, 156, 135, 118, 103,  89,  75,  61,  49,  38,  29,  22,  17,  14,  10,   9,   9,  10,  14,  17,  22,  29,  38,  48,  61,  74,  89, 103, 118, 135, 156, 176,
> +              172, 152, 132, 115, 100,  86,  71,  57,  45,  35,  26,  19,  14,  10,   8,   6,   6,   8,  10,  14,  19,  26,  34,  45,  57,  71,  85, 100, 115, 132, 152, 173,
> +              170, 149, 129, 113,  98,  83,  68,  55,  42,  32,  24,  17,  12,   8,   6,   4,   4,   6,   8,  11,  17,  23,  32,  42,  54,  68,  83,  97, 112, 129, 150, 170,
> +              168, 147, 127, 111,  96,  81,  66,  52,  40,  30,  22,  15,  10,   6,   4,   2,   2,   4,   6,  10,  15,  21,  30,  40,  52,  66,  80,  95, 110, 127, 147, 168,
> +              167, 145, 126, 109,  94,  79,  64,  50,  38,  28,  20,  13,   8,   5,   2,   1,   1,   2,   4,   8,  13,  20,  28,  38,  50,  64,  79,  94, 109, 126, 145, 167,
> +              166, 144, 125, 108,  93,  78,  63,  49,  37,  27,  19,  12,   7,   4,   1,   1,   1,   1,   4,   7,  12,  19,  27,  37,  49,  62,  77,  93, 108, 124, 144, 166,
> +              166, 144, 124, 108,  92,  77,  62,  48,  36,  26,  18,  12,   7,   3,   1,   0,   0,   1,   3,   6,  11,  18,  26,  36,  48,  62,  77,  92, 107, 124, 143, 166,
> +              166, 143, 124, 108,  92,  77,  62,  48,  36,  26,  18,  12,   7,   3,   1,   0,   0,   1,   3,   6,  11,  18,  26,  36,  48,  62,  77,  92, 107, 123, 143, 166,
> +              166, 143, 124, 108,  92,  77,  62,  48,  36,  26,  18,  12,   7,   3,   1,   1,   1,   1,   3,   6,  11,  18,  26,  36,  48,  62,  77,  92, 107, 123, 143, 166,
> +              166, 144, 125, 108,  93,  78,  63,  49,  37,  27,  19,  12,   7,   4,   2,   1,   1,   2,   4,   7,  12,  19,  27,  37,  49,  62,  77,  92, 107, 124, 144, 166,
> +              167, 145, 126, 109,  94,  79,  64,  51,  39,  28,  20,  14,   8,   5,   3,   2,   2,   3,   5,   8,  13,  20,  28,  38,  50,  64,  78,  93, 108, 125, 145, 167,
> +              168, 147, 127, 111,  96,  81,  66,  52,  40,  30,  22,  15,  10,   6,   4,   3,   3,   4,   6,  10,  15,  21,  30,  40,  52,  65,  80,  95, 110, 127, 146, 168,
> +              169, 149, 129, 112,  98,  83,  69,  55,  43,  32,  24,  17,  12,   8,   6,   4,   4,   6,   8,  12,  17,  23,  32,  42,  54,  68,  82,  97, 112, 128, 148, 169,
> +              172, 152, 132, 115, 100,  86,  71,  58,  46,  35,  26,  20,  14,  11,   8,   7,   7,   8,  11,  14,  19,  26,  35,  45,  57,  71,  85,  99, 114, 131, 151, 171,
> +              175, 155, 135, 118, 103,  89,  75,  61,  49,  38,  30,  23,  17,  14,  11,   9,   9,  11,  14,  17,  22,  29,  38,  48,  60,  74,  88, 102, 117, 134, 154, 174,
> +              178, 159, 139, 121, 106,  92,  79,  65,  53,  42,  33,  26,  21,  17,  14,  13,  13,  14,  17,  20,  26,  33,  42,  52,  64,  78,  91, 105, 120, 137, 158, 177,
> +              181, 163, 143, 125, 110,  96,  83,  70,  57,  47,  38,  30,  25,  21,  18,  16,  16,  18,  20,  25,  30,  37,  46,  57,  69,  82,  95, 108, 124, 142, 162, 181,
> +              185, 168, 147, 129, 114, 100,  87,  75,  62,  52,  42,  35,  30,  25,  22,  21,  21,  22,  25,  30,  35,  42,  51,  62,  73,  86,  99, 113, 128, 146, 167, 185,
> +              190, 173, 153, 134, 118, 105,  92,  80,  68,  57,  48,  40,  35,  30,  27,  26,  26,  27,  30,  35,  40,  47,  56,  67,  79,  91, 103, 117, 133, 152, 172, 190,
> +              196, 179, 159, 139, 123, 109,  97,  85,  74,  63,  54,  47,  40,  36,  33,  31,  31,  33,  36,  40,  46,  53,  62,  73,  84,  96, 108, 122, 138, 157, 178, 195,
> +              202, 185, 165, 146, 129, 115, 103,  91,  80,  70,  61,  54,  47,  42,  39,  38,  38,  39,  42,  46,  53,  60,  69,  79,  90, 101, 113, 128, 144, 163, 184, 201,
> +              209, 192, 172, 153, 135, 121, 108,  97,  87,  77,  68,  60,  54,  49,  46,  45,  45,  46,  49,  54,  60,  67,  76,  86,  96, 107, 119, 134, 151, 170, 191, 207,
> +              216, 199, 178, 159, 141, 126, 114, 103,  92,  82,  74,  66,  60,  54,  51,  50,  50,  51,  54,  60,  66,  73,  82,  91, 101, 112, 125, 140, 158, 177, 197, 215,
> +             ]
> +          g: [
> +              179, 163, 144, 128, 112,  99,  88,  79,  71,  64,  58,  52,  48,  43,  41,  41,  41,  41,  43,  48,  52,  58,  64,  71,  79,  88,  99, 113, 128, 145, 164, 180,
> +              171, 157, 139, 122, 107,  94,  84,  75,  67,  60,  53,  48,  43,  40,  38,  37,  37,  38,  40,  43,  48,  53,  60,  67,  74,  84,  94, 107, 123, 139, 158, 173,
> +              165, 150, 132, 116, 101,  89,  79,  70,  62,  54,  48,  43,  38,  35,  32,  31,  31,  33,  35,  38,  43,  48,  54,  61,  69,  79,  89, 101, 116, 133, 151, 166,
> +              158, 144, 127, 110,  96,  84,  74,  65,  57,  50,  43,  38,  33,  30,  28,  27,  27,  28,  30,  33,  38,  43,  49,  57,  65,  74,  84,  96, 111, 127, 145, 160,
> +              153, 139, 121, 105,  91,  80,  70,  61,  53,  45,  38,  33,  29,  25,  23,  22,  22,  23,  25,  29,  33,  38,  45,  52,  61,  70,  80,  91, 105, 122, 140, 155,
> +              149, 134, 116, 100,  87,  76,  66,  57,  48,  41,  34,  29,  25,  21,  19,  18,  18,  19,  21,  25,  29,  34,  41,  48,  57,  66,  76,  87, 101, 117, 135, 150,
> +              144, 129, 112,  96,  84,  73,  63,  53,  44,  37,  30,  25,  21,  18,  16,  15,  15,  16,  18,  21,  25,  30,  37,  44,  53,  63,  73,  83,  96, 112, 130, 146,
> +              140, 125, 108,  93,  80,  69,  59,  50,  41,  33,  27,  22,  18,  15,  13,  12,  12,  13,  15,  18,  22,  27,  33,  41,  50,  59,  69,  80,  93, 108, 126, 142,
> +              137, 121, 104,  89,  77,  67,  56,  47,  38,  30,  24,  19,  15,  12,  10,   9,   9,  10,  12,  15,  19,  24,  30,  38,  47,  56,  66,  77,  90, 104, 122, 139,
> +              134, 118, 101,  87,  75,  64,  54,  44,  35,  28,  21,  16,  12,  10,   8,   7,   7,   8,  10,  12,  16,  21,  27,  35,  44,  54,  64,  75,  87, 101, 119, 136,
> +              132, 115,  98,  85,  73,  62,  51,  41,  33,  25,  19,  14,  10,   8,   6,   5,   5,   6,   8,  10,  14,  19,  25,  32,  41,  51,  62,  72,  84,  99, 116, 133,
> +              130, 113,  96,  83,  71,  60,  49,  39,  31,  23,  17,  12,   9,   6,   4,   3,   3,   4,   6,   8,  12,  17,  23,  30,  39,  49,  60,  71,  83,  96, 114, 131,
> +              128, 111,  95,  81,  69,  58,  48,  38,  29,  22,  16,  11,   7,   4,   3,   2,   2,   3,   4,   7,  11,  16,  22,  29,  38,  47,  58,  69,  81,  95, 112, 130,
> +              127, 110,  93,  80,  68,  57,  46,  36,  28,  21,  15,  10,   6,   3,   2,   1,   1,   2,   3,   6,  10,  15,  20,  28,  36,  46,  57,  68,  80,  93, 110, 129,
> +              127, 109,  92,  79,  67,  56,  45,  36,  27,  20,  14,   9,   5,   3,   1,   1,   1,   1,   3,   5,   9,  14,  20,  27,  35,  45,  56,  67,  79,  93, 109, 128,
> +              127, 108,  92,  79,  67,  56,  45,  35,  26,  19,  13,   9,   5,   2,   1,   0,   0,   1,   2,   5,   9,  13,  19,  26,  35,  45,  55,  67,  79,  92, 109, 128,
> +              127, 108,  92,  78,  67,  56,  45,  35,  26,  19,  13,   9,   5,   2,   1,   0,   0,   1,   2,   5,   8,  13,  19,  26,  35,  45,  55,  67,  78,  92, 108, 128,
> +              127, 108,  92,  78,  67,  56,  45,  35,  26,  19,  13,   9,   5,   2,   1,   0,   0,   1,   2,   5,   9,  13,  19,  26,  35,  45,  55,  67,  78,  92, 108, 128,
> +              127, 109,  92,  79,  67,  56,  45,  36,  27,  20,  14,   9,   5,   3,   1,   1,   1,   1,   3,   5,   9,  14,  20,  27,  35,  45,  56,  67,  79,  92, 109, 128,
> +              127, 110,  93,  80,  68,  57,  46,  36,  28,  21,  15,  10,   6,   3,   2,   1,   1,   2,   3,   6,  10,  15,  20,  28,  36,  46,  57,  68,  80,  93, 110, 129,
> +              128, 111,  95,  81,  69,  58,  48,  38,  29,  22,  16,  11,   7,   4,   3,   2,   2,   3,   4,   7,  11,  16,  22,  29,  38,  47,  58,  69,  81,  95, 112, 129,
> +              130, 113,  96,  82,  71,  60,  49,  39,  31,  23,  17,  12,   9,   6,   4,   3,   3,   4,   6,   8,  12,  17,  23,  31,  39,  49,  60,  70,  82,  96, 113, 131,
> +              132, 116,  99,  84,  73,  62,  51,  41,  33,  25,  19,  14,  10,   8,   6,   5,   5,   6,   8,  10,  14,  19,  25,  33,  41,  51,  61,  72,  84,  98, 115, 133,
> +              134, 118, 101,  87,  75,  64,  54,  44,  35,  28,  21,  16,  12,  10,   8,   7,   7,   8,  10,  12,  16,  21,  27,  35,  44,  53,  64,  74,  87, 101, 118, 135,
> +              137, 121, 104,  90,  77,  67,  56,  47,  38,  30,  24,  19,  15,  12,  10,   9,   9,  10,  12,  15,  19,  24,  30,  38,  46,  56,  66,  77,  89, 104, 122, 138,
> +              140, 125, 108,  93,  80,  69,  59,  50,  41,  33,  27,  22,  18,  15,  13,  12,  12,  13,  15,  18,  22,  27,  33,  41,  50,  59,  69,  80,  92, 108, 125, 141,
> +              143, 129, 112,  96,  83,  72,  63,  53,  45,  37,  30,  25,  22,  18,  16,  15,  15,  16,  18,  22,  25,  30,  37,  44,  53,  62,  72,  83,  96, 111, 129, 145,
> +              148, 133, 116, 100,  87,  76,  66,  57,  49,  41,  34,  29,  25,  22,  20,  19,  19,  20,  22,  25,  29,  34,  41,  48,  57,  66,  75,  87, 100, 116, 133, 149,
> +              152, 138, 121, 105,  91,  80,  70,  61,  53,  45,  39,  33,  29,  26,  24,  23,  23,  24,  26,  29,  33,  38,  45,  52,  61,  70,  79,  91, 105, 121, 138, 153,
> +              157, 143, 126, 110,  96,  84,  74,  65,  57,  50,  43,  38,  33,  30,  28,  27,  27,  28,  30,  33,  38,  43,  50,  57,  65,  74,  83,  95, 110, 126, 143, 158,
> +              163, 149, 132, 116, 101,  89,  79,  70,  62,  55,  48,  43,  38,  35,  33,  32,  32,  33,  35,  38,  43,  48,  54,  62,  69,  78,  88, 101, 116, 132, 149, 164,
> +              170, 155, 137, 121, 106,  94,  83,  74,  66,  59,  53,  47,  43,  38,  36,  36,  36,  36,  38,  43,  47,  53,  59,  66,  74,  82,  93, 106, 121, 137, 155, 171,
> +             ]
> +          b: [
> +              192, 178, 158, 140, 124, 110,  98,  88,  79,  72,  65,  59,  53,  48,  47,  47,  47,  47,  48,  53,  59,  65,  72,  79,  88,  98, 110, 124, 141, 159, 176, 191,
> +              184, 170, 150, 133, 117, 103,  92,  82,  74,  66,  59,  53,  48,  44,  42,  41,  41,  42,  45,  48,  53,  59,  66,  73,  82,  92, 103, 117, 133, 151, 168, 184,
> +              177, 162, 143, 126, 110,  97,  86,  77,  68,  60,  53,  47,  42,  38,  36,  35,  35,  36,  38,  42,  47,  53,  60,  67,  76,  86,  96, 110, 126, 144, 162, 178,
> +              171, 156, 138, 120, 105,  92,  82,  72,  63,  55,  47,  42,  36,  33,  31,  30,  30,  31,  33,  36,  42,  47,  54,  62,  72,  82,  92, 105, 120, 138, 156, 171,
> +              166, 151, 132, 115, 100,  88,  77,  68,  58,  50,  42,  36,  32,  28,  26,  25,  25,  26,  28,  32,  36,  42,  49,  58,  67,  77,  88, 100, 115, 133, 150, 166,
> +              160, 146, 128, 110,  96,  84,  74,  63,  54,  45,  38,  32,  27,  24,  21,  20,  20,  21,  24,  28,  32,  38,  45,  53,  63,  73,  84,  96, 110, 127, 146, 161,
> +              156, 141, 123, 106,  92,  80,  69,  59,  49,  41,  33,  27,  24,  20,  17,  16,  16,  18,  20,  24,  28,  34,  41,  49,  59,  69,  80,  92, 105, 122, 141, 157,
> +              151, 137, 118, 102,  88,  77,  66,  55,  45,  37,  29,  24,  20,  16,  14,  13,  13,  14,  16,  20,  24,  30,  37,  45,  55,  66,  77,  89, 102, 119, 136, 153,
> +              148, 132, 114,  98,  85,  74,  63,  52,  42,  33,  27,  21,  16,  14,  11,  10,  10,  11,  14,  16,  21,  26,  33,  42,  52,  62,  74,  86,  98, 115, 133, 150,
> +              145, 129, 111,  96,  83,  71,  60,  49,  39,  31,  24,  18,  14,  11,   8,   7,   7,   8,  11,  14,  18,  23,  30,  39,  49,  60,  71,  83,  96, 112, 130, 146,
> +              143, 127, 108,  93,  81,  69,  57,  46,  37,  28,  21,  16,  11,   8,   6,   5,   5,   6,   8,  11,  16,  21,  28,  36,  46,  57,  69,  81,  94, 109, 127, 144,
> +              141, 124, 106,  91,  79,  67,  55,  44,  34,  26,  19,  14,   9,   6,   5,   3,   3,   5,   6,  10,  14,  19,  26,  34,  44,  55,  67,  79,  92, 107, 124, 142,
> +              139, 122, 104,  90,  77,  65,  53,  42,  33,  25,  18,  12,   8,   5,   3,   2,   2,   3,   5,   8,  12,  18,  24,  33,  42,  53,  65,  77,  90, 105, 122, 140,
> +              138, 120, 102,  88,  76,  64,  52,  41,  31,  23,  17,  11,   7,   4,   2,   1,   1,   2,   4,   7,  11,  16,  23,  31,  41,  52,  64,  76,  88, 103, 120, 139,
> +              137, 119, 102,  87,  75,  63,  51,  40,  30,  22,  16,  10,   6,   3,   1,   1,   1,   1,   3,   6,  10,  15,  22,  30,  40,  51,  63,  75,  88, 103, 119, 139,
> +              137, 118, 101,  87,  75,  62,  50,  39,  30,  22,  15,  10,   6,   3,   1,   0,   0,   1,   3,   5,  10,  15,  22,  30,  39,  50,  62,  75,  87, 102, 119, 138,
> +              137, 118, 101,  87,  74,  62,  50,  39,  30,  22,  15,  10,   6,   3,   1,   0,   0,   1,   3,   5,  10,  15,  21,  30,  39,  50,  62,  75,  87, 102, 118, 138,
> +              137, 118, 101,  87,  74,  62,  50,  39,  30,  22,  15,  10,   6,   3,   1,   0,   0,   1,   3,   6,  10,  15,  22,  30,  39,  50,  62,  75,  87, 102, 118, 138,
> +              137, 119, 101,  87,  75,  62,  51,  40,  30,  22,  16,  10,   6,   3,   1,   1,   1,   2,   3,   6,  10,  15,  22,  30,  40,  51,  63,  75,  87, 102, 119, 138,
> +              138, 119, 102,  88,  75,  63,  52,  41,  31,  23,  16,  11,   7,   4,   2,   1,   2,   2,   4,   7,  11,  16,  23,  31,  41,  52,  63,  75,  88, 103, 120, 139,
> +              138, 121, 104,  89,  77,  65,  53,  42,  32,  24,  18,  12,   8,   5,   3,   2,   2,   3,   5,   8,  12,  18,  24,  32,  42,  53,  65,  77,  89, 105, 121, 139,
> +              140, 123, 105,  91,  78,  66,  55,  44,  34,  26,  19,  14,   9,   6,   5,   3,   3,   5,   6,  10,  14,  19,  26,  34,  44,  55,  66,  78,  91, 106, 123, 141,
> +              142, 125, 107,  93,  80,  68,  57,  46,  36,  28,  21,  16,  11,   8,   6,   5,   5,   6,   8,  11,  16,  21,  28,  36,  46,  57,  68,  80,  93, 108, 125, 143,
> +              144, 128, 110,  95,  82,  71,  59,  49,  39,  30,  23,  18,  13,  11,   8,   7,   7,   8,  11,  14,  18,  24,  30,  39,  49,  59,  71,  83,  95, 111, 128, 146,
> +              147, 131, 113,  98,  85,  73,  62,  52,  42,  33,  26,  20,  16,  13,  11,  10,  10,  11,  14,  16,  21,  27,  34,  42,  52,  62,  73,  85,  98, 114, 131, 148,
> +              150, 135, 117, 101,  88,  76,  65,  55,  45,  37,  30,  24,  20,  16,  14,  13,  13,  14,  16,  20,  24,  30,  37,  45,  55,  65,  76,  88, 101, 117, 135, 151,
> +              154, 140, 121, 105,  91,  79,  69,  59,  49,  40,  33,  27,  23,  20,  17,  16,  16,  18,  20,  24,  28,  34,  41,  49,  58,  69,  79,  91, 105, 121, 139, 154,
> +              158, 144, 125, 109,  94,  83,  72,  63,  53,  45,  38,  32,  27,  23,  21,  20,  20,  22,  24,  28,  32,  38,  45,  53,  62,  72,  83,  94, 109, 126, 143, 159,
> +              162, 148, 130, 113,  98,  86,  76,  67,  58,  49,  42,  36,  32,  28,  26,  25,  25,  26,  28,  32,  36,  42,  49,  57,  66,  76,  86,  98, 113, 130, 148, 164,
> +              167, 153, 135, 118, 103,  91,  80,  71,  62,  54,  47,  42,  36,  32,  30,  29,  29,  30,  33,  36,  42,  47,  54,  62,  71,  80,  90, 103, 118, 135, 153, 168,
> +              173, 161, 142, 125, 109,  96,  85,  76,  68,  59,  53,  47,  42,  38,  36,  35,  35,  36,  38,  42,  47,  53,  59,  67,  76,  85,  96, 109, 125, 142, 159, 174,
> +              181, 168, 149, 132, 116, 102,  91,  82,  73,  65,  58,  52,  47,  42,  40,  40,  40,  40,  42,  47,  52,  58,  65,  73,  81,  91, 102, 116, 132, 149, 167, 181,
> +             ]
> +        - ct: 5500
> +          r: [
> +              210, 192, 171, 153, 135, 121, 108,  98,  88,  79,  72,  65,  59,  54,  51,  51,  51,  51,  55,  60,  66,  73,  81,  90, 100, 111, 124, 139, 157, 176, 197, 215,
> +              201, 186, 166, 147, 130, 116, 104,  93,  84,  74,  66,  59,  54,  49,  47,  46,  46,  47,  50,  55,  61,  68,  76,  85,  95, 106, 119, 134, 151, 170, 191, 207,
> +              194, 179, 158, 140, 124, 110,  98,  87,  77,  68,  59,  53,  47,  43,  40,  39,  39,  41,  44,  48,  55,  61,  70,  79,  89, 100, 112, 127, 144, 163, 183, 200,
> +              188, 172, 152, 133, 118, 104,  93,  82,  71,  61,  53,  47,  40,  36,  34,  33,  33,  34,  37,  42,  48,  55,  63,  73,  84,  95, 107, 121, 137, 156, 177, 194,
> +              182, 166, 146, 127, 112,  99,  88,  76,  65,  56,  47,  40,  35,  31,  28,  27,  27,  29,  32,  36,  42,  49,  57,  67,  78,  90, 102, 115, 131, 150, 171, 188,
> +              177, 160, 140, 122, 108,  95,  83,  71,  60,  50,  42,  35,  30,  26,  23,  22,  22,  24,  27,  31,  36,  43,  52,  62,  73,  85,  98, 111, 126, 145, 165, 183,
> +              172, 155, 135, 118, 104,  91,  78,  66,  55,  45,  37,  30,  26,  21,  19,  18,  18,  19,  22,  27,  31,  39,  47,  57,  69,  81,  93, 107, 122, 140, 160, 178,
> +              168, 150, 131, 114, 100,  87,  74,  62,  50,  41,  33,  26,  21,  18,  15,  14,  14,  15,  18,  22,  27,  34,  43,  53,  64,  77,  90, 103, 118, 135, 155, 174,
> +              164, 146, 127, 111,  97,  83,  70,  58,  46,  37,  29,  22,  18,  14,  12,  11,  11,  12,  15,  18,  24,  30,  39,  49,  60,  73,  86,  99, 114, 131, 151, 170,
> +              162, 143, 124, 108,  94,  80,  67,  54,  43,  34,  26,  19,  14,  12,   9,   8,   8,   9,  12,  15,  20,  27,  35,  45,  57,  70,  83,  96, 111, 128, 148, 167,
> +              159, 140, 121, 105,  91,  77,  64,  51,  40,  31,  23,  17,  12,   9,   7,   5,   5,   7,   9,  13,  18,  24,  32,  42,  54,  67,  80,  94, 108, 125, 145, 164,
> +              156, 137, 118, 103,  89,  75,  61,  49,  38,  28,  21,  15,  10,   7,   5,   3,   3,   5,   7,  11,  16,  22,  30,  40,  51,  64,  78,  92, 106, 122, 142, 162,
> +              155, 135, 117, 101,  87,  73,  59,  47,  36,  26,  19,  13,   8,   5,   3,   2,   2,   3,   5,   9,  14,  20,  28,  38,  49,  62,  76,  90, 104, 120, 140, 161,
> +              154, 134, 115, 100,  86,  72,  58,  45,  34,  25,  18,  12,   7,   4,   2,   1,   1,   2,   4,   8,  13,  19,  27,  36,  48,  61,  75,  89, 103, 119, 138, 160,
> +              153, 133, 114,  99,  85,  71,  57,  44,  33,  24,  17,  11,   6,   3,   1,   0,   1,   1,   3,   7,  12,  18,  26,  35,  47,  60,  74,  88, 102, 118, 137, 158,
> +              153, 132, 114,  99,  84,  70,  56,  44,  33,  24,  16,  10,   6,   2,   1,   0,   0,   1,   3,   6,  11,  17,  25,  35,  46,  59,  73,  87, 102, 118, 137, 158,
> +              153, 132, 114,  98,  84,  70,  56,  44,  33,  24,  16,  10,   6,   2,   1,   0,   0,   1,   3,   6,  11,  17,  25,  35,  46,  59,  73,  87, 101, 117, 136, 158,
> +              153, 132, 114,  99,  84,  70,  56,  44,  33,  24,  16,  10,   6,   3,   1,   0,   1,   1,   3,   7,  11,  18,  25,  35,  46,  59,  73,  87, 101, 118, 137, 158,
> +              154, 133, 115,  99,  85,  71,  57,  45,  34,  25,  17,  11,   7,   3,   2,   1,   1,   2,   4,   7,  12,  18,  26,  36,  47,  60,  74,  88, 102, 118, 138, 159,
> +              155, 134, 116, 100,  86,  72,  59,  46,  35,  26,  18,  12,   8,   4,   3,   2,   2,   3,   5,   8,  13,  20,  27,  37,  48,  61,  75,  89, 103, 119, 138, 160,
> +              156, 136, 117, 102,  88,  74,  61,  48,  37,  27,  20,  14,   9,   6,   4,   3,   3,   5,   6,  10,  15,  21,  29,  39,  50,  63,  76,  90, 104, 121, 140, 161,
> +              157, 138, 119, 104,  90,  76,  63,  50,  39,  30,  22,  16,  11,   8,   6,   5,   5,   6,   8,  12,  17,  23,  31,  41,  52,  65,  79,  92, 106, 123, 142, 162,
> +              160, 141, 122, 106,  92,  79,  66,  53,  42,  32,  24,  18,  13,  10,   8,   7,   7,   8,  11,  14,  19,  26,  34,  44,  55,  68,  81,  94, 109, 125, 145, 164,
> +              163, 145, 125, 109,  95,  82,  69,  56,  45,  36,  27,  21,  16,  13,  10,  10,  10,  11,  14,  17,  22,  29,  37,  47,  58,  71,  84,  97, 112, 128, 148, 167,
> +              166, 148, 129, 112,  98,  85,  72,  60,  49,  39,  31,  25,  20,  16,  14,  13,  13,  14,  17,  20,  26,  32,  41,  51,  62,  74,  87, 100, 115, 132, 152, 170,
> +              169, 152, 133, 116, 101,  89,  76,  64,  53,  43,  35,  28,  24,  20,  17,  16,  16,  18,  20,  25,  30,  36,  45,  55,  66,  78,  90, 103, 118, 136, 156, 174,
> +              173, 157, 137, 120, 106,  93,  81,  69,  58,  48,  40,  33,  28,  24,  22,  21,  21,  22,  25,  29,  34,  41,  50,  60,  71,  82,  95, 108, 123, 141, 161, 178,
> +              178, 162, 143, 125, 110,  97,  85,  74,  63,  53,  45,  38,  33,  29,  26,  25,  25,  27,  30,  34,  39,  46,  55,  65,  76,  87,  99, 112, 128, 146, 166, 183,
> +              184, 168, 148, 130, 115, 102,  90,  79,  69,  59,  51,  44,  38,  34,  32,  31,  31,  32,  35,  39,  45,  52,  60,  70,  81,  92, 103, 117, 133, 151, 171, 188,
> +              189, 174, 154, 136, 120, 107,  95,  85,  75,  65,  57,  51,  44,  40,  38,  37,  37,  38,  41,  45,  52,  58,  67,  76,  86,  97, 108, 123, 139, 157, 177, 194,
> +              196, 181, 161, 143, 126, 113, 101,  91,  81,  72,  64,  57,  51,  47,  44,  43,  43,  45,  48,  52,  58,  65,  73,  82,  92, 102, 114, 129, 146, 164, 184, 201,
> +              204, 188, 168, 149, 133, 118, 106,  96,  86,  77,  69,  63,  56,  51,  49,  49,  49,  49,  52,  57,  63,  71,  79,  87,  97, 107, 120, 135, 153, 171, 191, 208,
> +             ]
> +          g: [
> +              166, 151, 133, 117, 103,  90,  80,  72,  64,  58,  52,  47,  42,  39,  37,  37,  37,  37,  39,  43,  48,  53,  59,  66,  73,  82,  93, 106, 121, 138, 156, 172,
> +              159, 145, 128, 112,  98,  86,  76,  68,  60,  54,  48,  43,  38,  36,  34,  33,  33,  34,  36,  39,  44,  49,  55,  62,  69,  78,  89, 101, 116, 132, 150, 165,
> +              153, 139, 122, 106,  93,  81,  72,  63,  56,  49,  43,  38,  33,  31,  29,  28,  28,  29,  31,  34,  39,  44,  50,  57,  65,  74,  83,  96, 110, 126, 144, 159,
> +              147, 134, 117, 101,  88,  77,  68,  59,  51,  44,  38,  33,  29,  26,  24,  24,  24,  25,  27,  30,  34,  39,  46,  53,  61,  69,  79,  91, 105, 121, 138, 153,
> +              142, 129, 112,  96,  84,  73,  64,  55,  47,  40,  34,  29,  25,  22,  20,  20,  20,  21,  23,  26,  30,  35,  41,  49,  57,  66,  75,  86, 100, 116, 133, 148,
> +              138, 124, 107,  92,  80,  69,  60,  51,  43,  36,  30,  25,  22,  19,  17,  16,  16,  17,  19,  22,  26,  31,  38,  45,  53,  62,  71,  82,  95, 111, 129, 144,
> +              134, 120, 103,  88,  76,  66,  57,  48,  39,  32,  26,  22,  18,  15,  14,  13,  13,  14,  16,  19,  23,  28,  34,  41,  50,  59,  68,  79,  91, 107, 124, 140,
> +              131, 116,  99,  85,  73,  63,  54,  44,  36,  29,  23,  19,  15,  13,  11,  10,  10,  11,  13,  16,  20,  25,  31,  38,  47,  56,  65,  76,  88, 103, 120, 136,
> +              127, 112,  96,  82,  71,  60,  51,  42,  33,  26,  21,  16,  13,  10,   8,   8,   8,   9,  11,  13,  17,  22,  28,  35,  44,  53,  63,  73,  85, 100, 117, 133,
> +              125, 109,  93,  80,  68,  58,  48,  39,  31,  24,  18,  14,  10,   8,   6,   6,   6,   7,   9,  11,  15,  20,  25,  33,  41,  50,  60,  71,  82,  97, 114, 130,
> +              123, 107,  91,  78,  67,  56,  46,  37,  29,  22,  16,  12,   9,   6,   5,   4,   4,   5,   7,   9,  13,  18,  23,  31,  39,  48,  58,  69,  80,  94, 111, 128,
> +              121, 105,  89,  76,  65,  54,  44,  35,  27,  20,  15,  10,   7,   5,   3,   2,   2,   4,   5,   8,  11,  16,  22,  29,  37,  46,  57,  67,  79,  92, 109, 126,
> +              120, 103,  87,  75,  63,  53,  43,  34,  26,  19,  14,   9,   6,   3,   2,   1,   1,   2,   4,   6,  10,  15,  20,  27,  36,  45,  55,  66,  77,  91, 107, 125,
> +              119, 102,  86,  74,  62,  52,  42,  32,  25,  18,  13,   8,   5,   3,   1,   1,   1,   1,   3,   6,   9,  14,  19,  26,  34,  44,  54,  65,  76,  90, 106, 124,
> +              118, 101,  86,  73,  62,  51,  41,  32,  24,  17,  12,   8,   4,   2,   1,   0,   0,   1,   2,   5,   9,  13,  19,  26,  34,  43,  53,  64,  76,  89, 105, 123,
> +              118, 100,  85,  72,  61,  51,  41,  31,  23,  17,  12,   7,   4,   2,   0,   0,   0,   1,   2,   5,   8,  13,  18,  25,  33,  43,  53,  64,  75,  88, 105, 123,
> +              118, 100,  85,  72,  61,  51,  40,  31,  23,  17,  12,   7,   4,   2,   0,   0,   0,   1,   2,   5,   8,  13,  18,  25,  33,  43,  53,  64,  75,  88, 105, 123,
> +              118, 101,  85,  73,  62,  51,  41,  32,  24,  17,  12,   7,   4,   2,   1,   0,   0,   1,   2,   5,   8,  13,  18,  25,  34,  43,  53,  64,  75,  89, 105, 123,
> +              118, 101,  86,  73,  62,  51,  41,  32,  24,  18,  12,   8,   5,   2,   1,   1,   1,   1,   3,   5,   9,  13,  19,  26,  34,  44,  54,  64,  76,  89, 106, 124,
> +              119, 102,  87,  74,  63,  52,  42,  33,  25,  18,  13,   9,   5,   3,   2,   1,   1,   2,   3,   6,  10,  14,  20,  27,  35,  44,  55,  65,  77,  90, 107, 124,
> +              120, 104,  88,  75,  64,  54,  44,  34,  26,  20,  14,  10,   6,   4,   3,   2,   2,   3,   4,   7,  11,  15,  21,  28,  36,  46,  56,  66,  78,  91, 108, 125,
> +              122, 106,  90,  77,  65,  55,  45,  36,  28,  21,  16,  11,   8,   5,   4,   3,   3,   4,   6,   8,  12,  17,  23,  30,  38,  47,  57,  68,  79,  93, 110, 127,
> +              124, 108,  92,  79,  67,  57,  47,  38,  30,  23,  17,  13,   9,   7,   5,   5,   5,   6,   8,  10,  14,  19,  25,  32,  40,  49,  59,  70,  81,  95, 112, 129,
> +              126, 111,  95,  81,  70,  59,  50,  40,  32,  25,  20,  15,  12,   9,   7,   7,   7,   8,  10,  12,  16,  21,  27,  34,  42,  52,  61,  72,  84,  98, 115, 131,
> +              129, 114,  98,  84,  72,  62,  52,  43,  35,  28,  22,  17,  14,  12,  10,   9,   9,  10,  12,  15,  18,  23,  30,  37,  45,  54,  64,  74,  86, 101, 118, 134,
> +              132, 118, 101,  87,  75,  65,  55,  46,  38,  31,  25,  20,  17,  14,  12,  12,  12,  13,  15,  18,  21,  26,  33,  40,  48,  57,  67,  77,  90, 105, 122, 137,
> +              136, 122, 105,  90,  78,  68,  59,  50,  41,  34,  28,  24,  20,  17,  15,  15,  15,  16,  18,  21,  25,  30,  36,  43,  51,  60,  70,  80,  93, 109, 126, 141,
> +              139, 126, 109,  94,  82,  71,  62,  53,  45,  38,  32,  27,  24,  21,  19,  18,  18,  19,  21,  25,  28,  33,  40,  47,  55,  64,  73,  84,  97, 113, 130, 145,
> +              144, 131, 114,  99,  85,  75,  66,  57,  49,  42,  36,  32,  27,  24,  23,  22,  22,  23,  25,  28,  32,  38,  44,  51,  59,  67,  77,  88, 102, 118, 135, 150,
> +              149, 136, 119, 104,  90,  79,  70,  61,  54,  47,  41,  36,  32,  29,  27,  26,  26,  27,  29,  32,  37,  42,  48,  55,  63,  71,  81,  93, 107, 123, 140, 155,
> +              155, 142, 125, 109,  95,  84,  74,  66,  58,  52,  46,  41,  36,  34,  32,  31,  31,  32,  34,  37,  42,  47,  53,  60,  67,  76,  86,  98, 113, 129, 146, 161,
> +              162, 148, 130, 115, 100,  88,  78,  70,  63,  56,  50,  45,  40,  37,  35,  35,  35,  35,  37,  41,  46,  51,  57,  64,  71,  80,  91, 103, 118, 134, 152, 167,
> +             ]
> +          b: [
> +              163, 150, 132, 116, 102,  90,  80,  71,  64,  57,  51,  46,  42,  38,  37,  37,  37,  37,  39,  43,  48,  53,  59,  66,  73,  82,  92, 105, 120, 136, 154, 168,
> +              156, 143, 126, 110,  96,  85,  75,  67,  59,  53,  47,  42,  38,  35,  33,  32,  32,  34,  36,  39,  43,  49,  54,  61,  68,  77,  87, 100, 114, 130, 147, 161,
> +              150, 137, 120, 105,  91,  80,  71,  62,  55,  48,  42,  37,  33,  30,  28,  27,  27,  29,  31,  34,  39,  43,  49,  56,  64,  72,  82,  94, 108, 124, 141, 155,
> +              145, 132, 115, 100,  86,  76,  67,  58,  50,  43,  37,  33,  28,  26,  24,  23,  23,  24,  26,  29,  34,  39,  45,  52,  60,  68,  78,  89, 103, 119, 136, 150,
> +              140, 127, 110,  95,  82,  72,  63,  54,  46,  39,  33,  28,  25,  22,  20,  19,  19,  20,  22,  26,  29,  34,  41,  48,  56,  65,  74,  85,  98, 114, 131, 145,
> +              135, 122, 106,  91,  79,  68,  59,  51,  42,  35,  29,  25,  21,  18,  16,  16,  16,  17,  19,  22,  26,  31,  37,  44,  52,  61,  71,  81,  94, 109, 126, 140,
> +              132, 118, 102,  87,  75,  65,  56,  47,  39,  32,  26,  21,  18,  15,  13,  13,  13,  14,  16,  19,  22,  27,  33,  41,  49,  58,  67,  78,  90, 105, 122, 137,
> +              128, 114,  98,  84,  73,  62,  53,  44,  36,  29,  23,  18,  15,  12,  11,  10,  10,  11,  13,  16,  19,  24,  30,  38,  46,  55,  65,  75,  87, 102, 118, 133,
> +              125, 111,  95,  81,  70,  60,  50,  41,  33,  26,  20,  16,  12,  10,   8,   8,   8,   9,  11,  13,  17,  22,  27,  35,  43,  52,  62,  72,  84,  98, 115, 130,
> +              123, 108,  92,  79,  68,  58,  48,  39,  30,  24,  18,  14,  10,   8,   6,   5,   5,   7,   9,  11,  14,  19,  25,  32,  41,  50,  60,  70,  81,  96, 112, 127,
> +              121, 106,  90,  77,  66,  55,  46,  36,  28,  22,  16,  12,   8,   6,   5,   4,   4,   5,   7,   9,  13,  17,  23,  30,  38,  48,  58,  68,  79,  93, 109, 125,
> +              119, 104,  88,  75,  64,  54,  44,  35,  27,  20,  15,  10,   7,   5,   3,   2,   2,   4,   5,   8,  11,  16,  21,  28,  37,  46,  56,  67,  78,  91, 107, 124,
> +              117, 102,  86,  74,  63,  53,  42,  33,  25,  19,  13,   9,   6,   3,   2,   1,   1,   2,   4,   6,  10,  14,  20,  27,  35,  45,  55,  65,  76,  90, 106, 122,
> +              117, 100,  85,  73,  62,  51,  41,  32,  24,  18,  12,   8,   5,   3,   1,   1,   1,   1,   3,   5,   9,  13,  19,  26,  34,  43,  54,  64,  75,  89, 104, 121,
> +              116, 100,  84,  72,  61,  51,  40,  31,  23,  17,  12,   7,   4,   2,   1,   0,   0,   1,   2,   5,   8,  13,  18,  25,  33,  43,  53,  64,  75,  88, 103, 121,
> +              116,  99,  84,  72,  61,  50,  40,  31,  23,  17,  11,   7,   4,   2,   0,   0,   0,   1,   2,   5,   8,  12,  18,  25,  33,  42,  53,  63,  74,  88, 103, 121,
> +              116,  99,  84,  72,  61,  50,  40,  31,  23,  17,  11,   7,   4,   2,   0,   0,   0,   1,   2,   5,   8,  12,  18,  25,  33,  42,  53,  63,  74,  87, 103, 121,
> +              116,  99,  84,  72,  61,  50,  40,  31,  23,  17,  11,   7,   4,   2,   0,   0,   0,   1,   2,   5,   8,  13,  18,  25,  33,  43,  53,  63,  74,  88, 103, 121,
> +              116, 100,  85,  72,  61,  51,  41,  32,  24,  17,  12,   8,   4,   2,   1,   1,   1,   1,   3,   5,   9,  13,  19,  25,  34,  43,  53,  64,  75,  88, 104, 121,
> +              117, 101,  86,  73,  62,  52,  42,  33,  25,  18,  13,   8,   5,   3,   2,   1,   1,   2,   3,   6,   9,  14,  20,  26,  35,  44,  54,  64,  76,  89, 105, 121,
> +              118, 103,  87,  74,  63,  53,  43,  34,  26,  19,  14,  10,   6,   4,   3,   2,   2,   3,   4,   7,  11,  15,  21,  28,  36,  45,  55,  66,  77,  91, 106, 123,
> +              120, 104,  89,  76,  65,  54,  45,  35,  27,  21,  15,  11,   8,   5,   4,   3,   3,   4,   6,   8,  12,  16,  22,  29,  38,  47,  57,  67,  78,  92, 108, 124,
> +              121, 107,  91,  78,  67,  56,  47,  37,  29,  22,  17,  13,   9,   7,   5,   4,   4,   6,   7,  10,  14,  18,  24,  31,  39,  49,  59,  69,  80,  94, 110, 126,
> +              124, 109,  93,  80,  69,  59,  49,  40,  32,  25,  19,  14,  11,   9,   7,   6,   6,   7,  10,  12,  16,  20,  26,  34,  42,  51,  61,  71,  83,  97, 113, 128,
> +              126, 112,  96,  83,  71,  61,  52,  43,  34,  27,  22,  17,  14,  11,   9,   9,   9,  10,  12,  14,  18,  23,  29,  36,  45,  54,  63,  73,  85, 100, 116, 131,
> +              130, 116,  99,  85,  74,  64,  54,  45,  37,  30,  24,  20,  17,  14,  12,  11,  11,  12,  14,  17,  21,  26,  32,  39,  48,  56,  66,  76,  88, 103, 119, 134,
> +              133, 120, 103,  89,  77,  66,  57,  49,  41,  34,  28,  23,  20,  17,  15,  14,  14,  15,  17,  21,  24,  29,  35,  42,  51,  59,  68,  79,  92, 107, 123, 137,
> +              137, 124, 107,  93,  80,  70,  61,  52,  44,  37,  31,  27,  23,  20,  18,  18,  18,  19,  21,  24,  28,  33,  39,  46,  54,  63,  72,  83,  96, 111, 127, 141,
> +              141, 128, 112,  97,  84,  73,  65,  56,  48,  42,  36,  31,  27,  24,  22,  21,  21,  22,  25,  28,  32,  37,  43,  50,  58,  66,  76,  87, 100, 116, 132, 146,
> +              146, 133, 117, 102,  88,  77,  68,  60,  53,  46,  40,  35,  31,  28,  26,  25,  25,  27,  29,  32,  37,  41,  47,  54,  62,  70,  79,  91, 105, 121, 137, 151,
> +              151, 139, 123, 107,  94,  82,  73,  65,  57,  51,  45,  40,  36,  33,  31,  30,  30,  32,  34,  37,  41,  46,  52,  59,  66,  74,  84,  97, 111, 126, 143, 157,
> +              158, 145, 128, 113,  99,  87,  77,  69,  61,  55,  49,  44,  39,  36,  34,  34,  34,  35,  37,  41,  45,  50,  56,  63,  70,  79,  89, 102, 116, 131, 148, 163,
> +             ]
> +        - ct: 8500
> +          r: [
> +              216, 198, 176, 157, 140, 124, 111, 100,  90,  82,  74,  67,  61,  55,  52,  52,  52,  52,  53,  58,  64,  70,  77,  85,  94, 104, 116, 131, 147, 166, 185, 201,
> +              207, 191, 170, 151, 133, 118, 106,  95,  86,  77,  69,  62,  55,  51,  48,  47,  47,  47,  50,  53,  58,  65,  72,  80,  89, 100, 111, 125, 141, 159, 178, 193,
> +              199, 183, 162, 144, 127, 112, 100,  89,  80,  70,  62,  55,  49,  44,  42,  40,  40,  41,  43,  47,  52,  59,  66,  74,  84,  94, 105, 118, 134, 152, 171, 187,
> +              193, 176, 156, 137, 121, 107,  95,  84,  74,  64,  56,  49,  43,  38,  35,  34,  34,  35,  37,  40,  46,  52,  60,  68,  78,  89, 100, 113, 128, 145, 165, 180,
> +              186, 170, 150, 131, 115, 101,  90,  79,  68,  58,  50,  43,  37,  33,  30,  28,  28,  29,  31,  35,  40,  46,  54,  63,  73,  83,  95, 107, 122, 139, 159, 174,
> +              181, 164, 144, 125, 110,  97,  85,  74,  63,  53,  44,  37,  32,  28,  25,  23,  23,  24,  26,  30,  35,  41,  48,  58,  68,  79,  90, 103, 117, 134, 153, 169,
> +              176, 159, 139, 121, 106,  92,  81,  69,  58,  48,  40,  33,  28,  23,  20,  19,  19,  20,  22,  26,  30,  36,  44,  53,  63,  75,  86,  98, 112, 129, 148, 165,
> +              171, 154, 134, 116, 102,  89,  77,  65,  53,  44,  35,  29,  23,  20,  17,  15,  15,  16,  18,  22,  26,  32,  39,  48,  59,  71,  82,  95, 108, 125, 144, 160,
> +              167, 150, 130, 113,  98,  85,  73,  61,  49,  40,  31,  25,  20,  16,  13,  12,  12,  12,  14,  18,  22,  28,  36,  45,  55,  67,  79,  91, 105, 120, 139, 156,
> +              164, 146, 126, 109,  95,  82,  70,  57,  46,  36,  28,  22,  16,  13,  10,   9,   9,   9,  12,  14,  19,  25,  32,  41,  51,  63,  76,  88, 101, 117, 135, 153,
> +              162, 143, 123, 107,  93,  80,  67,  54,  43,  33,  25,  19,  14,  10,   8,   6,   6,   7,   9,  12,  16,  22,  29,  38,  48,  60,  73,  85,  99, 114, 132, 151,
> +              159, 140, 121, 105,  91,  77,  64,  52,  41,  31,  23,  17,  12,   8,   6,   4,   4,   5,   7,  10,  14,  20,  27,  35,  46,  58,  70,  83,  97, 111, 130, 148,
> +              157, 138, 119, 103,  89,  75,  62,  50,  38,  29,  21,  15,  10,   6,   4,   3,   3,   4,   5,   8,  12,  18,  25,  33,  44,  55,  68,  81,  95, 109, 127, 146,
> +              156, 136, 117, 101,  87,  74,  60,  48,  37,  27,  20,  13,   9,   5,   3,   2,   1,   2,   4,   6,  11,  16,  23,  32,  42,  54,  67,  80,  93, 108, 125, 145,
> +              155, 135, 116, 100,  86,  72,  59,  47,  36,  26,  19,  12,   8,   4,   2,   1,   1,   1,   3,   6,  10,  15,  22,  31,  41,  52,  65,  79,  92, 107, 124, 144,
> +              155, 134, 115,  99,  86,  72,  58,  46,  35,  26,  18,  12,   7,   3,   1,   0,   0,   1,   2,   5,   9,  15,  21,  30,  40,  52,  65,  78,  92, 106, 124, 144,
> +              155, 134, 115,  99,  85,  72,  58,  46,  35,  25,  18,  12,   7,   3,   1,   0,   0,   0,   2,   5,   9,  14,  21,  30,  40,  51,  64,  78,  91, 106, 123, 143,
> +              155, 134, 115,  99,  85,  72,  58,  46,  35,  26,  18,  12,   7,   3,   1,   0,   0,   1,   2,   5,   9,  14,  21,  30,  40,  51,  64,  78,  91, 106, 123, 143,
> +              155, 135, 115, 100,  86,  72,  59,  46,  35,  26,  18,  12,   7,   4,   2,   1,   1,   1,   3,   5,   9,  15,  22,  30,  40,  52,  65,  78,  92, 106, 124, 144,
> +              156, 136, 116, 100,  87,  73,  60,  47,  36,  27,  19,  13,   8,   5,   2,   2,   1,   2,   3,   6,  10,  16,  23,  31,  41,  53,  66,  79,  92, 107, 124, 144,
> +              157, 137, 118, 102,  88,  75,  61,  49,  38,  28,  21,  14,  10,   6,   4,   2,   2,   3,   4,   7,  12,  17,  24,  33,  43,  54,  67,  80,  93, 108, 126, 145,
> +              158, 139, 120, 103,  89,  76,  63,  51,  40,  30,  22,  16,  11,   7,   6,   4,   4,   4,   6,   9,  13,  19,  26,  34,  45,  56,  69,  82,  95, 110, 128, 147,
> +              160, 141, 122, 106,  92,  79,  66,  53,  42,  33,  25,  18,  13,  10,   7,   6,   6,   6,   9,  11,  15,  21,  28,  37,  47,  59,  71,  84,  97, 112, 130, 148,
> +              163, 144, 125, 108,  94,  81,  69,  56,  45,  35,  27,  21,  16,  12,  10,   8,   8,   9,  11,  14,  18,  24,  31,  40,  50,  62,  74,  86,  99, 114, 133, 151,
> +              165, 148, 128, 111,  97,  84,  72,  60,  49,  39,  31,  24,  19,  15,  12,  11,  11,  11,  14,  17,  21,  27,  34,  43,  53,  65,  77,  89, 102, 118, 136, 153,
> +              169, 152, 132, 114, 100,  87,  75,  63,  52,  42,  34,  27,  22,  19,  16,  14,  14,  15,  17,  21,  24,  30,  38,  47,  57,  68,  80,  92, 105, 121, 140, 157,
> +              173, 156, 136, 118, 104,  91,  79,  68,  57,  47,  38,  32,  26,  22,  19,  18,  18,  19,  21,  24,  28,  34,  42,  51,  61,  72,  83,  95, 109, 125, 144, 160,
> +              177, 161, 141, 123, 108,  95,  83,  72,  61,  52,  43,  36,  31,  26,  24,  22,  22,  23,  25,  28,  33,  39,  47,  56,  66,  76,  87,  99, 113, 130, 149, 165,
> +              182, 166, 147, 128, 112,  99,  88,  77,  67,  57,  48,  41,  36,  31,  29,  27,  27,  28,  30,  33,  39,  44,  52,  61,  71,  81,  92, 104, 118, 135, 154, 169,
> +              188, 172, 152, 134, 118, 104,  93,  82,  72,  62,  54,  47,  41,  37,  34,  33,  33,  33,  35,  39,  44,  50,  57,  66,  76,  85,  96, 109, 124, 141, 160, 175,
> +              194, 178, 159, 140, 123, 110,  98,  87,  78,  68,  60,  53,  47,  43,  40,  38,  38,  39,  41,  45,  50,  56,  64,  72,  81,  91, 102, 115, 130, 147, 166, 181,
> +              202, 185, 165, 146, 129, 115, 103,  92,  83,  73,  66,  59,  53,  47,  44,  43,  43,  43,  45,  50,  55,  61,  69,  77,  86,  95, 107, 120, 136, 153, 172, 187,
> +             ]
> +          g: [
> +              177, 160, 141, 125, 110,  96,  85,  76,  68,  61,  55,  50,  45,  41,  39,  39,  39,  39,  40,  43,  47,  52,  58,  64,  71,  80,  90, 102, 117, 132, 150, 165,
> +              169, 154, 135, 119, 104,  91,  81,  72,  64,  57,  51,  46,  41,  38,  36,  35,  35,  35,  37,  40,  43,  48,  54,  60,  67,  76,  85,  97, 111, 127, 144, 157,
> +              162, 147, 129, 113,  98,  86,  76,  67,  59,  52,  46,  41,  36,  33,  31,  30,  30,  30,  32,  35,  39,  43,  49,  55,  63,  71,  80,  92, 105, 121, 138, 151,
> +              156, 141, 124, 107,  93,  81,  72,  63,  55,  48,  41,  36,  32,  28,  26,  25,  25,  26,  27,  30,  34,  39,  44,  51,  58,  67,  76,  87, 100, 115, 132, 146,
> +              150, 136, 119, 102,  89,  77,  68,  59,  51,  43,  37,  32,  28,  24,  22,  21,  21,  21,  23,  26,  30,  34,  40,  47,  54,  63,  72,  82,  95, 110, 127, 141,
> +              146, 131, 114,  98,  84,  73,  64,  55,  47,  39,  33,  28,  24,  20,  18,  17,  17,  18,  19,  22,  26,  30,  36,  43,  51,  59,  68,  78,  90, 105, 122, 136,
> +              141, 127, 109,  94,  81,  70,  60,  51,  43,  36,  29,  24,  20,  17,  15,  14,  14,  15,  16,  19,  22,  27,  32,  39,  47,  56,  65,  75,  86, 101, 118, 132,
> +              137, 123, 105,  90,  78,  67,  57,  48,  40,  32,  26,  21,  17,  14,  12,  11,  11,  12,  13,  16,  19,  24,  29,  36,  44,  52,  62,  72,  83,  97, 114, 128,
> +              134, 119, 102,  87,  75,  64,  54,  45,  37,  29,  23,  18,  14,  12,  10,   9,   9,   9,  11,  13,  16,  21,  26,  33,  41,  50,  59,  69,  80,  93, 110, 125,
> +              131, 116,  99,  84,  72,  62,  52,  42,  34,  27,  21,  16,  12,  10,   8,   6,   6,   7,   9,  11,  14,  18,  24,  30,  38,  47,  56,  66,  77,  91, 107, 122,
> +              129, 113,  96,  82,  70,  59,  50,  40,  32,  25,  19,  14,  10,   8,   6,   5,   5,   5,   7,   9,  12,  16,  21,  28,  36,  45,  54,  64,  75,  88, 104, 120,
> +              127, 111,  94,  80,  68,  58,  48,  38,  30,  23,  17,  12,   9,   6,   4,   3,   3,   4,   5,   7,  10,  14,  20,  26,  34,  43,  52,  62,  73,  86, 102, 118,
> +              125, 109,  92,  78,  67,  56,  46,  37,  28,  21,  15,  11,   7,   5,   3,   2,   2,   3,   4,   6,   9,  13,  18,  25,  32,  41,  51,  61,  72,  84, 100, 116,
> +              124, 107,  91,  77,  66,  55,  45,  35,  27,  20,  14,  10,   6,   4,   2,   1,   1,   2,   3,   5,   8,  12,  17,  23,  31,  40,  50,  60,  71,  83,  98, 115,
> +              124, 106,  90,  76,  65,  54,  44,  34,  26,  19,  14,   9,   6,   3,   1,   1,   0,   1,   2,   4,   7,  11,  16,  23,  30,  39,  49,  59,  70,  82,  97, 114,
> +              123, 105,  89,  76,  64,  54,  43,  34,  26,  19,  13,   9,   5,   2,   1,   0,   0,   0,   1,   4,   7,  11,  16,  22,  30,  38,  48,  59,  69,  82,  97, 114,
> +              123, 105,  89,  75,  64,  53,  43,  34,  25,  19,  13,   8,   5,   2,   1,   0,   0,   0,   1,   3,   7,  11,  16,  22,  29,  38,  48,  58,  69,  81,  96, 114,
> +              123, 105,  89,  75,  64,  53,  43,  34,  26,  19,  13,   9,   5,   2,   1,   0,   0,   0,   1,   4,   7,  11,  16,  22,  29,  38,  48,  58,  69,  81,  96, 114,
> +              123, 106,  89,  76,  65,  54,  44,  34,  26,  19,  13,   9,   5,   3,   1,   1,   0,   1,   2,   4,   7,  11,  16,  22,  30,  39,  48,  59,  69,  82,  97, 114,
> +              124, 107,  90,  77,  65,  55,  44,  35,  27,  20,  14,  10,   6,   3,   2,   1,   1,   1,   2,   4,   8,  12,  17,  23,  31,  39,  49,  59,  70,  82,  98, 115,
> +              125, 108,  91,  78,  66,  56,  46,  36,  28,  21,  15,  10,   7,   4,   2,   2,   1,   2,   3,   5,   8,  13,  18,  24,  32,  41,  50,  60,  71,  84,  99, 116,
> +              126, 110,  93,  79,  67,  57,  47,  38,  29,  22,  16,  12,   8,   5,   4,   2,   2,   3,   4,   7,  10,  14,  19,  26,  33,  42,  52,  62,  72,  85, 100, 117,
> +              128, 112,  95,  81,  69,  59,  49,  39,  31,  24,  18,  13,  10,   7,   5,   4,   4,   4,   6,   8,  11,  15,  21,  27,  35,  44,  53,  63,  74,  87, 103, 119,
> +              130, 114,  97,  83,  71,  61,  51,  42,  33,  26,  20,  15,  11,   9,   7,   6,   6,   6,   8,  10,  13,  17,  23,  29,  37,  46,  55,  65,  76,  89, 105, 121,
> +              132, 117, 100,  86,  74,  63,  53,  44,  36,  28,  22,  17,  14,  11,   9,   8,   8,   8,  10,  12,  15,  20,  25,  32,  40,  48,  58,  67,  79,  92, 108, 123,
> +              135, 121, 103,  89,  76,  66,  56,  47,  39,  31,  25,  20,  16,  14,  11,  10,  10,  11,  12,  15,  18,  22,  28,  35,  42,  51,  60,  70,  81,  95, 111, 126,
> +              139, 124, 107,  92,  79,  68,  59,  50,  42,  34,  28,  23,  19,  16,  14,  13,  13,  13,  15,  18,  21,  25,  31,  38,  46,  54,  63,  73,  85,  99, 115, 130,
> +              143, 128, 111,  96,  83,  72,  62,  54,  45,  38,  32,  26,  23,  19,  17,  16,  16,  17,  18,  21,  24,  29,  35,  41,  49,  57,  66,  76,  88, 103, 119, 133,
> +              147, 133, 116, 100,  86,  75,  66,  57,  49,  42,  36,  30,  26,  23,  21,  20,  20,  20,  22,  24,  28,  33,  38,  45,  53,  61,  70,  80,  92, 107, 124, 137,
> +              152, 138, 121, 105,  91,  79,  70,  61,  53,  46,  40,  35,  30,  27,  25,  24,  24,  24,  26,  28,  33,  37,  43,  49,  57,  65,  73,  84,  97, 112, 128, 142,
> +              158, 144, 126, 110,  96,  84,  74,  65,  58,  51,  44,  39,  35,  31,  29,  28,  28,  29,  30,  33,  37,  42,  47,  54,  61,  69,  78,  89, 102, 118, 134, 147,
> +              165, 149, 131, 115, 101,  88,  78,  69,  61,  54,  48,  43,  38,  35,  32,  32,  32,  32,  33,  36,  41,  45,  51,  57,  64,  72,  82,  94, 107, 122, 139, 153,
> +             ]
> +          b: [
> +              174, 159, 139, 123, 109,  95,  84,  75,  68,  61,  55,  50,  45,  41,  39,  39,  39,  39,  40,  43,  47,  52,  58,  64,  71,  80,  90, 102, 116, 131, 148, 161,
> +              166, 152, 134, 118, 103,  90,  80,  71,  63,  56,  51,  45,  41,  38,  35,  34,  34,  35,  37,  39,  43,  48,  54,  60,  67,  75,  84,  96, 110, 125, 141, 154,
> +              159, 145, 127, 111,  97,  85,  75,  66,  59,  52,  45,  41,  36,  32,  30,  29,  29,  30,  31,  34,  38,  43,  48,  55,  62,  70,  79,  90, 104, 119, 135, 148,
> +              153, 139, 122, 106,  92,  80,  71,  62,  54,  47,  41,  36,  31,  28,  26,  25,  25,  25,  27,  30,  34,  38,  44,  50,  58,  66,  75,  86,  99, 114, 130, 143,
> +              148, 134, 117, 101,  88,  76,  67,  58,  50,  43,  36,  31,  27,  24,  22,  21,  21,  21,  23,  25,  30,  34,  40,  46,  54,  62,  71,  81,  94, 109, 125, 138,
> +              143, 129, 113,  97,  84,  73,  63,  55,  46,  39,  32,  27,  23,  20,  18,  17,  17,  17,  19,  22,  25,  30,  36,  42,  50,  59,  68,  78,  89, 104, 120, 133,
> +              139, 125, 108,  93,  80,  69,  60,  51,  42,  35,  29,  24,  20,  17,  15,  14,  14,  14,  16,  19,  22,  26,  32,  39,  47,  55,  64,  74,  85, 100, 116, 130,
> +              135, 121, 104,  89,  77,  66,  57,  48,  39,  32,  25,  21,  17,  14,  12,  11,  11,  11,  13,  16,  19,  23,  29,  36,  43,  52,  61,  71,  82,  96, 112, 126,
> +              132, 117, 101,  86,  74,  64,  54,  45,  36,  29,  23,  18,  14,  12,   9,   8,   8,   9,  11,  13,  16,  20,  26,  33,  40,  49,  59,  68,  79,  93, 108, 123,
> +              129, 114,  98,  83,  72,  61,  52,  42,  34,  26,  20,  16,  12,   9,   7,   6,   6,   7,   9,  11,  14,  18,  23,  30,  38,  47,  56,  66,  77,  90, 105, 120,
> +              127, 112,  95,  81,  70,  59,  49,  40,  31,  24,  18,  14,  10,   7,   6,   4,   4,   5,   7,   9,  12,  16,  21,  28,  36,  44,  54,  64,  75,  87, 103, 118,
> +              125, 109,  93,  79,  68,  57,  47,  38,  29,  22,  17,  12,   8,   6,   4,   3,   3,   4,   5,   7,  10,  14,  19,  26,  34,  42,  52,  62,  73,  85, 100, 116,
> +              124, 108,  91,  78,  66,  56,  46,  36,  28,  21,  15,  11,   7,   4,   3,   2,   2,   3,   4,   6,   9,  13,  18,  24,  32,  41,  51,  61,  71,  84,  98, 114,
> +              123, 106,  90,  76,  65,  55,  44,  35,  27,  20,  14,  10,   6,   4,   2,   1,   1,   2,   3,   5,   8,  12,  17,  23,  31,  40,  49,  60,  70,  83,  97, 113,
> +              122, 105,  89,  76,  64,  54,  44,  34,  26,  19,  13,   9,   5,   3,   1,   1,   0,   1,   2,   4,   7,  11,  16,  22,  30,  39,  49,  59,  70,  82,  96, 112,
> +              121, 104,  88,  75,  64,  53,  43,  33,  25,  18,  13,   8,   5,   2,   1,   0,   0,   0,   1,   4,   7,  11,  16,  22,  29,  38,  48,  58,  69,  81,  96, 112,
> +              121, 104,  88,  75,  64,  53,  43,  33,  25,  18,  13,   8,   5,   2,   1,   0,   0,   0,   1,   3,   6,  10,  15,  22,  29,  38,  48,  58,  69,  81,  95, 112,
> +              121, 104,  88,  75,  64,  53,  43,  33,  25,  18,  13,   8,   5,   2,   1,   0,   0,   0,   1,   3,   7,  10,  15,  22,  29,  38,  48,  58,  69,  81,  95, 112,
> +              122, 105,  88,  75,  64,  53,  43,  34,  25,  19,  13,   9,   5,   3,   1,   1,   0,   1,   2,   4,   7,  11,  16,  22,  30,  38,  48,  58,  69,  81,  96, 112,
> +              122, 105,  89,  76,  65,  54,  44,  34,  26,  19,  14,   9,   6,   3,   2,   1,   1,   1,   2,   4,   7,  11,  17,  23,  30,  39,  49,  59,  70,  82,  96, 113,
> +              123, 107,  90,  77,  66,  55,  45,  36,  27,  20,  15,  10,   7,   4,   2,   2,   1,   2,   3,   5,   8,  12,  18,  24,  32,  40,  50,  60,  71,  83,  98, 114,
> +              124, 108,  92,  78,  67,  57,  47,  37,  29,  22,  16,  11,   8,   5,   4,   2,   2,   3,   4,   6,  10,  14,  19,  25,  33,  42,  51,  61,  72,  85,  99, 115,
> +              126, 110,  94,  80,  69,  58,  48,  39,  31,  23,  18,  13,   9,   7,   5,   4,   4,   4,   6,   8,  11,  15,  21,  27,  35,  44,  53,  63,  74,  86, 101, 117,
> +              128, 113,  96,  82,  71,  60,  50,  41,  33,  25,  19,  15,  11,   8,   7,   5,   5,   6,   8,  10,  13,  17,  23,  29,  37,  46,  55,  65,  76,  89, 104, 119,
> +              130, 116,  99,  85,  73,  62,  53,  44,  35,  28,  22,  17,  13,  11,   8,   7,   7,   8,  10,  12,  15,  20,  25,  32,  39,  48,  57,  67,  78,  91, 107, 121,
> +              133, 119, 102,  88,  75,  65,  55,  46,  38,  31,  25,  20,  16,  13,  11,  10,  10,  10,  12,  15,  18,  22,  28,  34,  42,  51,  60,  70,  81,  94, 110, 124,
> +              137, 123, 106,  91,  78,  68,  58,  50,  41,  34,  28,  23,  19,  16,  14,  13,  13,  13,  15,  18,  21,  25,  31,  38,  45,  54,  63,  72,  84,  98, 113, 127,
> +              140, 126, 110,  95,  81,  71,  62,  53,  45,  37,  31,  26,  22,  19,  17,  16,  16,  16,  18,  21,  24,  29,  34,  41,  49,  57,  66,  75,  87, 102, 117, 131,
> +              144, 131, 114,  99,  85,  74,  65,  57,  49,  41,  35,  30,  26,  22,  20,  19,  19,  20,  21,  24,  28,  32,  38,  45,  52,  60,  69,  79,  91, 106, 121, 135,
> +              149, 136, 119, 103,  89,  78,  69,  60,  52,  45,  39,  34,  30,  26,  24,  23,  23,  24,  25,  28,  32,  37,  42,  49,  56,  64,  72,  83,  96, 110, 126, 139,
> +              155, 142, 124, 109,  95,  83,  73,  65,  57,  50,  44,  39,  34,  31,  29,  28,  28,  28,  30,  33,  36,  41,  47,  53,  60,  68,  77,  88, 101, 116, 132, 144,
> +              162, 147, 129, 114,  99,  87,  77,  68,  61,  54,  48,  42,  38,  34,  32,  31,  31,  31,  33,  36,  40,  45,  51,  57,  64,  72,  81,  93, 106, 121, 137, 150,
> +             ]
> +...
> diff --git a/src/ipa/mali-c55/data/meson.build b/src/ipa/mali-c55/data/meson.build
> index 8a5fdd36..d4d331b0 100644
> --- a/src/ipa/mali-c55/data/meson.build
> +++ b/src/ipa/mali-c55/data/meson.build
> @@ -2,6 +2,7 @@
>  
>  conf_files = files([
>      'imx415.yaml',
> +    'imx708.yaml',
>      'uncalibrated.yaml'
>  ])
>  
> -- 
> 2.34.1
>
Laurent Pinchart July 23, 2025, 6:40 p.m. UTC | #5
On Mon, Jul 21, 2025 at 08:19:32PM +0100, Daniel Scally wrote:
> On 21/07/2025 19:51, Kieran Bingham wrote:
> > Quoting Daniel Scally (2025-03-04 23:12:54)
> >> Add a tuning file for the imx708 with black level offsets and lens
> >> shading table data.
> >>
> >> Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
> >> ---
> >>   src/ipa/mali-c55/data/imx708.yaml | 325 ++++++++++++++++++++++++++++++
> >>   src/ipa/mali-c55/data/meson.build |   1 +
> >>   2 files changed, 326 insertions(+)
> >>   create mode 100644 src/ipa/mali-c55/data/imx708.yaml
> >>
> >> diff --git a/src/ipa/mali-c55/data/imx708.yaml b/src/ipa/mali-c55/data/imx708.yaml
> >> new file mode 100644
> >> index 00000000..75b8398a
> >> --- /dev/null
> >> +++ b/src/ipa/mali-c55/data/imx708.yaml
> >> @@ -0,0 +1,325 @@
> >> +# SPDX-License-Identifier: CC0-1.0
> >> +%YAML 1.1
> >> +---
> >> +version: 1
> >> +algorithms:
> >> +  - Agc:
> >> +  - Awb:
> >> +  - BlackLevelCorrection:
> >> +      offset00: 65536
> >> +      offset01: 65536
> >> +      offset10: 65536
> >> +      offset11: 65536
> >
> > I think we've moved Black levels to the Sensor Helpers now ?
> 
> Errr I'll have to look; the ISP needs them at a specific bit-depth and
> possibly the BLC algorithm would need a patch to convert from the
> values in the CameraSensorHelpers then - which I assume are at some
> normalised depth. I'll post that and a patch for the
> CameraSensorHelperImx708 in a v2 of this set
> 
> >> +  - Lsc:
> >> +      meshScale: 6
> >> +      sets:
> >> +        - ct: 2500
> >> +          r: [
> >
> > Are these tables converted from RPi tuning files ?
> 
> No; I ran the tuning script from patch 2 on a bunch of images.
> 
> > If so - can we have a conversion utility to support converting other
> > files, and also keep this up to date when more parameters could be
> > converted and supported ?
> >
> > For example, I expect the white balance and CCM tuning could be
> > converted straight across too...
> >
> >> +              227, 209, 187, 167, 150, 134, 120, 109,  99,  89,  81,  73,  67,  61,  57,  57,  57,  57,  61,  67,  73,  80,  89,  98, 109, 120, 134, 150, 168, 188, 209, 227,
> >> +              218, 202, 181, 161, 143, 128, 115, 104,  93,  84,  75,  67,  61,  56,  53,  51,  51,  53,  56,  61,  67,  75,  83,  93, 103, 115, 128, 143, 161, 181, 202, 219,
> >> +              210, 194, 173, 153, 136, 121, 109,  97,  87,  76,  67,  60,  53,  48,  45,  44,  44,  45,  48,  53,  60,  67,  76,  86,  97, 108, 121, 136, 154, 173, 194, 211,
> >> +              204, 187, 166, 146, 130, 115, 103,  91,  80,  69,  60,  53,  46,  41,  38,  37,  37,  38,  41,  46,  53,  60,  69,  79,  91, 102, 115, 130, 147, 166, 188, 205,
> >> +              197, 180, 159, 140, 124, 110,  97,  85,  73,  63,  53,  46,  40,  35,  32,  31,  31,  32,  35,  40,  46,  53,  62,  73,  85,  97, 110, 124, 140, 160, 181, 199,
> >> +              192, 174, 154, 134, 119, 105,  92,  80,  67,  57,  47,  40,  34,  29,  27,  25,  25,  27,  29,  34,  40,  47,  56,  67,  79,  92, 105, 119, 135, 154, 175, 193,
> >> +              187, 169, 148, 130, 114, 100,  87,  74,  62,  51,  42,  34,  29,  24,  22,  20,  20,  22,  24,  29,  34,  42,  51,  62,  74,  87, 100, 114, 130, 148, 170, 188,
> >> +              182, 164, 143, 125, 110,  96,  83,  69,  57,  46,  37,  30,  24,  20,  17,  16,  16,  17,  20,  24,  30,  37,  46,  57,  69,  82,  96, 110, 125, 143, 164, 183,
> >> +              178, 159, 139, 121, 106,  92,  78,  65,  52,  42,  33,  26,  20,  17,  14,  12,  12,  14,  17,  20,  26,  33,  42,  52,  65,  78,  92, 106, 121, 139, 160, 179,
> >> +              175, 156, 135, 118, 103,  89,  75,  61,  49,  38,  29,  22,  17,  14,  10,   9,   9,  10,  14,  17,  22,  29,  38,  48,  61,  74,  89, 103, 118, 135, 156, 176,
> >> +              172, 152, 132, 115, 100,  86,  71,  57,  45,  35,  26,  19,  14,  10,   8,   6,   6,   8,  10,  14,  19,  26,  34,  45,  57,  71,  85, 100, 115, 132, 152, 173,
> >> +              170, 149, 129, 113,  98,  83,  68,  55,  42,  32,  24,  17,  12,   8,   6,   4,   4,   6,   8,  11,  17,  23,  32,  42,  54,  68,  83,  97, 112, 129, 150, 170,
> >> +              168, 147, 127, 111,  96,  81,  66,  52,  40,  30,  22,  15,  10,   6,   4,   2,   2,   4,   6,  10,  15,  21,  30,  40,  52,  66,  80,  95, 110, 127, 147, 168,
> >> +              167, 145, 126, 109,  94,  79,  64,  50,  38,  28,  20,  13,   8,   5,   2,   1,   1,   2,   4,   8,  13,  20,  28,  38,  50,  64,  79,  94, 109, 126, 145, 167,
> >> +              166, 144, 125, 108,  93,  78,  63,  49,  37,  27,  19,  12,   7,   4,   1,   1,   1,   1,   4,   7,  12,  19,  27,  37,  49,  62,  77,  93, 108, 124, 144, 166,
> >> +              166, 144, 124, 108,  92,  77,  62,  48,  36,  26,  18,  12,   7,   3,   1,   0,   0,   1,   3,   6,  11,  18,  26,  36,  48,  62,  77,  92, 107, 124, 143, 166,
> >> +              166, 143, 124, 108,  92,  77,  62,  48,  36,  26,  18,  12,   7,   3,   1,   0,   0,   1,   3,   6,  11,  18,  26,  36,  48,  62,  77,  92, 107, 123, 143, 166,
> >> +              166, 143, 124, 108,  92,  77,  62,  48,  36,  26,  18,  12,   7,   3,   1,   1,   1,   1,   3,   6,  11,  18,  26,  36,  48,  62,  77,  92, 107, 123, 143, 166,
> >> +              166, 144, 125, 108,  93,  78,  63,  49,  37,  27,  19,  12,   7,   4,   2,   1,   1,   2,   4,   7,  12,  19,  27,  37,  49,  62,  77,  92, 107, 124, 144, 166,
> >> +              167, 145, 126, 109,  94,  79,  64,  51,  39,  28,  20,  14,   8,   5,   3,   2,   2,   3,   5,   8,  13,  20,  28,  38,  50,  64,  78,  93, 108, 125, 145, 167,
> >> +              168, 147, 127, 111,  96,  81,  66,  52,  40,  30,  22,  15,  10,   6,   4,   3,   3,   4,   6,  10,  15,  21,  30,  40,  52,  65,  80,  95, 110, 127, 146, 168,
> >> +              169, 149, 129, 112,  98,  83,  69,  55,  43,  32,  24,  17,  12,   8,   6,   4,   4,   6,   8,  12,  17,  23,  32,  42,  54,  68,  82,  97, 112, 128, 148, 169,
> >> +              172, 152, 132, 115, 100,  86,  71,  58,  46,  35,  26,  20,  14,  11,   8,   7,   7,   8,  11,  14,  19,  26,  35,  45,  57,  71,  85,  99, 114, 131, 151, 171,
> >> +              175, 155, 135, 118, 103,  89,  75,  61,  49,  38,  30,  23,  17,  14,  11,   9,   9,  11,  14,  17,  22,  29,  38,  48,  60,  74,  88, 102, 117, 134, 154, 174,
> >> +              178, 159, 139, 121, 106,  92,  79,  65,  53,  42,  33,  26,  21,  17,  14,  13,  13,  14,  17,  20,  26,  33,  42,  52,  64,  78,  91, 105, 120, 137, 158, 177,
> >> +              181, 163, 143, 125, 110,  96,  83,  70,  57,  47,  38,  30,  25,  21,  18,  16,  16,  18,  20,  25,  30,  37,  46,  57,  69,  82,  95, 108, 124, 142, 162, 181,
> >> +              185, 168, 147, 129, 114, 100,  87,  75,  62,  52,  42,  35,  30,  25,  22,  21,  21,  22,  25,  30,  35,  42,  51,  62,  73,  86,  99, 113, 128, 146, 167, 185,
> >> +              190, 173, 153, 134, 118, 105,  92,  80,  68,  57,  48,  40,  35,  30,  27,  26,  26,  27,  30,  35,  40,  47,  56,  67,  79,  91, 103, 117, 133, 152, 172, 190,
> >> +              196, 179, 159, 139, 123, 109,  97,  85,  74,  63,  54,  47,  40,  36,  33,  31,  31,  33,  36,  40,  46,  53,  62,  73,  84,  96, 108, 122, 138, 157, 178, 195,
> >> +              202, 185, 165, 146, 129, 115, 103,  91,  80,  70,  61,  54,  47,  42,  39,  38,  38,  39,  42,  46,  53,  60,  69,  79,  90, 101, 113, 128, 144, 163, 184, 201,
> >> +              209, 192, 172, 153, 135, 121, 108,  97,  87,  77,  68,  60,  54,  49,  46,  45,  45,  46,  49,  54,  60,  67,  76,  86,  96, 107, 119, 134, 151, 170, 191, 207,
> >> +              216, 199, 178, 159, 141, 126, 114, 103,  92,  82,  74,  66,  60,  54,  51,  50,  50,  51,  54,  60,  66,  73,  82,  91, 101, 112, 125, 140, 158, 177, 197, 215,
> >> +             ]
> > 
> > I love how you can 'see' the shading in the ascii data!
> 
> Me too!
> 
> > <snip lots of ascii data>
> >
> > With BLC handled however it needs ...
> >
> > Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> 
> I actually have a newer version of this tuning file with the lens
> shading adjusted to be less heavy around the peripheries (that's the
> only change) - this turns out to be too heavy in certain lighting
> conditions;

What light conditions are those, and how did you adjust the LSC table ?

> I'll post that version in the v2 of the set. Should I keep
> the ack (with BLC removed too), or would you like to see that version
> of the file first?

Patch
diff mbox series

diff --git a/src/ipa/mali-c55/data/imx708.yaml b/src/ipa/mali-c55/data/imx708.yaml
new file mode 100644
index 00000000..75b8398a
--- /dev/null
+++ b/src/ipa/mali-c55/data/imx708.yaml
@@ -0,0 +1,325 @@ 
+# SPDX-License-Identifier: CC0-1.0
+%YAML 1.1
+---
+version: 1
+algorithms:
+  - Agc:
+  - Awb:
+  - BlackLevelCorrection:
+      offset00: 65536
+      offset01: 65536
+      offset10: 65536
+      offset11: 65536
+  - Lsc:
+      meshScale: 6
+      sets:
+        - ct: 2500
+          r: [
+              227, 209, 187, 167, 150, 134, 120, 109,  99,  89,  81,  73,  67,  61,  57,  57,  57,  57,  61,  67,  73,  80,  89,  98, 109, 120, 134, 150, 168, 188, 209, 227,
+              218, 202, 181, 161, 143, 128, 115, 104,  93,  84,  75,  67,  61,  56,  53,  51,  51,  53,  56,  61,  67,  75,  83,  93, 103, 115, 128, 143, 161, 181, 202, 219,
+              210, 194, 173, 153, 136, 121, 109,  97,  87,  76,  67,  60,  53,  48,  45,  44,  44,  45,  48,  53,  60,  67,  76,  86,  97, 108, 121, 136, 154, 173, 194, 211,
+              204, 187, 166, 146, 130, 115, 103,  91,  80,  69,  60,  53,  46,  41,  38,  37,  37,  38,  41,  46,  53,  60,  69,  79,  91, 102, 115, 130, 147, 166, 188, 205,
+              197, 180, 159, 140, 124, 110,  97,  85,  73,  63,  53,  46,  40,  35,  32,  31,  31,  32,  35,  40,  46,  53,  62,  73,  85,  97, 110, 124, 140, 160, 181, 199,
+              192, 174, 154, 134, 119, 105,  92,  80,  67,  57,  47,  40,  34,  29,  27,  25,  25,  27,  29,  34,  40,  47,  56,  67,  79,  92, 105, 119, 135, 154, 175, 193,
+              187, 169, 148, 130, 114, 100,  87,  74,  62,  51,  42,  34,  29,  24,  22,  20,  20,  22,  24,  29,  34,  42,  51,  62,  74,  87, 100, 114, 130, 148, 170, 188,
+              182, 164, 143, 125, 110,  96,  83,  69,  57,  46,  37,  30,  24,  20,  17,  16,  16,  17,  20,  24,  30,  37,  46,  57,  69,  82,  96, 110, 125, 143, 164, 183,
+              178, 159, 139, 121, 106,  92,  78,  65,  52,  42,  33,  26,  20,  17,  14,  12,  12,  14,  17,  20,  26,  33,  42,  52,  65,  78,  92, 106, 121, 139, 160, 179,
+              175, 156, 135, 118, 103,  89,  75,  61,  49,  38,  29,  22,  17,  14,  10,   9,   9,  10,  14,  17,  22,  29,  38,  48,  61,  74,  89, 103, 118, 135, 156, 176,
+              172, 152, 132, 115, 100,  86,  71,  57,  45,  35,  26,  19,  14,  10,   8,   6,   6,   8,  10,  14,  19,  26,  34,  45,  57,  71,  85, 100, 115, 132, 152, 173,
+              170, 149, 129, 113,  98,  83,  68,  55,  42,  32,  24,  17,  12,   8,   6,   4,   4,   6,   8,  11,  17,  23,  32,  42,  54,  68,  83,  97, 112, 129, 150, 170,
+              168, 147, 127, 111,  96,  81,  66,  52,  40,  30,  22,  15,  10,   6,   4,   2,   2,   4,   6,  10,  15,  21,  30,  40,  52,  66,  80,  95, 110, 127, 147, 168,
+              167, 145, 126, 109,  94,  79,  64,  50,  38,  28,  20,  13,   8,   5,   2,   1,   1,   2,   4,   8,  13,  20,  28,  38,  50,  64,  79,  94, 109, 126, 145, 167,
+              166, 144, 125, 108,  93,  78,  63,  49,  37,  27,  19,  12,   7,   4,   1,   1,   1,   1,   4,   7,  12,  19,  27,  37,  49,  62,  77,  93, 108, 124, 144, 166,
+              166, 144, 124, 108,  92,  77,  62,  48,  36,  26,  18,  12,   7,   3,   1,   0,   0,   1,   3,   6,  11,  18,  26,  36,  48,  62,  77,  92, 107, 124, 143, 166,
+              166, 143, 124, 108,  92,  77,  62,  48,  36,  26,  18,  12,   7,   3,   1,   0,   0,   1,   3,   6,  11,  18,  26,  36,  48,  62,  77,  92, 107, 123, 143, 166,
+              166, 143, 124, 108,  92,  77,  62,  48,  36,  26,  18,  12,   7,   3,   1,   1,   1,   1,   3,   6,  11,  18,  26,  36,  48,  62,  77,  92, 107, 123, 143, 166,
+              166, 144, 125, 108,  93,  78,  63,  49,  37,  27,  19,  12,   7,   4,   2,   1,   1,   2,   4,   7,  12,  19,  27,  37,  49,  62,  77,  92, 107, 124, 144, 166,
+              167, 145, 126, 109,  94,  79,  64,  51,  39,  28,  20,  14,   8,   5,   3,   2,   2,   3,   5,   8,  13,  20,  28,  38,  50,  64,  78,  93, 108, 125, 145, 167,
+              168, 147, 127, 111,  96,  81,  66,  52,  40,  30,  22,  15,  10,   6,   4,   3,   3,   4,   6,  10,  15,  21,  30,  40,  52,  65,  80,  95, 110, 127, 146, 168,
+              169, 149, 129, 112,  98,  83,  69,  55,  43,  32,  24,  17,  12,   8,   6,   4,   4,   6,   8,  12,  17,  23,  32,  42,  54,  68,  82,  97, 112, 128, 148, 169,
+              172, 152, 132, 115, 100,  86,  71,  58,  46,  35,  26,  20,  14,  11,   8,   7,   7,   8,  11,  14,  19,  26,  35,  45,  57,  71,  85,  99, 114, 131, 151, 171,
+              175, 155, 135, 118, 103,  89,  75,  61,  49,  38,  30,  23,  17,  14,  11,   9,   9,  11,  14,  17,  22,  29,  38,  48,  60,  74,  88, 102, 117, 134, 154, 174,
+              178, 159, 139, 121, 106,  92,  79,  65,  53,  42,  33,  26,  21,  17,  14,  13,  13,  14,  17,  20,  26,  33,  42,  52,  64,  78,  91, 105, 120, 137, 158, 177,
+              181, 163, 143, 125, 110,  96,  83,  70,  57,  47,  38,  30,  25,  21,  18,  16,  16,  18,  20,  25,  30,  37,  46,  57,  69,  82,  95, 108, 124, 142, 162, 181,
+              185, 168, 147, 129, 114, 100,  87,  75,  62,  52,  42,  35,  30,  25,  22,  21,  21,  22,  25,  30,  35,  42,  51,  62,  73,  86,  99, 113, 128, 146, 167, 185,
+              190, 173, 153, 134, 118, 105,  92,  80,  68,  57,  48,  40,  35,  30,  27,  26,  26,  27,  30,  35,  40,  47,  56,  67,  79,  91, 103, 117, 133, 152, 172, 190,
+              196, 179, 159, 139, 123, 109,  97,  85,  74,  63,  54,  47,  40,  36,  33,  31,  31,  33,  36,  40,  46,  53,  62,  73,  84,  96, 108, 122, 138, 157, 178, 195,
+              202, 185, 165, 146, 129, 115, 103,  91,  80,  70,  61,  54,  47,  42,  39,  38,  38,  39,  42,  46,  53,  60,  69,  79,  90, 101, 113, 128, 144, 163, 184, 201,
+              209, 192, 172, 153, 135, 121, 108,  97,  87,  77,  68,  60,  54,  49,  46,  45,  45,  46,  49,  54,  60,  67,  76,  86,  96, 107, 119, 134, 151, 170, 191, 207,
+              216, 199, 178, 159, 141, 126, 114, 103,  92,  82,  74,  66,  60,  54,  51,  50,  50,  51,  54,  60,  66,  73,  82,  91, 101, 112, 125, 140, 158, 177, 197, 215,
+             ]
+          g: [
+              179, 163, 144, 128, 112,  99,  88,  79,  71,  64,  58,  52,  48,  43,  41,  41,  41,  41,  43,  48,  52,  58,  64,  71,  79,  88,  99, 113, 128, 145, 164, 180,
+              171, 157, 139, 122, 107,  94,  84,  75,  67,  60,  53,  48,  43,  40,  38,  37,  37,  38,  40,  43,  48,  53,  60,  67,  74,  84,  94, 107, 123, 139, 158, 173,
+              165, 150, 132, 116, 101,  89,  79,  70,  62,  54,  48,  43,  38,  35,  32,  31,  31,  33,  35,  38,  43,  48,  54,  61,  69,  79,  89, 101, 116, 133, 151, 166,
+              158, 144, 127, 110,  96,  84,  74,  65,  57,  50,  43,  38,  33,  30,  28,  27,  27,  28,  30,  33,  38,  43,  49,  57,  65,  74,  84,  96, 111, 127, 145, 160,
+              153, 139, 121, 105,  91,  80,  70,  61,  53,  45,  38,  33,  29,  25,  23,  22,  22,  23,  25,  29,  33,  38,  45,  52,  61,  70,  80,  91, 105, 122, 140, 155,
+              149, 134, 116, 100,  87,  76,  66,  57,  48,  41,  34,  29,  25,  21,  19,  18,  18,  19,  21,  25,  29,  34,  41,  48,  57,  66,  76,  87, 101, 117, 135, 150,
+              144, 129, 112,  96,  84,  73,  63,  53,  44,  37,  30,  25,  21,  18,  16,  15,  15,  16,  18,  21,  25,  30,  37,  44,  53,  63,  73,  83,  96, 112, 130, 146,
+              140, 125, 108,  93,  80,  69,  59,  50,  41,  33,  27,  22,  18,  15,  13,  12,  12,  13,  15,  18,  22,  27,  33,  41,  50,  59,  69,  80,  93, 108, 126, 142,
+              137, 121, 104,  89,  77,  67,  56,  47,  38,  30,  24,  19,  15,  12,  10,   9,   9,  10,  12,  15,  19,  24,  30,  38,  47,  56,  66,  77,  90, 104, 122, 139,
+              134, 118, 101,  87,  75,  64,  54,  44,  35,  28,  21,  16,  12,  10,   8,   7,   7,   8,  10,  12,  16,  21,  27,  35,  44,  54,  64,  75,  87, 101, 119, 136,
+              132, 115,  98,  85,  73,  62,  51,  41,  33,  25,  19,  14,  10,   8,   6,   5,   5,   6,   8,  10,  14,  19,  25,  32,  41,  51,  62,  72,  84,  99, 116, 133,
+              130, 113,  96,  83,  71,  60,  49,  39,  31,  23,  17,  12,   9,   6,   4,   3,   3,   4,   6,   8,  12,  17,  23,  30,  39,  49,  60,  71,  83,  96, 114, 131,
+              128, 111,  95,  81,  69,  58,  48,  38,  29,  22,  16,  11,   7,   4,   3,   2,   2,   3,   4,   7,  11,  16,  22,  29,  38,  47,  58,  69,  81,  95, 112, 130,
+              127, 110,  93,  80,  68,  57,  46,  36,  28,  21,  15,  10,   6,   3,   2,   1,   1,   2,   3,   6,  10,  15,  20,  28,  36,  46,  57,  68,  80,  93, 110, 129,
+              127, 109,  92,  79,  67,  56,  45,  36,  27,  20,  14,   9,   5,   3,   1,   1,   1,   1,   3,   5,   9,  14,  20,  27,  35,  45,  56,  67,  79,  93, 109, 128,
+              127, 108,  92,  79,  67,  56,  45,  35,  26,  19,  13,   9,   5,   2,   1,   0,   0,   1,   2,   5,   9,  13,  19,  26,  35,  45,  55,  67,  79,  92, 109, 128,
+              127, 108,  92,  78,  67,  56,  45,  35,  26,  19,  13,   9,   5,   2,   1,   0,   0,   1,   2,   5,   8,  13,  19,  26,  35,  45,  55,  67,  78,  92, 108, 128,
+              127, 108,  92,  78,  67,  56,  45,  35,  26,  19,  13,   9,   5,   2,   1,   0,   0,   1,   2,   5,   9,  13,  19,  26,  35,  45,  55,  67,  78,  92, 108, 128,
+              127, 109,  92,  79,  67,  56,  45,  36,  27,  20,  14,   9,   5,   3,   1,   1,   1,   1,   3,   5,   9,  14,  20,  27,  35,  45,  56,  67,  79,  92, 109, 128,
+              127, 110,  93,  80,  68,  57,  46,  36,  28,  21,  15,  10,   6,   3,   2,   1,   1,   2,   3,   6,  10,  15,  20,  28,  36,  46,  57,  68,  80,  93, 110, 129,
+              128, 111,  95,  81,  69,  58,  48,  38,  29,  22,  16,  11,   7,   4,   3,   2,   2,   3,   4,   7,  11,  16,  22,  29,  38,  47,  58,  69,  81,  95, 112, 129,
+              130, 113,  96,  82,  71,  60,  49,  39,  31,  23,  17,  12,   9,   6,   4,   3,   3,   4,   6,   8,  12,  17,  23,  31,  39,  49,  60,  70,  82,  96, 113, 131,
+              132, 116,  99,  84,  73,  62,  51,  41,  33,  25,  19,  14,  10,   8,   6,   5,   5,   6,   8,  10,  14,  19,  25,  33,  41,  51,  61,  72,  84,  98, 115, 133,
+              134, 118, 101,  87,  75,  64,  54,  44,  35,  28,  21,  16,  12,  10,   8,   7,   7,   8,  10,  12,  16,  21,  27,  35,  44,  53,  64,  74,  87, 101, 118, 135,
+              137, 121, 104,  90,  77,  67,  56,  47,  38,  30,  24,  19,  15,  12,  10,   9,   9,  10,  12,  15,  19,  24,  30,  38,  46,  56,  66,  77,  89, 104, 122, 138,
+              140, 125, 108,  93,  80,  69,  59,  50,  41,  33,  27,  22,  18,  15,  13,  12,  12,  13,  15,  18,  22,  27,  33,  41,  50,  59,  69,  80,  92, 108, 125, 141,
+              143, 129, 112,  96,  83,  72,  63,  53,  45,  37,  30,  25,  22,  18,  16,  15,  15,  16,  18,  22,  25,  30,  37,  44,  53,  62,  72,  83,  96, 111, 129, 145,
+              148, 133, 116, 100,  87,  76,  66,  57,  49,  41,  34,  29,  25,  22,  20,  19,  19,  20,  22,  25,  29,  34,  41,  48,  57,  66,  75,  87, 100, 116, 133, 149,
+              152, 138, 121, 105,  91,  80,  70,  61,  53,  45,  39,  33,  29,  26,  24,  23,  23,  24,  26,  29,  33,  38,  45,  52,  61,  70,  79,  91, 105, 121, 138, 153,
+              157, 143, 126, 110,  96,  84,  74,  65,  57,  50,  43,  38,  33,  30,  28,  27,  27,  28,  30,  33,  38,  43,  50,  57,  65,  74,  83,  95, 110, 126, 143, 158,
+              163, 149, 132, 116, 101,  89,  79,  70,  62,  55,  48,  43,  38,  35,  33,  32,  32,  33,  35,  38,  43,  48,  54,  62,  69,  78,  88, 101, 116, 132, 149, 164,
+              170, 155, 137, 121, 106,  94,  83,  74,  66,  59,  53,  47,  43,  38,  36,  36,  36,  36,  38,  43,  47,  53,  59,  66,  74,  82,  93, 106, 121, 137, 155, 171,
+             ]
+          b: [
+              192, 178, 158, 140, 124, 110,  98,  88,  79,  72,  65,  59,  53,  48,  47,  47,  47,  47,  48,  53,  59,  65,  72,  79,  88,  98, 110, 124, 141, 159, 176, 191,
+              184, 170, 150, 133, 117, 103,  92,  82,  74,  66,  59,  53,  48,  44,  42,  41,  41,  42,  45,  48,  53,  59,  66,  73,  82,  92, 103, 117, 133, 151, 168, 184,
+              177, 162, 143, 126, 110,  97,  86,  77,  68,  60,  53,  47,  42,  38,  36,  35,  35,  36,  38,  42,  47,  53,  60,  67,  76,  86,  96, 110, 126, 144, 162, 178,
+              171, 156, 138, 120, 105,  92,  82,  72,  63,  55,  47,  42,  36,  33,  31,  30,  30,  31,  33,  36,  42,  47,  54,  62,  72,  82,  92, 105, 120, 138, 156, 171,
+              166, 151, 132, 115, 100,  88,  77,  68,  58,  50,  42,  36,  32,  28,  26,  25,  25,  26,  28,  32,  36,  42,  49,  58,  67,  77,  88, 100, 115, 133, 150, 166,
+              160, 146, 128, 110,  96,  84,  74,  63,  54,  45,  38,  32,  27,  24,  21,  20,  20,  21,  24,  28,  32,  38,  45,  53,  63,  73,  84,  96, 110, 127, 146, 161,
+              156, 141, 123, 106,  92,  80,  69,  59,  49,  41,  33,  27,  24,  20,  17,  16,  16,  18,  20,  24,  28,  34,  41,  49,  59,  69,  80,  92, 105, 122, 141, 157,
+              151, 137, 118, 102,  88,  77,  66,  55,  45,  37,  29,  24,  20,  16,  14,  13,  13,  14,  16,  20,  24,  30,  37,  45,  55,  66,  77,  89, 102, 119, 136, 153,
+              148, 132, 114,  98,  85,  74,  63,  52,  42,  33,  27,  21,  16,  14,  11,  10,  10,  11,  14,  16,  21,  26,  33,  42,  52,  62,  74,  86,  98, 115, 133, 150,
+              145, 129, 111,  96,  83,  71,  60,  49,  39,  31,  24,  18,  14,  11,   8,   7,   7,   8,  11,  14,  18,  23,  30,  39,  49,  60,  71,  83,  96, 112, 130, 146,
+              143, 127, 108,  93,  81,  69,  57,  46,  37,  28,  21,  16,  11,   8,   6,   5,   5,   6,   8,  11,  16,  21,  28,  36,  46,  57,  69,  81,  94, 109, 127, 144,
+              141, 124, 106,  91,  79,  67,  55,  44,  34,  26,  19,  14,   9,   6,   5,   3,   3,   5,   6,  10,  14,  19,  26,  34,  44,  55,  67,  79,  92, 107, 124, 142,
+              139, 122, 104,  90,  77,  65,  53,  42,  33,  25,  18,  12,   8,   5,   3,   2,   2,   3,   5,   8,  12,  18,  24,  33,  42,  53,  65,  77,  90, 105, 122, 140,
+              138, 120, 102,  88,  76,  64,  52,  41,  31,  23,  17,  11,   7,   4,   2,   1,   1,   2,   4,   7,  11,  16,  23,  31,  41,  52,  64,  76,  88, 103, 120, 139,
+              137, 119, 102,  87,  75,  63,  51,  40,  30,  22,  16,  10,   6,   3,   1,   1,   1,   1,   3,   6,  10,  15,  22,  30,  40,  51,  63,  75,  88, 103, 119, 139,
+              137, 118, 101,  87,  75,  62,  50,  39,  30,  22,  15,  10,   6,   3,   1,   0,   0,   1,   3,   5,  10,  15,  22,  30,  39,  50,  62,  75,  87, 102, 119, 138,
+              137, 118, 101,  87,  74,  62,  50,  39,  30,  22,  15,  10,   6,   3,   1,   0,   0,   1,   3,   5,  10,  15,  21,  30,  39,  50,  62,  75,  87, 102, 118, 138,
+              137, 118, 101,  87,  74,  62,  50,  39,  30,  22,  15,  10,   6,   3,   1,   0,   0,   1,   3,   6,  10,  15,  22,  30,  39,  50,  62,  75,  87, 102, 118, 138,
+              137, 119, 101,  87,  75,  62,  51,  40,  30,  22,  16,  10,   6,   3,   1,   1,   1,   2,   3,   6,  10,  15,  22,  30,  40,  51,  63,  75,  87, 102, 119, 138,
+              138, 119, 102,  88,  75,  63,  52,  41,  31,  23,  16,  11,   7,   4,   2,   1,   2,   2,   4,   7,  11,  16,  23,  31,  41,  52,  63,  75,  88, 103, 120, 139,
+              138, 121, 104,  89,  77,  65,  53,  42,  32,  24,  18,  12,   8,   5,   3,   2,   2,   3,   5,   8,  12,  18,  24,  32,  42,  53,  65,  77,  89, 105, 121, 139,
+              140, 123, 105,  91,  78,  66,  55,  44,  34,  26,  19,  14,   9,   6,   5,   3,   3,   5,   6,  10,  14,  19,  26,  34,  44,  55,  66,  78,  91, 106, 123, 141,
+              142, 125, 107,  93,  80,  68,  57,  46,  36,  28,  21,  16,  11,   8,   6,   5,   5,   6,   8,  11,  16,  21,  28,  36,  46,  57,  68,  80,  93, 108, 125, 143,
+              144, 128, 110,  95,  82,  71,  59,  49,  39,  30,  23,  18,  13,  11,   8,   7,   7,   8,  11,  14,  18,  24,  30,  39,  49,  59,  71,  83,  95, 111, 128, 146,
+              147, 131, 113,  98,  85,  73,  62,  52,  42,  33,  26,  20,  16,  13,  11,  10,  10,  11,  14,  16,  21,  27,  34,  42,  52,  62,  73,  85,  98, 114, 131, 148,
+              150, 135, 117, 101,  88,  76,  65,  55,  45,  37,  30,  24,  20,  16,  14,  13,  13,  14,  16,  20,  24,  30,  37,  45,  55,  65,  76,  88, 101, 117, 135, 151,
+              154, 140, 121, 105,  91,  79,  69,  59,  49,  40,  33,  27,  23,  20,  17,  16,  16,  18,  20,  24,  28,  34,  41,  49,  58,  69,  79,  91, 105, 121, 139, 154,
+              158, 144, 125, 109,  94,  83,  72,  63,  53,  45,  38,  32,  27,  23,  21,  20,  20,  22,  24,  28,  32,  38,  45,  53,  62,  72,  83,  94, 109, 126, 143, 159,
+              162, 148, 130, 113,  98,  86,  76,  67,  58,  49,  42,  36,  32,  28,  26,  25,  25,  26,  28,  32,  36,  42,  49,  57,  66,  76,  86,  98, 113, 130, 148, 164,
+              167, 153, 135, 118, 103,  91,  80,  71,  62,  54,  47,  42,  36,  32,  30,  29,  29,  30,  33,  36,  42,  47,  54,  62,  71,  80,  90, 103, 118, 135, 153, 168,
+              173, 161, 142, 125, 109,  96,  85,  76,  68,  59,  53,  47,  42,  38,  36,  35,  35,  36,  38,  42,  47,  53,  59,  67,  76,  85,  96, 109, 125, 142, 159, 174,
+              181, 168, 149, 132, 116, 102,  91,  82,  73,  65,  58,  52,  47,  42,  40,  40,  40,  40,  42,  47,  52,  58,  65,  73,  81,  91, 102, 116, 132, 149, 167, 181,
+             ]
+        - ct: 5500
+          r: [
+              210, 192, 171, 153, 135, 121, 108,  98,  88,  79,  72,  65,  59,  54,  51,  51,  51,  51,  55,  60,  66,  73,  81,  90, 100, 111, 124, 139, 157, 176, 197, 215,
+              201, 186, 166, 147, 130, 116, 104,  93,  84,  74,  66,  59,  54,  49,  47,  46,  46,  47,  50,  55,  61,  68,  76,  85,  95, 106, 119, 134, 151, 170, 191, 207,
+              194, 179, 158, 140, 124, 110,  98,  87,  77,  68,  59,  53,  47,  43,  40,  39,  39,  41,  44,  48,  55,  61,  70,  79,  89, 100, 112, 127, 144, 163, 183, 200,
+              188, 172, 152, 133, 118, 104,  93,  82,  71,  61,  53,  47,  40,  36,  34,  33,  33,  34,  37,  42,  48,  55,  63,  73,  84,  95, 107, 121, 137, 156, 177, 194,
+              182, 166, 146, 127, 112,  99,  88,  76,  65,  56,  47,  40,  35,  31,  28,  27,  27,  29,  32,  36,  42,  49,  57,  67,  78,  90, 102, 115, 131, 150, 171, 188,
+              177, 160, 140, 122, 108,  95,  83,  71,  60,  50,  42,  35,  30,  26,  23,  22,  22,  24,  27,  31,  36,  43,  52,  62,  73,  85,  98, 111, 126, 145, 165, 183,
+              172, 155, 135, 118, 104,  91,  78,  66,  55,  45,  37,  30,  26,  21,  19,  18,  18,  19,  22,  27,  31,  39,  47,  57,  69,  81,  93, 107, 122, 140, 160, 178,
+              168, 150, 131, 114, 100,  87,  74,  62,  50,  41,  33,  26,  21,  18,  15,  14,  14,  15,  18,  22,  27,  34,  43,  53,  64,  77,  90, 103, 118, 135, 155, 174,
+              164, 146, 127, 111,  97,  83,  70,  58,  46,  37,  29,  22,  18,  14,  12,  11,  11,  12,  15,  18,  24,  30,  39,  49,  60,  73,  86,  99, 114, 131, 151, 170,
+              162, 143, 124, 108,  94,  80,  67,  54,  43,  34,  26,  19,  14,  12,   9,   8,   8,   9,  12,  15,  20,  27,  35,  45,  57,  70,  83,  96, 111, 128, 148, 167,
+              159, 140, 121, 105,  91,  77,  64,  51,  40,  31,  23,  17,  12,   9,   7,   5,   5,   7,   9,  13,  18,  24,  32,  42,  54,  67,  80,  94, 108, 125, 145, 164,
+              156, 137, 118, 103,  89,  75,  61,  49,  38,  28,  21,  15,  10,   7,   5,   3,   3,   5,   7,  11,  16,  22,  30,  40,  51,  64,  78,  92, 106, 122, 142, 162,
+              155, 135, 117, 101,  87,  73,  59,  47,  36,  26,  19,  13,   8,   5,   3,   2,   2,   3,   5,   9,  14,  20,  28,  38,  49,  62,  76,  90, 104, 120, 140, 161,
+              154, 134, 115, 100,  86,  72,  58,  45,  34,  25,  18,  12,   7,   4,   2,   1,   1,   2,   4,   8,  13,  19,  27,  36,  48,  61,  75,  89, 103, 119, 138, 160,
+              153, 133, 114,  99,  85,  71,  57,  44,  33,  24,  17,  11,   6,   3,   1,   0,   1,   1,   3,   7,  12,  18,  26,  35,  47,  60,  74,  88, 102, 118, 137, 158,
+              153, 132, 114,  99,  84,  70,  56,  44,  33,  24,  16,  10,   6,   2,   1,   0,   0,   1,   3,   6,  11,  17,  25,  35,  46,  59,  73,  87, 102, 118, 137, 158,
+              153, 132, 114,  98,  84,  70,  56,  44,  33,  24,  16,  10,   6,   2,   1,   0,   0,   1,   3,   6,  11,  17,  25,  35,  46,  59,  73,  87, 101, 117, 136, 158,
+              153, 132, 114,  99,  84,  70,  56,  44,  33,  24,  16,  10,   6,   3,   1,   0,   1,   1,   3,   7,  11,  18,  25,  35,  46,  59,  73,  87, 101, 118, 137, 158,
+              154, 133, 115,  99,  85,  71,  57,  45,  34,  25,  17,  11,   7,   3,   2,   1,   1,   2,   4,   7,  12,  18,  26,  36,  47,  60,  74,  88, 102, 118, 138, 159,
+              155, 134, 116, 100,  86,  72,  59,  46,  35,  26,  18,  12,   8,   4,   3,   2,   2,   3,   5,   8,  13,  20,  27,  37,  48,  61,  75,  89, 103, 119, 138, 160,
+              156, 136, 117, 102,  88,  74,  61,  48,  37,  27,  20,  14,   9,   6,   4,   3,   3,   5,   6,  10,  15,  21,  29,  39,  50,  63,  76,  90, 104, 121, 140, 161,
+              157, 138, 119, 104,  90,  76,  63,  50,  39,  30,  22,  16,  11,   8,   6,   5,   5,   6,   8,  12,  17,  23,  31,  41,  52,  65,  79,  92, 106, 123, 142, 162,
+              160, 141, 122, 106,  92,  79,  66,  53,  42,  32,  24,  18,  13,  10,   8,   7,   7,   8,  11,  14,  19,  26,  34,  44,  55,  68,  81,  94, 109, 125, 145, 164,
+              163, 145, 125, 109,  95,  82,  69,  56,  45,  36,  27,  21,  16,  13,  10,  10,  10,  11,  14,  17,  22,  29,  37,  47,  58,  71,  84,  97, 112, 128, 148, 167,
+              166, 148, 129, 112,  98,  85,  72,  60,  49,  39,  31,  25,  20,  16,  14,  13,  13,  14,  17,  20,  26,  32,  41,  51,  62,  74,  87, 100, 115, 132, 152, 170,
+              169, 152, 133, 116, 101,  89,  76,  64,  53,  43,  35,  28,  24,  20,  17,  16,  16,  18,  20,  25,  30,  36,  45,  55,  66,  78,  90, 103, 118, 136, 156, 174,
+              173, 157, 137, 120, 106,  93,  81,  69,  58,  48,  40,  33,  28,  24,  22,  21,  21,  22,  25,  29,  34,  41,  50,  60,  71,  82,  95, 108, 123, 141, 161, 178,
+              178, 162, 143, 125, 110,  97,  85,  74,  63,  53,  45,  38,  33,  29,  26,  25,  25,  27,  30,  34,  39,  46,  55,  65,  76,  87,  99, 112, 128, 146, 166, 183,
+              184, 168, 148, 130, 115, 102,  90,  79,  69,  59,  51,  44,  38,  34,  32,  31,  31,  32,  35,  39,  45,  52,  60,  70,  81,  92, 103, 117, 133, 151, 171, 188,
+              189, 174, 154, 136, 120, 107,  95,  85,  75,  65,  57,  51,  44,  40,  38,  37,  37,  38,  41,  45,  52,  58,  67,  76,  86,  97, 108, 123, 139, 157, 177, 194,
+              196, 181, 161, 143, 126, 113, 101,  91,  81,  72,  64,  57,  51,  47,  44,  43,  43,  45,  48,  52,  58,  65,  73,  82,  92, 102, 114, 129, 146, 164, 184, 201,
+              204, 188, 168, 149, 133, 118, 106,  96,  86,  77,  69,  63,  56,  51,  49,  49,  49,  49,  52,  57,  63,  71,  79,  87,  97, 107, 120, 135, 153, 171, 191, 208,
+             ]
+          g: [
+              166, 151, 133, 117, 103,  90,  80,  72,  64,  58,  52,  47,  42,  39,  37,  37,  37,  37,  39,  43,  48,  53,  59,  66,  73,  82,  93, 106, 121, 138, 156, 172,
+              159, 145, 128, 112,  98,  86,  76,  68,  60,  54,  48,  43,  38,  36,  34,  33,  33,  34,  36,  39,  44,  49,  55,  62,  69,  78,  89, 101, 116, 132, 150, 165,
+              153, 139, 122, 106,  93,  81,  72,  63,  56,  49,  43,  38,  33,  31,  29,  28,  28,  29,  31,  34,  39,  44,  50,  57,  65,  74,  83,  96, 110, 126, 144, 159,
+              147, 134, 117, 101,  88,  77,  68,  59,  51,  44,  38,  33,  29,  26,  24,  24,  24,  25,  27,  30,  34,  39,  46,  53,  61,  69,  79,  91, 105, 121, 138, 153,
+              142, 129, 112,  96,  84,  73,  64,  55,  47,  40,  34,  29,  25,  22,  20,  20,  20,  21,  23,  26,  30,  35,  41,  49,  57,  66,  75,  86, 100, 116, 133, 148,
+              138, 124, 107,  92,  80,  69,  60,  51,  43,  36,  30,  25,  22,  19,  17,  16,  16,  17,  19,  22,  26,  31,  38,  45,  53,  62,  71,  82,  95, 111, 129, 144,
+              134, 120, 103,  88,  76,  66,  57,  48,  39,  32,  26,  22,  18,  15,  14,  13,  13,  14,  16,  19,  23,  28,  34,  41,  50,  59,  68,  79,  91, 107, 124, 140,
+              131, 116,  99,  85,  73,  63,  54,  44,  36,  29,  23,  19,  15,  13,  11,  10,  10,  11,  13,  16,  20,  25,  31,  38,  47,  56,  65,  76,  88, 103, 120, 136,
+              127, 112,  96,  82,  71,  60,  51,  42,  33,  26,  21,  16,  13,  10,   8,   8,   8,   9,  11,  13,  17,  22,  28,  35,  44,  53,  63,  73,  85, 100, 117, 133,
+              125, 109,  93,  80,  68,  58,  48,  39,  31,  24,  18,  14,  10,   8,   6,   6,   6,   7,   9,  11,  15,  20,  25,  33,  41,  50,  60,  71,  82,  97, 114, 130,
+              123, 107,  91,  78,  67,  56,  46,  37,  29,  22,  16,  12,   9,   6,   5,   4,   4,   5,   7,   9,  13,  18,  23,  31,  39,  48,  58,  69,  80,  94, 111, 128,
+              121, 105,  89,  76,  65,  54,  44,  35,  27,  20,  15,  10,   7,   5,   3,   2,   2,   4,   5,   8,  11,  16,  22,  29,  37,  46,  57,  67,  79,  92, 109, 126,
+              120, 103,  87,  75,  63,  53,  43,  34,  26,  19,  14,   9,   6,   3,   2,   1,   1,   2,   4,   6,  10,  15,  20,  27,  36,  45,  55,  66,  77,  91, 107, 125,
+              119, 102,  86,  74,  62,  52,  42,  32,  25,  18,  13,   8,   5,   3,   1,   1,   1,   1,   3,   6,   9,  14,  19,  26,  34,  44,  54,  65,  76,  90, 106, 124,
+              118, 101,  86,  73,  62,  51,  41,  32,  24,  17,  12,   8,   4,   2,   1,   0,   0,   1,   2,   5,   9,  13,  19,  26,  34,  43,  53,  64,  76,  89, 105, 123,
+              118, 100,  85,  72,  61,  51,  41,  31,  23,  17,  12,   7,   4,   2,   0,   0,   0,   1,   2,   5,   8,  13,  18,  25,  33,  43,  53,  64,  75,  88, 105, 123,
+              118, 100,  85,  72,  61,  51,  40,  31,  23,  17,  12,   7,   4,   2,   0,   0,   0,   1,   2,   5,   8,  13,  18,  25,  33,  43,  53,  64,  75,  88, 105, 123,
+              118, 101,  85,  73,  62,  51,  41,  32,  24,  17,  12,   7,   4,   2,   1,   0,   0,   1,   2,   5,   8,  13,  18,  25,  34,  43,  53,  64,  75,  89, 105, 123,
+              118, 101,  86,  73,  62,  51,  41,  32,  24,  18,  12,   8,   5,   2,   1,   1,   1,   1,   3,   5,   9,  13,  19,  26,  34,  44,  54,  64,  76,  89, 106, 124,
+              119, 102,  87,  74,  63,  52,  42,  33,  25,  18,  13,   9,   5,   3,   2,   1,   1,   2,   3,   6,  10,  14,  20,  27,  35,  44,  55,  65,  77,  90, 107, 124,
+              120, 104,  88,  75,  64,  54,  44,  34,  26,  20,  14,  10,   6,   4,   3,   2,   2,   3,   4,   7,  11,  15,  21,  28,  36,  46,  56,  66,  78,  91, 108, 125,
+              122, 106,  90,  77,  65,  55,  45,  36,  28,  21,  16,  11,   8,   5,   4,   3,   3,   4,   6,   8,  12,  17,  23,  30,  38,  47,  57,  68,  79,  93, 110, 127,
+              124, 108,  92,  79,  67,  57,  47,  38,  30,  23,  17,  13,   9,   7,   5,   5,   5,   6,   8,  10,  14,  19,  25,  32,  40,  49,  59,  70,  81,  95, 112, 129,
+              126, 111,  95,  81,  70,  59,  50,  40,  32,  25,  20,  15,  12,   9,   7,   7,   7,   8,  10,  12,  16,  21,  27,  34,  42,  52,  61,  72,  84,  98, 115, 131,
+              129, 114,  98,  84,  72,  62,  52,  43,  35,  28,  22,  17,  14,  12,  10,   9,   9,  10,  12,  15,  18,  23,  30,  37,  45,  54,  64,  74,  86, 101, 118, 134,
+              132, 118, 101,  87,  75,  65,  55,  46,  38,  31,  25,  20,  17,  14,  12,  12,  12,  13,  15,  18,  21,  26,  33,  40,  48,  57,  67,  77,  90, 105, 122, 137,
+              136, 122, 105,  90,  78,  68,  59,  50,  41,  34,  28,  24,  20,  17,  15,  15,  15,  16,  18,  21,  25,  30,  36,  43,  51,  60,  70,  80,  93, 109, 126, 141,
+              139, 126, 109,  94,  82,  71,  62,  53,  45,  38,  32,  27,  24,  21,  19,  18,  18,  19,  21,  25,  28,  33,  40,  47,  55,  64,  73,  84,  97, 113, 130, 145,
+              144, 131, 114,  99,  85,  75,  66,  57,  49,  42,  36,  32,  27,  24,  23,  22,  22,  23,  25,  28,  32,  38,  44,  51,  59,  67,  77,  88, 102, 118, 135, 150,
+              149, 136, 119, 104,  90,  79,  70,  61,  54,  47,  41,  36,  32,  29,  27,  26,  26,  27,  29,  32,  37,  42,  48,  55,  63,  71,  81,  93, 107, 123, 140, 155,
+              155, 142, 125, 109,  95,  84,  74,  66,  58,  52,  46,  41,  36,  34,  32,  31,  31,  32,  34,  37,  42,  47,  53,  60,  67,  76,  86,  98, 113, 129, 146, 161,
+              162, 148, 130, 115, 100,  88,  78,  70,  63,  56,  50,  45,  40,  37,  35,  35,  35,  35,  37,  41,  46,  51,  57,  64,  71,  80,  91, 103, 118, 134, 152, 167,
+             ]
+          b: [
+              163, 150, 132, 116, 102,  90,  80,  71,  64,  57,  51,  46,  42,  38,  37,  37,  37,  37,  39,  43,  48,  53,  59,  66,  73,  82,  92, 105, 120, 136, 154, 168,
+              156, 143, 126, 110,  96,  85,  75,  67,  59,  53,  47,  42,  38,  35,  33,  32,  32,  34,  36,  39,  43,  49,  54,  61,  68,  77,  87, 100, 114, 130, 147, 161,
+              150, 137, 120, 105,  91,  80,  71,  62,  55,  48,  42,  37,  33,  30,  28,  27,  27,  29,  31,  34,  39,  43,  49,  56,  64,  72,  82,  94, 108, 124, 141, 155,
+              145, 132, 115, 100,  86,  76,  67,  58,  50,  43,  37,  33,  28,  26,  24,  23,  23,  24,  26,  29,  34,  39,  45,  52,  60,  68,  78,  89, 103, 119, 136, 150,
+              140, 127, 110,  95,  82,  72,  63,  54,  46,  39,  33,  28,  25,  22,  20,  19,  19,  20,  22,  26,  29,  34,  41,  48,  56,  65,  74,  85,  98, 114, 131, 145,
+              135, 122, 106,  91,  79,  68,  59,  51,  42,  35,  29,  25,  21,  18,  16,  16,  16,  17,  19,  22,  26,  31,  37,  44,  52,  61,  71,  81,  94, 109, 126, 140,
+              132, 118, 102,  87,  75,  65,  56,  47,  39,  32,  26,  21,  18,  15,  13,  13,  13,  14,  16,  19,  22,  27,  33,  41,  49,  58,  67,  78,  90, 105, 122, 137,
+              128, 114,  98,  84,  73,  62,  53,  44,  36,  29,  23,  18,  15,  12,  11,  10,  10,  11,  13,  16,  19,  24,  30,  38,  46,  55,  65,  75,  87, 102, 118, 133,
+              125, 111,  95,  81,  70,  60,  50,  41,  33,  26,  20,  16,  12,  10,   8,   8,   8,   9,  11,  13,  17,  22,  27,  35,  43,  52,  62,  72,  84,  98, 115, 130,
+              123, 108,  92,  79,  68,  58,  48,  39,  30,  24,  18,  14,  10,   8,   6,   5,   5,   7,   9,  11,  14,  19,  25,  32,  41,  50,  60,  70,  81,  96, 112, 127,
+              121, 106,  90,  77,  66,  55,  46,  36,  28,  22,  16,  12,   8,   6,   5,   4,   4,   5,   7,   9,  13,  17,  23,  30,  38,  48,  58,  68,  79,  93, 109, 125,
+              119, 104,  88,  75,  64,  54,  44,  35,  27,  20,  15,  10,   7,   5,   3,   2,   2,   4,   5,   8,  11,  16,  21,  28,  37,  46,  56,  67,  78,  91, 107, 124,
+              117, 102,  86,  74,  63,  53,  42,  33,  25,  19,  13,   9,   6,   3,   2,   1,   1,   2,   4,   6,  10,  14,  20,  27,  35,  45,  55,  65,  76,  90, 106, 122,
+              117, 100,  85,  73,  62,  51,  41,  32,  24,  18,  12,   8,   5,   3,   1,   1,   1,   1,   3,   5,   9,  13,  19,  26,  34,  43,  54,  64,  75,  89, 104, 121,
+              116, 100,  84,  72,  61,  51,  40,  31,  23,  17,  12,   7,   4,   2,   1,   0,   0,   1,   2,   5,   8,  13,  18,  25,  33,  43,  53,  64,  75,  88, 103, 121,
+              116,  99,  84,  72,  61,  50,  40,  31,  23,  17,  11,   7,   4,   2,   0,   0,   0,   1,   2,   5,   8,  12,  18,  25,  33,  42,  53,  63,  74,  88, 103, 121,
+              116,  99,  84,  72,  61,  50,  40,  31,  23,  17,  11,   7,   4,   2,   0,   0,   0,   1,   2,   5,   8,  12,  18,  25,  33,  42,  53,  63,  74,  87, 103, 121,
+              116,  99,  84,  72,  61,  50,  40,  31,  23,  17,  11,   7,   4,   2,   0,   0,   0,   1,   2,   5,   8,  13,  18,  25,  33,  43,  53,  63,  74,  88, 103, 121,
+              116, 100,  85,  72,  61,  51,  41,  32,  24,  17,  12,   8,   4,   2,   1,   1,   1,   1,   3,   5,   9,  13,  19,  25,  34,  43,  53,  64,  75,  88, 104, 121,
+              117, 101,  86,  73,  62,  52,  42,  33,  25,  18,  13,   8,   5,   3,   2,   1,   1,   2,   3,   6,   9,  14,  20,  26,  35,  44,  54,  64,  76,  89, 105, 121,
+              118, 103,  87,  74,  63,  53,  43,  34,  26,  19,  14,  10,   6,   4,   3,   2,   2,   3,   4,   7,  11,  15,  21,  28,  36,  45,  55,  66,  77,  91, 106, 123,
+              120, 104,  89,  76,  65,  54,  45,  35,  27,  21,  15,  11,   8,   5,   4,   3,   3,   4,   6,   8,  12,  16,  22,  29,  38,  47,  57,  67,  78,  92, 108, 124,
+              121, 107,  91,  78,  67,  56,  47,  37,  29,  22,  17,  13,   9,   7,   5,   4,   4,   6,   7,  10,  14,  18,  24,  31,  39,  49,  59,  69,  80,  94, 110, 126,
+              124, 109,  93,  80,  69,  59,  49,  40,  32,  25,  19,  14,  11,   9,   7,   6,   6,   7,  10,  12,  16,  20,  26,  34,  42,  51,  61,  71,  83,  97, 113, 128,
+              126, 112,  96,  83,  71,  61,  52,  43,  34,  27,  22,  17,  14,  11,   9,   9,   9,  10,  12,  14,  18,  23,  29,  36,  45,  54,  63,  73,  85, 100, 116, 131,
+              130, 116,  99,  85,  74,  64,  54,  45,  37,  30,  24,  20,  17,  14,  12,  11,  11,  12,  14,  17,  21,  26,  32,  39,  48,  56,  66,  76,  88, 103, 119, 134,
+              133, 120, 103,  89,  77,  66,  57,  49,  41,  34,  28,  23,  20,  17,  15,  14,  14,  15,  17,  21,  24,  29,  35,  42,  51,  59,  68,  79,  92, 107, 123, 137,
+              137, 124, 107,  93,  80,  70,  61,  52,  44,  37,  31,  27,  23,  20,  18,  18,  18,  19,  21,  24,  28,  33,  39,  46,  54,  63,  72,  83,  96, 111, 127, 141,
+              141, 128, 112,  97,  84,  73,  65,  56,  48,  42,  36,  31,  27,  24,  22,  21,  21,  22,  25,  28,  32,  37,  43,  50,  58,  66,  76,  87, 100, 116, 132, 146,
+              146, 133, 117, 102,  88,  77,  68,  60,  53,  46,  40,  35,  31,  28,  26,  25,  25,  27,  29,  32,  37,  41,  47,  54,  62,  70,  79,  91, 105, 121, 137, 151,
+              151, 139, 123, 107,  94,  82,  73,  65,  57,  51,  45,  40,  36,  33,  31,  30,  30,  32,  34,  37,  41,  46,  52,  59,  66,  74,  84,  97, 111, 126, 143, 157,
+              158, 145, 128, 113,  99,  87,  77,  69,  61,  55,  49,  44,  39,  36,  34,  34,  34,  35,  37,  41,  45,  50,  56,  63,  70,  79,  89, 102, 116, 131, 148, 163,
+             ]
+        - ct: 8500
+          r: [
+              216, 198, 176, 157, 140, 124, 111, 100,  90,  82,  74,  67,  61,  55,  52,  52,  52,  52,  53,  58,  64,  70,  77,  85,  94, 104, 116, 131, 147, 166, 185, 201,
+              207, 191, 170, 151, 133, 118, 106,  95,  86,  77,  69,  62,  55,  51,  48,  47,  47,  47,  50,  53,  58,  65,  72,  80,  89, 100, 111, 125, 141, 159, 178, 193,
+              199, 183, 162, 144, 127, 112, 100,  89,  80,  70,  62,  55,  49,  44,  42,  40,  40,  41,  43,  47,  52,  59,  66,  74,  84,  94, 105, 118, 134, 152, 171, 187,
+              193, 176, 156, 137, 121, 107,  95,  84,  74,  64,  56,  49,  43,  38,  35,  34,  34,  35,  37,  40,  46,  52,  60,  68,  78,  89, 100, 113, 128, 145, 165, 180,
+              186, 170, 150, 131, 115, 101,  90,  79,  68,  58,  50,  43,  37,  33,  30,  28,  28,  29,  31,  35,  40,  46,  54,  63,  73,  83,  95, 107, 122, 139, 159, 174,
+              181, 164, 144, 125, 110,  97,  85,  74,  63,  53,  44,  37,  32,  28,  25,  23,  23,  24,  26,  30,  35,  41,  48,  58,  68,  79,  90, 103, 117, 134, 153, 169,
+              176, 159, 139, 121, 106,  92,  81,  69,  58,  48,  40,  33,  28,  23,  20,  19,  19,  20,  22,  26,  30,  36,  44,  53,  63,  75,  86,  98, 112, 129, 148, 165,
+              171, 154, 134, 116, 102,  89,  77,  65,  53,  44,  35,  29,  23,  20,  17,  15,  15,  16,  18,  22,  26,  32,  39,  48,  59,  71,  82,  95, 108, 125, 144, 160,
+              167, 150, 130, 113,  98,  85,  73,  61,  49,  40,  31,  25,  20,  16,  13,  12,  12,  12,  14,  18,  22,  28,  36,  45,  55,  67,  79,  91, 105, 120, 139, 156,
+              164, 146, 126, 109,  95,  82,  70,  57,  46,  36,  28,  22,  16,  13,  10,   9,   9,   9,  12,  14,  19,  25,  32,  41,  51,  63,  76,  88, 101, 117, 135, 153,
+              162, 143, 123, 107,  93,  80,  67,  54,  43,  33,  25,  19,  14,  10,   8,   6,   6,   7,   9,  12,  16,  22,  29,  38,  48,  60,  73,  85,  99, 114, 132, 151,
+              159, 140, 121, 105,  91,  77,  64,  52,  41,  31,  23,  17,  12,   8,   6,   4,   4,   5,   7,  10,  14,  20,  27,  35,  46,  58,  70,  83,  97, 111, 130, 148,
+              157, 138, 119, 103,  89,  75,  62,  50,  38,  29,  21,  15,  10,   6,   4,   3,   3,   4,   5,   8,  12,  18,  25,  33,  44,  55,  68,  81,  95, 109, 127, 146,
+              156, 136, 117, 101,  87,  74,  60,  48,  37,  27,  20,  13,   9,   5,   3,   2,   1,   2,   4,   6,  11,  16,  23,  32,  42,  54,  67,  80,  93, 108, 125, 145,
+              155, 135, 116, 100,  86,  72,  59,  47,  36,  26,  19,  12,   8,   4,   2,   1,   1,   1,   3,   6,  10,  15,  22,  31,  41,  52,  65,  79,  92, 107, 124, 144,
+              155, 134, 115,  99,  86,  72,  58,  46,  35,  26,  18,  12,   7,   3,   1,   0,   0,   1,   2,   5,   9,  15,  21,  30,  40,  52,  65,  78,  92, 106, 124, 144,
+              155, 134, 115,  99,  85,  72,  58,  46,  35,  25,  18,  12,   7,   3,   1,   0,   0,   0,   2,   5,   9,  14,  21,  30,  40,  51,  64,  78,  91, 106, 123, 143,
+              155, 134, 115,  99,  85,  72,  58,  46,  35,  26,  18,  12,   7,   3,   1,   0,   0,   1,   2,   5,   9,  14,  21,  30,  40,  51,  64,  78,  91, 106, 123, 143,
+              155, 135, 115, 100,  86,  72,  59,  46,  35,  26,  18,  12,   7,   4,   2,   1,   1,   1,   3,   5,   9,  15,  22,  30,  40,  52,  65,  78,  92, 106, 124, 144,
+              156, 136, 116, 100,  87,  73,  60,  47,  36,  27,  19,  13,   8,   5,   2,   2,   1,   2,   3,   6,  10,  16,  23,  31,  41,  53,  66,  79,  92, 107, 124, 144,
+              157, 137, 118, 102,  88,  75,  61,  49,  38,  28,  21,  14,  10,   6,   4,   2,   2,   3,   4,   7,  12,  17,  24,  33,  43,  54,  67,  80,  93, 108, 126, 145,
+              158, 139, 120, 103,  89,  76,  63,  51,  40,  30,  22,  16,  11,   7,   6,   4,   4,   4,   6,   9,  13,  19,  26,  34,  45,  56,  69,  82,  95, 110, 128, 147,
+              160, 141, 122, 106,  92,  79,  66,  53,  42,  33,  25,  18,  13,  10,   7,   6,   6,   6,   9,  11,  15,  21,  28,  37,  47,  59,  71,  84,  97, 112, 130, 148,
+              163, 144, 125, 108,  94,  81,  69,  56,  45,  35,  27,  21,  16,  12,  10,   8,   8,   9,  11,  14,  18,  24,  31,  40,  50,  62,  74,  86,  99, 114, 133, 151,
+              165, 148, 128, 111,  97,  84,  72,  60,  49,  39,  31,  24,  19,  15,  12,  11,  11,  11,  14,  17,  21,  27,  34,  43,  53,  65,  77,  89, 102, 118, 136, 153,
+              169, 152, 132, 114, 100,  87,  75,  63,  52,  42,  34,  27,  22,  19,  16,  14,  14,  15,  17,  21,  24,  30,  38,  47,  57,  68,  80,  92, 105, 121, 140, 157,
+              173, 156, 136, 118, 104,  91,  79,  68,  57,  47,  38,  32,  26,  22,  19,  18,  18,  19,  21,  24,  28,  34,  42,  51,  61,  72,  83,  95, 109, 125, 144, 160,
+              177, 161, 141, 123, 108,  95,  83,  72,  61,  52,  43,  36,  31,  26,  24,  22,  22,  23,  25,  28,  33,  39,  47,  56,  66,  76,  87,  99, 113, 130, 149, 165,
+              182, 166, 147, 128, 112,  99,  88,  77,  67,  57,  48,  41,  36,  31,  29,  27,  27,  28,  30,  33,  39,  44,  52,  61,  71,  81,  92, 104, 118, 135, 154, 169,
+              188, 172, 152, 134, 118, 104,  93,  82,  72,  62,  54,  47,  41,  37,  34,  33,  33,  33,  35,  39,  44,  50,  57,  66,  76,  85,  96, 109, 124, 141, 160, 175,
+              194, 178, 159, 140, 123, 110,  98,  87,  78,  68,  60,  53,  47,  43,  40,  38,  38,  39,  41,  45,  50,  56,  64,  72,  81,  91, 102, 115, 130, 147, 166, 181,
+              202, 185, 165, 146, 129, 115, 103,  92,  83,  73,  66,  59,  53,  47,  44,  43,  43,  43,  45,  50,  55,  61,  69,  77,  86,  95, 107, 120, 136, 153, 172, 187,
+             ]
+          g: [
+              177, 160, 141, 125, 110,  96,  85,  76,  68,  61,  55,  50,  45,  41,  39,  39,  39,  39,  40,  43,  47,  52,  58,  64,  71,  80,  90, 102, 117, 132, 150, 165,
+              169, 154, 135, 119, 104,  91,  81,  72,  64,  57,  51,  46,  41,  38,  36,  35,  35,  35,  37,  40,  43,  48,  54,  60,  67,  76,  85,  97, 111, 127, 144, 157,
+              162, 147, 129, 113,  98,  86,  76,  67,  59,  52,  46,  41,  36,  33,  31,  30,  30,  30,  32,  35,  39,  43,  49,  55,  63,  71,  80,  92, 105, 121, 138, 151,
+              156, 141, 124, 107,  93,  81,  72,  63,  55,  48,  41,  36,  32,  28,  26,  25,  25,  26,  27,  30,  34,  39,  44,  51,  58,  67,  76,  87, 100, 115, 132, 146,
+              150, 136, 119, 102,  89,  77,  68,  59,  51,  43,  37,  32,  28,  24,  22,  21,  21,  21,  23,  26,  30,  34,  40,  47,  54,  63,  72,  82,  95, 110, 127, 141,
+              146, 131, 114,  98,  84,  73,  64,  55,  47,  39,  33,  28,  24,  20,  18,  17,  17,  18,  19,  22,  26,  30,  36,  43,  51,  59,  68,  78,  90, 105, 122, 136,
+              141, 127, 109,  94,  81,  70,  60,  51,  43,  36,  29,  24,  20,  17,  15,  14,  14,  15,  16,  19,  22,  27,  32,  39,  47,  56,  65,  75,  86, 101, 118, 132,
+              137, 123, 105,  90,  78,  67,  57,  48,  40,  32,  26,  21,  17,  14,  12,  11,  11,  12,  13,  16,  19,  24,  29,  36,  44,  52,  62,  72,  83,  97, 114, 128,
+              134, 119, 102,  87,  75,  64,  54,  45,  37,  29,  23,  18,  14,  12,  10,   9,   9,   9,  11,  13,  16,  21,  26,  33,  41,  50,  59,  69,  80,  93, 110, 125,
+              131, 116,  99,  84,  72,  62,  52,  42,  34,  27,  21,  16,  12,  10,   8,   6,   6,   7,   9,  11,  14,  18,  24,  30,  38,  47,  56,  66,  77,  91, 107, 122,
+              129, 113,  96,  82,  70,  59,  50,  40,  32,  25,  19,  14,  10,   8,   6,   5,   5,   5,   7,   9,  12,  16,  21,  28,  36,  45,  54,  64,  75,  88, 104, 120,
+              127, 111,  94,  80,  68,  58,  48,  38,  30,  23,  17,  12,   9,   6,   4,   3,   3,   4,   5,   7,  10,  14,  20,  26,  34,  43,  52,  62,  73,  86, 102, 118,
+              125, 109,  92,  78,  67,  56,  46,  37,  28,  21,  15,  11,   7,   5,   3,   2,   2,   3,   4,   6,   9,  13,  18,  25,  32,  41,  51,  61,  72,  84, 100, 116,
+              124, 107,  91,  77,  66,  55,  45,  35,  27,  20,  14,  10,   6,   4,   2,   1,   1,   2,   3,   5,   8,  12,  17,  23,  31,  40,  50,  60,  71,  83,  98, 115,
+              124, 106,  90,  76,  65,  54,  44,  34,  26,  19,  14,   9,   6,   3,   1,   1,   0,   1,   2,   4,   7,  11,  16,  23,  30,  39,  49,  59,  70,  82,  97, 114,
+              123, 105,  89,  76,  64,  54,  43,  34,  26,  19,  13,   9,   5,   2,   1,   0,   0,   0,   1,   4,   7,  11,  16,  22,  30,  38,  48,  59,  69,  82,  97, 114,
+              123, 105,  89,  75,  64,  53,  43,  34,  25,  19,  13,   8,   5,   2,   1,   0,   0,   0,   1,   3,   7,  11,  16,  22,  29,  38,  48,  58,  69,  81,  96, 114,
+              123, 105,  89,  75,  64,  53,  43,  34,  26,  19,  13,   9,   5,   2,   1,   0,   0,   0,   1,   4,   7,  11,  16,  22,  29,  38,  48,  58,  69,  81,  96, 114,
+              123, 106,  89,  76,  65,  54,  44,  34,  26,  19,  13,   9,   5,   3,   1,   1,   0,   1,   2,   4,   7,  11,  16,  22,  30,  39,  48,  59,  69,  82,  97, 114,
+              124, 107,  90,  77,  65,  55,  44,  35,  27,  20,  14,  10,   6,   3,   2,   1,   1,   1,   2,   4,   8,  12,  17,  23,  31,  39,  49,  59,  70,  82,  98, 115,
+              125, 108,  91,  78,  66,  56,  46,  36,  28,  21,  15,  10,   7,   4,   2,   2,   1,   2,   3,   5,   8,  13,  18,  24,  32,  41,  50,  60,  71,  84,  99, 116,
+              126, 110,  93,  79,  67,  57,  47,  38,  29,  22,  16,  12,   8,   5,   4,   2,   2,   3,   4,   7,  10,  14,  19,  26,  33,  42,  52,  62,  72,  85, 100, 117,
+              128, 112,  95,  81,  69,  59,  49,  39,  31,  24,  18,  13,  10,   7,   5,   4,   4,   4,   6,   8,  11,  15,  21,  27,  35,  44,  53,  63,  74,  87, 103, 119,
+              130, 114,  97,  83,  71,  61,  51,  42,  33,  26,  20,  15,  11,   9,   7,   6,   6,   6,   8,  10,  13,  17,  23,  29,  37,  46,  55,  65,  76,  89, 105, 121,
+              132, 117, 100,  86,  74,  63,  53,  44,  36,  28,  22,  17,  14,  11,   9,   8,   8,   8,  10,  12,  15,  20,  25,  32,  40,  48,  58,  67,  79,  92, 108, 123,
+              135, 121, 103,  89,  76,  66,  56,  47,  39,  31,  25,  20,  16,  14,  11,  10,  10,  11,  12,  15,  18,  22,  28,  35,  42,  51,  60,  70,  81,  95, 111, 126,
+              139, 124, 107,  92,  79,  68,  59,  50,  42,  34,  28,  23,  19,  16,  14,  13,  13,  13,  15,  18,  21,  25,  31,  38,  46,  54,  63,  73,  85,  99, 115, 130,
+              143, 128, 111,  96,  83,  72,  62,  54,  45,  38,  32,  26,  23,  19,  17,  16,  16,  17,  18,  21,  24,  29,  35,  41,  49,  57,  66,  76,  88, 103, 119, 133,
+              147, 133, 116, 100,  86,  75,  66,  57,  49,  42,  36,  30,  26,  23,  21,  20,  20,  20,  22,  24,  28,  33,  38,  45,  53,  61,  70,  80,  92, 107, 124, 137,
+              152, 138, 121, 105,  91,  79,  70,  61,  53,  46,  40,  35,  30,  27,  25,  24,  24,  24,  26,  28,  33,  37,  43,  49,  57,  65,  73,  84,  97, 112, 128, 142,
+              158, 144, 126, 110,  96,  84,  74,  65,  58,  51,  44,  39,  35,  31,  29,  28,  28,  29,  30,  33,  37,  42,  47,  54,  61,  69,  78,  89, 102, 118, 134, 147,
+              165, 149, 131, 115, 101,  88,  78,  69,  61,  54,  48,  43,  38,  35,  32,  32,  32,  32,  33,  36,  41,  45,  51,  57,  64,  72,  82,  94, 107, 122, 139, 153,
+             ]
+          b: [
+              174, 159, 139, 123, 109,  95,  84,  75,  68,  61,  55,  50,  45,  41,  39,  39,  39,  39,  40,  43,  47,  52,  58,  64,  71,  80,  90, 102, 116, 131, 148, 161,
+              166, 152, 134, 118, 103,  90,  80,  71,  63,  56,  51,  45,  41,  38,  35,  34,  34,  35,  37,  39,  43,  48,  54,  60,  67,  75,  84,  96, 110, 125, 141, 154,
+              159, 145, 127, 111,  97,  85,  75,  66,  59,  52,  45,  41,  36,  32,  30,  29,  29,  30,  31,  34,  38,  43,  48,  55,  62,  70,  79,  90, 104, 119, 135, 148,
+              153, 139, 122, 106,  92,  80,  71,  62,  54,  47,  41,  36,  31,  28,  26,  25,  25,  25,  27,  30,  34,  38,  44,  50,  58,  66,  75,  86,  99, 114, 130, 143,
+              148, 134, 117, 101,  88,  76,  67,  58,  50,  43,  36,  31,  27,  24,  22,  21,  21,  21,  23,  25,  30,  34,  40,  46,  54,  62,  71,  81,  94, 109, 125, 138,
+              143, 129, 113,  97,  84,  73,  63,  55,  46,  39,  32,  27,  23,  20,  18,  17,  17,  17,  19,  22,  25,  30,  36,  42,  50,  59,  68,  78,  89, 104, 120, 133,
+              139, 125, 108,  93,  80,  69,  60,  51,  42,  35,  29,  24,  20,  17,  15,  14,  14,  14,  16,  19,  22,  26,  32,  39,  47,  55,  64,  74,  85, 100, 116, 130,
+              135, 121, 104,  89,  77,  66,  57,  48,  39,  32,  25,  21,  17,  14,  12,  11,  11,  11,  13,  16,  19,  23,  29,  36,  43,  52,  61,  71,  82,  96, 112, 126,
+              132, 117, 101,  86,  74,  64,  54,  45,  36,  29,  23,  18,  14,  12,   9,   8,   8,   9,  11,  13,  16,  20,  26,  33,  40,  49,  59,  68,  79,  93, 108, 123,
+              129, 114,  98,  83,  72,  61,  52,  42,  34,  26,  20,  16,  12,   9,   7,   6,   6,   7,   9,  11,  14,  18,  23,  30,  38,  47,  56,  66,  77,  90, 105, 120,
+              127, 112,  95,  81,  70,  59,  49,  40,  31,  24,  18,  14,  10,   7,   6,   4,   4,   5,   7,   9,  12,  16,  21,  28,  36,  44,  54,  64,  75,  87, 103, 118,
+              125, 109,  93,  79,  68,  57,  47,  38,  29,  22,  17,  12,   8,   6,   4,   3,   3,   4,   5,   7,  10,  14,  19,  26,  34,  42,  52,  62,  73,  85, 100, 116,
+              124, 108,  91,  78,  66,  56,  46,  36,  28,  21,  15,  11,   7,   4,   3,   2,   2,   3,   4,   6,   9,  13,  18,  24,  32,  41,  51,  61,  71,  84,  98, 114,
+              123, 106,  90,  76,  65,  55,  44,  35,  27,  20,  14,  10,   6,   4,   2,   1,   1,   2,   3,   5,   8,  12,  17,  23,  31,  40,  49,  60,  70,  83,  97, 113,
+              122, 105,  89,  76,  64,  54,  44,  34,  26,  19,  13,   9,   5,   3,   1,   1,   0,   1,   2,   4,   7,  11,  16,  22,  30,  39,  49,  59,  70,  82,  96, 112,
+              121, 104,  88,  75,  64,  53,  43,  33,  25,  18,  13,   8,   5,   2,   1,   0,   0,   0,   1,   4,   7,  11,  16,  22,  29,  38,  48,  58,  69,  81,  96, 112,
+              121, 104,  88,  75,  64,  53,  43,  33,  25,  18,  13,   8,   5,   2,   1,   0,   0,   0,   1,   3,   6,  10,  15,  22,  29,  38,  48,  58,  69,  81,  95, 112,
+              121, 104,  88,  75,  64,  53,  43,  33,  25,  18,  13,   8,   5,   2,   1,   0,   0,   0,   1,   3,   7,  10,  15,  22,  29,  38,  48,  58,  69,  81,  95, 112,
+              122, 105,  88,  75,  64,  53,  43,  34,  25,  19,  13,   9,   5,   3,   1,   1,   0,   1,   2,   4,   7,  11,  16,  22,  30,  38,  48,  58,  69,  81,  96, 112,
+              122, 105,  89,  76,  65,  54,  44,  34,  26,  19,  14,   9,   6,   3,   2,   1,   1,   1,   2,   4,   7,  11,  17,  23,  30,  39,  49,  59,  70,  82,  96, 113,
+              123, 107,  90,  77,  66,  55,  45,  36,  27,  20,  15,  10,   7,   4,   2,   2,   1,   2,   3,   5,   8,  12,  18,  24,  32,  40,  50,  60,  71,  83,  98, 114,
+              124, 108,  92,  78,  67,  57,  47,  37,  29,  22,  16,  11,   8,   5,   4,   2,   2,   3,   4,   6,  10,  14,  19,  25,  33,  42,  51,  61,  72,  85,  99, 115,
+              126, 110,  94,  80,  69,  58,  48,  39,  31,  23,  18,  13,   9,   7,   5,   4,   4,   4,   6,   8,  11,  15,  21,  27,  35,  44,  53,  63,  74,  86, 101, 117,
+              128, 113,  96,  82,  71,  60,  50,  41,  33,  25,  19,  15,  11,   8,   7,   5,   5,   6,   8,  10,  13,  17,  23,  29,  37,  46,  55,  65,  76,  89, 104, 119,
+              130, 116,  99,  85,  73,  62,  53,  44,  35,  28,  22,  17,  13,  11,   8,   7,   7,   8,  10,  12,  15,  20,  25,  32,  39,  48,  57,  67,  78,  91, 107, 121,
+              133, 119, 102,  88,  75,  65,  55,  46,  38,  31,  25,  20,  16,  13,  11,  10,  10,  10,  12,  15,  18,  22,  28,  34,  42,  51,  60,  70,  81,  94, 110, 124,
+              137, 123, 106,  91,  78,  68,  58,  50,  41,  34,  28,  23,  19,  16,  14,  13,  13,  13,  15,  18,  21,  25,  31,  38,  45,  54,  63,  72,  84,  98, 113, 127,
+              140, 126, 110,  95,  81,  71,  62,  53,  45,  37,  31,  26,  22,  19,  17,  16,  16,  16,  18,  21,  24,  29,  34,  41,  49,  57,  66,  75,  87, 102, 117, 131,
+              144, 131, 114,  99,  85,  74,  65,  57,  49,  41,  35,  30,  26,  22,  20,  19,  19,  20,  21,  24,  28,  32,  38,  45,  52,  60,  69,  79,  91, 106, 121, 135,
+              149, 136, 119, 103,  89,  78,  69,  60,  52,  45,  39,  34,  30,  26,  24,  23,  23,  24,  25,  28,  32,  37,  42,  49,  56,  64,  72,  83,  96, 110, 126, 139,
+              155, 142, 124, 109,  95,  83,  73,  65,  57,  50,  44,  39,  34,  31,  29,  28,  28,  28,  30,  33,  36,  41,  47,  53,  60,  68,  77,  88, 101, 116, 132, 144,
+              162, 147, 129, 114,  99,  87,  77,  68,  61,  54,  48,  42,  38,  34,  32,  31,  31,  31,  33,  36,  40,  45,  51,  57,  64,  72,  81,  93, 106, 121, 137, 150,
+             ]
+...
diff --git a/src/ipa/mali-c55/data/meson.build b/src/ipa/mali-c55/data/meson.build
index 8a5fdd36..d4d331b0 100644
--- a/src/ipa/mali-c55/data/meson.build
+++ b/src/ipa/mali-c55/data/meson.build
@@ -2,6 +2,7 @@ 
 
 conf_files = files([
     'imx415.yaml',
+    'imx708.yaml',
     'uncalibrated.yaml'
 ])