Fix some minor unit test merge issues.

Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/7aa94c51
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/7aa94c51
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/7aa94c51

Branch: refs/heads/develop
Commit: 7aa94c51a3749dda2a66e6e3f7a39546a1f4ee9c
Parents: 914236c
Author: Christopher Collins <ccoll...@apache.org>
Authored: Mon Oct 17 17:00:19 2016 -0700
Committer: Christopher Collins <ccoll...@apache.org>
Committed: Mon Oct 17 17:00:19 2016 -0700

----------------------------------------------------------------------
 boot/bootutil/test/src/boot_test.h              |   8 +-
 boot/bootutil/test/src/boot_test_utils.c        | 143 ++++++++++++++++++-
 .../test/src/testcases/boot_test_no_hash.c      |   2 +-
 .../test/src/testcases/boot_test_nv_bs_10.c     |   2 +-
 .../test/src/testcases/boot_test_nv_bs_11.c     |   2 +-
 .../src/testcases/boot_test_nv_bs_11_2areas.c   |   7 +-
 .../test/src/testcases/boot_test_nv_ns_01.c     |   4 +-
 .../test/src/testcases/boot_test_revert.c       |   7 +-
 .../src/testcases/boot_test_revert_continue.c   |   8 +-
 .../test/src/testcases/boot_test_vb_ns_11.c     |   4 +-
 .../test/src/testcases/boot_test_vm_ns_01.c     |   2 +-
 .../src/testcases/boot_test_vm_ns_11_2areas.c   |   2 +-
 .../test/src/testcases/boot_test_vm_ns_11_b.c   |   2 +-
 net/ip/mn_socket/test/src/mn_sock_test.c        |   2 +
 14 files changed, 165 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7aa94c51/boot/bootutil/test/src/boot_test.h
----------------------------------------------------------------------
diff --git a/boot/bootutil/test/src/boot_test.h 
b/boot/bootutil/test/src/boot_test.h
index 25e2da2..e883c8f 100644
--- a/boot/bootutil/test/src/boot_test.h
+++ b/boot/bootutil/test/src/boot_test.h
@@ -31,15 +31,14 @@
 #include "hal/hal_flash.h"
 #include "flash_map/flash_map.h"
 #include "bootutil/image.h"
-#include "bootutil/loader.h"
-#include "bootutil/bootutil_misc.h"
-#include "../../src/bootutil_priv.h"
+#include "bootutil/bootutil.h"
+#include "bootutil_priv.h"
 #include "testutil/testutil.h"
 
 #include "mbedtls/sha256.h"
 
 #ifdef __cplusplus
-#extern "C" {
+extern "C" {
 #endif
 
 #define BOOT_TEST_HEADER_SIZE       0x200
@@ -66,6 +65,7 @@ void boot_test_util_swap_areas(int area_idx1, int area_idx2);
 void boot_test_util_write_image(const struct image_header *hdr,
                                        int slot);
 void boot_test_util_write_hash(const struct image_header *hdr, int slot);
+void boot_test_util_mark_revert(void);
 void boot_test_util_verify_area(const struct flash_area *area_desc,
                                        const struct image_header *hdr,
                                        uint32_t image_addr, int img_msb);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7aa94c51/boot/bootutil/test/src/boot_test_utils.c
----------------------------------------------------------------------
diff --git a/boot/bootutil/test/src/boot_test_utils.c 
b/boot/bootutil/test/src/boot_test_utils.c
index 160e81d..3040604 100644
--- a/boot/bootutil/test/src/boot_test_utils.c
+++ b/boot/bootutil/test/src/boot_test_utils.c
@@ -42,6 +42,8 @@ struct boot_test_img_addrs boot_test_img_addrs[] = {
     { 0, 0x80000 },
 };
 
+#define BOOT_TEST_AREA_IDX_SCRATCH 6
+
 uint8_t
 boot_test_util_byte_at(int img_msb, uint32_t image_offset)
 {
@@ -73,7 +75,6 @@ boot_test_util_init_flash(void)
     }
 }
 
-
 void
 boot_test_util_copy_area(int from_area_idx, int to_area_idx)
 {
@@ -106,12 +107,38 @@ boot_test_util_copy_area(int from_area_idx, int 
to_area_idx)
     free(buf);
 }
 
+static uint32_t
+boot_test_util_area_write_size(int dst_idx, uint32_t off, uint32_t size)
+{
+    const struct flash_area *desc;
+    int64_t diff;
+    uint32_t trailer_start;
+
+    if (dst_idx != BOOT_TEST_AREA_IDX_SCRATCH - 1) {
+        return size;
+    }
+
+    /* Don't include trailer in copy to second slot. */
+    desc = boot_test_area_descs + dst_idx;
+    trailer_start = desc->fa_size - boot_status_sz(1);
+    diff = off + size - trailer_start;
+    if (diff > 0) {
+        if (diff > size) {
+            size = 0;
+        } else {
+            size -= diff;
+        }
+    }
+
+    return size;
+}
 
 void
 boot_test_util_swap_areas(int area_idx1, int area_idx2)
 {
     const struct flash_area *area_desc1;
     const struct flash_area *area_desc2;
+    uint32_t size;
     void *buf1;
     void *buf2;
     int rc;
@@ -139,17 +166,18 @@ boot_test_util_swap_areas(int area_idx1, int area_idx2)
     rc = flash_area_erase(area_desc2, 0, area_desc2->fa_size);
     TEST_ASSERT(rc == 0);
 
-    rc = flash_area_write(area_desc1, 0, buf2, area_desc1->fa_size);
+    size = boot_test_util_area_write_size(area_idx1, 0, area_desc1->fa_size);
+    rc = flash_area_write(area_desc1, 0, buf2, size);
     TEST_ASSERT(rc == 0);
 
-    rc = flash_area_write(area_desc2, 0, buf1, area_desc2->fa_size);
+    size = boot_test_util_area_write_size(area_idx2, 0, area_desc2->fa_size);
+    rc = flash_area_write(area_desc2, 0, buf1, size);
     TEST_ASSERT(rc == 0);
 
     free(buf1);
     free(buf2);
 }
 
-
 void
 boot_test_util_write_image(const struct image_header *hdr, int slot)
 {
@@ -235,6 +263,37 @@ boot_test_util_write_hash(const struct image_header *hdr, 
int slot)
 }
 
 void
+boot_test_util_write_bit(int flash_area_id, struct boot_img_trailer *bit)
+{
+    const struct flash_area *fap;
+    int rc;
+
+    /* XXX: This function only works by chance.  It requires that the boot
+     * loader have have been run once already so that its global state has been
+     * populated.
+     */
+
+    rc = flash_area_open(flash_area_id, &fap);
+    TEST_ASSERT_FATAL(rc == 0);
+
+    rc = flash_area_write(fap, fap->fa_size - sizeof *bit, bit, sizeof *bit);
+    TEST_ASSERT_FATAL(rc == 0);
+}
+
+void
+boot_test_util_mark_revert(void)
+{
+    struct boot_img_trailer bit_slot0 = {
+        .bit_copy_start = BOOT_IMG_MAGIC,
+        .bit_copy_done = 0x01,
+        .bit_img_ok = 0xff,
+        ._pad = 0xffff,
+    };
+
+    boot_test_util_write_bit(FLASH_AREA_IMAGE_0, &bit_slot0);
+}
+
+void
 boot_test_util_verify_area(const struct flash_area *area_desc,
                            const struct image_header *hdr,
                            uint32_t image_addr, int img_msb)
@@ -322,7 +381,7 @@ boot_test_util_verify_status_clear(void)
     rc = flash_area_read(fap, fap->fa_size - sizeof(bit), &bit, sizeof(bit));
     TEST_ASSERT(rc == 0);
 
-    TEST_ASSERT(bit.bit_copy_start != BOOT_MAGIC_SWAP_TEMP ||
+    TEST_ASSERT(bit.bit_copy_start != BOOT_IMG_MAGIC ||
       bit.bit_copy_done != 0xff);
 }
 
@@ -359,3 +418,77 @@ boot_test_util_verify_flash(const struct image_header 
*hdr0, int orig_slot_0,
         area_idx++;
     }
 }
+
+void
+boot_test_util_verify_all(const struct boot_req *req, int expected_swap_type,
+                          const struct image_header *hdr0,
+                          const struct image_header *hdr1)
+{
+    const struct image_header *slot0hdr;
+    const struct image_header *slot1hdr;
+    struct boot_rsp rsp;
+    int orig_slot_0;
+    int orig_slot_1;
+    int num_swaps;
+    int rc;
+    int i;
+
+    TEST_ASSERT_FATAL(req != NULL);
+    TEST_ASSERT_FATAL(hdr0 != NULL || hdr1 != NULL);
+
+    num_swaps = 0;
+    for (i = 0; i < 3; i++) {
+        rc = boot_go(req, &rsp);
+        TEST_ASSERT_FATAL(rc == 0);
+
+        if (expected_swap_type != BOOT_SWAP_TYPE_NONE) {
+            num_swaps++;
+        }
+
+        if (num_swaps % 2 == 0) {
+            if (hdr0 != NULL) {
+                slot0hdr = hdr0;
+                slot1hdr = hdr1;
+            } else {
+                slot0hdr = hdr1;
+                slot1hdr = hdr0;
+            }
+            orig_slot_0 = 0;
+            orig_slot_1 = 1;
+        } else {
+            if (hdr1 != NULL) {
+                slot0hdr = hdr1;
+                slot1hdr = hdr0;
+            } else {
+                slot0hdr = hdr0;
+                slot1hdr = hdr1;
+            }
+            orig_slot_0 = 1;
+            orig_slot_1 = 0;
+        }
+
+        TEST_ASSERT(memcmp(rsp.br_hdr, slot0hdr, sizeof *slot0hdr) == 0);
+        TEST_ASSERT(rsp.br_flash_id == boot_test_img_addrs[0].flash_id);
+        TEST_ASSERT(rsp.br_image_addr == boot_test_img_addrs[0].address);
+
+        boot_test_util_verify_flash(slot0hdr, orig_slot_0,
+                                    slot1hdr, orig_slot_1);
+        boot_test_util_verify_status_clear();
+
+        if (expected_swap_type != BOOT_SWAP_TYPE_NONE) {
+            switch (expected_swap_type) {
+            case BOOT_SWAP_TYPE_TEST:
+                expected_swap_type = BOOT_SWAP_TYPE_REVERT;
+                break;
+
+            case BOOT_SWAP_TYPE_REVERT:
+                expected_swap_type = BOOT_SWAP_TYPE_NONE;
+                break;
+
+            default:
+                TEST_ASSERT_FATAL(0);
+                break;
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7aa94c51/boot/bootutil/test/src/testcases/boot_test_no_hash.c
----------------------------------------------------------------------
diff --git a/boot/bootutil/test/src/testcases/boot_test_no_hash.c 
b/boot/bootutil/test/src/testcases/boot_test_no_hash.c
index 339753e..0ce1a54 100644
--- a/boot/bootutil/test/src/testcases/boot_test_no_hash.c
+++ b/boot/bootutil/test/src/testcases/boot_test_no_hash.c
@@ -53,7 +53,7 @@ TEST_CASE(boot_test_no_hash)
     boot_test_util_write_image(&hdr1, 1);
 
     rc = boot_set_pending(1);
-    TEST_ASSERT_FATAL(rc == 0);
+    TEST_ASSERT(rc == 0);
 
     boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_NONE, &hdr0, NULL);
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7aa94c51/boot/bootutil/test/src/testcases/boot_test_nv_bs_10.c
----------------------------------------------------------------------
diff --git a/boot/bootutil/test/src/testcases/boot_test_nv_bs_10.c 
b/boot/bootutil/test/src/testcases/boot_test_nv_bs_10.c
index cced9fb..bb7bc9c 100644
--- a/boot/bootutil/test/src/testcases/boot_test_nv_bs_10.c
+++ b/boot/bootutil/test/src/testcases/boot_test_nv_bs_10.c
@@ -41,7 +41,7 @@ TEST_CASE(boot_test_nv_bs_10)
     boot_test_util_write_image(&hdr, 0);
     boot_test_util_write_hash(&hdr, 0);
     boot_test_util_swap_areas(boot_test_slot_areas[1],
-      BOOT_TEST_AREA_IDX_SCRATCH);
+                              BOOT_TEST_AREA_IDX_SCRATCH);
 
     boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_NONE, &hdr, NULL);
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7aa94c51/boot/bootutil/test/src/testcases/boot_test_nv_bs_11.c
----------------------------------------------------------------------
diff --git a/boot/bootutil/test/src/testcases/boot_test_nv_bs_11.c 
b/boot/bootutil/test/src/testcases/boot_test_nv_bs_11.c
index 3312ec4..86146b1 100644
--- a/boot/bootutil/test/src/testcases/boot_test_nv_bs_11.c
+++ b/boot/bootutil/test/src/testcases/boot_test_nv_bs_11.c
@@ -65,5 +65,5 @@ TEST_CASE(boot_test_nv_bs_11)
     rc = boot_write_status(&status);
     TEST_ASSERT(rc == 0);
 
-    boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_TEMP, &hdr0, &hdr1);
+    boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_TEST, &hdr0, &hdr1);
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7aa94c51/boot/bootutil/test/src/testcases/boot_test_nv_bs_11_2areas.c
----------------------------------------------------------------------
diff --git a/boot/bootutil/test/src/testcases/boot_test_nv_bs_11_2areas.c 
b/boot/bootutil/test/src/testcases/boot_test_nv_bs_11_2areas.c
index 11a8a6f..e427f36 100644
--- a/boot/bootutil/test/src/testcases/boot_test_nv_bs_11_2areas.c
+++ b/boot/bootutil/test/src/testcases/boot_test_nv_bs_11_2areas.c
@@ -54,12 +54,11 @@ TEST_CASE(boot_test_nv_bs_11_2areas)
     boot_test_util_write_hash(&hdr0, 0);
     boot_test_util_write_image(&hdr1, 1);
     boot_test_util_write_hash(&hdr1, 1);
-
-    boot_test_util_swap_areas(2, 5);
-
     rc = boot_set_pending(1);
     TEST_ASSERT_FATAL(rc == 0);
 
+    boot_test_util_swap_areas(2, 5);
+
     status.idx = 1;
     status.elem_sz = 1;
     status.state = 0;
@@ -67,5 +66,5 @@ TEST_CASE(boot_test_nv_bs_11_2areas)
     rc = boot_write_status(&status);
     TEST_ASSERT_FATAL(rc == 0);
 
-    boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_TEMP, &hdr0, &hdr1);
+    boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_TEST, &hdr0, &hdr1);
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7aa94c51/boot/bootutil/test/src/testcases/boot_test_nv_ns_01.c
----------------------------------------------------------------------
diff --git a/boot/bootutil/test/src/testcases/boot_test_nv_ns_01.c 
b/boot/bootutil/test/src/testcases/boot_test_nv_ns_01.c
index c887eca..00a1967 100644
--- a/boot/bootutil/test/src/testcases/boot_test_nv_ns_01.c
+++ b/boot/bootutil/test/src/testcases/boot_test_nv_ns_01.c
@@ -41,5 +41,7 @@ TEST_CASE(boot_test_nv_ns_01)
     boot_test_util_write_image(&hdr, 1);
     boot_test_util_write_hash(&hdr, 1);
 
-    boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_PERM, NULL, &hdr);
+    boot_set_pending(1);
+
+    boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_REVERT, NULL, &hdr);
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7aa94c51/boot/bootutil/test/src/testcases/boot_test_revert.c
----------------------------------------------------------------------
diff --git a/boot/bootutil/test/src/testcases/boot_test_revert.c 
b/boot/bootutil/test/src/testcases/boot_test_revert.c
index d49d42d..f564f7c 100644
--- a/boot/bootutil/test/src/testcases/boot_test_revert.c
+++ b/boot/bootutil/test/src/testcases/boot_test_revert.c
@@ -20,8 +20,7 @@
 
 TEST_CASE(boot_test_revert)
 {
-    struct image_header hdr0 = {
-        .ih_magic = IMAGE_MAGIC,
+    struct image_header hdr0 = { .ih_magic = IMAGE_MAGIC,
         .ih_tlv_size = 4 + 32,
         .ih_hdr_size = BOOT_TEST_HEADER_SIZE,
         .ih_img_size = 5 * 1024,
@@ -53,7 +52,7 @@ TEST_CASE(boot_test_revert)
     boot_test_util_write_hash(&hdr1, 1);
 
     /* Indicate that the image in slot 0 is being tested. */
-    boot_set_copy_done();
+    boot_test_util_mark_revert();
 
-    boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_PERM, &hdr0, &hdr1);
+    boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_REVERT, &hdr0, &hdr1);
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7aa94c51/boot/bootutil/test/src/testcases/boot_test_revert_continue.c
----------------------------------------------------------------------
diff --git a/boot/bootutil/test/src/testcases/boot_test_revert_continue.c 
b/boot/bootutil/test/src/testcases/boot_test_revert_continue.c
index ec4f56c..4abd87f 100644
--- a/boot/bootutil/test/src/testcases/boot_test_revert_continue.c
+++ b/boot/bootutil/test/src/testcases/boot_test_revert_continue.c
@@ -55,10 +55,10 @@ TEST_CASE(boot_test_revert_continue)
     boot_test_util_write_image(&hdr1, 1);
     boot_test_util_write_hash(&hdr1, 1);
 
-    boot_test_util_swap_areas(2, 5);
-
     /* Indicate that the image in slot 0 is being tested. */
-    boot_set_copy_done();
+    boot_test_util_mark_revert();
+
+    boot_test_util_swap_areas(2, 5);
 
     status.idx = 1;
     status.elem_sz = 1;
@@ -67,5 +67,5 @@ TEST_CASE(boot_test_revert_continue)
     rc = boot_write_status(&status);
     TEST_ASSERT_FATAL(rc == 0);
 
-    boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_PERM, &hdr0, &hdr1);
+    boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_REVERT, &hdr0, &hdr1);
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7aa94c51/boot/bootutil/test/src/testcases/boot_test_vb_ns_11.c
----------------------------------------------------------------------
diff --git a/boot/bootutil/test/src/testcases/boot_test_vb_ns_11.c 
b/boot/bootutil/test/src/testcases/boot_test_vb_ns_11.c
index 38fa8f9..0ac7480 100644
--- a/boot/bootutil/test/src/testcases/boot_test_vb_ns_11.c
+++ b/boot/bootutil/test/src/testcases/boot_test_vb_ns_11.c
@@ -55,7 +55,7 @@ TEST_CASE(boot_test_vb_ns_11)
     boot_test_util_write_hash(&hdr1, 1);
 
     rc = boot_set_pending(1);
-    TEST_ASSERT_FATAL(rc == 0);
+    TEST_ASSERT(rc == 0);
 
-    boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_TEMP, &hdr0, &hdr1);
+    boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_TEST, &hdr0, &hdr1);
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7aa94c51/boot/bootutil/test/src/testcases/boot_test_vm_ns_01.c
----------------------------------------------------------------------
diff --git a/boot/bootutil/test/src/testcases/boot_test_vm_ns_01.c 
b/boot/bootutil/test/src/testcases/boot_test_vm_ns_01.c
index ac31824..b749f87 100644
--- a/boot/bootutil/test/src/testcases/boot_test_vm_ns_01.c
+++ b/boot/bootutil/test/src/testcases/boot_test_vm_ns_01.c
@@ -46,5 +46,5 @@ TEST_CASE(boot_test_vm_ns_01)
     rc = boot_set_pending(1);
     TEST_ASSERT(rc == 0);
 
-    boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_PERM, NULL, &hdr);
+    boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_REVERT, NULL, &hdr);
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7aa94c51/boot/bootutil/test/src/testcases/boot_test_vm_ns_11_2areas.c
----------------------------------------------------------------------
diff --git a/boot/bootutil/test/src/testcases/boot_test_vm_ns_11_2areas.c 
b/boot/bootutil/test/src/testcases/boot_test_vm_ns_11_2areas.c
index 84e6a91..6f75c31 100644
--- a/boot/bootutil/test/src/testcases/boot_test_vm_ns_11_2areas.c
+++ b/boot/bootutil/test/src/testcases/boot_test_vm_ns_11_2areas.c
@@ -57,5 +57,5 @@ TEST_CASE(boot_test_vm_ns_11_2areas)
     rc = boot_set_pending(1);
     TEST_ASSERT(rc == 0);
 
-    boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_TEMP, &hdr0, &hdr1);
+    boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_TEST, &hdr0, &hdr1);
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7aa94c51/boot/bootutil/test/src/testcases/boot_test_vm_ns_11_b.c
----------------------------------------------------------------------
diff --git a/boot/bootutil/test/src/testcases/boot_test_vm_ns_11_b.c 
b/boot/bootutil/test/src/testcases/boot_test_vm_ns_11_b.c
index f4df74a..88d9e74 100644
--- a/boot/bootutil/test/src/testcases/boot_test_vm_ns_11_b.c
+++ b/boot/bootutil/test/src/testcases/boot_test_vm_ns_11_b.c
@@ -57,5 +57,5 @@ TEST_CASE(boot_test_vm_ns_11_b)
     rc = boot_set_pending(1);
     TEST_ASSERT(rc == 0);
 
-    boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_TEMP, &hdr0, &hdr1);
+    boot_test_util_verify_all(&req, BOOT_SWAP_TYPE_TEST, &hdr0, &hdr1);
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7aa94c51/net/ip/mn_socket/test/src/mn_sock_test.c
----------------------------------------------------------------------
diff --git a/net/ip/mn_socket/test/src/mn_sock_test.c 
b/net/ip/mn_socket/test/src/mn_sock_test.c
index 0f56db5..e52d012 100644
--- a/net/ip/mn_socket/test/src/mn_sock_test.c
+++ b/net/ip/mn_socket/test/src/mn_sock_test.c
@@ -86,5 +86,7 @@ main(int argc, char **argv)
 
     tu_suite_set_init_cb((void*)mn_socket_test_init, NULL);
     mn_socket_test_all();
+
+    return 0;
 }
 #endif

Reply via email to