From nobody Fri May 17 01:43:40 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=outlook.com); dmarc=pass(p=none dis=none) header.from=outlook.com ARC-Seal: i=2; a=rsa-sha256; t=1601652849; cv=pass; d=zohomail.com; s=zohoarc; b=jU4J6ml760GdikV42hDMnYIGhkRdwxMON493U+wZDkft5jhnmKAAGa6dFfXvTB2AAVO531PdQd3Ia1rf5inazaZU4IhjusgnFqlIodO97DrM08mzLkuWVs04WjqH7D6IfOmT6DXDZb+lZYB6eSJORtgpCtpZIdD4lHUk5BJNXP0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1601652849; h=Content-Type:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=q2g9hYEgCligVp0dFNG1UUItuWe9Lyrq9RnODDuQOv4=; b=ROEbUcf6FeY+XwdK5VfLP4jj1tnEeDqRfZlclEX6stMm5TjGKilsdKRRSeOMEpnIsQ4wlYXialqBwWbitBREC/XP3F/svzLLOV5F/rDk/ptiCD5Z5kqV5fEcH1/e3BHrfSuBp3OcoSPY6NkTcSgQDKMprwaGRJPK94UFdd/g+IY= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=outlook.com); dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1601652849201819.4505233478835; Fri, 2 Oct 2020 08:34:09 -0700 (PDT) Received: from localhost ([::1]:49478 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kON4R-0001mi-II for importer@patchew.org; Fri, 02 Oct 2020 11:34:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43774) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kOMvi-0000fI-OD for qemu-devel@nongnu.org; Fri, 02 Oct 2020 11:25:07 -0400 Received: from mail-dm6nam11olkn2108.outbound.protection.outlook.com ([40.92.19.108]:28481 helo=NAM11-DM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kOMvc-0001mJ-A1 for qemu-devel@nongnu.org; Fri, 02 Oct 2020 11:25:05 -0400 Received: from BN8NAM11FT047.eop-nam11.prod.protection.outlook.com (2a01:111:e400:fc4b::47) by BN8NAM11HT152.eop-nam11.prod.protection.outlook.com (2a01:111:e400:fc4b::419) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3433.35; Fri, 2 Oct 2020 15:24:57 +0000 Received: from DM6PR16MB2473.namprd16.prod.outlook.com (2a01:111:e400:fc4b::4f) by BN8NAM11FT047.mail.protection.outlook.com (2a01:111:e400:fc4b::476) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3433.35 via Frontend Transport; Fri, 2 Oct 2020 15:24:57 +0000 Received: from DM6PR16MB2473.namprd16.prod.outlook.com ([fe80::ec2c:246a:b4d4:48b1]) by DM6PR16MB2473.namprd16.prod.outlook.com ([fe80::ec2c:246a:b4d4:48b1%3]) with mapi id 15.20.3433.039; Fri, 2 Oct 2020 15:24:57 +0000 Received: from [121.168.203.43] (121.168.203.43) by SL2PR01CA0009.apcprd01.prod.exchangelabs.com (2603:1096:100:41::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3433.35 via Frontend Transport; Fri, 2 Oct 2020 15:24:55 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CTtadiFVjgs9pUQAuFsam7GZFOC2Yb8DrUsXOmX8CC1yFTf1jhKaQ5rMLBg1rLYdIMPTp9/VrpkQIfzdVoBatHbv6Imjr1kPJqOeSB6kSHePTFBlufvhGRwyZrNta9umKUDLa2vkQQFGxF9BqgOMSxpU6H5RPMsLzTZZP/2h5qwBcnGpzRoJBvcQJZTkIwdpHmJKvJw83snRo5MaOwHylwIdAhXnL6/RfpFO6qZEH6Lz8pFI6hkn3ylFP+blIzcGWSaql8exrKzwOr+gQO3mF18LAU/+qwbll/LLw/0IIW0pNe8iFjC9rERKzHvuFxt3p9832Tul3RQSl02K5bp7DA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=q2g9hYEgCligVp0dFNG1UUItuWe9Lyrq9RnODDuQOv4=; b=dZS68/Th+9iUAZaBMDnWw2EgPncLf8EHWEQOBAdx3Nlk0hJ8L7FzWdwNg8d1Jpnmfo9qtwCCXZX0O6Lb6ct1FwoWQz/21d67hIP8XHYitHMic3ApLPqMXnr5Phr9bp20dbqP6uA3Cft7xNqrh44evIStb2zRPo8Zc6D+r6jWDu+zmleSQSnviqkQjQKaQz5EfUct3bPwtIguapYxNKye7EO1+4tqugexHIBuvMtSCwUvzOkdgRstSMGmd/i6o/lRv/rI4c98H4l+zJq6GhTccFm8edyoF84JxC85D6sFCYzJrzOiUaGbyO/QOlpivHJLwdGJ6wf84dcGE+BKQMh58A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=q2g9hYEgCligVp0dFNG1UUItuWe9Lyrq9RnODDuQOv4=; b=dhJWGLcUsAxZTYfI4c4FdIyvMnkBXCbiq/GPNeGzoiNOYKDSACGzuNRDKPwmP4FQqNTc/v8qSwlqEtgQTXeyHhyN/hbnCndM5NWW7KaogEH3a/i2B7DYbofEfrN474EyvdsvnVBIiqebiqUY33jGMAq6M5wOsJbj02yIb79z0LWwWmHlFjKWgmIBShKFukBD8MLXBMbSnyqeCDzRsZ66kdaWWqgJ/QaAFsHXu75eIWUDxwtnVVyUCrg8essUwxTMiocIYGVd4nPgN0D48LAmdhfUgra6qMEXMVxK1YvxzmxOBHaYRNzCcJvm4MqxbMOuRSB3p8T9ruY16JrlI4OAOQ== X-IncomingTopHeaderMarker: OriginalChecksum:5C0122AFA3E4F5474692898BCE4A65E5B16E740C133F4EAA4C940957DC80AB64; UpperCasedChecksum:B432E6F847B380E85DC8A11E191498CD53A94FF7B1C5AD4CC47EB57D453AEB40; SizeAsReceived:8545; Count:45 To: qemu-devel@nongnu.org From: Heecheol Yang Subject: [PATCH] hw/avr: Add limited support for avr gpio registers Message-ID: Date: Sat, 3 Oct 2020 00:24:51 +0900 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 Content-Type: multipart/alternative; boundary="------------05D7FE08FA15F909CA62EF22" Content-Language: en-US X-TMN: [alndI9+P4kjwBptWSqFCllRJeJSWyZ0u] X-ClientProxiedBy: SL2PR01CA0009.apcprd01.prod.exchangelabs.com (2603:1096:100:41::21) To DM6PR16MB2473.namprd16.prod.outlook.com (2603:10b6:5:6e::28) X-Microsoft-Original-Message-ID: <190ea1dd-5a97-09bf-dd63-e942cfcec0ce@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 45 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: b19823f8-83f5-47c3-7f77-08d866e75180 X-MS-TrafficTypeDiagnostic: BN8NAM11HT152: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: q9LGwQRgZEqclBkuFaLkek1gVwi4bVTXHqVt7OKvHFhPkq6FdCNu7hVr3E6U+QOfWbDaXXG+ckfURUd0/ROoN/dsvY+cZ60JPBKsaxi83s3h/z//p7uNP4hafPRop4x9gfn/quJ++fqEmOhjL3mu752QN8xGCZWOn6tjkgDWt4vQwVlxEX0GWxXEZ+bEuFqUaAdN3+pAiRnULNcu2LprspXTVgH7AAeL1B68i6QH8cKBcSCPtt/LNeZBVVghZj4Y X-MS-Exchange-AntiSpam-MessageData: KSOoBGtoQEGE9CNKgiZEdoAR6tcdtsYEo0SFB6t/CbcbhxYTSUWEz/WfDG3izkydTf3rYX/x+Wjn+l0fT7H1iyfUSL94MX0Ue4uUS2dcGgrtxHPamc7GZBtBE0fot7OCWpdDqIMRlnvB6VL82cLJFw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b19823f8-83f5-47c3-7f77-08d866e75180 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2020 15:24:56.9276 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT047.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN8NAM11HT152 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.92.19.108; envelope-from=heecheol.yang@outlook.com; helo=NAM11-DM6-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/02 11:24:57 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: 2 X-Spam_score: 0.2 X-Spam_bar: / X-Spam_report: (0.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_MUA_MOZILLA=2.309, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: S.E.Harris@kent.ac.uk, mrolnik@gmail.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @outlook.com) --------------05D7FE08FA15F909CA62EF22 Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Add some of these features for avr gpio: =C2=A0 - GPIO I/O : PORTx registers =C2=A0 - Data Direction : DDRx registers Following things are not supported yet: =C2=A0 - PINx registers =C2=A0 - MCUR registers =C2=A0 - Even though read/write for DDRx registers are =C2=A0=C2=A0=C2=A0 implemented, actual direction controls are not =C2=A0=C2=A0=C2=A0 supported yet. Signed-off-by: Heecheol Yang --- =C2=A0hw/avr/Kconfig=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 1 + =C2=A0hw/avr/atmega.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 |=C2=A0=C2=A0 7 ++- =C2=A0hw/avr/atmega.h=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 |=C2=A0=C2=A0 2 + =C2=A0hw/gpio/Kconfig=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 |=C2=A0=C2=A0 3 + =C2=A0hw/gpio/avr_gpio.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |= 117 +++++++++++++++++++++++++++++++++++++ =C2=A0hw/gpio/meson.build=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2= =A0=C2=A0 2 + =C2=A0include/hw/gpio/avr_gpio.h |=C2=A0 48 +++++++++++++++ =C2=A07 files changed, 178 insertions(+), 2 deletions(-) =C2=A0create mode 100644 hw/gpio/avr_gpio.c =C2=A0create mode 100644 include/hw/gpio/avr_gpio.h diff --git a/hw/avr/Kconfig b/hw/avr/Kconfig index d31298c3cc..16a57ced11 100644 --- a/hw/avr/Kconfig +++ b/hw/avr/Kconfig @@ -3,6 +3,7 @@ config AVR_ATMEGA_MCU =C2=A0=C2=A0=C2=A0=C2=A0 select AVR_TIMER16 =C2=A0=C2=A0=C2=A0=C2=A0 select AVR_USART =C2=A0=C2=A0=C2=A0=C2=A0 select AVR_POWER +=C2=A0=C2=A0=C2=A0 select AVR_GPIO =C2=A0config ARDUINO =C2=A0=C2=A0=C2=A0=C2=A0 select AVR_ATMEGA_MCU diff --git a/hw/avr/atmega.c b/hw/avr/atmega.c index 44c6afebbb..ad942028fd 100644 --- a/hw/avr/atmega.c +++ b/hw/avr/atmega.c @@ -283,8 +283,11 @@ static void atmega_realize(DeviceState *dev, Error=20 **errp) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 c= ontinue; =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 devname =3D g_strdup_prin= tf("atmega-gpio-%c", 'a' + (char)i); -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 create_unimplemented_device(dev= name, -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 OFFSET_DATA= + mc->dev[idx].addr, 3); +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 object_initialize_child(OBJECT(= dev), devname, &s->gpio[i], +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 TYPE_AVR_GPIO); +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 sysbus_realize(SYS_BUS_DEVICE(&= s->gpio[i]), &error_abort); +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 sysbus_mmio_map(SYS_BUS_DEVICE(= &s->gpio[i]), 0, +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 OFFSET_= DATA + mc->dev[idx].addr); =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 g_free(devname); =C2=A0=C2=A0=C2=A0=C2=A0 } diff --git a/hw/avr/atmega.h b/hw/avr/atmega.h index a99ee15c7e..e2289d5744 100644 --- a/hw/avr/atmega.h +++ b/hw/avr/atmega.h @@ -13,6 +13,7 @@ =C2=A0#include "hw/char/avr_usart.h" =C2=A0#include "hw/timer/avr_timer16.h" +#include "hw/gpio/avr_gpio.h" =C2=A0#include "hw/misc/avr_power.h" =C2=A0#include "target/avr/cpu.h" =C2=A0#include "qom/object.h" @@ -44,6 +45,7 @@ struct AtmegaMcuState { =C2=A0=C2=A0=C2=A0=C2=A0 DeviceState *io; =C2=A0=C2=A0=C2=A0=C2=A0 AVRMaskState pwr[POWER_MAX]; =C2=A0=C2=A0=C2=A0=C2=A0 AVRUsartState usart[USART_MAX]; +=C2=A0=C2=A0=C2=A0 AVRGPIOState gpio[GPIO_MAX]; =C2=A0=C2=A0=C2=A0=C2=A0 AVRTimer16State timer[TIMER_MAX]; =C2=A0=C2=A0=C2=A0=C2=A0 uint64_t xtal_freq_hz; =C2=A0}; diff --git a/hw/gpio/Kconfig b/hw/gpio/Kconfig index b6fdaa2586..1752d0ce56 100644 --- a/hw/gpio/Kconfig +++ b/hw/gpio/Kconfig @@ -10,3 +10,6 @@ config GPIO_KEY =C2=A0config SIFIVE_GPIO =C2=A0=C2=A0=C2=A0=C2=A0 bool + +config AVR_GPIO +=C2=A0=C2=A0=C2=A0 bool diff --git a/hw/gpio/avr_gpio.c b/hw/gpio/avr_gpio.c new file mode 100644 index 0000000000..7114216847 --- /dev/null +++ b/hw/gpio/avr_gpio.c @@ -0,0 +1,117 @@ +/* + * AVR processors GPIO registers emulation. + * + * Copyright (C) 2020 Heecheol Yang + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 or + * (at your option) version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ +#include "qemu/osdep.h" +#include "qemu/log.h" +#include "qemu/module.h" +#include "qemu/timer.h" +#include "qapi/error.h" +#include "hw/sysbus.h" +#include "hw/irq.h" +#include "hw/gpio/avr_gpio.h" +#include "hw/qdev-properties.h" +#include "chardev/char-fe.h" + +static void avr_gpio_reset(DeviceState *dev) +{ +=C2=A0=C2=A0=C2=A0 AVRGPIOState *gpio =3D AVR_GPIO(dev); +=C2=A0=C2=A0=C2=A0 gpio->ddr_val =3D 0u; +=C2=A0=C2=A0=C2=A0 gpio->port_val =3D 0u; +} +static uint64_t avr_gpio_read(void *opaque, hwaddr offset, unsigned int=20 size) +{ +=C2=A0=C2=A0=C2=A0 AVRGPIOState *s =3D (AVRGPIOState *)opaque; +=C2=A0=C2=A0=C2=A0 switch (offset) { +=C2=A0=C2=A0=C2=A0 case GPIO_PIN: +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* Not implemented yet */ +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; +=C2=A0=C2=A0=C2=A0 case GPIO_DDR: +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return s->ddr_val; +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; +=C2=A0=C2=A0=C2=A0 case GPIO_PORT: +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return s->port_val; +=C2=A0=C2=A0=C2=A0 default: +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 qemu_log_mask(LOG_GUEST_ERROR, = "%s: Bad offset %lx\n", +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 __func__, offset); +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; +=C2=A0=C2=A0=C2=A0 } +=C2=A0=C2=A0=C2=A0 return 0; +} + +static void avr_gpio_write(void *opaque, hwaddr offset, uint64_t value, +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 unsigned int size) +{ +=C2=A0=C2=A0=C2=A0 AVRGPIOState *s =3D (AVRGPIOState *)opaque; +=C2=A0=C2=A0=C2=A0 switch (offset) { +=C2=A0=C2=A0=C2=A0 case GPIO_PIN: +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* Not implemented yet */ +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; +=C2=A0=C2=A0=C2=A0 case GPIO_DDR: +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 s->ddr_val =3D value & 0xF; +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; +=C2=A0=C2=A0=C2=A0 case GPIO_PORT: +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 s->port_val =3D value & 0xF; +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; +=C2=A0=C2=A0=C2=A0 default: +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 qemu_log_mask(LOG_GUEST_ERROR, = "%s: Bad offset %lx\n", +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 __func__, offset); +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; +=C2=A0=C2=A0=C2=A0 } +} + +static const MemoryRegionOps avr_gpio_ops =3D { +=C2=A0=C2=A0=C2=A0 .read =3D avr_gpio_read, +=C2=A0=C2=A0=C2=A0 .write =3D avr_gpio_write, +=C2=A0=C2=A0=C2=A0 .endianness =3D DEVICE_NATIVE_ENDIAN, +}; + +static void avr_gpio_init(Object *obj) +{ +=C2=A0=C2=A0=C2=A0 AVRGPIOState *s =3D AVR_GPIO(obj); +=C2=A0=C2=A0=C2=A0 memory_region_init_io(&s->mmio, obj, &avr_gpio_ops, s,=20 TYPE_AVR_GPIO, 3); +=C2=A0=C2=A0=C2=A0 sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->mmio); +=C2=A0=C2=A0=C2=A0 s->enabled =3D true; +} +static void avr_gpio_realize(DeviceState *dev, Error **errp) +{ +=C2=A0=C2=A0=C2=A0 avr_gpio_reset(dev); +} + + +static void avr_gpio_class_init(ObjectClass *klass, void *data) +{ +=C2=A0=C2=A0=C2=A0 DeviceClass *dc =3D DEVICE_CLASS(klass); + +=C2=A0=C2=A0=C2=A0 dc->reset =3D avr_gpio_reset; +=C2=A0=C2=A0=C2=A0 dc->realize =3D avr_gpio_realize; +} + +static const TypeInfo avr_gpio_info =3D { +=C2=A0=C2=A0=C2=A0 .name=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 =3D TYPE_AVR_GPIO, +=C2=A0=C2=A0=C2=A0 .parent=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =3D T= YPE_SYS_BUS_DEVICE, +=C2=A0=C2=A0=C2=A0 .instance_size =3D sizeof(AVRGPIOState), +=C2=A0=C2=A0=C2=A0 .instance_init =3D avr_gpio_init, +=C2=A0=C2=A0=C2=A0 .class_init=C2=A0=C2=A0=C2=A0 =3D avr_gpio_class_init, +}; + +static void avr_gpio_register_types(void) +{ +=C2=A0=C2=A0=C2=A0 type_register_static(&avr_gpio_info); +} + +type_init(avr_gpio_register_types) diff --git a/hw/gpio/meson.build b/hw/gpio/meson.build index 86cae9a0f3..258bd5dcfc 100644 --- a/hw/gpio/meson.build +++ b/hw/gpio/meson.build @@ -11,3 +11,5 @@ softmmu_ss.add(when: 'CONFIG_OMAP', if_true:=20 files('omap_gpio.c')) =C2=A0softmmu_ss.add(when: 'CONFIG_RASPI', if_true: files('bcm2835_gpio.c'= )) =C2=A0softmmu_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files('aspeed_gpi= o.c')) =C2=A0softmmu_ss.add(when: 'CONFIG_SIFIVE_GPIO', if_true:=20 files('sifive_gpio.c')) + +softmmu_ss.add(when: 'CONFIG_AVR_GPIO', if_true: files('avr_gpio.c')) diff --git a/include/hw/gpio/avr_gpio.h b/include/hw/gpio/avr_gpio.h new file mode 100644 index 0000000000..45d42753c8 --- /dev/null +++ b/include/hw/gpio/avr_gpio.h @@ -0,0 +1,48 @@ +/* + * AVR processors GPIO registers definition. + * + * Copyright (C) 2020 Heecheol Yang + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 or + * (at your option) version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#ifndef AVR_GPIO_H +#define AVR_GPIO_H + +#include "hw/sysbus.h" +#include "qom/object.h" +#include "chardev/char-fe.h" + +/* Offsets of registers. */ +#define GPIO_PIN=C2=A0=C2=A0 0x00 +#define GPIO_DDR=C2=A0=C2=A0 0x01 +#define GPIO_PORT=C2=A0 0x02 + +#define TYPE_AVR_GPIO "avr-gpio" +OBJECT_DECLARE_SIMPLE_TYPE(AVRGPIOState, AVR_GPIO) + +struct AVRGPIOState { +=C2=A0=C2=A0=C2=A0 /*< private >*/ +=C2=A0=C2=A0=C2=A0 SysBusDevice parent_obj; + +=C2=A0=C2=A0=C2=A0 /*< public >*/ +=C2=A0=C2=A0=C2=A0 MemoryRegion mmio; + +=C2=A0=C2=A0=C2=A0 uint8_t ddr_val; +=C2=A0=C2=A0=C2=A0 uint8_t port_val; +=C2=A0=C2=A0=C2=A0 bool enabled; + +}; + +#endif /* AVR_GPIO_H */ -- 2.17.1 --------------05D7FE08FA15F909CA62EF22 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PGh0bWw+PGhlYWQ+CjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4 dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8ZGl2IHN0eWxl PSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsgbWFyZ2luOiAwcHg7CiAgICAg IHBhZGRpbmc6IDBweDsgYm9yZGVyOiAwcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgICAgZm9u dC12YXJpYW50LWxpZ2F0dXJlczogbm9ybWFsOyBmb250LXZhcmlhbnQtY2Fwczogbm9ybWFsOwog ICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogaW5oZXJpdDsgZm9udC12YXJpYW50LWVhc3QtYXNp YW46IGluaGVyaXQ7CiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7IGZvbnQtc3RyZXRjaDogaW5oZXJp dDsgZm9udC1zaXplOiAxMnB0OwogICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDsgZm9udC1mYW1p bHk6IEd1bGltLCDqtbTrprwsICZxdW90O05hbnVtCiAgICAgIEdvdGhpYyZxdW90Oywgc2Fucy1z ZXJpZjsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOyBjb2xvcjogcmdiKDAsCiAgICAgIDAsIDAp OyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBvcnBoYW5zOiAyOyB0ZXh0LWFsaWduOiBzdGFydDsK ICAgICAgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNl OiBub3JtYWw7CiAgICAgIHdpZG93czogMjsgd29yZC1zcGFjaW5nOiAwcHg7IC13ZWJraXQtdGV4 dC1zdHJva2Utd2lkdGg6IDBweDsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1 LCAyNTUpOyB0ZXh0LWRlY29yYXRpb24tc3R5bGU6CiAgICAgIGluaXRpYWw7IHRleHQtZGVjb3Jh dGlvbi1jb2xvcjogaW5pdGlhbDsiPkFkZCBzb21lIG9mIHRoZXNlCiAgICAgIGZlYXR1cmVzIGZv ciBhdnIgZ3Bpbzo8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgYW50 aWFsaWFzZWQ7Ij4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0ieF9Cb2R5RnJhZ21lbnQiIHN0 eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAgICBhbnRpYWxpYXNlZDsgbWFyZ2luOiAw cHg7IHBhZGRpbmc6IDBweDsgYm9yZGVyOiAwcHg7IGZvbnQtc3R5bGU6CiAgICAgIG5vcm1hbDsg Zm9udC12YXJpYW50LWxpZ2F0dXJlczogbm9ybWFsOyBmb250LXZhcmlhbnQtY2Fwczogbm9ybWFs OwogICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogaW5oZXJpdDsgZm9udC12YXJpYW50LWVhc3Qt YXNpYW46IGluaGVyaXQ7CiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7IGZvbnQtc3RyZXRjaDogaW5o ZXJpdDsgZm9udC1zaXplOiAxNXB4OwogICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDsgZm9udC1m YW1pbHk6ICZxdW90O01hbGd1biBHb3RoaWMmcXVvdDssCiAgICAgIEd1bGltLCAmcXVvdDtTZWdv ZSBVSSZxdW90OywgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LAogICAgICBSb2Jv dG8sICZxdW90O0hlbHZldGljYSBOZXVlJnF1b3Q7LCBzYW5zLXNlcmlmOyB2ZXJ0aWNhbC1hbGln bjoKICAgICAgYmFzZWxpbmU7IGNvbG9yOiByZ2IoMzIsIDMxLCAzMCk7IGxldHRlci1zcGFjaW5n OiBub3JtYWw7IG9ycGhhbnM6CiAgICAgIDI7IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVu dDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsg d2lkb3dzOiAyOyB3b3JkLXNwYWNpbmc6IDBweDsKICAgICAgLXdlYmtpdC10ZXh0LXN0cm9rZS13 aWR0aDogMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsCiAgICAgIDI1NSk7IHRl eHQtZGVjb3JhdGlvbi1zdHlsZTogaW5pdGlhbDsgdGV4dC1kZWNvcmF0aW9uLWNvbG9yOgogICAg ICBpbml0aWFsOyI+PGZvbnQgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlh c2VkOyIgc2l6ZT0iMiI+PHNwYW4gc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlh bGlhc2VkOwogICAgICAgICAgbWFyZ2luOiAwcHg7IHBhZGRpbmc6IDBweDsgYm9yZGVyOiAwcHg7 IGZvbnQtc3R5bGU6IGluaGVyaXQ7CiAgICAgICAgICBmb250LXZhcmlhbnQ6IGluaGVyaXQ7IGZv bnQtd2VpZ2h0OiBpbmhlcml0OyBmb250LXN0cmV0Y2g6CiAgICAgICAgICBpbmhlcml0OyBmb250 LXNpemU6IDExcHQ7IGxpbmUtaGVpZ2h0OiBpbmhlcml0OyBmb250LWZhbWlseToKICAgICAgICAg IGluaGVyaXQ7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsgY29sb3I6IGluaGVyaXQ7Ij4KICAg ICAgICAgIDxkaXYgY2xhc3M9InhfUGxhaW5UZXh0IiBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290 aGluZzoKICAgICAgICAgICAgYW50aWFsaWFzZWQ7IG1hcmdpbjogMHB4OyBwYWRkaW5nOiAwcHg7 IGJvcmRlcjogMHB4OyBmb250OgogICAgICAgICAgICBpbmhlcml0OyB2ZXJ0aWNhbC1hbGlnbjog YmFzZWxpbmU7IGNvbG9yOiBpbmhlcml0OyI+PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3Ro aW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICAmbmJzcDsgLSBHUElPIEkvTyA6IFBPUlR4 IHJlZ2lzdGVyczxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7 Ij4KICAgICAgICAgICAgJm5ic3A7IC0gRGF0YSBEaXJlY3Rpb24gOiBERFJ4IHJlZ2lzdGVyczxi ciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAg ICAgPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAg ICAgICAgICBGb2xsb3dpbmcgdGhpbmdzIGFyZSBub3Qgc3VwcG9ydGVkIHlldDo8YnIgc3R5bGU9 Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICZuYnNw OyAtIFBJTnggcmVnaXN0ZXJzPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAg ICAgICAgICAgIGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICZuYnNwOyAtIE1DVVIgcmVnaXN0 ZXJzPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAgICAgICAgICAgIGFudGlh bGlhc2VkOyI+CiAgICAgICAgICAgICZuYnNwOyAtIEV2ZW4gdGhvdWdoIHJlYWQvd3JpdGUgZm9y IEREUnggcmVnaXN0ZXJzIGFyZTxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50 aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7IGltcGxlbWVudGVkLCBh Y3R1YWwgZGlyZWN0aW9uIGNvbnRyb2xzIGFyZSBub3Q8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1z bW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyBz dXBwb3J0ZWQgeWV0LjxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAg ICAgICBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICA8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1z bW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgIFNpZ25lZC1vZmYtYnk6IEhlZWNo ZW9sIFlhbmcKICAgICAgICAgICAgPGEgY2xhc3M9Im1vei10eHQtbGluay1yZmMyMzk2RSIgaHJl Zj0ibWFpbHRvOmhlZWNoZW9sLnlhbmdAb3V0bG9vay5jb20iPiZsdDtoZWVjaGVvbC55YW5nQG91 dGxvb2suY29tJmd0OzwvYT48YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlh bGlhc2VkOyI+CiAgICAgICAgICAgIC0tLTxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGlu ZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgJm5ic3A7aHcvYXZyL0tjb25maWcmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsgfCZuYnNwOyZuYnNwOyAxICs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhp bmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICZuYnNwO2h3L2F2ci9hdG1lZ2EuYyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyB8Jm5ic3A7Jm5ic3A7IDcgKystPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5n OiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICAmbmJzcDtody9hdnIvYXRtZWdhLmgmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsgfCZuYnNwOyZuYnNwOyAyICs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFu dGlhbGlhc2VkOyI+CiAgICAgICAgICAgICZuYnNwO2h3L2dwaW8vS2NvbmZpZyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB8 Jm5ic3A7Jm5ic3A7IDMgKzxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFs aWFzZWQ7Ij4KICAgICAgICAgICAgJm5ic3A7aHcvZ3Bpby9hdnJfZ3Bpby5jJm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHwgMTE3CiAgICAgICAgICAgICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKys8YnIgc3R5bGU9Ii13ZWJraXQtZm9u dC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICZuYnNwO2h3L2dwaW8vbWVz b24uYnVpbGQmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgfCZuYnNw OyZuYnNwOyAyICs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2Vk OyI+CiAgICAgICAgICAgICZuYnNwO2luY2x1ZGUvaHcvZ3Bpby9hdnJfZ3Bpby5oIHwmbmJzcDsg NDggKysrKysrKysrKysrKysrPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRp YWxpYXNlZDsiPgogICAgICAgICAgICAmbmJzcDs3IGZpbGVzIGNoYW5nZWQsIDE3OCBpbnNlcnRp b25zKCspLCAyIGRlbGV0aW9ucygtKTxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzog YW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgJm5ic3A7Y3JlYXRlIG1vZGUgMTAwNjQ0IGh3L2dw aW8vYXZyX2dwaW8uYzxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFz ZWQ7Ij4KICAgICAgICAgICAgJm5ic3A7Y3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvaHcvZ3Bp by9hdnJfZ3Bpby5oPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNl ZDsiPgogICAgICAgICAgICA8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlh bGlhc2VkOyI+CiAgICAgICAgICAgIGRpZmYgLS1naXQgYS9ody9hdnIvS2NvbmZpZyBiL2h3L2F2 ci9LY29uZmlnPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsi PgogICAgICAgICAgICBpbmRleCBkMzEyOThjM2NjLi4xNmE1N2NlZDExIDEwMDY0NDxiciBzdHls ZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgLS0t IGEvaHcvYXZyL0tjb25maWc8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAg ICAgICAgICAgYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKysrIGIvaHcvYXZyL0tjb25maWc8 YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAgYW50aWFsaWFz ZWQ7Ij4KICAgICAgICAgICAgQEAgLTMsNiArMyw3IEBAIGNvbmZpZyBBVlJfQVRNRUdBX01DVTxi ciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAg ICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHNlbGVjdCBBVlJfVElNRVIxNjxiciBzdHlsZT0i LXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAgICAgICBhbnRpYWxpYXNlZDsiPgogICAg ICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgc2VsZWN0IEFWUl9VU0FSVDxiciBzdHls ZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAgICAgICBhbnRpYWxpYXNlZDsiPgog ICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgc2VsZWN0IEFWUl9QT1dFUjxiciBz dHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAgICAgICBhbnRpYWxpYXNlZDsi PgogICAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7IHNlbGVjdCBBVlJfR1BJTzxiciBzdHls ZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAgICAgICBhbnRpYWxpYXNlZDsiPgog ICAgICAgICAgICAmbmJzcDs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlh bGlhc2VkOyI+CiAgICAgICAgICAgICZuYnNwO2NvbmZpZyBBUkRVSU5PPGJyIHN0eWxlPSItd2Vi a2l0LWZvbnQtc21vb3RoaW5nOgogICAgICAgICAgICAgIGFudGlhbGlhc2VkOyI+CiAgICAgICAg ICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzZWxlY3QgQVZSX0FUTUVHQV9NQ1U8YnIgc3R5 bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAgYW50aWFsaWFzZWQ7Ij4K ICAgICAgICAgICAgZGlmZiAtLWdpdCBhL2h3L2F2ci9hdG1lZ2EuYyBiL2h3L2F2ci9hdG1lZ2Eu YzxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAg ICAgICAgaW5kZXggNDRjNmFmZWJiYi4uYWQ5NDIwMjhmZCAxMDA2NDQ8YnIgc3R5bGU9Ii13ZWJr aXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgIC0tLSBhL2h3L2F2 ci9hdG1lZ2EuYzxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAgICAg ICBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArKysgYi9ody9hdnIvYXRtZWdhLmM8YnIgc3R5 bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAgYW50aWFsaWFzZWQ7Ij4K ICAgICAgICAgICAgQEAgLTI4Myw4ICsyODMsMTEgQEAgc3RhdGljIHZvaWQgYXRtZWdhX3JlYWxp emUoRGV2aWNlU3RhdGUKICAgICAgICAgICAgKmRldiwgRXJyb3IgKiplcnJwKTxiciBzdHlsZT0i LXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAgICAgICBhbnRpYWxpYXNlZDsiPgogICAg ICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgY29udGludWU7PGJyIHN0eWxlPSItd2Via2l0LWZvbnQt c21vb3RoaW5nOgogICAgICAgICAgICAgIGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB9PGJyIHN0eWxlPSIt d2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICAmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgZGV2bmFtZSA9IGdfc3Ry ZHVwX3ByaW50ZigmcXVvdDthdG1lZ2EtZ3Bpby0lYyZxdW90OywgJ2EnICsKICAgICAgICAgICAg KGNoYXIpaSk7PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsi PgogICAgICAgICAgICAtJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 IGNyZWF0ZV91bmltcGxlbWVudGVkX2RldmljZShkZXZuYW1lLDxiciBzdHlsZT0iLXdlYmtpdC1m b250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgLSZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBPRkZTRVRfREFUQSArCiAgICAgICAgICAgIG1jLSZn dDtkZXZbaWR4XS5hZGRyLCAzKTs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAg ICAgICAgICAgICAgYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBvYmplY3RfaW5pdGlhbGl6ZV9jaGlsZChPQkpFQ1Qo ZGV2KSwgZGV2bmFtZSwKICAgICAgICAgICAgJmFtcDtzLSZndDtncGlvW2ldLDxiciBzdHlsZT0i LXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAgICAgICBhbnRpYWxpYXNlZDsiPgogICAg ICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFRZUEVfQVZSX0dQSU8pOzxiciBzdHlsZT0iLXdlYmtp dC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzeXNidXNfcmVhbGl6ZShTWVNfQlVTX0RF VklDRSgmYW1wO3MtJmd0O2dwaW9baV0pLAogICAgICAgICAgICAmYW1wO2Vycm9yX2Fib3J0KTs8 YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAgYW50aWFsaWFz ZWQ7Ij4KICAgICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyBzeXNidXNfbW1pb19tYXAoU1lTX0JVU19ERVZJQ0UoJmFtcDtzLSZndDtncGlvW2ldKSwK ICAgICAgICAgICAgMCw8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlh c2VkOyI+CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgT0ZGU0VUX0RBVEEgKyBtYy0mZ3Q7ZGV2W2lk eF0uYWRkcik7PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsi PgogICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsgZ19mcmVlKGRldm5hbWUpOzxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoK ICAgICAgICAgICAgICBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsgfTxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7 Ij4KICAgICAgICAgICAgJm5ic3A7PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBh bnRpYWxpYXNlZDsiPgogICAgICAgICAgICBkaWZmIC0tZ2l0IGEvaHcvYXZyL2F0bWVnYS5oIGIv aHcvYXZyL2F0bWVnYS5oPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxp YXNlZDsiPgogICAgICAgICAgICBpbmRleCBhOTllZTE1YzdlLi5lMjI4OWQ1NzQ0IDEwMDY0NDxi ciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAg ICAgLS0tIGEvaHcvYXZyL2F0bWVnYS5oPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5n OgogICAgICAgICAgICAgIGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsrKyBiL2h3L2F2ci9h dG1lZ2EuaDxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAgICAgICBh bnRpYWxpYXNlZDsiPgogICAgICAgICAgICBAQCAtMTMsNiArMTMsNyBAQDxiciBzdHlsZT0iLXdl YmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAgICAgICBhbnRpYWxpYXNlZDsiPgogICAgICAg ICAgICAmbmJzcDs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2Vk OyI+CiAgICAgICAgICAgICZuYnNwOyNpbmNsdWRlICZxdW90O2h3L2NoYXIvYXZyX3VzYXJ0Lmgm cXVvdDs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAg ICAgICAgICAgICZuYnNwOyNpbmNsdWRlICZxdW90O2h3L3RpbWVyL2F2cl90aW1lcjE2LmgmcXVv dDs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAg ICAgICAgICsjaW5jbHVkZSAmcXVvdDtody9ncGlvL2F2cl9ncGlvLmgmcXVvdDs8YnIgc3R5bGU9 Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICZuYnNw OyNpbmNsdWRlICZxdW90O2h3L21pc2MvYXZyX3Bvd2VyLmgmcXVvdDs8YnIgc3R5bGU9Ii13ZWJr aXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICZuYnNwOyNpbmNs dWRlICZxdW90O3RhcmdldC9hdnIvY3B1LmgmcXVvdDs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1z bW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICZuYnNwOyNpbmNsdWRlICZxdW90 O3FvbS9vYmplY3QuaCZxdW90OzxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoKICAg ICAgICAgICAgICBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICBAQCAtNDQsNiArNDUsNyBAQCBz dHJ1Y3QgQXRtZWdhTWN1U3RhdGUgezxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzog YW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IERldmlj ZVN0YXRlICppbzs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAg ICAgYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IEFW Uk1hc2tTdGF0ZSBwd3JbUE9XRVJfTUFYXTs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhp bmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBB VlJVc2FydFN0YXRlIHVzYXJ0W1VTQVJUX01BWF07PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21v b3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7IEFW UkdQSU9TdGF0ZSBncGlvW0dQSU9fTUFYXTs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhp bmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBB VlJUaW1lcjE2U3RhdGUgdGltZXJbVElNRVJfTUFYXTs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1z bW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyB1aW50NjRfdCB4dGFsX2ZyZXFfaHo7PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3Ro aW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICAmbmJzcDt9OzxiciBzdHlsZT0iLXdlYmtp dC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgZGlmZiAtLWdpdCBh L2h3L2dwaW8vS2NvbmZpZyBiL2h3L2dwaW8vS2NvbmZpZzxiciBzdHlsZT0iLXdlYmtpdC1mb250 LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgaW5kZXggYjZmZGFhMjU4Ni4u MTc1MmQwY2U1NiAxMDA2NDQ8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlh bGlhc2VkOyI+CiAgICAgICAgICAgIC0tLSBhL2h3L2dwaW8vS2NvbmZpZzxiciBzdHlsZT0iLXdl YmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAgICAgICBhbnRpYWxpYXNlZDsiPgogICAgICAg ICAgICArKysgYi9ody9ncGlvL0tjb25maWc8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhp bmc6CiAgICAgICAgICAgICAgYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgQEAgLTEwLDMgKzEw LDYgQEAgY29uZmlnIEdQSU9fS0VZPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBh bnRpYWxpYXNlZDsiPgogICAgICAgICAgICAmbmJzcDs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1z bW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICZuYnNwO2NvbmZpZyBTSUZJVkVf R1BJTzxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAgICAgICBhbnRp YWxpYXNlZDsiPgogICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgYm9vbDxiciBz dHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAg KzxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAg ICAgICAgK2NvbmZpZyBBVlJfR1BJTzxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoK ICAgICAgICAgICAgICBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5i c3A7IGJvb2w8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+ CiAgICAgICAgICAgIGRpZmYgLS1naXQgYS9ody9ncGlvL2F2cl9ncGlvLmMgYi9ody9ncGlvL2F2 cl9ncGlvLmM8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+ CiAgICAgICAgICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0PGJyIHN0eWxlPSItd2Via2l0LWZvbnQt c21vb3RoaW5nOgogICAgICAgICAgICAgIGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgIGluZGV4 IDAwMDAwMDAwMDAuLjcxMTQyMTY4NDc8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6 IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgIC0tLSAvZGV2L251bGw8YnIgc3R5bGU9Ii13ZWJr aXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAgYW50aWFsaWFzZWQ7Ij4KICAgICAgICAg ICAgKysrIGIvaHcvZ3Bpby9hdnJfZ3Bpby5jPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3Ro aW5nOgogICAgICAgICAgICAgIGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgIEBAIC0wLDAgKzEs MTE3IEBAPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAgICAgICAgICAgIGFu dGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsvKjxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290 aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyAqIEFWUiBwcm9jZXNzb3JzIEdQSU8g cmVnaXN0ZXJzIGVtdWxhdGlvbi48YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFu dGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsgKjxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290 aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyAqIENvcHlyaWdodCAoQykgMjAyMCBI ZWVjaGVvbCBZYW5nCiAgICAgICAgICAgIDxhIGNsYXNzPSJtb3otdHh0LWxpbmstcmZjMjM5NkUi IGhyZWY9Im1haWx0bzpoZWVjaGVvbC55YW5nQG91dGxvb2suY29tIj4mbHQ7aGVlY2hlb2wueWFu Z0BvdXRsb29rLmNvbSZndDs8L2E+PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBh bnRpYWxpYXNlZDsiPgogICAgICAgICAgICArICo8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9v dGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKICAgICAgICAgICAgYW5kL29yPGJy IHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAg ICArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj CiAgICAgICAgICAgIExpY2Vuc2UgYXM8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6 IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAgICAgICAgICAgIHZlcnNpb24gMiBvcjxiciBzdHls ZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyAq IChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLjxiciBzdHlsZT0iLXdl YmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyAqPGJyIHN0 eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICAr ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZQogICAgICAgICAgICB1c2VmdWwsPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBh bnRpYWxpYXNlZDsiPgogICAgICAgICAgICArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKICAgICAgICAgICAgd2FycmFudHkgb2Y8YnIgc3R5bGU9 Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuJm5ic3A7 CiAgICAgICAgICAgIFNlZSB0aGU8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFu dGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLjxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFs aWFzZWQ7Ij4KICAgICAgICAgICAgKyAqPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5n OiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwKICAgICAgICAgICAgUHVibGljIExpY2Vuc2UgYWxv bmc8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAgYW50aWFs aWFzZWQ7Ij4KICAgICAgICAgICAgKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSAm bHQ7PGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyIgdGFyZ2V0PSJfYmxhbmsi IHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgZGF0YS1hdXRoPSJOb3RBcHBsaWNhYmxlIiBzdHls ZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7IG1hcmdpbjogMHB4OwogICAg ICAgICAgICAgIHBhZGRpbmc6IDBweDsgYm9yZGVyOiAwcHg7IGZvbnQ6IGluaGVyaXQ7IHZlcnRp Y2FsLWFsaWduOgogICAgICAgICAgICAgIGJhc2VsaW5lOyBjdXJzb3I6IHBvaW50ZXI7Ij5odHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPC9hPiZndDsuPGJyIHN0eWxlPSItd2Via2l0LWZvbnQt c21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArICovPGJyIHN0eWxlPSItd2Vi a2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArI2luY2x1ZGUg JnF1b3Q7cWVtdS9vc2RlcC5oJnF1b3Q7PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5n OgogICAgICAgICAgICAgIGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsjaW5jbHVkZSAmcXVv dDtxZW11L2xvZy5oJnF1b3Q7PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAg ICAgICAgICAgIGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsjaW5jbHVkZSAmcXVvdDtxZW11 L21vZHVsZS5oJnF1b3Q7PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAgICAg ICAgICAgIGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsjaW5jbHVkZSAmcXVvdDtxZW11L3Rp bWVyLmgmcXVvdDs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAg ICAgYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyNpbmNsdWRlICZxdW90O3FhcGkvZXJyb3Iu aCZxdW90OzxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAgICAgICBh bnRpYWxpYXNlZDsiPgogICAgICAgICAgICArI2luY2x1ZGUgJnF1b3Q7aHcvc3lzYnVzLmgmcXVv dDs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAgYW50aWFs aWFzZWQ7Ij4KICAgICAgICAgICAgKyNpbmNsdWRlICZxdW90O2h3L2lycS5oJnF1b3Q7PGJyIHN0 eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAgICAgICAgICAgIGFudGlhbGlhc2VkOyI+ CiAgICAgICAgICAgICsjaW5jbHVkZSAmcXVvdDtody9ncGlvL2F2cl9ncGlvLmgmcXVvdDs8YnIg c3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAg ICsjaW5jbHVkZSAmcXVvdDtody9xZGV2LXByb3BlcnRpZXMuaCZxdW90OzxiciBzdHlsZT0iLXdl YmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyNpbmNsdWRl ICZxdW90O2NoYXJkZXYvY2hhci1mZS5oJnF1b3Q7PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21v b3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArPGJyIHN0eWxlPSItd2Via2l0LWZv bnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArc3RhdGljIHZvaWQgYXZy X2dwaW9fcmVzZXQoRGV2aWNlU3RhdGUgKmRldik8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9v dGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICt7PGJyIHN0eWxlPSItd2Via2l0LWZv bnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5i c3A7IEFWUkdQSU9TdGF0ZSAqZ3BpbyA9IEFWUl9HUElPKGRldik7PGJyIHN0eWxlPSItd2Via2l0 LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArJm5ic3A7Jm5ic3A7 Jm5ic3A7IGdwaW8tJmd0O2Rkcl92YWwgPSAwdTs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9v dGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgZ3Bp by0mZ3Q7cG9ydF92YWwgPSAwdTs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFu dGlhbGlhc2VkOyI+CiAgICAgICAgICAgICt9PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3Ro aW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArc3RhdGljIHVpbnQ2NF90IGF2cl9ncGlv X3JlYWQodm9pZCAqb3BhcXVlLCBod2FkZHIgb2Zmc2V0LAogICAgICAgICAgICB1bnNpZ25lZCBp bnQgc2l6ZSk8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAg YW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgK3s8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9v dGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgQVZS R1BJT1N0YXRlICpzID0gKEFWUkdQSU9TdGF0ZSAqKW9wYXF1ZTs8YnIgc3R5bGU9Ii13ZWJraXQt Zm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsm bmJzcDsgc3dpdGNoIChvZmZzZXQpIHs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6 CiAgICAgICAgICAgICAgYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyZuYnNwOyZuYnNwOyZu YnNwOyBjYXNlIEdQSU9fUElOOjxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoKICAg ICAgICAgICAgICBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8qIE5vdCBpbXBsZW1lbnRlZCB5ZXQgKi88YnIgc3R5 bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgYnJlYWs7PGJyIHN0eWxl PSItd2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAgICAgICAgICAgIGFudGlhbGlhc2VkOyI+CiAg ICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgY2FzZSBHUElPX0REUjo8YnIgc3R5bGU9Ii13 ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAgYW50aWFsaWFzZWQ7Ij4KICAgICAg ICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4g cy0mZ3Q7ZGRyX3ZhbDs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlh c2VkOyI+CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsgYnJlYWs7PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAgICAgICAg ICAgIGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgY2FzZSBH UElPX1BPUlQ6PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAgICAgICAgICAg IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsgcmV0dXJuIHMtJmd0O3BvcnRfdmFsOzxiciBzdHlsZT0iLXdlYmtpdC1m b250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyZuYnNwOyZuYnNwOyZu YnNwOyBkZWZhdWx0OjxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAg ICAgICBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7IHFlbXVfbG9nX21hc2soTE9HX0dVRVNUX0VSUk9SLCAmcXVvdDsl czogQmFkIG9mZnNldAogICAgICAgICAgICAlbHhcbiZxdW90Oyw8YnIgc3R5bGU9Ii13ZWJraXQt Zm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsgX19mdW5jX18sIG9mZnNldCk7PGJyIHN0eWxlPSItd2Via2l0 LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArJm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGJyZWFrOzxiciBzdHlsZT0iLXdlYmtpdC1m b250LXNtb290aGluZzoKICAgICAgICAgICAgICBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICAr Jm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFu dGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgcmV0dXJuIDA7PGJy IHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAgICAgICAgICAgIGFudGlhbGlhc2Vk OyI+CiAgICAgICAgICAgICt9PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRp YWxpYXNlZDsiPgogICAgICAgICAgICArPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5n OiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArc3RhdGljIHZvaWQgYXZyX2dwaW9fd3JpdGUo dm9pZCAqb3BhcXVlLCBod2FkZHIgb2Zmc2V0LAogICAgICAgICAgICB1aW50NjRfdCB2YWx1ZSw8 YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAgYW50aWFsaWFz ZWQ7Ij4KICAgICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB1bnNpZ25lZCBpbnQgc2l6ZSk8YnIg c3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAg ICt7PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAg ICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7IEFWUkdQSU9TdGF0ZSAqcyA9IChBVlJHUElPU3Rh dGUgKilvcGFxdWU7PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNl ZDsiPgogICAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7IHN3aXRjaCAob2Zmc2V0KSB7PGJy IHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAgICAgICAgICAgIGFudGlhbGlhc2Vk OyI+CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgY2FzZSBHUElPX1BJTjo8YnIgc3R5 bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAgYW50aWFsaWFzZWQ7Ij4K ICAgICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAv KiBOb3QgaW1wbGVtZW50ZWQgeWV0ICovPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5n OiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7IGJyZWFrOzxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoK ICAgICAgICAgICAgICBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5i c3A7IGNhc2UgR1BJT19ERFI6PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAg ICAgICAgICAgIGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcy0mZ3Q7ZGRyX3ZhbCA9IHZhbHVlICZhbXA7IDB4Rjs8 YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAg ICAgICsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgYnJlYWs7PGJy IHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAgICAgICAgICAgIGFudGlhbGlhc2Vk OyI+CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgY2FzZSBHUElPX1BPUlQ6PGJyIHN0 eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAgICAgICAgICAgIGFudGlhbGlhc2VkOyI+ CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsg cy0mZ3Q7cG9ydF92YWwgPSB2YWx1ZSAmYW1wOyAweEY7PGJyIHN0eWxlPSItd2Via2l0LWZvbnQt c21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGJyZWFrOzxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNt b290aGluZzoKICAgICAgICAgICAgICBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArJm5ic3A7 Jm5ic3A7Jm5ic3A7IGRlZmF1bHQ6PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOgog ICAgICAgICAgICAgIGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcWVtdV9sb2dfbWFzayhMT0dfR1VFU1RfRVJST1Is ICZxdW90OyVzOiBCYWQgb2Zmc2V0CiAgICAgICAgICAgICVseFxuJnF1b3Q7LDxiciBzdHlsZT0i LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBfX2Z1bmNfXywgb2Zmc2V0KTs8YnIgc3R5bGU9 Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgYnJlYWs7PGJyIHN0eWxlPSIt d2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAgICAgICAgICAgIGFudGlhbGlhc2VkOyI+CiAgICAg ICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgfTxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290 aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgK308YnIgc3R5bGU9Ii13ZWJraXQtZm9u dC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICs8YnIgc3R5bGU9Ii13ZWJr aXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICtzdGF0aWMgY29u c3QgTWVtb3J5UmVnaW9uT3BzIGF2cl9ncGlvX29wcyA9IHs8YnIgc3R5bGU9Ii13ZWJraXQtZm9u dC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJz cDsgLnJlYWQgPSBhdnJfZ3Bpb19yZWFkLDxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGlu ZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyAud3JpdGUg PSBhdnJfZ3Bpb193cml0ZSw8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlh bGlhc2VkOyI+CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgLmVuZGlhbm5lc3MgPSBE RVZJQ0VfTkFUSVZFX0VORElBTiw8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFu dGlhbGlhc2VkOyI+CiAgICAgICAgICAgICt9OzxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290 aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKzxiciBzdHlsZT0iLXdlYmtpdC1mb250 LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgK3N0YXRpYyB2b2lkIGF2cl9n cGlvX2luaXQoT2JqZWN0ICpvYmopPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBh bnRpYWxpYXNlZDsiPgogICAgICAgICAgICArezxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290 aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyBBVlJH UElPU3RhdGUgKnMgPSBBVlJfR1BJTyhvYmopOzxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290 aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyBtZW1v cnlfcmVnaW9uX2luaXRfaW8oJmFtcDtzLSZndDttbWlvLCBvYmosCiAgICAgICAgICAgICZhbXA7 YXZyX2dwaW9fb3BzLCBzLCBUWVBFX0FWUl9HUElPLCAzKTs8YnIgc3R5bGU9Ii13ZWJraXQtZm9u dC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJz cDsgc3lzYnVzX2luaXRfbW1pbyhTWVNfQlVTX0RFVklDRShvYmopLCAmYW1wO3MtJmd0O21taW8p OzxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAg ICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyBzLSZndDtlbmFibGVkID0gdHJ1ZTs8YnIgc3R5bGU9 Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAgYW50aWFsaWFzZWQ7Ij4KICAg ICAgICAgICAgK308YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2Vk OyI+CiAgICAgICAgICAgICtzdGF0aWMgdm9pZCBhdnJfZ3Bpb19yZWFsaXplKERldmljZVN0YXRl ICpkZXYsIEVycm9yCiAgICAgICAgICAgICoqZXJycCk8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1z bW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICt7PGJyIHN0eWxlPSItd2Via2l0 LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArJm5ic3A7Jm5ic3A7 Jm5ic3A7IGF2cl9ncGlvX3Jlc2V0KGRldik7PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3Ro aW5nOgogICAgICAgICAgICAgIGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICt9PGJyIHN0eWxl PSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArPGJy IHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAg ICArPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAg ICAgICAgICArc3RhdGljIHZvaWQgYXZyX2dwaW9fY2xhc3NfaW5pdChPYmplY3RDbGFzcyAqa2xh c3MsIHZvaWQKICAgICAgICAgICAgKmRhdGEpPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3Ro aW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArezxiciBzdHlsZT0iLXdlYmtpdC1mb250 LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNw OyBEZXZpY2VDbGFzcyAqZGMgPSBERVZJQ0VfQ0xBU1Moa2xhc3MpOzxiciBzdHlsZT0iLXdlYmtp dC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKzxiciBzdHlsZT0i LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyZuYnNw OyZuYnNwOyZuYnNwOyBkYy0mZ3Q7cmVzZXQgPSBhdnJfZ3Bpb19yZXNldDs8YnIgc3R5bGU9Ii13 ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsmbmJzcDsm bmJzcDsmbmJzcDsgZGMtJmd0O3JlYWxpemUgPSBhdnJfZ3Bpb19yZWFsaXplOzxiciBzdHlsZT0i LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgK308YnIg c3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAg ICs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAg ICAgICAgICtzdGF0aWMgY29uc3QgVHlwZUluZm8gYXZyX2dwaW9faW5mbyA9IHs8YnIgc3R5bGU9 Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsmbmJz cDsmbmJzcDsmbmJzcDsgLm5hbWUmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsgPSBUWVBFX0FWUl9HUElPLDxiciBzdHlsZT0iLXdlYmtpdC1mb250 LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNw OyAucGFyZW50Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ID0gVFlQ RV9TWVNfQlVTX0RFVklDRSw8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlh bGlhc2VkOyI+CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgLmluc3RhbmNlX3NpemUg PSBzaXplb2YoQVZSR1BJT1N0YXRlKSw8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6 IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgLmluc3RhbmNl X2luaXQgPSBhdnJfZ3Bpb19pbml0LDxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzog YW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyAuY2xhc3NfaW5p dCZuYnNwOyZuYnNwOyZuYnNwOyA9IGF2cl9ncGlvX2NsYXNzX2luaXQsPGJyIHN0eWxlPSItd2Vi a2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArfTs8YnIgc3R5 bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICs8 YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAg ICAgICtzdGF0aWMgdm9pZCBhdnJfZ3Bpb19yZWdpc3Rlcl90eXBlcyh2b2lkKTxiciBzdHlsZT0i LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgK3s8YnIg c3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAg ICsmbmJzcDsmbmJzcDsmbmJzcDsgdHlwZV9yZWdpc3Rlcl9zdGF0aWMoJmFtcDthdnJfZ3Bpb19p bmZvKTs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAg ICAgICAgICAgICt9PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNl ZDsiPgogICAgICAgICAgICArPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRp YWxpYXNlZDsiPgogICAgICAgICAgICArdHlwZV9pbml0KGF2cl9ncGlvX3JlZ2lzdGVyX3R5cGVz KTxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAg ICAgICAgZGlmZiAtLWdpdCBhL2h3L2dwaW8vbWVzb24uYnVpbGQgYi9ody9ncGlvL21lc29uLmJ1 aWxkPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAg ICAgICAgICBpbmRleCA4NmNhZTlhMGYzLi4yNThiZDVkY2ZjIDEwMDY0NDxiciBzdHlsZT0iLXdl YmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgLS0tIGEvaHcv Z3Bpby9tZXNvbi5idWlsZDxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAg ICAgICAgICBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArKysgYi9ody9ncGlvL21lc29uLmJ1 aWxkPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAgICAgICAgICAgIGFudGlh bGlhc2VkOyI+CiAgICAgICAgICAgIEBAIC0xMSwzICsxMSw1IEBAIHNvZnRtbXVfc3MuYWRkKHdo ZW46ICdDT05GSUdfT01BUCcsCiAgICAgICAgICAgIGlmX3RydWU6IGZpbGVzKCdvbWFwX2dwaW8u YycpKTxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAg ICAgICAgICAgJm5ic3A7c29mdG1tdV9zcy5hZGQod2hlbjogJ0NPTkZJR19SQVNQSScsIGlmX3Ry dWU6CiAgICAgICAgICAgIGZpbGVzKCdiY20yODM1X2dwaW8uYycpKTxiciBzdHlsZT0iLXdlYmtp dC1mb250LXNtb290aGluZzoKICAgICAgICAgICAgICBhbnRpYWxpYXNlZDsiPgogICAgICAgICAg ICAmbmJzcDtzb2Z0bW11X3NzLmFkZCh3aGVuOiAnQ09ORklHX0FTUEVFRF9TT0MnLCBpZl90cnVl OgogICAgICAgICAgICBmaWxlcygnYXNwZWVkX2dwaW8uYycpKTxiciBzdHlsZT0iLXdlYmtpdC1m b250LXNtb290aGluZzoKICAgICAgICAgICAgICBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICAm bmJzcDtzb2Z0bW11X3NzLmFkZCh3aGVuOiAnQ09ORklHX1NJRklWRV9HUElPJywgaWZfdHJ1ZToK ICAgICAgICAgICAgZmlsZXMoJ3NpZml2ZV9ncGlvLmMnKSk8YnIgc3R5bGU9Ii13ZWJraXQtZm9u dC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAgYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKzxi ciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAg ICAgK3NvZnRtbXVfc3MuYWRkKHdoZW46ICdDT05GSUdfQVZSX0dQSU8nLCBpZl90cnVlOgogICAg ICAgICAgICBmaWxlcygnYXZyX2dwaW8uYycpKTxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290 aGluZzoKICAgICAgICAgICAgICBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICBkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9ody9ncGlvL2F2cl9ncGlvLmgKICAgICAgICAgICAgYi9pbmNsdWRlL2h3L2dw aW8vYXZyX2dwaW8uaDxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFz ZWQ7Ij4KICAgICAgICAgICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQ8YnIgc3R5bGU9Ii13ZWJraXQt Zm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAgYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAg aW5kZXggMDAwMDAwMDAwMC4uNDVkNDI3NTNjODxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290 aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgLS0tIC9kZXYvbnVsbDxiciBzdHlsZT0i LXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAgICAgICBhbnRpYWxpYXNlZDsiPgogICAg ICAgICAgICArKysgYi9pbmNsdWRlL2h3L2dwaW8vYXZyX2dwaW8uaDxiciBzdHlsZT0iLXdlYmtp dC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgQEAgLTAsMCArMSw0 OCBAQDxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAgICAgICBhbnRp YWxpYXNlZDsiPgogICAgICAgICAgICArLyo8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhp bmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsgKiBBVlIgcHJvY2Vzc29ycyBHUElPIHJl Z2lzdGVycyBkZWZpbml0aW9uLjxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50 aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyAqPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3Ro aW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArICogQ29weXJpZ2h0IChDKSAyMDIwIEhl ZWNoZW9sIFlhbmcKICAgICAgICAgICAgPGEgY2xhc3M9Im1vei10eHQtbGluay1yZmMyMzk2RSIg aHJlZj0ibWFpbHRvOmhlZWNoZW9sLnlhbmdAb3V0bG9vay5jb20iPiZsdDtoZWVjaGVvbC55YW5n QG91dGxvb2suY29tJmd0OzwvYT48YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFu dGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsgKjxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290 aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdAogICAgICAgICAgICBhbmQvb3I8YnIg c3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAg ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMK ICAgICAgICAgICAgTGljZW5zZSBhczxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzog YW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICAgICAgICAgICAgdmVyc2lvbiAyIG9yPGJyIHN0eWxl PSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArICog KGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UuPGJyIHN0eWxlPSItd2Vi a2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArICo8YnIgc3R5 bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl CiAgICAgICAgICAgIHVzZWZ1bCw8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFu dGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZAogICAgICAgICAgICB3YXJyYW50eSBvZjxiciBzdHlsZT0i LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4mbmJzcDsK ICAgICAgICAgICAgU2VlIHRoZTxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50 aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxp YXNlZDsiPgogICAgICAgICAgICArICo8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6 IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbAogICAgICAgICAgICBQdWJsaWMgTGljZW5zZSBhbG9u ZzxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAgICAgICBhbnRpYWxp YXNlZDsiPgogICAgICAgICAgICArICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlICZs dDs8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvIiB0YXJnZXQ9Il9ibGFuayIg cmVsPSJub29wZW5lciBub3JlZmVycmVyIiBkYXRhLWF1dGg9Ik5vdEFwcGxpY2FibGUiIHN0eWxl PSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsgbWFyZ2luOiAwcHg7CiAgICAg ICAgICAgICAgcGFkZGluZzogMHB4OyBib3JkZXI6IDBweDsgZm9udDogaW5oZXJpdDsgdmVydGlj YWwtYWxpZ246CiAgICAgICAgICAgICAgYmFzZWxpbmU7IGN1cnNvcjogcG9pbnRlcjsiPmh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy88L2E+Jmd0Oy48YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1z bW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsgKi88YnIgc3R5bGU9Ii13ZWJr aXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICs8YnIgc3R5bGU9 Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsjaWZu ZGVmIEFWUl9HUElPX0g8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAg ICAgICAgYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyNkZWZpbmUgQVZSX0dQSU9fSDxiciBz dHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAgICAgICBhbnRpYWxpYXNlZDsi PgogICAgICAgICAgICArPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxp YXNlZDsiPgogICAgICAgICAgICArI2luY2x1ZGUgJnF1b3Q7aHcvc3lzYnVzLmgmcXVvdDs8YnIg c3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAgYW50aWFsaWFzZWQ7 Ij4KICAgICAgICAgICAgKyNpbmNsdWRlICZxdW90O3FvbS9vYmplY3QuaCZxdW90OzxiciBzdHls ZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAgICAgICBhbnRpYWxpYXNlZDsiPgog ICAgICAgICAgICArI2luY2x1ZGUgJnF1b3Q7Y2hhcmRldi9jaGFyLWZlLmgmcXVvdDs8YnIgc3R5 bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICs8 YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAg ICAgICsvKiBPZmZzZXRzIG9mIHJlZ2lzdGVycy4gKi88YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1z bW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAgICsjZGVmaW5lIEdQSU9fUElOJm5i c3A7Jm5ic3A7IDB4MDA8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAg ICAgICAgYW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyNkZWZpbmUgR1BJT19ERFImbmJzcDsm bmJzcDsgMHgwMTxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAgICAg ICBhbnRpYWxpYXNlZDsiPgogICAgICAgICAgICArI2RlZmluZSBHUElPX1BPUlQmbmJzcDsgMHgw MjxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzoKICAgICAgICAgICAgICBhbnRpYWxp YXNlZDsiPgogICAgICAgICAgICArPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBh bnRpYWxpYXNlZDsiPgogICAgICAgICAgICArI2RlZmluZSBUWVBFX0FWUl9HUElPICZxdW90O2F2 ci1ncGlvJnF1b3Q7PGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNl ZDsiPgogICAgICAgICAgICArT0JKRUNUX0RFQ0xBUkVfU0lNUExFX1RZUEUoQVZSR1BJT1N0YXRl LCBBVlJfR1BJTyk8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2Vk OyI+CiAgICAgICAgICAgICs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlh bGlhc2VkOyI+CiAgICAgICAgICAgICtzdHJ1Y3QgQVZSR1BJT1N0YXRlIHs8YnIgc3R5bGU9Ii13 ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAgYW50aWFsaWFzZWQ7Ij4KICAgICAg ICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyAvKiZsdDsgcHJpdmF0ZSAmZ3Q7Ki88YnIgc3R5bGU9 Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAgYW50aWFsaWFzZWQ7Ij4KICAg ICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyBTeXNCdXNEZXZpY2UgcGFyZW50X29iajs8YnIg c3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAgICAgICAg ICs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+CiAgICAg ICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgLyombHQ7IHB1YmxpYyAmZ3Q7Ki88YnIgc3R5bGU9 Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAgYW50aWFsaWFzZWQ7Ij4KICAg ICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyBNZW1vcnlSZWdpb24gbW1pbzs8YnIgc3R5bGU9 Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAgYW50aWFsaWFzZWQ7Ij4KICAg ICAgICAgICAgKzxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7 Ij4KICAgICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyB1aW50OF90IGRkcl92YWw7PGJyIHN0 eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAgICAgICAgICAgIGFudGlhbGlhc2VkOyI+ CiAgICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgdWludDhfdCBwb3J0X3ZhbDs8YnIgc3R5 bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6CiAgICAgICAgICAgICAgYW50aWFsaWFzZWQ7Ij4K ICAgICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyBib29sIGVuYWJsZWQ7PGJyIHN0eWxlPSIt d2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAgICAgICAgICAgIGFudGlhbGlhc2VkOyI+CiAgICAg ICAgICAgICs8YnIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyI+ CiAgICAgICAgICAgICt9OzxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFs aWFzZWQ7Ij4KICAgICAgICAgICAgKzxiciBzdHlsZT0iLXdlYmtpdC1mb250LXNtb290aGluZzog YW50aWFsaWFzZWQ7Ij4KICAgICAgICAgICAgKyNlbmRpZiAvKiBBVlJfR1BJT19IICovPGJyIHN0 eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOgogICAgICAgICAgICAgIGFudGlhbGlhc2VkOyI+ CiAgICAgICAgICAgIC0tPGJyIHN0eWxlPSItd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxp YXNlZDsiPgogICAgICAgICAgICAyLjE3LjE8L2Rpdj4KICAgICAgICA8L3NwYW4+PC9mb250Pjwv ZGl2PgogIDwvYm9keT4KPC9odG1sPgo= --------------05D7FE08FA15F909CA62EF22--