🎉 Exercism Research is now launched. Help Exercism, help science and have some fun at research.exercism.io 🎉
Avatar of dilmnqvovpnmlib

dilmnqvovpnmlib's solution

to Binary Search Tree in the C Track

Published at May 01 2021 · 0 comments
Instructions
Test suite
Solution

Insert and search for numbers in a binary tree.

When we need to represent sorted data, an array does not make a good data structure.

Say we have the array [1, 3, 4, 5], and we add 2 to it so it becomes [1, 3, 4, 5, 2] now we must sort the entire array again! We can improve on this by realizing that we only need to make space for the new item [1, nil, 3, 4, 5], and then adding the item in the space we added. But this still requires us to shift many elements down by one.

Binary Search Trees, however, can operate on sorted data much more efficiently.

A binary search tree consists of a series of connected nodes. Each node contains a piece of data (e.g. the number 3), a variable named left, and a variable named right. The left and right variables point at nil, or other nodes. Since these other nodes in turn have other nodes beneath them, we say that the left and right variables are pointing at subtrees. All data in the left subtree is less than or equal to the current node's data, and all data in the right subtree is greater than the current node's data.

For example, if we had a node containing the data 4, and we added the data 2, our tree would look like this:

  4
 /
2

If we then added 6, it would look like this:

  4
 / \
2   6

If we then added 3, it would look like this

   4
 /   \
2     6
 \
  3

And if we then added 1, 5, and 7, it would look like this

      4
    /   \
   /     \
  2       6
 / \     / \
1   3   5   7

Getting Started

Make sure you have read the "Guides" section of the C track on the Exercism site. This covers the basic information on setting up the development environment expected by the exercises.

Passing the Tests

Get the first test compiling, linking and passing by following the three rules of test-driven development.

The included makefile can be used to create and run the tests using the test task.

make test

Create just the functions you need to satisfy any compiler errors and get the test to fail. Then write just enough code to get the test to pass. Once you've done that, move onto the next test.

As you progress through the tests, take the time to refactor your implementation for readability and expressiveness and then go on to the next test.

Try to use standard C99 facilities in preference to writing your own low-level algorithms or facilities by hand.

Source

Josh Cheek https://twitter.com/josh_cheek

Submitting Incomplete Solutions

It's possible to submit an incomplete solution so you can see how others have completed the exercise.

test_binary_search_tree.c

#include "vendor/unity.h"
#include "../src/binary_search_tree.h"
#include <stdlib.h>
#include <stdbool.h>

#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))

void setUp(void)
{
}

void tearDown(void)
{
}

static void test_data_data_is_retained(void)
{
   int tree_data[] = { 4 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   TEST_ASSERT_NOT_NULL(tree);
   TEST_ASSERT_EQUAL_INT(4, tree->data);
   TEST_ASSERT_NULL(tree->left);
   TEST_ASSERT_NULL(tree->right);

   free_tree(tree);
}

static void test_data_smaller_number_at_left_node(void)
{
   TEST_IGNORE();               // delete this line to run test
   int tree_data[] = { 4, 2 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   TEST_ASSERT_NOT_NULL(tree);
   TEST_ASSERT_EQUAL_INT(4, tree->data);
   TEST_ASSERT_NOT_NULL(tree->left);
   TEST_ASSERT_NULL(tree->right);

   TEST_ASSERT_EQUAL_INT(2, tree->left->data);
   TEST_ASSERT_NULL(tree->left->left);
   TEST_ASSERT_NULL(tree->left->right);

   free_tree(tree);
}

static void test_data_same_number_at_left_node(void)
{
   TEST_IGNORE();
   int tree_data[] = { 4, 4 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   TEST_ASSERT_NOT_NULL(tree);
   TEST_ASSERT_EQUAL_INT(4, tree->data);
   TEST_ASSERT_NOT_NULL(tree->left);
   TEST_ASSERT_NULL(tree->right);

   TEST_ASSERT_EQUAL_INT(4, tree->left->data);
   TEST_ASSERT_NULL(tree->left->left);
   TEST_ASSERT_NULL(tree->left->right);

   free_tree(tree);
}

static void test_data_greater_number_at_right_node(void)
{
   TEST_IGNORE();
   int tree_data[] = { 4, 5 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   TEST_ASSERT_NOT_NULL(tree);
   TEST_ASSERT_EQUAL_INT(4, tree->data);
   TEST_ASSERT_NULL(tree->left);
   TEST_ASSERT_NOT_NULL(tree->right);

   TEST_ASSERT_EQUAL_INT(5, tree->right->data);
   TEST_ASSERT_NULL(tree->right->left);
   TEST_ASSERT_NULL(tree->right->right);

   free_tree(tree);
}

static void test_data_can_create_complex_tree(void)
{
   TEST_IGNORE();
   int tree_data[] = { 4, 2, 6, 1, 3, 5, 7 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   TEST_ASSERT_NOT_NULL(tree);
   TEST_ASSERT_EQUAL_INT(4, tree->data);
   TEST_ASSERT_NOT_NULL(tree->left);
   TEST_ASSERT_NOT_NULL(tree->right);

   TEST_ASSERT_EQUAL_INT(2, tree->left->data);
   TEST_ASSERT_NOT_NULL(tree->left->left);
   TEST_ASSERT_NOT_NULL(tree->left->right);

   TEST_ASSERT_EQUAL_INT(6, tree->right->data);
   TEST_ASSERT_NOT_NULL(tree->right->left);
   TEST_ASSERT_NOT_NULL(tree->right->right);

   TEST_ASSERT_EQUAL_INT(1, tree->left->left->data);
   TEST_ASSERT_NULL(tree->left->left->left);
   TEST_ASSERT_NULL(tree->left->left->right);

   TEST_ASSERT_EQUAL_INT(3, tree->left->right->data);
   TEST_ASSERT_NULL(tree->left->right->left);
   TEST_ASSERT_NULL(tree->left->right->right);

   TEST_ASSERT_EQUAL_INT(5, tree->right->left->data);
   TEST_ASSERT_NULL(tree->right->left->left);
   TEST_ASSERT_NULL(tree->right->left->right);

   TEST_ASSERT_EQUAL_INT(7, tree->right->right->data);
   TEST_ASSERT_NULL(tree->right->right->left);
   TEST_ASSERT_NULL(tree->right->right->right);

   free_tree(tree);
}

static void test_sorted_data_can_sort_single_number(void)
{
   TEST_IGNORE();
   int tree_data[] = { 2 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   int expected[] = { 2 };
   int *actual = sorted_data(tree);
   TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, ARRAY_SIZE(expected));

   free_tree(tree);
   free(actual);
}

static void
test_sorted_data_can_sort_if_second_number_is_smaller_than_first(void)
{
   TEST_IGNORE();
   int tree_data[] = { 2, 1 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   int expected[] = { 1, 2 };
   int *actual = sorted_data(tree);
   TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, ARRAY_SIZE(expected));

   free_tree(tree);
   free(actual);
}

static void test_sorted_data_can_sort_if_second_number_is_same_as_first(void)
{
   TEST_IGNORE();
   int tree_data[] = { 2, 2 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   int expected[] = { 2, 2 };
   int *actual = sorted_data(tree);
   TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, ARRAY_SIZE(expected));

   free_tree(tree);
   free(actual);
}

static void
test_sorted_data_can_sort_if_second_number_is_greater_than_first(void)
{
   TEST_IGNORE();
   int tree_data[] = { 2, 3 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   int expected[] = { 2, 3 };
   int *actual = sorted_data(tree);
   TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, ARRAY_SIZE(expected));

   free_tree(tree);
   free(actual);
}

static void test_sorted_data_can_sort_complex_tree(void)
{
   TEST_IGNORE();
   int tree_data[] = { 2, 1, 3, 6, 7, 5 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   int expected[] = { 1, 2, 3, 5, 6, 7 };
   int *actual = sorted_data(tree);
   TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, ARRAY_SIZE(expected));

   free_tree(tree);
   free(actual);
}

int main(void)
{
   UnityBegin("test/test_binary_search_tree.c");

   RUN_TEST(test_data_data_is_retained);
   RUN_TEST(test_data_smaller_number_at_left_node);
   RUN_TEST(test_data_same_number_at_left_node);
   RUN_TEST(test_data_greater_number_at_right_node);
   RUN_TEST(test_data_can_create_complex_tree);
   RUN_TEST(test_sorted_data_can_sort_single_number);
   RUN_TEST(test_sorted_data_can_sort_if_second_number_is_smaller_than_first);
   RUN_TEST(test_sorted_data_can_sort_if_second_number_is_same_as_first);
   RUN_TEST(test_sorted_data_can_sort_if_second_number_is_greater_than_first);
   RUN_TEST(test_sorted_data_can_sort_complex_tree);

   return UnityEnd();
}

src/binary_search_tree.c

#include "binary_search_tree.h"

// typedef struct node node_t;

// struct node {
//    node_t *right;
//    node_t *left;
//    int data;
// };

node_t *build_tree(int *tree_data, size_t tree_data_len) {
    node_t *n = malloc(sizeof(node_t) * 1);
    n->data = tree_data[0];

    // 長さが 2 以上の tree_data が入力された時の処理
    if (tree_data_len > 1) {
        for (int i = 1; i < (int)tree_data_len; i++) {
            // printf("=========\n");
            // printf("value %d\n", tree_data[i]);
            if (n->data >= tree_data[i]) {
                add_left_node(n, tree_data[i]);
            } else {
                add_right_node(n, tree_data[i]);
            }
        }
    }
    return n;
}

void add_left_node(node_t *target_node, int data) {
    // printf("In add_left_node, data %d, target_node->data %d\n", data, target_node->data);
    if (target_node->left == NULL) {
        node_t *l = malloc(sizeof(node_t) * 1);
        l->data = data;
        target_node->left = l;
    } else {
        // left node に追加
        if (target_node->left->data >= data) {
            add_left_node(target_node->left, data); // 第一引数が間違えていた。
        } else {
            add_right_node(target_node->left, data); // 第一引数が間違えていた。
        }
    }
}

void add_right_node(node_t *target_node, int data) {
    // printf("In add_right_node, data %d\n", data);
    if (target_node->right == NULL) {
        node_t *r = malloc(sizeof(node_t) * 1);
        r->data = data;
        target_node->right = r;
    } else {
        // left node に追加
        // printf("In add_right_node else, data %d, target_node->right->data %d\n", data, target_node->right->data);
        if (target_node->right->data < data) {
            add_right_node(target_node->right, data); // 第一引数が間違えていた。どっちの Node を起点に生やすか。
        } else {
            add_left_node(target_node->right, data); // 第一引数が間違えていた。
        }
    }
}

void free_tree(node_t * tree) {
    if (tree == NULL) {
        return;
    }
    // free_tree(tree->left);
    // free_tree(tree->right);
    // free(tree);
}

int *sorted_data(node_t * tree) {
    int index = 0;

    return get_sort_data(NULL, &index, tree);
}

int *append(int *array, int *index, int element) {
    if (array == NULL) {
        array = malloc(sizeof(int) * 1);
        // 参照渡しの変数をインクリメントする際は、以下の記述をする必要がある。
        // (*index)++
        array[(*index)++] = element;
    } else {
        array = realloc(array, sizeof(int) * (*index + 1));
        array[(*index)++] = element;
    }
    return array;
}

int *get_sort_data(int *data, int *index, node_t *n) {
    if (n == NULL) {
        return data;
    }

    if (n->left != NULL) {
        data = get_sort_data(data, index, n->left);
    }

    data = append(data, index, n->data);


    if (n->right != NULL) {
        data = get_sort_data(data, index, n->right);
    }

    return data;
}

src/binary_search_tree.h

#ifndef BINARY_SEARCH_TREE_H
#define BINARY_SEARCH_TREE_H

#include <ctype.h>
#include <errno.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

typedef struct node node_t;

struct node {
   node_t *right;
   node_t *left;
   int data;
};

node_t *build_tree(int *tree_data, size_t tree_data_len);
void free_tree(node_t * tree);
int *sorted_data(node_t * tree);
void add_left_node(node_t *target_node, int data);
void add_right_node(node_t *target_node, int data);
int *get_sort_data(int *data, int *index, node_t *n);
int *append(int *array, int *index, int element);

#endif

test/test_binary_search_tree.c

#include "vendor/unity.h"
#include "../src/binary_search_tree.h"
#include <stdlib.h>
#include <stdbool.h>

#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))

void setUp(void)
{
}

void tearDown(void)
{
}

static void test_data_data_is_retained(void)
{
   int tree_data[] = { 4 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   TEST_ASSERT_NOT_NULL(tree);
   TEST_ASSERT_EQUAL_INT(4, tree->data);
   TEST_ASSERT_NULL(tree->left);
   TEST_ASSERT_NULL(tree->right);

   free_tree(tree);
}

static void test_data_smaller_number_at_left_node(void)
{
   // TEST_IGNORE();               // delete this line to run test
   int tree_data[] = { 4, 2 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   TEST_ASSERT_NOT_NULL(tree);
   TEST_ASSERT_EQUAL_INT(4, tree->data);
   TEST_ASSERT_NOT_NULL(tree->left);
   TEST_ASSERT_NULL(tree->right);

   TEST_ASSERT_EQUAL_INT(2, tree->left->data);
   TEST_ASSERT_NULL(tree->left->left);
   TEST_ASSERT_NULL(tree->left->right);

   free_tree(tree);
}

static void test_data_same_number_at_left_node(void)
{
   // TEST_IGNORE();
   int tree_data[] = { 4, 4 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   TEST_ASSERT_NOT_NULL(tree);
   TEST_ASSERT_EQUAL_INT(4, tree->data);
   TEST_ASSERT_NOT_NULL(tree->left);
   TEST_ASSERT_NULL(tree->right);

   TEST_ASSERT_EQUAL_INT(4, tree->left->data);
   TEST_ASSERT_NULL(tree->left->left);
   TEST_ASSERT_NULL(tree->left->right);

   free_tree(tree);
}

static void test_data_greater_number_at_right_node(void)
{
   // TEST_IGNORE();
   int tree_data[] = { 4, 5 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   TEST_ASSERT_NOT_NULL(tree);
   TEST_ASSERT_EQUAL_INT(4, tree->data);
   TEST_ASSERT_NULL(tree->left);
   TEST_ASSERT_NOT_NULL(tree->right);

   TEST_ASSERT_EQUAL_INT(5, tree->right->data);
   TEST_ASSERT_NULL(tree->right->left);
   TEST_ASSERT_NULL(tree->right->right);

   free_tree(tree);
}

static void test_data_can_create_complex_tree(void)
{
   // TEST_IGNORE();
   int tree_data[] = { 4, 2, 6, 1, 3, 5, 7 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   TEST_ASSERT_NOT_NULL(tree);
   TEST_ASSERT_EQUAL_INT(4, tree->data);
   TEST_ASSERT_NOT_NULL(tree->left);
   TEST_ASSERT_NOT_NULL(tree->right);

   TEST_ASSERT_EQUAL_INT(2, tree->left->data);
   TEST_ASSERT_NOT_NULL(tree->left->left);   //
   TEST_ASSERT_NOT_NULL(tree->left->right);  // ここらへんでエラーが出てる

   TEST_ASSERT_EQUAL_INT(6, tree->right->data);
   TEST_ASSERT_NOT_NULL(tree->right->left);
   TEST_ASSERT_NOT_NULL(tree->right->right);

   TEST_ASSERT_EQUAL_INT(1, tree->left->left->data);
   TEST_ASSERT_NULL(tree->left->left->left);
   TEST_ASSERT_NULL(tree->left->left->right);

   TEST_ASSERT_EQUAL_INT(3, tree->left->right->data);
   TEST_ASSERT_NULL(tree->left->right->left);
   TEST_ASSERT_NULL(tree->left->right->right);

   TEST_ASSERT_EQUAL_INT(5, tree->right->left->data);
   TEST_ASSERT_NULL(tree->right->left->left);
   TEST_ASSERT_NULL(tree->right->left->right);

   TEST_ASSERT_EQUAL_INT(7, tree->right->right->data);
   TEST_ASSERT_NULL(tree->right->right->left);
   TEST_ASSERT_NULL(tree->right->right->right);

   free_tree(tree);
}

static void test_sorted_data_can_sort_single_number(void)
{
   // TEST_IGNORE();
   int tree_data[] = { 2 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   int expected[] = { 2 };
   int *actual = sorted_data(tree);
   TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, ARRAY_SIZE(expected));

   free_tree(tree);
   free(actual);
}

static void
test_sorted_data_can_sort_if_second_number_is_smaller_than_first(void)
{
   // TEST_IGNORE();
   int tree_data[] = { 2, 1 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   int expected[] = { 1, 2 };
   int *actual = sorted_data(tree);
   TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, ARRAY_SIZE(expected));

   free_tree(tree);
   free(actual);
}

static void test_sorted_data_can_sort_if_second_number_is_same_as_first(void)
{
   // TEST_IGNORE();
   int tree_data[] = { 2, 2 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   int expected[] = { 2, 2 };
   int *actual = sorted_data(tree);
   TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, ARRAY_SIZE(expected));

   free_tree(tree);
   free(actual);
}

static void
test_sorted_data_can_sort_if_second_number_is_greater_than_first(void)
{
   // TEST_IGNORE();
   int tree_data[] = { 2, 3 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   int expected[] = { 2, 3 };
   int *actual = sorted_data(tree);
   TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, ARRAY_SIZE(expected));

   free_tree(tree);
   free(actual);
}

static void test_sorted_data_can_sort_complex_tree(void)
{
   // TEST_IGNORE();
   int tree_data[] = { 2, 1, 3, 6, 7, 5 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   int expected[] = { 1, 2, 3, 5, 6, 7 };
   int *actual = sorted_data(tree);
   TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, ARRAY_SIZE(expected));

   free_tree(tree);
   free(actual);
}

int main(void)
{
   UnityBegin("test/test_binary_search_tree.c");

   RUN_TEST(test_data_data_is_retained);
   RUN_TEST(test_data_smaller_number_at_left_node);
   RUN_TEST(test_data_same_number_at_left_node);
   RUN_TEST(test_data_greater_number_at_right_node);
   RUN_TEST(test_data_can_create_complex_tree);
   RUN_TEST(test_sorted_data_can_sort_single_number);
   RUN_TEST(test_sorted_data_can_sort_if_second_number_is_smaller_than_first);
   RUN_TEST(test_sorted_data_can_sort_if_second_number_is_same_as_first);
   RUN_TEST(test_sorted_data_can_sort_if_second_number_is_greater_than_first);
   RUN_TEST(test_sorted_data_can_sort_complex_tree);

   return UnityEnd();
}

tests.out

ELF>@@Ê@8	@"!@@@øø888xQxQ ˆ]ˆ] ˆ] ˆÐ ˜]˜] ˜] ððTTTDDPåtd G G GQåtdRåtdˆ]ˆ] ˆ] xx/lib64/ld-linux-x86-64.so.2GNUGNUU³.¸Z&‘
û‡.>겛&"wëd R4› <$,ª C"libc.so.6__stack_chk_failputcharrealloclongjmp_setjmpmalloc__cxa_finalize__libc_start_mainfreeGLIBC_2.4GLIBC_2.2.5_ITM_deregisterTMCloneTable__gmon_start___ITM_registerTMCloneTableii
iui	sˆ] �] Ð` ` Ø_ à_ è_ ð_ ø_  _ ¨_ °_ ¸_ À_ È_ 	Ð_ 
HƒìH‹uY H…ÀtÿÐHƒÄÃÿ5
Y ÿ%Y @ÿ%
Y héàÿÿÿÿ%Y héÐÿÿÿÿ%úX héÀÿÿÿÿ%òX hé°ÿÿÿÿ%êX hé ÿÿÿÿ%âX hé�ÿÿÿÿ%ÚX hé€ÿÿÿÿ%òX f�1íI‰Ñ^H‰âHƒäðPTL�Z:H�
ã9H�=Ì8ÿ¦X ôDH�=ÉX UH�ÁX H9øH‰åtH‹zX H…Àt
]ÿàf.„]Ã@f.„H�=‰X H�5‚X UH)þH‰åHÁþH‰ðHÁè?HÆHÑþtH‹AX H…Àt]ÿàf„]Ã@f.„€=IX u/Hƒ=X UH‰åtH‹=X è
ÿÿÿèHÿÿÿÆ!X ]ÀóÃfDUH‰å]éfÿÿÿUH‰åHƒì H‰}èH‰uà¿èœþÿÿH‰EøH‹Eè‹H‹Eø‰PHƒ}à†�ÇEôëoH‹Eø‹P‹EôH˜H�…H‹EèHȋ9Â|&‹EôH˜H�…H‹EèHЋH‹Eø‰ÖH‰Çè9ë$‹EôH˜H�…H‹EèHЋH‹Eø‰ÖH‰Ç蔃EôH‹Eà9Eô|ˆH‹EøÉÃUH‰åHƒì H‰}è‰uäH‹EèH‹@H…Àu&¿èÓýÿÿH‰EøH‹Eø‹Uä‰PH‹EèH‹UøH‰Pë<H‹EèH‹@‹@9EäH‹EèH‹@‹Uä‰ÖH‰Çè™ÿÿÿëH‹EèH‹@‹Uä‰ÖH‰Çè�ÉÃUH‰åHƒì H‰}è‰uäH‹EèH‹H…Àu%¿èSýÿÿH‰EøH‹Eø‹Uä‰PH‹EèH‹UøH‰ë9H‹EèH‹‹@9Eä~H‹EèH‹‹Uä‰ÖH‰Çè�ÿÿÿëH‹EèH‹‹Uä‰ÖH‰Çèÿÿÿ�ÉÃUH‰åH‰}øHƒ}ø]ÃUH‰åHƒì H‰}èdH‹%(H‰Eø1ÀÇEôH‹UèH�EôH‰ƿè¶H‹MødH3%(tè‚üÿÿÉÃUH‰åHƒì H‰}øH‰uð‰UìHƒ}øu5¿è|üÿÿH‰EøH‹Eð‹�HH‹Uð‰
H˜H�…H‹EøH‹Eì‰ëKH‹Eð‹ƒÀH˜H�…H‹EøH‰ÖH‰Çè?üÿÿH‰EøH‹Eð‹�HH‹Uð‰
H˜H�…H‹EøH‹Eì‰H‹EøÉÃUH‰åHƒì H‰}øH‰uðH‰UèHƒ}èuH‹EøëxH‹EèH‹@H…ÀtH‹EèH‹PH‹MðH‹EøH‰ÎH‰Çè·ÿÿÿH‰EøH‹Eè‹PH‹MðH‹EøH‰ÎH‰ÇèùþÿÿH‰EøH‹EèH‹H…ÀtH‹EèH‹H‹MðH‹EøH‰ÎH‰ÇèoÿÿÿH‰EøH‹EøÉÃUH‰åHƒìH‰}øH‹Eø¶<tH‹Eø¶<~H‹Eø¶¾À‰ÇèûÿÿënH‹Eø¶<
u¿\èëúÿÿ¿rèáúÿÿëMH‹Eø¶<
u¿\èÊúÿÿ¿nèÀúÿÿë,¿\è´úÿÿ¿xèªúÿÿH‹Eø¶H¾À¾H‰Çè�ÉÃUH‰åHƒì H‰}èH‹EèH‰EøHƒ}øtëH‹EøH‰Çè1ÿÿÿHƒEøH‹Eø¶„Àuä�ÉÃUH‰åHƒì H‰}è‰uäH‹EèH‰EøHƒ}ø„ÃéœH‹Eø¶<tH‹Eø¶<~H‹Eø¶¾À‰ÇèúÿÿënH‹Eø¶<
u¿\èîùÿÿ¿rèäùÿÿëMH‹Eø¶<
u¿\èÍùÿÿ¿nèÃùÿÿë,¿\è·ùÿÿ¿xè­ùÿÿH‹Eø¶H¾À¾H‰ÇèHƒEøH‹Eø¶„ÀtH‹UøH‹EèH)ÂH‰Ð9Eä‡Bÿÿÿ�ÉÃUH‰åHƒìH‰}ø‰uô‹Eôƒà…À„«�}ô‘…�¿'è7ùÿÿHƒ}ø~Hƒ}ø~
H‹Eø‰Çèùÿÿë_Hƒ}ø
u¿\èùÿÿ¿rèùÿÿëBHƒ}ø
u¿\èîøÿÿ¿nèäøÿÿë%¿\èØøÿÿ¿xèÎøÿÿH‹Eø¾H‰ÇèD¿'è³øÿÿëSH‹EøH‰ÇèJëE‹Eôƒà …ÀtH‹EøH‰Çèjë-¿0è�øÿÿ¿xèwøÿÿ‹EôƒàÀ¾ÐH‹Eø‰ÖH‰Çèå�ÉÃUH‰åHƒì H‰}èH‹EèH‰EøHƒ}èy¿-è6øÿÿH÷]øH‹EøH‰Çè�ÉÃUH‰åHƒì H‰}èHÇEøëH‹UøH‰ÐHÁàHÐHÀH‰EøH‹EèºH÷uøHƒø	wØH‹EèºH÷uøH‰ÁHºÍÌÌÌÌÌÌÌH‰ÈH÷âHÁêH‰ÐHÁàHÐHÀH)ÁH‰ʉЃÀ0¾À‰ÇèŸ÷ÿÿH‹EøHºÍÌÌÌÌÌÌÌH÷âH‰ÐHÁèH‰EøHƒ}øu—�ÉÃUH‰åHƒì H‰}è‰ðˆEä¶EäˆEû¶Eû<vQÆEûëK¶EûƒèˆEû¾EûÁàH‹Uè‰ÁHÓêH‰Ѓà‰Eüƒ}ü	‹EüƒÀ0¾À‰Çè÷ÿÿë‹EüƒÀ7¾À‰Çè÷ÿÿ€}û¯�ÉÃUH‰åHƒì H‰}èH‰u฀H‰EøÇEôëDH‹EøH#EèH…Àt%H‹EøH#EàH…Àt¿1è¹öÿÿë¿0è­öÿÿë
¿Xè¡öÿÿHÑmøƒEôƒ}ô~¶�ÉÃUH‰åHƒì`óE¬dH‹%(H‰Eø1ÀóE¬óE¼fïÀ.E¼v¿-èVöÿÿóM¼ói4WÁóE¼fïÀ.E¼zfïÀ.E¼uH�=4è’ûÿÿékóE¼.E¼{H�=ç3èvûÿÿéOóM¼ó#4TÁ.)4–Àƒð„ÀtH�=¹3èDûÿÿéÇEÀÇEÈHÇEàHÇEèóì3.E¼†‘óÚ3óEÔëóM¼óÊ3óYÁóE¼ƒmÈ
‹3ó*Àó
«3ó^Á.E¼wÊëóMÔó–3óYÁóEԃmÈóE¼(ÈóYMԋ>3ó*À.ÁwÊóE¼óYEÔóE¼é‹3ó*ÀóM¼.Ȇ�ó13óEØëóE¼ó
!3ó^ÁóE¼ƒEÈ
‹Ú2ó*Àó
3óYÁóM¼.ÈwÆëóMØóé2óYÁóE؃EÈóE¼ó^E؋�2ó*È.ÁwÍóE¼ó^EØóE¼ëtó¢2óEÜóE¼ó,À‰EÀó*EÀóM¼ó\È(ÁóE¼ë)‹UÀ‰ÐÁàÐÀ‰EÀóMÜóe2óYÁóE܃mÈ‹29EÀ|ÌóE¼óYEÜóE¼óE¼óXÀó,ÀƒÀ‰ÂÁêÐÑø‰EċEăà…Àt ó*EÄó\E¼.2z
.2uƒmÄ‹EÀEċ°19EÄ|
‹©1‰EăEȃ}È‹š1ºýÿÿÿ)‰Ð9EÈ|‹EÈ÷Øë	‹1ƒè‰E̋EÌEÈë‹Mĺgfff‰È÷êÁú‰ÈÁø)‰ЉEăm̃}Ì~'‹Mĺgfff‰È÷êÁú‰ÈÁø)‰ÐÁàÐÀ)Á‰ʅÒt´ÇEÐëT‹Mĺgfff‰È÷êÁú‰ÈÁø)‰ÐÁàÐÀ)Á‰ʉЍH0‹EЍP‰UЉÊH˜ˆTà‹Mĺgfff‰È÷êÁú‰ÈÁø)‰ЉEă}Äu¦‹ẼÀ9EÐ|›ë*‹EÐ;EÌu
¿.è‹òÿÿƒmЋEÐH˜¶Dà¾À‰Çèsòÿÿƒ}ÐЃ}È„²¿eèYòÿÿƒ}Èy¿-èIòÿÿ÷]Èë
¿+è:òÿÿÇEÐëT‹MȺgfff‰È÷êÁú‰ÈÁø)‰ÐÁàÐÀ)Á‰ʉЍH0‹EЍP‰UЉÊH˜ˆTà‹MȺgfff‰È÷êÁú‰ÈÁø)‰ЉEȃ}Èu¦ƒ}Ð~ ëƒmЋEÐH˜¶Dà¾À‰Çè·ñÿÿƒ}Ðâ�H‹EødH3%(tè¬ñÿÿÉÃUH‰åHƒìH‰}øH‰uðH‹EøH‰Çèïöÿÿ¿:ètñÿÿH‹EðH‰Çè
ùÿÿ¿:è^ñÿÿH‹ÿJ H‰ÇèÀöÿÿ¿:èEñÿÿ�ÉÃUH‰åHƒìH‰}øH‹ÏJ H‹UøH‰ÖH‰Çè†ÿÿÿH�=A,è…öÿÿ¿:è
ñÿÿ�ÉÃUH‰åH‹äJ H…ÀtH‹ÈJ HƒÀH‰½J ëEH‹¼J H…Àu'H‹�J H‹iJ H‰ÖH‰Çè$ÿÿÿH�=Ú+è#öÿÿëH‹yJ HƒÀH‰nJ HÇsJ HÇpJ ¿
è~ðÿÿ�]ÃUH‰åHƒìH‰}øHƒ}øtrH�=š+èÍõÿÿH‹J H…ÀtNH�=	.èµõÿÿH‹íI H‰Çè¦õÿÿH‹æI H…ÀtH�=ò-èŽõÿÿH‹ÎI H‰ÇèõÿÿH�=@+èsõÿÿH‹EøH‰Çègõÿÿ�ÉÃUH‰åHƒìH‰}øH‰uðH�=+èHõÿÿHƒ}øt"¿'èÆïÿÿH‹EøH‰Çè+õÿÿ¿'è°ïÿÿëH�=Û*èõÿÿH�=æ*èõÿÿHƒ}ðt"¿'è…ïÿÿH‹EðH‰Çèêôÿÿ¿'èoïÿÿëH�=š*èÒôÿÿ�ÉÃUH‰åHƒì H‰}øH‰uð‰UìH�=„*è°ôÿÿHƒ}øt'¿'è.ïÿÿ‹UìH‹Eø‰ÖH‰ÇèÊôÿÿ¿'èïÿÿëH�=>*èvôÿÿH�=I*èjôÿÿHƒ}ðt'¿'èèîÿÿ‹UìH‹Eð‰ÖH‰Çè„ôÿÿ¿'èÍîÿÿëH�=ø)è0ôÿÿ�ÉÃUH‰åHƒì H‰}øH‰uðH‰UèH‰MàH‹EøH;Eðu¸ëiHƒ}øu+H‹EèH‰Çè>ýÿÿH�=¹*èåóÿÿH‹EàH‰Çèíýÿÿ¸ë7Hƒ}ðu+H‹EèH‰ÇèýÿÿH�=§*è³óÿÿH‹EàH‰Çè»ýÿÿ¸ë¸ÉÃUH‰åHƒì0H‰}øH‰uðH‰UèH‰MàL‰EØH‹åG H…À…“H‹ÝG H…À…ƒH‹EðH3EèH#EøH…ÀtsH‹EØH‰Çè�üÿÿH�=)è4óÿÿH‹UðH‹EøH‰ÖH‰Çè±öÿÿH�=ô(èóÿÿH‹UèH‹EøH‰ÖH‰Çè’öÿÿH‹EàH‰Çè
ýÿÿHÇZG ¾H�=^G è¹íÿÿ�ÉÃUH‰åHƒì0H‰}øH‰uðH‰UèH‰MàD‰EÜH‹#G H…À…„H‹G H…ÀuxH‹EøH;EðtoH‹EàH‰ÇèÖûÿÿH�=Q(è}òÿÿ‹UÜH‹Eø‰ÖH‰Çè�óÿÿH�=?(è`òÿÿ‹UÜH‹Eð‰ÖH‰ÇèsóÿÿH‹EèH‰ÇèWüÿÿHǧF ¾H�=«F èíÿÿ�ÉÃUH‰åHƒì@H‰}èH‰uà‰UÜH‰MÐL‰EÈD‰MØÇEüH‹fF H…À…eH‹^F H…À…UH‹EèH;Eàu‹E܃à…À…@H‹EèH;EàuÇEü‹E؃à…Àt8H‹EàH;Eè~‹E܃à…ÀtÇEüH‹EàH;Eè}O‹E܃à…ÀtEÇEüë<H‹UàH‹EèH9Âv‹E܃à…ÀtÇEüH‹UàH‹EèH9Âs‹E܃à…ÀtÇEüƒ}ü„¨H‹EÈH‰ÇènúÿÿH�=é&èñÿÿ‹UØH‹Eà‰ÖH‰Çè(òÿÿ‹E܃à…ÀtH�=â&èîðÿÿ‹E܃à…ÀtH�=ì&èØðÿÿ‹E܃à…ÀtH�=î&èÂðÿÿ‹UØH‹Eè‰ÖH‰ÇèÕñÿÿH‹EÐH‰Çè¹úÿÿHÇ	E ¾H�=
E èhëÿÿ�ë�ÉÃUH‰åHƒì`H‰}ÈH‰uÀ‰U¼H‰M°L‰E¨D‰M¸‹E¼‰E܋E¸ƒà‰EàÇEäH‹¶D H…À…PH‹®D H…À…@ƒ}¼u@H‹E¨H‰ÇèiùÿÿH�=¤&èðÿÿH‹E°H‰ÇèúÿÿHÇhD ¾H�=lD èÇêÿÿH‹EÈH;EÀ„ïH‹M°H‹U¨H‹uÀH‹EÈH‰Çè•ûÿÿ…À„³HÇD ¾H�="D è}êÿÿ‹Eàƒøt1ƒøtSƒøumH‹EȶH¾ÀH‰EèH‹EÀ¶H¾ÀH‰EðÇEäëmH‹EÈ·H¿ÀH‰EèH‹EÀ·H¿ÀH‰EðÇEäëFH‹EÈH‹H‰EèH‹EÀH‹H‰EðÇEäë'H‹EȋH˜H‰EèH‹EÀ‹H˜H‰EðÇEäÇEà�H‹EèH;Eð„Ï‹E¸ƒà …Àt8ƒ}àw2HÇEø‹EàÁàH‹Uø‰ÁHÓâH‰ÐHƒèH‰EøH‹EøH!EèH‹EøH!EðH‹E¨H‰Çèé÷ÿÿH�=Ì$è�îÿÿ‹E¼+E܃è‰ÀH‰ÇèéðÿÿH�=E$èqîÿÿ‹U¸H‹Eè‰ÖH‰Çè„ïÿÿH�=3$èTîÿÿ‹U¸H‹Eð‰ÖH‰ÇègïÿÿH‹E°H‰ÇèKøÿÿHÇ›B ¾H�=ŸB èúèÿÿƒ}u‹EäHEȋEäHEÀƒ}Üt‹E܍Pÿ‰U܅À…Rþÿÿë�ë�ÉÃUH‰åóEìóMèóUäóMèó‡&TÁ.�&–Àƒð„ÀtLóMäóf&TÁ.l&–Àƒð„Àt+fïÀ.Eè—Àƒð‰ÂfïÀ.Eä—À1ЄÀt
¸é°óEè.Eè{óEä.Eä{
¸é�óEäó\EèóEüfïÀ.EüvóMüóÑ%WÁóEüfïÀ.EìvóMìó²%WÁóEìóEü.Eüz3óMüó¢%TÁ.¨%wóEü.Eì—Àƒð„Àt¸ë¸]ÃUH‰åHƒìPH‰}ØH‰uЉUÌH‰MÀL‰E¸D‰MȋẺEìH‹EØH‰EðH‹EÐH‰EøH‹é@ H…À…ˆH‹á@ H…À…xƒ}ìu@H‹E¸H‰ÇèœõÿÿH�=×"èCìÿÿH‹EÀH‰ÇèKöÿÿHÇ›@ ¾H�=Ÿ@ èúæÿÿH‹EØH;EЄ'H‹MÀH‹U¸H‹uÐH‹EØH‰ÇèÈ÷ÿÿ…À„ñHÇQ@ ¾H�=U@ è°æÿÿH‹EøóH‹EðóH‹Eðóó”$óYÁ(Ëè½ýÿÿ…À…‘H‹E¸H‰ÇèÞôÿÿH�=Á!è…ëÿÿ‹EÌ+Eìƒè‰ÀH‰ÇèÞíÿÿH�=:!èfëÿÿH‹Eð‹‰E´óE´èRïÿÿH�=&!èGëÿÿH‹Eø‹‰E´óE´è3ïÿÿH‹EÀH‰Çè<õÿÿHÇŒ? ¾H�=�? èëåÿÿƒ}ÈuHƒEðHƒEø‹Eì�Pÿ‰Uì…À…ÿÿÿë�ë�ÉÃUH‰åHƒì óEüóMøóUôH‰}èH‰uàH‹,? H…À… H‹$? H…À…�óMôóEø‹Eü(Ñ(ȉEðóEðèœüÿÿ…ÀumH‹EàH‰ÇèÁóÿÿH�=< èhêÿÿ‹Eø‰EðóEðèWîÿÿH�=+ èLêÿÿ‹Eô‰EðóEðè;îÿÿH‹EèH‰ÇèDôÿÿHÇ”> ¾H�=˜> èóäÿÿ�ÉÃUH‰åHƒìpóE¬H‰} H‰u˜‰U¨dH‹%(H‰Eø1ÀH�ò H‰EÐH�÷ H‰EØH�þ H‰EàH�ù H‰Eè‹E¨ƒàH‰EÈHƒ}È”À¶ÀH‰E¸‹E¨Ñè‰ÀH‰EÀH‹> H…À…²H‹ú= H…À…¢ƒ}¨‡ö‹E¨H�…H�Õ!‹HcÐH�È!HÐÿàóM¬óþ!TÁ."–Àƒð„ÀtóE¬fïÉ.Áv¸ë¸H˜H‰E¸é óM¬ó¸!TÁ.¾!–Àƒð„ÀtfïÀ.E¬v¸ë¸H˜H‰E¸ëaóE¬.E¬šÀ¶ÀH‰E¸ëLóM¬ód!TÁ.j!wóE¬.E¬z¸ë¸H˜H‰E¸ëHÇEÀH�ºH‰EАH‹E¸H;EÈ„�H‹E˜H‰Çè™ñÿÿH�=è@èÿÿHƒ}ÈuH�=:è-èÿÿH‹EÀH‹DÅÐH‰ÇèèÿÿH�=ïèèÿÿ‹E¬‰E”óE”èÿëÿÿH‹E H‰ÇèòÿÿHÇX< ¾H�=\< è·âÿÿ�H‹EødH3%(tèbâÿÿÉÃUH‰åHƒì0H‰}øH‰uðH‰UèH‰MàL‰EØD‰MÔH‹	< H…À…NH‹< H…À…>‹Eԃà…ÀtLH‹EèH;Eð~!H‹UèH‹EðH)ÂH‰ÐH9Eø’À¶ÀH‰½; ënH‹UðH‹EèH)ÂH‰ÐH9Eø’À¶ÀH‰œ; ëMH‹UèH‹EðH9Âv!H‹UèH‹EðH)ÂH‰ÐH9Eø’À¶ÀH‰n; ëH‹UðH‹EèH)ÂH‰ÐH9Eø’À¶ÀH‰M; H‹F; H…À„ŒH‹EØH‰ÇèðÿÿH�=*è¶æÿÿH‹Eø‹UԉÖH‰ÇèÉçÿÿH�=mè™æÿÿ‹UÔH‹Eð‰ÖH‰Çè¬çÿÿH�=[è|æÿÿ‹UÔH‹Eè‰ÖH‰Çè�çÿÿH‹EàH‰ÇèsðÿÿHÇÃ: ¾H�=Ç: è"áÿÿ�ÉÃUH‰åHƒì`H‰}ÈH‰uÀH‰U¸‰M´L‰E¨L‰M ‹E´‰E܋Eƒà‰EàÇEäH‹s: H…À…H‹k: H…À…üƒ}´u@H‹E H‰Çè&ïÿÿH�=aèÍåÿÿH‹E¨H‰ÇèÕïÿÿHÇ%: ¾H�=): è„àÿÿH‹EÀH;E¸„«H‹M¨H‹U H‹u¸H‹EÀH‰ÇèRñÿÿ…À„oHÇÛ9 ¾H�=ß9 è:àÿÿ‹Eàƒøt1ƒøtSƒøumH‹EÀ¶H¾ÀH‰EèH‹E¸¶H¾ÀH‰EðÇEäëmH‹EÀ·H¿ÀH‰EèH‹E¸·H¿ÀH‰EðÇEäëFH‹EÀH‹H‰EèH‹E¸H‹H‰EðÇEäë'H‹EÀ‹H˜H‰EèH‹E¸‹H˜H‰EðÇEäÇEà�‹Eƒà…ÀtLH‹EðH;Eè~!H‹UðH‹EèH)ÂH‰ÐH9EÈ’À¶ÀH‰ñ8 ënH‹UèH‹EðH)ÂH‰ÐH9EÈ’À¶ÀH‰Ð8 ëMH‹UðH‹EèH9Âv!H‹UðH‹EèH)ÂH‰ÐH9EÈ’À¶ÀH‰¢8 ëH‹UèH‹EðH)ÂH‰ÐH9EÈ’À¶ÀH‰�8 H‹z8 H…À„æ‹Eƒà …Àt8ƒ}àw2HÇEø‹EàÁàH‹Uø‰ÁHÓâH‰ÐHƒèH‰EøH‹EøH!EèH‹EøH!EðH‹E H‰ÇèíÿÿH�=è¨ãÿÿH‹EȋuH‰Çè½äÿÿH�=Éè�ãÿÿ‹E´+E܃è‰ÀH‰ÇèæåÿÿH�=BènãÿÿH‹Eè‹uH‰ÇèƒäÿÿH�=2èSãÿÿH‹Eð‹uH‰ÇèhäÿÿH‹E¨H‰ÇèLíÿÿHÇœ7 ¾H�= 7 èûÝÿÿƒ}u‹EäHEÀ‹EäHE¸ƒ}Üt‹E܍Pÿ‰U܅À…–ýÿÿë�ë�ÉÃUH‰åHƒì0H‰}èH‰uàH‰UØH‰MÐH‹97 H…À…ãH‹17 H…À…ÓHƒ}ètdHƒ}àt]ÇEüë0‹UüH‹EèHж‹MüH‹EàHȶ8ÂtHÇà6 �ë=ƒEü‹UüH‹EèHж„Àu¿‹UüH‹EàHж„Àu®ëH‹EèH;EàtHÇ 6 H‹™6 H…ÀtHH‹EÐH‰ÇèfëÿÿH‹UàH‹EèH‰ÖH‰Çè¢ìÿÿH‹EØH‰ÇèìÿÿHÇ^6 ¾H�=b6 è½Üÿÿ�ÉÃUH‰åHƒì@H‰}èH‰uà‰UÜH‰MÐL‰EÈH‹(6 H…À…ñH‹ 6 H…À…áHƒ}ètlHƒ}àteÇEüë0‹UüH‹EèHж‹MüH‹EàHȶ8ÂtHÇÏ5 �ëGƒEü‹Eü;EÜs;‹UüH‹EèHж„Àu·‹UüH‹EàHж„Àu¦ëH‹EèH;EàtHLJ5 ë�H‹}5 H…ÀtKH‹EÈH‰ÇèJêÿÿ‹UÜH‹MàH‹EèH‰ÎH‰ÇèìÿÿH‹EÐH‰ÇèïêÿÿHÇ?5 ¾H�=C5 èžÛÿÿ�ÉÃUH‰åHƒìPH‰}ØH‰uЉUÌH‰MÀL‰E¸D‰MÈÇEèÇEìHÇEðHÇEøH‹ç4 H…À…äH‹ß4 H…À…Ôƒ}Ìu@H‹E¸H‰ÇèšéÿÿH�=ÕèAàÿÿH‹EÀH‰ÇèIêÿÿHÇ™4 ¾H�=�4 èøÚÿÿH‹EØH;EЄƒH‹MÀH‹U¸H‹uÐH‹EØH‰ÇèÆëÿÿ…ÀtHÇS4 ¾H�=W4 è²Úÿÿƒ}ÈtH‹EØH‰Eð‹EìH�ÅH‹EÐHÐH‹H‰Eøƒ}Èu‹EìH�ÅH‹EØHÐH‹H‰EðHƒ}ðtdHƒ}øt]ÇEèë0‹UèH‹EðHж‹MèH‹EøHȶ8ÂtHǼ3 �ë=ƒEè‹UèH‹EðHж„Àu¿‹UèH‹EøHж„Àu®ëH‹EðH;EøtHÇ|3 H‹u3 H…ÀtdH‹E¸H‰ÇèBèÿÿƒ}ÌvH�=èãÞÿÿ‹EìH‰ÇèDáÿÿH‹UøH‹EðH‰ÖH‰ÇèaéÿÿH‹EÀH‰ÇèÍèÿÿHÇ3 ¾H�=!3 è|ÙÿÿƒEì‹Eì;EÌ‚Èþÿÿë�ë�ÉÃUH‰åHƒìPH‰}ØH‰uЉỦMÈL‰EÀL‰M¸H‹EØH‰EðH‹EÐH‰Eø‹EȉEèH‹¹2 H…À…ÍH‹±2 H…À…½ƒ}ètƒ}Ìu@H‹E¸H‰ÇèfçÿÿH�=¡è
ÞÿÿH‹EÀH‰ÇèèÿÿHÇe2 ¾H�=i2 èÄØÿÿH‹EØH;EЄfH‹MÀH‹U¸H‹uÐH‹EØH‰Çè’éÿÿ…À„0HÇ2 ¾H�=2 èzØÿÿ‹ẺEìéêH‹Eð¶H‹Eø¶8„ÊH‹E¸H‰Çè»æÿÿH�=¶èbÝÿÿƒ}ÈvH�=ŒèPÝÿÿ‹EÈ+Eèƒè‰ÀH‰Çè©ßÿÿH�=wè1Ýÿÿ‹EÌ+Eìƒè‰ÀH‰ÇèŠßÿÿH�=æèÝÿÿH‹Eð¶¶À¾AH‰ÇèÞÿÿH�=ÎèïÜÿÿH‹Eø¶¶À¾AH‰ÇèüÝÿÿH‹EÀH‰ÇèàæÿÿHÇ01 ¾H�=41 è�×ÿÿHƒEðHƒEø‹Eì�Pÿ‰Uì…À…ÿÿÿƒ}uH‹EØH‰Eð‹Eè�Pÿ‰Uè…À…Ûþÿÿë�ë�ÉÃUH‰åH‰}ø‰ðˆEô¶Eôƒøtƒøt,ƒøu;H‹Eøˆ[0 H�T0 ë9H‹Eøf‰G0 H�@0 ë%H‹EøH‰30 H�,0 ëH‹Eø‰ 0 H�0 ]ÃUH‰åóEüóEüó0 H�ú/ ]ÃUH‰åHƒìH‰}øH‰uðH‹90 H…À…ÞH‹10 H…À…ÎH‹Ù/ H‹UðH‰ÖH‰Çè�äÿÿH�=Kè�ÛÿÿHƒ}ø„…¿:è	ÖÿÿH‹²/ H…ÀtNH�=¶èbÛÿÿH‹š/ H‰ÇèSÛÿÿH‹“/ H…ÀtH�=Ÿè;ÛÿÿH‹{/ H‰Çè,ÛÿÿH�=íè ÛÿÿH‹Eø¶< t
¿ èšÕÿÿH‹EøH‰ÇèÿÚÿÿHÇc/ ¾H�=g/ èÂÕÿÿ�ÉÃUH‰åHƒìH‰}øH‰uðH‹8/ H…ÀuqH‹4/ H…ÀueH‹à. H‹UðH‰ÖH‰Çè—ãÿÿH�=Wè–ÚÿÿHƒ}øt ¿:èÕÿÿ¿ è
ÕÿÿH‹EøH‰ÇèoÚÿÿHÇÛ. ¾H�=×. è2Õÿÿ�ÉÃUH‰åHƒìH‰}øH‰uðH‹h. H‹UðH‰ÖH‰ÇèãÿÿH�=ºèÚÿÿHƒ}øt ¿:èœÔÿÿ¿ è’ÔÿÿH‹EøH‰Çè÷Ùÿÿ¿
è|Ôÿÿ�ÉÃUH‰åHƒì H‰}øH‰uð‰UìH‹EðH‰. ‹EìH˜H‰. H‹. HƒÀH‰. HÇâ- HÇß- H�=. è;Ôÿÿ…ÀuèjH‹EøÿÐH�=õ- è Ôÿÿ…ÀuèVèëâÿÿ�ÉÃUH‰åH‰}øH‹EøH‰|- �]ÃUH‰åH‰}øH‹EøH‰f- HÇc- HÇp- HÇm- HÇj- HÇg- HÇd- HÇa- HÇ- HÇ- �]ÃUH‰å¿
èRÓÿÿH�=Ëè·Øÿÿ¿
è<ÓÿÿH‹ý, H‰ÇèÒÚÿÿH�=¾è’ØÿÿH‹ê, H‰Çè·ÚÿÿH�=«èwØÿÿH‹×, H‰ÇèœÚÿÿH�= è\Øÿÿ¿
èáÒÿÿH‹ª, H…ÀuH�=î
è:ØÿÿëH�=è
è,Øÿÿ¿
è±ÒÿÿH‹z, ]ÃUH‰å�]ÃUH‰å�]ÃUH‰åHƒì dH‹%(H‰Eø1ÀÇEôH�Eô¾H‰ÇèåÓÿÿH‰EèHƒ}èu¾H�=¬èßûÿÿH‹Eè‹@H˜A¸¹ºH‰ƿèÃäÿÿH‹EèH‹@H…Àt¾H�={è›ûÿÿH‹EèH‹H…Àt¾H�=^è~ûÿÿH‹EèH‰ÇèÕÿÿ�H‹EødH3%(tèÝÑÿÿÉÃUH‰åHƒì dH‹%(H‰Eø1ÀÇEðÇEôH�Eð¾H‰ÇèÓÿÿH‰EèHƒ}èu¾#H�=Öè	ûÿÿH‹Eè‹@H˜A¸¹$ºH‰ƿèíãÿÿH‹EèH‹@H…Àu¾%H�=’èÅúÿÿH‹EèH‹H…Àt¾&H�=ˆè¨úÿÿH‹EèH‹@‹@H˜A¸¹(ºH‰ƿèˆãÿÿH‹EèH‹@H‹@H…Àt¾)H�=<è\úÿÿH‹EèH‹@H‹H…Àt¾*H�=è;úÿÿH‹EèH‰ÇèÓÓÿÿ�H‹EødH3%(tèšÐÿÿÉÃUH‰åHƒì dH‹%(H‰Eø1ÀÇEðÇEôH�Eð¾H‰ÇèÌÑÿÿH‰EèHƒ}èu¾5H�=“èÆùÿÿH‹Eè‹@H˜A¸¹6ºH‰ƿèªâÿÿH‹EèH‹@H…Àu¾7H�=Oè‚ùÿÿH‹EèH‹H…Àt¾8H�=EèeùÿÿH‹EèH‹@‹@H˜A¸¹:ºH‰ƿèEâÿÿH‹EèH‹@H‹@H…Àt¾;H�=ù
èùÿÿH‹EèH‹@H‹H…Àt¾<H�=Ø
èøøÿÿH‹EèH‰Çè�Òÿÿ�H‹EødH3%(tèWÏÿÿÉÃUH‰åHƒì dH‹%(H‰Eø1ÀÇEðÇEôH�Eð¾H‰Çè‰ÐÿÿH‰EèHƒ}èu¾GH�=P
èƒøÿÿH‹Eè‹@H˜A¸¹HºH‰ƿègáÿÿH‹EèH‹@H…Àt¾IH�=
è?øÿÿH‹EèH‹H…Àu¾JH�=ïè"øÿÿH‹EèH‹‹@H˜A¸¹LºH‰ƿèáÿÿH‹EèH‹H‹@H…Àt¾MH�=¸èØ÷ÿÿH‹EèH‹H‹H…Àt¾NH�=˜è¸÷ÿÿH‹EèH‰ÇèPÑÿÿ�H‹EødH3%(tèÎÿÿÉÃUH‰åHƒì@dH‹%(H‰Eø1ÀÇEÐÇEÔÇEØÇEÜÇEàÇEäÇEèH�EоH‰Çè&ÏÿÿH‰EÈHƒ}Èu¾YH�=íè ÷ÿÿH‹Eȋ@H˜A¸¹ZºH‰ƿèàÿÿH‹EÈH‹@H…Àu¾[H�=©èÜöÿÿH‹EÈH‹H…Àu¾\H�=Œè¿öÿÿH‹EÈH‹@‹@H˜A¸¹^ºH‰ƿèŸßÿÿH‹EÈH‹@H‹@H…Àu¾_H�=@èsöÿÿH‹EÈH‹@H‹H…Àu¾`H�=èRöÿÿH‹EÈH‹‹@H˜A¸¹bºH‰ƿè3ßÿÿH‹EÈH‹H‹@H…Àu¾cH�=Õ
èöÿÿH‹EÈH‹H‹H…Àu¾dH�=µ
èèõÿÿH‹EÈH‹@H‹@‹@H˜A¸¹fºH‰ƿèÄÞÿÿH‹EÈH‹@H‹@H‹@H…Àt¾gH�=t
è”õÿÿH‹EÈH‹@H‹@H‹H…Àt¾hH�=O
èoõÿÿH‹EÈH‹@H‹‹@H˜A¸¹jºH‰ƿèLÞÿÿH‹EÈH‹@H‹H‹@H…Àt¾kH�=ý	èõÿÿH‹EÈH‹@H‹H‹H…Àt¾lH�=Ù	èùôÿÿH‹EÈH‹H‹@‹@H˜A¸¹nºH‰ƿèÖÝÿÿH‹EÈH‹H‹@H‹@H…Àt¾oH�=‡	è§ôÿÿH‹EÈH‹H‹@H‹H…Àt¾pH�=c	èƒôÿÿH‹EÈH‹H‹‹@H˜A¸¹rºH‰ƿèaÝÿÿH‹EÈH‹H‹H‹@H…Àt¾sH�=	è3ôÿÿH‹EÈH‹H‹H‹H…Àt¾tH�=ðèôÿÿH‹EÈH‰Çè¨Íÿÿ�H‹EødH3%(tèoÊÿÿÉÃUH‰åHƒì dH‹%(H‰Eø1ÀÇEðH�Eð¾H‰Çè¨ËÿÿH‰EàÇEôH‹EàH‰ÇèZÍÿÿH‰EèH‹uèH�EôHƒìjA¹A¸�¹ºH‰ÇèÕÞÿÿHƒÄH‹EàH‰ÇèÍÿÿH‹EèH‰Çè»Éÿÿ�H‹EødH3%(tèÆÉÿÿÉÃUH‰åHƒì0dH‹%(H‰Eø1ÀÇEèÇEìH�Eè¾H‰ÇèøÊÿÿH‰EØÇEðÇEôH‹EØH‰Çè£ÌÿÿH‰EàH‹uàH�EðHƒìjA¹A¸�¹ºH‰ÇèÞÿÿHƒÄH‹EØH‰ÇèTÌÿÿH‹EàH‰ÇèÉÿÿ�H‹EødH3%(tèÉÿÿÉÃUH‰åHƒì0dH‹%(H‰Eø1ÀÇEèÇEìH�Eè¾H‰ÇèAÊÿÿH‰EØÇEðÇEôH‹EØH‰ÇèìËÿÿH‰EàH‹uàH�EðHƒìjA¹A¸ž¹ºH‰ÇègÝÿÿHƒÄH‹EØH‰Çè�ËÿÿH‹EàH‰ÇèMÈÿÿ�H‹EødH3%(tèXÈÿÿÉÃUH‰åHƒì0dH‹%(H‰Eø1ÀÇEèÇEìH�Eè¾H‰ÇèŠÉÿÿH‰EØÇEðÇEôH‹EØH‰Çè5ËÿÿH‰EàH‹uàH�EðHƒìjA¹A¸­¹ºH‰Çè°ÜÿÿHƒÄH‹EØH‰ÇèæÊÿÿH‹EàH‰Çè–Çÿÿ�H‹EødH3%(tè¡ÇÿÿÉÃUH‰åHƒìPdH‹%(H‰Eø1ÀÇEÀÇEÄÇEÈÇEÌÇEÐÇEÔH�EÀ¾H‰Çè·ÈÿÿH‰E°ÇEàÇEäÇEèÇEìÇEðÇEôH‹E°H‰ÇèFÊÿÿH‰E¸H‹u¸H�EàHƒìjA¹A¸»¹ºH‰ÇèÁÛÿÿHƒÄH‹E°H‰Çè÷ÉÿÿH‹E¸H‰Çè§Æÿÿ�H‹EødH3%(tè²ÆÿÿÉÃUH‰åH�=è·òÿÿºÅH�5#H�=ãóÿÿèÿñÿÿºÆH�5,H�=šôÿÿèçñÿÿºÇH�5<H�=ÅõÿÿèÏñÿÿºÈH�5LH�=ðöÿÿè·ñÿÿºÉH�5\H�=øÿÿèŸñÿÿºÊH�5lH�=¨ûÿÿè‡ñÿÿºËH�5|H�=9üÿÿèoñÿÿºÌH�5¬H�=ØüÿÿèWñÿÿºÍH�5ÔH�=wýÿÿè?ñÿÿºÎH�5H�=þÿÿè'ñÿÿè;òÿÿ]Ãf„AWAVI‰×AUATL�%f UH�-f SA‰ýI‰öL)åHƒìHÁýè'ÅÿÿH…ít 1Û„L‰úL‰öD‰ïAÿÜHƒÃH9ÝuêHƒÄ[]A\A]A^A_Ðf.„óÃHƒìHƒÄÃOKPASSFAILIGNORENULL.  Expected  Was  to be greater than  to be less than or equal to  Element  Byte  Memory Mismatch. Values Not Within Delta  You Asked Me To Compare Nothing, Which Was Pointless. Expected pointer to be NULL Actual pointer was NULLNot InfinityNegative InfinityNaNDeterminateInvalid Float TraitUnity Shorthand Support DisabledUnity Floating Point DisabledUnity Double Precision DisabledUnity 64-bit Support Disabled----------------------- Tests  Failures  Ignored Function  Argument 0naninf=Þÿÿ=ÞÿÿƒÞÿÿƒÞÿÿÂÞÿÿÂÞÿÿ×Þÿÿ×ÞÿÿINFO€–˜@B€ÿÿÿÿÿ€?ùP A?¬Å'7 Expected Non-NULL Expected NULLtest/test_binary_search_tree.ctest_data_data_is_retainedtest_data_smaller_number_at_left_nodetest_data_same_number_at_left_nodetest_data_greater_number_at_right_nodetest_data_can_create_complex_treetest_sorted_data_can_sort_single_numbertest_sorted_data_can_sort_if_second_number_is_smaller_than_firsttest_sorted_data_can_sort_if_second_number_is_same_as_firsttest_sorted_data_can_sort_if_second_number_is_greater_than_firsttest_sorted_data_can_sort_complex_tree;@`¿ÿÿXà¿ÿÿ€ð¿ÿÿ(úÀÿÿ˜·Áÿÿ¸8ÂÿÿØ´ÂÿÿøÃÂÿÿÃÿÿ8°ÃÿÿXKÄÿÿxñÄÿÿ˜-Åÿÿ¸ÆÿÿØ%Çÿÿø]ÇÿÿÈÿÿ8�ÈÿÿXðÈÿÿxæÍÿÿ˜>Îÿÿ¸yÎÿÿØÏÿÿø�Ïÿÿ"Ðÿÿ8ÄÐÿÿXXÑÿÿxÒÿÿ˜ÍÒÿÿ¸nÔÿÿØ	×ÿÿø;ØÿÿÚÿÿ8àÚÿÿX0Ýÿÿx±Þÿÿ˜âÿÿ¸ãÿÿØ5äÿÿølæÿÿƒèÿÿ8ñèÿÿXéÿÿxêÿÿ˜¡êÿÿ¸ëÿÿØ‘ëÿÿø§ëÿÿ ìÿÿ8ØìÿÿXßìÿÿxæìÿÿ˜µíÿÿ¸øîÿÿØ;ðÿÿø{ñÿÿ	#õÿÿ8	ÌõÿÿX	ƒöÿÿx	:÷ÿÿ˜	ñ÷ÿÿ¸	àøÿÿØ	ðùÿÿø	`úÿÿ@
zRx�À½ÿÿ+zRx�$½ÿÿ€FJw€?;*3$"DX½ÿÿ\Z¾ÿÿ½A†C
¸|÷¾ÿÿ�A†C
|œX¿ÿÿ|A†C
w¼´¿ÿÿA†C
JÜ£¿ÿÿMA†C
Hüпÿÿ A†C
›PÀÿÿ›A†C
–<ËÀÿÿ¦A†C
¡\QÁÿÿ<A†C
w|mÁÿÿèA†C
ãœ5ÂÿÿA†C
¼%Ãÿÿ8A†C
sÜ=ÃÿÿªA†C
¥üÇÃÿÿzA†C
u!ÄÿÿoA†C
j<pÄÿÿöA†C
ñ\FÉÿÿXA†C
S|~Éÿÿ;A†C
vœ™ÉÿÿŒA†C
‡¼ÊÿÿˆA†C
ƒÜmÊÿÿ•A†C
�üâÊÿÿ¢A†C
�dËÿÿ”A†C
�<ØËÿÿÂA†C
½\zÌÿÿ³A†C
®|
Íÿÿ¡A†C
œœŽÎÿÿ›A†C
–¼	Ñÿÿ2A†C
-ÜÒÿÿÓA†C
ÎüÎÓÿÿÒA†C
Í€ÔÿÿPA†C
K<°Öÿÿ�A†C
|\ØÿÿWA†C
R|HÛÿÿA†C
	œ6ÜÿÿA†C
¼5Ýÿÿ7A†C
2ÜLßÿÿA†C
üCáÿÿnA†C
i‘áÿÿA†C
Z<�áÿÿA†C
ü\qâÿÿ�A†C
‹|áâÿÿfA†C
aœ'ãÿÿŠA†C
…¼‘ãÿÿA†C
Q܇ãÿÿyA†C
tüàãÿÿ¸A†C
³xäÿÿA†C
B<_äÿÿA†C
B\FäÿÿÏA†C
Ê|õäÿÿCA†C
>œæÿÿCA†C
>¼;çÿÿ@A†C
;Ü[èÿÿ¨A†C
£üãëÿÿ©A†C
¤lìÿÿ·A†C
²<íÿÿ·A†C
²\šíÿÿ·A†C
²|1îÿÿïA†C
êœïÿÿA†C
D¼ðïÿÿeB�BŽE �B(ŒH0†H8ƒM@r8A0A(B BBBðÿÿÐh
„Aˆ] �] õþÿo˜ð¸
Ĉ_ ¨ÀÀ	ûÿÿoþÿÿoÐÿÿÿoðÿÿo´ùÿÿo˜] –¦¶ÆÖæö` GCC: (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0,Q,^k�(,K ø3
Z-nQGŠ[VIUint�Œ^ä�^ƒPØBØõ½öWû} ü}ýý}oþ} vÿ}(	}0	V}8	Ä}@	�}H	V}P	}X	>M`	
Sh	˜Wp	±Wt	Üex	Ð4€	_I‚	#Yƒ	«iˆ	à%p�	-{˜	.{ 	&/{¨	-0{°	42Š¸	¹3WÀ	F5oÄ
šõ MÞ¡M„¢S9¦W•ƒiBƒB
h×?­@FA‡S¿ˆSO‰S|}àBfŸÐ" Wq¡^î4=Î=~=ûWŠ[�Ð
›œ�û[�‘hM[�‘`n[=‘XWÆN�0
 œßèN�‘hMN�‘`ƒNW‘\ôH�ã	MœÉH=‘XMIW‘dÍ?Ô	œIÉ?=‘hî.X	|œ¡-.=‘Xû.W‘Ts	#r1=‘hæ×�œù-=‘XûW‘Tó$l!=‘h;=½œÔ�‘XcŠ‘Pn=‘hP�iW‘dékÿnk�(Z×8OHHV�€kýkH{HëV¾È!·2	'-×(·@#
){H	int
·Ù-ΆÞHG
ÞŠ[IUŒOä�O$P
$<
09ØHËfÞ
N˜hñ
^™
iøh	jÿ�
k·
„°ŽH—�Oÿ“”
ª¢”Ÿ
º;	È0
ÊXêÊ
ÚØõj½ö·û üýýoþ vÿ(
0
V8
Ä@
�H
VP
X
>¢`

¨h
˜·p
±·t
Üx
Ðê€
_ø‚
#®ƒ
«¾ˆ
à%�
-˜
. 
&/¨
-0°
42C¸
¹3·À
F5ÄÄšõ ¢Þ¡¢„¢¨9¦·qê$¾Hj$ÔHh×?Ô­@ÔFAÔ+	‡¨¿	ˆ¨O	‰¨ª{06ñƒ¦ö
%¥‰	z$!0
"³$¼(SAB@DH¥‘b
’iž7
¦ñ¡ð÷	‹ÊŽ ¯	`†©·
ðöñ¬JÔê•ú€S“ò"U·
Jñ»|g>$®¿[
|Á+
c
Ãý
šÄý
úÆý
Çý
äɪ 
;ʪ(
"˪0
ó̪8
ͪ@
fΪH
ÔÃPlØ�+B
77˜B!™BIšBz	›B¤
�B.žB
ŸB
 B+	@` +ÈH
¸G"	ÀA+îH
ÞS#	ÃA_$	ÈA+%H
k%	ÍAê	'î	ÔA{(È	ÙA+uH

ep)u	àA+ŸH
�£	*Ÿ	ëA+ÉH
¹è+É	B+óH
ãÆ	,ó	 B+H


-	8B+GH	
7£.G	HBB/%	RB³0ó	`B+›H
‹¼1›	€B+ÅH6
µ•
2Å	 B+ïH
ߨ3ï	àB+	H
		ê4		C2
6î	C+X	H
H	~7X		 C§
8ó	0C+—	H
‡	Ç
9—		BC+Á	H
±	Þ:Á		HC+ë	H
Û	Ž;ë		`C›=	€Cw>	°Cƒ?	àC�@	D+Y
H
I
8AY
	 D+ƒ
H
s
yBƒ
	8D=Cu	@DK
DG	PDG	EG	`DFu	pDŒ4i8Žni16�yi32�„i64’Ÿf•0^šñ
	(` —6·@3¸œp&Ç2yœ– Ñ	&ý‘h[
 ±2œÄ Ñ	 ý‘h!V'2Šœ $‘h Ôý‘` ¾‘\!ŠýÁ1fœM"msgýý‘h 6ýµ‘`!Rí11�œŠ"msgíý‘h 6íµ‘`!Ó
Ë00œÇ"msgËý‘h 6˵‘`#ö¶ù0œù"num¶7‘lÿ$#œù£/nœA
"numœÅ‘h Ý
œY‘d!ÇKŒ-œ	 _	Kù‘H †
Lù‘@ HMi‘¼ Ni‘¸"msgOý‘° ePµ‘¨ ¾Qˆ‘pS	‘`êT	‘hU^‘XäV^‘\å!ÈüU+7œÄ _	üù‘H †
ýÄ‘@ þi‘¼"msgÿý‘° eµ‘¨ ¾ˆ‘¸%i^‘X%j^‘\�ý‘`%actý‘hý!Ü
Ô6*œB _	Ôý‘X †
Õý‘P HÖi‘L"msg×ý‘@ eص‘¸%iÚ^‘l!è­()œª _	­ý‘X †
®ý‘P"msg¯ý‘H e°µ‘@%i²^‘l!ª5Ñ%WœÅ Î5µ‘¸ _	6ù‘° †
7ù‘¨ 8i‘¤"msg9ý‘˜ e:µ‘� j;²‘ ¾<ˆ‘>^‘LH?ñ‘PÚ@ñ‘T&¶&SMUº‘XBVº‘`&(2+
’º‘h!â
P$�œ> ε‘h _	Å‘` †
Å‘X"msg	ý‘P e
µ‘H j²‘D!Â8"PœÜ †
8Õ‘œ"msg9ý‘� e:µ‘ˆ j;V‘˜O
=Ü‘@
>º‘¸æ?º‘¨G@º‘°ýìH!O%.!ÒœV Î%Õ‘l _	&Õ‘h †
'Õ‘d"msg(ý‘X e)µ‘P!û
õ[Óœ _	õ‘H †
ö‘@ ÷i‘¼"msgøý‘° eùµ‘¨ ¾úˆ‘¸ü^‘\[	ý‘`‚
þ‘hÕ'@î·)2œe ÎîÊ‘\ _	îÊ‘X †
îÊ‘T[ðÊ‘l!ásŽ›œq _	sù‘¸ †
tù‘° ui‘¬"msgvý‘  ewµ‘˜ jx²‘¨ ¾yˆ‘{^‘LH|ñ‘PÚ}ñ‘T&s—M’º‘XB“º‘`&72+
¸º‘h!	Eí¡œú ™EÅ‘X †
FÅ‘P /Gü‘L"msgHý‘@ eIµ‘¸ jJ²‘HL·‘l!½0:³œd _	0Å‘h †
1Å‘`"msg2ý‘X e3µ‘P j4²‘L!¿xœΠ+
Å‘h _	Å‘` †
Å‘X"msgý‘P eµ‘H(Zù·ä”œ- _	ùù‘h †
úù‘` eûµ‘X"msgüý‘P)¶
ØB¢œy _	Øý‘h †
Ùý‘` HÚi‘\)r½­•œ¶ _	½ý‘h †
½ý‘`)~
¦%ˆœä"msg¦ý‘h*µ
Ž™Œœ)¬†^;œ, 6†µ‘h)l
[Xœi Æ[ý‘h 6[µ‘`!Ú	ÁöœÃ ÝÁå‘œ£Ⱦ	¸D.É�	´D
Ê�	°D‰ÍÚ‘¬&Òt	å„‘°%nå„‘´Ýæ·‘¸„ç·‘¼§ç·‘@%bufèÑP+Œ{}óÚ‘D+«� 	üÚ‘H&:t}
Ú‘L$ÓH!.ž¡oœ, +
žµ‘X ‰žµ‘PO ª‘h%i¡„‘d!3„'zœ‡ ‰„µ‘X „+‘T‘lx‡$‘k!Ïq}ªœÄ ‰qµ‘X	sª‘h!>
bE8œ nbÅ‘X‰dª‘h!Š/5
œ> ‰/Å‘h j/²‘d!	M蜊 +		ý‘X H	i‘T%pchý‘h,�€<œÄ-+	€ý‘X.pch‚ý‘h/nNk¦œ0pchNý‘h:	F0nø3
P	×8OHHV�€kýkH{HëV¾È!·2	'-×(·@#
){H	intÙ-ɆÙHGŠ[IUŒOä�O·"H
*P*<9ØH˜hç°ŽH—�Oÿ“Z¢”eØõ½ö·û$ ü$ýý$oþ$ vÿ$(
$0
V$8
Ä$@
�$H
V$P
$X
>>`

Dh
˜·p
±·t
Üüx
Ðà€
_î‚
#Jƒ
«Zˆ
à%�
-"˜
." 
&/"¨
-0"°
42D¸
¹3·À
F5`Äšõ >Þ¡>„¢D9¦·
†*ZH*pHh×?p­@pFAp1	‡D¿	ˆDO	‰Dçƒ/ö
%¥‰	z$!0
"³$¼(SAB@DH¥‘b
’ç»Pg>$Áî
c
Ù
šÄ™
úÆ™
Ç™
äÉp 
;Êp(
"Ëp0
óÌp8
Íp@
fÎpH
Ô¾PlØP1ú7˜!™Išz	›¤
�.ž
Ÿ
 |$�Hf
Ÿq"
 ·q
¡Oî­4ÞÎÞ~Þû·¢´Á·@œ³?ïœZÔ¶Z‘°É·Þ‘ _	¹Z‘P†
ºj‘¨·jH·Ú¥Z>·œÆÔ¨‘XÉ©Þ‘H_	«‘`†
¬j‘Pž–£=·œÔ™‘XÉšÞ‘H_	œ‘`†
�j‘P̈ì<·œrÔ‹‘XɌޑH_	Ž‘`†
�j‘PhyC<©œÈÔ|È‘`É}Þ‘P_	È‘d†
€j‘X·ØHOS›8¨œÔV‘@ÉWÞ‘¸·#HqA[7@œ]ÔD‘`ÉEÞ‘X
/6Cœ—Ô2‘`É3Þ‘XBÕ4CœÑÔ ‘`É!Þ‘X™4Ïœ	ÔÈ‘dÉÞ‘X�ÿ3œ˜ø3œ%$>$>:;II:;
:;I8	
:;I8
:;I!I/
<4:;I?<4:;I?<.?:;'I@–B:;I:;I4:;I.?:;'@—B.?:;'@–B4:;I.?:;'I@–B%:;II!I/$>:;
:;I8:;	$>
&II

:;I8:;<4:;I?<4:;I?<:;I'>I:;(>I:;:;!4G:;4:;I:;
:;I4:;I.?:;'I@–B.?:;'@—B :;I!.?:;'@–B":;I#.?:;'I@—B$&%4:;I&'.:;'I@—B(.:;'I@–B).:;'@–B*.?:;'@–B+,.?:;'@–B-:;I.4:;I/.:;'@–B0:;I%:;II!I/$>:;
:;I8:;	$>
I&I

:;I8:;<4:;I?<4:;I?<>I:;(:;!.?:;'I@–B.:;'@–B4:;I.?:;'@—BVÖû
src/usr/include/x86_64-linux-gnu/bits/usr/lib/gcc/x86_64-linux-gnu/7/include/usr/includebinary_search_tree.ctypes.hstddef.hlibio.hstdio.htime.hbinary_search_tree.h	
ó×˭“ó&z$J
�K0æÉן	ºz.óO+M>æ»ן
¬z.åA+?>ƒ^0ºåvKZ/uÙ'&%K0=uiÉÙ˻ËKòû
test/vendor/usr/include/x86_64-linux-gnu/bits/usr/include/x86_64-linux-gnu/bits/types/usr/include/usr/lib/gcc/x86_64-linux-gnu/7/includeunity.csetjmp.h__sigset_t.hsetjmp.htypes.hstddef.hunity_internals.hlibio.hstdio.h	k쬮n.®Ÿžt.®Ÿ	ž*ŸŸv<»„v
.»uX¬ö<儮[¬®1®Ÿ½®Ÿ¿ŸŸvfX¬f@åØ˟tvËvŸ½vŸ¿ŸŸžs.
ºv. Â*ŸŸ„@»„wŸL»A»…0H6F­u@v„M0Ÿƒh$vò
f@ó“’Êʾ¿ oJJf<È䡠ŸN>þº„X®úºˆXôöºŽXuv	ò"Ê.�­.�®>vÊ.�å.�„	ɻZ.)®è°ž­Mh®‘Nf<t�=i0ŸGf'u09›f±0‚Ÿqm  hŸ\¡u09›fk0rlk򻟻Ÿå¢@»Y»Ÿ@K¼>¼ƒÚ#­® @»v¼¼»弻潼@ó»vŸ»¾¼»vŸ»¤,¼B/»vŸ¾¼»vŸ¤,¼<vžwv»»»xv»»»wY.­òô»»/»/»v¬ 6­ò¼ »»»»v¬ 	.×uòôž×žv žžužž”ÈžuÈžw »»ž»ž»ž»»f¬> .×g‘vòôh@Ûæ´#ååu1ååu2­­u3»»uu#Øžhƒ‘ƒ„»»/»»»¯hvDtfo.	<Æ !.0òòòž¬	¬
ž‚
JžJ¬‚.tY	.×gƒ„òôh@Ûæ±4»»/>»®hZqXo.	< 6×òõ$»8»x¬
 5tå,Ÿå®òô.òÖtXg[òžtXg2/2‚¬tXg1ƒ­#ػ»v¼¼ú»O¬3 —Xåòô  ö÷ÊöÚô»»»»»]¬% .×g‘vòôh@Ûæ´#ååu1ååu2­­u3»»uu#  ö÷ÊöÚôžhƒ‘ƒ„»»å»/»å»å»¯hv«tfo.	<ß 5wòõtv’ʭy 0Jþ
. °¼»/»e¬ 6¡òõtv’ʭy 0J‚þ
. qÈ ¼»Y»e¬ 	.×uuƒ„òõh@Û®¯h‡ƒh†tv’ʭy 0Jþ
. °¼»h»®/»®A 
<6 
.Ƀƒiòôfh@Ûæ±gZZ»»h»0»/»g»g»®YkXhd‚o.	<' .É1Ÿ“­”­”Ÿv3‘Éu.óòôY»®¡¼»弻潮 ½d¬ 2óº¼Y»vŸŸ¼v¬ 2óY»vŸŸ¼Ÿ@/­»!ZôYhô[Y@ƒ­@ƒ­­­­­­­®Z@KŸ»Ÿå»å»廟¼ڿ¡u^Zû
test/usr/include/x86_64-linux-gnu/bits/usr/include/x86_64-linux-gnu/bits/types/usr/include/usr/lib/gcc/x86_64-linux-gnu/7/includetest/vendortest/../srctest_binary_search_tree.csetjmp.h__sigset_t.hsetjmp.htypes.hstddef.hunity_internals.hlibio.hstdio.htime.hbinary_search_tree.h	ø3K?K?‚åuLt&Ⱥ»i‚æ×Lt&Ⱥ*ò»i‚æ×Lt&Ⱥ*ò»i‚æ×Lt&Ⱥ)òä»i‚æ1Lt&Ⱥ*ò)òä.J<-<.-<.,. »i‚æuLuó0»»j‚æ×L×ó0»»i‚æ×L×ó0»»j‚æ×L×ó0»»i‚æ*L*ó0»»iK¼uuuuuuuuuvY__off_t_IO_read_ptr_chainsize_t_shortbufsrc/binary_search_tree.c_IO_2_1_stderr__IO_buf_basetree_data_len__timezonelong long intget_sort_data_fileno_IO_read_end_IO_2_1_stdout__flags_IO_buf_end_cur_column_old_offsetarraynode_t_IO_markerstdinGNU C99 7.5.0 -mtune=generic -march=x86-64 -g -std=c99 -fstack-protector-stronglong unsigned int_IO_FILE_plus_IO_write_ptr_sbufshort unsigned int_IO_save_base_lock_flags2_modestdoutappendfree_tree_IO_2_1_stdin_add_left_nodesorted_data_IO_write_end_IO_lock_t_IO_FILE__daylighttarget_node_pos_markersunsigned charshort int_vtable_offset/home/h-kiwata/workspace/kiwata/kernel/script/LowLevelProgramming/exercism/c/binary-search-treerighttree_data_next__off64_tadd_right_node_IO_read_base_IO_save_end__pad1__pad2__pad3__pad4__pad5build_tree_unused2stderr_IO_backup_base__tzname_IO_write_baseleftelementUNITY_EQUAL_TOCurrentTestNameUnityTestFunctionUnityStrDeltaUNITY_GREATER_THANexponentis_traitnibbleUnityFloatToPtrUnityStrDetail2NameAbortFrameUNITY_DISPLAY_STYLE_INT8UNITY_ARRAY_TO_ARRAYUNITY_FLOAT_IS_NANCurrentTestIgnoredUnityStrResultsTestsUNITY_GREATER_OR_EQUALUNITY_DISPLAY_STYLE_INT16UnityAssertBitsUnityPrintNumberUnsignedUnityStrGtTestIgnoresUNITY_UINTUnityStrOrEqualfailedUnityStrPassUnityPrintMaskUnityStrResultsFailuresUNITY_FLOAT_TRAIT_TUNITY_DISPLAY_STYLE_TCurrentDetail2UnityStrInvalidFloatTraitUnityStrNullPointerForExpectedUnityAssertEqualMemoryUnityStrDetUnityStrNullPointerForActualCurrentTestFailedUNITY_DISPLAY_STYLE_HEX64UnityPrintNumberHextrait_indexUNITY_DISPLAY_STYLE_HEX8UnityUnityPrintExpectedAndActualStringsUNITY_FLOAT_IS_NOT_NEG_INFUNITY_UINT64UnityAssertEqualNumberUNITY_FLOAT_IS_NOT_INF__sigset_tUNITY_FLOAT_TRAITUNITY_DISPLAY_STYLE_INT32UNITY_FLOAT_INVALID_TRAITfloatactual_valexpect_valUNITY_DOUBLElineNumberUnityBeginUnityStrSpacerUnityPrintNumberByStyleUNITY_INTUnityTestResultsFailBeginfileUNITY_UINT8__jmp_bufUnityAssertEqualIntArrayCurrentDetail1divisornum_elementsUNITY_STORAGE_TUnityStrErrDoubleUnityFloatsWithinUnityIgnoreUnityQuickCompareptr_expnibblesUNITY_FLOAT_IS_NOT_NANUnityEndUNITY_SMALLER_THANUnityStrMemoryUnityAssertFloatSpecialincrementbytesptr_actUNITY_FLOAT_IS_DETUnityAssertGreaterOrLessOrEqualNumberstring__jmpbufUNITY_FLOATUnityStrDetail1Nameptr_expectedUNITY_INT16n_intUnityStrIgnoreUNITY_DISPLAY_STYLE_INT64UnityStrWasUNITY_SMALLER_OR_EQUALUnityStrLtfilenameUnityPrintFloatUnityStrNullUNITY_WITHINUnityStrErr64max_scaledUnityStrErrShorthandUnityStrNotUnityPrintNumbertrait_namesUnitySetTestFileUnityTestResultsBeginptr_actualUNITY_INT32UNITY_INT8UnityStrErrFloatUnityConcludeTestUnityStrNaNUnityFailsizeUnityAssertNumbersWithinUnityAssertEqualFloatArrayFuncLineNumTestFailurescompareUnityStrOkUnityStrByteUnityAssertFloatsWithinUNITY_ARRAY_TO_VALUNITY_DISPLAY_STYLE_UINTUNITY_FLOAT_IS_NOT_DETUnityAssertNumbersArrayWithinUnityAssertEqualStringArrayCurrentTestLineNumberUNITY_FLOAT_IS_NEG_INFFuncUnityPrintLenUNITY_ARRAY_UNKNOWNUnityStrBreakerlengthcurrent_bitdiffUNITY_UNKNOWNnumber_to_printUnityStrInfUnityMessageUNITY_INT64sig_digitsUNITY_FLAGS_TUNITY_DISPLAY_STYLE_UINT64__mask_was_savedUnityAssertEqualStringtest/vendor/unity.cshould_be_trait__saved_maskUNITY_DISPLAY_STYLE_UINT16UnityStrResultsIgnoredUNITY_DISPLAY_STYLE_UNKNOWNUnityAddMsgIfSpecifiedUnityStrPointlessUnityStrNegInfUnityPrintExpectedAndActualStringsLenUnityAssertEqualStringLenUNITY_DISPLAY_STYLE_INTUnityNumToPtrUNITY_DISPLAY_STYLE_HEX16lineNumberOfTestsUnityStrFailUnityDefaultTestRunstyleUnityStrExpectedexpdUNITY_COMPARISON_TthresholdUnityStrElementUNITY_DISPLAY_STYLE_UINT32deltaFuncNameinput_numberUNITY_FLOAT_IS_INF__valnibbles_to_printUNITY_DISPLAY_STYLE_UINT8min_scaleddoubleUNITY_DISPLAY_STYLE_HEX32UnityIsOneArrayNullUnityPrintCharfactordecimalsUnityPrintUNITY_UINT32UNITY_DISPLAY_STYLE_CHAR__jmp_buf_tagtest_sorted_data_can_sort_if_second_number_is_smaller_than_firsttest_data_same_number_at_left_nodetest/test_binary_search_tree.ctest_data_can_create_complex_treetest_data_greater_number_at_right_nodesetUptest_sorted_data_can_sort_if_second_number_is_same_as_firsttest_sorted_data_can_sort_if_second_number_is_greater_than_firsttest_sorted_data_can_sort_complex_treetest_data_smaller_number_at_left_nodetest_sorted_data_can_sort_single_numbertearDowntest_data_data_is_retainedmain8Tt˜¸ð´Ð	
Àh€
„A A G0Iˆ] �] ˜] ˆ_ `  ` ñÿ@€!Ð7 ` F�] myˆ] hñÿ˜ñÿ ÔA­ÙA¼àAÍëAÙBä Bï8B
ÿHB
RB`B+€B9 B7KàBjC‡C“ C	Ÿ0C®BCºHCÆ`Cà Dð8D@DPD
4`D
HpD\k¦k°D{´D‹¸D›X±^;Ë%ˆâ­•B¢+ä”?)2Q(` cñÿ}4ϘÕ4C¾6Cá[7@›8¨*C<©Rì<·“£=·ÏZ>·?ïñÿ7tQñÿE�] V˜] _ˆ] r G…ˆ_ ›€A«ÃA¸Ê€C!ßô0Ô	6*(0
 /5
G  ` cÀAnÐ
›|` ƒ.!Ò›±2¬}ªÅ×�Ó:³¥„Aê()[Ó8P$�Q'2ŠeX	|tMè‚<�Ç2y˜ã	M¤Ã'z×ìŒ-` £/ní¡D SÈA`` m A|@` ‚ÿ3‹Ae›Ž›´Èø3ΡoQXa ÝE8	+îàC 	Ñ%W	½)	>	` J	@O	d	Á1fq	D	°C�	` œ	00¦	ÍAµ	 Ï	@3¸Ø	™Œê	"•h
11�
xÂ"
U+7>
"PV
öcrtstuff.cderegister_tm_clones__do_global_dtors_auxcompleted.7698__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entryunity.cUnityStrNullUnityStrSpacerUnityStrExpectedUnityStrWasUnityStrGtUnityStrLtUnityStrOrEqualUnityStrElementUnityStrByteUnityStrMemoryUnityStrDeltaUnityStrPointlessUnityStrNullPointerForExpectedUnityStrNullPointerForActualUnityStrNotUnityStrInfUnityStrNegInfUnityStrNaNUnityStrDetUnityStrInvalidFloatTraitUnityStrBreakerUnityStrResultsTestsUnityStrResultsFailuresUnityStrResultsIgnoredUnityStrDetail1NameUnityStrDetail2NameUnityPrintCharmax_scaled.3244min_scaled.3243sig_digits.3242UnityTestResultsBeginUnityTestResultsFailBeginUnityAddMsgIfSpecifiedUnityPrintExpectedAndActualStringsUnityPrintExpectedAndActualStringsLenUnityIsOneArrayNullUnityFloatsWithinUnityQuickComparetest_binary_search_tree.ctest_data_data_is_retainedtest_data_smaller_number_at_left_nodetest_data_same_number_at_left_nodetest_data_greater_number_at_right_nodetest_data_can_create_complex_treetest_sorted_data_can_sort_single_numbertest_sorted_data_can_sort_if_second_number_is_smaller_than_firsttest_sorted_data_can_sort_if_second_number_is_same_as_firsttest_sorted_data_can_sort_if_second_number_is_greater_than_firsttest_sorted_data_can_sort_complex_tree__FRAME_END____init_array_end_DYNAMIC__init_array_start__GNU_EH_FRAME_HDR_GLOBAL_OFFSET_TABLE___libc_csu_finiUnityStrPassfree@@GLIBC_2.2.5UnityStrErrShorthandputchar@@GLIBC_2.2.5UnityFloatToPtrfree_treeUnityAssertEqualStringLenappendUnityPrintNumberByStyle_ITM_deregisterTMCloneTableUnityStrOkget_sort_data_edataUnityAssertFloatsWithinUnitySetTestFileUnityPrintNumberUnsignedadd_left_nodeUnityAssertEqualNumberUnityAssertEqualString__stack_chk_fail@@GLIBC_2.4UnityAssertEqualFloatArrayUnityAssertNumbersWithinUnityDefaultTestRunadd_right_nodeUnityPrintLenUnityPrintUnityBeginsorted_data__libc_start_main@@GLIBC_2.2.5UnityPrintNumberHex_setjmp@@GLIBC_2.2.5UnityAssertEqualMemory__data_startUnityNumToPtrUnityAssertGreaterOrLessOrEqualNumber__gmon_start__UnityStrFail__dso_handle_IO_stdin_usedUnitytearDown__libc_csu_initUnityAssertEqualIntArraymalloc@@GLIBC_2.2.5setUpUnityPrintMaskUnityPrintNumberUnityStrErrDoubleUnityAssertNumbersArrayWithinbuild_treerealloc@@GLIBC_2.2.5__bss_startmainlongjmp@@GLIBC_2.2.5UnityMessageUnityStrErr64UnityStrErrFloat__TMC_END__UnityFailUnityStrIgnore_ITM_registerTMCloneTableUnityEndUnityConcludeTest__cxa_finalize@@GLIBC_2.2.5UnityIgnoreUnityAssertBitsUnityAssertEqualStringArrayUnityAssertFloatSpecialUnityPrintFloat.symtab.strtab.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.got.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.data.bss.comment.debug_aranges.debug_info.debug_abbrev.debug_line.debug_str88#TT 1tt$Döÿÿo˜˜N¸¸8VððÄ^ÿÿÿo´´kþÿÿoÐÐ0zÀ„BÀÀ¨Žhh‰€€€”�r:£„A„A	© A A ± G G¿0I0IHɈ] ˆ]Õ�] �]á˜] ˜]ð˜ˆ_ ˆ_xê` `ð ` `8 õ0`)þ9`�
É`‰)RŠ�'ï�²30¡œ¹`®8 b	˜¾f
þÈ>

Community comments

Find this solution interesting? Ask the author a question to learn more.

What can you learn from this solution?

A huge amount can be learned from reading other people’s code. This is why we wanted to give exercism users the option of making their solutions public.

Here are some questions to help you reflect on this solution and learn the most from it.

  • What compromises have been made?
  • Are there new concepts here that you could read more about to improve your understanding?