From e4093b41786792f91efa68e9087347f0c1b2c602 Mon Sep 17 00:00:00 2001 From: "Xin Wang (from Dev Box)" Date: Thu, 25 Jun 2026 14:55:14 +0800 Subject: [PATCH 1/2] support ipv6 localhost relay for Consomme networking --- src/linux/bpf/Makefile | 33 ++ src/linux/bpf/gen_bpf_skel.py | 186 ++++++++++ src/linux/bpf/loopback6_relay.bpf.c | 269 ++++++++++++++ src/linux/bpf/loopback6_relay.skel.h | 404 ++++++++++++++++++++++ src/linux/init/CMakeLists.txt | 3 + src/linux/init/GnsEngine.cpp | 4 +- src/linux/init/Loopback6Bpf.cpp | 123 +++++++ src/linux/init/Loopback6Bpf.h | 17 + src/linux/init/NetworkManager.cpp | 89 ++++- src/linux/init/NetworkManager.h | 4 +- src/linux/netlinkutil/RoutingTable.cpp | 39 ++- src/windows/common/ConsommeNetworking.cpp | 13 +- 12 files changed, 1160 insertions(+), 24 deletions(-) create mode 100644 src/linux/bpf/Makefile create mode 100644 src/linux/bpf/gen_bpf_skel.py create mode 100644 src/linux/bpf/loopback6_relay.bpf.c create mode 100644 src/linux/bpf/loopback6_relay.skel.h create mode 100644 src/linux/init/Loopback6Bpf.cpp create mode 100644 src/linux/init/Loopback6Bpf.h diff --git a/src/linux/bpf/Makefile b/src/linux/bpf/Makefile new file mode 100644 index 0000000000..aeb58e5881 --- /dev/null +++ b/src/linux/bpf/Makefile @@ -0,0 +1,33 @@ +# Copyright (C) Microsoft Corporation. All rights reserved. +# +# Builds the loopback6 relay tc/BPF object and regenerates the loader header that the WSL build embeds. +# Requires clang/llvm and the BPF headers (libbpf-dev + linux-libc-dev on Debian/Ubuntu) plus python3. +# +# make # compile loopback6_relay.bpf.o and regenerate loopback6_relay.skel.h +# make clean +# +# After running `make`, commit the regenerated loopback6_relay.skel.h. The intermediate loopback6_relay.bpf.o +# is a build artifact (ignored by .gitignore) and is not committed; the bytecode it contains is embedded in skel.h. + +CLANG ?= clang +PYTHON ?= python3 +ARCH := $(shell uname -m | sed 's/x86_64/x86/;s/aarch64/arm64/') + +# clang with -target bpf does not add the multiarch include directory, so (shipped by +# linux-libc-dev under /usr/include/) is not found. Add it explicitly. +MULTIARCH := $(shell uname -m)-linux-gnu + +BPF_CFLAGS := -O2 -g -Wall -Werror -target bpf -D__TARGET_ARCH_$(ARCH) -I/usr/include/$(MULTIARCH) + +all: loopback6_relay.skel.h + +loopback6_relay.bpf.o: loopback6_relay.bpf.c + $(CLANG) $(BPF_CFLAGS) -c $< -o $@ + +loopback6_relay.skel.h: loopback6_relay.bpf.o gen_bpf_skel.py + $(PYTHON) gen_bpf_skel.py $< > $@ + +clean: + rm -f loopback6_relay.bpf.o + +.PHONY: all clean diff --git a/src/linux/bpf/gen_bpf_skel.py b/src/linux/bpf/gen_bpf_skel.py new file mode 100644 index 0000000000..8dbf4daae5 --- /dev/null +++ b/src/linux/bpf/gen_bpf_skel.py @@ -0,0 +1,186 @@ +#!/usr/bin/env python3 +# Copyright (C) Microsoft Corporation. All rights reserved. +# +# Turns a compiled BPF object (loopback6_relay.bpf.o) into a self-contained C header that the in-tree +# loader (src/linux/init/Loopback6Bpf.cpp) embeds and loads without libbpf. +# +# For each program section ("tc/ingress", "tc/egress") it emits the raw instruction bytes plus the byte +# offsets of the instructions that reference the single map "loopback6_xaddr" (so the loader can patch in +# the map fd). The object must contain exactly one map and no .rodata/.bss/.data maps (the program builds +# its address constants on the stack), so map-fd relocations are the only relocations present. +# +# ./gen_bpf_skel.py loopback6_relay.bpf.o > loopback6_relay.skel.h + +import struct +import sys + +MAP_SYMBOL = b"loopback6_xaddr" +PROG_SECTIONS = ("tc/ingress", "tc/egress") + +R_BPF_64_64 = 1 # ld_imm64 map reference + + +def fail(msg): + sys.stderr.write("gen_bpf_skel.py: " + msg + "\n") + sys.exit(1) + + +class Section: + __slots__ = ("name", "type", "offset", "size", "link", "info", "entsize") + + +def parse_elf(data): + if data[:4] != b"\x7fELF": + fail("not an ELF file") + if data[4] != 2: + fail("expected a 64-bit ELF object") + little = data[5] == 1 + end = "<" if little else ">" + + # ELF64 header: e_shoff at 0x28 (8), e_shentsize at 0x3a (2), e_shnum at 0x3c (2), e_shstrndx at 0x3e (2) + e_shoff = struct.unpack_from(end + "Q", data, 0x28)[0] + e_shentsize = struct.unpack_from(end + "H", data, 0x3A)[0] + e_shnum = struct.unpack_from(end + "H", data, 0x3C)[0] + e_shstrndx = struct.unpack_from(end + "H", data, 0x3E)[0] + + raw = [] + for i in range(e_shnum): + base = e_shoff + i * e_shentsize + sh_name, sh_type = struct.unpack_from(end + "II", data, base) + sh_offset = struct.unpack_from(end + "Q", data, base + 0x18)[0] + sh_size = struct.unpack_from(end + "Q", data, base + 0x20)[0] + sh_link, sh_info = struct.unpack_from(end + "II", data, base + 0x28) + sh_entsize = struct.unpack_from(end + "Q", data, base + 0x38)[0] + raw.append((sh_name, sh_type, sh_offset, sh_size, sh_link, sh_info, sh_entsize)) + + shstr_off = raw[e_shstrndx][2] + shstr_size = raw[e_shstrndx][3] + shstrtab = data[shstr_off:shstr_off + shstr_size] + + def cstr(table, off): + nul = table.find(b"\x00", off) + return table[off:nul] + + sections = [] + for (sh_name, sh_type, sh_offset, sh_size, sh_link, sh_info, sh_entsize) in raw: + s = Section() + s.name = cstr(shstrtab, sh_name).decode("utf-8", "replace") + s.type = sh_type + s.offset = sh_offset + s.size = sh_size + s.link = sh_link + s.info = sh_info + s.entsize = sh_entsize + sections.append(s) + + return end, sections + + +def section_data(data, s): + return data[s.offset:s.offset + s.size] + + +def symbol_names(end, data, sections): + symtab = next((s for s in sections if s.name == ".symtab"), None) + if symtab is None: + fail("missing .symtab") + strtab = sections[symtab.link] + strtab_data = section_data(data, strtab) + syms = section_data(data, symtab) + names = [] + # Elf64_Sym: st_name (4), st_info (1), st_other (1), st_shndx (2), st_value (8), st_size (8) = 24 bytes + for off in range(0, len(syms), 24): + st_name = struct.unpack_from(end + "I", syms, off)[0] + nul = strtab_data.find(b"\x00", st_name) + names.append(strtab_data[st_name:nul]) + return names + + +def map_reloc_offsets(end, data, sections, prog_index, sym_names): + rel_name = ".rel" + sections[prog_index].name + rel = next((s for s in sections if s.name == rel_name), None) + if rel is None: + return [] + rel_data = section_data(data, rel) + offsets = [] + # Elf64_Rel: r_offset (8), r_info (8); r_sym = r_info >> 32 + for off in range(0, len(rel_data), 16): + r_offset, r_info = struct.unpack_from(end + "QQ", rel_data, off) + r_sym = r_info >> 32 + r_type = r_info & 0xFFFFFFFF + if r_type != R_BPF_64_64: + continue + if r_sym < len(sym_names) and sym_names[r_sym] == MAP_SYMBOL: + offsets.append(r_offset) + return sorted(offsets) + + +def c_bytes(name, blob): + if not blob: + return "static const unsigned char %s[1] = {0};\n" % name + out = ["static const unsigned char %s[] = {" % name] + line = " " + for i, b in enumerate(blob): + line += "0x%02x, " % b + if (i + 1) % 12 == 0: + out.append(line) + line = " " + if line.strip(): + out.append(line) + out.append("};\n") + return "\n".join(out) + + +def c_uints(name, values): + if not values: + return "static const unsigned int %s[1] = {0};\n" % name + return "static const unsigned int %s[] = {%s};\n" % (name, ", ".join(str(v) for v in values)) + + +def main(): + if len(sys.argv) != 2: + fail("usage: gen_bpf_skel.py ") + with open(sys.argv[1], "rb") as f: + data = f.read() + + end, sections = parse_elf(data) + sym_names = symbol_names(end, data, sections) + + by_name = {s.name: i for i, s in enumerate(sections)} + for prog in PROG_SECTIONS: + if prog not in by_name: + fail("missing program section '%s'" % prog) + + out = [] + out.append("// Copyright (C) Microsoft Corporation. All rights reserved.") + out.append("//") + out.append("// Generated by src/linux/bpf/gen_bpf_skel.py from loopback6_relay.bpf.o. Do not edit by hand.") + out.append("") + out.append("#pragma once") + out.append("") + out.append("#define LOOPBACK6_MAP_TYPE 2 /* BPF_MAP_TYPE_ARRAY */") + out.append("#define LOOPBACK6_MAP_KEY_SIZE 4") + out.append("#define LOOPBACK6_MAP_VALUE_SIZE 16") + out.append("#define LOOPBACK6_MAP_MAX_ENTRIES 1") + out.append("#define LOOPBACK6_MAP_FLAGS 0") + out.append('#define LOOPBACK6_LICENSE "Dual BSD/GPL"') + out.append("") + + labels = (("INGRESS", "Ingress", "tc/ingress"), ("EGRESS", "Egress", "tc/egress")) + for upper, camel, secname in labels: + idx = by_name[secname] + blob = section_data(data, sections[idx]) + if len(blob) % 8 != 0: + fail("section '%s' size %d is not a multiple of 8" % (secname, len(blob))) + relocs = map_reloc_offsets(end, data, sections, idx, sym_names) + out.append("#define LOOPBACK6_%s_INSN_BYTES %d" % (upper, len(blob))) + out.append("#define LOOPBACK6_%s_MAP_RELOC_COUNT %d" % (upper, len(relocs))) + out.append(c_bytes("kLoopback6%sInsns" % camel, blob)) + out.append(c_uints("kLoopback6%sMapRelocs" % camel, relocs)) + out.append("") + + sys.stdout.write("\n".join(out)) + + +if __name__ == "__main__": + main() diff --git a/src/linux/bpf/loopback6_relay.bpf.c b/src/linux/bpf/loopback6_relay.bpf.c new file mode 100644 index 0000000000..e039a44341 --- /dev/null +++ b/src/linux/bpf/loopback6_relay.bpf.c @@ -0,0 +1,269 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +// +// loopback6_relay - tc/clsact eBPF program that makes the IPv6 (::1) localhost relay work end-to-end on +// the GELNIC (loopback0) in Consomme / mirrored networking modes, for servers bound to :: / [::] AND to +// [::1], without breaking guest-originated localhost traffic. +// +// Why this is needed: +// The host localhost relay (Consomme) injects guest-bound packets onto loopback0 with source ::1 and a +// destination of the loopback0 global address ("X", dynamically assigned). The stock kernel drops any +// packet whose source OR destination is the loopback address (::1) when it arrives on a non-loopback +// device (RFC 4291 2.5.3, enforced in ip6_rcv_core(), incrementing Ip6InHdrErrors). IPv4 avoids this via +// loopback0's accept_local/route_localnet sysctls; IPv6 has no equivalent and no sysctl disables it. +// tc/clsact ingress runs *before* ip6_rcv_core(), so it is the earliest place to intervene. +// +// Approach: +// ingress (loopback0): for a relay-injected packet (source ::1): +// 1. learn X by stashing the destination address into a one-entry map (X is the same for every flow, +// so a single slot suffices and avoids any per-flow conntrack state); +// 2. rewrite the source ::1 -> SENTINEL (a non-loopback address) so the delivered packet carries a +// marker the egress hook can recognise; +// 3. rewrite the destination -> ::1 so a socket bound to ::1 (or ::) matches; +// 4. rewrite the destination MAC to lo's address (all zeroes) so that, once redirected, lo classifies +// the packet PACKET_HOST (a non-matching MAC would be dropped as PACKET_OTHERHOST before ip6_rcv()); +// 5. redirect the packet onto lo (ifindex 1). lo has IFF_LOOPBACK, so ip6_rcv_core() does not drop the +// ::1 destination, and the packet is delivered locally. +// egress (loopback0): the guest's reply is destined to SENTINEL (because the delivered packet's source +// was SENTINEL); that destination uniquely identifies a relay reply (guest-originated ::1<->::1 traffic +// never carries SENTINEL and is left untouched). Rewrite the source ::1 -> X (learned) and the +// destination SENTINEL -> ::1 so the relay sees the (src=X, dst=::1) reply it expects. +// +// Caveat: a delivered socket sees the peer as SENTINEL (fd00::1) rather than ::1. This is invisible to the +// relay and to typical clients/servers. + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef offsetof +#define offsetof(type, member) __builtin_offsetof(type, member) +#endif + +#define ETH_HLEN_ 14 +#define IP6_HLEN_ 40 +#define L4_OFF (ETH_HLEN_ + IP6_HLEN_) +#define SADDR_OFF (ETH_HLEN_ + offsetof(struct ipv6hdr, saddr)) +#define DADDR_OFF (ETH_HLEN_ + offsetof(struct ipv6hdr, daddr)) +#define NEXTHDR_OFF (ETH_HLEN_ + offsetof(struct ipv6hdr, nexthdr)) + +// lo is always interface index 1 in every network namespace (the kernel creates it first). +#define LO_IFINDEX 1 + +// One-entry map holding the learned loopback0 global address (X). Legacy definition (no BTF required), so +// the in-tree loader can create it and relocate references without libbpf. Address constants are built on +// the stack (below) rather than stored in .rodata, so this map is the program's only map. +// N.B. struct bpf_map_def is provided by . +struct bpf_map_def SEC("maps") loopback6_xaddr = { + .type = BPF_MAP_TYPE_ARRAY, + .key_size = sizeof(__u32), + .value_size = 16, + .max_entries = 1, +}; + +// ::1 (IPv6 loopback) is all zeroes except the last byte == 1. +static __always_inline int is_addr_loopback(const __u8 a[16]) +{ +#pragma unroll + for (int i = 0; i < 15; i++) + { + if (a[i] != 0) + { + return 0; + } + } + return a[15] == 1; +} + +// The non-loopback sentinel fd00::1 marks relayed flows. +static __always_inline int is_addr_sentinel(const __u8 a[16]) +{ + if (a[0] != 0xfd) + { + return 0; + } +#pragma unroll + for (int i = 1; i < 15; i++) + { + if (a[i] != 0) + { + return 0; + } + } + return a[15] == 1; +} + +static __always_inline void make_loopback(__u8 a[16]) +{ +#pragma unroll + for (int i = 0; i < 16; i++) + { + a[i] = 0; + } + a[15] = 1; +} + +static __always_inline void make_sentinel(__u8 a[16]) +{ +#pragma unroll + for (int i = 0; i < 16; i++) + { + a[i] = 0; + } + a[0] = 0xfd; + a[15] = 1; +} + +// Offset of the L4 checksum field (which covers the IPv6 pseudo-header, hence depends on the addresses). +// Returns -1 for packets we do not rewrite (IPv6 extension headers / unsupported L4 protocols). +static __always_inline int l4_csum_off(__u8 nexthdr) +{ + if (nexthdr == IPPROTO_TCP) + { + return L4_OFF + offsetof(struct tcphdr, check); + } + if (nexthdr == IPPROTO_UDP) + { + return L4_OFF + offsetof(struct udphdr, check); + } + if (nexthdr == IPPROTO_ICMPV6) + { + return L4_OFF + offsetof(struct icmp6hdr, icmp6_cksum); + } + return -1; +} + +// Replace the 16-byte IPv6 address at addr_off with new_addr, fixing the L4 (pseudo-header) checksum. +static __always_inline void swap_addr(struct __sk_buff *skb, __u32 addr_off, const __u8 *new_addr) +{ + __u8 nexthdr = 0; + if (bpf_skb_load_bytes(skb, NEXTHDR_OFF, &nexthdr, 1) < 0) + { + return; + } + + int csum_off = l4_csum_off(nexthdr); + if (csum_off < 0) + { + return; + } + + __u32 oldw[4]; + if (bpf_skb_load_bytes(skb, addr_off, oldw, sizeof(oldw)) < 0) + { + return; + } + + __u32 neww[4]; + __builtin_memcpy(neww, new_addr, sizeof(neww)); + +#pragma unroll + for (int i = 0; i < 4; i++) + { + if (oldw[i] == neww[i]) + { + continue; + } + bpf_l4_csum_replace(skb, csum_off, oldw[i], neww[i], BPF_F_PSEUDO_HDR | sizeof(__u32)); + bpf_skb_store_bytes(skb, addr_off + i * 4, &neww[i], sizeof(neww[i]), 0); + } +} + +static __always_inline int is_ipv6(struct __sk_buff *skb) +{ + return skb->protocol == bpf_htons(ETH_P_IPV6); +} + +// Ingress on loopback0: learn X, mark the source with the sentinel, set the destination to ::1, and +// redirect onto lo so the ::1 destination is accepted and delivered locally. +SEC("tc/ingress") +int loopback6_ingress(struct __sk_buff *skb) +{ + if (!is_ipv6(skb)) + { + return TC_ACT_OK; + } + + __u8 saddr[16]; + if (bpf_skb_load_bytes(skb, SADDR_OFF, saddr, sizeof(saddr)) < 0) + { + return TC_ACT_OK; + } + + if (!is_addr_loopback(saddr)) + { + return TC_ACT_OK; + } + + // Learn X (the loopback0 global address the relay injected as the destination) for the egress rewrite. + __u8 daddr[16]; + if (bpf_skb_load_bytes(skb, DADDR_OFF, daddr, sizeof(daddr)) == 0) + { + __u32 key = 0; + __u8 *slot = bpf_map_lookup_elem(&loopback6_xaddr, &key); + if (slot) + { + __builtin_memcpy(slot, daddr, 16); + } + } + + __u8 sentinel[16]; + make_sentinel(sentinel); + __u8 loopback[16]; + make_loopback(loopback); + + swap_addr(skb, SADDR_OFF, sentinel); + swap_addr(skb, DADDR_OFF, loopback); + + // Rewrite the destination MAC to lo's address (all zeroes). The relay injects the packet with + // loopback0's MAC as the destination; redirecting to lo re-runs eth_type_trans against lo's address, so + // a non-matching destination MAC would be classified PACKET_OTHERHOST and silently dropped before + // ip6_rcv() (the packet is still visible to tcpdump's tap, but never delivered). Zeroing the destination + // MAC matches lo's dev_addr, so the packet is classified PACKET_HOST and delivered locally. + __u8 lomac[6] = {0, 0, 0, 0, 0, 0}; + bpf_skb_store_bytes(skb, 0, lomac, sizeof(lomac), 0); + + return bpf_redirect(LO_IFINDEX, BPF_F_INGRESS); +} + +// Egress on loopback0: a destination of SENTINEL uniquely identifies a relay reply. Restore the source to +// the learned X and the destination to ::1 so the relay matches the flow. +SEC("tc/egress") +int loopback6_egress(struct __sk_buff *skb) +{ + if (!is_ipv6(skb)) + { + return TC_ACT_OK; + } + + __u8 daddr[16]; + if (bpf_skb_load_bytes(skb, DADDR_OFF, daddr, sizeof(daddr)) < 0) + { + return TC_ACT_OK; + } + + if (!is_addr_sentinel(daddr)) + { + return TC_ACT_OK; + } + + __u32 key = 0; + __u8 *x = bpf_map_lookup_elem(&loopback6_xaddr, &key); + if (x) + { + swap_addr(skb, SADDR_OFF, x); + } + + __u8 loopback[16]; + make_loopback(loopback); + swap_addr(skb, DADDR_OFF, loopback); + return TC_ACT_OK; +} + +char _license[] SEC("license") = "Dual BSD/GPL"; diff --git a/src/linux/bpf/loopback6_relay.skel.h b/src/linux/bpf/loopback6_relay.skel.h new file mode 100644 index 0000000000..767254902b --- /dev/null +++ b/src/linux/bpf/loopback6_relay.skel.h @@ -0,0 +1,404 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +// +// Generated by src/linux/bpf/gen_bpf_skel.py from loopback6_relay.bpf.o. Do not edit by hand. + +#pragma once + +#define LOOPBACK6_MAP_TYPE 2 /* BPF_MAP_TYPE_ARRAY */ +#define LOOPBACK6_MAP_KEY_SIZE 4 +#define LOOPBACK6_MAP_VALUE_SIZE 16 +#define LOOPBACK6_MAP_MAX_ENTRIES 1 +#define LOOPBACK6_MAP_FLAGS 0 +#define LOOPBACK6_LICENSE "Dual BSD/GPL" + +#define LOOPBACK6_INGRESS_INSN_BYTES 2336 +#define LOOPBACK6_INGRESS_MAP_RELOC_COUNT 1 +static const unsigned char kLoopback6IngressInsns[] = { + 0xbf, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x61, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x01, 0x1f, 0x01, 0x86, 0xdd, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xc8, 0xff, 0xff, 0xff, + 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xbf, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6d, 0x10, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc8, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xc9, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x12, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xca, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x01, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xcb, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xcc, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x0c, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xcd, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x01, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xce, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xcf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x06, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd0, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x01, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd1, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xd2, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd3, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd4, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xd5, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xfa, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd6, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd7, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xf6, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, + 0xb8, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x63, 0x1a, 0xec, 0xff, 0x00, 0x00, 0x00, 0x00, + 0xbf, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, + 0xec, 0xff, 0xff, 0xff, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xc7, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x0f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc6, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x10, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc5, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xc4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc3, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x10, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc2, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xc1, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xbf, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xbe, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xbd, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xbc, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xbb, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xba, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xb9, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xb8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x9a, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x6d, 0x09, 0x5a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x15, 0x01, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x15, 0x01, 0x03, 0x00, 0x3a, 0x00, 0x00, 0x00, + 0x55, 0x01, 0x55, 0x00, 0x11, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x07, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xec, 0xff, 0xff, 0xff, + 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6d, 0x01, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x1a, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xdf, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xde, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x1a, 0xdd, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xdc, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x1a, 0xe3, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xe2, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xe1, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x1a, 0xe6, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xe5, 0xff, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x73, 0x1a, 0xe7, 0xff, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, + 0xfd, 0x00, 0x00, 0x00, 0x63, 0x1a, 0xd8, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x61, 0xa3, 0xec, 0xff, 0x00, 0x00, 0x00, 0x00, 0x15, 0x03, 0x0c, 0x00, + 0xfd, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, + 0xfd, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xd8, 0xff, 0xff, 0xff, + 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xdc, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x61, 0xa3, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x00, 0x00, 0xdc, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x61, 0xa3, 0xf4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x61, 0xa3, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x00, 0x00, 0xe4, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x73, 0x9a, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0x6d, 0x09, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, + 0x46, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x01, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x01, 0x03, 0x00, + 0x3a, 0x00, 0x00, 0x00, 0x55, 0x01, 0x4a, 0x00, 0x11, 0x00, 0x00, 0x00, + 0xb7, 0x07, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, + 0xec, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xb7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x01, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7b, 0x2a, 0xe0, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x7b, 0x1a, 0xd8, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x61, 0xa3, 0xec, 0xff, 0x00, 0x00, 0x00, 0x00, 0x15, 0x03, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xd8, 0xff, 0xff, 0xff, + 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xdc, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x61, 0xa3, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x00, 0x00, 0xdc, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x61, 0xa3, 0xf4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x61, 0xa3, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x00, 0x00, 0xe4, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6b, 0x1a, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x63, 0x1a, 0xec, 0xff, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x03, 0x00, 0x00, 0xec, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0xb7, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +static const unsigned int kLoopback6IngressMapRelocs[] = {448}; + + +#define LOOPBACK6_EGRESS_INSN_BYTES 2168 +#define LOOPBACK6_EGRESS_MAP_RELOC_COUNT 1 +static const unsigned char kLoopback6EgressInsns[] = { + 0xbf, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x61, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x0a, 0x01, 0x86, 0xdd, 0x00, 0x00, + 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, + 0xc8, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xb7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x01, 0x02, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc8, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x01, 0x00, 0x01, 0xfd, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc9, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xca, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xcb, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x01, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xcc, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xcd, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xf6, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xce, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x01, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xcf, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xd0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd1, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x01, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd2, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xd3, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xea, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd4, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x01, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd5, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xd6, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xe4, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd7, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x01, 0xe2, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb7, 0x09, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x63, 0x9a, 0xc4, 0xff, 0x00, 0x00, 0x00, 0x00, + 0xbf, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, + 0xc4, 0xff, 0xff, 0xff, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xbf, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x08, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x9a, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0xb7, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0x6d, 0x09, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x07, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x15, 0x01, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x15, 0x01, 0x03, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x55, 0x01, 0x75, 0x00, + 0x11, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x03, 0x00, 0x00, 0xec, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xb7, 0x04, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6d, 0x01, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x82, 0x0d, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x67, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x71, 0x81, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x12, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x71, 0x81, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x67, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x71, 0x83, 0x0e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4f, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0x84, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x71, 0x83, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4f, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x83, 0x0b, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x67, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x71, 0x85, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x53, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x67, 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x4f, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x01, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x4f, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0x84, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x71, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4f, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x82, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x67, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x71, 0x85, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x67, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x4f, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x02, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x4f, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0x83, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x03, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x71, 0x84, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4f, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x85, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x71, 0x84, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x67, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4f, 0x54, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x67, 0x04, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x4f, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x1a, 0xe0, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x67, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x4f, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xa3, 0xec, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x7b, 0x4a, 0xd8, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x67, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x77, 0x04, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xd8, 0xff, 0xff, 0xff, + 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xdc, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x61, 0xa3, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x00, 0x00, 0xdc, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x61, 0xa3, 0xf4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x61, 0xa3, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x00, 0x00, 0xe4, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x73, 0x9a, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0x6d, 0x09, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, + 0x46, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x01, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x01, 0x03, 0x00, + 0x3a, 0x00, 0x00, 0x00, 0x55, 0x01, 0x4a, 0x00, 0x11, 0x00, 0x00, 0x00, + 0xb7, 0x07, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, + 0xec, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xb7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x01, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7b, 0x2a, 0xe0, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x7b, 0x1a, 0xd8, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x61, 0xa3, 0xec, 0xff, 0x00, 0x00, 0x00, 0x00, 0x15, 0x03, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xd8, 0xff, 0xff, 0xff, + 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xdc, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x61, 0xa3, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x00, 0x00, 0xdc, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x61, 0xa3, 0xf4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x61, 0xa3, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x00, 0x00, 0xe4, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +static const unsigned int kLoopback6EgressMapRelocs[] = {376}; + diff --git a/src/linux/init/CMakeLists.txt b/src/linux/init/CMakeLists.txt index ed13049bce..f512f2ec9c 100644 --- a/src/linux/init/CMakeLists.txt +++ b/src/linux/init/CMakeLists.txt @@ -12,6 +12,7 @@ set(SOURCES init.cpp localhost.cpp Localization.cpp + Loopback6Bpf.cpp NetworkManager.cpp plan9.cpp telemetry.cpp @@ -36,6 +37,7 @@ set(HEADERS GnsEngine.h GnsPortTracker.h localhost.h + Loopback6Bpf.h NetworkManager.h plan9.h telemetry.h @@ -47,6 +49,7 @@ set(HEADERS wslpath.h) set(LINUX_CXXFLAGS ${LINUX_CXXFLAGS} -I "${CMAKE_CURRENT_LIST_DIR}/../netlinkutil") +set(LINUX_CXXFLAGS ${LINUX_CXXFLAGS} -I "${CMAKE_CURRENT_LIST_DIR}/../bpf") set(INIT_LIBRARIES ${COMMON_LINUX_LINK_LIBRARIES} netlinkutil plan9 mountutil configfile) add_linux_executable(init "${SOURCES}" "${HEADERS};${COMMON_LINUX_HEADERS}" "${INIT_LIBRARIES}") add_dependencies(init localization) diff --git a/src/linux/init/GnsEngine.cpp b/src/linux/init/GnsEngine.cpp index 5057e591a0..18a34555bd 100644 --- a/src/linux/init/GnsEngine.cpp +++ b/src/linux/init/GnsEngine.cpp @@ -671,7 +671,7 @@ std::tuple GnsEngine::ProcessNextMessage(wsl::shared::Transaction& tr } } - manager.UpdateMirroredLoopbackRulesForInterface(interface.Name(), Operation::Create); + manager.UpdateMirroredLoopbackRulesForInterface(interface.Name(), AF_INET, Operation::Create); break; } case wsl::shared::hns::OperationType::Remove: @@ -702,7 +702,7 @@ std::tuple GnsEngine::ProcessNextMessage(wsl::shared::Transaction& tr } } - manager.UpdateMirroredLoopbackRulesForInterface(interface.Name(), Operation::Remove); + manager.UpdateMirroredLoopbackRulesForInterface(interface.Name(), AF_INET, Operation::Remove); break; } default: diff --git a/src/linux/init/Loopback6Bpf.cpp b/src/linux/init/Loopback6Bpf.cpp new file mode 100644 index 0000000000..93366b9ba1 --- /dev/null +++ b/src/linux/init/Loopback6Bpf.cpp @@ -0,0 +1,123 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +// +// Minimal in-tree loader for the loopback6 relay tc/BPF programs. The program bytecode and the byte +// offsets of its map references are embedded by loopback6_relay.skel.h (generated from the compiled +// object by src/linux/bpf/gen_bpf_skel.py). This avoids a libbpf dependency in init: it creates the +// single (legacy, BTF-less) array map, patches the map fd into the ld_imm64 instructions that reference +// it, and loads each SCHED_CLS program via the bpf() syscall. + +#include +#include +#include +#include +#include +#include +#include +#include "common.h" +#include "Loopback6Bpf.h" +#include "loopback6_relay.skel.h" + +namespace { + +int SysBpf(int cmd, union bpf_attr* attr) +{ + return static_cast(syscall(__NR_bpf, cmd, attr, sizeof(*attr))); +} + +int CreateMap() +{ + union bpf_attr attr; + memset(&attr, 0, sizeof(attr)); + attr.map_type = LOOPBACK6_MAP_TYPE; + attr.key_size = LOOPBACK6_MAP_KEY_SIZE; + attr.value_size = LOOPBACK6_MAP_VALUE_SIZE; + attr.max_entries = LOOPBACK6_MAP_MAX_ENTRIES; + attr.map_flags = LOOPBACK6_MAP_FLAGS; + return SysBpf(BPF_MAP_CREATE, &attr); +} + +int LoadProgram(const unsigned char* insnBytes, unsigned int insnByteLen, const unsigned int* relocs, unsigned int relocCount, int mapFd) +{ + std::vector insns(insnBytes, insnBytes + insnByteLen); + + // Patch the map fd into each ld_imm64 instruction that references the map. + for (unsigned int i = 0; i < relocCount; i++) + { + if (relocs[i] + sizeof(struct bpf_insn) > insns.size()) + { + continue; + } + auto* insn = reinterpret_cast(insns.data() + relocs[i]); + insn->src_reg = BPF_PSEUDO_MAP_FD; + insn->imm = mapFd; + } + + union bpf_attr attr; + memset(&attr, 0, sizeof(attr)); + attr.prog_type = BPF_PROG_TYPE_SCHED_CLS; + attr.insn_cnt = insnByteLen / static_cast(sizeof(struct bpf_insn)); + attr.insns = reinterpret_cast(reinterpret_cast(insns.data())); + attr.license = reinterpret_cast(reinterpret_cast(LOOPBACK6_LICENSE)); + + // First attempt the load without a verifier log. Requesting a verbose log (log_level >= 1) with a + // fixed-size buffer makes BPF_PROG_LOAD fail with ENOSPC when the per-instruction log exceeds the + // buffer, even though the program is valid. Only on failure do we retry with a log to capture the + // verifier diagnostics. + int fd = SysBpf(BPF_PROG_LOAD, &attr); + if (fd < 0) + { + char log[8192]; + log[0] = '\0'; + attr.log_level = 1; + attr.log_buf = reinterpret_cast(reinterpret_cast(log)); + attr.log_size = sizeof(log); + + fd = SysBpf(BPF_PROG_LOAD, &attr); + if (fd < 0) + { + GNS_LOG_ERROR("BPF_PROG_LOAD failed (errno {}); verifier log: {}", errno, log); + } + } + return fd; +} + +} // namespace + +std::optional LoadLoopback6RelayPrograms() +{ + if (LOOPBACK6_INGRESS_INSN_BYTES == 0 || LOOPBACK6_EGRESS_INSN_BYTES == 0) + { + GNS_LOG_INFO("loopback6 relay BPF programs are not built into this image; skipping inbound ::1 setup"); + return std::nullopt; + } + + int mapFd = CreateMap(); + if (mapFd < 0) + { + GNS_LOG_ERROR("BPF_MAP_CREATE failed (errno {})", errno); + return std::nullopt; + } + + int ingressFd = + LoadProgram(kLoopback6IngressInsns, LOOPBACK6_INGRESS_INSN_BYTES, kLoopback6IngressMapRelocs, LOOPBACK6_INGRESS_MAP_RELOC_COUNT, mapFd); + int egressFd = + LoadProgram(kLoopback6EgressInsns, LOOPBACK6_EGRESS_INSN_BYTES, kLoopback6EgressMapRelocs, LOOPBACK6_EGRESS_MAP_RELOC_COUNT, mapFd); + + // The loaded programs hold their own reference to the map; the loader's fd is no longer needed. + close(mapFd); + + if (ingressFd < 0 || egressFd < 0) + { + if (ingressFd >= 0) + { + close(ingressFd); + } + if (egressFd >= 0) + { + close(egressFd); + } + return std::nullopt; + } + + return Loopback6BpfPrograms{ingressFd, egressFd}; +} diff --git a/src/linux/init/Loopback6Bpf.h b/src/linux/init/Loopback6Bpf.h new file mode 100644 index 0000000000..6d55e858c3 --- /dev/null +++ b/src/linux/init/Loopback6Bpf.h @@ -0,0 +1,17 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +#pragma once + +#include + +// The loaded loopback6 relay tc/BPF programs. The caller owns the file descriptors and must close them +// after attaching them (e.g. via Interface::BpfAttachTcClassifier). +struct Loopback6BpfPrograms +{ + int ingressFd = -1; + int egressFd = -1; +}; + +// Loads the loopback6 relay ingress/egress tc/BPF programs and their shared map from the data embedded in +// loopback6_relay.skel.h. Returns std::nullopt (logging the reason) if the programs were not compiled into +// this image or the kernel rejected them, so callers can treat BPF support as best-effort. +std::optional LoadLoopback6RelayPrograms(); diff --git a/src/linux/init/NetworkManager.cpp b/src/linux/init/NetworkManager.cpp index 2441e5a1d9..45eab99a42 100644 --- a/src/linux/init/NetworkManager.cpp +++ b/src/linux/init/NetworkManager.cpp @@ -2,10 +2,12 @@ #include #include +#include #include #include "lxinitshared.h" #include "common.h" #include "NetworkManager.h" +#include "Loopback6Bpf.h" #include "util.h" #include "address.h" #include "conncheckshared.h" @@ -44,6 +46,11 @@ const Address c_ipv6LoopbackGateway = {AF_INET6, Ipv6MaxPrefixLen, LX_INIT_IPV6_ const Address c_loopbackV4AddressRange = {AF_INET, Ipv4MaxPrefixLen, "127.0.0.1"}; const Address c_loopbackV6AddressRange = {AF_INET6, Ipv6MaxPrefixLen, "::1"}; +// Non-loopback sentinel that the IPv6 relay tc/BPF program substitutes for ::1 on packets it redirects +// onto lo. Replies carry it as their destination; it must route back out loopback0 so the egress hook can +// restore the relay's addresses. Must match c_sentinel in src/linux/bpf/loopback6_relay.bpf.c (fd00::1). +const Address c_sentinelV6AddressRange = {AF_INET6, Ipv6MaxPrefixLen, "fd00::1"}; + // 00:11:22:33:44:55 represents the MAC address that all loopback/local packets will have as destination // MAC when they are sent out of the guest. This will help Windows to identify which // packets are loopback/local. @@ -304,7 +311,16 @@ void NetworkManager::InitializeLoopbackConfiguration(Interface& gelnic, wsl::sha ModifyNetSetting(AF_INET, "rp_filter", "all", c_disableSetting, strlen(c_disableSetting)); InitializeLoopbackConfigurationImpl(gelnic, AF_INET); - // InitializeLoopbackConfigurationImpl(gelnic, AF_INET6); + + // Configure the outbound IPv6 (::1) loopback datapath (policy rules + ::1/128 route via the loopback gateway). + InitializeLoopbackConfigurationImpl(gelnic, AF_INET6); + + // Configure the inbound IPv6 (::1) loopback datapath. The host relay injects guest-bound packets onto + // loopback0 with source ::1, which the Linux stack drops on a non-loopback device (RFC 4291 martian + // check in ip6_rcv_core(), no IPv6 equivalent of accept_local). A tc/BPF program on loopback0 rewrites + // and redirects those packets onto lo so they are delivered, and restores the relay's addresses on the + // replies. This is best-effort: failures are logged and do not affect the rest of the configuration. + ConfigureIpv6LoopbackRelay(gelnic); } /* @@ -370,7 +386,7 @@ void NetworkManager::AddMirroredLoopbackRoutingRules(Interface& gelnic, int addr // Adding priority 0 rules for the GELNIC interface // Similar priority 0 rules will also be added or deleted when an interface is mirrored in Linux, or deleted - UpdateMirroredLoopbackRulesForInterface(gelnic.Name(), Operation::Create); + UpdateMirroredLoopbackRulesForInterface(gelnic.Name(), addressFamily, Operation::Create); auto AddPriority1Rule = [&](const Protocol protocol, const int routingTableId) { Rule rule = Rule(addressFamily, routingTableId, c_LinuxToWindowsRulePriority, protocol); @@ -388,21 +404,27 @@ void NetworkManager::AddMirroredLoopbackRoutingRules(Interface& gelnic, int addr ruleManager.ModifyRoutingTablePriority(rule, Operation::Create); } -void NetworkManager::UpdateMirroredLoopbackRulesForInterface(const std::string& interfaceName, Operation operation) +void NetworkManager::UpdateMirroredLoopbackRulesForInterface(const std::string& interfaceName, int addressFamily, Operation operation) { assert(operation == Operation::Create || operation == Operation::Remove); // Add or remove priority 0 rules needed by mirrored loopback traffic. See the comments in AddMirroredLoopbackRoutingRules for - // more details. Currently only IPv4 guest<->host loopback is supported in mirrored mode - adding only IPv4 rules. + // more details. The rules are added per address family (the GELNIC loopback path adds both IPv4 and IPv6). GNS_LOG_INFO( - "{} priority 0 rule for interfaceName {} for TCP", operation == Operation::Create ? "Add" : "Remove", interfaceName.c_str()); - Rule rule = Rule(AF_INET, RT_TABLE_LOCAL, c_WindowsToLinuxRulePriority, Protocol::Tcp); + "{} priority 0 rule for interfaceName {} family {} for TCP", + operation == Operation::Create ? "Add" : "Remove", + interfaceName.c_str(), + addressFamily); + Rule rule = Rule(addressFamily, RT_TABLE_LOCAL, c_WindowsToLinuxRulePriority, Protocol::Tcp); rule.iif = interfaceName; ruleManager.ModifyLoopbackRule(rule, operation); GNS_LOG_INFO( - "{} priority 0 rule for interfaceName {} for UDP", operation == Operation::Create ? "Add" : "Remove", interfaceName.c_str()); - rule = Rule(AF_INET, RT_TABLE_LOCAL, c_WindowsToLinuxRulePriority, Protocol::Udp); + "{} priority 0 rule for interfaceName {} family {} for UDP", + operation == Operation::Create ? "Add" : "Remove", + interfaceName.c_str(), + addressFamily); + rule = Rule(addressFamily, RT_TABLE_LOCAL, c_WindowsToLinuxRulePriority, Protocol::Udp); rule.iif = interfaceName; ruleManager.ModifyLoopbackRule(rule, operation); } @@ -436,6 +458,49 @@ void NetworkManager::InitializeLoopbackConfigurationImpl(Interface& gelnic, int loopbackRoutingTable.ModifyRoute(route, Operation::Create); } +/* + Configure the inbound IPv6 (::1) loopback datapath using a tc/BPF program on loopback0. See the comment + at the call site in InitializeLoopbackConfiguration for the rationale. Best-effort: any failure is logged + and swallowed so it cannot break the rest of the networking configuration. +*/ +void NetworkManager::ConfigureIpv6LoopbackRelay(Interface& gelnic) +{ + try + { + auto programs = LoadLoopback6RelayPrograms(); + if (!programs) + { + return; + } + + // Attach the programs to a clsact qdisc on loopback0. Ingress rewrites a relay-injected ::1 source to + // the sentinel, restores ::1 as the destination, and redirects onto lo (whose IFF_LOOPBACK bypasses + // the martian check) so the packet is delivered. Egress restores the relay's addresses on the reply. + gelnic.ModifyTcClassifier(true); + gelnic.BpfAttachTcClassifier(programs->ingressFd, true); + gelnic.BpfAttachTcClassifier(programs->egressFd, false); + close(programs->ingressFd); + close(programs->egressFd); + + // The ingress hook redirects packets onto lo, so add the priority-0 "iif lo ... lookup local" rule; + // otherwise the redirected packets would match the priority-1 "lookup 127" rule and be forwarded + // back out instead of delivered locally. + UpdateMirroredLoopbackRulesForInterface("lo", AF_INET6, Operation::Create); + + // The egress hook leaves the reply destined to the sentinel; route the sentinel back out loopback0 + // (table 127) so it egresses where the hook can rewrite it back to ::1 for the relay. + Route sentinelRoute = Route(AF_INET6, c_ipv6LoopbackGateway, gelnic.Index(), false, c_sentinelV6AddressRange, 0); + sentinelRoute.isLoopbackRoute = true; + loopbackRoutingTable.ModifyRoute(sentinelRoute, Operation::Create); + + GNS_LOG_INFO("Configured IPv6 (::1) inbound loopback relay on GELNIC adapter {}", gelnic.Name().c_str()); + } + catch (...) + { + GNS_LOG_ERROR("Failed to configure the IPv6 (::1) inbound loopback relay; inbound ::1 delivery may not work"); + } +} + /* Add or remove loopback routes for the set of IP addresses that were added/deleted on an interface. All routes are via the same gateway address. The function can be used for both IPv4 and IPv6 addresses. @@ -444,14 +509,6 @@ void NetworkManager::UpdateLoopbackRoute(Interface& interface, const Address& ad { assert(operation == Operation::Create || operation == Operation::Remove); - // For the moment don't process IPv6 addresses, since inbound IPv6 loopback is not supported yet (dropped by - // default by the Linux stack). Once that is addressed, this check will be removed. - if (address.Family() == AF_INET6) - { - GNS_LOG_INFO("Ignoring IPv6 address {}", utils::Stringify(address).c_str()); - return; - } - auto gateway = address.Family() == AF_INET ? c_ipv4LoopbackGateway : c_ipv6LoopbackGateway; if (operation == Operation::Create) diff --git a/src/linux/init/NetworkManager.h b/src/linux/init/NetworkManager.h index c86f7af783..8f27ae2edd 100644 --- a/src/linux/init/NetworkManager.h +++ b/src/linux/init/NetworkManager.h @@ -61,7 +61,7 @@ class NetworkManager void AddMirroredLoopbackRoutingRules(Interface& gelnic, int addressFamily); - void UpdateMirroredLoopbackRulesForInterface(const std::string& interfaceName, Operation operation); + void UpdateMirroredLoopbackRulesForInterface(const std::string& interfaceName, int addressFamily, Operation operation); void UpdateLoopbackRoute(Interface& interface, const Address& address, Operation operation); @@ -82,6 +82,8 @@ class NetworkManager private: void InitializeLoopbackConfigurationImpl(Interface& gelnic, int addressFamily); + void ConfigureIpv6LoopbackRelay(Interface& gelnic); + RoutingTable& routingTable; // Custom routing tables used for loopback mirroring. Not to be confused with the Linux "local" table RoutingTable loopbackRoutingTable; diff --git a/src/linux/netlinkutil/RoutingTable.cpp b/src/linux/netlinkutil/RoutingTable.cpp index 56be77537a..2af28cc446 100644 --- a/src/linux/netlinkutil/RoutingTable.cpp +++ b/src/linux/netlinkutil/RoutingTable.cpp @@ -188,6 +188,42 @@ void RoutingTable::ModifyLoopbackRouteImpl(const Route& route, int operation, in throw RuntimeErrorWithSourceLocation(std::format("Loopback route {} missing destination or next hop", utils::Stringify(route))); } + if constexpr (std::is_same_v) + { + // The IPv6 loopback destination (::1) cannot be used as a route preferred source on the GELNIC: unlike IPv4 + // (where EnableLoopbackRouting turns on route_localnet/accept_local so 127.0.0.1 is a valid source), IPv6 has + // no route_localnet equivalent, so the kernel deterministically rejects a route carrying RTA_PREFSRC=::1 with + // EINVAL ("Invalid source address"). We therefore omit RTA_PREFSRC entirely for IPv6 loopback routes (the + // attribute is left out of the message struct so no stray zero-length attribute is serialized). The route + // still installs and steers ::1 traffic onto the GELNIC; outbound source-address selection is left to the + // kernel. + struct Message : RouteMessage + { + utils::AddressAttribute to; + utils::AddressAttribute via; + } __attribute__((packed)); + + GNS_LOG_INFO( + "SendMessage Route (to {}, via {}), operation ({}), netLinkflags ({})", + route.to.value().Addr().c_str(), + route.via.value().Addr().c_str(), + RouteOperationToString(operation), + NetLinkFormatFlagsToString(flags).c_str()); + + SendMessage(route, operation, flags, [&](Message& message) { + message.route.rtm_flags |= RTNH_F_ONLINK; + GNS_LOG_INFO( + "Netlink message configuration: RTA_DST ({}) RTA_GATEWAY ({}) RTA_PREFSRC ([not set, IPv6]) RTA_PRIORITY " + "([not set])", + route.to.value().Addr().c_str(), + route.via.value().Addr().c_str()); + utils::InitializeAddressAttribute(message.to, route.to.value(), RTA_DST); + utils::InitializeAddressAttribute(message.via, route.via.value(), RTA_GATEWAY); + }); + + return; + } + struct Message : RouteMessage { utils::AddressAttribute to; @@ -208,9 +244,6 @@ void RoutingTable::ModifyLoopbackRouteImpl(const Route& route, int operation, in // loopback or local packets out of the guest, they won't have different source and destination // IPs, since they won't be accepted by the Windows host. Having the routes with source == destination is // also consistent with the how routes from the "local" routing table look like. - // - // Note: Since the IPv6 loopback range is ::1/128, we don't need separate code such as the one below - // converting from 127.0.0.0 to 127.0.0.1. if (route.to.value().Addr().compare("127.0.0.0") == 0) { GNS_LOG_INFO( diff --git a/src/windows/common/ConsommeNetworking.cpp b/src/windows/common/ConsommeNetworking.cpp index 67e4f49da9..1b795a1241 100644 --- a/src/windows/common/ConsommeNetworking.cpp +++ b/src/windows/common/ConsommeNetworking.cpp @@ -309,10 +309,19 @@ void ConsommeNetworking::RefreshGuestConnection() void ConsommeNetworking::SetupLoopbackDevice() { - const auto* clientIp = WI_IsFlagSet(m_flags, ConsommeNetworkingFlags::LoopbackClientIp) ? L"127.0.0.1" : L"169.254.73.250"; - const auto deviceOptions = + const bool loopbackClientIp = WI_IsFlagSet(m_flags, ConsommeNetworkingFlags::LoopbackClientIp); + const auto* clientIp = loopbackClientIp ? L"127.0.0.1" : L"169.254.73.250"; + auto deviceOptions = std::format(L"client_ip={};client_mac=00:11:22:33:44:55;gateway_ip=169.254.73.249;netmask=255.255.255.248", clientIp); + // Provision the IPv6 loopback address on the device so the relay backend will inject ::1-destined connections + // onto loopback0 (the guest side adds the matching ::1/128 route via the IPv6 loopback gateway). Without this the + // backend has no IPv6 address for the device and ::1 traffic is never relayed onto the interface. + if (WI_IsFlagSet(m_flags, ConsommeNetworkingFlags::Ipv6) && loopbackClientIp) + { + deviceOptions += L";client_ip_ipv6=::1"; + } + m_localhostAdapterId = m_guestDeviceManager->AddGuestDevice( VIRTIO_NET_DEVICE_ID, VIRTIO_NET_CLASS_ID, From 3d4411c47c6813b30140be2df5895470a06bf3f9 Mon Sep 17 00:00:00 2001 From: "Xin Wang (from Dev Box)" Date: Thu, 25 Jun 2026 15:33:10 +0800 Subject: [PATCH 2/2] format code --- src/linux/bpf/loopback6_relay.bpf.c | 12 +- src/linux/bpf/loopback6_relay.skel.h | 594 ++++++++++----------------- src/linux/init/Loopback6Bpf.cpp | 4 +- 3 files changed, 224 insertions(+), 386 deletions(-) diff --git a/src/linux/bpf/loopback6_relay.bpf.c b/src/linux/bpf/loopback6_relay.bpf.c index e039a44341..736aca8436 100644 --- a/src/linux/bpf/loopback6_relay.bpf.c +++ b/src/linux/bpf/loopback6_relay.bpf.c @@ -140,7 +140,7 @@ static __always_inline int l4_csum_off(__u8 nexthdr) } // Replace the 16-byte IPv6 address at addr_off with new_addr, fixing the L4 (pseudo-header) checksum. -static __always_inline void swap_addr(struct __sk_buff *skb, __u32 addr_off, const __u8 *new_addr) +static __always_inline void swap_addr(struct __sk_buff* skb, __u32 addr_off, const __u8* new_addr) { __u8 nexthdr = 0; if (bpf_skb_load_bytes(skb, NEXTHDR_OFF, &nexthdr, 1) < 0) @@ -175,7 +175,7 @@ static __always_inline void swap_addr(struct __sk_buff *skb, __u32 addr_off, con } } -static __always_inline int is_ipv6(struct __sk_buff *skb) +static __always_inline int is_ipv6(struct __sk_buff* skb) { return skb->protocol == bpf_htons(ETH_P_IPV6); } @@ -183,7 +183,7 @@ static __always_inline int is_ipv6(struct __sk_buff *skb) // Ingress on loopback0: learn X, mark the source with the sentinel, set the destination to ::1, and // redirect onto lo so the ::1 destination is accepted and delivered locally. SEC("tc/ingress") -int loopback6_ingress(struct __sk_buff *skb) +int loopback6_ingress(struct __sk_buff* skb) { if (!is_ipv6(skb)) { @@ -206,7 +206,7 @@ int loopback6_ingress(struct __sk_buff *skb) if (bpf_skb_load_bytes(skb, DADDR_OFF, daddr, sizeof(daddr)) == 0) { __u32 key = 0; - __u8 *slot = bpf_map_lookup_elem(&loopback6_xaddr, &key); + __u8* slot = bpf_map_lookup_elem(&loopback6_xaddr, &key); if (slot) { __builtin_memcpy(slot, daddr, 16); @@ -235,7 +235,7 @@ int loopback6_ingress(struct __sk_buff *skb) // Egress on loopback0: a destination of SENTINEL uniquely identifies a relay reply. Restore the source to // the learned X and the destination to ::1 so the relay matches the flow. SEC("tc/egress") -int loopback6_egress(struct __sk_buff *skb) +int loopback6_egress(struct __sk_buff* skb) { if (!is_ipv6(skb)) { @@ -254,7 +254,7 @@ int loopback6_egress(struct __sk_buff *skb) } __u32 key = 0; - __u8 *x = bpf_map_lookup_elem(&loopback6_xaddr, &key); + __u8* x = bpf_map_lookup_elem(&loopback6_xaddr, &key); if (x) { swap_addr(skb, SADDR_OFF, x); diff --git a/src/linux/bpf/loopback6_relay.skel.h b/src/linux/bpf/loopback6_relay.skel.h index 767254902b..54bb46218e 100644 --- a/src/linux/bpf/loopback6_relay.skel.h +++ b/src/linux/bpf/loopback6_relay.skel.h @@ -14,391 +14,229 @@ #define LOOPBACK6_INGRESS_INSN_BYTES 2336 #define LOOPBACK6_INGRESS_MAP_RELOC_COUNT 1 static const unsigned char kLoopback6IngressInsns[] = { - 0xbf, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x61, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x01, 0x1f, 0x01, 0x86, 0xdd, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xc8, 0xff, 0xff, 0xff, - 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xbf, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6d, 0x10, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc8, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x71, 0xa1, 0xc9, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x12, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xca, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x01, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xcb, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x71, 0xa1, 0xcc, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x0c, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xcd, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x01, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xce, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x71, 0xa1, 0xcf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x06, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd0, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x01, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd1, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x71, 0xa1, 0xd2, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd3, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd4, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x71, 0xa1, 0xd5, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xfa, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd6, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd7, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xf6, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, - 0xb8, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x02, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x63, 0x1a, 0xec, 0xff, 0x00, 0x00, 0x00, 0x00, - 0xbf, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, - 0xec, 0xff, 0xff, 0xff, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x71, 0xa1, 0xc7, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x0f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc6, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x10, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc5, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x71, 0xa1, 0xc4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x0c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc3, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x10, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc2, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x71, 0xa1, 0xc1, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x09, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xbf, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x71, 0xa1, 0xbe, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xbd, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xbc, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x71, 0xa1, 0xbb, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xba, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xb9, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x71, 0xa1, 0xb8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x9a, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x6d, 0x09, 0x5a, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, - 0x71, 0xa1, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x15, 0x01, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x15, 0x01, 0x03, 0x00, 0x3a, 0x00, 0x00, 0x00, - 0x55, 0x01, 0x55, 0x00, 0x11, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x07, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xec, 0xff, 0xff, 0xff, - 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6d, 0x01, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x1a, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xdf, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xde, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x1a, 0xdd, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xdc, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x1a, 0xe3, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xe2, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xe1, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x1a, 0xe6, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xe5, 0xff, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x73, 0x1a, 0xe7, 0xff, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, - 0xfd, 0x00, 0x00, 0x00, 0x63, 0x1a, 0xd8, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x61, 0xa3, 0xec, 0xff, 0x00, 0x00, 0x00, 0x00, 0x15, 0x03, 0x0c, 0x00, - 0xfd, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, - 0xfd, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xd8, 0xff, 0xff, 0xff, - 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xdc, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x61, 0xa3, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x08, 0x00, 0x00, 0xdc, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x02, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x61, 0xa3, 0xf4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x08, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x61, 0xa3, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x08, 0x00, 0x00, 0xe4, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x02, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x73, 0x9a, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x6d, 0x09, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, - 0x46, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x15, 0x01, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x01, 0x03, 0x00, - 0x3a, 0x00, 0x00, 0x00, 0x55, 0x01, 0x4a, 0x00, 0x11, 0x00, 0x00, 0x00, - 0xb7, 0x07, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, - 0xec, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x02, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0xb7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x01, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7b, 0x2a, 0xe0, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x7b, 0x1a, 0xd8, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x61, 0xa3, 0xec, 0xff, 0x00, 0x00, 0x00, 0x00, 0x15, 0x03, 0x0c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xd8, 0xff, 0xff, 0xff, - 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, - 0x26, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xdc, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x61, 0xa3, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x08, 0x00, 0x00, 0xdc, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x02, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x61, 0xa3, 0xf4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x08, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x02, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x61, 0xa3, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x08, 0x00, 0x00, 0xe4, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x02, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6b, 0x1a, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x63, 0x1a, 0xec, 0xff, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x03, 0x00, 0x00, 0xec, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0xb7, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, - 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xbf, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x61, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x55, 0x01, 0x1f, 0x01, 0x86, 0xdd, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, + 0x00, 0x00, 0xc8, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, + 0x00, 0xb7, 0x04, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xbf, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x10, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x71, + 0xa1, 0xc8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc9, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x55, 0x01, 0x12, 0x01, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xca, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x10, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xcb, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xcc, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xcd, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x55, 0x01, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xce, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, + 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xcf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x06, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x71, 0xa1, 0xd0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd1, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd2, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd3, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x71, 0xa1, 0xd4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd5, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd6, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd7, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xf6, 0x00, 0x01, + 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xb8, 0xff, 0xff, 0xff, 0xbf, 0x61, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x55, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x63, 0x1a, 0xec, 0xff, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, + 0x02, 0x00, 0x00, 0xec, 0xff, 0xff, 0xff, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc7, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc6, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x10, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc5, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x0d, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, + 0xc3, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc2, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x73, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc1, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, + 0xa1, 0xbf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xbe, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x73, 0x10, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xbd, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x05, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xbc, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xbb, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xba, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x73, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xb9, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xb8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xb7, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x9a, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, + 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, + 0x00, 0x00, 0x6d, 0x09, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x15, 0x01, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x01, 0x03, 0x00, 0x3a, 0x00, 0x00, 0x00, + 0x55, 0x01, 0x55, 0x00, 0x11, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, + 0x00, 0x00, 0xec, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, + 0x00, 0xb7, 0x04, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6d, 0x01, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, + 0x1a, 0xdf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xde, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xdd, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x73, 0x1a, 0xdc, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xe3, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xe2, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xe1, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x1a, 0xe6, 0xff, 0x00, 0x00, 0x00, 0x00, 0x73, 0x1a, 0xe5, 0xff, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x73, 0x1a, 0xe7, 0xff, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, 0x63, 0x1a, + 0xd8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x61, 0xa3, 0xec, 0xff, 0x00, 0x00, 0x00, 0x00, 0x15, 0x03, 0x0c, 0x00, 0xfd, 0x00, 0x00, + 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, + 0xfd, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xbf, + 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xd8, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xdc, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x61, 0xa3, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0xdc, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, + 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, + 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x61, 0xa3, 0xf4, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, + 0x00, 0xe0, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, + 0x00, 0x61, 0xa4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x61, 0xa3, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0xe4, 0xff, 0xff, 0xff, 0xbf, + 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, + 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, + 0x00, 0x22, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x73, 0x9a, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x61, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x6d, 0x09, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, + 0x46, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x15, 0x01, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, + 0x01, 0x03, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x55, 0x01, 0x4a, 0x00, 0x11, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xec, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, + 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x01, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7b, 0x2a, 0xe0, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x7b, 0x1a, 0xd8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x61, 0xa3, 0xec, 0xff, 0x00, 0x00, 0x00, 0x00, 0x15, 0x03, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, + 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xd8, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xdc, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x61, 0xa3, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0xdc, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xbf, + 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x61, 0xa3, 0xf4, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x61, 0xa3, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, + 0x43, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0xe4, 0xff, + 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xb7, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x1a, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x63, 0x1a, 0xec, 0xff, 0x00, 0x00, 0x00, + 0x00, 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xec, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xb7, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, }; static const unsigned int kLoopback6IngressMapRelocs[] = {448}; - #define LOOPBACK6_EGRESS_INSN_BYTES 2168 #define LOOPBACK6_EGRESS_MAP_RELOC_COUNT 1 static const unsigned char kLoopback6EgressInsns[] = { - 0xbf, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x61, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x0a, 0x01, 0x86, 0xdd, 0x00, 0x00, - 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, - 0xc8, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x02, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0xb7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x01, 0x02, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc8, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x01, 0x00, 0x01, 0xfd, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc9, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x71, 0xa1, 0xca, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xfc, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xcb, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x01, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xcc, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x71, 0xa1, 0xcd, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xf6, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xce, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x01, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xcf, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x71, 0xa1, 0xd0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xf0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd1, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x01, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd2, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x71, 0xa1, 0xd3, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xea, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd4, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x01, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd5, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x71, 0xa1, 0xd6, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xe4, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd7, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x01, 0xe2, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb7, 0x09, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x63, 0x9a, 0xc4, 0xff, 0x00, 0x00, 0x00, 0x00, - 0xbf, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, - 0xc4, 0xff, 0xff, 0xff, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xbf, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x15, 0x08, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x9a, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0xb7, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x1a, 0x00, 0x00, 0x00, 0x6d, 0x09, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x07, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x15, 0x01, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x15, 0x01, 0x03, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x55, 0x01, 0x75, 0x00, - 0x11, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x03, 0x00, 0x00, 0xec, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0xb7, 0x04, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x1a, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6d, 0x01, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x82, 0x0d, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x67, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x71, 0x81, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x12, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0x81, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x67, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x71, 0x83, 0x0e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x4f, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x71, 0x84, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x71, 0x83, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4f, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x83, 0x0b, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x67, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x71, 0x85, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x53, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x67, 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x4f, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x01, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x4f, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x71, 0x84, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x71, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4f, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x82, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x67, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x71, 0x85, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x67, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x4f, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x02, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x4f, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x71, 0x83, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x03, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x71, 0x84, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4f, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x85, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0x84, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x67, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4f, 0x54, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x67, 0x04, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x4f, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x1a, 0xe0, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x67, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x4f, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xa3, 0xec, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x7b, 0x4a, 0xd8, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x67, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x77, 0x04, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xd8, 0xff, 0xff, 0xff, - 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xdc, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x61, 0xa3, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x08, 0x00, 0x00, 0xdc, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x02, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x61, 0xa3, 0xf4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x08, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x61, 0xa3, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x08, 0x00, 0x00, 0xe4, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x02, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x73, 0x9a, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x6d, 0x09, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, - 0x46, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x15, 0x01, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x01, 0x03, 0x00, - 0x3a, 0x00, 0x00, 0x00, 0x55, 0x01, 0x4a, 0x00, 0x11, 0x00, 0x00, 0x00, - 0xb7, 0x07, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, - 0xec, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x02, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0xb7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x01, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7b, 0x2a, 0xe0, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x7b, 0x1a, 0xd8, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x61, 0xa3, 0xec, 0xff, 0x00, 0x00, 0x00, 0x00, 0x15, 0x03, 0x0c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xd8, 0xff, 0xff, 0xff, - 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, - 0x26, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xdc, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x61, 0xa3, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x08, 0x00, 0x00, 0xdc, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x02, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x61, 0xa3, 0xf4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x08, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x02, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x61, 0xa3, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x08, 0x00, 0x00, 0xe4, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x02, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xbf, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x61, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x0a, 0x01, 0x86, + 0xdd, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xc8, 0xff, 0xff, 0xff, 0xbf, 0x61, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x01, 0x02, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xc8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x00, 0x01, 0xfd, 0x00, 0x00, 0x00, 0x71, + 0xa1, 0xc9, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xca, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x55, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xcb, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xfa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xcc, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xa1, 0xcd, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xce, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x55, 0x01, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xcf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, + 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x71, 0xa1, 0xd1, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd2, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd3, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, + 0x01, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xe8, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x71, 0xa1, 0xd5, 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd6, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xd7, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x01, 0xe2, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb7, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x9a, 0xc4, 0xff, 0x00, + 0x00, 0x00, 0x00, 0xbf, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0xc4, 0xff, 0xff, 0xff, 0x18, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0xbf, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x08, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x9a, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xbf, + 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x6d, 0x09, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, + 0x00, 0x46, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x15, 0x01, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x15, 0x01, 0x03, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x55, 0x01, 0x75, 0x00, 0x11, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x3c, + 0x00, 0x00, 0x00, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xbf, 0xa3, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xec, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xb7, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x01, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, + 0x82, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x71, 0x81, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x4f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x81, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x01, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x71, 0x83, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0x84, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x71, 0x83, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x4f, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x83, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x03, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x71, 0x85, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x67, 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x4f, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x01, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x4f, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x84, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x71, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x24, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x71, 0x82, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x71, 0x85, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x4f, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x4f, 0x42, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x71, 0x83, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x71, 0x84, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x85, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x71, 0x84, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4f, 0x54, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x67, 0x04, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x4f, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, + 0x1a, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x67, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x4f, 0x24, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x61, 0xa3, 0xec, 0xff, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x4a, 0xd8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x67, 0x04, 0x00, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x77, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x14, + 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, + 0x00, 0x00, 0xd8, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, + 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xdc, 0xff, 0x00, 0x00, 0x00, 0x00, 0x61, 0xa3, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, + 0x43, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0xdc, 0xff, + 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x02, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, + 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x61, 0xa3, 0xf4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, + 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x1e, 0x00, + 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x61, 0xa3, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0xe4, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, + 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, + 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x73, 0x9a, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0x6d, 0x09, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x71, 0xa1, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x15, 0x01, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x01, 0x03, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x55, 0x01, + 0x4a, 0x00, 0x11, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xb7, 0x07, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, + 0xec, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xb7, + 0x04, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x6d, 0x01, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x7b, 0x2a, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x1a, 0xd8, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x61, 0xa3, 0xec, 0xff, 0x00, 0x00, 0x00, 0x00, 0x15, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x05, + 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x03, 0x00, 0x00, 0xd8, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, + 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xdc, 0xff, 0x00, 0x00, 0x00, 0x00, 0x61, 0xa3, 0xf0, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, + 0x00, 0xdc, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, + 0x00, 0x61, 0xa4, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x61, 0xa3, 0xf4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xbf, + 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, + 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, + 0x00, 0x2e, 0x00, 0x00, 0x00, 0xbf, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x61, 0xa4, 0xe4, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x61, 0xa3, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x43, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0xe4, 0xff, 0xff, 0xff, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xbf, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0xbf, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0xbf, + 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, }; static const unsigned int kLoopback6EgressMapRelocs[] = {376}; - diff --git a/src/linux/init/Loopback6Bpf.cpp b/src/linux/init/Loopback6Bpf.cpp index 93366b9ba1..a962ecea91 100644 --- a/src/linux/init/Loopback6Bpf.cpp +++ b/src/linux/init/Loopback6Bpf.cpp @@ -98,8 +98,8 @@ std::optional LoadLoopback6RelayPrograms() return std::nullopt; } - int ingressFd = - LoadProgram(kLoopback6IngressInsns, LOOPBACK6_INGRESS_INSN_BYTES, kLoopback6IngressMapRelocs, LOOPBACK6_INGRESS_MAP_RELOC_COUNT, mapFd); + int ingressFd = LoadProgram( + kLoopback6IngressInsns, LOOPBACK6_INGRESS_INSN_BYTES, kLoopback6IngressMapRelocs, LOOPBACK6_INGRESS_MAP_RELOC_COUNT, mapFd); int egressFd = LoadProgram(kLoopback6EgressInsns, LOOPBACK6_EGRESS_INSN_BYTES, kLoopback6EgressMapRelocs, LOOPBACK6_EGRESS_MAP_RELOC_COUNT, mapFd);