Re-land else-after-returns
[pdfium.git] / core / src / fxcodec / codec / fx_codec_icc.cpp
1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #include "../../../../third_party/lcms2-2.6/include/lcms2.h"
8 #include "../../../include/fxcodec/fx_codec.h"
9 #include "codec_int.h"
10
11 const FX_DWORD N_COMPONENT_LAB = 3;
12 const FX_DWORD N_COMPONENT_GRAY = 1;
13 const FX_DWORD N_COMPONENT_RGB = 3;
14 const FX_DWORD N_COMPONENT_CMYK = 4;
15 const FX_DWORD N_COMPONENT_DEFAULT = 3;
16
17 FX_BOOL MD5ComputeID( const void* buf, FX_DWORD dwSize, uint8_t ID[16] )
18 {
19     return cmsMD5computeIDExt(buf, dwSize, ID);
20 }
21 struct CLcmsCmm  {
22     cmsHTRANSFORM m_hTransform;
23     int                 m_nSrcComponents;
24     int                 m_nDstComponents;
25     FX_BOOL             m_bLab;
26 };
27 extern "C" {
28     int ourHandler(int ErrorCode, const char *ErrorText)
29     {
30         return TRUE;
31     }
32 };
33 FX_BOOL CheckComponents(cmsColorSpaceSignature cs, int nComponents, FX_BOOL bDst)
34 {
35     if (nComponents <= 0 || nComponents > 15) {
36         return FALSE;
37     }
38     switch(cs) {
39         case cmsSigLabData:
40             if (nComponents < 3) {
41                 return FALSE;
42             }
43             break;
44         case cmsSigGrayData:
45             if (bDst && nComponents != 1) {
46                 return FALSE;
47             }
48             if (!bDst && nComponents > 2) {
49                 return FALSE;
50             }
51             break;
52         case cmsSigRgbData:
53             if (bDst && nComponents != 3) {
54                 return FALSE;
55             }
56             break;
57         case cmsSigCmykData:
58             if (bDst && nComponents != 4) {
59                 return FALSE;
60             }
61             break;
62         default:
63             if (nComponents != 3) {
64                 return FALSE;
65             }
66             break;
67     }
68     return TRUE;
69 }
70 int32_t GetCSComponents(cmsColorSpaceSignature cs)
71 {
72     FX_DWORD components;
73     switch (cs) {
74         case cmsSigLabData:
75             components =  N_COMPONENT_LAB;
76             break;
77         case cmsSigGrayData:
78             components =  N_COMPONENT_GRAY;
79             break;
80         case cmsSigRgbData:
81             components =  N_COMPONENT_RGB;
82             break;
83         case cmsSigCmykData:
84             components =  N_COMPONENT_CMYK;
85             break;
86         default:
87             components = N_COMPONENT_DEFAULT;
88             break;
89     }
90     return components;
91 }
92 void* IccLib_CreateTransform(const unsigned char* pSrcProfileData, FX_DWORD dwSrcProfileSize, int32_t& nSrcComponents,
93                              const unsigned char* pDstProfileData, FX_DWORD dwDstProfileSize, int32_t nDstComponents,
94                              int intent, FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT, FX_DWORD dwDstFormat = Icc_FORMAT_DEFAULT)
95 {
96     cmsHPROFILE srcProfile = NULL;
97     cmsHPROFILE dstProfile = NULL;
98     cmsHTRANSFORM hTransform = NULL;
99     CLcmsCmm* pCmm = NULL;
100     nSrcComponents = 0;
101     srcProfile = cmsOpenProfileFromMem((void*)pSrcProfileData, dwSrcProfileSize);
102     if (srcProfile == NULL) {
103         return NULL;
104     }
105     if(pDstProfileData == NULL && dwDstProfileSize == 0 && nDstComponents == 3) {
106         dstProfile = cmsCreate_sRGBProfile();
107     } else {
108         dstProfile = cmsOpenProfileFromMem((void*)pDstProfileData, dwDstProfileSize);
109     }
110     if (dstProfile == NULL) {
111         cmsCloseProfile(srcProfile);
112         return NULL;
113     }
114     int srcFormat;
115     FX_BOOL bLab = FALSE;
116     cmsColorSpaceSignature srcCS = cmsGetColorSpace(srcProfile);
117     nSrcComponents = GetCSComponents(srcCS);
118     if (srcCS == cmsSigLabData) {
119         srcFormat = COLORSPACE_SH(PT_Lab) | CHANNELS_SH(nSrcComponents) | BYTES_SH(0);
120         bLab = TRUE;
121     } else {
122         srcFormat = COLORSPACE_SH(PT_ANY) | CHANNELS_SH(nSrcComponents) | BYTES_SH(1);
123         if (srcCS == cmsSigRgbData && T_DOSWAP(dwSrcFormat)) {
124             srcFormat |= DOSWAP_SH(1);
125         }
126     }
127     cmsColorSpaceSignature dstCS = cmsGetColorSpace(dstProfile);
128     if (!CheckComponents(dstCS, nDstComponents, TRUE)) {
129         cmsCloseProfile(srcProfile);
130         cmsCloseProfile(dstProfile);
131         return NULL;
132     }
133     switch(dstCS) {
134         case cmsSigGrayData:
135             hTransform = cmsCreateTransform(srcProfile, srcFormat, dstProfile, TYPE_GRAY_8, intent, 0);
136             break;
137         case cmsSigRgbData:
138             hTransform = cmsCreateTransform(srcProfile, srcFormat, dstProfile, TYPE_BGR_8, intent, 0);
139             break;
140         case cmsSigCmykData:
141             hTransform = cmsCreateTransform(srcProfile, srcFormat, dstProfile,
142                                             T_DOSWAP(dwDstFormat) ? TYPE_KYMC_8 : TYPE_CMYK_8,
143                                             intent, 0);
144             break;
145         default:
146             break;
147     }
148     if (hTransform == NULL) {
149         cmsCloseProfile(srcProfile);
150         cmsCloseProfile(dstProfile);
151         return NULL;
152     }
153     pCmm = new CLcmsCmm;
154     pCmm->m_nSrcComponents = nSrcComponents;
155     pCmm->m_nDstComponents = nDstComponents;
156     pCmm->m_hTransform = hTransform;
157     pCmm->m_bLab = bLab;
158     cmsCloseProfile(srcProfile);
159     cmsCloseProfile(dstProfile);
160     return pCmm;
161 }
162 void* IccLib_CreateTransform_sRGB(const unsigned char* pProfileData, FX_DWORD dwProfileSize, int32_t& nComponents, int32_t intent, FX_DWORD dwSrcFormat)
163 {
164     return IccLib_CreateTransform(pProfileData, dwProfileSize, nComponents, NULL, 0, 3, intent, dwSrcFormat);
165 }
166 void IccLib_DestroyTransform(void* pTransform)
167 {
168     if (pTransform == NULL) {
169         return;
170     }
171     cmsDeleteTransform(((CLcmsCmm*)pTransform)->m_hTransform);
172     delete (CLcmsCmm*)pTransform;
173 }
174 void IccLib_Translate(void* pTransform, FX_DWORD nSrcComponents, FX_FLOAT* pSrcValues, FX_FLOAT* pDestValues)
175 {
176     if (pTransform == NULL) {
177         return;
178     }
179     CLcmsCmm* p = (CLcmsCmm*)pTransform;
180     uint8_t output[4];
181     if (p->m_bLab) {
182         CFX_FixedBufGrow<double, 16> inputs(nSrcComponents);
183         double* input = inputs;
184         for (FX_DWORD i = 0; i < nSrcComponents; i ++) {
185             input[i] = pSrcValues[i];
186         }
187         cmsDoTransform(p->m_hTransform, input, output, 1);
188     } else {
189         CFX_FixedBufGrow<uint8_t, 16> inputs(nSrcComponents);
190         uint8_t* input = inputs;
191         for (FX_DWORD i = 0; i < nSrcComponents; i ++) {
192             if (pSrcValues[i] > 1.0f) {
193                 input[i] = 255;
194             } else if (pSrcValues[i] < 0) {
195                 input[i] = 0;
196             } else {
197                 input[i] = (int)(pSrcValues[i] * 255.0f);
198             }
199         }
200         cmsDoTransform(p->m_hTransform, input, output, 1);
201     }
202     switch(p->m_nDstComponents) {
203         case 1:
204             pDestValues[0] = output[0] / 255.0f;
205             break;
206         case 3:
207             pDestValues[0] = output[2] / 255.0f;
208             pDestValues[1] = output[1] / 255.0f;
209             pDestValues[2] = output[0] / 255.0f;
210             break;
211         case 4:
212             pDestValues[0] = output[0] / 255.0f;
213             pDestValues[1] = output[1] / 255.0f;
214             pDestValues[2] = output[2] / 255.0f;
215             pDestValues[3] = output[3] / 255.0f;
216             break;
217     }
218 }
219 void IccLib_TranslateImage(void* pTransform, unsigned char* pDest, const unsigned char* pSrc, int32_t pixels)
220 {
221     cmsDoTransform(((CLcmsCmm*)pTransform)->m_hTransform, (void*)pSrc, pDest, pixels);
222 }
223 void* CreateProfile_Gray(double gamma)
224 {
225     cmsCIExyY* D50 = (cmsCIExyY*)cmsD50_xyY();
226     if (!cmsWhitePointFromTemp(D50, 6504)) {
227         return NULL;
228     }
229     cmsToneCurve* curve = cmsBuildGamma(NULL, gamma);
230     if (curve == NULL)  {
231         return NULL;
232     }
233     void* profile = cmsCreateGrayProfile(D50, curve);
234     cmsFreeToneCurve(curve);
235     return profile;
236 }
237 ICodec_IccModule::IccCS GetProfileCSFromHandle(void* pProfile)
238 {
239     if (pProfile == NULL)       {
240         return ICodec_IccModule::IccCS_Unknown;
241     }
242     switch (cmsGetColorSpace(pProfile)) {
243         case cmsSigXYZData:
244             return ICodec_IccModule::IccCS_XYZ;
245         case cmsSigLabData:
246             return ICodec_IccModule::IccCS_Lab;
247         case cmsSigLuvData:
248             return ICodec_IccModule::IccCS_Luv;
249         case cmsSigYCbCrData:
250             return ICodec_IccModule::IccCS_YCbCr;
251         case cmsSigYxyData:
252             return ICodec_IccModule::IccCS_Yxy;
253         case cmsSigRgbData:
254             return ICodec_IccModule::IccCS_Rgb;
255         case cmsSigGrayData:
256             return ICodec_IccModule::IccCS_Gray;
257         case cmsSigHsvData:
258             return ICodec_IccModule::IccCS_Hsv;
259         case cmsSigHlsData:
260             return ICodec_IccModule::IccCS_Hls;
261         case cmsSigCmykData:
262             return ICodec_IccModule::IccCS_Cmyk;
263         case cmsSigCmyData:
264             return ICodec_IccModule::IccCS_Cmy;
265         default:
266             return ICodec_IccModule::IccCS_Unknown;
267     }
268 }
269 ICodec_IccModule::IccCS CCodec_IccModule::GetProfileCS(const uint8_t* pProfileData, FX_DWORD dwProfileSize)
270 {
271     ICodec_IccModule::IccCS cs;
272     cmsHPROFILE hProfile = cmsOpenProfileFromMem((void*)pProfileData, dwProfileSize);
273     if (hProfile == NULL) {
274         return IccCS_Unknown;
275     }
276     cs = GetProfileCSFromHandle(hProfile);
277     if (hProfile)       {
278         cmsCloseProfile(hProfile);
279     }
280     return cs;
281 }
282 ICodec_IccModule::IccCS CCodec_IccModule::GetProfileCS(IFX_FileRead* pFile)
283 {
284     if (pFile == NULL) {
285         return IccCS_Unknown;
286     }
287     ICodec_IccModule::IccCS cs;
288     FX_DWORD dwSize = (FX_DWORD)pFile->GetSize();
289     uint8_t* pBuf = FX_Alloc(uint8_t, dwSize);
290     pFile->ReadBlock(pBuf, 0, dwSize);
291     cs = GetProfileCS(pBuf, dwSize);
292     FX_Free(pBuf);
293     return cs;
294 }
295 FX_DWORD TransferProfileType(void* pProfile, FX_DWORD dwFormat)
296 {
297     cmsColorSpaceSignature cs = cmsGetColorSpace(pProfile);
298     switch (cs) {
299         case cmsSigXYZData:
300             return TYPE_XYZ_16;
301         case cmsSigLabData:
302             return TYPE_Lab_DBL;
303         case cmsSigLuvData:
304             return TYPE_YUV_8;
305         case cmsSigYCbCrData:
306             return TYPE_YCbCr_8;
307         case cmsSigYxyData:
308             return TYPE_Yxy_16;
309         case cmsSigRgbData:
310             return T_DOSWAP(dwFormat) ? TYPE_RGB_8 : TYPE_BGR_8;
311         case cmsSigGrayData:
312             return TYPE_GRAY_8;
313         case cmsSigHsvData:
314             return TYPE_HSV_8;
315         case cmsSigHlsData:
316             return TYPE_HLS_8;
317         case cmsSigCmykData:
318             return T_DOSWAP(dwFormat) ? TYPE_KYMC_8 : TYPE_CMYK_8;
319         case cmsSigCmyData:
320             return TYPE_CMY_8;
321         case cmsSigMCH5Data:
322             return T_DOSWAP(dwFormat) ? TYPE_KYMC5_8 : TYPE_CMYK5_8;
323         case cmsSigMCH6Data:
324             return TYPE_CMYK6_8;
325         case cmsSigMCH7Data:
326             return T_DOSWAP(dwFormat) ? TYPE_KYMC7_8 : TYPE_CMYK7_8;
327         case cmsSigMCH8Data:
328             return T_DOSWAP(dwFormat) ? TYPE_KYMC8_8 : TYPE_CMYK8_8;
329         case cmsSigMCH9Data:
330             return T_DOSWAP(dwFormat) ? TYPE_KYMC9_8 : TYPE_CMYK9_8;
331         case cmsSigMCHAData:
332             return T_DOSWAP(dwFormat) ? TYPE_KYMC10_8 : TYPE_CMYK10_8;
333         case cmsSigMCHBData:
334             return T_DOSWAP(dwFormat) ? TYPE_KYMC11_8 : TYPE_CMYK11_8;
335         case cmsSigMCHCData:
336             return T_DOSWAP(dwFormat) ? TYPE_KYMC12_8 : TYPE_CMYK12_8;
337         default:
338             return 0;
339     }
340 }
341 class CFX_IccProfileCache
342 {
343 public:
344     CFX_IccProfileCache();
345     ~CFX_IccProfileCache();
346     void* m_pProfile;
347     FX_DWORD    m_dwRate;
348 protected:
349     void        Purge();
350 };
351 CFX_IccProfileCache::CFX_IccProfileCache()
352 {
353     m_pProfile = NULL;
354     m_dwRate = 1;
355 }
356 CFX_IccProfileCache::~CFX_IccProfileCache()
357 {
358     if (m_pProfile) {
359         cmsCloseProfile(m_pProfile);
360     }
361 }
362 void CFX_IccProfileCache::Purge()
363 {
364 }
365 class CFX_IccTransformCache
366 {
367 public:
368     CFX_IccTransformCache(CLcmsCmm* pCmm = NULL);
369     ~CFX_IccTransformCache();
370     void*       m_pIccTransform;
371     FX_DWORD            m_dwRate;
372     CLcmsCmm*           m_pCmm;
373 protected:
374     void                        Purge();
375 };
376 CFX_IccTransformCache::CFX_IccTransformCache(CLcmsCmm* pCmm)
377 {
378     m_pIccTransform = NULL;
379     m_dwRate = 1;
380     m_pCmm = pCmm;
381 }
382 CFX_IccTransformCache::~CFX_IccTransformCache()
383 {
384     if (m_pIccTransform) {
385         cmsDeleteTransform(m_pIccTransform);
386     }
387     if (m_pCmm) {
388         FX_Free(m_pCmm);
389     }
390 }
391 void CFX_IccTransformCache::Purge()
392 {
393 }
394 class CFX_ByteStringKey : public CFX_BinaryBuf
395 {
396 public:
397     CFX_ByteStringKey() : CFX_BinaryBuf() {}
398     CFX_ByteStringKey&          operator << (FX_DWORD i);
399 };
400 CFX_ByteStringKey& CFX_ByteStringKey::operator << (FX_DWORD i)
401 {
402     AppendBlock(&i, sizeof(FX_DWORD));
403     return *this;
404 }
405 void* CCodec_IccModule::CreateProfile(ICodec_IccModule::IccParam* pIccParam, Icc_CLASS ic, CFX_BinaryBuf* pTransformKey)
406 {
407     CFX_IccProfileCache* pCache = NULL;
408     CFX_ByteStringKey key;
409     CFX_ByteString text;
410     key << pIccParam->ColorSpace << (pIccParam->dwProfileType | ic << 8);
411     uint8_t ID[16];
412     switch (pIccParam->dwProfileType) {
413         case Icc_PARAMTYPE_NONE:
414             return NULL;
415         case Icc_PARAMTYPE_BUFFER:
416             MD5ComputeID(pIccParam->pProfileData, pIccParam->dwProfileSize, ID);
417             break;
418         case Icc_PARAMTYPE_PARAM:
419             FXSYS_memset(ID, 0, 16);
420             switch (pIccParam->ColorSpace) {
421                 case IccCS_Gray:
422                     text.Format("%lf", pIccParam->Gamma);
423                     break;
424                 default:
425                     ;
426             }
427             MD5ComputeID(text.GetBuffer(0), text.GetLength(), ID);
428             break;
429         default:
430             ;
431     }
432     key.AppendBlock(ID, 16);
433     CFX_ByteString ProfileKey(key.GetBuffer(), key.GetSize());
434     ASSERT(pTransformKey);
435     pTransformKey->AppendBlock(ProfileKey.GetBuffer(0), ProfileKey.GetLength());
436     if (!m_MapProfile.Lookup(ProfileKey, (void*&)pCache)) {
437         pCache = new CFX_IccProfileCache;
438         switch (pIccParam->dwProfileType) {
439             case Icc_PARAMTYPE_BUFFER:
440                 pCache->m_pProfile = cmsOpenProfileFromMem(pIccParam->pProfileData, pIccParam->dwProfileSize);
441                 break;
442             case Icc_PARAMTYPE_PARAM:
443                 switch (pIccParam->ColorSpace) {
444                     case IccCS_Rgb:
445                         pCache->m_pProfile = cmsCreate_sRGBProfile();
446                         break;
447                     case IccCS_Gray:
448                         pCache->m_pProfile = CreateProfile_Gray(pIccParam->Gamma);
449                         break;
450                     default:
451                         break;
452                 }
453                 break;
454             default:
455                 break;
456         }
457         m_MapProfile.SetAt(ProfileKey, pCache);
458     } else {
459         pCache->m_dwRate++;
460     }
461     return pCache->m_pProfile;
462 }
463 void* CCodec_IccModule::CreateTransform(ICodec_IccModule::IccParam* pInputParam,
464         ICodec_IccModule::IccParam* pOutputParam,
465         ICodec_IccModule::IccParam* pProofParam,
466         FX_DWORD dwIntent, FX_DWORD dwFlag, FX_DWORD dwPrfIntent, FX_DWORD dwPrfFlag)
467 {
468     CLcmsCmm* pCmm = NULL;
469     ASSERT(pInputParam && pOutputParam);
470     CFX_ByteStringKey key;
471     void* pInputProfile = CreateProfile(pInputParam, Icc_CLASS_INPUT, &key);
472     if (pInputProfile == NULL)  {
473         return NULL;
474     }
475     void* pOutputProfile = CreateProfile(pOutputParam, Icc_CLASS_OUTPUT, &key);
476     if (pOutputProfile == NULL) {
477         return NULL;
478     }
479     FX_DWORD dwInputProfileType = TransferProfileType(pInputProfile, pInputParam->dwFormat);
480     FX_DWORD dwOutputProfileType = TransferProfileType(pOutputProfile, pOutputParam->dwFormat);
481     if (dwInputProfileType == 0 || dwOutputProfileType == 0) {
482         return NULL;
483     }
484     void* pProofProfile = NULL;
485     if (pProofParam) {
486         pProofProfile = CreateProfile(pProofParam, Icc_CLASS_PROOF, &key);
487     }
488     key << dwInputProfileType << dwOutputProfileType << dwIntent << dwFlag << (pProofProfile != NULL) << dwPrfIntent << dwPrfFlag;
489     CFX_ByteStringC TransformKey(key.GetBuffer(), key.GetSize());
490     CFX_IccTransformCache* pTransformCache;
491     if (!m_MapTranform.Lookup(TransformKey, (void*&)pTransformCache)) {
492         pCmm = FX_Alloc(CLcmsCmm, 1);
493         pCmm->m_nSrcComponents = T_CHANNELS(dwInputProfileType);
494         pCmm->m_nDstComponents = T_CHANNELS(dwOutputProfileType);
495         pCmm->m_bLab = T_COLORSPACE(pInputParam->dwFormat) == PT_Lab;
496         pTransformCache = new CFX_IccTransformCache(pCmm);
497         if (pProofProfile) {
498             pTransformCache->m_pIccTransform = cmsCreateProofingTransform(pInputProfile, dwInputProfileType, pOutputProfile, dwOutputProfileType,
499                                                pProofProfile, dwIntent, dwPrfIntent, dwPrfFlag);
500         } else {
501             pTransformCache->m_pIccTransform = cmsCreateTransform(pInputProfile, dwInputProfileType, pOutputProfile, dwOutputProfileType,
502                                                dwIntent, dwFlag);
503         }
504         pCmm->m_hTransform = pTransformCache->m_pIccTransform;
505         m_MapTranform.SetAt(TransformKey, pTransformCache);
506     } else {
507         pTransformCache->m_dwRate++;
508     }
509     return pTransformCache->m_pCmm;
510 }
511 CCodec_IccModule::~CCodec_IccModule()
512 {
513     FX_POSITION pos = m_MapProfile.GetStartPosition();
514     CFX_ByteString key;
515     CFX_IccProfileCache* pProfileCache;
516     while (pos) {
517         m_MapProfile.GetNextAssoc(pos, key, (void*&)pProfileCache);
518         delete pProfileCache;
519     }
520     pos = m_MapTranform.GetStartPosition();
521     CFX_IccTransformCache* pTransformCache;
522     while (pos) {
523         m_MapTranform.GetNextAssoc(pos, key, (void*&)pTransformCache);
524         delete pTransformCache;
525     }
526 }
527 void* CCodec_IccModule::CreateTransform_sRGB(const uint8_t* pProfileData, FX_DWORD dwProfileSize, int32_t& nComponents, int32_t intent, FX_DWORD dwSrcFormat)
528 {
529     return IccLib_CreateTransform_sRGB(pProfileData, dwProfileSize, nComponents, intent, dwSrcFormat);
530 }
531 void* CCodec_IccModule::CreateTransform_CMYK(const uint8_t* pSrcProfileData, FX_DWORD dwSrcProfileSize, int32_t& nSrcComponents,
532     const uint8_t* pDstProfileData, FX_DWORD dwDstProfileSize, int32_t intent,
533         FX_DWORD dwSrcFormat , FX_DWORD dwDstFormat)
534 {
535     return IccLib_CreateTransform(pSrcProfileData, dwSrcProfileSize, nSrcComponents,
536                                   pDstProfileData, dwDstProfileSize, 4, intent, dwSrcFormat, dwDstFormat);
537 }
538 void CCodec_IccModule::DestroyTransform(void* pTransform)
539 {
540     IccLib_DestroyTransform(pTransform);
541 }
542 void CCodec_IccModule::Translate(void* pTransform, FX_FLOAT* pSrcValues, FX_FLOAT* pDestValues)
543 {
544     IccLib_Translate(pTransform, m_nComponents, pSrcValues, pDestValues);
545 }
546 void CCodec_IccModule::TranslateScanline(void* pTransform, uint8_t* pDest, const uint8_t* pSrc, int32_t pixels)
547 {
548     IccLib_TranslateImage(pTransform, pDest, pSrc, pixels);
549 }
550 const uint8_t g_CMYKSamples[81 * 81 * 3] = {
551     255, 255, 255, 225, 226, 228, 199, 200, 202, 173, 174, 178, 147, 149, 152, 123, 125, 128,  99, 99, 102,  69, 70, 71,  34, 30, 31,
552     255, 253, 229, 226, 224, 203, 200, 199, 182, 173, 173, 158, 149, 148, 135, 125, 124, 113,  99, 99, 90,  70, 69, 63,  33, 29, 24,
553     255, 251, 204, 228, 223, 182, 201, 198, 163, 174, 172, 142, 150, 147, 122, 125, 123, 101,  99, 98, 80,  70, 68, 54,  32, 28, 16,
554     255, 249, 179, 230, 222, 160, 203, 197, 144, 174, 170, 124, 150, 145, 105, 125, 122, 88,  99, 97, 69,  70, 68, 46,  31, 28,  6,
555     255, 247, 154, 229, 220, 138, 203, 195, 122, 176, 169, 107, 150, 145, 91, 125, 121, 74, 100, 96, 57,  70, 67, 35,  29, 26,  0,
556     255, 246, 128, 231, 217, 114, 205, 194, 101, 176, 167, 88, 150, 144, 75, 125, 120, 60, 100, 96, 44,  70, 66, 24,  28, 26,  0,
557     255, 244, 96, 231, 217, 87, 203, 192, 78, 175, 167, 66, 150, 143, 56, 125, 119, 43, 100, 95, 29,  69, 66,  7,  26, 26,  0,
558     255, 243, 51, 232, 215, 51, 204, 191, 43, 176, 165, 38, 150, 142, 28, 125, 118, 17,  99, 94,  0,  68, 65,  0,  24, 25,  0,
559     255, 241,  0, 231, 215,  0, 203, 190,  0, 176, 164,  0, 150, 141,  0, 126, 117,  0,  99, 93,  0,  68, 65,  0,  24, 25,  0,
560     252, 228, 238, 222, 201, 211, 197, 180, 190, 171, 156, 166, 147, 133, 143, 123, 111, 119,  99, 88, 94,  71, 61, 66,  34, 22, 26,
561     254, 226, 213, 224, 201, 191, 199, 179, 171, 172, 155, 148, 147, 133, 128, 123, 110, 106,  98, 87, 83,  70, 59, 57,  33, 21, 18,
562     254, 224, 191, 224, 199, 172, 200, 177, 153, 173, 154, 133, 147, 132, 115, 123, 109, 94,  98, 86, 74,  70, 59, 49,  32, 21,  9,
563     255, 222, 168, 227, 198, 150, 200, 175, 135, 173, 153, 118, 148, 130, 99, 123, 109, 82,  98, 86, 64,  69, 58, 40,  31, 19,  0,
564     255, 221, 145, 227, 196, 129, 201, 174, 115, 173, 151, 99, 148, 129, 85, 124, 108, 69,  98, 85, 52,  69, 58, 30,  30, 19,  0,
565     255, 219, 121, 227, 195, 109, 201, 174, 97, 174, 150, 83, 148, 129, 70, 124, 107, 55,  98, 84, 40,  69, 58, 19,  28, 18,  0,
566     255, 218, 92, 229, 194, 82, 202, 173, 75, 174, 150, 63, 149, 128, 51, 124, 106, 39,  98, 84, 24,  68, 57,  3,  26, 18,  0,
567     255, 217, 54, 228, 193, 52, 201, 172, 46, 174, 148, 36, 148, 127, 27, 123, 105, 14,  98, 83,  0,  68, 56,  0,  25, 18,  0,
568     255, 216,  0, 229, 192,  2, 202, 171,  4, 173, 148,  0, 148, 126,  0, 124, 105,  0,  98, 83,  0,  68, 56,  0,  24, 17,  0,
569     249, 204, 223, 219, 181, 199, 195, 160, 178, 170, 140, 156, 146, 119, 134, 123, 99, 112,  98, 77, 88,  70, 52, 61,  34, 11, 20,
570     250, 201, 200, 221, 180, 178, 197, 159, 161, 171, 139, 139, 147, 119, 120, 123, 98, 99,  98, 77, 78,  69, 51, 52,  34, 11, 10,
571     252, 201, 180, 223, 179, 162, 197, 159, 144, 170, 138, 125, 146, 117, 107, 122, 97, 89,  98, 76, 69,  69, 50, 44,  32, 11,  2,
572     252, 199, 158, 222, 177, 143, 199, 158, 127, 171, 137, 110, 147, 117, 93, 122, 96, 76,  97, 75, 58,  69, 50, 36,  32, 10,  0,
573     253, 198, 137, 223, 177, 123, 198, 156, 110, 171, 136, 95, 146, 116, 80, 122, 96, 65,  97, 75, 47,  69, 50, 25,  30, 10,  0,
574     254, 197, 115, 225, 175, 104, 198, 156, 92, 172, 135, 79, 147, 115, 66, 123, 95, 52,  98, 74, 37,  69, 49, 15,  29, 10,  0,
575     254, 196, 89, 224, 175, 80, 199, 154, 70, 172, 134, 59, 146, 114, 48, 122, 95, 36,  97, 74, 21,  68, 49,  0,  27,  9,  0,
576     255, 195, 57, 225, 173, 52, 198, 154, 44, 172, 133, 36, 147, 113, 26, 123, 94, 14,  98, 74,  0,  68, 49,  0,  26, 10,  0,
577     254, 194, 15, 225, 172, 12, 198, 153,  7, 172, 132,  3, 146, 113,  0, 123, 93,  0,  98, 73,  0,  68, 49,  0,  26,  9,  0,
578     246, 178, 209, 218, 159, 186, 194, 140, 166, 168, 122, 145, 144, 104, 125, 121, 85, 103,  97, 65, 81,  69, 41, 55,  34,  0, 12,
579     248, 176, 186, 219, 157, 166, 195, 139, 149, 168, 121, 130, 144, 103, 111, 121, 85, 91,  97, 65, 71,  69, 41, 46,  34,  0,  4,
580     249, 175, 168, 220, 156, 150, 196, 139, 135, 169, 121, 116, 144, 103, 100, 122, 84, 83,  98, 65, 63,  70, 41, 39,  33,  0,  0,
581     249, 175, 148, 220, 155, 133, 196, 138, 119, 169, 120, 103, 145, 101, 87, 121, 83, 71,  97, 65, 54,  69, 41, 31,  32,  0,  0,
582     249, 173, 128, 222, 154, 115, 195, 137, 102, 170, 119, 88, 145, 101, 74, 122, 83, 59,  97, 64, 43,  68, 40, 20,  30,  0,  0,
583     250, 172, 108, 221, 154, 98, 195, 136, 86, 170, 118, 73, 145, 100, 61, 122, 82, 48,  97, 63, 32,  69, 40, 11,  28,  0,  0,
584     250, 171, 85, 221, 153, 76, 196, 136, 67, 170, 117, 56, 145, 99, 44, 121, 82, 33,  97, 63, 17,  68, 40,  0,  28,  0,  0,
585     251, 171, 58, 222, 152, 50, 197, 135, 43, 169, 117, 34, 146, 99, 25, 121, 81, 10,  96, 63,  0,  68, 40,  0,  27,  0,  0,
586     250, 170, 26, 222, 151, 19, 196, 134, 13, 169, 116,  4, 145, 99,  0, 122, 81,  0,  97, 63,  0,  67, 40,  0,  26,  0,  0,
587     244, 153, 194, 215, 136, 173, 192, 121, 155, 167, 104, 135, 143, 89, 115, 121, 72, 96,  97, 54, 75,  70, 31, 49,  34,  0,  6,
588     245, 153, 173, 216, 136, 155, 192, 120, 138, 167, 104, 121, 144, 88, 103, 121, 71, 85,  97, 54, 66,  69, 31, 42,  34,  0,  0,
589     246, 152, 157, 217, 135, 140, 193, 120, 126, 167, 103, 109, 143, 88, 92, 121, 72, 76,  97, 54, 58,  69, 31, 35,  33,  0,  0,
590     245, 150, 139, 218, 134, 125, 193, 119, 111, 167, 103, 96, 144, 87, 80, 121, 71, 66,  96, 53, 49,  68, 31, 26,  32,  0,  0,
591     246, 151, 122, 218, 133, 108, 194, 118, 96, 168, 102, 81, 144, 86, 69, 120, 71, 55,  95, 53, 39,  68, 30, 17,  31,  0,  0,
592     248, 150, 103, 218, 133, 91, 193, 118, 81, 168, 102, 69, 143, 86, 56, 120, 70, 43,  96, 53, 28,  68, 31,  6,  29,  0,  0,
593     247, 149, 81, 218, 132, 72, 194, 117, 62, 168, 101, 52, 144, 86, 42, 121, 70, 29,  96, 52, 13,  68, 30,  0,  28,  0,  0,
594     247, 148, 55, 219, 131, 50, 194, 117, 43, 167, 101, 32, 144, 85, 22, 120, 69,  8,  96, 52,  0,  67, 30,  0,  27,  0,  0,
595     247, 147, 29, 218, 131, 24, 194, 116, 20, 168, 100, 11, 144, 85,  0, 120, 69,  0,  96, 52,  0,  67, 30,  0,  26,  0,  0,
596     242, 130, 179, 214, 114, 160, 190, 101, 143, 166, 87, 125, 143, 72, 107, 120, 58, 88,  96, 42, 68,  69, 17, 44,  35,  0,  0,
597     243, 129, 161, 215, 114, 143, 191, 101, 128, 166, 87, 113, 143, 73, 96, 120, 58, 79,  96, 41, 60,  69, 18, 37,  33,  0,  0,
598     243, 129, 146, 216, 114, 130, 192, 101, 117, 166, 87, 101, 143, 72, 86, 121, 58, 69,  96, 42, 52,  69, 18, 29,  31,  0,  0,
599     243, 128, 130, 216, 114, 115, 191, 101, 102, 165, 86, 88, 142, 72, 75, 120, 58, 60,  95, 42, 43,  68, 19, 21,  30,  0,  0,
600     244, 127, 112, 217, 113, 101, 192, 99, 89, 166, 85, 75, 142, 72, 63, 119, 57, 50,  96, 41, 35,  68, 19, 13,  30,  0,  0,
601     244, 127, 96, 216, 112, 86, 191, 99, 75, 166, 86, 64, 143, 72, 52, 120, 57, 40,  95, 41, 24,  67, 20,  1,  29,  0,  0,
602     245, 126, 77, 216, 113, 68, 191, 100, 59, 166, 85, 49, 142, 71, 38, 119, 57, 26,  95, 41, 10,  67, 20,  0,  28,  0,  0,
603     244, 126, 55, 216, 112, 48, 191, 99, 40, 166, 85, 31, 143, 71, 20, 119, 57,  6,  95, 42,  0,  67, 20,  0,  28,  0,  0,
604     245, 126, 33, 217, 112, 26, 192, 99, 22, 166, 84, 11, 142, 70,  0, 119, 57,  0,  95, 41,  0,  66, 20,  0,  27,  0,  0,
605     241, 102, 167, 213, 90, 149, 189, 79, 133, 165, 66, 115, 141, 54, 98, 119, 41, 81,  96, 25, 63,  69,  0, 38,  30,  0,  0,
606     241, 102, 149, 213, 90, 133, 189, 79, 119, 165, 66, 103, 142, 55, 88, 119, 41, 71,  96, 25, 53,  69,  0, 31,  28,  0,  0,
607     241, 102, 135, 214, 90, 121, 190, 79, 108, 165, 66, 92, 141, 55, 78, 119, 42, 63,  96, 26, 46,  69,  0, 24,  28,  0,  0,
608     241, 101, 120, 214, 90, 107, 189, 79, 95, 165, 67, 83, 141, 54, 68, 118, 41, 54,  95, 27, 39,  68,  0, 16,  27,  0,  0,
609     241, 102, 106, 213, 90, 93, 189, 78, 82, 164, 67, 70, 141, 55, 58, 118, 42, 45,  94, 27, 29,  67,  2,  6,  27,  0,  0,
610     242, 101, 90, 214, 89, 79, 190, 79, 69, 166, 67, 59, 141, 55, 47, 118, 41, 35,  95, 27, 19,  67,  3,  0,  26,  0,  0,
611     242, 102, 72, 213, 89, 63, 191, 79, 56, 164, 67, 45, 141, 55, 34, 118, 42, 22,  94, 28,  6,  67,  3,  0,  26,  0,  0,
612     242, 100, 51, 214, 89, 45, 190, 78, 38, 164, 67, 30, 141, 55, 18, 118, 42,  3,  95, 28,  0,  66,  4,  0,  26,  0,  0,
613     243, 100, 33, 214, 90, 27, 190, 78, 22, 165, 67, 13, 141, 55,  0, 118, 43,  0,  94, 29,  0,  66,  5,  0,  26,  0,  0,
614     237, 69, 153, 211, 58, 135, 187, 51, 121, 163, 41, 105, 141, 28, 90, 118, 15, 73,  96,  0, 56,  68,  0, 33,  25,  0,  0,
615     239, 67, 137, 212, 60, 123, 189, 50, 110, 163, 41, 94, 141, 29, 79, 118, 17, 65,  95,  0, 48,  69,  0, 26,  25,  0,  0,
616     240, 69, 124, 211, 60, 111, 188, 50, 98, 163, 42, 85, 141, 31, 72, 118, 18, 57,  94,  0, 41,  68,  0, 19,  25,  0,  0,
617     240, 70, 112, 212, 61, 99, 188, 52, 87, 163, 41, 74, 140, 31, 62, 118, 20, 48,  94,  2, 32,  68,  0, 11,  24,  0,  0,
618     239, 70, 98, 212, 62, 86, 188, 53, 77, 164, 42, 64, 140, 32, 52, 118, 20, 40,  94,  3, 24,  67,  0,  3,  23,  0,  0,
619     239, 71, 85, 212, 61, 74, 187, 53, 65, 163, 44, 54, 140, 34, 43, 118, 22, 30,  95,  3, 14,  67,  0,  0,  23,  0,  0,
620     239, 70, 67, 212, 62, 59, 188, 53, 51, 163, 45, 42, 141, 34, 31, 117, 22, 17,  94,  5,  2,  66,  0,  0,  23,  0,  0,
621     239, 71, 50, 213, 62, 43, 188, 54, 37, 164, 45, 28, 139, 34, 16, 117, 22,  2,  94,  7,  0,  65,  0,  0,  23,  0,  0,
622     240, 71, 34, 212, 63, 29, 189, 54, 24, 163, 46, 15, 139, 36,  2, 117, 25,  0,  94,  8,  0,  66,  0,  0,  23,  0,  0,
623     237,  0, 140, 209,  0, 124, 186,  0, 112, 162,  0, 97, 141,  0, 82, 118,  0, 67,  95,  0, 49,  68,  0, 27,  20,  0,  0,
624     237,  0, 126, 210,  0, 113, 187,  0, 99, 163,  0, 86, 139,  0, 72, 118,  0, 58,  95,  0, 42,  67,  0, 20,  20,  0,  0,
625     237,  1, 114, 209,  1, 102, 187,  0, 90, 163,  0, 78, 139,  0, 64, 118,  0, 50,  95,  0, 35,  67,  0, 13,  20,  0,  0,
626     236, 16, 102, 209,  7, 91, 186,  0, 80, 162,  0, 68, 139,  0, 56, 117,  0, 43,  94,  0, 27,  67,  0,  6,  20,  0,  0,
627     238, 15, 89, 209, 13, 79, 186,  6, 69, 162,  0, 58, 139,  0, 47, 117,  0, 34,  93,  0, 20,  66,  0,  2,  20,  0,  0,
628     237, 20, 78, 210, 12, 68, 187,  4, 59, 163,  0, 49, 139,  0, 38, 116,  0, 26,  94,  0, 11,  66,  0,  0,  20,  0,  0,
629     237, 25, 64, 210, 18, 56, 186, 11, 48, 162,  4, 39, 138,  0, 27, 117,  0, 14,  93,  0,  0,  66,  0,  0,  20,  0,  0,
630     238, 25, 48, 210, 22, 43, 186, 15, 35, 162,  8, 26, 140,  0, 14, 117,  0,  0,  93,  0,  0,  65,  0,  0,  20,  0,  0,
631     238, 28, 35, 210, 21, 30, 187, 15, 24, 162,  8, 16, 139,  1,  2, 117,  0,  0,  93,  0,  0,  65,  0,  0,  22,  0,  0,
632     219, 242, 252, 195, 214, 225, 172, 191, 201, 148, 165, 175, 127, 142, 150, 106, 119, 126,  84, 95, 101,  58, 66, 72,  24, 27, 32,
633     222, 239, 226, 196, 213, 202, 173, 189, 180, 150, 165, 158, 129, 141, 135, 107, 118, 113,  85, 94, 90,  58, 66, 63,  21, 26, 24,
634     223, 237, 203, 198, 211, 182, 175, 188, 163, 152, 164, 141, 129, 140, 121, 107, 117, 101,  85, 93, 80,  58, 64, 54,  21, 26, 18,
635     226, 236, 179, 201, 210, 160, 177, 187, 143, 153, 162, 125, 130, 139, 106, 108, 116, 89,  85, 92, 69,  58, 64, 45,  20, 25,  8,
636     227, 234, 153, 201, 208, 139, 178, 185, 124, 154, 161, 107, 131, 138, 91, 108, 115, 75,  85, 91, 58,  58, 63, 35,  17, 25,  0,
637     229, 233, 130, 203, 207, 116, 178, 184, 104, 154, 160, 90, 131, 137, 76, 109, 114, 62,  85, 90, 46,  58, 63, 25,  16, 24,  0,
638     230, 231, 100, 202, 205, 90, 179, 183, 80, 154, 159, 69, 131, 136, 57, 109, 113, 46,  86, 90, 32,  58, 63, 10,  14, 24,  0,
639     230, 230, 65, 204, 204, 58, 180, 182, 52, 155, 157, 44, 132, 135, 35, 110, 113, 24,  86, 89,  9,  57, 62,  0,  11, 24,  0,
640     232, 230, 19, 204, 204, 19, 180, 181, 17, 155, 157, 10, 131, 134,  2, 109, 112,  0,  85, 89,  0,  57, 62,  0,  10, 23,  0,
641     218, 216, 236, 194, 192, 211, 172, 171, 188, 149, 149, 164, 128, 127, 141, 106, 106, 119,  84, 84, 94,  59, 57, 66,  25, 18, 26,
642     221, 214, 211, 196, 191, 190, 174, 170, 170, 150, 148, 148, 128, 126, 127, 107, 105, 106,  85, 83, 84,  59, 56, 58,  23, 17, 18,
643     222, 213, 190, 197, 189, 170, 175, 169, 153, 151, 147, 133, 129, 126, 113, 108, 105, 94,  85, 82, 74,  59, 56, 49,  22, 17, 11,
644     224, 211, 168, 199, 188, 151, 175, 168, 135, 152, 146, 117, 129, 124, 99, 107, 103, 82,  84, 82, 64,  59, 55, 41,  21, 17,  1,
645     224, 210, 145, 199, 187, 130, 176, 166, 117, 152, 145, 101, 129, 123, 86, 107, 103, 70,  85, 81, 53,  58, 55, 31,  19, 17,  0,
646     227, 208, 123, 200, 186, 110, 177, 165, 98, 153, 143, 84, 130, 122, 70, 108, 102, 57,  85, 80, 41,  58, 54, 20,  18, 16,  0,
647     227, 208, 97, 202, 185, 86, 177, 164, 77, 153, 142, 65, 130, 122, 54, 108, 101, 42,  85, 80, 27,  58, 54,  7,  16, 16,  0,
648     228, 206, 66, 202, 184, 58, 178, 163, 50, 154, 141, 42, 131, 121, 33, 109, 101, 21,  86, 79,  5,  58, 54,  0,  13, 16,  0,
649     228, 206, 29, 202, 183, 25, 178, 163, 20, 154, 141, 15, 131, 121,  5, 108, 100,  0,  85, 79,  0,  58, 53,  0,  13, 16,  0,
650     217, 193, 221, 193, 172, 198, 172, 153, 178, 149, 133, 154, 128, 114, 132, 107, 94, 111,  85, 74, 89,  59, 49, 61,  25,  8, 22,
651     219, 191, 198, 195, 171, 178, 173, 153, 159, 149, 132, 139, 128, 113, 119, 107, 94, 100,  85, 73, 79,  59, 48, 52,  25,  7, 14,
652     221, 191, 180, 196, 170, 160, 174, 152, 144, 150, 132, 125, 129, 113, 107, 107, 93, 89,  85, 73, 69,  59, 48, 45,  23,  7,  4,
653     222, 189, 159, 197, 169, 142, 174, 151, 127, 151, 131, 110, 129, 112, 94, 108, 93, 78,  85, 72, 60,  58, 47, 37,  22,  7,  0,
654     223, 188, 138, 197, 168, 123, 175, 150, 109, 151, 130, 95, 130, 111, 81, 108, 92, 65,  85, 72, 49,  59, 47, 27,  21,  7,  0,
655     224, 187, 118, 198, 167, 105, 176, 149, 93, 152, 129, 79, 130, 110, 68, 108, 91, 54,  85, 71, 38,  59, 47, 17,  18,  7,  0,
656     224, 187, 93, 199, 166, 83, 176, 148, 73, 152, 128, 62, 129, 109, 51, 108, 90, 39,  85, 71, 25,  58, 46,  3,  16,  8,  0,
657     226, 186, 64, 200, 165, 57, 177, 147, 50, 153, 127, 40, 130, 108, 31, 108, 90, 19,  85, 70,  3,  58, 46,  0,  16,  8,  0,
658     227, 185, 35, 200, 165, 30, 176, 146, 25, 152, 127, 18, 130, 108,  7, 108, 89,  0,  85, 70,  0,  57, 46,  0,  14,  8,  0,
659     216, 169, 205, 192, 150, 184, 171, 134, 164, 149, 116, 144, 128, 99, 124, 107, 81, 103,  85, 63, 81,  60, 39, 55,  26,  0, 15,
660     217, 168, 186, 193, 150, 165, 172, 134, 149, 150, 116, 130, 128, 99, 111, 107, 81, 92,  85, 62, 72,  59, 39, 47,  25,  0,  6,
661     219, 168, 168, 194, 149, 150, 173, 133, 135, 150, 116, 117, 128, 98, 99, 107, 80, 82,  86, 62, 63,  59, 38, 39,  24,  0,  0,
662     219, 166, 148, 195, 149, 133, 173, 133, 119, 150, 115, 103, 128, 98, 88, 107, 80, 72,  85, 61, 54,  59, 38, 32,  23,  0,  0,
663     220, 166, 129, 196, 148, 116, 174, 132, 103, 151, 114, 89, 129, 97, 75, 107, 79, 60,  85, 61, 44,  59, 38, 22,  21,  0,  0,
664     222, 164, 110, 197, 147, 99, 175, 131, 87, 151, 113, 75, 129, 96, 63, 107, 79, 49,  85, 61, 33,  58, 38, 12,  19,  0,  0,
665     222, 164, 88, 197, 146, 79, 174, 130, 69, 151, 113, 58, 129, 95, 47, 107, 78, 35,  85, 60, 20,  58, 38,  0,  18,  0,  0,
666     223, 164, 63, 198, 145, 55, 175, 129, 48, 151, 112, 39, 129, 95, 29, 107, 78, 16,  85, 60,  1,  58, 38,  0,  17,  0,  0,
667     223, 163, 36, 198, 145, 32, 174, 129, 26, 151, 111, 17, 129, 95,  7, 107, 78,  0,  84, 60,  0,  57, 37,  0,  15,  0,  0,
668     215, 147, 192, 191, 130, 172, 170, 116, 153, 148, 100, 133, 127, 85, 115, 107, 69, 96,  85, 51, 75,  60, 28, 50,  25,  0,  8,
669     217, 146, 173, 192, 130, 154, 171, 115, 138, 149, 100, 121, 128, 84, 103, 107, 68, 85,  85, 51, 66,  60, 28, 42,  25,  0,  0,
670     217, 145, 157, 193, 129, 140, 173, 115, 125, 149, 100, 109, 128, 84, 92, 107, 68, 76,  85, 51, 58,  59, 28, 35,  23,  0,  0,
671     218, 145, 140, 193, 129, 125, 172, 114, 110, 149, 99, 96, 128, 83, 81, 107, 67, 65,  84, 51, 49,  59, 29, 27,  22,  0,  0,
672     219, 144, 121, 194, 128, 108, 172, 113, 96, 149, 98, 83, 128, 83, 69, 107, 68, 55,  85, 50, 40,  59, 28, 18,  20,  0,  0,
673     220, 143, 104, 195, 128, 93, 173, 114, 82, 150, 98, 69, 127, 82, 58, 107, 67, 45,  85, 50, 30,  59, 28,  7,  19,  0,  0,
674     220, 143, 84, 195, 127, 74, 173, 113, 65, 149, 97, 55, 128, 82, 44, 106, 67, 32,  84, 50, 16,  58, 28,  0,  18,  0,  0,
675     221, 142, 62, 196, 126, 53, 173, 112, 46, 150, 97, 37, 128, 82, 26, 107, 66, 14,  84, 50,  0,  58, 28,  0,  16,  0,  0,
676     222, 142, 38, 196, 126, 34, 174, 112, 27, 150, 96, 17, 128, 82,  6, 106, 66,  0,  84, 50,  0,  57, 29,  0,  16,  0,  0,
677     214, 123, 179, 191, 110, 159, 169, 98, 143, 147, 84, 124, 126, 70, 106, 107, 55, 88,  85, 39, 69,  60, 15, 45,  23,  0,  2,
678     216, 123, 161, 192, 110, 144, 170, 98, 129, 148, 84, 112, 127, 70, 95, 107, 55, 79,  85, 39, 61,  60, 15, 37,  20,  0,  0,
679     217, 122, 145, 192, 110, 130, 170, 97, 116, 149, 84, 101, 127, 70, 85, 106, 55, 70,  85, 39, 53,  59, 16, 30,  19,  0,  0,
680     217, 123, 131, 192, 109, 116, 171, 96, 103, 149, 83, 89, 127, 70, 75, 106, 55, 60,  85, 40, 45,  59, 16, 23,  17,  0,  0,
681     217, 122, 114, 193, 109, 101, 172, 96, 91, 149, 82, 77, 128, 69, 64, 106, 55, 50,  84, 39, 35,  59, 17, 14,  17,  0,  0,
682     218, 122, 98, 194, 108, 87, 171, 96, 77, 149, 82, 65, 127, 69, 52, 106, 55, 40,  84, 40, 25,  59, 18,  3,  15,  0,  0,
683     219, 122, 80, 193, 108, 70, 172, 95, 61, 149, 82, 51, 127, 69, 40, 106, 55, 28,  84, 39, 12,  58, 17,  0,  13,  0,  0,
684     219, 121, 59, 194, 108, 52, 172, 96, 44, 149, 82, 35, 127, 68, 24, 106, 55, 11,  84, 40,  0,  57, 18,  0,  13,  0,  0,
685     219, 121, 40, 193, 108, 33, 172, 95, 26, 149, 81, 19, 128, 68,  6, 106, 54,  0,  84, 39,  0,  57, 18,  0,  13,  0,  0,
686     213, 99, 165, 189, 87, 148, 169, 76, 132, 147, 64, 115, 126, 52, 98, 106, 39, 81,  85, 23, 63,  60,  0, 39,  16,  0,  0,
687     214, 98, 149, 191, 87, 133, 170, 76, 119, 148, 65, 103, 127, 53, 88, 106, 39, 72,  85, 24, 55,  60,  0, 32,  15,  0,  0,
688     215, 99, 136, 191, 87, 121, 170, 77, 108, 148, 65, 93, 126, 53, 79, 106, 40, 64,  85, 24, 47,  59,  0, 25,  14,  0,  0,
689     215, 99, 121, 192, 87, 108, 170, 77, 96, 148, 65, 82, 126, 53, 69, 106, 40, 55,  85, 25, 39,  59,  0, 18,  13,  0,  0,
690     216, 99, 106, 191, 87, 95, 170, 76, 83, 148, 65, 71, 126, 53, 58, 106, 41, 45,  85, 26, 30,  59,  0,  8,  11,  0,  0,
691     216, 98, 91, 192, 88, 82, 170, 77, 71, 148, 65, 60, 127, 53, 48, 105, 41, 36,  83, 26, 21,  58,  1,  2,  11,  0,  0,
692     217, 99, 75, 192, 87, 66, 170, 76, 57, 148, 65, 47, 126, 53, 36, 105, 41, 24,  83, 26,  8,  57,  2,  0,   9,  0,  0,
693     217, 98, 57, 192, 87, 49, 171, 77, 41, 147, 65, 32, 126, 53, 21, 105, 41,  8,  84, 27,  0,  57,  3,  0,   9,  0,  0,
694     217, 98, 40, 193, 87, 34, 171, 76, 27, 148, 65, 19, 126, 53,  6, 105, 41,  0,  83, 27,  0,  57,  4,  0,   9,  0,  0,
695     211, 67, 152, 189, 58, 136, 168, 50, 122, 147, 39, 105, 127, 28, 89, 106, 14, 74,  85,  0, 56,  59,  0, 33,   9,  0,  0,
696     213, 68, 138, 190, 59, 123, 169, 51, 109, 148, 40, 95, 126, 30, 80, 106, 16, 65,  85,  0, 48,  59,  0, 27,   9,  0,  0,
697     214, 69, 125, 190, 59, 111, 168, 51, 99, 148, 41, 86, 126, 31, 72, 106, 18, 58,  85,  0, 41,  59,  0, 20,   7,  0,  0,
698     215, 70, 112, 190, 61, 100, 169, 52, 88, 147, 42, 76, 126, 32, 63, 106, 19, 49,  84,  1, 34,  58,  0, 13,   7,  0,  0,
699     214, 70, 99, 190, 62, 88, 169, 53, 77, 147, 43, 65, 125, 32, 53, 106, 20, 40,  84,  3, 26,  58,  0,  4,   7,  0,  0,
700     214, 71, 86, 190, 61, 75, 169, 53, 65, 146, 43, 54, 126, 33, 44, 105, 21, 31,  83,  4, 17,  57,  0,  0,   7,  0,  0,
701     215, 71, 71, 191, 62, 62, 169, 53, 53, 147, 44, 44, 126, 34, 33, 105, 22, 20,  83,  5,  4,  57,  0,  0,   7,  0,  0,
702     215, 71, 54, 191, 62, 47, 169, 54, 39, 147, 44, 30, 126, 35, 20, 105, 23,  6,  83,  6,  0,  56,  0,  0,   5,  0,  0,
703     215, 71, 41, 191, 63, 34, 170, 54, 27, 147, 45, 17, 126, 35,  6, 105, 23,  0,  83,  8,  0,  56,  0,  0,   5,  0,  0,
704     210, 13, 140, 189,  1, 125, 167,  0, 110, 146,  0, 96, 126,  0, 81, 106,  0, 67,  85,  0, 51,  59,  0, 28,   4,  0,  0,
705     212, 18, 126, 190,  7, 113, 168,  0, 100, 146,  0, 86, 126,  0, 73, 106,  0, 59,  84,  0, 43,  59,  0, 22,   4,  0,  0,
706     212, 21, 115, 190, 13, 103, 168,  3, 91, 146,  0, 78, 125,  0, 65, 105,  0, 52,  84,  0, 36,  58,  0, 16,   4,  0,  0,
707     213, 24, 103, 189, 19, 91, 168,  9, 82, 146,  0, 69, 125,  0, 57, 105,  0, 44,  84,  0, 29,  58,  0,  7,   4,  0,  0,
708     213, 27, 92, 188, 21, 81, 168, 14, 71, 146,  1, 59, 125,  0, 48, 105,  0, 36,  84,  0, 21,  58,  0,  4,   4,  0,  0,
709     213, 30, 80, 189, 22, 69, 168, 17, 61, 146,  5, 50, 125,  0, 39, 104,  0, 27,  83,  0, 12,  57,  0,  0,   4,  0,  0,
710     214, 30, 67, 189, 25, 57, 168, 20, 50, 146,  9, 40, 125,  0, 29, 104,  0, 17,  83,  0,  2,  56,  0,  0,   4,  0,  0,
711     214, 32, 53, 189, 27, 44, 169, 20, 38, 146, 13, 28, 124,  2, 17, 104,  0,  4,  83,  0,  0,  56,  0,  0,   4,  0,  0,
712     214, 33, 41, 190, 27, 33, 168, 23, 27, 146, 13, 18, 125,  3,  5, 105,  0,  0,  83,  0,  0,  56,  0,  0,   4,  0,  0,
713     185, 229, 250, 164, 204, 223, 146, 182, 199, 127, 158, 174, 108, 136, 149,  89, 113, 125,  70, 90, 100,  46, 62, 71,  10, 25, 33,
714     189, 227, 225, 168, 202, 201, 148, 181, 179, 129, 157, 156, 109, 135, 134,  90, 113, 113,  70, 89, 90,  46, 62, 62,   8, 24, 25,
715     192, 226, 202, 170, 202, 182, 151, 179, 162, 130, 156, 141, 110, 133, 121,  91, 112, 101,  71, 89, 80,  46, 61, 54,   7, 24, 19,
716     194, 224, 179, 173, 200, 160, 153, 178, 144, 132, 155, 125, 112, 133, 107,  92, 111, 89,  71, 88, 69,  46, 61, 45,   6, 23, 10,
717     196, 223, 155, 174, 198, 139, 154, 176, 124, 132, 153, 107, 113, 131, 91,  92, 110, 75,  72, 87, 58,  47, 60, 37,   4, 23,  0,
718     198, 221, 131, 175, 197, 117, 155, 175, 105, 133, 152, 91, 113, 130, 76,  92, 109, 63,  72, 86, 47,  46, 60, 26,   3, 23,  0,
719     200, 220, 104, 176, 196, 94, 156, 175, 84, 134, 151, 72, 113, 129, 59,  93, 108, 47,  72, 85, 33,  46, 59, 13,   0, 23,  0,
720     201, 219, 73, 179, 195, 65, 157, 173, 57, 135, 150, 48, 114, 129, 39,  94, 108, 28,  72, 85, 15,  47, 59,  0,   0, 22,  0,
721     203, 219, 42, 178, 195, 37, 157, 173, 32, 135, 150, 26, 114, 128, 16,  94, 107,  6,  73, 85,  0,  46, 58,  0,   0, 22,  0,
722     186, 205, 233, 165, 183, 209, 148, 163, 187, 128, 142, 163, 109, 121, 140,  91, 101, 118,  71, 80, 94,  48, 54, 66,  12, 15, 27,
723     189, 204, 211, 169, 182, 189, 151, 163, 169, 131, 141, 147, 111, 121, 126,  92, 101, 105,  72, 79, 84,  48, 54, 58,  11, 15, 19,
724     192, 202, 190, 171, 181, 170, 152, 161, 152, 131, 141, 133, 112, 120, 113,  93, 100, 94,  72, 79, 74,  48, 53, 50,  10, 15, 11,
725     195, 201, 169, 172, 179, 151, 153, 160, 135, 132, 139, 117, 113, 119, 100,  93, 99, 82,  72, 78, 64,  48, 53, 41,   9, 14,  3,
726     195, 200, 146, 174, 179, 131, 154, 159, 117, 133, 138, 101, 113, 118, 86,  93, 98, 70,  73, 77, 53,  48, 52, 32,   8, 15,  0,
727     198, 199, 125, 175, 177, 111, 155, 158, 100, 133, 137, 85, 113, 117, 71,  93, 97, 57,  72, 77, 42,  47, 52, 22,   5, 14,  0,
728     199, 198, 101, 176, 177, 89, 155, 157, 79, 134, 136, 68, 113, 116, 56,  94, 97, 44,  73, 76, 30,  47, 52, 10,   2, 15,  0,
729     200, 197, 72, 178, 176, 63, 157, 156, 56, 135, 136, 46, 114, 116, 37,  94, 96, 26,  73, 76, 11,  47, 51,  0,   0, 14,  0,
730     201, 197, 45, 177, 175, 38, 156, 155, 31, 135, 135, 25, 114, 115, 17,  94, 96,  5,  73, 75,  0,  46, 51,  0,   0, 14,  0,
731     187, 183, 218, 167, 165, 197, 149, 147, 176, 129, 127, 153, 111, 109, 132,  92, 90, 111,  73, 70, 89,  49, 46, 62,  15,  4, 22,
732     190, 183, 197, 170, 164, 177, 151, 146, 159, 130, 127, 139, 112, 109, 119,  93, 90, 99,  72, 70, 78,  49, 45, 53,  14,  4, 15,
733     192, 182, 179, 171, 163, 161, 153, 145, 144, 132, 126, 125, 113, 108, 107,  93, 89, 88,  73, 70, 69,  49, 45, 45,  13,  5,  6,
734     195, 181, 159, 172, 162, 142, 152, 145, 127, 132, 125, 111, 113, 107, 94,  93, 88, 77,  73, 69, 59,  48, 45, 37,  11,  5,  0,
735     195, 180, 139, 173, 161, 124, 153, 143, 110, 133, 125, 96, 113, 106, 81,  94, 88, 66,  73, 68, 49,  49, 44, 28,   9,  6,  0,
736     196, 179, 118, 174, 160, 106, 154, 142, 94, 133, 124, 81, 113, 105, 68,  94, 87, 54,  73, 68, 39,  48, 44, 18,   5,  5,  0,
737     197, 178, 96, 176, 159, 86, 155, 141, 75, 134, 123, 64, 114, 105, 53,  94, 87, 40,  73, 68, 26,  48, 44,  5,   2,  6,  0,
738     199, 178, 70, 176, 158, 62, 156, 141, 54, 134, 122, 44, 114, 104, 35,  94, 86, 23,  73, 67,  8,  47, 44,  0,   2,  6,  0,
739     199, 177, 45, 178, 158, 40, 156, 140, 32, 135, 122, 26, 114, 104, 16,  94, 86,  4,  73, 67,  0,  47, 44,  0,   0,  7,  0,
740     188, 161, 204, 168, 144, 183, 149, 129, 164, 130, 112, 144, 112, 95, 123,  93, 78, 103,  74, 60, 81,  50, 36, 56,  16,  0, 16,
741     190, 160, 185, 170, 144, 165, 151, 128, 148, 132, 111, 130, 112, 95, 110,  93, 78, 92,  74, 59, 72,  50, 36, 48,  16,  0,  8,
742     192, 160, 167, 171, 143, 150, 153, 128, 134, 132, 111, 117, 112, 94, 100,  94, 77, 82,  74, 59, 63,  50, 36, 40,  14,  0,  0,
743     193, 159, 149, 172, 143, 134, 153, 127, 119, 133, 110, 103, 113, 94, 87,  93, 77, 72,  73, 59, 54,  50, 36, 32,  12,  0,  0,
744     195, 159, 131, 173, 142, 117, 153, 127, 104, 132, 110, 90, 113, 93, 76,  93, 76, 61,  74, 59, 45,  49, 36, 23,   9,  0,  0,
745     196, 158, 113, 174, 141, 101, 155, 126, 89, 133, 109, 76, 113, 93, 64,  94, 76, 51,  74, 58, 35,  49, 36, 14,   6,  0,  0,
746     197, 157, 92, 174, 141, 80, 154, 125, 71, 134, 108, 60, 114, 92, 50,  94, 75, 37,  73, 58, 22,  48, 36,  1,   5,  0,  0,
747     197, 157, 68, 175, 140, 59, 155, 124, 51, 134, 108, 41, 113, 91, 32,  94, 75, 21,  73, 57,  5,  48, 35,  0,   5,  0,  0,
748     198, 156, 46, 176, 140, 40, 155, 124, 32, 134, 107, 24, 114, 91, 14,  94, 75,  2,  73, 57,  0,  48, 36,  0,   3,  0,  0,
749     189, 140, 191, 168, 126, 172, 150, 112, 154, 131, 97, 134, 112, 82, 115,  94, 66, 96,  74, 49, 75,  51, 25, 50,  12,  0, 10,
750     191, 139, 173, 170, 125, 154, 152, 111, 138, 132, 96, 121, 113, 81, 103,  94, 66, 85,  74, 48, 66,  50, 26, 42,  12,  0,  1,
751     192, 139, 157, 171, 125, 140, 152, 111, 125, 132, 96, 109, 113, 81, 92,  94, 65, 76,  74, 48, 58,  50, 26, 35,   9,  0,  0,
752     193, 139, 140, 172, 124, 125, 153, 110, 112, 133, 95, 96, 113, 80, 82,  94, 65, 66,  74, 49, 50,  50, 26, 28,   7,  0,  0,
753     194, 138, 123, 172, 123, 109, 153, 110, 97, 133, 95, 84, 113, 80, 70,  94, 65, 56,  74, 48, 40,  50, 26, 20,   6,  0,  0,
754     194, 138, 105, 173, 123, 94, 153, 109, 83, 133, 94, 70, 112, 79, 59,  94, 64, 46,  74, 48, 31,  50, 26,  9,   4,  0,  0,
755     196, 138, 87, 174, 122, 77, 153, 109, 67, 133, 93, 56, 113, 79, 46,  94, 64, 34,  73, 48, 18,  49, 27,  0,   4,  0,  0,
756     196, 137, 65, 174, 122, 57, 154, 108, 49, 133, 93, 39, 113, 79, 29,  94, 64, 18,  74, 48,  3,  49, 27,  0,   2,  0,  0,
757     197, 137, 47, 175, 122, 40, 155, 108, 32, 133, 93, 23, 114, 79, 14,  94, 64,  1,  73, 48,  0,  48, 27,  0,   2,  0,  0,
758     189, 119, 177, 168, 106, 159, 150, 94, 142, 131, 81, 124, 113, 67, 107,  94, 53, 89,  74, 37, 69,  51, 11, 45,   6,  0,  3,
759     191, 119, 161, 170, 106, 144, 152, 94, 129, 132, 81, 112, 113, 67, 96,  94, 53, 79,  74, 37, 61,  51, 13, 38,   6,  0,  0,
760     192, 119, 146, 170, 106, 131, 152, 94, 117, 132, 80, 101, 112, 67, 85,  94, 53, 70,  74, 37, 53,  50, 14, 31,   4,  0,  0,
761     192, 119, 131, 171, 106, 117, 153, 94, 105, 132, 80, 89, 113, 67, 75,  94, 54, 61,  74, 38, 45,  51, 14, 23,   3,  0,  0,
762     193, 118, 114, 171, 106, 102, 153, 93, 90, 132, 80, 78, 113, 67, 65,  94, 53, 52,  74, 37, 36,  50, 15, 16,   1,  0,  0,
763     194, 118, 99, 172, 105, 89, 153, 93, 78, 132, 80, 66, 113, 67, 54,  94, 53, 42,  74, 38, 27,  50, 16,  5,   1,  0,  0,
764     194, 118, 82, 173, 105, 72, 153, 93, 63, 132, 79, 53, 113, 67, 42,  94, 53, 30,  74, 38, 15,  49, 16,  0,   0,  0,  0,
765     195, 117, 63, 173, 105, 55, 154, 93, 47, 133, 79, 37, 113, 66, 27,  94, 53, 15,  73, 38,  0,  48, 16,  0,   0,  0,  0,
766     195, 117, 46, 173, 104, 39, 154, 92, 32, 133, 79, 22, 113, 66, 13,  94, 53,  0,  73, 38,  0,  48, 17,  0,   0,  0,  0,
767     189, 96, 166, 168, 85, 147, 150, 74, 132, 131, 62, 115, 113, 51, 99,  94, 38, 82,  74, 21, 63,  51,  0, 40,   1,  0,  0,
768     190, 96, 150, 170, 85, 133, 152, 75, 119, 132, 63, 104, 113, 51, 88,  94, 38, 72,  75, 22, 55,  51,  0, 33,   1,  0,  0,
769     192, 96, 137, 170, 85, 121, 152, 74, 108, 132, 64, 94, 113, 52, 79,  94, 39, 64,  74, 23, 48,  50,  0, 26,   0,  0,  0,
770     192, 96, 122, 171, 86, 109, 152, 75, 96, 132, 63, 83, 113, 52, 69,  94, 39, 56,  74, 24, 41,  50,  0, 19,   0,  0,  0,
771     193, 96, 107, 171, 85, 96, 152, 75, 84, 132, 64, 72, 113, 52, 60,  94, 39, 47,  74, 24, 32,  50,  1, 10,   0,  0,  0,
772     193, 96, 93, 172, 85, 82, 152, 75, 72, 133, 63, 61, 113, 51, 49,  94, 39, 37,  73, 25, 23,  49,  2,  2,   0,  0,  0,
773     194, 96, 78, 172, 85, 68, 152, 75, 59, 132, 63, 49, 113, 52, 39,  94, 40, 26,  73, 25, 11,  48,  3,  0,   0,  0,  0,
774     194, 96, 60, 173, 85, 52, 153, 75, 44, 132, 64, 35, 112, 52, 25,  94, 40, 12,  73, 26,  0,  48,  4,  0,   0,  0,  0,
775     195, 96, 46, 173, 85, 38, 154, 74, 31, 133, 63, 22, 113, 52, 11,  93, 40,  0,  73, 26,  0,  47,  5,  0,   0,  0,  0,
776     188, 67, 153, 168, 58, 137, 151, 49, 122, 131, 39, 106, 113, 28, 90,  94, 13, 75,  75,  0, 57,  51,  0, 35,   0,  0,  0,
777     190, 68, 138, 170, 59, 123, 152, 50, 110, 132, 41, 96, 113, 29, 80,  94, 16, 66,  75,  0, 49,  50,  0, 27,   0,  0,  0,
778     191, 69, 126, 170, 59, 112, 151, 52, 100, 132, 42, 86, 113, 30, 73,  95, 17, 58,  75,  0, 42,  50,  0, 21,   0,  0,  0,
779     192, 70, 113, 170, 61, 100, 151, 52, 89, 132, 42, 77, 113, 31, 64,  94, 19, 50,  74,  1, 35,  50,  0, 14,   0,  0,  0,
780     192, 70, 100, 170, 62, 89, 151, 53, 77, 131, 43, 66, 112, 32, 54,  94, 20, 42,  74,  2, 27,  49,  0,  5,   0,  0,  0,
781     192, 71, 87, 171, 61, 77, 152, 53, 67, 131, 44, 57, 112, 33, 45,  94, 21, 33,  74,  4, 19,  49,  0,  1,   0,  0,  0,
782     193, 71, 74, 171, 62, 64, 152, 53, 55, 132, 44, 45, 113, 34, 34,  94, 22, 23,  73,  5,  7,  48,  0,  0,   0,  0,  0,
783     193, 70, 58, 172, 62, 50, 152, 54, 42, 132, 44, 32, 112, 35, 22,  93, 23, 10,  73,  6,  0,  47,  0,  0,   0,  0,  0,
784     193, 70, 45, 172, 62, 38, 153, 54, 31, 132, 44, 21, 112, 35,  9,  94, 23,  0,  73,  7,  0,  47,  0,  0,   0,  0,  0,
785     189, 26, 141, 169, 15, 126, 150,  2, 112, 131,  0, 97, 113,  0, 82,  94,  0, 67,  75,  0, 51,  50,  0, 29,   0,  0,  0,
786     190, 28, 128, 170, 18, 114, 151,  8, 101, 132,  0, 88, 113,  0, 74,  94,  0, 60,  75,  0, 44,  50,  0, 23,   0,  0,  0,
787     191, 30, 117, 170, 23, 104, 152, 11, 92, 132,  1, 79, 113,  0, 67,  95,  0, 53,  75,  0, 37,  50,  0, 17,   0,  0,  0,
788     191, 33, 105, 170, 26, 93, 151, 18, 83, 132,  6, 70, 112,  0, 58,  94,  0, 45,  75,  0, 30,  49,  0,  8,   0,  0,  0,
789     191, 34, 93, 170, 27, 82, 151, 20, 72, 131,  8, 61, 112,  0, 49,  94,  0, 38,  74,  0, 23,  49,  0,  4,   0,  0,  0,
790     191, 36, 82, 170, 29, 71, 151, 22, 63, 131, 11, 52, 112,  0, 41,  93,  0, 29,  74,  0, 14,  48,  0,  1,   0,  0,  0,
791     191, 38, 69, 170, 31, 60, 151, 24, 51, 131, 14, 41, 112,  1, 31,  93,  0, 19,  73,  0,  3,  48,  0,  0,   0,  0,  0,
792     192, 37, 56, 171, 31, 47, 152, 25, 40, 131, 17, 30, 112,  4, 19,  93,  0,  7,  73,  0,  0,  47,  0,  0,   0,  0,  0,
793     192, 38, 45, 171, 33, 36, 152, 26, 30, 131, 18, 21, 111,  7,  9,  93,  0,  0,  73,  0,  0,  47,  0,  0,   0,  0,  0,
794     149, 218, 248, 133, 194, 222, 119, 173, 198, 102, 151, 173,  86, 130, 148,  70, 108, 125,  53, 85, 100,  32, 59, 71,   0, 22, 33,
795     154, 216, 223, 137, 193, 200, 122, 172, 178, 106, 150, 156,  89, 128, 133,  73, 107, 112,  54, 85, 89,  31, 59, 63,   0, 22, 26,
796     159, 215, 202, 141, 192, 181, 126, 171, 161, 108, 149, 141,  90, 128, 121,  74, 107, 100,  55, 85, 80,  32, 58, 55,   0, 22, 19,
797     161, 213, 179, 144, 190, 160, 126, 170, 143, 109, 148, 125,  92, 127, 107,  74, 106, 89,  56, 84, 69,  32, 58, 46,   0, 21, 11,
798     163, 211, 156, 144, 189, 139, 129, 168, 125, 110, 147, 108,  93, 126, 92,  75, 105, 76,  57, 83, 58,  33, 58, 37,   0, 21,  1,
799     167, 211, 133, 147, 188, 120, 130, 167, 105, 110, 145, 92,  93, 125, 78,  76, 104, 64,  58, 83, 48,  33, 57, 27,   0, 21,  0,
800     169, 210, 108, 149, 187, 96, 131, 166, 86, 112, 144, 74,  94, 124, 62,  77, 103, 49,  58, 82, 35,  33, 57, 15,   0, 21,  0,
801     170, 209, 80, 151, 186, 71, 133, 165, 62, 114, 143, 52,  95, 123, 42,  77, 103, 32,  58, 81, 18,  33, 56,  0,   0, 21,  0,
802     173, 208, 55, 152, 186, 49, 134, 165, 41, 114, 143, 34,  95, 122, 25,  77, 102, 14,  58, 81,  0,  33, 56,  0,   0, 21,  0,
803     154, 195, 232, 137, 174, 207, 122, 156, 185, 105, 136, 163,  89, 116, 140,  73, 97, 117,  56, 76, 94,  35, 51, 66,   0, 13, 28,
804     158, 194, 209, 141, 174, 187, 125, 155, 167, 109, 135, 146,  91, 116, 125,  75, 96, 105,  57, 75, 83,  35, 50, 57,   0, 12, 21,
805     161, 193, 189, 144, 173, 169, 128, 154, 151, 110, 134, 132,  93, 115, 113,  77, 95, 94,  58, 75, 74,  35, 50, 50,   0, 12, 13,
806     164, 192, 168, 145, 171, 151, 129, 153, 134, 111, 133, 117,  94, 114, 100,  76, 95, 82,  58, 75, 64,  36, 50, 42,   0, 12,  5,
807     165, 191, 147, 147, 170, 131, 130, 152, 117, 113, 132, 102,  95, 113, 86,  77, 94, 71,  58, 74, 54,  35, 50, 33,   0, 13,  0,
808     167, 189, 126, 148, 169, 113, 132, 151, 100, 113, 131, 86,  96, 112, 73,  77, 93, 59,  59, 73, 43,  35, 49, 23,   0, 12,  0,
809     170, 189, 104, 150, 168, 91, 133, 150, 81, 114, 130, 69,  96, 111, 57,  78, 92, 46,  59, 73, 31,  35, 49, 11,   0, 13,  0,
810     171, 188, 78, 152, 168, 68, 134, 149, 60, 115, 130, 50,  96, 111, 41,  78, 92, 29,  60, 73, 15,  35, 49,  0,   0, 12,  0,
811     173, 187, 55, 153, 167, 47, 134, 149, 39, 115, 129, 33,  97, 110, 24,  79, 92, 13,  60, 72,  0,  35, 48,  0,   0, 12,  0,
812     157, 175, 217, 139, 157, 196, 125, 141, 175, 109, 122, 153,  92, 104, 132,  76, 86, 110,  59, 67, 88,  37, 43, 61,   1,  1, 23,
813     161, 174, 196, 144, 156, 176, 127, 140, 158, 110, 121, 137,  94, 104, 118,  77, 85, 98,  59, 67, 78,  37, 43, 53,   0,  2, 16,
814     163, 174, 178, 146, 156, 160, 130, 139, 143, 112, 121, 124,  95, 103, 106,  78, 85, 88,  60, 66, 69,  37, 42, 46,   0,  2,  7,
815     166, 173, 159, 147, 154, 142, 130, 138, 127, 113, 120, 111,  96, 103, 95,  78, 84, 77,  60, 66, 59,  37, 43, 37,   0,  2,  0,
816     166, 172, 139, 148, 154, 125, 131, 137, 112, 113, 120, 96,  96, 102, 81,  78, 84, 66,  60, 65, 50,  37, 42, 29,   0,  3,  0,
817     167, 171, 120, 149, 153, 107, 133, 137, 95, 114, 118, 81,  97, 101, 69,  79, 84, 56,  60, 65, 40,  37, 42, 19,   0,  3,  0,
818     170, 170, 99, 151, 152, 87, 134, 136, 77, 115, 118, 66,  97, 101, 55,  79, 83, 42,  61, 65, 28,  37, 42,  7,   0,  3,  0,
819     172, 170, 75, 152, 151, 65, 134, 135, 57, 115, 117, 48,  97, 100, 38,  79, 83, 27,  61, 64, 12,  36, 42,  0,   0,  3,  0,
820     172, 169, 55, 154, 151, 46, 135, 134, 40, 116, 116, 32,  97, 99, 21,  80, 82, 10,  61, 64,  0,  36, 41,  0,   0,  3,  0,
821     160, 154, 203, 143, 139, 182, 127, 124, 164, 111, 107, 143,  95, 91, 122,  78, 75, 103,  60, 57, 81,  39, 33, 56,   1,  0, 18,
822     163, 154, 184, 146, 138, 165, 130, 123, 148, 113, 107, 129,  96, 90, 110,  79, 74, 92,  61, 56, 72,  39, 34, 48,   2,  0,  9,
823     165, 154, 167, 147, 137, 149, 131, 122, 134, 114, 106, 117,  96, 90, 100,  79, 74, 82,  61, 56, 64,  39, 33, 40,   2,  0,  1,
824     166, 153, 150, 149, 137, 133, 132, 122, 119, 114, 106, 104,  97, 90, 88,  79, 74, 72,  61, 56, 55,  39, 34, 33,   0,  0,  0,
825     168, 152, 132, 149, 136, 117, 132, 121, 104, 114, 105, 90,  97, 89, 76,  79, 73, 62,  61, 56, 46,  38, 34, 25,   0,  0,  0,
826     169, 151, 114, 150, 135, 101, 133, 121, 90, 114, 104, 77,  97, 89, 65,  80, 73, 51,  61, 56, 36,  38, 34, 16,   0,  0,  0,
827     170, 150, 94, 151, 135, 83, 134, 120, 73, 115, 104, 62,  98, 88, 51,  80, 72, 39,  61, 56, 24,  38, 34,  3,   0,  0,  0,
828     172, 150, 72, 153, 134, 63, 135, 119, 55, 115, 103, 45,  98, 88, 36,  80, 72, 24,  61, 55,  9,  38, 34,  0,   0,  0,  0,
829     172, 150, 54, 153, 134, 47, 135, 119, 38, 116, 103, 30,  98, 87, 21,  80, 72,  8,  62, 55,  0,  37, 34,  0,   0,  0,  0,
830     162, 134, 190, 145, 120, 171, 129, 108, 153, 113, 93, 134,  97, 78, 115,  80, 63, 96,  62, 46, 75,  41, 23, 51,   0,  0, 11,
831     165, 134, 173, 147, 120, 154, 131, 107, 138, 114, 92, 120,  97, 78, 103,  80, 63, 85,  62, 46, 66,  40, 23, 43,   0,  0,  2,
832     166, 134, 157, 148, 120, 140, 132, 106, 125, 114, 92, 109,  97, 77, 93,  81, 63, 77,  62, 46, 58,  40, 24, 36,   0,  0,  0,
833     168, 133, 140, 149, 119, 125, 132, 106, 112, 115, 92, 97,  98, 77, 82,  81, 62, 67,  62, 46, 50,  40, 24, 29,   0,  0,  0,
834     168, 133, 123, 150, 119, 110, 133, 106, 97, 115, 91, 84,  98, 77, 70,  81, 62, 57,  62, 46, 41,  40, 24, 20,   0,  0,  0,
835     169, 132, 107, 150, 118, 94, 133, 105, 84, 115, 91, 72,  98, 76, 60,  80, 62, 47,  62, 46, 32,  39, 25, 11,   0,  0,  0,
836     171, 132, 89, 152, 118, 79, 135, 105, 69, 115, 90, 58,  98, 76, 47,  80, 62, 36,  62, 46, 21,  39, 25,  0,   0,  0,  0,
837     171, 132, 69, 153, 117, 60, 135, 104, 52, 116, 90, 42,  98, 76, 33,  81, 61, 21,  62, 46,  6,  38, 25,  0,   0,  0,  0,
838     172, 132, 54, 153, 118, 45, 135, 104, 38, 116, 90, 28,  98, 76, 18,  81, 61,  6,  62, 46,  0,  38, 25,  0,   0,  0,  0,
839     164, 115, 177, 146, 103, 159, 130, 91, 143, 114, 78, 125,  97, 65, 107,  81, 51, 89,  63, 34, 69,  41,  9, 46,   0,  0,  4,
840     166, 115, 161, 148, 103, 144, 132, 91, 129, 115, 78, 112,  98, 65, 96,  81, 51, 79,  63, 35, 61,  41, 11, 38,   0,  0,  0,
841     167, 115, 146, 150, 102, 131, 132, 91, 117, 115, 78, 101,  98, 65, 86,  81, 51, 71,  63, 35, 54,  41, 12, 32,   0,  0,  0,
842     168, 114, 132, 150, 103, 118, 133, 91, 105, 116, 78, 91,  98, 64, 76,  82, 51, 61,  63, 36, 46,  41, 13, 24,   0,  0,  0,
843     169, 114, 116, 150, 102, 103, 134, 90, 91, 116, 78, 79,  98, 65, 66,  81, 51, 53,  63, 36, 37,  40, 14, 17,   0,  0,  0,
844     169, 114, 101, 151, 101, 89, 134, 90, 79, 116, 77, 67,  98, 64, 56,  81, 51, 44,  63, 36, 29,  40, 15,  7,   0,  0,  0,
845     170, 114, 85, 152, 101, 75, 135, 90, 65, 116, 77, 54,  98, 64, 44,  81, 51, 32,  63, 36, 17,  39, 15,  0,   0,  0,  0,
846     172, 113, 66, 152, 101, 58, 135, 89, 49, 116, 77, 40,  99, 64, 30,  81, 51, 18,  62, 36,  3,  38, 16,  0,   0,  0,  0,
847     171, 113, 51, 153, 101, 44, 136, 89, 36, 116, 77, 28,  99, 64, 18,  81, 51,  5,  62, 36,  0,  38, 16,  0,   0,  0,  0,
848     165, 94, 166, 147, 82, 147, 132, 72, 132, 115, 61, 115,  98, 49, 99,  82, 36, 82,  64, 19, 64,  42,  0, 41,   0,  0,  0,
849     167, 93, 150, 150, 83, 134, 133, 73, 120, 116, 62, 104,  99, 49, 88,  82, 36, 72,  64, 20, 55,  41,  0, 33,   0,  0,  0,
850     169, 93, 137, 150, 83, 122, 134, 73, 109, 116, 61, 94,  99, 50, 80,  82, 37, 65,  64, 21, 49,  41,  0, 27,   0,  0,  0,
851     169, 94, 123, 150, 83, 110, 133, 73, 97, 116, 61, 83,  99, 50, 70,  82, 38, 57,  63, 23, 42,  41,  0, 20,   0,  0,  0,
852     169, 94, 109, 150, 84, 97, 134, 73, 85, 116, 62, 73,  99, 51, 61,  81, 38, 48,  63, 23, 33,  41,  1, 11,   0,  0,  0,
853     170, 94, 96, 150, 83, 84, 134, 73, 74, 116, 61, 62,  99, 50, 51,  82, 38, 39,  64, 23, 24,  40,  3,  4,   0,  0,  0,
854     171, 93, 79, 152, 82, 70, 135, 73, 61, 116, 62, 51,  98, 51, 40,  81, 38, 28,  63, 24, 14,  39,  4,  0,   0,  0,  0,
855     171, 94, 64, 152, 83, 55, 135, 73, 47, 116, 62, 37,  98, 50, 27,  81, 38, 15,  63, 24,  1,  39,  4,  0,   0,  0,  0,
856     172, 93, 51, 153, 82, 42, 135, 73, 35, 117, 62, 26,  99, 51, 16,  81, 39,  3,  63, 25,  0,  38,  5,  0,   0,  0,  0,
857     166, 68, 153, 148, 59, 137, 133, 49, 121, 115, 39, 106,  99, 28, 91,  82, 13, 75,  65,  0, 58,  42,  0, 36,   0,  0,  0,
858     168, 68, 139, 150, 59, 124, 134, 50, 110, 116, 40, 96,  99, 30, 81,  82, 16, 66,  64,  0, 50,  41,  0, 29,   0,  0,  0,
859     169, 69, 126, 150, 59, 113, 134, 51, 101, 117, 42, 87, 100, 30, 73,  82, 17, 59,  65,  0, 43,  41,  0, 23,   0,  0,  0,
860     169, 70, 115, 150, 61, 102, 134, 52, 89, 116, 42, 77,  99, 32, 65,  82, 19, 52,  64,  0, 36,  41,  0, 15,   0,  0,  0,
861     169, 70, 101, 150, 61, 90, 134, 52, 79, 116, 43, 68,  99, 32, 55,  82, 21, 43,  64,  2, 28,  41,  0,  6,   0,  0,  0,
862     170, 70, 89, 151, 62, 79, 134, 53, 69, 116, 44, 58,  99, 33, 46,  81, 21, 34,  64,  3, 20,  41,  0,  2,   0,  0,  0,
863     170, 71, 76, 152, 62, 66, 134, 53, 57, 116, 43, 46,  99, 33, 36,  82, 22, 24,  64,  5, 10,  40,  0,  0,   0,  0,  0,
864     171, 70, 61, 152, 62, 52, 135, 53, 44, 116, 44, 35,  99, 34, 24,  82, 22, 12,  63,  6,  0,  39,  0,  0,   0,  0,  0,
865     171, 71, 49, 153, 62, 41, 135, 54, 33, 117, 45, 25,  98, 34, 13,  81, 23,  0,  63,  7,  0,  39,  0,  0,   0,  0,  0,
866     167, 33, 142, 149, 24, 127, 134, 10, 113, 116,  0, 97, 100,  0, 83,  83,  0, 68,  65,  0, 52,  40,  0, 30,   0,  0,  0,
867     169, 33, 129, 150, 26, 115, 134, 17, 102, 116,  3, 89, 100,  0, 75,  83,  0, 60,  65,  0, 45,  40,  0, 24,   0,  0,  0,
868     169, 36, 118, 151, 27, 104, 134, 19, 93, 116,  7, 80, 100,  0, 67,  83,  0, 54,  65,  0, 38,  41,  0, 17,   0,  0,  0,
869     169, 39, 107, 150, 30, 94, 134, 22, 84, 116, 11, 71,  99,  0, 59,  83,  0, 46,  64,  0, 31,  40,  0,  9,   0,  0,  0,
870     169, 39, 95, 151, 31, 83, 134, 24, 73, 116, 15, 62, 100,  1, 51,  83,  0, 38,  64,  0, 24,  40,  0,  5,   0,  0,  0,
871     169, 41, 83, 151, 33, 73, 134, 26, 64, 117, 17, 54,  99,  4, 42,  82,  0, 30,  64,  0, 16,  40,  0,  1,   0,  0,  0,
872     170, 42, 71, 152, 34, 62, 134, 28, 53, 117, 19, 44,  99,  6, 33,  82,  0, 21,  63,  0,  4,  39,  0,  0,   0,  0,  0,
873     171, 42, 59, 152, 35, 50, 134, 29, 42, 117, 21, 32,  99,  9, 22,  82,  0,  9,  63,  0,  0,  38,  0,  0,   0,  0,  0,
874     172, 42, 48, 152, 36, 40, 135, 29, 32, 117, 21, 23,  99, 10, 12,  82,  0,  0,  63,  0,  0,  38,  0,  0,   0,  0,  0,
875     107, 207, 246,  96, 185, 220,  86, 165, 196,  73, 144, 171,  60, 123, 147,  46, 103, 125,  32, 82, 100,   9, 56, 71,   0, 20, 33,
876     115, 206, 221, 104, 184, 198,  92, 164, 178,  78, 143, 154,  64, 123, 133,  51, 102, 111,  34, 81, 89,  10, 56, 63,   0, 20, 27,
877     122, 204, 200, 108, 183, 180,  95, 163, 161,  82, 142, 140,  68, 122, 120,  54, 102, 101,  36, 81, 79,  11, 56, 55,   0, 20, 20,
878     125, 203, 179, 111, 181, 160,  97, 162, 143,  85, 141, 124,  70, 121, 107,  55, 101, 89,  38, 80, 69,  14, 55, 46,   0, 19, 10,
879     128, 202, 156, 113, 180, 140, 102, 161, 125,  87, 140, 108,  71, 120, 92,  56, 100, 76,  39, 79, 59,  14, 55, 38,   0, 20,  3,
880     132, 200, 135, 117, 179, 121, 103, 159, 106,  88, 139, 93,  73, 119, 79,  57, 100, 65,  41, 79, 49,  15, 54, 28,   0, 19,  0,
881     134, 200, 111, 119, 178, 98, 105, 158, 87,  89, 138, 76,  74, 118, 64,  58, 99, 51,  41, 78, 37,  16, 54, 17,   0, 19,  0,
882     137, 199, 85, 122, 177, 75, 108, 158, 66,  91, 137, 56,  75, 118, 46,  59, 98, 35,  42, 78, 22,  16, 54,  3,   0, 19,  0,
883     140, 198, 62, 125, 177, 55, 109, 158, 47,  92, 137, 40,  76, 117, 32,  59, 98, 21,  42, 78,  6,  16, 54,  0,   0, 18,  0,
884     118, 186, 231, 106, 167, 206,  93, 149, 184,  81, 130, 161,  67, 111, 139,  54, 92, 117,  39, 72, 93,  17, 48, 66,   0, 10, 29,
885     123, 185, 207, 110, 166, 186,  98, 148, 167,  85, 129, 145,  71, 111, 125,  56, 92, 104,  40, 72, 83,  18, 48, 57,   0, 10, 22,
886     128, 184, 188, 113, 165, 168, 102, 147, 151,  88, 128, 131,  73, 110, 113,  58, 91, 94,  42, 71, 74,  19, 48, 50,   0,  9, 15,
887     131, 183, 168, 116, 164, 151, 104, 146, 134,  89, 127, 117,  73, 109, 100,  58, 90, 83,  42, 71, 65,  20, 48, 42,   0,  9,  5,
888     134, 182, 148, 120, 163, 131, 105, 145, 118,  90, 126, 102,  75, 108, 86,  59, 90, 72,  43, 71, 55,  19, 47, 34,   0,  9,  0,
889     136, 181, 128, 122, 162, 115, 107, 144, 102,  92, 125, 87,  76, 107, 74,  61, 89, 60,  44, 70, 45,  20, 47, 24,   0,  8,  0,
890     139, 180, 106, 124, 161, 95, 109, 144, 83,  93, 124, 71,  77, 107, 60,  61, 89, 47,  44, 70, 33,  20, 47, 13,   0,  8,  0,
891     142, 179, 82, 125, 160, 72, 111, 143, 63,  94, 124, 54,  77, 106, 44,  61, 88, 32,  44, 69, 18,  20, 46,  0,   0,  8,  0,
892     143, 179, 62, 127, 160, 54, 111, 142, 47,  94, 124, 39,  78, 106, 29,  62, 88, 18,  45, 69,  3,  20, 46,  0,   0,  8,  0,
893     124, 167, 216, 112, 150, 194,  99, 134, 174,  87, 117, 153,  73, 100, 131,  58, 82, 110,  43, 64, 88,  23, 40, 61,   0,  0, 24,
894     129, 166, 195, 116, 150, 175, 103, 134, 158,  89, 116, 137,  75, 99, 118,  60, 82, 98,  44, 63, 78,  23, 40, 53,   0,  0, 17,
895     132, 166, 177, 119, 149, 160, 106, 133, 143,  90, 115, 124,  76, 99, 107,  61, 81, 88,  45, 63, 69,  24, 40, 46,   0,  0,  9,
896     136, 166, 159, 121, 148, 143, 107, 132, 126,  92, 115, 111,  77, 98, 94,  62, 81, 78,  46, 63, 60,  23, 40, 38,   0,  0,  0,
897     138, 164, 140, 122, 147, 125, 108, 131, 111,  93, 114, 97,  79, 98, 82,  63, 80, 67,  46, 62, 50,  24, 40, 29,   0,  0,  0,
898     139, 163, 122, 124, 146, 109, 110, 131, 96,  94, 114, 83,  79, 97, 70,  63, 81, 57,  46, 62, 41,  24, 40, 21,   0,  0,  0,
899     141, 163, 101, 126, 145, 90, 111, 130, 79,  95, 113, 68,  79, 96, 56,  63, 80, 44,  47, 62, 30,  23, 40, 10,   0,  0,  0,
900     144, 162, 79, 127, 145, 70, 112, 129, 60,  95, 112, 51,  79, 96, 41,  64, 79, 30,  47, 61, 15,  23, 40,  0,   0,  0,  0,
901     145, 162, 60, 129, 145, 52, 113, 129, 46,  96, 112, 37,  79, 95, 27,  64, 79, 16,  47, 61,  1,  23, 39,  0,   0,  0,  0,
902     131, 147, 202, 117, 133, 181, 105, 119, 162,  91, 103, 142,  77, 87, 122,  62, 71, 102,  47, 54, 81,  26, 31, 56,   0,  0, 18,
903     135, 147, 183, 120, 132, 164, 107, 118, 147,  93, 102, 128,  78, 87, 110,  63, 71, 92,  47, 54, 72,  26, 31, 48,   0,  0, 10,
904     138, 147, 166, 123, 131, 149, 108, 118, 133,  94, 102, 116,  79, 86, 100,  64, 71, 82,  48, 54, 64,  27, 31, 41,   0,  0,  2,
905     139, 146, 149, 124, 131, 134, 111, 117, 119,  94, 101, 103,  79, 86, 88,  64, 70, 72,  48, 53, 55,  27, 31, 33,   0,  0,  0,
906     141, 146, 132, 125, 131, 117, 111, 117, 104,  95, 101, 91,  80, 86, 77,  65, 70, 62,  48, 53, 46,  26, 31, 25,   0,  0,  0,
907     143, 145, 115, 126, 130, 101, 112, 116, 90,  96, 100, 78,  80, 85, 65,  65, 70, 52,  49, 53, 37,  27, 32, 17,   0,  0,  0,
908     144, 144, 96, 128, 129, 85, 112, 115, 75,  97, 100, 64,  81, 85, 52,  65, 69, 40,  49, 53, 26,  26, 31,  5,   0,  0,  0,
909     146, 144, 76, 129, 129, 67, 114, 115, 58,  97, 99, 48,  82, 84, 38,  66, 69, 27,  49, 53, 12,  26, 32,  0,   0,  0,  0,
910     146, 144, 59, 130, 128, 51, 114, 114, 43,  98, 99, 35,  82, 84, 25,  66, 69, 13,  49, 53,  0,  26, 32,  0,   0,  0,  0,
911     135, 129, 189, 122, 115, 170, 107, 103, 152,  94, 89, 133,  79, 74, 114,  64, 60, 95,  49, 43, 75,  29, 20, 51,   0,  0, 12,
912     138, 129, 171, 124, 115, 153, 110, 103, 138,  95, 89, 120,  81, 74, 103,  66, 60, 86,  50, 44, 67,  28, 21, 43,   0,  0,  3,
913     140, 129, 156, 125, 115, 140, 111, 103, 125,  96, 89, 109,  81, 74, 93,  67, 60, 76,  50, 44, 59,  29, 22, 36,   0,  0,  0,
914     142, 128, 140, 127, 115, 125, 112, 102, 112,  97, 88, 97,  82, 74, 83,  67, 60, 67,  50, 44, 51,  29, 22, 29,   0,  0,  0,
915     142, 128, 124, 127, 114, 111, 113, 102, 98,  98, 88, 85,  82, 74, 71,  66, 60, 58,  50, 44, 42,  29, 22, 21,   0,  0,  0,
916     144, 127, 108, 128, 114, 96, 113, 101, 85,  98, 87, 73,  82, 74, 61,  67, 60, 48,  50, 44, 33,  28, 23, 12,   0,  0,  0,
917     145, 127, 91, 129, 114, 81, 115, 101, 71,  98, 87, 60,  82, 73, 48,  67, 59, 37,  50, 44, 22,  29, 23,  1,   0,  0,  0,
918     147, 127, 73, 130, 113, 63, 115, 101, 55,  98, 87, 45,  83, 73, 35,  67, 59, 24,  50, 44, 10,  28, 24,  0,   0,  0,  0,
919     147, 127, 58, 131, 113, 49, 115, 100, 42,  99, 86, 33,  83, 73, 23,  67, 59, 10,  50, 44,  0,  27, 24,  0,   0,  0,  0,
920     138, 110, 177, 124, 99, 159, 110, 88, 142,  96, 75, 125,  82, 62, 107,  66, 48, 89,  51, 33, 70,  30,  8, 46,   0,  0,  5,
921     142, 111, 160, 127, 99, 144, 113, 88, 130,  98, 75, 112,  82, 62, 96,  68, 49, 80,  51, 33, 61,  30, 10, 39,   0,  0,  0,
922     143, 111, 146, 128, 99, 131, 114, 88, 118,  98, 75, 101,  83, 62, 86,  68, 49, 71,  52, 33, 54,  30, 11, 32,   0,  0,  0,
923     144, 111, 132, 128, 99, 118, 113, 88, 106,  99, 75, 91,  83, 62, 77,  68, 49, 62,  52, 34, 46,  30, 12, 25,   0,  0,  0,
924     144, 111, 117, 129, 98, 104, 114, 87, 92,  99, 75, 80,  83, 62, 67,  68, 49, 53,  51, 34, 38,  30, 13, 18,   0,  0,  0,
925     145, 111, 103, 130, 98, 91, 114, 87, 80,  99, 75, 68,  83, 63, 57,  68, 50, 45,  51, 34, 30,  30, 14,  8,   0,  0,  0,
926     146, 110, 87, 131, 98, 76, 115, 87, 67,  99, 75, 56,  83, 62, 45,  68, 49, 33,  52, 35, 19,  30, 15,  2,   0,  0,  0,
927     148, 110, 70, 131, 98, 60, 116, 86, 52,  99, 74, 43,  84, 62, 33,  69, 49, 21,  52, 35,  6,  29, 15,  0,   0,  0,  0,
928     148, 110, 56, 132, 97, 48, 117, 87, 40, 100, 75, 31,  84, 62, 22,  68, 49,  9,  51, 35,  0,  28, 15,  0,   0,  0,  0,
929     142, 91, 166, 126, 80, 148, 113, 71, 132,  98, 59, 115,  83, 47, 99,  69, 34, 82,  53, 17, 64,  32,  0, 41,   0,  0,  0,
930     143, 91, 150, 128, 81, 135, 114, 71, 120,  99, 60, 104,  85, 48, 89,  69, 35, 73,  53, 19, 56,  32,  0, 34,   0,  0,  0,
931     145, 91, 137, 129, 81, 122, 115, 71, 109, 100, 60, 94,  85, 48, 81,  69, 35, 65,  53, 19, 49,  32,  0, 28,   0,  0,  0,
932     146, 92, 124, 130, 81, 110, 115, 71, 98, 100, 60, 84,  85, 49, 71,  69, 36, 57,  53, 21, 42,  32,  0, 21,   0,  0,  0,
933     147, 91, 110, 130, 81, 97, 115, 71, 86, 100, 60, 74,  84, 49, 62,  69, 36, 48,  53, 22, 34,  32,  0, 13,   0,  0,  0,
934     147, 92, 97, 130, 81, 85, 116, 72, 76, 100, 60, 63,  85, 49, 52,  69, 37, 40,  53, 22, 26,  31,  1,  5,   0,  0,  0,
935     148, 92, 82, 131, 81, 71, 116, 71, 62, 100, 60, 53,  84, 49, 42,  69, 37, 30,  52, 23, 16,  31,  2,  0,   0,  0,  0,
936     148, 91, 67, 132, 81, 57, 117, 71, 49, 100, 60, 39,  84, 49, 30,  69, 37, 18,  52, 23,  2,  30,  2,  0,   0,  0,  0,
937     149, 91, 54, 132, 81, 46, 118, 71, 39, 101, 60, 29,  85, 49, 19,  69, 37,  6,  52, 23,  0,  29,  3,  0,   0,  0,  0,
938     143, 68, 153, 128, 59, 137, 115, 49, 122,  99, 39, 107,  85, 28, 91,  70, 13, 75,  54,  0, 58,  32,  0, 36,   0,  0,  0,
939     146, 68, 140, 131, 59, 125, 116, 51, 111, 100, 40, 97,  85, 29, 82,  70, 15, 67,  54,  0, 50,  32,  0, 29,   0,  0,  0,
940     147, 68, 127, 131, 59, 114, 117, 51, 102, 101, 41, 88,  86, 30, 74,  70, 17, 60,  54,  0, 44,  32,  0, 23,   0,  0,  0,
941     147, 70, 115, 131, 60, 103, 116, 52, 91, 100, 42, 78,  85, 32, 65,  70, 19, 53,  54,  1, 38,  32,  0, 17,   0,  0,  0,
942     147, 70, 103, 131, 61, 91, 117, 53, 81, 101, 43, 69,  86, 32, 57,  70, 20, 44,  54,  2, 30,  32,  0,  7,   0,  0,  0,
943     148, 70, 91, 132, 61, 80, 117, 52, 70, 101, 43, 59,  85, 33, 48,  70, 21, 36,  53,  4, 22,  32,  0,  3,   0,  0,  0,
944     148, 70, 78, 132, 62, 68, 117, 53, 58, 101, 43, 48,  85, 34, 38,  70, 22, 26,  53,  6, 12,  31,  0,  0,   0,  0,  0,
945     149, 71, 64, 132, 62, 54, 118, 54, 46, 101, 44, 37,  85, 34, 27,  69, 23, 15,  53,  7,  1,  30,  0,  0,   0,  0,  0,
946     150, 70, 53, 134, 61, 44, 118, 54, 36, 101, 44, 28,  85, 35, 17,  69, 23,  4,  52,  8,  0,  30,  0,  0,   0,  0,  0,
947     145, 38, 143, 130, 29, 128, 117, 18, 114, 101,  3, 98,  87,  0, 84,  72,  0, 69,  54,  0, 53,  30,  0, 31,   0,  0,  0,
948     147, 38, 130, 132, 30, 116, 117, 22, 103, 101,  8, 89,  87,  0, 76,  72,  0, 62,  54,  0, 46,  30,  0, 24,   0,  0,  0,
949     148, 40, 119, 132, 31, 105, 117, 23, 94, 101, 13, 81,  87,  0, 68,  71,  0, 55,  54,  0, 39,  30,  0, 18,   0,  0,  0,
950     148, 42, 108, 132, 34, 96, 117, 25, 85, 102, 15, 73,  86,  2, 60,  71,  0, 47,  54,  0, 33,  30,  0, 11,   0,  0,  0,
951     148, 43, 96, 133, 35, 85, 117, 28, 75, 102, 18, 64,  87,  5, 52,  71,  0, 40,  54,  0, 25,  30,  0,  5,   0,  0,  0,
952     149, 44, 85, 132, 36, 75, 118, 29, 66, 101, 20, 55,  86,  8, 44,  70,  0, 32,  53,  0, 18,  29,  0,  2,   0,  0,  0,
953     149, 45, 74, 133, 37, 64, 118, 31, 55, 102, 21, 45,  85, 10, 34,  70,  0, 22,  53,  0,  6,  28,  0,  0,   0,  0,  0,
954     150, 46, 61, 133, 39, 52, 118, 31, 44, 102, 23, 34,  85, 12, 24,  70,  0, 12,  52,  0,  0,  28,  0,  0,   0,  0,  0,
955     150, 46, 51, 133, 40, 42, 119, 32, 35, 102, 24, 25,  85, 13, 14,  70,  0,  1,  52,  0,  0,  27,  0,  0,   0,  0,  0,
956     53, 198, 244,  49, 177, 218,  41, 158, 195,  32, 138, 171,  22, 118, 147,  11, 98, 124,   0, 78, 100,   0, 54, 71,   0, 18, 34,
957     69, 196, 220,  64, 175, 196,  54, 157, 176,  45, 137, 154,  32, 117, 133,  19, 98, 111,   0, 78, 89,   0, 53, 63,   0, 17, 27,
958     80, 195, 198,  69, 175, 179,  60, 156, 159,  50, 136, 139,  38, 116, 120,  25, 98, 101,   4, 77, 80,   0, 53, 55,   0, 17, 21,
959     84, 193, 177,  75, 173, 159,  64, 155, 142,  55, 135, 124,  41, 116, 107,  27, 97, 89,   9, 76, 70,   0, 53, 47,   0, 17, 11,
960     89, 193, 157,  79, 172, 140,  70, 154, 125,  57, 134, 109,  44, 115, 92,  32, 96, 76,  13, 76, 59,   0, 52, 39,   0, 16,  4,
961     94, 191, 135,  85, 171, 121,  72, 152, 108,  60, 133, 94,  47, 114, 80,  32, 95, 65,  15, 76, 49,   0, 52, 29,   0, 16,  0,
962     98, 190, 113,  87, 170, 100,  76, 152, 89,  62, 132, 77,  49, 113, 65,  35, 95, 52,  18, 75, 37,   0, 52, 18,   0, 15,  0,
963     103, 190, 89,  90, 169, 80,  78, 151, 70,  64, 132, 60,  51, 113, 49,  37, 94, 38,  20, 75, 25,   0, 52,  5,   0, 15,  0,
964     106, 189, 69,  93, 169, 61,  80, 151, 53,  66, 131, 45,  52, 113, 36,  37, 94, 25,  19, 74, 11,   0, 51,  0,   0, 15,  0,
965     76, 178, 229,  68, 159, 205,  61, 142, 183,  50, 124, 160,  40, 106, 138,  28, 88, 116,  12, 69, 93,   0, 45, 66,   0,  5, 29,
966     86, 177, 207,  78, 158, 184,  67, 142, 166,  56, 123, 145,  45, 106, 125,  31, 88, 105,  16, 69, 83,   0, 45, 58,   0,  6, 22,
967     93, 176, 187,  81, 158, 168,  71, 141, 150,  61, 123, 131,  47, 105, 113,  35, 87, 94,  20, 68, 74,   0, 45, 51,   0,  5, 16,
968     98, 175, 168,  84, 157, 150,  75, 140, 134,  63, 122, 117,  50, 104, 100,  37, 87, 83,  21, 68, 65,   0, 45, 42,   0,  4,  7,
969     100, 174, 149,  89, 155, 132,  76, 139, 117,  65, 121, 102,  53, 104, 87,  39, 86, 72,  23, 67, 55,   0, 45, 34,   0,  3,  0,
970     103, 173, 130,  92, 155, 115,  80, 138, 102,  68, 120, 88,  53, 103, 75,  40, 86, 61,  24, 67, 45,   0, 45, 25,   0,  3,  0,
971     107, 172, 108,  95, 154, 96,  82, 137, 85,  70, 119, 73,  55, 102, 61,  42, 85, 49,  25, 67, 34,   0, 45, 14,   0,  3,  0,
972     110, 172, 86,  97, 153, 76,  85, 137, 67,  70, 119, 57,  56, 102, 46,  42, 84, 35,  26, 66, 21,   0, 44,  1,   0,  3,  0,
973     112, 171, 67,  98, 153, 59,  86, 137, 52,  71, 119, 44,  58, 102, 34,  44, 85, 22,  27, 66,  7,   0, 44,  0,   0,  3,  0,
974     90, 160, 215,  81, 144, 193,  70, 129, 173,  61, 112, 151,  49, 95, 131,  37, 79, 109,  22, 61, 87,   0, 38, 61,   0,  0, 25,
975     96, 160, 194,  86, 143, 174,  75, 128, 157,  65, 112, 137,  53, 95, 117,  40, 78, 98,  25, 60, 78,   0, 38, 53,   0,  0, 17,
976     100, 159, 177,  89, 143, 159,  79, 128, 143,  67, 111, 124,  55, 95, 107,  42, 78, 89,  27, 60, 70,   2, 38, 46,   0,  0,  9,
977     104, 158, 159,  92, 142, 143,  81, 127, 127,  69, 110, 110,  56, 94, 94,  43, 78, 78,  28, 60, 60,   2, 38, 38,   0,  0,  1,
978     107, 157, 140,  94, 141, 125,  82, 126, 112,  71, 110, 97,  59, 94, 82,  45, 77, 67,  29, 59, 51,   4, 37, 30,   0,  0,  0,
979     110, 156, 122,  97, 140, 109,  85, 125, 97,  72, 109, 83,  58, 93, 71,  45, 77, 57,  29, 60, 42,   5, 38, 22,   0,  0,  0,
980     111, 156, 103,  99, 139, 91,  87, 125, 81,  73, 108, 69,  60, 92, 58,  46, 77, 45,  30, 59, 31,   5, 38, 12,   0,  0,  0,
981     115, 156, 82, 101, 140, 73,  88, 124, 63,  74, 108, 53,  60, 92, 44,  46, 76, 32,  31, 59, 18,   6, 37,  0,   0,  0,  0,
982     116, 155, 65, 102, 139, 58,  89, 124, 49,  75, 108, 41,  61, 92, 32,  48, 76, 21,  31, 59,  6,   5, 37,  0,   0,  0,  0,
983     100, 141, 201,  88, 127, 181,  79, 114, 162,  69, 99, 142,  57, 83, 122,  44, 68, 102,  30, 51, 81,   7, 28, 56,   0,  0, 19,
984     105, 141, 182,  94, 127, 163,  83, 114, 146,  71, 98, 128,  59, 83, 110,  46, 68, 91,  31, 51, 72,  10, 28, 48,   0,  0, 11,
985     108, 141, 166,  96, 127, 149,  85, 113, 133,  73, 98, 116,  60, 83, 99,  46, 68, 82,  32, 51, 64,  11, 29, 41,   0,  0,  2,
986     111, 141, 149,  98, 126, 134,  88, 112, 119,  74, 97, 103,  61, 83, 88,  48, 67, 72,  33, 51, 56,  11, 29, 34,   0,  0,  0,
987     112, 140, 132, 100, 125, 118,  89, 112, 105,  75, 97, 91,  62, 82, 77,  49, 68, 62,  33, 51, 47,  12, 29, 26,   0,  0,  0,
988     115, 140, 116, 102, 125, 103,  90, 111, 91,  76, 96, 78,  62, 82, 65,  49, 67, 52,  34, 51, 38,  13, 29, 18,   0,  0,  0,
989     117, 139, 97, 103, 124, 87,  91, 111, 77,  78, 96, 65,  63, 81, 54,  49, 67, 41,  34, 51, 27,  12, 29,  7,   0,  0,  0,
990     119, 138, 78, 105, 124, 69,  92, 110, 60,  78, 95, 50,  65, 81, 40,  50, 67, 29,  34, 51, 15,  13, 30,  0,   0,  0,  0,
991     120, 138, 64, 106, 124, 54,  93, 110, 47,  78, 95, 38,  65, 81, 29,  50, 66, 17,  34, 50,  2,  13, 29,  0,   0,  0,  0,
992     107, 124, 189,  96, 111, 169,  85, 99, 152,  73, 85, 132,  61, 71, 114,  48, 57, 95,  34, 41, 75,  14, 18, 51,   0,  0, 13,
993     111, 124, 171, 100, 111, 153,  88, 99, 137,  75, 85, 120,  63, 72, 103,  50, 58, 85,  36, 41, 66,  15, 19, 43,   0,  0,  4,
994     113, 124, 156, 101, 111, 139,  90, 99, 125,  77, 85, 109,  64, 71, 93,  51, 57, 77,  36, 42, 59,  17, 20, 37,   0,  0,  0,
995     115, 124, 140, 103, 111, 125,  90, 99, 112,  78, 85, 97,  64, 71, 82,  52, 57, 67,  36, 42, 50,  16, 20, 30,   0,  0,  0,
996     117, 123, 125, 104, 110, 111,  92, 98, 99,  79, 85, 86,  65, 71, 72,  51, 58, 59,  37, 42, 43,  17, 21, 22,   0,  0,  0,
997     118, 123, 110, 105, 110, 97,  93, 98, 86,  78, 84, 74,  66, 71, 62,  52, 57, 49,  37, 42, 34,  17, 22, 14,   0,  0,  0,
998     120, 123, 93, 106, 109, 82,  94, 97, 72,  80, 84, 61,  66, 71, 50,  52, 57, 38,  37, 42, 24,  17, 22,  2,   0,  0,  0,
999     121, 122, 75, 108, 109, 66,  95, 97, 58,  80, 84, 48,  66, 71, 37,  52, 57, 26,  37, 42, 12,  16, 22,  0,   0,  0,  0,
1000     122, 123, 62, 108, 109, 52,  95, 97, 45,  81, 84, 36,  67, 70, 26,  52, 57, 14,  37, 42,  0,  15, 22,  0,   0,  0,  0,
1001     113, 107, 177, 102, 96, 159,  89, 85, 141,  78, 72, 124,  65, 60, 107,  52, 46, 89,  37, 30, 70,  18,  5, 46,   0,  0,  6,
1002     116, 107, 160, 104, 96, 144,  92, 85, 129,  80, 72, 112,  67, 60, 96,  53, 47, 80,  38, 31, 62,  19,  7, 39,   0,  0,  0,
1003     118, 107, 147, 105, 96, 131,  93, 85, 118,  80, 72, 101,  67, 60, 87,  54, 47, 71,  39, 31, 54,  19,  8, 32,   0,  0,  0,
1004     119, 107, 132, 106, 96, 118,  94, 85, 106,  81, 73, 91,  67, 60, 77,  54, 47, 63,  39, 32, 47,  20,  9, 25,   0,  0,  0,
1005     119, 107, 118, 106, 95, 105,  94, 85, 93,  81, 72, 80,  68, 60, 68,  54, 47, 54,  39, 32, 39,  20, 11, 18,   0,  0,  0,
1006     121, 107, 104, 107, 96, 92,  95, 84, 80,  81, 72, 69,  68, 61, 58,  54, 48, 46,  39, 33, 31,  20, 12,  9,   0,  0,  0,
1007     123, 107, 88, 108, 95, 77,  96, 84, 68,  82, 72, 57,  68, 60, 46,  54, 47, 35,  39, 33, 20,  19, 13,  2,   0,  0,  0,
1008     123, 106, 72, 110, 95, 63,  96, 84, 54,  82, 72, 45,  69, 60, 35,  55, 48, 23,  39, 33,  9,  18, 14,  0,   0,  0,  0,
1009     125, 106, 60, 110, 94, 50,  98, 84, 42,  83, 72, 34,  69, 60, 25,  55, 48, 12,  39, 33,  0,  17, 13,  0,   0,  0,  0,
1010     118, 89, 165, 105, 79, 148,  93, 69, 132,  81, 57, 115,  68, 45, 99,  55, 32, 82,  41, 15, 64,  21,  0, 41,   0,  0,  0,
1011     120, 89, 150, 107, 79, 135,  96, 69, 121,  82, 58, 105,  70, 46, 89,  56, 34, 73,  41, 17, 56,  21,  0, 34,   0,  0,  0,
1012     121, 89, 137, 108, 79, 123,  96, 69, 109,  82, 58, 95,  70, 47, 81,  56, 34, 66,  41, 18, 49,  21,  0, 28,   0,  0,  0,
1013     122, 90, 124, 109, 79, 110,  96, 69, 99,  83, 58, 85,  70, 47, 72,  56, 35, 58,  41, 19, 42,  21,  0, 22,   0,  0,  0,
1014     123, 90, 111, 110, 79, 98,  97, 69, 87,  83, 59, 75,  70, 47, 63,  56, 35, 50,  41, 20, 35,  21,  0, 14,   0,  0,  0,
1015     123, 90, 98, 110, 79, 87,  97, 70, 76,  84, 58, 64,  70, 48, 53,  56, 36, 41,  40, 21, 26,  21,  0,  5,   0,  0,  0,
1016     125, 89, 84, 111, 79, 73,  97, 69, 64,  84, 59, 54,  70, 48, 43,  56, 36, 31,  40, 22, 17,  20,  1,  1,   0,  0,  0,
1017     125, 89, 69, 112, 79, 60,  98, 70, 51,  84, 59, 42,  70, 48, 32,  56, 36, 20,  41, 22,  5,  19,  2,  0,   0,  0,  0,
1018     126, 89, 57, 112, 79, 49,  99, 70, 41,  84, 59, 32,  70, 48, 22,  56, 36, 10,  40, 22,  0,  18,  2,  0,   0,  0,  0,
1019     121, 67, 154, 108, 58, 138,  97, 50, 124,  84, 39, 107,  71, 28, 92,  58, 12, 76,  43,  0, 59,  20,  0, 37,   0,  0,  0,
1020     124, 68, 140, 111, 59, 126,  98, 50, 112,  84, 40, 98,  71, 29, 83,  58, 15, 67,  42,  0, 51,  20,  0, 30,   0,  0,  0,
1021     124, 68, 129, 111, 59, 114,  99, 51, 102,  86, 41, 88,  71, 30, 75,  58, 17, 60,  42,  0, 45,  20,  0, 24,   0,  0,  0,
1022     125, 70, 116, 111, 60, 103,  99, 51, 92,  85, 41, 79,  71, 31, 66,  58, 19, 53,  42,  3, 38,  20,  0, 17,   0,  0,  0,
1023     125, 70, 104, 111, 61, 93,  99, 52, 81,  85, 43, 69,  72, 32, 58,  58, 20, 45,  42,  4, 31,  20,  0,  8,   0,  0,  0,
1024     126, 70, 92, 111, 61, 81,  99, 52, 71,  85, 42, 60,  71, 33, 49,  57, 21, 37,  42,  6, 23,  20,  0,  3,   0,  0,  0,
1025     126, 70, 79, 112, 61, 70,  99, 53, 60,  85, 43, 50,  71, 33, 39,  57, 22, 28,  41,  7, 13,  19,  0,  0,   0,  0,  0,
1026     127, 71, 66, 113, 62, 56, 100, 53, 48,  86, 44, 39,  71, 34, 29,  57, 23, 18,  41,  8,  2,  18,  0,  0,   0,  0,  0,
1027     128, 70, 55, 114, 62, 46, 100, 54, 39,  86, 44, 30,  71, 34, 20,  57, 23,  7,  41,  9,  0,  18,  0,  0,   0,  0,  0,
1028     124, 41, 145, 111, 32, 128,  99, 23, 114,  86, 10, 100,  73,  0, 85,  60,  0, 71,  43,  0, 54,  17,  0, 32,   0,  0,  0,
1029     126, 42, 131, 113, 33, 117, 100, 25, 104,  86, 14, 90,  73,  0, 77,  60,  0, 63,  44,  0, 47,  18,  0, 25,   0,  0,  0,
1030     127, 43, 120, 113, 34, 106, 101, 26, 95,  86, 17, 82,  73,  2, 69,  59,  0, 56,  43,  0, 41,  18,  0, 19,   0,  0,  0,
1031     127, 45, 109, 113, 37, 97, 101, 28, 85,  86, 19, 74,  73,  5, 61,  59,  0, 48,  43,  0, 34,  19,  0, 11,   0,  0,  0,
1032     127, 46, 98, 114, 38, 86, 100, 30, 76,  87, 21, 65,  73,  9, 54,  59,  0, 41,  43,  0, 26,  18,  0,  5,   0,  0,  0,
1033     127, 47, 87, 113, 39, 76, 101, 31, 67,  86, 22, 56,  72, 11, 45,  59,  0, 33,  43,  0, 19,  18,  0,  2,   0,  0,  0,
1034     128, 48, 75, 114, 39, 65, 101, 33, 56,  86, 23, 46,  72, 12, 36,  58,  0, 24,  42,  0,  9,  17,  0,  0,   0,  0,  0,
1035     129, 48, 63, 114, 41, 54, 102, 33, 46,  87, 24, 36,  72, 14, 26,  58,  1, 14,  42,  0,  2,  16,  0,  0,   0,  0,  0,
1036     128, 48, 53, 114, 41, 44, 102, 34, 37,  87, 25, 27,  72, 15, 17,  58,  1,  3,  41,  0,  0,  15,  0,  0,   0,  0,  0,
1037     0, 189, 242,   0, 169, 217,   0, 151, 194,   0, 132, 170,   0, 113, 147,   0, 94, 123,   0, 74, 99,   0, 51, 71,   0, 15, 34,
1038     1, 187, 219,   1, 167, 195,   0, 150, 175,   0, 131, 153,   0, 113, 132,   0, 94, 111,   0, 74, 89,   0, 50, 63,   0, 13, 28,
1039     1, 186, 198,   1, 167, 178,   0, 149, 158,   0, 130, 139,   0, 111, 119,   0, 93, 100,   0, 74, 80,   0, 50, 55,   0, 13, 22,
1040     1, 185, 176,   1, 165, 159,   1, 148, 142,   0, 129, 123,   0, 111, 106,   0, 93, 89,   0, 73, 70,   0, 50, 47,   0, 13, 13,
1041     1, 184, 157,   1, 164, 141,   1, 147, 125,   0, 128, 110,   0, 110, 93,   0, 92, 77,   0, 73, 60,   0, 50, 39,   0, 12,  5,
1042     25, 182, 137,  25, 163, 122,  17, 146, 109,   0, 128, 96,   0, 110, 81,   0, 92, 66,   0, 73, 51,   0, 50, 30,   0, 10,  0,
1043     42, 181, 114,  35, 163, 102,  30, 145, 91,  14, 127, 80,   0, 109, 67,   0, 91, 53,   0, 72, 39,   0, 50, 19,   0, 10,  0,
1044     52, 181, 92,  43, 162, 83,  32, 145, 73,  19, 126, 63,   0, 108, 52,   0, 90, 40,   0, 72, 27,   0, 50,  7,   0, 10,  0,
1045     57, 181, 74,  48, 162, 66,  37, 144, 57,  24, 126, 49,   7, 108, 40,   0, 90, 29,   0, 72, 15,   0, 49,  0,   0, 10,  0,
1046     1, 170, 227,   1, 152, 203,   0, 136, 182,   0, 119, 159,   0, 101, 137,   0, 84, 115,   0, 65, 92,   0, 43, 66,   0,  1, 29,
1047     1, 169, 206,   1, 151, 184,   1, 136, 165,   0, 118, 144,   0, 102, 125,   0, 84, 105,   0, 65, 83,   0, 43, 58,   0,  0, 22,
1048     29, 168, 186,  21, 151, 167,  14, 135, 150,   4, 118, 131,   0, 101, 112,   0, 83, 94,   0, 65, 75,   0, 43, 51,   0,  0, 16,
1049     41, 167, 167,  33, 150, 150,  31, 134, 134,  19, 117, 117,   4, 100, 100,   0, 83, 83,   0, 65, 65,   0, 42, 43,   0,  0,  8,
1050     48, 167, 149,  41, 149, 133,  33, 133, 118,  25, 116, 103,  13, 99, 88,   0, 83, 73,   0, 65, 56,   0, 42, 35,   0,  0,  0,
1051     58, 165, 130,  49, 148, 115,  42, 132, 103,  31, 115, 89,  18, 99, 75,   0, 82, 61,   0, 64, 46,   0, 42, 26,   0,  0,  0,
1052     62, 164, 110,  55, 147, 97,  45, 132, 87,  35, 115, 75,  22, 98, 63,   5, 82, 50,   0, 64, 36,   0, 42, 16,   0,  0,  0,
1053     69, 164, 89,  60, 147, 78,  50, 131, 70,  37, 114, 59,  26, 98, 49,  10, 81, 37,   0, 64, 24,   0, 42,  4,   0,  0,  0,
1054     71, 164, 71,  63, 147, 63,  53, 131, 55,  40, 114, 47,  28, 98, 38,  13, 81, 26,   0, 64, 12,   0, 42,  0,   0,  0,  0,
1055     28, 153, 214,  24, 138, 193,  23, 123, 171,  16, 107, 150,   0, 91, 130,   0, 75, 109,   0, 58, 87,   0, 35, 61,   0,  0, 25,
1056     48, 153, 194,  41, 138, 174,  34, 123, 156,  27, 107, 136,  16, 91, 117,   1, 75, 98,   0, 57, 78,   0, 35, 53,   0,  0, 17,
1057     55, 153, 177,  47, 137, 158,  42, 122, 142,  33, 107, 124,  22, 91, 106,   6, 75, 88,   0, 57, 70,   0, 35, 46,   0,  0,  9,
1058     61, 152, 158,  53, 136, 143,  45, 122, 127,  36, 106, 111,  24, 90, 94,  10, 74, 78,   0, 57, 61,   0, 35, 39,   0,  0,  2,
1059     67, 151, 141,  59, 135, 126,  49, 121, 112,  39, 105, 98,  29, 90, 83,  14, 74, 68,   0, 57, 52,   0, 35, 31,   0,  0,  0,
1060     71, 150, 123,  62, 135, 110,  54, 120, 98,  42, 105, 84,  31, 89, 71,  16, 74, 58,   0, 57, 43,   0, 35, 22,   0,  0,  0,
1061     74, 150, 105,  64, 134, 92,  55, 120, 83,  45, 104, 71,  34, 89, 59,  20, 73, 47,   0, 57, 32,   0, 35, 13,   0,  0,  0,
1062     78, 149, 84,  69, 134, 75,  59, 120, 66,  47, 103, 56,  34, 88, 46,  22, 73, 34,   1, 57, 20,   0, 35,  1,   0,  0,  0,
1063     80, 149, 69,  70, 133, 61,  60, 119, 53,  49, 103, 44,  36, 88, 35,  23, 73, 24,   2, 56, 10,   0, 35,  0,   0,  0,  0,
1064     58, 136, 200,  50, 122, 180,  45, 109, 162,  38, 94, 141,  27, 80, 121,  15, 65, 102,   0, 48, 81,   0, 26, 56,   0,  0, 19,
1065     66, 136, 182,  59, 122, 163,  52, 109, 146,  42, 94, 128,  32, 80, 109,  20, 65, 91,   2, 48, 72,   0, 26, 49,   0,  0, 11,
1066     70, 136, 165,  62, 122, 149,  55, 108, 133,  46, 94, 116,  35, 80, 99,  21, 65, 82,   4, 49, 64,   0, 26, 41,   0,  0,  3,
1067     76, 135, 149,  66, 121, 133,  58, 108, 119,  48, 94, 103,  36, 79, 88,  23, 65, 73,   7, 49, 56,   0, 27, 34,   0,  0,  0,
1068     78, 135, 133,  69, 120, 118,  60, 107, 106,  50, 93, 92,  39, 79, 77,  26, 65, 63,   8, 49, 47,   0, 27, 26,   0,  0,  0,
1069     82, 134, 117,  71, 120, 104,  62, 107, 92,  51, 93, 79,  39, 78, 66,  27, 64, 53,  10, 48, 39,   0, 27, 18,   0,  0,  0,
1070     84, 134, 99,  73, 119, 87,  64, 106, 77,  53, 92, 66,  42, 78, 55,  28, 64, 42,  11, 48, 29,   0, 28,  9,   0,  0,  0,
1071     87, 133, 81,  76, 119, 72,  66, 106, 62,  55, 92, 52,  43, 78, 42,  29, 64, 31,  12, 48, 17,   0, 28,  0,   0,  0,  0,
1072     88, 134, 67,  77, 119, 58,  68, 106, 51,  56, 92, 42,  44, 78, 32,  30, 64, 20,  12, 48,  6,   0, 28,  0,   0,  0,  0,
1073     73, 120, 189,  64, 107, 168,  57, 96, 151,  47, 82, 133,  38, 69, 114,  26, 55, 95,  11, 39, 75,   0, 16, 51,   0,  0, 14,
1074     78, 120, 171,  69, 107, 153,  62, 95, 137,  51, 82, 119,  40, 69, 102,  29, 55, 85,  15, 39, 66,   0, 17, 44,   0,  0,  4,
1075     81, 120, 156,  71, 107, 140,  64, 95, 125,  53, 82, 109,  42, 69, 93,  31, 55, 77,  16, 39, 59,   0, 18, 37,   0,  0,  0,
1076     85, 120, 141,  74, 107, 126,  65, 95, 112,  54, 82, 97,  43, 69, 82,  32, 55, 67,  17, 39, 51,   0, 19, 30,   0,  0,  0,
1077     86, 119, 126,  76, 106, 112,  66, 95, 100,  56, 81, 85,  45, 69, 72,  33, 55, 59,  18, 40, 43,   0, 19, 22,   0,  0,  0,
1078     89, 119, 110,  78, 106, 98,  69, 94, 87,  56, 81, 75,  46, 68, 62,  33, 55, 49,  18, 40, 35,   0, 20, 15,   0,  0,  0,
1079     89, 119, 95,  80, 106, 83,  70, 94, 73,  58, 81, 63,  46, 68, 51,  34, 55, 39,  19, 40, 25,   0, 20,  4,   0,  0,  0,
1080     92, 118, 78,  82, 106, 68,  70, 93, 59,  59, 81, 49,  47, 68, 39,  34, 55, 28,  19, 40, 14,   0, 20,  0,   0,  0,  0,
1081     93, 118, 65,  82, 105, 55,  72, 93, 48,  60, 81, 39,  47, 68, 29,  34, 55, 18,  20, 40,  2,   0, 20,  0,   0,  0,  0,
1082     83, 104, 177,  74, 93, 159,  65, 82, 142,  56, 70, 124,  45, 57, 106,  33, 44, 89,  20, 28, 70,   1,  4, 46,   0,  0,  8,
1083     86, 104, 161,  78, 93, 145,  68, 82, 128,  58, 70, 112,  48, 58, 96,  35, 45, 80,  21, 29, 62,   1,  6, 40,   0,  0,  0,
1084     89, 104, 147,  79, 93, 131,  69, 82, 118,  59, 70, 102,  47, 58, 87,  36, 45, 72,  23, 29, 55,   3,  7, 33,   0,  0,  0,
1085     90, 104, 132,  80, 93, 119,  71, 82, 106,  60, 70, 91,  48, 58, 77,  37, 45, 62,  23, 30, 47,   4,  7, 26,   0,  0,  0,
1086     92, 104, 118,  82, 93, 105,  72, 82, 93,  61, 69, 80,  50, 58, 68,  37, 45, 55,  23, 30, 39,   4,  8, 18,   0,  0,  0,
1087     94, 104, 105,  82, 92, 93,  72, 82, 82,  61, 70, 70,  50, 58, 58,  38, 46, 46,  23, 31, 31,   6, 10, 11,   0,  0,  0,
1088     95, 104, 90,  84, 92, 79,  74, 82, 70,  62, 70, 58,  50, 58, 48,  37, 46, 36,  23, 31, 22,   4, 11,  3,   0,  0,  0,
1089     96, 103, 74,  85, 92, 65,  75, 81, 56,  63, 70, 47,  50, 58, 37,  38, 46, 25,  24, 31, 11,   3, 11,  0,   0,  0,  0,
1090     97, 103, 62,  86, 92, 53,  76, 81, 45,  63, 69, 36,  51, 58, 27,  38, 46, 15,  23, 31,  0,   3, 11,  0,   0,  0,  0,
1091     90, 87, 165,  81, 77, 148,  72, 67, 132,  62, 55, 116,  50, 44, 99,  39, 31, 82,  25, 14, 64,   1,  0, 42,   0,  0,  1,
1092     93, 87, 150,  83, 77, 135,  74, 67, 121,  63, 56, 105,  52, 45, 90,  40, 32, 74,  25, 16, 57,   3,  0, 35,   0,  0,  0,
1093     95, 87, 138,  85, 77, 123,  75, 67, 109,  63, 57, 95,  53, 45, 81,  41, 33, 66,  26, 17, 50,   4,  0, 28,   0,  0,  0,
1094     95, 88, 124,  85, 77, 111,  75, 67, 99,  63, 57, 86,  53, 45, 72,  41, 33, 58,  26, 18, 43,   5,  1, 22,   0,  0,  0,
1095     97, 88, 112,  87, 77, 100,  76, 68, 88,  64, 57, 76,  53, 46, 63,  41, 34, 50,  26, 19, 35,   5,  2, 14,   0,  0,  0,
1096     99, 87, 99,  87, 78, 88,  76, 68, 77,  65, 57, 65,  53, 46, 54,  41, 35, 42,  27, 20, 27,   6,  2,  5,   0,  0,  0,
1097     100, 87, 85,  88, 77, 75,  77, 68, 65,  65, 57, 54,  53, 46, 44,  41, 35, 32,  27, 21, 19,   5,  3,  2,   0,  0,  0,
1098     100, 88, 71,  89, 77, 61,  78, 68, 53,  66, 57, 44,  53, 47, 33,  41, 35, 22,  27, 21,  7,   5,  3,  0,   0,  0,  0,
1099     101, 87, 60,  90, 77, 52,  79, 68, 44,  66, 58, 34,  53, 47, 25,  41, 35, 13,  26, 22,  0,   5,  3,  0,   0,  0,  0,
1100     97, 67, 155,  86, 58, 138,  77, 50, 125,  66, 39, 108,  55, 28, 92,  43, 12, 76,  29,  0, 59,   2,  0, 37,   0,  0,  0,
1101     99, 67, 141,  88, 59, 127,  78, 50, 113,  68, 40, 98,  56, 29, 83,  44, 15, 68,  29,  0, 52,   3,  0, 30,   0,  0,  0,
1102     100, 68, 129,  89, 59, 115,  80, 51, 103,  68, 41, 89,  56, 30, 75,  44, 16, 61,  30,  0, 45,   4,  0, 24,   0,  0,  0,
1103     100, 69, 118,  90, 60, 104,  80, 51, 92,  67, 41, 79,  56, 31, 66,  44, 18, 53,  29,  2, 38,   4,  0, 18,   0,  0,  0,
1104     101, 69, 104,  90, 61, 93,  79, 51, 82,  67, 42, 70,  56, 32, 59,  44, 20, 46,  29,  4, 31,   6,  0,  9,   0,  0,  0,
1105     102, 69, 93,  90, 61, 83,  80, 52, 72,  68, 42, 61,  56, 33, 50,  43, 20, 38,  29,  5, 23,   7,  0,  4,   0,  0,  0,
1106     102, 70, 80,  91, 61, 71,  80, 52, 61,  68, 43, 51,  56, 32, 40,  44, 21, 29,  30,  6, 14,   7,  0,  0,   0,  0,  0,
1107     103, 70, 68,  92, 61, 58,  81, 53, 50,  69, 43, 41,  56, 34, 31,  43, 22, 19,  29,  7,  3,   7,  0,  0,   0,  0,  0,
1108     104, 70, 57,  92, 61, 48,  82, 53, 40,  69, 43, 32,  56, 34, 22,  43, 23, 10,  29,  8,  0,   6,  0,  0,   0,  0,  0,
1109     101, 45, 145,  91, 35, 129,  80, 26, 116,  69, 15, 101,  59,  0, 86,  46,  0, 71,  31,  0, 55,   0,  0, 33,   0,  0,  0,
1110     104, 44, 132,  92, 36, 118,  82, 28, 105,  71, 17, 91,  58,  3, 77,  46,  0, 63,  31,  0, 48,   2,  0, 26,   0,  0,  0,
1111     104, 46, 121,  93, 37, 107,  82, 30, 96,  70, 20, 83,  58,  6, 70,  46,  0, 57,  32,  0, 41,   4,  0, 20,   0,  0,  0,
1112     104, 48, 110,  93, 40, 98,  82, 31, 87,  70, 22, 74,  59,  9, 62,  45,  0, 49,  31,  0, 35,   6,  0, 13,   0,  0,  0,
1113     104, 48, 99,  92, 41, 88,  82, 32, 77,  70, 23, 65,  58, 11, 54,  46,  0, 42,  32,  0, 27,   7,  0,  5,   0,  0,  0,
1114     105, 50, 88,  93, 41, 77,  82, 34, 68,  71, 24, 57,  58, 13, 46,  45,  1, 35,  31,  0, 21,   7,  0,  2,   0,  0,  0,
1115     105, 50, 76,  94, 41, 66,  83, 34, 57,  71, 25, 47,  58, 15, 37,  45,  2, 25,  32,  0, 11,   7,  0,  0,   0,  0,  0,
1116     106, 50, 64,  94, 42, 55,  83, 35, 47,  71, 26, 38,  58, 16, 27,  45,  4, 17,  31,  0,  4,   7,  0,  0,   0,  0,  0,
1117     106, 51, 54,  95, 42, 45,  83, 35, 38,  71, 27, 30,  58, 16, 19,  45,  5,  7,  30,  0,  0,   6,  0,  0,   0,  0,  0,
1118     0, 181, 240,   0, 162, 216,   0, 144, 193,   0, 126, 168,   0, 109, 146,   0, 91, 123,   0, 71, 98,   0, 48, 71,   0,  9, 34,
1119     0, 179, 218,   0, 161, 195,   0, 144, 174,   0, 126, 153,   0, 108, 132,   0, 90, 110,   0, 71, 88,   0, 48, 63,   0,  8, 29,
1120     0, 178, 197,   0, 159, 177,   0, 143, 159,   0, 125, 139,   0, 107, 119,   0, 90, 99,   0, 71, 79,   0, 48, 55,   0,  8, 22,
1121     0, 177, 177,   0, 158, 158,   0, 142, 141,   0, 124, 123,   0, 107, 106,   0, 89, 88,   0, 71, 70,   0, 48, 47,   0,  8, 14,
1122     0, 176, 157,   0, 158, 141,   0, 141, 126,   0, 123, 109,   0, 106, 93,   0, 89, 78,   0, 70, 60,   0, 47, 39,   0,  7,  5,
1123     0, 175, 138,   0, 157, 123,   0, 141, 110,   0, 123, 96,   0, 105, 81,   0, 88, 67,   0, 70, 51,   0, 48, 30,   0,  6,  0,
1124     0, 173, 115,   0, 155, 104,   0, 140, 92,   0, 122, 80,   0, 105, 67,   0, 88, 55,   0, 69, 40,   0, 47, 20,   0,  6,  0,
1125     0, 173, 94,   0, 155, 85,   0, 139, 75,   0, 121, 64,   0, 104, 53,   0, 88, 42,   0, 70, 28,   0, 47,  9,   0,  6,  0,
1126     0, 173, 76,   0, 155, 70,   0, 138, 61,   0, 122, 53,   0, 104, 44,   0, 87, 32,   0, 69, 18,   0, 47,  0,   0,  6,  0,
1127     0, 164, 226,   0, 147, 203,   0, 131, 181,   0, 114, 158,   0, 97, 136,   0, 80, 115,   0, 63, 92,   0, 40, 65,   0,  0, 30,
1128     0, 162, 205,   0, 145, 184,   0, 130, 164,   0, 114, 143,   0, 97, 124,   0, 81, 104,   0, 63, 83,   0, 40, 58,   0,  0, 23,
1129     0, 162, 187,   0, 145, 167,   0, 130, 150,   0, 113, 131,   0, 96, 112,   0, 80, 93,   0, 62, 74,   0, 40, 50,   0,  0, 16,
1130     0, 160, 167,   0, 144, 150,   0, 129, 134,   0, 112, 116,   0, 96, 100,   0, 80, 82,   0, 62, 65,   0, 40, 43,   0,  0,  7,
1131     0, 160, 148,   0, 143, 133,   0, 128, 118,   0, 111, 103,   0, 96, 88,   0, 80, 73,   0, 62, 56,   0, 40, 35,   0,  0,  0,
1132     0, 158, 130,   0, 142, 117,   0, 127, 104,   0, 111, 89,   0, 95, 76,   0, 79, 62,   0, 62, 46,   0, 40, 26,   0,  0,  0,
1133     0, 158, 111,   0, 141, 99,   0, 127, 88,   0, 111, 76,   0, 95, 63,   0, 79, 51,   0, 62, 37,   0, 40, 18,   0,  0,  0,
1134     0, 158, 91,   0, 141, 81,   0, 126, 72,   0, 110, 62,   0, 94, 50,   0, 79, 39,   0, 62, 25,   0, 40,  5,   0,  0,  0,
1135     0, 157, 74,   0, 141, 66,   0, 126, 59,   0, 110, 49,   0, 94, 40,   0, 78, 29,   0, 61, 15,   0, 40,  0,   0,  0,  0,
1136     0, 148, 214,   0, 133, 192,   0, 119, 171,   0, 103, 150,   0, 87, 129,   0, 72, 108,   0, 55, 86,   0, 32, 61,   0,  0, 25,
1137     0, 147, 193,   0, 132, 173,   0, 118, 155,   0, 103, 136,   0, 87, 116,   0, 72, 98,   0, 55, 78,   0, 32, 53,   0,  0, 17,
1138     0, 147, 176,   0, 132, 158,   0, 118, 142,   0, 102, 124,   0, 87, 106,   0, 72, 88,   0, 55, 69,   0, 33, 46,   0,  0,  9,
1139     0, 146, 159,   0, 131, 142,   0, 117, 127,   0, 102, 111,   0, 87, 95,   0, 71, 79,   0, 55, 61,   0, 33, 39,   0,  0,  2,
1140     0, 145, 140,   0, 130, 126,   0, 117, 112,   0, 101, 98,   0, 86, 83,   0, 71, 68,   0, 55, 52,   0, 33, 31,   0,  0,  0,
1141     0, 144, 124,   0, 130, 111,   0, 116, 99,   0, 101, 84,   0, 86, 72,   0, 71, 59,   0, 55, 43,   0, 33, 23,   0,  0,  0,
1142     0, 144, 106,   0, 129, 94,   0, 115, 83,   0, 101, 72,   0, 85, 60,   0, 71, 48,   0, 55, 34,   0, 33, 14,   0,  0,  0,
1143     3, 143, 86,   0, 129, 77,   0, 115, 68,   0, 100, 58,   0, 85, 48,   0, 70, 36,   0, 54, 22,   0, 33,  3,   0,  0,  0,
1144     18, 143, 72,  13, 128, 63,   0, 115, 57,   0, 100, 47,   0, 85, 37,   0, 70, 26,   0, 54, 13,   0, 33,  0,   0,  0,  0,
1145     0, 132, 200,   0, 118, 179,   0, 105, 161,   0, 91, 140,   0, 76, 121,   0, 62, 101,   0, 46, 81,   0, 24, 56,   0,  0, 19,
1146     0, 131, 182,   0, 118, 163,   0, 105, 146,   0, 91, 128,   0, 77, 110,   0, 62, 91,   0, 46, 72,   0, 25, 48,   0,  0, 11,
1147     0, 131, 165,   0, 117, 149,   0, 104, 133,   0, 91, 116,   0, 77, 99,   0, 62, 82,   0, 46, 64,   0, 25, 41,   0,  0,  4,
1148     0, 131, 149,   0, 116, 134,   0, 104, 119,   0, 91, 104,   0, 77, 89,   0, 62, 73,   0, 46, 56,   0, 25, 34,   0,  0,  0,
1149     10, 130, 133,   2, 116, 119,   0, 104, 106,   0, 90, 91,   0, 76, 78,   0, 62, 64,   0, 46, 48,   0, 26, 27,   0,  0,  0,
1150     23, 130, 118,  20, 116, 104,  13, 103, 93,   3, 89, 79,   0, 76, 67,   0, 62, 54,   0, 46, 39,   0, 26, 19,   0,  0,  0,
1151     33, 129, 101,  27, 115, 89,  19, 103, 79,   9, 89, 67,   0, 75, 56,   0, 61, 43,   0, 46, 29,   0, 26, 10,   0,  0,  0,
1152     41, 128, 83,  35, 115, 73,  27, 102, 64,  15, 89, 55,   0, 76, 45,   0, 62, 33,   0, 46, 18,   0, 26,  0,   0,  0,  0,
1153     43, 129, 69,  38, 115, 61,  30, 102, 54,  17, 89, 45,   2, 75, 34,   0, 61, 23,   0, 46,  9,   0, 26,  0,   0,  0,  0,
1154     1, 116, 188,   1, 104, 168,   0, 92, 151,   0, 79, 132,   0, 66, 113,   0, 52, 94,   0, 36, 75,   0, 14, 52,   0,  0, 14,
1155     17, 116, 171,  16, 104, 153,  14, 92, 137,   8, 79, 119,   0, 67, 102,   0, 53, 85,   0, 37, 67,   0, 16, 44,   0,  0,  4,
1156     31, 116, 155,  27, 104, 140,  21, 92, 125,  13, 79, 109,   3, 66, 93,   0, 53, 77,   0, 37, 59,   0, 16, 38,   0,  0,  0,
1157     37, 115, 141,  30, 103, 126,  26, 92, 112,  16, 79, 98,   5, 66, 83,   0, 53, 67,   0, 38, 51,   0, 17, 31,   0,  0,  0,
1158     41, 115, 126,  37, 103, 112,  31, 92, 100,  22, 79, 86,  10, 66, 72,   0, 53, 59,   0, 38, 44,   0, 17, 23,   0,  0,  0,
1159     48, 115, 111,  41, 102, 99,  34, 91, 88,  24, 78, 76,  14, 66, 63,   0, 53, 50,   0, 38, 36,   0, 18, 15,   0,  0,  0,
1160     51, 115, 95,  46, 102, 85,  37, 91, 74,  26, 78, 63,  16, 66, 52,   0, 53, 40,   0, 38, 26,   0, 18,  5,   0,  0,  0,
1161     55, 114, 80,  47, 102, 69,  40, 90, 60,  30, 78, 51,  19, 66, 41,   3, 53, 29,   0, 38, 15,   0, 17,  0,   0,  0,  0,
1162     56, 114, 66,  50, 102, 58,  40, 91, 50,  32, 78, 41,  18, 66, 32,   4, 53, 21,   0, 38,  5,   0, 17,  0,   0,  0,  0,
1163     39, 102, 178,  37, 90, 159,  30, 79, 142,  21, 68, 124,  14, 55, 106,   0, 42, 89,   0, 26, 70,   0,  4, 46,   0,  0,  8,
1164     48, 102, 161,  42, 90, 145,  35, 79, 128,  26, 68, 112,  19, 55, 96,   3, 43, 79,   0, 27, 62,   0,  6, 40,   0,  0,  0,
1165     50, 102, 147,  44, 90, 132,  37, 79, 118,  30, 68, 102,  20, 56, 87,   7, 43, 72,   0, 28, 55,   0,  6, 34,   0,  0,  0,
1166     53, 101, 133,  47, 90, 118,  41, 79, 106,  32, 68, 91,  21, 56, 78,   9, 43, 63,   0, 28, 47,   0,  6, 26,   0,  0,  0,
1167     57, 101, 119,  50, 89, 106,  42, 79, 94,  34, 67, 81,  24, 56, 68,   9, 44, 55,   0, 29, 40,   0,  6, 19,   0,  0,  0,
1168     60, 100, 105,  50, 90, 94,  45, 80, 83,  36, 68, 71,  24, 56, 59,  11, 44, 46,   0, 29, 32,   0,  7, 12,   0,  0,  0,
1169     63, 101, 91,  55, 90, 80,  46, 79, 70,  37, 68, 59,  26, 56, 49,  12, 44, 37,   1, 29, 23,   0,  7,  3,   0,  0,  0,
1170     64, 101, 75,  56, 89, 67,  48, 79, 57,  37, 68, 48,  27, 56, 37,  15, 44, 26,   0, 29, 12,   0,  7,  0,   0,  0,  0,
1171     66, 101, 64,  58, 89, 55,  49, 79, 47,  39, 68, 38,  27, 56, 29,  14, 44, 18,   1, 30,  2,   0,  7,  0,   0,  0,  0,
1172     57, 86, 165,  51, 75, 148,  45, 65, 133,  38, 54, 116,  28, 43, 100,  16, 29, 83,   0, 13, 64,   0,  0, 42,   0,  0,  3,
1173     60, 86, 151,  55, 75, 135,  47, 66, 121,  39, 55, 105,  30, 44, 90,  18, 31, 74,   3, 16, 57,   0,  1, 35,   0,  0,  0,
1174     62, 86, 139,  56, 75, 123,  49, 66, 110,  40, 55, 95,  30, 44, 81,  19, 31, 66,   4, 17, 51,   0,  1, 29,   0,  0,  0,
1175     65, 86, 125,  56, 76, 112,  49, 66, 99,  39, 55, 86,  31, 44, 72,  19, 32, 59,   5, 18, 44,   0,  1, 23,   0,  0,  0,
1176     67, 86, 113,  58, 75, 100,  51, 66, 88,  41, 56, 77,  31, 45, 64,  20, 32, 51,   6, 18, 35,   0,  1, 14,   0,  0,  0,
1177     69, 86, 99,  61, 76, 88,  52, 66, 78,  43, 56, 66,  32, 45, 55,  20, 33, 42,   7, 19, 27,   0,  1,  6,   0,  0,  0,
1178     69, 86, 86,  61, 76, 75,  53, 67, 66,  43, 56, 55,  33, 45, 45,  21, 34, 34,   8, 20, 20,   0,  2,  2,   0,  0,  0,
1179     71, 86, 72,  63, 75, 62,  54, 66, 55,  45, 56, 45,  33, 45, 35,  22, 34, 23,   7, 20,  8,   0,  2,  0,   0,  0,  0,
1180     71, 86, 62,  64, 75, 53,  55, 66, 46,  45, 56, 36,  33, 46, 27,  22, 34, 15,   8, 20,  0,   0,  2,  0,   0,  0,  0,
1181     69, 67, 156,  61, 58, 140,  53, 50, 125,  45, 39, 108,  35, 28, 93,  25, 12, 77,  12,  0, 59,   0,  0, 37,   0,  0,  0,
1182     71, 68, 142,  63, 59, 126,  56, 50, 114,  47, 40, 98,  37, 28, 84,  26, 15, 68,  12,  0, 53,   0,  0, 30,   0,  0,  0,
1183     72, 68, 130,  63, 59, 116,  56, 50, 104,  47, 40, 90,  38, 30, 75,  27, 16, 61,  13,  0, 46,   0,  0, 24,   0,  0,  0,
1184     73, 69, 118,  65, 59, 105,  57, 51, 92,  47, 41, 80,  37, 30, 67,  26, 18, 53,  14,  1, 39,   0,  0, 18,   0,  0,  0,
1185     74, 69, 106,  65, 60, 93,  57, 51, 82,  48, 41, 70,  38, 31, 59,  26, 19, 46,  13,  2, 32,   0,  0, 10,   0,  0,  0,
1186     76, 69, 95,  66, 61, 84,  58, 52, 73,  48, 42, 61,  37, 32, 50,  26, 20, 38,  14,  4, 24,   0,  0,  4,   0,  0,  0,
1187     76, 69, 81,  68, 60, 72,  58, 52, 62,  48, 42, 51,  38, 32, 41,  27, 21, 30,  14,  4, 16,   0,  0,  1,   0,  0,  0,
1188     76, 69, 68,  68, 61, 60,  60, 52, 51,  49, 43, 41,  38, 33, 32,  27, 21, 20,  14,  5,  5,   0,  0,  0,   0,  0,  0,
1189     78, 70, 59,  69, 61, 50,  60, 52, 42,  49, 43, 34,  39, 33, 24,  27, 22, 13,  14,  7,  1,   0,  0,  0,   0,  0,  0,
1190     75, 46, 146,  68, 38, 131,  60, 30, 117,  50, 19, 102,  41,  4, 87,  29,  0, 72,  13,  0, 55,   0,  0, 33,   0,  0,  0,
1191     78, 47, 132,  70, 39, 119,  61, 30, 105,  53, 20, 92,  42,  5, 78,  30,  0, 64,  13,  0, 49,   0,  0, 27,   0,  0,  0,
1192     79, 48, 122,  70, 40, 108,  62, 32, 96,  52, 22, 84,  42,  9, 71,  30,  0, 58,  14,  0, 42,   0,  0, 20,   0,  0,  0,
1193     79, 50, 111,  70, 42, 99,  62, 33, 88,  52, 23, 74,  41, 11, 63,  29,  0, 50,  14,  0, 36,   0,  0, 14,   0,  0,  0,
1194     80, 50, 99,  70, 42, 89,  61, 34, 78,  52, 25, 67,  41, 14, 55,  30,  0, 42,  15,  0, 28,   0,  0,  6,   0,  0,  0,
1195     81, 51, 89,  71, 43, 78,  62, 35, 69,  52, 25, 58,  42, 15, 47,  30,  3, 36,  15,  0, 22,   0,  0,  3,   0,  0,  0,
1196     81, 51, 77,  71, 44, 68,  63, 36, 59,  53, 26, 49,  41, 16, 38,  31,  4, 27,  16,  0, 12,   0,  0,  0,   0,  0,  0,
1197     81, 52, 65,  72, 43, 56,  63, 36, 48,  53, 27, 39,  41, 17, 29,  30,  4, 18,  14,  0,  3,   0,  0,  0,   0,  0,  0,
1198     81, 52, 55,  73, 44, 47,  64, 36, 39,  53, 28, 32,  42, 18, 21,  31,  6,  9,  14,  0,  0,   0,  0,  0,   0,  0,  0,
1199     0, 174, 239,   0, 156, 214,   0, 139, 192,   0, 121, 168,   0, 105, 145,   0, 87, 123,   0, 68, 98,   0, 46, 70,   0,  3, 35,
1200     0, 172, 217,   0, 155, 194,   0, 139, 173,   0, 121, 152,   0, 104, 130,   0, 87, 110,   0, 69, 88,   0, 46, 63,   0,  4, 28,
1201     0, 171, 197,   0, 153, 175,   0, 138, 158,   0, 121, 139,   0, 103, 118,   0, 86, 100,   0, 68, 79,   0, 46, 55,   0,  4, 22,
1202     0, 170, 177,   0, 152, 158,   0, 136, 141,   0, 119, 124,   0, 103, 106,   0, 86, 88,   0, 68, 70,   0, 45, 47,   0,  3, 14,
1203     0, 169, 157,   0, 152, 141,   0, 136, 126,   0, 119, 109,   0, 102, 94,   0, 86, 78,   0, 68, 60,   0, 46, 39,   0,  3,  5,
1204     0, 167, 138,   0, 150, 124,   0, 135, 111,   0, 118, 97,   0, 102, 82,   0, 85, 68,   0, 68, 52,   0, 46, 31,   0,  3,  0,
1205     0, 167, 118,   0, 150, 104,   0, 135, 94,   0, 118, 81,   0, 101, 69,   0, 84, 56,   0, 67, 41,   0, 45, 21,   0,  3,  0,
1206     0, 166, 97,   0, 149, 87,   0, 134, 77,   0, 117, 67,   0, 101, 56,   0, 85, 44,   0, 67, 30,   0, 45, 10,   0,  3,  0,
1207     0, 165, 79,   0, 149, 73,   0, 133, 64,   0, 117, 56,   0, 101, 46,   0, 85, 34,   0, 68, 21,   0, 46,  1,   0,  3,  0,
1208     0, 158, 225,   0, 141, 201,   0, 126, 180,   0, 109, 158,   0, 94, 136,   0, 78, 114,   0, 60, 91,   0, 38, 66,   0,  0, 30,
1209     0, 156, 203,   0, 140, 183,   0, 125, 164,   0, 109, 143,   0, 94, 124,   0, 78, 104,   0, 61, 83,   0, 38, 57,   0,  0, 23,
1210     0, 156, 186,   0, 140, 166,   0, 125, 150,   0, 109, 130,   0, 93, 111,   0, 77, 93,   0, 60, 74,   0, 38, 50,   0,  0, 17,
1211     0, 155, 167,   0, 138, 149,   0, 124, 134,   0, 109, 117,   0, 93, 100,   0, 76, 83,   0, 60, 65,   0, 38, 43,   0,  0,  9,
1212     0, 153, 147,   0, 138, 134,   0, 124, 120,   0, 107, 103,   0, 92, 88,   0, 77, 73,   0, 60, 56,   0, 38, 35,   0,  0,  0,
1213     0, 153, 131,   0, 137, 118,   0, 122, 105,   0, 107, 90,   0, 91, 76,   0, 76, 63,   0, 60, 47,   0, 39, 28,   0,  0,  0,
1214     0, 153, 111,   0, 136, 100,   0, 123, 90,   0, 107, 77,   0, 92, 65,   0, 76, 52,   0, 60, 37,   0, 38, 18,   0,  0,  0,
1215     0, 152, 93,   0, 136, 82,   0, 122, 74,   0, 106, 63,   0, 91, 52,   0, 76, 40,   0, 59, 26,   0, 38,  6,   0,  0,  0,
1216     0, 151, 78,   0, 136, 69,   0, 121, 61,   0, 106, 52,   0, 91, 43,   0, 76, 32,   0, 59, 17,   0, 38,  0,   0,  0,  0,
1217     0, 143, 213,   0, 128, 191,   0, 115, 171,   0, 100, 149,   0, 84, 128,   0, 69, 108,   0, 52, 86,   0, 30, 61,   0,  0, 25,
1218     0, 142, 193,   0, 127, 173,   0, 114, 154,   0, 99, 134,   0, 84, 116,   0, 69, 98,   0, 52, 77,   0, 31, 53,   0,  0, 18,
1219     0, 141, 176,   0, 127, 158,   0, 114, 141,   0, 98, 122,   0, 84, 105,   0, 69, 88,   0, 53, 69,   0, 31, 46,   0,  0,  9,
1220     0, 141, 159,   0, 126, 142,   0, 113, 127,   0, 98, 110,   0, 83, 95,   0, 69, 78,   0, 53, 60,   0, 32, 39,   0,  0,  2,
1221     0, 140, 140,   0, 126, 126,   0, 112, 112,   0, 98, 98,   0, 83, 83,   0, 68, 69,   0, 52, 52,   0, 31, 31,   0,  0,  0,
1222     0, 140, 124,   0, 125, 112,   0, 112, 100,   0, 97, 86,   0, 83, 72,   0, 68, 59,   0, 52, 44,   0, 31, 23,   0,  0,  0,
1223     0, 139, 106,   0, 125, 96,   0, 111, 85,   0, 97, 72,   0, 83, 62,   0, 68, 49,   0, 52, 35,   0, 31, 15,   0,  0,  0,
1224     0, 138, 88,   0, 124, 79,   0, 111, 70,   0, 96, 59,   0, 82, 48,   0, 68, 38,   0, 52, 24,   0, 31,  4,   0,  0,  0,
1225     0, 139, 76,   0, 124, 66,   0, 111, 58,   0, 96, 50,   0, 82, 40,   0, 68, 29,   0, 52, 15,   0, 31,  0,   0,  0,  0,
1226     0, 129, 200,   0, 114, 179,   0, 102, 160,   0, 87, 139,   0, 74, 120,   0, 60, 101,   0, 44, 81,   0, 22, 56,   0,  0, 19,
1227     0, 127, 181,   0, 114, 163,   0, 102, 146,   0, 88, 127,   0, 74, 109,   0, 60, 91,   0, 44, 72,   0, 23, 48,   0,  0, 11,
1228     0, 127, 166,   0, 113, 148,   0, 101, 133,   0, 87, 115,   0, 74, 99,   0, 60, 82,   0, 44, 64,   0, 23, 42,   0,  0,  4,
1229     0, 127, 150,   0, 113, 134,   0, 101, 119,   0, 87, 104,   0, 74, 89,   0, 60, 73,   0, 44, 56,   0, 23, 35,   0,  0,  0,
1230     0, 125, 134,   0, 112, 118,   0, 100, 106,   0, 87, 92,   0, 73, 78,   0, 60, 64,   0, 44, 48,   0, 23, 27,   0,  0,  0,
1231     0, 125, 118,   0, 112, 105,   0, 100, 94,   0, 86, 80,   0, 73, 68,   0, 60, 54,   0, 44, 39,   0, 23, 20,   0,  0,  0,
1232     0, 125, 101,   0, 111, 90,   0, 99, 80,   0, 86, 69,   0, 73, 58,   0, 59, 45,   0, 44, 30,   0, 23, 11,   0,  0,  0,
1233     0, 124, 85,   0, 111, 75,   0, 99, 66,   0, 86, 56,   0, 73, 45,   0, 59, 34,   0, 44, 20,   0, 23,  1,   0,  0,  0,
1234     0, 125, 72,   0, 111, 62,   0, 99, 56,   0, 86, 46,   0, 73, 36,   0, 60, 26,   0, 44, 12,   0, 23,  0,   0,  0,  0,
1235     0, 114, 188,   0, 101, 167,   0, 89, 150,   0, 77, 131,   0, 64, 113,   0, 50, 95,   0, 34, 75,   0, 12, 52,   0,  0, 14,
1236     0, 113, 170,   0, 101, 153,   0, 89, 137,   0, 77, 120,   0, 64, 102,   0, 50, 85,   0, 35, 67,   0, 12, 44,   0,  0,  4,
1237     0, 113, 156,   0, 100, 139,   0, 89, 125,   0, 77, 109,   0, 64, 92,   0, 51, 77,   0, 35, 60,   0, 12, 38,   0,  0,  0,
1238     0, 112, 141,   0, 100, 126,   0, 89, 113,   0, 77, 98,   0, 64, 83,   0, 51, 68,   0, 35, 51,   0, 12, 30,   0,  0,  0,
1239     0, 112, 127,   0, 100, 112,   0, 89, 100,   0, 76, 87,   0, 64, 74,   0, 51, 59,   0, 35, 44,   0, 13, 24,   0,  0,  0,
1240     0, 112, 111,   0, 100, 100,   0, 88, 88,   0, 76, 76,   0, 64, 64,   0, 51, 52,   0, 36, 37,   0, 13, 17,   0,  0,  0,
1241     0, 111, 96,   0, 99, 85,   0, 88, 76,   0, 76, 64,   0, 64, 53,   0, 51, 41,   0, 36, 27,   0, 13,  6,   0,  0,  0,
1242     0, 111, 81,   0, 99, 71,   0, 88, 62,   0, 76, 52,   0, 64, 43,   0, 51, 31,   0, 36, 17,   0, 13,  0,   0,  0,  0,
1243     0, 111, 69,   0, 99, 60,   0, 88, 52,   0, 75, 43,   0, 63, 34,   0, 51, 21,   0, 36,  7,   0, 13,  0,   0,  0,  0,
1244     0, 99, 177,   0, 88, 158,   0, 77, 141,   0, 66, 123,   0, 53, 106,   0, 40, 89,   0, 25, 71,   0,  5, 47,   0,  0,  8,
1245     0, 99, 160,   0, 88, 144,   0, 77, 129,   0, 66, 112,   0, 54, 97,   0, 41, 80,   0, 26, 62,   0,  5, 40,   0,  0,  0,
1246     0, 99, 147,   0, 87, 132,   0, 78, 117,   0, 66, 102,   0, 54, 87,   0, 42, 72,   0, 26, 55,   0,  5, 34,   0,  0,  0,
1247     0, 99, 134,   0, 88, 119,   0, 77, 107,   0, 66, 92,   0, 54, 78,   0, 42, 64,   0, 27, 48,   0,  5, 27,   0,  0,  0,
1248     0, 99, 120,   0, 87, 107,   0, 78, 94,   0, 66, 81,   0, 54, 68,   0, 42, 55,   0, 27, 40,   0,  6, 20,   0,  0,  0,
1249     0, 98, 105,   0, 87, 94,   0, 77, 84,   0, 65, 71,   0, 55, 59,   0, 42, 47,   0, 28, 33,   0,  6, 12,   0,  0,  0,
1250     0, 98, 93,   0, 87, 81,   0, 77, 72,   0, 66, 61,   0, 54, 49,   0, 42, 37,   0, 28, 24,   0,  6,  4,   0,  0,  0,
1251     0, 98, 77,   0, 87, 68,   0, 77, 59,   0, 65, 49,   0, 54, 39,   0, 42, 27,   0, 29, 14,   0,  6,  0,   0,  0,  0,
1252     1, 98, 65,   7, 87, 56,   0, 77, 49,   0, 66, 41,   0, 54, 30,   0, 42, 19,   0, 29,  3,   0,  6,  0,   0,  0,  0,
1253     0, 84, 166,   0, 74, 149,   0, 64, 134,   0, 53, 117,   0, 41, 100,   0, 28, 83,   0, 11, 64,   0,  0, 42,   0,  0,  3,
1254     0, 84, 151,   0, 74, 135,   0, 64, 121,   0, 53, 105,   0, 42, 90,   0, 30, 75,   0, 14, 58,   0,  0, 36,   0,  0,  0,
1255     0, 84, 138,   0, 74, 124,   1, 64, 110,   0, 54, 95,   0, 43, 81,   0, 30, 67,   0, 15, 51,   0,  1, 29,   0,  0,  0,
1256     14, 84, 126,  12, 74, 112,   2, 65, 99,   0, 54, 85,   0, 44, 73,   0, 31, 59,   0, 16, 44,   0,  1, 23,   0,  0,  0,
1257     16, 84, 113,  13, 74, 100,   6, 65, 89,   0, 54, 77,   0, 44, 65,   0, 31, 51,   0, 17, 36,   0,  1, 16,   0,  0,  0,
1258     24, 84, 100,  18, 74, 88,  13, 65, 78,   2, 55, 68,   0, 44, 55,   0, 32, 43,   0, 18, 28,   0,  1,  6,   0,  0,  0,
1259     26, 84, 87,  24, 74, 76,  17, 65, 67,   7, 54, 57,   0, 44, 46,   0, 32, 35,   0, 19, 21,   0,  2,  3,   0,  0,  0,
1260     30, 84, 74,  28, 74, 64,  20, 65, 55,  12, 55, 46,   0, 44, 35,   0, 32, 24,   0, 18,  9,   0,  1,  0,   0,  0,  0,
1261     32, 84, 63,  28, 74, 54,  21, 65, 47,  13, 54, 38,   0, 44, 28,   0, 32, 16,   0, 18,  1,   0,  1,  0,   0,  0,  0,
1262     30, 67, 155,  20, 58, 139,  20, 49, 126,  12, 39, 110,   0, 27, 94,   0, 13, 77,   0,  0, 60,   0,  0, 37,   0,  0,  0,
1263     35, 67, 142,  30, 58, 126,  23, 50, 114,  16, 40, 99,   7, 29, 85,   0, 15, 69,   0,  0, 52,   0,  0, 30,   0,  0,  0,
1264     35, 68, 131,  30, 59, 116,  27, 50, 104,  18, 40, 90,   9, 29, 76,   0, 17, 62,   0,  2, 46,   0,  0, 24,   0,  0,  0,
1265     37, 69, 119,  33, 59, 106,  27, 51, 94,  21, 41, 80,   9, 30, 67,   0, 18, 54,   0,  3, 39,   0,  0, 18,   0,  0,  0,
1266     40, 69, 107,  36, 59, 94,  28, 51, 84,  18, 41, 72,  10, 31, 60,   0, 19, 47,   0,  4, 32,   0,  0, 10,   0,  0,  0,
1267     42, 69, 95,  36, 59, 84,  29, 51, 74,  19, 41, 63,  10, 31, 52,   0, 20, 39,   0,  4, 25,   0,  0,  4,   0,  0,  0,
1268     43, 69, 83,  38, 60, 73,  32, 51, 62,  23, 42, 53,  11, 31, 42,   0, 20, 31,   0,  5, 17,   0,  0,  1,   0,  0,  0,
1269     45, 69, 70,  39, 60, 60,  33, 51, 52,  24, 42, 43,  13, 32, 33,   0, 21, 21,   0,  5,  6,   0,  0,  0,   0,  0,  0,
1270     47, 69, 59,  41, 60, 51,  34, 51, 43,  24, 42, 35,  12, 33, 26,   1, 22, 14,   0,  5,  1,   0,  0,  0,   0,  0,  0,
1271     46, 48, 146,  42, 40, 131,  36, 32, 118,  27, 22, 103,  17,  6, 88,   5,  0, 73,   0,  0, 55,   0,  0, 33,   0,  0,  0,
1272     48, 48, 133,  44, 40, 119,  37, 32, 107,  28, 22, 93,  20,  8, 79,   7,  0, 65,   0,  0, 49,   0,  0, 27,   0,  0,  0,
1273     48, 50, 123,  44, 41, 109,  37, 33, 97,  30, 23, 83,  21, 11, 71,   8,  0, 58,   0,  0, 42,   0,  0, 21,   0,  0,  0,
1274     49, 51, 111,  45, 42, 99,  38, 34, 87,  29, 25, 75,  20, 13, 63,   8,  0, 51,   0,  0, 36,   0,  0, 14,   0,  0,  0,
1275     52, 52, 100,  44, 43, 89,  38, 35, 79,  29, 26, 68,  19, 15, 56,  10,  1, 43,   0,  0, 28,   0,  0,  6,   0,  0,  0,
1276     52, 52, 90,  47, 44, 79,  39, 36, 70,  30, 27, 59,  20, 16, 47,   9,  2, 36,   0,  0, 22,   0,  0,  2,   0,  0,  0,
1277     52, 53, 78,  46, 44, 68,  39, 37, 60,  32, 27, 49,  22, 17, 39,  10,  3, 28,   0,  0, 12,   0,  0,  0,   0,  0,  0,
1278     53, 53, 66,  47, 44, 57,  40, 36, 48,  32, 27, 39,  22, 18, 30,   9,  4, 18,   0,  0,  3,   0,  0,  0,   0,  0,  0,
1279     54, 53, 57,  48, 45, 49,  41, 37, 41,  33, 28, 32,  22, 19, 23,  11,  6, 10,   1,  0,  0,   0,  0,  0,   0,  0,  0,
1280 };
1281 void AdobeCMYK_to_sRGB1(uint8_t c, uint8_t m, uint8_t y, uint8_t k, uint8_t& R, uint8_t& G, uint8_t& B)
1282 {
1283     int fix_c = c << 8;
1284     int fix_m = m << 8;
1285     int fix_y = y << 8;
1286     int fix_k = k << 8;
1287     int c_index = (fix_c + 4096) >> 13;
1288     int m_index = (fix_m + 4096) >> 13;
1289     int y_index = (fix_y + 4096) >> 13;
1290     int k_index = (fix_k + 4096) >> 13;
1291     int pos = (c_index * 9 * 9 * 9 + m_index * 9 * 9 + y_index * 9 + k_index) * 3;
1292     int fix_r = g_CMYKSamples[pos] << 8;
1293     int fix_g = g_CMYKSamples[pos + 1] << 8;
1294     int fix_b = g_CMYKSamples[pos + 2] << 8;
1295     int c1_index = fix_c >> 13;
1296     if (c1_index == c_index) {
1297         c1_index = c1_index == 8 ? c1_index - 1 : c1_index + 1;
1298     }
1299     int m1_index = fix_m >> 13;
1300     if (m1_index == m_index) {
1301         m1_index = m1_index == 8 ? m1_index - 1 : m1_index + 1;
1302     }
1303     int y1_index = fix_y >> 13;
1304     if (y1_index == y_index) {
1305         y1_index = y1_index == 8 ? y1_index - 1 : y1_index + 1;
1306     }
1307     int k1_index = fix_k >> 13;
1308     if (k1_index == k_index) {
1309         k1_index = k1_index == 8 ? k1_index - 1 : k1_index + 1;
1310     }
1311     int c1_pos = pos + (c1_index - c_index) * 9 * 9 * 9 * 3;
1312     int m1_pos = pos + (m1_index - m_index) * 9 * 9 * 3;
1313     int y1_pos = pos + (y1_index - y_index) * 9 * 3;
1314     int k1_pos = pos + (k1_index - k_index) * 3;
1315     int c_r_delta = g_CMYKSamples[pos] - g_CMYKSamples[c1_pos];
1316     int c_g_delta = g_CMYKSamples[pos + 1] - g_CMYKSamples[c1_pos + 1];
1317     int c_b_delta = g_CMYKSamples[pos + 2] - g_CMYKSamples[c1_pos + 2];
1318     int m_r_delta = g_CMYKSamples[pos] - g_CMYKSamples[m1_pos];
1319     int m_g_delta = g_CMYKSamples[pos + 1] - g_CMYKSamples[m1_pos + 1];
1320     int m_b_delta = g_CMYKSamples[pos + 2] - g_CMYKSamples[m1_pos + 2];
1321     int y_r_delta = g_CMYKSamples[pos] - g_CMYKSamples[y1_pos];
1322     int y_g_delta = g_CMYKSamples[pos + 1] - g_CMYKSamples[y1_pos + 1];
1323     int y_b_delta = g_CMYKSamples[pos + 2] - g_CMYKSamples[y1_pos + 2];
1324     int k_r_delta = g_CMYKSamples[pos] - g_CMYKSamples[k1_pos];
1325     int k_g_delta = g_CMYKSamples[pos + 1] - g_CMYKSamples[k1_pos + 1];
1326     int k_b_delta = g_CMYKSamples[pos + 2] - g_CMYKSamples[k1_pos + 2];
1327     int c_rate = (fix_c - (c_index << 13)) * (c_index - c1_index);
1328     fix_r += c_r_delta * c_rate / 32;
1329     fix_g += c_g_delta * c_rate / 32;
1330     fix_b += c_b_delta * c_rate / 32;
1331     int m_rate = (fix_m - (m_index << 13)) * (m_index - m1_index);
1332     fix_r += m_r_delta * m_rate / 32;
1333     fix_g += m_g_delta * m_rate / 32;
1334     fix_b += m_b_delta * m_rate / 32;
1335     int y_rate = (fix_y - (y_index << 13)) * (y_index - y1_index);
1336     fix_r += y_r_delta * y_rate / 32;
1337     fix_g += y_g_delta * y_rate / 32;
1338     fix_b += y_b_delta * y_rate / 32;
1339     int k_rate = (fix_k - (k_index << 13)) * (k_index - k1_index);
1340     fix_r += k_r_delta * k_rate / 32;
1341     fix_g += k_g_delta * k_rate / 32;
1342     fix_b += k_b_delta * k_rate / 32;
1343     if (fix_r < 0) {
1344         fix_r = 0;
1345     }
1346     if (fix_g < 0) {
1347         fix_g = 0;
1348     }
1349     if (fix_b < 0) {
1350         fix_b = 0;
1351     }
1352     R = fix_r >> 8;
1353     G = fix_g >> 8;
1354     B = fix_b >> 8;
1355 }
1356 void AdobeCMYK_to_sRGB(FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B)
1357 {
1358     uint8_t c1 = FXSYS_round(c * 255);
1359     uint8_t m1 = FXSYS_round(m * 255);
1360     uint8_t y1 = FXSYS_round(y * 255);
1361     uint8_t k1 = FXSYS_round(k * 255);
1362     uint8_t r, g, b;
1363     AdobeCMYK_to_sRGB1(c1, m1, y1, k1, r, g, b);
1364     R = 1.0f * r / 255;
1365     G = 1.0f * g / 255;
1366     B = 1.0f * b / 255;
1367 }