From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6032BA04F3; Wed, 8 Jan 2020 16:13:17 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 395551DA7C; Wed, 8 Jan 2020 16:13:17 +0100 (CET) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id 876A71DA71 for ; Wed, 8 Jan 2020 16:13:15 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 08 Jan 2020 07:13:14 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,410,1571727600"; d="scan'208";a="218090771" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by fmsmga008.fm.intel.com with ESMTP; 08 Jan 2020 07:13:14 -0800 Received: from fmsmsx153.amr.corp.intel.com (10.18.125.6) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 8 Jan 2020 07:13:14 -0800 Received: from FMSEDG002.ED.cps.intel.com (10.1.192.134) by FMSMSX153.amr.corp.intel.com (10.18.125.6) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 8 Jan 2020 07:13:13 -0800 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.174) by edgegateway.intel.com (192.55.55.69) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 8 Jan 2020 07:13:14 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HwBH7Ns47k65QL0m67K4ztSpPJ/nM3/Y0+4jXUqS7YzVfK/OJNdO91oo4eqcVGwg8cp/i7kdvkknt2eT60Vz720ySWKTLj2JD2pSk8nijCO/k0TpAm7DSqPNMeBLM1MUnTfPhU0fMRJ1nkGYnqR+VGAAKtrzXj65qAh/SH/Hx5hRB9Iqfk7dNSVuOT5+TpazAatvSXR+7wG4ojiPggl3XiKMKHgxOFmAUVJbvMdKrNU3uZfunMUtO4zppcQl8R8GcUEZZGKTsjf1z9ariXjyY++cqyMXqgwXWUQMPDymdbWBkokJSg1ltYyLG3d3PAf54jdCZQCGboAsAmTeZzxxJg== 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=YKT9y0oU9FmAzphBDRbP24P58MaMu8VLG7SC8Y56dmE=; b=cf4LJSWdcY4F9E7Z4jK+FTNDenQJ2Le4q1B1OOKpELljjEEwnJWkF2CJA8MOZ7hoRAaQdTGRldCdgAJmCxIb6eYOaNfJ0IIUpD/tHtmGGkmZtm/K3yYclt0FkMdH+74wEnv4AaZ5XKvbvIt5HFsi8sWKtRUYEQXFtRB2exDX1DnQ+KRhjDDhs+MzKeHcIg3q+vo/N+Y/L0Rl3PS61C4zqjtJMPNj2EgBOMrxQJ656184vdAkTtuzMIV9iVbvkGp+WQbeukBOu/HQdiSy83Q0cLvrYUOw7rdO7KmJX9BuEtlcZ74qM2pwCyxrtZ86z94fqKXnjmR7JM6fl8KtMz7KXw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YKT9y0oU9FmAzphBDRbP24P58MaMu8VLG7SC8Y56dmE=; b=OabBx1WnOHmETUVyeg3F/RKHx1eeR+HNX+QyM7Wp+d/5LMC4suxgfYtCxN22cvRrV8gZYDBBFUZqDA5NJx3YNvMM9YA5TtQWapjtl+KgHRFurkT7UqarNLJmAT5yt/FXqLUySKxc7YP2JUUEwHMiWcz6+8MOBemqfUJ5UetvJs8= Received: from SN6PR11MB2558.namprd11.prod.outlook.com (52.135.94.19) by SN6PR11MB3456.namprd11.prod.outlook.com (52.135.113.76) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2623.9; Wed, 8 Jan 2020 15:12:58 +0000 Received: from SN6PR11MB2558.namprd11.prod.outlook.com ([fe80::4d86:362a:13c3:8386]) by SN6PR11MB2558.namprd11.prod.outlook.com ([fe80::4d86:362a:13c3:8386%7]) with mapi id 15.20.2623.008; Wed, 8 Jan 2020 15:12:58 +0000 From: "Ananyev, Konstantin" To: "Di, ChenxuX" , "dev@dpdk.org" CC: "Yang, Qiming" Thread-Topic: [dpdk-dev] [PATCH v6 3/4] net/ixgbe: cleanup Tx buffers Thread-Index: AQHVvvUp6LlAIfvCjkGBZ/4yGRUggKfSnF5QgAYOaoCABAZmYIAAsTkAgAA70ZCAAXM5gIAAL1tQgAFaaYCAAEs/wA== Date: Wed, 8 Jan 2020 15:12:58 +0000 Message-ID: References: <20191203055134.72874-1-chenxux.di@intel.com> <20191230093840.17701-1-chenxux.di@intel.com> <20191230093840.17701-4-chenxux.di@intel.com> <3B926E44943CB04AA3A39AC16328CE39B9262D@SHSMSX101.ccr.corp.intel.com> <3B926E44943CB04AA3A39AC16328CE39B93D08@SHSMSX101.ccr.corp.intel.com> <3B926E44943CB04AA3A39AC16328CE39B9440F@SHSMSX101.ccr.corp.intel.com> <3B926E44943CB04AA3A39AC16328CE39B94811@SHSMSX101.ccr.corp.intel.com> In-Reply-To: <3B926E44943CB04AA3A39AC16328CE39B94811@SHSMSX101.ccr.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiODdhYzM5NGUtMTk2My00NDJjLThhODUtMDQ4YWM1ZTdlYjU2IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoicUZNdGFReXFMSjJ2cFwvYnFzazh4TkRtMlZHNTNwNlh5VUFGbUplSjZ2S21Ba3FSQUtVeWxwU3gxYkFuUnlLMTcifQ== dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.2.0.6 x-ctpclassification: CTP_NT authentication-results: spf=none (sender IP is ) smtp.mailfrom=konstantin.ananyev@intel.com; x-originating-ip: [192.198.151.163] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 75fbb645-28dd-4752-6a61-08d7944d3ee2 x-ms-traffictypediagnostic: SN6PR11MB3456: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3383; x-forefront-prvs: 02760F0D1C x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(39860400002)(396003)(346002)(376002)(136003)(366004)(13464003)(189003)(199004)(7696005)(6506007)(71200400001)(81156014)(186003)(478600001)(8676002)(81166006)(5660300002)(52536014)(30864003)(316002)(53546011)(76116006)(8936002)(33656002)(66476007)(2906002)(66556008)(66946007)(107886003)(9686003)(4326008)(55016002)(26005)(64756008)(66446008)(110136005)(86362001)(579004); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR11MB3456; H:SN6PR11MB2558.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: S1H+N1nNC9Q/GwRz938INvd+bdW2Q7DELtPHW0ATwQGbWDbjrvZg7k+IA3Pxde/Yie686TDGrs95eqzu+k225nRWj8s+zmxzWYR6pOnOpWWS0ziVU0+EWBmx+467iHBnIyj7JOKJkRvbGPs1uSJZMv08C85IUQZjwRWYr6byV5flWkXpVjWwkuFruQFeXZNKIa5Y67LcIzVl3v4tRMwgbuPKEI/6GyHlJ61VEHZGc2AEg6xGWU1N9skXQ9bwOEltjyxrqKV/jJHN/0RUBmDCfn53Zd+cUXb1EQ2WPi5ZMODg4wiziZyeqx8L4ctKiOgG4IzMDOS0a15nBDfLcT6FC8wCyv7IzFkZ5QLDvkzIsrdxTWfUXhNjBPYsaQBk81sNhcd0lhk7v0zPMPgq2HFg/QqCgxTHB8z4D2Ba04xG49ZThnRBSvgGfCh3KgACIdzQIdDJ+f4JsTVIv8rPNukDp2flRZfPdTkB6B7/vX0PaJf9qw9QCOFBl2Z/jKvv3c0K Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 75fbb645-28dd-4752-6a61-08d7944d3ee2 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Jan 2020 15:12:58.3113 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: yfG9d7RcwhJoVOy6nUzEbEWN9dBAX2FXdPdqUEB4HoblZKX1YIIKacJXHAlgZKVw+oHgGkNH/qJz7MZOHnYGwDCsLeVvS29um2yvno9Qicc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB3456 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v6 3/4] net/ixgbe: cleanup Tx buffers X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" DQpIaSBDaGVueHUsDQogDQo+IFRoYW5rcyBmb3IgeW91ciByZWFkLg0KPiANCj4gZm9yIG91ciBy ZXNlYXJjaCwgd2UgZG9uJ3QgdGhpbmsgaXQgaXMgYSBnb29kIHBsYW4gdGhhdCByZXVzZSBpeGdi ZV94bWl0X2NsZWFudXAoKSBvciBpeGdiZV90eF9mcmVlX2J1ZnMuDQo+IGZvbGxvd2luZyB0d28g b3BpbmlvbiB3aWxsIHNob3cgdGhlIHJlYXNvbi4NCg0KSSB0aGluayB0aGVyZSBpcyBhIG1haW4g bWlzdW5kZXJzdGFuZGluZ3MgYmV0d2VlbiB1czoNCg0KVFhELkREIGJpdCBzZXR0aW5nLg0KWW91 IGV4cGVjdCB0aGF0IGZvciBldmVyeSBjb21wbGV0ZWQgcGFja2V0IHBhY2tldCBIVyB3aWxsIHNl dCBERCBiaXQuDQpGb3IgaXhnYmUgaXQgaXMgbm90IHRoZSBjYXNlLg0KRm9yIGl4Z2JlIChhbmQg QUZBSUsgZm9yIGk0MGUpIHdlIGRvbid0IHNldCBSUyBiaXQgZm9yIGV2ZXJ5IHBhY2tldC4NCklu c3RlYWQgd2Ugc2V0IGl0IGZvciBhIGJ1bmNoIG9mIHBhY2tldHM6IHR4X3JzX3RocmVzaCB2YWx1 ZS4NClRoYXQncyBvbmUgb2YgdGhlIG9wdGltaXphdGlvbnMgaXhnYmUgUE1EIGRvZXMuDQpTbyB2 YWxpZCBhc3N1bXB0aW9uIGlzIHRvIGNoZWNrIEREIGJpdCBvbmx5IGZvciBUWERzIHdoZXJlIFJT IGJpdCBpcyBzZXQuDQpUaGF0J3MgaG93IGJvdGggaXhnYmVfeG1pdF9jbGVhbnVwKCkgb3IgaXhn YmVfdHhfZnJlZV9idWZzKCkgd29ya3MuDQpBbGwgVFhEcyBiZXR3ZWVuIGxhc3RfZGVzY19jbGVh bmVkIGFuZCBkZXNjX3RvX2NsZWFuX3RvDQoob3IgYmV0d2VlbiB0eF9uZXh0X2RkIGFuZCB0eF9u ZXh0X2RkICsgdHhfcnNfdGhyZXNoKSBhcmUgY29uc2lkZXJlZCANCmJ5IFBNRCBhcyAnc3RpbGwg YnVzeScsIGV2ZW4gaW4gcmVhbGl0eSBzb21lIG9mIHRoZW0gbWlnaHQgYWxyZWFkeSBiZSBub3Qu IA0KDQpZZXMsIGl0IG1lYW5zIHRoYXQgaW4gc29tZSBjYXNlcyBzb21lIG9mIHRoZW0gbWJ1ZnMg d2lsbCBiZSBjb25zaWRlcmVkDQpieSBQTUQgYXMgc3RpbGwgaW4gdXNlLCB3aGlsZSB0aGV5IGFy ZSByZWFsbHkgbm90Lg0KQnV0IEkgZG9uJ3QgdGhpbmsgaXQgaXMgYSBjcml0aWNhbCB0aGluZy4N CkhhdmluZyBUWEQgYW5kIHJlbGF0ZWQgbWJ1ZnMgbWFuYWdlbWVudCBsb2dpYyB3aXRoaW4gUE1E DQpjb25zaXN0ZW50IGlzIG11Y2ggbW9yZSBpbXBvcnRhbnQuDQogDQpJbiBvdGhlciB3b3Jkcywg SSBzdGlsbCB0aGluayByZXVzaW5nIGV4aXRpbmcgZnVuY3Rpb25zDQooaXhnYmVfeG1pdF9jbGVh bnVwKCkgYW5kIGl4Z2JlX3R4X2ZyZWVfYnVmcykgZm9yIHR4X2NsZWFudXBfZG9uZSgpDQppcyBh IGJldHRlciBvcHRpb24gdGhlbiB0cnlpbmcgdG8gY3JlYXRlIG5ldyBvbmVzLiANCg0KQlRXLCBh cyBhIHNpZGUgcXVlc3Rpb24sIGRvIHlvdSBndXlzIGhhdmUgYW55IHZlaGljbGUgdG8gdGVzdCB0 aGVzZSBmdW5jdGlvbnM/DQpBRkFJSywgcmlnaHQgbm93IHRoaXMgZnVuY3Rpb24gaXMgbm90IGNh bGxlZCBmcm9tIGFueSBhcHA6DQpmaW5kICBhcHAgZXhhbXBsZXMvIC10eXBlIGYgLW5hbWUgJyou W2gsY10nIHwgeGFyZ3MgZ3JlcCAtbCBydGVfZXRoX3R4X2RvbmVfY2xlYW51cA0KPGVtcHR5Pg0K DQo+IA0KPiBmaXJzdCwgaXQgZG9lc24ndCBzb2x2ZSB0aGUgaXNpdHVhdGlvbnMgd2hlbiBjbnQg JSByc190aHJlc2ggIT0gMCBldmVuIGJ5IHVzaW5nIHlvdXIgcGxhbi4NCj4gDQo+IEZvciBleGFt cGxlLCB0aGUgcGFyYW1ldGVycyBvZiBBUEkgcnRlX2V0aF90eF9kb25lX2NsZWFudXAgZnJlZV9j bnQ9MCwgdGhhdCBtZWFucyB3ZSB3YW50IHRvIGZyZWUgYWxsIHBvc3NpYmxlIG1idWZzKG9uZSBt YnVmIHBlcg0KPiBwYWNrZXQpLiB3ZSBmaW5kIGl0IGFmdGVyIGNoZWNraW5nIHRoYXQNCj4gTm8u MTggbWJ1ZiBzdGF0dXMgaXMgREQsIGFuZCB0aGUgc3RhdHVzIG9mIG1idWYgYWZ0ZXIgTm8uMTkg aXMgaW4gdXNlLg0KPiANCj4gSWYgdGhlIHBsYW4gaXMgdGhhdCBjYWxsIGl4Z2JlX3htaXRfY2xl YW51cCgpIGNudCAvcnNfdGhyZXNoICsgMSB0aW1lcyggMSBpbiB0aGlzIGV4YW1wbGUpLg0KPiBB ZnRlciBpeGdiZV94bWl0X2NsZWFudXAoKSAgdGhlIHZhbHVlIG9mIGxhc3RfZGVzY19jbGVhbmVk IGlzIG5vdCBzYW1lIGFzIHRoZSBhY3R1YWwuDQo+IHRoZSBmdW5jdGlvbiBpeGdiZV94bWl0X3Br dHMgd2lsbCBjYWxsIGl4Z2JlX3htaXRfY2xlYW51cCBhdXRvbWF0aWNhbGx5IHdoZW4gbmJfdHhf ZnJlZTx0eF9mcmVlX3RocmVzaCwgbWJ1ZnMgYmVmb3JlIGxhc3RfZGVzY19jbGVhbmVkDQo+IChO by4xOX5Oby4zMSBmb3IgdGhpcyBleGFtcGxlKXdpbGwgbm90IGJlIGZyZWVkDQo+IA0KPiBob3dl dmVyLCBhbGwgb2YgYWJvdmUgaXMgZm9yIGl4Z2JlX3htaXRfcGt0cygpIGFuZCBpeGdiZV94bWl0 X2NsZWFudXAoKS4gaWYgdGhhdCBmb3IgaXhnYmVfeG1pdF9wa3RzX3NpbXBsZSgpIGFuZCBpeGdi ZV90eF9mcmVlX2J1ZnMoKSxpdA0KPiBtYXkgYmUgd29yc2UuDQo+IGJlY2F1c2UgdGhlIGZyZWUg YnVmZiBhY3Rpb24gaXMgaW4gdGhlIGZ1bmN0aW9uIGl4Z2JlX3R4X2ZyZWVfYnVmcywgd2Ugd29u J3QgIGRvIGZyZWUgaW4gdGhlIG91dHNpZGUgY29kZS4gQW5kICBubyBtYnVmcyB3aWxsIGJlIGZy ZWVkLg0KPiANCj4gSWYgeW91IGRvIGZyZWUgaW4gb3V0c2lkZSBjb2RlIGZvciB0aGUgTU9EIG1i dWZzIGFuZCB1cGRhdGUgdGhlIHZhbHVlIG9mIHR4X25leHRfZGQgYW5kIG5iX3R4X2ZyZWUuIHRo ZXJlIGlzIG5vIG5lZWQgdG8gY2FsbA0KPiBpeGdiZV90eF9mcmVlX2J1ZnMuDQo+IA0KPiBoZXJl IGlzIHR3byBjYXNlIGFib3V0IHR4X2RvbmVfY2xlYW51cCBhbmQgaXhnYmVfdHhfZnJlZV9idWZz LiBpdCBtYXkgYmUgbW9yZSBkZXRhaWwNCj4gDQo+IENhc2UgMQ0KPiBTdGF0dXM6DQo+IAlTdXBw b3NlIGJlZm9yZSBjYWxsaW5nIHR4X2RvbmVfY2xlYW51cCguLi4sIHVpbnQzMl90IGNudCksIHR4 cSBzdGF0dXMgYXJlIGFzIGZvbGxvd2luZ3MuDQo+IA0KPiAJb25lIG1idWYgcGVyIHBhY2tldA0K PiAJdHhxLT50eF9yc190aHJlc2ggPSAzMjsNCj4gCWNsZWFuIG1idWYgZnJvbSBpbmRleCBpZA0K PiAJdHhyW2lkKzldLndiLnN0YXR1cyAmIElYR0JFX1RYRF9TVEFUX0REICE9IDAuICAgLy8gbWVh bnMgd2UgY2xvdWQgZnJlZSAxMCBwYWNrZXRzDQo+IAl0eHJbaWQrMzFdLndiLnN0YXR1cyAmIElY R0JFX1RYRF9TVEFUX0REID09IDAuICAvLyBtZWFucyB3ZSBjbG91ZCBub3QgY2xlYW4gMzIgcGFj a2V0cw0KPiANCj4gUHJvY2VzcyBGbG93Og0KPiAJdHhfZG9uZV9jbGVhbnVwKC4uLiwgMTApIGJl IGludm9rZWQgdG8gZnJlZSAxMCBwYWNrZXRzLg0KPiAJRmlyc3RseSAsdHhfZG9uZV9jbGVhbnVw IHdpbGwgaW52b2tlIGl4Z2JlX3htaXRfY2xlYW51cCB0byBjb3VudCBob3cgbWFueSBtYnVmcyBj b3VsZCBmcmVlLg0KPiAJQnV0IGl4Z2JlX3htaXRfY2xlYW51cCB3aWxsIHJldHVybiAtMSAobWVh bnMgbm8gbWJ1ZnMgdG8gZnJlZSksIHBsZWFzZSByZWYgY29kZSBiZWxsb3cNCj4gDQo+IAlzdGF0 dXMgPSB0eHJbZGVzY190b19jbGVhbl90b10ud2Iuc3RhdHVzOw0KPiAJaWYgKCEoc3RhdHVzICYg cnRlX2NwdV90b19sZV8zMihJWEdCRV9UWERfU1RBVF9ERCkpKSB7DQo+IAkJUE1EX1RYX0ZSRUVf TE9HKERFQlVHLA0KPiAJCQkJIlRYIGRlc2NyaXB0b3IgJTR1IGlzIG5vdCBkb25lIg0KPiAJCQkJ Iihwb3J0PSVkIHF1ZXVlPSVkKSIsDQo+IAkJCQlkZXNjX3RvX2NsZWFuX3RvLA0KPiAJCQkJdHhx LT5wb3J0X2lkLCB0eHEtPnF1ZXVlX2lkKTsNCj4gCQkvKiBGYWlsZWQgdG8gY2xlYW4gYW55IGRl c2NyaXB0b3JzLCBiZXR0ZXIgbHVjayBuZXh0IHRpbWUgKi8NCj4gCQlyZXR1cm4gLSgxKTsNCj4g CX0NCj4gDQo+IFJlc3VsdDoNCj4gCVdlIGRvIG5vdGhpbmcNCj4gDQo+IEV4cGVjdDoNCj4gCUZy ZWUgMTAgcGFja2V0cy4NCj4gDQo+IFRob3VnaHRzOg0KPiAJSWYgd2UgdHJ5IHRvIGNoZWNrIHN0 YXR1cyBmcm9tIHR4cltpZF0ud2Iuc3RhdHVzIHRvIHR4cltpZCszMV0ud2Iuc3RhdHVzIG9uZSBi eSBvbmUsIHdlIGNvdWxkIGZpbmQgdHhyW2lkXS53Yi5zdGF0dXMsDQo+IHR4cltpZCsxXS53Yi5z dGF0dXMsIHR4cltpZCsyXS53Yi5zdGF0dXMg4oCm4oCmdHhyW2lkKzldLndiLnN0YXR1cywgYWxs IG9mIHRoZW0gc3RhdHVzIGFyZSBJWEdCRV9UWERfU1RBVF9ERCwgc28gYWN0dWFsbHkgd2UgaGF2 ZSB0aGUgYWJpbGl0eQ0KPiB0byBmcmVlIDEwIHBhY2tldHMuDQo+IA0KPiANCj4gDQo+IENhc2Ug MjoNCj4gU3RhdHVzOg0KPiAJU3VwcG9zZSBiZWZvcmUgY2FsbGluZyB0eF9kb25lX2NsZWFudXAo Li4uLCB1aW50MzJfdCBjbnQpLCB0eHEgc3RhdHVzIGFyZSBhcyBmb2xsb3dpbmdzLg0KPiANCj4g CW9uZSBtYnVmIHBlciBwYWNrZXQNCj4gCXR4cS0+dHhfcnNfdGhyZXNoID0gMzI7DQo+IAljbGVh biBtYnVmIGZyb20gaW5kZXggaWQNCj4gCXR4cltpZCszMV0ud2Iuc3RhdHVzICYgSVhHQkVfVFhE X1NUQVRfREQgIT0gMC4gICAvLyBtZWFucyB3ZSBjbG91ZCBmcmVlIDMyIHBhY2tldHMNCj4gDQo+ IFByb2Nlc3MgRmxvdzoNCj4gCXR4X2RvbmVfY2xlYW51cCguLi4sIDEwKSBiZSBpbnZva2VkIHRv IGZyZWUgMTAgcGFja2V0cy4NCj4gCVdoZW4gdHhfZG9uZV9jbGVhbnVwIGludm9rZSBpeGdiZV90 eF9mcmVlX2J1ZnMgZnJlZSBidWZzLCBpdCB3aWxsIGZyZWUgMzIgcGFja2V0cy4uDQo+IA0KPiBS ZXN1bHQ6DQo+IAlGcmVlIDMyIHBhY2tldHMuDQo+IA0KPiBFeHBlY3Q6DQo+IAlGcmVlIDEwIHBh Y2tldHMuDQo+IA0KPiBUaG91Z2h0czoNCj4gCUlmIHdlIHRyeSB0byBjaGVjayBzdGF0dXMgZnJv bSB0eHJbaWRdLndiLnN0YXR1cyB0byB0eHJbaWQrMzFdLndiLnN0YXR1cyBvbmUgYnkgb25lLCB3 ZSBjb3VsZCBmaW5kIHR4cltpZF0ud2Iuc3RhdHVzLA0KPiB0eHJbaWQrMV0ud2Iuc3RhdHVzLCB0 eHJbaWQrMl0ud2Iuc3RhdHVzIOKApuKApnR4cltpZCsxMF0ud2Iuc3RhdHVzLCBhbGwgb2YgdGhl bSBzdGF0dXMgYXJlIElYR0JFX1RYRF9TVEFUX0RELCBzbyB3ZSBoYXZlIHRoZSBhYmlsaXR5IHRv IGZyZWUNCj4gMTAgcGFja2V0cyBvbmx5Lg0KPiANCj4gDQo+IA0KPiANCj4gIHNlY29uZCwgd2Ug aGF2ZSBhIGxvdCBvZiBjb2RlcyB3aGF0IGlzIHNhbWUgYXMgaXQgaW4gZnVuY3Rpb24gaXhnYmVf eG1pdF9jbGVhbnVwLg0KPiANCj4gDQo+ICB3ZSBkbyBhbmFseXNpcyBmb3IgZnVuY3Rpb24gaXhn YmVfdHhfZnJlZV9idWZzIGFuZCBpeGdiZV94bWl0X2NsZWFudXAgYW5kIHNlZ21lbnQgdGhlaXIg YWN0aW9ucy4NCj4gIHRoZSBhY3R1YWwgYWN0aW9uIG9mIGNvZGVzIGFyZSBmb2xsb3dpbmcgcG9p bnRzOg0KPiAxLiBEZXRlcm1pbmUgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBmcmVlIGFjdGlv bi4NCj4gMi4gQ2hlY2sgd2hldGhlciB0aGUgc3RhdHVzIG9mIHRoZSBlbmQgcG9zaXRpb24gaXMg REQNCj4gMy4gRnJlZSAoIHNldCBzdGF0dXM9MCBpbiB4bWl0X2NsZWFudXAoKSB3aGlsZSBjYWxs IHJ0ZV9tZW1wb29sX3B1dF9idWxrKCkgaW4gdHhfZnJlZV9idWZzKCkpDQo+IDQuIFVwZGF0ZSBs b2NhdGlvbiB2YXJpYWJsZXMoIGxhc3RfZGVzY19jbGVhbmVkIGluIHhtaXRfY2xlYW51cCgpIGFu ZCAgdHhfbmV4dF9kZCAgaW4gdHhfZnJlZV9idWZzKCkgYW5kIG5iX3R4X2ZyZWUgaW4gYm90aCku DQo+IA0KPiBJZiByZXVzZSBpeGdiZV94bWl0X2NsZWFudXAsIHdlIG5lZWQgZ2V0IHRoZSBudW1i ZXIgb2YgbWJ1ZnMgYmVmb3JlIGNhbGxpbmcgaXhnYmVfeG1pdF9jbGVhbnVwKCkNCj4gV2UgYWxz byBuZWVkIHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIGFjdGlvbnM6DQo+IDEuIERldGVybWlu ZSB0aGUgc3RhcnRpbmcgcG9zaXRpb24NCj4gMi4gRmluZCB0aGUgbGFzdCBtYnVmIG9mIGVhY2gg UEtUIGFuZCBjb25maXJtIHdoZXRoZXIgaXRzIHN0YXR1cyBpcyBERA0KPiAzLiBGcmVlIChkb24n dCBkbyBmb3IgdHhfZnJlZV9idWZzKCkpDQo+IDQuIGNhbGwgeG1pdF9jbGVhbnVwIGZ1bmN0aW9u IGluIGxvb3AuDQo+IA0KPiBCeSBjb21wYXJpc29uLCBpdCBpcyBwb3NzaWJsZSB0byBzZWUgdGhh dCAzLzQgZnVuY3Rpb25zIG9mIGl4Z2JlX3htaXRfY2xlYW51cCBhcmUgYWxyZWFkeSBiZWluZyBj YWxsZWQgYmVmb3JlLA0KPiBpdCBtZWFucyB0aGF0IGl4Z2JlX3htaXRfY2xlYW51cCBpcyBub3Qg aGlnaGx5IHJldXNhYmxlLCB0aGUgcmVwZWF0IGNvZGVzIGlzIHNvIG1hbnkuDQo+IA0KPiANCj4g Zm9sbG93aW5nIGNvZGUgaXMgdGhlIG1haW4gY29kZSBpbiBpeGdiZV94bWl0X2NsZWFudXAoKSBh bmQgdGhlIGFjdGlvbiBjb2RlLg0KPiANCj4gIDEuDQo+IAlsYXN0X2Rlc2NfY2xlYW5lZCA9IHR4 cS0+bGFzdF9kZXNjX2NsZWFuZWQ7DQo+IA0KPiAgMi4NCj4gCS8qIERldGVybWluZSB0aGUgbGFz dCBkZXNjcmlwdG9yIG5lZWRpbmcgdG8gYmUgY2xlYW5lZCAqLw0KPiAJZGVzY190b19jbGVhbl90 byA9ICh1aW50MTZfdCkobGFzdF9kZXNjX2NsZWFuZWQgKyB0eHEtPnR4X3JzX3RocmVzaCk7DQo+ IAlpZiAoZGVzY190b19jbGVhbl90byA+PSBuYl90eF9kZXNjKQ0KPiAJCWRlc2NfdG9fY2xlYW5f dG8gPSAodWludDE2X3QpKGRlc2NfdG9fY2xlYW5fdG8gLSBuYl90eF9kZXNjKTsNCj4gDQo+IAkv KiBDaGVjayB0byBtYWtlIHN1cmUgdGhlIGxhc3QgZGVzY3JpcHRvciB0byBjbGVhbiBpcyBkb25l ICovDQo+IAlkZXNjX3RvX2NsZWFuX3RvID0gc3dfcmluZ1tkZXNjX3RvX2NsZWFuX3RvXS5sYXN0 X2lkOw0KPiAJc3RhdHVzID0gdHhyW2Rlc2NfdG9fY2xlYW5fdG9dLndiLnN0YXR1czsNCj4gCWlm ICghKHN0YXR1cyAmIHJ0ZV9jcHVfdG9fbGVfMzIoSVhHQkVfVFhEX1NUQVRfREQpKSkgew0KPiAJ CVBNRF9UWF9GUkVFX0xPRyhERUJVRywNCj4gCQlyZXR1cm4gLSgxKTsNCj4gCX0NCj4gMy4NCj4g CS8qIEZpZ3VyZSBvdXQgaG93IG1hbnkgZGVzY3JpcHRvcnMgd2lsbCBiZSBjbGVhbmVkICovDQo+ IAlpZiAobGFzdF9kZXNjX2NsZWFuZWQgPiBkZXNjX3RvX2NsZWFuX3RvKQ0KPiAJCW5iX3R4X3Rv X2NsZWFuID0gKHVpbnQxNl90KSgobmJfdHhfZGVzYyAtIGxhc3RfZGVzY19jbGVhbmVkKSArDQo+ IAkJCQkJCQlkZXNjX3RvX2NsZWFuX3RvKTsNCj4gCWVsc2UNCj4gCQluYl90eF90b19jbGVhbiA9 ICh1aW50MTZfdCkoZGVzY190b19jbGVhbl90byAtDQo+IAkJCQkJCWxhc3RfZGVzY19jbGVhbmVk KTsNCj4gCXR4cltkZXNjX3RvX2NsZWFuX3RvXS53Yi5zdGF0dXMgPSAwOw0KPiA0Lg0KPiAJLyog VXBkYXRlIHRoZSB0eHEgdG8gcmVmbGVjdCB0aGUgbGFzdCBkZXNjcmlwdG9yIHRoYXQgd2FzIGNs ZWFuZWQgKi8NCj4gCXR4cS0+bGFzdF9kZXNjX2NsZWFuZWQgPSBkZXNjX3RvX2NsZWFuX3RvOw0K PiAJdHhxLT5uYl90eF9mcmVlID0gKHVpbnQxNl90KSh0eHEtPm5iX3R4X2ZyZWUgKyBuYl90eF90 b19jbGVhbik7DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ID4gLS0tLS1P cmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiBBbmFueWV2LCBLb25zdGFudGluDQo+ID4g U2VudDogVHVlc2RheSwgSmFudWFyeSA3LCAyMDIwIDEwOjEwIFBNDQo+ID4gVG86IERpLCBDaGVu eHVYIDxjaGVueHV4LmRpQGludGVsLmNvbT47IGRldkBkcGRrLm9yZw0KPiA+IENjOiBZYW5nLCBR aW1pbmcgPHFpbWluZy55YW5nQGludGVsLmNvbT4NCj4gPiBTdWJqZWN0OiBSRTogW2RwZGstZGV2 XSBbUEFUQ0ggdjYgMy80XSBuZXQvaXhnYmU6IGNsZWFudXAgVHggYnVmZmVycw0KPiA+DQo+ID4N Cj4gPiBIaSBDaGVueHUsDQo+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ICsgKiB0eF90YWlsIGlzIHRo ZSBsYXN0IHNlbnQgcGFja2V0IG9uIHRoZSBzd19yaW5nLiBHb3RvDQo+ID4gPiA+ID4gPiA+ID4g PiArIHRoZSBlbmQNCj4gPiA+ID4gPiA+ID4gPiA+ICsgKiBvZiB0aGF0IHBhY2tldCAodGhlIGxh c3Qgc2VnbWVudCBpbiB0aGUgcGFja2V0IGNoYWluKQ0KPiA+ID4gPiA+ID4gPiA+ID4gKyBhbmQN Cj4gPiA+ID4gPiA+ID4gPiA+ICsgKiB0aGVuIHRoZSBuZXh0IHNlZ21lbnQgd2lsbCBiZSB0aGUg c3RhcnQgb2YgdGhlIG9sZGVzdA0KPiA+ID4gPiA+ID4gPiA+ID4gKyBzZWdtZW50DQo+ID4gPiA+ ID4gPiA+ID4gPiArICogaW4gdGhlIHN3X3JpbmcuDQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4g PiA+ID4gPiBOb3Qgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNlbnRlbmNlIGFib3ZlLg0KPiA+ID4g PiA+ID4gPiA+IHR4X3RhaWwgaXMgdGhlIHZhbHVlIG9mIFREVCBIVyByZWdpc3RlciAobW9zdCBy ZWNlbnRseSBhcm1lZCBieSBTVw0KPiA+IFREKS4NCj4gPiA+ID4gPiA+ID4gPiBsYXN0X2lkICBp cyB0aGUgaW5kZXggb2YgbGFzdCBkZXNjcmlwdG9yIGZvciBtdWx0aS1zZWcgcGFja2V0Lg0KPiA+ ID4gPiA+ID4gPiA+IG5leHRfaWQgaXMganVzdCB0aGUgaW5kZXggb2YgbmV4dCBkZXNjcmlwdG9y IGluIEhXIFREIHJpbmcuDQo+ID4gPiA+ID4gPiA+ID4gSG93IGRvIHlvdSBjb25jbHVkZSB0aGF0 IGl0IHdpbGwgYmUgdGhlICcgb2xkZXN0IHNlZ21lbnQgaW4gdGhlDQo+ID4gc3dfcmluZyc/DQo+ ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gVGhlIHR4X3RhaWwg aXMgdGhlIGxhc3Qgc2VudCBwYWNrZXQgb24gdGhlIHN3X3JpbmcuIFdoaWxlIHRoZQ0KPiA+ID4g PiA+ID4gPiB4bWl0X2NsZWFudXAgb3IgVHhfZnJlZV9idWZzIHdpbGwgYmUgY2FsbCB3aGVuIHRo ZSBuYl90eF9mcmVlDQo+ID4gPiA+ID4gPiA+IDwNCj4gPiA+ID4gPiA+IHR4X2ZyZWVfdGhyZXNo IC4NCj4gPiA+ID4gPiA+ID4gU28gdGhlIHN3X3JpbmdbdHhfdGFpbF0ubmV4dF9pZCBtdXN0IGJl IHRoZSBiZWdpbiBvZiBtYnVmcw0KPiA+ID4gPiA+ID4gPiB3aGljaCBhcmUgbm90IHVzZWQgb3Ig IEFscmVhZHkgZnJlZWQgLiB0aGVuIGJlZ2luIHRoZSBsb29wDQo+ID4gPiA+ID4gPiA+IHVudGls IHRoZSBtYnVmIGlzIHVzZWQgYW5kDQo+ID4gPiA+ID4gPiBiZWdpbiB0byBmcmVlIHRoZW0uDQo+ ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ ID4gQW5vdGhlciBxdWVzdGlvbiB3aHkgZG8geW91IG5lZWQgdG8gd3JpdGUgeW91ciBvd24gZnVu Y3Rpb25zPw0KPiA+ID4gPiA+ID4gPiA+IFdoeSBjYW4ndCB5b3UgcmV1c2UgZXhpc3RpbmcgaXhn YmVfeG1pdF9jbGVhbnVwKCkgZm9yDQo+ID4gPiA+ID4gPiA+ID4gZnVsbChvZmZsb2FkKSBwYXRo IGFuZA0KPiA+ID4gPiA+ID4gPiA+IGl4Z2JlX3R4X2ZyZWVfYnVmcygpIGZvciBzaW1wbGUgcGF0 aD8NCj4gPiA+ID4gPiA+ID4gPiBZZXMsICBpeGdiZV94bWl0X2NsZWFudXAoKSBkb2Vzbid0IGZy ZWUgbWJ1ZnMsIGJ1dCBhdCBsZWFzdA0KPiA+ID4gPiA+ID4gPiA+IGl0IGNvdWxkIGJlIHVzZWQg dG8gZGV0ZXJtaW5lIGZpbmlzaGVkIFRYIGRlc2NyaXB0b3JzLg0KPiA+ID4gPiA+ID4gPiA+IEJh c2VkIG9uIHRoYXQgeW91IGNhbiB5b3UgY2FuIGZyZWUgYXBwcm9wcmlhdGUgc3dfcmluZ1tdIGVu dHJpZXMuDQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gVGhl IHJlYXNvbiB3aHkgSSBkb24ndCByZXVzZSBleGlzdGluZyBmdW5jdGlvbiBpcyB0aGF0IHRoZXkN Cj4gPiA+ID4gPiA+ID4gYWxsIGZyZWUgc2V2ZXJhbCBtYnVmcyBXaGlsZSB0aGUgZnJlZV9jbnQg b2YgdGhlIEFQSQ0KPiA+ID4gPiA+ID4gPiBydGVfZXRoX3R4X2RvbmVfY2xlYW51cCgpIGlzIHRo ZQ0KPiA+ID4gPiA+ID4gbnVtYmVyIG9mIHBhY2tldHMuDQo+ID4gPiA+ID4gPiA+IEl0IGFsc28g bmVlZCB0byBiZSBkb25lIHRoYXQgY2hlY2sgd2hpY2ggbWJ1ZmZzIGFyZSBmcm9tIHRoZSBzYW1l DQo+ID4gcGFja2V0Lg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IEF0IGZpcnN0LCBJIGRvbid0 IHNlZSBhbnl0aGluZyBiYWQgaWYgdHhfZG9uZV9jbGVhbnVwKCkgd2lsbA0KPiA+ID4gPiA+ID4g ZnJlZSBvbmx5IHNvbWUgc2VnbWVudHMgZnJvbSB0aGUgcGFja2V0LiBBcyBsb25nIGFzIGl0IGlz IHNhZmUgLQ0KPiA+ID4gPiA+ID4gdGhlcmUgaXMgbm8NCj4gPiA+ID4gcHJvYmxlbSB3aXRoIHRo YXQuDQo+ID4gPiA+ID4gPiBJIHRoaW5rIHJ0ZV9ldGhfdHhfZG9uZV9jbGVhbnVwKCkgb3BlcmF0 ZXMgb24gbWJ1Ziwgbm90IHBhY2tldA0KPiA+IHF1YW50aXRpZXMuDQo+ID4gPiA+ID4gPiBCdXQg aW4gb3VyIGNhc2UgSSB0aGluayBpdCBkb2Vzbid0IG1hdHRlciwgYXMNCj4gPiA+ID4gPiA+IGl4 Z2JlX3htaXRfY2xlYW51cCgpIG1hcmsgVFhEcyBhcyBmcmVlIG9ubHkgd2hlbiBIVyBpcyBkb25l IHdpdGggYWxsDQo+ID4gVFhEcyBmb3IgdGhhdCBwYWNrZXQuDQo+ID4gPiA+ID4gPiBBcyBsb25n IGFzIHRoZXJlIGlzIGEgd2F5IHRvIHJldXNlIGV4aXN0aW5nIGNvZGUgYW5kIGF2b2lkDQo+ID4g PiA+ID4gPiBkdXBsaWNhdGlvbiAod2l0aG91dCBpbnRyb2R1Y2luZyBhbnkgZGVncmFkYXRpb24p IC0gd2Ugc2hvdWxkIHVzZSBpdC4NCj4gPiA+ID4gPiA+IEFuZCBJIHRoaW5rIHRoZXJlIGlzIGEg dmVyeSBnb29kIG9wcG9ydHVuaXR5IGhlcmUgdG8gcmV1c2UNCj4gPiA+ID4gPiA+IGV4aXN0aW5n DQo+ID4gPiA+ID4gPiBpeGdiZV94bWl0X2NsZWFudXAoKSBmb3IgdHhfZG9uZV9jbGVhbnVwKCkg aW1wbGVtZW50YXRpb24uDQo+ID4gPiA+ID4gPiBNb3Jlb3ZlciBiZWNhdXNlIHlvdXIgY29kZSBk b2VzbuKAmXQgZm9sbG93DQo+ID4gPiA+ID4gPiBpeGdiZV94bWl0X3BrdHMoKS9peGdiZV94bWl0 X2NsZWFudXAoKQ0KPiA+ID4gPiA+ID4gbG9naWMgYW5kIGluZnJhc3RydWN0dXJlLCBpdCBpbnRy b2R1Y2VzIHVubmVjZXNzYXJ5IHNjYW5zIG92ZXINCj4gPiA+ID4gPiA+IFRYRCByaW5nLCBhbmQg aW4gc29tZSBjYXNlcyBkb2Vzbid0IHdvcmsgYXMgZXhwZWN0ZWQ6DQo+ID4gPiA+ID4gPg0KPiA+ ID4gPiA+ID4gK3doaWxlICgxKSB7DQo+ID4gPiA+ID4gPiArdHhfbGFzdCA9IHN3X3JpbmdbdHhf aWRdLmxhc3RfaWQ7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiAraWYgKHN3X3JpbmdbdHhf bGFzdF0ubWJ1Zikgew0KPiA+ID4gPiA+ID4gK2lmICh0eHJbdHhfbGFzdF0ud2Iuc3RhdHVzICYN Cj4gPiA+ID4gPiA+ICtJWEdCRV9UWERfU1RBVF9ERCkgew0KPiA+ID4gPiA+ID4gLi4uDQo+ID4g PiA+ID4gPiArfSBlbHNlIHsNCj4gPiA+ID4gPiA+ICsvKg0KPiA+ID4gPiA+ID4gKyAqIG1idWYg c3RpbGwgaW4gdXNlLCBub3RoaW5nIGxlZnQgdG8NCj4gPiA+ID4gPiA+ICsgKiBmcmVlLg0KPiA+ ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ID4gK2JyZWFrOw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4g PiA+IEl0IGlzIG5vdCBjb3JyZWN0IHRvIGV4cGVjdCB0aGF0IElYR0JFX1RYRF9TVEFUX0REIHdp bGwgYmUgc2V0DQo+ID4gPiA+ID4gPiBvbiBsYXN0IFRYRCBmb3INCj4gPiA+ID4gPiA+ICpldmVy eSogcGFja2V0Lg0KPiA+ID4gPiA+ID4gV2Ugc2V0IElYR0JFX1RYRF9DTURfUlMgYml0IG9ubHkg b24gdGhyZXNob2xkIHBhY2tldCBsYXN0IGRlc2NyaXB0b3IuDQo+ID4gPiA+ID4gPiBQbHVzIGl4 Z2JlX3htaXRfY2xlYW51cCgpIGNhbiBjbGVhbnVwIFRYRCB3Yi5zdGF0dXMuDQo+ID4gPiA+ID4g Pg0KPiA+ID4gPiA+ID4gU28gSSBzdHJvbmdseSByZWNvbW1lbmQgdG8gcmV1c2UgaXhnYmVfeG1p dF9jbGVhbnVwKCkgaGVyZS4NCj4gPiA+ID4gPiA+IEl0IHdvdWxkIGJlIG11Y2ggbGVzcyBlcnJv ciBwcm9uZSBhbmQgd2lsbCBoZWxwIHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb24uDQo+ID4gPiA+ ID4gPg0KPiA+ID4gPiA+ID4gS29uc3RhbnRpbg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPg0KPiA+ ID4gPiA+IEF0IGZpcnN0Lg0KPiA+ID4gPiA+IFRoZSBmdW5jdGlvbiBpeGdiZV94bWl0X2NsZWFu dXAoc3RydWN0IGl4Z2JlX3R4X3F1ZXVlICp0eHEpIHdpbGwNCj4gPiA+ID4gPiBjbGVhbnVwDQo+ ID4gPiA+IFRYRCB3Yi5zdGF0dXMuDQo+ID4gPiA+ID4gdGhlIG51bWJlciBvZiBzdGF0dXMgY2xl YW51cGVkIGlzIGFsd2F5cyB0eHEtPnR4X3JzX3RocmVzaC4NCj4gPiA+ID4NCj4gPiA+ID4gWWVz LCBhbmQgd2hhdCdzIHdyb25nIHdpdGggaXQ/DQo+ID4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ID4g PiBUaGUgIEFQSSBydGVfZXRoX3R4X2RvbmVfY2xlYW51cCgpIGluIHJ0ZV9ldGhfZGV2Lmggc2hv dyB0aGF0DQo+ID4gPiA+ID4gQHBhcmFtIGZyZWVfY250DQo+ID4gPiA+ID4gICogICBNYXhpbXVt IG51bWJlciBvZiBwYWNrZXRzIHRvIGZyZWUuIFVzZSAwIHRvIGluZGljYXRlIGFsbCBwb3NzaWJs ZQ0KPiA+IHBhY2tldHMNCj4gPiA+ID4gPiAgKiAgIHNob3VsZCBiZSBmcmVlZC4gTm90ZSB0aGF0 IGEgcGFja2V0IG1heSBiZSB1c2luZyBtdWx0aXBsZSBtYnVmcy4NCj4gPiA+ID4NCj4gPiA+ID4g SSBkb24ndCB0aGluayBpdCBpcyBhIGdvb2QgYXBwcm9hY2gsIGJldHRlciB3b3VsZCBiZSB0byBy ZXBvcnQNCj4gPiA+ID4gbnVtYmVyIG9mIGZyZWVkIG1idWZzLCBidXQgb2ssIGFzIGl0IGlzIGEg cHVibGljIEFQSSwgd2UgcHJvYmFibHkgbmVlZCB0bw0KPiA+IGtlZXAgaXQgYXMgaXQgaXMuDQo+ ID4gPiA+DQo+ID4gPiA+ID4gYSBudW1iZXIgbXVzdCBiZSBzZXQgd2hpbGUgaXhnYmVfeG1pdF9j bGVhbnVwIGFuZA0KPiA+ID4gPiA+IGl4Z2JlX3R4X2ZyZWVfYnVmcyBvbmx5DQo+ID4gPiA+IGhh dmUgb25lIHBhcmFtZXRlciB0eHEuDQo+ID4gPiA+DQo+ID4gPiA+IFllcywgaXhnYmVfeG1pdF9j bGVhbnVwKCkgY2xlYW5zIHVwIGF0IGxlYXN0IHR4cS0+dHhfcnNfdGhyZXNoIFRYRHMuDQo+ID4g PiA+IFNvIGlmIHVzZXIgcmVxdWVzdGVkIG1vcmUgcGFja2V0cyB0byBiZSBmcmVlZCB3ZSBjYW4g Y2FsbA0KPiA+ID4gPiBpeGdiZV94bWl0X2NsZWFudXAoKSBpbiBhIGxvb3AuDQo+ID4gPiA+DQo+ ID4gPg0KPiA+ID4gVGhhdCBpcyBhIGdyZWF0IGlkZWEgYW5kIEkgZGlzY3VzcyB3aXRoIG15IHdv cmttYXRlIGFib3V0IGl0IHRvZGF5Lg0KPiA+ID4gdGhlcmUgaXMgYWxzbyBzb21lIFF1ZXN0aW9u IHRoYXQgd2UgZG9u4oCZdCBjb25maXJtLg0KPiA+ID4gQWN0dWFsbHkgaXQgY2FuIGNhbGwgaXhn YmVfeG1pdF9jbGVhbnVwKCkgaW4gYSBsb29wIGlmIHVzZXIgcmVxdWVzdGVkDQo+ID4gPiBtb3Jl IHBhY2tldHMsIEhvdyB0byBkZWFsIHdpdGggdGhlIE1PRC4gRm9yIGV4YW1wbGU6DQo+ID4gPiBU aGUgZGVmYXVsdCB0eF9yc190aHJlc2ggaXMgMzIuaWYgdGhlIGNvdW50IG9mIG1idWZzIHdlIG5l ZWQgZnJlZSBpcyA1MC4NCj4gPiA+IFdlIGNhbiBjYWxsIGl4Z2JlX3htaXRfY2xlYW51cCgpIG9u ZSB0aW1lIHRvIGZyZWUgMzIgbWJ1ZnMuDQo+ID4gPiBUaGVuIGhvdyBhYm91dCBvdGhlciAxOCBt YnVmcy4NCj4gPiA+IDEuSWYgd2UgZG8gbm90aGluZywgaXQgbG9va3Mgbm90IGdvb2QuDQo+ID4g PiAyLmlmIHdlIGNhbGwgaXhnYmVfeG1pdF9jbGVhbnVwKCkgc3VjY2Vzc2Z1bGx5LCB3ZSBmcmVl IDE0IG1idWZzIG1vcmUuDQo+ID4gPiAzLmlmIHdlIGNhbGwgaXhnYmVfeG1pdF9jbGVhbnVwKCkg ZmFpbCwgdGhlIHN0YXR1cyBvZiBOby4zMiBtYnVmcyBpcyBub3QgREQNCj4gPiA+ICAgV2hpbGUg Tm8gLjE4IGlzIERELiBTbyB3ZSBkbyBub3QgZnJlZSAxOCBtYnVmcyB3aGF0IHdlIGNhbiBhbmQg c2hvdWxkIGZyZWUuDQo+ID4gPg0KPiA+ID4gV2UgaGF2ZSB0cnkgc29tZSBwbGFucyBhYm91dCBp dCwgbGlrZXMgYWRkIHBhcmFtZXRlciBmb3INCj4gPiA+IGl4Z2JlX3htaXRfY2xlYW51cCgpLCBj aGFuZ2UgIFR4X3JzX3RocmVzaCBvciBjb3B5IHRoZSBjb2RlIG9yDQo+ID4gPiBpeGdiZV94bWl0 X2NsZWFudXAoKSBhcyBhIG5ldyBmdW5jdGlvbiB3aXRoIG1vcmUgUGFyYW1ldGVyLiBCdXQgYWxs IG9mIHRoZW0NCj4gPiBzZWVtIG5vdCBwZXJmZWN0Lg0KPiA+ID4NCj4gPiA+IFNvICBjYW4geW91 IGdpdmUgc29tZSBjb21tZW50IGFib3V0IGl0PyBJdCBzZWVtcyBub3QgZWFzeSBhcyB3ZSB0aGlu ayBieQ0KPiA+IHJldXNlIGZ1bmN0aW9uLg0KPiA+DQo+ID4gTXkgdGhvdWdodCBhYm91dCBpdDoN Cj4gPiBmb3Igc2l0dWF0aW9ucyB3aGVuIGNudCAlIHJzX3RocmVzaCAhPSAwIHdlJ2xsIHN0aWxs IGNhbGwgaXhnYmVfeG1pdF9jbGVhbnVwKCkgY250IC8NCj4gPiByc190aHJlc2ggKyAxIHRpbWVz Lg0KPiA+IEJ1dCB0aGVuLCB3ZSBjYW4gZnJlZSBqdXN0IGNudCAlIHJzX3RocmVzaCBtYnVmcywg d2hpbGUga2VlcGluZyByZXN0IG9mIHRoZW0NCj4gPiBpbnRhY3QuDQo+ID4NCj4gPiBMZXQgc2F5 IGF0IHNvbWUgbW9tZW50IHdlIGhhdmUgdHhxLT5uYl90eF9mcmVlPT0wLCBhbmQgdXNlciBjYWxs ZWQNCj4gPiB0eF9kb25lX2NsZWFudXAodHhxLCAuLi4sIGNudD09NTApIFNvIHdlIGNhbGwgaXhn YmVfeG1pdF9jbGVhbnVwKHR4cSkgZmlyc3QgdGltZS4NCj4gPiBTdXBwb3NlIGl0IGZyZWVzIDMy IFRYRHMsIHRoZW4gd2Ugd2FsayB0aHJvdWdoIGNvcnJlc3BvbmRpbmcgc3dfcmluZ1tdIGVudHJp ZXMNCj4gPiBhbmQgbGV0IHNheSBmcmVlIDMyIHBhY2tldHMgKG9uZSBtYnVmIHBlciBwYWNrZXQp Lg0KPiA+IFRoZW4gd2UgY2FsbCBpeGdiZV94bWl0X2NsZWFudXAodHhxKSAgc2Vjb25kIHRpbWUu DQo+ID4gU3VwcG9zZSBpdCB3aWxsIGZyZWUgYW5vdGhlciAzMiBUWERzLCB3ZSBhZ2FpbiB3YWxr IHRob3VyIHN3X3JpbmdbXSwgYnV0IGZyZWUNCj4gPiBvbmx5IGZpcnN0IDE4IG1idWZzIGFuZCBy ZXR1cm4uDQo+ID4gU3VwcG9zZSB3ZSBjYWxsIHR4X2RvbmVfY2xlYW51cCh0eHEsIGNudD01MCkg aW1tZWRpYXRlbHkgYWdhaW4uDQo+ID4gTm93IHR4cS0+bmJfdHhfZnJlZT09NjQsIHNvIHdlIGNh biBzdGFydCB0byBzY2FuIHN3X2VudHJpZXNbXSBmcm9tIHR4X3RhaWwNCj4gPiBzdHJhaWdodHdh eS4gV2UnbGwgc2tpcCBmaXJzdCA1MCBlbnRyaWVzIGFzIHRoZXkgYXJlIGFscmVhZHkgZW1wdHks IHRoZW4gZnJlZQ0KPiA+IHJlbWFpbmluZyAxNCBtYnVmcywgdGhlbiB3aWxsIGNhbGwgaXhnYmVf eG1pdF9jbGVhbnVwKHR4cSkgYWdhaW4sIGFuZCBpZiBpdCB3b3VsZA0KPiA+IGJlIHN1Y2Nlc3Nm dWwsIHdpbGwgc2NhbiBhbmQgZnJlZSBhbm90aGVyIDMyIHN3X3JpbmdbXSBlbnRyaWVzLg0KPiA+ IFRoZW4gYWdhaW4gd2lsbCBjYWxsIGl4Z2JlX3htaXRfY2xlYW51cCh0eHEpLCBidXQgd2lsbCBm cmVlDQo+ID4gb25seSBmaXJzdCA4IGF2YWlsYWJsZSBzd19yaW5nW10ubWJ1Zi4NCj4gPiBQcm9i YWJseSBhIGJpdCBlYXNpZXIgd2l0aCB0aGUgY29kZToNCj4gPg0KPiA+IHR4X2RvbmVfY2xlYW51 cCguLi4sIHVpbnQzMl90IGNudCkNCj4gPiB7DQo+ID4gICAgICAgIHN3ciA9IHR4cS0+c3dfcmlu ZzsNCj4gPiAgICAgICAgdHhyICAgICA9IHR4cS0+dHhfcmluZzsNCj4gPiAgICAgICAgaWQgICA9 IHR4cS0+dHhfdGFpbDsNCj4gPg0KPiA+ICAgICAgIGlmICh0eHEtPm5iX3R4X2ZyZWUgPT0gMCkN Cj4gPiAgICAgICAgICBpeGdiZV94bWl0X2NsZWFudXAodHhxKTsNCj4gPg0KPiA+ICAgICAgIGZy ZWUgPSAgdHhxLT5uYl90eF9mcmVlOw0KPiA+ICAgICAgIGZvciAobiA9IDA7IG4gPCBjbnQgJiYg ZnJlZSAhPSAwOyApIHsNCj4gPg0KPiA+ICAgICAgICAgICBmb3IgKGogPSAwOyBqICE9IGZyZWUg JiYgbiA8IGNudDsgaisrKSB7DQo+ID4gICAgICAgICAgICAgIHN3ZSA9ICZzd3JbaWQgKyBqXTsN Cj4gPiAgICAgICAgICAgICAgaWYgKHN3ZS0+bWJ1ZiAhPSBOVUxMKSB7DQo+ID4gICAgICAgICAg ICAgICAgICAgIHJ0ZV9wa3RtYnVmX2ZyZWVfc2VnKHN3ZS0+bWJ1Zik7DQo+ID4gICAgICAgICAg ICAgICAgICAgIHN3ZS0+bWJ1ZiA9IE5VTEw7DQo+ID4NCj4gPiAgICAgICAgICAgICAgICAgICAv KiBsYXN0IHNlZ21lbnQgaW4gdGhlIHBhY2tldCwgaW5jcmVtZW50IHBhY2tldCBjb3VudCAqLw0K PiA+ICAgICAgICAgICAgICAgICAgIG4gKz0gKHN3ZS0+bGFzdF9pZCA9PSBpZCArIGopOw0KPiA+ ICAgICAgICAgICAgICB9DQo+ID4gICAgICAgICAgIH0NCj4gPg0KPiA+ICAgICAgICAgICBpZiAo biA8IGNudCkgew0KPiA+ICAgICAgICAgICAgICAgIGl4Z2JlX3htaXRfY2xlYW51cCh0eHEpOw0K PiA+ICAgICAgICAgICAgICAgIGZyZWUgPSAgIHR4cS0+bmJfdHhfZnJlZSAtIGZyZWU7DQo+ID4g ICAgICAgICAgIH0NCj4gPiAgICAgIH0NCj4gPiAgICAgIHJldHVybiBuOw0KPiA+IH0NCj4gPg0K PiA+IEZvciB0aGUgc2l0dWF0aW9uIHdoZW4gdGhlcmUgYXJlIGxlc3MgdGhlbiByeF90aHJlc2gg ZnJlZSBUWERzICgodHhxLQ0KPiA+ID50eF9yaW5nW2Rlc2NfdG9fY2xlYW5fdG9dLndiLnN0YXR1 cyAmIElYR0JFX1RYRF9TVEFUX0REKSA9PSAwKSB3ZSBkbw0KPiA+IG5vdGhpbmcgLSBpbiB0aGF0 IGNhc2Ugd2UgY29uc2lkZXIgdGhlcmUgYXJlIG5vIG1vcmUgbWJ1ZnMgdG8gZnJlZS4NCj4gPg0K PiA+ID4NCj4gPiA+DQo+ID4gPiA+ID4gQW5kIHdoYXQgc2hvdWxkIGRvIGlzIG5vdCBvbmx5IGZy ZWUgYnVmZmVycyBhbmQgc3RhdHVzIGJ1dCBhbHNvDQo+ID4gPiA+ID4gY2hlY2sgd2hpY2ggYnVm cyBhcmUgZnJvbSAgT25lIHBhY2tldCBhbmQgY291bnQgdGhlIHBhY2tldCBmcmVlZC4NCj4gPiA+ ID4NCj4gPiA+ID4gaXhnYmVfeG1pdF9jbGVhbnVwKCkgaXRzZWxmIGRvZXNuJ3QgZnJlZSBtYnVm cyBpdHNlbGYuDQo+ID4gPiA+IEl0IG9ubHkgY2xlYW5zIHVwIFRYRHMuDQo+ID4gPiA+IFNvIGlu IHR4X2RvbmVfY2xlYW51cCgpIGFmdGVyIGNhbGxpbmcgaXhnYmVfeG1pdF9jbGVhbnVwKCkgeW91 J2xsDQo+ID4gPiA+IHN0aWxsIG5lZWQgdG8gZ28gdGhyb3VnaCBzd19yaW5nW10gZW50cmllcyB0 aGF0IGNvcnJlc3BvbmQgdG8gZnJlZSBUWERzIGFuZA0KPiA+IGNhbGwgbWJ1Zl9zZWdfZnJlZSgp Lg0KPiA+ID4gPiBZb3UgY2FuIGNvdW50IG51bWJlciBvZiBmdWxsIHBhY2tldHMgaGVyZS4NCj4g PiA+ID4NCj4gPiA+ID4gPiBTbyBJIHRoaW5rIGl0IGNhbid0IGJlIGltcGxlbWVudGVkIHRoYXQg cmV1c2UgZnVuY3Rpb24NCj4gPiA+ID4gPiB4bWl0X2NsZWFudXAgd2l0aG91dA0KPiA+ID4gPiBj aGFuZ2UgaXQuDQo+ID4gPiA+ID4gQW5kIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiB3aXRoIHRoZSBj b2RlIG9mIHhtaXRfY2xlYW51cCB3aWxsIGNhdXNlDQo+ID4gPiA+ID4gbWFueQ0KPiA+ID4gPiBk dXBsaWNhdGlvbi4NCj4gPiA+ID4NCj4gPiA+ID4gSSBkb24ndCB0aGluayBpdCB3b3VsZC4NCj4g PiA+ID4gSSB0aGluayBhbGwgd2UgbmVlZCBoZXJlIGlzIHNvbWV0aGluZyBsaWtlIHRoYXQgKG5v dGUgaXQgaXMNCj4gPiA+ID4gc2NoZW1hdGljIG9uZSwgZG9lc24ndCB0YWtlIGludG8gYWNjb3Vu ZiB0aGF0IFRYRCByaW5nIGlzIGNpcmN1bGFyKToNCj4gPiA+ID4NCj4gPiA+ID4gdHhfZG9uZV9j bGVhbnVwKC4uLiwgdWludDMyX3QgY250KQ0KPiA+ID4gPiB7DQo+ID4gPiA+ICAgICAgIC8qIHdl IGhhdmUgdHhxLT5uYl90eF9mcmVlIFRYRHMgc3RhcnRpbmcgZnJvbSB0eHEtPnR4X3RhaWwuDQo+ ID4gPiA+ICAgICAgICAgICAgU2NhbiB0aGVtIGZpcnN0IGFuZCBmcmVlIGFzIG1hbnkgbWJ1ZnMg YXMgd2UgY2FuLg0KPiA+ID4gPiAgICAgICAgICAgIElmIHdlIG5lZWQgbW9yZSBtYnVmcyB0byBm cmVlIGNhbGwgIGl4Z2JlX3htaXRfY2xlYW51cCgpDQo+ID4gPiA+ICAgICAgICAgICAgdG8gZnJl ZSBtb3JlIFRYRHMuICovDQo+ID4gPiA+DQo+ID4gPiA+ICAgICAgICBzd3IgPSB0eHEtPnN3X3Jp bmc7DQo+ID4gPiA+ICAgICAgICB0eHIgICAgID0gdHhxLT50eF9yaW5nOw0KPiA+ID4gPiAgICAg ICAgaWQgICA9IHR4cS0+dHhfdGFpbDsNCj4gPiA+ID4gICAgICAgIGZyZWUgPSAgdHhxLT5uYl90 eF9mcmVlOw0KPiA+ID4gPg0KPiA+ID4gPiAgICAgICAgZm9yIChuID0gMDsgbiA8IGNudCAmJiBm cmVlICE9IDA7ICkgew0KPiA+ID4gPg0KPiA+ID4gPiAgICAgICAgICAgZm9yIChqID0gMDsgaiAh PSBmcmVlICYmIG4gPCBjbnQ7IGorKykgew0KPiA+ID4gPiAgICAgICAgICAgICAgc3dlID0gJnN3 cltpZCArIGpdOw0KPiA+ID4gPiAgICAgICAgICAgICAgaWYgKHN3ZS0+bWJ1ZiAhPSBOVUxMKSB7 DQo+ID4gPiA+ICAgICAgICAgICAgICAgICAgICBydGVfcGt0bWJ1Zl9mcmVlX3NlZyhzd2UtPm1i dWYpOw0KPiA+ID4gPiAgICAgICAgICAgICAgICAgICAgc3dlLT5tYnVmID0gTlVMTDsNCj4gPiA+ ID4gICAgICAgICAgICAgIH0NCj4gPiA+ID4gICAgICAgICAgICAgIG4gKz0gKHN3ZS0+bGFzdF9p ZCA9PSBpZCArIGopDQo+ID4gPiA+ICAgICAgICAgICB9DQo+ID4gPiA+DQo+ID4gPiA+ICAgICAg ICAgICBpZiAobiA8IGNudCkgew0KPiA+ID4gPiAgICAgICAgICAgICAgICBpeGdiZV94bWl0X2Ns ZWFudXAodHhxKTsNCj4gPiA+ID4gICAgICAgICAgICAgICAgZnJlZSA9ICAgdHhxLT5uYl90eF9m cmVlIC0gZnJlZTsNCj4gPiA+ID4gICAgICAgICAgIH0NCj4gPiA+ID4gICAgICB9DQo+ID4gPiA+ ICAgICAgcmV0dXJuIG47DQo+ID4gPiA+IH0NCj4gPiA+ID4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ IEFib3ZlIGFsbCAsIGl0IHNlZW0gbm90IGEgcGVyZmVjdCBpZGVhIHRvIHJldXNlIGl4Z2JlX3ht aXRfY2xlYW51cCgpLg0KPiA+ID4gPg0KPiA+ID4gPiBUb3RhbGx5IGRpc2FncmVlLCBzZWUgYWJv dmUuDQo+ID4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBTZWNvbmQuDQo+ID4gPiA+ID4gVGhl IGZ1bmN0aW9uIGluIHBhdGNoIGlzIGNvcHkgZnJvbSBjb2RlIGluIGlnYl9yeHR4LmMuIGl0IGFs cmVhZHkNCj4gPiA+ID4gPiB1cGRhdGVkIGluIDIwMTcsIFRoZSBjb21taXQgaWQgaXMNCj4gPiA+ ID4gOGQ5MDdkMmI3OWY3YTU0YzgwOWYxYzQ0OTcwZmY0NTVmYTI4NjVlMS4NCj4gPiA+ID4NCj4g PiA+ID4gSSByZWFsaXplZCB0aGF0Lg0KPiA+ID4gPiBCdXQgSSB0aGluayBpdCBhcyBhIHByb2Js ZW0sIG5vdCBhIHBvc2l0aXZlIHRoaW5nLg0KPiA+ID4gPiBXaGlsZSB0aGV5IGRvIGhhdmUgc29t ZSBzaW1pbGFyaXRpZXMsIGlnYiBhYmQgaXhnYmUgYXJlIFBNRHMgZm9yDQo+ID4gPiA+IGRpZmZl cmVudCBkZXZpY2VzLCBhbmQgdGhlaXIgVFggY29kZSBkaWZmZXJzIHF1aXRlIGEgbG90LiBMZXQg c2F5DQo+ID4gPiA+IGlnYiBkb2Vzbid0IHVzZSB0eF9yc190aHJlc2hvbGQsIGJ1dCBpbnN0ZWFk IHNldCBSUyBiaXQgZm9yIGVhY2ggbGFzdCBUWEQuDQo+ID4gPiA+IFNvLCBqdXN0IGJsaW5kbHkg Y29weWluZyB0eF9kb25lX2NsZWFudXAoKSBmcm9tIGlnYiB0byBpeGdiZSBkb2Vzbid0DQo+ID4g PiA+IGxvb2sgbGlrZSBhIGdvb2QgaWRlYSB0byBtZS4NCj4gPiA+ID4NCj4gPiA+ID4gPiBJIHRy dXN0IHRoZSBsb2dpYyBvZiBjb2RlIGlzIHJpZ2h0Lg0KPiA+ID4gPiA+IEFjdHVhbGx5IGl0IGRv bid0IGNvbXBsZXRlIGZvciBpeGdiZSwgaTQwZSBhbmQgaWNlLCB3aGlsZSBpdCBkb24ndA0KPiA+ ID4gPiA+IGNoYW5nZSB0aGUgdmFsdWUgb2YgbGFzdF9kZXNjX2NsZWFuZWQgYW5kIHR4X25leHRf ZGQuIEFuZCBpdCdzDQo+ID4gPiA+ID4gYmVnaW5uaW5nIHByZWZlciBsYXN0X2Rlc2NfY2xlYW5l ZCBvciAgdHhfbmV4dF9kZChmb3Igb2ZmbG9hZCBvcg0KPiA+ID4gPiA+IHNpbXBsZSkgdG8NCj4g PiA+ID4gdHhfdGFpbC4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IFNvLCBJIHN1Z2dlc3QgdG8gdXNl IHRoZSBvbGQgZnVuY3Rpb24gYW5kIGZpeCB0aGUgaXNzdWUuDQo+ID4gPiA+ID4NCj4gPiA+ID4g PiA+ID4NCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+VGhpcyBpcyB0aGUgZmlyc3Qg cGFja2V0IHRoYXQgd2lsbCBiZQ0KPiA+ID4gPiA+ID4gPiA+ID4gKyAqIGF0dGVtcHRlZCB0byBi ZSBmcmVlZC4NCj4gPiA+ID4gPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiA+ID4gPiA+ICsNCj4g PiA+ID4gPiA+ID4gPiA+ICsvKiBHZXQgbGFzdCBzZWdtZW50IGluIG1vc3QgcmVjZW50bHkgYWRk ZWQgcGFja2V0LiAqLw0KPiA+ID4gPiA+ID4gPiA+ID4gK3R4X2xhc3QgPSBzd19yaW5nW3R4cS0+ dHhfdGFpbF0ubGFzdF9pZDsNCj4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ ICsvKiBHZXQgdGhlIG5leHQgc2VnbWVudCwgd2hpY2ggaXMgdGhlIG9sZGVzdCBzZWdtZW50IGlu IHJpbmcuDQo+ID4gPiA+ID4gPiA+ID4gPiArKi8gdHhfZmlyc3QgPSBzd19yaW5nW3R4X2xhc3Rd Lm5leHRfaWQ7DQo+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiArLyogU2V0 IHRoZSBjdXJyZW50IGluZGV4IHRvIHRoZSBmaXJzdC4gKi8gdHhfaWQgPQ0KPiA+ID4gPiA+ID4g PiA+ID4gK3R4X2ZpcnN0Ow0KPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4g Ky8qDQo+ID4gPiA+ID4gPiA+ID4gPiArICogTG9vcCB0aHJvdWdoIGVhY2ggcGFja2V0LiBGb3Ig ZWFjaCBwYWNrZXQsIHZlcmlmeSB0aGF0DQo+ID4gPiA+ID4gPiA+ID4gPiArYW4NCj4gPiA+ID4g PiA+ID4gPiA+ICsgKiBtYnVmIGV4aXN0cyBhbmQgdGhhdCB0aGUgbGFzdCBzZWdtZW50IGlzIGZy ZWUuIElmIHNvLA0KPiA+ID4gPiA+ID4gPiA+ID4gK2ZyZWUNCj4gPiA+ID4gPiA+ID4gPiA+ICsg KiBpdCBhbmQgbW92ZSBvbi4NCj4gPiA+ID4gPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiA+ID4g PiA+ICt3aGlsZSAoMSkgew0KPiA+ID4gPiA+ID4gPiA+ID4gK3R4X2xhc3QgPSBzd19yaW5nW3R4 X2lkXS5sYXN0X2lkOw0KPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gK2lm IChzd19yaW5nW3R4X2xhc3RdLm1idWYpIHsgaWYgKCEodHhyW3R4X2xhc3RdLndiLnN0YXR1cw0K PiA+ID4gPiA+ID4gPiA+ID4gKyYNCj4gPiA+ID4gPiA+ID4gPiA+ICtJWEdCRV9UWERfU1RBVF9E RCkpDQo+ID4gPiA+ID4gPiA+ID4gPiArYnJlYWs7DQo+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4g PiA+ID4gPiA+ID4gPiArLyogR2V0IHRoZSBzdGFydCBvZiB0aGUgbmV4dCBwYWNrZXQuICovIHR4 X25leHQgPQ0KPiA+ID4gPiA+ID4gPiA+ID4gK3N3X3JpbmdbdHhfbGFzdF0ubmV4dF9pZDsNCj4g PiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ICsvKg0KPiA+ID4gPiA+ID4gPiA+ ID4gKyAqIExvb3AgdGhyb3VnaCBhbGwgc2VnbWVudHMgaW4gYQ0KPiA+ID4gPiA+ID4gPiA+ID4g KyAqIHBhY2tldC4NCj4gPiA+ID4gPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiA+ID4gPiA+ICtk byB7DQo+ID4gPiA+ID4gPiA+ID4gPiArcnRlX3BrdG1idWZfZnJlZV9zZWcoc3dfcmluZ1t0eF9p ZF0ubWJ1Zik7DQo+ID4gPiA+ID4gPiA+ID4gPiArc3dfcmluZ1t0eF9pZF0ubWJ1ZiA9IE5VTEw7 IHN3X3JpbmdbdHhfaWRdLmxhc3RfaWQgPQ0KPiA+ID4gPiA+ID4gPiA+ID4gK3R4X2lkOw0KPiA+ ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gKy8qIE1vdmUgdG8gbmV4dCBzZWdt ZW50LiAqLyB0eF9pZCA9DQo+ID4gPiA+ID4gPiA+ID4gPiArc3dfcmluZ1t0eF9pZF0ubmV4dF9p ZDsNCj4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ICt9IHdoaWxlICh0eF9p ZCAhPSB0eF9uZXh0KTsNCj4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ICsv Kg0KPiA+ID4gPiA+ID4gPiA+ID4gKyAqIEluY3JlbWVudCB0aGUgbnVtYmVyIG9mIHBhY2tldHMN Cj4gPiA+ID4gPiA+ID4gPiA+ICsgKiBmcmVlZC4NCj4gPiA+ID4gPiA+ID4gPiA+ICsgKi8NCj4g PiA+ID4gPiA+ID4gPiA+ICtjb3VudCsrOw0KPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ID4gPiA+ID4gK2lmICh1bmxpa2VseShjb3VudCA9PSAoaW50KWZyZWVfY250KSkgYnJlYWs7IH0g ZWxzZSB7DQo+ID4gPiA+ID4gPiA+ID4gPiArLyoNCj4gPiA+ID4gPiA+ID4gPiA+ICsgKiBUaGVy ZSBhcmUgbXVsdGlwbGUgcmVhc29ucyB0byBiZSBoZXJlOg0KPiA+ID4gPiA+ID4gPiA+ID4gKyAq IDEpIEFsbCB0aGUgcGFja2V0cyBvbiB0aGUgcmluZyBoYXZlIGJlZW4NCj4gPiA+ID4gPiA+ID4g PiA+ICsgKiAgICBmcmVlZCAtIHR4X2lkIGlzIGVxdWFsIHRvIHR4X2ZpcnN0DQo+ID4gPiA+ID4g PiA+ID4gPiArICogICAgYW5kIHNvbWUgcGFja2V0cyBoYXZlIGJlZW4gZnJlZWQuDQo+ID4gPiA+ ID4gPiA+ID4gPiArICogICAgLSBEb25lLCBleGl0DQo+ID4gPiA+ID4gPiA+ID4gPiArICogMikg SW50ZXJmYWNlcyBoYXMgbm90IHNlbnQgYSByaW5ncyB3b3J0aCBvZg0KPiA+ID4gPiA+ID4gPiA+ ID4gKyAqICAgIHBhY2tldHMgeWV0LCBzbyB0aGUgc2VnbWVudCBhZnRlciB0YWlsIGlzDQo+ID4g PiA+ID4gPiA+ID4gPiArICogICAgc3RpbGwgZW1wdHkuIE9yIGEgcHJldmlvdXMgY2FsbCB0byB0 aGlzDQo+ID4gPiA+ID4gPiA+ID4gPiArICogICAgZnVuY3Rpb24gZnJlZWQgc29tZSBvZiB0aGUg c2VnbWVudHMgYnV0DQo+ID4gPiA+ID4gPiA+ID4gPiArICogICAgbm90IGFsbCBzbyB0aGVyZSBp cyBhIGhvbGUgaW4gdGhlIGxpc3QuDQo+ID4gPiA+ID4gPiA+ID4gPiArICogICAgSG9wZWZ1bGx5 IHRoaXMgaXMgYSByYXJlIGNhc2UuDQo+ID4gPiA+ID4gPiA+ID4gPiArICogICAgLSBXYWxrIHRo ZSBsaXN0IGFuZCBmaW5kIHRoZSBuZXh0IG1idWYuIElmDQo+ID4gPiA+ID4gPiA+ID4gPiArICog ICAgICB0aGVyZSBpc24ndCBvbmUsIHRoZW4gZG9uZS4NCj4gPiA+ID4gPiA+ID4gPiA+ICsgKi8N Cj4gPiA+ID4gPiA+ID4gPiA+ICtpZiAobGlrZWx5KHR4X2lkID09IHR4X2ZpcnN0ICYmIGNvdW50 ICE9IDApKSBicmVhazsNCj4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ICsv Kg0KPiA+ID4gPiA+ID4gPiA+ID4gKyAqIFdhbGsgdGhlIGxpc3QgYW5kIGZpbmQgdGhlIG5leHQg bWJ1ZiwgaWYgYW55Lg0KPiA+ID4gPiA+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ID4gPiA+ID4g K2RvIHsNCj4gPiA+ID4gPiA+ID4gPiA+ICsvKiBNb3ZlIHRvIG5leHQgc2VnbWVudC4gKi8gdHhf aWQgPQ0KPiA+ID4gPiA+ID4gPiA+ID4gK3N3X3JpbmdbdHhfaWRdLm5leHRfaWQ7DQo+ID4gPiA+ ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiAraWYgKHN3X3JpbmdbdHhfaWRdLm1idWYp DQo+ID4gPiA+ID4gPiA+ID4gPiArYnJlYWs7DQo+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ ID4gPiA+ID4gPiArfSB3aGlsZSAodHhfaWQgIT0gdHhfZmlyc3QpOw0KPiA+ID4gPiA+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gKy8qDQo+ID4gPiA+ID4gPiA+ID4gPiArICogRGV0ZXJt aW5lIHdoeSBwcmV2aW91cyBsb29wIGJhaWxlZC4gSWYgdGhlcmUNCj4gPiA+ID4gPiA+ID4gPiA+ ICsgKiBpcyBub3QgYW4gbWJ1ZiwgZG9uZS4NCj4gPiA+ID4gPiA+ID4gPiA+ICsgKi8NCj4gPiA+ ID4gPiA+ID4gPiA+ICtpZiAoc3dfcmluZ1t0eF9pZF0ubWJ1ZiA9PSBOVUxMKSBicmVhazsgfSB9 DQo+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiArcmV0dXJuIGNvdW50Ow0K PiA+ID4gPiA+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4g PiA+ICBzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChjb2xkKSkNCj4gPiA+ID4gPiA+ID4gPiA+ IGl4Z2JlX3R4X2ZyZWVfc3dyaW5nKHN0cnVjdCBpeGdiZV90eF9xdWV1ZSAqdHhxKSAgeyBkaWZm DQo+ID4gPiA+ID4gPiA+ID4gPiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3J4dHgu aA0KPiA+ID4gPiA+ID4gPiA+ID4gYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9yeHR4LmggaW5k ZXgNCj4gPiA+ID4gPiA+ID4gPiA+IDUwNWQzNDRiOS4uMmMzNzcwYWY2DQo+ID4gPiA+ID4gPiA+ ID4gPiAxMDA2NDQNCj4gPiA+ID4gPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4 Z2JlX3J4dHguaA0KPiA+ID4gPiA+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhn YmVfcnh0eC5oDQo+ID4gPiA+ID4gPiA+ID4gPiBAQCAtMjg1LDYgKzI4NSw4IEBAIGludA0KPiA+ ID4gPiA+ID4gPiA+ID4gaXhnYmVfcnhfdmVjX2Rldl9jb25mX2NvbmRpdGlvbl9jaGVjayhzdHJ1 Y3QNCj4gPiA+ID4gPiA+ID4gPiA+IHJ0ZV9ldGhfZGV2ICpkZXYpOyAgaW50IGl4Z2JlX3J4cV92 ZWNfc2V0dXAoc3RydWN0DQo+ID4gPiA+ID4gPiA+ID4gPiBpeGdiZV9yeF9xdWV1ZSAqcnhxKTsg IHZvaWQNCj4gPiA+ID4gPiA+ID4gPiA+IGl4Z2JlX3J4X3F1ZXVlX3JlbGVhc2VfbWJ1ZnNfdmVj KHN0cnVjdA0KPiA+ID4gPiA+ID4gPiA+ID4gaXhnYmVfcnhfcXVldWUgKnJ4cSk7DQo+ID4gPiA+ ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gK2ludCBpeGdiZV90eF9kb25lX2NsZWFudXAo dm9pZCAqdHhxLCB1aW50MzJfdCBmcmVlX2NudCk7DQo+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4g PiA+ID4gPiA+ID4gPiAgZXh0ZXJuIGNvbnN0IHVpbnQzMl90IHB0eXBlX3RhYmxlW0lYR0JFX1BB Q0tFVF9UWVBFX01BWF07DQo+ID4gPiA+ID4gPiA+ID4gPiAgZXh0ZXJuIGNvbnN0IHVpbnQzMl90 DQo+ID4gPiA+ID4gPiA+ID4gPiBwdHlwZV90YWJsZV90bltJWEdCRV9QQUNLRVRfVFlQRV9UTl9N QVhdOw0KPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+IC0tDQo+ID4gPiA+ID4g PiA+ID4gPiAyLjE3LjENCg0K