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=-15.4 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham 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 B292BC12002 for ; Wed, 21 Jul 2021 17:26:32 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 5DC3861246 for ; Wed, 21 Jul 2021 17:26:32 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5DC3861246 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id BB48F6E8E8; Wed, 21 Jul 2021 17:26:31 +0000 (UTC) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id A6FDF6E8E8; Wed, 21 Jul 2021 17:26:30 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10052"; a="297043190" X-IronPort-AV: E=Sophos;i="5.84,258,1620716400"; d="scan'208";a="297043190" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jul 2021 10:25:41 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,258,1620716400"; d="scan'208";a="511872281" Received: from irvmail001.ir.intel.com ([10.43.11.63]) by fmsmga002.fm.intel.com with ESMTP; 21 Jul 2021 10:25:40 -0700 Received: from [10.249.140.99] (mwajdecz-MOBL.ger.corp.intel.com [10.249.140.99]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id 16LHPceU029273; Wed, 21 Jul 2021 18:25:38 +0100 Subject: Re: [PATCH 04/14] drm/i915/guc/slpc: Adding SLPC communication interfaces To: Vinay Belgaumkar , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org References: <20210721161120.24610-1-vinay.belgaumkar@intel.com> <20210721161120.24610-5-vinay.belgaumkar@intel.com> From: Michal Wajdeczko Message-ID: <4cd00217-6620-b766-9d2e-dce21ad4c1df@intel.com> Date: Wed, 21 Jul 2021 19:25:38 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0 Thunderbird/78.12.0 MIME-Version: 1.0 In-Reply-To: <20210721161120.24610-5-vinay.belgaumkar@intel.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sundaresan Sujaritha Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On 21.07.2021 18:11, Vinay Belgaumkar wrote: > Add constants and params that are needed to configure SLPC. > > v2: Add a new abi header for SLPC. Replace bitfields with > genmasks. Address other comments from Michal W. > > Signed-off-by: Vinay Belgaumkar > Signed-off-by: Sundaresan Sujaritha > --- > .../drm/i915/gt/uc/abi/guc_actions_slpc_abi.h | 201 ++++++++++++++++++ > drivers/gpu/drm/i915/gt/uc/intel_guc.c | 4 + > drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h | 1 + > 3 files changed, 206 insertions(+) > create mode 100644 drivers/gpu/drm/i915/gt/uc/abi/guc_actions_slpc_abi.h > > diff --git a/drivers/gpu/drm/i915/gt/uc/abi/guc_actions_slpc_abi.h b/drivers/gpu/drm/i915/gt/uc/abi/guc_actions_slpc_abi.h > new file mode 100644 > index 000000000000..05d809746b32 > --- /dev/null > +++ b/drivers/gpu/drm/i915/gt/uc/abi/guc_actions_slpc_abi.h > @@ -0,0 +1,201 @@ > +/* SPDX-License-Identifier: MIT */ > +/* > + * Copyright © 2021 Intel Corporation > + */ > + > +#ifndef _GUC_ACTIONS_SLPC_ABI_H_ > +#define _GUC_ACTIONS_SLPC_ABI_H_ > + > +#include > + > +/** > + * SLPC SHARED DATA STRUCTURE if you want to use kernel-doc, then add DOC: tag > + * > + * +---+-------+--------------------------------------------------------------+ > + * | CL| Bytes | Description | > + * +===+=======+==============================================================+ > + * | 1 | 0-3 | SHARED DATA SIZE | > + * | +-------+--------------------------------------------------------------+ > + * | | 4-7 | GLOBAL STATE | > + * | +-------+--------------------------------------------------------------+ > + * | | 8-11 | DISPLAY DATA ADDRESS | > + * | +-------+--------------------------------------------------------------+ > + * | | 12:63 | PADDING | > + * +---+-------+--------------------------------------------------------------+ > + * | | 0:63 | PADDING(PLATFORM INFO) | > + * +---+-------+--------------------------------------------------------------+ > + * | 3 | 0-3 | TASK STATE DATA | > + * + +-------+--------------------------------------------------------------+ > + * | | 4:63 | PADDING | > + * +---+-------+--------------------------------------------------------------+ > + * |4-21 0:1087| OVERRIDE PARAMS AND BIT FIELDS | ^^^^^ something didn't work here > + * +---+-------+--------------------------------------------------------------+ > + * | | | PADDING + EXTRA RESERVED PAGE | > + * +---+-------+--------------------------------------------------------------+ > + */ > + > +/* > + * SLPC exposes certain parameters for global configuration by the host. > + * These are referred to as override parameters, because in most cases > + * the host will not need to modify the default values used by SLPC. > + * SLPC remembers the default values which allows the host to easily restore > + * them by simply unsetting the override. The host can set or unset override > + * parameters during SLPC (re-)initialization using the SLPC Reset event. > + * The host can also set or unset override parameters on the fly using the > + * Parameter Set and Parameter Unset events > + */ > + > +#define SLPC_MAX_OVERRIDE_PARAMETERS 256 > +#define SLPC_OVERRIDE_BITFIELD_SIZE \ > + (SLPC_MAX_OVERRIDE_PARAMETERS / 32) > + > +#define SLPC_PAGE_SIZE_BYTES 4096 > +#define SLPC_CACHELINE_SIZE_BYTES 64 > +#define SLPC_SHARED_DATA_SIZE_BYTE_HEADER SLPC_CACHELINE_SIZE_BYTES > +#define SLPC_SHARED_DATA_SIZE_BYTE_PLATFORM_INFO SLPC_CACHELINE_SIZE_BYTES > +#define SLPC_SHARED_DATA_SIZE_BYTE_TASK_STATE SLPC_CACHELINE_SIZE_BYTES > +#define SLPC_SHARED_DATA_MODE_DEFN_TABLE_SIZE SLPC_PAGE_SIZE_BYTES > +#define SLPC_SHARED_DATA_SIZE_BYTE_MAX (2 * SLPC_PAGE_SIZE_BYTES) > +#define SLPC_EVENT(id, argc) ((u32)(id) << 8 | (argc)) > +#define SLPC_EVENT_MAX_INPUT_ARGS 9 above two are likely used in H2G SLPC message that is not fully defined, maybe at the end of this file add separate section with H2G format, using plain C #defines, and move SLPC_EVENT helper macro to fwif.h > + > +/* > + * Cacheline size aligned (Total size needed for > + * SLPM_KMD_MAX_OVERRIDE_PARAMETERS=256 is 1088 bytes) > + */ > +#define SLPC_OVERRIDE_PARAMS_TOTAL_BYTES (((((SLPC_MAX_OVERRIDE_PARAMETERS * 4) \ > + + ((SLPC_MAX_OVERRIDE_PARAMETERS / 32) * 4)) \ > + + (SLPC_CACHELINE_SIZE_BYTES-1)) / SLPC_CACHELINE_SIZE_BYTES)*SLPC_CACHELINE_SIZE_BYTES) > + > +#define SLPC_SHARED_DATA_SIZE_BYTE_OTHER (SLPC_SHARED_DATA_SIZE_BYTE_MAX - \ > + (SLPC_SHARED_DATA_SIZE_BYTE_HEADER \ > + + SLPC_SHARED_DATA_SIZE_BYTE_PLATFORM_INFO \ > + + SLPC_SHARED_DATA_SIZE_BYTE_TASK_STATE \ > + + SLPC_OVERRIDE_PARAMS_TOTAL_BYTES \ > + + SLPC_SHARED_DATA_MODE_DEFN_TABLE_SIZE)) > + > +enum slpc_task_enable { > + SLPC_PARAM_TASK_DEFAULT = 0, > + SLPC_PARAM_TASK_ENABLED, > + SLPC_PARAM_TASK_DISABLED, > + SLPC_PARAM_TASK_UNKNOWN > +}; > + > +enum slpc_global_state { > + SLPC_GLOBAL_STATE_NOT_RUNNING = 0, > + SLPC_GLOBAL_STATE_INITIALIZING = 1, > + SLPC_GLOBAL_STATE_RESETTING = 2, > + SLPC_GLOBAL_STATE_RUNNING = 3, > + SLPC_GLOBAL_STATE_SHUTTING_DOWN = 4, > + SLPC_GLOBAL_STATE_ERROR = 5 > +}; > + > +enum slpc_param_id { > + SLPC_PARAM_TASK_ENABLE_GTPERF = 0, > + SLPC_PARAM_TASK_DISABLE_GTPERF = 1, > + SLPC_PARAM_TASK_ENABLE_BALANCER = 2, > + SLPC_PARAM_TASK_DISABLE_BALANCER = 3, > + SLPC_PARAM_TASK_ENABLE_DCC = 4, > + SLPC_PARAM_TASK_DISABLE_DCC = 5, > + SLPC_PARAM_GLOBAL_MIN_GT_UNSLICE_FREQ_MHZ = 6, > + SLPC_PARAM_GLOBAL_MAX_GT_UNSLICE_FREQ_MHZ = 7, > + SLPC_PARAM_GLOBAL_MIN_GT_SLICE_FREQ_MHZ = 8, > + SLPC_PARAM_GLOBAL_MAX_GT_SLICE_FREQ_MHZ = 9, > + SLPC_PARAM_GTPERF_THRESHOLD_MAX_FPS = 10, > + SLPC_PARAM_GLOBAL_DISABLE_GT_FREQ_MANAGEMENT = 11, > + SLPC_PARAM_GTPERF_ENABLE_FRAMERATE_STALLING = 12, > + SLPC_PARAM_GLOBAL_DISABLE_RC6_MODE_CHANGE = 13, > + SLPC_PARAM_GLOBAL_OC_UNSLICE_FREQ_MHZ = 14, > + SLPC_PARAM_GLOBAL_OC_SLICE_FREQ_MHZ = 15, > + SLPC_PARAM_GLOBAL_ENABLE_IA_GT_BALANCING = 16, > + SLPC_PARAM_GLOBAL_ENABLE_ADAPTIVE_BURST_TURBO = 17, > + SLPC_PARAM_GLOBAL_ENABLE_EVAL_MODE = 18, > + SLPC_PARAM_GLOBAL_ENABLE_BALANCER_IN_NON_GAMING_MODE = 19, > + SLPC_PARAM_GLOBAL_RT_MODE_TURBO_FREQ_DELTA_MHZ = 20, > + SLPC_PARAM_PWRGATE_RC_MODE = 21, > + SLPC_PARAM_EDR_MODE_COMPUTE_TIMEOUT_MS = 22, > + SLPC_PARAM_EDR_QOS_FREQ_MHZ = 23, > + SLPC_PARAM_MEDIA_FF_RATIO_MODE = 24, > + SLPC_PARAM_ENABLE_IA_FREQ_LIMITING = 25, > + SLPC_PARAM_STRATEGIES = 26, > + SLPC_PARAM_POWER_PROFILE = 27, > + SLPC_PARAM_IGNORE_EFFICIENT_FREQUENCY = 28, > + SLPC_MAX_PARAM = 32, > +}; > + > +enum slpc_event_id { > + SLPC_EVENT_RESET = 0, > + SLPC_EVENT_SHUTDOWN = 1, > + SLPC_EVENT_PLATFORM_INFO_CHANGE = 2, > + SLPC_EVENT_DISPLAY_MODE_CHANGE = 3, > + SLPC_EVENT_FLIP_COMPLETE = 4, > + SLPC_EVENT_QUERY_TASK_STATE = 5, > + SLPC_EVENT_PARAMETER_SET = 6, > + SLPC_EVENT_PARAMETER_UNSET = 7, > +}; > + > +struct slpc_task_state_data { > + union { > + u32 task_status_padding; > + struct { > + u32 status; > +#define SLPC_GTPERF_TASK_ACTIVE BIT(0) > +#define SLPC_GTPERF_STALL_POSSIBLE BIT(1) > +#define SLPC_GTPERF_GAMING_MODE BIT(2) > +#define SLPC_GTPERF_TARGET_FPS BIT(3) > +#define SLPC_DCC_TASK_ACTIVE BIT(4) > +#define SLPC_IN_DCC BIT(5) > +#define SLPC_IN_DCT BIT(6) > +#define SLPC_FREQ_SWITCH_ACTIVE BIT(7) > +#define SLPC_IBC_ENABLED BIT(8) > +#define SLPC_IBC_ACTIVE BIT(9) > +#define SLPC_PG1_ENABLED BIT(10) > +#define SLPC_PG1_ACTIVE BIT(11) > + }; > + }; > + union { > + u32 freq_padding; > + struct { > +#define SLPC_MAX_UNSLICE_FREQ_MASK REG_GENMASK(7, 0) > +#define SLPC_MIN_UNSLICE_FREQ_MASK REG_GENMASK(15, 8) > +#define SLPC_MAX_SLICE_FREQ_MASK REG_GENMASK(23, 16) > +#define SLPC_MIN_SLICE_FREQ_MASK REG_GENMASK(31, 24) > + u32 freq; > + }; > + }; > +} __packed; > + > +struct slpc_shared_data_header { > + /* Total size in bytes of this shared buffer. */ > + u32 size; > + u32 global_state; > + u32 display_data_addr; > +}; __packed ? > + > +struct slpc_override_params { > + u32 bits[SLPC_OVERRIDE_BITFIELD_SIZE]; > + u32 values[SLPC_MAX_OVERRIDE_PARAMETERS]; > +}; __packed ? > + > +struct slpc_shared_data { > + struct slpc_shared_data_header header; > + u8 shared_data_header_pad[SLPC_SHARED_DATA_SIZE_BYTE_HEADER - > + sizeof(struct slpc_shared_data_header)]; > + > + u8 platform_info_pad[SLPC_SHARED_DATA_SIZE_BYTE_PLATFORM_INFO]; > + > + struct slpc_task_state_data task_state_data; > + u8 task_state_data_pad[SLPC_SHARED_DATA_SIZE_BYTE_TASK_STATE - > + sizeof(struct slpc_task_state_data)]; > + > + struct slpc_override_params override_params ; > + u8 override_params_pad[SLPC_OVERRIDE_PARAMS_TOTAL_BYTES - > + sizeof(struct slpc_override_params)]; > + > + u8 shared_data_pad[SLPC_SHARED_DATA_SIZE_BYTE_OTHER]; > + > + /* PAGE 2 (4096 bytes), mode based parameter will be removed soon */ > + u8 reserved_mode_definition[4096]; > +} __packed; > + > +#endif > diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc.c > index 39bc3c16057b..fcccb103a21a 100644 > --- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c > +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c > @@ -203,11 +203,15 @@ static u32 guc_ctl_debug_flags(struct intel_guc *guc) > > static u32 guc_ctl_feature_flags(struct intel_guc *guc) > { > + struct intel_gt *gt = guc_to_gt(guc); > u32 flags = 0; > > if (!intel_guc_submission_is_used(guc)) > flags |= GUC_CTL_DISABLE_SCHEDULER; > > + if (intel_uc_uses_guc_slpc(>->uc)) we should have intel_guc_uses_slpc() Thanks, Michal > + flags |= GUC_CTL_ENABLE_SLPC; > + > return flags; > } > > diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h b/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h > index 82534259b7ad..c3122ca5407b 100644 > --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h > +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h > @@ -95,6 +95,7 @@ > #define GUC_CTL_WA 1 > #define GUC_CTL_FEATURE 2 > #define GUC_CTL_DISABLE_SCHEDULER (1 << 14) > +#define GUC_CTL_ENABLE_SLPC BIT(2) > > #define GUC_CTL_DEBUG 3 > #define GUC_LOG_VERBOSITY_SHIFT 0 > 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=-15.4 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham 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 1B41AC636C9 for ; Wed, 21 Jul 2021 17:26:36 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 C57DA61241 for ; Wed, 21 Jul 2021 17:26:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C57DA61241 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id ECBA86E9AB; Wed, 21 Jul 2021 17:26:31 +0000 (UTC) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id A6FDF6E8E8; Wed, 21 Jul 2021 17:26:30 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10052"; a="297043190" X-IronPort-AV: E=Sophos;i="5.84,258,1620716400"; d="scan'208";a="297043190" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jul 2021 10:25:41 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,258,1620716400"; d="scan'208";a="511872281" Received: from irvmail001.ir.intel.com ([10.43.11.63]) by fmsmga002.fm.intel.com with ESMTP; 21 Jul 2021 10:25:40 -0700 Received: from [10.249.140.99] (mwajdecz-MOBL.ger.corp.intel.com [10.249.140.99]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id 16LHPceU029273; Wed, 21 Jul 2021 18:25:38 +0100 To: Vinay Belgaumkar , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org References: <20210721161120.24610-1-vinay.belgaumkar@intel.com> <20210721161120.24610-5-vinay.belgaumkar@intel.com> From: Michal Wajdeczko Message-ID: <4cd00217-6620-b766-9d2e-dce21ad4c1df@intel.com> Date: Wed, 21 Jul 2021 19:25:38 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0 Thunderbird/78.12.0 MIME-Version: 1.0 In-Reply-To: <20210721161120.24610-5-vinay.belgaumkar@intel.com> Content-Language: en-US Subject: Re: [Intel-gfx] [PATCH 04/14] drm/i915/guc/slpc: Adding SLPC communication interfaces X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" CgpPbiAyMS4wNy4yMDIxIDE4OjExLCBWaW5heSBCZWxnYXVta2FyIHdyb3RlOgo+IEFkZCBjb25z dGFudHMgYW5kIHBhcmFtcyB0aGF0IGFyZSBuZWVkZWQgdG8gY29uZmlndXJlIFNMUEMuCj4gCj4g djI6IEFkZCBhIG5ldyBhYmkgaGVhZGVyIGZvciBTTFBDLiBSZXBsYWNlIGJpdGZpZWxkcyB3aXRo Cj4gZ2VubWFza3MuIEFkZHJlc3Mgb3RoZXIgY29tbWVudHMgZnJvbSBNaWNoYWwgVy4KPiAKPiBT aWduZWQtb2ZmLWJ5OiBWaW5heSBCZWxnYXVta2FyIDx2aW5heS5iZWxnYXVta2FyQGludGVsLmNv bT4KPiBTaWduZWQtb2ZmLWJ5OiBTdW5kYXJlc2FuIFN1amFyaXRoYSA8c3VqYXJpdGhhLnN1bmRh cmVzYW5AaW50ZWwuY29tPgo+IC0tLQo+ICAuLi4vZHJtL2k5MTUvZ3QvdWMvYWJpL2d1Y19hY3Rp b25zX3NscGNfYWJpLmggfCAyMDEgKysrKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L3VjL2ludGVsX2d1Yy5jICAgICAgICB8ICAgNCArCj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L3VjL2ludGVsX2d1Y19md2lmLmggICB8ICAgMSArCj4gIDMgZmlsZXMgY2hhbmdl ZCwgMjA2IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L3VjL2FiaS9ndWNfYWN0aW9uc19zbHBjX2FiaS5oCj4gCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2FiaS9ndWNfYWN0aW9uc19zbHBjX2FiaS5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvYWJpL2d1Y19hY3Rpb25zX3NscGNfYWJpLmgKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMDVkODA5NzQ2YjMyCj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2FiaS9ndWNf YWN0aW9uc19zbHBjX2FiaS5oCj4gQEAgLTAsMCArMSwyMDEgQEAKPiArLyogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IE1JVCAqLwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAyMSBJbnRlbCBD b3Jwb3JhdGlvbgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX0dVQ19BQ1RJT05TX1NMUENfQUJJX0hf Cj4gKyNkZWZpbmUgX0dVQ19BQ1RJT05TX1NMUENfQUJJX0hfCj4gKwo+ICsjaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4KPiArCj4gKy8qKgo+ICsgKiBTTFBDIFNIQVJFRCBEQVRBIFNUUlVDVFVSRQoK aWYgeW91IHdhbnQgdG8gdXNlIGtlcm5lbC1kb2MsIHRoZW4gYWRkIERPQzogdGFnCgo+ICsgKgo+ ICsgKiAgKy0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICsgKiAgfCBDTHwgQnl0ZXMgfCBEZXNjcmlwdGlv biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsg KiAgKz09PSs9PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Kwo+ICsgKiAgfCAxIHwgMC0zICAgfCBTSEFSRUQgREFUQSBT SVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKiAg fCAgICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKwo+ICsgKiAgfCAgIHwgNC03ICAgfCBHTE9CQUwgU1RBVEUgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKiAgfCAg ICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKwo+ICsgKiAgfCAgIHwgOC0xMSAgfCBESVNQTEFZIERBVEEgQUREUkVT UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKiAgfCAgICst LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKwo+ICsgKiAgfCAgIHwgMTI6NjMgfCBQQURESU5HICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKiAgKy0tLSstLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKwo+ICsgKiAgfCAgIHwgMDo2MyAgfCBQQURESU5HKFBMQVRGT1JNIElORk8pICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKiAgKy0tLSstLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKwo+ICsgKiAgfCAzIHwgMC0zICAgfCBUQVNLIFNUQVRFIERBVEEgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKiAgKyAgICstLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKwo+ICsgKiAgfCAgIHwgNDo2MyAgfCBQQURESU5HICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKiAgKy0tLSstLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Kwo+ICsgKiAgfDQtMjEgMDoxMDg3fCBPVkVSUklERSBQQVJBTVMgQU5EIEJJVCBGSUVMRFMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgXl5eXl4Kc29tZXRoaW5nIGRpZG4n dCB3b3JrIGhlcmUKCj4gKyAqICArLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gKyAqICB8ICAgfCAgICAg ICB8IFBBRERJTkcgKyBFWFRSQSBSRVNFUlZFRCBQQUdFICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8Cj4gKyAqICArLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gKyAqLwo+ICsKPiArLyoKPiAr ICogU0xQQyBleHBvc2VzIGNlcnRhaW4gcGFyYW1ldGVycyBmb3IgZ2xvYmFsIGNvbmZpZ3VyYXRp b24gYnkgdGhlIGhvc3QuCj4gKyAqIFRoZXNlIGFyZSByZWZlcnJlZCB0byBhcyBvdmVycmlkZSBw YXJhbWV0ZXJzLCBiZWNhdXNlIGluIG1vc3QgY2FzZXMKPiArICogdGhlIGhvc3Qgd2lsbCBub3Qg bmVlZCB0byBtb2RpZnkgdGhlIGRlZmF1bHQgdmFsdWVzIHVzZWQgYnkgU0xQQy4KPiArICogU0xQ QyByZW1lbWJlcnMgdGhlIGRlZmF1bHQgdmFsdWVzIHdoaWNoIGFsbG93cyB0aGUgaG9zdCB0byBl YXNpbHkgcmVzdG9yZQo+ICsgKiB0aGVtIGJ5IHNpbXBseSB1bnNldHRpbmcgdGhlIG92ZXJyaWRl LiBUaGUgaG9zdCBjYW4gc2V0IG9yIHVuc2V0IG92ZXJyaWRlCj4gKyAqIHBhcmFtZXRlcnMgZHVy aW5nIFNMUEMgKHJlLSlpbml0aWFsaXphdGlvbiB1c2luZyB0aGUgU0xQQyBSZXNldCBldmVudC4K PiArICogVGhlIGhvc3QgY2FuIGFsc28gc2V0IG9yIHVuc2V0IG92ZXJyaWRlIHBhcmFtZXRlcnMg b24gdGhlIGZseSB1c2luZyB0aGUKPiArICogUGFyYW1ldGVyIFNldCBhbmQgUGFyYW1ldGVyIFVu c2V0IGV2ZW50cwo+ICsgKi8KPiArCj4gKyNkZWZpbmUgU0xQQ19NQVhfT1ZFUlJJREVfUEFSQU1F VEVSUwkJMjU2Cj4gKyNkZWZpbmUgU0xQQ19PVkVSUklERV9CSVRGSUVMRF9TSVpFIFwKPiArCQko U0xQQ19NQVhfT1ZFUlJJREVfUEFSQU1FVEVSUyAvIDMyKQo+ICsKPiArI2RlZmluZSBTTFBDX1BB R0VfU0laRV9CWVRFUwkJCTQwOTYKPiArI2RlZmluZSBTTFBDX0NBQ0hFTElORV9TSVpFX0JZVEVT CQk2NAo+ICsjZGVmaW5lIFNMUENfU0hBUkVEX0RBVEFfU0laRV9CWVRFX0hFQURFUglTTFBDX0NB Q0hFTElORV9TSVpFX0JZVEVTCj4gKyNkZWZpbmUgU0xQQ19TSEFSRURfREFUQV9TSVpFX0JZVEVf UExBVEZPUk1fSU5GTwlTTFBDX0NBQ0hFTElORV9TSVpFX0JZVEVTCj4gKyNkZWZpbmUgU0xQQ19T SEFSRURfREFUQV9TSVpFX0JZVEVfVEFTS19TVEFURQlTTFBDX0NBQ0hFTElORV9TSVpFX0JZVEVT Cj4gKyNkZWZpbmUgU0xQQ19TSEFSRURfREFUQV9NT0RFX0RFRk5fVEFCTEVfU0laRQlTTFBDX1BB R0VfU0laRV9CWVRFUwo+ICsjZGVmaW5lIFNMUENfU0hBUkVEX0RBVEFfU0laRV9CWVRFX01BWAkJ KDIgKiBTTFBDX1BBR0VfU0laRV9CWVRFUykKPiArI2RlZmluZSBTTFBDX0VWRU5UKGlkLCBhcmdj KQkJCSgodTMyKShpZCkgPDwgOCB8IChhcmdjKSkKPiArI2RlZmluZSBTTFBDX0VWRU5UX01BWF9J TlBVVF9BUkdTCQk5CgphYm92ZSB0d28gYXJlIGxpa2VseSB1c2VkIGluIEgyRyBTTFBDIG1lc3Nh Z2UgdGhhdCBpcyBub3QgZnVsbHkgZGVmaW5lZCwKbWF5YmUgYXQgdGhlIGVuZCBvZiB0aGlzIGZp bGUgYWRkIHNlcGFyYXRlIHNlY3Rpb24gd2l0aCBIMkcgZm9ybWF0LAp1c2luZyBwbGFpbiBDICNk ZWZpbmVzLCBhbmQgbW92ZSBTTFBDX0VWRU5UIGhlbHBlciBtYWNybyB0byBmd2lmLmgKCj4gKwo+ ICsvKgo+ICsgKiBDYWNoZWxpbmUgc2l6ZSBhbGlnbmVkIChUb3RhbCBzaXplIG5lZWRlZCBmb3IK PiArICogU0xQTV9LTURfTUFYX09WRVJSSURFX1BBUkFNRVRFUlM9MjU2IGlzIDEwODggYnl0ZXMp Cj4gKyAqLwo+ICsjZGVmaW5lIFNMUENfT1ZFUlJJREVfUEFSQU1TX1RPVEFMX0JZVEVTCSgoKCgo U0xQQ19NQVhfT1ZFUlJJREVfUEFSQU1FVEVSUyAqIDQpIFwKPiArCQkJCQkJKyAoKFNMUENfTUFY X09WRVJSSURFX1BBUkFNRVRFUlMgLyAzMikgKiA0KSkgXAo+ICsJCSsgKFNMUENfQ0FDSEVMSU5F X1NJWkVfQllURVMtMSkpIC8gU0xQQ19DQUNIRUxJTkVfU0laRV9CWVRFUykqU0xQQ19DQUNIRUxJ TkVfU0laRV9CWVRFUykKPiArCj4gKyNkZWZpbmUgU0xQQ19TSEFSRURfREFUQV9TSVpFX0JZVEVf T1RIRVIJKFNMUENfU0hBUkVEX0RBVEFfU0laRV9CWVRFX01BWCAtIFwKPiArCQkJCQkoU0xQQ19T SEFSRURfREFUQV9TSVpFX0JZVEVfSEVBREVSIFwKPiArCQkJCQkrIFNMUENfU0hBUkVEX0RBVEFf U0laRV9CWVRFX1BMQVRGT1JNX0lORk8gXAo+ICsJCQkJCSsgU0xQQ19TSEFSRURfREFUQV9TSVpF X0JZVEVfVEFTS19TVEFURSBcCj4gKwkJCQkJKyBTTFBDX09WRVJSSURFX1BBUkFNU19UT1RBTF9C WVRFUyBcCj4gKwkJCQkJKyBTTFBDX1NIQVJFRF9EQVRBX01PREVfREVGTl9UQUJMRV9TSVpFKSkK PiArCj4gK2VudW0gc2xwY190YXNrX2VuYWJsZSB7Cj4gKwlTTFBDX1BBUkFNX1RBU0tfREVGQVVM VCA9IDAsCj4gKwlTTFBDX1BBUkFNX1RBU0tfRU5BQkxFRCwKPiArCVNMUENfUEFSQU1fVEFTS19E SVNBQkxFRCwKPiArCVNMUENfUEFSQU1fVEFTS19VTktOT1dOCj4gK307Cj4gKwo+ICtlbnVtIHNs cGNfZ2xvYmFsX3N0YXRlIHsKPiArCVNMUENfR0xPQkFMX1NUQVRFX05PVF9SVU5OSU5HID0gMCwK PiArCVNMUENfR0xPQkFMX1NUQVRFX0lOSVRJQUxJWklORyA9IDEsCj4gKwlTTFBDX0dMT0JBTF9T VEFURV9SRVNFVFRJTkcgPSAyLAo+ICsJU0xQQ19HTE9CQUxfU1RBVEVfUlVOTklORyA9IDMsCj4g KwlTTFBDX0dMT0JBTF9TVEFURV9TSFVUVElOR19ET1dOID0gNCwKPiArCVNMUENfR0xPQkFMX1NU QVRFX0VSUk9SID0gNQo+ICt9Owo+ICsKPiArZW51bSBzbHBjX3BhcmFtX2lkIHsKPiArCVNMUENf UEFSQU1fVEFTS19FTkFCTEVfR1RQRVJGID0gMCwKPiArCVNMUENfUEFSQU1fVEFTS19ESVNBQkxF X0dUUEVSRiA9IDEsCj4gKwlTTFBDX1BBUkFNX1RBU0tfRU5BQkxFX0JBTEFOQ0VSID0gMiwKPiAr CVNMUENfUEFSQU1fVEFTS19ESVNBQkxFX0JBTEFOQ0VSID0gMywKPiArCVNMUENfUEFSQU1fVEFT S19FTkFCTEVfRENDID0gNCwKPiArCVNMUENfUEFSQU1fVEFTS19ESVNBQkxFX0RDQyA9IDUsCj4g KwlTTFBDX1BBUkFNX0dMT0JBTF9NSU5fR1RfVU5TTElDRV9GUkVRX01IWiA9IDYsCj4gKwlTTFBD X1BBUkFNX0dMT0JBTF9NQVhfR1RfVU5TTElDRV9GUkVRX01IWiA9IDcsCj4gKwlTTFBDX1BBUkFN X0dMT0JBTF9NSU5fR1RfU0xJQ0VfRlJFUV9NSFogPSA4LAo+ICsJU0xQQ19QQVJBTV9HTE9CQUxf TUFYX0dUX1NMSUNFX0ZSRVFfTUhaID0gOSwKPiArCVNMUENfUEFSQU1fR1RQRVJGX1RIUkVTSE9M RF9NQVhfRlBTID0gMTAsCj4gKwlTTFBDX1BBUkFNX0dMT0JBTF9ESVNBQkxFX0dUX0ZSRVFfTUFO QUdFTUVOVCA9IDExLAo+ICsJU0xQQ19QQVJBTV9HVFBFUkZfRU5BQkxFX0ZSQU1FUkFURV9TVEFM TElORyA9IDEyLAo+ICsJU0xQQ19QQVJBTV9HTE9CQUxfRElTQUJMRV9SQzZfTU9ERV9DSEFOR0Ug PSAxMywKPiArCVNMUENfUEFSQU1fR0xPQkFMX09DX1VOU0xJQ0VfRlJFUV9NSFogPSAxNCwKPiAr CVNMUENfUEFSQU1fR0xPQkFMX09DX1NMSUNFX0ZSRVFfTUhaID0gMTUsCj4gKwlTTFBDX1BBUkFN X0dMT0JBTF9FTkFCTEVfSUFfR1RfQkFMQU5DSU5HID0gMTYsCj4gKwlTTFBDX1BBUkFNX0dMT0JB TF9FTkFCTEVfQURBUFRJVkVfQlVSU1RfVFVSQk8gPSAxNywKPiArCVNMUENfUEFSQU1fR0xPQkFM X0VOQUJMRV9FVkFMX01PREUgPSAxOCwKPiArCVNMUENfUEFSQU1fR0xPQkFMX0VOQUJMRV9CQUxB TkNFUl9JTl9OT05fR0FNSU5HX01PREUgPSAxOSwKPiArCVNMUENfUEFSQU1fR0xPQkFMX1JUX01P REVfVFVSQk9fRlJFUV9ERUxUQV9NSFogPSAyMCwKPiArCVNMUENfUEFSQU1fUFdSR0FURV9SQ19N T0RFID0gMjEsCj4gKwlTTFBDX1BBUkFNX0VEUl9NT0RFX0NPTVBVVEVfVElNRU9VVF9NUyA9IDIy LAo+ICsJU0xQQ19QQVJBTV9FRFJfUU9TX0ZSRVFfTUhaID0gMjMsCj4gKwlTTFBDX1BBUkFNX01F RElBX0ZGX1JBVElPX01PREUgPSAyNCwKPiArCVNMUENfUEFSQU1fRU5BQkxFX0lBX0ZSRVFfTElN SVRJTkcgPSAyNSwKPiArCVNMUENfUEFSQU1fU1RSQVRFR0lFUyA9IDI2LAo+ICsJU0xQQ19QQVJB TV9QT1dFUl9QUk9GSUxFID0gMjcsCj4gKwlTTFBDX1BBUkFNX0lHTk9SRV9FRkZJQ0lFTlRfRlJF UVVFTkNZID0gMjgsCj4gKwlTTFBDX01BWF9QQVJBTSA9IDMyLAo+ICt9Owo+ICsKPiArZW51bSBz bHBjX2V2ZW50X2lkIHsKPiArCVNMUENfRVZFTlRfUkVTRVQgPSAwLAo+ICsJU0xQQ19FVkVOVF9T SFVURE9XTiA9IDEsCj4gKwlTTFBDX0VWRU5UX1BMQVRGT1JNX0lORk9fQ0hBTkdFID0gMiwKPiAr CVNMUENfRVZFTlRfRElTUExBWV9NT0RFX0NIQU5HRSA9IDMsCj4gKwlTTFBDX0VWRU5UX0ZMSVBf Q09NUExFVEUgPSA0LAo+ICsJU0xQQ19FVkVOVF9RVUVSWV9UQVNLX1NUQVRFID0gNSwKPiArCVNM UENfRVZFTlRfUEFSQU1FVEVSX1NFVCA9IDYsCj4gKwlTTFBDX0VWRU5UX1BBUkFNRVRFUl9VTlNF VCA9IDcsCj4gK307Cj4gKwo+ICtzdHJ1Y3Qgc2xwY190YXNrX3N0YXRlX2RhdGEgewo+ICsJdW5p b24gewo+ICsJCXUzMiB0YXNrX3N0YXR1c19wYWRkaW5nOwo+ICsJCXN0cnVjdCB7Cj4gKwkJCXUz MiBzdGF0dXM7Cj4gKyNkZWZpbmUgU0xQQ19HVFBFUkZfVEFTS19BQ1RJVkUJCUJJVCgwKQo+ICsj ZGVmaW5lIFNMUENfR1RQRVJGX1NUQUxMX1BPU1NJQkxFCUJJVCgxKQo+ICsjZGVmaW5lIFNMUENf R1RQRVJGX0dBTUlOR19NT0RFCQlCSVQoMikKPiArI2RlZmluZSBTTFBDX0dUUEVSRl9UQVJHRVRf RlBTCQlCSVQoMykKPiArI2RlZmluZSBTTFBDX0RDQ19UQVNLX0FDVElWRQkJQklUKDQpCj4gKyNk ZWZpbmUgU0xQQ19JTl9EQ0MJCQlCSVQoNSkKPiArI2RlZmluZSBTTFBDX0lOX0RDVAkJCUJJVCg2 KQo+ICsjZGVmaW5lIFNMUENfRlJFUV9TV0lUQ0hfQUNUSVZFCQlCSVQoNykKPiArI2RlZmluZSBT TFBDX0lCQ19FTkFCTEVECQlCSVQoOCkKPiArI2RlZmluZSBTTFBDX0lCQ19BQ1RJVkUJCQlCSVQo OSkKPiArI2RlZmluZSBTTFBDX1BHMV9FTkFCTEVECQlCSVQoMTApCj4gKyNkZWZpbmUgU0xQQ19Q RzFfQUNUSVZFCQkJQklUKDExKQo+ICsJCX07Cj4gKwl9Owo+ICsJdW5pb24gewo+ICsJCXUzMiBm cmVxX3BhZGRpbmc7Cj4gKwkJc3RydWN0IHsKPiArI2RlZmluZSBTTFBDX01BWF9VTlNMSUNFX0ZS RVFfTUFTSwlSRUdfR0VOTUFTSyg3LCAwKQo+ICsjZGVmaW5lIFNMUENfTUlOX1VOU0xJQ0VfRlJF UV9NQVNLCVJFR19HRU5NQVNLKDE1LCA4KQo+ICsjZGVmaW5lIFNMUENfTUFYX1NMSUNFX0ZSRVFf TUFTSwlSRUdfR0VOTUFTSygyMywgMTYpCj4gKyNkZWZpbmUgU0xQQ19NSU5fU0xJQ0VfRlJFUV9N QVNLCVJFR19HRU5NQVNLKDMxLCAyNCkKPiArCQkJdTMyIGZyZXE7Cj4gKwkJfTsKPiArCX07Cj4g K30gX19wYWNrZWQ7Cj4gKwo+ICtzdHJ1Y3Qgc2xwY19zaGFyZWRfZGF0YV9oZWFkZXIgewo+ICsJ LyogVG90YWwgc2l6ZSBpbiBieXRlcyBvZiB0aGlzIHNoYXJlZCBidWZmZXIuICovCj4gKwl1MzIg c2l6ZTsKPiArCXUzMiBnbG9iYWxfc3RhdGU7Cj4gKwl1MzIgZGlzcGxheV9kYXRhX2FkZHI7Cj4g K307CgpfX3BhY2tlZCA/Cgo+ICsKPiArc3RydWN0IHNscGNfb3ZlcnJpZGVfcGFyYW1zIHsKPiAr CXUzMiBiaXRzW1NMUENfT1ZFUlJJREVfQklURklFTERfU0laRV07Cj4gKwl1MzIgdmFsdWVzW1NM UENfTUFYX09WRVJSSURFX1BBUkFNRVRFUlNdOwo+ICt9OwoKX19wYWNrZWQgPwoKPiArCj4gK3N0 cnVjdCBzbHBjX3NoYXJlZF9kYXRhIHsKPiArCXN0cnVjdCBzbHBjX3NoYXJlZF9kYXRhX2hlYWRl ciBoZWFkZXI7Cj4gKwl1OCBzaGFyZWRfZGF0YV9oZWFkZXJfcGFkW1NMUENfU0hBUkVEX0RBVEFf U0laRV9CWVRFX0hFQURFUiAtCj4gKwkJCQlzaXplb2Yoc3RydWN0IHNscGNfc2hhcmVkX2RhdGFf aGVhZGVyKV07Cj4gKwo+ICsJdTggcGxhdGZvcm1faW5mb19wYWRbU0xQQ19TSEFSRURfREFUQV9T SVpFX0JZVEVfUExBVEZPUk1fSU5GT107Cj4gKwo+ICsJc3RydWN0IHNscGNfdGFza19zdGF0ZV9k YXRhIHRhc2tfc3RhdGVfZGF0YTsKPiArCXU4IHRhc2tfc3RhdGVfZGF0YV9wYWRbU0xQQ19TSEFS RURfREFUQV9TSVpFX0JZVEVfVEFTS19TVEFURSAtCj4gKwkJCQlzaXplb2Yoc3RydWN0IHNscGNf dGFza19zdGF0ZV9kYXRhKV07Cj4gKwo+ICsJc3RydWN0IHNscGNfb3ZlcnJpZGVfcGFyYW1zIG92 ZXJyaWRlX3BhcmFtcyA7Cj4gKwl1OCBvdmVycmlkZV9wYXJhbXNfcGFkW1NMUENfT1ZFUlJJREVf UEFSQU1TX1RPVEFMX0JZVEVTIC0KPiArCQkJCXNpemVvZihzdHJ1Y3Qgc2xwY19vdmVycmlkZV9w YXJhbXMpXTsKPiArCj4gKwl1OCBzaGFyZWRfZGF0YV9wYWRbU0xQQ19TSEFSRURfREFUQV9TSVpF X0JZVEVfT1RIRVJdOwo+ICsKPiArCS8qIFBBR0UgMiAoNDA5NiBieXRlcyksIG1vZGUgYmFzZWQg cGFyYW1ldGVyIHdpbGwgYmUgcmVtb3ZlZCBzb29uICovCj4gKwl1OCByZXNlcnZlZF9tb2RlX2Rl ZmluaXRpb25bNDA5Nl07Cj4gK30gX19wYWNrZWQ7Cj4gKwo+ICsjZW5kaWYKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC91Yy9pbnRlbF9ndWMuYwo+IGluZGV4IDM5YmMzYzE2MDU3Yi4uZmNjY2IxMDNh MjFhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Yy5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjLmMKPiBAQCAtMjAz LDExICsyMDMsMTUgQEAgc3RhdGljIHUzMiBndWNfY3RsX2RlYnVnX2ZsYWdzKHN0cnVjdCBpbnRl bF9ndWMgKmd1YykKPiAgCj4gIHN0YXRpYyB1MzIgZ3VjX2N0bF9mZWF0dXJlX2ZsYWdzKHN0cnVj dCBpbnRlbF9ndWMgKmd1YykKPiAgewo+ICsJc3RydWN0IGludGVsX2d0ICpndCA9IGd1Y190b19n dChndWMpOwo+ICAJdTMyIGZsYWdzID0gMDsKPiAgCj4gIAlpZiAoIWludGVsX2d1Y19zdWJtaXNz aW9uX2lzX3VzZWQoZ3VjKSkKPiAgCQlmbGFncyB8PSBHVUNfQ1RMX0RJU0FCTEVfU0NIRURVTEVS Owo+ICAKPiArCWlmIChpbnRlbF91Y191c2VzX2d1Y19zbHBjKCZndC0+dWMpKQoKd2Ugc2hvdWxk IGhhdmUgaW50ZWxfZ3VjX3VzZXNfc2xwYygpCgpUaGFua3MsCk1pY2hhbAoKPiArCQlmbGFncyB8 PSBHVUNfQ1RMX0VOQUJMRV9TTFBDOwo+ICsKPiAgCXJldHVybiBmbGFnczsKPiAgfQo+ICAKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2Z3aWYuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19md2lmLmgKPiBpbmRleCA4MjUz NDI1OWI3YWQuLmMzMTIyY2E1NDA3YiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC91Yy9pbnRlbF9ndWNfZndpZi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv dWMvaW50ZWxfZ3VjX2Z3aWYuaAo+IEBAIC05NSw2ICs5NSw3IEBACj4gICNkZWZpbmUgR1VDX0NU TF9XQQkJCTEKPiAgI2RlZmluZSBHVUNfQ1RMX0ZFQVRVUkUJCQkyCj4gICNkZWZpbmUgICBHVUNf Q1RMX0RJU0FCTEVfU0NIRURVTEVSCSgxIDw8IDE0KQo+ICsjZGVmaW5lICAgR1VDX0NUTF9FTkFC TEVfU0xQQwkJQklUKDIpCj4gIAo+ICAjZGVmaW5lIEdVQ19DVExfREVCVUcJCQkzCj4gICNkZWZp bmUgICBHVUNfTE9HX1ZFUkJPU0lUWV9TSElGVAkwCj4gCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=