From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.5 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,URIBL_DBL_ABUSE_MALW,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 83FFCC33C9E for ; Thu, 30 Jan 2020 12:47:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2389D206D3 for ; Thu, 30 Jan 2020 12:47:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=armlinux.org.uk header.i=@armlinux.org.uk header.b="TdKIu4x0" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727132AbgA3Mr2 (ORCPT ); Thu, 30 Jan 2020 07:47:28 -0500 Received: from pandora.armlinux.org.uk ([78.32.30.218]:55760 "EHLO pandora.armlinux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726902AbgA3Mr2 (ORCPT ); Thu, 30 Jan 2020 07:47:28 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2019; h=Sender:In-Reply-To: Content-Transfer-Encoding:Content-Type:MIME-Version:References:Message-ID: Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=d++GOLWtqSwAglIpfl/6MRXQSTfPsxh+M4oQnj5hels=; b=TdKIu4x0HJtQMJcRoldQ19Mkv ghPXPnh6Dg4C5PpxojHSPcy0G8FmGGRFJRTkwfNUhoOJ2jSRroL1aqDQtE11mokcuQ5rZ+0cXkYx8 7bFN0r4+lTeBD/S9VmSOS+OcldZp6M1FTJ8AC6u1XcldFj0hZdYkXSgc1VEfy7TSOMnaCeCtsjlEv bkbpq4emqO3qStzTVc6iZINZATBZ41VWEWaSXcpmt0bCbnGoSa2t4rIPr4WnGcZgpCKJfsla+P1w+ N+vKl5UhPPtoAycwh9p8ebS2u0QCfR/34wlDyWh7ZaNRiQ7BPTDRQsIGVwLLru/FrI+mkY35tsPNF 94FA7KHiw==; Received: from shell.armlinux.org.uk ([2001:4d48:ad52:3201:5054:ff:fe00:4ec]:33668) by pandora.armlinux.org.uk with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ix9EB-0003FY-U6; Thu, 30 Jan 2020 12:47:24 +0000 Received: from linux by shell.armlinux.org.uk with local (Exim 4.92) (envelope-from ) id 1ix9EA-0004Om-L8; Thu, 30 Jan 2020 12:47:22 +0000 Date: Thu, 30 Jan 2020 12:47:22 +0000 From: Russell King - ARM Linux admin To: =?utf-8?Q?=C5=81ukasz?= Stelmach Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org Subject: Re: [RFC PATCH 1/4] scripts/dtc: update fdtget.c to upstream version v1.4.7-57-gf267e674d145 Message-ID: <20200130124722.GJ25745@shell.armlinux.org.uk> References: <20200130123934.3900-1-l.stelmach@samsung.com> <20200130124233.4006-1-l.stelmach@samsung.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20200130124233.4006-1-l.stelmach@samsung.com> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org On Thu, Jan 30, 2020 at 01:42:30PM +0100, Łukasz Stelmach wrote: > Build and fdtget and add fdtget.c to the list of update source files. > > Signed-off-by: Łukasz Stelmach > --- > scripts/dtc/.gitignore | 4 + > scripts/dtc/Makefile | 5 ++ > scripts/dtc/fdtget.c | 125 ++++++++++++++++++------------- > scripts/dtc/update-dtc-source.sh | 4 +- > 4 files changed, 82 insertions(+), 56 deletions(-) > > diff --git scripts/dtc/.gitignore scripts/dtc/.gitignore > index 2e6e60d64ede..80f6b50fdf77 100644 > --- scripts/dtc/.gitignore > +++ scripts/dtc/.gitignore > @@ -1 +1,5 @@ > dtc > +dtc-lexer.lex.c > +dtc-parser.tab.c > +dtc-parser.tab.h > +fdtget > diff --git scripts/dtc/Makefile scripts/dtc/Makefile > index b5a5b1c548c9..74322d8dac25 100644 > --- scripts/dtc/Makefile > +++ scripts/dtc/Makefile > @@ -2,12 +2,15 @@ > # scripts/dtc makefile > > hostprogs-$(CONFIG_DTC) := dtc > +hostprogs-$(CONFIG_DTC) += fdtget > always := $(hostprogs-y) > > dtc-objs := dtc.o flattree.o fstree.o data.o livetree.o treesource.o \ > srcpos.o checks.o util.o > dtc-objs += dtc-lexer.lex.o dtc-parser.tab.o > > +fdtget-objs := fdtget.o util.o > + > # Source files need to get at the userspace version of libfdt_env.h to compile > HOST_EXTRACFLAGS := -I $(srctree)/$(src)/libfdt > > @@ -26,5 +29,7 @@ endif > HOSTCFLAGS_dtc-lexer.lex.o := -I $(srctree)/$(src) > HOSTCFLAGS_dtc-parser.tab.o := -I $(srctree)/$(src) > > +HOSTLDLIBS_fdtget := -L$(obj)/libfdt -lfdt -Wl,-rpath='$$ORIGIN/libfdt' > + > # dependencies on generated files need to be listed explicitly > $(obj)/dtc-lexer.lex.o: $(obj)/dtc-parser.tab.h > diff --git scripts/dtc/fdtget.c scripts/dtc/fdtget.c > index c922f82246c6..777582e2d45f 100644 > --- scripts/dtc/fdtget.c > +++ scripts/dtc/fdtget.c > @@ -39,6 +39,37 @@ static void report_error(const char *where, int err) > fprintf(stderr, "Error at '%s': %s\n", where, fdt_strerror(err)); > } > > +/** > + * Shows a list of cells in the requested format > + * > + * @param disp Display information / options > + * @param data Data to display > + * @param len Maximum length of buffer > + * @param size Data size to use for display (e.g. 4 for 32-bit) > + * @return 0 if ok, -1 on error > + */ > +static int show_cell_list(struct display_info *disp, const char *data, int len, > + int size) > +{ > + const uint8_t *p = (const uint8_t *)data; > + char fmt[3]; > + int value; > + int i; > + > + fmt[0] = '%'; > + fmt[1] = disp->type ? disp->type : 'd'; > + fmt[2] = '\0'; > + for (i = 0; i < len; i += size, p += size) { > + if (i) > + printf(" "); > + value = size == 4 ? fdt32_ld((const fdt32_t *)p) : > + size == 2 ? (*p << 8) | p[1] : *p; > + printf(fmt, value); > + } > + > + return 0; > +} > + > /** > * Displays data of a given length according to selected options > * > @@ -52,12 +83,9 @@ static void report_error(const char *where, int err) > */ > static int show_data(struct display_info *disp, const char *data, int len) > { > - int i, size; > - const uint8_t *p = (const uint8_t *)data; > + int size; > const char *s; > - int value; > int is_string; > - char fmt[3]; > > /* no data, don't print */ > if (len == 0) > @@ -85,17 +113,8 @@ static int show_data(struct display_info *disp, const char *data, int len) > "selected data size\n"); > return -1; > } > - fmt[0] = '%'; > - fmt[1] = disp->type ? disp->type : 'd'; > - fmt[2] = '\0'; > - for (i = 0; i < len; i += size, p += size) { > - if (i) > - printf(" "); > - value = size == 4 ? fdt32_to_cpu(*(const uint32_t *)p) : > - size == 2 ? (*p << 8) | p[1] : *p; > - printf(fmt, value); > - } > - return 0; > + > + return show_cell_list(disp, data, len, size); > } > > /** > @@ -107,7 +126,6 @@ static int show_data(struct display_info *disp, const char *data, int len) > */ > static int list_properties(const void *blob, int node) > { > - const struct fdt_property *data; > const char *name; > int prop; > > @@ -116,8 +134,7 @@ static int list_properties(const void *blob, int node) > /* Stop silently when there are no more properties */ > if (prop < 0) > return prop == -FDT_ERR_NOTFOUND ? 0 : prop; > - data = fdt_get_property_by_offset(blob, prop, NULL); > - name = fdt_string(blob, fdt32_to_cpu(data->nameoff)); > + fdt_getprop_by_offset(blob, prop, &name, NULL); > if (name) > puts(name); > prop = fdt_next_property_offset(blob, prop); > @@ -231,7 +248,7 @@ static int show_data_for_item(const void *blob, struct display_info *disp, > * @param filename Filename of blob file > * @param arg List of arguments to process > * @param arg_count Number of arguments > - * @param return 0 if ok, -ve on error > + * @return 0 if ok, -ve on error > */ > static int do_fdtget(struct display_info *disp, const char *filename, > char **arg, int arg_count, int args_per_step) > @@ -240,7 +257,7 @@ static int do_fdtget(struct display_info *disp, const char *filename, > const char *prop; > int i, node; > > - blob = utilfdt_read(filename); > + blob = utilfdt_read(filename, NULL); > if (!blob) > return -1; > > @@ -252,44 +269,50 @@ static int do_fdtget(struct display_info *disp, const char *filename, > continue; > } else { > report_error(arg[i], node); > + free(blob); > return -1; > } > } > prop = args_per_step == 1 ? NULL : arg[i + 1]; > > - if (show_data_for_item(blob, disp, node, prop)) > + if (show_data_for_item(blob, disp, node, prop)) { > + free(blob); > return -1; > + } > } > + > + free(blob); > + > return 0; > } > > -static const char *usage_msg = > - "fdtget - read values from device tree\n" > - "\n" > - "Each value is printed on a new line.\n\n" > - "Usage:\n" > +/* Usage related data. */ > +static const char usage_synopsis[] = > + "read values from device tree\n" > " fdtget
[ ]...\n" > " fdtget -p
[ ]...\n" > - "Options:\n" > - "\t-t \tType of data\n" > - "\t-p\t\tList properties for each node\n" > - "\t-l\t\tList subnodes for each node\n" > - "\t-d\t\tDefault value to display when the property is " > - "missing\n" > - "\t-h\t\tPrint this help\n\n" > + "\n" > + "Each value is printed on a new line.\n" > USAGE_TYPE_MSG; > - > -static void usage(const char *msg) > -{ > - if (msg) > - fprintf(stderr, "Error: %s\n\n", msg); > - > - fprintf(stderr, "%s", usage_msg); > - exit(2); > -} > +static const char usage_short_opts[] = "t:pld:" USAGE_COMMON_SHORT_OPTS; > +static struct option const usage_long_opts[] = { > + {"type", a_argument, NULL, 't'}, > + {"properties", no_argument, NULL, 'p'}, > + {"list", no_argument, NULL, 'l'}, > + {"default", a_argument, NULL, 'd'}, > + USAGE_COMMON_LONG_OPTS, > +}; > +static const char * const usage_opts_help[] = { > + "Type of data", > + "List properties for each node", > + "List subnodes for each node", > + "Default value to display when the property is missing", > + USAGE_COMMON_OPTS_HELP > +}; > > int main(int argc, char *argv[]) > { > + int opt; > char *filename = NULL; > struct display_info disp; > int args_per_step = 2; > @@ -298,20 +321,14 @@ int main(int argc, char *argv[]) > memset(&disp, '\0', sizeof(disp)); > disp.size = -1; > disp.mode = MODE_SHOW_VALUE; > - for (;;) { > - int c = getopt(argc, argv, "d:hlpt:"); > - if (c == -1) > - break; > - > - switch (c) { > - case 'h': > - case '?': > - usage(NULL); > + while ((opt = util_getopt_long()) != EOF) { > + switch (opt) { > + case_USAGE_COMMON_FLAGS > > case 't': > if (utilfdt_decode_type(optarg, &disp.type, > &disp.size)) > - usage("Invalid type string"); > + usage("invalid type string"); > break; > > case 'p': > @@ -333,7 +350,7 @@ int main(int argc, char *argv[]) > if (optind < argc) > filename = argv[optind++]; > if (!filename) > - usage("Missing filename"); > + usage("missing filename"); > > argv += optind; > argc -= optind; > @@ -344,7 +361,7 @@ int main(int argc, char *argv[]) > > /* Check for node, property arguments */ > if (args_per_step == 2 && (argc % 2)) > - usage("Must have an even number of arguments"); > + usage("must have an even number of arguments"); > > if (do_fdtget(&disp, filename, argv, argc, args_per_step)) > return 1; > diff --git scripts/dtc/update-dtc-source.sh scripts/dtc/update-dtc-source.sh > index 7dd29a0362b8..8db277546785 100755 > --- scripts/dtc/update-dtc-source.sh > +++ scripts/dtc/update-dtc-source.sh > @@ -31,8 +31,8 @@ set -ev > DTC_UPSTREAM_PATH=`pwd`/../dtc > DTC_LINUX_PATH=`pwd`/scripts/dtc > > -DTC_SOURCE="checks.c data.c dtc.c dtc.h flattree.c fstree.c livetree.c srcpos.c \ > - srcpos.h treesource.c util.c util.h version_gen.h yamltree.c Makefile.dtc \ > +DTC_SOURCE="checks.c data.c dtc.c dtc.h fdtget.c flattree.c fstree.c livetree.c > + srcpos.c srcpos.h treesource.c util.c util.h version_gen.h Makefile.dtc \ This looks like you're dropping yamltree.c. Is that intentional? > dtc-lexer.l dtc-parser.y" > LIBFDT_SOURCE="Makefile.libfdt fdt.c fdt.h fdt_addresses.c fdt_empty_tree.c \ > fdt_overlay.c fdt_ro.c fdt_rw.c fdt_strerror.c fdt_sw.c \ > -- > 2.20.1 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up According to speedtest.net: 11.9Mbps down 500kbps up From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_DBL_ABUSE_MALW,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 27C94C33C9E for ; Thu, 30 Jan 2020 12:47:48 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E9CE6206D3 for ; Thu, 30 Jan 2020 12:47:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="dS/KzxiG"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=armlinux.org.uk header.i=@armlinux.org.uk header.b="TdKIu4x0" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E9CE6206D3 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=armlinux.org.uk Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=w2QVHeTLmp1RD7urrCw3HhDrHXgPe15EJeluhdHDLgY=; b=dS/KzxiGs6zWob M0c0HhM8vrLCZU4WKxmPyKqcYrckkOp+Ll3XO26GN8ZtWVHfPovuaGxh+gfM+X9h6LR5vxHzTHnIA yKT6rEinAdYlKmUKEOlllz01Jy8xEGWEQ/hxe9+Ppnmq/tfdwxWQQLZMr9IE+YVKLkSdfqfZwXqLO F11pWe3Ic6PEJM+6EPyeGfq2M6X3JAFi7UJQmd0pYNlHyMVpW9QmGoAdHzyBmL95AqHW2VCEsaTYL tmkFMjFg+6pUw7/+/vav8PowkkxsILPkDxtyCS9h3BPg+3QoNgq6dTTbcYI0pw0xqasmigVLu1l90 IhXTGMYiABmDZ91GJoAQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1ix9ET-0005l2-L2; Thu, 30 Jan 2020 12:47:41 +0000 Received: from pandora.armlinux.org.uk ([2001:4d48:ad52:3201:214:fdff:fe10:1be6]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1ix9EI-0005ja-K3 for linux-arm-kernel@lists.infradead.org; Thu, 30 Jan 2020 12:47:39 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2019; h=Sender:In-Reply-To: Content-Transfer-Encoding:Content-Type:MIME-Version:References:Message-ID: Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=d++GOLWtqSwAglIpfl/6MRXQSTfPsxh+M4oQnj5hels=; b=TdKIu4x0HJtQMJcRoldQ19Mkv ghPXPnh6Dg4C5PpxojHSPcy0G8FmGGRFJRTkwfNUhoOJ2jSRroL1aqDQtE11mokcuQ5rZ+0cXkYx8 7bFN0r4+lTeBD/S9VmSOS+OcldZp6M1FTJ8AC6u1XcldFj0hZdYkXSgc1VEfy7TSOMnaCeCtsjlEv bkbpq4emqO3qStzTVc6iZINZATBZ41VWEWaSXcpmt0bCbnGoSa2t4rIPr4WnGcZgpCKJfsla+P1w+ N+vKl5UhPPtoAycwh9p8ebS2u0QCfR/34wlDyWh7ZaNRiQ7BPTDRQsIGVwLLru/FrI+mkY35tsPNF 94FA7KHiw==; Received: from shell.armlinux.org.uk ([2001:4d48:ad52:3201:5054:ff:fe00:4ec]:33668) by pandora.armlinux.org.uk with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ix9EB-0003FY-U6; Thu, 30 Jan 2020 12:47:24 +0000 Received: from linux by shell.armlinux.org.uk with local (Exim 4.92) (envelope-from ) id 1ix9EA-0004Om-L8; Thu, 30 Jan 2020 12:47:22 +0000 Date: Thu, 30 Jan 2020 12:47:22 +0000 From: Russell King - ARM Linux admin To: =?utf-8?Q?=C5=81ukasz?= Stelmach Subject: Re: [RFC PATCH 1/4] scripts/dtc: update fdtget.c to upstream version v1.4.7-57-gf267e674d145 Message-ID: <20200130124722.GJ25745@shell.armlinux.org.uk> References: <20200130123934.3900-1-l.stelmach@samsung.com> <20200130124233.4006-1-l.stelmach@samsung.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20200130124233.4006-1-l.stelmach@samsung.com> User-Agent: Mutt/1.10.1 (2018-07-13) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200130_044737_275474_7D54B9C7 X-CRM114-Status: GOOD ( 27.63 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gVGh1LCBKYW4gMzAsIDIwMjAgYXQgMDE6NDI6MzBQTSArMDEwMCwgxYF1a2FzeiBTdGVsbWFj aCB3cm90ZToKPiBCdWlsZCBhbmQgZmR0Z2V0IGFuZCBhZGQgZmR0Z2V0LmMgdG8gdGhlIGxpc3Qg b2YgdXBkYXRlIHNvdXJjZSBmaWxlcy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiDFgXVrYXN6IFN0ZWxt YWNoIDxsLnN0ZWxtYWNoQHNhbXN1bmcuY29tPgo+IC0tLQo+ICBzY3JpcHRzL2R0Yy8uZ2l0aWdu b3JlICAgICAgICAgICB8ICAgNCArCj4gIHNjcmlwdHMvZHRjL01ha2VmaWxlICAgICAgICAgICAg IHwgICA1ICsrCj4gIHNjcmlwdHMvZHRjL2ZkdGdldC5jICAgICAgICAgICAgIHwgMTI1ICsrKysr KysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KPiAgc2NyaXB0cy9kdGMvdXBkYXRlLWR0Yy1zb3Vy Y2Uuc2ggfCAgIDQgKy0KPiAgNCBmaWxlcyBjaGFuZ2VkLCA4MiBpbnNlcnRpb25zKCspLCA1NiBk ZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IHNjcmlwdHMvZHRjLy5naXRpZ25vcmUgc2NyaXB0 cy9kdGMvLmdpdGlnbm9yZQo+IGluZGV4IDJlNmU2MGQ2NGVkZS4uODBmNmI1MGZkZjc3IDEwMDY0 NAo+IC0tLSBzY3JpcHRzL2R0Yy8uZ2l0aWdub3JlCj4gKysrIHNjcmlwdHMvZHRjLy5naXRpZ25v cmUKPiBAQCAtMSArMSw1IEBACj4gIGR0Ywo+ICtkdGMtbGV4ZXIubGV4LmMKPiArZHRjLXBhcnNl ci50YWIuYwo+ICtkdGMtcGFyc2VyLnRhYi5oCj4gK2ZkdGdldAo+IGRpZmYgLS1naXQgc2NyaXB0 cy9kdGMvTWFrZWZpbGUgc2NyaXB0cy9kdGMvTWFrZWZpbGUKPiBpbmRleCBiNWE1YjFjNTQ4Yzku Ljc0MzIyZDhkYWMyNSAxMDA2NDQKPiAtLS0gc2NyaXB0cy9kdGMvTWFrZWZpbGUKPiArKysgc2Ny aXB0cy9kdGMvTWFrZWZpbGUKPiBAQCAtMiwxMiArMiwxNSBAQAo+ICAjIHNjcmlwdHMvZHRjIG1h a2VmaWxlCj4gIAo+ICBob3N0cHJvZ3MtJChDT05GSUdfRFRDKSA6PSBkdGMKPiAraG9zdHByb2dz LSQoQ09ORklHX0RUQykgKz0gZmR0Z2V0Cj4gIGFsd2F5cwkJOj0gJChob3N0cHJvZ3MteSkKPiAg Cj4gIGR0Yy1vYmpzCTo9IGR0Yy5vIGZsYXR0cmVlLm8gZnN0cmVlLm8gZGF0YS5vIGxpdmV0cmVl Lm8gdHJlZXNvdXJjZS5vIFwKPiAgCQkgICBzcmNwb3MubyBjaGVja3MubyB1dGlsLm8KPiAgZHRj LW9ianMJKz0gZHRjLWxleGVyLmxleC5vIGR0Yy1wYXJzZXIudGFiLm8KPiAgCj4gK2ZkdGdldC1v YmpzICAgICA6PSBmZHRnZXQubyB1dGlsLm8KPiArCj4gICMgU291cmNlIGZpbGVzIG5lZWQgdG8g Z2V0IGF0IHRoZSB1c2Vyc3BhY2UgdmVyc2lvbiBvZiBsaWJmZHRfZW52LmggdG8gY29tcGlsZQo+ ICBIT1NUX0VYVFJBQ0ZMQUdTIDo9IC1JICQoc3JjdHJlZSkvJChzcmMpL2xpYmZkdAo+ICAKPiBA QCAtMjYsNSArMjksNyBAQCBlbmRpZgo+ICBIT1NUQ0ZMQUdTX2R0Yy1sZXhlci5sZXgubyA6PSAt SSAkKHNyY3RyZWUpLyQoc3JjKQo+ICBIT1NUQ0ZMQUdTX2R0Yy1wYXJzZXIudGFiLm8gOj0gLUkg JChzcmN0cmVlKS8kKHNyYykKPiAgCj4gK0hPU1RMRExJQlNfZmR0Z2V0IDo9IC1MJChvYmopL2xp YmZkdCAtbGZkdCAtV2wsLXJwYXRoPSckJE9SSUdJTi9saWJmZHQnCj4gKwo+ICAjIGRlcGVuZGVu Y2llcyBvbiBnZW5lcmF0ZWQgZmlsZXMgbmVlZCB0byBiZSBsaXN0ZWQgZXhwbGljaXRseQo+ICAk KG9iaikvZHRjLWxleGVyLmxleC5vOiAkKG9iaikvZHRjLXBhcnNlci50YWIuaAo+IGRpZmYgLS1n aXQgc2NyaXB0cy9kdGMvZmR0Z2V0LmMgc2NyaXB0cy9kdGMvZmR0Z2V0LmMKPiBpbmRleCBjOTIy ZjgyMjQ2YzYuLjc3NzU4MmUyZDQ1ZiAxMDA2NDQKPiAtLS0gc2NyaXB0cy9kdGMvZmR0Z2V0LmMK PiArKysgc2NyaXB0cy9kdGMvZmR0Z2V0LmMKPiBAQCAtMzksNiArMzksMzcgQEAgc3RhdGljIHZv aWQgcmVwb3J0X2Vycm9yKGNvbnN0IGNoYXIgKndoZXJlLCBpbnQgZXJyKQo+ICAJZnByaW50Zihz dGRlcnIsICJFcnJvciBhdCAnJXMnOiAlc1xuIiwgd2hlcmUsIGZkdF9zdHJlcnJvcihlcnIpKTsK PiAgfQo+ICAKPiArLyoqCj4gKyAqIFNob3dzIGEgbGlzdCBvZiBjZWxscyBpbiB0aGUgcmVxdWVz dGVkIGZvcm1hdAo+ICsgKgo+ICsgKiBAcGFyYW0gZGlzcAkJRGlzcGxheSBpbmZvcm1hdGlvbiAv IG9wdGlvbnMKPiArICogQHBhcmFtIGRhdGEJCURhdGEgdG8gZGlzcGxheQo+ICsgKiBAcGFyYW0g bGVuCQlNYXhpbXVtIGxlbmd0aCBvZiBidWZmZXIKPiArICogQHBhcmFtIHNpemUJCURhdGEgc2l6 ZSB0byB1c2UgZm9yIGRpc3BsYXkgKGUuZy4gNCBmb3IgMzItYml0KQo+ICsgKiBAcmV0dXJuIDAg aWYgb2ssIC0xIG9uIGVycm9yCj4gKyAqLwo+ICtzdGF0aWMgaW50IHNob3dfY2VsbF9saXN0KHN0 cnVjdCBkaXNwbGF5X2luZm8gKmRpc3AsIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4sCj4gKwkJ CSAgaW50IHNpemUpCj4gK3sKPiArCWNvbnN0IHVpbnQ4X3QgKnAgPSAoY29uc3QgdWludDhfdCAq KWRhdGE7Cj4gKwljaGFyIGZtdFszXTsKPiArCWludCB2YWx1ZTsKPiArCWludCBpOwo+ICsKPiAr CWZtdFswXSA9ICclJzsKPiArCWZtdFsxXSA9IGRpc3AtPnR5cGUgPyBkaXNwLT50eXBlIDogJ2Qn Owo+ICsJZm10WzJdID0gJ1wwJzsKPiArCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gc2l6ZSwg cCArPSBzaXplKSB7Cj4gKwkJaWYgKGkpCj4gKwkJCXByaW50ZigiICIpOwo+ICsJCXZhbHVlID0g c2l6ZSA9PSA0ID8gZmR0MzJfbGQoKGNvbnN0IGZkdDMyX3QgKilwKSA6Cj4gKwkJCXNpemUgPT0g MiA/ICgqcCA8PCA4KSB8IHBbMV0gOiAqcDsKPiArCQlwcmludGYoZm10LCB2YWx1ZSk7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gIC8qKgo+ICAgKiBEaXNwbGF5cyBkYXRhIG9m IGEgZ2l2ZW4gbGVuZ3RoIGFjY29yZGluZyB0byBzZWxlY3RlZCBvcHRpb25zCj4gICAqCj4gQEAg LTUyLDEyICs4Myw5IEBAIHN0YXRpYyB2b2lkIHJlcG9ydF9lcnJvcihjb25zdCBjaGFyICp3aGVy ZSwgaW50IGVycikKPiAgICovCj4gIHN0YXRpYyBpbnQgc2hvd19kYXRhKHN0cnVjdCBkaXNwbGF5 X2luZm8gKmRpc3AsIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pCj4gIHsKPiAtCWludCBpLCBz aXplOwo+IC0JY29uc3QgdWludDhfdCAqcCA9IChjb25zdCB1aW50OF90ICopZGF0YTsKPiArCWlu dCBzaXplOwo+ICAJY29uc3QgY2hhciAqczsKPiAtCWludCB2YWx1ZTsKPiAgCWludCBpc19zdHJp bmc7Cj4gLQljaGFyIGZtdFszXTsKPiAgCj4gIAkvKiBubyBkYXRhLCBkb24ndCBwcmludCAqLwo+ ICAJaWYgKGxlbiA9PSAwKQo+IEBAIC04NSwxNyArMTEzLDggQEAgc3RhdGljIGludCBzaG93X2Rh dGEoc3RydWN0IGRpc3BsYXlfaW5mbyAqZGlzcCwgY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbikK PiAgCQkJCSJzZWxlY3RlZCBkYXRhIHNpemVcbiIpOwo+ICAJCXJldHVybiAtMTsKPiAgCX0KPiAt CWZtdFswXSA9ICclJzsKPiAtCWZtdFsxXSA9IGRpc3AtPnR5cGUgPyBkaXNwLT50eXBlIDogJ2Qn Owo+IC0JZm10WzJdID0gJ1wwJzsKPiAtCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gc2l6ZSwg cCArPSBzaXplKSB7Cj4gLQkJaWYgKGkpCj4gLQkJCXByaW50ZigiICIpOwo+IC0JCXZhbHVlID0g c2l6ZSA9PSA0ID8gZmR0MzJfdG9fY3B1KCooY29uc3QgdWludDMyX3QgKilwKSA6Cj4gLQkJCXNp emUgPT0gMiA/ICgqcCA8PCA4KSB8IHBbMV0gOiAqcDsKPiAtCQlwcmludGYoZm10LCB2YWx1ZSk7 Cj4gLQl9Cj4gLQlyZXR1cm4gMDsKPiArCj4gKwlyZXR1cm4gc2hvd19jZWxsX2xpc3QoZGlzcCwg ZGF0YSwgbGVuLCBzaXplKTsKPiAgfQo+ICAKPiAgLyoqCj4gQEAgLTEwNyw3ICsxMjYsNiBAQCBz dGF0aWMgaW50IHNob3dfZGF0YShzdHJ1Y3QgZGlzcGxheV9pbmZvICpkaXNwLCBjb25zdCBjaGFy ICpkYXRhLCBpbnQgbGVuKQo+ICAgKi8KPiAgc3RhdGljIGludCBsaXN0X3Byb3BlcnRpZXMoY29u c3Qgdm9pZCAqYmxvYiwgaW50IG5vZGUpCj4gIHsKPiAtCWNvbnN0IHN0cnVjdCBmZHRfcHJvcGVy dHkgKmRhdGE7Cj4gIAljb25zdCBjaGFyICpuYW1lOwo+ICAJaW50IHByb3A7Cj4gIAo+IEBAIC0x MTYsOCArMTM0LDcgQEAgc3RhdGljIGludCBsaXN0X3Byb3BlcnRpZXMoY29uc3Qgdm9pZCAqYmxv YiwgaW50IG5vZGUpCj4gIAkJLyogU3RvcCBzaWxlbnRseSB3aGVuIHRoZXJlIGFyZSBubyBtb3Jl IHByb3BlcnRpZXMgKi8KPiAgCQlpZiAocHJvcCA8IDApCj4gIAkJCXJldHVybiBwcm9wID09IC1G RFRfRVJSX05PVEZPVU5EID8gMCA6IHByb3A7Cj4gLQkJZGF0YSA9IGZkdF9nZXRfcHJvcGVydHlf Ynlfb2Zmc2V0KGJsb2IsIHByb3AsIE5VTEwpOwo+IC0JCW5hbWUgPSBmZHRfc3RyaW5nKGJsb2Is IGZkdDMyX3RvX2NwdShkYXRhLT5uYW1lb2ZmKSk7Cj4gKwkJZmR0X2dldHByb3BfYnlfb2Zmc2V0 KGJsb2IsIHByb3AsICZuYW1lLCBOVUxMKTsKPiAgCQlpZiAobmFtZSkKPiAgCQkJcHV0cyhuYW1l KTsKPiAgCQlwcm9wID0gZmR0X25leHRfcHJvcGVydHlfb2Zmc2V0KGJsb2IsIHByb3ApOwo+IEBA IC0yMzEsNyArMjQ4LDcgQEAgc3RhdGljIGludCBzaG93X2RhdGFfZm9yX2l0ZW0oY29uc3Qgdm9p ZCAqYmxvYiwgc3RydWN0IGRpc3BsYXlfaW5mbyAqZGlzcCwKPiAgICogQHBhcmFtIGZpbGVuYW1l CUZpbGVuYW1lIG9mIGJsb2IgZmlsZQo+ICAgKiBAcGFyYW0gYXJnCQlMaXN0IG9mIGFyZ3VtZW50 cyB0byBwcm9jZXNzCj4gICAqIEBwYXJhbSBhcmdfY291bnQJTnVtYmVyIG9mIGFyZ3VtZW50cwo+ IC0gKiBAcGFyYW0gcmV0dXJuIDAgaWYgb2ssIC12ZSBvbiBlcnJvcgo+ICsgKiBAcmV0dXJuIDAg aWYgb2ssIC12ZSBvbiBlcnJvcgo+ICAgKi8KPiAgc3RhdGljIGludCBkb19mZHRnZXQoc3RydWN0 IGRpc3BsYXlfaW5mbyAqZGlzcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCj4gIAkJICAgICBjaGFy ICoqYXJnLCBpbnQgYXJnX2NvdW50LCBpbnQgYXJnc19wZXJfc3RlcCkKPiBAQCAtMjQwLDcgKzI1 Nyw3IEBAIHN0YXRpYyBpbnQgZG9fZmR0Z2V0KHN0cnVjdCBkaXNwbGF5X2luZm8gKmRpc3AsIGNv bnN0IGNoYXIgKmZpbGVuYW1lLAo+ICAJY29uc3QgY2hhciAqcHJvcDsKPiAgCWludCBpLCBub2Rl Owo+ICAKPiAtCWJsb2IgPSB1dGlsZmR0X3JlYWQoZmlsZW5hbWUpOwo+ICsJYmxvYiA9IHV0aWxm ZHRfcmVhZChmaWxlbmFtZSwgTlVMTCk7Cj4gIAlpZiAoIWJsb2IpCj4gIAkJcmV0dXJuIC0xOwo+ ICAKPiBAQCAtMjUyLDQ0ICsyNjksNTAgQEAgc3RhdGljIGludCBkb19mZHRnZXQoc3RydWN0IGRp c3BsYXlfaW5mbyAqZGlzcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCj4gIAkJCQljb250aW51ZTsK PiAgCQkJfSBlbHNlIHsKPiAgCQkJCXJlcG9ydF9lcnJvcihhcmdbaV0sIG5vZGUpOwo+ICsJCQkJ ZnJlZShibG9iKTsKPiAgCQkJCXJldHVybiAtMTsKPiAgCQkJfQo+ICAJCX0KPiAgCQlwcm9wID0g YXJnc19wZXJfc3RlcCA9PSAxID8gTlVMTCA6IGFyZ1tpICsgMV07Cj4gIAo+IC0JCWlmIChzaG93 X2RhdGFfZm9yX2l0ZW0oYmxvYiwgZGlzcCwgbm9kZSwgcHJvcCkpCj4gKwkJaWYgKHNob3dfZGF0 YV9mb3JfaXRlbShibG9iLCBkaXNwLCBub2RlLCBwcm9wKSkgewo+ICsJCQlmcmVlKGJsb2IpOwo+ ICAJCQlyZXR1cm4gLTE7Cj4gKwkJfQo+ICAJfQo+ICsKPiArCWZyZWUoYmxvYik7Cj4gKwo+ICAJ cmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyBjb25zdCBjaGFyICp1c2FnZV9tc2cgPQo+IC0J ImZkdGdldCAtIHJlYWQgdmFsdWVzIGZyb20gZGV2aWNlIHRyZWVcbiIKPiAtCSJcbiIKPiAtCSJF YWNoIHZhbHVlIGlzIHByaW50ZWQgb24gYSBuZXcgbGluZS5cblxuIgo+IC0JIlVzYWdlOlxuIgo+ ICsvKiBVc2FnZSByZWxhdGVkIGRhdGEuICovCj4gK3N0YXRpYyBjb25zdCBjaGFyIHVzYWdlX3N5 bm9wc2lzW10gPQo+ICsJInJlYWQgdmFsdWVzIGZyb20gZGV2aWNlIHRyZWVcbiIKPiAgCSIJZmR0 Z2V0IDxvcHRpb25zPiA8ZHQgZmlsZT4gWzxub2RlPiA8cHJvcGVydHk+XS4uLlxuIgo+ICAJIglm ZHRnZXQgLXAgPG9wdGlvbnM+IDxkdCBmaWxlPiBbPG5vZGU+IF0uLi5cbiIKPiAtCSJPcHRpb25z OlxuIgo+IC0JIlx0LXQgPHR5cGU+XHRUeXBlIG9mIGRhdGFcbiIKPiAtCSJcdC1wXHRcdExpc3Qg cHJvcGVydGllcyBmb3IgZWFjaCBub2RlXG4iCj4gLQkiXHQtbFx0XHRMaXN0IHN1Ym5vZGVzIGZv ciBlYWNoIG5vZGVcbiIKPiAtCSJcdC1kXHRcdERlZmF1bHQgdmFsdWUgdG8gZGlzcGxheSB3aGVu IHRoZSBwcm9wZXJ0eSBpcyAiCj4gLQkJCSJtaXNzaW5nXG4iCj4gLQkiXHQtaFx0XHRQcmludCB0 aGlzIGhlbHBcblxuIgo+ICsJIlxuIgo+ICsJIkVhY2ggdmFsdWUgaXMgcHJpbnRlZCBvbiBhIG5l dyBsaW5lLlxuIgo+ICAJVVNBR0VfVFlQRV9NU0c7Cj4gLQo+IC1zdGF0aWMgdm9pZCB1c2FnZShj b25zdCBjaGFyICptc2cpCj4gLXsKPiAtCWlmIChtc2cpCj4gLQkJZnByaW50ZihzdGRlcnIsICJF cnJvcjogJXNcblxuIiwgbXNnKTsKPiAtCj4gLQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgdXNhZ2Vf bXNnKTsKPiAtCWV4aXQoMik7Cj4gLX0KPiArc3RhdGljIGNvbnN0IGNoYXIgdXNhZ2Vfc2hvcnRf b3B0c1tdID0gInQ6cGxkOiIgVVNBR0VfQ09NTU9OX1NIT1JUX09QVFM7Cj4gK3N0YXRpYyBzdHJ1 Y3Qgb3B0aW9uIGNvbnN0IHVzYWdlX2xvbmdfb3B0c1tdID0gewo+ICsJeyJ0eXBlIiwgICAgICAg ICAgICAgIGFfYXJndW1lbnQsIE5VTEwsICd0J30sCj4gKwl7InByb3BlcnRpZXMiLCAgICAgICBu b19hcmd1bWVudCwgTlVMTCwgJ3AnfSwKPiArCXsibGlzdCIsICAgICAgICAgICAgIG5vX2FyZ3Vt ZW50LCBOVUxMLCAnbCd9LAo+ICsJeyJkZWZhdWx0IiwgICAgICAgICAgIGFfYXJndW1lbnQsIE5V TEwsICdkJ30sCj4gKwlVU0FHRV9DT01NT05fTE9OR19PUFRTLAo+ICt9Owo+ICtzdGF0aWMgY29u c3QgY2hhciAqIGNvbnN0IHVzYWdlX29wdHNfaGVscFtdID0gewo+ICsJIlR5cGUgb2YgZGF0YSIs Cj4gKwkiTGlzdCBwcm9wZXJ0aWVzIGZvciBlYWNoIG5vZGUiLAo+ICsJIkxpc3Qgc3Vibm9kZXMg Zm9yIGVhY2ggbm9kZSIsCj4gKwkiRGVmYXVsdCB2YWx1ZSB0byBkaXNwbGF5IHdoZW4gdGhlIHBy b3BlcnR5IGlzIG1pc3NpbmciLAo+ICsJVVNBR0VfQ09NTU9OX09QVFNfSEVMUAo+ICt9Owo+ICAK PiAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgewo+ICsJaW50IG9wdDsKPiAg CWNoYXIgKmZpbGVuYW1lID0gTlVMTDsKPiAgCXN0cnVjdCBkaXNwbGF5X2luZm8gZGlzcDsKPiAg CWludCBhcmdzX3Blcl9zdGVwID0gMjsKPiBAQCAtMjk4LDIwICszMjEsMTQgQEAgaW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgCW1lbXNldCgmZGlzcCwgJ1wwJywgc2l6ZW9mKGRp c3ApKTsKPiAgCWRpc3Auc2l6ZSA9IC0xOwo+ICAJZGlzcC5tb2RlID0gTU9ERV9TSE9XX1ZBTFVF Owo+IC0JZm9yICg7Oykgewo+IC0JCWludCBjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJkOmhscHQ6 Iik7Cj4gLQkJaWYgKGMgPT0gLTEpCj4gLQkJCWJyZWFrOwo+IC0KPiAtCQlzd2l0Y2ggKGMpIHsK PiAtCQljYXNlICdoJzoKPiAtCQljYXNlICc/JzoKPiAtCQkJdXNhZ2UoTlVMTCk7Cj4gKwl3aGls ZSAoKG9wdCA9IHV0aWxfZ2V0b3B0X2xvbmcoKSkgIT0gRU9GKSB7Cj4gKwkJc3dpdGNoIChvcHQp IHsKPiArCQljYXNlX1VTQUdFX0NPTU1PTl9GTEFHUwo+ICAKPiAgCQljYXNlICd0JzoKPiAgCQkJ aWYgKHV0aWxmZHRfZGVjb2RlX3R5cGUob3B0YXJnLCAmZGlzcC50eXBlLAo+ICAJCQkJCSZkaXNw LnNpemUpKQo+IC0JCQkJdXNhZ2UoIkludmFsaWQgdHlwZSBzdHJpbmciKTsKPiArCQkJCXVzYWdl KCJpbnZhbGlkIHR5cGUgc3RyaW5nIik7Cj4gIAkJCWJyZWFrOwo+ICAKPiAgCQljYXNlICdwJzoK PiBAQCAtMzMzLDcgKzM1MCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4g IAlpZiAob3B0aW5kIDwgYXJnYykKPiAgCQlmaWxlbmFtZSA9IGFyZ3Zbb3B0aW5kKytdOwo+ICAJ aWYgKCFmaWxlbmFtZSkKPiAtCQl1c2FnZSgiTWlzc2luZyBmaWxlbmFtZSIpOwo+ICsJCXVzYWdl KCJtaXNzaW5nIGZpbGVuYW1lIik7Cj4gIAo+ICAJYXJndiArPSBvcHRpbmQ7Cj4gIAlhcmdjIC09 IG9wdGluZDsKPiBAQCAtMzQ0LDcgKzM2MSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCj4gIAo+ICAJLyogQ2hlY2sgZm9yIG5vZGUsIHByb3BlcnR5IGFyZ3VtZW50cyAqLwo+ ICAJaWYgKGFyZ3NfcGVyX3N0ZXAgPT0gMiAmJiAoYXJnYyAlIDIpKQo+IC0JCXVzYWdlKCJNdXN0 IGhhdmUgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzIik7Cj4gKwkJdXNhZ2UoIm11c3QgaGF2 ZSBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMiKTsKPiAgCj4gIAlpZiAoZG9fZmR0Z2V0KCZk aXNwLCBmaWxlbmFtZSwgYXJndiwgYXJnYywgYXJnc19wZXJfc3RlcCkpCj4gIAkJcmV0dXJuIDE7 Cj4gZGlmZiAtLWdpdCBzY3JpcHRzL2R0Yy91cGRhdGUtZHRjLXNvdXJjZS5zaCBzY3JpcHRzL2R0 Yy91cGRhdGUtZHRjLXNvdXJjZS5zaAo+IGluZGV4IDdkZDI5YTAzNjJiOC4uOGRiMjc3NTQ2Nzg1 IDEwMDc1NQo+IC0tLSBzY3JpcHRzL2R0Yy91cGRhdGUtZHRjLXNvdXJjZS5zaAo+ICsrKyBzY3Jp cHRzL2R0Yy91cGRhdGUtZHRjLXNvdXJjZS5zaAo+IEBAIC0zMSw4ICszMSw4IEBAIHNldCAtZXYK PiAgRFRDX1VQU1RSRUFNX1BBVEg9YHB3ZGAvLi4vZHRjCj4gIERUQ19MSU5VWF9QQVRIPWBwd2Rg L3NjcmlwdHMvZHRjCj4gIAo+IC1EVENfU09VUkNFPSJjaGVja3MuYyBkYXRhLmMgZHRjLmMgZHRj LmggZmxhdHRyZWUuYyBmc3RyZWUuYyBsaXZldHJlZS5jIHNyY3Bvcy5jIFwKPiAtCQlzcmNwb3Mu aCB0cmVlc291cmNlLmMgdXRpbC5jIHV0aWwuaCB2ZXJzaW9uX2dlbi5oIHlhbWx0cmVlLmMgTWFr ZWZpbGUuZHRjIFwKPiArRFRDX1NPVVJDRT0iY2hlY2tzLmMgZGF0YS5jIGR0Yy5jIGR0Yy5oIGZk dGdldC5jIGZsYXR0cmVlLmMgZnN0cmVlLmMgbGl2ZXRyZWUuYwo+ICsJCXNyY3Bvcy5jIHNyY3Bv cy5oIHRyZWVzb3VyY2UuYyB1dGlsLmMgdXRpbC5oIHZlcnNpb25fZ2VuLmggTWFrZWZpbGUuZHRj IFwKClRoaXMgbG9va3MgbGlrZSB5b3UncmUgZHJvcHBpbmcgeWFtbHRyZWUuYy4gIElzIHRoYXQg aW50ZW50aW9uYWw/Cgo+ICAJCWR0Yy1sZXhlci5sIGR0Yy1wYXJzZXIueSIKPiAgTElCRkRUX1NP VVJDRT0iTWFrZWZpbGUubGliZmR0IGZkdC5jIGZkdC5oIGZkdF9hZGRyZXNzZXMuYyBmZHRfZW1w dHlfdHJlZS5jIFwKPiAgCQlmZHRfb3ZlcmxheS5jIGZkdF9yby5jIGZkdF9ydy5jIGZkdF9zdHJl cnJvci5jIGZkdF9zdy5jIFwKPiAtLSAKPiAyLjIwLjEKPiAKPiAKPiBfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGxpbnV4LWFybS1rZXJuZWwgbWFpbGlu ZyBsaXN0Cj4gbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCj4gaHR0cDovL2xp c3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCgotLSAK Uk1LJ3MgUGF0Y2ggc3lzdGVtOiBodHRwczovL3d3dy5hcm1saW51eC5vcmcudWsvZGV2ZWxvcGVy L3BhdGNoZXMvCkZUVEMgYnJvYWRiYW5kIGZvciAwLjhtaWxlIGxpbmUgaW4gc3VidXJiaWE6IHN5 bmMgYXQgMTIuMU1icHMgZG93biA2MjJrYnBzIHVwCkFjY29yZGluZyB0byBzcGVlZHRlc3QubmV0 OiAxMS45TWJwcyBkb3duIDUwMGticHMgdXAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFy bS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK