element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • About Us
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Experts, Learning and Guidance
  • Technologies
  • More
Experts, Learning and Guidance
Ask an Expert Forum Ask your Expert: Nico teWinkel - Software Engineer who specialises in firmware, C and Java.
  • Blog
  • Forum
  • Documents
  • Leaderboard
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Experts, Learning and Guidance to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • Replies 21 replies
  • Subscribers 293 subscribers
  • Views 3040 views
  • Users 0 members are here
  • experts
  • ask_an_expert
  • ask_the_expert
  • software
Related
See a helpful answer?

Be sure to click 'more' and select 'suggest as answer'!

If you're the thread creator, be sure to click 'more' then 'Verify as Answer'!

Ask your Expert: Nico teWinkel - Software Engineer who specialises in firmware, C and Java.

patkelly
patkelly over 13 years ago

Nico is element14's very first member expert and member of the month for October 2011.image

Nico teWinkel's expertise: Software Engineer who  specialises in firmware, C and Java.

 

A little about Nico: "I've been a software engineer for more than  20 years. Electronics has been a hobby every since I played with the  old 10-in-1 and 200-in-1 RadioShack kits back in the 70s when I was just  a kid. Right now I'm working part time for a local hardware company  creating firmware for their devices, which brings together my software  engineering skills with my electronics hobby/obsession, and I'm having a  great time!

Software engineering in C and Java, including  iPhone and Android development. Currently developing firmware for Texas  Instruments chips using CCS. Any project involving interfacing Android  with external devices would really spark my interest."
 
See Nico's Blog
 
If you need help on anything, please post your question here!
 
If your not already, you'll need to login or register ask your question - just click reply
  • Sign in to reply
  • Cancel

Top Replies

  • johnbeetem
    johnbeetem over 12 years ago in reply to Former Member +1
    bryan molina wrote: As the software becomes more pervasive, risk to the public (due to faulty programs) become an increasingly concern. Develop a realistic doomsday scenario where the failure of a computer…
  • roineust
    roineust over 12 years ago in reply to ntewinkel +1
    Hello Nico! I have tried to compile, upload and watch trough the serial monitor the test code here, that you sent me and it was working fine. Then i discovered that i need to connect to the bluetooth module…
  • roineust
    roineust over 12 years ago in reply to ntewinkel +1
    Hey Nico! Finally i am on the horse! Altough, still at the beginning of the physical building of the robot shape itself and thus, have not yet delt with the issue of 3D priniting these parts - but at last…
  • ntewinkel
    ntewinkel over 12 years ago in reply to roineust

    Hi Roi,

     

    Try adding some Serial.println statements to the robot sketch to display debug information on the Serial monitor to show that the robot is actually receiving the commands.

    And/or instead of moving servos, turn on an LED for a second or so when a command is received. You could have one LED per servo or per command, for example.

     

    I still haven't checked out that robot you pointed out... I really should try that out image

     

    Cheers,

    -Nico

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • ntewinkel
    ntewinkel over 12 years ago in reply to roineust

    ps, great to hear you got the BT connected to your Arduino too!

     

    And I just had a look at the robot on Instructables - pretty cool!

    But it takes 19 braces, which the author seems to have 3D printed. Where did you get your I-braces? Did you 3D print them or did you manage to figure out a different ingenious solution for that?

     

    Cheers,

    -Nico

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • roineust
    roineust over 12 years ago in reply to ntewinkel

    Hey Nico!

    Finally i am on the horse!

     

    Altough, still at the beginning of the physical building of the robot shape itself and thus, have not yet delt with the issue of 3D priniting these parts - but at last, i am able to press an arrow on the BlueControl screen on my smartphone and in return, the sevo makes a nice movement.

     

    In 'retrospective', what i did were the follwoing things:

     

    1.The first problem i had, was that i did not understand how to connect to the bluetooth module - and that had nothing to do with the IDE code, it is just that for some reason that i don't understand, you have to pair with the blue tooth modue throrugh settings, but you connect to the module from within the BlueControl app menu.

     

    2.Getting to the code as it is now, was kind'a messy and i don't remember all i did - So, maybe the MegaPed code could have also worked for me, but since i had problems at the beginng, to tell if pressing the arrows on BlueControl, generates constructed small servo movements or if these movements are just random (servos act weird sometimes) - i just made a search for other similar projects and found a project, where i was able to deffinatly recognize that these small movements originate in pressing the app arrows.

     

    3.I don't know why i always got only these very small movements from the servo, but when i was able to determie that it was for sure me, that causes these small movements, i started meshing pieces of code that i found here and there in other projects, into the areas of that code, which i thought were good candidates for the purpose of expanding the small movements into longer ones.

     

    So - that's where i am right now: I found a project that is not MegaPed which uses it's own andriod app - this code uses a method that i don't understand much, which works by using the command DigitalWrite(motor_name,HIGH/LOW) - which only makes the servo move a little bit. Into the code areas, that use this command, within a Serial.read() loop and respond to the ASCII commands (sent from BlueControl - i changed the letters of original app, because BlueControl has more options than this app - e.g. the letters on the side panels), i inserted in these areas a command called Servo servo_name.write(servo_position), that gave me longer movements for the servo.

     

    Here is the other project page, which i used as a framework:

     

    http://letsmakerobots.com/node/27249

     

    And here is the code, as it looks right now, and will go through more changes and learning process, on my side:

     

     

    #include <Servo.h>

     

     

    char val; // variable to receive data from the serial port

    Servo roi;

     

     

    int motor_left[] = {3, 5};

    int motor_right[] = {6, 9};

    int ledPin =  13;    // LED connected to digital pin 13

     

     

    void setup() {

      Serial.begin(9600);       // start serial communication at 9600bps

    int i;

    for(i = 0; i < 2; i++){

    pinMode(motor_left[i], OUTPUT);

    pinMode(motor_right[i], OUTPUT);

    pinMode(ledPin, OUTPUT);

    }

    }

    void loop() {

      if( Serial.available() )       // if data is available to read

      {

        val = Serial.read();         // read it and store it in 'val'

      }

      if( val == 'U' )              

      {

        drive_forward(); 

      }

       else if( val == 'D' )              

      {

        drive_backward();

      }

       else if( val == 'L' )              

      {

        turn_right(); 

      }

       else if( val == 'R' )             

      {

        turn_left(); 

      }

     

      else if( val == 'C' )             

      {

        motor_stop(); 

      }

    }

    void motor_stop(){

     

       roi.attach(6);

     

     

    digitalWrite(motor_left[0], LOW);

    digitalWrite(motor_left[1], LOW);

     

     

    digitalWrite(motor_right[0], LOW);

    digitalWrite(motor_right[1], LOW);

     

     

    // roi.attach(6);

     

    // roi.write(90);

    // delay(1000);

    // roi.write(0);

    // delay(1000);

    // roi.write(180);

     

     

     

     

    //delay(1000);

    }

     

     

    void drive_forward(){

    digitalWrite(motor_left[0], HIGH);

    digitalWrite(motor_left[1], LOW);

     

     

    digitalWrite(motor_right[0], HIGH);

    digitalWrite(motor_right[1], LOW);

     

     

    roi.attach(6);

     

    roi.write(90);

    delay(1000);

    roi.write(0);

    delay(1000);

    roi.write(180);

     

     

    //delay(1000);

    }

     

     

    void drive_backward(){

    digitalWrite(motor_left[0], LOW);

    digitalWrite(motor_left[1], HIGH);

     

     

    digitalWrite(motor_right[0], LOW);

    digitalWrite(motor_right[1], HIGH);

     

     

     

     

    roi.attach(6);

     

    roi.write(90);

    delay(1000);

    roi.write(0);

    delay(1000);

    roi.write(180);

     

     

     

     

    //delay(1000);

    }

     

     

    void turn_left(){

    digitalWrite(motor_left[0], LOW);

    digitalWrite(motor_left[1], HIGH);

     

     

    digitalWrite(motor_right[0], HIGH);

    digitalWrite(motor_right[1], LOW);

     

     

     

     

    roi.attach(6);

     

    roi.write(90);

    delay(1000);

    roi.write(0);

    delay(1000);

    roi.write(180);

     

     

    //delay(1000);

    }

     

     

    void turn_right(){

    digitalWrite(motor_left[0], HIGH);

    digitalWrite(motor_left[1], LOW);

     

     

    digitalWrite(motor_right[0], LOW);

    digitalWrite(motor_right[1], HIGH);

     

     

    roi.attach(6);

     

    roi.write(90);

    delay(1000);

    roi.write(0);

    delay(1000);

    roi.write(180);

     

     

    //delay(1000);

    }

     

     

     

    Let me know what you think!

     

    All the best!

     

    Roi.

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Cancel
  • roineust
    roineust over 12 years ago

    Hello Nico!

     

    I seem to have a problem of both servo and sound libraries trying to use the same pin timers (i am not sure what is the exact term), what happens is that when the tank is close enough to a wall so the sound sample is playing at different rates, according to distance, in the Loop function, the servos won't react to BlueControl app commands, but only have these funny jerking movements every time the sample is played.

     

    According to some explanations i rerad, about problems arising from of both servo and sound libraries using pin 11timer  together, i have tried to switch from Servo.h library to ServoTimer2.h library, but still it did not help.

     

    Here is the code, can you please take a look and tell me how can i solve this problem? :

     

    #include <ServoTimer2.h>

    #include <PCM.h> // This is the sound library

     

     

    const unsigned char sample[] PROGMEM = {

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

    }; //This is the sound sample

     

     

    #define trigPin 13

    #define echoPin 12

     

     

    char val; // variable to receive data from the serial port

     

     

    ServoTimer2 wheel1;

    ServoTimer2 wheel2;

     

     

    ServoTimer2 camera_servo1;

    ServoTimer2 camera_servo2;

     

     

    char mem=' '; //remember the last menu choice on the BlueControl app

     

     

    int camera_servo1_mem_servo1=1500;  // remember the camera servo1 last angle so they will not exceed their limits

    int camera_servo2_mem_servo2=1500;  // remember the camera servo1 last angle so they will not exceed their limits

     

     

    int led =  10;    // LED connected to digital pin 13

    int led_count = 225; // LED minimum dim value brfore it starts lighting

     

     

    int light_saver_timer=0; // Count 3.5 minutes with no action to shut light and save battery

     

     

    void setup() {

     

      Serial.begin(9600);       // start serial communication at 9600bps

     

     

      pinMode(trigPin, OUTPUT); //initiate ultrasound sensor trig pin

      pinMode(echoPin, INPUT);  //initiate ultrasound sensor echi pin

     

      pinMode(led, OUTPUT); //initiate led pin

     

     

      pinMode(11,OUTPUT);  //initiate speaker pin

      digitalWrite(11,LOW); //initiate speaker pin

     

     

    }

     

     

    void loop() {

     

     

      long duration, distance; // Next lines deal with finding and calculating ultrasound distance sensor

     

      digitalWrite(trigPin, LOW);  // Added this line

      delayMicroseconds(2); // Added this line

      digitalWrite(trigPin, HIGH);

     

     

      delayMicroseconds(10); // Added this line

      digitalWrite(trigPin, LOW);

     

      duration = pulseIn(echoPin, HIGH);

      distance = (duration/2) / 29.1;

      

     

     

      if (millis()-light_saver_timer > 210000){ // Count 3.5 minutes with no action to shut light and save battery

        led_count=225;

        light_saver_timer=millis();

        analogWrite(led,led_count);

      }

     

     

      if( Serial.available() ){       // if data is available to read

     

         val = Serial.read();         // read it and store it in 'val'

      }

     

      //Next lines save the last value that was chosen in the BlueControl app menu

     

      if( val == 'a') 

             {

                mem='a';

                 

                val=' ';

             }

       else if( val == 'c')

              {

                mem='c';

            

                val=' ';

              }

      else if( val == 'd')

              {

                mem='d';

           

                val=' ';

              }

              else if( val == 'e')

              {

                mem='e';

             

                val=' ';

              }

             

             

    else if( val == 'U' && mem == 'a' )

     

          {

         

          light_saver(); 

           

          drive_forward_long(); 

              

          val=' ';

           

         }

       else if(val == 'U' && mem == 'c' )

     

         {

         

          light_saver();

          

          drive_forward_short(); 

            

          val=' ';

        

         }

     

       else if( val == 'D' && mem == 'a' )              

      {

       

        light_saver();

       

        drive_backward_long();

        

        val=' ';

      }

     

       else if( val == 'D' && mem == 'c' )              

      {

       

        light_saver();

       

        drive_backward_short();

        

        val=' ';

      }

     

       else if( val == 'R' )              

      {

       

        light_saver();

       

        turn_right(); 

       

         val=' ';

      }

       else if( val == 'L' )             

      {

       

        light_saver();

       

        turn_left();

         

         val=' ';

      }

     

      else if( val == 'C' )             

      {

       

        light_saver();

       

        motor_stop();

       

         val=' ';

      }

    else if( val == 'U' && mem == 'd' )

     

          {

           

          light_saver(); 

           

          camera_servo_up(); 

             

          val=' ';

           

         }

    else if( val == 'D' && mem == 'd' )

     

          {

         

          light_saver(); 

           

          camera_servo_down(); 

             

          val=' ';

           

         }

        

       else if(val == 'U' && mem == 'e' )

     

         {

          

           light_saver();

     

            if ( led_count < 255)

       {

       

        led_count=led_count+2;

        analogWrite(led, led_count);

       

       }

       

          val=' ';

        

         }  

        

             

          else if(val == 'D' && mem == 'e' )

     

         {

        

            light_saver();

           

            if ( led_count > 225)

       {

       

        led_count=led_count-2;

        analogWrite(led, led_count);

      

       }

         val=' ';

        

         }

        

        

        else if (distance <= 41){  //Next lines play the sound sample in different frequencies, according to disdtance measured by ultra-sound sensor

          

           startPlayback(sample, sizeof(sample));

     

      if (distance <=41 && distance >=27) delay(8500);

         else if (distance <=27 && distance >=20) delay(5250);

          else if (distance <=20 && distance >=17) delay(2440);

           else if (distance <=17 && distance >=12) delay(1500);

            else if (distance <=12 && distance >=8) delay(1080);

             else if (distance <=8 && distance >=5) delay(740);

              else if (distance <=5 && distance >=3) delay(530);

               else if (distance <=4 && distance >=2) delay(340);

                else if (distance <=2 && distance >=0) delay(180);

          

      }

               

    }

     

     

    void motor_stop(){

       

       wheel1.attach(6);

       wheel2.attach(5);

     

     

       wheel1.attach(6);

       wheel2.attach(5);

     

       wheel1.write(1458);  // set servo to mid-point

       wheel2.write(1418);

     

    }

     

     

    void drive_forward_long(){

     

     

      wheel1.attach(6);

    wheel2.attach(5);

     

    wheel1.write(2000); 

    wheel2.write(1000);

    delay(4000);

    wheel1.write(1458);  // set servo to mid-point

    wheel2.write(1418);

     

    }

     

     

    void drive_forward_short(){

     

     

    wheel1.attach(6);

    wheel2.attach(5);

     

    wheel1.write(2000); 

    wheel2.write(1000);

     

     

    delay(800);

     

     

    wheel1.write(1458);  // set servo to mid-point

    wheel2.write(1418);

     

    }

     

     

    void drive_backward_long(){

     

     

    wheel1.attach(6);

    wheel2.attach(5);

     

    wheel1.write(1000); 

    wheel2.write(2000);

     

    delay(4000);

     

    wheel1.write(1458);  // set servo to mid-point

    wheel2.write(1418);

     

     

     

     

    }

     

     

    void drive_backward_short(){

     

     

    wheel1.attach(6);

    wheel2.attach(5);

     

    wheel1.write(1000); 

    wheel2.write(2000);

     

     

    delay(800);

     

     

    wheel1.write(1458);  // set servo to mid-point

    wheel2.write(1418);

     

     

    }

     

     

     

     

    void turn_left(){

     

     

    wheel1.attach(6);

    wheel2.attach(5);

     

    wheel1.write(1000); 

    wheel2.write(1000);

     

    delay(150);

     

    wheel1.write(1458);  // set servo to mid-point

    wheel2.write(1418);

     

    }

     

     

    void turn_right(){

     

     

    wheel1.attach(6);

    wheel2.attach(5);

     

    wheel1.write(2000); 

    wheel2.write(2000);

     

    delay(150);

     

    wheel1.write(1458);  // set servo to mid-point

    wheel2.write(1418);

     

     

    }

     

     

    void camera_servo_up(){

     

     

    camera_servo1.attach(8);

    camera_servo2.attach(9);

     

    if (camera_servo1_mem_servo1>800 && camera_servo2_mem_servo2<2200)

    {

       camera_servo1_mem_servo1=camera_servo1_mem_servo1+30;

       camera_servo2_mem_servo2=camera_servo2_mem_servo2-30;

     

       camera_servo1.write(camera_servo1_mem_servo1);

       camera_servo2.write(camera_servo2_mem_servo2);

    }

     

     

    }

     

     

    void camera_servo_down(){

     

     

       camera_servo1.attach(8);

       camera_servo2.attach(9);

     

    if (camera_servo1_mem_servo1>800 && camera_servo2_mem_servo2<2200)

    {

      

       camera_servo1_mem_servo1=camera_servo1_mem_servo1-30;

       camera_servo2_mem_servo2=camera_servo2_mem_servo2+30;

      

       camera_servo1.write(camera_servo1_mem_servo1);

       camera_servo2.write(camera_servo2_mem_servo2);

    }

     

     

    }

     

     

    void light_saver() {

     

       light_saver_timer=millis();

    }

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • roineust
    roineust over 12 years ago

    Hello Nico!

     

    There seems to be a problem in my code, that arise from both the servo and the sound libraries trying to use together pin 11 timer.

     

    I have tried to replace the Servo.h library with ServoTimer2.h library, but it did not help.

     

    Can you please take a look and tell me if you know of any solution to this problem?

     

    What happens with the robot itself, is that when the tank is close enough to a wall and the distance function kicks in the sound sample, the servos stop working and just make these funny uncontroled movement each time the sound sample is played.

     

    Here is the code:

     

     

    #include <ServoTimer2.h>

    #include <PCM.h> // This is the sound library

     

     

    const unsigned char sample[] PROGMEM = {

      126, 127, 128, 128, 128, 128, 128, 127 //  .......Here comes a very long array of numbers, that describe the sound sample and i took them off, for the sake of readablilty.

     

    }; //This is the sound sample

     

     

      #define trigPin 13

    #define echoPin 12

     

     

    char val; // variable to receive data from the serial port

     

     

    ServoTimer2 wheel1;

    ServoTimer2 wheel2;

     

     

    ServoTimer2 camera_servo1;

    ServoTimer2 camera_servo2;

     

     

    char mem=' '; //remember the last menu choice on the BlueControl app

     

     

    int camera_servo1_mem_servo1=1500;  // remember the camera servo1 last angle so they will not exceed their limits

    int camera_servo2_mem_servo2=1500;  // remember the camera servo1 last angle so they will not exceed their limits

     

     

    int led =  10;    // LED connected to digital pin 13

    int led_count = 225; // LED minimum dim value brfore it starts lighting

     

     

    int light_saver_timer=0; // Count 3.5 minutes with no action to shut light and save battery

     

     

    void setup() {

     

      Serial.begin(9600);       // start serial communication at 9600bps

     

     

      pinMode(trigPin, OUTPUT); //initiate ultrasound sensor trig pin

      pinMode(echoPin, INPUT);  //initiate ultrasound sensor echi pin

     

      pinMode(led, OUTPUT); //initiate led pin

     

     

      pinMode(11,OUTPUT);  //initiate speaker pin

      digitalWrite(11,LOW); //initiate speaker pin

     

     

    }

     

     

    void loop() {

     

     

      long duration, distance; // Next lines deal with finding and calculating ultrasound distance sensor

     

      digitalWrite(trigPin, LOW);  // Added this line

      delayMicroseconds(2); // Added this line

      digitalWrite(trigPin, HIGH);

     

     

      delayMicroseconds(10); // Added this line

      digitalWrite(trigPin, LOW);

     

      duration = pulseIn(echoPin, HIGH);

      distance = (duration/2) / 29.1;

     

     

     

      if (millis()-light_saver_timer > 210000){ // Count 3.5 minutes with no action to shut light and save battery

        led_count=225;

        light_saver_timer=millis();

        analogWrite(led,led_count);

      }

     

     

      if( Serial.available() ){       // if data is available to read

     

         val = Serial.read();         // read it and store it in 'val'

      }

     

      //Next lines save the last value that was chosen in the BlueControl app menu

     

      if( val == 'a') 

             {

                mem='a';

     

                val=' ';

             }

       else if( val == 'c')

              {

                mem='c';

     

                val=' ';

              }

      else if( val == 'd')

              {

                mem='d';

     

                val=' ';

              }

              else if( val == 'e')

              {

                mem='e';

     

                val=' ';

              }

     

     

    else if( val == 'U' && mem == 'a' )

     

          {

     

          light_saver(); 

     

          drive_forward_long(); 

     

          val=' ';

     

         }

       else if(val == 'U' && mem == 'c' )

     

         {

     

          light_saver();

     

          drive_forward_short(); 

     

          val=' ';

     

         }

     

       else if( val == 'D' && mem == 'a' )              

      {

     

        light_saver();

     

        drive_backward_long();

     

        val=' ';

      }

     

       else if( val == 'D' && mem == 'c' )              

      {

     

        light_saver();

     

        drive_backward_short();

     

        val=' ';

      }

     

       else if( val == 'R' )              

      {

     

        light_saver();

     

        turn_right(); 

     

         val=' ';

      }

       else if( val == 'L' )             

      {

     

        light_saver();

     

        turn_left();

     

         val=' ';

      }

     

      else if( val == 'C' )             

      {

     

        light_saver();

     

        motor_stop();

     

         val=' ';

      }

    else if( val == 'U' && mem == 'd' )

     

          {

     

          light_saver(); 

     

          camera_servo_up(); 

     

          val=' ';

     

         }

    else if( val == 'D' && mem == 'd' )

     

          {

     

          light_saver(); 

     

          camera_servo_down(); 

     

          val=' ';

     

         }

     

       else if(val == 'U' && mem == 'e' )

     

         {

     

           light_saver();

     

            if ( led_count < 255)

       {

     

        led_count=led_count+2;

        analogWrite(led, led_count);

     

       }

     

          val=' ';

     

         }  

     

     

          else if(val == 'D' && mem == 'e' )

     

         {

     

            light_saver();

     

            if ( led_count > 225)

       {

     

        led_count=led_count-2;

        analogWrite(led, led_count);

     

       }

         val=' ';

     

         }

     

     

        else if (distance <= 41){  //Next lines play the sound sample in different frequencies, according to disdtance measured by ultra-sound sensor

     

           startPlayback(sample, sizeof(sample));

     

      if (distance <=41 && distance >=27) delay(8500);

         else if (distance <=27 && distance >=20) delay(5250);

          else if (distance <=20 && distance >=17) delay(2440);

           else if (distance <=17 && distance >=12) delay(1500);

            else if (distance <=12 && distance >=8) delay(1080);

             else if (distance <=8 && distance >=5) delay(740);

              else if (distance <=5 && distance >=3) delay(530);

               else if (distance <=4 && distance >=2) delay(340);

                else if (distance <=2 && distance >=0) delay(180);

     

      }

     

    }

     

     

    void motor_stop(){

     

       wheel1.attach(6);

       wheel2.attach(5);

     

     

       wheel1.attach(6);

       wheel2.attach(5);

     

       wheel1.write(1458);  // set servo to mid-point

       wheel2.write(1418);

     

    }

     

     

    void drive_forward_long(){

     

     

      wheel1.attach(6);

    wheel2.attach(5);

     

    wheel1.write(2000); 

    wheel2.write(1000);

    delay(4000);

    wheel1.write(1458);  // set servo to mid-point

    wheel2.write(1418);

     

    }

     

     

    void drive_forward_short(){

     

     

    wheel1.attach(6);

    wheel2.attach(5);

     

    wheel1.write(2000); 

    wheel2.write(1000);

     

     

    delay(800);

     

     

    wheel1.write(1458);  // set servo to mid-point

    wheel2.write(1418);

     

    }

     

     

    void drive_backward_long(){

     

     

    wheel1.attach(6);

    wheel2.attach(5);

     

    wheel1.write(1000); 

    wheel2.write(2000);

     

    delay(4000);

     

    wheel1.write(1458);  // set servo to mid-point

    wheel2.write(1418);

     

     

     

     

    }

     

     

    void drive_backward_short(){

     

     

    wheel1.attach(6);

    wheel2.attach(5);

     

    wheel1.write(1000); 

    wheel2.write(2000);

     

     

    delay(800);

     

     

    wheel1.write(1458);  // set servo to mid-point

    wheel2.write(1418);

     

     

    }

     

     

     

     

    void turn_left(){

     

     

    wheel1.attach(6);

    wheel2.attach(5);

     

    wheel1.write(1000); 

    wheel2.write(1000);

     

    delay(150);

     

    wheel1.write(1458);  // set servo to mid-point

    wheel2.write(1418);

     

    }

     

     

    void turn_right(){

     

     

    wheel1.attach(6);

    wheel2.attach(5);

     

    wheel1.write(2000); 

    wheel2.write(2000);

     

    delay(150);

     

    wheel1.write(1458);  // set servo to mid-point

    wheel2.write(1418);

     

     

    }

     

     

    void camera_servo_up(){

     

     

    camera_servo1.attach(8);

    camera_servo2.attach(9);

     

    if (camera_servo1_mem_servo1>800 && camera_servo2_mem_servo2<2200)

    {

       camera_servo1_mem_servo1=camera_servo1_mem_servo1+30;

       camera_servo2_mem_servo2=camera_servo2_mem_servo2-30;

     

       camera_servo1.write(camera_servo1_mem_servo1);

       camera_servo2.write(camera_servo2_mem_servo2);

    }

     

     

    }

     

     

    void camera_servo_down(){

     

     

       camera_servo1.attach(8);

       camera_servo2.attach(9);

     

    if (camera_servo1_mem_servo1>800 && camera_servo2_mem_servo2<2200)

    {

     

       camera_servo1_mem_servo1=camera_servo1_mem_servo1-30;

       camera_servo2_mem_servo2=camera_servo2_mem_servo2+30;

     

       camera_servo1.write(camera_servo1_mem_servo1);

       camera_servo2.write(camera_servo2_mem_servo2);

    }

     

     

    }

     

     

    void light_saver() {

     

       light_saver_timer=millis();

    }

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • ntewinkel
    ntewinkel over 12 years ago in reply to roineust

    Hi Roi,

     

    I think the issue is with your delays:

      if (distance <=41 && distance >=27) delay(8500);

     

    delay makes the program stop and just sit there, and while it's doing that none of your other code runs (except interrupts, which may be what keeps the sound going).

     

    I'm not sure what the purpose of the delays are, but maybe you can do that in some other way that still allows the robot to respond to other things?

     

    Cheers,

    -Nico

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • roineust
    roineust over 12 years ago in reply to ntewinkel

    Hello Nico!

     

    The purpose of this section in the code, is that when the robot gets closer to the wall, the frequency of playback of the audio sample, will become higher. So the robot will say "Left" "Left" "Left"...etc or "Right" "Right" "Right"...etc at a higher or a lower frequency, according to the distance and direction of an obstacles on its sideways.

     

    What would be the best way to implement this functionality in the code, without casuing this delay problem?

     

    BTW, i had a problem when i was trying to implement the sections of the code, that deal with the ultra-sound sensor, when trying to implement it for 2 sensros and i was able to make only 1 sensor react to objects at various distances.

     

    Do you have any clue what am i doing wrong about it?

     

    Here is the original code, that i found here:

     

    http://www.instructables.com/id/Simple-Arduino-and-HC-SR04-Example/step3/Upload-the-sketch/

     

    And which on it, i tried to double many elements, so 2 sensors would be functional, but to no avail:

     

    Here is the code, after trying to adapt it to work with 2 sensors:

     

    /*

    HC-SR04 Ping distance sensor]

    VCC to arduino 5v GND to arduino GND

    Echo to Arduino pin 13 Trig to Arduino pin 12

    Red POS to Arduino pin 11

    Green POS to Arduino pin 10

    560 ohm resistor to both LED NEG and GRD power rail

    More info at: http://goo.gl/kJ8Gl

    Original code improvements to the Ping sketch sourced from Trollmaker.com

    Some code and wiring inspired by http://en.wikiversity.org/wiki/User:Dstaub/robotcar

    */

     

     

    #define trigPin 13

    #define echoPin 12

    #define trigPin1 7

    #define echoPin1 4

    //#define led 11

    //#define led2 10

     

     

    void setup() {

      Serial.begin (9600);

      pinMode(trigPin, OUTPUT);

      pinMode(echoPin, INPUT);

      pinMode(trigPin1, OUTPUT);

      pinMode(echoPin1, INPUT);

      //pinMode(led, OUTPUT);

      //pinMode(led2, OUTPUT);

    }

     

     

    void loop() {

      long duration, distance, duration1, distance1;

      digitalWrite(trigPin, LOW);  // Added this line

      delayMicroseconds(4); // Added this line

      digitalWrite(trigPin1, LOW);  // Added this line

      delayMicroseconds(4); // Added this line

      digitalWrite(trigPin, HIGH);

      //  delayMicroseconds(1000); - Removed this line

      delayMicroseconds(20); // Added this line

      digitalWrite(trigPin1, HIGH);

      //  delayMicroseconds(1000); - Removed this line

      delayMicroseconds(20); // Added this line

      digitalWrite(trigPin, LOW);

      digitalWrite(trigPin1, LOW);

      duration = pulseIn(echoPin, HIGH);

      duration1 = pulseIn(echoPin1, HIGH);

      distance = (duration/2) / 29.1;

      distance1 = (duration1/2) / 29.1;

      //if (distance < 4) {  // This is where the LED On/Off happens

       // digitalWrite(led,HIGH); // When the Red condition is met, the Green LED should turn off

    // digitalWrite(led2,LOW);

    //}

      //else {

       // digitalWrite(led,LOW);

       // digitalWrite(led2,HIGH);

    // }

      if (distance >= 200 || distance <= 0){

        Serial.println("Out of range LEFT");

      }

      else {

        Serial.println("LEFT");

        Serial.print(distance);

        Serial.println(" cm");

      }

     

       delay(1000);

     

      if (distance1 >= 200 || distance1 <= 0){

        Serial.println("Out of range RIGHT");

      }

      else {

        Serial.println("RIGHT");

        Serial.print(distance1);

        Serial.println(" cm");

      }

     

     

      delay(1000);

    }

     

     

     

    Thanks a lot,

    Roi.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • ntewinkel
    ntewinkel over 12 years ago in reply to roineust

    Hi Roi,

     

    I don't have time to dig into your code, sorry (lots of deadlines this week). Maybe try posting this as a new discussion (marked as a question) in the Arduino forum, where more people can look into it for you. (www.element14.com/.../arduino, click "Start a Discussion" on the bar beside the orange "Join this group" button).

     

    For an alternative to using delay, you could try something like millis() to keep track of time, as is done in this tutorial:

    http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay

     

    Or maybe the TimeAlarms library will help:

    http://www.pjrc.com/teensy/td_libs_TimeAlarms.html

     

    I'm wondering if you could set it to run the sound at desired intervals just using alarmRepeat.

     

    Cheers,

    -Nico

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • dr.akshay_1980@yahoo.com
    dr.akshay_1980@yahoo.com over 11 years ago

    hi Niko teWinkel,

    I want to know how to write firmware for chinese multimedia players(mp4/mp5 players) and make their binary files and how they are burn into the ROM from the manufacturer.

    How these files are able to boot these players including soc chips from chinese manufacturers like sunplus...ARM926ej  is generally used in these portable players...

    I want to customize these binary image files and want to play with these....kindly provide me players firmware knowledge and which is the development platform for these files?is it some kind of OS..?

    thanks in advance

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • ntewinkel
    ntewinkel over 11 years ago in reply to dr.akshay_1980@yahoo.com

    Hi Akshay,

     

    That sounds like a cool project, but I honestly have no idea how to do that, sorry.

    In general it would depend on the chip the manufacturer uses, but also without the source code I don't know if it's even possible to reverse engineer the firmware from a chip.

    And I don't even know where to refer you to get that kind of help, except maybe to try good ole Google.

     

    Cheers,

    -Nico

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
<>
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube