Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp629881pxf; Wed, 31 Mar 2021 11:52:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy/F7sInDwcbkYZz4lKSGNHhaKI8s6yqZ1m3uSlXlKA7eY0VXOlViVNybT50oM6oVMsM6wT X-Received: by 2002:a50:e80c:: with SMTP id e12mr5545501edn.229.1617216765174; Wed, 31 Mar 2021 11:52:45 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1617216765; cv=pass; d=google.com; s=arc-20160816; b=rvqrpX1CuhHVy4rpLt+43p81+BzMiSSL11utxxQmDDfCrjacW1kEXc1KSDs3/+YCy4 k7UEEZEh+REwz03YKfyAu7QHG+s0C8kxRD4sfMBvjkXMjyxSToey+hMFRlxokoAyRSYH x3CADjETukKq/JSgo6YrX2nPPRuAo3ZcZyuvwxcyLdbWGOLvvLCPNQgJDkXQqR0vF0s8 6aoVB1rGopDlpRtLEdgw2DBE66EXcYSZ2n8ln92ytp+7LfUXNLtjHuoHzLe4mwoeLZmw cm+UChW4plzYm+YbKXRjPRTWwHB70yMSHk945Aj2xDy4QgN0bSfcMdf1zix593eMWXMq usEw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from :dkim-signature; bh=w5JY5WRtyiXSeCm4yvuCaG2kX9APd+CTR0enOrBkZzA=; b=ab2kjNzc+uQVPLzwOkG2PadbKPoz5mr2CkJpXkQ0ttR3hE75b2FbiksusEHC8V2waa y3sx/IiyvzUptMgomQDeMWjyKHAvMXo7JmuXTQxwFYahGLgASHvAkwKV6XFTlltEujyx c8vXjurpEPuEcCwq7ZGJ56TQ//j1tY28iR8S2Z27ivIBvXL5pHB/+BR8Gw/drfQdNfAF VIHVGAEN/bYDap0so2VIZP3MtpHoby9T2xwZIfp04Y6DRl4QyNLYTHLSq9Qqh0SdzjMH cBq3g1FBG6MS4F9DaBkp/K1xXU/GGab5Sp2yMcJUNPn4H53nVvpQiXjLdDvp7Xb7NyjE gMWg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@hammerspace.com header.s=selector2 header.b=E2igV9Ty; arc=pass (i=1 spf=pass spfdomain=hammerspace.com dkim=pass dkdomain=hammerspace.com dmarc=pass fromdomain=hammerspace.com); spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=hammerspace.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id cq5si2430229edb.98.2021.03.31.11.52.18; Wed, 31 Mar 2021 11:52:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@hammerspace.com header.s=selector2 header.b=E2igV9Ty; arc=pass (i=1 spf=pass spfdomain=hammerspace.com dkim=pass dkdomain=hammerspace.com dmarc=pass fromdomain=hammerspace.com); spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=hammerspace.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234832AbhCaSvY (ORCPT + 99 others); Wed, 31 Mar 2021 14:51:24 -0400 Received: from mail-dm6nam12on2095.outbound.protection.outlook.com ([40.107.243.95]:61664 "EHLO NAM12-DM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S235723AbhCaSvA (ORCPT ); Wed, 31 Mar 2021 14:51:00 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KMaY7BQQm4B5sZrv5RegGLBAYvRXC2pU7gLeXFsXsD8YQaYr2voAcjScRZD2AXb6OJNm7ZhIE0BFBrDZhgj7V3/JeZmb/DnfKywfIr8Hk6qLMCibeR10Oo3KnG7RlbE9gwehLY6xjPoj33QsK56FfB7BbTGr7FCRgP618feq+o+TMa6f+/MBiRs9+lUAQltI239JxNe/zlpjmGnw2XeIUVMrcNevPLchX+vfUPxO0qi+tTYyXI4m82bv/z+SawiHUF87MM75UhmBHOQ9m8Ssktt+yrArzs6moJo5/mdnalpvp9GMRMOySrEo3YlbNOdtnRcfPHAF14ViBamjTOoMFA== 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=w5JY5WRtyiXSeCm4yvuCaG2kX9APd+CTR0enOrBkZzA=; b=LvWQIM9i3FVjJ4O+WOxl3UDNGgtHwFYs3PohcVOQmsE7tdv+9CDyCKaKMaL7d4i+EdIkKTeCteffSvocbR8zZBTEMylZotx/Xwl6yU7LUn3hVidOidiOFX9YKx5gczbayr9c9RhGIZX7N65roUqnH+FAV5XuMfxkFCk4MUaRYip92y1Olshr/swLTvFNPBfQkpKrzh7L6Gy9SRZX5GMqqTbCCbHrxlrQ/YbZy6d7ge08Gv3RNssC/489Qw3CWtjzC6o8IAakzwtPUYxNIPVRaitzZG+ERZu83/BKXRM1YQheV+KKc5X9MXB1sr4sw4PiJocpJ033vfa5c23uvYadUA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hammerspace.com; dmarc=pass action=none header.from=hammerspace.com; dkim=pass header.d=hammerspace.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hammerspace.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=w5JY5WRtyiXSeCm4yvuCaG2kX9APd+CTR0enOrBkZzA=; b=E2igV9Ty8qygdUhyRU59Omv2uaEaifM3QLTkLmVZkfQcUyP6ZSsFJhdOGa7mfX983KSoicPRfevaaO7VvnFEmjBqgal5bT09TT2kfZZ8sHK2D4MhLkw575fxxTLFutSMn5UwHdnnHWW0QjvhxovKabYC0ejpYiELRNF1/Ah+55A= Received: from CH2PR13MB3525.namprd13.prod.outlook.com (2603:10b6:610:21::29) by CH2PR13MB3320.namprd13.prod.outlook.com (2603:10b6:610:23::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3999.16; Wed, 31 Mar 2021 18:50:56 +0000 Received: from CH2PR13MB3525.namprd13.prod.outlook.com ([fe80::69bf:b8e4:7fa0:ae74]) by CH2PR13MB3525.namprd13.prod.outlook.com ([fe80::69bf:b8e4:7fa0:ae74%7]) with mapi id 15.20.3999.027; Wed, 31 Mar 2021 18:50:56 +0000 From: Trond Myklebust To: "dwysocha@redhat.com" CC: "linux-nfs@vger.kernel.org" , "Anna.Schumaker@netapp.com" , "dhowells@redhat.com" Subject: Re: RFC: Approaches to resolve netfs API interface to NFS multiple completions problem Thread-Topic: RFC: Approaches to resolve netfs API interface to NFS multiple completions problem Thread-Index: AQHXJlZK3AOTzzfwiE65ZpH9xPMWkaqeY/CAgAAIf4CAAARzgA== Date: Wed, 31 Mar 2021 18:50:56 +0000 Message-ID: <9cfd5bc3cfc6abc2d3316b0387222e708d67f595.camel@hammerspace.com> References: <49e123c6702cb6b27f114dfa64157d9a73463fad.camel@hammerspace.com> In-Reply-To: Accept-Language: en-US, en-GB Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=none action=none header.from=hammerspace.com; x-originating-ip: [68.36.133.222] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: debe29b3-6589-4128-b0c4-08d8f475eb16 x-ms-traffictypediagnostic: CH2PR13MB3320: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: iPgo6NP6Y/W1qXzxjuaOzglCZ6CpX6WkUG4Z+/+xodhqS2ZkklZ9ZNF5ZEGrFlT4u99zhBGdTWMNBKPiUeTyZzZzC1iV9DvWXDxmgWXi0gk6J7sB5I8KE3xbLP/4NuK1pnqobl9z2IYPba97eteQLN1mrBO7JQX3XZBylItdZOfR7DCCW3ffxVB+qF0Cb7qMd9KowYNlVuIr0ts/flUvZEffLhPKuXH6hdnsgieS8hyofD2J22I7s5PNbLg3Kc4FYiCq6seVtA5po3KyvP++pTv/UOhqoUCzsk0zNB+YLE26w/ioVf3TzjkfNjNNt3XBdzFR4nEAy4n1YO7F35sZEZ9YSdfBWVD3rWil9pY0mpG0uyR1pF/BXl7xC3qRy/r44XXeh34Tl2M0GiDMe769vBvA9v61THuG5ZGdeMj4/21A6oRGwtXQIPVPL2UcUl+8ddki1ociQ66LEG336pZ3y8+EQteh8GGTgYMrSc5RZgO3tKTWirYmke6IDYoaFWDYrjuc2pJsqhx931OaZdA4AQhX1ohyllhydTlM9QXE+ELrLtQ+XzIfUStV74LXq19BacfPI1IaIw9+PSGY56GTxa24WgDIEY8QBNPVIpJ9TNaLxnChfSxJ/7Bi0R1AIF3+Ib27ccr7Tc/wlCrOnzE3DFRGEVuLsgyo9MpOz9RXPIlZz/hrKYVoUAzNwC3g7Se4jtuM21sPQf2G+n5QXVWqzMrN+BQq4Buivo7H2tHrYhhNFDQskFnBU2GtZku0Hdtb x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR13MB3525.namprd13.prod.outlook.com;PTR:;CAT:NONE;SFS:(39840400004)(366004)(346002)(376002)(136003)(396003)(186003)(26005)(83380400001)(2906002)(4326008)(6506007)(71200400001)(86362001)(478600001)(64756008)(76116006)(66946007)(66446008)(316002)(5660300002)(66556008)(2616005)(53546011)(54906003)(66476007)(6512007)(8936002)(6916009)(6486002)(15974865002)(36756003)(8676002)(38100700001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?B?eXROTHRkUkQ5ZzZBNTdsTzUzRXk4OVgzajUvYUdKb3V1aVlaTEYzc2sxRWFX?= =?utf-8?B?N0k5NnJsak9JaHo1dlV1dHk4TjgwaUNkWE15Vy9XRW5hU1I5ck9HTUJaZlJ2?= =?utf-8?B?OFJwVmxIcUVxQ25JeDFZZFo0VkJKbjAzN3loOHZ2eE5RUWUrR1BrdFlrTHVK?= =?utf-8?B?RzFidUNEOG1CY2lTNnlyMGlVZWpXcUhkZUNPK3B0cWNTRVR2T3kzdzBHTzFL?= =?utf-8?B?amZpYXRHR1BRV0lkUzNmamREQjhPaC9telRGU3kxUGxEL1RucGJtQ096YTdO?= =?utf-8?B?VDFzcWp3MWh2OFJUbktYWXF4V0llUExwNjlWQkxMS1YwQmprWG56WHpGQkRs?= =?utf-8?B?b3RVanBPUUJFQ0RVeXRMd2xrZ1lIMnpWc3VQQnUyZlJIY2ZTZVB2NnYvRStG?= =?utf-8?B?enM2ZUhmZzQxUDNGZithTzdnUmhkVVhUeVZsNFZHZW45M3FtU3BFdStiQldv?= =?utf-8?B?L3dqT0FvZG1zR3BmS2J1Y2U4YjQxc2ovalY3K3pJTHVUQWJ3VStOcGRiU05v?= =?utf-8?B?anlScDN5b0pPaFVBVzJabUx1MDhEYUdOSVYveFJEVWZkaGYweGNwUWVrcGtR?= =?utf-8?B?bklVUmVpYmhQTnFpdFA1L3NucjJwYlZUejdWUVAxUGw4YjlFZ2dzbHhOS29C?= =?utf-8?B?S2tNaHJmNk5DM2VhQUg3ZWRXcVBtT0llbng0c3lIZTZBd0U3cVh6aXh4Q25G?= =?utf-8?B?TTNWTzZQRkhyKzYzMUJFTHk4N05DUWhhbXdQcWFCR3VBMU8vVHhkWkRqbWZr?= =?utf-8?B?R2NqTFRSa2tvT2EybGVCcDJCeksrSlAyODJpVG9BOGdxSjBvMmxwNXBBSVU2?= =?utf-8?B?NCt3djI3NEM4azh3b25YS2pNYWYzUFhXZDBud2RhQWc0aTQyZW5EMnJneTdy?= =?utf-8?B?aDE4aWppd21OQjBkMGdvaHpqVlN3MHZVL1Z4M1lSRWJCalJncGxnTUl0bWI3?= =?utf-8?B?czdzUnlNN3RLaHVpU2ljcldpZ3Y1bjNHS1dSemwzRTl6Qkc3a1pqRzNwRm80?= =?utf-8?B?WGltM0F5b3RpUjlSVFBxdEtkUTRpb2VqSXBjRFNhLy9CZHNrazhQNTlUY1RN?= =?utf-8?B?Q3ZoSmJINVhya1VqQzl4dzRQTmF0T3JaUXhoUmorTW91Skk3K3dONml3Mzdm?= =?utf-8?B?c0MzS1FPZEJRTm56TTljZ3REUys2emZ5eCtaUm4rUlZHRWhtN2xXN3UzVkJW?= =?utf-8?B?ZFBHVVJ5ZHBSSmxBR1MwR1E4RmZaTmZ3VVJPaWZ2U1BHbnNleUN5TVpkdFU1?= =?utf-8?B?T0U1Tm1NWWtlWVF2QzhhSjV5VVc0aDJmUDVQdjY5TktjQkhQbmpiSWk1azVx?= =?utf-8?B?eGdURVZucGlwSUl0QmVpMlVVL2NXRmQ2TDVrdEdPL1llUXU2eElaOEpicjlT?= =?utf-8?B?MkVWdVpYSnhkSVRLZjAxR2UvZzFBeCttR3hxaU9OdmVRa2QrZWNMK0hJbnkr?= =?utf-8?B?SHlQQUJPakxtYkVxbVhaRlMxL0xHdjFobFRZZlQrOU1aYjIzT29kdFlDb2hD?= =?utf-8?B?THRaUzdleEl0M0FQWUhVc1lKeW50cFNOZ1lTaUJ1c3A5bUpGUXhpYWJCSEVw?= =?utf-8?B?QVczZDU3NlNuRG9HbGR0R2VGS2JJUi9sZ1BuSlFmMllpNHhtTnRoMXh1Y3FS?= =?utf-8?B?WEwxdHM1bU9td1BudlNwWXJueS9maHh0dzFDUmFJdUV2TVFBZGdaTzQ3VGh6?= =?utf-8?B?U2dJRWhmcTB5K2lDUXFEOVV6a2VKQzlIc0QwV1E4K2hTMTZkMFhRdi8xSmN0?= =?utf-8?Q?XhKRRLbrcNR8DctpasMkR9887TOqqlbE6WyIW//?= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: <8268D3C1A2443045AFD0E7BC9CE1E6C0@namprd13.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: hammerspace.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH2PR13MB3525.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: debe29b3-6589-4128-b0c4-08d8f475eb16 X-MS-Exchange-CrossTenant-originalarrivaltime: 31 Mar 2021 18:50:56.3959 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 0d4fed5c-3a70-46fe-9430-ece41741f59e X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: A9u3CBD/HfR0ld/MlyQvTLzVKtNC8bTG0qWJli7V2lk8NoxrxHgWLBhrfL5iGgPz1iChza10M2g3+DcM2elxrw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR13MB3320 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org T24gV2VkLCAyMDIxLTAzLTMxIGF0IDE0OjM0IC0wNDAwLCBEYXZpZCBXeXNvY2hhbnNraSB3cm90 ZToNCj4gT24gV2VkLCBNYXIgMzEsIDIwMjEgYXQgMjowNCBQTSBUcm9uZCBNeWtsZWJ1c3QgPA0K PiB0cm9uZG15QGhhbW1lcnNwYWNlLmNvbT4gd3JvdGU6DQo+ID4gDQo+ID4gT24gV2VkLCAyMDIx LTAzLTMxIGF0IDEzOjQ5IC0wNDAwLCBEYXZpZCBXeXNvY2hhbnNraSB3cm90ZToNCj4gPiA+IFRy b25kLA0KPiA+ID4gDQo+ID4gPiBJJ3ZlIGJlZW4gd29ya2luZyBvbiBnZXR0aW5nIE5GUyBjb252 ZXJ0ZWQgdG8gZGhvd2VsbHMgbmV3DQo+ID4gPiBmc2NhY2hlDQo+ID4gPiBhbmQNCj4gPiA+IG5l dGZzIEFQSXMgYW5kIHJ1bm5pbmcgaW50byBhIHByb2JsZW0gd2l0aCBob3cgTkZTIGlzIGRlc2ln bmVkDQo+ID4gPiBhbmQgaXQNCj4gPiA+IGludm9sdmVzIHRoZSBORlMgcGFnZWxpc3QuYyAvIHBn aW8gQVBJLsKgIEknZCBhcHByZWNpYXRlIGl0IGlmIHlvdQ0KPiA+ID4gY291bGQgcmV2aWV3IGFu ZCBnaXZlIHlvdXIgdGhvdWdodHMgb24gcG9zc2libGUgYXBwcm9hY2hlcy7CoCBJJ3ZlDQo+ID4g PiB0cmllZCB0byBvdXRsaW5lIHNvbWUgb2YgdGhlIHBvc3NpYmlsaXRpZXMgYmVsb3cuwqAgSSB0 cmllZCBjb2RpbmcNCj4gPiA+IG9wdGlvbiAjMyBhbmQgcmFuIGludG8gc29tZSBwcm9ibGVtcywg YW5kIGl0IGhhcyBhIHNlcmlhbGl6YXRpb24NCj4gPiA+IGxpbWl0YXRpb24uwqAgQXQgdGhpcyBw b2ludCBJJ20gbGVhbmluZyB0b3dhcmRzIG9wdGlvbiAyLCBzbyBJJ2xsDQo+ID4gPiBwcm9iYWJs eSB0cnkgdGhhdCBhcHByb2FjaCBpZiB5b3UgZG9uJ3QgaGF2ZSB0aW1lIGZvciByZXZpZXcgb3IN Cj4gPiA+IGhhdmUNCj4gPiA+IHN0cm9uZyB0aG91Z2h0cyBvbiBpdC4NCj4gPiA+IA0KPiA+IA0K PiA+IEkgYW0gbm90IGdvaW5nIHRocm91Z2ggYW5vdGhlciByZWRlc2lnbiBvZiB0aGUgTkZTIGNv ZGUgaW4gb3JkZXIgdG8NCj4gPiBhY2NvbW1vZGF0ZSBhbm90aGVyIGNhY2hlZnMgZGVzaWduLiBJ ZiBuZXRmcyBuZWVkcyBhIHJlZmFjdG9yaW5nIG9yDQo+ID4gcmVkZXNpZ24gb2YgdGhlIEkvTyBj b2RlIHRoZW4gaXQgd2lsbCBiZSBpbW1lZGlhdGVseSBOQUNLZWQuDQo+ID4gDQo+IEkgZG9uJ3Qg dGhpbmsgaXQgd2lsbCByZXF1aXJlIGEgcmVkZXNpZ24uwqAgSSB3YXMgdGhpbmtpbmcgbW9yZSBh Ym91dA0KPiBhZGRpbmcgYSBmbGFnIHRvIG5mc19wYWdlaW9fYWRkX3JlcXVlc3QoKSBmb3IgZXhh bXBsZSB0aGF0DQo+IHdvdWxkIHJldHVybiBhIGRpZmZlcmVudCB2YWx1ZSBpZiBjb2FsZXNjZSBv ZiB0aGUgcGFnZSBiZWluZw0KPiBhZGRlZCBmYWlsZWQuwqAgU28gd2UnZCBoYXZlOg0KPiBuZnNf cGFnZWlvX2luaXQoKTogY2FsbGVkIDEgdGltZQ0KPiBuZnNfcGFnZWlvX2FkZF9yZXF1ZXN0KCk6 IGNhbGxlZCBOIHRpbWVzLCBvbmUgZm9yIGVhY2ggcGFnZSwgYnV0IHN0b3ANCj4gaWYNCj4gY29h bGVzY2UgZmFpbHMNCj4gbmZzX3BhZ2Vpb19jb21wbGV0ZSgpOiBjYWxsZWQgMSB0aW1lDQo+IA0K PiA+IFdoeSBkb2VzIG5ldGZzIG5lZWQgdG8ga25vdyB0aGVzZSBkZXRhaWxzIGFib3V0IHRoZSBO RlMgY29kZQ0KPiA+IGFueXdheT8NCj4gPiANCj4gV2UgY2FuIHByb2JhYmx5IGdldCBieSB3aXRo b3V0IGl0IGJ1dCBpdCB3aWxsIGJlIGF3a3dhcmQgYW5kIHByb2JhYmx5DQo+IG5vdCB0aGUNCj4g YmVzdCwgYnV0IEknbSBub3Qgc3VyZS4NCj4gDQo+IEkgdHJpZWQgdG8gZXhwbGFpbiBiZWxvdyB3 aXRoIGEgcHJvYmxlbSBzdGF0ZW1lbnQgYnV0IG1heWJlIGl0IHdhcw0KPiB1bmNsZWFyLg0KPiBU aGUgYmFzaWMgZGVzaWduIG9mIG5ldGZzIEFQSSBhcyBpdCBwZXJ0YWlucyB0byB0aGlzIHByb2Js ZW0gaXM6DQo+ICogaXNzdWVfb3AoKTogY2FsbHMgaW50byB0aGUgc3BlY2lmaWMgbmV0ZnMgKE5G UykgdG8gb2J0YWluIHRoZSBkYXRhDQo+IGZyb20gc2VydmVyDQo+IChzZW5kIG9uZSBvciBtb3Jl IFJQQ3MpDQo+ICogbmV0ZnNfc3VicmVxX3Rlcm1pbmF0ZWQoKTogd2hlbiBSUEMocykgYXJlIGNv bXBsZXRlZCwgd2UgbmVlZCB0bw0KPiBjYWxsDQo+IG5ldGZzIEFQSSBiYWNrIHRvIHNheSB0aGUg ZGF0YSBpcyBlaXRoZXIgdGhlcmUgb3IgdGhlcmUgd2FzIGFuIGVycm9yDQo+IA0KDQpUaGF0J3Mg YSBwcm9ibGVtLiBUaGF0IG1lYW5zIE5GUyBhbmQgbmV0ZnMgbmVlZCBpbnRpbWF0ZSBrbm93bGVk Z2Ugb2YNCmVhY2ggb3RoZXIncyBkZXNpZ24sIGFuZCBJJ20gbm90IGdvaW5nIGFsbG93IHVzIHRv IGdvIHRoZXJlIGFnYWluLiBXZQ0KZGlkIHRoYXQgd2l0aCBjYWNoZWZzLCBhbmQgaGVyZSB3ZSBh cmUgMTAgeWVhcnMgbGF0ZXIgZG9pbmcgYSBmdWxsDQpyZWRlc2lnbi4gVGhhdCdzIHVuYWNjZXB0 YWJsZS4NCg0KSWYgbmV0ZnMgcmVxdWlyZXMgdGhlc2UgZGV0YWlsZWQgY2hhbmdlcyB0byB0aGUg TkZTIGNvZGUsIHRoZW4gdGhhdCdzIGENCnJlZCBmbGFnIHRoYXQgdGhlIHdob2xlIGRlc2lnbiBp cyBicm9rZW4gYW5kIG5lZWRzIHRvIGJlIHJldmlzZWQuDQoNCj4gSSB3b3VsZCBub3RlIHRoYXQg YXNzdW1pbmcgd2UgY2FuIGNvbWUgdXAgd2l0aCBzb21ldGhpbmcgYWNjZXB0YWJsZQ0KPiB0bw0K PiBORlMsIGl0IHNob3VsZCBzaW1wbGlmeSBib3RoIG5mc19yZWFkcGFnZSgpIGFuZA0KPiBuZnNf cmVhZHBhZ2VzL25mc19yZWFkaGVhZC4NCj4gSSBob3BlIHdlIGNhbiBmaW5kIHNvbWUgY29tbW9u IGdyb3VuZCBzbyBpdCdzIG5laXRoZXIgdG9vIGludmFzaXZlIHRvDQo+IE5GUyBhbmQgYWxzbyBt YXliZSB0aGVyZSdzIHNvbWUgc2ltaWxhciBpbXByb3ZlbWVudHMgaW4gTkZTIHRoYXQgY2FuDQo+ IGJlIGRvbmUgYWxvbmcgd2l0aCB0aGlzIGludGVyZmFjZS4NCj4gDQo+IA0KPiA+ID4gVGhhbmtz Lg0KPiA+ID4gDQo+ID4gPiANCj4gPiA+IFByb2JsZW06IFRoZSBORlMgcGFnZWlvIGludGVyZmFj ZSBkb2VzIG5vdCBleHBvc2UgYSBtYXggcmVhZA0KPiA+ID4gbGVuZ3RoDQo+ID4gPiB0aGF0DQo+ ID4gPiB3ZSBjYW4gZWFzaWx5IHVzZSBpbnNpZGUgbmV0ZnMgY2xhbXBfbGVuZ3RoKCkgZnVuY3Rp b24uwqAgQXMgYQ0KPiA+ID4gcmVzdWx0LA0KPiA+ID4gd2hlbg0KPiA+ID4gaXNzdWVfb3AoKSBp cyBjYWxsZWQgaW5kaWNhdGluZyBhIHNpbmdsZSBuZXRmcyBzdWJyZXF1ZXN0LCB0aGlzDQo+ID4g PiBjYW4NCj4gPiA+IGJlDQo+ID4gPiBzcGxpdCBpbnRvDQo+ID4gPiBtdWx0aXBsZSBORlMgc3Vi cmVxdWVzdHMgLyBSUENzIGluc2lkZSBndXRzIG9mIE5GUyBwYWdlaW8gY29kZS4NCj4gPiA+IE11 bHRpcGxlDQo+ID4gPiBORlMgc3VicmVxdWVzdHMgcmVxdWVzdHMgbGVhZHMgdG8gbXVsdGlwbGUg Y29tcGxldGlvbnMsIGFuZCB0aGUNCj4gPiA+IG5ldGZzDQo+ID4gPiBBUEkgZXhwZWN0cyBhIDE6 MSBtYXBwaW5nIGJldHdlZW4gaXNzdWVfb3AoKSBhbmQNCj4gPiA+IG5ldGZzX3N1YnJlcV90ZXJt aW5hdGVkKCkgY2FsbHMuDQo+ID4gPiANCj4gPiA+IERldGFpbHMgb2YgdGhlIE5GUyBwYWdlaW8g QVBJIChzZWUgaW5jbHVkZS9saW51eC9uZnNfcGFnZS5oIGFuZA0KPiA+ID4gZnMvbmZzL3BhZ2Vs aXN0LmMpDQo+ID4gPiBEZXRhaWxzIG9mIHRoZSBuZXRmcyBBUEkgKHNlZSBpbmNsdWRlL2xpbnV4 L25ldGZzLmggYW5kDQo+ID4gPiBmcy9uZXRmcy9yZWFkX2hlbHBlci5jKQ0KPiA+ID4gDQo+ID4g PiBUaGUgTkZTIHBhZ2VpbyBBUEkgMyBtYWluIGNhbGxzIGFyZSBhcyBmb2xsb3dzOg0KPiA+ID4g MS4gbmZzX3BhZ2Vpb19pbml0KCk6IGluaXRpYWxpemUgYSBwYWdlaW8gc3RydWN0dXJlIChSL1cg SU8gb2YgTg0KPiA+ID4gcGFnZXMpDQo+ID4gPiAyLiBuZnNfcGFnZWlvX2FkZF9yZXF1ZXN0KCk6 IGNhbGxlZCBmb3IgZWFjaCBwYWdlIHRvIGFkZCB0byBhbiBJTw0KPiA+ID4gKiBDYWxscyBuZnNf cGFnZWlvX2FkZF9yZXF1ZXN0X21pcnJvciAtPiBfX25mc19wYWdlaW9fYWRkX3JlcXVlc3QNCj4g PiA+IMKgICogX19uZnNfcGFnZWlvX2FkZF9yZXF1ZXN0IG1heSBjYWxsIG5mc19wYWdlaW9fZG9p bygpIHdoaWNoDQo+ID4gPiBhY3R1YWxseQ0KPiA+ID4gwqDCoMKgIHNlbmRzIGFuIFJQQyBvdmVy IHRoZSB3aXJlIGlmIHBhZ2UgY2Fubm90IGJlIGFkZGVkIHRvIHRoZQ0KPiA+ID4gcmVxdWVzdA0K PiA+ID4gwqDCoMKgICgiY29hbGVzY2VkIikgZHVlIHRvIHZhcmlvdXMgZmFjdG9ycy7CoCBGb3Ig bW9yZSBkZXRhaWxzLCBzZWUNCj4gPiA+IMKgwqDCoCBuZnNfcGFnZWlvX2RvX2FkZF9yZXF1ZXN0 KCkgYW5kIGFsbCB1bmRlcmx5aW5nIGNvZGUgaXQgY2FsbHMNCj4gPiA+IHN1Y2gNCj4gPiA+IMKg wqDCoCBhcyBuZnNfY29hbGVzY2Vfc2l6ZSgpIGFuZCBzdWJzZXF1ZW50IHBnaW8tPnBnX29wcy0+ cGdfdGVzdCgpDQo+ID4gPiBjYWxscw0KPiA+ID4gMy4gbmZzX3BhZ2Vpb19jb21wbGV0ZSgpIC0g ImNvbXBsZXRlIiB0aGUgcGFnZWlvDQo+ID4gPiAqIGNhbGxzIG5mc19wYWdlaW9fY29tcGxldGVf bWlycm9yIC0+IG5mc19wYWdlaW9fZG9pbygpDQo+ID4gPiANCj4gPiA+IFRoZSBORlMgcGFnZWlv IEFQSSB0aHVzIG1heSBnZW5lcmF0ZSBtdWx0aXBsZSBvdmVyIHRoZSB3aXJlIFJQQ3MNCj4gPiA+ IGFuZCB0aHVzIG11bHRpcGxlIGNvbXBsZXRpb25zIGV2ZW4gdGhvdWdoIGF0IHRoZSBoaWdoIGxl dmVsIG9ubHkNCj4gPiA+IG9uZSBjYWxsIHRvIG5mc19wYWdlaW9fY29tcGxldGUoKSBpcyBtYWRl Lg0KPiA+ID4gDQo+ID4gPiBPcHRpb24gMTogSnVzdCB1c2UgTkZTIHBhZ2VpbyBBUEkgYXMgaXMs IGFuZCBkZWFsIHdpdGggcG9zc2libGUNCj4gPiA+IG11bHRpcGxlDQo+ID4gPiBjb21wbGV0aW9u cy4NCj4gPiA+IC0gSW5jb25zaXN0ZW50IHdpdGggbmV0ZnMgZGVzaWduIGludGVudA0KPiA+ID4g LSBOZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIFJQQyBjb21wbGV0aW9uIHN0YXR1cywgYW5kIGZv cg0KPiA+ID4gZXhhbXBsZSwNCj4gPiA+IGlmIG9uZSBjb21wbGV0ZXMgd2l0aCBzdWNjZXNzIGFu ZCBvbmUgYW4gZXJyb3IsIHByb2JhYmx5IGNhbGwNCj4gPiA+IG5ldGZzX3N1YnJlcV90ZXJtaW5h dGVkKCkgd2l0aCB0aGUgZXJyb3IuDQo+ID4gPiAtIFRoZXJlJ3Mgbm8gd2F5IGZvciB0aGUgY2Fs bGVyIG9mIHRoZSBORlMgcGFnZWlvIEFQSSB0byBrbm93IGhvdw0KPiA+ID4gbWFueSBSUENzIGFu ZCB0aHVzIGNvbXBsZXRpb25zIG1heSBvY2N1ci7CoCBUaHVzLCBpdCdzIHVuY2xlYXIgaG93DQo+ ID4gPiBvbmUgd291bGQgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIFJFQUQgdGhhdCByZXN1bHRlZCBp biBhIHNpbmdsZQ0KPiA+ID4gUlBDDQo+ID4gPiBvdmVyIHRoZSB3aXJlIHRoYXQgY29tcGxldGVk IGFzIGEgc2hvcnQgcmVhZCwgYW5kIGEgUkVBRCB0aGF0DQo+ID4gPiByZXN1bHRlZCBpbiBtdWx0 aXBsZSBSUENzIHRoYXQgd291bGQgZWFjaCBjb21wbGV0ZSBzZXBhcmF0ZWx5LA0KPiA+ID4gYnV0 IHdvdWxkIGV2ZW50dWFsbHkgY29tcGxldGUNCj4gPiA+IA0KPiA+ID4gT3B0aW9uIDI6IENyZWF0 ZSBhIG1vcmUgY29tcGxleCAnY2xhbXBfbGVuZ3RoKCknIGZ1bmN0aW9uIGZvcg0KPiA+ID4gTkZT LA0KPiA+ID4gdGFraW5nIGludG8gYWNjb3VudCBhbGwgd2F5cyBORlMgLyBwTkZTIGNvZGUgY2Fu IHNwbGl0IGEgcmVhZC4NCj4gPiA+ICsgQ29uc2lzdGVudCB3aXRoIG5ldGZzIGRlc2lnbiBpbnRl bnQNCj4gPiA+ICsgTXVsdGlwbGUgInNwbGl0IiByZXF1ZXN0cyB3b3VsZCBiZSBjYWxsZWQgaW4g cGFyYWxsZWwgKHNlZSBsb29wDQo+ID4gPiBpbnNpZGUgbmV0ZnNfcmVhZGFoZWFkLCB3aGljaCBy ZXBlYXRlZGx5IGNhbGxzDQo+ID4gPiBuZXRmc19ycmVxX3N1Ym1pdF9zbGljZSkNCj4gPiA+IC0g TG9va3MgaW1wb3NzaWJsZSB3aXRob3V0IHJlZmFjdG9yaW5nIG9mIE5GUyBwZ2lvIEFQSS7CoCBX ZSBuZWVkDQo+ID4gPiB0byBwcmV2ZW50IG5mc19wYWdlaW9fYWRkX3JlcXVlc3QoKSBmcm9tIGNh bGxpbmcNCj4gPiA+IG5mc19wYWdpb19kb2lvKCksDQo+ID4gPiBhbmQgcmV0dXJuIHNvbWUgaW5k aWNhdGlvbiBjb2FsZXNjZSBmYWlsZWQuwqAgSW4gYWRkaXRpb24sIGl0IG1heQ0KPiA+ID4gcnVu IGludG8gcHJvYmxlbXMgd2l0aCBmYWxsYmFjayBmcm9tIERTIHRvIE1EUyBmb3IgZXhhbXBsZSAo c2VlDQo+ID4gPiBjb21taXQgZDkxNTZmOWYzNjQ4OTdlOTNiZGQ5OGI0YWQyMjEzOGRlMThmN2My NCkuDQo+ID4gPiANCj4gPiA+IE9wdGlvbiAzOiBVdGlsaXplIE5FVEZTX1NSRVFfU0hPUlRfUkVB RCBmbGFnIGFzIG5lZWRlZC4NCj4gPiA+ICsgQ29uc2lzdGVudCB3aXRoIG5ldGZzIGRlc2lnbiBp bnRlbnQNCj4gPiA+IC0gTXVsdGlwbGUgInNwbGl0IiByZXF1ZXN0cyB3b3VsZCBiZSBzZXJpYWxp emVkIChzZWUgY29kZQ0KPiA+ID4gcGF0aHMgaW5zaWRlIG5ldGZzX3N1YnJlcV90ZXJtaW5hdGVk IHRoYXQgY2hlY2sgZm9yIHRoaXMgZmxhZykuDQo+ID4gPiAtIExvb2tzIGltcG9zc2libGUgd2l0 aG91dCBzb21lIHJlZmFjdG9yaW5nIG9mIE5GUyBwZ2lvIEFQSS4NCj4gPiA+ICogTm90ZXM6IFRl cm1pbmF0ZSBORlMgcGFnZWlvIHBhZ2UgYmFzZWQgbG9vcCBhdCB0aGUgZmlyc3QgY2FsbA0KPiA+ ID4gdG8gbmZzX3BhZ2Vpb19kb2lvKCkuwqAgV2hlbiBhIFJFQUQgY29tcGxldGVzLCBORlMgY2Fs bHMNCj4gPiA+IG5ldGZzX3N1YnJlcV90ZXJtaW5hdGVkKCkgd2l0aCBORVRGU19TUkVRX1NIT1JU X1JFQUQNCj4gPiA+IGFuZCBpcyBwcmVwYXJlZCB0byBoYXZlIHRoZSByZXN0IG9mIHRoZSBzdWJy ZXF1ZXN0IGJlDQo+ID4gPiByZXN1Ym1pdHRlZC4NCj4gPiA+IE5lZWQgdG8gc29tZWhvdyBmYWls IGVhcmx5IG9yIGF2b2lkIGVudGlyZWx5IHN1YnNlcXVlbnQgY2FsbHMgdG8NCj4gPiA+IG5mc19w YWdpb19kb2lvKCkgZm9yIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHRob3VnaCwgYW5kIGhhbmRsZQ0K PiA+ID4gZXJyb3Igc3RhdHVzIG9ubHkgZnJvbSB0aGUgZmlyc3QgUlBDLg0KPiA+ID4gDQo+ID4g PiBPcHRpb24gNDogQWRkIHNvbWUgZmluYWwgY29tcGxldGlvbiByb3V0aW5lIHRvIGJlIGNhbGxl ZCBuZWFyDQo+ID4gPiBib3R0b20gb2YgbmZzX3BhZ2Vpb19jb21wbGV0ZSgpIGFuZCB3b3VsZCBw YXNzIGluIGF0IGxlYXN0DQo+ID4gPiBuZXRmc19yZWFkX3N1YnJlcXVlc3QoKSwgcG9zc2libHkg bmZzX3BhZ2Vpb19kZXNjcmlwdG9yLg0KPiA+ID4gKyBJbmNvbnNpc3RlbnQgd2l0aCBuZXRmcyBk ZXNpZ24gaW50ZW50DQo+ID4gPiAtIFdvdWxkIGJlIGEgbmV3IE5GUyBBUEkgb3IgY2FsbCBvbiB0 b3Agb2YgZXZlcnl0aGluZw0KPiA+ID4gLSBOZWVkIHRvIGhhbmRsZSB0aGUgIm11bHRpcGxlIGNv bXBsZXRpb24gd2l0aCBkaWZmZXJlbnQNCj4gPiA+IHN0YXR1cyIgcHJvYmxlbSAoc2VlICMxKS4N Cj4gPiA+IA0KPiA+IA0KPiA+IC0tDQo+ID4gVHJvbmQgTXlrbGVidXN0DQo+ID4gTGludXggTkZT IGNsaWVudCBtYWludGFpbmVyLCBIYW1tZXJzcGFjZQ0KPiA+IHRyb25kLm15a2xlYnVzdEBoYW1t ZXJzcGFjZS5jb20NCj4gPiANCj4gPiANCj4gDQoNCi0tIA0KVHJvbmQgTXlrbGVidXN0DQpDVE8s IEhhbW1lcnNwYWNlIEluYw0KNDk4NCBFbCBDYW1pbm8gUmVhbCwgU3VpdGUgMjA4DQpMb3MgQWx0 b3MsIENBIDk0MDIyDQrigIsNCnd3dy5oYW1tZXIuc3BhY2UNCg0K