Basic exercise (2) ------------------ In this exercise, you will represent a forest which contains feeders for wild animals. The feeders have capacities (positive integers), which are stored in feeders.txt. This file contains as many numbers as there are feeders. The feeders are numbered, starting from 1. In the beginning, a feeder contains 0 units of food; a feeder can never contain more units of food than its capacity. There is a game warden in the system, who visits the feeders and refills them. He waits 2-5 seconds between visits, and adds 1-10 units of food into a randomly chosen feeder (of course, the capacity of the feeder cannot be exceeded). At the time of each visit, print the capacities of each feeder, and the amount of food in them. The warden makes 5 such visits in all, and then the program should stop. The forest has to be implemented using a ServerSocket, and the warden will make Socket connections to it. Exercise (3) ------------ The forest contains several deer. The deer will visit the feeders in random order (waiting 1-3 seconds between visits), and they will eat a given amount of food (the amount is different for each deer). If there is not enough food in the chosen feeder, the deer eats it all, and prints a message that he is still hungry; otherwise, he prints a message that he is happy. The deer make 5 visits to the feeders, then they exit. Exercise (4) ------------ Using an ObjectOutputStream, save the state of the forest (the capacity and the current amount of food of the feeders) into a file called forest.data when 10 seconds have passed from the start of the program. If this file exists when the program is started, load the forest data from it instead of using feeders.txt. Exercise (5) ------------ Change the program to use RMI instead of Sockets.