From 6355aff3cdbe2a719eaf618dc531079f321208ff Mon Sep 17 00:00:00 2001 From: Matias Fontanini Date: Sun, 17 Nov 2013 15:32:24 -0300 Subject: [PATCH] Added IPv4Reassembler class. --- Makefile.am | 2 + Makefile.in | 11 +- include/ip.h | 7 + include/ip_reassembler.h | 216 ++++ include/tins.h | 2 + src/ip.cpp | 8 +- src/ip_reassembler.cpp | 153 +++ tests/depends.d | 2009 ++++++++++++++++++++++++++++++++-- tests/src/ip_reassembler.cpp | 76 ++ 9 files changed, 2400 insertions(+), 84 deletions(-) create mode 100644 include/ip_reassembler.h create mode 100644 src/ip_reassembler.cpp create mode 100644 tests/src/ip_reassembler.cpp diff --git a/Makefile.am b/Makefile.am index adb943d..c473f8c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -28,6 +28,7 @@ libtins_la_SOURCES=src/arp.cpp \ src/icmp.cpp \ src/icmpv6.cpp \ src/internals.cpp \ + src/ip_reassembler.cpp \ src/ip.cpp \ src/ip_address.cpp \ src/ipv6.cpp \ @@ -85,6 +86,7 @@ libtins_HEADERS = include/internals.h \ include/crypto.h \ include/packet.h \ include/llc.h \ + include/ip_reassembler.h \ include/icmp.h \ include/hw_address.h \ include/packet_writer.h \ diff --git a/Makefile.in b/Makefile.in index ad1168a..0225fe4 100644 --- a/Makefile.in +++ b/Makefile.in @@ -111,8 +111,8 @@ am_libtins_la_OBJECTS = src/arp.lo src/bootp.lo \ src/crypto.lo src/dhcp.lo src/dhcpv6.lo src/dns.lo \ src/dns_record.lo src/dot3.lo src/dot1q.lo src/eapol.lo \ src/ethernetII.lo src/icmp.lo src/icmpv6.lo src/internals.lo \ - src/ip.lo src/ip_address.lo src/ipv6.lo src/ipv6_address.lo \ - src/ipsec.lo src/llc.lo src/loopback.lo \ + src/ip_reassembler.lo src/ip.lo src/ip_address.lo src/ipv6.lo \ + src/ipv6_address.lo src/ipsec.lo src/llc.lo src/loopback.lo \ src/network_interface.lo src/packet_sender.lo \ src/packet_writer.lo src/ppi.lo src/pdu.lo src/radiotap.lo \ src/address_range.lo src/rawpdu.lo src/rsn_information.lo \ @@ -317,6 +317,7 @@ libtins_la_SOURCES = src/arp.cpp \ src/icmp.cpp \ src/icmpv6.cpp \ src/internals.cpp \ + src/ip_reassembler.cpp \ src/ip.cpp \ src/ip_address.cpp \ src/ipv6.cpp \ @@ -373,6 +374,7 @@ libtins_HEADERS = include/internals.h \ include/crypto.h \ include/packet.h \ include/llc.h \ + include/ip_reassembler.h \ include/icmp.h \ include/hw_address.h \ include/packet_writer.h \ @@ -528,6 +530,8 @@ src/ethernetII.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/icmp.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/icmpv6.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/internals.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) +src/ip_reassembler.lo: src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) src/ip.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/ip_address.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/ipv6.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) @@ -635,6 +639,8 @@ mostlyclean-compile: -rm -f src/ip.lo -rm -f src/ip_address.$(OBJEXT) -rm -f src/ip_address.lo + -rm -f src/ip_reassembler.$(OBJEXT) + -rm -f src/ip_reassembler.lo -rm -f src/ipsec.$(OBJEXT) -rm -f src/ipsec.lo -rm -f src/ipv6.$(OBJEXT) @@ -701,6 +707,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/internals.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/ip.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/ip_address.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/ip_reassembler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/ipsec.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/ipv6.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/ipv6_address.Plo@am__quote@ diff --git a/include/ip.h b/include/ip.h index e6d729f..c23f96a 100644 --- a/include/ip.h +++ b/include/ip.h @@ -568,6 +568,13 @@ namespace Tins { */ PDU *recv_response(PacketSender &sender, const NetworkInterface &); + /** + * Indicates whether this PDU is fragmented. + * + * \return true if this PDU is fragmented, false otherwise. + */ + bool is_fragmented() const; + /** * \brief Getter for the PDU's type. * \sa PDU::pdu_type diff --git a/include/ip_reassembler.h b/include/ip_reassembler.h new file mode 100644 index 0000000..9514bae --- /dev/null +++ b/include/ip_reassembler.h @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2012, Matias Fontanini + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef TINS_IP_REASSEMBLER_H +#define TINS_IP_REASSEMBLER_H + +#include +#include +#include "pdu.h" +#include "ip_address.h" + +namespace Tins { +/** + * \cond + */ +class IP; +namespace Internals { +class IPv4Fragment { +public: + typedef PDU::serialization_type payload_type; + + IPv4Fragment() : offset_() { } + + template + IPv4Fragment(T *pdu, uint16_t offset) + : payload_(pdu->serialize()), offset_(offset) + { + + } + + const payload_type &payload() const { + return payload_; + } + + uint16_t offset() const { + return offset_; + } +private: + payload_type payload_; + uint16_t offset_; +}; + +class IPv4Stream { +public: + IPv4Stream(); + + void add_fragment(IP *ip); + bool is_complete() const; + PDU *allocate_pdu() const; +private: + typedef std::vector fragments_type; + + uint16_t extract_offset(const IP *ip); + bool extract_more_frag(const IP *ip); + + fragments_type fragments; + bool received_end; + uint8_t transport_proto; + size_t received_size, total_size; +}; +} // namespace Internals + +/** + * \endcond + */ + +/** + * \brief Reassembles fragmented IP packets. + */ +class IPv4Reassembler { +public: + /** + * The status of each processed packet. + */ + enum packet_status { + NOT_FRAGMENTED, + FRAGMENTED, + REASSEMBLED + }; + + /** + * The type used to represent the overlapped segment + * reassembly technique to be used. + */ + enum overlapping_technique { + NONE + }; + + /** + * Constructs an IPV4Reassembler. + * \param technique The technique to be used for reassembling + * overlapped fragments. + */ + IPv4Reassembler(overlapping_technique technique = NONE); + + /** + * \brief Processes a PDU and tries to reassemble it. + * + * This method tries to reassemble the provided packet. If + * the packet is successfully reassembled using previously + * processed packets, its contents will be modified so that + * it contains the whole payload and not just a fragment. + * + * \param pdu The PDU to process. + * \return NOT_FRAGMENTED if the PDU does not contain an IP + * layer or is not fragmented, FRAGMENTED if the packet is + * fragmented or REASSEMBLED if the packet was fragmented + * but has now been reassembled. + */ + packet_status process(PDU &pdu); + + /** + * Removes all of the packets and data stored. + */ + void clear_streams(); + + /** + * \brief Removes all of the packets and data stored that + * belongs to IP headers whose identifier, source and destination + * addresses are equal to the provided parameters. + * + * \param id The idenfier to search. + * \param addr1 The source address to search. + * \param addr2 The destinatin address to search. + * \sa IP::id + */ + void remove_stream(uint16_t id, IPv4Address addr1, IPv4Address addr2); +private: + typedef std::pair address_pair; + typedef std::pair key_type; + typedef std::map streams_type; + + key_type make_key(const IP *ip) const; + address_pair make_address_pair(IPv4Address addr1, IPv4Address addr2) const; + + streams_type streams; + overlapping_technique technique; +}; + +/** + * Proxy functor class that reassembles PDUs. + */ +template +class IPv4ReassemblerProxy { +public: + /** + * Constructs the proxy from a functor object. + * + * \param func The functor object. + */ + IPv4ReassemblerProxy(Functor func) + : functor_(func) + { + + } + + /** + * \brief Tries to reassemble the packet and forwards it to + * the functor. + * + * \param pdu The packet to process + * \return true if the packet wasn't forwarded, otherwise + * the value returned by the functor. + */ + bool operator()(PDU &pdu) { + // Forward it unless it's fragmented. + if(reassembler.process(pdu) != IPv4Reassembler::FRAGMENTED) + return functor_(pdu); + else + return true; + } +private: + IPv4Reassembler reassembler; + Functor functor_; +}; + +/** + * Helper function that creates an IPv4ReassemblerProxy. + * + * \param func The functor object to use in the IPv4ReassemblerProxy. + * \return An IPv4ReassemblerProxy. + */ +template +IPv4ReassemblerProxy make_ipv4_reassembler_proxy(Functor func) { + return IPv4ReassemblerProxy(func); +} +} + + +#endif // TINS_IP_REASSEMBLER_H \ No newline at end of file diff --git a/include/tins.h b/include/tins.h index dbc3d32..30e5221 100644 --- a/include/tins.h +++ b/include/tins.h @@ -70,5 +70,7 @@ #include "handshake_capturer.h" #include "address_range.h" #include "pdu_allocator.h" +#include "ipsec.h" +#include "ip_reassembler.h" #endif // TINS_TINS_H diff --git a/src/ip.cpp b/src/ip.cpp index 2247b97..28a43b8 100644 --- a/src/ip.cpp +++ b/src/ip.cpp @@ -118,7 +118,7 @@ IP::IP(const uint8_t *buffer, uint32_t total_sz) total_sz -= head_len() * sizeof(uint32_t); if (total_sz) { // Don't try to decode it if it's fragmented - if(frag_off() == 0 || frag_off() == 0x4000) { + if(!is_fragmented()) { inner_pdu( Internals::pdu_from_flag( static_cast(_ip.protocol), @@ -155,6 +155,12 @@ void IP::init_ip_fields() { _padded_options_size = 0; } +bool IP::is_fragmented() const { + // It's 0 if offset == 0 && more_frag == 0 + // It's 0x4000 if dont_fragment = 1 + return frag_off() != 0 && frag_off() != 0x4000; +} + /* Setters */ void IP::tos(uint8_t new_tos) { diff --git a/src/ip_reassembler.cpp b/src/ip_reassembler.cpp new file mode 100644 index 0000000..bf92440 --- /dev/null +++ b/src/ip_reassembler.cpp @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2012, Matias Fontanini + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "ip.h" +#include "rawpdu.h" +#include "constants.h" +#include "internals.h" +#include "ip_reassembler.h" + +namespace Tins { +namespace Internals { +IPv4Stream::IPv4Stream() +: received_end(false), received_size(), total_size() +{ + +} + +void IPv4Stream::add_fragment(IP *ip) { + fragments_type::iterator it = fragments.begin(); + uint16_t offset = extract_offset(ip); + while(it != fragments.end() && offset > it->offset()) { + ++it; + } + // No duplicates plx + if(it != fragments.end() && it->offset() == offset) + return; + fragments.insert(it, IPv4Fragment(ip->inner_pdu(), offset)); + received_size += ip->inner_pdu()->size(); + if(!extract_more_frag(ip)) { + total_size = offset + ip->inner_pdu()->size(); + received_end = true; + } + if(offset == 0) + transport_proto = ip->protocol(); +} + +bool IPv4Stream::is_complete() const { + return received_end && received_size == total_size; +} + +PDU *IPv4Stream::allocate_pdu() const { + PDU::serialization_type buffer; + buffer.reserve(total_size); + // Check if we actually have all the data we need. Otherwise return nullptr; + uint16_t expected = 0; + for(fragments_type::const_iterator it = fragments.begin(); it != fragments.end(); ++it) { + if(expected != it->offset()) + return 0; + expected = it->offset() + it->payload().size(); + buffer.insert(buffer.end(), it->payload().begin(), it->payload().end()); + } + return Internals::pdu_from_flag( + static_cast(transport_proto), + &buffer[0], + buffer.size() + ); +} + +uint16_t IPv4Stream::extract_offset(const IP *ip) { + return (ip->frag_off() & 0x1fff) * 8; +} + +bool IPv4Stream::extract_more_frag(const IP *ip) { + return ip->frag_off() & 0x2000; +} +} // namespace Internals + +IPv4Reassembler::IPv4Reassembler(overlapping_technique technique) +: technique(technique) +{ + +} + +IPv4Reassembler::packet_status IPv4Reassembler::process(PDU &pdu) { + IP *ip = pdu.find_pdu(); + if(ip && ip->inner_pdu()) { + // There's fragmentation + if(ip->is_fragmented()) { + // Create it or look it up, it's the same + Internals::IPv4Stream &stream = streams[make_key(ip)]; + stream.add_fragment(ip); + if(stream.is_complete()) { + PDU *pdu = stream.allocate_pdu(); + // The packet is corrupt + if(!pdu) { + streams.erase(make_key(ip)); + return FRAGMENTED; + } + ip->inner_pdu(pdu); + ip->frag_off(0); + return REASSEMBLED; + } + else + return FRAGMENTED; + } + } + return NOT_FRAGMENTED; +} + +IPv4Reassembler::key_type IPv4Reassembler::make_key(const IP *ip) const { + return std::make_pair( + ip->id(), + make_address_pair(ip->src_addr(), ip->dst_addr()) + ); +} + +IPv4Reassembler::address_pair IPv4Reassembler::make_address_pair(IPv4Address addr1, IPv4Address addr2) const { + if(addr1 < addr2) + return std::make_pair(addr1, addr2); + else + return std::make_pair(addr2, addr1); +} + +void IPv4Reassembler::clear_streams() { + streams.clear(); +} + +void IPv4Reassembler::remove_stream(uint16_t id, IPv4Address addr1, IPv4Address addr2) { + streams.erase( + std::make_pair( + id, + make_address_pair(addr1, addr2) + ) + ); +} + +} // namespace Tins \ No newline at end of file diff --git a/tests/depends.d b/tests/depends.d index 1219d4e..1020dc8 100644 --- a/tests/depends.d +++ b/tests/depends.d @@ -86,11 +86,93 @@ ../include/exceptions.h: ../src/crypto.o: ../src/crypto.cpp ../include/crypto.h \ - ../include/config.h + ../include/config.h ../include/utils.h ../include/macros.h \ + ../include/ip_address.h ../include/cxxstd.h ../include/ipv6_address.h \ + ../include/hw_address.h ../include/internals.h ../include/constants.h \ + ../include/pdu.h ../include/exceptions.h ../include/snap.h \ + ../include/endianness.h ../include/small_uint.h ../include/rawpdu.h \ + ../include/handshake_capturer.h ../include/eapol.h \ + ../include/dot11/dot11_data.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../config.h ../include/dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../macros.h ../include/dot11/dot11_beacon.h \ + ../include/dot11/../dot11/dot11_mgmt.h \ + ../include/dot11/../dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../dot11/../config.h ../include/crypto.h: ../include/config.h: + +../include/utils.h: + +../include/macros.h: + +../include/ip_address.h: + +../include/cxxstd.h: + +../include/ipv6_address.h: + +../include/hw_address.h: + +../include/internals.h: + +../include/constants.h: + +../include/pdu.h: + +../include/exceptions.h: + +../include/snap.h: + +../include/endianness.h: + +../include/small_uint.h: + +../include/rawpdu.h: + +../include/handshake_capturer.h: + +../include/eapol.h: + +../include/dot11/dot11_data.h: + +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../macros.h: + +../include/dot11/dot11_beacon.h: + +../include/dot11/../dot11/dot11_mgmt.h: + +../include/dot11/../dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../dot11/../config.h: ../src/dhcp.o: ../src/dhcp.cpp ../include/endianness.h \ ../include/macros.h ../include/dhcp.h ../include/bootp.h \ ../include/pdu.h ../include/cxxstd.h ../include/exceptions.h \ @@ -187,53 +269,436 @@ ../include/exceptions.h: ../src/dot11/dot11_assoc.o: ../src/dot11/dot11_assoc.cpp \ - ../include/dot11/dot11_assoc.h ../include/config.h + ../include/dot11/dot11_assoc.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_mgmt.h \ + ../include/dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../macros.h ../include/dot11/dot11_assoc.h: -../include/config.h: +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_mgmt.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../macros.h: ../src/dot11/dot11_auth.o: ../src/dot11/dot11_auth.cpp \ - ../include/dot11/dot11_auth.h ../include/config.h + ../include/dot11/dot11_auth.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_mgmt.h \ + ../include/dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../macros.h ../include/dot11/dot11_auth.h: -../include/config.h: +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_mgmt.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../macros.h: ../src/dot11/dot11_base.o: ../src/dot11/dot11_base.cpp \ - ../include/dot11/dot11_base.h ../include/config.h + ../include/dot11/dot11_base.h ../include/dot11/../config.h \ + ../include/dot11/../pdu.h ../include/dot11/../macros.h \ + ../include/dot11/../cxxstd.h ../include/dot11/../exceptions.h \ + ../include/dot11/../pdu_option.h ../include/dot11/../small_uint.h \ + ../include/dot11/../hw_address.h ../include/dot11/../endianness.h \ + ../include/dot11/../cxxstd.h ../include/dot11/../macros.h \ + ../include/macros.h ../include/exceptions.h ../include/dot11.h \ + ../include/config.h ../include/dot11/dot11_base.h \ + ../include/dot11/dot11_data.h ../include/dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../config.h ../include/dot11/dot11_mgmt.h \ + ../include/dot11/dot11_beacon.h ../include/dot11/../dot11/dot11_mgmt.h \ + ../include/dot11/dot11_assoc.h ../include/dot11/dot11_auth.h \ + ../include/dot11/dot11_probe.h ../include/dot11/dot11_control.h \ + ../include/rawpdu.h ../include/pdu.h ../include/rsn_information.h \ + ../include/endianness.h ../include/packet_sender.h \ + ../include/network_interface.h ../include/hw_address.h \ + ../include/ip_address.h ../include/cxxstd.h ../include/macros.h \ + ../include/snap.h ../include/small_uint.h ../include/dot11/dot11_base.h: -../include/config.h: -../src/dot11/dot11_beacon.o: ../src/dot11/dot11_beacon.cpp \ - ../include/dot11/dot11_beacon.h ../include/config.h +../include/dot11/../config.h: -../include/dot11/dot11_beacon.h: +../include/dot11/../pdu.h: + +../include/dot11/../macros.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../exceptions.h: + +../include/dot11/../pdu_option.h: + +../include/dot11/../small_uint.h: + +../include/dot11/../hw_address.h: + +../include/dot11/../endianness.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../macros.h: + +../include/macros.h: + +../include/exceptions.h: + +../include/dot11.h: ../include/config.h: -../src/dot11/dot11_control.o: ../src/dot11/dot11_control.cpp \ - ../include/dot11/dot11_control.h ../include/config.h -../include/dot11/dot11_control.h: - -../include/config.h: -../src/dot11/dot11_data.o: ../src/dot11/dot11_data.cpp \ - ../include/dot11/dot11_data.h ../include/config.h +../include/dot11/dot11_base.h: ../include/dot11/dot11_data.h: -../include/config.h: -../src/dot11/dot11_mgmt.o: ../src/dot11/dot11_mgmt.cpp \ - ../include/dot11/dot11_mgmt.h ../include/config.h +../include/dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../config.h: ../include/dot11/dot11_mgmt.h: -../include/config.h: -../src/dot11/dot11_probe.o: ../src/dot11/dot11_probe.cpp \ - ../include/dot11/dot11_probe.h ../include/config.h +../include/dot11/dot11_beacon.h: + +../include/dot11/../dot11/dot11_mgmt.h: + +../include/dot11/dot11_assoc.h: + +../include/dot11/dot11_auth.h: ../include/dot11/dot11_probe.h: -../include/config.h: +../include/dot11/dot11_control.h: + +../include/rawpdu.h: + +../include/pdu.h: + +../include/rsn_information.h: + +../include/endianness.h: + +../include/packet_sender.h: + +../include/network_interface.h: + +../include/hw_address.h: + +../include/ip_address.h: + +../include/cxxstd.h: + +../include/macros.h: + +../include/snap.h: + +../include/small_uint.h: +../src/dot11/dot11_beacon.o: ../src/dot11/dot11_beacon.cpp \ + ../include/dot11/dot11_beacon.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_mgmt.h \ + ../include/dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../macros.h + +../include/dot11/dot11_beacon.h: + +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_mgmt.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../macros.h: +../src/dot11/dot11_control.o: ../src/dot11/dot11_control.cpp \ + ../include/dot11/dot11_control.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../config.h ../include/dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../macros.h + +../include/dot11/dot11_control.h: + +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../macros.h: +../src/dot11/dot11_data.o: ../src/dot11/dot11_data.cpp \ + ../include/dot11/dot11_data.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../config.h ../include/dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../macros.h ../include/rawpdu.h \ + ../include/pdu.h ../include/snap.h ../include/macros.h \ + ../include/endianness.h ../include/small_uint.h + +../include/dot11/dot11_data.h: + +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../macros.h: + +../include/rawpdu.h: + +../include/pdu.h: + +../include/snap.h: + +../include/macros.h: + +../include/endianness.h: + +../include/small_uint.h: +../src/dot11/dot11_mgmt.o: ../src/dot11/dot11_mgmt.cpp \ + ../include/dot11/dot11_mgmt.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../config.h ../include/dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../macros.h ../include/rsn_information.h \ + ../include/endianness.h + +../include/dot11/dot11_mgmt.h: + +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../macros.h: + +../include/rsn_information.h: + +../include/endianness.h: +../src/dot11/dot11_probe.o: ../src/dot11/dot11_probe.cpp \ + ../include/dot11/dot11_probe.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_mgmt.h \ + ../include/dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../macros.h + +../include/dot11/dot11_probe.h: + +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_mgmt.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../macros.h: ../src/dot1q.o: ../src/dot1q.cpp ../include/dot1q.h ../include/pdu.h \ ../include/macros.h ../include/cxxstd.h ../include/exceptions.h \ ../include/endianness.h ../include/small_uint.h ../include/internals.h \ @@ -367,11 +832,64 @@ ../include/exceptions.h: ../src/handshake_capturer.o: ../src/handshake_capturer.cpp \ - ../include/handshake_capturer.h ../include/config.h + ../include/handshake_capturer.h ../include/config.h \ + ../include/hw_address.h ../include/cxxstd.h ../include/eapol.h \ + ../include/pdu.h ../include/macros.h ../include/exceptions.h \ + ../include/small_uint.h ../include/endianness.h \ + ../include/dot11/dot11_data.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../config.h ../include/dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../macros.h ../include/handshake_capturer.h: ../include/config.h: + +../include/hw_address.h: + +../include/cxxstd.h: + +../include/eapol.h: + +../include/pdu.h: + +../include/macros.h: + +../include/exceptions.h: + +../include/small_uint.h: + +../include/endianness.h: + +../include/dot11/dot11_data.h: + +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../macros.h: ../src/icmp.o: ../src/icmp.cpp ../include/icmp.h ../include/macros.h \ ../include/pdu.h ../include/cxxstd.h ../include/exceptions.h \ ../include/endianness.h ../include/rawpdu.h ../include/utils.h \ @@ -455,7 +973,11 @@ ../include/ip.h ../include/small_uint.h ../include/endianness.h \ ../include/ip_address.h ../include/pdu_option.h ../include/ethernetII.h \ ../include/ieee802_3.h ../include/dot3.h ../include/radiotap.h \ - ../include/config.h ../include/dot11/dot11_base.h ../include/config.h \ + ../include/config.h ../include/dot11/dot11_base.h \ + ../include/dot11/../config.h ../include/dot11/../pdu.h \ + ../include/dot11/../pdu_option.h ../include/dot11/../small_uint.h \ + ../include/dot11/../hw_address.h ../include/dot11/../endianness.h \ + ../include/dot11/../cxxstd.h ../include/dot11/../macros.h \ ../include/ipv6.h ../include/ipv6_address.h ../include/tcp.h \ ../include/udp.h ../include/ipsec.h ../include/icmp.h \ ../include/icmpv6.h ../include/arp.h ../include/eapol.h \ @@ -499,7 +1021,21 @@ ../include/dot11/dot11_base.h: -../include/config.h: +../include/dot11/../config.h: + +../include/dot11/../pdu.h: + +../include/dot11/../pdu_option.h: + +../include/dot11/../small_uint.h: + +../include/dot11/../hw_address.h: + +../include/dot11/../endianness.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../macros.h: ../include/ipv6.h: @@ -608,6 +1144,42 @@ ../include/exceptions.h: ../include/hw_address.h: +../src/ip_reassembler.o: ../src/ip_reassembler.cpp ../include/ip.h \ + ../include/pdu.h ../include/macros.h ../include/cxxstd.h \ + ../include/exceptions.h ../include/small_uint.h ../include/endianness.h \ + ../include/ip_address.h ../include/pdu_option.h ../include/rawpdu.h \ + ../include/constants.h ../include/internals.h ../include/constants.h \ + ../include/hw_address.h ../include/ip_reassembler.h + +../include/ip.h: + +../include/pdu.h: + +../include/macros.h: + +../include/cxxstd.h: + +../include/exceptions.h: + +../include/small_uint.h: + +../include/endianness.h: + +../include/ip_address.h: + +../include/pdu_option.h: + +../include/rawpdu.h: + +../include/constants.h: + +../include/internals.h: + +../include/constants.h: + +../include/hw_address.h: + +../include/ip_reassembler.h: ../src/ipsec.o: ../src/ipsec.cpp ../include/ipsec.h ../include/pdu.h \ ../include/macros.h ../include/cxxstd.h ../include/exceptions.h \ ../include/endianness.h ../include/small_uint.h ../include/internals.h \ @@ -811,7 +1383,11 @@ ../include/macros.h ../include/network_interface.h \ ../include/ethernetII.h ../include/pdu.h ../include/endianness.h \ ../include/radiotap.h ../include/config.h ../include/dot11/dot11_base.h \ - ../include/config.h ../include/ieee802_3.h ../include/dot3.h \ + ../include/dot11/../config.h ../include/dot11/../pdu.h \ + ../include/dot11/../pdu_option.h ../include/dot11/../exceptions.h \ + ../include/dot11/../small_uint.h ../include/dot11/../hw_address.h \ + ../include/dot11/../endianness.h ../include/dot11/../cxxstd.h \ + ../include/dot11/../macros.h ../include/ieee802_3.h ../include/dot3.h \ ../include/internals.h ../include/constants.h ../include/packet_sender.h: @@ -846,7 +1422,23 @@ ../include/dot11/dot11_base.h: -../include/config.h: +../include/dot11/../config.h: + +../include/dot11/../pdu.h: + +../include/dot11/../pdu_option.h: + +../include/dot11/../exceptions.h: + +../include/dot11/../small_uint.h: + +../include/dot11/../hw_address.h: + +../include/dot11/../endianness.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../macros.h: ../include/ieee802_3.h: @@ -910,16 +1502,41 @@ ../include/ip_address.h: ../src/ppi.o: ../src/ppi.cpp ../include/dot11/dot11_base.h \ - ../include/config.h ../include/dot3.h ../include/macros.h \ - ../include/pdu.h ../include/cxxstd.h ../include/exceptions.h \ - ../include/endianness.h ../include/hw_address.h ../include/ethernetII.h \ - ../include/radiotap.h ../include/config.h ../include/loopback.h \ - ../include/sll.h ../include/ppi.h ../include/small_uint.h \ - ../include/internals.h ../include/constants.h ../include/exceptions.h + ../include/dot11/../config.h ../include/dot11/../pdu.h \ + ../include/dot11/../macros.h ../include/dot11/../cxxstd.h \ + ../include/dot11/../exceptions.h ../include/dot11/../pdu_option.h \ + ../include/dot11/../small_uint.h ../include/dot11/../hw_address.h \ + ../include/dot11/../endianness.h ../include/dot11/../cxxstd.h \ + ../include/dot11/../macros.h ../include/dot3.h ../include/macros.h \ + ../include/pdu.h ../include/endianness.h ../include/hw_address.h \ + ../include/ethernetII.h ../include/radiotap.h ../include/config.h \ + ../include/loopback.h ../include/sll.h ../include/ppi.h \ + ../include/small_uint.h ../include/internals.h ../include/constants.h \ + ../include/exceptions.h ../include/dot11/dot11_base.h: -../include/config.h: +../include/dot11/../config.h: + +../include/dot11/../pdu.h: + +../include/dot11/../macros.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../exceptions.h: + +../include/dot11/../pdu_option.h: + +../include/dot11/../small_uint.h: + +../include/dot11/../hw_address.h: + +../include/dot11/../endianness.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../macros.h: ../include/dot3.h: @@ -927,10 +1544,6 @@ ../include/pdu.h: -../include/cxxstd.h: - -../include/exceptions.h: - ../include/endianness.h: ../include/hw_address.h: @@ -977,11 +1590,74 @@ ../include/exceptions.h: ../src/radiotap.o: ../src/radiotap.cpp ../include/radiotap.h \ - ../include/config.h + ../include/config.h ../include/macros.h ../include/pdu.h \ + ../include/cxxstd.h ../include/exceptions.h ../include/endianness.h \ + ../include/macros.h ../include/dot11/dot11_base.h \ + ../include/dot11/../config.h ../include/dot11/../pdu.h \ + ../include/dot11/../pdu_option.h ../include/dot11/../exceptions.h \ + ../include/dot11/../small_uint.h ../include/dot11/../hw_address.h \ + ../include/dot11/../cxxstd.h ../include/dot11/../endianness.h \ + ../include/dot11/../cxxstd.h ../include/dot11/../macros.h \ + ../include/utils.h ../include/ip_address.h ../include/ipv6_address.h \ + ../include/hw_address.h ../include/internals.h ../include/constants.h \ + ../include/packet_sender.h ../include/network_interface.h \ + ../include/exceptions.h ../include/radiotap.h: ../include/config.h: + +../include/macros.h: + +../include/pdu.h: + +../include/cxxstd.h: + +../include/exceptions.h: + +../include/endianness.h: + +../include/macros.h: + +../include/dot11/dot11_base.h: + +../include/dot11/../config.h: + +../include/dot11/../pdu.h: + +../include/dot11/../pdu_option.h: + +../include/dot11/../exceptions.h: + +../include/dot11/../small_uint.h: + +../include/dot11/../hw_address.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../endianness.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../macros.h: + +../include/utils.h: + +../include/ip_address.h: + +../include/ipv6_address.h: + +../include/hw_address.h: + +../include/internals.h: + +../include/constants.h: + +../include/packet_sender.h: + +../include/network_interface.h: + +../include/exceptions.h: ../src/rawpdu.o: ../src/rawpdu.cpp ../include/rawpdu.h ../include/pdu.h \ ../include/macros.h ../include/cxxstd.h ../include/exceptions.h @@ -1073,10 +1749,15 @@ ../include/pdu.h ../include/macros.h ../include/cxxstd.h \ ../include/exceptions.h ../include/packet.h ../include/timestamp.h \ ../include/internals.h ../include/constants.h ../include/hw_address.h \ - ../include/dot11/dot11_base.h ../include/config.h \ - ../include/ethernetII.h ../include/endianness.h ../include/radiotap.h \ - ../include/config.h ../include/loopback.h ../include/dot3.h \ - ../include/sll.h ../include/ppi.h ../include/small_uint.h + ../include/dot11/dot11_base.h ../include/dot11/../config.h \ + ../include/dot11/../pdu.h ../include/dot11/../pdu_option.h \ + ../include/dot11/../exceptions.h ../include/dot11/../small_uint.h \ + ../include/dot11/../hw_address.h ../include/dot11/../endianness.h \ + ../include/dot11/../macros.h ../include/dot11/../cxxstd.h \ + ../include/dot11/../macros.h ../include/ethernetII.h \ + ../include/endianness.h ../include/radiotap.h ../include/config.h \ + ../include/loopback.h ../include/dot3.h ../include/sll.h \ + ../include/ppi.h ../include/small_uint.h ../include/sniffer.h: @@ -1100,7 +1781,25 @@ ../include/dot11/dot11_base.h: -../include/config.h: +../include/dot11/../config.h: + +../include/dot11/../pdu.h: + +../include/dot11/../pdu_option.h: + +../include/dot11/../exceptions.h: + +../include/dot11/../small_uint.h: + +../include/dot11/../hw_address.h: + +../include/dot11/../endianness.h: + +../include/dot11/../macros.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../macros.h: ../include/ethernetII.h: @@ -1521,95 +2220,967 @@ src/dns.o: src/dns.cpp ../include/dns.h ../include/macros.h \ ../include/constants.h: src/dot11/ack.o: src/dot11/ack.cpp ../include/dot11/dot11_control.h \ - ../include/config.h + ../include/dot11/../config.h ../include/dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../config.h ../include/dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../macros.h include/tests/dot11.h \ + ../include/dot11/dot11_base.h ../include/dot11/dot11_control.h: -../include/config.h: +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../macros.h: + +include/tests/dot11.h: + +../include/dot11/dot11_base.h: src/dot11/assoc_request.o: src/dot11/assoc_request.cpp \ - ../include/dot11/dot11_assoc.h ../include/config.h + ../include/dot11/dot11_assoc.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_mgmt.h \ + ../include/dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + include/tests/dot11_mgmt.h include/tests/dot11.h \ + ../include/dot11/dot11_base.h ../include/dot11/dot11_mgmt.h ../include/dot11/dot11_assoc.h: -../include/config.h: +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_mgmt.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +include/tests/dot11_mgmt.h: + +include/tests/dot11.h: + +../include/dot11/dot11_base.h: + +../include/dot11/dot11_mgmt.h: src/dot11/assoc_response.o: src/dot11/assoc_response.cpp \ - ../include/dot11/dot11_assoc.h ../include/config.h + ../include/dot11/dot11_assoc.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_mgmt.h \ + ../include/dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + include/tests/dot11_mgmt.h include/tests/dot11.h \ + ../include/dot11/dot11_base.h ../include/dot11/dot11_mgmt.h ../include/dot11/dot11_assoc.h: -../include/config.h: +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_mgmt.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +include/tests/dot11_mgmt.h: + +include/tests/dot11.h: + +../include/dot11/dot11_base.h: + +../include/dot11/dot11_mgmt.h: src/dot11/authentication.o: src/dot11/authentication.cpp \ - ../include/dot11/dot11_auth.h ../include/config.h + ../include/dot11/dot11_auth.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_mgmt.h \ + ../include/dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + include/tests/dot11_mgmt.h include/tests/dot11.h \ + ../include/dot11/dot11_base.h ../include/dot11/dot11_mgmt.h ../include/dot11/dot11_auth.h: -../include/config.h: +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_mgmt.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +include/tests/dot11_mgmt.h: + +include/tests/dot11.h: + +../include/dot11/dot11_base.h: + +../include/dot11/dot11_mgmt.h: src/dot11/beacon.o: src/dot11/beacon.cpp ../include/dot11/dot11_beacon.h \ - ../include/config.h + ../include/dot11/../config.h ../include/dot11/../dot11/dot11_mgmt.h \ + ../include/dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + ../include/rsn_information.h ../include/endianness.h \ + include/tests/dot11_mgmt.h include/tests/dot11.h \ + ../include/dot11/dot11_base.h ../include/dot11/dot11_mgmt.h ../include/dot11/dot11_beacon.h: -../include/config.h: +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_mgmt.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +../include/rsn_information.h: + +../include/endianness.h: + +include/tests/dot11_mgmt.h: + +include/tests/dot11.h: + +../include/dot11/dot11_base.h: + +../include/dot11/dot11_mgmt.h: src/dot11/block_ack_request.o: src/dot11/block_ack_request.cpp \ - ../include/dot11/dot11_control.h ../include/config.h + ../include/dot11/dot11_control.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../config.h ../include/dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../macros.h include/tests/dot11.h \ + ../include/dot11/dot11_base.h ../include/dot11/dot11_control.h: -../include/config.h: -src/dot11/cfend.o: src/dot11/cfend.cpp ../include/config.h +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../macros.h: + +include/tests/dot11.h: + +../include/dot11/dot11_base.h: +src/dot11/cfend.o: src/dot11/cfend.cpp ../include/config.h \ + include/tests/dot11_control.h include/tests/dot11.h \ + ../include/dot11/dot11_base.h ../include/dot11/../config.h \ + ../include/dot11/../pdu.h ../include/dot11/../macros.h \ + ../include/dot11/../cxxstd.h ../include/dot11/../exceptions.h \ + ../include/dot11/../pdu_option.h ../include/dot11/../small_uint.h \ + ../include/dot11/../hw_address.h ../include/dot11/../endianness.h \ + ../include/dot11/../cxxstd.h ../include/dot11/../macros.h \ + ../include/dot11/dot11_control.h ../include/dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../config.h ../include/config.h: -src/dot11/cfendack.o: src/dot11/cfendack.cpp ../include/config.h + +include/tests/dot11_control.h: + +include/tests/dot11.h: + +../include/dot11/dot11_base.h: + +../include/dot11/../config.h: + +../include/dot11/../pdu.h: + +../include/dot11/../macros.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../exceptions.h: + +../include/dot11/../pdu_option.h: + +../include/dot11/../small_uint.h: + +../include/dot11/../hw_address.h: + +../include/dot11/../endianness.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../macros.h: + +../include/dot11/dot11_control.h: + +../include/dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../config.h: +src/dot11/cfendack.o: src/dot11/cfendack.cpp ../include/config.h \ + include/tests/dot11_control.h include/tests/dot11.h \ + ../include/dot11/dot11_base.h ../include/dot11/../config.h \ + ../include/dot11/../pdu.h ../include/dot11/../macros.h \ + ../include/dot11/../cxxstd.h ../include/dot11/../exceptions.h \ + ../include/dot11/../pdu_option.h ../include/dot11/../small_uint.h \ + ../include/dot11/../hw_address.h ../include/dot11/../endianness.h \ + ../include/dot11/../cxxstd.h ../include/dot11/../macros.h \ + ../include/dot11/dot11_control.h ../include/dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../config.h ../include/config.h: -src/dot11/data.o: src/dot11/data.cpp ../include/config.h + +include/tests/dot11_control.h: + +include/tests/dot11.h: + +../include/dot11/dot11_base.h: + +../include/dot11/../config.h: + +../include/dot11/../pdu.h: + +../include/dot11/../macros.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../exceptions.h: + +../include/dot11/../pdu_option.h: + +../include/dot11/../small_uint.h: + +../include/dot11/../hw_address.h: + +../include/dot11/../endianness.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../macros.h: + +../include/dot11/dot11_control.h: + +../include/dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../config.h: +src/dot11/data.o: src/dot11/data.cpp ../include/config.h \ + include/tests/dot11_data.h include/tests/dot11.h \ + ../include/dot11/dot11_base.h ../include/dot11/../config.h \ + ../include/dot11/../pdu.h ../include/dot11/../macros.h \ + ../include/dot11/../cxxstd.h ../include/dot11/../exceptions.h \ + ../include/dot11/../pdu_option.h ../include/dot11/../small_uint.h \ + ../include/dot11/../hw_address.h ../include/dot11/../endianness.h \ + ../include/dot11/../cxxstd.h ../include/dot11/../macros.h \ + ../include/dot11/dot11_data.h ../include/dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../config.h ../include/config.h: + +include/tests/dot11_data.h: + +include/tests/dot11.h: + +../include/dot11/dot11_base.h: + +../include/dot11/../config.h: + +../include/dot11/../pdu.h: + +../include/dot11/../macros.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../exceptions.h: + +../include/dot11/../pdu_option.h: + +../include/dot11/../small_uint.h: + +../include/dot11/../hw_address.h: + +../include/dot11/../endianness.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../macros.h: + +../include/dot11/dot11_data.h: + +../include/dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../config.h: src/dot11/deauthentication.o: src/dot11/deauthentication.cpp \ - ../include/dot11/dot11_auth.h ../include/config.h + ../include/dot11/dot11_auth.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_mgmt.h \ + ../include/dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + include/tests/dot11_mgmt.h include/tests/dot11.h \ + ../include/dot11/dot11_base.h ../include/dot11/dot11_mgmt.h ../include/dot11/dot11_auth.h: -../include/config.h: +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_mgmt.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +include/tests/dot11_mgmt.h: + +include/tests/dot11.h: + +../include/dot11/dot11_base.h: + +../include/dot11/dot11_mgmt.h: src/dot11/disassoc.o: src/dot11/disassoc.cpp \ - ../include/dot11/dot11_assoc.h ../include/config.h + ../include/dot11/dot11_assoc.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_mgmt.h \ + ../include/dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + include/tests/dot11_mgmt.h include/tests/dot11.h \ + ../include/dot11/dot11_base.h ../include/dot11/dot11_mgmt.h ../include/dot11/dot11_assoc.h: -../include/config.h: -src/dot11/dot11.o: src/dot11/dot11.cpp ../include/config.h +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_mgmt.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +include/tests/dot11_mgmt.h: + +include/tests/dot11.h: + +../include/dot11/dot11_base.h: + +../include/dot11/dot11_mgmt.h: +src/dot11/dot11.o: src/dot11/dot11.cpp ../include/config.h \ + include/tests/dot11.h ../include/dot11/dot11_base.h \ + ../include/dot11/../config.h ../include/dot11/../pdu.h \ + ../include/dot11/../macros.h ../include/dot11/../cxxstd.h \ + ../include/dot11/../exceptions.h ../include/dot11/../pdu_option.h \ + ../include/dot11/../small_uint.h ../include/dot11/../hw_address.h \ + ../include/dot11/../endianness.h ../include/dot11/../cxxstd.h \ + ../include/dot11/../macros.h ../include/utils.h ../include/macros.h \ + ../include/ip_address.h ../include/cxxstd.h ../include/ipv6_address.h \ + ../include/hw_address.h ../include/internals.h ../include/constants.h \ + ../include/pdu.h ../include/config.h: + +include/tests/dot11.h: + +../include/dot11/dot11_base.h: + +../include/dot11/../config.h: + +../include/dot11/../pdu.h: + +../include/dot11/../macros.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../exceptions.h: + +../include/dot11/../pdu_option.h: + +../include/dot11/../small_uint.h: + +../include/dot11/../hw_address.h: + +../include/dot11/../endianness.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../macros.h: + +../include/utils.h: + +../include/macros.h: + +../include/ip_address.h: + +../include/cxxstd.h: + +../include/ipv6_address.h: + +../include/hw_address.h: + +../include/internals.h: + +../include/constants.h: + +../include/pdu.h: src/dot11/probe_request.o: src/dot11/probe_request.cpp \ - ../include/dot11/dot11_probe.h ../include/config.h + ../include/dot11/dot11_probe.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_mgmt.h \ + ../include/dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + include/tests/dot11_mgmt.h include/tests/dot11.h \ + ../include/dot11/dot11_base.h ../include/dot11/dot11_mgmt.h ../include/dot11/dot11_probe.h: -../include/config.h: +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_mgmt.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +include/tests/dot11_mgmt.h: + +include/tests/dot11.h: + +../include/dot11/dot11_base.h: + +../include/dot11/dot11_mgmt.h: src/dot11/probe_response.o: src/dot11/probe_response.cpp \ - ../include/dot11/dot11_probe.h ../include/config.h + ../include/dot11/dot11_probe.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_mgmt.h \ + ../include/dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + include/tests/dot11_mgmt.h include/tests/dot11.h \ + ../include/dot11/dot11_base.h ../include/dot11/dot11_mgmt.h ../include/dot11/dot11_probe.h: -../include/config.h: -src/dot11/pspoll.o: src/dot11/pspoll.cpp ../include/config.h +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_mgmt.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +include/tests/dot11_mgmt.h: + +include/tests/dot11.h: + +../include/dot11/dot11_base.h: + +../include/dot11/dot11_mgmt.h: +src/dot11/pspoll.o: src/dot11/pspoll.cpp ../include/config.h \ + include/tests/dot11_control.h include/tests/dot11.h \ + ../include/dot11/dot11_base.h ../include/dot11/../config.h \ + ../include/dot11/../pdu.h ../include/dot11/../macros.h \ + ../include/dot11/../cxxstd.h ../include/dot11/../exceptions.h \ + ../include/dot11/../pdu_option.h ../include/dot11/../small_uint.h \ + ../include/dot11/../hw_address.h ../include/dot11/../endianness.h \ + ../include/dot11/../cxxstd.h ../include/dot11/../macros.h \ + ../include/dot11/dot11_control.h ../include/dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../config.h ../include/config.h: + +include/tests/dot11_control.h: + +include/tests/dot11.h: + +../include/dot11/dot11_base.h: + +../include/dot11/../config.h: + +../include/dot11/../pdu.h: + +../include/dot11/../macros.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../exceptions.h: + +../include/dot11/../pdu_option.h: + +../include/dot11/../small_uint.h: + +../include/dot11/../hw_address.h: + +../include/dot11/../endianness.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../macros.h: + +../include/dot11/dot11_control.h: + +../include/dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../config.h: src/dot11/reassoc_request.o: src/dot11/reassoc_request.cpp \ - ../include/dot11/dot11_assoc.h ../include/config.h + ../include/dot11/dot11_assoc.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_mgmt.h \ + ../include/dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + include/tests/dot11_mgmt.h include/tests/dot11.h \ + ../include/dot11/dot11_base.h ../include/dot11/dot11_mgmt.h ../include/dot11/dot11_assoc.h: -../include/config.h: +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_mgmt.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +include/tests/dot11_mgmt.h: + +include/tests/dot11.h: + +../include/dot11/dot11_base.h: + +../include/dot11/dot11_mgmt.h: src/dot11/reassoc_response.o: src/dot11/reassoc_response.cpp \ - ../include/dot11/dot11_assoc.h ../include/config.h + ../include/dot11/dot11_assoc.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_mgmt.h \ + ../include/dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../dot11/../config.h \ + ../include/dot11/../dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../dot11/../macros.h \ + include/tests/dot11_mgmt.h include/tests/dot11.h \ + ../include/dot11/dot11_base.h ../include/dot11/dot11_mgmt.h ../include/dot11/dot11_assoc.h: -../include/config.h: -src/dot11/rts.o: src/dot11/rts.cpp ../include/config.h +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_mgmt.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../dot11/../config.h: + +../include/dot11/../dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../dot11/../macros.h: + +include/tests/dot11_mgmt.h: + +include/tests/dot11.h: + +../include/dot11/dot11_base.h: + +../include/dot11/dot11_mgmt.h: +src/dot11/rts.o: src/dot11/rts.cpp ../include/config.h \ + include/tests/dot11_control.h include/tests/dot11.h \ + ../include/dot11/dot11_base.h ../include/dot11/../config.h \ + ../include/dot11/../pdu.h ../include/dot11/../macros.h \ + ../include/dot11/../cxxstd.h ../include/dot11/../exceptions.h \ + ../include/dot11/../pdu_option.h ../include/dot11/../small_uint.h \ + ../include/dot11/../hw_address.h ../include/dot11/../endianness.h \ + ../include/dot11/../cxxstd.h ../include/dot11/../macros.h \ + ../include/dot11/dot11_control.h ../include/dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../config.h ../include/config.h: + +include/tests/dot11_control.h: + +include/tests/dot11.h: + +../include/dot11/dot11_base.h: + +../include/dot11/../config.h: + +../include/dot11/../pdu.h: + +../include/dot11/../macros.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../exceptions.h: + +../include/dot11/../pdu_option.h: + +../include/dot11/../small_uint.h: + +../include/dot11/../hw_address.h: + +../include/dot11/../endianness.h: + +../include/dot11/../cxxstd.h: + +../include/dot11/../macros.h: + +../include/dot11/dot11_control.h: + +../include/dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../config.h: src/dot1q.o: src/dot1q.cpp ../include/dot1q.h ../include/pdu.h \ ../include/macros.h ../include/cxxstd.h ../include/exceptions.h \ ../include/endianness.h ../include/small_uint.h ../include/arp.h \ @@ -1799,6 +3370,30 @@ src/ip.o: src/ip.cpp ../include/ip.h ../include/pdu.h ../include/macros.h \ ../include/internals.h: ../include/constants.h: +src/ip_reassembler.o: src/ip_reassembler.cpp ../include/ip_reassembler.h \ + ../include/pdu.h ../include/macros.h ../include/cxxstd.h \ + ../include/exceptions.h ../include/ethernetII.h ../include/endianness.h \ + ../include/hw_address.h ../include/udp.h ../include/rawpdu.h + +../include/ip_reassembler.h: + +../include/pdu.h: + +../include/macros.h: + +../include/cxxstd.h: + +../include/exceptions.h: + +../include/ethernetII.h: + +../include/endianness.h: + +../include/hw_address.h: + +../include/udp.h: + +../include/rawpdu.h: src/ipaddress.o: src/ipaddress.cpp ../include/ip_address.h \ ../include/cxxstd.h ../include/utils.h ../include/macros.h \ ../include/ip_address.h ../include/ipv6_address.h \ @@ -2042,11 +3637,60 @@ src/pdu.o: src/pdu.cpp ../include/ip.h ../include/pdu.h \ ../include/packet.h: ../include/timestamp.h: -src/ppi.o: src/ppi.cpp ../include/dot11/dot11_data.h ../include/config.h +src/ppi.o: src/ppi.cpp ../include/dot11/dot11_data.h \ + ../include/dot11/../config.h ../include/dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../config.h ../include/dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../macros.h \ + ../include/dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../macros.h ../include/ppi.h ../include/pdu.h \ + ../include/endianness.h ../include/small_uint.h ../include/udp.h \ + ../include/macros.h ../include/dot11/dot11_data.h: -../include/config.h: +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../macros.h: + +../include/dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../macros.h: + +../include/ppi.h: + +../include/pdu.h: + +../include/endianness.h: + +../include/small_uint.h: + +../include/udp.h: + +../include/macros.h: src/pppoe.o: src/pppoe.cpp ../include/pppoe.h ../include/pdu.h \ ../include/macros.h ../include/cxxstd.h ../include/exceptions.h \ ../include/endianness.h ../include/small_uint.h ../include/pdu_option.h \ @@ -2072,11 +3716,84 @@ src/pppoe.o: src/pppoe.cpp ../include/pppoe.h ../include/pdu.h \ ../include/hw_address.h: src/radiotap.o: src/radiotap.cpp ../include/radiotap.h \ - ../include/config.h + ../include/config.h ../include/macros.h ../include/pdu.h \ + ../include/cxxstd.h ../include/exceptions.h ../include/endianness.h \ + ../include/dot11/dot11_data.h ../include/dot11/../config.h \ + ../include/dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../config.h ../include/dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../macros.h ../include/dot11/dot11_beacon.h \ + ../include/dot11/../dot11/dot11_mgmt.h \ + ../include/dot11/../dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../dot11/../config.h ../include/utils.h \ + ../include/ip_address.h ../include/ipv6_address.h \ + ../include/hw_address.h ../include/internals.h ../include/constants.h ../include/radiotap.h: ../include/config.h: + +../include/macros.h: + +../include/pdu.h: + +../include/cxxstd.h: + +../include/exceptions.h: + +../include/endianness.h: + +../include/dot11/dot11_data.h: + +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../macros.h: + +../include/dot11/dot11_beacon.h: + +../include/dot11/../dot11/dot11_mgmt.h: + +../include/dot11/../dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../dot11/../config.h: + +../include/utils.h: + +../include/ip_address.h: + +../include/ipv6_address.h: + +../include/hw_address.h: + +../include/internals.h: + +../include/constants.h: src/rc4eapol.o: src/rc4eapol.cpp ../include/eapol.h ../include/pdu.h \ ../include/macros.h ../include/cxxstd.h ../include/exceptions.h \ ../include/small_uint.h ../include/endianness.h ../include/utils.h \ @@ -2371,9 +4088,139 @@ src/utils.o: src/utils.cpp ../include/utils.h ../include/macros.h \ ../include/ip_address.h: ../include/ipv6_address.h: -src/wep_decrypt.o: src/wep_decrypt.cpp ../include/config.h +src/wep_decrypt.o: src/wep_decrypt.cpp ../include/config.h \ + ../include/crypto.h ../include/config.h ../include/utils.h \ + ../include/macros.h ../include/ip_address.h ../include/cxxstd.h \ + ../include/ipv6_address.h ../include/hw_address.h ../include/internals.h \ + ../include/constants.h ../include/pdu.h ../include/exceptions.h \ + ../include/snap.h ../include/endianness.h ../include/small_uint.h \ + ../include/rawpdu.h ../include/handshake_capturer.h ../include/eapol.h \ + ../include/arp.h ../include/dot11/dot11_data.h \ + ../include/dot11/../config.h ../include/dot11/../dot11/dot11_base.h \ + ../include/dot11/../dot11/../config.h ../include/dot11/../dot11/../pdu.h \ + ../include/dot11/../dot11/../pdu_option.h \ + ../include/dot11/../dot11/../exceptions.h \ + ../include/dot11/../dot11/../small_uint.h \ + ../include/dot11/../dot11/../hw_address.h \ + ../include/dot11/../dot11/../endianness.h \ + ../include/dot11/../dot11/../cxxstd.h \ + ../include/dot11/../dot11/../macros.h ../include/config.h: -src/wpa2_decrypt.o: src/wpa2_decrypt.cpp ../include/config.h + +../include/crypto.h: ../include/config.h: + +../include/utils.h: + +../include/macros.h: + +../include/ip_address.h: + +../include/cxxstd.h: + +../include/ipv6_address.h: + +../include/hw_address.h: + +../include/internals.h: + +../include/constants.h: + +../include/pdu.h: + +../include/exceptions.h: + +../include/snap.h: + +../include/endianness.h: + +../include/small_uint.h: + +../include/rawpdu.h: + +../include/handshake_capturer.h: + +../include/eapol.h: + +../include/arp.h: + +../include/dot11/dot11_data.h: + +../include/dot11/../config.h: + +../include/dot11/../dot11/dot11_base.h: + +../include/dot11/../dot11/../config.h: + +../include/dot11/../dot11/../pdu.h: + +../include/dot11/../dot11/../pdu_option.h: + +../include/dot11/../dot11/../exceptions.h: + +../include/dot11/../dot11/../small_uint.h: + +../include/dot11/../dot11/../hw_address.h: + +../include/dot11/../dot11/../endianness.h: + +../include/dot11/../dot11/../cxxstd.h: + +../include/dot11/../dot11/../macros.h: +src/wpa2_decrypt.o: src/wpa2_decrypt.cpp ../include/config.h \ + ../include/crypto.h ../include/config.h ../include/utils.h \ + ../include/macros.h ../include/ip_address.h ../include/cxxstd.h \ + ../include/ipv6_address.h ../include/hw_address.h ../include/internals.h \ + ../include/constants.h ../include/pdu.h ../include/exceptions.h \ + ../include/snap.h ../include/endianness.h ../include/small_uint.h \ + ../include/rawpdu.h ../include/handshake_capturer.h ../include/eapol.h \ + ../include/radiotap.h ../include/udp.h ../include/tcp.h \ + ../include/pdu_option.h + +../include/config.h: + +../include/crypto.h: + +../include/config.h: + +../include/utils.h: + +../include/macros.h: + +../include/ip_address.h: + +../include/cxxstd.h: + +../include/ipv6_address.h: + +../include/hw_address.h: + +../include/internals.h: + +../include/constants.h: + +../include/pdu.h: + +../include/exceptions.h: + +../include/snap.h: + +../include/endianness.h: + +../include/small_uint.h: + +../include/rawpdu.h: + +../include/handshake_capturer.h: + +../include/eapol.h: + +../include/radiotap.h: + +../include/udp.h: + +../include/tcp.h: + +../include/pdu_option.h: diff --git a/tests/src/ip_reassembler.cpp b/tests/src/ip_reassembler.cpp new file mode 100644 index 0000000..3a8746a --- /dev/null +++ b/tests/src/ip_reassembler.cpp @@ -0,0 +1,76 @@ +#include +#include +#include +#include +#include "ip_reassembler.h" +#include "ethernetII.h" +#include "udp.h" +#include "rawpdu.h" + +using namespace Tins; + +class IPv4ReassemblerTest : public testing::Test { +public: + static const uint8_t packets[][1514]; + static const size_t packet_sizes[], orderings[][11]; + + void test_packets(const std::vector > &vt); +}; + +const uint8_t IPv4ReassemblerTest::packets[][1514] = { + {130,111,185,223,39,177,226,183,186,36,71,231,8,0,69,0,5,220,53,162,32,0,64,17,169,88,192,168,0,100,176,5,5,5,177,46,34,184,58,160,124,236,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65}, + {130,111,185,223,39,177,226,183,186,36,71,231,8,0,69,0,5,220,53,162,32,185,64,17,168,159,192,168,0,100,176,5,5,5,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65}, + {130,111,185,223,39,177,226,183,186,36,71,231,8,0,69,0,5,220,53,162,33,114,64,17,167,230,192,168,0,100,176,5,5,5,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65}, + {130,111,185,223,39,177,226,183,186,36,71,231,8,0,69,0,5,220,53,162,34,43,64,17,167,45,192,168,0,100,176,5,5,5,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65}, + {130,111,185,223,39,177,226,183,186,36,71,231,8,0,69,0,5,220,53,162,34,228,64,17,166,116,192,168,0,100,176,5,5,5,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65}, + {130,111,185,223,39,177,226,183,186,36,71,231,8,0,69,0,5,220,53,162,35,157,64,17,165,187,192,168,0,100,176,5,5,5,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65}, + {130,111,185,223,39,177,226,183,186,36,71,231,8,0,69,0,5,220,53,162,36,86,64,17,165,2,192,168,0,100,176,5,5,5,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65}, + {130,111,185,223,39,177,226,183,186,36,71,231,8,0,69,0,5,220,53,162,37,15,64,17,164,73,192,168,0,100,176,5,5,5,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65}, + {130,111,185,223,39,177,226,183,186,36,71,231,8,0,69,0,5,220,53,162,37,200,64,17,163,144,192,168,0,100,176,5,5,5,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65}, + {130,111,185,223,39,177,226,183,186,36,71,231,8,0,69,0,5,220,53,162,38,129,64,17,162,215,192,168,0,100,176,5,5,5,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65}, + {130,111,185,223,39,177,226,183,186,36,71,231,8,0,69,0,0,228,53,162,7,58,64,17,199,22,192,168,0,100,176,5,5,5,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65} +}; + +const size_t IPv4ReassemblerTest::packet_sizes[] = { + 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 242 +}; + +const size_t IPv4ReassemblerTest::orderings[][11] = { + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, + { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }, + { 4, 9, 10, 5, 8, 6, 1, 2, 3, 7, 0 }, + { 1, 9, 8, 5, 4, 2, 0, 7, 6, 3, 10 } +}; + +void IPv4ReassemblerTest::test_packets(const std::vector > &vt) { + IPv4Reassembler reassembler; + for(size_t i = 0; i < vt.size(); ++i) { + EthernetII eth(vt[i].first, vt[i].second); + IPv4Reassembler::packet_status status = reassembler.process(eth); + EXPECT_NE(IPv4Reassembler::NOT_FRAGMENTED, status); + if(status == IPv4Reassembler::REASSEMBLED) { + ASSERT_EQ(static_cast(vt.size() - 1), i); + ASSERT_TRUE(eth.find_pdu()); + RawPDU *raw = eth.find_pdu(); + ASSERT_TRUE(raw); + ASSERT_EQ(15000, raw->payload().size()); + } + else if(status == IPv4Reassembler::FRAGMENTED) + EXPECT_NE(vt.size() - 1, i); + } +} + +TEST_F(IPv4ReassemblerTest, Reassemble) { + for(size_t i = 0; i < 3; ++i) { + std::vector > vt; + for(size_t j = 0; j < 11; ++j) { + vt.push_back( + std::make_pair( + packets[orderings[i][j]], + packet_sizes[orderings[i][j]] + ) + ); + } + test_packets(vt); + } +}