diff --git a/histogram.cpp b/histogram.cpp
index 1df7c99..fb1293d 100644
--- a/histogram.cpp
+++ b/histogram.cpp
@@ -1,50 +1,43 @@
 #include "histogram.h"
 
-vector <size_t>
-make_histogram(const vector<double>& numbers, size_t & bin_count, size_t & number_count, size_t & max_count) {
+vector<size_t> make_histogram(const vector<double> &numbers, size_t bin_count) {
     double min, max;
-    find_minmax(numbers, min, max);
-    double bin_size = (max - min) / bin_count;
-    vector<size_t> bins(bin_count);
-    max_count = bins[0];
-    for (size_t i = 0; i < number_count; i++){
+     bool res = false;
+    find_minmax(numbers, min, max, res);
+    double bin_size = ( max - min ) / bin_count;
+    vector<size_t> bins ( bin_count );
+    for (size_t i=0; i <  numbers.size(); i++ ){
         bool found = false;
-        for (size_t j = 0; (j < bin_count - 1) && !found; j++){
+        for (size_t j = 0; ( j < bin_count - 1 ) && !found; j++ ){
             auto lo = min + j * bin_size;
-            auto hi = min + (j + 1) * bin_size;
-            if ((lo <= numbers[i]) && (numbers[i] < hi)){
+            auto hi = min + ( j + 1 ) * bin_size;
+            if (lo <= numbers[i] && ( numbers[i] < hi )){
                 bins[j]++;
                 found = true;
             }
-            if (bins[j] > max_count){
-                max_count = bins[j];
-            }
-        }
-        if (!found){
-            bins[bin_count - 1]++;
-        }
-        if (bins[bin_count - 1] > max_count){
-            max_count = bins[bin_count - 1];
+            if ( !found ){
+            bins[bin_count-1]++;
         }
     }
     return bins;
 }
 
 void
-find_minmax(const vector<double>& numbers, double& min, double& max) {
-    if (!numbers.empty()) {
-        min = numbers[0];
-        max = numbers[0];
-    } else {
-        min = 0;
-        max = 0;
+find_minmax(const vector <double> &numbers, double &min, double &max, bool &res) {
+
+    if (numbers.size()==0){
+        res = true;
+        return;
     }
-    for (double x : numbers)
-    {
-        if (x < min){
+
+    min = numbers[0];
+    max = numbers[0];
+    for ( double x : numbers ){
+        if ( x < min ){
             min = x;
         }
-        else if (x > max){
+        }
+        else if ( x > max ){
             max = x;
         }
     }
diff --git a/histogram.h b/histogram.h
index 7e3aefa..b868509 100644
--- a/histogram.h
+++ b/histogram.h
@@ -6,9 +6,8 @@
 using namespace std;
 
 vector<size_t>
-make_histogram(const vector<double>& numbers, size_t & bin_count, size_t & number_count, size_t & max_count);
+make_histogram(const std::vector<double>& numbers, size_t bin_count);
 
 void
-find_minmax(const vector<double>& numbers, double& min, double& max);
-
+find_minmax(const vector <double> &numbers, double &min, double &max, bool &res);
 #endif // HISTOGRAM_H_INCLUDED
diff --git a/main.cpp b/main.cpp
index 387f577..243037f 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,20 +1,22 @@
 #include <iostream>
 #include <vector>
 #include "histogram.h"
+#include "text.h"
 #include "svg.h"
 #include "show_svg.h"
 #include <curl/curl.h>
+#include <sstream>
+#include <string>
+
 using namespace std;
 
 struct Input {
     vector<double> numbers;
     size_t bin_count{};
-    size_t number_count{};
-    size_t max_count{};
 };
 
-Input
-input_data(istream& stream, bool prompt) {
+Input input_data(istream& stream, bool prompt) {
+
     size_t number_count;
     if (prompt) {
         cerr << "Enter number count: ";
@@ -42,28 +44,51 @@ input_data(istream& stream, bool prompt) {
     return in;
 }
 
-int main(int argc, char* argv[])
-{
-    if (argc > 1) {
+size_t write_data(void* items, size_t item_size, size_t item_count, void* ctx) {
+    size_t data_size = item_size * item_count;
+    stringstream* buffer = reinterpret_cast<stringstream*>(ctx);
+    auto text = reinterpret_cast<const char*>(items);
+    buffer->write(text, data_size);
+    return data_size;
+}
+
+Input download(const string& address) {
+
+    stringstream buffer;
+
+    curl_global_init(CURL_GLOBAL_ALL);
+
         CURL* curl = curl_easy_init();
+
         if(curl) {
             CURLcode res;
-            curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
+            curl_easy_setopt(curl, CURLOPT_URL, address.c_str());
+            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
+            curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
             res = curl_easy_perform(curl);
+
             if (res != CURLE_OK) {
                 curl_easy_strerror(res);
                 exit(1);
             }
             curl_easy_cleanup(curl);
         }
+        return input_data(buffer, false);
+}
+
+
+
+
+int main(int argc, char* argv[]){
+
+    Input in;
+    if (argc > 1) {
+        in = download(argv[1]);
+    } else {
+        in = input_data(cin, true);
     }
 {
-     //curl_global_init(CURL_GLOBAL_ALL);
-    bool prompt = true;
-    auto in = input_data(cin, prompt);
-    vector<size_t> bins = make_histogram(in.numbers, in.bin_count, in.number_count, in.max_count);
-    show_histogram_svg(bins);
-    return 0;
-
+    auto bins = make_histogram(in.numbers, in.bin_count);
 
+    show_histogram_svg(bins);
 }