package com.bluetooth.heart.activity;

import android.Manifest;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.app.TaskStackBuilder;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;

import com.bluetooth.heart.algorithm.spo2_algorithm;
import com.bluetooth.heart.app.App;
import com.bluetooth.heart.dialog.InputDialog;
import com.bluetooth.heart.excel.DataBean;
import com.bluetooth.heart.excel.ExcelUtil;
import com.bluetooth.heart.log.ZLog;
import com.bluetooth.heart.utils.Utils;
import com.bluetooth.smart.heart.BuildConfig;
import com.bluetooth.smart.heart.R;
import com.bluetooth.smart.heart.databinding.ActivityControlBinding;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.formatter.IAxisValueFormatter;
import com.github.mikephil.charting.formatter.IValueFormatter;
import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
import com.github.mikephil.charting.listener.ChartTouchListener;
import com.github.mikephil.charting.listener.OnChartGestureListener;
import com.github.mikephil.charting.utils.ViewPortHandler;
import com.inuker.bluetooth.library.connect.listener.BleConnectStatusListener;
import com.inuker.bluetooth.library.connect.response.BleConnectResponse;
import com.inuker.bluetooth.library.connect.response.BleNotifyResponse;
import com.inuker.bluetooth.library.model.BleGattProfile;
import com.inuker.bluetooth.library.search.SearchResult;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.ByteBuffer;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.UUID;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import ir.androidexception.filepicker.dialog.DirectoryPickerDialog;
import ir.androidexception.filepicker.interfaces.OnCancelPickerDialogListener;
import ir.androidexception.filepicker.interfaces.OnConfirmDialogListener;

import static com.inuker.bluetooth.library.Constants.REQUEST_SUCCESS;
import static com.inuker.bluetooth.library.Constants.STATUS_CONNECTED;
import static com.inuker.bluetooth.library.Constants.STATUS_DISCONNECTED;

public class ControlActivity extends AppCompatActivity {
    private SearchResult mSearchResult = null;
    private ActivityControlBinding mBinding = null;
    private ExecutorService mFixedThreadPool = null;
    private String mServiceUUID = "0000fff0-0000-1000-8000-00805f9b34fb";
    private String mReadUUID = "0000fff4-0000-1000-8000-00805f9b34fb";
    private ByteBuffer mByteBuffer = ByteBuffer.allocate(210);
    private int mPos = 0;
    private int mMaxCount = 50 * 60 * 3;
    private int mCount = 0;
    private int mMax = 80000;
    private int mMin = 60000;

    private List<DataBean> mDataList = new ArrayList<>();
    private SimpleDateFormat mFormatter = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss:SSS");
    private long mTime = 0;
    private long mStartTime = 0;
    private long mStartTime1 = 0;

    private long mWarningTime1 = 0;
    private long mWarningTime2 = 0;
    private long mSpaceTime = 30 * 1000;
    private Ringtone mRingtone = null;
    private AlertDialog mAlertDialog = null;
    private SimpleDateFormat mXFormatter = new SimpleDateFormat("mm:ss");
    private boolean mFirst = true;

    private int MAX_SIZE = 500;
    private int REMOVE_SIZE = 100;

    private List<Integer> mList1 = new ArrayList<>();
    private List<Integer> mList2 = new ArrayList<>();
    private List<Float> mList3 = new ArrayList<>();
    private spo2_algorithm mSpo2Algorithm = new spo2_algorithm();
    private boolean mQuit = false;
    private float mChart3Max = 150000;
    private float mChart3Min = 50000;
    private DecimalFormat mDecimalFormat = new DecimalFormat("0.000");
    private DecimalFormat mDecimalFormat1 = new DecimalFormat("0.0");
    private int mStep = 0;


    private int REQUEST_CODE_ANDROID_11_OR_HIGHER_FILE_SELECT_FOR_OUTPUT = 2652;
    private double mYvalue = 0.0f;
    private boolean mScale = false;
    private float mMaxValue = 0.0f;
    private float mMinValue = 0.0f;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = DataBindingUtil.setContentView(this, R.layout.activity_control);

        findViewById(R.id.back).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });

        ZLog.setLogName();

        mSearchResult = getIntent().getParcelableExtra(Utils.DATA);
        initChart(mBinding.chart1, ContextCompat.getColor(getApplicationContext(), R.color.color_1));
        initChart(mBinding.chart2, ContextCompat.getColor(getApplicationContext(), R.color.color_2));
        initChart(mBinding.chart3, ContextCompat.getColor(getApplicationContext(), R.color.color_5));

        mBinding.more.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showDialog();
            }
        });

        initThreadPool();
        initBluetooth();
        if (BuildConfig.DEBUG && mSearchResult == null) {
            test();
        }

        //readFile();

        //test1();

        mBinding.image1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                /*
                 */
                showNumberDialog(true);
            }
        });

        mBinding.image2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                /*
                YAxis leftAxis = mBinding.chart3.getAxisLeft();
                leftAxis.setAxisMinimum(70000); */
                showNumberDialog(false);
            }
        });

        mBinding.chart3.setOnChartGestureListener(new OnChartGestureListener() {
            @Override
            public void onChartGestureStart(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {
                Log.d("-- start", "jinjianxin");
                mScale = true;
            }

            @Override
            public void onChartGestureEnd(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {
                mScale = false;
                YAxis yAxis= mBinding.chart3.getAxis(YAxis.AxisDependency.LEFT);
                int count =  yAxis.getLabelCount();
                String value1 = yAxis.getFormattedLabel(0);
                String value2 = yAxis.getFormattedLabel(count);
                mMinValue =Float.parseFloat(value1.replace(",",""));
                mMaxValue =Float.parseFloat(value2.replace(",",""));

                Log.d("jinjianxin", "max= " + mMaxValue+"\tmin="+mMinValue);
            }

            @Override
            public void onChartLongPressed(MotionEvent me) {

            }

            @Override
            public void onChartDoubleTapped(MotionEvent me) {

            }

            @Override
            public void onChartSingleTapped(MotionEvent me) {

            }

            @Override
            public void onChartFling(MotionEvent me1, MotionEvent me2, float velocityX, float velocityY) {

            }

            @Override
            public void onChartScale(MotionEvent me, float scaleX, float scaleY) {
               /* YAxis yAxis= mBinding.chart3.getAxis(YAxis.AxisDependency.LEFT);
                int count =  yAxis.getLabelCount();
                String value1 = yAxis.getFormattedLabel(0);
                String value2 = yAxis.getFormattedLabel(count);
                mMinValue =Float.parseFloat(value1.replace(",",""));
                mMaxValue =Float.parseFloat(value2.replace(",",""));
                mScale = false;*/
            }

            @Override
            public void onChartTranslate(MotionEvent me, float dX, float dY) {

            }
        });
    }

    private void showNumberDialog(boolean max) {
        new InputDialog.Builder(this)
                .setTitle("Input Value")
                .setInputDefaultText("")
                .setInputMaxWords(9)
                .setInputHint(max ? String.valueOf(mChart3Max) : String.valueOf(mChart3Min))
                .setPositiveButton("sure", new InputDialog.ButtonActionListener() {
                    @Override
                    public void onClick(CharSequence inputText) {
                        // TODO
                        if (inputText.toString().length() != 0) {

                            if (max) {
                                float value = Float.parseFloat(inputText.toString());
                                mChart3Max = value;
                                YAxis leftAxis = mBinding.chart3.getAxisLeft();
                                leftAxis.setAxisMaximum(mChart3Max);
                            } else {
                                float value = Float.parseFloat(inputText.toString());
                                mChart3Min = value;
                                YAxis leftAxis = mBinding.chart3.getAxisLeft();
                                leftAxis.setAxisMinimum(mChart3Min);
                            }
                        }
                    }
                })
                .setNegativeButton("cancel", new InputDialog.ButtonActionListener() {
                    @Override
                    public void onClick(CharSequence inputText) {
                        // TODO
                    }
                })
                .setOnCancelListener(new InputDialog.OnCancelListener() {
                    @Override
                    public void onCancel(CharSequence inputText) {
                        // TODO
                    }
                })
                .interceptButtonAction(new InputDialog.ButtonActionIntercepter() { // 拦截按钮行为
                    @Override
                    public boolean onInterceptButtonAction(int whichButton, CharSequence inputText) {
                        if ("/sdcard/my".equals(inputText) && whichButton == DialogInterface.BUTTON_POSITIVE) {
                            // TODO 此文件夹已存在，在此做相应的提示处理
                            // 以及return true拦截此按钮默认行为
                            return true;
                        }
                        return false;
                    }
                })
                .show();
    }

    private void showDialog() {
     /*   new InputDialog.Builder(this)
                .setTitle("File Name")
                .setInputDefaultText("")
                .setInputMaxWords(20)
                .setInputHint("File Name")
                .setPositiveButton("sure", new InputDialog.ButtonActionListener() {
                    @Override
                    public void onClick(CharSequence inputText) {
                        // TODO
                        if (inputText.toString().length() != 0) {

                            if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) {
                                showDirectoryPickerDialog(inputText.toString());
                            } else {
                                Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
                                intent.addCategory(Intent.CATEGORY_OPENABLE);
                                intent.setType("application/xlsx");
                                // 设置默认文件名
                                intent.putExtra(Intent.EXTRA_TITLE, inputText.toString());
                                // 用户进行文件存储位置选择
                                startActivityForResult(intent, REQUEST_CODE_ANDROID_11_OR_HIGHER_FILE_SELECT_FOR_OUTPUT);
                            }

                        }
                    }
                })
                .setNegativeButton("cancel", new InputDialog.ButtonActionListener() {
                    @Override
                    public void onClick(CharSequence inputText) {
                        // TODO
                    }
                })
                .setOnCancelListener(new InputDialog.OnCancelListener() {
                    @Override
                    public void onCancel(CharSequence inputText) {
                        // TODO
                    }
                })
                .interceptButtonAction(new InputDialog.ButtonActionIntercepter() { // 拦截按钮行为
                    @Override
                    public boolean onInterceptButtonAction(int whichButton, CharSequence inputText) {
                        if ("/sdcard/my".equals(inputText) && whichButton == DialogInterface.BUTTON_POSITIVE) {
                            // TODO 此文件夹已存在，在此做相应的提示处理
                            // 以及return true拦截此按钮默认行为
                            return true;
                        }
                        return false;
                    }
                })
                .show(); */

        String inputText = "血氧_" + simpleDateFormat.format(new Date());
        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) {
            showDirectoryPickerDialog(inputText);
        } else {
            Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
            intent.addCategory(Intent.CATEGORY_OPENABLE);
            intent.setType("application/xlsx");
            // 设置默认文件名
            intent.putExtra(Intent.EXTRA_TITLE, inputText);
            // 用户进行文件存储位置选择
            startActivityForResult(intent, REQUEST_CODE_ANDROID_11_OR_HIGHER_FILE_SELECT_FOR_OUTPUT);
        }

        mQuit = true;
        if (mSearchResult != null) {
            App.getInstance().mClient.disconnect(mSearchResult.getAddress());
        }

    }


    private void test() {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                // byte[] data = {0x09, 0x026, (byte) 0xE5, (byte) 0xED, 0x00, 0x00, (byte) 0xBE, 0x25, 0x01, 0x00, 0x09, 0x27, (byte) 0xE3, (byte) 0xED, 0x00, 0x00, (byte) 0xC1, 0x25, 0x01, 0x00};
                byte[] data = {(byte) 0xb8, 0x0b, 0x60, (byte) 0xea, 0x00, 0x00, 0x60, (byte) 0xea, 0x00, 0x00, (byte) 0xb8, 0x0b, 0x60, (byte) 0xea, 0x00, 0x00, 0x60, (byte) 0xea, 0x00, 0x00};
                for (int i = 0; i < 50000; i++) {
                    parseData(data);
                 //   ZLog.e("", Utils.bytesToHex(data));
                    try {
                        Thread.sleep(20);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }


                }
            }
        });

        thread.start();
    }


    private void test1() {
        /*Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {

                *//**
         *红外数据
         *//*
                String test = "63530,63584,63630,63668,63686,63706,63703,63717,63736,63736,63765,63795,63811,63821,63845,63825,63738,63600,63465,63325,63203,63096,63021,62956,62915,62872,62860,62833,62842,62843,62866,62887,62909,62939,62957,62969,62995,62998,63007,63021,63026,63065,63109,63143,63180,63218,63232,63220,63210,63201,63214,63229,63240,63233,63265,62956,63318,63293,63310,63314,63331,63348,63378,63396,63425,63448,63484,63514,63564,63593,63632,63670,63690,63715,63736,63758,63792,63816,63814,63800,63724,63604,63440,63280,63142,63052,62993,62958,62935,62927,62926,62931,62943,62945,62968,62967,62975,62988,63019,63057,63083,63142,63178,63230,63260,63307,63335,63351,63384,63389,63392,63379,63389,63387,63365,63337,63327,63325,63312,63312,63341,63362,63407,63438,63458,63487,63494,63493,63498,63530,63558,63592,63621,63681,63700,63662,63738,63702,63693,63710,63687,63680,63646,63593,63521,63410,63301,63185,63092,63015,62966,62909,62877,62842,62816,62814,62806,62813,62815,62844,62842,62873,62912,62926,62933,62935,62965,62989,63009,63031,63054,63063,63083,63097,63105,63102,63098,63097,63113,63111,63117,63127,63126,63152,63165,63191,63235,63275,63381,63404,63438,63461,63499,63530,63561,63568,63600,63644,63683,63726,63763,63784,63806,63810,63786,63702,63563,63385,63203,63053,62942,62887,62815,62753,62687,62663,63235,62658,62658,62665,62673,62677,62674,62688,62700,62706,62734,62767,62811,62864,62903,62938,62962,62960,62945,62942,62936,62918,62895,62892,62854,62847,62854,62856,62872,62878,62897,62899,62915,62942,62965,62984,63010,63033,63082,63118,63150,63175,63198,63221,63253,63279,63290,63331,63324,63339,63334,63356,63385,63394,63375,63298,63185,63035,62896,62754,62664,62610,62566,62542,62510,62491,62495,62515,62532,62559,62580,62606,62639,62646,62641,62668,62666,63279,62721,62747,62778,62820,62846,62863,62869,62874,62857,62840,62825,62815,62840,62839,62853,62857,62871,62881,62885,62908,62938,62980,63018,63039,63073,63111,63119,63170,63181,63205,63224,63243,63250,63259,63285,63289,63316,63326,63342,63363,63366,63347,63288,63184,63043,62879,62731,62617,62536,62469,62446,62416,62423,62428,62460,62473,62505,62534,62568,62602,62630,62669,62705,62743,62782,62827,62874,62911,62954,62973,62985,62991,63011,63017,63002,62989,62956,62879,63013,62617,63035,63059,63083,63095,63127,63155,63163,63191,63208,63230,63252,63264,63295,63321,63341,63365,63364,63378,63399,63404,63410,63408,63425,63448,63451,63437,63399,63351,63256,63123,62961,62814,62697,62614,62540,62491,62490,62481,62493,62490,62498,62528,62542,62558,62571,62583,62576,62587,62589,62587,62626,62679,62718,62750,62776,62770,62775,62786,62785,62802,62792,62778,62784,62767,62776,62778,62803,62813,62859,62878,62886,62933,62939,62955,62987,62558,63065,63082,63098,63113,63141,63161,63174,63186,63205,63235,63250,63274,63280,63307,63287,63261,63158,63020,62872,62727,62606,62530,62502,62451,62438,62421,62416,62430,62451,62466,62492,62510,62547,62585,62623,62671,62718,62752,62788,62826,62849,62888,62910,62929,62945,62952,62956,62964,62964,62968,62970,62969,62978,62989,62997,63017,63036,63065,63095,63125,63145,63166,63195,63206,63188,63206,63208,63228,63250,63268,63291,63296,63297,63309,63256,63278,62945,63285,63275,63284,63246,63190,63096,62941,62776,62633,62529,62463,62418,62385,62390,62358,62343,62346,62356,62381,62392,62420,62447,62476,62504,62534,62555,62596,62623,62672,62708,62739,62776,62779,62789,62789,62800,62812,62826,62827,62848,62846,62847,62851,62886,62927,62939,62972,62993,63024,63048,63057,63065,63081,63133,63162,63184,63200,63222,63221,63207,63201,63204,63212,63232,63252,63266,63265,63261,63224,63152,63028,62914,62796,62684,62578,62496,62414,62939,62437,62442,62449,62469,62491,62525,62551,62577,62600,62648,62690,62722,62761,62812,62847,62865,62886,62903,62911,62915,62931,62935,62955,62954,62958,62946,62957,62954,62968,62959,62979,62991,63012,63050,63077,63095,63114,63129,63151,63166,63184,63191,63204,63217,63230,63244,63241,63250,63266,63270,63286,63299,63304,63307,63269,63217,63112,62970,62804,62673,62567,62505,62475,62450,62440,62435,62450,62487,62531,62577,62612,62639,62664,62676,62692,62708,62735,62753,62835,62888,62894,62907,62915,63299,63304,62888,63269,62898,62884,62881,62880,62871,62872,62886,62912,62941,62983,63013,63043,63057,63072,63078,63082,63106,63123,63150,63175,63190,63208,63234,63237,63263,63271,63290,63293,63307,63322,63325,63318,63279,63209,63115,62979,62847,62728,62631,62572,62530,62510,62494,62497,62505,62513,62537,62551,62574,62600,62620,62645,62671,62700,62737,62766,62789,62830,62833,62847,62857,62859,62862,62864,62858,62868,62869,62867,62860,62877,62885,62897,62917,62935,62964,62997,63027,63033,63025,63045,63084,62600,63093,63104,63120,63135,63134,63156,63173,63184,63193,63215,63230,63256,63267,63243,63194,63122,63021,62905,62773,62667,62577,62515,62483,62451,62444,62453,62465,62474,62510,62545,62572,62599,62637,62670,62682,62715,62743,62779,62815,62845,62868,62890,62897,62889,62890,62884,62884,62884,62885,62893,62910,62915,62935,62947,62965,62981,62988,63000,63024,63037,63058,63083,63097,63107,63119,63131,63138,63138,63152,63164,63177,63195,63209,63216,62897,63199,63200,63202,62884,63169,63114,63013,62877,62744,62612,62503,62433,62384,62379,62362,62370,62405,62414,62442,62463,62506,62527,62551,62578,62590,62616,62647,62689,62737,62770,62810,62834,62845,62844,62848,62836,62832,62839,62850,62868,62875,62896,62906,62914,62929,62948,62967,62979,63003,63030,63050,63055,63079,63097,63116,63126,63131,63147,63154,63163,63164,63175,63186,63206,63220,63223,63244,63248,63255,63244,63231,63215,63115,62984,62851,62727,62595,62472,62418,62401,62405,62399,62424,62434,62463,62481,62506,62539,62541,62560,62579,62620,62656,62697,62738,62775,62804,62821,62839,62856,62864,62868,62872,62882,62885,62892,62904,62918,62919,62930,62940,62945,62956,62984,63014,63028,63056,63084,63093,63105,63127,63128,63158,63171,63180,63187,63204,63201,63219,63231,63247,63251,63253,63248,63254,63277,63265,63254,63211,63148,63052,62916,62776,62658,62563,62504,62467,62440,62446,62458,62469,62491,62496,62531,62564,62584,62614,62638,62666,62706,62694,62795,63247,62835,62860,62885,62905,62898,62900,62886,62885,62881,62880,62882,62879,62900,62905,62902,62926,62934,62953,62978,63001,63014,63028,63054,63055,63080,63105,63127,63136,63151,63168,63182,63197,63213,63215,63236,63245,63259,63267,63273,63277,63279,63246,63210,63131,63000,62872,62732,62615,62538,62484,62445,62427,62426,62420,62439,62479,62500,62547,62582,62602,62634,62679,62700,62735,62759,62796,62846,62869,62885,62914,62923,62933,62958,62952,62913,62945,62917,62921,62732,62615,62970,62992,63005,63023,63047,63045,63071,63084,63113,63108,63136,63144,63147,63155,63168,63191,63184,63201,63199,63207,63224,63239,63240,63254,63263,63280,63287,63290,63277,63239,63184,63104,63001,62889,62788,62704,62645,62600,62584,62576,62599,62621,62667,62703,62733,62768,62803,62813,62829,62872,62894,62940,62962,62978,63006,63016,63033,63029,63042,63048,63051,63050,63055,63067,63079,63092,63102,63107,63114,63138,63157,63178,63139,63144,63182,63182,63201,63206,63217,63205,63222,63215,63245,63244,63253,63262,63255,63267,63271,63280,63273,63283,63296,63294,63289,63255,63198,63124,63032,62925,62844,62775,62727,62713,62729,62734,62749,62796,62836,62867,62916,62950,63001,63016,63045,63072,63086,63111,63141,63150,63152,63161,63156,63151,63140,63142,63130,63119,63107,63106,63120,63133,63152,63171,63197,63218,63237,63255,63277,63287,63321,63329,63363,63369,63374,63392,63409,63419,63425,63436,63438,63441,63450,63468,63466,63480,63492,63491,63470,63443,63367,63273,63191,63076,62985,62907,62855,62822,62793,62800,62825,62845,62881,62918,62954,62977,63003,63035,63054,63075,63105,63127,63147,63158,63177,63190,63196,63200,63212,63216,63215,63220,63229,63219,63220,63222,63237,63226,63227,63222,63228,63242,63257,63266,63287,63301,63307,63312,63320,63331,63349,63350,63359,63368,63387,63401,63389,63404,63410,63416,63412,63373,63300,63220,63128,63022,62946,62896,62843,62808,62789,62787,62805,62822,62857,62875,62921,62955,62980,63005,63036,63073,63086,63102,63134,63145,63168,63179,63184,63200,63207,63218,63220,63214,63220,63228,63235,63237,63237,63237,63242,63251,63249,63256,63278,63289,63302,63315,63329,63347,63348,63367,63386,63387,63397,63406,63403,63421,63438,63457,63468,63484,63494,63485,63476,63424,63349,63252,63126,63010,62923,62854,62807,62793,62787,62800,62821,62859,62895,62913,62947,62974,63008,63023,63080,63107,63152,63132,63131,63170,63203,63223,63237,63254,63257,63248,63259,63267,63260,63265,63270,63278,63285,63294,63309,63326,63346,63360,63363,63386,63404,63425,63422,63423,63443,63444,63452,63466,63471,63484,63495,63498,63507,63520,63524,63535,63517,63477,63433,63351,63286,63216,63151,63104,63088,63070,63071,63077,63091,63121,63160,63184,63215,63254,63261,63284,63305,63312,63335,63343,63362,63378,63397,63405,63414,63411,63414,63419,63403,63392,63407,63398,63418,63412,63434,63412,63476,63458,63432,63437,63452,63484,63490,63503,63516,63526,63530,63550,63560,63583,63573,63576,63594,63598,63603,63605,63596,63549,63505,63429,63353,63266,63199,63137,63103,63096,63095,63093,63122,63149,63180,63213,63246,63263,63288,63316,63334,63349,63378,63406,63409,63420,63436,63448,63440,63448,63447,63429,63422,63422,63447,63439,63455,63464,63473,63483,63495,63507,63503,63510,63529,63542,63557,63568,63578,63600,63608,63607,63611,63619,63621,63629,63642,63664,63653,63607,63623,63540,63488,63418,63338,63263,63208,63168,63157,63138,63158,63184,63202,63236,63267,63297,63329,63344,63376,63393,63422,63432,63445,63463,63475,63492,63487,63485,63497,63501,63506,63500,63506,63496,63497,63498,63506,63512,63522,63531,63527,63535,63545,63554,63563,63586,63589,63589,63621,63633,63641,63642,63645,63652,63653,63655,63669,63664,63671,63647,63619,63565,63506,63436,63378,63313,63274,63248,63234,63238,63241,63252,63279,63316,63318,63333,63563,63390,63589,63459,63473,63493,63525,63525,63554,63539,63539,63548,63547,63548,63547,63537,63531,63536,63531,63527,63528,63541,63545,63542,63553,63563,63581,63582,63581,63606,63620,63624,63622,63642,63656,63662,63662,63663,63657,63673,63667,63671,63656,63634,63565,63499,63422,63349,63283,63221,63192,63179,63181,63189,63206,63232,63274,63301,63325,63350,63382,63396,63421,63444,63464,63478,63507,63501,63506,63497,63507,63518,63518,63509,63483,63470,63475,63484,63504,63508,63517,63521,63532,63545,63552,63566,63574,63580,63578,63603,63614,63612,63627,63619,63637,63641,63641,63645,63648,63641,63632,63609,63574,63506,63433,63339,63243,63166,63115,63064,63038,63037,63039,63064,63089,63114,63165,63183,63221,63251,63286,63298,63322,63356,63359,63377,63390,63395,63399,63405,63395,63398,63397,63398,63393,63408,63392,63414,63418,63423,63431,63423,63442,63443,63459,63477,63492,63501,63508,63516,63536,63563,63571,63570,63565,63574,63359,63572,63578,63593,63582,63543,63493,63422,63310,63211,63121,63054,63000,62979,62966,62961,62983,62991,63027,63049,63092,63119,63137,63162,63189,63218,63233,63264,63283,63320,63330,63339,63341,63347,63345,63353,63332,63329,63338,63344,63359,63383,63383,63390,63398,63416,63418,63422,63434,63458,63462,63468,63480,63496,63508,63518,63529,63528,63531,63551,63571,63558,63567,63572,63575,63557,63521,63451,63384,63280,63174,63085,63024,62964,62940,62963,62958,62979,63019,63422,63079,63104,63134,63154,63176,63186,63204,63238,63262,63276,63308,63311,63317,63315,63302,63308,63309,63326,63327,63331,63331,63341,63341,63344,63368,63376,63373,63385,63402,63410,63421,63445,63455,63450,63464,63478,63499,63495,63502,63515,63511,63519,63538,63529,63537,63533,63532,63514,63475,63414,63343,63238,63148,63062,63000,62962,62939,62926,62942,62956,62980,63030,63048,63085,63116,63149,63154,63178,63208,63237,63264,63225,63256,63519,63277,63293,63284,63292,63279,63274,63280,63287,63268,63288,63294,63306,63329,63338,63353,63364,63388,63395,63397,63415,63423,63423,63428,63433,63440,63448,63461,63469,63475,63483,63492,63486,63500,63484,63446,63392,63314,63220,63112,63017,62925,62852,62817,62808,62801,62825,62838,62854,62877,62901,62932,62959,62964,63006,63030,63065,63104,63124,63148,63176,63167,63178,63179,63181,63167,63168,63178,63187,63186,63179,63196,63209,63246,63251,63259,63288,63302,63315,63301,63322,63335,63337,63351,63366,63376,63370,63377,63390,63403,63406,63411,63420,63420,63438,63435,63415,63373,63304,63228,63113,63028,62931,62855,62815,62787,62775,62760,62780,62793,62818,62848,62871,62897,62923,62937,62951,62966,62990,63018,63048,63073,63101,63116,63126,63122,63132,63138,63137,63147,63152,63160,63146,63157,63165,63192,63198,63216,63216,63241,63252,63263,63272,63276,63285,63299,63306,63330,63325,63349,63368,63372,63378,63385,63385,63401,63423,63426,63419,63396,63371,63348,63281,63192,63105,63005,62916,62848,62792,62754,62756,62754,62763,62779,62830,62848,62880,62902,62930,62959,62984,63010,63035,63055,63096,63127,63131,63156,63151,63159,63154,63154,63162,63153,63144,63157,63148,63147,63148,63157,63163,63174,63211,63222,63256,63256,63265,63288,63303,63297,63321,63316,63340,63341,63359,63354,63375,63381,63370,63371,63383,63397,63408,63419,63420,63438,63440,63459,63451,63426,63378,63304,63194,63068,62951,62825,62764,62664,63265,62651,62649,62688,62691,62715,62733,62751,62767,62753,62771,62800,62835,62870,62902,62934,62983,63018,63029,63024,63036,63024,63033,63033,63032,63047,63054,63052,63063,63083,63096,63121,63144,63159,63173,63185,63212,63221,63240,63245,63260,63276,63286,63295,63301,63307,63330,63338,63348,63349,63364,63373,63379,63381,63389,63372,63345,63299,63217,63094,62983,62863,62765,62694,62647,62631,62618,62628,62653,62674,62692,62752,62780,62770,62821,62819,62810,62857,63330,62924,62965,62996,63021,63047,63058,63059,63051,63043,63036,63043,63054,63056,63070,63065,63084,63087,63094,63117,63130,63153,63178,63197,63209,63225,63239,63246,63257,63265,63280,63296,63288,63314,63319,63337,63352,63353,63362,63369,63358,63373,63366,63340,63275,63190,63098,62979,62858,62761,62671,62635,62607,62590,62573,62591,62616,62633,62670,62690,62712,62748,62749,62783,62810,62822,62865,62896,62930,62940,62962,62973,62979,62996,63022,63022,63052,63062,63074,63075,63097,63102,63129,63135,63163,63162,63170,63189,63225,63238,63263,63255,63273,63285,63296,63301,63299,63306,63315,63320,63329,63328,63334,63344,63355,63362,63366,63376,63372,63325,63250,63172,63034,62912,62788,62698,62642,62610,62588,62591,62614,62640,62662,62694,62722,62742,62760,62771,62771,62782,62804,62822,62856,62905,62957,63001,63021,63033,63054,63058,63060,63066,63064,63080,63087,63089,63099,63102,63130,63142,63149,63166,63202,63224,63229,63242,63251,63242,63258,63267,63274,63288,63305,63318,63327,63342,63349,63356,63356,63362,63373,63374,63395,63403,63414,63411,63419,63431,63451,63451,63434,63393,63334,63243,63100,62976,62858,62760,62690,62654,62636,62637,62658,62686,62707,62744,62774,62797,62827,62839,62864,62890,62920,62951,62987,63026,63054,63083,63103,63126,63144,63139,63149,63156,63161,63163,63171,63187,63185,63196,63217,63229,63237,63252,63258,63278,63292,63304,63335,63328,63325,62839,63372,63381,63396,63394,63415,63423,63424,63437,63447,63453,63455,63468,63465,63457,63476,63482,63476,63486,63461,63423,63367,63297,63201,63120,63033,62981,62936,62904,62906,62919,62946,62986,63013,63044,63081,63111,63125,63141,63163,63187,63204,63221,63245,63269,63289,63300,63305,63303,63314,63307,63316,63305,63303,63314,63317,63327,63340,63346,63359,63369,63376,63404,63416,63422,63427,63442,63457,63463,63480,63485,63525,63504,63520,63546,63534,63549,63530,63504,63518,63540,63560,63562,63558,63577,63581,63561,63540,63494,63432,63351,63236,63152,63069,62999,62969,62953,62943,62963,62980,63022,63044,63080,63108,63147,63180,63195,63220,63239,63252,63266,63281,63300,63306,63311,63322,63333,63341,63351,63352,63360,63358,63366,63364,63360,63380,63382,63398,63418,63429,63437,63428,63449,63471,63484,63495,63511,63529,63543,63555,63558,63569,63575,63585,63585,63587,63607,63609,63623,63644,63634,63657,63625,63620,63573,63502,63413,63320,63238,63156,63099,63052,63035,63031,63034,63061,63079,63106,63139,63156,63183,63200,63237,63260,63280,63312,63321,63339,63365,63382,63395,63405,63409,63412,63417,63401,63416,63422,63424,63433,63436,63452,63459,63462,63475,63488,63499,63506,63517,63520,63537,63541,63562,63569,63584,63582,63598,63603,63622,63623,63630,63642,63647,63651,63662,63663,63673,63687,63688,63714,63708,63698,63697,63605,63459,63420,63344,63271,63214,63194,63170,63157,63159,63186,63211,63238,63260,63301,63318,63338,63366,63382,63397,63417,63451,63467,63497,63517,63522,63522,63533,63527,63526,63526,63525,63535,63522,63539,63541,63563,63568,63583,63585,63591,63593,63614,63625,63623,63631,63644,63657,63670,63677,63673,63674,63699,63696,63711,63719,63719,63732,63742,63743,63757,63754,63765,63766,63762,63752,63716,63667,63599,63525,63444,63392,63319,63233,63225,63625,63215,63229,63252,63299,63328,63366,63379,63411,63427,63449,63472,63483,63513,63518,63545,63547,63559,63559,63550,63546,63545,63552,63550,63560,63566,63563,63571,63570,63569,63566,63583,63583,63595,63601,63622,63632,63645,63661,63663,63681,63679,63686,63697,63711,63709,63719,63731,63730,63752,63754,63757,63764,63774,63782,63796,63791,63782,63734,63659,63580,63467,63370,63286,63214,63154,63132,63119,63121,63142,63167,63184,63203,63225,63251,63697,63346,63370,63411,63432,63460,63472,63482,63509,63507,63513,63514,63516,63510,63517,63518,63519,63523,63529,63535,63552,63555,63556,63577,63596,63598,63619,63633,63643,63657,63667,63680,63687,63700,63715,63718,63743,63749,63764,63773,63784,63793,63791,63796,63808,63810,63804,63793,63751,63674,63559,63438,63314,63215,63147,63100,63068,63048,63048,63065,63085,63114,63155,63168,63203,63227,63249,63293,63287,63290,63378,63421,63438,63453,63455,63458,63455,63457,63466,63470,63484,63482,63494,63495,63500,63506,63528,63539,63560,63558,63559,63581,63604,63622,63629,63653,63661,63673,63681,63674,63672,63674,63686,63709,63717,63718,63725,63732,63738,63747,63754,63761,63770,63744,63701,63635,63558,63451,63340,63257,63178,63140,63101,63098,63090,63109,63127,63165,63189,63232,63249,63281,63309,63334,63357,63373,63396,63420,63449,63460,63474,63501,63495,63507,63497,63444,63478,63635,63485,63480,63488,63486,63506,63505,63524,63539,63554,63557,63568,63588,63589,63605,63616,63632,63627,63632,63643,63657,63652,63662,63660,63670,63676,63687,63690,63707,63709,63711,63696,63665,63614,63529,63436,63333,63228,63166,63119,63074,63060,63073,63082,63104,63161,63190,63235,63256,63301,63326,63339,63370,63389,63418,63415,63448,63454,63458,63486,63478,63473,63477,63466,63470,63476,63482,63497,63487,63498,63517,63507,63527,63526,63545,63575,63566,63587,63593,63610,63579,63301,63631,63637,63647,63652,63665,63675,63678,63688,63696,63688,63703,63706,63721,63700,63661,63604,63527,63424,63322,63242,63183,63137,63121,63115,63108,63132,63134,63169,63203,63232,63261,63286,63297,63313,63342,63356,63366,63408,63438,63451,63457,63458,63473,63468,63470,63474,63474,63482,63489,63493,63511,63514,63518,63521,63540,63544,63544,63568,63577,63584,63614,63622,63632,63637,63649,63655,63651,63669,63675,63686,63685,63720,63703,63710,63707,63468,63737,63736,63737,63709,63657,63591,63502,63418,63339,63267,63224,63188,63178,63178,63203,63218,63247,63265,63299,63329,63337,63360,63375,63388,63394,63418,63440,63465,63478,63494,63515,63530,63521,63511,63506,63520,63519,63518,63533,63535,63539,63523,63545,63556,63562,63576,63578,63580,63575,63587,63592,63604,63619,63632,63643,63636,63658,63668,63674,63679,63685,63686,63695,63697,63703,63702,63723,63725,63720,63725,63693,63595,63540,63399,63325,63556,63166,63140,63133,63129,63165,63191,63215,63235,63284,63305,63338,63346,63364,63393,63407,63419,63443,63457,63476,63493,63499,63505,63504,63510,63509,63501,63506,63505,63507,63521,63525,63533,63550,63564,63574,63576,63604,63612,63618,63631,63638,63639,63647,63659,63666,63662,63660,63666,63688,63685,63698,63705,63721,63717,63711,63724,63726,63721,63723,63710,63680,63631,63554,63463,63359,63286,63220,63155,63123,63117,63119,63134,63160,63173,63182,63659,63273,63286,63301,63319,63337,63348,63382,63395,63423,63434,63435,63451,63453,63453,63460,63455,63460,63463,63473,63480,63502,63504,63511,63527,63525,63544,63553,63562,63572,63588,63597,63610,63628,63623,63638,63633,63648,63650,63658,63673,63672,63684,63683,63697,63714,63708,63721,63723,63730,63727,63722,63656,63574,63479,63375,63287,63212,63147,63118,63085,63092,63104,63122,63160,63158,63197,63216,63241,63259,63272,63301,63308,63338,63347,63373,63391,63445,63453,63454,63472,63467,63476,63482,63466,63482,63485,63490,63498,63512,63522,63540,63549,63558,63580,63586,63604,63616,63621,63635,63658,63664,63677,63684,63690,63693,63702,63713,63711,63731,63747,63748,63761,63762,63772,63774,63781,63789,63792,63758,63719,63656,63568,63469,63369,63291,63243,63227,63212,63216,63220,63248,63270,63292,63314,63360,63376,63387,63411,63436,63446,63466,63500,63518,63535,63547,63544,63559,63556,63561,63571,63563,63563,63561,63558,63469,63575,63582,63578,63595,63612,63622,63634,63642,63655,63671,63689,63693,63703,63709,63716,63717,63728,63738,63744,63761,63762,63779,63776,63782,63780,63789,63801,63802,63810,63810,63777,63726,63675,63588,63474,63397,63322,63265,63238,63225,63216,63231,63243,63267,63296,63319,63353,63395,63427,63451,63472,63484,63502,63532,63547,63568,63586,63600,63609,63606,63621,63618,63631,63633,63640,63629,63639,63640,63637,63656,63666,63678,63696,63720,63685,63723,63744,63742,63772,63775,63780,63781,63791,63779,63799,63800,63814,63822,63828,63822,63822,63840,63854,63859,63853,63872,63863,63848,63807,63746,63667,63575,63481,63393,63331,63288,63266,63241,63250,63264,63300,63333,63368,63408,63423,63460,63487,63489,63514,63523,63535,63556,63581,63594,63607,63621,63632,63621,63621,63638,63634,63643,63652,63653,63657,63665,63666,63681,63678,63695,63716,63722,63732,63735,63749,63760,63783,63798,63824,63820,63788,63523,63849,63844,63856,63863,63865,63873,63892,63893,63881,63889,63902,63904,63887,63861,63799,63724,63647,63560,63476,63414,63366,63353,63339,63353,63375,63383,63413,63451,63482,63497,63520,63536,63557,63562,63581,63599,63612,63634,63650,63670,63675,63670,63678,63697,63694,63709,63717,63713,63720,63727,63744,63742,63748,63743,63759,63767,63786,63790,63799,63802,63815,63838,63840,63847,63864,63858,63866,63886,63883,63905,63927,63926,63926,63942,63948,63943,63964,63958,63964,63924,63885,63815,63734,63663,63584,63498,63467,63451,63432,63449,63472,63499,63521,63548,63575,63601,63597,63615,63632,63645,63664,63684,63697,63714,63727,63734,63749,63753,63758,63745,63754,63743,63748,63758,63742,63757,63759,63768,63765,63780,63787,63805,63806,63825,63815,63833,63831,63843,63846,63858,63856,63872,63878,63880,63888,63898,63908,63913,63931,63925,63932,63944,63940,63940,63907,63867,63801,63712,63608,63518,63446,63411,63381,63346,63395,63365,63367,63833,63418,63514,63535,63566,63593,63615,63636,63647,63673,63687,63718,63725,63744,63739,63733,63740,63730,63716,63731,63734,63744,63750,63743,63760,63772,63782,63779,63804,63821,63825,63828,63850,63857,63854,63867,63884,63893,63896,63911,63916,63915,63930,63922,63931,63943,63952,63955,63954,63951,63913,63861,63784,63689,63583,63504,63440,63398,63379,63357,63360,63371,63390,63418,63436,63469,63489,63535,63537,63554,63573,63589,63610,63645,63668,63654,63710,63696,63709,63705,63702,63713,63696,63709,63715,63717,63731,63732,63738,63764,63771,63775,63793,63793,63814,63816,63842,63850,63856,63864,63875,63897,63896,63902,63905,63909,63913,63913,63924,63934,63942,63952,63959,63968,63966,63943,63883,63810,63718,63627,63519,63438,63386,63330,63326,63323,63338,63364,63387,63416,63439,63465,63503,63524,63532,63551,63560,63584,63608,63648,63664,63694,63702,63704,63717,63725,63720,63730,63736,63711,63718,63764,63754,63763,63785,63793,63811,63832,63817,63841,63852,63861,63870,63877,63895,63901,63905,63914,63928,63934,63937,63948,63951,63963,63969,63980,63990,63992,64005,64018,64011,63988,63957,63906,63846,63757,63670,63596,63546,63508,63482,63480,63481,63500,63525,63551,63585,63615,63647,63661,63671,63689,63697,63730,63749,63763,63781,63790,63804,63810,63811,63801,63800,63793,63795,63801,63790,63832,63819,63823,63822,63508,63851,63874,63867,63889,63889,63919,63916,63924,63924,63945,63943,63962,63964,63978,63980,63978,63994,63992,64001,64013,64018,64031,64014,64009,63988,63931,63861,63765,63664,63597,63527,63480,63456,63437,63443,63456,63475,63494,63536,63573,63609,63636,63655,63692,63719,63740,63777,63781,63805,63823,63832,63838,63849,63850,63847,63845,63850,63838,63852,63856,63862,63878,63867,63887,63899,63920,63933,63935,63937,63910,63536,63976,63987,63994,64002,64003,64016,64025,64034,64033,64044,64045,64050,64056,64071,64081,64089,64077,64055,63999,63907,63809,63719,63632,63570,63535,63505,63507,63520,63538,63551,63565,63589,63616,63653,63662,63692,63704,63722,63741,63768,63788,63819,63839,63846,63851,63872,63876,63863,63872,63872,63884,63885,63904,63915,63909,63912,63921,63918,63932,63950,63959,63973,63991,64002,64013,64026,64023,64026,64038,64047,64057,64084,64099,64095,64098,64089,64094,64089,64115,64097,64120,64109,64089,64045,63976,63894,63784,63685,63617,63552,63507,63485,63471,63481,63489,63517,63535,63574,63586,63615,63638,63660,63682,63698,63717,63737,63746,63801,63812,63840,63851,63863,63879,63878,63884,63893,63882,63889,63892,63893,63899,63903,63910,63924,63943,63951,63972,63976,63985,63998,64009,64008,64014,64027,64040,64035,64044,64044,64052,64076,64082,64102,64101,64102,64120,64123,64121,64130,64128,64107,64060,63975,63843,63737,63622,63551,63471,63416,63355,63347,63362,63405,63428,63455,63481,63514,63538,63553,63572,63600,63642,63675,63722,63759,63789,63802,63807,63809,63797,63800,63791,63790,63800,63808,63824,63828,63847,63868,63881,63891,63904,63924,63944,63948,63967,63970,63978,63991,64005,64002,64017,64022,64036,64040,64054,64056,64069,64074,64078,64095,64088,64102,64101,64103,64103,64085,64056,63977,63870,63745,63619,63511,63434,63373,63328,63294,63293,63288,63320,63335,63378,63408,63438,63441,63446,64040,64054,63585,63624,63666,63697,63721,63719,63731,63735,63747,63736,63739,63726,63734,63734,63742,63742,63747,63762,63770,63794,63818,63847,63850,63872,63873,63894,63924,63937,63949,63957,63966,63970,63975,63993,64001,64012,64014,64030,64040,64037,64040,64043,64053,64047,64031,63984,63913,63795,63668,63537,63421,63332,63260,63211,63188,63180,63195,63226,63254,63271,63309,63326,63344,63360,63388,63400,63432,63477,63511,63556,63580,63612,63644,63670,63667,63645,63621,63984,63650,63662,63667,63679,63701,63701,63733,63740,63764,63785,63807,63816,63839,63845,63866,63867,63882,63900,63902,63908,63923,63932,63936,63955,63964,63955,63968,63983,63998,64003,64010,64022,64027,64005,63974,63920,63806,63689,63572,63467,63392,63339,63307,63285,63281,63291,63321,63342,63379,63415,63433,63481,63510,63534,63558,63585,63615,63638,63676,63707,63732,63744,63747,63748,63750,63737,63745,63744,63747,63764,63777,63781,63801,63820,63786,63285,63833,63857,63874,63889,63904,63911,63914,63931,63949,63955,63956,63972,63974,63991,63980,63993,63996,63997,63996,64006,64003,64003,63997,63955,63886,63774,63657,63560,63480,63403,63364,63343,63338,63346,63354,63397,63423,63450,63492,63521,63571,63599,63630,63656,63680,63713,63739,63769,63784,63791,63805,63816,63798,63795,63802,63804,63801,63801,63811,63820,63832,63851,63869,63877,63900,63904,63926,63927,63956,63948,63988,63989,64007,64019,64009,64018,63680,64041,64054,64057,64057,64071,64065,64082,64076,64075,64060,64014,63924,63799,63657,63539,63432,63361,63324,63299,63289,63294,63308,63337,63354,63387,63428,63450,63480,63505,63532,63560,63598,63625,63679,63713,63732,63749,63766,63768,63769,63773,63776,63778,63781,63794,63794,63813,63812,63819,63833,63838,63849,63854,63886,63903,63914,63936,63950,63953,63967,63983,63993,64002,64008,64023,64019,64025,64037,64036,64055,64062,64070,64083,64046,64032,64008,63928,63817,63686,63573,63470,63382,63338,63298,63294,63298,63307,63324,63360,63389,63427,63451,63493,63517,63553,63577,63593,63624,63664,63696,63709,63734,63747,63764,63772,63776,63779,63790,63800,63810,63803,63809,63822,63847,63849,63869,63879,63899,63894,63919,63928,63942,63951,63963,63979,63972,63990,64008,64015,64017,64022,64028,64034,64046,64053,64069,64062,64058,64080,64085,64081,64061,64040,63979,63878,63761,63649,63578,63503,63444,63380,63367,63405,63457,63481,63532,63558,63592,63612,63637,63667,63691,63709,63742,63775,63794,63811,63822,63830,63836,63842,63826,63835,63823,63836,63841,63852,63857,63870,63869,63868,63897,63899,63913,63933,63945,63959,63980,63979,63983,63990,64000,64009,64013,64023,64029,64041,64047,64042,64059,64060,64059,64066,64080,64064,64058,64022,63967,63856,63747,63633,63532,63459,63403,63361,63345,63349,63368,63396,63461,63487,63537,63537,63577,63641,63674,63683,63723,63745,63774,63796,63813,63822,63841,63833,63841,63841,63839,63841,63849,63852,63866,63870,63881,63879,63893,63892,63900,63911,63915,63938,63948,63971,63976,63981,63989,64002,64008,64023,64029,64038,64054,64060,64059,64069,64081,64083,64083,64085,64078,64030,63963,63838,63713,63598,63494,63419,63365,63331,63331,63335,63360,63380,63402,63435,63468,63512,63540,63585,63575,64023,63642,63689,63735,63753,63770,63790,63797,63790,63798,63800,63802,63812,63823,63825,63827,63842,63856,63874,63897,63914,63935,63939,63959,63966,63980,63991,64003,64014,64035,64030,64041,64053,64049,64060,64073,64081,64064,64067,64079,64097,64093,64099,64097,64085,64047,63968,63855,63729,63635,63529,63441,63388,63355,63335,63346,63370,63397,63434,63469,63501,63522,63547,63567,63574,63617,63635,63675,63711,63753,63799,63776,63775,64093,63823,63822,63822,63839,63845,63855,63855,63868,63868,63883,63910,63910,63919,63946,63951,63968,63975,63992,64005,64017,64017,64034,64047,64062,64068,64080,64093,64089,64089,64101,64110,64111,64114,64116,64125,64132,64136,64125,64099,64049,63979,63861,63777,63666,63594,63519,63488,63473,63486,63509,63533,63578,63610,63635,63657,63681,63703,63717,63748,63763,63805,63832,63845,63863,63880,63891,63899,63890,63886,63906,63881,63895,63979,63922,63919,63918,63946,63952,63961,63962,63968,63987,64005,64015,64025,64033,64051,64053,64064,64075,64080,64096,64094,64092,64103,64126,64115,64138,64139,64148,64153,64142,64127,64099,64038,63941,63850,63745,63659,63595,63533,63517,63502,63500,63514,63532,63577,63616,63648,63677,63696,63734,63766,63780,63809,63841,63867,63893,63904,63907,63933,63931,63912,63919,63923,63928,63923,63929,63929,63943,63944,63962,63983,63984,63970,63976,63994,64038,64044,64065,64073,64079,64082,64098,64093,64094,64098,64114,64124,64129,64150,64147,64157,64158,64173,64168,64146,64103,64036,63922,63790,63678,63585,63520,63462,63442,63434,63427,63451,63469,63497,63523,63552,63573,63608,63636,63646,63675,63680,63720,63753,63801,63817,63829,63843,63849,63842,63853,63864,63879,63878,63868,63881,63888,63889,63900,63924,63935,63940,63943,63966,63979,63998,64011,64013,64034,64031,64045,64059,64060,64087,64095,64078,64075,64085,63829,64088,64112,64111,64106,64102,64061,63971,63858,63736,63636,63542,63455,63409,63381,63376,63377,63395,63412,63450,63481,63517,63557,63566,63581,63600,63616,63634,63666,63695,63734,63763,63784,63802,63813,63812,63824,63811,63831,63833,63845,63849,63855,63855,63866,63885,63898,63913,63927,63946,63946,63964,63982,63994,64001,64002,64022,64021,64033,64050,64046,64047,64063,64071,64085,64081,64100,64109,64100,64111,64109,64124,64137,64116,64065,63968,63853,63885,63617,63448,63397,63362,63353,63359,63374,63396,63431,63462,63511,63544,63572,63607,63628,63636,63661,63690,63715,63759,63781,63790,63790,63786,63766,63755,63757,63761,63764,63768,63787,63793,63794,63812,63801,63808,63823,63841,63854,63875,63881,63903,63915,63932,63929,63936,63946,63957,63962,63976,63990,63989,64004,64003,64012,64021,64025,64023,64044,64042,64011,63962,63881,63758,63634,63543,63449,63365,63304,63275,63258,63252,63277,63287,63326,63405,63434,63477,63497,63514,63562,63569,63618,63660,63694,63715,63742,63750,63752,63747,63743,63729,63709,63706,63705,63716,63730,63737,63756,63783,63811,63822,63850,63853,63878,63886,63901,63935,63931,63942,63946,63966,63974,63985,63992,64002,64000,64007,64019,64025,64038,64048,64040,64039,64013,63972,63878,63750,63599,63482,63365,63270,63196,63158,63118,63122,63129,63158,63170,63193,63220,63239,63277,63966,63368,63392,63423,63473,63519,63542,63558,63594,63605,63612,63616,63619,63620,63626,63625,63633,63642,63650,63650,63655,63667,63680,63690,63718,63732,63757,63779,63804,63811,63827,63837,63850,63862,63887,63896,63906,63909,63934,63948,63952,63956,63944,63966,63981,63991,63978,63949,63889,63764,63618,63484,63347,63244,63165,63104,63069,63047,63050,63052,63069,63092,63114,63141,63172,63209,63246,63281,63287,63306,63319,63329,63386,63469,63513,63522,63529,63530,63525,63530,63538,63541,63563,63571,63575,63586,63596,63620,63637,63657,63688,63714,63748,63769,63793,63814,63830,63846,63858,63879,63886,63897,63915,63930,63918,63947,63951,63963,63964,63975,63980,63979,63973,63987,63978,63958,63900,63775,63641,63480,63337,63225,63118,63070,63028,63027,63033,63066,63088,63123,63150,63182,63206,63235,63255,63269,63294,63322,63365,63400,63443,63473,63508,63532,63513,63534,63978,63508,63508,63508,63519,63542,63549,63572,63587,63621,63645,63651,63672,63698,63718,63725,63758,63776,63794,63794,63809,63811,63838,63846,63857,63873,63872,63878,63888,63894,63892,63906,63898,63901,63902,63872,63797,63665,63517,63370,63233,63137,63045,62999,62963,62953,62971,62994,63029,63080,63130,63183,63206,63242,63280,63297,63337,63373,63408,63455,63490,63508,63515,63533,63517,63527,63508,63526,63532,63523,63521,63567,63611,63649,63678,63701,63727,63747,63779,63801,63827,63846,63865,63891,63889,63904,63934,63937,63945,63957,63965,63980,63998,63996,63997,64001,63993,63996,63991,63974,63930,63861,63760,63624,63494,63365,63273,63194,63138,63118,63128,63140,63167,63201,63252,63308,63339,63366,63396,63423,63446,63485,63524,63563,63596,63621,63646,63662,63669,63674,63666,63660,63663,63662,63656,63655,63631,63657,63685,63671,63649,63666,63733,63758,63782,63809,63820,63854,63859,63873,63894,63915,63907,63920,63937,63934,63950,63968,63981,63986,64006,64010,64028,64032,64012,63953,63893,63785,63669,63571,63482,63396,63360,63336,63325,63323,63335,63368,63410,63439,63467,63503,63525,63553,63573,63590,63616,63650,63674,63715,63741,63767,63781,63786,63800,63813,63806,63805,63810,63828,63834,63837,63865,63864,63878,63891,63902,63914,63929,63947,63962,63988,63997,63980,63987,64002,64007,64031,64035,64048,64043,64055,64065,64075,64075,64091,64081,64074,64088,64094,64100,64095,64080,64052,63973,63865,63728,63599,63500,63415,63361,63330,63314,63327,63357,63387,63416,63441,63461,63486,63514,63537,63555,63579,63605,63620,63646,63665,63689,63700,63721,63725,63726,63727,63740,63734,63732,63738,63723,63721,63708,63730,63747,63766,63798,63824,63844,63864,63868,63878,63894,63904,63931,63950,63935,63937,63955,63620,63980,63988,63999,64009,64015,64020,64019,64026,64031,64019,63992,63953,63872,63752,63629,63523,63430,63363,63322,63290,63277,63268,63297,63331,63384,63435,63463,63494,63511,63530,63538,63550,63571,63610,63645,63675,63708,63717,63730,63738,63726,63725,63714,63707,63709,63716,63713,63728,63736,63756,63781,63797,63811,63818,63840,63844,63865,63875,63887,63893,63908,63924,63917,63934,63944,63953,63962,63982,63997,63998,64003,64013,64017,63995,63955,63876,63777,63658,63530,63420,63333,63265,63216,63180,63164,63175,63197,63246,63288,63337,63370,63408,63456,63469,63510,63545,63582,63611,63641,63674,63694,63696,63703,63709,63702,63704,63697,63699,63716,63711,63707,63715,63720,63742,63772,63781,63793,63808,63827,63852,63860,63867,63878,63896,63905,63920,63940,63938,63953,63956,63958,63961,63972,63980,63987,63998,63984,63947,63853,63732,63577,63439,63321,63226,63183,63120,63157,63155,63148,63123,63165,63254,63286,63867,63326,63360,63385,63405,63422,63447,63489,63517,63540,63561,63579,63594,63599,63609,63601,63604,63595,63607,63603,63611,63625,63648,63668,63686,63698,63725,63748,63761,63778,63793,63807,63817,63836,63848,63867,63868,63885,63900,63905,63914,63926,63935,63941,63943,63954,63959,63934,63884,63786,63644,63488,63355,63231,63146,63087,63073,63059,63076,63096,63129,63157,63175,63196,63243,63262,63291,63333,63368,63377,63383,63423,63487,63926,63561,63570,63567,63583,63590,63587,63596,63611,63625,63627,63636,63644,63681,63690,63712,63729,63743,63763,63786,63795,63808,63832,63830,63834,63847,63866,63875,63872,63883,63899,63912,63917,63927,63925,63938,63944,63951,63953,63944,63899,63830,63701,63580,63463,63335,63251,63188,63143,63139,63143,63149,63177,63211,63239,63272,63308,63345,63368,63391,63428,63451,63502,63529,63575,63600,63622,63643,63639,63644,63620,63630,63598,63569,63606,63613,63616,63617,63637,63666,63683,63699,63709,63719,63737,63775,63792,63790,63809,63806,63816,63832,63832,63840,63843,63859,63858,63873,63877,63881,63890,63893,63892,63882,63820,63723,63598,63456,63308,63196,63096,63035,63008,63003,63016,63043,63072,63115,63153,63198,63248,63283,63316,63326,63362,63379,63427,63461,63509,63535,63551,63565,63564,63571,63561,63561,63559,63559,63576,63568,63580,63601,63636,63615,63611,63003,63705,63721,63737,63763,63762,63776,63793,63804,63806,63808,63820,63840,63842,63864,63875,63884,63909,63912,63931,63931,63940,63927,63882,63814,63683,63559,63411,63271,63182,63111,63075,63045,63035,63038,63070,63104,63162,63183,63220,63254,63279,63303,63320,63341,63367,63400,63447,63472,63525,63551,63570,63574,63569,63572,63566,63570,63583,63593,63604,63616,63634,63641,63653,63674,63692,63715,63732,63736,63756,63781,63791,63802,63815,63845,63857,63875,63886,63864,63878,63919,63525,63551,63927,63921,63936,63951,63950,63941,63939,63899,63801,63665,63521,63399,63281,63187,63118,63090,63090,63089,63110,63150,63183,63216,63258,63285,63304,63319,63328,63341,63369,63406,63446,63499,63522,63551,63562,63570,63587,63585,63587,63584,63598,63615,63620,63621,63633,63650,63654,63685,63694,63724,63746,63770,63791,63803,63815,63836,63859,63874,63895,63904,63917,63924,63922,63926,63931,63942,63947,63966,63972,63978,63985,63996,64011,64024,64003,64018,64023,64005,63951,63780,63657,63523,63396,63297,63225,63185,63173,63174,63195,63229,63258,63288,63338,63373,63412,63451,63468,63495,63519,63549,63570,63599,63632,63651,63658,63660,63636,63633,63635,63621,63630,63637,63647,63645,63656,63663,63673,63693,63724,63733,63759,63779,63794,63810,63832,63842,63852,63874,63883,63883,63882,63884,63892,63900,63896,63906,63915,63924,63926,63922,63922,63927,63926,63922,63920,63860,63757,63631,63470,63346,63239,63136,63078,63055,63011,63012,63026,63056,63173,63219,63263,63300,63348,63383,63432,63486,63532,63573,63622,63665,63672,63686,63682,63671,63669,63676,63677,63668,63678,63674,63669,63683,63695,63695,63702,63719,63723,63736,63749,63770,63790,63818,63829,63842,63850,63872,63884,63881,63894,63894,63901,63904,63898,63918,63921,63924,63932,63944,63940,63938,63931,63888,63792,63648,63502,63345,63222,63132,63053,63038,63015,63030,63045,63070,63101,63156,63183,63236,63282,63302,63337,63386,63422,63465,63509,63511,63540,63924,63617,63619,63620,63625,63623,63612,63618,63632,63636,63644,63651,63664,63672,63702,63710,63731,63758,63777,63795,63816,63821,63823,63825,63846,63858,63867,63880,63881,63880,63892,63883,63894,63909,63914,63918,63927,63910,63844,63712,63576,63418,63287,63169,63073,63024,62977,62951,62967,62970,62986,63021,63048,63092,63135,63182,63201,63253,63275,63313,63373,63424,63477,63517,63567,63599,63613,63611,63625,63632,63656,63643,63658,63657,63627,63651,63687,63721,63741,63761,63776,63803,63821,63832,63836,63850,63882,63910,63908,63926,63937,63956,63974,63987,63995,63995,63999,64010,64010,64025,64024,64032,64039,64037,64009,63936,63827,63671,63529,63394,63257,63181,63117,63097,63070,63089,63113,63160,63195,63229,63256,63301,63329,63369,63394,63445,63495,63538,63583,63623,63638,63658,63669,63660,63652,63660,63651,63650,63655,63657,63655,63657,63666,63683,63707,63729,63742,63774,63779,63782,63829,63868,63866,63883,63899,63917,63923,63930,63938,63955,63951,63959,63969,63991,63984,63993,63999,63996,63958,63907,63795,63627,63462,63315,63195,63116,63058,63022,63005,63008,63006,63032,63058,63091,63131,63161,63199,63248,63282,63316,63359,63400,63433,63479,63500,63506,63523,63545,63552,63541,63550,63541,63539,63544,63552,63572,63580,63603,63624,63641,63659,63681,63706,63729,63750,63770,63781,63789,63812,63794,63797,63841,63867,63868,63885,63893,63913,63921,63936,63930,63939,63933,63897,63837,63702,63555,63396,63280,63172,63095,63048,63029,63026,63036,63064,63095,63127,63164,63205,63235,63264,63284,63321,63343,63377,63412,63444,63481,63510,63535,63546,63553,63560,63560,63556,63561,63556,63569,63571,63567,63576,63595,63607,63629,63660,63683,63712,63733,63767,63788,63802,63805,63824,63834,63847,63862,63882,63882,63895,63916,63945,63933,63943,63909,63889,63560,63626,63470,63291,63163,63060,63002,62975,62964,62958,62990,63004,63029,63077,63105,63146,63178,63203,63225,63241,63266,63307,63348,63391,63423,63456,63469,63483,63483,63475,63472,63480,63482,63477,63482,63486,63504,63514,63533,63539,63575,63615,63640,63663,63673,63691,63713,63726,63766,63762,63771,63802,63812,63816,63821,63826,63842,63863,63870,63882,63885,63891,63900,63894,63864,63801,63676,63540,63384,63267,63138,63030,63575,62901,62900,62909,62934,62949,62981,63022,63045,63088,63115,63145,63179,63204,63232,63273,63309,63351,63364,63388,63400,63402,63414,63418,63424,63433,63443,63458,63466,63485,63507,63513,63555,63579,63604,63619,63632,63654,63681,63692,63714,63731,63747,63772,63790,63805,63800,63815,63815,63825,63828,63840,63846,63865,63874,63877,63853,63777,63660,63514,63356,63213,63099,63029,62980,62966,62969,62967,62977,63009,63025,63086,63714,63190,63209,63239,63274,63310,63352,63390,63404,63431,63459,63457,63460,63443,63454,63444,63444,63452,63457,63458,63469,63472,63490,63512,63519,63532,63554,63579,63592,63620,63641,63660,63663,63673,63682,63702,63707,63730,63739,63761,63767,63774,63784,63771,63786,63798,63789,63766,63681,63545,63401,63247,63104,62984,62907,62872,62853,62845,62847,62867,62897,62928,62962,63011,63048,63103,63129,63162,63173,63197,63277,63328,63355,63378,63394,63385,63377,63350,63343,63351,63345,63348,63346,63334,63350,63371,63396,63412,63422,63438,63487,63513,63538,63574,63587,63612,63625,63652,63665,63680,63686,63699,63703,63728,63734,63740,63763,63759,63763,63742,63670,63537,63391,63232,63072,62952,62875,62809,62798,62789,62809,62828,62864,62899,62949,62977,63017,63038,63053,63072,63085,63124,63158,63203,63252,63291,63298,63335,63327,63334,63350,63357,63373,63383,63387,63410,63402,63426,63451,63462,63485,63512,63534,63554,63578,63595,63604,63614,63624,63641,63660,63670,63675,63683,63687,63709,63725,63738,63740,63746,63768,63754,63749,63697,63591,63452,63280,63126,62990,62876,62820,62785,62770,62768,62773,62785,62799,62832,62859,62896,62925,62949,62964,62976,63015,63050,63088,63134,63174,63194,63241,63248,63266,63271,63278,63281,63287,63303,63325,63323,63298,63328,63328,63386,63425,63446,63480,63498,63518,63552,63565,63581,63614,63640,63655,63680,63683,63700,63709,63726,63742,63743,63753,63770,63788,63786,63798,63784,63747,63675,63539,63384,63241,63113,63014,62927,62897,62877,62895,62907,62933,62963,63010,63041,63077,63116,63138,63156,63181,63204,63248,63290,63335,63367,63413,63416,63423,63406,63409,63389,63395,63392,63390,63396,63404,63421,63422,63431,63432,63476,63504,63513,63518,62963,63578,63594,63597,63598,63616,63638,63657,63683,63684,63702,63708,63713,63724,63738,63743,63758,63761,63739,63686,63604,63455,63285,63153,63026,62935,62880,62834,62814,62834,62832,62865,62884,62924,62959,63001,63037,63062,63081,63110,63154,63190,63233,63280,63312,63332,63349,63347,63351,63340,63336,63342,63337,63331,63338,63339,63356,63362,63388,63407,63441,63449,63499,63515,63543,63565,63594,63614,63623,63651,63658,63658,63628,63637,63668,63697,63705,63724,63728,63731,63740,63713,63691,63588,63457,63289,63128,62969,62864,62803,62759,62761,62751,62766,62793,62815,62856,62884,62918,62946,62981,63010,63041,63063,63109,63163,63226,63264,63313,63328,63345,63332,63342,63321,63319,63318,63334,63344,63367,63376,63397,63409,63427,63441,63459,63492,63501,63525,63530,63562,63573,63584,63608,63617,63629,63634,63647,63643,63653,63668,63694,63649,63694,63678,63342,63672,63584,63448,63280,63128,62973,62853,62766,62731,62711,62709,62711,62722,62745,62773,62816,62835,62864,62893,62924,62960,63007,63047,63099,63127,63186,63223,63256,63282,63298,63320,63326,63329,63343,63368,63361,63384,63390,63414,63439,63456,63469,63510,63537,63568,63586,63590,63613,63612,63624,63641,63653,63670,63673,63683,63686,63689,63706,63709,63720,63729,63733,63745,63750,63755,63763,63756,63361,63751,63664,63555,63439,63225,62994,62913,62872,62857,62866,62887,62907,62925,62962,62983,63013,63040,63065,63106,63137,63175,63198,63231,63265,63299,63343,63363,63388,63394,63420,63416,63430,63430,63423,63444,63451,63471,63478,63497,63510,63546,63566,63586,63610,63637,63649,63657,63674,63672,63683,63689,63712,63706,63723,63734,63743,63738,63736,63745,63750,63766,63773,63781,63785,63787,63760,63689,63583,63449,63324,63234,63120,63057,63038,63031,63063,63082,63136,63176,63219,63261,63304,63320,63347,63354,63383,63409,63451,63489,63508,63519,63520,63527,63506,63505,63490,63475,63479,63466,63453,63459,63471,63474,63495,63505,63519,63529,63542,63554,63559,63584,63587,63621,63657,63671,63678,63682,63692,63691,63710,63714,63733,63754,63768,63782,63781,63773,63756,63709,63632,63506,63362,63230,63116,63003,62931,62866,62827,62809,62823,62873,62906,62955,63019,63080,63155,63182,63209,63231,63278,63326,63354,63394,63406,63419,63435,63443,63439,63434,63436,63446,63434,63435,63432,63440,63448,63455,63470,63486,63521,63520,63550,63572,63581,63608,63624,63654,63662,63682,63701,63691,63681,63690,63682,63696,63688,63698,63721,63715,63696,63636,63509,63365,63190,63018,62885,62783,62711,62656,62645,62630,62619,62634,62629,62641,62652,62660,62679,62695,62722,62758,62809,62839,62881,62928,62963,63054,63089,63148,63189,63222,63273,63323,63361,63393,63420,63430,63439,63464,63480,63498,63525,63561,63566,63572,63577,63599,63611,63642,63651,63669,63682,63704,63738,63734,63741,63746,63752,63772,63772,63785,63773,63763,63695,63581,63414,63253,63107,63008,62928,62903,62895,62895,62917,62935,62981,63032,63082,63145,63195,63226,63254,63278,63308,63335,63367,63416,63465,63505,63531,63566,63577,63567,63557,63561,63571,63575,63611,63608,63623,63597,63610,63601,63593,63619,62917,63662,63667,63695,63705,63710,63698,63694,63701,63698,63694,63709,63715,63737,63747,63762,63778,63795,63800,63775,63718,63638,63523,63392,63263,63156,63068,63013,62992,62977,62972,63004,63034,63074,63131,63188,63258,63320,63389,63431,63481,63503,63533,63573,63574,63592,63601,63609,63611,63614,63617,63608,63600,63588,63571,63566,63552,63554,63552,63576,63582,63598,63609,63612,63640,63654,63661,63678,63683,63672,63743,63761,63757,63770,63775,63797,63785,63792,63781,63765,63725,63652,63589,63521,63458,63405,63362,63312,63288,63286,63288,63309,63353,63394,63469,63509,63533,63556,63563,63582,63596,63620,63641,63650,63654,63651,63653,63642,63615,63595,63579,63537,63502,63487,63462,63439,63415,63408,63418,63415,63434,63430,63454,63469,63490,63510,63535,63556,63586,63616,63658,63690,63713,63733,63756,63762,63762,63746,63716,63666,63554,63391,63579,63145,62998,62949,62940,62941,62973,63009,63060,63114,63148,63207,63224,63262,63310,63346,63388,63448,63481,63521,63545,63576,63594,63589,63600,63579,63562,63538,63532,63549,63578,63607,63627,63660,63671,63674,63677,63662,63664,63664,63664,63675,63688,63696,63704,63723,63727,63724,63724,63731,63725,63718,63731,63734,63723,63682,63591,63448,63287,63119,62971,62850,62768,62717,62690,62688,62679,62714,62704,62736,63664,63664,62833,62875,62898,62930,62979,63040,63091,63143,63172,63195,63224,63227,63219,63217,63219,63218,63208,63207,63200,63203,63223,63252,63286,63325,63355,63373,63411,63427,63440,63459,63465,63491,63497,63530,63550,63562,63578,63582,63590,63599,63586,63522,63395,63244,63072,62900,62777,62682,62643,62605,62603,62601,62606,62613,62628,62643,62694,62727,62755,62812,62857,62893,62932,62974,63024,63070,63081,63096,63060,63030,63005,63009,63012,63033,63064,63075,63085,63068,63064,63077,63086,63104,63137,63169,63188,63186,63184,63149,63118,63073,63040,63020,63012,63029,63047,63079,63087,63048,62938,62789,62616,62476,62367,62276,62195,62135,62090,62071,62051,62032,62024,62021,62023,62014,62007,62016,62016,62027,62027,62030,62035,62036,62038,62045,62051,62040,62036,62033,62029,62001,61989,61975,61973,61963,61980,61997,62005,62021,62027,62022,62020,62063,62090,62129,62158,62182,62216,62221,62248,62255,62274,62295,62307,62289,62223,62119,62005,61893,61794,61721,61647,61607,61559,61544,61525,61521,61514,61531,61536,61554,61589,61604,61630,61661,61689,61738,61770,61821,61844,61889,61918,61925,61936,61953,61945,61957,61946,61948,61959,61948,61969,61992,62027,62051,62089,62106,62135,62136,62158,62195,62222,62273,62349,62407,62476,62531,62586,62631,62673,62728,62754,62732,61918,62622,62437,62228,62019,61872,61745,61674,61619,61583,61571,61562,61558,61561,61567,61586,61604,61610,61609,61610,61620,61635,61660,61704,61771,61815,61838,61858,61867,61852,61850,61829,61818,61829,61828,61823,61845,61845,61849,61862,61871,61900,61939,61973,62006,62049,62084,62101,62120,62147,62177,62201,62220,62249,62262,62262,62255,62264,62272,62285,62260,62192,62071,61919,61777,61657,61565,61499,61419,61364,61320,61862,61871,61290,61317,61336,61356,61367,61363,61375,61397,61439,61470,61505,61535,61558,61592,61618,61634,61657,61682,61696,61701,61685,61683,61671,61672,61673,61675,61687,61695,61714,61736,61764,61782,61830,61851,61886,61914,61960,61981,62011,62037,62062,62104,62137,62168,62200,62223,62228,62230,62244,62248,62262,62246,62180,62025,61835,61676,61565,61469,61390,61313,61270,61237,61215,61210,61207,61217,61227,61229,61960,61276,61323,61330,61372,61379,61410,61444,61477,61512,61524,61507,61511,61525,61504,61494,61492,61493,61493,61505,61508,61528,61552,61569,61589,61613,61634,61689,61735,61789,61836,61872,61905,61944,61980,62010,62057,62096,62156,62211,62250,62280,62304,62329,62328,62312,62233,62102,61935,61759,61630,61536,61472,61424,61396,61379,61372,61373,61380,61413,61447,61478,61537,61566,61592,61626,61651,61629,61711,61702,62156,62211,62250,61784,61754,61757,61729,61711,61702,61704,61728,61751,61782,61821,61855,61879,61917,61953,61988,62040,62080,62127,62192,62236,62271,62294,62347,62378,62427,62485,62524,62578,62614,62631,62673,62673,62664,62552,62384,62162,61925,61751,61646,61586,61541,61521,61513,61517,61505,61512,61529,61538,61562,61573,61602,61625,61654,61680,61738,61786,61842,61890,61925,61961,61959,61963,61953,61938,61908,61875,61858,61840,61827,61863,61906,61936,61985,62035,62077,62116,62162,62210,62239,62300,62354,62405,62460,62507,62557,62595,62643,62667,62692,62707,62722,62714,62708,62650,62528,62344,62123,61934,61794,61701,61641,61609,61600,61572,61593,61607,61604,61628,61650,61685,61717,61758,61788,61836,61867,61906,61949,61976,62002,62026,62044,62077,62091,62105,62096,62089,62089,62087,62074,62088,62096,62104,62115,62131,62175,62217,62252,62312,62356,62407,62445,62500,62521,62535,62609,62601,61867,62683,62703,62725,62745,62763,62759,62764,62733,62637,62472,62254,62032,61876,61751,61676,61623,61570,61561,61552,61559,61550,61575,61597,61634,61650,61661,61680,61685,61692,61718,61751,61777,61788,61808,61802,61799,61780,61763,61764,61757,61746,61743,61731,61712,61682,61679,61669,61673,61698,61727,61752,61778,61785,61797,61792,61769,61751,61738,61711,61672,61590,61444,61373,58990,58132,58804,47413,32694,23494,17356,8795,5769,3743,2527,1806,1359,1040,813,670,580,514,475,448,434,428,421,438,473,479,472,449,488,546,618,718,845,1022,1219,1329,1382,1374,1321,1242,1171,1114,1071,1055,1058,1074,1114,1166,1212,1270,1314,1352,1353,1336,1314,1292,1254,1237,1224,1226,1246,1270,1286,1306,1319,1318,1313,1306,1247,1220,1198,1206,1223,1252,1309,1359,1388,1074,1362,1342,1296,1279,1280,1290,1297,1330,1343,1358,1375,1369,1371,1366,1347,1330,1327,1338,1347,1361,1377,1396,1420,1437,1446,1474,1485,1500,1526,1554,1587,1619,1630,1648,1664,1662,1670,1665,1656,1655,1646,1647,1659,1653,1655,1659,1662,1659,1659,1660,1657,1658,1663,1669,1665,1676,1668,1658,1672,1681,1681,1694,1696,1684,1697,1657,1638,1619,1625,1594,1552,1533,1646,1539,1551,1553,1562,1568,1572,1586,1594,1604,1616,1623,1633,1644,1646,1656,1659,1675,1681,1693,1701,1691,1684,1698,1685,1679,1675,1664,1655,1648,1639,1638,1626,1622,1621,1632,1634,1649,1661,1671,1688,1699,1710,1713,1708,1700,1708,1707,1705,1708,1704,1700,1711,1712,1706,1721,1741,1743,1757,1759,1755,1748,1752,1743,1741,1736,1770,1756,1740,1698,1668,1671,1634,1635,1631,1623,1620,1624,1634,1642,1649,1673,1695,1723,1756,1801,1843,1853,1871,2442,2408,2393,2353,2328,2339,2374,2419,2458,2501,2562,2627,2682,2731,2712,2503,2349,2264,2184,2144,2101,2082,2067,2053,2036,2018,1971,1928,1684,1687,1632,1611,1608,1630";
                *//**
         * 红光数据
         *//*
                String test2 = "64331,64340,64355,64381,64380,64373,64355,64331,64323,64302,64300,64315,64324,64323,64323,64302,64263,64195,64137,64077,64014,63949,63901,63854,63817,63782,63752,63722,63718,63707,63709,63713,63705,63720,63721,63732,63750,63754,63764,63772,63764,63771,63781,63792,63802,63811,63836,63814,63802,63763,63764,63766,63745,63767,63755,63854,63772,63769,63759,63764,63755,63761,63764,63780,63775,63773,63773,63776,63781,63792,63785,63796,63832,63824,63828,63826,63842,63841,63837,63832,63795,63735,63679,63610,63557,63513,63472,63438,63438,63435,63438,63438,63440,63435,63438,63437,63439,63433,63427,63433,63429,63445,63451,63479,63485,63486,63509,63502,63502,63518,63511,63501,63508,63513,63510,63493,63495,63494,63492,63503,63512,63527,63545,63553,63564,63583,63580,63556,63570,63533,63558,63572,63592,63596,63601,63620,63624,63645,63640,63648,63650,63631,63637,63616,63579,63533,63492,63444,63412,63369,63330,63304,63291,63280,63269,63263,63258,63257,63263,63260,63252,63256,63268,63269,63269,63274,63276,63272,63293,63290,63296,63299,63287,63302,63307,63309,63297,63296,63295,63288,63288,63296,63294,63303,63301,63303,63312,63340,63382,63387,63379,63391,63406,63411,63415,63422,63424,63438,63435,63448,63464,63466,63468,63491,63483,63399,63400,63293,63210,63175,63132,63101,63084,63062,63050,63016,63312,63008,63000,62991,62984,62986,62985,62979,62992,62984,62979,62984,62999,63013,63028,63033,63032,63041,63028,63023,63023,63003,62992,62974,62966,62965,62958,62962,62965,62960,62957,62960,62962,62963,62963,62969,62972,62979,62990,63001,63010,63023,63033,63036,63042,63043,63058,63059,63072,63069,63054,63054,63059,63057,63046,63008,62961,62893,62823,62782,62746,62712,62692,62667,62652,62672,62610,62644,62625,62622,62637,62639,62638,62632,62644,62656,62659,63043,62667,62676,62690,62691,62702,62704,62697,62688,62683,62673,62654,62644,62642,62646,62650,62642,62643,62650,62641,62641,62651,62653,62664,62670,62680,62687,62694,62709,62704,62711,62716,62709,62720,62703,62708,62705,62703,62708,62718,62724,62714,62711,62673,62636,62572,62512,62442,62400,62366,62359,62341,62316,62321,62320,62337,62333,62344,62361,62369,62373,62388,62401,62408,62426,62460,62468,62468,62463,62471,62497,62489,62495,62503,62506,62491,62491,62482,62512,62473,62400,62491,62490,62495,62493,62499,62505,62500,62492,62502,62502,62511,62519,62520,62539,62534,62549,62557,62552,62550,62539,62526,62527,62526,62535,62533,62516,62508,62482,62444,62392,62328,62274,62209,62176,62137,62126,62116,62113,62104,62114,62110,62112,62096,62107,62098,62097,62085,62093,62091,62074,62069,62090,62099,62109,62099,62098,62106,62103,62101,62107,62119,62089,62086,62066,62070,62083,62095,62088,62098,62100,62104,62111,62129,62143,62150,62107,62149,62166,62172,62175,62187,62193,62191,62205,62211,62215,62223,62221,62235,62243,62237,62217,62178,62129,62070,62015,61965,61947,61935,61918,61910,61915,61902,61904,61911,61922,61926,61928,61941,61963,61965,61989,62009,62025,62027,62044,62054,62069,62078,62076,62083,62080,62071,62078,62069,62080,62069,62067,62084,62078,62080,62086,62103,62098,62110,62120,62128,62147,62136,62155,62148,62160,62155,62124,62129,62158,62166,62167,62149,62147,62142,62134,62083,62131,62128,62131,62116,62104,62069,62004,61948,61896,61861,61836,61806,61810,61797,61793,61785,61782,61784,61796,61802,61803,61811,61823,61837,61847,61852,61861,61872,61884,61892,61901,61909,61913,61912,61914,61923,61928,61925,61928,61932,61934,61935,61927,61939,61946,61946,61964,61967,61976,61973,61985,61976,61975,62007,62016,62029,62020,62029,62024,62013,62009,62007,62012,62013,62022,62007,62057,62007,61989,61970,61922,61887,61839,61799,61763,61746,61739,61946,61708,61719,61715,61718,61720,61719,61740,61741,61757,61770,61791,61794,61815,61819,61826,61838,61848,61847,61854,61851,61855,61866,61866,61870,61867,61861,61859,61863,61874,61867,61877,61880,61891,61909,61918,61925,61932,61933,61934,61949,61955,61959,61966,61955,61963,61954,61960,61958,61956,61961,61965,61960,61961,61969,61949,61922,61887,61844,61777,61719,61695,61662,61652,61636,61640,61648,61648,61651,61690,61695,61716,61699,61702,61705,61702,61695,61720,61713,61744,61745,61753,61765,61770,61960,61961,61751,61949,61758,61761,61754,61742,61747,61732,61749,61760,61759,61769,61778,61789,61801,61796,61805,61806,61817,61820,61827,61831,61841,61841,61845,61860,61861,61860,61867,61871,61865,61871,61881,61867,61852,61833,61792,61754,61707,61651,61622,61597,61587,61582,61575,61581,61582,61586,61574,61584,61588,61600,61610,61622,61622,61636,61642,61648,61654,61654,61665,61678,61678,61671,61690,61679,61675,61692,61665,61693,61646,61656,61655,61656,61679,61675,61698,61694,61697,61707,61710,61718,61714,61600,61717,61724,61722,61722,61722,61730,61740,61732,61741,61748,61735,61760,61763,61751,61724,61710,61680,61622,61577,61533,61506,61487,61472,61458,61451,61445,61454,61462,61472,61469,61482,61493,61504,61512,61510,61518,61517,61526,61545,61557,61559,61573,61567,61554,61564,61557,61550,61550,61556,61554,61549,61566,61570,61565,61572,61571,61573,61576,61575,61590,61589,61596,61603,61602,61614,61609,61612,61594,61596,61605,61597,61599,61610,61611,61567,61621,61617,61617,61550,61598,61587,61549,61493,61449,61402,61371,61346,61331,61324,61325,61324,61332,61342,61341,61357,61368,61379,61376,61387,61392,61385,61396,61423,61430,61446,61460,61462,61466,61469,61470,61459,61458,61451,61456,61466,61470,61477,61475,61483,61474,61485,61488,61500,61497,61507,61508,61515,61522,61532,61524,61528,61533,61541,61534,61539,61536,61550,61539,61547,61549,61556,61565,61556,61566,61528,61506,61521,61489,61457,61400,61345,61306,61268,61251,61244,61248,61233,61252,61256,61256,61278,61271,61267,61279,61290,61291,61304,61314,61321,61340,61341,61357,61367,61367,61365,61374,61381,61372,61370,61386,61376,61390,61400,61407,61400,61398,61389,61399,61410,61400,61410,61420,61422,61431,61444,61434,61450,61449,61463,61450,61460,61462,61468,61464,61466,61469,61483,61468,61470,61470,61476,61472,61469,61444,61433,61399,61339,61296,61250,61226,61192,61184,61191,61170,61200,61212,61173,61162,61158,61198,61209,61211,61212,61220,61230,61238,61248,61469,61272,61277,61286,61284,61303,61286,61292,61283,61293,61286,61288,61275,61282,61283,61287,61286,61275,61291,61294,61305,61315,61317,61318,61333,61335,61337,61348,61357,61355,61361,61364,61381,61386,61387,61383,61386,61386,61392,61393,61391,61389,61374,61370,61333,61297,61249,61197,61147,61127,61118,61097,61101,61085,61091,61089,61105,61115,61128,61136,61142,61147,61157,61161,61183,61199,61205,61211,61193,61203,61211,61215,61232,61228,61223,61230,61237,61226,61231,61197,61147,61236,61236,61249,61237,61241,61243,61258,61265,61276,61259,61262,61270,61265,61277,61279,61280,61274,61281,61279,61278,61277,61292,61282,61297,61301,61305,61301,61299,61292,61289,61259,61245,61201,61155,61117,61096,61074,61051,61051,61044,61054,61056,61078,61088,61099,61116,61117,61115,61123,61134,61146,61152,61159,61160,61176,61174,61179,61181,61179,61176,61182,61173,61177,61210,61211,61170,61187,61189,61192,61198,61211,61200,61202,61208,61206,61206,61203,61215,61200,61223,61214,61209,61210,61211,61229,61218,61217,61203,61215,61198,61213,61196,61215,61205,61207,61197,61184,61155,61109,61079,61043,61030,61016,61007,61010,61009,61019,61024,61047,61043,61073,61085,61090,61106,61108,61115,61123,61127,61130,61140,61135,61126,61114,61116,61129,61110,61126,61109,61117,61115,61126,61123,61143,61150,61164,61173,61178,61187,61179,61197,61206,61198,61208,61213,61217,61228,61215,61219,61220,61207,61239,61223,61221,61239,61227,61245,61242,61237,61231,61224,61196,61153,61130,61079,61055,61025,60997,60992,60973,60978,60989,60989,61001,61013,61028,61029,61035,61047,61051,61048,61062,61069,61071,61070,61084,61080,61087,61083,61082,61081,61086,61085,61088,61081,61086,61079,61075,61073,61067,61064,61068,61067,61072,61073,61081,61087,61088,61084,61097,61077,61081,61103,61095,61093,61108,61104,61099,61108,61120,61111,61121,61094,61035,61027,60994,60969,60939,60916,60910,60894,60892,60892,60889,60891,60899,60916,60919,60943,60944,60967,60987,60992,60989,61009,61009,61023,61020,61022,61033,61030,61039,61032,61036,61023,61029,61038,61031,61043,61037,61038,61045,61046,61030,61030,61036,61048,61052,61050,61059,61069,61065,61064,61082,61080,61087,61081,61078,61083,61085,61096,61114,61114,61115,61109,61109,61082,61065,61029,60984,60953,60923,60894,60886,60876,60873,60871,60886,60898,60922,60934,60920,60909,60918,60922,60944,60955,60964,60970,60972,60971,60985,60993,60992,60992,61004,61006,61009,61019,61004,61009,61013,61008,61015,61015,61012,61011,61029,61024,61037,61044,61052,61051,61054,61057,61053,61050,61052,61048,61057,61054,61054,61063,61071,61067,61074,61069,61063,61057,61026,61006,60976,60949,60927,60913,60911,60900,60910,60907,60909,60913,60923,60947,60953,60957,60957,60967,60969,60970,60973,60972,60989,60984,60997,60998,61001,60991,60983,61006,61010,60994,60990,60978,60984,60990,60994,61004,61001,61005,61005,61010,61003,60997,61009,61020,61006,61012,61018,61016,61019,61029,61027,61029,61024,61024,61035,61036,61034,61020,60992,60968,60930,60905,60889,60876,60857,60851,60851,60851,60853,60868,60868,60890,60897,60911,60909,60909,60926,60916,60923,60943,60936,60942,60940,60950,60939,60947,60943,60943,60934,60938,60937,60943,60948,60947,60962,60956,60952,60955,60968,60962,60962,60960,60974,60974,61001,60994,60956,60979,60982,60989,60981,60979,60973,60978,60994,60980,60953,60950,60930,60906,60884,60853,60827,60820,60815,60820,60824,60826,60831,60839,60851,60855,60863,60867,60880,60871,60880,60897,60896,60891,60897,60897,60907,60911,60902,60905,60900,60916,60912,60910,60911,60901,60895,60902,60900,60907,60916,60914,60910,60912,60915,60918,60914,60927,60934,60932,60936,60936,60933,60940,60929,60931,60930,60932,60936,60923,60920,60897,60887,60856,60859,60835,60803,60788,60782,60796,60798,60791,60800,60804,60807,60819,60915,60840,60914,60852,60860,60867,60875,60875,60876,60867,60880,60874,60875,60875,60866,60854,60858,60865,60864,60861,60844,60858,60844,60844,60861,60860,60860,60868,60864,60865,60863,60868,60860,60863,60879,60872,60871,60877,60867,60870,60865,60864,60854,60844,60830,60813,60778,60761,60723,60722,60707,60699,60709,60696,60706,60722,60724,60730,60747,60745,60750,60752,60760,60779,60797,60796,60799,60783,60774,60784,60781,60775,60778,60791,60784,60772,60767,60773,60778,60780,60789,60792,60780,60787,60795,60787,60790,60800,60803,60794,60786,60794,60797,60799,60796,60800,60803,60798,60785,60787,60783,60788,60767,60736,60727,60693,60655,60637,60616,60611,60605,60601,60608,60601,60619,60619,60629,60641,60643,60661,60661,60667,60674,60677,60680,60687,60697,60697,60693,60685,60687,60690,60691,60677,60697,60686,60695,60698,60709,60700,60700,60712,60708,60718,60711,60698,60696,60685,60694,60698,60712,60721,60713,60708,60721,60722,60680,60718,60726,60719,60722,60705,60681,60659,60619,60580,60558,60537,60526,60518,60505,60502,60519,60511,60525,60523,60527,60548,60542,60550,60564,60565,60575,60583,60587,60595,60600,60602,60604,60606,60607,60613,60603,60597,60601,60602,60621,60625,60621,60620,60614,60628,60638,60638,60631,60633,60636,60635,60640,60648,60638,60647,60649,60646,60649,60656,60668,60657,60662,60663,60673,60676,60668,60628,60590,60573,60503,60482,60474,60444,60437,60439,60439,60449,60469,60638,60483,60487,60497,60502,60495,60498,60520,60523,60535,60531,60542,60546,60543,60540,60543,60529,60528,60534,60547,60548,60547,60558,60553,60562,60557,60551,60547,60560,60557,60575,60572,60571,60576,60576,60573,60585,60586,60589,60584,60595,60582,60591,60597,60595,60589,60593,60586,60583,60574,60555,60523,60499,60466,60432,60419,60389,60396,60377,60401,60406,60406,60425,60437,60414,60413,60439,60448,60448,60460,60457,60470,60467,60480,60591,60477,60476,60483,60475,60475,60483,60475,60468,60467,60476,60469,60475,60488,60487,60493,60503,60507,60508,60505,60500,60505,60511,60498,60508,60509,60504,60509,60507,60514,60519,60521,60514,60519,60510,60489,60479,60454,60416,60400,60361,60322,60306,60290,60284,60278,60290,60287,60298,60294,60307,60301,60311,60314,60328,60332,60339,60355,60369,60375,60376,60373,60376,60372,60377,60374,60401,60384,60353,60376,60364,60371,60373,60376,60379,60383,60382,60395,60410,60406,60406,60412,60411,60403,60408,60413,60416,60408,60411,60418,60415,60425,60430,60428,60430,60416,60416,60406,60391,60361,60319,60280,60251,60227,60216,60201,60201,60191,60189,60196,60199,60224,60220,60233,60231,60240,60242,60250,60245,60260,60254,60280,60281,60288,60287,60297,60290,60290,60292,60295,60283,60293,60290,60281,60285,60288,60288,60302,60305,60311,60315,60316,60319,60319,60332,60311,60337,60336,60296,60324,60315,60339,60344,60337,60326,60331,60329,60339,60337,60338,60324,60313,60296,60272,60238,60208,60179,60153,60137,60130,60138,60132,60146,60140,60151,60156,60167,60186,60197,60189,60195,60213,60215,60224,60226,60240,60251,60252,60246,60248,60240,60237,60230,60230,60233,60236,60232,60234,60228,60231,60226,60239,60242,60249,60261,60264,60270,60274,60277,60284,60275,60278,60281,60285,60283,60284,60284,60284,60282,60285,60286,60293,60296,60298,60307,60311,60314,60334,60342,60313,60281,60248,60231,60187,60156,60105,60095,60071,60270,60042,60047,60049,60065,60081,60074,60073,60065,60063,60057,60065,60081,60091,60109,60115,60131,60142,60142,60148,60147,60136,60138,60146,60140,60126,60133,60144,60146,60139,60148,60149,60156,60165,60177,60181,60173,60185,60197,60199,60182,60195,60204,60202,60206,60211,60209,60217,60216,60218,60216,60210,60227,60215,60225,60226,60209,60197,60156,60135,60084,60047,60011,59986,59978,59975,59982,59981,59951,59952,59978,59992,59998,60009,60010,60003,60020,60021,60209,60037,60059,60065,60066,60081,60084,60087,60081,60081,60078,60066,60080,60082,60092,60091,60087,60084,60077,60086,60093,60096,60107,60121,60119,60123,60124,60135,60126,60129,60129,60129,60139,60147,60149,60145,60159,60154,60162,60161,60158,60155,60152,60129,60107,60086,60059,60019,59984,59946,59920,59898,59894,59887,59880,59881,59890,59900,59936,59926,59940,59919,59912,59934,59934,59949,59957,59968,59978,59987,59994,59993,59999,60007,60007,60009,60015,60026,60020,60024,60041,60055,60046,60047,60063,60047,60066,60060,60060,60071,60080,60078,60085,60083,60075,60083,60076,60084,60086,60074,60080,60080,60080,60080,60091,60081,60096,60091,60094,60078,60047,60020,59984,59941,59904,59859,59847,59833,59822,59819,59846,59861,59857,59861,59867,59877,59867,59887,59890,59881,59890,59886,59910,59922,59937,59956,59953,59961,59956,59981,59978,59975,59967,59985,59949,59956,59981,59964,59964,59980,59990,59997,59997,60014,60009,60018,60014,60017,60010,60017,60015,60017,60029,60036,60033,60038,60036,60038,60050,60037,60038,60040,60037,60045,60051,60050,60056,60060,60068,60062,60066,60045,60031,59993,59950,59905,59871,59836,59809,59793,59792,59808,59809,59812,59817,59819,59837,59846,59852,59861,59853,59869,59874,59889,59896,59904,59914,59926,59937,59948,59949,59947,59951,59947,59953,59944,59963,59952,59956,59984,59995,60002,59971,59973,59971,59979,59986,59992,59987,59991,60007,59861,60010,60019,60023,60028,60025,60020,60021,60020,60030,60039,60028,60032,60023,60027,60026,60037,60032,60042,60023,60011,59997,59982,59954,59916,59896,59874,59848,59854,59852,59859,59869,59874,59886,59888,59901,59909,59912,59910,59919,59922,59919,59928,59942,59948,59954,59953,59963,59969,59954,59963,59959,59949,59956,59964,59973,59962,59970,59960,59972,59994,59988,59971,59981,59995,60008,60012,60014,60014,59981,59987,60012,60015,60007,60016,60025,60010,60021,60008,60014,60026,60012,60012,60017,60020,60019,60016,60014,60007,59965,59938,59906,59874,59843,59823,59814,59813,59818,59824,59834,59844,59842,59844,59855,59855,59877,59873,59876,59889,59885,59891,59903,59899,59896,59899,59906,59903,59915,59909,59903,59912,59919,59909,59909,59919,59922,59921,59927,59934,59928,59942,59931,59939,59946,59947,59958,59967,59973,59974,59989,59986,59987,59956,59955,59966,59970,59980,59981,59985,59980,59982,59988,59994,59988,59977,59959,59927,59889,59869,59846,59822,59801,59802,59800,59807,59804,59813,59817,59828,59834,59830,59840,59852,59859,59862,59864,59872,59883,59886,59890,59897,59903,59888,59890,59892,59884,59894,59900,59892,59903,59904,59906,59904,59906,59913,59914,59918,59920,59923,59919,59924,59930,59939,59940,59931,59947,59943,59940,59945,59945,59953,59971,59979,59969,59945,59944,59961,59980,59969,59971,59963,59964,59964,59945,59904,59870,59851,59836,59814,59802,59797,59798,59800,59800,59812,59832,59832,59847,59839,59844,59850,59865,59865,59874,59884,59891,59893,59908,59911,59908,59916,59911,59917,59906,59915,59900,59912,59907,59913,59919,59927,59928,59925,59927,59933,59950,59939,59930,59937,59942,59944,59956,59953,59942,59952,59952,59946,59962,59967,59963,59959,59966,59965,59971,59967,59986,59985,59962,59950,59952,59893,59891,59881,59848,59839,59818,59798,59785,59939,59793,59784,59800,59804,59816,59816,59828,59840,59844,59844,59850,59855,59867,59867,59872,59886,59879,59879,59877,59874,59870,59874,59870,59878,59875,59872,59877,59876,59866,59872,59879,59873,59879,59877,59878,59881,59886,59887,59896,59894,59902,59903,59910,59891,59905,59909,59915,59914,59918,59912,59925,59927,59922,59925,59929,59929,59926,59911,59898,59877,59815,59824,59757,59726,59739,59718,59723,59721,59721,59740,59733,59751,59749,59746,59910,59790,59796,59805,59815,59820,59820,59824,59833,59826,59833,59822,59830,59833,59825,59833,59829,59836,59833,59847,59832,59841,59835,59854,59858,59855,59854,59858,59870,59877,59890,59887,59890,59898,59896,59908,59903,59909,59917,59922,59931,59933,59925,59927,59928,59937,59931,59925,59912,59874,59849,59800,59773,59736,59725,59709,59702,59722,59714,59699,59688,59691,59700,59722,59730,59724,59729,59738,59744,59747,59774,59788,59792,59791,59798,59793,59794,59787,59801,59798,59810,59818,59817,59808,59806,59814,59810,59823,59826,59832,59830,59833,59832,59840,59859,59859,59864,59868,59854,59852,59856,59868,59865,59874,59873,59872,59873,59875,59885,59882,59881,59885,59880,59873,59858,59835,59805,59779,59729,59706,59693,59683,59670,59661,59665,59662,59674,59678,59693,59702,59706,59712,59724,59726,59725,59727,59748,59753,59744,59744,59751,59760,59761,59763,59750,59758,59750,59835,59758,59761,59756,59770,59769,59766,59780,59780,59778,59781,59779,59785,59781,59786,59790,59783,59783,59799,59788,59793,59795,59802,59790,59793,59799,59797,59793,59804,59795,59782,59800,59789,59771,59748,59705,59679,59654,59639,59611,59606,59586,59597,59611,59609,59625,59627,59643,59656,59660,59671,59680,59682,59698,59704,59699,59711,59706,59704,59712,59711,59704,59712,59710,59713,59711,59730,59738,59739,59727,59732,59703,59708,59735,59727,59728,59725,59717,59739,59735,59752,59750,59752,59744,59744,59755,59759,59758,59752,59766,59761,59768,59767,59770,59765,59768,59750,59725,59696,59664,59634,59603,59585,59577,59566,59570,59562,59564,59571,59579,59593,59613,59611,59622,59623,59614,59636,59634,59636,59642,59658,59663,59673,59680,59664,59664,59667,59672,59662,59670,59670,59692,59681,59694,59689,59685,59699,59691,59689,59689,59699,59706,59729,59737,59731,59708,59718,59721,59723,59722,59722,59727,59723,59720,59736,59744,59746,59664,59742,59746,59745,59732,59716,59693,59664,59639,59606,59591,59583,59565,59556,59551,59574,59575,59596,59594,59598,59609,59624,59613,59630,59620,59620,59628,59628,59635,59644,59650,59646,59653,59653,59652,59643,59661,59653,59665,59656,59664,59661,59674,59661,59660,59662,59667,59658,59661,59661,59658,59656,59669,59675,59675,59679,59671,59688,59677,59677,59680,59682,59683,59690,59711,59682,59669,59674,59683,59692,59687,59672,59661,59624,59592,59574,59660,59519,59509,59506,59508,59519,59515,59525,59527,59542,59554,59551,59567,59563,59574,59567,59572,59592,59586,59593,59603,59607,59597,59596,59598,59604,59600,59594,59608,59606,59608,59606,59614,59611,59604,59619,59621,59628,59628,59632,59629,59633,59632,59625,59630,59649,59635,59626,59636,59629,59628,59638,59638,59644,59650,59653,59640,59636,59634,59632,59624,59626,59610,59586,59561,59511,59473,59474,59443,59439,59450,59449,59444,59447,59460,59474,59630,59493,59480,59496,59485,59493,59506,59510,59510,59519,59519,59529,59535,59524,59526,59533,59532,59530,59534,59530,59542,59541,59536,59546,59556,59554,59553,59552,59557,59561,59565,59567,59563,59578,59574,59580,59575,59573,59580,59586,59587,59581,59591,59589,59584,59593,59598,59600,59603,59613,59597,59592,59578,59555,59519,59479,59451,59431,59415,59405,59400,59400,59398,59418,59424,59435,59434,59432,59434,59442,59448,59446,59455,59444,59463,59477,59487,59491,59503,59504,59517,59503,59513,59508,59506,59507,59501,59514,59516,59511,59513,59522,59530,59544,59539,59537,59550,59554,59549,59555,59564,59565,59576,59580,59575,59570,59576,59571,59583,59585,59586,59595,59587,59586,59599,59602,59601,59623,59604,59600,59591,59554,59529,59500,59466,59460,59435,59431,59424,59424,59436,59439,59444,59445,59459,59465,59469,59477,59469,59481,59482,59496,59503,59517,59518,59504,59499,59499,59509,59522,59513,59505,59507,59511,59514,59500,59513,59510,59522,59524,59526,59531,59520,59533,59539,59548,59543,59551,59550,59548,59545,59562,59551,59555,59557,59565,59566,59569,59573,59562,59564,59575,59571,59570,59563,59579,59564,59549,59520,59505,59462,59443,59418,59411,59387,59393,59389,59393,59401,59407,59411,59403,59418,59438,59446,59445,59453,59464,59469,59473,59482,59482,59493,59498,59488,59493,59502,59513,59502,59504,59510,59530,59530,59483,59493,59514,59508,59519,59519,59527,59520,59525,59526,59526,59531,59536,59545,59536,59540,59542,59547,59543,59544,59551,59552,59544,59551,59543,59545,59548,59555,59564,59558,59558,59532,59516,59483,59459,59422,59396,59380,59367,59361,59351,59345,59363,59367,59377,59377,59398,59401,59403,59418,59411,59420,59417,59436,59448,59439,59445,59454,59458,59459,59454,59451,59461,59466,59459,59458,59467,59475,59481,59473,59464,59494,59499,59486,59480,59466,59485,59486,59489,59499,59496,59509,59507,59514,59417,59500,59517,59512,59515,59527,59517,59530,59528,59527,59529,59533,59530,59520,59509,59504,59474,59457,59420,59391,59379,59365,59360,59360,59359,59363,59370,59381,59399,59390,59394,59399,59400,59408,59413,59409,59432,59422,59435,59441,59436,59452,59445,59450,59451,59460,59456,59464,59464,59471,59468,59474,59475,59490,59469,59475,59470,59477,59479,59488,59489,59498,59495,59498,59495,59510,59521,59540,59542,59511,59530,59518,59498,59518,59532,59529,59524,59535,59541,59532,59533,59506,59479,59464,59433,59408,59377,59366,59358,59369,59369,59372,59380,59381,59396,59397,59406,59402,59400,59399,59408,59414,59414,59417,59430,59440,59448,59445,59447,59438,59440,59434,59436,59447,59450,59446,59455,59450,59446,59458,59459,59446,59458,59471,59464,59464,59466,59457,59463,59463,59460,59458,59457,59464,59466,59466,59463,59479,59482,59472,59479,59480,59474,59486,59477,59473,59464,59456,59424,59359,59343,59303,59308,59306,59305,59313,59305,59313,59466,59315,59333,59352,59348,59349,59362,59370,59367,59376,59381,59391,59403,59403,59400,59403,59397,59399,59391,59396,59387,59388,59403,59405,59408,59413,59408,59397,59417,59419,59423,59435,59434,59432,59432,59429,59439,59439,59440,59450,59443,59443,59435,59444,59442,59441,59442,59449,59448,59449,59439,59418,59396,59364,59330,59318,59281,59269,59267,59267,59263,59268,59275,59274,59301,59314,59284,59293,59275,59305,59302,59315,59316,59332,59327,59341,59343,59350,59354,59349,59352,59349,59353,59365,59364,59360,59369,59372,59378,59372,59373,59385,59384,59379,59380,59385,59397,59401,59404,59412,59406,59403,59413,59418,59410,59410,59421,59411,59412,59418,59429,59428,59423,59438,59433,59422,59414,59384,59348,59319,59284,59271,59250,59245,59232,59229,59242,59252,59249,59263,59269,59271,59284,59278,59289,59280,59286,59317,59287,59331,59342,59322,59308,59321,59331,59335,59344,59343,59349,59362,59348,59356,59358,59364,59367,59372,59380,59387,59380,59385,59387,59388,59390,59391,59397,59398,59398,59407,59405,59408,59403,59402,59403,59410,59412,59424,59416,59426,59424,59435,59436,59430,59412,59403,59367,59340,59322,59292,59278,59269,59267,59269,59269,59279,59271,59284,59290,59296,59299,59309,59303,59314,59318,59325,59324,59337,59335,59349,59346,59333,59365,59356,59298,59321,59318,59322,59330,59333,59344,59343,59338,59269,59340,59340,59351,59356,59350,59363,59366,59366,59372,59365,59358,59378,59378,59372,59379,59377,59374,59384,59381,59379,59373,59384,59364,59370,59365,59350,59331,59299,59262,59236,59214,59203,59196,59199,59186,59197,59199,59200,59210,59224,59237,59242,59251,59263,59274,59279,59293,59284,59307,59311,59321,59318,59322,59309,59314,59304,59316,59312,59308,59332,59334,59289,59321,59313,59316,59334,59320,59327,59341,59329,59210,59350,59347,59347,59348,59359,59367,59360,59367,59358,59358,59365,59359,59369,59364,59384,59370,59372,59363,59342,59318,59284,59253,59223,59200,59192,59195,59190,59190,59195,59204,59221,59209,59215,59233,59237,59241,59244,59252,59250,59252,59262,59264,59267,59282,59279,59297,59294,59285,59294,59289,59291,59291,59300,59305,59309,59297,59304,59304,59308,59311,59310,59322,59321,59323,59330,59332,59348,59359,59312,59328,59345,59353,59350,59352,59347,59349,59345,59356,59356,59349,59361,59360,59349,59342,59314,59288,59259,59223,59205,59177,59165,59153,59166,59153,59168,59176,59178,59194,59193,59194,59205,59217,59213,59230,59225,59223,59245,59249,59249,59261,59271,59265,59272,59278,59287,59277,59277,59283,59280,59278,59274,59281,59270,59280,59281,59295,59297,59299,59294,59309,59309,59303,59306,59322,59312,59307,59301,59304,59306,59314,59315,59315,59320,59323,59312,59334,59334,59358,59341,59329,59294,59288,59228,59193,59162,59146,59116,59099,59092,59084,59078,59096,59108,59098,59122,59114,59117,59120,59136,59134,59148,59166,59178,59180,59192,59204,59209,59204,59190,59196,59190,59192,59193,59193,59207,59204,59216,59214,59225,59226,59224,59221,59235,59244,59246,59246,59246,59251,59254,59253,59259,59258,59255,59260,59262,59269,59271,59267,59273,59274,59273,59270,59277,59274,59278,59270,59256,59230,59205,59158,59121,59084,59065,59048,59043,59052,59000,59022,59017,59025,59045,59053,59051,59068,59076,59260,59262,59106,59119,59127,59137,59147,59155,59149,59156,59151,59162,59156,59149,59145,59145,59147,59157,59147,59153,59156,59167,59172,59182,59174,59182,59183,59186,59183,59211,59208,59214,59215,59203,59213,59207,59212,59213,59225,59225,59223,59222,59225,59219,59224,59219,59217,59210,59179,59139,59100,59063,59030,59005,58994,58969,58959,58962,58968,58965,58984,58990,59010,59002,59005,59002,59012,59019,59053,59027,59016,59052,59063,59083,59084,59088,59086,59080,59089,59210,59091,59097,59089,59099,59113,59098,59120,59126,59132,59126,59147,59133,59147,59140,59146,59152,59154,59153,59157,59159,59158,59169,59164,59168,59179,59177,59170,59189,59187,59186,59185,59192,59194,59187,59176,59160,59125,59076,59041,59012,58995,58971,58971,58953,58959,58970,58977,58981,58996,58999,59012,59014,59016,59034,59030,59056,59044,59058,59078,59089,59097,59097,59061,59076,59068,59058,59082,59073,59080,59094,59085,59084,59087,59096,59107,58953,59100,59105,59117,59113,59126,59129,59119,59131,59132,59129,59136,59134,59139,59134,59145,59138,59134,59137,59140,59144,59138,59144,59131,59135,59092,59071,59025,59003,58975,58957,58938,58936,58931,58935,58953,58957,58957,58959,58964,58984,58997,59001,59011,59020,59034,59046,59059,59056,59065,59058,59073,59062,59061,59063,59051,59060,59064,59067,59062,59065,59066,59084,59070,59079,59099,59112,59095,59092,59084,59098,59115,59110,59107,59115,59117,59119,59034,59123,59129,59133,59129,59135,59140,59142,59137,59148,59135,59119,59088,59052,58995,58954,58928,58924,58898,58892,58890,58897,58905,58903,58911,58918,58924,58932,58941,58954,58954,58970,58979,58980,59010,59006,59024,59023,59028,59023,59034,59033,59026,59028,59030,59036,59038,59046,59051,59042,59051,59052,59054,59062,59055,59066,59067,59074,59084,59079,59093,59083,59095,59099,59104,59104,59109,59092,59097,59088,59097,59100,59108,59103,59122,59106,59088,59072,59027,58985,58947,58921,58895,58890,58880,58876,58870,58879,58875,58884,58895,58907,58919,58920,58926,58938,58943,58954,58959,58970,58986,58986,58996,58996,58998,59005,59011,59005,59019,59013,59023,59017,59028,59023,59028,59038,59043,59042,59051,59049,59056,59059,59063,59067,59062,59070,59064,59062,59079,59082,59089,59083,59082,59078,59089,59088,59119,59099,59091,59119,59107,59114,59083,59073,59069,59031,58996,58966,58939,58906,58903,58893,58882,58890,58903,58911,58931,58940,58940,58942,58955,58960,58964,58965,58980,58990,58996,58996,59004,59007,59008,58997,59001,58997,59005,59002,59005,59012,59005,59015,59006,59015,59016,59016,59026,59031,59022,59030,59030,59035,59037,59038,59044,59042,59040,59040,59033,59042,59052,59052,59046,59055,59061,59061,59051,59051,59041,59043,59013,58984,58948,58914,58877,58871,58858,58820,58833,58804,58827,58837,58852,58854,58881,58881,58886,58911,58909,58923,58922,58922,58942,58950,58956,58955,58962,58965,58975,58954,58956,58966,58968,58970,58968,58971,58966,58973,58971,58977,58977,58979,58988,58990,58993,58997,58990,58993,59008,59007,58993,59003,59005,59004,59008,59001,59008,59024,59016,59022,59025,59024,59014,59015,58980,58944,58899,58861,58836,58811,58791,58774,58786,58787,58799,58822,58806,58802,58813,58822,58840,58842,58845,59003,58869,58886,58902,58903,58908,58919,58927,58920,58922,58920,58910,58921,58919,58925,58939,58930,58928,58940,58940,58953,58953,58963,58962,58971,58972,58978,58980,58981,58980,58992,58985,58990,58986,58994,58992,58996,58995,58996,59000,58997,59003,59005,59005,59005,58995,58966,58915,58890,58852,58843,58802,58781,58774,58768,58770,58779,58792,58794,58804,58823,58849,58843,58819,58819,58822,58843,58857,58868,58890,58896,58896,58901,59003,58913,58909,58917,58918,58923,58917,58928,58939,58932,58932,58944,58945,58942,58943,58942,58949,58949,58963,58961,58981,58970,58976,58980,58980,58984,58990,58985,58991,58985,58992,58995,58996,58999,58998,58998,59011,59008,59006,58994,58984,58958,58924,58895,58866,58843,58809,58802,58810,58811,58823,58827,58835,58848,58847,58860,58870,58884,58877,58900,58880,58907,58879,58885,58886,58910,58912,58921,58910,58922,58919,58923,58910,58958,58924,58931,58921,58940,58938,58951,58947,58943,58952,58948,58956,58959,58959,58958,58958,58973,58968,58977,58972,58980,58970,58971,58976,58984,58983,58982,58986,58988,58994,58987,58968,58950,58911,58895,58855,58826,58807,58799,58785,58788,58786,58782,58790,58799,58812,58826,58828,58830,58836,58842,58849,58867,58864,58880,58886,58890,58894,58896,58887,58894,58909,58868,58923,58882,58871,58886,58883,58891,58901,58904,58902,58915,58920,58916,58925,58929,58936,58929,58941,58939,58939,58939,58961,58944,58949,58947,58952,58954,58952,58966,58956,58965,58962,58951,58936,58920,58878,58834,58803,58776,58751,58743,58733,58722,58734,58733,58736,58746,58750,58772,58767,58767,58778,58781,58786,58795,58796,58812,58821,58834,58841,58835,58840,58844,58845,58852,58858,58854,58858,58855,58857,58867,58867,58871,58871,58874,58879,58881,58885,58915,58907,58880,58889,58882,58889,58908,58900,58906,58895,58912,58904,58908,58841,58914,58908,58924,58910,58917,58899,58873,58834,58790,58765,58743,58714,58699,58691,58696,58698,58698,58693,58716,58721,58727,58736,58739,58747,58745,58756,58763,58778,58773,58783,58800,58810,58816,58810,58814,58806,58822,58820,58819,58824,58821,58832,58831,58846,58845,58832,58846,58854,58861,58865,58862,58864,58874,58880,58875,58881,58889,58887,58895,58910,58884,58893,58913,58929,58934,58904,58886,58895,58906,58907,58912,58911,58909,58886,58869,58845,58845,58754,58700,58687,58685,58677,58679,58685,58692,58700,58712,58714,58731,58733,58743,58748,58744,58751,58758,58770,58785,58787,58788,58793,58792,58786,58772,58772,58778,58772,58784,58781,58796,58785,58791,58786,58785,58789,58785,58781,58803,58806,58801,58818,58816,58823,58824,58823,58812,58820,58823,58827,58831,58838,58841,58833,58853,58836,58846,58842,58844,58849,58837,58791,58767,58726,58657,58650,58631,58616,58605,58600,58591,58590,58615,58628,58630,58644,58659,58663,58675,58673,58684,58691,58710,58719,58729,58743,58736,58743,58738,58741,58735,58737,58722,58727,58734,58741,58731,58737,58757,58744,58754,58772,58775,58771,58773,58787,58790,58797,58804,58802,58805,58803,58818,58804,58817,58809,58812,58817,58819,58819,58813,58824,58819,58814,58788,58764,58719,58681,58638,58593,58581,58590,58567,58505,58514,58543,58539,58534,58553,58551,58564,58569,58805,58605,58616,58620,58639,58647,58655,58673,58673,58679,58688,58672,58672,58688,58687,58683,58694,58690,58695,58694,58691,58698,58700,58705,58702,58714,58718,58725,58729,58740,58743,58736,58746,58746,58743,58753,58765,58755,58760,58763,58781,58774,58762,58775,58783,58778,58782,58777,58755,58726,58668,58628,58587,58547,58526,58517,58506,58502,58496,58525,58525,58522,58482,58506,58528,58533,58542,58545,58556,58567,58565,58580,58577,58606,58632,58623,58631,58634,58637,58630,58636,58631,58637,58646,58640,58655,58655,58665,58669,58680,58678,58696,58710,58700,58720,58727,58727,58741,58749,58750,58753,58758,58750,58760,58758,58756,58763,58770,58772,58772,58776,58781,58770,58776,58763,58761,58740,58702,58660,58612,58572,58533,58508,58475,58472,58471,58475,58473,58483,58503,58504,58505,58513,58532,58539,58505,58533,58522,58541,58554,58566,58573,58583,58596,58606,58592,58763,58598,58595,58599,58599,58594,58609,58615,58627,58623,58639,58638,58632,58656,58658,58665,58677,58681,58685,58696,58685,58697,58690,58709,58706,58701,58712,58701,58712,58714,58704,58713,58715,58715,58710,58702,58677,58632,58585,58538,58495,58465,58442,58425,58416,58422,58418,58434,58436,58456,58472,58488,58492,58501,58508,58509,58526,58529,58543,58564,58584,58572,58579,58558,58569,58560,58574,58580,58569,58579,58578,58596,58621,58626,58644,58660,58659,58675,58689,58681,58703,58712,58718,58731,58730,58739,58740,58744,58752,58755,58750,58768,58758,58757,58772,58769,58766,58753,58766,58757,58741,58713,58680,58649,58604,58568,58534,58507,58493,58489,58478,58487,58503,58508,58531,58550,58563,58571,58565,58575,58586,58600,58607,58629,58626,58634,58635,58655,58646,58660,58659,58659,58657,58635,58628,58633,58631,58633,58623,58626,58645,58638,58652,58663,58674,58680,58684,58698,58716,58708,58709,58718,58721,58722,58723,58725,58729,58745,58738,58751,58756,58757,58773,58757,58764,58752,58729,58697,58663,58633,58601,58581,58561,58562,58566,58563,58566,58575,58575,58589,58594,58605,58614,58620,58626,58625,58637,58639,58657,58656,58676,58690,58693,58693,58697,58703,58698,58707,58697,58705,58716,58722,58723,58741,58716,58720,58724,58741,58749,58749,58766,58756,58768,58783,58772,58766,58775,58781,58773,58769,58778,58784,58786,58784,58782,58791,58783,58779,58785,58787,58776,58788,58796,58760,58753,58711,58676,58631,58611,58583,58561,58554,58548,58558,58568,58573,58580,58581,58596,58604,58601,58609,58611,58621,58616,58622,58630,58640,58630,58643,58658,58649,58645,58645,58649,58640,58654,58644,58642,58642,58644,58643,58648,58658,58666,58687,58692,58687,58701,58680,58687,58700,58695,58707,58706,58714,58715,58622,58722,58718,58723,58724,58733,58723,58732,58722,58721,58731,58725,58701,58684,58636,58589,58569,58539,58525,58519,58502,58507,58491,58492,58509,58527,58538,58545,58547,58560,58568,58577,58562,58572,58585,58597,58595,58612,58628,58625,58622,58620,58616,58620,58619,58616,58618,58611,58627,58630,58633,58635,58640,58648,58653,58651,58652,58655,58664,58672,58666,58660,58671,58672,58684,58698,58667,58698,58682,58679,58698,58691,58689,58703,58705,58679,58662,58627,58597,58553,58524,58499,58488,58464,58453,58446,58453,58473,58493,58496,58512,58518,58528,58541,58553,58557,58574,58578,58599,58602,58605,58612,58617,58613,58618,58609,58615,58606,58623,58615,58609,58614,58628,58621,58624,58626,58628,58642,58652,58657,58644,58649,58655,58662,58659,58676,58672,58682,58685,58675,58687,58688,58684,58683,58693,58703,58697,58701,58698,58674,58614,58566,58515,58491,58452,58445,58440,58428,58440,58439,58457,58457,58469,58481,58655,58486,58499,58506,58506,58505,58519,58526,58533,58545,58553,58564,58557,58575,58577,58569,58570,58562,58578,58580,58574,58575,58582,58582,58589,58599,58611,58613,58611,58608,58623,58625,58624,58632,58642,58636,58640,58642,58657,58650,58671,58669,58670,58665,58667,58683,58675,58669,58652,58624,58582,58522,58490,58453,58423,58409,58407,58409,58424,58442,58438,58417,58427,58447,58453,58462,58467,58482,58491,58484,58499,58530,58524,58669,58550,58557,58556,58569,58563,58570,58571,58584,58577,58580,58591,58593,58598,58604,58605,58620,58618,58625,58632,58635,58648,58647,58648,58657,58646,58641,58653,58668,58660,58659,58680,58678,58669,58676,58673,58674,58674,58687,58679,58666,58640,58616,58567,58534,58501,58471,58447,58439,58439,58434,58453,58452,58461,58465,58475,58484,58500,58497,58510,58548,58534,58550,58557,58539,58563,58586,58581,58582,58584,58573,58592,58586,58563,58574,58573,58587,58584,58586,58593,58598,58607,58600,58613,58620,58614,58623,58635,58633,58631,58632,58630,58632,58636,58647,58636,58642,58643,58648,58644,58650,58650,58646,58649,58624,58588,58550,58518,58466,58431,58398,58389,58375,58375,58367,58391,58396,58415,58410,58437,58441,58457,58461,58466,58474,58484,58489,58509,58526,58540,58537,58542,58545,58563,58562,58539,58553,58521,58524,58524,58542,58548,58553,58562,58566,58375,58576,58593,58593,58593,58590,58607,58611,58606,58609,58617,58613,58628,58621,58625,58630,58631,58643,58640,58649,58650,58652,58652,58639,58608,58571,58533,58482,58449,58416,58403,58386,58376,58381,58376,58396,58402,58411,58427,58434,58440,58452,58454,58464,58465,58463,58473,58497,58512,58520,58535,58538,58539,58537,58537,58538,58536,58547,58532,58560,58559,58567,58569,58567,58566,58583,58595,58597,58602,58581,58585,58595,58605,58608,58613,58628,58632,58635,58630,58633,58640,58520,58535,58645,58642,58652,58653,58654,58657,58652,58641,58602,58563,58519,58483,58441,58412,58390,58397,58383,58389,58402,58417,58426,58435,58436,58447,58460,58458,58461,58473,58475,58480,58496,58512,58522,58533,58536,58535,58541,58530,58538,58534,58543,58547,58555,58561,58560,58569,58553,58562,58574,58587,58589,58604,58615,58613,58633,58623,58630,58636,58640,58653,58659,58662,58650,58659,58648,58678,58691,58674,58688,58666,58659,58671,58677,58680,58678,58670,58685,58683,58660,58620,58582,58545,58505,58475,58456,58445,58436,58442,58448,58460,58477,58482,58495,58510,58527,58529,58530,58544,58557,58561,58573,58582,58576,58580,58587,58591,58583,58567,58560,58567,58566,58571,58583,58571,58582,58588,58591,58593,58597,58609,58599,58614,58624,58617,58630,58637,58636,58646,58638,58641,58640,58644,58642,58639,58633,58634,58631,58640,58643,58645,58646,58627,58623,58650,58622,58621,58577,58512,58488,58452,58410,58386,58370,58359,58362,58367,58373,58388,58419,58422,58445,58450,58460,58475,58502,58513,58528,58531,58557,58576,58580,58577,58573,58570,58565,58579,58572,58568,58575,58575,58574,58583,58578,58565,58579,58579,58585,58580,58577,58584,58593,58594,58598,58608,58606,58622,58613,58618,58623,58622,58617,58625,58608,58608,58625,58624,58618,58614,58611,58623,58628,58607,58576,58529,58479,58435,58410,58374,58357,58353,58348,58374,58372,58384,58368,58367,58394,58396,58419,58439,58445,58461,58468,58482,58492,58507,58517,58624,58539,58551,58536,58539,58543,58527,58554,58550,58554,58549,58543,58549,58553,58562,58568,58556,58562,58598,58582,58583,58591,58592,58583,58589,58586,58600,58596,58602,58599,58591,58601,58598,58594,58606,58608,58618,58599,58583,58537,58489,58442,58400,58362,58340,58319,58307,58306,58314,58318,58323,58330,58338,58366,58377,58381,58389,58405,58417,58425,58446,58468,58477,58508,58516,58507,58533,58512,58520,58527,58538,58533,58528,58545,58539,58550,58548,58571,58576,58577,58581,58586,58589,58591,58609,58601,58616,58622,58624,58629,58636,58642,58646,58647,58652,58646,58660,58658,58663,58647,58657,58662,58668,58663,58650,58636,58600,58554,58506,58460,58419,58392,58374,58377,58364,58380,58392,58401,58406,58428,58426,58442,58446,58466,58474,58491,58500,58522,58530,58549,58562,58564,58556,58563,58547,58556,58556,58559,58550,58562,58570,58534,58549,58545,58569,58577,58588,58591,58603,58602,58596,58609,58625,58634,58632,58630,58643,58654,58642,58646,58653,58644,58653,58646,58659,58654,58657,58651,58644,58624,58584,58533,58480,58425,58392,58372,58347,58344,58350,58342,58343,58357,58360,58372,58384,58381,58381,58405,58420,58425,58441,58449,58466,58481,58472,58487,58482,58485,58488,58492,58506,58501,58500,58513,58500,58508,58514,58517,58525,58551,58546,58557,58558,58542,58560,58559,58564,58584,58584,58573,58577,58591,58593,58607,58601,58606,58615,58614,58622,58632,58627,58620,58618,58610,58552,58507,58475,58434,58397,58370,58361,58354,58353,58347,58364,58379,58388,58398,58408,58417,58416,58434,58435,58446,58451,58460,58468,58477,58483,58493,58504,58500,58495,58509,58505,58508,58505,58502,58511,58510,58514,58518,58517,58520,58522,58531,58547,58565,58560,58582,58582,58618,58601,58568,58570,58576,58596,58599,58614,58615,58605,58625,58619,58626,58617,58509,58524,58484,58435,58390,58358,58337,58327,58328,58339,58338,58339,58354,58365,58382,58389,58408,58417,58411,58413,58418,58429,58449,58464,58475,58483,58479,58488,58480,58484,58483,58483,58482,58483,58483,58487,58488,58498,58499,58505,58508,58527,58537,58536,58539,58549,58561,58560,58559,58565,58574,58579,58584,58583,58574,58588,58597,58597,58604,58602,58613,58634,58634,58591,58586,58589,58538,58498,58464,58416,58374,58351,58508,58308,58306,58318,58334,58320,58338,58349,58353,58371,58371,58379,58396,58393,58414,58421,58437,58448,58454,58461,58458,58464,58466,58470,58477,58485,58483,58494,58493,58494,58496,58509,58515,58525,58534,58533,58545,58540,58555,58562,58566,58571,58583,58588,58593,58594,58598,58604,58593,58605,58599,58607,58612,58630,58629,58618,58614,58590,58557,58500,58449,58430,58367,58361,58341,58340,58329,58331,58347,58353,58340,58376,58566,58409,58409,58425,58436,58441,58451,58467,58483,58480,58487,58487,58485,58483,58479,58484,58480,58482,58482,58477,58496,58477,58485,58488,58502,58511,58519,58518,58538,58532,58543,58542,58541,58543,58557,58558,58556,58565,58562,58564,58584,58579,58585,58579,58578,58582,58581,58568,58547,58504,58456,58426,58377,58340,58315,58308,58304,58301,58320,58317,58322,58331,58329,58354,58371,58388,58391,58407,58417,58411,58418,58451,58466,58474,58487,58491,58475,58453,58454,58459,58473,58461,58454,58455,58452,58455,58459,58477,58467,58487,58485,58507,58495,58512,58520,58521,58535,58540,58540,58543,58543,58555,58552,58554,58559,58554,58564,58565,58561,58557,58552,58497,58456,58407,58358,58318,58307,58283,58273,58273,58280,58296,58301,58315,58331,58329,58340,58366,58380,58388,58354,58361,58387,58396,58413,58423,58438,58438,58448,58437,58446,58444,58450,58468,58468,58480,58464,58477,58485,58480,58487,58495,58506,58499,58513,58522,58525,58530,58535,58532,58545,58540,58553,58547,58544,58549,58562,58577,58568,58566,58571,58572,58566,58559,58518,58480,58427,58374,58331,58298,58277,58265,58270,58270,58279,58267,58279,58290,58292,58314,58318,58315,58328,58333,58346,58345,58357,58382,58394,58414,58422,58436,58410,58422,58410,58423,58415,58426,58443,58444,58436,58448,58453,58473,58472,58490,58483,58491,58500,58510,58537,58530,58538,58553,58553,58564,58559,58560,58572,58572,58576,58587,58592,58593,58593,58594,58601,58598,58589,58569,58525,58480,58429,58394,58357,58337,58331,58334,58338,58329,58346,58353,58367,58369,58386,58407,58408,58410,58413,58422,58439,58452,58457,58477,58492,58488,58482,58489,58489,58484,58476,58490,58501,58493,58492,58470,58484,58492,58499,58500,58496,58515,58516,58353,58536,58527,58536,58534,58541,58552,58555,58552,58563,58568,58579,58568,58578,58574,58585,58584,58588,58580,58564,58530,58486,58439,58397,58361,58335,58310,58309,58299,58304,58297,58310,58321,58333,58346,58352,58361,58381,58366,58396,58393,58408,58416,58437,58451,58453,58458,58454,58457,58455,58454,58466,58458,58449,58451,58454,58459,58466,58472,58480,58483,58496,58516,58508,58505,58517,58513,58530,58536,58540,58533,58540,58541,58543,58552,58549,58561,58570,58554,58568,58580,58574,58559,58537,58483,58442,58374,58334,58305,58277,58287,58277,58284,58280,58299,58312,58319,58328,58336,58353,58354,58360,58366,58375,58405,58421,58436,58459,58463,58466,58471,58464,58461,58458,58464,58455,58458,58462,58466,58482,58486,58481,58488,58505,58501,58503,58509,58505,58518,58526,58519,58530,58554,58552,58553,58530,58511,58532,58538,58542,58538,58546,58544,58548,58461,58545,58511,58466,58418,58371,58318,58281,58267,58250,58247,58246,58255,58252,58263,58271,58291,58290,58298,58311,58315,58326,58337,58354,58362,58384,58395,58426,58434,58434,58443,58443,58453,58444,58460,58466,58469,58478,58479,58488,58484,58495,58506,58516,58526,58525,58541,58536,58559,58556,58556,58554,58553,58563,58558,58565,58559,58575,58564,58589,58575,58595,58607,58560,58569,58565,58586,58590,58469,58574,58557,58527,58484,58420,58354,58325,58317,58319,58314,58317,58325,58336,58341,58337,58357,58349,58374,58374,58389,58397,58406,58416,58420,58435,58447,58465,58470,58479,58478,58486,58489,58486,58492,58492,58499,58506,58509,58511,58519,58530,58536,58547,58550,58559,58565,58562,58567,58568,58568,58563,58578,58573,58579,58579,58586,58582,58586,58587,58583,58573,58568,58596,58591,58572,58582,58566,58538,58489,58458,58415,58400,58393,58380,58377,58395,58397,58415,58428,58443,58457,58463,58473,58476,58475,58477,58484,58502,58509,58513,58524,58523,58505,58514,58513,58497,58489,58497,58484,58499,58485,58493,58500,58501,58491,58502,58497,58502,58507,58502,58509,58509,58523,58534,58543,58526,58541,58545,58549,58552,58550,58549,58554,58572,58568,58583,58579,58564,58560,58529,58486,58446,58432,58399,58353,58290,58277,58272,58287,58288,58308,58317,58327,58350,58375,58389,58399,58409,58412,58434,58442,58447,58469,58461,58473,58466,58482,58483,58478,58478,58478,58472,58476,58475,58476,58474,58479,58485,58492,58486,58491,58505,58503,58522,58520,58525,58534,58545,58551,58548,58552,58547,58548,58533,58526,58529,58527,58532,58526,58531,58522,58489,58450,58401,58353,58308,58277,58246,58233,58221,58213,58205,58203,58197,58203,58186,58223,58188,58213,58208,58215,58225,58241,58249,58256,58274,58308,58317,58347,58355,58377,58398,58407,58440,58456,58468,58480,58480,58490,58498,58492,58514,58513,58520,58516,58516,58523,58527,58535,58534,58541,58553,58567,58573,58575,58586,58574,58581,58585,58593,58600,58595,58577,58554,58501,58454,58399,58359,58326,58323,58318,58317,58334,58333,58357,58352,58362,58380,58393,58418,58413,58441,58446,58434,58449,58461,58483,58501,58497,58531,58545,58554,58517,58522,58489,58507,58532,58534,58534,58533,58526,58531,58524,58510,58521,58333,58542,58549,58567,58565,58569,58557,58546,58539,58532,58537,58537,58534,58542,58539,58565,58567,58580,58569,58564,58548,58526,58478,58427,58395,58367,58327,58311,58314,58311,58305,58315,58314,58329,58352,58374,58398,58407,58432,58468,58477,58488,58495,58516,58515,58519,58524,58529,58536,58539,58548,58543,58540,58532,58542,58509,58509,58511,58493,58495,58486,58498,58512,58500,58509,58506,58509,58526,58545,58558,58561,58574,58578,58568,58592,58583,58572,58583,58586,58578,58573,58543,58535,58515,58502,58493,58481,58473,58472,58451,58471,58465,58478,58498,58520,58545,58546,58558,58560,58566,58565,58572,58585,58580,58579,58581,58571,58562,58552,58547,58532,58510,58488,58487,58472,58448,58436,58436,58426,58427,58430,58429,58446,58458,58448,58449,58465,58474,58493,58514,58545,58546,58547,58554,58595,58574,58583,58579,58567,58546,58506,58459,58532,58368,58330,58309,58319,58324,58330,58353,58367,58392,58413,58426,58432,58456,58476,58499,58510,58532,58544,58561,58562,58571,58579,58583,58584,58584,58575,58561,58561,58565,58582,58605,58606,58622,58631,58625,58623,58608,58597,58595,58599,58588,58600,58601,58599,58609,58597,58603,58597,58591,58600,58590,58586,58574,58593,58584,58554,58493,58450,58403,58358,58284,58263,58264,58249,58243,58245,58253,58256,58269,58597,58595,58294,58302,58306,58310,58330,58345,58356,58388,58393,58400,58408,58417,58414,58419,58412,58411,58410,58413,58409,58412,58415,58423,58437,58454,58460,58479,58490,58493,58491,58495,58503,58505,58507,58521,58531,58533,58531,58541,58538,58545,58536,58508,58488,58435,58386,58328,58284,58263,58252,58239,58236,58235,58240,58236,58243,58247,58254,58251,58289,58321,58318,58307,58322,58341,58360,58362,58362,58374,58366,58348,58340,58341,58346,58373,58386,58394,58400,58400,58389,58391,58396,58402,58411,58423,58430,58430,58421,58395,58390,58366,58358,58344,58345,58343,58351,58343,58355,58346,58307,58252,58192,58148,58118,58075,58054,58021,58003,57986,57981,57974,57971,57972,57961,57951,57951,57951,57947,57941,57940,57940,57940,57920,57923,57932,57936,57937,57927,57947,57933,57915,57896,57869,57868,57866,57887,57886,57905,57903,57914,57903,57909,57905,57925,57933,57938,57951,57964,57961,57965,57964,57973,57983,57987,57979,57966,57931,57885,57856,57811,57799,57774,57769,57745,57738,57732,57737,57737,57729,57734,57740,57749,57758,57776,57779,57788,57813,57820,57838,57843,57854,57857,57874,57868,57870,57887,57877,57874,57868,57868,57877,57878,57879,57889,57904,57910,57929,57923,57930,57938,57934,57951,57983,58013,58001,58033,58060,58070,58101,58113,58119,58124,58139,57857,58098,58049,57981,57904,57844,57808,57782,57752,57732,57735,57730,57735,57724,57733,57733,57746,57744,57737,57739,57735,57737,57737,57758,57788,57807,57812,57821,57820,57817,57819,57798,57812,57806,57810,57804,57808,57810,57813,57821,57817,57822,57841,57837,57859,57865,57870,57876,57886,57891,57899,57915,57930,57937,57929,57935,57929,57934,57932,57926,57923,57918,57869,57810,57766,57748,57712,57686,57658,57635,57628,57821,57817,57615,57624,57632,57647,57646,57647,57655,57666,57671,57687,57690,57709,57711,57721,57737,57738,57734,57760,57765,57769,57763,57752,57759,57758,57753,57763,57757,57765,57773,57766,57779,57806,57802,57822,57821,57831,57837,57849,57850,57880,57874,57883,57883,57909,57912,57919,57920,57922,57913,57927,57944,57933,57902,57865,57800,57769,57723,57700,57685,57648,57625,57617,57620,57622,57612,57617,57635,57645,57837,57658,57676,57684,57689,57708,57724,57720,57739,57751,57755,57756,57745,57758,57746,57755,57740,57747,57746,57748,57755,57770,57779,57785,57788,57789,57802,57820,57845,57858,57874,57886,57908,57917,57929,57956,57965,57969,58006,58027,58036,58055,58054,58055,58055,58063,58037,58006,57966,57912,57882,57843,57834,57820,57815,57809,57800,57801,57798,57832,57833,57839,57826,57882,57872,57875,57886,57878,57892,57906,58006,58027,58036,57908,57913,57894,57896,57876,57894,57887,57898,57914,57913,57932,57937,57949,57966,57979,57998,58008,58030,58046,58072,58083,58106,58116,58138,58136,58162,58182,58200,58217,58227,58233,58242,58245,58235,58218,58163,58083,58014,57956,57919,57892,57885,57882,57884,57878,57879,57879,57873,57875,57883,57885,57894,57905,57899,57921,57934,57970,57976,57998,58020,58006,58024,57991,57989,57990,57976,57961,57955,57963,57956,57946,57964,57975,57995,58005,58018,58028,58055,58077,58087,58106,58116,58137,58159,58174,58195,58203,58223,58242,58257,58248,58258,58254,58250,58243,58195,58142,58081,58021,57977,57945,57938,57925,57928,57921,57916,57919,57934,57935,57921,57938,57948,57962,57988,57998,58012,58029,58034,58044,58050,58047,58048,58063,58066,58072,58072,58065,58080,58079,58074,58073,58085,58090,58106,58110,58081,58130,58114,58139,58160,58186,58199,58207,58217,58237,58236,58248,58012,58266,58280,58281,58294,58296,58291,58299,58291,58250,58211,58126,58063,58016,57982,57960,57936,57922,57924,57921,57916,57923,57925,57927,57938,57950,57955,57963,57965,57961,57961,57977,57992,57994,57995,57989,58003,57983,57983,57981,57985,57980,57978,57977,57972,57955,57940,57947,57955,57948,57957,57972,57983,57988,57984,57995,57984,57974,57968,57989,57951,57911,57810,57905,56653,57974,65698,56764,39156,27905,19998,9243,5762,3438,2109,1354,910,661,504,431,380,369,354,346,346,339,339,343,360,363,359,356,346,352,346,353,364,379,395,402,408,416,418,409,410,389,392,385,395,393,400,392,411,414,415,418,422,417,421,407,409,403,406,408,405,407,400,406,407,403,399,408,430,422,373,405,379,396,409,414,409,393,411,406,408,407,410,418,402,413,410,411,415,407,417,412,414,403,408,412,409,412,412,413,415,427,425,434,437,447,465,474,478,491,491,491,504,499,506,507,513,499,512,505,503,502,507,503,505,504,511,500,506,510,504,502,504,499,509,507,508,508,516,535,545,492,506,464,482,462,460,449,447,438,512,442,444,445,447,453,453,459,470,463,469,472,482,478,481,491,486,486,500,495,487,492,494,485,489,481,490,480,482,468,468,469,460,467,460,457,465,469,467,486,482,487,488,497,496,498,494,494,493,496,487,498,490,496,516,494,502,503,520,529,513,483,486,487,486,496,482,482,475,481,466,439,449,440,444,436,435,438,441,446,444,445,457,460,474,486,491,497,500,580,558,563,550,566,582,606,629,641,661,683,718,729,753,732,615,555,544,530,519,507,512,502,511,514,536,579,556,442,450,436,435,433,431";

                String[] array1 = test.split(",");
                String[] array2 = test2.split(",");


                for (int i =0;i<10000;i+=2)
                {
                    int value1 =Integer.valueOf(array1[i]);
                    int value2 =Integer.valueOf(array1[i+1]);
                    int value3 =Integer.valueOf(array2[i]);
                    int value4 =Integer.valueOf(array2[i+1]);
                    parseData(value1,value2,value3,value4);
                }
            }
        });

        thread.start();*/

        int subSize = 40;
        List<String> checkins = readFile();
        for (int i = 0; i < checkins.size(); i++) {
            String str = checkins.get(i);
            if (str != null) {
                int size = str.length() / subSize;
                for (int j = 0; j < size; j++) {
                    String subStr = str.substring(j * subSize, j * subSize + subSize);
                    byte[] result = fromHexString(subStr);
                    parseData(result);
                    // System.out.println(subStr);
                }
            }
        }
    }

    private byte[] fromHexString(final String encoded) {
        if ((encoded.length() % 2) != 0)
            throw new IllegalArgumentException("Input string must contain an even number of characters");

        final byte result[] = new byte[encoded.length() / 2];
        final char enc[] = encoded.toCharArray();
        for (int i = 0; i < enc.length; i += 2) {
            StringBuilder curr = new StringBuilder(2);
            curr.append(enc[i]).append(enc[i + 1]);
            result[i / 2] = (byte) Integer.parseInt(curr.toString(), 16);
        }
        return result;
    }


    @Override
    public void onCreateSupportNavigateUpTaskStack(@NonNull TaskStackBuilder builder) {
        super.onCreateSupportNavigateUpTaskStack(builder);
    }

    private void initBluetooth() {
        if (mSearchResult != null) {
            mBinding.deviceName.setText(mSearchResult.getName());
            App.getInstance().mClient.connect(mSearchResult.getAddress(), new BleConnectResponse() {
                @Override
                public void onResponse(int code, BleGattProfile data) {
                    if (code == REQUEST_SUCCESS) {
                        readData();
                    }
                }
            });

            App.getInstance().mClient.registerConnectStatusListener(mSearchResult.getAddress(), new BleConnectStatusListener() {
                @Override
                public void onConnectStatusChanged(String mac, int status) {


                    if (mac.equals(mSearchResult.getAddress())) {
                        switch (status) {
                            case STATUS_CONNECTED:
                                break;
                            case STATUS_DISCONNECTED:
                                runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                        if (!mQuit) {
                                            showDisconnectDialog();
                                        }
                                    }
                                });

                                break;
                        }
                    }

                }
            });
        }
    }

    private void showDisconnectDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        AlertDialog alert = builder.setTitle("提示")
                .setMessage("设备已断开")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        ControlActivity.this.finish();
                    }
                })
                .create();             //创建AlertDialog对象
        alert.show();
    }

    /*数据协议就是
    0-1  序号
    2-5，红光数据
    6-9，红外数据
    10-11，序号
    12-15，红光数据
    16-19，红外数据*/
    /*
    2021-01-31 19:28:27.230 31460-31460/com.bluetooth.smart.heart D/jinjianxin: data = 09 0ED0ED00 0080 250100090FD6ED000081250100	 length = 20*/

    private void readData() {
        App.getInstance().mClient.notify(mSearchResult.getAddress(), UUID.fromString(mServiceUUID), UUID.fromString(mReadUUID), new BleNotifyResponse() {
            @Override
            public void onNotify(UUID service, UUID character, byte[] value) {
                // Utils.LogOut("data = " + Utils.bytesToHex(value) + "\t length = " + value.length);
                parseData(value);
               // ZLog.e("", Utils.bytesToHex(value));
            }

            @Override
            public void onResponse(int code) {
                if (code == REQUEST_SUCCESS) {
                    Utils.LogOut("");
                }
            }
        });
    }


    private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY_MM_dd_HH_mm_ss", Locale.CHINA);

    private void parseData(byte[] data) {
        /*数据协议就是
        0-1  序号
        2-5，红光数据
        6-9，红外数据
        10-11，序号
        12-15，红光数据
        16-19，红外数据*/

        if (mStartTime1 == 0) {
            mStartTime1 = System.currentTimeMillis();
        }

        List<Integer> tmpList1 = null;
        List<Integer> tmpList2 = null;
        List<Float> tmpList3 = null;
        if (mList1.size() >= MAX_SIZE) {
            tmpList1 = mList1.subList(0, MAX_SIZE);
        }

        if (mList2.size() >= MAX_SIZE) {
            tmpList2 = mList2.subList(0, MAX_SIZE);
        }

        if (mList3.size() >= MAX_SIZE) {
            tmpList3 = mList3.subList(0, MAX_SIZE);
        }


        if (tmpList1 != null && tmpList2 != null && tmpList3 != null) {
            if (mStartTime == 0) {
                mStartTime = System.currentTimeMillis();
            }

            Integer[] data1 = new Integer[MAX_SIZE];
            Integer[] data2 = new Integer[MAX_SIZE];
            data1 = tmpList1.toArray(data1);
            data2 = tmpList2.toArray(data2);

            int size = tmpList3.size();
            float countValue = 0.0f;
            for (int i = 0; i < size; i++) {
                countValue += tmpList3.get(i);
            }

            mSpo2Algorithm.maxim_heart_rate_and_oxygen_saturation(data2, data1, MAX_SIZE);
            int heart_rate = mSpo2Algorithm.get_heart_rate();
            int heart_rate_vaild = mSpo2Algorithm.get_heart_rate_vaild();
            double spo2 = mSpo2Algorithm.get_spo2();
            double spo2_vaild = mSpo2Algorithm.get_spo2_vaild();

            Log.d("bluetooth11", "heart_rate =" + heart_rate + "\t" + "spo2 = " + spo2);

            float finalCountValue = countValue;
            runOnUiThread(new Runnable() {
                @Override
                public void run() {

                    mBinding.text1.setText("Heart Rate: " + String.valueOf(heart_rate) + " [b.p.m] ");
                    DecimalFormat decimalFormat = new DecimalFormat("#.##");
                    mBinding.temperatureTextview.setText("Temperature: " + decimalFormat.format(finalCountValue / (float) size) + "℃");
                }
            });


           /* runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    List<Integer> tmpList = new ArrayList<>();
                    tmpList.addAll(mList2.subList(0, 100));
                    addEntry(mBinding.chart3, R.color.color_3, tmpList, 3);
                }
            });*/

            mList1.subList(0, 100).clear();
            mList2.subList(0, 100).clear();
            mList3.subList(0, 100).clear();
            Log.d("", "");

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    addEntry(mBinding.chart1, R.color.color_1, heart_rate, 0);
                    addEntry(mBinding.chart2, R.color.color_2, (float) spo2, 1);
                }
            });

            mDataList.add(new DataBean(String.valueOf(heart_rate), String.valueOf(spo2), "", mFormatter.format(new Date())));

            mCount += 1;
        }


        String prefix = ",";
        if (mFirst) {
            prefix = "";
            mFirst = false;
        }

        byte[] tmpData =null;

        tmpData = new byte[2];
        tmpData[0] = data[0];
        tmpData[1] = data[1];
        float tem1= Utils.bytes2IntLittle(tmpData) / 100.0f;
        mList3.add(tem1);

        ZLog.e("",tem1+",");

        tmpData = new byte[4];
        tmpData[0] = data[2];
        tmpData[1] = data[3];
        tmpData[2] = data[4];
        tmpData[3] = data[5];
        int value1 = Utils.byteToInt(tmpData);
        ZLog.e("",value1+",");

        tmpData = new byte[4];
        tmpData[0] = data[6];
        tmpData[1] = data[7];
        tmpData[2] = data[8];
        tmpData[3] = data[9];
        int value3 = Utils.byteToInt(tmpData);
        ZLog.e("",value3+",");

        tmpData = new byte[2];
        tmpData[0] = data[10];
        tmpData[1] = data[11];
        float tem2= Utils.bytes2IntLittle(tmpData) / 100.0f;
        mList3.add(tem2);
        ZLog.e("",tem2+",");

        tmpData = new byte[4];
        tmpData[0] = data[12];
        tmpData[1] = data[13];
        tmpData[2] = data[14];
        tmpData[3] = data[15];
        int value2 = Utils.byteToInt(tmpData);
        // ZLog.i("", prefix + value1 + "," + value2);
        mList1.add(Integer.valueOf(value1));
        mList1.add(Integer.valueOf(value2));
        ZLog.e("",value2+",");

        tmpData = new byte[4];
        tmpData[0] = data[16];
        tmpData[1] = data[17];
        tmpData[2] = data[18];
        tmpData[3] = data[19];
        int value4 = Utils.byteToInt(tmpData);
        mList2.add(Integer.valueOf(value3));
        mList2.add(Integer.valueOf(value4));
        ZLog.e("",value4+",");



        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (mStep % 4 == 0) {
                    addEntry(mBinding.chart3, R.color.color_3, (float) (value3), 2);
                    addEntry(mBinding.chart3, R.color.color_3, (float) (value4), 2);

                    if (mStep >= 1000) {
                        mStep = 0;
                    }
                }

                mStep += 1;
            }
        });
    }


    private void parseData(int value1, int value2, int value3, int value4) {
        /*数据协议就是
        0-1  序号
        2-5，红光数据
        6-9，红外数据
        10-11，序号
        12-15，红光数据
        16-19，红外数据*/

        List<Integer> tmpList1 = null;
        List<Integer> tmpList2 = null;
        if (mList1.size() >= MAX_SIZE) {
            tmpList1 = mList1.subList(0, MAX_SIZE);
        }


        if (mList2.size() >= MAX_SIZE) {
            tmpList2 = mList2.subList(0, MAX_SIZE);
        }

        if (tmpList1 != null && tmpList2 != null) {
            if (mStartTime == 0) {
                mStartTime = System.currentTimeMillis();
            }

            Integer[] data1 = new Integer[MAX_SIZE];
            Integer[] data2 = new Integer[MAX_SIZE];
            data1 = tmpList1.toArray(data1);
            data2 = tmpList2.toArray(data2);
            mSpo2Algorithm.maxim_heart_rate_and_oxygen_saturation(data1, data2, MAX_SIZE);
            int heart_rate = mSpo2Algorithm.get_heart_rate();
            double spo2 = mSpo2Algorithm.get_spo2();

            Log.d("bluetooth11", "heart_rate =" + heart_rate + "\t" + "spo2 = " + spo2);


           /* runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    List<Integer> tmpList = new ArrayList<>();
                    tmpList.addAll(mList2.subList(0, 100));
                    addEntry(mBinding.chart3, R.color.color_3, tmpList, 3);
                }
            });*/

            mList1.subList(0, 100).clear();
            mList2.subList(0, 100).clear();
            Log.d("", "");

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    addEntry(mBinding.chart1, R.color.color_1, heart_rate, 0);
                    addEntry(mBinding.chart2, R.color.color_2, (float) spo2, 1);
                }
            });

            mDataList.add(new DataBean(String.valueOf(heart_rate), String.valueOf(spo2), "", mFormatter.format(new Date())));

            mCount += 1;
        }


        String prefix = ",";
        if (mFirst) {
            prefix = "";
            mFirst = false;
        }
/*
        byte[] tmpData = new byte[4];
        tmpData[0] = data[2];
        tmpData[1] = data[3];
        tmpData[2] = data[4];
        tmpData[3] = data[5];
        int value1 = Utils.byteToInt(tmpData);

        tmpData = new byte[4];
        tmpData[0] = data[12];
        tmpData[1] = data[13];
        tmpData[2] = data[14];
        tmpData[3] = data[15];
        int value2 = Utils.byteToInt(tmpData);
        ZLog.i("", prefix + value1 + "," + value2);*/
        mList1.add(Integer.valueOf(value1));
        mList1.add(Integer.valueOf(value2));
/*
        tmpData = new byte[4];
        tmpData[0] = data[6];
        tmpData[1] = data[7];
        tmpData[2] = data[8];
        tmpData[3] = data[9];
        int value3 = Utils.byteToInt(tmpData);

        tmpData = new byte[4];
        tmpData[0] = data[16];
        tmpData[1] = data[17];
        tmpData[2] = data[18];
        tmpData[3] = data[19];
        int value4 = Utils.byteToInt(tmpData);*/
        mList2.add(Integer.valueOf(value3));
        mList2.add(Integer.valueOf(value4));

        //   ZLog.d("", prefix + value3 + "," + value4);

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                addEntry(mBinding.chart3, R.color.color_3, (float) (value3), 2);
                addEntry(mBinding.chart3, R.color.color_3, (float) (value4), 2);
            }
        });
    }


    private void initChart(LineChart chart, int color) {
        // chart.setOnChartValueSelectedListener(this);

        // enable description text
        chart.getDescription().setEnabled(false);

        // enable touch gestures
        chart.setTouchEnabled(true);
        // enable scaling and dragging
        chart.setDragEnabled(true);
        chart.setScaleEnabled(true);
        chart.setDrawGridBackground(false);

        // if disabled, scaling can be done on x- and y-axis separately
        chart.setPinchZoom(true);

        // set an alternative background color
        chart.setBackgroundColor(Color.WHITE);

        LineData data = new LineData();
        data.setValueTextColor(color);

        // add empty data
        chart.setData(data);

        XAxis xl = chart.getXAxis();
        xl.setTextColor(color);
        xl.setPosition(XAxis.XAxisPosition.BOTTOM);
        xl.setDrawGridLines(false);
        xl.setAxisLineColor(color);
        xl.setAvoidFirstLastClipping(true);
        xl.setEnabled(true);


        chart.getLegend().setEnabled(false);

        if (chart != mBinding.chart3) {
            xl.setLabelCount(7);
            xl.setValueFormatter(new IAxisValueFormatter() {
                @Override
                public String getFormattedValue(float value, AxisBase axis) {
                    int index = (int) (value + 0.5f);
                    long time = mStartTime + index * 500;
                    return String.valueOf(mXFormatter.format(new Date(time)));
                }

            });


        } else {
            xl.setLabelCount(3);
            xl.setValueFormatter(new IAxisValueFormatter() {
                @Override
                public String getFormattedValue(float value, AxisBase axis) {
                    long time = (long) (mStartTime1 + (int) (value / 20.0f * 1000));
                    return mXFormatter.format(new Date(time));
                }
            });

            YAxis yAxis = chart.getAxis(YAxis.AxisDependency.LEFT);
            yAxis.setLabelCount(6);
        }


        YAxis leftAxis = chart.getAxisLeft();
        leftAxis.setTextColor(color);

        if (chart == mBinding.chart1) {
            leftAxis.setAxisMaximum(350.0f);
            leftAxis.setAxisMinimum(0f);
        } else if (chart == mBinding.chart2) {
            leftAxis.setAxisMaximum(110f);
            leftAxis.setAxisMinimum(0.0f);
        } else if (chart == mBinding.chart3) {
            leftAxis.setAxisMaximum(mChart3Max);
            leftAxis.setAxisMinimum(mChart3Min);
        }

        /*else if (chart == mBinding.chart4) {
            setChart4MaxValue();
        } */

        leftAxis.setAxisLineColor(color);
        leftAxis.setDrawGridLines(true);
        leftAxis.setGridColor(color);

        YAxis rightAxis = chart.getAxisRight();
        rightAxis.setEnabled(false);
    }

    private void setChart4MaxValue() {
        /*
        YAxis leftAxis = mBinding.chart4.getAxisLeft();
        leftAxis.setAxisMaximum(mMax);
        leftAxis.setAxisMinimum(mMin); */
    }

    private void addEntry(LineChart chart, int color, float value, int index) {
        LineData data = chart.getData();

        if (data != null) {

            ILineDataSet set = data.getDataSetByIndex(0);
            // set.addEntry(...); // can be called as well

            if (set == null) {
                set = createSet(color, index);
                data.addDataSet(set);
            }

            data.addEntry(new Entry(set.getEntryCount(), value), 0);
            data.notifyDataChanged();
            if (chart == mBinding.chart1) {
                data.setDrawValues(true);

                data.setValueFormatter(new IValueFormatter() {
                    @Override
                    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
                        return mDecimalFormat.format(value);
                    }

                });
            }

            if (chart == mBinding.chart2) {
                data.setDrawValues(true);

                data.setValueFormatter(new IValueFormatter() {
                    @Override
                    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
                        return mDecimalFormat1.format(value);
                    }
                });
            }

            // let the chart know it's data has changed
            chart.notifyDataSetChanged();

            // limit the number of visible entries
            if (chart == mBinding.chart3) {
                chart.setVisibleXRangeMaximum(75);
            } else {
                chart.setVisibleXRangeMaximum(7);
            }
            // chart.setVisibleYRange(30, AxisDependency.LEFT);


            if (!mScale) {
                chart.moveViewTo(data.getEntryCount(), mMinValue+(mMaxValue-mMinValue)/2, YAxis.AxisDependency.LEFT);
            }
        }

        /*if(chart ==mBinding.chart1)
        {
            addEntry(chart,color,value-5,index,true);
        }*/
    }

    private void addEntry(LineChart chart, int color, List<Integer> list, int index) {

        LineData data = chart.getData();

        if (data != null) {

            ILineDataSet set = data.getDataSetByIndex(1);
            // set.addEntry(...); // can be called as well

            if (set == null) {
                set = createSet(color, index);
                data.addDataSet(set);
            }

            Log.d("bluetooth11", "length = " + data.getEntryCount());

            // if(data.getEntryCount()<500) {

            if (set.getEntryCount() >= 300) {
                List<Entry> entryList = new ArrayList<>();
                for (int i = 0; i < 100; i++) {
                    //Entry e = set.getEntryForXValue(set.getEntryCount() - 1, Float.NaN);
                    entryList.add(set.getEntryForXValue(i, Float.NaN));
                }

                for (Entry entry :
                        entryList) {
                    data.removeEntry(entry, 0);
                }
            }


            for (Integer value :
                    list) {
                data.addEntry(new Entry(set.getEntryCount(), value), 0);
            }

            data.notifyDataChanged();

            Log.d("bluetooth11", "length = " + data.getEntryCount());
            // let the chart know it's data has changed
            chart.notifyDataSetChanged();

            // limit the number of visible entries
            chart.setVisibleXRangeMaximum(250);
            // chart.setVisibleYRange(30, AxisDependency.LEFT);

            // move to the latest entry
            chart.moveViewToX(data.getEntryCount());
            //  }

        }
    }

    private LineDataSet createSet(int color, int index) {


        String str = "";

        switch (index) {
            case 0:
                str = getResources().getString(R.string.data_1);
                break;
            case 1:
                str = getResources().getString(R.string.data_2);
                break;
            case 2:
                str = getResources().getString(R.string.data_3);
                break;
            case 3:
                str = getResources().getString(R.string.data_4);
                break;
        }

        LineDataSet set = new LineDataSet(null, str);
        set.setAxisDependency(YAxis.AxisDependency.LEFT);
        set.setColor(color);
        set.setCircleColor(color);
        set.setDrawCircles(false);
        set.setLineWidth(1f);
        set.setCircleRadius(2f);
        set.setFillAlpha(65);
        set.setFillColor(color);
        set.setHighLightColor(color);
        set.setValueTextColor(color);
        set.setValueTextSize(9f);
        set.setDrawValues(false);


        return set;
    }

    private void initThreadPool() {
        mFixedThreadPool = Executors.newFixedThreadPool(3);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mFixedThreadPool != null) {
            mFixedThreadPool.shutdown();
        }

        mQuit = true;
        if (mSearchResult != null) {
            App.getInstance().mClient.disconnect(mSearchResult.getAddress());
        }
    }

    private void showDirectoryPickerDialog(String fileName) {
        if (permissionGranted()) {
            if (mDataList.size() > 0) {
                // exportExcel(getDownloadPath());
                DirectoryPickerDialog directoryPickerDialog = new DirectoryPickerDialog(this, new OnCancelPickerDialogListener() {
                    @Override
                    public void onCanceled() {

                    }
                }, new OnConfirmDialogListener() {
                    @Override
                    public void onConfirmed(File... files) {
                        exportExcel(files[0].getPath(), fileName);
                    }
                });
                directoryPickerDialog.show();
            }
        } else {
            requestPermission();
        }
    }

    private boolean permissionGranted() {
        return ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
                && ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
    }


    private void requestPermission() {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
    }

    private void exportExcel(final String filePath, String fileName) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {

                File file = new File(filePath);
                SimpleDateFormat mFormatter = new SimpleDateFormat("yyyy-MM-DD_HH_mm_ss");
                String excelFileName = mFormatter.format(new Date()) + "_" + "bluetooth.xls";

                String[] title = {"time", getResources().getString(R.string.data_1), getResources().getString(R.string.data_2),
                        getResources().getString(R.string.data_3)};
                String sheetName = "data";

                final String excelfilePath = filePath + File.separator + fileName + ".xls";
                Utils.LogOut(excelfilePath);


                ExcelUtil.initExcel(excelfilePath, sheetName, title);
                ExcelUtil.writeObjListToExcel(mDataList, excelfilePath, getApplicationContext());

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {

                        Toast.makeText(getApplicationContext(), excelfilePath, Toast.LENGTH_LONG).show();

                        if (new File(excelfilePath).exists()) {
                            Utils.LogOut("---------------------- success");
                        } else {
                            Utils.LogOut("---------------------- failed");
                        }
                    }
                });
            }
        });
        thread.start();
    }

    private String getDownloadPath() {
        return "/mnt/sdcard/";
    }

    private void playVoice() {

        runOnUiThread(new Runnable() {
            @Override
            public void run() {

                if (mRingtone == null) {
                    Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
                    mRingtone = RingtoneManager.getRingtone(getApplicationContext(), uri);
                }
                mRingtone.stop();
                mRingtone.play();

                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mRingtone.stop();
                    }
                }, 5000);

            }
        });

    }

    private void showAlertDialog(String value) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (mAlertDialog == null) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(ControlActivity.this);
                    builder.setTitle(getResources().getString(R.string.warring));
                    builder.setMessage(value);
                    builder.setPositiveButton(getResources().getString(R.string.confim), new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            mAlertDialog = null;
                        }
                    });

                    mAlertDialog = builder.create();

                    builder.show();

                    mAlertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
                        @Override
                        public void onDismiss(DialogInterface dialog) {
                            mAlertDialog = null;
                        }
                    });
                }
            }
        });
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && data != null) {
            // 通过Uri进行文件处理
            if (requestCode == REQUEST_CODE_ANDROID_11_OR_HIGHER_FILE_SELECT_FOR_OUTPUT) {
                Uri uri = data.getData();
                Log.d("", "");

                // 柯基的工具类
                File file = com.blankj.utilcode.util.UriUtils.uri2File(uri);

                // 进行写文件...
                // doDataOutput(file.getPath());
                exportExcel(file.getParent(), file.getName());
            }
        }
    }

    private List<String> readFile() {

        String pathname = getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + File.separator + "raw.txt";
        Log.d("", "");


        //String pathname = "/storage/emulated/0/2/raw.txt"; // 绝对路径或相对路径都可以，这里是绝对路径，写入文件时演示相对路径

        //String pathname = "C:\\Users\\Administrator\\Desktop\\1\\raw.txt"; // 绝对路径或相对路径都可以，这里是绝对路径，写入文件时演示相对路径

        List<String> checkins = new ArrayList(); // List初始化
        try {
            File filename = new File(pathname);
            InputStreamReader reader = new InputStreamReader(new FileInputStream(filename));
            BufferedReader br = new BufferedReader(reader);
            String line = "";
            line = br.readLine();
            while (line != null) {
                checkins.add(line);
                line = br.readLine();
            }
        } catch (IOException e) {
            throw new RuntimeException(e);

        }

        return checkins;
    }
}
