GK SDK 源码库: XMIPCLinuxV100R005C00SPC030 (kernel/tools/open_source excluded)

This commit is contained in:
lai
2026-09-06 03:52:57 +08:00
commit b1928b41c0
21813 changed files with 4413081 additions and 0 deletions
+5
View File
@@ -0,0 +1,5 @@
ifneq ($(MCU), )
include Makefile.riscv
else
include Makefile.linux
endif
+18
View File
@@ -0,0 +1,18 @@
ISP_DIR := $(shell cd ../.. && /bin/pwd)
SDK_DIR ?= $(shell cd $(ISP_DIR)/../../../.. && /bin/pwd)
include $(SDK_DIR)/build/base.mk
include $(ISP_DIR)/sensor/plat.mk
LIB_NAME := libsns_imx415
SRCS := $(wildcard *.c)
SDK_USR_CFLAGS += -I$(GMP_DIR)/include
SDK_USR_CFLAGS += -I$(GMP_DIR)/usr/include
SDK_USR_CFLAGS += -I$(ISP_DIR)/include
SDK_USR_CFLAGS += -I.
$(info SRCS=$(SRCS))
include $(SDK_DIR)/build/sdk_lib_rules.mk
+4
View File
@@ -0,0 +1,4 @@
SRCS-y += imx415.c
SRCS-y += imx415_ctrl.c
File diff suppressed because it is too large Load Diff
+60
View File
@@ -0,0 +1,60 @@
#ifndef _IMX415_COMM_H_
#define _IMX415_COMM_H_
#include "sns_comm.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Imx415 Register Address */
#define IMX415_REG_ADDR_GAIN (0x3090)
#define IMX415_REG_ADDR_VMAX_L (0x3024)
#define IMX415_REG_ADDR_VMAX_M (0x3025)
#define IMX415_REG_ADDR_VMAX_H (0x3026)
#define IMX415_REG_ADDR_SHR0_L (0x3050)
#define IMX415_REG_ADDR_SHR0_M (0x3051)
#define IMX415_REG_ADDR_SHR0_H (0x3052)
#define IMX415_REG_ADDR_SHR1_L (0x3054)
#define IMX415_REG_ADDR_SHR1_M (0x3055)
#define IMX415_REG_ADDR_SHR1_H (0x3056)
#define IMX415_REG_ADDR_RHS1_L (0x3060)
#define IMX415_REG_ADDR_RHS1_M (0x3061)
#define IMX415_REG_ADDR_RHS1_H (0x3062)
typedef enum {
IMX415_REG_GAIN = 0,
IMX415_REG_VMAX_L,
IMX415_REG_VMAX_M,
IMX415_REG_VMAX_H,
IMX415_REG_SHR0_L,
IMX415_REG_SHR0_M,
IMX415_REG_SHR0_H,
IMX415_REG_L_MAX_NUM,
IMX415_REG_SHR1_L = IMX415_REG_L_MAX_NUM,
IMX415_REG_SHR1_M,
IMX415_REG_SHR1_H,
IMX415_REG_RHS1_L,
IMX415_REG_RHS1_M,
IMX415_REG_RHS1_H,
IMX415_REG_MAX_NUM
}imx415_reg_info;
#define IMX415_LINEAR_REG_INFO_MAX_NUM IMX415_REG_L_MAX_NUM
#define IMX415_2TO1_WDR_REG_INFO_MAX_NUM IMX415_REG_MAX_NUM
/****************************************************************************
* local variables *
****************************************************************************/
#define IMX415_FULL_LINES_MAX 0xFFFFF
#define IMX415_FULL_LINES_MAX_2TO1_WDR 9000
#define IMX415_VMAX_8M_LINEAR 2250
#define IMX415_VMAX_8M_WDR 4500
#ifdef __cplusplus
}
#endif
#endif
+797
View File
@@ -0,0 +1,797 @@
#include <stdio.h>
#include <string.h>
#include "i2c_dev.h"
#include "imx415.h"
#include "imx415_ctrl.h"
static xmedia_s32 g_imx415_i2c_addr[XMEDIA_SENSOR_DEV_MAX_NUM] =
{ [0 ...(XMEDIA_SENSOR_DEV_MAX_NUM - 1)] = SENSOR_I2C_INVALID };
static xmedia_s32 g_imx415_i2c_fd[XMEDIA_SENSOR_DEV_MAX_NUM] =
{ [0 ...(XMEDIA_SENSOR_DEV_MAX_NUM - 1)] = SENSOR_I2C_INVALID };
#define IMX415_REG_MIRROR_FLIP 0x3030
xmedia_void imx415_delay_ms(xmedia_s32 ms)
{
sleep_us(ms * 1000);
}
xmedia_s32 imx415_4lane_linear_3840x2160_init(xmedia_u32 dev)
{
//All-pixel scan, CSI-2_4lane, 37.125MHz, AD:10bit Output:10bit, 891Mbps
//Master Mode, LCG Mode, 30fps, Integration Time, 33.678ms
xmedia_s32 ret = XMEDIA_SUCCESS;
ret |= imx415_write_reg(dev, 0x3000, 0x01); // STANDBY
ret |= imx415_write_reg(dev, 0x3002, 0x01); // XMSTA
ret |= imx415_write_reg(dev, 0x3008, 0x7F); // BCWAIT_TIME
ret |= imx415_write_reg(dev, 0x300A, 0x5B); // CPWAIT_TIME
ret |= imx415_write_reg(dev, 0x300B, 0x00); // CPWAIT_TIME
ret |= imx415_write_reg(dev, 0x3024, 0xCA); // VMAX
ret |= imx415_write_reg(dev, 0x3025, 0x08); // VMAX
ret |= imx415_write_reg(dev, 0x3028, 0x4C); // HMAX
ret |= imx415_write_reg(dev, 0x3029, 0x04); // SHR0[19:0] 30
ret |= imx415_write_reg(dev, 0x3030, 0x03); // mirror/filp
ret |= imx415_write_reg(dev, 0x3031, 0x00); // 0 AD 10bit, 1 AD 12bit
ret |= imx415_write_reg(dev, 0x3032, 0x00); // 0 Output:10bit, 1 Output:12bit
ret |= imx415_write_reg(dev, 0x3033, 0x05); // SYS_NODE
ret |= imx415_write_reg(dev, 0x3034, 0x05);
ret |= imx415_write_reg(dev, 0x3050, 0x08);
ret |= imx415_write_reg(dev, 0x30C1, 0x00);
ret |= imx415_write_reg(dev, 0x3116, 0x24);
ret |= imx415_write_reg(dev, 0x3118, 0xC0);
ret |= imx415_write_reg(dev, 0x311A, 0xE0);
ret |= imx415_write_reg(dev, 0x311E, 0x24);
ret |= imx415_write_reg(dev, 0x32D4, 0x21);
ret |= imx415_write_reg(dev, 0x32EC, 0xA1);
ret |= imx415_write_reg(dev, 0x344C, 0x2B);
ret |= imx415_write_reg(dev, 0x344D, 0x01);
ret |= imx415_write_reg(dev, 0x344E, 0xED);
ret |= imx415_write_reg(dev, 0x344F, 0x01);
ret |= imx415_write_reg(dev, 0x3450, 0xF6);
ret |= imx415_write_reg(dev, 0x3451, 0x02);
ret |= imx415_write_reg(dev, 0x3452, 0x7F);
ret |= imx415_write_reg(dev, 0x3453, 0x03);
ret |= imx415_write_reg(dev, 0x358A, 0x04);
ret |= imx415_write_reg(dev, 0x35A1, 0x02);
ret |= imx415_write_reg(dev, 0x35EC, 0x27);
ret |= imx415_write_reg(dev, 0x35EE, 0x8D);
ret |= imx415_write_reg(dev, 0x35F0, 0x8D);
ret |= imx415_write_reg(dev, 0x35F2, 0x29);
ret |= imx415_write_reg(dev, 0x36BC, 0x0C);
ret |= imx415_write_reg(dev, 0x36CC, 0x53);
ret |= imx415_write_reg(dev, 0x36CD, 0x00);
ret |= imx415_write_reg(dev, 0x36CE, 0x3C);
ret |= imx415_write_reg(dev, 0x36D0, 0x8C);
ret |= imx415_write_reg(dev, 0x36D1, 0x00);
ret |= imx415_write_reg(dev, 0x36D2, 0x71);
ret |= imx415_write_reg(dev, 0x36D4, 0x3C);
ret |= imx415_write_reg(dev, 0x36D6, 0x53);
ret |= imx415_write_reg(dev, 0x36D7, 0x00);
ret |= imx415_write_reg(dev, 0x36D8, 0x71);
ret |= imx415_write_reg(dev, 0x36DA, 0x8C);
ret |= imx415_write_reg(dev, 0x36DB, 0x00);
ret |= imx415_write_reg(dev, 0x3701, 0x00);
ret |= imx415_write_reg(dev, 0x3720, 0x00);
ret |= imx415_write_reg(dev, 0x3724, 0x02);
ret |= imx415_write_reg(dev, 0x3726, 0x02);
ret |= imx415_write_reg(dev, 0x3732, 0x02);
ret |= imx415_write_reg(dev, 0x3734, 0x03);
ret |= imx415_write_reg(dev, 0x3736, 0x03);
ret |= imx415_write_reg(dev, 0x3742, 0x03);
ret |= imx415_write_reg(dev, 0x3862, 0xE0);
ret |= imx415_write_reg(dev, 0x38CC, 0x30);
ret |= imx415_write_reg(dev, 0x38CD, 0x2F);
ret |= imx415_write_reg(dev, 0x395C, 0x0C);
ret |= imx415_write_reg(dev, 0x39A4, 0x07);
ret |= imx415_write_reg(dev, 0x39A8, 0x32);
ret |= imx415_write_reg(dev, 0x39AA, 0x32);
ret |= imx415_write_reg(dev, 0x39AC, 0x32);
ret |= imx415_write_reg(dev, 0x39AE, 0x32);
ret |= imx415_write_reg(dev, 0x39B0, 0x32);
ret |= imx415_write_reg(dev, 0x39B2, 0x2F);
ret |= imx415_write_reg(dev, 0x39B4, 0x2D);
ret |= imx415_write_reg(dev, 0x39B6, 0x28);
ret |= imx415_write_reg(dev, 0x39B8, 0x30);
ret |= imx415_write_reg(dev, 0x39BA, 0x30);
ret |= imx415_write_reg(dev, 0x39BC, 0x30);
ret |= imx415_write_reg(dev, 0x39BE, 0x30);
ret |= imx415_write_reg(dev, 0x39C0, 0x30);
ret |= imx415_write_reg(dev, 0x39C2, 0x2E);
ret |= imx415_write_reg(dev, 0x39C4, 0x2B);
ret |= imx415_write_reg(dev, 0x39C6, 0x25);
ret |= imx415_write_reg(dev, 0x3A42, 0xD1);
ret |= imx415_write_reg(dev, 0x3A4C, 0x77);
ret |= imx415_write_reg(dev, 0x3AE0, 0x02);
ret |= imx415_write_reg(dev, 0x3AEC, 0x0C);
ret |= imx415_write_reg(dev, 0x3B00, 0x2E);
ret |= imx415_write_reg(dev, 0x3B06, 0x29);
ret |= imx415_write_reg(dev, 0x3B98, 0x25);
ret |= imx415_write_reg(dev, 0x3B99, 0x21);
ret |= imx415_write_reg(dev, 0x3B9B, 0x13);
ret |= imx415_write_reg(dev, 0x3B9C, 0x13);
ret |= imx415_write_reg(dev, 0x3B9D, 0x13);
ret |= imx415_write_reg(dev, 0x3B9E, 0x13);
ret |= imx415_write_reg(dev, 0x3BA1, 0x00);
ret |= imx415_write_reg(dev, 0x3BA2, 0x06);
ret |= imx415_write_reg(dev, 0x3BA3, 0x0B);
ret |= imx415_write_reg(dev, 0x3BA4, 0x10);
ret |= imx415_write_reg(dev, 0x3BA5, 0x14);
ret |= imx415_write_reg(dev, 0x3BA6, 0x18);
ret |= imx415_write_reg(dev, 0x3BA7, 0x1A);
ret |= imx415_write_reg(dev, 0x3BA8, 0x1A);
ret |= imx415_write_reg(dev, 0x3BA9, 0x1A);
ret |= imx415_write_reg(dev, 0x3BAC, 0xED);
ret |= imx415_write_reg(dev, 0x3BAD, 0x01);
ret |= imx415_write_reg(dev, 0x3BAE, 0xF6);
ret |= imx415_write_reg(dev, 0x3BAF, 0x02);
ret |= imx415_write_reg(dev, 0x3BB0, 0xA2);
ret |= imx415_write_reg(dev, 0x3BB1, 0x03);
ret |= imx415_write_reg(dev, 0x3BB2, 0xE0);
ret |= imx415_write_reg(dev, 0x3BB3, 0x03);
ret |= imx415_write_reg(dev, 0x3BB4, 0xE0);
ret |= imx415_write_reg(dev, 0x3BB5, 0x03);
ret |= imx415_write_reg(dev, 0x3BB6, 0xE0);
ret |= imx415_write_reg(dev, 0x3BB7, 0x03);
ret |= imx415_write_reg(dev, 0x3BB8, 0xE0);
ret |= imx415_write_reg(dev, 0x3BBA, 0xE0);
ret |= imx415_write_reg(dev, 0x3BBC, 0xDA);
ret |= imx415_write_reg(dev, 0x3BBE, 0x88);
ret |= imx415_write_reg(dev, 0x3BC0, 0x44);
ret |= imx415_write_reg(dev, 0x3BC2, 0x7B);
ret |= imx415_write_reg(dev, 0x3BC4, 0xA2);
ret |= imx415_write_reg(dev, 0x3BC8, 0xBD);
ret |= imx415_write_reg(dev, 0x3BCA, 0xBD);
ret |= imx415_write_reg(dev, 0x4004, 0x48);
ret |= imx415_write_reg(dev, 0x4005, 0x09);
ret |= imx415_write_reg(dev, 0x400C, 0x00);
ret |= imx415_write_reg(dev, 0x4018, 0x6F);
ret |= imx415_write_reg(dev, 0x401A, 0x2F);
ret |= imx415_write_reg(dev, 0x401C, 0x2F);
ret |= imx415_write_reg(dev, 0x401E, 0xBF);
ret |= imx415_write_reg(dev, 0x401F, 0x00);
ret |= imx415_write_reg(dev, 0x4020, 0x2F);
ret |= imx415_write_reg(dev, 0x4022, 0x57);
ret |= imx415_write_reg(dev, 0x4024, 0x2F);
ret |= imx415_write_reg(dev, 0x4026, 0x4F);
ret |= imx415_write_reg(dev, 0x4028, 0x27);
ret |= imx415_write_reg(dev, 0x4074, 0x01);
ret |= imx415_write_reg(dev, 0x3000, 0x00);
imx415_delay_ms(20);
ret |= imx415_write_reg(dev, 0x3002, 0x00);
if (ret != XMEDIA_SUCCESS) {
SENSOR_TRACE(MODULE_DBG_ERR, "imx415_write_reg failed.\n");
return XMEDIA_FAILURE;
}
SENSOR_PRINT("=================================================================================\n");
SENSOR_PRINT("=== IMX415_37.125MInput_MIPI_4lane_10bit_3840x2160_30fps_LINEAR init success!====\n");
SENSOR_PRINT("=================================================================================\n");
return XMEDIA_SUCCESS;
}
xmedia_s32 imx415_4lane_wdr_3840x2160_init(xmedia_u32 dev)
{
//All-pixel scan, CSI-2_4lane, 37.125MHz, AD:10bit Output:10bit, 1440Mbps
//Master Mode, LCG Mode, DOL HDR 2frame VC, 30fps, Integration Time LEF:16ms SEF:1.007ms
xmedia_s32 ret = XMEDIA_SUCCESS;
ret |= imx415_write_reg(dev, 0x3000, 0x01);
ret |= imx415_write_reg(dev, 0x3001, 0x00);
ret |= imx415_write_reg(dev, 0x3002, 0x01);
ret |= imx415_write_reg(dev, 0x3014, 0x01);
ret |= imx415_write_reg(dev, 0x3015, 0x03);
ret |= imx415_write_reg(dev, 0x3018, 0x00);
ret |= imx415_write_reg(dev, 0x301A, 0x01);
ret |= imx415_write_reg(dev, 0x301B, 0x00);
ret |= imx415_write_reg(dev, 0x301C, 0x01);
ret |= imx415_write_reg(dev, 0x301E, 0x01);
ret |= imx415_write_reg(dev, 0x3020, 0x00);
ret |= imx415_write_reg(dev, 0x3021, 0x00);
ret |= imx415_write_reg(dev, 0x3022, 0x00);
ret |= imx415_write_reg(dev, 0x3023, 0x00);
ret |= imx415_write_reg(dev, 0x3028, 0xca);
ret |= imx415_write_reg(dev, 0x3029, 0x08);
ret |= imx415_write_reg(dev, 0x302A, 0x00);
ret |= imx415_write_reg(dev, 0x302C, 0x26);
ret |= imx415_write_reg(dev, 0x302D, 0x02);
ret |= imx415_write_reg(dev, 0x3030, 0x00);
ret |= imx415_write_reg(dev, 0x3031, 0x00);
ret |= imx415_write_reg(dev, 0x3032, 0x00);
ret |= imx415_write_reg(dev, 0x303C, 0x00);
ret |= imx415_write_reg(dev, 0x303D, 0x00);
ret |= imx415_write_reg(dev, 0x303E, 0x10);
ret |= imx415_write_reg(dev, 0x303F, 0x0F);
ret |= imx415_write_reg(dev, 0x3040, 0x03);
ret |= imx415_write_reg(dev, 0x3042, 0x00);
ret |= imx415_write_reg(dev, 0x3043, 0x00);
ret |= imx415_write_reg(dev, 0x3044, 0x00);
ret |= imx415_write_reg(dev, 0x3045, 0x00);
ret |= imx415_write_reg(dev, 0x3046, 0x84);
ret |= imx415_write_reg(dev, 0x3047, 0x08);
ret |= imx415_write_reg(dev, 0x3050, 0x24);
ret |= imx415_write_reg(dev, 0x3051, 0x09);
ret |= imx415_write_reg(dev, 0x3052, 0x00);
ret |= imx415_write_reg(dev, 0x3054, 0x05);
ret |= imx415_write_reg(dev, 0x3055, 0x00);
ret |= imx415_write_reg(dev, 0x3056, 0x00);
ret |= imx415_write_reg(dev, 0x3058, 0x8A);
ret |= imx415_write_reg(dev, 0x3059, 0x01);
ret |= imx415_write_reg(dev, 0x305A, 0x00);
ret |= imx415_write_reg(dev, 0x3060, 0x8D);
ret |= imx415_write_reg(dev, 0x3061, 0x00);
ret |= imx415_write_reg(dev, 0x3062, 0x00);
ret |= imx415_write_reg(dev, 0x3064, 0xC4);
ret |= imx415_write_reg(dev, 0x3065, 0x0C);
ret |= imx415_write_reg(dev, 0x3066, 0x00);
ret |= imx415_write_reg(dev, 0x3069, 0x00);
ret |= imx415_write_reg(dev, 0x306B, 0x00);
ret |= imx415_write_reg(dev, 0x3070, 0x00);
ret |= imx415_write_reg(dev, 0x3071, 0x00);
ret |= imx415_write_reg(dev, 0x3072, 0x00);
ret |= imx415_write_reg(dev, 0x3073, 0x00);
ret |= imx415_write_reg(dev, 0x3074, 0x00);
ret |= imx415_write_reg(dev, 0x3075, 0x00);
ret |= imx415_write_reg(dev, 0x3081, 0x00);
ret |= imx415_write_reg(dev, 0x308C, 0x00);
ret |= imx415_write_reg(dev, 0x308D, 0x01);
ret |= imx415_write_reg(dev, 0x3094, 0x00);
ret |= imx415_write_reg(dev, 0x3095, 0x00);
ret |= imx415_write_reg(dev, 0x309C, 0x00);
ret |= imx415_write_reg(dev, 0x309D, 0x00);
ret |= imx415_write_reg(dev, 0x30A4, 0xAA);
ret |= imx415_write_reg(dev, 0x30A6, 0x00);
ret |= imx415_write_reg(dev, 0x30CC, 0x00);
ret |= imx415_write_reg(dev, 0x30CD, 0x00);
ret |= imx415_write_reg(dev, 0x30DC, 0x32);
ret |= imx415_write_reg(dev, 0x30DD, 0x40);
ret |= imx415_write_reg(dev, 0x3400, 0x01);
ret |= imx415_write_reg(dev, 0x3460, 0x22);
ret |= imx415_write_reg(dev, 0x355A, 0x64);
ret |= imx415_write_reg(dev, 0x3A02, 0x7A);
ret |= imx415_write_reg(dev, 0x3A10, 0xEC);
ret |= imx415_write_reg(dev, 0x3A12, 0x71);
ret |= imx415_write_reg(dev, 0x3A14, 0xDE);
ret |= imx415_write_reg(dev, 0x3A20, 0x2B);
ret |= imx415_write_reg(dev, 0x3A24, 0x22);
ret |= imx415_write_reg(dev, 0x3A25, 0x25);
ret |= imx415_write_reg(dev, 0x3A26, 0x2A);
ret |= imx415_write_reg(dev, 0x3A27, 0x2C);
ret |= imx415_write_reg(dev, 0x3A28, 0x39);
ret |= imx415_write_reg(dev, 0x3A29, 0x38);
ret |= imx415_write_reg(dev, 0x3A30, 0x04);
ret |= imx415_write_reg(dev, 0x3A31, 0x04);
ret |= imx415_write_reg(dev, 0x3A32, 0x03);
ret |= imx415_write_reg(dev, 0x3A33, 0x03);
ret |= imx415_write_reg(dev, 0x3A34, 0x09);
ret |= imx415_write_reg(dev, 0x3A35, 0x06);
ret |= imx415_write_reg(dev, 0x3A38, 0xCD);
ret |= imx415_write_reg(dev, 0x3A3A, 0x4C);
ret |= imx415_write_reg(dev, 0x3A3C, 0xB9);
ret |= imx415_write_reg(dev, 0x3A3E, 0x30);
ret |= imx415_write_reg(dev, 0x3A40, 0x2C);
ret |= imx415_write_reg(dev, 0x3A42, 0x39);
ret |= imx415_write_reg(dev, 0x3A4E, 0x00);
ret |= imx415_write_reg(dev, 0x3A52, 0x00);
ret |= imx415_write_reg(dev, 0x3A56, 0x00);
ret |= imx415_write_reg(dev, 0x3A5A, 0x00);
ret |= imx415_write_reg(dev, 0x3A5E, 0x00);
ret |= imx415_write_reg(dev, 0x3A62, 0x00);
ret |= imx415_write_reg(dev, 0x3A64, 0x00);
ret |= imx415_write_reg(dev, 0x3A6E, 0xA0);
ret |= imx415_write_reg(dev, 0x3A70, 0x50);
ret |= imx415_write_reg(dev, 0x3A8C, 0x04);
ret |= imx415_write_reg(dev, 0x3A8D, 0x03);
ret |= imx415_write_reg(dev, 0x3A8E, 0x09);
ret |= imx415_write_reg(dev, 0x3A90, 0x38);
ret |= imx415_write_reg(dev, 0x3A91, 0x42);
ret |= imx415_write_reg(dev, 0x3A92, 0x3C);
ret |= imx415_write_reg(dev, 0x3B0E, 0xF3);
ret |= imx415_write_reg(dev, 0x3B12, 0xE5);
ret |= imx415_write_reg(dev, 0x3B27, 0xC0);
ret |= imx415_write_reg(dev, 0x3B2E, 0xEF);
ret |= imx415_write_reg(dev, 0x3B30, 0x6A);
ret |= imx415_write_reg(dev, 0x3B32, 0xF6);
ret |= imx415_write_reg(dev, 0x3B36, 0xE1);
ret |= imx415_write_reg(dev, 0x3B3A, 0xE8);
ret |= imx415_write_reg(dev, 0x3B5A, 0x17);
ret |= imx415_write_reg(dev, 0x3B5E, 0xEF);
ret |= imx415_write_reg(dev, 0x3B60, 0x6A);
ret |= imx415_write_reg(dev, 0x3B62, 0xF6);
ret |= imx415_write_reg(dev, 0x3B66, 0xE1);
ret |= imx415_write_reg(dev, 0x3B6A, 0xE8);
ret |= imx415_write_reg(dev, 0x3B88, 0xEC);
ret |= imx415_write_reg(dev, 0x3B8A, 0xED);
ret |= imx415_write_reg(dev, 0x3B94, 0x71);
ret |= imx415_write_reg(dev, 0x3B96, 0x72);
ret |= imx415_write_reg(dev, 0x3B98, 0xDE);
ret |= imx415_write_reg(dev, 0x3B9A, 0xDF);
ret |= imx415_write_reg(dev, 0x3C0F, 0x06);
ret |= imx415_write_reg(dev, 0x3C10, 0x06);
ret |= imx415_write_reg(dev, 0x3C11, 0x06);
ret |= imx415_write_reg(dev, 0x3C12, 0x06);
ret |= imx415_write_reg(dev, 0x3C13, 0x06);
ret |= imx415_write_reg(dev, 0x3C18, 0x20);
ret |= imx415_write_reg(dev, 0x3C37, 0x10);
ret |= imx415_write_reg(dev, 0x3C3A, 0x7A);
ret |= imx415_write_reg(dev, 0x3C40, 0xF4);
ret |= imx415_write_reg(dev, 0x3C48, 0xE6);
ret |= imx415_write_reg(dev, 0x3C54, 0xCE);
ret |= imx415_write_reg(dev, 0x3C56, 0xD0);
ret |= imx415_write_reg(dev, 0x3C6C, 0x53);
ret |= imx415_write_reg(dev, 0x3C6E, 0x55);
ret |= imx415_write_reg(dev, 0x3C70, 0xC0);
ret |= imx415_write_reg(dev, 0x3C72, 0xC2);
ret |= imx415_write_reg(dev, 0x3C7E, 0xCE);
ret |= imx415_write_reg(dev, 0x3C8C, 0xCF);
ret |= imx415_write_reg(dev, 0x3C8E, 0xEB);
ret |= imx415_write_reg(dev, 0x3C98, 0x54);
ret |= imx415_write_reg(dev, 0x3C9A, 0x70);
ret |= imx415_write_reg(dev, 0x3C9C, 0xC1);
ret |= imx415_write_reg(dev, 0x3C9E, 0xDD);
ret |= imx415_write_reg(dev, 0x3CB0, 0x7A);
ret |= imx415_write_reg(dev, 0x3CB2, 0xBA);
ret |= imx415_write_reg(dev, 0x3CC8, 0xBC);
ret |= imx415_write_reg(dev, 0x3CCA, 0x7C);
ret |= imx415_write_reg(dev, 0x3CD4, 0xEA);
ret |= imx415_write_reg(dev, 0x3CD5, 0x01);
ret |= imx415_write_reg(dev, 0x3CD6, 0x4A);
ret |= imx415_write_reg(dev, 0x3CD8, 0x00);
ret |= imx415_write_reg(dev, 0x3CD9, 0x00);
ret |= imx415_write_reg(dev, 0x3CDA, 0xFF);
ret |= imx415_write_reg(dev, 0x3CDB, 0x03);
ret |= imx415_write_reg(dev, 0x3CDC, 0x00);
ret |= imx415_write_reg(dev, 0x3CDD, 0x00);
ret |= imx415_write_reg(dev, 0x3CDE, 0xFF);
ret |= imx415_write_reg(dev, 0x3CDF, 0x03);
ret |= imx415_write_reg(dev, 0x3CE4, 0x4C);
ret |= imx415_write_reg(dev, 0x3CE6, 0xEC);
ret |= imx415_write_reg(dev, 0x3CE7, 0x01);
ret |= imx415_write_reg(dev, 0x3CE8, 0xFF);
ret |= imx415_write_reg(dev, 0x3CE9, 0x03);
ret |= imx415_write_reg(dev, 0x3CEA, 0x00);
ret |= imx415_write_reg(dev, 0x3CEB, 0x00);
ret |= imx415_write_reg(dev, 0x3CEC, 0xFF);
ret |= imx415_write_reg(dev, 0x3CED, 0x03);
ret |= imx415_write_reg(dev, 0x3CEE, 0x00);
ret |= imx415_write_reg(dev, 0x3CEF, 0x00);
ret |= imx415_write_reg(dev, 0x3CF2, 0xFF);
ret |= imx415_write_reg(dev, 0x3CF3, 0x03);
ret |= imx415_write_reg(dev, 0x3CF4, 0x00);
ret |= imx415_write_reg(dev, 0x3E28, 0x82);
ret |= imx415_write_reg(dev, 0x3E2A, 0x80);
ret |= imx415_write_reg(dev, 0x3E30, 0x85);
ret |= imx415_write_reg(dev, 0x3E32, 0x7D);
ret |= imx415_write_reg(dev, 0x3E5C, 0xCE);
ret |= imx415_write_reg(dev, 0x3E5E, 0xD3);
ret |= imx415_write_reg(dev, 0x3E70, 0x53);
ret |= imx415_write_reg(dev, 0x3E72, 0x58);
ret |= imx415_write_reg(dev, 0x3E74, 0xC0);
ret |= imx415_write_reg(dev, 0x3E76, 0xC5);
ret |= imx415_write_reg(dev, 0x3E78, 0xC0);
ret |= imx415_write_reg(dev, 0x3E79, 0x01);
ret |= imx415_write_reg(dev, 0x3E7A, 0xD4);
ret |= imx415_write_reg(dev, 0x3E7B, 0x01);
ret |= imx415_write_reg(dev, 0x3EB4, 0x0B);
ret |= imx415_write_reg(dev, 0x3EB5, 0x02);
ret |= imx415_write_reg(dev, 0x3EB6, 0x4D);
ret |= imx415_write_reg(dev, 0x3EB7, 0x42);
ret |= imx415_write_reg(dev, 0x3EEC, 0xF3);
ret |= imx415_write_reg(dev, 0x3EEE, 0xE7);
ret |= imx415_write_reg(dev, 0x3F01, 0x01);
ret |= imx415_write_reg(dev, 0x3F24, 0x10);
ret |= imx415_write_reg(dev, 0x3F28, 0x2D);
ret |= imx415_write_reg(dev, 0x3F2A, 0x2D);
ret |= imx415_write_reg(dev, 0x3F2C, 0x2D);
ret |= imx415_write_reg(dev, 0x3F2E, 0x2D);
ret |= imx415_write_reg(dev, 0x3F30, 0x23);
ret |= imx415_write_reg(dev, 0x3F38, 0x2D);
ret |= imx415_write_reg(dev, 0x3F3A, 0x2D);
ret |= imx415_write_reg(dev, 0x3F3C, 0x2D);
ret |= imx415_write_reg(dev, 0x3F3E, 0x28);
ret |= imx415_write_reg(dev, 0x3F40, 0x1E);
ret |= imx415_write_reg(dev, 0x3F48, 0x2D);
ret |= imx415_write_reg(dev, 0x3F4A, 0x2D);
ret |= imx415_write_reg(dev, 0x3F4C, 0x00);
ret |= imx415_write_reg(dev, 0x4004, 0xE4);
ret |= imx415_write_reg(dev, 0x4006, 0xFF);
ret |= imx415_write_reg(dev, 0x4018, 0x69);
ret |= imx415_write_reg(dev, 0x401A, 0x84);
ret |= imx415_write_reg(dev, 0x401C, 0xD6);
ret |= imx415_write_reg(dev, 0x401E, 0xF1);
ret |= imx415_write_reg(dev, 0x4038, 0xDE);
ret |= imx415_write_reg(dev, 0x403A, 0x00);
ret |= imx415_write_reg(dev, 0x403B, 0x01);
ret |= imx415_write_reg(dev, 0x404C, 0x63);
ret |= imx415_write_reg(dev, 0x404E, 0x85);
ret |= imx415_write_reg(dev, 0x4050, 0xD0);
ret |= imx415_write_reg(dev, 0x4052, 0xF2);
ret |= imx415_write_reg(dev, 0x4108, 0xDD);
ret |= imx415_write_reg(dev, 0x410A, 0xF7);
ret |= imx415_write_reg(dev, 0x411C, 0x62);
ret |= imx415_write_reg(dev, 0x411E, 0x7C);
ret |= imx415_write_reg(dev, 0x4120, 0xCF);
ret |= imx415_write_reg(dev, 0x4122, 0xE9);
ret |= imx415_write_reg(dev, 0x4138, 0xE6);
ret |= imx415_write_reg(dev, 0x413A, 0xF1);
ret |= imx415_write_reg(dev, 0x414C, 0x6B);
ret |= imx415_write_reg(dev, 0x414E, 0x76);
ret |= imx415_write_reg(dev, 0x4150, 0xD8);
ret |= imx415_write_reg(dev, 0x4152, 0xE3);
ret |= imx415_write_reg(dev, 0x417E, 0x03);
ret |= imx415_write_reg(dev, 0x417F, 0x01);
ret |= imx415_write_reg(dev, 0x4186, 0xE0);
ret |= imx415_write_reg(dev, 0x4190, 0xF3);
ret |= imx415_write_reg(dev, 0x4192, 0xF7);
ret |= imx415_write_reg(dev, 0x419C, 0x78);
ret |= imx415_write_reg(dev, 0x419E, 0x7C);
ret |= imx415_write_reg(dev, 0x41A0, 0xE5);
ret |= imx415_write_reg(dev, 0x41A2, 0xE9);
ret |= imx415_write_reg(dev, 0x41C8, 0xE2);
ret |= imx415_write_reg(dev, 0x41CA, 0xFD);
ret |= imx415_write_reg(dev, 0x41DC, 0x67);
ret |= imx415_write_reg(dev, 0x41DE, 0x82);
ret |= imx415_write_reg(dev, 0x41E0, 0xD4);
ret |= imx415_write_reg(dev, 0x41E2, 0xEF);
ret |= imx415_write_reg(dev, 0x4200, 0xDE);
ret |= imx415_write_reg(dev, 0x4202, 0xDA);
ret |= imx415_write_reg(dev, 0x4218, 0x63);
ret |= imx415_write_reg(dev, 0x421A, 0x5F);
ret |= imx415_write_reg(dev, 0x421C, 0xD0);
ret |= imx415_write_reg(dev, 0x421E, 0xCC);
ret |= imx415_write_reg(dev, 0x425A, 0x82);
ret |= imx415_write_reg(dev, 0x425C, 0xEF);
ret |= imx415_write_reg(dev, 0x4348, 0xFE);
ret |= imx415_write_reg(dev, 0x4349, 0x06);
ret |= imx415_write_reg(dev, 0x4352, 0xCE);
ret |= imx415_write_reg(dev, 0x4420, 0x0B);
ret |= imx415_write_reg(dev, 0x4421, 0x02);
ret |= imx415_write_reg(dev, 0x4422, 0x4D);
ret |= imx415_write_reg(dev, 0x4423, 0x0A);
ret |= imx415_write_reg(dev, 0x4426, 0xF5);
ret |= imx415_write_reg(dev, 0x442A, 0xE7);
ret |= imx415_write_reg(dev, 0x4432, 0xF5);
ret |= imx415_write_reg(dev, 0x4436, 0xE7);
ret |= imx415_write_reg(dev, 0x4466, 0xB4);
ret |= imx415_write_reg(dev, 0x446E, 0x32);
ret |= imx415_write_reg(dev, 0x449F, 0x1C);
ret |= imx415_write_reg(dev, 0x44A4, 0x2C);
ret |= imx415_write_reg(dev, 0x44A6, 0x2C);
ret |= imx415_write_reg(dev, 0x44A8, 0x2C);
ret |= imx415_write_reg(dev, 0x44AA, 0x2C);
ret |= imx415_write_reg(dev, 0x44B4, 0x2C);
ret |= imx415_write_reg(dev, 0x44B6, 0x2C);
ret |= imx415_write_reg(dev, 0x44B8, 0x2C);
ret |= imx415_write_reg(dev, 0x44BA, 0x2C);
ret |= imx415_write_reg(dev, 0x44C4, 0x2C);
ret |= imx415_write_reg(dev, 0x44C6, 0x2C);
ret |= imx415_write_reg(dev, 0x44C8, 0x2C);
ret |= imx415_write_reg(dev, 0x4506, 0xF3);
ret |= imx415_write_reg(dev, 0x450E, 0xE5);
ret |= imx415_write_reg(dev, 0x4516, 0xF3);
ret |= imx415_write_reg(dev, 0x4522, 0xE5);
ret |= imx415_write_reg(dev, 0x4524, 0xF3);
ret |= imx415_write_reg(dev, 0x452C, 0xE5);
ret |= imx415_write_reg(dev, 0x453C, 0x22);
ret |= imx415_write_reg(dev, 0x453D, 0x1B);
ret |= imx415_write_reg(dev, 0x453E, 0x1B);
ret |= imx415_write_reg(dev, 0x453F, 0x15);
ret |= imx415_write_reg(dev, 0x4540, 0x15);
ret |= imx415_write_reg(dev, 0x4541, 0x15);
ret |= imx415_write_reg(dev, 0x4542, 0x15);
ret |= imx415_write_reg(dev, 0x4543, 0x15);
ret |= imx415_write_reg(dev, 0x4544, 0x15);
ret |= imx415_write_reg(dev, 0x4548, 0x00);
ret |= imx415_write_reg(dev, 0x4549, 0x01);
ret |= imx415_write_reg(dev, 0x454A, 0x01);
ret |= imx415_write_reg(dev, 0x454B, 0x06);
ret |= imx415_write_reg(dev, 0x454C, 0x06);
ret |= imx415_write_reg(dev, 0x454D, 0x06);
ret |= imx415_write_reg(dev, 0x454E, 0x06);
ret |= imx415_write_reg(dev, 0x454F, 0x06);
ret |= imx415_write_reg(dev, 0x4550, 0x06);
ret |= imx415_write_reg(dev, 0x4554, 0x55);
ret |= imx415_write_reg(dev, 0x4555, 0x02);
ret |= imx415_write_reg(dev, 0x4556, 0x42);
ret |= imx415_write_reg(dev, 0x4557, 0x05);
ret |= imx415_write_reg(dev, 0x4558, 0xFD);
ret |= imx415_write_reg(dev, 0x4559, 0x05);
ret |= imx415_write_reg(dev, 0x455A, 0x94);
ret |= imx415_write_reg(dev, 0x455B, 0x06);
ret |= imx415_write_reg(dev, 0x455D, 0x06);
ret |= imx415_write_reg(dev, 0x455E, 0x49);
ret |= imx415_write_reg(dev, 0x455F, 0x07);
ret |= imx415_write_reg(dev, 0x4560, 0x7F);
ret |= imx415_write_reg(dev, 0x4561, 0x07);
ret |= imx415_write_reg(dev, 0x4562, 0xA5);
ret |= imx415_write_reg(dev, 0x4564, 0x55);
ret |= imx415_write_reg(dev, 0x4565, 0x02);
ret |= imx415_write_reg(dev, 0x4566, 0x42);
ret |= imx415_write_reg(dev, 0x4567, 0x05);
ret |= imx415_write_reg(dev, 0x4568, 0xFD);
ret |= imx415_write_reg(dev, 0x4569, 0x05);
ret |= imx415_write_reg(dev, 0x456A, 0x94);
ret |= imx415_write_reg(dev, 0x456B, 0x06);
ret |= imx415_write_reg(dev, 0x456D, 0x06);
ret |= imx415_write_reg(dev, 0x456E, 0x49);
ret |= imx415_write_reg(dev, 0x456F, 0x07);
ret |= imx415_write_reg(dev, 0x4572, 0xA5);
ret |= imx415_write_reg(dev, 0x460C, 0x7D);
ret |= imx415_write_reg(dev, 0x460E, 0xB1);
ret |= imx415_write_reg(dev, 0x4614, 0xA8);
ret |= imx415_write_reg(dev, 0x4616, 0xB2);
ret |= imx415_write_reg(dev, 0x461C, 0x7E);
ret |= imx415_write_reg(dev, 0x461E, 0xA7);
ret |= imx415_write_reg(dev, 0x4624, 0xA8);
ret |= imx415_write_reg(dev, 0x4626, 0xB2);
ret |= imx415_write_reg(dev, 0x462C, 0x7E);
ret |= imx415_write_reg(dev, 0x462E, 0x8A);
ret |= imx415_write_reg(dev, 0x4630, 0x94);
ret |= imx415_write_reg(dev, 0x4632, 0xA7);
ret |= imx415_write_reg(dev, 0x4634, 0xFB);
ret |= imx415_write_reg(dev, 0x4636, 0x2F);
ret |= imx415_write_reg(dev, 0x4638, 0x81);
ret |= imx415_write_reg(dev, 0x4639, 0x01);
ret |= imx415_write_reg(dev, 0x463A, 0xB5);
ret |= imx415_write_reg(dev, 0x463B, 0x01);
ret |= imx415_write_reg(dev, 0x463C, 0x26);
ret |= imx415_write_reg(dev, 0x463E, 0x30);
ret |= imx415_write_reg(dev, 0x4640, 0xAC);
ret |= imx415_write_reg(dev, 0x4641, 0x01);
ret |= imx415_write_reg(dev, 0x4642, 0xB6);
ret |= imx415_write_reg(dev, 0x4643, 0x01);
ret |= imx415_write_reg(dev, 0x4644, 0xFC);
ret |= imx415_write_reg(dev, 0x4646, 0x25);
ret |= imx415_write_reg(dev, 0x4648, 0x82);
ret |= imx415_write_reg(dev, 0x4649, 0x01);
ret |= imx415_write_reg(dev, 0x464A, 0xAB);
ret |= imx415_write_reg(dev, 0x464B, 0x01);
ret |= imx415_write_reg(dev, 0x464C, 0x26);
ret |= imx415_write_reg(dev, 0x464E, 0x30);
ret |= imx415_write_reg(dev, 0x4654, 0xFC);
ret |= imx415_write_reg(dev, 0x4656, 0x08);
ret |= imx415_write_reg(dev, 0x4658, 0x12);
ret |= imx415_write_reg(dev, 0x465A, 0x25);
ret |= imx415_write_reg(dev, 0x4662, 0xFC);
ret |= imx415_write_reg(dev, 0x46A2, 0xFB);
ret |= imx415_write_reg(dev, 0x46D6, 0xF3);
ret |= imx415_write_reg(dev, 0x46E6, 0x00);
ret |= imx415_write_reg(dev, 0x46E8, 0xFF);
ret |= imx415_write_reg(dev, 0x46E9, 0x03);
ret |= imx415_write_reg(dev, 0x46EC, 0x7A);
ret |= imx415_write_reg(dev, 0x46EE, 0xE5);
ret |= imx415_write_reg(dev, 0x46F4, 0xEE);
ret |= imx415_write_reg(dev, 0x46F6, 0xF2);
ret |= imx415_write_reg(dev, 0x470C, 0xFF);
ret |= imx415_write_reg(dev, 0x470D, 0x03);
ret |= imx415_write_reg(dev, 0x470E, 0x00);
ret |= imx415_write_reg(dev, 0x4714, 0xE0);
ret |= imx415_write_reg(dev, 0x4716, 0xE4);
ret |= imx415_write_reg(dev, 0x471E, 0xED);
ret |= imx415_write_reg(dev, 0x472E, 0x00);
ret |= imx415_write_reg(dev, 0x4730, 0xFF);
ret |= imx415_write_reg(dev, 0x4731, 0x03);
ret |= imx415_write_reg(dev, 0x4734, 0x7B);
ret |= imx415_write_reg(dev, 0x4736, 0xDF);
ret |= imx415_write_reg(dev, 0x4754, 0x7D);
ret |= imx415_write_reg(dev, 0x4756, 0x8B);
ret |= imx415_write_reg(dev, 0x4758, 0x93);
ret |= imx415_write_reg(dev, 0x475A, 0xB1);
ret |= imx415_write_reg(dev, 0x475C, 0xFB);
ret |= imx415_write_reg(dev, 0x475E, 0x09);
ret |= imx415_write_reg(dev, 0x4760, 0x11);
ret |= imx415_write_reg(dev, 0x4762, 0x2F);
ret |= imx415_write_reg(dev, 0x4766, 0xCC);
ret |= imx415_write_reg(dev, 0x4776, 0xCB);
ret |= imx415_write_reg(dev, 0x477E, 0x4A);
ret |= imx415_write_reg(dev, 0x478E, 0x49);
ret |= imx415_write_reg(dev, 0x4794, 0x7C);
ret |= imx415_write_reg(dev, 0x4796, 0x8F);
ret |= imx415_write_reg(dev, 0x4798, 0xB3);
ret |= imx415_write_reg(dev, 0x4799, 0x00);
ret |= imx415_write_reg(dev, 0x479A, 0xCC);
ret |= imx415_write_reg(dev, 0x479C, 0xC1);
ret |= imx415_write_reg(dev, 0x479E, 0xCB);
ret |= imx415_write_reg(dev, 0x47A4, 0x7D);
ret |= imx415_write_reg(dev, 0x47A6, 0x8E);
ret |= imx415_write_reg(dev, 0x47A8, 0xB4);
ret |= imx415_write_reg(dev, 0x47A9, 0x00);
ret |= imx415_write_reg(dev, 0x47AA, 0xC0);
ret |= imx415_write_reg(dev, 0x47AC, 0xFA);
ret |= imx415_write_reg(dev, 0x47AE, 0x0D);
ret |= imx415_write_reg(dev, 0x47B0, 0x31);
ret |= imx415_write_reg(dev, 0x47B1, 0x01);
ret |= imx415_write_reg(dev, 0x47B2, 0x4A);
ret |= imx415_write_reg(dev, 0x47B3, 0x01);
ret |= imx415_write_reg(dev, 0x47B4, 0x3F);
ret |= imx415_write_reg(dev, 0x47B6, 0x49);
ret |= imx415_write_reg(dev, 0x47BC, 0xFB);
ret |= imx415_write_reg(dev, 0x47BE, 0x0C);
ret |= imx415_write_reg(dev, 0x47C0, 0x32);
ret |= imx415_write_reg(dev, 0x47C1, 0x01);
ret |= imx415_write_reg(dev, 0x47C2, 0x3E);
ret |= imx415_write_reg(dev, 0x47C3, 0x01);
ret |= imx415_write_reg(dev, 0x3000, 0x00);
imx415_delay_ms(18);
ret |= imx415_write_reg(dev, 0x3002, 0x00);
if (ret != XMEDIA_SUCCESS) {
SENSOR_TRACE(MODULE_DBG_ERR, "imx415_write_reg failed.\n");
return XMEDIA_FAILURE;
}
SENSOR_PRINT("=================================================================================\n");
SENSOR_PRINT("==== imx415 sensor 2160P30 10bit 4lane 2to1 WDR(60fps->30fps) init success! ====\n");
SENSOR_PRINT("=================================================================================\n");
return XMEDIA_SUCCESS;
}
xmedia_s32 imx415_init_image(xmedia_u32 dev, xmedia_u8 image_mode)
{
xmedia_s32 ret = XMEDIA_SUCCESS;
switch(image_mode) {
case IMX415_8M_10BIT_LINEAR_MODE:
ret = imx415_4lane_linear_3840x2160_init(dev);
break;
case IMX415_8M_10BIT_WDR_MODE:
ret = imx415_4lane_wdr_3840x2160_init(dev);
break;
default:
SENSOR_TRACE(MODULE_DBG_ERR, "Not support, please check image param!\n");
return XMEDIA_ERRCODE_NOT_SUPPORT;
}
return ret;
}
xmedia_s32 imx415_set_slave_addr(xmedia_u32 dev, xmedia_u32 slave_addr)
{
xmedia_s32 ret;
if (g_imx415_i2c_fd[dev] < 0) {
SENSOR_PRINT("Sensor dev [%d], i2c not open. please init i2c at first.\n", dev);
return XMEDIA_ERRCODE_NOT_INIT;
}
ret = i2c_set_slave_addr(g_imx415_i2c_fd[dev], slave_addr);
if (ret < 0) {
SENSOR_TRACE(MODULE_DBG_ERR, "I2C_SLAVE_FORCE error!\n");
i2c_close(g_imx415_i2c_fd[dev]);
g_imx415_i2c_fd[dev] = SENSOR_I2C_INVALID;
return XMEDIA_FAILURE;
}
g_imx415_i2c_addr[dev] = slave_addr;
SENSOR_PRINT("Sensor dev [%d] set slave addr 0x%x success.\n", dev, slave_addr);
return XMEDIA_SUCCESS;
}
xmedia_s32 imx415_i2c_init(xmedia_u32 dev, xmedia_s8 i2c_dev, xmedia_u32 i2c_addr)
{
xmedia_s32 ret;
if (g_imx415_i2c_fd[dev] >= 0) {
SENSOR_PRINT("====== Sensor dev [%d], i2c already init !=======\n", dev);
return XMEDIA_SUCCESS;
}
if (i2c_dev == SENSOR_I2C_INVALID) {
SENSOR_TRACE(MODULE_DBG_ERR, "Sensor i2c dev invalid! Please set i2c dev at first!\n");
return XMEDIA_ERRCODE_NOT_CONFIG;
}
g_imx415_i2c_fd[dev] = i2c_open(i2c_dev);
if (g_imx415_i2c_fd[dev] < 0) {
SENSOR_TRACE(MODULE_DBG_ERR, "Open /dev/i2c_drv-%u error!\n", i2c_dev);
return XMEDIA_ERRCODE_OPEN_FAILED;
}
ret = imx415_set_slave_addr(dev, i2c_addr);
SENSOR_CHECK_RET_RETURN(ret);
SENSOR_PRINT("====== i2c[%d] init success!=======\n", i2c_dev);
return XMEDIA_SUCCESS;
}
xmedia_s32 imx415_i2c_exit(xmedia_u32 dev)
{
xmedia_s32 ret;
ret = i2c_close(g_imx415_i2c_fd[dev]);
if(ret < 0 ) {
SENSOR_TRACE(MODULE_DBG_ERR, "sensor dev[%d] close i2c failed!\n", dev);
return ret;
}
g_imx415_i2c_fd[dev] = SENSOR_I2C_INVALID;
return XMEDIA_SUCCESS;
}
xmedia_s32 imx415_read_reg(xmedia_u32 dev, xmedia_u32 addr,xmedia_u32 *data)
{
xmedia_s32 ret;
xmedia_u8 buf[IMX415_DATA_BYTE];
if (g_imx415_i2c_fd[dev] < 0) {
SENSOR_TRACE(MODULE_DBG_ERR, "sensor dev[%d]'s i2c is not init!\n", dev);
return XMEDIA_ERRCODE_NOT_INIT;
}
ret = i2c_read(g_imx415_i2c_fd[dev], g_imx415_i2c_addr[dev], addr, IMX415_ADDR_BYTE, buf, IMX415_DATA_BYTE);
if (ret < 0) {
SENSOR_TRACE(MODULE_DBG_ERR, "sensor dev[%d] read i2c addr [0x%X] failed!\n", dev, addr);
return ret;
}
*data = buf[0]; //IMX415_DATA_BYTE == 1
return XMEDIA_SUCCESS;
}
xmedia_s32 imx415_write_reg(xmedia_u32 dev, xmedia_u32 addr, xmedia_u32 data)
{
xmedia_u32 idx = 0;
xmedia_s32 ret;
xmedia_u8 buf[8];
if (g_imx415_i2c_fd[dev] < 0) {
SENSOR_TRACE(MODULE_DBG_ERR, "sensor dev[%d]'s i2c is not init!\n", dev);
return XMEDIA_ERRCODE_NOT_INIT;
}
buf[idx] = (addr >> 8) & 0xff; //IMX415_ADDR_BYTE == 2
idx++;
buf[idx] = addr & 0xff;
idx++;
buf[idx] = data & 0xff; //IMX415_DATA_BYTE == 1
ret = i2c_write(g_imx415_i2c_fd[dev], g_imx415_i2c_addr[dev], buf, IMX415_ADDR_BYTE + IMX415_DATA_BYTE);
if (ret < 0) {
SENSOR_TRACE(MODULE_DBG_ERR, "I2C_WRITE error!\n");
return XMEDIA_FAILURE;
}
return XMEDIA_SUCCESS;
}
xmedia_s32 imx415_set_mirror_flip(xmedia_u32 dev, xmedia_bool mirror_en, xmedia_bool flip_en)
{
xmedia_s32 ret;
xmedia_u32 mirror_flip;
imx415_read_reg(dev, IMX415_REG_MIRROR_FLIP, &mirror_flip);
if (mirror_en) {
mirror_flip |= 0x01;
} else {
mirror_flip &= 0xfe;
}
if (flip_en) {
mirror_flip |= 0x02;
} else {
mirror_flip &= 0xfd;
}
ret = imx415_write_reg(dev, IMX415_REG_MIRROR_FLIP, mirror_flip);
if (ret != XMEDIA_SUCCESS) {
SENSOR_TRACE(MODULE_DBG_ERR, "imx415_write_reg failed\n");
}
return XMEDIA_SUCCESS;
}
+33
View File
@@ -0,0 +1,33 @@
#ifndef __IMX415_CTRL_H__
#define __IMX415_CTRL_H__
#include "sns_comm.h"
#ifdef __cplusplus
extern "C" {
#endif
#define IMX415_I2C_ADDR 0x34
#define IMX415_ADDR_BYTE 2
#define IMX415_DATA_BYTE 1
// imx415 specs list
#define IMX415_8M_10BIT_LINEAR_MODE 1
#define IMX415_8M_10BIT_WDR_MODE 2
#define SENSOR_HIGHER_16BITS(x) (((x)&0x0F0000) >> 16)
xmedia_s32 imx415_i2c_init(xmedia_u32 dev, xmedia_s8 i2c_dev, xmedia_u32 i2c_addr);
xmedia_s32 imx415_i2c_exit(xmedia_u32 dev);
xmedia_s32 imx415_read_reg(xmedia_u32 dev, xmedia_u32 addr, xmedia_u32 *data);
xmedia_s32 imx415_write_reg(xmedia_u32 dev, xmedia_u32 addr, xmedia_u32 data);
xmedia_s32 imx415_set_mirror_flip(xmedia_u32 dev, xmedia_bool mirror_en, xmedia_bool flip_en);
xmedia_s32 imx415_init_image(xmedia_u32 dev, xmedia_u8 img_mode);
xmedia_s32 imx415_set_slave_addr(xmedia_u32 dev, xmedia_u32 slave_addr);
xmedia_void imx415_delay_ms(xmedia_s32 ms);
#ifdef __cplusplus
}
#endif
#endif
+856
View File
@@ -0,0 +1,856 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __IMX415_EX_H__
#define __IMX415_EX_H__
#ifdef __cplusplus
extern "C" {
#endif
static xmedia_isp_piris_attr g_imx415_piris_attr = {
/*
0, // bStepFNOTableChange
1, // bZeroIsMax
94, // u16TotalStep
62, // u16StepCount
// Step-F number mapping table. Must be from small to large. F1.0 is 1024 and F32.0 is 1
{30, 35, 40, 45, 50, 56, 61, 67, 73, 79, 85, 92, 98, 105, 112, 120, 127, 135, 143, 150, 158, 166, 174, 183, 191, 200, 208, 217, 225, 234, 243, 252, 261, 270, 279, 289, 298, 307, 316, 325, 335, 344, 353, 362, 372, 381, 390, 399, 408, 417, 426, 435, 444, 453, 462, 470, 478, 486, 493, 500, 506, 512},
ISP_IRIS_F_NO_1_4, // enMaxIrisFNOTarget
ISP_IRIS_F_NO_5_6 // enMinIrisFNOTarget
*/
};
static const xmedia_isp_blc_attr g_imx415_blc={
0, //op_type
{
{200,200,200,200}, //black_level
}, //manual_attr
{
12, //iso_num
{100,200,400,800,1600,3200,6400,12800,25600,51200,102400,204800,409600,819200,1638400,3276800}, //iso_level
{
{200,200,200,200}, //black_level[0]
{200,200,200,200}, //black_level[1]
{200,200,200,200}, //black_level[2]
{200,200,200,200}, //black_level[3]
{200,200,200,200}, //black_level[4]
{200,200,200,200}, //black_level[5]
{200,200,200,200}, //black_level[6]
{200,200,200,200}, //black_level[7]
{200,200,200,200}, //black_level[8]
{200,200,200,200}, //black_level[9]
{200,200,200,200}, //black_level[10]
{200,200,200,200}, //black_level[11]
{200,200,200,200}, //black_level[12]
{200,200,200,200}, //black_level[13]
{200,200,200,200}, //black_level[14]
{200,200,200,200}, //black_level[15]
}, //black_level
}, //auto_attr
};
static const xmedia_isp_bnr_attr g_imx415_bnr={
1, //enable
2, //ainr_pos_switch
0, //coring_pos_switch
0, //noise_reserve_enable
{102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,103,104,105,106,107,108,108,108,108,108,108,108,108,108,108,108,115,115,115,115,123,123,123,123,131,131,131,131,138,138,138,138,146,146,146,146,154,154,154,154,161,161}, //noise_reserve_lut
6400, //noise_profile_thd
{ 0.0003973533, -0.0159759652, 0.0000002066, -0.0000016889, 0.0289701261 },
{ 0.0003973533, -0.0159759652, 0.0000002066, -0.0000016889, 0.0289701261 },
0, //snr_wdr_comp_en
1, //tnr_enable
1, //tnr_luma_comp_enable
0, //tnr_wdr_comp_enable
0, //op_type
{
12, //iso_num
{100,200,400,800,1600,3200,6400,12800,25600,51200,102400,204800,409600,819200,1638400,3276800}, //iso_level
{
{282,282,282,282}, //snr_coarse_str[0]
{282,282,282,282}, //snr_coarse_str[1]
{307,307,307,307}, //snr_coarse_str[2]
{333,333,333,333}, //snr_coarse_str[3]
{358,358,358,358}, //snr_coarse_str[4]
{358,358,358,358}, //snr_coarse_str[5]
{358,358,358,358}, //snr_coarse_str[6]
{358,358,358,358}, //snr_coarse_str[7]
{358,358,358,358}, //snr_coarse_str[8]
{358,358,358,358}, //snr_coarse_str[9]
{358,358,358,358}, //snr_coarse_str[10]
{358,358,358,358}, //snr_coarse_str[11]
{358,358,358,358}, //snr_coarse_str[12]
{358,358,358,358}, //snr_coarse_str[13]
{358,358,358,358}, //snr_coarse_str[14]
{358,358,358,358}, //snr_coarse_str[15]
}, //snr_coarse_str
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //snr_coring_wgt
{
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //snr_luma_nr_str[0]
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //snr_luma_nr_str[1]
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //snr_luma_nr_str[2]
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //snr_luma_nr_str[3]
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //snr_luma_nr_str[4]
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //snr_luma_nr_str[5]
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //snr_luma_nr_str[6]
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //snr_luma_nr_str[7]
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //snr_luma_nr_str[8]
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //snr_luma_nr_str[9]
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //snr_luma_nr_str[10]
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //snr_luma_nr_str[11]
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //snr_luma_nr_str[12]
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //snr_luma_nr_str[13]
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //snr_luma_nr_str[14]
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //snr_luma_nr_str[15]
}, //snr_luma_nr_str
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, //snr_center_luma_mode
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, //snr_center_tnr_luma_mode
{512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512}, //snr_wdr_comp_scl
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_noise_min
{256,256,256,256,256,320,384,448,512,512,64,64,64,64,64,64}, //tnr_bayer_str
{56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56}, //tnr_md_thd_low
{112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112}, //tnr_md_thd_high
{512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512}, //tnr_wgt_min
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, //tnr_min_ratio
{70,64,56,48,40,32,24,16,12,8,8,8,8,8,8,8}, //tnr_mot_bld_thd_low
{140,128,112,96,80,64,48,32,24,16,16,16,16,16,16,16}, //tnr_mot_bld_thd_high
{120,112,104,96,88,16,16,32,32,32,32,32,32,32,32,32}, //tnr_edge_md_thd_low
{240,224,208,192,176,32,32,64,64,64,64,64,64,64,64,64}, //tnr_edge_md_thd_high
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_flat_md_scl
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_edge_md_scl
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, //tnr_md_mode
{1024,1024,1024,1024,896,768,640,512,256,128,128,128,128,128,128,128}, //tnr_luma_md_thd_low
{2048,2048,2048,2048,2560,1024,1024,1024,512,256,256,256,256,256,256,256}, //tnr_luma_md_thd_high
{256,256,256,256,256,256,256,256,320,320,320,320,320,320,320,320}, //tnr_dark_md_scl
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_bright_md_scl
{
{176,176,176}, //tnr_mot_scl[0]
{176,176,176}, //tnr_mot_scl[1]
{176,176,176}, //tnr_mot_scl[2]
{176,176,176}, //tnr_mot_scl[3]
{176,176,176}, //tnr_mot_scl[4]
{176,176,176}, //tnr_mot_scl[5]
{176,176,176}, //tnr_mot_scl[6]
{176,176,176}, //tnr_mot_scl[7]
{176,176,176}, //tnr_mot_scl[8]
{176,176,176}, //tnr_mot_scl[9]
{176,176,176}, //tnr_mot_scl[10]
{176,176,176}, //tnr_mot_scl[11]
{176,176,176}, //tnr_mot_scl[12]
{176,176,176}, //tnr_mot_scl[13]
{176,176,176}, //tnr_mot_scl[14]
{176,176,176}, //tnr_mot_scl[15]
}, //tnr_mot_scl
{32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32}, //tnr_var_scl
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, //tnr_mot_noise_luma_thd_low
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //tnr_mot_noise_luma_thd_high
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_mot_noise_dark_scl
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_mot_noise_bright_scl
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //tnr_mot_dpc_str
{
{880,1280,1280,1536}, //tnr_mot_convg_thd[0]
{880,1280,1280,1536}, //tnr_mot_convg_thd[1]
{880,1280,1280,1536}, //tnr_mot_convg_thd[2]
{880,1280,1280,1536}, //tnr_mot_convg_thd[3]
{880,1280,1280,1536}, //tnr_mot_convg_thd[4]
{880,1280,1280,1536}, //tnr_mot_convg_thd[5]
{880,1280,1280,1536}, //tnr_mot_convg_thd[6]
{880,1280,1280,1536}, //tnr_mot_convg_thd[7]
{880,1280,1280,1536}, //tnr_mot_convg_thd[8]
{880,1280,1280,1536}, //tnr_mot_convg_thd[9]
{880,1280,1280,1536}, //tnr_mot_convg_thd[10]
{880,1280,1280,1536}, //tnr_mot_convg_thd[11]
{880,1280,1280,1536}, //tnr_mot_convg_thd[12]
{880,1280,1280,1536}, //tnr_mot_convg_thd[13]
{880,1280,1280,1536}, //tnr_mot_convg_thd[14]
{880,1280,1280,1536}, //tnr_mot_convg_thd[15]
}, //tnr_mot_convg_thd
{256,256,256,256,256,256,320,384,384,384,384,384,384,384,384,384}, //tnr_mot_noise_scl
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_mot_noise_scl_high
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, //tnr_dpc_en
{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1}, //tnr_dp_mode
{384,384,389,384,384,384,384,384,256,256,256,256,256,256,256,256}, //tnr_dp_thd_rb
{384,384,384,384,384,384,384,384,256,256,256,256,256,256,256,256}, //tnr_dp_thd_g
{128,128,128,128,128,256,256,384,384,384,384,384,384,384,384,384}, //tnr_dp_luma_thd_low
{256,256,256,256,256,512,512,768,768,768,768,768,768,768,768,768}, //tnr_dp_luma_thd_high
{256,256,256,256,256,224,192,160,128,128,128,128,128,128,128,128}, //tnr_dp_thd_low_dark_scl
{256,256,256,256,256,256,224,192,160,128,128,128,128,128,128,128}, //tnr_dp_thd_high_dark_scl
{
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_luma_ratio[0]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_luma_ratio[1]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_luma_ratio[2]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_luma_ratio[3]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_luma_ratio[4]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_luma_ratio[5]
{128,160,192,224,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_luma_ratio[6]
{64,96,128,160,192,224,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_luma_ratio[7]
{32,64,96,128,160,192,224,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_luma_ratio[8]
{0,32,64,96,128,160,192,224,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_luma_ratio[9]
{0,32,64,96,128,160,192,224,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_luma_ratio[10]
{0,32,64,96,128,160,192,224,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_luma_ratio[11]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_luma_ratio[12]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_luma_ratio[13]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_luma_ratio[14]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //tnr_luma_ratio[15]
}, //tnr_luma_ratio
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, //tnr_wdr_comp_scl
}, //auto_attr
{
{128,128,128,128}, //snr_coarse_str
128, //snr_coring_wgt
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //snr_luma_nr_str
0, //snr_center_luma_mode
0, //snr_center_tnr_luma_mode
512, //snr_wdr_comp_scl
335, //tnr_noise_min
512, //tnr_bayer_str
8, //tnr_md_thd_low
16, //tnr_md_thd_high
512, //tnr_wgt_min
256, //tnr_min_ratio
6, //tnr_mot_bld_thd_low
12, //tnr_mot_bld_thd_high
16, //tnr_edge_md_thd_low
48, //tnr_edge_md_thd_high
256, //tnr_flat_md_scl
256, //tnr_edge_md_scl
3, //tnr_md_mode
128, //tnr_luma_md_thd_low
256, //tnr_luma_md_thd_high
512, //tnr_dark_md_scl
256, //tnr_bright_md_scl
{144,144,144}, //tnr_mot_scl
32, //tnr_var_scl
128, //tnr_mot_noise_luma_thd_low
256, //tnr_mot_noise_luma_thd_high
256, //tnr_mot_noise_dark_scl
256, //tnr_mot_noise_bright_scl
64, //tnr_mot_dpc_str
{360,512,1280,1536}, //tnr_mot_convg_thd
256, //tnr_mot_noise_scl
256, //tnr_mot_noise_scl_high
1, //tnr_dpc_en
1, //tnr_dp_mode
68, //tnr_dp_thd_rb
105, //tnr_dp_thd_g
128, //tnr_dp_luma_thd_low
256, //tnr_dp_luma_thd_high
256, //tnr_dp_thd_low_dark_scl
256, //tnr_dp_thd_high_dark_scl
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //tnr_luma_ratio
0, //tnr_wdr_comp_scl
}, //manual_attr
{
{64,64}, //wdr_frame_str
}, //wdr
};
static const xmedia_isp_cr_attr g_imx415_crosstalk={
1, //enable
0, //op_type
{
31, //slope
100, //threshold
512, //np_offset
}, //manual_attr
{
12, //iso_num
{100,200,400,800,1600,3200,6400,12800,25600,51200,102400,204800,409600,819200,1638400,3276800}, //iso_level
{31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31}, //slope
{300,300,400,500,600,700,800,900,1000,1000,1000,1000,1000,1000,1000,1000}, //threshold
{512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512}, //npOffset
}, //auto_attr
};
static const xmedia_isp_csc_attr g_imx415_csc={
1,// enable;
1,// color_gamut;
50,// hue;
50,// luma;
50,// contrast;
50,// saturation;
0,// limited_range_en;
1,// ext_csc_en;
1,// ct_mode_en;
{
{0,0,0},// csc_idc[XMEDIA_ISP_CSC_INPUT_DC_NUM];
{0,128,128},// csc_odc[XMEDIA_ISP_CSC_OUTPUT_DC_NUM];
{213,715,72,-117,-394,511,511,-464,-47}
},// csc_matrix;
};
static const xmedia_isp_demosaic_attr g_imx415_demosaic={
1, //enable
0, //op_type
{
12, //iso_num
{100,200,400,800,1600,3200,6400,12800,25600,51200,102400,204800,409600,819200,1638400,3276800}, //iso_level
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //mf_de_str
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //mf_de_osh_str
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}, //mf_de_ush_str
{128,100,80,64,64,64,64,64,64,64,64,64,64,64,64,64}, //hf_de_str
{3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4}, //hf_smooth_range
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, //detail_smooth_str
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, //detail_mf_de_bias
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, //detail_hf_de_bias
}, //auto_attr
{
32, //mf_de_str
128, //mf_de_osh_str
128, //mf_de_ush_str
32, //hf_de_str
4, //hf_smooth_range
1, //detail_smooth_str
0, //detail_mf_de_bias
0, //detail_hf_de_bias
}, //manual_attr
};
static const xmedia_isp_dehaze_attr g_imx415_dehaze={
1, //enable
0, //userlut_enable
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, //dehaze_lut
1, //opType
{
1, //strength
{288,284,280,276,272,268,264,260,258,256,256,256,256,256,256,256,256}, //bmap_curve
{256,256,258,260,262,264,266,268,270,272,272,272,272,272,272,272,272}, //dmap_curve
}, //manual_attr
{
16, //iso_num
{100,200,400,800,1600,3200,6400,12800,25600,51200,102400,204800,409600,819200,1638400,3276800}, //iso_level
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, //strength
{
{360,350,340,330,320,310,300,290,280,270,266,262,260,258,256,256,256}, //bmap_curve[0]
{360,350,340,330,320,310,300,290,280,270,266,262,260,258,256,256,256}, //bmap_curve[1]
{360,350,340,330,320,310,300,290,280,270,266,262,260,258,256,256,256}, //bmap_curve[2]
{360,350,340,330,320,310,300,290,280,270,266,262,260,258,256,256,256}, //bmap_curve[3]
{304,296,288,280,276,272,268,264,260,258,256,256,256,256,256,256,256}, //bmap_curve[4]
{304,296,288,280,276,272,268,264,260,258,256,256,256,256,256,256,256}, //bmap_curve[5]
{304,296,288,280,276,272,268,264,260,258,256,256,256,256,256,256,256}, //bmap_curve[6]
{288,284,280,276,272,268,264,260,258,256,256,256,256,256,256,256,256}, //bmap_curve[7]
{288,284,280,276,272,268,264,260,258,256,256,256,256,256,256,256,256}, //bmap_curve[8]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //bmap_curve[9]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //bmap_curve[10]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //bmap_curve[11]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //bmap_curve[12]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //bmap_curve[13]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //bmap_curve[14]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //bmap_curve[15]
}, //bmap_curve
{
{256,256,260,264,268,270,272,274,276,278,280,280,280,280,280,280,280}, //dmap_curve[0]
{256,256,260,264,268,270,272,274,276,278,280,280,280,280,280,280,280}, //dmap_curve[1]
{256,256,260,264,268,270,272,274,276,278,280,280,280,280,280,280,280}, //dmap_curve[2]
{256,256,260,264,268,270,272,274,276,278,280,280,280,280,280,280,280}, //dmap_curve[3]
{256,256,258,260,262,264,266,268,270,272,272,272,272,272,272,272,272}, //dmap_curve[4]
{256,256,258,260,262,264,266,268,270,272,272,272,272,272,272,272,272}, //dmap_curve[5]
{256,256,258,260,262,264,266,268,270,272,272,272,272,272,272,272,272}, //dmap_curve[6]
{256,256,257,258,259,260,262,264,266,268,268,268,268,268,268,268,268}, //dmap_curve[7]
{256,256,257,258,259,260,262,264,266,268,268,268,268,268,268,268,268}, //dmap_curve[8]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //dmap_curve[9]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //dmap_curve[10]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //dmap_curve[11]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //dmap_curve[12]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //dmap_curve[13]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //dmap_curve[14]
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256}, //dmap_curve[15]
}, //dmap_curve
}, //auto_attr
128, //temporal_incr_coef
128, //temporal_decr_coef
};
static const xmedia_isp_gamma_attr g_imx415_gamma={
1, //enable
3, //curve_type
0, //op_type
{
{0,16,32,49,65,81,98,114,130,147,163,179,196,212,228,245,261,277,294,310,327,343,359,376,392,408,425,441,457,474,490,506,523,539,555,572,588,605,621,637,653,668,684,699,713,728,742,757,770,784,798,811,824,837,850,863,875,887,900,912,923,935,947,958,970,981,
992,1003,1014,1025,1035,1046,1056,1067,1077,1087,1097,1107,1117,1127,1136,1146,1156,1165,1174,1184,1193,1202,1211,1220,1229,1238,1247,1255,1264,1273,1281,1290,1298,1306,1315,1323,1331,1339,1347,1355,1363,1371,1379,1387,1395,1402,1410,1418,1425,1433,1440,1448,
1455,1462,1470,1477,1484,1491,1498,1505,1512,1519,1526,1533,1540,1547,1554,1561,1567,1574,1581,1587,1594,1601,1607,1614,1620,1627,1633,1639,1646,1652,1658,1665,1671,1677,1683,1689,1696,1702,1708,1714,1720,1726,1732,1738,1744,1749,1755,1761,1767,1773,1778,1784,
1790,1796,1801,1807,1813,1818,1824,1829,1835,1840,1846,1851,1857,1862,1868,1873,1878,1884,1889,1894,1900,1905,1910,1915,1920,1926,1931,1936,1941,1946,1951,1956,1961,1966,1971,1976,1981,1986,1991,1996,2001,2006,2011,2016,2021,2026,2030,2035,2040,2045,2050,2054,
2059,2064,2069,2073,2078,2083,2087,2092,2096,2101,2106,2110,2115,2119,2124,2128,2133,2137,2142,2146,2151,2155,2160,2164,2169,2173,2177,2182,2186,2190,2195,2199,2203,2208,2212,2216,2220,2225,2229,2233,2237,2242,2246,2250,2254,2258,2262,2267,2271,2275,2279,2283,
2287,2291,2295,2299,2303,2307,2311,2315,2319,2323,2327,2331,2335,2339,2343,2347,2351,2355,2359,2363,2367,2371,2374,2378,2382,2386,2390,2394,2397,2401,2405,2409,2413,2416,2420,2424,2428,2431,2435,2439,2443,2446,2450,2454,2457,2461,2465,2468,2472,2476,2479,2483,
2487,2490,2494,2497,2501,2504,2508,2512,2515,2519,2522,2526,2529,2533,2536,2540,2543,2547,2550,2554,2557,2561,2564,2568,2571,2575,2578,2581,2585,2588,2592,2595,2598,2602,2605,2608,2612,2615,2619,2622,2625,2629,2632,2635,2639,2642,2645,2648,2652,2655,2658,2661,
2665,2668,2671,2674,2678,2681,2684,2687,2691,2694,2697,2700,2703,2707,2710,2713,2716,2719,2722,2726,2729,2732,2735,2738,2741,2744,2747,2751,2754,2757,2760,2763,2766,2769,2772,2775,2778,2781,2784,2787,2790,2794,2797,2800,2803,2806,2809,2812,2815,2818,2821,2824,
2827,2830,2832,2835,2838,2841,2844,2847,2850,2853,2856,2859,2862,2865,2868,2871,2874,2876,2879,2882,2885,2888,2891,2894,2897,2899,2902,2905,2908,2911,2914,2917,2919,2922,2925,2928,2931,2934,2936,2939,2942,2945,2948,2950,2953,2956,2959,2961,2964,2967,2970,2972,
2975,2978,2981,2983,2986,2989,2992,2994,2997,3000,3002,3005,3008,3011,3013,3016,3019,3021,3024,3027,3029,3032,3035,3037,3040,3043,3045,3048,3051,3053,3056,3059,3061,3064,3066,3069,3072,3074,3077,3079,3082,3085,3087,3090,3092,3095,3098,3100,3103,3105,3108,3110,
3113,3116,3118,3121,3123,3126,3128,3131,3133,3136,3138,3141,3143,3146,3148,3151,3153,3156,3158,3161,3163,3166,3168,3171,3173,3176,3178,3181,3183,3186,3188,3191,3193,3196,3198,3200,3203,3205,3208,3210,3213,3215,3218,3220,3222,3225,3227,3230,3232,3234,3237,3239,
3242,3244,3246,3249,3251,3254,3256,3258,3261,3263,3265,3268,3270,3273,3275,3277,3280,3282,3284,3287,3289,3291,3294,3296,3298,3301,3303,3305,3308,3310,3312,3315,3317,3319,3322,3324,3326,3328,3331,3333,3335,3338,3340,3342,3344,3347,3349,3351,3354,3356,3358,3360,
3363,3365,3367,3369,3372,3374,3376,3378,3381,3383,3385,3387,3390,3392,3394,3396,3398,3401,3403,3405,3407,3409,3412,3414,3416,3418,3420,3423,3425,3427,3429,3431,3434,3436,3438,3440,3442,3444,3447,3449,3451,3453,3455,3457,3460,3462,3464,3466,3468,3470,3473,3475,
3477,3479,3481,3483,3485,3487,3490,3492,3494,3496,3498,3500,3502,3504,3507,3509,3511,3513,3515,3517,3519,3521,3523,3525,3527,3530,3532,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552,3554,3556,3559,3561,3563,3565,3567,3569,3571,3573,3575,3577,3579,3581,3583,
3585,3587,3589,3591,3593,3595,3597,3599,3601,3603,3605,3607,3609,3611,3613,3615,3617,3619,3621,3623,3625,3627,3629,3631,3633,3635,3637,3639,3641,3643,3645,3647,3649,3651,3653,3655,3657,3659,3661,3663,3665,3667,3669,3671,3673,3675,3677,3679,3681,3682,3684,3686,
3688,3690,3692,3694,3696,3698,3700,3702,3704,3706,3708,3709,3711,3713,3715,3717,3719,3721,3723,3725,3727,3729,3730,3732,3734,3736,3738,3740,3742,3744,3746,3748,3749,3751,3753,3755,3757,3759,3761,3763,3764,3766,3768,3770,3772,3774,3776,3777,3779,3781,3783,3785,
3787,3789,3790,3792,3794,3796,3798,3800,3802,3803,3805,3807,3809,3811,3813,3814,3816,3818,3820,3822,3824,3825,3827,3829,3831,3833,3834,3836,3838,3840,3842,3844,3845,3847,3849,3851,3853,3854,3856,3858,3860,3862,3863,3865,3867,3869,3870,3872,3874,3876,3878,3879,
3881,3883,3885,3886,3888,3890,3892,3894,3895,3897,3899,3901,3902,3904,3906,3908,3909,3911,3913,3915,3916,3918,3920,3922,3923,3925,3927,3929,3930,3932,3934,3936,3937,3939,3941,3943,3944,3946,3948,3949,3951,3953,3955,3956,3958,3960,3961,3963,3965,3967,3968,3970,
3972,3973,3975,3977,3979,3980,3982,3984,3985,3987,3989,3990,3992,3994,3996,3997,3999,4001,4002,4004,4006,4007,4009,4011,4012,4014,4016,4017,4019,4021,4022,4024,4026,4027,4029,4031,4032,4034,4036,4037,4039,4041,4042,4044,4046,4047,4049,4051,4052,4054,4056,4057,
4059,4061,4062,4064,4066,4067,4069,4070,4072,4074,4075,4077,4079,4080,4082,4084,4085,4087,4088,4090,4092,4093,4095}, //table[0]
},
{
4, //iso_num
{100,3200,25600,102400}, //iso_level
{
{0,16,32,49,65,81,98,114,130,147,163,179,196,212,228,245,261,277,294,310,327,343,359,376,392,408,425,441,457,474,490,506,523,539,555,572,588,605,621,637,653,668,684,699,713,728,742,757,770,784,798,811,824,837,850,863,875,887,900,912,923,935,947,958,970,981,
992,1003,1014,1025,1035,1046,1056,1067,1077,1087,1097,1107,1117,1127,1136,1146,1156,1165,1174,1184,1193,1202,1211,1220,1229,1238,1247,1255,1264,1273,1281,1290,1298,1306,1315,1323,1331,1339,1347,1355,1363,1371,1379,1387,1395,1402,1410,1418,1425,1433,1440,1448,
1455,1462,1470,1477,1484,1491,1498,1505,1512,1519,1526,1533,1540,1547,1554,1561,1567,1574,1581,1587,1594,1601,1607,1614,1620,1627,1633,1639,1646,1652,1658,1665,1671,1677,1683,1689,1696,1702,1708,1714,1720,1726,1732,1738,1744,1749,1755,1761,1767,1773,1778,1784,
1790,1796,1801,1807,1813,1818,1824,1829,1835,1840,1846,1851,1857,1862,1868,1873,1878,1884,1889,1894,1900,1905,1910,1915,1920,1926,1931,1936,1941,1946,1951,1956,1961,1966,1971,1976,1981,1986,1991,1996,2001,2006,2011,2016,2021,2026,2030,2035,2040,2045,2050,2054,
2059,2064,2069,2073,2078,2083,2087,2092,2096,2101,2106,2110,2115,2119,2124,2128,2133,2137,2142,2146,2151,2155,2160,2164,2169,2173,2177,2182,2186,2190,2195,2199,2203,2208,2212,2216,2220,2225,2229,2233,2237,2242,2246,2250,2254,2258,2262,2267,2271,2275,2279,2283,
2287,2291,2295,2299,2303,2307,2311,2315,2319,2323,2327,2331,2335,2339,2343,2347,2351,2355,2359,2363,2367,2371,2374,2378,2382,2386,2390,2394,2397,2401,2405,2409,2413,2416,2420,2424,2428,2431,2435,2439,2443,2446,2450,2454,2457,2461,2465,2468,2472,2476,2479,2483,
2487,2490,2494,2497,2501,2504,2508,2512,2515,2519,2522,2526,2529,2533,2536,2540,2543,2547,2550,2554,2557,2561,2564,2568,2571,2575,2578,2581,2585,2588,2592,2595,2598,2602,2605,2608,2612,2615,2619,2622,2625,2629,2632,2635,2639,2642,2645,2648,2652,2655,2658,2661,
2665,2668,2671,2674,2678,2681,2684,2687,2691,2694,2697,2700,2703,2707,2710,2713,2716,2719,2722,2726,2729,2732,2735,2738,2741,2744,2747,2751,2754,2757,2760,2763,2766,2769,2772,2775,2778,2781,2784,2787,2790,2794,2797,2800,2803,2806,2809,2812,2815,2818,2821,2824,
2827,2830,2832,2835,2838,2841,2844,2847,2850,2853,2856,2859,2862,2865,2868,2871,2874,2876,2879,2882,2885,2888,2891,2894,2897,2899,2902,2905,2908,2911,2914,2917,2919,2922,2925,2928,2931,2934,2936,2939,2942,2945,2948,2950,2953,2956,2959,2961,2964,2967,2970,2972,
2975,2978,2981,2983,2986,2989,2992,2994,2997,3000,3002,3005,3008,3011,3013,3016,3019,3021,3024,3027,3029,3032,3035,3037,3040,3043,3045,3048,3051,3053,3056,3059,3061,3064,3066,3069,3072,3074,3077,3079,3082,3085,3087,3090,3092,3095,3098,3100,3103,3105,3108,3110,
3113,3116,3118,3121,3123,3126,3128,3131,3133,3136,3138,3141,3143,3146,3148,3151,3153,3156,3158,3161,3163,3166,3168,3171,3173,3176,3178,3181,3183,3186,3188,3191,3193,3196,3198,3200,3203,3205,3208,3210,3213,3215,3218,3220,3222,3225,3227,3230,3232,3234,3237,3239,
3242,3244,3246,3249,3251,3254,3256,3258,3261,3263,3265,3268,3270,3273,3275,3277,3280,3282,3284,3287,3289,3291,3294,3296,3298,3301,3303,3305,3308,3310,3312,3315,3317,3319,3322,3324,3326,3328,3331,3333,3335,3338,3340,3342,3344,3347,3349,3351,3354,3356,3358,3360,
3363,3365,3367,3369,3372,3374,3376,3378,3381,3383,3385,3387,3390,3392,3394,3396,3398,3401,3403,3405,3407,3409,3412,3414,3416,3418,3420,3423,3425,3427,3429,3431,3434,3436,3438,3440,3442,3444,3447,3449,3451,3453,3455,3457,3460,3462,3464,3466,3468,3470,3473,3475,
3477,3479,3481,3483,3485,3487,3490,3492,3494,3496,3498,3500,3502,3504,3507,3509,3511,3513,3515,3517,3519,3521,3523,3525,3527,3530,3532,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552,3554,3556,3559,3561,3563,3565,3567,3569,3571,3573,3575,3577,3579,3581,3583,
3585,3587,3589,3591,3593,3595,3597,3599,3601,3603,3605,3607,3609,3611,3613,3615,3617,3619,3621,3623,3625,3627,3629,3631,3633,3635,3637,3639,3641,3643,3645,3647,3649,3651,3653,3655,3657,3659,3661,3663,3665,3667,3669,3671,3673,3675,3677,3679,3681,3682,3684,3686,
3688,3690,3692,3694,3696,3698,3700,3702,3704,3706,3708,3709,3711,3713,3715,3717,3719,3721,3723,3725,3727,3729,3730,3732,3734,3736,3738,3740,3742,3744,3746,3748,3749,3751,3753,3755,3757,3759,3761,3763,3764,3766,3768,3770,3772,3774,3776,3777,3779,3781,3783,3785,
3787,3789,3790,3792,3794,3796,3798,3800,3802,3803,3805,3807,3809,3811,3813,3814,3816,3818,3820,3822,3824,3825,3827,3829,3831,3833,3834,3836,3838,3840,3842,3844,3845,3847,3849,3851,3853,3854,3856,3858,3860,3862,3863,3865,3867,3869,3870,3872,3874,3876,3878,3879,
3881,3883,3885,3886,3888,3890,3892,3894,3895,3897,3899,3901,3902,3904,3906,3908,3909,3911,3913,3915,3916,3918,3920,3922,3923,3925,3927,3929,3930,3932,3934,3936,3937,3939,3941,3943,3944,3946,3948,3949,3951,3953,3955,3956,3958,3960,3961,3963,3965,3967,3968,3970,
3972,3973,3975,3977,3979,3980,3982,3984,3985,3987,3989,3990,3992,3994,3996,3997,3999,4001,4002,4004,4006,4007,4009,4011,4012,4014,4016,4017,4019,4021,4022,4024,4026,4027,4029,4031,4032,4034,4036,4037,4039,4041,4042,4044,4046,4047,4049,4051,4052,4054,4056,4057,
4059,4061,4062,4064,4066,4067,4069,4070,4072,4074,4075,4077,4079,4080,4082,4084,4085,4087,4088,4090,4092,4093,4095}, //table[0]
{0,15,30,45,60,75,91,106,121,136,151,167,182,197,212,227,242,258,273,288,303,318,334,349,364,379,394,409,425,440,455,470,485,501,516,531,546,561,576,592,607,622,637,652,667,682,697,711,725,739,753,766,780,793,806,818,831,844,856,868,880,892,904,915,927,938,
950,961,972,983,994,1004,1015,1025,1036,1046,1056,1066,1076,1086,1096,1106,1115,1125,1135,1144,1153,1163,1172,1181,1190,1199,1208,1217,1225,1234,1243,1251,1260,1268,1277,1285,1293,1302,1310,1318,1326,1334,1342,1350,1358,1366,1373,1381,1389,1396,1404,1411,
1419,1426,1434,1441,1448,1456,1463,1470,1477,1484,1491,1498,1505,1512,1519,1526,1533,1540,1547,1553,1560,1567,1573,1580,1586,1593,1600,1606,1612,1619,1625,1632,1638,1644,1650,1657,1663,1669,1675,1681,1687,1693,1700,1706,1712,1717,1723,1729,1735,1741,1747,
1753,1759,1764,1770,1776,1781,1787,1793,1798,1804,1810,1815,1821,1826,1832,1837,1843,1848,1853,1859,1864,1870,1875,1880,1885,1890,1895,1900,1905,1909,1914,1918,1922,1926,1930,1934,1937,1941,1944,1948,1951,1954,1957,1961,1964,1967,1970,1973,1976,1980,1983,
1986,1989,1992,1996,1999,2003,2007,2010,2014,2019,2023,2027,2031,2035,2040,2044,2049,2053,2058,2062,2067,2072,2077,2082,2087,2093,2098,2104,2109,2115,2120,2125,2131,2136,2140,2145,2149,2153,2157,2160,2163,2166,2169,2172,2175,2177,2180,2182,2185,2188,2191,
2194,2197,2200,2204,2207,2211,2215,2219,2222,2226,2230,2234,2237,2241,2244,2248,2251,2254,2257,2260,2262,2265,2267,2270,2272,2274,2276,2278,2281,2283,2285,2287,2290,2292,2294,2297,2299,2301,2304,2306,2309,2311,2314,2317,2319,2322,2324,2327,2329,2332,2334,
2337,2340,2342,2345,2348,2350,2353,2355,2358,2361,2363,2366,2369,2372,2374,2377,2380,2382,2385,2388,2391,2393,2396,2399,2402,2405,2407,2410,2413,2416,2419,2421,2424,2427,2430,2433,2436,2439,2441,2444,2447,2450,2453,2456,2459,2462,2465,2468,2471,2473,2476,
2479,2482,2485,2488,2491,2494,2497,2500,2503,2506,2509,2512,2515,2518,2521,2524,2527,2530,2533,2536,2540,2543,2546,2549,2552,2555,2558,2561,2564,2567,2570,2573,2577,2580,2583,2586,2589,2592,2595,2598,2602,2605,2608,2611,2614,2617,2620,2624,2627,2630,2633,
2636,2639,2643,2646,2649,2652,2655,2658,2662,2665,2668,2671,2674,2678,2681,2684,2687,2690,2694,2697,2700,2703,2707,2710,2713,2716,2719,2723,2726,2729,2732,2736,2739,2742,2745,2749,2752,2755,2758,2761,2765,2768,2771,2774,2778,2781,2784,2787,2791,2794,2797,
2800,2804,2807,2810,2813,2817,2820,2823,2826,2830,2833,2836,2839,2843,2846,2849,2852,2856,2859,2862,2865,2868,2872,2875,2878,2881,2885,2888,2891,2894,2898,2901,2904,2907,2910,2914,2917,2920,2923,2927,2930,2933,2936,2939,2943,2946,2949,2952,2955,2959,2962,
2965,2968,2971,2974,2978,2981,2984,2987,2990,2993,2997,3000,3003,3006,3009,3012,3015,3019,3022,3025,3028,3031,3034,3037,3040,3043,3047,3050,3053,3056,3059,3062,3065,3068,3071,3074,3077,3080,3083,3086,3089,3092,3096,3099,3102,3105,3108,3111,3114,3117,3120,
3122,3124,3126,3128,3130,3132,3135,3137,3139,3141,3143,3145,3148,3150,3152,3154,3156,3159,3161,3163,3165,3168,3170,3172,3174,3177,3179,3181,3183,3186,3188,3190,3193,3195,3197,3199,3202,3204,3206,3209,3211,3213,3216,3218,3220,3223,3225,3227,3230,3232,3234,
3237,3239,3241,3244,3246,3249,3251,3253,3256,3258,3260,3263,3265,3268,3270,3272,3275,3277,3280,3282,3285,3287,3289,3292,3294,3297,3299,3302,3304,3306,3309,3311,3314,3316,3319,3321,3324,3326,3329,3331,3333,3336,3338,3341,3343,3346,3348,3351,3353,3356,3358,
3361,3363,3366,3368,3371,3373,3376,3378,3381,3383,3386,3388,3391,3393,3396,3398,3401,3403,3406,3408,3411,3414,3416,3419,3421,3424,3426,3429,3431,3434,3436,3439,3441,3444,3446,3449,3451,3454,3457,3459,3462,3464,3467,3469,3472,3474,3477,3479,3482,3484,3487,
3490,3492,3495,3497,3500,3502,3505,3507,3510,3512,3515,3518,3520,3523,3525,3528,3530,3533,3535,3538,3540,3543,3545,3548,3550,3553,3556,3558,3561,3563,3566,3568,3571,3573,3576,3578,3581,3583,3586,3588,3591,3593,3596,3598,3601,3603,3606,3608,3611,3613,3616,
3618,3621,3623,3626,3628,3631,3633,3636,3638,3641,3643,3646,3648,3651,3653,3656,3658,3661,3663,3666,3668,3671,3673,3675,3678,3680,3683,3685,3688,3690,3693,3695,3697,3700,3702,3705,3707,3710,3712,3714,3717,3719,3722,3724,3726,3729,3731,3733,3736,3738,3741,
3743,3745,3748,3750,3752,3755,3757,3760,3762,3764,3767,3769,3771,3774,3776,3778,3780,3783,3785,3787,3790,3792,3794,3797,3799,3801,3803,3806,3808,3810,3812,3815,3817,3819,3821,3824,3826,3828,3830,3832,3835,3837,3839,3841,3843,3846,3848,3850,3852,3854,3856,
3859,3861,3863,3865,3867,3869,3871,3874,3876,3878,3880,3882,3884,3886,3888,3890,3892,3894,3897,3899,3901,3903,3905,3907,3909,3911,3913,3915,3917,3919,3921,3923,3925,3927,3929,3931,3933,3934,3936,3938,3940,3942,3944,3946,3948,3950,3952,3953,3955,3957,3959,
3961,3963,3965,3966,3968,3970,3972,3974,3975,3977,3979,3981,3983,3984,3986,3988,3990,3991,3993,3995,3996,3998,4000,4001,4003,4005,4006,4008,4010,4011,4013,4015,4016,4018,4019,4021,4023,4024,4026,4027,4029,4030,4032,4033,4035,4036,4038,4039,4041,4042,4044,
4045,4047,4048,4050,4051,4052,4054,4055,4057,4058,4059,4061,4062,4063,4065,4066,4067,4069,4070,4071,4073,4074,4075,4076,4078,4079,4080,4081,4082,4084,4085,4086,4087,4088,4089,4091,4092,4093,4094,4095}, //table[1]
{0,16,32,48,65,81,97,114,131,147,164,180,197,214,230,247,263,280,296,312,328,344,360,376,392,407,422,437,452,467,481,495,509,523,536,549,562,575,588,600,613,625,637,649,661,673,684,696,707,718,729,740,751,762,773,783,794,805,815,826,836,846,857,867,877,887,
897,907,917,927,937,946,956,965,975,984,993,1002,1012,1021,1029,1038,1047,1056,1064,1073,1081,1090,1098,1107,1115,1123,1131,1139,1147,1155,1163,1171,1179,1186,1194,1201,1209,1216,1223,1230,1237,1244,1251,1258,1265,1272,1278,1285,1291,1298,1305,1311,1317,
1324,1330,1336,1343,1349,1355,1361,1368,1374,1380,1386,1392,1398,1404,1410,1416,1422,1427,1433,1439,1444,1450,1455,1461,1466,1472,1477,1482,1488,1493,1498,1504,1509,1515,1520,1525,1531,1536,1542,1547,1552,1558,1564,1569,1575,1580,1586,1591,1597,1603,1608,
1614,1619,1625,1631,1636,1642,1647,1653,1658,1664,1669,1675,1680,1686,1691,1697,1702,1708,1713,1718,1723,1729,1734,1739,1744,1750,1755,1760,1765,1770,1775,1780,1785,1790,1795,1800,1805,1810,1815,1820,1825,1830,1835,1839,1844,1849,1854,1859,1863,1868,1873,
1878,1883,1887,1892,1897,1901,1906,1911,1915,1920,1925,1929,1934,1939,1943,1948,1952,1957,1961,1966,1970,1975,1979,1984,1988,1993,1997,2001,2006,2010,2014,2019,2023,2027,2032,2036,2040,2044,2049,2053,2057,2061,2065,2069,2074,2078,2082,2086,2090,2094,2098,
2102,2106,2110,2114,2118,2122,2126,2130,2134,2138,2141,2145,2149,2153,2157,2161,2165,2169,2173,2177,2181,2185,2189,2193,2196,2200,2204,2208,2212,2216,2220,2223,2227,2231,2235,2239,2242,2246,2250,2254,2257,2261,2265,2269,2272,2276,2280,2283,2287,2291,2294,
2298,2302,2306,2309,2313,2316,2320,2324,2327,2331,2335,2338,2342,2345,2349,2353,2356,2360,2363,2367,2371,2374,2378,2381,2385,2388,2392,2395,2399,2402,2406,2409,2413,2416,2420,2423,2427,2430,2434,2437,2441,2444,2447,2451,2454,2458,2461,2465,2468,2471,2475,
2478,2482,2485,2488,2492,2495,2498,2502,2505,2509,2512,2515,2519,2522,2525,2529,2532,2535,2538,2542,2545,2548,2552,2555,2558,2561,2565,2568,2571,2575,2578,2581,2584,2588,2591,2594,2597,2600,2604,2607,2610,2613,2617,2620,2623,2626,2629,2632,2636,2639,2642,
2645,2648,2651,2655,2658,2661,2664,2667,2670,2673,2677,2680,2683,2686,2689,2692,2695,2698,2701,2704,2708,2711,2714,2717,2720,2723,2726,2729,2732,2735,2738,2741,2744,2747,2750,2753,2756,2759,2762,2765,2769,2772,2775,2778,2781,2784,2786,2789,2792,2795,2798,
2801,2804,2807,2810,2813,2816,2819,2822,2825,2828,2831,2834,2837,2840,2843,2846,2849,2851,2854,2857,2860,2863,2866,2869,2872,2875,2878,2880,2883,2886,2889,2892,2895,2898,2901,2903,2906,2909,2912,2915,2918,2920,2923,2926,2929,2932,2935,2937,2940,2943,2946,
2949,2952,2954,2957,2960,2963,2965,2968,2971,2974,2977,2979,2982,2985,2988,2991,2993,2996,2999,3002,3004,3007,3010,3013,3015,3018,3021,3024,3026,3029,3032,3034,3037,3040,3043,3045,3048,3051,3053,3056,3059,3062,3064,3067,3070,3072,3075,3078,3080,3083,3086,
3088,3091,3094,3096,3099,3102,3104,3107,3110,3112,3115,3118,3120,3123,3125,3128,3131,3133,3136,3139,3141,3144,3146,3149,3152,3154,3157,3160,3162,3165,3167,3170,3173,3175,3178,3180,3183,3185,3188,3191,3193,3196,3198,3201,3203,3206,3209,3211,3214,3216,3219,
3221,3224,3226,3229,3232,3234,3237,3239,3242,3244,3247,3249,3252,3254,3257,3259,3262,3264,3267,3269,3272,3274,3277,3279,3282,3284,3287,3289,3292,3294,3297,3299,3302,3304,3307,3309,3312,3314,3317,3319,3322,3324,3327,3329,3331,3334,3336,3339,3341,3344,3346,
3349,3351,3353,3356,3358,3361,3363,3366,3368,3370,3373,3375,3378,3380,3383,3385,3387,3390,3392,3395,3397,3399,3402,3404,3407,3409,3411,3414,3416,3419,3421,3423,3426,3428,3430,3433,3435,3438,3440,3442,3445,3447,3449,3452,3454,3457,3459,3461,3464,3466,3468,
3471,3473,3475,3478,3480,3482,3485,3487,3489,3492,3494,3496,3499,3501,3503,3506,3508,3510,3513,3515,3517,3520,3522,3524,3526,3529,3531,3533,3536,3538,3540,3543,3545,3547,3549,3552,3554,3556,3559,3561,3563,3565,3568,3570,3572,3575,3577,3579,3581,3584,3586,
3588,3590,3593,3595,3597,3599,3602,3604,3606,3608,3611,3613,3615,3617,3620,3622,3624,3626,3629,3631,3633,3635,3637,3640,3642,3644,3646,3649,3651,3653,3655,3657,3660,3662,3664,3666,3668,3671,3673,3675,3677,3680,3682,3684,3686,3688,3690,3693,3695,3697,3699,
3701,3704,3706,3708,3710,3712,3714,3717,3719,3721,3723,3725,3728,3730,3732,3734,3736,3738,3741,3743,3745,3747,3749,3751,3753,3756,3758,3760,3762,3764,3766,3768,3771,3773,3775,3777,3779,3781,3783,3786,3788,3790,3792,3794,3796,3798,3800,3803,3805,3807,3809,
3811,3813,3815,3817,3819,3822,3824,3826,3828,3830,3832,3834,3836,3838,3840,3843,3845,3847,3849,3851,3853,3855,3857,3859,3861,3863,3866,3868,3870,3872,3874,3876,3878,3880,3882,3884,3886,3888,3890,3892,3895,3897,3899,3901,3903,3905,3907,3909,3911,3913,3915,
3917,3919,3921,3923,3925,3927,3929,3931,3933,3936,3938,3940,3942,3944,3946,3948,3950,3952,3954,3956,3958,3960,3962,3964,3966,3968,3970,3972,3974,3976,3978,3980,3982,3984,3986,3988,3990,3992,3994,3996,3998,4000,4002,4004,4006,4008,4010,4012,4014,4016,4018,
4020,4022,4024,4026,4028,4030,4032,4034,4036,4038,4040,4042,4044,4046,4048,4050,4052,4054,4056,4058,4060,4062,4064,4066,4068,4070,4072,4073,4075,4077,4079,4081,4083,4085,4087,4089,4091,4093,4095}, //table[2]
{0,16,32,48,65,81,97,114,131,147,164,180,197,214,230,247,263,280,296,312,328,344,360,376,392,407,422,437,452,467,481,495,509,523,536,549,562,575,588,600,613,625,637,649,661,673,684,696,707,718,729,740,751,762,773,783,794,805,815,826,836,846,857,867,877,
887,897,907,917,927,937,946,956,965,975,984,993,1002,1012,1021,1029,1038,1047,1056,1064,1073,1081,1090,1098,1107,1115,1123,1131,1139,1147,1155,1163,1171,1179,1186,1194,1201,1209,1216,1223,1230,1237,1244,1251,1258,1265,1272,1278,1285,1291,1298,1305,1311,
1317,1324,1330,1336,1343,1349,1355,1361,1368,1374,1380,1386,1392,1398,1404,1410,1416,1422,1427,1433,1439,1444,1450,1455,1461,1466,1472,1477,1482,1488,1493,1498,1504,1509,1515,1520,1525,1531,1536,1542,1547,1552,1558,1564,1569,1575,1580,1586,1591,1597,1603,
1608,1614,1619,1625,1631,1636,1642,1647,1653,1658,1664,1669,1675,1680,1686,1691,1697,1702,1708,1713,1718,1723,1729,1734,1739,1744,1750,1755,1760,1765,1770,1775,1780,1785,1790,1795,1800,1805,1810,1815,1820,1825,1830,1835,1839,1844,1849,1854,1859,1863,1868,
1873,1878,1883,1887,1892,1897,1901,1906,1911,1915,1920,1925,1929,1934,1939,1943,1948,1952,1957,1961,1966,1970,1975,1979,1984,1988,1993,1997,2001,2006,2010,2014,2019,2023,2027,2032,2036,2040,2044,2049,2053,2057,2061,2065,2069,2074,2078,2082,2086,2090,2094,
2098,2102,2106,2110,2114,2118,2122,2126,2130,2134,2138,2141,2145,2149,2153,2157,2161,2165,2169,2173,2177,2181,2185,2189,2193,2196,2200,2204,2208,2212,2216,2220,2223,2227,2231,2235,2239,2242,2246,2250,2254,2257,2261,2265,2269,2272,2276,2280,2283,2287,2291,
2294,2298,2302,2306,2309,2313,2316,2320,2324,2327,2331,2335,2338,2342,2345,2349,2353,2356,2360,2363,2367,2371,2374,2378,2381,2385,2388,2392,2395,2399,2402,2406,2409,2413,2416,2420,2423,2427,2430,2434,2437,2441,2444,2447,2451,2454,2458,2461,2465,2468,2471,
2475,2478,2482,2485,2488,2492,2495,2498,2502,2505,2509,2512,2515,2519,2522,2525,2529,2532,2535,2538,2542,2545,2548,2552,2555,2558,2561,2565,2568,2571,2575,2578,2581,2584,2588,2591,2594,2597,2600,2604,2607,2610,2613,2617,2620,2623,2626,2629,2632,2636,2639,
2642,2645,2648,2651,2655,2658,2661,2664,2667,2670,2673,2677,2680,2683,2686,2689,2692,2695,2698,2701,2704,2708,2711,2714,2717,2720,2723,2726,2729,2732,2735,2738,2741,2744,2747,2750,2753,2756,2759,2762,2765,2769,2772,2775,2778,2781,2784,2786,2789,2792,2795,
2798,2801,2804,2807,2810,2813,2816,2819,2822,2825,2828,2831,2834,2837,2840,2843,2846,2849,2851,2854,2857,2860,2863,2866,2869,2872,2875,2878,2880,2883,2886,2889,2892,2895,2898,2901,2903,2906,2909,2912,2915,2918,2920,2923,2926,2929,2932,2935,2937,2940,2943,
2946,2949,2952,2954,2957,2960,2963,2965,2968,2971,2974,2977,2979,2982,2985,2988,2991,2993,2996,2999,3002,3004,3007,3010,3013,3015,3018,3021,3024,3026,3029,3032,3034,3037,3040,3043,3045,3048,3051,3053,3056,3059,3062,3064,3067,3070,3072,3075,3078,3080,3083,
3086,3088,3091,3094,3096,3099,3102,3104,3107,3110,3112,3115,3118,3120,3123,3125,3128,3131,3133,3136,3139,3141,3144,3146,3149,3152,3154,3157,3160,3162,3165,3167,3170,3173,3175,3178,3180,3183,3185,3188,3191,3193,3196,3198,3201,3203,3206,3209,3211,3214,3216,
3219,3221,3224,3226,3229,3232,3234,3237,3239,3242,3244,3247,3249,3252,3254,3257,3259,3262,3264,3267,3269,3272,3274,3277,3279,3282,3284,3287,3289,3292,3294,3297,3299,3302,3304,3307,3309,3312,3314,3317,3319,3322,3324,3327,3329,3331,3334,3336,3339,3341,3344,
3346,3349,3351,3353,3356,3358,3361,3363,3366,3368,3370,3373,3375,3378,3380,3383,3385,3387,3390,3392,3395,3397,3399,3402,3404,3407,3409,3411,3414,3416,3419,3421,3423,3426,3428,3430,3433,3435,3438,3440,3442,3445,3447,3449,3452,3454,3457,3459,3461,3464,3466,
3468,3471,3473,3475,3478,3480,3482,3485,3487,3489,3492,3494,3496,3499,3501,3503,3506,3508,3510,3513,3515,3517,3520,3522,3524,3526,3529,3531,3533,3536,3538,3540,3543,3545,3547,3549,3552,3554,3556,3559,3561,3563,3565,3568,3570,3572,3575,3577,3579,3581,3584,
3586,3588,3590,3593,3595,3597,3599,3602,3604,3606,3608,3611,3613,3615,3617,3620,3622,3624,3626,3629,3631,3633,3635,3637,3640,3642,3644,3646,3649,3651,3653,3655,3657,3660,3662,3664,3666,3668,3671,3673,3675,3677,3680,3682,3684,3686,3688,3690,3693,3695,3697,
3699,3701,3704,3706,3708,3710,3712,3714,3717,3719,3721,3723,3725,3728,3730,3732,3734,3736,3738,3741,3743,3745,3747,3749,3751,3753,3756,3758,3760,3762,3764,3766,3768,3771,3773,3775,3777,3779,3781,3783,3786,3788,3790,3792,3794,3796,3798,3800,3803,3805,3807,
3809,3811,3813,3815,3817,3819,3822,3824,3826,3828,3830,3832,3834,3836,3838,3840,3843,3845,3847,3849,3851,3853,3855,3857,3859,3861,3863,3866,3868,3870,3872,3874,3876,3878,3880,3882,3884,3886,3888,3890,3892,3895,3897,3899,3901,3903,3905,3907,3909,3911,3913,
3915,3917,3919,3921,3923,3925,3927,3929,3931,3933,3936,3938,3940,3942,3944,3946,3948,3950,3952,3954,3956,3958,3960,3962,3964,3966,3968,3970,3972,3974,3976,3978,3980,3982,3984,3986,3988,3990,3992,3994,3996,3998,4000,4002,4004,4006,4008,4010,4012,4014,4016,
4018,4020,4022,4024,4026,4028,4030,4032,4034,4036,4038,4040,4042,4044,4046,4048,4050,4052,4054,4056,4058,4060,4062,4064,4066,4068,4070,4072,4073,4075,4077,4079,4081,4083,4085,4087,4089,4091,4093,4095}, //table[3]
}, //table
}
};
static const xmedia_isp_lce_attr g_imx415_lce={
1, //enable
0, //op_type
0, //input_di_mode_en
0, //output_di_mode_en
{
20, //contrast_str
{-2,1}, //contrast_blc_slope
{-10,1}, //contrast_wht_slope
10, //blending_fmax
919, //blending_sigma_div
25, //blending_mean
15, //blending_blc_str
32, //blending_blc_value
14, //blending_wht_str
150,//blending_wht_value
{0,256}, //black_luma_expand
{0,256}, //white_luma_expand
15,// flat_denoise_thd;
8,// flat_denoise_str;
{1,1,1,1,8,1,1,1,1}, //flat_filter_str
0,// halo_str;
128,// temporal_incr_coef;
128,// temporal_decr_coef;
},// manual_attr;
{
10,
{100,200,400,800,1600,3200,6400,12800,25600,51200},
{20,18,18,16,15,14,12,10,10,8,8,6,4,4,4,2}, //contrast_str
{
{-2,1}, //contrast_blc_slop[0]
{-2,1}, //contrast_blc_slop[1]
{-2,1}, //contrast_blc_slop[2]
{-2,1}, //contrast_blc_slop[3]
{-2,1}, //contrast_blc_slop[4]
{-2,1}, //contrast_blc_slop[5]
{-2,1}, //contrast_blc_slop[6]
{-2,1}, //contrast_blc_slop[7]
{-2,1}, //contrast_blc_slop[8]
{-2,1}, //contrast_blc_slop[9]
{-2,1}, //contrast_blc_slop[10]
{0,1}, //contrast_blc_slop[11]
{0,1}, //contrast_blc_slop[12]
{0,1}, //contrast_blc_slop[13]
{0,1}, //contrast_blc_slop[14]
{0,1}, //contrast_blc_slop[15]
}, //contrast_blc_slop
{
{-10,1}, //contrast_wht_slope[0]
{-10,1}, //contrast_wht_slope[1]
{-10,1}, //contrast_wht_slope[2]
{-10,1}, //contrast_wht_slope[3]
{-10,1}, //contrast_wht_slope[4]
{-10,1}, //contrast_wht_slope[5]
{-10,1}, //contrast_wht_slope[6]
{-10,1}, //contrast_wht_slope[7]
{-10,1}, //contrast_wht_slope[8]
{-10,1}, //contrast_wht_slope[9]
{-10,1}, //contrast_wht_slope[10]
{0,1}, //contrast_wht_slope[11]
{0,1}, //contrast_wht_slope[12]
{0,1}, //contrast_wht_slope[13]
{0,1}, //contrast_wht_slope[14]
{0,1}, //contrast_wht_slope[15]
}, //contrast_wht_slope
{10,10,10,10,10,10,10,10,12,12,12,12,12,12,12,12}, //blending_fmax blending_fmax[XMEDIA_ISP_ISO_MAX_COUNT];
{919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919}, // blending_sigma_div[XMEDIA_ISP_ISO_MAX_COUNT];
{25,25,25,25,25,25,25,25,25,25,},// blending_mean[XMEDIA_ISP_ISO_MAX_COUNT];
{15,15,15,15,15,15,15,15,15,15,},// blending_blc_str[XMEDIA_ISP_ISO_MAX_COUNT];
{32,32,32,32,32,32,32,32,32,32,},// blending_blc_value[XMEDIA_ISP_ISO_MAX_COUNT];
{14,14,14,14,14,14,14,14,14,14,},// blending_wht_str[XMEDIA_ISP_ISO_MAX_COUNT];
{150,150,150,150,150,150,150,150,150,150,},// blending_wht_value[XMEDIA_ISP_ISO_MAX_COUNT];
{
{512,256}, //black_luma_expand[0]
{512,256}, //black_luma_expand[1]
{512,256}, //black_luma_expand[2]
{512,256}, //black_luma_expand[3]
{512,256}, //black_luma_expand[4]
{512,256}, //black_luma_expand[5]
{512,256}, //black_luma_expand[6]
{512,256}, //black_luma_expand[7]
{512,256}, //black_luma_expand[8]
{512,256}, //black_luma_expand[9]
{512,256}, //black_luma_expand[10]
{512,256}, //black_luma_expand[11]
{512,256}, //black_luma_expand[12]
{512,256}, //black_luma_expand[13]
{512,256}, //black_luma_expand[14]
{512,256}, //black_luma_expand[15]
}, //black_luma_expan black_luma_expand[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_LCE_CONTRAST_BWLE_NUM];
{
{512,256}, //black_luma_expand[0]
{512,256}, //black_luma_expand[1]
{512,256}, //black_luma_expand[2]
{512,256}, //black_luma_expand[3]
{512,256}, //black_luma_expand[4]
{512,256}, //black_luma_expand[5]
{512,256}, //black_luma_expand[6]
{512,256}, //black_luma_expand[7]
{512,256}, //black_luma_expand[8]
{512,256}, //black_luma_expand[9]
{512,256}, //black_luma_expand[10]
{512,256}, //black_luma_expand[11]
{512,256}, //black_luma_expand[12]
{512,256}, //black_luma_expand[13]
{512,256}, //black_luma_expand[14]
{512,256}, //black_luma_expand[15]
}, //white_luma_expand white_luma_expand[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_LCE_CONTRAST_BWLE_NUM];
{15,15,15,15,15,15,15,15,15,15,}, //flat_denoise_thd[XMEDIA_ISP_ISO_MAX_COUNT];
{8,8,8,8,8,8,8,8,8,8,}, // flat_denoise_str[XMEDIA_ISP_ISO_MAX_COUNT];
{
{1,1,1,1,8,1,1,1,1}, //flat_filter_str[0]
{1,1,1,1,8,1,1,1,1}, //flat_filter_str[1]
{1,1,1,1,8,1,1,1,1}, //flat_filter_str[2]
{1,1,1,1,8,1,1,1,1}, //flat_filter_str[3]
{1,1,1,1,8,1,1,1,1}, //flat_filter_str[4]
{1,1,1,1,8,1,1,1,1}, //flat_filter_str[5]
{1,1,1,1,8,1,1,1,1}, //flat_filter_str[6]
{1,1,1,1,8,1,1,1,1}, //flat_filter_str[7]
{1,1,1,1,8,1,1,1,1}, //flat_filter_str[8]
{1,1,1,1,8,1,1,1,1}, //flat_filter_str[9]
{1,1,1,1,8,1,1,1,1}, //flat_filter_str[10]
{1,1,1,1,8,1,1,1,1}, //flat_filter_str[11]
{1,1,1,1,8,1,1,1,1}, //flat_filter_str[12]
{1,1,1,1,8,1,1,1,1}, //flat_filter_str[13]
{1,1,1,1,8,1,1,1,1}, //flat_filter_str[14]
{1,1,1,1,8,1,1,1,1}, //flat_filter_str[15]
}, //flat_filter_str
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, //halo_str halo_str[XMEDIA_ISP_ISO_MAX_COUNT];
{128,128,128,128,128,128,128,128,128,128,}, // temporal_incr_coef[XMEDIA_ISP_ISO_MAX_COUNT];
{128,128,128,128,128,128,128,128,128,128,}, // temporal_decr_coef[XMEDIA_ISP_ISO_MAX_COUNT];
},// auto_attr;
};
static const xmedia_isp_drc_attr g_imx415_drc={
1, //drc_en
0, //ltmc_en
1, //dering_en
1, //detail_enhance_en
0, //tm_type
1, //op_type
{
1000, //range_fil_coef
4450, //spatial_fil_coef
16, //dering_thd
12, //dering_coarse_str
102, //dering_fine_str
128, //mixing_bright_min
128, //mixing_bright_max
64, //mixing_bright_thd_low
512, //mixing_bright_thd_high
128, //mixing_dark_min
192, //mixing_dark_max
64, //mixing_dark_thd_low
512, //mixing_dark_thd_high
16, //ltmc_str
64, //drc_str
{
6, //asymmetry
150, //second_pole
60, //stretch
200, //compress
}, //asymmetry_curve
{
6, //asymmetry
150, //second_pole
50, //stretch
100, //compress
}, //asymmetry_max_curve
{0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,26,26,27,27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394,396,398,400,402,404,406,408,410,412,414,416,418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448,450,452,454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,510,512,516,520,524,528,532,536,540,544,548,552,556,560,564,568,572,576,580,584,588,592,596,600,604,608,612,616,620,624,628,632,636,640,644,648,652,656,660,664,668,672,676,680,684,688,692,696,700,704,708,712,716,720,724,728,732,736,740,744,748,752,756,760,764,768,772,776,780,784,788,792,796,800,804,808,812,816,820,824,828,832,836,840,844,848,852,856,860,864,868,872,876,880,884,888,892,896,900,904,908,912,916,920,924,928,932,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012,1016,1020,1024,1032,1040,1048,1056,1064,1072,1080,1088,1096,1104,1112,1120,1128,1136,1144,1152,1160,1168,1176,1184,1192,1200,1208,1216,1224,1232,1240,1248,1256,1264,1272,1280,1288,1296,1304,1312,1320,1328,1336,1344,1352,1360,1368,1376,1384,1392,1400,1408,1416,1424,1432,1440,1448,1456,1464,1472,1480,1488,1496,1504,1512,1520,1528,1536,1544,1552,1560,1568,1576,1584,1592,1600,1608,1616,1624,1632,1640,1648,1656,1664,1672,1680,1688,1696,1704,1712,1720,1728,1736,1744,1752,1760,1768,1776,1784,1792,1800,1808,1816,1824,1832,1840,1848,1856,1864,1872,1880,1888,1896,1904,1912,1920,1928,1936,1944,1952,1960,1968,1976,1984,1992,2000,2008,2016,2024,2032,2040,2048,2063,2079,2095,2111,2127,2143,2159,2175,2191,2207,2223,2239,2255,2271,2287,2303,2319,2335,2351,2367,2383,2399,2415,2431,2447,2463,2479,2495,2511,2527,2543,2559,2575,2591,2607,2623,2639,2655,2671,2687,2703,2719,2735,2751,2767,2783,2799,2815,2831,2847,2863,2879,2895,2911,2927,2943,2959,2975,2991,3007,3023,3039,3055,3071,3087,3103,3119,3135,3151,3167,3183,3199,3215,3231,3247,3263,3279,3295,3311,3327,3343,3359,3375,3391,3407,3423,3439,3455,3471,3487,3503,3519,3535,3551,3567,3583,3599,3615,3631,3647,3663,3679,3695,3711,3727,3743,3759,3775,3791,3807,3823,3839,3855,3871,3887,3903,3919,3935,3951,3967,3983,3999,4015,4031,4047,4063,4079}, //tm_value_user
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,32,32,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254}, //tm_value_max_user
}, //manual_attr
{
10, //iso_num
{100,200,400,800,1600,3200,6400,12800,25600,51200,0,0,0,0,0,0}, //iso_level
{1000,1000,1000,1000,800,600,600,600,600,600,2,2,2,2,2,2}, //range_fil_coef
{145,145,145,145,145,145,145,145,145,145,16,16,16,16,16,16}, //spatial_fil_coef
{16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0}, //dering_thd
{12,12,12,12,12,12,12,12,12,12,0,0,0,0,0,0}, //dering_coarse_str
{102,102,102,102,102,102,102,102,102,0,0,0,0,0,0,0}, //dering_fine_str
{128,128,128,128,128,128,128,128,128,128,0,0,0,0,0,0}, //mixing_bright_min
{128,128,128,128,128,128,128,128,128,128,0,0,0,0,0,0}, //mixing_bright_max
{64,64,64,64,64,64,64,64,64,64,0,0,0,0,0,0}, //mixing_bright_thd_low
{512,512,512,512,512,512,512,512,512,512,4,4,4,4,4,4}, //mixing_bright_thd_high
{128,128,128,128,128,128,128,128,128,128,0,0,0,0,0,0}, //mixing_dark_min
{192,192,192,192,192,192,192,192,192,192,0,0,0,0,0,0}, //mixing_dark_max
{64,64,64,64,64,64,64,64,64,64,0,0,0,0,0,0}, //mixing_dark_thd_low
{1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024}, //mixing_dark_thd_high
{16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0}, //ltmc_str
{64,64,64,64,64,64,64,64,64,64,0,0,0,0,0,0}, //drc_str
9, // ratio_num;
{64,128,256,512,1024,2048,4096,8192,16384},// iso_level[XMEDIA_ISP_EXP_RATIO_MAX_COUNT];
{
{30,150,60,200}, //asymmetry_curve[0]
{30,150,60,200}, //asymmetry_curve[1]
{30,150,60,200}, //asymmetry_curve[2]
{30,150,60,200}, //asymmetry_curve[3]
{30,150,60,200}, //asymmetry_curve[4]
{30,150,60,200}, //asymmetry_curve[5]
{30,150,60,200}, //asymmetry_curve[6]
{30,150,60,200}, //asymmetry_curve[7]
{30,150,60,200}, //asymmetry_curve[8]
}, //asymmetry_curve
{
{30,150,60,200}, //asymmetry_max_curve[0]
{30,150,60,200}, //asymmetry_max_curve[1]
{30,150,60,200}, //asymmetry_max_curve[2]
{30,150,60,200}, //asymmetry_max_curve[3]
{30,150,60,200}, //asymmetry_max_curve[4]
{30,150,60,200}, //asymmetry_max_curve[5]
{30,150,60,200}, //asymmetry_max_curve[6]
{30,150,60,200}, //asymmetry_max_curve[7]
{30,150,60,200}, //asymmetry_max_curve[8]
}, //asymmetry_max_curve
{
{0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,26,26,27,27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394,396,398,400,402,404,406,408,410,412,414,416,418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448,450,452,454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,510,512,516,520,524,528,532,536,540,544,548,552,556,560,564,568,572,576,580,584,588,592,596,600,604,608,612,616,620,624,628,632,636,640,644,648,652,656,660,664,668,672,676,680,684,688,692,696,700,704,708,712,716,720,724,728,732,736,740,744,748,752,756,760,764,768,772,776,780,784,788,792,796,800,804,808,812,816,820,824,828,832,836,840,844,848,852,856,860,864,868,872,876,880,884,888,892,896,900,904,908,912,916,920,924,928,932,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012,1016,1020,1024,1032,1040,1048,1056,1064,1072,1080,1088,1096,1104,1112,1120,1128,1136,1144,1152,1160,1168,1176,1184,1192,1200,1208,1216,1224,1232,1240,1248,1256,1264,1272,1280,1288,1296,1304,1312,1320,1328,1336,1344,1352,1360,1368,1376,1384,1392,1400,1408,1416,1424,1432,1440,1448,1456,1464,1472,1480,1488,1496,1504,1512,1520,1528,1536,1544,1552,1560,1568,1576,1584,1592,1600,1608,1616,1624,1632,1640,1648,1656,1664,1672,1680,1688,1696,1704,1712,1720,1728,1736,1744,1752,1760,1768,1776,1784,1792,1800,1808,1816,1824,1832,1840,1848,1856,1864,1872,1880,1888,1896,1904,1912,1920,1928,1936,1944,1952,1960,1968,1976,1984,1992,2000,2008,2016,2024,2032,2040,2048,2063,2079,2095,2111,2127,2143,2159,2175,2191,2207,2223,2239,2255,2271,2287,2303,2319,2335,2351,2367,2383,2399,2415,2431,2447,2463,2479,2495,2511,2527,2543,2559,2575,2591,2607,2623,2639,2655,2671,2687,2703,2719,2735,2751,2767,2783,2799,2815,2831,2847,2863,2879,2895,2911,2927,2943,2959,2975,2991,3007,3023,3039,3055,3071,3087,3103,3119,3135,3151,3167,3183,3199,3215,3231,3247,3263,3279,3295,3311,3327,3343,3359,3375,3391,3407,3423,3439,3455,3471,3487,3503,3519,3535,3551,3567,3583,3599,3615,3631,3647,3663,3679,3695,3711,3727,3743,3759,3775,3791,3807,3823,3839,3855,3871,3887,3903,3919,3935,3951,3967,3983,3999,4015,4031,4047,4063,4079}, //tm_value_user[0]
{0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,26,26,27,27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394,396,398,400,402,404,406,408,410,412,414,416,418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448,450,452,454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,510,512,516,520,524,528,532,536,540,544,548,552,556,560,564,568,572,576,580,584,588,592,596,600,604,608,612,616,620,624,628,632,636,640,644,648,652,656,660,664,668,672,676,680,684,688,692,696,700,704,708,712,716,720,724,728,732,736,740,744,748,752,756,760,764,768,772,776,780,784,788,792,796,800,804,808,812,816,820,824,828,832,836,840,844,848,852,856,860,864,868,872,876,880,884,888,892,896,900,904,908,912,916,920,924,928,932,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012,1016,1020,1024,1032,1040,1048,1056,1064,1072,1080,1088,1096,1104,1112,1120,1128,1136,1144,1152,1160,1168,1176,1184,1192,1200,1208,1216,1224,1232,1240,1248,1256,1264,1272,1280,1288,1296,1304,1312,1320,1328,1336,1344,1352,1360,1368,1376,1384,1392,1400,1408,1416,1424,1432,1440,1448,1456,1464,1472,1480,1488,1496,1504,1512,1520,1528,1536,1544,1552,1560,1568,1576,1584,1592,1600,1608,1616,1624,1632,1640,1648,1656,1664,1672,1680,1688,1696,1704,1712,1720,1728,1736,1744,1752,1760,1768,1776,1784,1792,1800,1808,1816,1824,1832,1840,1848,1856,1864,1872,1880,1888,1896,1904,1912,1920,1928,1936,1944,1952,1960,1968,1976,1984,1992,2000,2008,2016,2024,2032,2040,2048,2063,2079,2095,2111,2127,2143,2159,2175,2191,2207,2223,2239,2255,2271,2287,2303,2319,2335,2351,2367,2383,2399,2415,2431,2447,2463,2479,2495,2511,2527,2543,2559,2575,2591,2607,2623,2639,2655,2671,2687,2703,2719,2735,2751,2767,2783,2799,2815,2831,2847,2863,2879,2895,2911,2927,2943,2959,2975,2991,3007,3023,3039,3055,3071,3087,3103,3119,3135,3151,3167,3183,3199,3215,3231,3247,3263,3279,3295,3311,3327,3343,3359,3375,3391,3407,3423,3439,3455,3471,3487,3503,3519,3535,3551,3567,3583,3599,3615,3631,3647,3663,3679,3695,3711,3727,3743,3759,3775,3791,3807,3823,3839,3855,3871,3887,3903,3919,3935,3951,3967,3983,3999,4015,4031,4047,4063,4079}, //tm_value_user[1]
{0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,26,26,27,27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394,396,398,400,402,404,406,408,410,412,414,416,418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448,450,452,454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,510,512,516,520,524,528,532,536,540,544,548,552,556,560,564,568,572,576,580,584,588,592,596,600,604,608,612,616,620,624,628,632,636,640,644,648,652,656,660,664,668,672,676,680,684,688,692,696,700,704,708,712,716,720,724,728,732,736,740,744,748,752,756,760,764,768,772,776,780,784,788,792,796,800,804,808,812,816,820,824,828,832,836,840,844,848,852,856,860,864,868,872,876,880,884,888,892,896,900,904,908,912,916,920,924,928,932,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012,1016,1020,1024,1032,1040,1048,1056,1064,1072,1080,1088,1096,1104,1112,1120,1128,1136,1144,1152,1160,1168,1176,1184,1192,1200,1208,1216,1224,1232,1240,1248,1256,1264,1272,1280,1288,1296,1304,1312,1320,1328,1336,1344,1352,1360,1368,1376,1384,1392,1400,1408,1416,1424,1432,1440,1448,1456,1464,1472,1480,1488,1496,1504,1512,1520,1528,1536,1544,1552,1560,1568,1576,1584,1592,1600,1608,1616,1624,1632,1640,1648,1656,1664,1672,1680,1688,1696,1704,1712,1720,1728,1736,1744,1752,1760,1768,1776,1784,1792,1800,1808,1816,1824,1832,1840,1848,1856,1864,1872,1880,1888,1896,1904,1912,1920,1928,1936,1944,1952,1960,1968,1976,1984,1992,2000,2008,2016,2024,2032,2040,2048,2063,2079,2095,2111,2127,2143,2159,2175,2191,2207,2223,2239,2255,2271,2287,2303,2319,2335,2351,2367,2383,2399,2415,2431,2447,2463,2479,2495,2511,2527,2543,2559,2575,2591,2607,2623,2639,2655,2671,2687,2703,2719,2735,2751,2767,2783,2799,2815,2831,2847,2863,2879,2895,2911,2927,2943,2959,2975,2991,3007,3023,3039,3055,3071,3087,3103,3119,3135,3151,3167,3183,3199,3215,3231,3247,3263,3279,3295,3311,3327,3343,3359,3375,3391,3407,3423,3439,3455,3471,3487,3503,3519,3535,3551,3567,3583,3599,3615,3631,3647,3663,3679,3695,3711,3727,3743,3759,3775,3791,3807,3823,3839,3855,3871,3887,3903,3919,3935,3951,3967,3983,3999,4015,4031,4047,4063,4079}, //tm_value_user[2]
{0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,26,26,27,27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394,396,398,400,402,404,406,408,410,412,414,416,418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448,450,452,454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,510,512,516,520,524,528,532,536,540,544,548,552,556,560,564,568,572,576,580,584,588,592,596,600,604,608,612,616,620,624,628,632,636,640,644,648,652,656,660,664,668,672,676,680,684,688,692,696,700,704,708,712,716,720,724,728,732,736,740,744,748,752,756,760,764,768,772,776,780,784,788,792,796,800,804,808,812,816,820,824,828,832,836,840,844,848,852,856,860,864,868,872,876,880,884,888,892,896,900,904,908,912,916,920,924,928,932,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012,1016,1020,1024,1032,1040,1048,1056,1064,1072,1080,1088,1096,1104,1112,1120,1128,1136,1144,1152,1160,1168,1176,1184,1192,1200,1208,1216,1224,1232,1240,1248,1256,1264,1272,1280,1288,1296,1304,1312,1320,1328,1336,1344,1352,1360,1368,1376,1384,1392,1400,1408,1416,1424,1432,1440,1448,1456,1464,1472,1480,1488,1496,1504,1512,1520,1528,1536,1544,1552,1560,1568,1576,1584,1592,1600,1608,1616,1624,1632,1640,1648,1656,1664,1672,1680,1688,1696,1704,1712,1720,1728,1736,1744,1752,1760,1768,1776,1784,1792,1800,1808,1816,1824,1832,1840,1848,1856,1864,1872,1880,1888,1896,1904,1912,1920,1928,1936,1944,1952,1960,1968,1976,1984,1992,2000,2008,2016,2024,2032,2040,2048,2063,2079,2095,2111,2127,2143,2159,2175,2191,2207,2223,2239,2255,2271,2287,2303,2319,2335,2351,2367,2383,2399,2415,2431,2447,2463,2479,2495,2511,2527,2543,2559,2575,2591,2607,2623,2639,2655,2671,2687,2703,2719,2735,2751,2767,2783,2799,2815,2831,2847,2863,2879,2895,2911,2927,2943,2959,2975,2991,3007,3023,3039,3055,3071,3087,3103,3119,3135,3151,3167,3183,3199,3215,3231,3247,3263,3279,3295,3311,3327,3343,3359,3375,3391,3407,3423,3439,3455,3471,3487,3503,3519,3535,3551,3567,3583,3599,3615,3631,3647,3663,3679,3695,3711,3727,3743,3759,3775,3791,3807,3823,3839,3855,3871,3887,3903,3919,3935,3951,3967,3983,3999,4015,4031,4047,4063,4079}, //tm_value_user[3]
{0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,26,26,27,27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394,396,398,400,402,404,406,408,410,412,414,416,418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448,450,452,454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,510,512,516,520,524,528,532,536,540,544,548,552,556,560,564,568,572,576,580,584,588,592,596,600,604,608,612,616,620,624,628,632,636,640,644,648,652,656,660,664,668,672,676,680,684,688,692,696,700,704,708,712,716,720,724,728,732,736,740,744,748,752,756,760,764,768,772,776,780,784,788,792,796,800,804,808,812,816,820,824,828,832,836,840,844,848,852,856,860,864,868,872,876,880,884,888,892,896,900,904,908,912,916,920,924,928,932,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012,1016,1020,1024,1032,1040,1048,1056,1064,1072,1080,1088,1096,1104,1112,1120,1128,1136,1144,1152,1160,1168,1176,1184,1192,1200,1208,1216,1224,1232,1240,1248,1256,1264,1272,1280,1288,1296,1304,1312,1320,1328,1336,1344,1352,1360,1368,1376,1384,1392,1400,1408,1416,1424,1432,1440,1448,1456,1464,1472,1480,1488,1496,1504,1512,1520,1528,1536,1544,1552,1560,1568,1576,1584,1592,1600,1608,1616,1624,1632,1640,1648,1656,1664,1672,1680,1688,1696,1704,1712,1720,1728,1736,1744,1752,1760,1768,1776,1784,1792,1800,1808,1816,1824,1832,1840,1848,1856,1864,1872,1880,1888,1896,1904,1912,1920,1928,1936,1944,1952,1960,1968,1976,1984,1992,2000,2008,2016,2024,2032,2040,2048,2063,2079,2095,2111,2127,2143,2159,2175,2191,2207,2223,2239,2255,2271,2287,2303,2319,2335,2351,2367,2383,2399,2415,2431,2447,2463,2479,2495,2511,2527,2543,2559,2575,2591,2607,2623,2639,2655,2671,2687,2703,2719,2735,2751,2767,2783,2799,2815,2831,2847,2863,2879,2895,2911,2927,2943,2959,2975,2991,3007,3023,3039,3055,3071,3087,3103,3119,3135,3151,3167,3183,3199,3215,3231,3247,3263,3279,3295,3311,3327,3343,3359,3375,3391,3407,3423,3439,3455,3471,3487,3503,3519,3535,3551,3567,3583,3599,3615,3631,3647,3663,3679,3695,3711,3727,3743,3759,3775,3791,3807,3823,3839,3855,3871,3887,3903,3919,3935,3951,3967,3983,3999,4015,4031,4047,4063,4079}, //tm_value_user[4]
{0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,26,26,27,27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394,396,398,400,402,404,406,408,410,412,414,416,418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448,450,452,454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,510,512,516,520,524,528,532,536,540,544,548,552,556,560,564,568,572,576,580,584,588,592,596,600,604,608,612,616,620,624,628,632,636,640,644,648,652,656,660,664,668,672,676,680,684,688,692,696,700,704,708,712,716,720,724,728,732,736,740,744,748,752,756,760,764,768,772,776,780,784,788,792,796,800,804,808,812,816,820,824,828,832,836,840,844,848,852,856,860,864,868,872,876,880,884,888,892,896,900,904,908,912,916,920,924,928,932,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012,1016,1020,1024,1032,1040,1048,1056,1064,1072,1080,1088,1096,1104,1112,1120,1128,1136,1144,1152,1160,1168,1176,1184,1192,1200,1208,1216,1224,1232,1240,1248,1256,1264,1272,1280,1288,1296,1304,1312,1320,1328,1336,1344,1352,1360,1368,1376,1384,1392,1400,1408,1416,1424,1432,1440,1448,1456,1464,1472,1480,1488,1496,1504,1512,1520,1528,1536,1544,1552,1560,1568,1576,1584,1592,1600,1608,1616,1624,1632,1640,1648,1656,1664,1672,1680,1688,1696,1704,1712,1720,1728,1736,1744,1752,1760,1768,1776,1784,1792,1800,1808,1816,1824,1832,1840,1848,1856,1864,1872,1880,1888,1896,1904,1912,1920,1928,1936,1944,1952,1960,1968,1976,1984,1992,2000,2008,2016,2024,2032,2040,2048,2063,2079,2095,2111,2127,2143,2159,2175,2191,2207,2223,2239,2255,2271,2287,2303,2319,2335,2351,2367,2383,2399,2415,2431,2447,2463,2479,2495,2511,2527,2543,2559,2575,2591,2607,2623,2639,2655,2671,2687,2703,2719,2735,2751,2767,2783,2799,2815,2831,2847,2863,2879,2895,2911,2927,2943,2959,2975,2991,3007,3023,3039,3055,3071,3087,3103,3119,3135,3151,3167,3183,3199,3215,3231,3247,3263,3279,3295,3311,3327,3343,3359,3375,3391,3407,3423,3439,3455,3471,3487,3503,3519,3535,3551,3567,3583,3599,3615,3631,3647,3663,3679,3695,3711,3727,3743,3759,3775,3791,3807,3823,3839,3855,3871,3887,3903,3919,3935,3951,3967,3983,3999,4015,4031,4047,4063,4079}, //tm_value_user[5]
{0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,26,26,27,27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394,396,398,400,402,404,406,408,410,412,414,416,418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448,450,452,454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,510,512,516,520,524,528,532,536,540,544,548,552,556,560,564,568,572,576,580,584,588,592,596,600,604,608,612,616,620,624,628,632,636,640,644,648,652,656,660,664,668,672,676,680,684,688,692,696,700,704,708,712,716,720,724,728,732,736,740,744,748,752,756,760,764,768,772,776,780,784,788,792,796,800,804,808,812,816,820,824,828,832,836,840,844,848,852,856,860,864,868,872,876,880,884,888,892,896,900,904,908,912,916,920,924,928,932,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012,1016,1020,1024,1032,1040,1048,1056,1064,1072,1080,1088,1096,1104,1112,1120,1128,1136,1144,1152,1160,1168,1176,1184,1192,1200,1208,1216,1224,1232,1240,1248,1256,1264,1272,1280,1288,1296,1304,1312,1320,1328,1336,1344,1352,1360,1368,1376,1384,1392,1400,1408,1416,1424,1432,1440,1448,1456,1464,1472,1480,1488,1496,1504,1512,1520,1528,1536,1544,1552,1560,1568,1576,1584,1592,1600,1608,1616,1624,1632,1640,1648,1656,1664,1672,1680,1688,1696,1704,1712,1720,1728,1736,1744,1752,1760,1768,1776,1784,1792,1800,1808,1816,1824,1832,1840,1848,1856,1864,1872,1880,1888,1896,1904,1912,1920,1928,1936,1944,1952,1960,1968,1976,1984,1992,2000,2008,2016,2024,2032,2040,2048,2063,2079,2095,2111,2127,2143,2159,2175,2191,2207,2223,2239,2255,2271,2287,2303,2319,2335,2351,2367,2383,2399,2415,2431,2447,2463,2479,2495,2511,2527,2543,2559,2575,2591,2607,2623,2639,2655,2671,2687,2703,2719,2735,2751,2767,2783,2799,2815,2831,2847,2863,2879,2895,2911,2927,2943,2959,2975,2991,3007,3023,3039,3055,3071,3087,3103,3119,3135,3151,3167,3183,3199,3215,3231,3247,3263,3279,3295,3311,3327,3343,3359,3375,3391,3407,3423,3439,3455,3471,3487,3503,3519,3535,3551,3567,3583,3599,3615,3631,3647,3663,3679,3695,3711,3727,3743,3759,3775,3791,3807,3823,3839,3855,3871,3887,3903,3919,3935,3951,3967,3983,3999,4015,4031,4047,4063,4079}, //tm_value_user[6]
{0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,26,26,27,27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394,396,398,400,402,404,406,408,410,412,414,416,418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448,450,452,454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,510,512,516,520,524,528,532,536,540,544,548,552,556,560,564,568,572,576,580,584,588,592,596,600,604,608,612,616,620,624,628,632,636,640,644,648,652,656,660,664,668,672,676,680,684,688,692,696,700,704,708,712,716,720,724,728,732,736,740,744,748,752,756,760,764,768,772,776,780,784,788,792,796,800,804,808,812,816,820,824,828,832,836,840,844,848,852,856,860,864,868,872,876,880,884,888,892,896,900,904,908,912,916,920,924,928,932,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012,1016,1020,1024,1032,1040,1048,1056,1064,1072,1080,1088,1096,1104,1112,1120,1128,1136,1144,1152,1160,1168,1176,1184,1192,1200,1208,1216,1224,1232,1240,1248,1256,1264,1272,1280,1288,1296,1304,1312,1320,1328,1336,1344,1352,1360,1368,1376,1384,1392,1400,1408,1416,1424,1432,1440,1448,1456,1464,1472,1480,1488,1496,1504,1512,1520,1528,1536,1544,1552,1560,1568,1576,1584,1592,1600,1608,1616,1624,1632,1640,1648,1656,1664,1672,1680,1688,1696,1704,1712,1720,1728,1736,1744,1752,1760,1768,1776,1784,1792,1800,1808,1816,1824,1832,1840,1848,1856,1864,1872,1880,1888,1896,1904,1912,1920,1928,1936,1944,1952,1960,1968,1976,1984,1992,2000,2008,2016,2024,2032,2040,2048,2063,2079,2095,2111,2127,2143,2159,2175,2191,2207,2223,2239,2255,2271,2287,2303,2319,2335,2351,2367,2383,2399,2415,2431,2447,2463,2479,2495,2511,2527,2543,2559,2575,2591,2607,2623,2639,2655,2671,2687,2703,2719,2735,2751,2767,2783,2799,2815,2831,2847,2863,2879,2895,2911,2927,2943,2959,2975,2991,3007,3023,3039,3055,3071,3087,3103,3119,3135,3151,3167,3183,3199,3215,3231,3247,3263,3279,3295,3311,3327,3343,3359,3375,3391,3407,3423,3439,3455,3471,3487,3503,3519,3535,3551,3567,3583,3599,3615,3631,3647,3663,3679,3695,3711,3727,3743,3759,3775,3791,3807,3823,3839,3855,3871,3887,3903,3919,3935,3951,3967,3983,3999,4015,4031,4047,4063,4079}, //tm_value_user[7]
{0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,26,26,27,27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394,396,398,400,402,404,406,408,410,412,414,416,418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448,450,452,454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,510,512,516,520,524,528,532,536,540,544,548,552,556,560,564,568,572,576,580,584,588,592,596,600,604,608,612,616,620,624,628,632,636,640,644,648,652,656,660,664,668,672,676,680,684,688,692,696,700,704,708,712,716,720,724,728,732,736,740,744,748,752,756,760,764,768,772,776,780,784,788,792,796,800,804,808,812,816,820,824,828,832,836,840,844,848,852,856,860,864,868,872,876,880,884,888,892,896,900,904,908,912,916,920,924,928,932,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012,1016,1020,1024,1032,1040,1048,1056,1064,1072,1080,1088,1096,1104,1112,1120,1128,1136,1144,1152,1160,1168,1176,1184,1192,1200,1208,1216,1224,1232,1240,1248,1256,1264,1272,1280,1288,1296,1304,1312,1320,1328,1336,1344,1352,1360,1368,1376,1384,1392,1400,1408,1416,1424,1432,1440,1448,1456,1464,1472,1480,1488,1496,1504,1512,1520,1528,1536,1544,1552,1560,1568,1576,1584,1592,1600,1608,1616,1624,1632,1640,1648,1656,1664,1672,1680,1688,1696,1704,1712,1720,1728,1736,1744,1752,1760,1768,1776,1784,1792,1800,1808,1816,1824,1832,1840,1848,1856,1864,1872,1880,1888,1896,1904,1912,1920,1928,1936,1944,1952,1960,1968,1976,1984,1992,2000,2008,2016,2024,2032,2040,2048,2063,2079,2095,2111,2127,2143,2159,2175,2191,2207,2223,2239,2255,2271,2287,2303,2319,2335,2351,2367,2383,2399,2415,2431,2447,2463,2479,2495,2511,2527,2543,2559,2575,2591,2607,2623,2639,2655,2671,2687,2703,2719,2735,2751,2767,2783,2799,2815,2831,2847,2863,2879,2895,2911,2927,2943,2959,2975,2991,3007,3023,3039,3055,3071,3087,3103,3119,3135,3151,3167,3183,3199,3215,3231,3247,3263,3279,3295,3311,3327,3343,3359,3375,3391,3407,3423,3439,3455,3471,3487,3503,3519,3535,3551,3567,3583,3599,3615,3631,3647,3663,3679,3695,3711,3727,3743,3759,3775,3791,3807,3823,3839,3855,3871,3887,3903,3919,3935,3951,3967,3983,3999,4015,4031,4047,4063,4079}, //tm_value_user[8]
}, //tm_value_user
{
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,32,32,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254}, //tm_value_max_user[1]
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,32,32,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254}, //tm_value_max_user[2]
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,32,32,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254}, //tm_value_max_user[3]
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,32,32,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254}, //tm_value_max_user[4]
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,32,32,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254}, //tm_value_max_user[5]
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,32,32,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254}, //tm_value_max_user[6]
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,32,32,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254}, //tm_value_max_user[7]
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,32,32,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254}, //tm_value_max_user[8]
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,32,32,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254}, //tm_value_max_user[9]
}, //tm_value_max_user
}, //auto_attr
};
static xmedia_isp_awb_ccm g_awb_ccm = {
/* the number of CCM matrixes */
4,
{
{
/* color temperature */
6074,
/* CCM matrix */
{ 0x01D2, 0x80C8, 0x800A, 0x8091, 0x0226, 0x8095, 0x8001, 0x80F6, 0x01F7 },
},
{
/* color temperature */
5086,
/* CCM matrix */
{ 0x01D6, 0x80D0, 0x8006, 0x809D, 0x0229, 0x808C, 0x0003, 0x8116, 0x0213 },
},
{
/* color temperature */
3759,
/* CCM matrix */
{ 0x01F8, 0x80FD, 0x0005, 0x80AA, 0x0214, 0x806A, 0x0010, 0x816F, 0x025F },
},
{
/* color temperature */
2364,
/* CCM matrix */
{ 0x0236, 0x8131, 0x8005, 0x80C4, 0x01D3, 0x800F, 0x8005, 0x8318, 0x041D },
},
{
/* color temperature */
2100,
/* CCM matrix */
{ 0x0100, 0x0000, 0x0000, 0x0000, 0x0100, 0x0000, 0x0000, 0x0000, 0x0100 },
},
{
/* color temperature */
1600,
/* CCM matrix */
{ 0x0100, 0x0000, 0x0000, 0x0000, 0x0100, 0x0000, 0x0000, 0x0000, 0x0100 },
},
{
/* color temperature */
1400,
/* CCM matrix */
{ 0x0100, 0x0000, 0x0000, 0x0000, 0x0100, 0x0000, 0x0000, 0x0000, 0x0100 },
},
},
};
static xmedia_isp_awb_agc_table g_awb_agc_table = {
/* bvalid */
1,
/* 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 */
/* saturation */
{ 128, 128, 128, 128, 124, 120, 116, 112, 108, 104, 100, 94, 90, 90, 90, 90 }
};
static xmedia_isp_awb_ccm g_awb_ccm_wdr = {
/* the number of CCM matrixes */
4,
{
{
/* color temperature */
6074,
/* CCM matrix */
{ 0x01D2, 0x80C8, 0x800A, 0x8091, 0x0226, 0x8095, 0x8001, 0x80F6, 0x01F7 },
},
{
/* color temperature */
5086,
/* CCM matrix */
{ 0x01D6, 0x80D0, 0x8006, 0x809D, 0x0229, 0x808C, 0x0003, 0x8116, 0x0213 },
},
{
/* color temperature */
3759,
/* CCM matrix */
{ 0x01F8, 0x80FD, 0x0005, 0x80AA, 0x0214, 0x806A, 0x0010, 0x816F, 0x025F },
},
{
/* color temperature */
2364,
/* CCM matrix */
{ 0x0236, 0x8131, 0x8005, 0x80C4, 0x01D3, 0x800F, 0x8005, 0x8318, 0x041D },
},
{
/* color temperature */
2100,
/* CCM matrix */
{ 0x0100, 0x0000, 0x0000, 0x0000, 0x0100, 0x0000, 0x0000, 0x0000, 0x0100 },
},
{
/* color temperature */
1600,
/* CCM matrix */
{ 0x0100, 0x0000, 0x0000, 0x0000, 0x0100, 0x0000, 0x0000, 0x0000, 0x0100 },
},
{
/* color temperature */
1400,
/* CCM matrix */
{ 0x0100, 0x0000, 0x0000, 0x0000, 0x0100, 0x0000, 0x0000, 0x0000, 0x0100 },
},
},
};
static xmedia_isp_awb_agc_table g_awb_agc_table_wdr = {
/* bvalid */
1,
/* saturation */
{ 115, 115, 110, 100, 85, 75, 75, 70, 70, 70, 70, 70, 70, 70, 65, 60}
};
#ifdef __cplusplus
}
#endif
#endif