From patchwork Thu Apr 17 03:31:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pingfan Liu X-Patchwork-Id: 14054866 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 02F3F18871F for ; Thu, 17 Apr 2025 03:34:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744860861; cv=none; b=D100TWCDfQe6BLA2iaz1c9OwuTCd9Hrowu8cUj2MtVxgXrnnTm3UkdiSDcS4gA/ebnKfVBNypj2b+IdyHUzR+WsH+/Kc+sLeCV3Jk1h7WKIXRi2z77K9LH9qCpf7HmMHAdoAc5SLpIfhwthcgYTVvT5Y+4JIUmQPInmbJEhYxCA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744860861; c=relaxed/simple; bh=UBwrAeaIW248tyk3D4XZ72PwXa8+C3LN+n+Hr1GGiU4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EGpSEpA7XO2zoWDXSqVlYqmIrAZokbHi7gsv7sgJ08NJhnGJ7cRY4RrjoRkbd72NL/Pk/vmc0M5gSqoh5oKJx1OETB+3PEBi58pOXzxjWnsKr9vqUUcnKh7bLZPcLGe55XWYefJso3D/hz+zRwUIskBKKGqEZ9ke2VVgM7tOMcI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=H7iEGNA5; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="H7iEGNA5" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744860856; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=UdBXyeso6nglyCwOiO5HsMRo2+tlKFW/wCKYxXr4l0Y=; b=H7iEGNA5vc7ciwNV9c5rCMhBNwO9ALIQi4tkV11RreHKmnenflXJ/LvrMq8yA6F1LM+Pmo uutOo0AAs+C+NCjx7jnL9CLBp8wepyI3bpIAjmW1WyidKi7SjlcLokUwmhCSgb88r7DG/k jrl5JiYALKELeNamx//PDtpYfj3I11w= Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-544-rd_PHSjxMVuvw1VFFV6Ecg-1; Wed, 16 Apr 2025 23:34:13 -0400 X-MC-Unique: rd_PHSjxMVuvw1VFFV6Ecg-1 X-Mimecast-MFC-AGG-ID: rd_PHSjxMVuvw1VFFV6Ecg_1744860851 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E64BE1956088; Thu, 17 Apr 2025 03:34:10 +0000 (UTC) Received: from fedora.redhat.com (unknown [10.72.112.60]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id E03F53001D0E; Thu, 17 Apr 2025 03:33:59 +0000 (UTC) From: Pingfan Liu To: Cc: Pingfan Liu , Alexei Starovoitov , Daniel Borkmann , John Fastabend , Andrii Nakryiko , Martin KaFai Lau , Eduard Zingerman , Song Liu , Yonghong Song , Jeremy Linton , Catalin Marinas , Will Deacon , Ard Biesheuvel , Simon Horman , Gerd Hoffmann , Vitaly Kuznetsov , Philipp Rudo , Viktor Malik , Jan Hendrik Farr , Baoquan He , Dave Young , Eric Biederman , Andrew Morton , bpf@vger.kernel.org Subject: [RFCv1 6/7] kexec: Loading bpf opts_insn and opts_data from user space Date: Thu, 17 Apr 2025 11:31:30 +0800 Message-ID: <20250417033146.14240-7-piliu@redhat.com> In-Reply-To: <20250417033146.14240-1-piliu@redhat.com> References: <20250417033146.14240-1-piliu@redhat.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Patchwork-State: RFC The interface between bpf-prog and the kernel are constituted by: four ringbuf an array SEC("fentry/bpf_handle_pefile") SEC("fentry/bpf_post_handle_pefile") They are fixed and shared by all kexec bpf-prog. For different kexec bpf-prog, the opts_data[] and opts_insn[] generated by 'bpftool gen skeleton -L ' contains the bytecode to parse different file format. They can be split out and compiled as an ELF. The ELF can be embeded in a PE file (e.g. vmlinuz.efi or UKI) as a '.bpf' section. So opts_data[] and opts_insn[] can be extracted and run in kernel. By this way, the integrity of bpf-prog can be protected by the signature of the outermost PE file. Signed-off-by: Pingfan Liu Cc: Alexei Starovoitov Cc: Baoquan He Cc: Dave Young Cc: Eric Biederman Cc: bpf@vger.kernel.org To: kexec@lists.infradead.org --- kernel/kexec_pe_image.c | 60 ++++ kernel/kexec_pe_parser_lskel.h | 484 +-------------------------------- 2 files changed, 65 insertions(+), 479 deletions(-) diff --git a/kernel/kexec_pe_image.c b/kernel/kexec_pe_image.c index c4949d0daecda..af26fd73ad08e 100644 --- a/kernel/kexec_pe_image.c +++ b/kernel/kexec_pe_image.c @@ -291,9 +291,67 @@ static bool pe_has_bpf_section(char *file_buf, unsigned long pe_sz) static struct kexec_pe_parser_bpf *pe_parser; +static void *get_symbol_from_elf(const char *elf_data, size_t elf_size, + const char *symbol_name, unsigned int *symbol_size) +{ + Elf_Ehdr *ehdr = (Elf_Ehdr *)elf_data; + Elf_Shdr *shdr, *symtab_shdr, *strtab_shdr, *dst_shdr; + Elf64_Sym *sym, *symtab = NULL; + char *strtab = NULL; + void *symbol_data = NULL; + int i; + + symtab_shdr = strtab_shdr = NULL; + if (memcmp(ehdr->e_ident, ELFMAG, SELFMAG) != 0) { + pr_err("Not a valid ELF file\n"); + goto out; + } + + shdr = (struct elf_shdr *)(elf_data + ehdr->e_shoff); + for (i = 0; i < ehdr->e_shnum; i++) { + if (shdr[i].sh_type == SHT_SYMTAB) { + symtab_shdr = &shdr[i]; + } else if (shdr[i].sh_type == SHT_STRTAB && i != ehdr->e_shstrndx) { + strtab_shdr = &shdr[i]; + } + } + + if (!symtab_shdr || !strtab_shdr) { + pr_err("Symbol table or string table not found\n"); + goto out; + } + symtab = (Elf64_Sym *)(elf_data + symtab_shdr->sh_offset); + strtab = (char *)(elf_data + strtab_shdr->sh_offset); + for (i = 0; i < symtab_shdr->sh_size / sizeof(Elf64_Sym); i++) { + sym = &symtab[i]; + if (strcmp(&strtab[sym->st_name], symbol_name) == 0) { + if (sym->st_shndx >= SHN_LORESERVE) + return NULL; // No section data for these + dst_shdr = &shdr[sym->st_shndx]; + symbol_data = (void *)(elf_data + dst_shdr->sh_offset + sym->st_value); + *symbol_size = symtab[i].st_size; + break; + } + } + +out: + return symbol_data; +} + /* Load a ELF */ static int arm_bpf_prog(char *bpf_elf, unsigned long sz) { + opts_data = get_symbol_from_elf(bpf_elf, sz, "opts_data", &opts_data_sz); + opts_insn = get_symbol_from_elf(bpf_elf, sz, "opts_insn", &opts_insn_sz); + if (!opts_data || !opts_insn) + return -1; + /* + * When light skeleton generates opts_data[] and opts_insn[], it appends a + * NULL terminator at the end of string + */ + opts_data_sz = opts_data_sz - 1; + opts_insn_sz = opts_insn_sz - 1; + pe_parser = kexec_pe_parser_bpf__open_and_load(); if (!pe_parser) return -1; @@ -307,6 +365,8 @@ static void disarm_bpf_prog(void) { kexec_pe_parser_bpf__destroy(pe_parser); pe_parser = NULL; + opts_data = NULL; + opts_insn = NULL; } /* diff --git a/kernel/kexec_pe_parser_lskel.h b/kernel/kexec_pe_parser_lskel.h index d8c6c21c64cc3..17752b4325cde 100644 --- a/kernel/kexec_pe_parser_lskel.h +++ b/kernel/kexec_pe_parser_lskel.h @@ -96,493 +96,19 @@ kexec_pe_parser_bpf__open(void) return NULL; } +static char *opts_data, *opts_insn; +static unsigned int opts_data_sz, opts_insn_sz; + static inline int kexec_pe_parser_bpf__load(struct kexec_pe_parser_bpf *skel) { struct bpf_load_and_run_opts opts = {}; int err; - static const char opts_data[] __attribute__((__aligned__(8))) = "\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x9f\xeb\x01\0\ -\x18\0\0\0\0\0\0\0\x9c\x05\0\0\x9c\x05\0\0\x49\x0a\0\0\0\0\0\0\0\0\0\x02\x03\0\ -\0\0\x01\0\0\0\0\0\0\x01\x04\0\0\0\x20\0\0\x01\0\0\0\0\0\0\0\x03\0\0\0\0\x02\0\ -\0\0\x04\0\0\0\x1b\0\0\0\x05\0\0\0\0\0\0\x01\x04\0\0\0\x20\0\0\0\0\0\0\0\0\0\0\ -\x02\x06\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x02\0\0\0\x04\0\0\0\0\0\0\x10\0\0\0\0\ -\x02\0\0\x04\x10\0\0\0\x19\0\0\0\x01\0\0\0\0\0\0\0\x1e\0\0\0\x05\0\0\0\x40\0\0\ -\0\x2a\0\0\0\0\0\0\x0e\x07\0\0\0\x01\0\0\0\0\0\0\0\x02\0\0\x04\x10\0\0\0\x19\0\ -\0\0\x01\0\0\0\0\0\0\0\x1e\0\0\0\x05\0\0\0\x40\0\0\0\x34\0\0\0\0\0\0\x0e\x09\0\ -\0\0\x01\0\0\0\0\0\0\0\x02\0\0\x04\x10\0\0\0\x19\0\0\0\x01\0\0\0\0\0\0\0\x1e\0\ -\0\0\x05\0\0\0\x40\0\0\0\x3e\0\0\0\0\0\0\x0e\x0b\0\0\0\x01\0\0\0\0\0\0\0\x02\0\ -\0\x04\x10\0\0\0\x19\0\0\0\x01\0\0\0\0\0\0\0\x1e\0\0\0\x05\0\0\0\x40\0\0\0\x48\ -\0\0\0\0\0\0\x0e\x0d\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\x02\x10\0\0\0\0\0\0\0\0\0\0\ -\x03\0\0\0\0\x02\0\0\0\x04\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\x02\x12\0\0\0\0\0\0\0\ -\0\0\0\x03\0\0\0\0\x02\0\0\0\x04\0\0\0\x0a\0\0\0\0\0\0\0\0\0\0\x02\x14\0\0\0\ -\x52\0\0\0\0\0\0\x01\x04\0\0\0\x20\0\0\0\0\0\0\0\0\0\0\x02\x16\0\0\0\x5f\0\0\0\ -\x03\0\0\x04\x10\0\0\0\x70\0\0\0\x17\0\0\0\0\0\0\0\x74\0\0\0\x18\0\0\0\x40\0\0\ -\0\x79\0\0\0\x02\0\0\0\x60\0\0\0\0\0\0\0\0\0\0\x02\0\0\0\0\x80\0\0\0\0\0\0\x08\ -\x19\0\0\0\x89\0\0\0\0\0\0\x08\x1a\0\0\0\x8d\0\0\0\0\0\0\x08\x14\0\0\0\0\0\0\0\ -\x04\0\0\x04\x20\0\0\0\x19\0\0\0\x0f\0\0\0\0\0\0\0\x1e\0\0\0\x11\0\0\0\x40\0\0\ -\0\x93\0\0\0\x13\0\0\0\x80\0\0\0\x97\0\0\0\x15\0\0\0\xc0\0\0\0\x9d\0\0\0\0\0\0\ -\x0e\x1b\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\x02\x1e\0\0\0\xab\0\0\0\0\0\0\x01\x08\0\ -\0\0\x40\0\0\0\0\0\0\0\x01\0\0\x0d\x02\0\0\0\xbe\0\0\0\x1d\0\0\0\xc2\0\0\0\x01\ -\0\0\x0c\x1f\0\0\0\0\0\0\0\x01\0\0\x0d\x02\0\0\0\xbe\0\0\0\x1d\0\0\0\xc5\x08\0\ -\0\x01\0\0\x0c\x21\0\0\0\x2a\x09\0\0\0\0\0\x01\x01\0\0\0\x08\0\0\x01\0\0\0\0\0\ -\0\0\x03\0\0\0\0\x23\0\0\0\x04\0\0\0\x04\0\0\0\x2f\x09\0\0\0\0\0\x0e\x24\0\0\0\ -\x01\0\0\0\0\0\0\0\0\0\0\x0a\x23\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x26\0\0\0\x04\ -\0\0\0\x10\0\0\0\x37\x09\0\0\0\0\0\x0e\x27\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\ -\0\0\x26\0\0\0\x04\0\0\0\x27\0\0\0\x4c\x09\0\0\0\0\0\x0e\x29\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\x03\0\0\0\0\x26\0\0\0\x04\0\0\0\x34\0\0\0\x63\x09\0\0\0\0\0\x0e\x2b\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x23\0\0\0\x04\0\0\0\x05\0\0\0\0\0\0\0\ -\0\0\0\x03\0\0\0\0\x26\0\0\0\x04\0\0\0\x1f\0\0\0\x7a\x09\0\0\0\0\0\x0e\x2e\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x26\0\0\0\x04\0\0\0\x26\0\0\0\x91\x09\0\0\ -\0\0\0\x0e\x30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x26\0\0\0\x04\0\0\0\x43\ -\0\0\0\xa8\x09\0\0\0\0\0\x0e\x32\0\0\0\0\0\0\0\xbf\x09\0\0\0\0\0\x0e\x2e\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x26\0\0\0\x04\0\0\0\x1d\0\0\0\xd6\x09\0\0\0\ -\0\0\x0e\x35\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x26\0\0\0\x04\0\0\0\x39\0\ -\0\0\xed\x09\0\0\0\0\0\x0e\x37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x26\0\0\ -\0\x04\0\0\0\x20\0\0\0\x04\x0a\0\0\0\0\0\x0e\x39\0\0\0\0\0\0\0\x1b\x0a\0\0\0\0\ -\0\x0e\x35\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x23\0\0\0\x04\0\0\0\x07\0\0\ -\0\x33\x0a\0\0\x05\0\0\x0f\x60\0\0\0\x08\0\0\0\0\0\0\0\x10\0\0\0\x0a\0\0\0\x10\ -\0\0\0\x10\0\0\0\x0c\0\0\0\x20\0\0\0\x10\0\0\0\x0e\0\0\0\x30\0\0\0\x10\0\0\0\ -\x1c\0\0\0\x40\0\0\0\x20\0\0\0\x39\x0a\0\0\x0b\0\0\x0f\xa5\x01\0\0\x28\0\0\0\0\ -\0\0\0\x10\0\0\0\x2a\0\0\0\x10\0\0\0\x27\0\0\0\x2c\0\0\0\x37\0\0\0\x34\0\0\0\ -\x2f\0\0\0\x6b\0\0\0\x1f\0\0\0\x31\0\0\0\x8a\0\0\0\x26\0\0\0\x33\0\0\0\xb0\0\0\ -\0\x43\0\0\0\x34\0\0\0\xf3\0\0\0\x1f\0\0\0\x36\0\0\0\x12\x01\0\0\x1d\0\0\0\x38\ -\0\0\0\x2f\x01\0\0\x39\0\0\0\x3a\0\0\0\x68\x01\0\0\x20\0\0\0\x3b\0\0\0\x88\x01\ -\0\0\x1d\0\0\0\x41\x0a\0\0\x01\0\0\x0f\x04\0\0\0\x25\0\0\0\0\0\0\0\x04\0\0\0\0\ -\x69\x6e\x74\0\x5f\x5f\x41\x52\x52\x41\x59\x5f\x53\x49\x5a\x45\x5f\x54\x59\x50\ -\x45\x5f\x5f\0\x74\x79\x70\x65\0\x6d\x61\x78\x5f\x65\x6e\x74\x72\x69\x65\x73\0\ -\x72\x69\x6e\x67\x62\x75\x66\x5f\x31\0\x72\x69\x6e\x67\x62\x75\x66\x5f\x32\0\ -\x72\x69\x6e\x67\x62\x75\x66\x5f\x33\0\x72\x69\x6e\x67\x62\x75\x66\x5f\x34\0\ -\x75\x6e\x73\x69\x67\x6e\x65\x64\x20\x69\x6e\x74\0\x6d\x65\x6d\x5f\x72\x61\x6e\ -\x67\x65\x5f\x72\x65\x73\x75\x6c\x74\0\x62\x75\x66\0\x73\x69\x7a\x65\0\x73\x74\ -\x61\x74\x75\x73\0\x75\x69\x6e\x74\x33\x32\x5f\x74\0\x75\x33\x32\0\x5f\x5f\x75\ -\x33\x32\0\x6b\x65\x79\0\x76\x61\x6c\x75\x65\0\x6d\x65\x6d\x5f\x72\x61\x6e\x67\ -\x65\x5f\x6d\x61\x70\0\x75\x6e\x73\x69\x67\x6e\x65\x64\x20\x6c\x6f\x6e\x67\x20\ -\x6c\x6f\x6e\x67\0\x63\x74\x78\0\x70\x61\x72\x73\x65\x5f\x70\x65\0\x66\x65\x6e\ -\x74\x72\x79\x2f\x62\x70\x66\x5f\x68\x61\x6e\x64\x6c\x65\x5f\x70\x65\x66\x69\ -\x6c\x65\0\x2f\x68\x6f\x6d\x65\x2f\x7a\x62\x6f\x6f\x74\x5f\x62\x70\x66\x2f\x6b\ -\x65\x78\x65\x63\x5f\x70\x65\x5f\x70\x61\x72\x73\x65\x72\x5f\x62\x70\x66\x2e\ -\x63\0\x69\x6e\x74\x20\x42\x50\x46\x5f\x50\x52\x4f\x47\x28\x70\x61\x72\x73\x65\ -\x5f\x70\x65\x2c\x20\x63\x68\x61\x72\x20\x2a\x69\x6d\x61\x67\x65\x5f\x62\x75\ -\x66\x2c\x20\x75\x6e\x73\x69\x67\x6e\x65\x64\x20\x69\x6e\x74\x20\x69\x6d\x61\ -\x67\x65\x5f\x73\x7a\x2c\x20\x63\x68\x61\x72\x20\x2a\x75\x6e\x75\x73\x65\x64\ -\x5f\x69\x6e\x69\x74\x72\x64\x2c\0\x09\x75\x6e\x73\x69\x67\x6e\x65\x64\x20\x69\ -\x6e\x74\x20\x6b\x65\x79\x20\x3d\x20\x30\x3b\0\x09\x62\x70\x66\x5f\x70\x72\x69\ -\x6e\x74\x6b\x28\x22\x62\x65\x67\x69\x6e\x20\x70\x61\x72\x73\x65\x20\x50\x45\ -\x5c\x6e\x22\x29\x3b\0\x09\x69\x66\x20\x28\x21\x69\x6d\x61\x67\x65\x5f\x62\x75\ -\x66\x20\x7c\x7c\x20\x28\x69\x6d\x61\x67\x65\x5f\x73\x7a\x20\x3e\x20\x4d\x41\ -\x58\x5f\x52\x45\x43\x4f\x52\x44\x5f\x53\x49\x5a\x45\x29\x29\x20\x7b\0\x09\x09\ -\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x45\x72\x72\x3a\x20\x69\x6d\ -\x61\x67\x65\x20\x73\x69\x7a\x65\x20\x69\x73\x20\x67\x72\x65\x61\x74\x65\x72\ -\x20\x74\x68\x61\x6e\x20\x30\x78\x25\x6c\x78\x5c\x6e\x22\x2c\x20\x4d\x41\x58\ -\x5f\x52\x45\x43\x4f\x52\x44\x5f\x53\x49\x5a\x45\x29\x3b\0\x09\x09\x72\x65\x74\ -\x75\x72\x6e\x20\x30\x3b\0\x09\x62\x75\x66\x20\x3d\x20\x28\x63\x68\x61\x72\x20\ -\x2a\x29\x62\x70\x66\x5f\x72\x69\x6e\x67\x62\x75\x66\x5f\x72\x65\x73\x65\x72\ -\x76\x65\x28\x26\x72\x69\x6e\x67\x62\x75\x66\x5f\x31\x2c\x20\x73\x69\x7a\x65\ -\x6f\x66\x28\x73\x74\x72\x75\x63\x74\x20\x6c\x69\x6e\x75\x78\x5f\x70\x65\x5f\ -\x7a\x62\x6f\x6f\x74\x5f\x68\x65\x61\x64\x65\x72\x29\x2c\x20\x30\x29\x3b\0\x09\ -\x69\x66\x20\x28\x21\x62\x75\x66\x29\x20\x7b\0\x09\x20\x20\x20\x20\x09\x62\x70\ -\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x45\x72\x72\x3a\x20\x66\x61\x69\x6c\ -\x20\x74\x6f\x20\x72\x65\x73\x65\x72\x76\x65\x20\x72\x69\x6e\x67\x62\x75\x66\ -\x20\x74\x6f\x20\x70\x61\x72\x73\x65\x20\x7a\x62\x6f\x6f\x74\x20\x68\x65\x61\ -\x64\x65\x72\x5c\x6e\x22\x29\x3b\0\x09\x62\x70\x66\x5f\x70\x72\x6f\x62\x65\x5f\ -\x72\x65\x61\x64\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x62\x75\x66\x2c\x20\x73\ -\x69\x7a\x65\x6f\x66\x28\x73\x74\x72\x75\x63\x74\x20\x6c\x69\x6e\x75\x78\x5f\ -\x70\x65\x5f\x7a\x62\x6f\x6f\x74\x5f\x68\x65\x61\x64\x65\x72\x29\x2c\x20\x69\ -\x6d\x61\x67\x65\x5f\x62\x75\x66\x29\x3b\0\x09\x69\x66\x20\x28\x21\x21\x5f\x5f\ -\x62\x75\x69\x6c\x74\x69\x6e\x5f\x6d\x65\x6d\x63\x6d\x70\x28\x26\x7a\x62\x6f\ -\x6f\x74\x5f\x68\x65\x61\x64\x65\x72\x2d\x3e\x69\x6d\x61\x67\x65\x5f\x74\x79\ -\x70\x65\x2c\x20\x22\x7a\x69\x6d\x67\x22\x2c\0\x09\x20\x20\x20\x20\x09\x62\x70\ -\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x45\x72\x72\x3a\x20\x69\x6d\x61\x67\ -\x65\x20\x69\x73\x20\x6e\x6f\x74\x20\x7a\x62\x6f\x6f\x74\x20\x69\x6d\x61\x67\ -\x65\x5c\x6e\x22\x29\x3b\0\x09\x09\x62\x70\x66\x5f\x72\x69\x6e\x67\x62\x75\x66\ -\x5f\x64\x69\x73\x63\x61\x72\x64\x28\x62\x75\x66\x2c\x20\x42\x50\x46\x5f\x52\ -\x42\x5f\x4e\x4f\x5f\x57\x41\x4b\x45\x55\x50\x29\x3b\0\x09\x75\x6e\x73\x69\x67\ -\x6e\x65\x64\x20\x69\x6e\x74\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\ -\x65\x20\x3d\x20\x7a\x62\x6f\x6f\x74\x5f\x68\x65\x61\x64\x65\x72\x2d\x3e\x70\ -\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x3b\0\x09\x75\x6e\x73\x69\x67\x6e\ -\x65\x64\x20\x69\x6e\x74\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\x6f\x66\x66\x73\ -\x65\x74\x20\x3d\x20\x7a\x62\x6f\x6f\x74\x5f\x68\x65\x61\x64\x65\x72\x2d\x3e\ -\x70\x61\x79\x6c\x6f\x61\x64\x5f\x6f\x66\x66\x73\x65\x74\x3b\0\x09\x62\x70\x66\ -\x5f\x72\x69\x6e\x67\x62\x75\x66\x5f\x64\x69\x73\x63\x61\x72\x64\x28\x62\x75\ -\x66\x2c\x20\x42\x50\x46\x5f\x52\x42\x5f\x4e\x4f\x5f\x57\x41\x4b\x45\x55\x50\ -\x29\x3b\0\x09\x69\x6d\x61\x67\x65\x5f\x73\x7a\x20\x3d\x20\x69\x6d\x61\x67\x65\ -\x5f\x73\x7a\x20\x26\x20\x28\x4d\x41\x58\x5f\x52\x45\x43\x4f\x52\x44\x5f\x53\ -\x49\x5a\x45\x20\x2d\x20\x31\x29\x3b\0\x09\x69\x66\x20\x28\x69\x6d\x61\x67\x65\ -\x5f\x67\x7a\x5f\x73\x7a\x20\x3c\x3d\x20\x30\x20\x7c\x7c\x20\x69\x6d\x61\x67\ -\x65\x5f\x67\x7a\x5f\x73\x7a\x20\x2b\x20\x34\x20\x3e\x20\x69\x6d\x61\x67\x65\ -\x5f\x73\x7a\x29\x20\x7b\0\x09\x09\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\ -\x22\x49\x6e\x76\x61\x6c\x69\x64\x20\x6f\x66\x66\x73\x65\x74\x20\x66\x6f\x72\ -\x20\x64\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x65\x64\x20\x73\x69\x7a\x65\x5c\ -\x6e\x22\x29\x3b\0\x09\x75\x6e\x73\x69\x67\x6e\x65\x64\x20\x69\x6e\x74\x20\x64\ -\x5f\x70\x6f\x73\x20\x3d\x20\x28\x70\x61\x79\x6c\x6f\x61\x64\x5f\x6f\x66\x66\ -\x73\x65\x74\x20\x2b\x20\x69\x6d\x61\x67\x65\x5f\x67\x7a\x5f\x73\x7a\x29\x20\ -\x26\x20\x28\x4d\x41\x58\x5f\x52\x45\x43\x4f\x52\x44\x5f\x53\x49\x5a\x45\x20\ -\x2d\x20\x31\x29\x3b\0\x09\x62\x70\x66\x5f\x70\x72\x6f\x62\x65\x5f\x72\x65\x61\ -\x64\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x26\x64\x65\x63\x6f\x6d\x70\x72\x65\ -\x73\x73\x65\x64\x5f\x73\x7a\x2c\x20\x73\x69\x7a\x65\x6f\x66\x28\x69\x6e\x74\ -\x29\x2c\x20\x69\x6d\x61\x67\x65\x5f\x62\x75\x66\x20\x2b\x20\x64\x5f\x70\x6f\ -\x73\x29\x3b\0\x09\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x70\x61\x79\ -\x6c\x6f\x61\x64\x5f\x6f\x66\x66\x73\x65\x74\x3a\x30\x78\x25\x6c\x78\x2c\x20\ -\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x3a\x30\x78\x25\x6c\x78\x2c\ -\x20\x64\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x65\x64\x20\x73\x69\x7a\x65\x3a\ -\x30\x78\x25\x6c\x78\x5c\x6e\x22\x2c\0\x09\x69\x66\x20\x28\x64\x65\x63\x6f\x6d\ -\x70\x72\x65\x73\x73\x65\x64\x5f\x73\x7a\x20\x3d\x3d\x20\x30\x29\x20\x7b\0\x09\ -\x20\x20\x20\x20\x09\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x64\x65\ -\x63\x6f\x6d\x70\x72\x65\x73\x73\x65\x64\x20\x73\x69\x7a\x65\x20\x25\x64\x20\ -\x69\x73\x20\x77\x72\x6f\x6e\x67\x5c\x6e\x22\x2c\x20\x64\x65\x63\x6f\x6d\x70\ -\x72\x65\x73\x73\x65\x64\x5f\x73\x7a\x29\x3b\0\x09\x69\x66\x20\x28\x70\x61\x79\ -\x6c\x6f\x61\x64\x5f\x6f\x66\x66\x73\x65\x74\x20\x3e\x3d\x20\x4d\x41\x58\x5f\ -\x52\x45\x43\x4f\x52\x44\x5f\x53\x49\x5a\x45\x20\x29\x20\x7b\0\x09\x09\x62\x70\ -\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x45\x72\x72\x3a\x20\x70\x61\x79\x6c\ -\x6f\x61\x64\x5f\x6f\x66\x66\x73\x65\x74\x20\x3e\x20\x30\x78\x25\x6c\x78\x5c\ -\x6e\x22\x2c\x20\x4d\x41\x58\x5f\x52\x45\x43\x4f\x52\x44\x5f\x53\x49\x5a\x45\ -\x29\x3b\0\x09\x62\x75\x66\x20\x3d\x20\x28\x63\x68\x61\x72\x20\x2a\x29\x62\x70\ -\x66\x5f\x72\x69\x6e\x67\x62\x75\x66\x5f\x72\x65\x73\x65\x72\x76\x65\x28\x26\ -\x72\x69\x6e\x67\x62\x75\x66\x5f\x31\x2c\x20\x4d\x41\x58\x5f\x52\x45\x43\x4f\ -\x52\x44\x5f\x53\x49\x5a\x45\x2c\x20\x30\x29\x3b\0\x09\x09\x62\x70\x66\x5f\x70\ -\x72\x69\x6e\x74\x6b\x28\x22\x45\x72\x72\x3a\x20\x66\x61\x69\x6c\x20\x74\x6f\ -\x20\x72\x65\x73\x65\x72\x76\x65\x20\x66\x72\x6f\x6d\x20\x72\x69\x6e\x67\x62\ -\x75\x66\x5f\x31\x20\x66\x6f\x72\x20\x72\x65\x61\x64\x69\x6e\x67\x20\x70\x61\ -\x79\x6c\x6f\x61\x64\x5c\x6e\x22\x29\x3b\0\x09\x62\x70\x66\x5f\x70\x72\x6f\x62\ -\x65\x5f\x72\x65\x61\x64\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x62\x75\x66\x2c\ -\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x2c\x20\x69\x6d\x61\x67\ -\x65\x5f\x62\x75\x66\x20\x2b\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\x6f\x66\x66\ -\x73\x65\x74\x29\x3b\0\x09\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x43\ -\x61\x6c\x6c\x69\x6e\x67\x20\x62\x70\x66\x5f\x6b\x65\x78\x65\x63\x5f\x64\x65\ -\x63\x6f\x6d\x70\x72\x65\x73\x73\x28\x29\x5c\x6e\x22\x29\x3b\0\x09\x62\x70\x66\ -\x5f\x6b\x65\x78\x65\x63\x5f\x64\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x28\x62\ -\x75\x66\x2c\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x20\x2d\x20\ -\x34\x2c\x20\x64\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x65\x64\x5f\x73\x7a\x2c\ -\x20\x6d\x61\x70\x5f\x70\x74\x72\x2c\x20\x26\x6b\x65\x79\x29\x3b\0\x09\x72\x65\ -\x73\x75\x6c\x74\x20\x3d\x20\x62\x70\x66\x5f\x6d\x61\x70\x5f\x6c\x6f\x6f\x6b\ -\x75\x70\x5f\x65\x6c\x65\x6d\x28\x26\x6d\x65\x6d\x5f\x72\x61\x6e\x67\x65\x5f\ -\x6d\x61\x70\x2c\x20\x26\x6b\x65\x79\x29\x3b\0\x09\x69\x66\x20\x28\x21\x21\x72\ -\x65\x73\x75\x6c\x74\x29\x20\x7b\0\x09\x09\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\ -\x6b\x28\x22\x43\x61\x6c\x6c\x69\x6e\x67\x20\x62\x70\x66\x5f\x6b\x65\x78\x65\ -\x63\x5f\x63\x61\x72\x72\x69\x65\x72\x28\x29\x5c\x6e\x22\x29\x3b\0\x09\x09\x62\ -\x70\x66\x5f\x6b\x65\x78\x65\x63\x5f\x63\x61\x72\x72\x69\x65\x72\x28\x4b\x45\ -\x58\x45\x43\x5f\x52\x45\x53\x5f\x4b\x45\x52\x4e\x45\x4c\x5f\x4e\x41\x4d\x45\ -\x2c\x20\x26\x6d\x65\x6d\x5f\x72\x61\x6e\x67\x65\x5f\x6d\x61\x70\x2c\x20\x72\ -\x65\x73\x75\x6c\x74\x29\x3b\0\x70\x6f\x73\x74\x5f\x70\x61\x72\x73\x65\x5f\x70\ -\x65\0\x66\x65\x6e\x74\x72\x79\x2f\x62\x70\x66\x5f\x70\x6f\x73\x74\x5f\x68\x61\ -\x6e\x64\x6c\x65\x5f\x70\x65\x66\x69\x6c\x65\0\x69\x6e\x74\x20\x42\x50\x46\x5f\ -\x50\x52\x4f\x47\x28\x70\x6f\x73\x74\x5f\x70\x61\x72\x73\x65\x5f\x70\x65\x2c\ -\x20\x63\x68\x61\x72\x20\x2a\x69\x6d\x61\x67\x65\x5f\x62\x75\x66\x2c\x20\x69\ -\x6e\x74\x20\x62\x75\x66\x5f\x73\x7a\x29\0\x63\x68\x61\x72\0\x4c\x49\x43\x45\ -\x4e\x53\x45\0\x5f\x5f\x5f\x5f\x70\x61\x72\x73\x65\x5f\x70\x65\x2e\x5f\x5f\x5f\ -\x5f\x66\x6d\x74\0\x5f\x5f\x5f\x5f\x70\x61\x72\x73\x65\x5f\x70\x65\x2e\x5f\x5f\ -\x5f\x5f\x66\x6d\x74\x2e\x31\0\x5f\x5f\x5f\x5f\x70\x61\x72\x73\x65\x5f\x70\x65\ -\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x32\0\x5f\x5f\x5f\x5f\x70\x61\x72\x73\x65\ -\x5f\x70\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x33\0\x5f\x5f\x5f\x5f\x70\x61\ -\x72\x73\x65\x5f\x70\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x34\0\x5f\x5f\x5f\ -\x5f\x70\x61\x72\x73\x65\x5f\x70\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x35\0\ -\x5f\x5f\x5f\x5f\x70\x61\x72\x73\x65\x5f\x70\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\ -\x74\x2e\x36\0\x5f\x5f\x5f\x5f\x70\x61\x72\x73\x65\x5f\x70\x65\x2e\x5f\x5f\x5f\ -\x5f\x66\x6d\x74\x2e\x37\0\x5f\x5f\x5f\x5f\x70\x61\x72\x73\x65\x5f\x70\x65\x2e\ -\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x38\0\x5f\x5f\x5f\x5f\x70\x61\x72\x73\x65\x5f\ -\x70\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x39\0\x5f\x5f\x5f\x5f\x70\x61\x72\ -\x73\x65\x5f\x70\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x31\x30\0\x2e\x6d\x61\ -\x70\x73\0\x2e\x72\x6f\x64\x61\x74\x61\0\x6c\x69\x63\x65\x6e\x73\x65\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xfd\x0f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1b\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\0\0\0\0\0\x72\x69\x6e\x67\x62\x75\x66\ -\x5f\x31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\x1b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\0\0\0\0\0\x72\x69\x6e\x67\ -\x62\x75\x66\x5f\x32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\x1b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\0\0\0\0\0\x72\ -\x69\x6e\x67\x62\x75\x66\x5f\x33\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\x1b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\0\0\ -\0\0\0\x72\x69\x6e\x67\x62\x75\x66\x5f\x34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x02\0\0\0\x04\0\0\0\x10\0\0\0\x0a\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\x6d\x65\x6d\x5f\x72\x61\x6e\x67\x65\x5f\x6d\x61\x70\0\0\0\ -\0\0\0\0\0\0\0\0\x14\0\0\0\x16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x02\0\0\0\x04\0\0\ -\0\xa5\x01\0\0\x01\0\0\0\x80\0\0\0\0\0\0\0\0\0\0\0\x6b\x65\x78\x65\x63\x5f\x70\ -\x65\x2e\x72\x6f\x64\x61\x74\x61\0\0\0\0\0\0\0\0\0\0\0\0\0\x3e\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\x62\x65\x67\x69\x6e\x20\x70\x61\x72\x73\x65\x20\x50\x45\x0a\0\ -\x45\x72\x72\x3a\x20\x69\x6d\x61\x67\x65\x20\x73\x69\x7a\x65\x20\x69\x73\x20\ -\x67\x72\x65\x61\x74\x65\x72\x20\x74\x68\x61\x6e\x20\x30\x78\x25\x6c\x78\x0a\0\ -\x45\x72\x72\x3a\x20\x66\x61\x69\x6c\x20\x74\x6f\x20\x72\x65\x73\x65\x72\x76\ -\x65\x20\x72\x69\x6e\x67\x62\x75\x66\x20\x74\x6f\x20\x70\x61\x72\x73\x65\x20\ -\x7a\x62\x6f\x6f\x74\x20\x68\x65\x61\x64\x65\x72\x0a\0\x45\x72\x72\x3a\x20\x69\ -\x6d\x61\x67\x65\x20\x69\x73\x20\x6e\x6f\x74\x20\x7a\x62\x6f\x6f\x74\x20\x69\ -\x6d\x61\x67\x65\x0a\0\x49\x6e\x76\x61\x6c\x69\x64\x20\x6f\x66\x66\x73\x65\x74\ -\x20\x66\x6f\x72\x20\x64\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x65\x64\x20\x73\ -\x69\x7a\x65\x0a\0\x70\x61\x79\x6c\x6f\x61\x64\x5f\x6f\x66\x66\x73\x65\x74\x3a\ -\x30\x78\x25\x6c\x78\x2c\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\ -\x3a\x30\x78\x25\x6c\x78\x2c\x20\x64\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x65\ -\x64\x20\x73\x69\x7a\x65\x3a\x30\x78\x25\x6c\x78\x0a\0\x64\x65\x63\x6f\x6d\x70\ -\x72\x65\x73\x73\x65\x64\x20\x73\x69\x7a\x65\x20\x25\x64\x20\x69\x73\x20\x77\ -\x72\x6f\x6e\x67\x0a\0\x45\x72\x72\x3a\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\x6f\ -\x66\x66\x73\x65\x74\x20\x3e\x20\x30\x78\x25\x6c\x78\x0a\0\x45\x72\x72\x3a\x20\ -\x66\x61\x69\x6c\x20\x74\x6f\x20\x72\x65\x73\x65\x72\x76\x65\x20\x66\x72\x6f\ -\x6d\x20\x72\x69\x6e\x67\x62\x75\x66\x5f\x31\x20\x66\x6f\x72\x20\x72\x65\x61\ -\x64\x69\x6e\x67\x20\x70\x61\x79\x6c\x6f\x61\x64\x0a\0\x43\x61\x6c\x6c\x69\x6e\ -\x67\x20\x62\x70\x66\x5f\x6b\x65\x78\x65\x63\x5f\x64\x65\x63\x6f\x6d\x70\x72\ -\x65\x73\x73\x28\x29\x0a\0\x43\x61\x6c\x6c\x69\x6e\x67\x20\x62\x70\x66\x5f\x6b\ -\x65\x78\x65\x63\x5f\x63\x61\x72\x72\x69\x65\x72\x28\x29\x0a\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\x02\0\0\0\x04\0\0\0\x0c\0\0\0\x01\0\0\0\x80\0\0\0\0\0\0\0\0\0\0\0\x2e\ -\x72\x6f\x64\x61\x74\x61\x2e\x73\x74\x72\x31\x2e\x31\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7a\x69\x6d\x67\0\x6b\x65\x72\x6e\x65\x6c\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\x47\x50\x4c\0\0\0\0\0\x79\x18\x08\0\0\0\0\0\x79\x16\ -\0\0\0\0\0\0\xb7\x01\0\0\0\0\0\0\x63\x1a\xf8\xff\0\0\0\0\x18\x61\0\0\x05\0\0\0\ -\0\0\0\0\0\0\0\0\xb7\x02\0\0\x10\0\0\0\x85\0\0\0\x06\0\0\0\x15\x06\x05\0\0\0\0\ -\0\xbf\x81\0\0\0\0\0\0\x67\x01\0\0\x20\0\0\0\x77\x01\0\0\x20\0\0\0\xb7\x02\0\0\ -\x01\0\0\x08\x2d\x12\x06\0\0\0\0\0\x18\x61\0\0\x05\0\0\0\0\0\0\0\x10\0\0\0\xb7\ -\x02\0\0\x27\0\0\0\xb7\x03\0\0\0\0\0\x08\x85\0\0\0\x06\0\0\0\x05\0\xa5\0\0\0\0\ -\0\x18\x51\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x24\0\0\0\xb7\x03\0\0\0\0\0\ -\0\x85\0\0\0\x83\0\0\0\xbf\x09\0\0\0\0\0\0\x55\x09\x05\0\0\0\0\0\x18\x61\0\0\ -\x05\0\0\0\0\0\0\0\x37\0\0\0\xb7\x02\0\0\x34\0\0\0\x85\0\0\0\x06\0\0\0\x05\0\ -\x99\0\0\0\0\0\xbf\x91\0\0\0\0\0\0\xb7\x02\0\0\x24\0\0\0\xbf\x63\0\0\0\0\0\0\ -\x85\0\0\0\x04\0\0\0\x71\x91\x05\0\0\0\0\0\x67\x01\0\0\x08\0\0\0\x71\x92\x04\0\ -\0\0\0\0\x4f\x21\0\0\0\0\0\0\x71\x92\x06\0\0\0\0\0\x67\x02\0\0\x10\0\0\0\x71\ -\x93\x07\0\0\0\0\0\x67\x03\0\0\x18\0\0\0\x4f\x23\0\0\0\0\0\0\x4f\x13\0\0\0\0\0\ -\0\x15\x03\x08\0\x7a\x69\x6d\x67\x18\x61\0\0\x05\0\0\0\0\0\0\0\x6b\0\0\0\xb7\ -\x02\0\0\x1f\0\0\0\x85\0\0\0\x06\0\0\0\xbf\x91\0\0\0\0\0\0\xb7\x02\0\0\x01\0\0\ -\0\x85\0\0\0\x85\0\0\0\x05\0\x82\0\0\0\0\0\x7b\x6a\xe0\xff\0\0\0\0\x71\x97\x0f\ -\0\0\0\0\0\x71\x91\x0e\0\0\0\0\0\x7b\x1a\xf0\xff\0\0\0\0\x71\x91\x0c\0\0\0\0\0\ -\x7b\x1a\xe8\xff\0\0\0\0\x71\x96\x0d\0\0\0\0\0\x71\x91\x0b\0\0\0\0\0\x7b\x1a\ -\xd8\xff\0\0\0\0\x71\x91\x0a\0\0\0\0\0\x7b\x1a\xc8\xff\0\0\0\0\x71\x91\x08\0\0\ -\0\0\0\x7b\x1a\xc0\xff\0\0\0\0\x71\x91\x09\0\0\0\0\0\x7b\x1a\xd0\xff\0\0\0\0\ -\xbf\x91\0\0\0\0\0\0\xb7\x02\0\0\x01\0\0\0\x85\0\0\0\x85\0\0\0\x67\x06\0\0\x08\ -\0\0\0\x79\xa1\xe8\xff\0\0\0\0\x4f\x16\0\0\0\0\0\0\x79\xa1\xf0\xff\0\0\0\0\x67\ -\x01\0\0\x10\0\0\0\x67\x07\0\0\x18\0\0\0\x4f\x17\0\0\0\0\0\0\x4f\x67\0\0\0\0\0\ -\0\x57\x08\0\0\xff\xff\xff\x07\x2d\x87\x07\0\0\0\0\0\xbf\x79\0\0\0\0\0\0\x67\ -\x09\0\0\x20\0\0\0\x18\x01\0\0\0\0\0\0\0\0\0\0\xfc\xff\xff\xff\x0f\x19\0\0\0\0\ -\0\0\xc7\x09\0\0\x20\0\0\0\x65\x09\x05\0\0\0\0\0\x18\x61\0\0\x05\0\0\0\0\0\0\0\ -\x8a\0\0\0\xb7\x02\0\0\x26\0\0\0\x85\0\0\0\x06\0\0\0\x05\0\x5a\0\0\0\0\0\x79\ -\xa1\xd0\xff\0\0\0\0\x67\x01\0\0\x08\0\0\0\x79\xa2\xc0\xff\0\0\0\0\x4f\x21\0\0\ -\0\0\0\0\x79\xa2\xc8\xff\0\0\0\0\x67\x02\0\0\x10\0\0\0\x79\xa8\xd8\xff\0\0\0\0\ -\x67\x08\0\0\x18\0\0\0\x4f\x28\0\0\0\0\0\0\x4f\x18\0\0\0\0\0\0\xbf\x91\0\0\0\0\ -\0\0\x0f\x81\0\0\0\0\0\0\x57\x01\0\0\xff\xff\xff\x07\x79\xa6\xe0\xff\0\0\0\0\ -\xbf\x63\0\0\0\0\0\0\x0f\x13\0\0\0\0\0\0\xbf\xa1\0\0\0\0\0\0\x07\x01\0\0\xfc\ -\xff\xff\xff\xb7\x02\0\0\x04\0\0\0\x85\0\0\0\x04\0\0\0\x61\xa5\xfc\xff\0\0\0\0\ -\x18\x61\0\0\x05\0\0\0\0\0\0\0\xb0\0\0\0\xb7\x02\0\0\x43\0\0\0\xbf\x83\0\0\0\0\ -\0\0\xbf\x74\0\0\0\0\0\0\x85\0\0\0\x06\0\0\0\x61\xa1\xfc\xff\0\0\0\0\x55\x01\ -\x06\0\0\0\0\0\x18\x61\0\0\x05\0\0\0\0\0\0\0\xf3\0\0\0\xb7\x02\0\0\x1f\0\0\0\ -\xb7\x03\0\0\0\0\0\0\x85\0\0\0\x06\0\0\0\x05\0\x37\0\0\0\0\0\xb7\x01\0\0\0\0\0\ -\x08\x2d\x81\x04\0\0\0\0\0\x18\x61\0\0\x05\0\0\0\0\0\0\0\x12\x01\0\0\xb7\x02\0\ -\0\x1d\0\0\0\x05\0\x89\xff\0\0\0\0\x18\x51\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\ -\0\0\0\0\0\x08\xb7\x03\0\0\0\0\0\0\x85\0\0\0\x83\0\0\0\x55\0\x05\0\0\0\0\0\x18\ -\x61\0\0\x05\0\0\0\0\0\0\0\x2f\x01\0\0\xb7\x02\0\0\x39\0\0\0\x85\0\0\0\x06\0\0\ -\0\x05\0\x26\0\0\0\0\0\x0f\x86\0\0\0\0\0\0\xbf\x08\0\0\0\0\0\0\xbf\x81\0\0\0\0\ -\0\0\xbf\x72\0\0\0\0\0\0\xbf\x63\0\0\0\0\0\0\x85\0\0\0\x04\0\0\0\x18\x61\0\0\ -\x05\0\0\0\0\0\0\0\x68\x01\0\0\xb7\x02\0\0\x20\0\0\0\x85\0\0\0\x06\0\0\0\x61\ -\xa3\xfc\xff\0\0\0\0\xbf\xa6\0\0\0\0\0\0\x07\x06\0\0\xf8\xff\xff\xff\xbf\x81\0\ -\0\0\0\0\0\xbf\x92\0\0\0\0\0\0\x18\x54\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\xbf\x65\0\ -\0\0\0\0\0\x85\0\0\0\xd4\0\0\0\xbf\x81\0\0\0\0\0\0\xb7\x02\0\0\x01\0\0\0\x85\0\ -\0\0\x85\0\0\0\x18\x51\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\xbf\x62\0\0\0\0\0\0\x85\0\ -\0\0\x01\0\0\0\xbf\x06\0\0\0\0\0\0\x15\x06\x0a\0\0\0\0\0\x18\x61\0\0\x05\0\0\0\ -\0\0\0\0\x88\x01\0\0\xb7\x02\0\0\x1d\0\0\0\x85\0\0\0\x06\0\0\0\x18\x61\0\0\x06\ -\0\0\0\0\0\0\0\x05\0\0\0\x18\x52\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\xbf\x63\0\0\0\0\ -\0\0\x85\0\0\0\xd5\0\0\0\xb7\0\0\0\0\0\0\0\x95\0\0\0\0\0\0\0\0\0\0\0\x20\0\0\0\ -\0\0\0\0\xe4\0\0\0\x0a\x01\0\0\x05\x50\x01\0\x03\0\0\0\xe4\0\0\0\x5e\x01\0\0\ -\x0f\x74\x01\0\x04\0\0\0\xe4\0\0\0\x75\x01\0\0\x02\x7c\x01\0\x08\0\0\0\xe4\0\0\ -\0\x96\x01\0\0\x11\x84\x01\0\x0e\0\0\0\xe4\0\0\0\xc9\x01\0\0\x03\x88\x01\0\x13\ -\0\0\0\xe4\0\0\0\x13\x02\0\0\x03\x20\x02\0\x14\0\0\0\xe4\0\0\0\x1f\x02\0\0\x10\ -\x9c\x01\0\x1a\0\0\0\xe4\0\0\0\x78\x02\0\0\x06\xa0\x01\0\x1b\0\0\0\xe4\0\0\0\ -\x85\x02\0\0\x07\xa4\x01\0\x1f\0\0\0\xe4\0\0\0\x13\x02\0\0\x03\x4c\x02\0\x20\0\ -\0\0\xe4\0\0\0\xcf\x02\0\0\x02\xb8\x01\0\x24\0\0\0\xe4\0\0\0\x1e\x03\0\0\x08\ -\xc0\x01\0\x2e\0\0\0\xe4\0\0\0\x1e\x03\0\0\x06\xc0\x01\0\x2f\0\0\0\xe4\0\0\0\ -\x59\x03\0\0\x07\xc8\x01\0\x33\0\0\0\xe4\0\0\0\x8e\x03\0\0\x03\xcc\x01\0\x36\0\ -\0\0\xe4\0\0\0\x13\x02\0\0\x03\xd0\x01\0\x38\0\0\0\xe4\0\0\0\xbc\x03\0\0\x2c\ -\xe0\x01\0\x3e\0\0\0\xe4\0\0\0\xf5\x03\0\0\x2e\xdc\x01\0\x45\0\0\0\xe4\0\0\0\ -\x32\x04\0\0\x02\xe4\x01\0\x49\0\0\0\xe4\0\0\0\xbc\x03\0\0\x2c\xe0\x01\0\x51\0\ -\0\0\xe4\0\0\0\x5f\x04\0\0\x16\xb4\x01\0\x52\0\0\0\xe4\0\0\0\x8d\x04\0\0\x17\ -\xec\x01\0\x5a\0\0\0\xe4\0\0\0\xc4\x04\0\0\x03\xf0\x01\0\x5e\0\0\0\xe4\0\0\0\ -\x13\x02\0\0\x03\x4c\x02\0\x69\0\0\0\xe4\0\0\0\xfc\x04\0\0\x27\0\x02\0\x6b\0\0\ -\0\xe4\0\0\0\xfc\x04\0\0\x36\0\x02\0\x6d\0\0\0\xe4\0\0\0\x4a\x05\0\0\x42\x08\ -\x02\0\x71\0\0\0\xe4\0\0\0\x4a\x05\0\0\x02\x08\x02\0\x73\0\0\0\xe4\0\0\0\x95\ -\x05\0\0\x02\x10\x02\0\x7a\0\0\0\xe4\0\0\0\xe8\x05\0\0\x06\x18\x02\0\x7b\0\0\0\ -\xe4\0\0\0\xe8\x05\0\0\x06\x18\x02\0\x7c\0\0\0\xe4\0\0\0\x05\x06\0\0\x07\x1c\ -\x02\0\x81\0\0\0\xe4\0\0\0\x13\x02\0\0\x03\x20\x02\0\x83\0\0\0\xe4\0\0\0\x4b\ -\x06\0\0\x06\x30\x02\0\x84\0\0\0\xe4\0\0\0\x76\x06\0\0\x03\x34\x02\0\x88\0\0\0\ -\xe4\0\0\0\xb6\x06\0\0\x10\x40\x02\0\x8d\0\0\0\xe4\0\0\0\x78\x02\0\0\x06\x44\ -\x02\0\x8e\0\0\0\xe4\0\0\0\xfa\x06\0\0\x03\x48\x02\0\x92\0\0\0\xe4\0\0\0\x13\ -\x02\0\0\x03\x4c\x02\0\x93\0\0\0\xe4\0\0\0\x45\x07\0\0\x36\x54\x02\0\x95\0\0\0\ -\xe4\0\0\0\x45\x07\0\0\x02\x54\x02\0\x99\0\0\0\xe4\0\0\0\x8d\x07\0\0\x02\x5c\ -\x02\0\x9d\0\0\0\xe4\0\0\0\xbe\x07\0\0\x02\x60\x02\0\xa6\0\0\0\xe4\0\0\0\x32\ -\x04\0\0\x02\x64\x02\0\xa9\0\0\0\xe4\0\0\0\x0c\x08\0\0\x0b\x70\x02\0\xae\0\0\0\ -\xe4\0\0\0\x41\x08\0\0\x06\x74\x02\0\xaf\0\0\0\xe4\0\0\0\x52\x08\0\0\x03\x78\ -\x02\0\xb3\0\0\0\xe4\0\0\0\x81\x08\0\0\x03\x7c\x02\0\xb9\0\0\0\xe4\0\0\0\x0a\ -\x01\0\0\x05\x50\x01\0\x1a\0\0\0\xbb\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x70\x61\x72\x73\x65\x5f\x70\x65\0\ -\0\0\0\0\0\0\0\0\0\0\0\x18\0\0\0\0\0\0\0\x08\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\ -\x10\0\0\0\0\0\0\0\0\0\0\0\x31\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\x62\x70\x66\x5f\x68\x61\x6e\x64\x6c\x65\x5f\ -\x70\x65\x66\x69\x6c\x65\0\0\0\0\0\0\0\x47\x50\x4c\0\0\0\0\0\xb7\0\0\0\0\0\0\0\ -\x95\0\0\0\0\0\0\0\0\0\0\0\x22\0\0\0\0\0\0\0\xe4\0\0\0\xf1\x08\0\0\x05\x94\x02\ -\0\x1a\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\x70\x6f\x73\x74\x5f\x70\x61\x72\x73\x65\x5f\x70\x65\0\ -\0\0\0\0\0\0\x18\0\0\0\0\0\0\0\x08\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\x10\0\0\0\0\ -\0\0\0\0\0\0\0\x01\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\x10\0\0\0\0\0\0\0\x62\x70\x66\x5f\x70\x6f\x73\x74\x5f\x68\x61\x6e\x64\x6c\ -\x65\x5f\x70\x65\x66\x69\x6c\x65\0\0"; - static const char opts_insn[] __attribute__((__aligned__(8))) = "\ -\xbf\x16\0\0\0\0\0\0\xbf\xa1\0\0\0\0\0\0\x07\x01\0\0\x78\xff\xff\xff\xb7\x02\0\ -\0\x88\0\0\0\xb7\x03\0\0\0\0\0\0\x85\0\0\0\x71\0\0\0\x05\0\x38\0\0\0\0\0\x61\ -\xa1\x78\xff\0\0\0\0\xd5\x01\x01\0\0\0\0\0\x85\0\0\0\xa8\0\0\0\x61\xa1\x7c\xff\ -\0\0\0\0\xd5\x01\x01\0\0\0\0\0\x85\0\0\0\xa8\0\0\0\x61\xa1\x80\xff\0\0\0\0\xd5\ -\x01\x01\0\0\0\0\0\x85\0\0\0\xa8\0\0\0\x61\xa1\x84\xff\0\0\0\0\xd5\x01\x01\0\0\ -\0\0\0\x85\0\0\0\xa8\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x61\x01\0\0\0\0\ -\0\0\xd5\x01\x02\0\0\0\0\0\xbf\x19\0\0\0\0\0\0\x85\0\0\0\xa8\0\0\0\x18\x60\0\0\ -\0\0\0\0\0\0\0\0\x04\0\0\0\x61\x01\0\0\0\0\0\0\xd5\x01\x02\0\0\0\0\0\xbf\x19\0\ -\0\0\0\0\0\x85\0\0\0\xa8\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\x08\0\0\0\x61\x01\0\ -\0\0\0\0\0\xd5\x01\x02\0\0\0\0\0\xbf\x19\0\0\0\0\0\0\x85\0\0\0\xa8\0\0\0\x18\ -\x60\0\0\0\0\0\0\0\0\0\0\x0c\0\0\0\x61\x01\0\0\0\0\0\0\xd5\x01\x02\0\0\0\0\0\ -\xbf\x19\0\0\0\0\0\0\x85\0\0\0\xa8\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\x10\0\0\0\ -\x61\x01\0\0\0\0\0\0\xd5\x01\x02\0\0\0\0\0\xbf\x19\0\0\0\0\0\0\x85\0\0\0\xa8\0\ -\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\x14\0\0\0\x61\x01\0\0\0\0\0\0\xd5\x01\x02\0\0\ -\0\0\0\xbf\x19\0\0\0\0\0\0\x85\0\0\0\xa8\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\x18\ -\0\0\0\x61\x01\0\0\0\0\0\0\xd5\x01\x02\0\0\0\0\0\xbf\x19\0\0\0\0\0\0\x85\0\0\0\ -\xa8\0\0\0\xbf\x70\0\0\0\0\0\0\x95\0\0\0\0\0\0\0\x61\x60\x08\0\0\0\0\0\x18\x61\ -\0\0\0\0\0\0\0\0\0\0\x18\x15\0\0\x63\x01\0\0\0\0\0\0\x61\x60\x0c\0\0\0\0\0\x18\ -\x61\0\0\0\0\0\0\0\0\0\0\x14\x15\0\0\x63\x01\0\0\0\0\0\0\x79\x60\x10\0\0\0\0\0\ -\x18\x61\0\0\0\0\0\0\0\0\0\0\x08\x15\0\0\x7b\x01\0\0\0\0\0\0\x18\x60\0\0\0\0\0\ -\0\0\0\0\0\0\x05\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\0\x15\0\0\x7b\x01\0\0\0\0\0\0\ -\xb7\x01\0\0\x12\0\0\0\x18\x62\0\0\0\0\0\0\0\0\0\0\0\x15\0\0\xb7\x03\0\0\x1c\0\ -\0\0\x85\0\0\0\xa6\0\0\0\xbf\x07\0\0\0\0\0\0\xc5\x07\xb0\xff\0\0\0\0\x63\x7a\ -\x78\xff\0\0\0\0\x61\x60\x1c\0\0\0\0\0\x15\0\x03\0\0\0\0\0\x18\x61\0\0\0\0\0\0\ -\0\0\0\0\x2c\x15\0\0\x63\x01\0\0\0\0\0\0\xb7\x01\0\0\0\0\0\0\x18\x62\0\0\0\0\0\ -\0\0\0\0\0\x20\x15\0\0\xb7\x03\0\0\x48\0\0\0\x85\0\0\0\xa6\0\0\0\xbf\x07\0\0\0\ -\0\0\0\xc5\x07\xa3\xff\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x63\x71\0\0\ -\0\0\0\0\x61\x60\x2c\0\0\0\0\0\x15\0\x03\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\ -\x74\x15\0\0\x63\x01\0\0\0\0\0\0\xb7\x01\0\0\0\0\0\0\x18\x62\0\0\0\0\0\0\0\0\0\ -\0\x68\x15\0\0\xb7\x03\0\0\x48\0\0\0\x85\0\0\0\xa6\0\0\0\xbf\x07\0\0\0\0\0\0\ -\xc5\x07\x94\xff\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\x63\x71\0\0\0\0\ -\0\0\x61\x60\x3c\0\0\0\0\0\x15\0\x03\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\xbc\ -\x15\0\0\x63\x01\0\0\0\0\0\0\xb7\x01\0\0\0\0\0\0\x18\x62\0\0\0\0\0\0\0\0\0\0\ -\xb0\x15\0\0\xb7\x03\0\0\x48\0\0\0\x85\0\0\0\xa6\0\0\0\xbf\x07\0\0\0\0\0\0\xc5\ -\x07\x85\xff\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x08\0\0\0\x63\x71\0\0\0\0\0\0\ -\x61\x60\x4c\0\0\0\0\0\x15\0\x03\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x04\x16\ -\0\0\x63\x01\0\0\0\0\0\0\xb7\x01\0\0\0\0\0\0\x18\x62\0\0\0\0\0\0\0\0\0\0\xf8\ -\x15\0\0\xb7\x03\0\0\x48\0\0\0\x85\0\0\0\xa6\0\0\0\xbf\x07\0\0\0\0\0\0\xc5\x07\ -\x76\xff\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x0c\0\0\0\x63\x71\0\0\0\0\0\0\x61\ -\xa0\x78\xff\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x70\x16\0\0\x63\x01\0\0\0\0\0\ -\0\x61\x60\x5c\0\0\0\0\0\x15\0\x03\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x4c\ -\x16\0\0\x63\x01\0\0\0\0\0\0\xb7\x01\0\0\0\0\0\0\x18\x62\0\0\0\0\0\0\0\0\0\0\ -\x40\x16\0\0\xb7\x03\0\0\x48\0\0\0\x85\0\0\0\xa6\0\0\0\xbf\x07\0\0\0\0\0\0\xc5\ -\x07\x63\xff\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x10\0\0\0\x63\x71\0\0\0\0\0\0\ -\x61\xa0\x78\xff\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\xb8\x16\0\0\x63\x01\0\0\0\ -\0\0\0\x61\x60\x6c\0\0\0\0\0\x15\0\x03\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\ -\x94\x16\0\0\x63\x01\0\0\0\0\0\0\xb7\x01\0\0\0\0\0\0\x18\x62\0\0\0\0\0\0\0\0\0\ -\0\x88\x16\0\0\xb7\x03\0\0\x48\0\0\0\x85\0\0\0\xa6\0\0\0\xbf\x07\0\0\0\0\0\0\ -\xc5\x07\x50\xff\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\x71\0\0\0\0\ -\0\0\x79\x63\x70\0\0\0\0\0\x15\x03\x08\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\ -\xd0\x16\0\0\xb7\x02\0\0\xa5\x01\0\0\x61\x60\x04\0\0\0\0\0\x45\0\x02\0\x01\0\0\ -\0\x85\0\0\0\x94\0\0\0\x05\0\x01\0\0\0\0\0\x85\0\0\0\x71\0\0\0\x18\x62\0\0\0\0\ -\0\0\0\0\0\0\x14\0\0\0\x61\x20\0\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x80\x18\ -\0\0\x63\x01\0\0\0\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\x78\x18\0\0\x18\x61\0\0\0\ -\0\0\0\0\0\0\0\x88\x18\0\0\x7b\x01\0\0\0\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\xd0\ -\x16\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x90\x18\0\0\x7b\x01\0\0\0\0\0\0\xb7\x01\0\ -\0\x02\0\0\0\x18\x62\0\0\0\0\0\0\0\0\0\0\x80\x18\0\0\xb7\x03\0\0\x20\0\0\0\x85\ -\0\0\0\xa6\0\0\0\xbf\x07\0\0\0\0\0\0\xc5\x07\x2c\xff\0\0\0\0\x18\x62\0\0\0\0\0\ -\0\0\0\0\0\x14\0\0\0\x61\x20\0\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\xa0\x18\0\ -\0\x63\x01\0\0\0\0\0\0\xb7\x01\0\0\x16\0\0\0\x18\x62\0\0\0\0\0\0\0\0\0\0\xa0\ -\x18\0\0\xb7\x03\0\0\x04\0\0\0\x85\0\0\0\xa6\0\0\0\xbf\x07\0\0\0\0\0\0\xc5\x07\ -\x1f\xff\0\0\0\0\x61\x60\x7c\0\0\0\0\0\x15\0\x03\0\0\0\0\0\x18\x61\0\0\0\0\0\0\ -\0\0\0\0\xb4\x18\0\0\x63\x01\0\0\0\0\0\0\xb7\x01\0\0\0\0\0\0\x18\x62\0\0\0\0\0\ -\0\0\0\0\0\xa8\x18\0\0\xb7\x03\0\0\x48\0\0\0\x85\0\0\0\xa6\0\0\0\xbf\x07\0\0\0\ -\0\0\0\xc5\x07\x13\xff\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x18\0\0\0\x63\x71\0\ -\0\0\0\0\0\x79\x63\x80\0\0\0\0\0\x15\x03\x08\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\ -\0\0\xf0\x18\0\0\xb7\x02\0\0\x0c\0\0\0\x61\x60\x04\0\0\0\0\0\x45\0\x02\0\x01\0\ -\0\0\x85\0\0\0\x94\0\0\0\x05\0\x01\0\0\0\0\0\x85\0\0\0\x71\0\0\0\x18\x62\0\0\0\ -\0\0\0\0\0\0\0\x18\0\0\0\x61\x20\0\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x08\ -\x19\0\0\x63\x01\0\0\0\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\0\x19\0\0\x18\x61\0\0\ -\0\0\0\0\0\0\0\0\x10\x19\0\0\x7b\x01\0\0\0\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\ -\xf0\x18\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x18\x19\0\0\x7b\x01\0\0\0\0\0\0\xb7\ -\x01\0\0\x02\0\0\0\x18\x62\0\0\0\0\0\0\0\0\0\0\x08\x19\0\0\xb7\x03\0\0\x20\0\0\ -\0\x85\0\0\0\xa6\0\0\0\xbf\x07\0\0\0\0\0\0\xc5\x07\xef\xfe\0\0\0\0\x18\x62\0\0\ -\0\0\0\0\0\0\0\0\x18\0\0\0\x61\x20\0\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x28\ -\x19\0\0\x63\x01\0\0\0\0\0\0\xb7\x01\0\0\x16\0\0\0\x18\x62\0\0\0\0\0\0\0\0\0\0\ -\x28\x19\0\0\xb7\x03\0\0\x04\0\0\0\x85\0\0\0\xa6\0\0\0\xbf\x07\0\0\0\0\0\0\xc5\ -\x07\xe2\xfe\0\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\x30\x19\0\0\x18\x61\0\0\0\0\0\ -\0\0\0\0\0\x38\x22\0\0\x7b\x01\0\0\0\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\x38\x19\ -\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x30\x22\0\0\x7b\x01\0\0\0\0\0\0\x18\x60\0\0\0\ -\0\0\0\0\0\0\0\x10\x1f\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x78\x22\0\0\x7b\x01\0\0\ -\0\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\x18\x1f\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\ -\x88\x22\0\0\x7b\x01\0\0\0\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\x28\x22\0\0\x18\ -\x61\0\0\0\0\0\0\0\0\0\0\xa8\x22\0\0\x7b\x01\0\0\0\0\0\0\x18\x60\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\xa0\x22\0\0\x7b\x01\0\0\0\0\0\0\x61\ -\x60\x08\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x40\x22\0\0\x63\x01\0\0\0\0\0\0\ -\x61\x60\x0c\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x44\x22\0\0\x63\x01\0\0\0\0\ -\0\0\x79\x60\x10\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x48\x22\0\0\x7b\x01\0\0\ -\0\0\0\0\x61\xa0\x78\xff\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x70\x22\0\0\x63\ -\x01\0\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\xb8\x22\0\0\xb7\x02\0\0\x12\0\0\0\ -\xb7\x03\0\0\x0c\0\0\0\xb7\x04\0\0\0\0\0\0\x85\0\0\0\xa7\0\0\0\xbf\x07\0\0\0\0\ -\0\0\xc5\x07\xac\xfe\0\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\x28\x22\0\0\x63\x70\ -\x6c\0\0\0\0\0\x77\x07\0\0\x20\0\0\0\x63\x70\x70\0\0\0\0\0\xb7\x01\0\0\x05\0\0\ -\0\x18\x62\0\0\0\0\0\0\0\0\0\0\x28\x22\0\0\xb7\x03\0\0\x8c\0\0\0\x85\0\0\0\xa6\ -\0\0\0\xbf\x07\0\0\0\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\x98\x22\0\0\x61\x01\0\0\ -\0\0\0\0\xd5\x01\x02\0\0\0\0\0\xbf\x19\0\0\0\0\0\0\x85\0\0\0\xa8\0\0\0\xc5\x07\ -\x9a\xfe\0\0\0\0\x63\x7a\x80\xff\0\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\xd0\x22\0\ -\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x10\x23\0\0\x7b\x01\0\0\0\0\0\0\x18\x60\0\0\0\0\ -\0\0\0\0\0\0\xd8\x22\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x08\x23\0\0\x7b\x01\0\0\0\ -\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\xe8\x22\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x50\ -\x23\0\0\x7b\x01\0\0\0\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\xf0\x22\0\0\x18\x61\0\ -\0\0\0\0\0\0\0\0\0\x60\x23\0\0\x7b\x01\0\0\0\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\ -\0\x23\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x80\x23\0\0\x7b\x01\0\0\0\0\0\0\x18\x60\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x78\x23\0\0\x7b\x01\0\ -\0\0\0\0\0\x61\x60\x08\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x18\x23\0\0\x63\ -\x01\0\0\0\0\0\0\x61\x60\x0c\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x1c\x23\0\0\ -\x63\x01\0\0\0\0\0\0\x79\x60\x10\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x20\x23\ -\0\0\x7b\x01\0\0\0\0\0\0\x61\xa0\x78\xff\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\ -\x48\x23\0\0\x63\x01\0\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x90\x23\0\0\xb7\ -\x02\0\0\x17\0\0\0\xb7\x03\0\0\x0c\0\0\0\xb7\x04\0\0\0\0\0\0\x85\0\0\0\xa7\0\0\ -\0\xbf\x07\0\0\0\0\0\0\xc5\x07\x63\xfe\0\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\0\ -\x23\0\0\x63\x70\x6c\0\0\0\0\0\x77\x07\0\0\x20\0\0\0\x63\x70\x70\0\0\0\0\0\xb7\ -\x01\0\0\x05\0\0\0\x18\x62\0\0\0\0\0\0\0\0\0\0\0\x23\0\0\xb7\x03\0\0\x8c\0\0\0\ -\x85\0\0\0\xa6\0\0\0\xbf\x07\0\0\0\0\0\0\x18\x60\0\0\0\0\0\0\0\0\0\0\x70\x23\0\ -\0\x61\x01\0\0\0\0\0\0\xd5\x01\x02\0\0\0\0\0\xbf\x19\0\0\0\0\0\0\x85\0\0\0\xa8\ -\0\0\0\xc5\x07\x51\xfe\0\0\0\0\x63\x7a\x84\xff\0\0\0\0\x61\xa1\x78\xff\0\0\0\0\ -\xd5\x01\x02\0\0\0\0\0\xbf\x19\0\0\0\0\0\0\x85\0\0\0\xa8\0\0\0\x61\xa0\x80\xff\ -\0\0\0\0\x63\x06\x88\0\0\0\0\0\x61\xa0\x84\xff\0\0\0\0\x63\x06\x8c\0\0\0\0\0\ -\x18\x61\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x61\x10\0\0\0\0\0\0\x63\x06\x18\0\0\0\0\0\ -\x18\x61\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\x61\x10\0\0\0\0\0\0\x63\x06\x28\0\0\0\0\ -\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x08\0\0\0\x61\x10\0\0\0\0\0\0\x63\x06\x38\0\0\0\ -\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x0c\0\0\0\x61\x10\0\0\0\0\0\0\x63\x06\x48\0\0\ -\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x10\0\0\0\x61\x10\0\0\0\0\0\0\x63\x06\x58\0\ -\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x14\0\0\0\x61\x10\0\0\0\0\0\0\x63\x06\x68\ -\0\0\0\0\0\x18\x61\0\0\0\0\0\0\0\0\0\0\x18\0\0\0\x61\x10\0\0\0\0\0\0\x63\x06\ -\x78\0\0\0\0\0\xb7\0\0\0\0\0\0\0\x95\0\0\0\0\0\0\0"; opts.ctx = (struct bpf_loader_ctx *)skel; - opts.data_sz = sizeof(opts_data) - 1; + opts.data_sz = opts_data_sz; opts.data = (void *)opts_data; - opts.insns_sz = sizeof(opts_insn) - 1; + opts.insns_sz = opts_insn_sz; opts.insns = (void *)opts_insn; err = bpf_load_and_run(&opts);