From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id A13EDE825 for ; Tue, 26 Sep 2023 15:08:06 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 6F2731721 for ; Tue, 26 Sep 2023 15:07:36 +0200 (CEST) Received: from mail02.cetsi.fr (mail02.cetsi.fr [91.151.64.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Tue, 26 Sep 2023 15:07:35 +0200 (CEST) Received: from CYLNEXC01.cyllene.corp (unknown [10.0.250.28]) by mail02.cetsi.fr (Postfix) with ESMTP id 643704050299; Tue, 26 Sep 2023 15:07:24 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 mail02.cetsi.fr 643704050299 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groupe-cyllene.com; s=dkim; t=1695733644; bh=PylxKJ6XLIPs6xGN56aoUeR5s52aFy0EB2Vuqu3MdL0=; h=From:To:Subject:Date:References:In-Reply-To:From; b=OwoxwybANiAeED/vV2eWjBfb2Sg8vXJjr810KORWpBqJgcjatpTqZoHhgUkA/lYSU c7I2PCf/eqwmK/z2EeMvTsipbjrzimJKqdRfTDt0HQLPMZ6fHi8LMD9+4wpDh3XMSk sXTu8tJXoV6HOLaVFAK8r6ellLiBIQokMkL9HsXA= Received: from CYLNEXC01.cyllene.corp (10.0.250.28) by CYLNEXC01.cyllene.corp (10.0.250.28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.32; Tue, 26 Sep 2023 15:07:24 +0200 Received: from FRA01-PR2-obe.outbound.protection.outlook.com (10.0.250.254) by CYLNEXC01.cyllene.corp (10.0.250.28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.32 via Frontend Transport; Tue, 26 Sep 2023 15:07:24 +0200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lbzjqH2nF7opnhcwO4OAFQGBbOvVWYZJvs9E6hbxrnYq5aXb9SrT3YDExK9G0p4yhJdf9PGTq6OYcIwPWkAOh12oFCxGrMjGP6e33Y9ea7Vcsi3DwS7gj2eIHP95TJkB9EyNEhoGtcP7AAlhemrVxPipTbl0Zj0thK4D+iKIJDPqlb7gdgAKlLTGERRAtFlRE4dBmHcI4pN7+BFx7PYc1pKRJOcyiYAAzroDj3+h+M1V1pUA8VYqhacI4Rb1rGC7mTy+slIz10uy3w/Q9M0GKwk6BQFCmfVlinHSeJgMEx1P6BEX+rxDHkZmy7m9yL7P0M3uJuPuCsVGVs3PgKlpUQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=PylxKJ6XLIPs6xGN56aoUeR5s52aFy0EB2Vuqu3MdL0=; b=BbiagcbkVCGM3oqBneuIMlWaMcTgg5EeUZQEKJ+bveEk6n8bSPzYDL55c4FzNLgeSJPun3R50KNYM8OvxTS63lQ4WVczQjShrtjF+U+pmTD4LYREVvva2WFHl1pdpzLNBWhCNtC2p/w9ekOpj0UWkzw/H0KV+xgxxmOfjodKYevVnavkLHw9Ru0VaTxIWdWlFa8fzaJ4E8SC08ttkz+DvF7z/ambFpwFrOYSzolTOHnu+CUvrJhIqO/YUybO0ZQcc4YFA3gutspTKS7I7u3zvdXEjxVT9x9hGM4/riV1HX0Oj3DdJ2cJN6+IzxVhUUafZs3DEVWnpQjwU/Wcl4dzJw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=groupe-cyllene.com; dmarc=pass action=none header.from=groupe-cyllene.com; dkim=pass header.d=groupe-cyllene.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=groupecyllene.onmicrosoft.com; s=selector2-groupecyllene-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PylxKJ6XLIPs6xGN56aoUeR5s52aFy0EB2Vuqu3MdL0=; b=mr1r7aOX+bNqruifanyUyQu52WLl82RO56FWAlgY0w05CKDYsrAG1YSSx14rePA63yYpY9d+gCmYih9tbkfLHa3PT/SUJsxuQwS8BD6OZXJzMCo66GeNrXtlxoV5MlPJSe+QPhFPnmrF2Wctl+JUAbr1eFI19m5DeFyorqX+qTg= Received: from MR1P264MB2481.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:32::17) by PAZP264MB3119.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:1f2::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.28; Tue, 26 Sep 2023 13:07:18 +0000 Received: from MR1P264MB2481.FRAP264.PROD.OUTLOOK.COM ([fe80::b2f8:266c:512c:5d75]) by MR1P264MB2481.FRAP264.PROD.OUTLOOK.COM ([fe80::b2f8:266c:512c:5d75%6]) with mapi id 15.20.6813.027; Tue, 26 Sep 2023 13:07:18 +0000 From: "DERUMIER, Alexandre" To: "pve-devel@lists.proxmox.com" , "t.lamprecht@proxmox.com" , "s.hanreich@proxmox.com" Thread-Topic: [pve-devel] [RFC cluster/manager/network 0/6] Add support for DHCP servers to SDN Thread-Index: AQHZ4lpsRdoos+ljYUmW0VtDTE0RhrAVAnmAgAN4lACAAC2RgIAAA68AgAAQzwCAAAQHgIAABKOAgAuN4wCACL6tAIAAHbMA Date: Tue, 26 Sep 2023 13:07:18 +0000 Message-ID: References: <20230908134304.2009415-1-s.hanreich@proxmox.com> <2fd1071602ad075d4580d62565fc757e4bd92a91.camel@groupe-cyllene.com> <3e766920-35e9-4acf-a9fa-f3b56fe0408e@proxmox.com> <7980640a-da18-9da7-88cb-f8602c9339d4@proxmox.com> <5708827d07ec44793cccda18d75a66562a093bc0.camel@groupe-cyllene.com> <30aa87542f4b615aa9f1295b170f26eb8c146ba6.camel@groupe-cyllene.com> <87490886980ba3d102cbfa3b40c858fcd9ffdbe7.camel@groupe-cyllene.com> <3105e957-706e-d512-36f5-6ba558b347ef@proxmox.com> In-Reply-To: <3105e957-706e-d512-36f5-6ba558b347ef@proxmox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.48.1-0ubuntu1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=groupe-cyllene.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MR1P264MB2481:EE_|PAZP264MB3119:EE_ x-ms-office365-filtering-correlation-id: 2a175091-5f3a-4ae2-3353-08dbbe91831a x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: QXWwm2xjeJMjmbI7Gm5xQLLDI3nxFQ1+gtRSgRjEUO+NbeWIecjYBWFijzMZy/V4j5/hody51L6BPAvBE4PUSRNmXrsWSgo/sWb94M9G0NavzFh17MAFCQRAg5myloqidkO5X27HzbWnJs7qjB3oTxlhyG99X9wR10sMY0bmf6ClUdr4pAVWEp5489NIuDrP/7nSMEWz/7p0nbjeNS6H984nMPYjD7gwnRT9SnTDT1yBp0FjnOcaZq/EIwv6Im5qTn1oy+uROJl8NmUlUU9ICIiQAL/zoNAjWrVKSpWxvVBdfrqk+dHSPWI5P6fIiLx8XeeTonZ8fOJlj9q8hTF3u5BnMmKSix2ROdWaf+SS927nLtkmEfu1D3wRSSyMkiQuKeEDmbQ27TvKILow7keF9HBzEz6ox25FOEM8pZ7aOCp/DScElgyWZlrjpGwAL0GIANwSGTc4tW2E5Z/rJ4sIHCG9zgixJ+8ZWudY/BlRgfeYFVqEp0K03oC72T1yZHW393iJyzRx/UzUSVnMt8S6ayyqG92BAVF7bB7/4JBdqLpqFlUdiEVfVtXMyxkuL+DvOYaAIFXYQdsvJINrZJI7iSj1vBahy5vXaGpaVq5K5ae798SyuSK6ySz7WPpGQGtD x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MR1P264MB2481.FRAP264.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230031)(396003)(376002)(366004)(39850400004)(346002)(136003)(230922051799003)(451199024)(1800799009)(186009)(8676002)(8936002)(2906002)(26005)(91956017)(110136005)(478600001)(66476007)(316002)(76116006)(41300700001)(64756008)(66556008)(66946007)(66446008)(5660300002)(6506007)(71200400001)(53546011)(6486002)(6512007)(36756003)(2616005)(66574015)(83380400001)(38070700005)(86362001)(38100700002)(122000001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?eU4zaG8vWXZpZFY3ZlNaQ21lV2IrYWI2OWxpMDYzZi9HLzR1NGtYMlRqR3Ry?= =?utf-8?B?WjkzWjdoSjZDVnlSK2hKeFFQUXkxUDZ2MzY3WkpzVlVLMGZ6WmU5enRDczJj?= =?utf-8?B?WDJaVXFtTTRtSDc3bFRrdGxaNjdDS0xsb0F0aWRtalVvYUh4T081Lzg0aTk3?= =?utf-8?B?d0hkT2FuV2R3NEZ0NlNOVXdXcWVLaGtmT1BKem1WM2pzdU04NjEzNDR1NjFl?= =?utf-8?B?UlB1Q0hxWkVDUmJyZ1pMMWlNaFBPYUt1dE9UZnJPdDRjZi85TitRd2oxYk94?= =?utf-8?B?T3hjVnMwd1N4bHozTlIyK1ozQjNDSy9WYkZKc1gvSHNQMllwTXFlREdWck5o?= =?utf-8?B?R28rMTR6b1RBSGdNWkhCUk40VHNJLzUwR0ZOTlFzSkkyNnRRejJOcWNtaE5W?= =?utf-8?B?RDBWK2FGQlhvMEF5citKVVVoVm5XY2djc05Qc3pNSWlDOEc4ZDdtcFVlemxm?= =?utf-8?B?Yzh2bDdYSmo3eGlRZVFYa1FVTU9acHdDVmtVUTNpT1JoLzRUNmZIclB3bzJ5?= =?utf-8?B?RkU4VGp6VzRCTDRMUTZPbVhDNS9OY0dKZXA4Z3hPVTNaTTE0TnBIaVIzRG12?= =?utf-8?B?RTlEelRhMis1cDA4Z2E0MjRoTHpRc1lmRytyT0VLZ29HN3F2SWJPUmp3My9u?= =?utf-8?B?TldxUndDMURZVjUvLzBzV0ZIamFYTTlsU3M0dk5MeWxsQ05Tc05nK0dMN2Zz?= =?utf-8?B?TTRyY3F4T0RZbFpBT1o0N0JFRmFkOWYzRjhvekZ4L2hWKzJtZ24wT1crdUtu?= =?utf-8?B?eHdiRDdRU2dIVC8rYW5sSXdBRVFDRmNkWWYrVTJVMEp1RTdzeTFZcGFvangr?= =?utf-8?B?ekgrQzJiTCszWlBsMWYyemd1Nk9iZlE4S1pWSlArUkVEeC9VVHVyRXlKZ1By?= =?utf-8?B?VkdkMzh2MHJHUStxK2NMbUEvbFBaZWgvMXRsZnozWFNGNFdVZWREQmhxNGRV?= =?utf-8?B?aTNGK2ZENk5DLytGS3dqa0ZjUjlTY1VvWFpzTWtDdmpYZVVFTUcxd2dURDZp?= =?utf-8?B?YmpDSEJ3R1cvdkFYTnRkMlVOOEFJMlNTVThaazRobGZUckF4MUtzdzlPMXV0?= =?utf-8?B?eWR2U0xxWjU4ZDRZMUt3MlN1dFR3WkxCeU10eDdLcnpabGcvNk00Q09tOFV0?= =?utf-8?B?L2QvY09TWGRza1hBZk1pVXFrTHdvSFBGbFBoTkhpYnlVTjl5cFkwTDhJVjVj?= =?utf-8?B?dzNuT0xGSGxLd2Q3WWNRcDlNeCtXb1A0VkpqdHhaMXBENThTdnJieWhaZE5O?= =?utf-8?B?ZXdHN1VhbDNSdFduK3NJbG1OMTkyZFBaa2J1dHJoV0FuOEE4WFBTa3RiZDk2?= =?utf-8?B?SndZNXFETjl5ckdKMmIzaDM3LzdWWkthalhsSFdkQXJBT2M3bi9MenJCVStF?= =?utf-8?B?azRDRmZYanJyUm8reitMRUlmVzMwSEdZSm54T3hRM0o3STU3QURjeG1ORUtj?= =?utf-8?B?aUxxd1pTSEdQWFlyUlRkRWxnUUVJZlBXTm5aZ1hJck1nVWJENzdrbWFpc2F1?= =?utf-8?B?RUFnWktiY0J2bFh2K1VVeGhhNEs1WVZ2LythQ2tVS3VNeXRRK2t3VFIyaGtF?= =?utf-8?B?dUVLUXVoc2tiQXBmRWRHdm0wMDdmc0R1VnA4SmNsQWFQVXJyOVJnMFFRVWQ1?= =?utf-8?B?Vm9mUkc0TlVXSFAyMCtwZHFLc2ZzRzdwS095YUluR1FJSkZuZmdMQVhKaDU3?= =?utf-8?B?ZStTZzdGaTAybVJzU0hnZ2xJTjFzR2JWbzBLNVJpMzRDYThJY3RzUlk1dUxn?= =?utf-8?B?ZVN2YXVyQ3VkMGxQZkFSaU9sMktEWXRHc1VrbVZvR0F6cW5VSERNQzRFZ0gw?= =?utf-8?B?M0JiUHBSaUYvMGtweDJ5WkwwMld2NjYvanlMSzlDSklXaXErMjVRWTBCQ1RK?= =?utf-8?B?UU9tTGplMXlVQi9JUzh5ZDlveURHZmtRNTBIeGhySVB0UUpGRFA0RlFnNkYr?= =?utf-8?B?YkxnUjZNclVHcEJNbkF5S3BXSkdGa0lmY3h6RGZCRnB1djNMam16bVNxTlFM?= =?utf-8?B?RWk5QndPYVZnd0FBSCs3TzYvaTBHNXF4ckRKSVo2b3JER2xoUnFUN0dVbFpv?= =?utf-8?B?ZUlJRXJmTllQOUdwZFl2QjV4aElBMGlNY1hGSXMzWjJUM2Y0N2FTNGk5SWJI?= =?utf-8?B?cEtFdlVEVFM1SlM1S3FFcEtNNnRKdkRnMk5SYzFYWmVOVDM3cndqcFcwTXdC?= =?utf-8?Q?bCve2b2aNN/mnUCSCS1t3ZX907yXV8qxguroRt5RSmAh?= Content-Type: text/plain; charset="utf-8" Content-ID: <27A6337126D08442945E49E136BE0FC0@FRAP264.PROD.OUTLOOK.COM> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MR1P264MB2481.FRAP264.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 2a175091-5f3a-4ae2-3353-08dbbe91831a X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Sep 2023 13:07:18.1630 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: ee11ccf7-112c-4284-848b-f229745e715b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: DwcE+WEwcKdAHB2yhCTcO5+0pjkZbJan7W6s975MVV/ckBhDnfcPPtImV9kUzMSrbuvRaE/jxI1FL2BjckGdRwSBzDVqB+WbUkOE8Jg+lu3QVMSBSaQzR7pOX3qMGNyc X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAZP264MB3119 X-OriginatorOrg: groupe-cyllene.com X-SPAM-LEVEL: Spam detection results: 0 ARC_INVALID 0.1 ARC signature exists, but is not valid ARC_SIGNED 0.001 Message has a ARC signature AWL -0.462 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain DMARC_MISSING 0.1 Missing DMARC policy KAM_ASCII_DIVIDERS 0.8 Email that uses ascii formatting dividers and possible spam tricks SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [groupe-cyllene.com, groupecyllene.onmicrosoft.com] Subject: Re: [pve-devel] [RFC cluster/manager/network 0/6] Add support for DHCP servers to SDN X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 Sep 2023 13:08:06 -0000 TGUgbWFyZGkgMjYgc2VwdGVtYnJlIDIwMjMgw6AgMTM6MjAgKzAyMDAsIFN0ZWZhbiBIYW5yZWlj aCBhIMOpY3JpdMKgOg0KPiBPbiA5LzIwLzIzIDIzOjQ4LCBERVJVTUlFUiwgQWxleGFuZHJlIHdy b3RlOg0KPiA+IEZpbmFsbHksIEl0J3Mgbm90IHNvIGVhc3kgd2l0aG91dCB3cml0aW5nIGlwIG9u IHByb3htb3ggc2lkZSAoaW4gdm0NCj4gPiBjb25maWcgb3Igc29tZXdoZXJlIGVsc2UpLCBiZWNh dXNlIHRvIHJldHJpZXZlIGEgcmVzZXJ2ZWQgaXAgZnJvbQ0KPiA+IGV4dGVybmFsIGlwYW0gd2hl biB2bSBzdGFydCwgd2UgbmVlZCB0byBsb29rdXAgbWF5YmUgZnJvbSBtYWMNCj4gPiBhZGRyZXNz LA0KPiA+IG1heWJlIGZyb20gaG9zdG5hbWUgb2YgdGhlIHZtLCBvciBtYXliZSBzb21lIGN1c3Rv bSBhdHRyaWJ1dGVzLCBidXQNCj4gPiBub3QNCj4gPiBhbGwgaXBhbXMgYWNjZXB0IHNhbWUgYXR0 cmlidXRlcy4NCj4gPiANCj4gPiAoYXQgbGVhc3QgcGhwaXBhbSAmJiBuZXRib3ggZG9uJ3Qgc3Vw cG9ydCBhbGwgZmVhdHVyZXMsIG9yIG5vdA0KPiA+IGVhc3lseS4NCj4gPiBOZXRib3ggZm9yIGV4 YW1wbGUsIGZvciBtYWNhZGRyZXNzIG5lZWQgdG8gcmVnaXN0ZXIgdGhlIGZ1bGwgdm0NCj4gPiBv YmplY3QNCj4gPiAmJiBpbnRlcmZhY2VzICsgbWFjwqAgKyBtYXBwaW5nIHRvIGlwLCBQaHBpcGFt IGlzIGEgc2luZ2xlIGlwIG9iamVjdA0KPiA+IHdpdGggbWFjIGFzIGF0dHJpYnV0ZSkuDQo+IA0K PiBZZXMsIEkgdGhpbmsgc28gYXMgd2VsbC4gSXQgYWxzbyB3b3VsZCBtYWtlIHVzIGRlcGVuZGVu dCBvbiBleHRlcm5hbCANCj4gc3lzdGVtcywgd2hpY2ggbWlnaHQgbm90IGFsd2F5cyBiZSB1cCBh bmQgd291bGQgY3JlYXRlIGFuIGFkZGl0aW9uYWwgDQo+IGh1cmRsZSBmb3Igc2V0dGluZyB0aGlu Z3MgdXAuIEhhdmluZyBvdXIgb3duIHNvbHV0aW9uIGZvciB0aGlzIHNlZW1zIA0KPiBwcmVmZXJh YmxlIGltby4gV2UgY2FuIHN0aWxsIHByb3ZpZGUgaW50ZWdyYXRpb25zIHdpdGggbmV0Ym94IC8N Cj4gcGhwaXBhbSANCj4gc28gdGhleSBjYW4gdGFrZSBvdmVyIGZyb20gb3VyIHNtYWxsIElQQU0g aWYgdGhleSBpbXBsZW1lbnQgdGhlDQo+IGZlYXR1cmVzIA0KPiB3ZSBuZWVkLg0KPiANCj4gSSds bCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgbmV0Ym94LCBzaW5jZSBJIHdhcyB1bmRlciB0aGUgaW1w cmVzc2lvbg0KPiB0aGF0IA0KPiB0aGV5IHNob3VsZCBzdXBwb3J0IHRoaXMgLSBhbHRob3VnaCBp dCdzIGJlZW4gYXdoaWxlIHNpbmNlIEkgcGxheWVkIA0KPiBhcm91bmQgd2l0aCBpdC4gTm90IHN1 cmUgYWJvdXQgcGhwSVBBTSwgYnV0IEkgd2Fzbid0IHRvbyBzdG9rZWQgb24NCj4gdXNpbmcgDQo+ IGl0IGFueXdheSBhZnRlciBicm93c2luZyB0aGVpciBzb3VyY2UgY29kZSBmb3IgYSBiaXQuDQo+ IA0KPiA+IFNvIEkgdGhpbmsgdGhlIGJlc3Qgd2F5IGlzIHN0aWxsIHRvIHdyaXRlIHRoZSBpcCBp bnRvIHRoZSB2bQ0KPiA+IGNvbmZpZywNCj4gPiB0aGlzIGFsbG93IHRvIGluamVjdCBhbHJlYWR5 IHJlc2VydmVkIGlwIGluIGRoY3AgYXQgdm0NCj4gPiBzdGFydC9taWdyYXRlDQo+ID4gd2l0aG91 dCBuZWVkIHRvIGNhbGwgdGhlIGlwYW0gKGFsc28gYXZvaWQgc3RhcnQgcHJvYmxlbSBpcyBpcGFt DQo+ID4gc2VydmVyDQo+ID4gaXMgZG93bikuDQo+ID4gDQo+ID4gYW5kIHRoaXMgYWxsb3cgdG8g dXNlIGl0IGZvciBmaXJld2FsbCBpcGZpbHRlciwgSSBzZWUgYSB1c2VjYXNlIGZvcg0KPiA+IHNk bg0KPiA+IHZ4bGFuIHRvbyBvciBzcGVjaWFsIC8zMiByb3V0ZSBpbmplY3Rpb24pDQo+ID4gDQo+ IA0KPiBZZXMsIEkgdGhpbmsgc28gYXMgd2VsbCwgYWx0aG91Z2ggd2Ugd291bGQgbmVlZCB0byB0 YWtlIGNhcmUgb2YNCj4gcHJvcGVyIA0KPiBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiBDb25maWdz IGFuZCBJUEFNLiBJZiB0aGlzIGRpdmVyZ2VzIGZvcg0KPiB3aGF0ZXZlciANCj4gcmVhc29uIHdl IHdpbGwgcnVuIGludG8gdHJvdWJsZS4gT2YgY291cnNlLCB0aGlzICpzaG91bGQqIG5ldmVyDQo+ IGhhcHBlbiANCj4gd2hlbiBwcm9wZXJseSBpbXBsZW1lbnRlZC4NCj4gDQo+IEFub3RoZXIgb3B0 aW9uIEkgdGhvdWdodCBhYm91dCB3b3VsZCBiZSBzdG9yaW5nIGEgVk1JRCAtPiBJUCBtYXBwaW5n DQo+IGluIA0KPiB0aGUgKHB2ZSkgSVBBTSBpdHNlbGYuIFRoaXMgd291bGQgaGF2ZSB0aGUgdXBz aWRlIG9mIGhhdmluZyBhIA0KPiBjZW50cmFsaXplZCBzdG9yYWdlIGFuZCBzaW5nbGUgc291cmNl IG9mIHRydXRoIHdpdGhvdXQgaGF2aW5nIHRvIA0KPiBtYWludGFpbiB0d28gZGlmZmVyZW50IGxv Y2F0aW9ucyB3aGVyZSB3ZSBzdG9yZSB0aGUgSVAuDQo+IA0KPiBUaG91Z2ggaXQgd291bGQgYWxz byBiZSBhIGJpdCBtb3JlIGludHJhbnNwYXJlbnQgdG8gdGhlIHVzZXIgaWYgd2UNCj4gZG9uJ3Qg DQo+IGV4cG9zZSBpdCBzb21ld2hlcmUgaW4gdGhlIFVJLg0KPiANCj4gVGhpcyB3b3VsZCBoYXZl IHRoZSBkb3duc2lkZSB0aGF0IHN0YXJ0aW5nIFZNcyBpcyBhbiBpc3N1ZSB3aGVuIHRoZQ0KPiBJ UEFNIA0KPiBpcyBkb3duLiBXaGlsZSB1c2luZyB0aGUgcHZlIElQQU0gaW4gYSBjbHVzdGVyIChv ciBhIHNpbmdsZSBub2RlKSBJDQo+IGNhbiANCj4gc2VlIHRoaXMgYmVpbmcgYWxyaWdodCwgc2lu Y2UgeW91IG5lZWQgcXVvcnVtIHRvIHN0YXJ0IGEgVk0uIEFzIGxvbmcNCj4gYXMgDQo+IHlvdSBo YXZlIGEgcXVvcmF0ZSBjbHVzdGVyIHRoZSBwdmUgSVBBTSAqc2hvdWxkKiBiZSBhdmFpbGFibGUg YXMNCj4gd2VsbC4NCj4gDQo+IEluIHRoZSBjYXNlIG9mIHVzaW5nIHBocElQQU0gb3IgbmV0Ym94 IHRoaXMgaXMgYW4gaXNzdWUgd2Ugd291bGQgbmVlZA0KPiB0byANCj4gdGhpbmsgYWJvdXQuDQo+ IA0KWWVzLCB0aGlzIGlzIG15IG1haW4gY29uY2VybiwgYXMgaXQnbGwgYmUgbXkgY2FzZSBpbiBw cm9kdWN0aW9uLCBhcyBJDQptYW5hZ2luZyBtdWx0aXBsZSBjbHVzdGVycywgb24gZGlmZmVyZW50 cyBsb2NhdGlvbiwgd2l0aCBzdWJuZXRzDQpzaGFyaW5nLg0KDQpmb3IgbWUsIGl0J3Mgb2sgaWYg aXBhbSBpcyBkb3duIHdoZW4gYWxsb2NhdGluZyBhIG5ldyBpcCBvciB2bS4NCkJ1dCBmb3Igdm0g c3RhcnQvc3RvcCwgSSB0aGluayB3ZSBzaG91bGQgaGF2ZSBhdCBtaW5pbXVtIHNvbWUgY2FjaGUN CnNvbWV3aGVyZS4gKEknbSB0aGluayBhYm91dCBhIGRpc2FzdGVyIHJlY292ZXJ5IG9yIGJpZyBu ZXR3b3JrIHByb2JsZW0sDQp3aGVyZSB5b3Ugd2FudCB0byBmYXN0IHJlc3RhcnQgYWxsIHZtcyB3 aXRob3V0IG5lZWQgdG8gY2FsbCB0aGUgaXBhbSkuDQoNCg0KTWF5YmUgYSB3YXksIGNvdWxkIGJl IHRvIHVzZSB0aGUgbG9jYWwgcHZlIGlwYW0sIGFzIGEgbG9jYWwgbWlycm9yIG9mDQp0aGUgZXh0 ZXJuYWwgaXBhbSA/ICAgIChhbmQgZG9uJ3Qgc3RvcmUgaXAgaW4gdm0gY29uZmlnLCBidXQgb25s eSBpbg0KcHZlIGlwYW0sIHRoZSBzb3VyY2Ugb2YgdHJ1dGgpDQoNCg0KDQoNCnZtIHdpdGggaXBh bT1hdXRvLCAgZXh0ZXJuYWwgaXBhbSBpcyBjb25maWd1cmVkOg0KDQoNCi0gaWYgKGlwX2V4aXN0 KHB2ZV9pcGFtKSkgew0KICAgICAgICAgcmV0dXJuIGlwDQogIH0gZWxzaWYgKGlwX2V4aXN0KGV4 dGVybmFsX2lwYW0pKSB7DQogICAgICAgICByZXR1cm4gaXANCiAgfSBlbHNlIHsNCiAgICAgICAg IGlwID0gZmluZG5leHRmcmVlaXAoZXh0ZXJuYWxfaXBhbSkNCiAgICAgICAgIHN5bmNfcHZlX2lw YW0oaXApDQogICAgICAgICByZXR1cm4gaXANCiAgfQ0KDQoNCg0KSSBoYXZlIHNlZSB0aGlzIGlu IHZtd2FyZSBvciBvcGVuc3RhY2svb3Blbm5lYnVsYSB3aXRoIGV4dGVybmFsIGlwYW0sIA0KSSBk b24ndCByZW1lbWJlciBleGFjdGx5Lg0KDQoNCg0KDQo+ID4gSSBqdXN0IG5lZWQgc29tZSBwcm90 ZWN0aW9ucyBmb3Igc25hcHNob3QsIGJ1dCBub3RoaW5nIHRvbw0KPiA+IGRpZmZpY3VsdCwNCj4g PiBidXQgd2UgcmVhbGx5IG5lZWQgdG8gYXZvaWQgdG8gdHJ5IHRvIG1hbmFnZSBpbiBpcGFtIG11 bHRpcGxlDQo+ID4gdmVyc2lvbi9zbmFwc2hvdCBvZiBpcCBlbnRyeSBmb3IgYSB2bS4NCj4gPiBJ IGhhZCB0cmllZCAyeWVhcnMgYWdvLCBpdCB3YXMgcmVhbGx5IHBhaW5mdWwgdG8gaGFuZGxlIHRo aXMgaW4NCj4gPiBkaWZmZXJlbnRzIGlwYW0uDQo+ID4gU28gbWF5YmUgdGhlIGJlc3Qgd2F5IGlz IHRvIGZvcmJpZCB0byBjaGFuZ2UgaXAgYWRkcmVzcyB3aGVuIGENCj4gPiBzbmFwc2hvdA0KPiA+ IGFscmVhZHkgZXhpc3QuDQo+IA0KPiBZZXMsIGl0IG1pZ2h0IGJlIGp1c3QgdGhlIGJlc3Qgd2F5 IHRvIGNoZWNrIG9uIHJlc3RvcmUgaWYgdGhlIElQIGlzDQo+IHRoZSANCj4gc2FtZSBvciBhdCBs ZWFzdCBjdXJyZW50bHkgYXZhaWxhYmxlIGFuZCBvdGhlcndpc2UganVzdCBnZXQgYSBuZXcgSVAg DQo+IGZyb20gSVBBTSBhdXRvbWF0aWNhbGx5IChtYXliZSB3aXRoIGEgd2FybmluZykuDQo+IA0K PiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBzaG91bGQgbm90IGJlIGFuIGlzc3VlIHdoZW4gc3Rv cmluZyB0aGUgVk1JRA0KPiAtPiANCj4gSVAgbWFwcGluZyBjZW50cmFsaXplZCBzb21ld2hlcmUs IHNpbmNlIHdlIHRoZW4gY2FuIGp1c3QgcmVseSBvbiB0aGUNCj4gSVAgDQo+IGJlaW5nIHN0b3Jl ZCB0aGVyZS4gT2YgY291cnNlIHRoaXMgd291bGQgZXhjbHVkZSB0aGUgREhDUC9JUCBzZXR0aW5n IA0KPiBmcm9tIHRoZSBzbmFwc2hvdCB3aGljaCBjYW4gYmUgZ29vZCBvciBiYWQgSSdkIHNheSAo ZGVwZW5kaW5nIG9uIHRoZQ0KPiB1c2UgDQo+IGNhc2UpLg0KPiANCj4gPiBJIHRoaW5rIHdlIGNv dWxkIGltcGxlbWVudCBpcGFtIGNhbGwgbGlrZToNCj4gPiANCj4gPiANCj4gPiBjcmVhdGUgdm0g b3IgYWRkIGEgbmV3IG5pY8KgIC0tPg0KPiA+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQo+ID4gcW0gY3JlYXRlIC4uLiAtbmV0MA0KPiA+IGJyaWRnZT12bmV0LC4uLi4saXA9KGF1dG98 MTkyLjE2OC4wLjF8ZHluYW1pYyksaXA2PSguLikNCj4gPiANCj4gPiANCj4gPiBhdXRvIDogc2Vh cmNoIGEgZnJlZSBpcCBpbiBpcGFtLsKgIHdyaXRlIHRoZSBpcCBhZGRyZXNzIGluIG5ldDA6DQo+ ID4gLi4uLGlwPQ0KPiA+IGlwIGZpZWxkDQo+ID4gDQo+ID4gMTkyLjE2OC4wLjE6wqAgY2hlY2sg aWYgaXAgaXMgZnJlZSBpbiBpcGFtICYmIHJlZ2lzdGVyIGlwIGluIGlwYW0uDQo+ID4gd3JpdGUN Cj4gPiB0aGUgaXAgaW4gaXAgZmllbGQuDQo+ID4gDQo+ID4gDQo+ID4gZHluYW1pYzogd3JpdGUg ImVwaGVtZXJhbCIgaW4gbmV0MDogLi4uLixpcD1lcGhlbWVyYWwgKFRoaXMgaXMgYQ0KPiA+IGR5 bmFtaWMgaXAgcmVnaXN0ZXJlZCBhdCB2bSBzdGFydCwgYW5kIHJlbGVhc2UgYXQgdm0gc3RvcCkN Cj4gDQo+IFNvdW5kcyBnb29kIHRvIG1lLg0KPiANCj4gPiANCj4gPiB2bSBzdGFydA0KPiA+IC0t LS0tLS0tLQ0KPiA+IC0gaWYgaXA9ZXBoZW1lcmFsLCBmaW5kICYmIHJlZ2lzdGVyIGEgZnJlZSBp cCBpbiBpcGFtLCB3cml0ZSBpdCBpbg0KPiA+IHZtDQo+ID4gbmV0MDogLi4uLGlwPTE5Mi4xNjgu MC4xMFtFXSAuwqDCoCAobWF5YmUgd2l0aCBhIHNwZWNpYWwgZmxhZyBbRV0gdG8NCj4gPiBpbmRp Y2F0ZSBpdCdzIGVwaGVtZXJhbCkNCj4gPiAtIHJlYWQgaXAgZnJvbSB2bSBjb25maWcgJiYgaW5q ZWN0IGluIGRoY3ANCj4gDQo+IE1heWJlIHdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggc2V0dGlu ZyB0aGUgSVAgaW4gdGhlIERIQ1AgY29uZmlnIGFzIA0KPiBzb29uIGFzIHdlIHNldCBpdCBpbiB0 aGUgVk0gY29uZmlndXJhdGlvbiwgYXMgbG9uZyBhcyBpdCBpcyBub3QgDQo+IGVwaGVtZXJhbCwg dGh1cyBhdm9pZGluZyB0aGUgbmVlZCBmb3IgaGF2aW5nIHRvIGRvIGl0IHdoaWxlIHN0YXJ0aW5n DQo+IFZNcz8NCj4gDQo+ID4gdm1fc3RvcA0KPiA+IC0tLS0tLS0NCj4gPiBpZiBpcCBpcyBlcGhl bWVyYWwgKG5ldFg6IGlwPTE5Mi4xNjguMC4xMFtFXSkswqAgZGVsZXRlIGlwIGZyb20NCj4gPiBp cGFtLA0KPiA+IHNldCBpcD1lcGhlbWVyYWwgaW4gdm0gY29uZmlnDQo+ID4gDQo+ID4gDQo+ID4g dm1fZGVzdHJveSBvciBuaWMgcmVtb3ZlL3VucGx1Zw0KPiA+IC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCj4gPiBpZiBuZXRYOiAuLi4saXA9MTkyLjE2OC4wLjEwwqDCoCAswqAgcmVtb3ZlIGlw IGZyb20gaXBhbQ0KPiA+IA0KPiA+IA0KPiA+IA0KPiA+IG5pYyB1cGRhdGUgd2hlbiB2bSBpcyBy dW5uaW5nOg0KPiA+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+IGlmIGlwIGlz IGRlZmluZWQgOiBuZXRYOiBpcD0xOTIuMTY4LjAuMTAswqAgd2UgZG9uJ3QgYWxsb3cgYnJpZGdl DQo+ID4gY2hhbmdlDQo+ID4gb3IgaXAgY2hhbmdlLCBhcyB2bSBpcyBub3Qgbm90aWZpZWQgYWJv dXQgdGhlc2VzIGNoYW5nZXMsIGFuZCBzdGlsbA0KPiA+IHVzZQ0KPiA+IG9sZCBpcC4NCj4gPiAN Cj4gPiBXZSBjYW4gYWxsb3cgbmljIGhvdC11bnBsdWcgJiYgaG90cGx1Zy4gKGd1ZXN0IG9zIHdp bGwgcmVtb3ZlIHRoZQ0KPiA+IGlwIG9uDQo+ID4gbmljIHJlbW92YWwsIGFuZCB3aWxsIGNhbGwg ZGhjcCBhZ2FpbiBvbiBuaWMgaG90cGx1ZykNCj4gDQo+IFllcywgSSB0aGluayBzbyBhcyB3ZWxs LiBNYXliZSB3ZSBjb3VsZCBnaXZlIHRoZSBvcHRpb24gdG8gY2hhbmdlIHRoZQ0KPiBJUCANCj4g dG9nZXRoZXIgd2l0aCBhIGZvcmNlZCByZWJvb3QgYW5kIGEgd2FybmluZyBsaWtlICdXaGVuIGNo YW5naW5nIHRoZQ0KPiBJUCANCj4gdGhpcyBWTSB3aWxsIGdldCByZWJvb3RlZCcgYXMgYSBxdWFs aXR5IG9mIGxpZmUgZmVhdHVyZT8NCj4gDQo+ID4gDQo+ID4gbmljIGhvdHBsdWcgd2l0aCBpcD1h dXRvOg0KPiA+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiANCj4gPiAtLT4gYWRkIG5p YyBpbiBwZW5kaW5nIHN0YXRlIC0tLS0+IGZpbmQgaXAgaW4gaXBhbSAmJiB3cml0ZSBpdCBpbg0K PiA+IHBlbmRpbmcgLS0tPiBkbyB0aGUgaG90cGx1ZyBpbiBxZW11Lg0KPiA+IA0KPiA+IFdlIG5l ZWQgdG8gaGFuZGxlIHRoZSBjb25maWcgcmV2ZXJ0IHRvIHJlbW92ZSBpcCBmcm9tIGlwYW0gaWYg dGhlDQo+ID4gbmljDQo+ID4gaG90cGx1ZyBpcyBibG9ja2VkIGluIHBlbmRpbmcgc3RhdGUoSSBu ZXZlciBzZWUgdGhpcyBjYXNlIHVudGlsIG9zDQo+ID4gZG9uJ3QgaGF2ZSBwY2lfaG90cGx1ZyBt b2R1bGUgbG9hZGVkLCBidXQgaXQncyBiZXR0ZXIgdG8gYmUNCj4gPiBjYXJlZnVsbCApDQo+ID4g DQo+IA0KPiBZZXMgLSBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgaXMgYWx3YXlzIGdvb2QhDQo+IA0K PiA+IFRoZSBpcGFtIG1vZHVsZXMgKGludGVybmFsIHB2ZSwgcGhwaXBhbSxuZXRib3gpIGFyZSBh bHJlYWR5IGZvcg0KPiA+IHRoaXMsIEkNCj4gPiB0aGluayBpdCBzaG91bGRuJ3QgYmUgdG9vIGRp ZmZpY3VsdC4NCj4gPiANCj4gPiBkbnNtYXNxIHNlZW0gdG8gaGF2ZSBhIHJlc2VydmF0aW9uIGZp bGUgb3B0aW9uLCB3aGVyZSB3ZSBjYW4NCj4gPiBkeW5hbWljYWxseSBhZGQgaXAtbWFjIHdpdGhv dXQgbmVlZCB0byByZWxvYWQgaXQuDQo+ID4gDQo+ID4gSSdsbCB0cnkgaXQsIHJlLXVzaW5nIHlv dXIgY3VycmVudCBkbnNtYXNxIHBhdGNoZXMuDQo+IA0KPiBTaW5jZSB5b3Ugd2FudCB0byB0YWtl IGEgc2hvdCBhdCBpbXBsZW1lbnRpbmcgaXQsIGlzIHRoZXJlIGFueXRoaW5nIEkNCj4gY291bGQg aGVscCB5b3Ugd2l0aD8gSSdkIGhhdmUgc29tZSByZXNvdXJjZXMgbm93IGZvciB0YWtpbmcgYSBz aG90IGF0DQo+IHRoaXMgYXMgd2VsbC4NCj4gDQpJJ20gYSBiaXQgYnVzeSBjdXJyZW50bHkgb24g b3RoZXIgc3R1ZmYgYW5kIEkgd291bGQgbGlrZSB0byBmaW5pc2ggdGhlbQ0KZmlyc3QuIA0KDQpT byBpZiB5b3UgaGF2ZSBhIGxpdHRsZSBiaXQgdGltZSB0byB3b3JrIG9uIHRoaXMsIGl0IGNvdWxk IGJlIGdyZWF0IDopDQoNCkkgaGF2ZSBzZW5kIHNvbWUgcGF0Y2hlcyBpbiAyMDIxIGZvciBpcGFt IGludGVncmF0aW9uIGluIHFlbXUvbHhjLCBpZg0KeW91IHdhbnQgdG8gdGFrZSBzb21lIGluc3Bp cmF0aW9uLiAod2l0aG91dCB0aGUgaXAgaW4gdGhlIHZtIGNvbmZpZywgaXQNCnNob3VsZCBiZSBh IGxvdCBlYXNpZXIpDQoNCg0KDQo+IEl0IHdvdWxkIGFsc28gYmUgaW50ZXJlc3RpbmcgdG8gaW1w cm92ZSBhbmQgYWRkIHNvbWUgZmVhdHVyZXMgdG8gb3VyIA0KPiBidWlsdC1pbiBJUEFNLCBtYXli ZSBldmVuIGFkZCB0aGUgVk1JRCAtPiBJUCBtYXBwaW5nIGZ1bmN0aW9uYWxpdHkNCj4gSSd2ZSAN Cj4gdG91Y2hlZCB1cG9uIGVhcmxpZXIuIEl0IHdvdWxkIGFsc28gYmUgaW50ZXJlc3RpbmcgdG8g YmUgYWJsZSB0bw0KPiBleHBvc2UgDQo+IHNvbWUgb2YgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUg ZnJvbnRlbmQsIHNvIHVzZXJzIGhhdmUgYW4gb3ZlcnZpZXcNCj4gb2YgDQo+IGN1cnJlbnRseSBs ZWFzZWQgSVBzIGluIHRoZSBmcm9udGVuZCAtIHdoYXQgZG8geW91IHRoaW5rPw0KPiANCg0KWWVz LGFkbWluIHNob3VsZCBiZSBhYmxlIHRvIHNlZSBhbGxvY2F0ZWQgaXAuIChsaWtlIGEgcmVhbCBp cGFtKS4NCg0KSSB3YXMgdGhpbmtpbmcgYWJvdXQgb3RoZXIgc3R1ZmYgZm9yIGxhdGVyLCBidXQg bWF5YmUgaXQgY291bGQgYmUgZ3JlYXQNCmZvciBhbiBhZG1pbiB0byBiZSBhYmxlIHRvIHJlc2Vy dmUgaXBzIGFuZCBwdXQgdGhlbSBpbiBhIHBvb2wuDQpUaGVuIHVzZXIgY291bGQgY2hvb3NlIGlw IGZyb20gdGhpcyBwb29sLg0KDQooVXNlY2FzZSBpcyBwdWJsaWMgaXAgYWRkcmVzc2VzLCB3aGVy ZSBhIGN1c3RvbWVyIGNvdWxkIGJ1eSBzb21lIG9mDQp0aGVtLA0KdGhlbiBhbGxvY2F0ZWQgdGhl bSBsaWtlIGhlIHdhbnQpDQoNCg0KDQoNCj4gV291bGQgaXQgYWxzbyBtYWtlIHNlbnNlIHRvIHNl dCBJUFNldCBlbnRyaWVzIGZvciBWTXMsIHNvIHRoZXkgYXJlDQo+IG9ubHkgDQo+IGFsbG93ZWQg dG8gdXNlIHRoZSBJUHMgd2UgZGVkaWNhdGUgdG8gdGhlbT8gVGhpcyB3b3VsZCBiZSBhIGRlY2Vu dCANCj4gc2FmZWd1YXJkIGZvciBwcmV2ZW50aW5nIGlzc3VlcyBkb3duIHRoZSBsaW5lLg0KPiAN Cj4gQWRkaXRpb25hbGx5IGl0IHdvdWxkIGJlIGludGVyZXN0aW5nIHRvIGF1dG9tYXRpY2FsbHkg Y3JlYXRlIEFsaWFzZXMNCj4gZm9yIA0KPiBWTmV0cy9WTXMgaW4gdGhlIEZpcmV3YWxsIGNvbmZp Z3VyYXRpb24gLSB3aGF0IGRvIHlvdSB0aGluaz8gSWYgd2UNCj4gYWRkIA0KPiBWTXMgYXMgQWxp YXNlcywgd2Ugd291bGQgaGF2ZSB0byByZWNvbXBpbGUgdGhlIGlwdGFibGVzIG9uIGV2ZXJ5IElQ IA0KPiBjaGFuZ2UuIEZvciB0aGlzIGZlYXR1cmUgaXQgd291bGQgbWFrZSBzZW5zZSB0byBiZSBh YmxlIHRvIHNldCBuYW1lcw0KPiAvIA0KPiBjb21tZW50cyBvbiBWTmV0cywgc28gd2UgY2FuIHJl ZmVyZW5jZSB0aGVtIHRoaXMgd2F5LiBXaGF0IGRvIHlvdQ0KPiB0aGluaz8NCg0KYSBCaWcgeWVz ICEgIChhcyBJJ20gYWxyZWFkeSBkb2luZyB0aGlzIG1hbnVhbGx5IGluIHByb2R1Y3Rpb24gOykN Cg0KDQo+IA0KDQo=