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 3CFFB84542 for ; Mon, 13 Dec 2021 11:59:23 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 1629316DC2 for ; Mon, 13 Dec 2021 11:58:53 +0100 (CET) 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 id 8EF9616DAE for ; Mon, 13 Dec 2021 11:58:49 +0100 (CET) Received: from CYLNEXC01.cyllene.corp (unknown [10.0.250.28]) by mail02.cetsi.fr (Postfix) with ESMTP id 7F7594073C38 for ; Mon, 13 Dec 2021 11:58:39 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 mail02.cetsi.fr 7F7594073C38 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groupe-cyllene.com; s=dkim; t=1639393119; bh=inANKpD0gzDQ3UAS9hO4VqAcgejnIy91gKcaGXZWiWk=; h=From:To:Subject:Date:References:In-Reply-To:From; b=YXYhCllvepbSzDGJL7Z9BVulULHI0Nwq5B7IPIi4ktnYnZiEAVzVrpVDsq+aqA7h4 5oRUr2vdNUmVAkxOnRz4e8vluXWf2iE3mf4qn1z9Zg/MGVqc7PbBXkVh3TiDWpNh26 hKsHIqf7WNAAz77uvngMbdqV+0pa68YBpF8cnOmw= 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.2308.20; Mon, 13 Dec 2021 11:58:37 +0100 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.2308.20 via Frontend Transport; Mon, 13 Dec 2021 11:58:37 +0100 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NTXFuJwvP4r5FhEz4xEOmkL08ZmLiD28scBJEeLwc+3lUa3TchDcyrOeksM5EGuoN8kFPF5DgRt/WiXoQpwf4ybm9YSUFNKZlehTA7Qd1kCvGlLXL2q+0OFMywx/iigGPEgddf0JcqVCz4Ca1rsfx48gIMvA3dJVfewneNeq91Zn0Op3Vob+IiZpZvVv29k1n73puWSOQeqh5IAq5lGt73g/xRCufwOnKvTNTrHPewCgH5nULRUuWavyn0b6fiO82nq7wOglGzuUgRZUeBJ+IJpTnI1yePOH56RkC7OURL1hp+v4yYAI8WjOHSYkWFWEe+wc72Vff2DbXcsxJfZKPg== 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=inANKpD0gzDQ3UAS9hO4VqAcgejnIy91gKcaGXZWiWk=; b=jE6Ovjl1KKldySkbab6GsvRnw/G9A3KJNS68NPhNRXjk27052c5hVnKmDd/TRh94VzELNX3GALVtkT7SO80K+u6BTVaWqsF5vE05wBd824hxEVNZiEO1oIi4fdOBOMcFfEDIyxo1Y8e8A1CFXS6v+OdDJkInJ88O0qSvrgbsHN0xMbI73fDMiUySCYznTMD+c5h+V2loPhpbkKnKWke8Lyl0MWENkkn/wxQOjtFVdjNk8GDYE58pMfHSQjF0F+GC5VzotWcxawvxqGrfRouU+xAgAIt/jNGFeu4HWMpmNN/HTzU1BbfiAS6KU8uRFFiU4Pjr76VtdWQTwlLFUfA7Yg== 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=inANKpD0gzDQ3UAS9hO4VqAcgejnIy91gKcaGXZWiWk=; b=RknuSVgpl5olVxytTJ3LYmXz+Sn0Dgccp6uPvxWvA1gF7hJgT/MNiaFFLRfnygk2h91j819snQwlGqnsKs2U8L5GJpnIfN1YQjVQT+H1si+6Z6h1qGCXYo6gB3JtTLj+XrVIpUsX80IVAhnBewKBrbvOJw5sf2+cYuj0TPp1uLo= Received: from MR1P264MB2481.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:32::17) by MR2P264MB0804.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4778.15; Mon, 13 Dec 2021 10:58:36 +0000 Received: from MR1P264MB2481.FRAP264.PROD.OUTLOOK.COM ([fe80::1053:4fb1:4041:2221]) by MR1P264MB2481.FRAP264.PROD.OUTLOOK.COM ([fe80::1053:4fb1:4041:2221%9]) with mapi id 15.20.4778.017; Mon, 13 Dec 2021 10:58:36 +0000 From: "DERUMIER, Alexandre" To: "pve-devel@lists.proxmox.com" , "aderumier@odiso.com" Thread-Topic: [pve-devel] [PATCH pve-ha-manager 1/3] add ressource awareness manager Thread-Index: AQHX7/UoneQ4TxBwfk+vYJXOOhcFaKwwMbYAgAAPH4A= Date: Mon, 13 Dec 2021 10:58:35 +0000 Message-ID: References: <20211213074316.2565139-1-aderumier@odiso.com> <20211213074316.2565139-2-aderumier@odiso.com> <6402c0c7-20ac-82d5-ecf8-a0b20899e154@proxmox.com> In-Reply-To: <6402c0c7-20ac-82d5-ecf8-a0b20899e154@proxmox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.42.2 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-office365-filtering-correlation-id: 41332580-a72e-4840-32e2-08d9be2782fa x-ms-traffictypediagnostic: MR2P264MB0804:EE_ x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1091; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: J5MEDpSXTDrrRXk+ZX4dFhufw8efI2dHhmN9yulY0BlMbK1ZWCcyzsu6Mt0j7pyxoc963VseVbo/hmDilLM2ESu3CznM0DhxGRlVxDb5D+ZiMypvyeBcqTMjNiGqOIajd3UYLHl4QbT4QX+OSlpZtPQk9KxDrOu4uafEe4aHqjPFeN7DsTro+1hP6ex9I1Yev90Naf8BdjwNncoYPUvfwpA6CIsuRrDmyY8VKq6q3Dz8L/5mhBcHE6M7dwVFbqid0y+ktFXU71BNNlX8NJEhpDpMwm4Ze/k4KcesUmi14gT2HJkDV3mNo7oh2lI9yzDK63Ftt/eG5GulOG8/KUiTtfBU5mdSrR73S+vuzyc0OmWAMzdNmSu0dIxLvZVn9OGrFCw3NMHmS8XJGFT6OoAbY9RZdGY2fqrsIVuCxvy6KY/Saw+/Zqf3ZECDZr+MwiUJa5NFgn0skPmjOM/rbuNKbqO3npnSGyEunXaRDPc90RV4xS50WCo0GH4GlqVRBKF6P2R3T9ony4oByvca4mNZqUmCzcyvWJezYYJk3UIBY2BA2/JeC3RIwFm4WChXvcMBhom/TKFvKfcGvyEr9CKY0qxhTrc8U7vSFhw6ARuGwH6aRhh7f1kDKjpC/y0dS6nxNHFhwh9hoWn4qjsMgg16I45gPs4dmeEo4davZFS7PFjCBuTAGgoAiwW4JEL1sQ8kNlL553tUEUJBPyuUunau0k7XGJc6W2nEddst6ojOodL6mVlYfnyuFZCaIO6bsPaXgfmmhuTL9eTASMq9Mm6EZcvZUbDKcl6lYbHsnefr6ccnO6GwjrFYR9TV3LMXjt+a 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:(4636009)(366004)(110136005)(66574015)(6486002)(8676002)(83380400001)(8936002)(19627235002)(36756003)(5660300002)(6506007)(30864003)(6512007)(508600001)(66556008)(71200400001)(86362001)(53546011)(122000001)(316002)(38070700005)(186003)(38100700002)(66446008)(76116006)(64756008)(91956017)(66476007)(66946007)(2616005)(2906002)(166002)(966005)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TU9nbTVRVHNBcTJiTXpQYzVZd0M3Zmhsem1xRFd2Z3QxSWZUSW5jVGVZUi9F?= =?utf-8?B?dVJobmlBQnFyOXpnTGM3OUU1RndQMTdNM0RTVGlmUkdlL1BlQkh2dVBtaE5B?= =?utf-8?B?Nm9nQkNXYVk3dUh4N0ZxdFo2U2Q5SXp6VGNKTUpkR0JWN1p0MXJvSzhPelc5?= =?utf-8?B?WjUyN3N4S2pTUzdYNUJIUmxkMDZuR1hhV1M4YjhsWmw4VHFuM1hQUksxL1BE?= =?utf-8?B?Y0o1eGwxNDJWcUhNdmhteDZoY1B6OWJqaTVHd1VaQWF0VWUrbWRybEFjdDA5?= =?utf-8?B?MVhPNVplbFFZeGxKVWhDWndDOFArUnRUTm1MclE2S00wMExlUjFYdnNDem1k?= =?utf-8?B?WEdGSVlLdy8rV0k5b1BWSjllQUxxdk5KeitOWmhwNU45eGExQko1TnZad0hV?= =?utf-8?B?aUVFR3M1UmJRVHNDNk45TDVsU2hUYU5kOHdjeWJZTVluOTIxWHRDMlRlNVFJ?= =?utf-8?B?VWgybXJtL01ZZFh3VW8wb2FyMDc3bWRyc0tUQlE4REt4MnordjhsLy8ralg3?= =?utf-8?B?NkZxQ2N3SUFyRDBWSElQZysySms4NjdDRGw1M0QwVFIzS3hVRkgwbEd1SEFI?= =?utf-8?B?VUs0NWFkK3c2WnZxTGtsYStNZzd0L0RzL1ZraHhEVms4RXVRTFE1anJydFc5?= =?utf-8?B?cjJMNWZuaUYwY0JjUEJITUU4NXVHSWtvV3NyVVMrQ0RJUFpWSFFQTmVieE54?= =?utf-8?B?bUxWb2Q4YVZzVFRmT2xkM1lSU202eS9FeGk5dTcyLzRFQ004VmY2TVhwYzI5?= =?utf-8?B?anlhN2VuMmc1TmhLZjFGWVZGdTZrYWNNNUptS3hIWlNwTURIUityUDA1dHR0?= =?utf-8?B?bTNTVnhjbE9zT252OGYxMkNnZU02L1Z4V1FVVkt2SHduc3NCS2lrSzFSUkcx?= =?utf-8?B?RjBQV0wxbmdQeDRiRlo2SXVJL2RERnEyRHBoMDZKWVlKeXQ5Qlp0TFN2Tjdt?= =?utf-8?B?cHVtMGdCOG53TSttbXk0Z1pmdHVLVzlGSUVEclM4cVB6eHM5VWlsb01iNjhZ?= =?utf-8?B?RTJBdXB4cXdHZE1zTGNId0FYSlJPbTNuM0piWWxmZjRWSGxRa2duTFh2WWhm?= =?utf-8?B?d0hVM0FxMmJlc2I1YUNEaVlwSmFFbmtSbVpEbkc0emRNeXJmSWpobVZ1ODVC?= =?utf-8?B?L2tPeFdzNHNKMEk3MmdkWUJrMW5rZXk3RXlkVjJrTE9SU1k1YStaQXZIb211?= =?utf-8?B?ckZYMTF3bENKRmNWWDZCL05maGNUc2FxdzExVnYzMHBRdlNCeDNVS2hrZDlG?= =?utf-8?B?V09Vem4vaGdCbndiaytTekpmOGhtWmxwL0J0dkRETjJXU2hxU2IvenV3b3lY?= =?utf-8?B?VXZtWHZHQ0luazF2bGMvVmNlVmZ6U0dhUStabFdxL01IaUIrRUhXNENuVDRv?= =?utf-8?B?cm9MS2dBVWFkV0ZvaEdyQ3pORzJ6Y1hLdDk4RHJRMG9NdnQxeDMweVlsSXQw?= =?utf-8?B?eUxCRVFmZ1VJd2xPYTVUZUdzNlp1NHRYOTBDcC8rQm1Lck13V1g5djRWUUJY?= =?utf-8?B?NTlqdWdReFRDa1VlU2szUHdSZUJTcUJHMkVZRjVZbUhhdXFMdXNBUnltVSsy?= =?utf-8?B?ZXIyNjFYWXo1b2hzMVdyWngvd1h4SUhYQjFZOE5vb0tmM2trVlc1WHdZOCtX?= =?utf-8?B?VlFRZDVpckttS3g0M3Ivamt0Y1huQkpoL25JVW5aNlRzSmhOczhQMU15N0Rh?= =?utf-8?B?R3lTK3NjdGJDQjFzaHI4cDkyZmVwWWR4Q1FEaU11STRTNXVadVJsc013dGph?= =?utf-8?B?MVl1VHZCUzRPZmJwQUxnZlhNekpoV0l0YVU5WFNmWnVoVnFrUzVHYmYwT2dU?= =?utf-8?B?Vi82VDNaOW84cDJ0WUhjQ1FCbUVYa0hxRFdTdk1vaEVJenZOR0xHaUNKUytQ?= =?utf-8?B?V3hlcFE2b25WbnhUNE1KTVd3RDB4TmVXZy9qWU1Ya0FjZ1RRQjVucTdwekVW?= =?utf-8?B?WXpleTVHSkFTTjVuazdrSk9mU3F4dmxvYnJ5VFN0a21KT0NNdWUvSG9NWVZs?= =?utf-8?B?dENoQTAzd1FiUi96YStFeDE3MTFkTXVSYjBNMERkUkhBNmNSY3g4dlJoSzF0?= =?utf-8?B?Uk1BNnNDUzhqVitRTEp4NnQ1a2xYWFlxMnZWL0wrZWtrR0cxWjNMSWZJTGc5?= =?utf-8?B?TmZJZE5iQStpVm9IMVlNZ3M1aEEwbmNGK3U3R2t5MmJCaCsya2IwN0VHMmdI?= =?utf-8?B?M0JjdVQ0RTRFVHN4eDJDMlhTa2phNFpKaFJZdmwrTmpndC9zRkNkTFdZcWVO?= =?utf-8?B?WXFxd0xDSlJOOVFhRjNjMnRKTTRqOEJFSzR3aWxlZ2s1a3Y5dXlOYjZRWngv?= =?utf-8?B?RXoweXRFMXI1RG9yNmRsSnF5d0krZFVoSEpFSityVFh5M1RYRy80cTFsT05v?= =?utf-8?Q?/vgNt0F1+AIQ8Cyk=3D?= 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: 41332580-a72e-4840-32e2-08d9be2782fa X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Dec 2021 10:58:35.9067 (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: +8nHpgYDNyc8Hk1CSEAq87lZ9uz0oxImhWJlOhODe1Jc7BDOhmtHwp5D0eJYRVmJ8Afx8UvJE/pCNuiKlwst+h92ByRRG9gbUKc44eIc1UEf1d59Ora9RDOtauvNgSFj X-MS-Exchange-Transport-CrossTenantHeadersStamped: MR2P264MB0804 X-OriginatorOrg: groupe-cyllene.com X-SPAM-LEVEL: Spam detection results: 0 AWL -1.499 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 HTML_MESSAGE 0.001 HTML included in message RCVD_IN_MSPIKE_H2 -0.001 Average reputation (+2) SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URI_DOTEDU 1.997 Has .edu URI URI_DOTEDU_ENTITY 1 Via .edu MTA + suspicious HTML content X-Mailman-Approved-At: Mon, 13 Dec 2021 12:09:36 +0100 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [pve-devel] [PATCH pve-ha-manager 1/3] add ressource awareness manager 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: Mon, 13 Dec 2021 10:59:23 -0000 SGkgVGhvbWFzLA0KVGhhbmtzIGZvciB0aGUgZmFzdCByZXZpZXcgIQ0KDQpJJ2xsIHJld29yayB0 aGUgcGF0Y2hlcyB3aXRoIHlvdXIgY29tbWVudHMuDQpEbyB5b3UgcHJlZmVyIHNvbWUgYW5vdGhl ciBjb21taXRzIHBhdGNoZXMgZm9yIGVhY2ggb2YgeW91ciByZW1hcmsgZm9yIGVhc2llciByZXZp ZXcgPyAgb3IgY2FuIEkgc2VuZCBhIHYyIGRpcmVjdGx5IHRoZSBjaGFuZ2VzIGFscmVhZHkgbWVy Z2VkID8NCg0KDQoNCg0Kc2VtaS1yZWxhdGVkLCBEaWV0bWFyIGFuZCBJIHRhbGtlZCBhYm91dCBh ZGFwdGluZyB0aGUgUlJEIGZvcm1hdCBhbmQgaGlnaGVyIHJlc29sdXRpb24NCmZyb20gUEJTIGFs c28gZm9yIFBWRSwgZHJvcHBpbmcgdGhlIGRlcGVuZGVuY3kgb24gcnJkY2FjaGVkLCBidXQgUFZF IHdpdGggdGhlIGNsdXN0ZXINCmFuZCBicm9hZGNhc3RpbmcgaXMgcXVpdGUgYSBiaXQgbW9yZSBj b21wbGV4IGNvbXBhcmVkIHRvIFBCUywgc28gdGhlIGVmZm9ydCBzdGFsbGVkLg0KDQpJZiB3ZSBt YWtlIG1vcmUgdXNlIG9mIHRob3NlIG1ldHJpY3MgaGVyZSBpdCB3b3VsZCBhZGQgZnVydGhlciBj b3VwbGluZyB0byB0aGUgZXhpc3RpbmcNCmludGVyZmFjZSBzbyBtYXliZSB3ZSdkIHJldGhpbmsg dGhhdCB0aHJvdWdoIC0gYnV0IG5vdGhpbmcgdGhhdCBuZWVkcyB0byBzdGFsbCB0aGlzDQpjb21w bGV0ZWx5LCBjaGFuZ2luZyBSUkQgd291bGQgYmUgYmV0dGVyIGRvbmUgYXQgYSBtYWpvciByZWxl YXNlIGFueXdheSB3aGVyZSB3ZQ0KY2FuIGhhbmRsZSB0aGlzIHNvbWV3aGF0IGNsZWFubHkuDQoN CkkgdGhpbmsgd2UgaGFkIHRhbGtlZCBsYXN0IHllYXIgYWJvdXQgc2luZ2xlIHJyZCBmaWxlIGJ5 IG1ldHJpYywgYnV0IEknbSBub3Qgc3VyZSBpdCdzIHRoZSBiZXN0IHdheQ0KKHdpdGggdGhlIG51 bWJlciBvZiBmaWxlcyBpdCBjb3VsZCBiZSBnZW5lcmF0ZSkuDQpJIHdvdWxkIGxpa2UgdG8gaGF2 ZSBhbm90aGVyIG1ldHJpY3MgaW4gcnJkLCBsaWtlIHByZXNzdXJlIG9mIGNwdS9tZW0sIG9yIHRy dWUgdm0gY2dyb3VwIG1lbS9jcHUuDQpJIHRoaW5rIHdlIGFscmVhZHkgc3RyZWFtIHRoZW0sIGJ1 dCBycmQgcGFydCBpcyBub3QgeWV0IGRvbmUuDQoNCg0KKyAgICAkc3RhdHMtPntjcHV9ID0gcGVy Y2VudGlsZSgkcGVyY2VudGlsZSwgXEBjcHUpIHx8IDA7DQorICAgICRzdGF0cy0+e21lbX0gPSBw ZXJjZW50aWxlKCRwZXJjZW50aWxlLCBcQG1lbSkgfHwgMDsNCisgICAgJHN0YXRzLT57bWF4bWVt fSA9IHBlcmNlbnRpbGUoJHBlcmNlbnRpbGUsIFxAbWF4bWVtKSB8fCAwOw0KKyAgICAkc3RhdHMt PnttYXhjcHV9ID0gcGVyY2VudGlsZSgkcGVyY2VudGlsZSwgXEBtYXhjcHUpIHx8IDA7DQorICAg ICRzdGF0cy0+e3RvdGFsY3B1fSA9ICRzdGF0cy0+e2NwdX0gKiAkc3RhdHMtPnttYXhjcHV9ICog MTAwOw0KDQp3aGF0IGlzIGNwdS9tYXhjcHUgZXhhY3RseSwgdGhlIG11bHRpcGxpY2F0aW9uIG9m IGJvdGggc3RyaWtlcyBtZSBhcyBhIGJpdCB3ZWlyZD8NCg0KbWF4Y3B1IGlzIHRoZSBudW1iZXIg b2YgY29yZSxzbyB0b3RhbGNwdSBpcyB0aGUgbnVtYmVyIG9mIGNvcmVzICogY3VycmVudCBwZXJj ZW50IHVzYWdlICogMTAwLg0KKFRoaXMgaXMgdG8gYmUgYWJsZSB0byBjb21wYXJlIHZtL2hvc3Qg d2l0aCBkaWZmZXJlbnRzIG51bWJlciBvZiBjb3JlcykNCkJ1dCBpbmRlZWQsIG1heWJlIEknbSB3 cm9uZyB3aXRoIG15IG1hdGhzIDspIEkgbmVlZCB0byBjaGVjayBhIGxpdHRsZSBiaXQgdGhlIG9y ZGVyaW5nIGFuZCBjb21wYXJlIGNvZGUuDQoNCg0KDQorICAgICAgICAjIyMjIEZJTFRFUklORyBO T0RFUyBXSVRIIEhBUkQgQ09OU1RSQUlOVFMgKHZtIGNhbid0IGJlIHN0YXJ0ZWQpDQorICAgICAg IG5leHQgaWYgIWNoZWNrX2hhcmRfY29uc3RyYWludHMoJGhhZW52LCAkdm1pZCwgJGNkLCAkbm9k ZW5hbWUsICRub2RlX3N0YXRzLCAkdm1fc3RhdHMsICRzdG9yZWNmZywgJGdyb3VwX21lbWJlcnNf cHJpbyk7DQoNCkkgbWVhbiwgbW9zdCBvZiB0aG9zZSBzaG91bGQgYmUgY292ZXJlZCBieSB0aGUg Z3JvdXBpbmcgYWxyZWFkeT8NCg0KZG8geW91IG1lYW46IG1hbnVhbGx5IGdyb3VwaW5nIGJ5IHVz ZXIgPyBpZiB5ZXMsIHRoZSBwb2ludCBpcyBoZXJlIHRvIGdldCBpdCBkb25lIGF1dG8gKGZvciBz dG9yYWdlIGF2YWxhYmlsaXR5LCBudW1iZXIgZGUgaG9zdCBjb3JlLG1heWJlIHZtYnIgYXZhaWxh YmlsaXR5LC4uLi4pLCBiZWNhdXNlIHRoaXMgaXMgYSBwYWluIHRvIHNldHVwLg0KRm9yIGV4YW1w bGUsIGN1cnJlbnRseSwgaWYgeW91IGZvcmdvdCBpdCwgYSB2bSB3aXRoIGEgbG9jYWwgc3RvcmFn ZSBjb3VsZCBiZSBtaWdyYXRlZCB0byBhbm90aGVyIG5vZGUgYnkgSEEgKHdpdGggZXJyb3IpLiBU aGVuIHVzZXIgZG9uJ3Qga25vd24gaG93IHRvIG1pZ3JhdGUgaXQgYmFjayB0byBvcmlnaW5hbCBu b2RlLg0KDQpCdXQgaXQncyBhbHNvIGNoZWNraW5nIGR5bmFtaWMgdmFsdWVzIGxpa2UgYXZhaWxh YmxlIGNwdS9yYW0gb24gaG9zdC4NCg0KDQoNCg0KTGUgbHVuZGkgMTMgZMOpY2VtYnJlIDIwMjEg w6AgMTE6MDQgKzAxMDAsIFRob21hcyBMYW1wcmVjaHQgYSDDqWNyaXQgOg0Kc29tZSBwYXJ0cyBv ZiB5b3VyIGNvdmVyLWxldHRlciAoYmFzaWMgYXBwcm9hY2gvZGVjaXNpb25zKSBzaG91bGQgZ28g aGVyZSBzbyB0aGF0DQppdCBjYW4gYmUgZm91bmQgbW9yZSBlYXNpbHkgd2hlbiB3b3JraW5nIHdp dGggZ2l0Lg0KDQpTb21lIGNvbW1lbnRzIGlubGluZSwgZGlzY2xhaW1lcjogSSBwcmV0dHkgbXVj aCByZWFkIGl0IGRvd24gZnJvbSBoZXJlLCBkaWQgbm90DQp0cmllZCBvdXQgdG8gbXVjaCBhbmQg SSBwb3NzaWJseSBtYXkganVzdCBoYXZlIG92ZXJsb29rZWQgc29tZXRoaW5nLg0KDQpPbiAxMy4x Mi4yMSAwODo0MywgQWxleGFuZHJlIERlcnVtaWVyIHdyb3RlOg0KLS0tDQogc3JjL1BWRS9IQS9F bnYucG0gICAgICAgICB8ICAyNCArKysrDQogc3JjL1BWRS9IQS9FbnYvUFZFMi5wbSAgICB8ICA5 MCArKysrKysrKysrKysrKw0KIHNyYy9QVkUvSEEvTWFuYWdlci5wbSAgICAgfCAyNDYgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0NCiBzcmMvUFZFL0hBL1NpbS9UZXN0RW52 LnBtIHwgIDI3ICsrKysrDQogNCBmaWxlcyBjaGFuZ2VkLCAzODAgaW5zZXJ0aW9ucygrKSwgNyBk ZWxldGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBhL3NyYy9QVkUvSEEvRW52LnBtIGIvc3JjL1BWRS9I QS9FbnYucG0NCmluZGV4IGFjNTY5YTkuLjczYjY0MDcgMTAwNjQ0DQotLS0gYS9zcmMvUFZFL0hB L0Vudi5wbQ0KKysrIGIvc3JjL1BWRS9IQS9FbnYucG0NCkBAIC0yNjksNCArMjY5LDI4IEBAIHN1 YiBnZXRfaGFfc2V0dGluZ3Mgew0KICAgICByZXR1cm4gJHNlbGYtPntwbHVnfS0+Z2V0X2hhX3Nl dHRpbmdzKCk7DQogfQ0KDQorc3ViIGdldF9ub2RlX3JyZF9zdGF0cyB7DQorICAgIG15ICgkc2Vs ZiwgJG5vZGUpID0gQF87DQorDQorICAgIHJldHVybiAkc2VsZi0+e3BsdWd9LT5nZXRfbm9kZV9y cmRfc3RhdHMoJG5vZGUpOw0KK30NCisNCitzdWIgZ2V0X3ZtX3JyZF9zdGF0cyB7DQorICAgIG15 ICgkc2VsZiwgJHZtaWQsICRwZXJjZW50aWxlKSA9IEBfOw0KKw0KKyAgICByZXR1cm4gJHNlbGYt PntwbHVnfS0+Z2V0X3ZtX3JyZF9zdGF0cygkdm1pZCwgJHBlcmNlbnRpbGUpOw0KK30NCisNCitz dWIgcmVhZF92bV9jb25maWcgew0KKyAgICBteSAoJHNlbGYsICR2bWlkKSA9IEBfOw0KKw0KKyAg ICByZXR1cm4gJHNlbGYtPntwbHVnfS0+cmVhZF92bV9jb25maWcoJHZtaWQpOw0KDQpJJ2QgbGlr ZSB0byBhdm9pZCByZXR1cm5pbmcgdGhlIHdob2xlIGd1ZXN0IGNvbmZpZyBidXQgcmF0aGVyIGFu IGFic3RyYWN0IGZvcm1hdA0KdGhhdCBvbmx5IHNldHMgc29tZSBrZXlzIGxpa2UgIm1lbW9yeSIg YW5kICJjcHUiIHRoYXQgd2UgYWN0dWFsbHkgcmVxdWlyZSwgdGhhdCdkDQptYWtlIGl0IG1vcmUg ZGVmaW5lZCBhbmQgZWFzaWVyIHRvIHNlZSB3aGF0IHBvc3NpYmxlIGltcGFjdCBmYWN0b3JzIGFy ZSAtIHRoZSB0ZXN0DQpvciBzaW0gc3lzdGVtIGlzIGFsc28gc2xpZ2h0bHkgZWFzaWVyIHRvIGFk ZCB0aGF0IHdheS4NCg0KQXMgdGhhdCdzIHRoZSBiYXNpYyBqb2Igb2YgdGhlIEVudiBwbHVnaW4g c3lzdGVtLCB0cmFuc2Zvcm0gdGhlIG1peGVkL2NvbXBsZXgNClBWRSBtZXRyaWNzIGFuZCBjb250 cm9scyBpbiBzb21lIHNpbXBsZXIgYWJzdHJhY3Rpb24gdG8gdXNlIGludGVybmFsbHksIG1ha2lu Zw0KaXQgZWFzeSB0byBzaW11bGF0ZS90ZXN0IHRoZW0uDQoNCg0KK30NCisNCitzdWIgcmVhZF9j dF9jb25maWcgew0KKyAgICBteSAoJHNlbGYsICR2bWlkKSA9IEBfOw0KKw0KKyAgICByZXR1cm4g JHNlbGYtPntwbHVnfS0+cmVhZF9jdF9jb25maWcoJHZtaWQpOw0KK30NCisNCiAxOw0KZGlmZiAt LWdpdCBhL3NyYy9QVkUvSEEvRW52L1BWRTIucG0gYi9zcmMvUFZFL0hBL0Vudi9QVkUyLnBtDQpp bmRleCA1ZTBhNjgzLi4yZTE1ODVjIDEwMDY0NA0KLS0tIGEvc3JjL1BWRS9IQS9FbnYvUFZFMi5w bQ0KKysrIGIvc3JjL1BWRS9IQS9FbnYvUFZFMi5wbQ0KQEAgLTksOSArOSwxNCBAQCB1c2UgSU86 OlNvY2tldDo6VU5JWDsNCiB1c2UgUFZFOjpTYWZlU3lzbG9nOw0KIHVzZSBQVkU6OlRvb2xzOw0K IHVzZSBQVkU6OkNsdXN0ZXIgcXcoY2ZzX3JlZ2lzdGVyX2ZpbGUgY2ZzX3JlYWRfZmlsZSBjZnNf d3JpdGVfZmlsZSBjZnNfbG9ja19maWxlKTsNCit1c2UgUFZFOjpDbHVzdGVyOw0KDQpDbHVzdGVy IGlzIGFscmVhZHkgaW1wb3J0ZWQgYSBsaW5lIGFib3ZlDQoNCiB1c2UgUFZFOjpEYXRhQ2VudGVy Q29uZmlnOw0KIHVzZSBQVkU6OklOb3RpZnk7DQogdXNlIFBWRTo6UlBDRW52aXJvbm1lbnQ7DQor dXNlIFBWRTo6QVBJMlRvb2xzOw0KK3VzZSBQVkU6OlFlbXVDb25maWc7DQordXNlIFBWRTo6TFhD OjpDb25maWc7DQordXNlIFJSRHM7DQoNCiB1c2UgUFZFOjpIQTo6VG9vbHMgJzpleGl0X2NvZGVz JzsNCiB1c2UgUFZFOjpIQTo6RW52Ow0KQEAgLTQ1OSw0ICs0NjQsODkgQEAgc3ViIGdldF9oYV9z ZXR0aW5ncyB7DQogICAgIHJldHVybiAkZGF0YWNlbnRlcmNvbmZpZy0+e2hhfTsNCiB9DQoNCitz dWIgZ2V0X25vZGVfcnJkX3N0YXRzIHsNCisgICAgbXkgKCRzZWxmLCAkbm9kZSkgPSBAXzsNCisN CisgICAgbXkgJHJyZCA9IFBWRTo6Q2x1c3Rlcjo6cnJkX2R1bXAoKTsNCisgICAgbXkgJG1lbWJl cnMgPSBQVkU6OkNsdXN0ZXI6OmdldF9tZW1iZXJzKCk7DQorDQorICAgIG15ICRzdGF0cyA9IFBW RTo6QVBJMlRvb2xzOjpleHRyYWN0X25vZGVfc3RhdHMoJG5vZGUsICRtZW1iZXJzLCAkcnJkKTsN CisNCisgICAgcmV0dXJuICRzdGF0czsNCit9DQorDQorc3ViIGdldF92bV9ycmRfc3RhdHMgew0K KyAgICBteSAoJHNlbGYsICR2bWlkLCAkcGVyY2VudGlsZSkgPSBAXzsNCisNCisgICAgbXkgJHJy ZG5hbWUgPSAicHZlMi12bS8kdm1pZCI7DQorICAgIG15ICRycmRkaXIgPSAiL3Zhci9saWIvcnJk Y2FjaGVkL2RiIjsNCisNCisgICAgbXkgJHJyZCA9ICIkcnJkZGlyLyRycmRuYW1lIjsNCisNCisg ICAgbXkgJGNmID0gIkFWRVJBR0UiOw0KKw0KKyAgICBteSAkcmVzbyA9IDYwOw0KKyAgICBteSAk Y3RpbWUgID0gJHJlc28qaW50KHRpbWUoKS8kcmVzbyk7DQorDQorICAgICNsYXN0IDIwbWludXRl cw0KKyAgICBteSAkcmVxX3N0YXJ0ID0gJGN0aW1lIC0gJHJlc28qMjA7DQorICAgIG15ICRyZXFf ZW5kID0gJGN0aW1lIC0gJHJlc28qMTsNCisNCisgICAgbXkgQGFyZ3MgPSAoDQorICAgICAgICAi LXMiID0+ICRyZXFfc3RhcnQsDQorICAgICAgICAiLWUiID0+ICRyZXFfZW5kLA0KKyAgICAgICAg Ii1yIiA9PiAkcmVzbywNCisgICAgICAgICk7DQorDQorICAgIG15ICRzb2NrZXQgPSAiL3Zhci9y dW4vcnJkY2FjaGVkLnNvY2siOw0KKyAgICBwdXNoIEBhcmdzLCAiLS1kYWVtb24iID0+ICJ1bml4 OiRzb2NrZXQiIGlmIC1TICRzb2NrZXQ7DQorDQorICAgIG15ICgkc3RhcnQsICRzdGVwLCAkbmFt ZXMsICRkYXRhKSA9IFJSRHM6OmZldGNoKCRycmQsICRjZiwgQGFyZ3MpOw0KDQpzZW1pLXJlbGF0 ZWQsIERpZXRtYXIgYW5kIEkgdGFsa2VkIGFib3V0IGFkYXB0aW5nIHRoZSBSUkQgZm9ybWF0IGFu ZCBoaWdoZXIgcmVzb2x1dGlvbg0KZnJvbSBQQlMgYWxzbyBmb3IgUFZFLCBkcm9wcGluZyB0aGUg ZGVwZW5kZW5jeSBvbiBycmRjYWNoZWQsIGJ1dCBQVkUgd2l0aCB0aGUgY2x1c3Rlcg0KYW5kIGJy b2FkY2FzdGluZyBpcyBxdWl0ZSBhIGJpdCBtb3JlIGNvbXBsZXggY29tcGFyZWQgdG8gUEJTLCBz byB0aGUgZWZmb3J0IHN0YWxsZWQuDQoNCklmIHdlIG1ha2UgbW9yZSB1c2Ugb2YgdGhvc2UgbWV0 cmljcyBoZXJlIGl0IHdvdWxkIGFkZCBmdXJ0aGVyIGNvdXBsaW5nIHRvIHRoZSBleGlzdGluZw0K aW50ZXJmYWNlIHNvIG1heWJlIHdlJ2QgcmV0aGluayB0aGF0IHRocm91Z2ggLSBidXQgbm90aGlu ZyB0aGF0IG5lZWRzIHRvIHN0YWxsIHRoaXMNCmNvbXBsZXRlbHksIGNoYW5naW5nIFJSRCB3b3Vs ZCBiZSBiZXR0ZXIgZG9uZSBhdCBhIG1ham9yIHJlbGVhc2UgYW55d2F5IHdoZXJlIHdlDQpjYW4g aGFuZGxlIHRoaXMgc29tZXdoYXQgY2xlYW5seS4NCg0KKw0KKyAgICBteSBAY3B1ID0gKCk7DQor ICAgIG15IEBtZW0gPSAoKTsNCisgICAgbXkgQG1heG1lbSA9ICgpOw0KKyAgICBteSBAbWF4Y3B1 ID0gKCk7DQorDQorICAgIGZvcmVhY2ggbXkgJHJlYyAoQCRkYXRhKSB7DQorICAgICAgICBteSAk bWF4Y3B1ID0gQCRyZWNbMF0gfHwgMDsNCisgICAgICAgIG15ICRjcHUgPSBAJHJlY1sxXSB8fCAw Ow0KKyAgICAgICAgbXkgJG1heG1lbSA9IEAkcmVjWzJdIHx8IDA7DQorICAgICAgICBteSAkbWVt ID0gQCRyZWNbM10gfHwgMDsNCisgICAgICAgICNza2lwIHplcm9zIHZhbHVlcyBpZiB2bSBpcyBk b3duDQorICAgICAgICBwdXNoIEBjcHUsICRjcHUqJG1heGNwdSBpZiAkY3B1ID4gMDsNCisgICAg ICAgIHB1c2ggQG1lbSwgJG1lbSBpZiAkbWVtID4gMDsNCisgICAgICAgIHB1c2ggQG1heGNwdSwg JG1heGNwdSBpZiAkbWF4Y3B1ID4gMDsNCisgICAgICAgIHB1c2ggQG1heG1lbSwgJG1heG1lbSBp ZiAkbWF4bWVtID4gMDsNCisgICAgfQ0KKw0KKyAgICBteSAkc3RhdHMgPSB7fTsNCg0KDQptYXli ZSBjcmVhdGUgdGhpcyBuZXN0ZWQNCg0KbXkgJHN0YXRzID0gew0KICBjcHUgPT4gew0KICAgIGF2 ZyA9PiBwZXJjZW50aWxlKCRwZXJjZW50aWxlLCBcQGNwdSkgfHwgMDsNCiAgICBtYXggPT4gcGVy Y2VudGlsZSgkcGVyY2VudGlsZSwgXEBtYXhjcHUpIHx8IDA7DQogICAgdG90YWwgIC4uLg0KICB9 LA0KfTsNCg0KKyAgICAkc3RhdHMtPntjcHV9ID0gcGVyY2VudGlsZSgkcGVyY2VudGlsZSwgXEBj cHUpIHx8IDA7DQorICAgICRzdGF0cy0+e21lbX0gPSBwZXJjZW50aWxlKCRwZXJjZW50aWxlLCBc QG1lbSkgfHwgMDsNCisgICAgJHN0YXRzLT57bWF4bWVtfSA9IHBlcmNlbnRpbGUoJHBlcmNlbnRp bGUsIFxAbWF4bWVtKSB8fCAwOw0KKyAgICAkc3RhdHMtPnttYXhjcHV9ID0gcGVyY2VudGlsZSgk cGVyY2VudGlsZSwgXEBtYXhjcHUpIHx8IDA7DQorICAgICRzdGF0cy0+e3RvdGFsY3B1fSA9ICRz dGF0cy0+e2NwdX0gKiAkc3RhdHMtPnttYXhjcHV9ICogMTAwOw0KDQp3aGF0IGlzIGNwdS9tYXhj cHUgZXhhY3RseSwgdGhlIG11bHRpcGxpY2F0aW9uIG9mIGJvdGggc3RyaWtlcyBtZSBhcyBhIGJp dCB3ZWlyZD8NCg0KDQorDQorICAgIHJldHVybiAkc3RhdHM7DQorfQ0KKw0KK3N1YiBwZXJjZW50 aWxlIHsNCisgICAgbXkgKCRwLCAkYXJlZikgPSBAXzsNCisgICAgbXkgJHBlcmNlbnRpbGUgPSBp bnQoJHAgKiAkI3skYXJlZn0vMTAwKTsNCisgICAgcmV0dXJuIChzb3J0IEAkYXJlZilbJHBlcmNl bnRpbGVdOw0KK30NCisNCitzdWIgcmVhZF92bV9jb25maWcgew0KKyAgICBteSAoJHNlbGYsICR2 bWlkKSA9IEBfOw0KKw0KKyAgICByZXR1cm4gUFZFOjpRZW11Q29uZmlnLT5sb2FkX2NvbmZpZygk dm1pZCk7DQorfQ0KKw0KK3N1YiByZWFkX2N0X2NvbmZpZyB7DQorICAgIG15ICgkc2VsZiwgJHZt aWQpID0gQF87DQorDQorICAgIHJldHVybiBQVkU6OkxYQzo6Q29uZmlnLT5sb2FkX2NvbmZpZygk dm1pZCk7DQorfQ0KKw0KIDE7DQpkaWZmIC0tZ2l0IGEvc3JjL1BWRS9IQS9NYW5hZ2VyLnBtIGIv c3JjL1BWRS9IQS9NYW5hZ2VyLnBtDQppbmRleCAxYzY2YjQzLi5hZTVmYmNiIDEwMDY0NA0KLS0t IGEvc3JjL1BWRS9IQS9NYW5hZ2VyLnBtDQorKysgYi9zcmMvUFZFL0hBL01hbmFnZXIucG0NCkBA IC0xLDggKzEsMTMgQEANCisNCiBwYWNrYWdlIFBWRTo6SEE6Ok1hbmFnZXI7DQoNCiB1c2Ugc3Ry aWN0Ow0KIHVzZSB3YXJuaW5nczsNCiB1c2UgRGlnZXN0OjpNRDUgcXcobWQ1X2Jhc2U2NCk7DQor dXNlIFJSRHM7DQordXNlIFBPU0lYIHF3L2NlaWwvOw0KK3VzZSBQVkU6OkFQSTJUb29sczsNCit1 c2UgUFZFOjpTdG9yYWdlOw0KDQpBYm92ZSB0d28gYXJlIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFi bGUgaW4gdGhlIHRlc3Qvc2ltIGVudmlyb25tZW50LCB3aGF0ZXZlciBuZWVkcw0KdGhlbSBuZWVk cyB0byBiZSBjYXBzdWxlZCBpbiB0aGUgUFZFMiBFbnYgbW9kdWxlLg0KDQoNCiB1c2UgUFZFOjpU b29sczsNCiB1c2UgUFZFOjpIQTo6VG9vbHMgJzpleGl0X2NvZGVzJzsNCkBAIC0zOTQsOCArMzk5 LDE2IEBAIHN1YiBtYW5hZ2Ugew0KICAgICAgICBteSAkcmVwZWF0ID0gMDsNCg0KICAgICAgICAk c2VsZi0+cmVjb21wdXRlX29ubGluZV9ub2RlX3VzYWdlKCk7DQorICAgICAgICRzZWxmLT5yZWNv bXB1dGVfb25saW5lX25vZGVfc3RhdHMoKTsNCg0KLSAgICAgICBmb3JlYWNoIG15ICRzaWQgKHNv cnQga2V5cyAlJHNzKSB7DQorICAgICAgICRzZWxmLT5nZXRfc2VydmljZV9zdGF0cygkc3MpOw0K Kw0KKyAgICAgICBmb3JlYWNoIG15ICRzaWQgKA0KKyAgICAgICAgICAgICAgICNvcmRlcmluZyB2 bSBieSBzaXplLCBiaWdnZXIgbWVtIGZpcnN0IHRoZW4gYmlnZ2VyIGNwdQ0KKyAgICAgICAgICAg ICAgICNjb3VsZCBiZSBpbXByb3ZlZCB3aXRoIGJ1YmJsZXNlYXJjaCBoZXVyaXN0aWMNCisgICAg ICAgICAgICAgICAjaHR0cHM6Ly9hbnRpcGhpc2hpbmcuY2V0c2kuZnIvcHJveHkvdjM/aT1aazky VkVGS2FHUTRVbXM0Y25aRVVXTVRwZkhhWEZRR1J3MV9Dbk9vT0gwJnI9YkhBMWRHVjNOV0pRVlVs b2FXTkZVWlBtMGZpaUJ2aWFpeV9SRGF2MkdRMVU0dXk2bHNERHYzdUJzenB2dldZUU41RnFLcUZE NldQWXVwZkFVUDFjOWcmZj1TbGhEYkU5dVMybGFTMkphWkZwTld2bXN4YWkxemxKUDlsbGdubDVI SXYtNGpBamk4RGgyQlFhd3p4SUQ1YnpyNlV2LTNFUWQtZWx1UWJzUGZjVU9UZyZ1PWh0dHBzJTNB Ly93d3cuY3MudHVmdHMuZWR1L35uci9jczI1Ny9hcmNoaXZlL21pY2hhZWwtbWl0emVubWFjaGVy L2J1YmJsZXNlYXJjaC5wZGYmaz1YUktVDQorICAgICAgICAgICAgICAgc29ydCB7ICRzcy0+eyRh fS0+e3N0YXRzfS0+e21lbWd9IDw9PiAkc3MtPnskYn0tPntzdGF0c30tPnttZW1nfSB8fCAkc3Mt PnskYX0tPntzdGF0c30tPnt0b3RhbGNwdXJvdW5kfSA8PT4gJHNzLT57JGJ9LT57c3RhdHN9LT57 dG90YWxjcHVyb3VuZH0gfHwgJHNzLT57JGF9LT57dHlwZX0gY21wICRzcy0+eyRifS0+e3R5cGV9 fQ0KKyAgICAgICAgICAgICAgIGtleXMgJSRzcykgew0KDQptYXliZSB3ZSBjYW4gbW92ZSB0aGF0 IHNvcnQgaW50byBhIHN1YiB3aXRoIHNvbWUgbGluZSBicmVha3M/DQoNCiAgICAgICAgICAgIG15 ICRzZCA9ICRzcy0+eyRzaWR9Ow0KICAgICAgICAgICAgbXkgJGNkID0gJHNjLT57JHNpZH0gfHwg eyBzdGF0ZSA9PiAnZGlzYWJsZWQnIH07DQoNCkBAIC04MDIsMTIgKzgxNSw4IEBAIHN1YiBuZXh0 X3N0YXRlX3JlY292ZXJ5IHsNCg0KICAgICAkc2VsZi0+cmVjb21wdXRlX29ubGluZV9ub2RlX3Vz YWdlKCk7ICMgd2Ugd2FudCB0aGUgbW9zdCBjdXJyZW50IG5vZGUgc3RhdGUNCg0KLSAgICBteSAk cmVjb3Zlcnlfbm9kZSA9IHNlbGVjdF9zZXJ2aWNlX25vZGUoDQotICAgICAgICRzZWxmLT57Z3Jv dXBzfSwNCi0gICAgICAgJHNlbGYtPntvbmxpbmVfbm9kZV91c2FnZX0sDQotICAgICAgICRjZCwN Ci0gICAgICAgJHNkLT57bm9kZX0sDQotICAgICk7DQorICAgIG15ICRzdG9yZWNmZyA9IFBWRTo6 U3RvcmFnZTo6Y29uZmlnKCk7DQoNCnRoYXQgZGVwZW5kZW5jeSBjYW5ub3QgbGl2ZSBoZXJlIGRp cmVjdGx5IGluIG1hbmFnZXIsIGZyb20gdG9wIG9mIG15IGhlYWQgSSdkIHN1Z2dlc3QgYWRkaW5n DQphIGNoZWNrX3NlcnZpY2VfY29uc3RyYWludHMoJHNpZCwgJG5vZGUpIHBsdWdpbiBtZXRob2Qg dG8gZW52DQoNCg0KKyAgICBteSAkcmVjb3Zlcnlfbm9kZSA9IGZpbmRfYmVzdGZpdF9ub2RlX3Rh cmdldCgkaGFlbnYsICRzaWQsICRjZCAsICRzZC0+e25vZGV9LCAkc2QtPntzdGF0c30sICRzZWxm LT57b25saW5lX25vZGVfdXNhZ2V9LCAkc2VsZi0+e29ubGluZV9ub2RlX3N0YXRzfSwgJHNlbGYt Pntncm91cHN9LCAkc3RvcmVjZmcpOw0KDQptYXliZSBqdXN0IHBhc3MgJHNlbGYgdG8gYXZvaWQg bW9zdCBvZiB0aG9zZSBwYXJhbWV0ZXJzLCBpb3cuIG1ha2UgaXQgYSBibGVzc2VkIG1ldGhvZCBv ZiB0aGlzDQptb2R1bGUsIHNvbWV0aGluZyBsaWtlOg0KDQokc2VsZi0+ZmluZF9iZXN0Zml0X25v ZGVfdGFyZ2V0KCRzaWQsICRjZCAsICRzZC0+e25vZGV9LCAkc2QtPntzdGF0c30pOw0KDQpzZWVt cyB0byBtZSBsaWtlIGEgYmFsYW5jZSBvZiBhdm9pZCBwYXNzaW5nIGV2ZXJ5IGhlbHBlciBtb2R1 bGUvaGFzaCBleHBsaWNpdCBhZ2FpbiB3aGlsZSBrZWVwaW5nDQppdCBhIGJpdCBkZWNvdXBsZWQg ZnJvbSB0aGUgYmxlc3NlZCBtb2R1bGUgaW5mby4NCg0KDQogICAgIGlmICgkcmVjb3Zlcnlfbm9k ZSkgew0KICAgICAgICBteSAkbXNnID0gInJlY292ZXIgc2VydmljZSAnJHNpZCcgZnJvbSBmZW5j ZWQgbm9kZSAnJGZlbmNlZF9ub2RlJyB0byBub2RlICckcmVjb3Zlcnlfbm9kZSciOw0KQEAgLTgy Miw2ICs4MzEsMTQgQEAgc3ViIG5leHRfc3RhdGVfcmVjb3Zlcnkgew0KICAgICAgICAkaGFlbnYt PnN0ZWFsX3NlcnZpY2UoJHNpZCwgJHNkLT57bm9kZX0sICRyZWNvdmVyeV9ub2RlKTsNCiAgICAg ICAgJHNlbGYtPntvbmxpbmVfbm9kZV91c2FnZX0tPnskcmVjb3Zlcnlfbm9kZX0rKzsNCg0KKyAg ICAgICAjYWRkIHZtIGNwdS9tZW0gdG8gY3VycmVudCBub2RlIHN0YXRzICh0aGlzIGlzIGFuIGVz dGltYXRpb24gYmFzZWQgb24gbGFzdCAyMG1pbiB2bSBzdGF0cykNCisgICAgICAgbXkgJG5vZGVf c3RhdHMgPSAkc2VsZi0+e29ubGluZV9ub2RlX3N0YXRzfS0+eyRyZWNvdmVyeV9ub2RlfS0+e3N0 YXRzfTsNCisgICAgICAgJG5vZGVfc3RhdHMtPnt0b3RhbGNwdX0gKz0gJHNkLT57c3RhdHN9LT57 dG90YWxjcHV9Ow0KKyAgICAgICAkbm9kZV9zdGF0cy0+e21lbX0gKz0gJHNkLT57c3RhdHN9LT57 bWVtfTsNCisgICAgICAgJG5vZGVfc3RhdHMtPnt0b3RhbGZyZWVjcHV9ID0gKDEwMCAqICRub2Rl X3N0YXRzLT57bWF4Y3B1fSkgLSAkbm9kZV9zdGF0cy0+e3RvdGFsY3B1fTsNCisgICAgICAgJG5v ZGVfc3RhdHMtPntmcmVlbWVtfSA9ICAkbm9kZV9zdGF0cy0+e21heG1lbX0gLSAkbm9kZV9zdGF0 cy0+e21lbX07DQoNCg0KDQorDQorDQogICAgICAgICMgTk9URTogJHNkICppcyBub3JtYWxseSBy ZWFkLW9ubHkqLCBmZW5jaW5nIGlzIHRoZSBleGNlcHRpb24NCiAgICAgICAgJGNkLT57bm9kZX0g PSAkc2QtPntub2RlfSA9ICRyZWNvdmVyeV9ub2RlOw0KICAgICAgICBteSAkbmV3X3N0YXRlID0g KCRjZC0+e3N0YXRlfSBlcSAnc3RhcnRlZCcpID8gJ3N0YXJ0ZWQnIDogJ3JlcXVlc3Rfc3RvcCc7 DQpAQCAtODM5LDQgKzg1NiwyMTkgQEAgc3ViIG5leHRfc3RhdGVfcmVjb3Zlcnkgew0KICAgICB9 DQogfQ0KDQorDQorc3ViIGRvdHByb2Qgew0KKyAgICBteSgkdmVjX2EsICR2ZWNfYiwgJG1vZGUp ID0gQF87DQorICAgIGRpZSAidGhleSBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6ZVxuIiB1bmxlc3Mg QCR2ZWNfYSA9PSBAJHZlY19iOw0KKyAgICAkbW9kZSA9ICIiIGlmICEkbW9kZTsNCisgICAgbXkg JHN1bSA9IDA7DQorICAgIG15ICRub3JtX2EgPSAwOw0KKyAgICBteSAkbm9ybV9iID0gMDsNCisN CisgICAgZm9yKG15ICRpPTA7ICRpIDwgc2NhbGFyIEB7JHZlY19hfTsgJGkrKykgew0KKyAgICAg ICBteSAkYSA9IEB7JHZlY19hfVskaV07DQorICAgICAgIG15ICRiID0gQHskdmVjX2J9WyRpXTsN CisNCisgICAgICAgJHN1bSArPSAkYSAqICRiOw0KKyAgICAgICAkbm9ybV9hICs9ICRhICogJGE7 DQorICAgICAgICRub3JtX2IgKz0gJGIgKiAkYjsNCisgICAgfQ0KKw0KKyAgICBpZigkbW9kZSBl cSAnbm9ybVInKSB7DQorICAgICAgIHJldHVybiAkc3VtIC8gKHNxcnQoJG5vcm1fYSkgKiBzcXJ0 KCRub3JtX2IpKQ0KKyAgICB9IGVsc2lmICgkbW9kZSBlcSAnbm9ybUMnKSB7DQorICAgICAgIHJl dHVybiAkc3VtIC8gJG5vcm1fYjsNCisgICAgfQ0KKyAgICByZXR1cm4gJHN1bTsNCit9DQorDQor c3ViIGV1Y2xpZGVhbl9kaXN0YW5jZSB7DQorICAgIG15KCR2ZWNfYSwgJHZlY19iKSA9IEBfOw0K Kw0KKyAgICBteSAkc3VtID0gMDsNCisNCisgICAgZm9yKG15ICRpPTA7ICRpIDwgc2NhbGFyIEB7 JHZlY19hfTsgJGkrKykgew0KKyAgICAgICAgbXkgJGEgPSBAeyR2ZWNfYX1bJGldOw0KKyAgICAg ICAgbXkgJGIgPSBAeyR2ZWNfYn1bJGldOw0KKyAgICAgICAgJHN1bSArPSAoJGIgLSAkYSkqKjI7 DQorICAgIH0NCisNCisgICAgcmV0dXJuIHNxcnQoJHN1bSk7DQorfQ0KDQpXZSBjYW4gYWRkIGEg ZmV3IGhlbHBlciBtZXRob2RzIHRvIGEgbmV3IG1vZHVsZSBpbiBwcm94bW94LXBlcmwtcnMgZm9y IGFib3ZlLCBjb3VsZCBtYWtlDQp0aGlzIHF1aXRlIGEgYml0IGZhc3Rlci4NCg0KQWxzbywgYWJv dmUsIGFuZCBhY3R1YWxseSBhbHNvIGJlbG93IHNob3VsZCBsaXZlIGluIGEgc2VwYXJhdGUgbW9k dWxlIGluIHRoZSBmdXR1cmUsIGJ1dA0KSSBoYXZlIG5vdGhpbmcgYWdhaW5zdCBrZWVwaW5nIGl0 IGhlcmUgZm9yIGRldmVsb3BtZW50IGZvciBub3cuDQoNCisNCitzdWIgZmluZF9iZXN0Zml0X25v ZGVfdGFyZ2V0IHsNCisgICAgbXkoJGhhZW52LCAkc2lkLCAkY2QsICRub2RlbmFtZSwgJHZtX3N0 YXRzLCAkb25saW5lX25vZGVfdXNhZ2UsICRvbmxpbmVfbm9kZXMsICRncm91cHMsICRzdG9yZWNm ZykgPSBAXzsNCisNCisgICAgbXkgKHVuZGVmLCAkdm1pZCkgPSBzcGxpdCgvOi8sICRzaWQpOw0K DQp3ZSBoYXZlIGEgaGVscGVyIGZvciB0aGF0IElJUkMNCg0KKw0KKyAgICBteSAkaGFncm91cCA9 IGdldF9zZXJ2aWNlX2dyb3VwKCRncm91cHMsICRvbmxpbmVfbm9kZXMsICRjZCk7DQorICAgIG15 ICgkcHJpX2dyb3VwcywgJGdyb3VwX21lbWJlcnNfcHJpbykgPSBnZXRfbm9kZV9wcmlvcml0eV9n cm91cHMoJGhhZ3JvdXAsICRvbmxpbmVfbm9kZXMpOw0KKw0KKyAgICBteSAkdGFyZ2V0X25vZGVz ID0ge307DQorICAgIGZvcmVhY2ggbXkgJG5vZGVuYW1lIChrZXlzICUkb25saW5lX25vZGVzKSB7 DQorICAgICAgIG15ICRub2RlX3N0YXRzID0gJG9ubGluZV9ub2Rlcy0+eyRub2RlbmFtZX0tPntz dGF0c307DQorDQorICAgICAgICAjIyMjIEZJTFRFUklORyBOT0RFUyBXSVRIIEhBUkQgQ09OU1RS QUlOVFMgKHZtIGNhbid0IGJlIHN0YXJ0ZWQpDQorICAgICAgIG5leHQgaWYgIWNoZWNrX2hhcmRf Y29uc3RyYWludHMoJGhhZW52LCAkdm1pZCwgJGNkLCAkbm9kZW5hbWUsICRub2RlX3N0YXRzLCAk dm1fc3RhdHMsICRzdG9yZWNmZywgJGdyb3VwX21lbWJlcnNfcHJpbyk7DQoNCkkgbWVhbiwgbW9z dCBvZiB0aG9zZSBzaG91bGQgYmUgY292ZXJlZCBieSB0aGUgZ3JvdXBpbmcgYWxyZWFkeT8NCg0K Kw0KKyAgICAgICAjIyMjIEFERCBwcmlvIGFuZCBldWNsaWRlYW5fZGlzdGFuY2Ugd2VpZ2h0DQor ICAgICAgICR0YXJnZXRfbm9kZXMtPnskbm9kZW5hbWV9ID0gYWRkX25vZGVfcHJpbygkbm9kZW5h bWUsICdkaXN0YW5jZScsICRub2RlX3N0YXRzLCAkdm1fc3RhdHMsICRncm91cF9tZW1iZXJzX3By aW8sICRvbmxpbmVfbm9kZV91c2FnZSk7DQorICAgIH0NCisNCisgICAgI29yZGVyIGJ5IHNvZnRf Y29uc3RyYWludF9wcmlvLCBoYWdyb3VwIHByaW8sIHdlaWdodCAoQmVzdCBmaXQgYWxnb3JpdGht LCBsb3dlciBkaXN0YW5jZSBmaXJzdCksIG51bWJlciBvZiBzZXJ2aWNlcywgYW5kIG5vZGVuYW1l DQorICAgIG15IEB0YXJnZXRfYXJyYXkgPSBzb3J0IHsNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJHRhcmdldF9ub2Rlcy0+eyRifS0+e3ByaW99IDw9PiAkdGFyZ2V0X25vZGVzLT57 JGF9LT57cHJpb30gfHwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhcmdldF9u b2Rlcy0+eyRhfS0+e3NvZnRfY29uc3RyYWludF9wcmlvfSA8PT4gJHRhcmdldF9ub2Rlcy0+eyRi fS0+e3NvZnRfY29uc3RyYWludF9wcmlvfSB8fA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAkdGFyZ2V0X25vZGVzLT57JGF9LT57d2VpZ2h0fSA8PT4gJHRhcmdldF9ub2Rlcy0+eyRi fS0+e3dlaWdodH0gfHwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhcmdldF9u b2Rlcy0+eyRhfS0+e29ubGluZV9ub2RlX3VzYWdlfSA8PT4gJHRhcmdldF9ub2Rlcy0+eyRifS0+ e29ubGluZV9ub2RlX3VzYWdlfSB8fA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk dGFyZ2V0X25vZGVzLT57JGF9LT57bmFtZX0gY21wICR0YXJnZXRfbm9kZXMtPnskYn0tPntuYW1l fQ0KKyAgICAgICAgICAgICAgICAgICAgICAgfSBrZXlzICUkdGFyZ2V0X25vZGVzOw0KKw0KKyAg ICBteSAkdGFyZ2V0ID0gJHRhcmdldF9hcnJheVswXTsNCisNCisgICAgcmV0dXJuICR0YXJnZXQ7 DQorfQ0KKw0KKw0KK3N1YiBjaGVja19oYXJkX2NvbnN0cmFpbnRzIHsNCisgICAgbXkgKCRoYWVu diwgJHZtaWQsICRjZCwgJG5vZGUsICRub2RlX3N0YXRzLCAkdm1fc3RhdHMsICRzdG9yZWNmZywg JGdyb3VwX21lbWJlcnNfcHJpbykgPSBAXzsNCisNCisgICAgI25vZGUgbmVlZCB0byBoYXZlIGEg cHJpbyhyZXN0cmljdGVkIGdyb3VwKQ0KKyAgICByZXR1cm4gaWYgIWRlZmluZWQoJGdyb3VwX21l bWJlcnNfcHJpby0+eyRub2RlfSk7DQorDQorICAgICN2bSBjYW4ndCBzdGFydCBpZiBob3N0IGhh dmUgbGVzcyBjb3JlDQorICAgIHJldHVybiBpZiAkbm9kZV9zdGF0cy0+e21heGNwdX0gPCAkdm1f c3RhdHMtPnttYXhjcHV9Ow0KKyAgICAjdm0gY2FuJ3Qgc3RhcnQgaWYgbm9kZSBkb24ndCBoYXZl IGVub3VnaCBtZW0gdG8gaGFuZGxlIHZtIG1heCBtZW0NCisgICAgcmV0dXJuIGlmICRub2RlX3N0 YXRzLT57ZnJlZW1lbX0gPCAkdm1fc3RhdHMtPnttYXhtZW19Ow0KKw0KKyAgICAjbWF4IDk1JSBj cHUvcmFtDQorICAgIG15ICRtZW1fdGhyZXNob2xkID0gMC45NTsNCisgICAgbXkgJGNwdV90aHJl c2hvbGQgPSAwLjk1Ow0KKw0KKyAgICAjY2hlY2sgaWYgdGFyZ2V0IG5vZGUgaGF2ZSBlbm91Z2gg bWVtIHJlc3NvdXJjZXMgdW5kZXIgdGhyZXNob2xkDQorICAgIHJldHVybiBpZiAkbm9kZV9zdGF0 cy0+e2ZyZWVtZW19ICogJG1lbV90aHJlc2hvbGQgPCAkdm1fc3RhdHMtPnttZW19Ow0KKw0KKyAg ICAjY2hlY2sgaWYgdGFyZ2V0IG5vZGUgaGF2ZSBlbm91Z2ggY3B1IHJlc3NvdXJjZXMgdW5kZXIg dGhyZXNob2xkDQorICAgIHJldHVybiBpZiAkbm9kZV9zdGF0cy0+e3RvdGFsZnJlZWNwdX0gKiAk Y3B1X3RocmVzaG9sZCA8ICR2bV9zdGF0cy0+e3RvdGFsY3B1fTsNCisNCisgICAgI2NoZWNrIHN0 b3JhZ2UgYXZhaWxhYmlsaXR5DQorICAgIGlmICgkY2QtPnt0eXBlfSBlcSAndm0nKSB7DQorICAg ICAgIG15ICRjb25mID0gdW5kZWY7DQorICAgICAgIGV2YWwgeyAkY29uZiA9ICRoYWVudi0+cmVh ZF92bV9jb25maWcoJHZtaWQpOyB9Ow0KKyAgICAgICBpZiAoISRAKSB7DQorICAgICAgICAgICBl dmFsIHsgUFZFOjpRZW11U2VydmVyOjpjaGVja19zdG9yYWdlX2F2YWlsYWJpbGl0eSgkc3RvcmVj ZmcsICRjb25mLCAkbm9kZSkgfTsNCg0Kbm9uLWd1YXJlZCBwdmUtZW52IGNhbGwgY2Fubm90IHN0 YXkgaGVyZSBpbiBtYW5hZ2VyDQoNCisgICAgICAgICAgIHJldHVybiBpZiAkQDsNCisgICAgICAg fQ0KKw0KKyAgICB9IGVsc2lmICgkY2QtPnt0eXBlfSBlcSAnY3QnKSB7DQorICAgICAgIG15ICRj b25mID0gdW5kZWY7DQorICAgICAgIGV2YWwgeyAkY29uZiA9ICRoYWVudi0+cmVhZF9jdF9jb25m aWcoJHZtaWQpOyB9Ow0KKyAgICAgICAjZml4bWUgOiBjaGVjayBzdG9yYWdlIGZvciBseGMgdG9v DQorICAgIH0NCisNCisgICAgIyBmaXhtZTogY2hlY2sgYnJpZGdlIGF2YWlsYWJpbGl0eQ0KKyAg ICAjIGZpeG1lOiB2bTogYWRkIGEgY2hlY2sgZm9yIGNwdW1vZGVsIGNvbXBhdGliaWxpdHkgPw0K KyAgICByZXR1cm4gMTsNCit9DQorDQorc3ViIGNvbXB1dGVfc29mdF9jb25zdHJhaW50cyB7DQor ICAgIG15ICgkbm9kZV9zdGF0cywgJHZtX3N0YXRzKSA9IEBfOw0KKw0KKyAgICAjdHJ5IHRvIHJl YWNoIDgwJSBtYXggY3B1L3JhbQ0KKyAgICBteSAkbWVtX3RocmVzaG9sZCA9IDAuODsNCisgICAg bXkgJGNwdV90aHJlc2hvbGQgPSAwLjg7DQorDQorICAgIG15ICRjb3VudCA9IDA7DQorICAgICNj aGVjayBpZiB0YXJnZXQgbm9kZSBoYXZlIGVub3VnaCBtZW0gcmVzc291cmNlcyB1bmRlciB0aHJl c2hvbGQNCisgICAgJGNvdW50KysgaWYgJG5vZGVfc3RhdHMtPntmcmVlbWVtfSAqICRtZW1fdGhy ZXNob2xkIDwgJHZtX3N0YXRzLT57bWVtfTsNCisNCisgICAgI2NoZWNrIGlmIHRhcmdldCBub2Rl IGhhdmUgZW5vdWdoIGNwdSByZXNzb3VyY2VzIHVuZGVyIHRocmVzaG9sZA0KKyAgICAkY291bnQr KyBpZiAkbm9kZV9zdGF0cy0+e3RvdGFsZnJlZWNwdX0gKiAkY3B1X3RocmVzaG9sZCA8ICR2bV9z dGF0cy0+e3RvdGFsY3B1fTsNCisNCisgICAgI2ZpeG1lIDogYWRkIGFudGlhZmZpbml0eQ0KKw0K KyAgICByZXR1cm4gJGNvdW50Ow0KK30NCisNCitzdWIgYWRkX25vZGVfcHJpbyB7DQorICAgIG15 ICgkbm9kZW5hbWUsICRtZXRob2QsICRub2RlX3N0YXRzLCAkdm1fc3RhdHMsICRncm91cF9tZW1i ZXJzX3ByaW8sICRvbmxpbmVfbm9kZV91c2FnZSkgPSBAXzsNCisNCisgICAgI3JvdW5kZWQgdmFs dWVzIHRvIGNvbXB1dGUgdmVjdG9ycyAoY3B1IDAtMTAwICwgbWVtIDBHLS0+WEcpDQorICAgIG15 ICR2bV90b3RhbGNwdSA9IGNlaWwoJHZtX3N0YXRzLT57dG90YWxjcHV9KTsNCisgICAgbXkgJHZt X21lbSA9IGNlaWwoJHZtX3N0YXRzLT57bWVtfS8xMDI0LzEwMjQvMTAyNCk7DQorICAgIG15ICRu b2RlX2ZyZWVjcHUgPSBjZWlsKCRub2RlX3N0YXRzLT57dG90YWxmcmVlY3B1fSk7DQorICAgIG15 ICRub2RlX2ZyZWVtZW0gPSBjZWlsKCRub2RlX3N0YXRzLT57ZnJlZW1lbX0vMTAyNC8xMDI0LzEw MjQpOw0KKw0KKyAgICBteSBAdmVjX3ZtID0gKCR2bV90b3RhbGNwdSwgJHZtX21lbSk7ICAjPyBh ZGQgbmV0d29yayB1c2FnZSBkaW1lbnNpb24gPw0KKyAgICBteSBAdmVjX25vZGUgPSAoJG5vZGVf ZnJlZWNwdSwgJG5vZGVfZnJlZW1lbSk7ICM/IGFkZCBuZXR3b3JrIHVzYWdlIGRpbWVuc2lvbiA/ DQorICAgIG15ICR3ZWlnaHQgPSAwOw0KKyAgICBpZiAoJG1ldGhvZCBlcSAnZGlzdGFuY2UnKSB7 DQorICAgICAgICR3ZWlnaHQgPSBldWNsaWRlYW5fZGlzdGFuY2UoXEB2ZWNfdm0sXEB2ZWNfbm9k ZSk7DQorICAgIH0gZWxzaWYgKCRtZXRob2QgZXEgJ2RvdHByb2QnKSB7DQorICAgICAgICR3ZWln aHQgPSBkb3Rwcm9kKFxAdmVjX3ZtLFxAdmVjX25vZGUpOw0KKyAgICB9DQorDQorICAgIG15ICRu b2RlID0ge307DQorICAgICRub2RlLT57d2VpZ2h0fSA9ICR3ZWlnaHQ7DQorICAgICRub2RlLT57 c29mdF9jb25zdHJhaW50X3ByaW99ID0gY29tcHV0ZV9zb2Z0X2NvbnN0cmFpbnRzKCRub2RlX3N0 YXRzLCAkdm1fc3RhdHMpOw0KKyAgICAkbm9kZS0+e3ByaW99ID0gJGdyb3VwX21lbWJlcnNfcHJp by0+eyRub2RlbmFtZX07DQorICAgICRub2RlLT57b25saW5lX25vZGVfdXNhZ2V9ID0gJG9ubGlu ZV9ub2RlX3VzYWdlLT57JG5vZGVuYW1lfTsNCisgICAgJG5vZGUtPntuYW1lfSA9ICRub2RlbmFt ZTsNCisNCisgICAgcmV0dXJuICRub2RlOw0KK30NCisNCitzdWIgZ2V0X3NlcnZpY2Vfc3RhdHMg ew0KKyAgIG15ICgkc2VsZiwgJHNzKSA9IEBfOw0KKw0KKyAgICAgICBmb3JlYWNoIG15ICRzaWQg KHNvcnQga2V5cyAlJHNzKSB7DQorDQorICAgICAgICAgICBpZiAoJHNpZCA9fiBtL14odm18Y3R8 ZmEpOihcZCspJC8pIHsNCg0KQ291bGQgdXNlIFBWRTo6SEE6OkNvbmZpZzo6cGFyc2Vfc2lkDQoN CisgICAgICAgICAgICAgICAkc3MtPnskc2lkfS0+e3R5cGV9ID0gJDE7DQorICAgICAgICAgICAg ICAgJHNzLT57JHNpZH0tPntuYW1lfSA9ICQyOw0KKyAgICAgICAgICAgfQ0KKw0KKyAgICAgICAg ICAgbXkgJHN0YXRzID0ge307DQorICAgICAgICAgICAkc3RhdHMtPntjcHV9ID0gMDsNCisgICAg ICAgICAgICRzdGF0cy0+e21heGNwdX0gPSAwOw0KKyAgICAgICAgICAgJHN0YXRzLT57bWVtfSA9 IDA7DQorICAgICAgICAgICAkc3RhdHMtPnttYXhtZW19ID0gMDsNCg0Kc2FtZSBoZXJlLCBtYXli ZSBuZXN0ZWQgYW5kIChuaXQpIEkgZmluZCBpdCBlYXNpZXIgdG8gcmVhZCB0byBkaXJlY3RseSBk ZWNsYXJlIHRoZSBoYXNoDQppbiBzdWNoIGNhc2VzOg0KDQpteSAkc3RhdHMgPSB7DQogICAgY3B1 ID0+IC4uLg0KfTsNCg0KKw0KKyAgICAgICAgICAgI2F2b2lkIHRvIGNvbXB1dGUgYWxsIHN0YXRz LCBhcyBjdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IHJlY292ZXJ5DQoNCmFoIG9rYXksIHlvdSBh bHJlYWR5IGRvIGl0IG9ubHkgb24gcmVjb3ZlcnkgLSBvdmVybG9va2VkIHRoYXQgd2hlbiByZWFk aW5nIHRoZSBjb3Zlcg0KbGV0dGVyDQoNCisgICAgICAgICAgIGlmICgkc3MtPnskc2lkfS0+e3N0 YXRlfSBlcSAncmVjb3ZlcnknKSB7DQorDQorICAgICAgICAgICAgICAgI2dldCB2bS9jdCBzdGF0 cyA1bWluIGJlZm9yZSBvbiBsYXN0IDIwbWluDQorICAgICAgICAgICAgICAgJHN0YXRzID0gJHNl bGYtPntoYWVudn0tPmdldF92bV9ycmRfc3RhdHMoJHNzLT57JHNpZH0tPntuYW1lfSwgOTUpOw0K KyAgICAgICAgICAgfQ0KKyAgICAgICAgICAgI2ZpeG1lOiB3aW5kb3dzIHZtIGZpbGwgbWVtb3J5 IHdpdGggemVybyBhdCBib290LCBzbyBtZW0gPSBtYXhtZW0NCisNCisgICAgICAgICAgICNyb3Vu ZGVkIHZhbHVlcyBmb3Igb3JkZXJpbmcNCg0Kbml0OiBjZWlsICE9IHJvdW5kDQoNCisgICAgICAg ICAgICRzdGF0cy0+e3RvdGFsY3B1cm91bmR9ID0gY2VpbCgkc3RhdHMtPntjcHV9ICogMTAwICog JHN0YXRzLT57bWF4Y3B1fSk7DQorICAgICAgICAgICAkc3RhdHMtPnttZW1nfSA9IGNlaWwoICRz dGF0cy0+e21lbX0gLzEwMjQgLzEwMjQgLzEwMjQpOw0KKw0KKyAgICAgICAgICAgJHNzLT57JHNp ZH0tPntzdGF0c30gPSAkc3RhdHM7DQorICAgICAgIH0NCit9DQorDQorc3ViIHJlY29tcHV0ZV9v bmxpbmVfbm9kZV9zdGF0cyB7DQorICAgIG15ICgkc2VsZikgPSBAXzsNCisNCisgICAgbXkgJG9u bGluZV9ub2RlX3N0YXRzID0ge307DQorICAgIG15ICRvbmxpbmVfbm9kZXMgPSAkc2VsZi0+e25z fS0+bGlzdF9vbmxpbmVfbm9kZXMoKTsNCisNCisgICAgZm9yZWFjaCBteSAkbm9kZSAoQCRvbmxp bmVfbm9kZXMpIHsNCisgICAgICAgbXkgJHN0YXRzID0gJHNlbGYtPntoYWVudn0tPmdldF9ub2Rl X3JyZF9zdGF0cygkbm9kZSk7DQorICAgICAgICAkc3RhdHMtPntjcHV9ID0gMCBpZiAhZGVmaW5l ZCgkc3RhdHMtPntjcHV9KTsNCisgICAgICAgICRzdGF0cy0+e21heGNwdX0gPSAwIGlmICFkZWZp bmVkKCRzdGF0cy0+e21heGNwdX0pOw0KKyAgICAgICAgJHN0YXRzLT57bWVtfSA9IDAgaWYgIWRl ZmluZWQoJHN0YXRzLT57bWVtfSk7DQorICAgICAgICAkc3RhdHMtPnttYXhtZW19ID0gMCBpZiAh ZGVmaW5lZCgkc3RhdHMtPnttYXhtZW19KTsNCisgICAgICAgICRzdGF0cy0+e3RvdGFsY3B1fSA9 ICRzdGF0cy0+e2NwdX0gKiAxMDAgKiAkc3RhdHMtPnttYXhjcHV9OyAjaG93IHRvIGhhbmRsZSBk aWZmZXJlbnQgY3B1IG1vZGVsIHBvd2VyID8gYm9nb21pcHMgPw0KDQpCb2dvTWlwcyBpcyBmb3Ig YSBzaW5nbGUgY29yZSBsb29wIElJUkMsIHNvIGl0J2QgYmUgYGNvcmVzIHggYm9nby1taXBzYCBJ IGd1ZXNzLg0KDQorICAgICAgICAkc3RhdHMtPnt0b3RhbGZyZWVjcHV9ID0gKDEwMCAqICRzdGF0 cy0+e21heGNwdX0pIC0gJHN0YXRzLT57dG90YWxjcHV9Ow0KKyAgICAgICAgJHN0YXRzLT57ZnJl ZW1lbX0gPSAkc3RhdHMtPnttYXhtZW19IC0gJHN0YXRzLT57bWVtfTsNCisgICAgICAgICRvbmxp bmVfbm9kZV9zdGF0cy0+eyRub2RlfS0+e3N0YXRzfSA9ICRzdGF0czsNCisgICAgfQ0KKw0KKyAg ICAkc2VsZi0+e29ubGluZV9ub2RlX3N0YXRzfSA9ICRvbmxpbmVfbm9kZV9zdGF0czsNCit9DQor DQogMTsNCmRpZmYgLS1naXQgYS9zcmMvUFZFL0hBL1NpbS9UZXN0RW52LnBtIGIvc3JjL1BWRS9I QS9TaW0vVGVzdEVudi5wbQ0KaW5kZXggNjcxOGQ4Yy4uMDhmMjdjNyAxMDA2NDQNCi0tLSBhL3Ny Yy9QVkUvSEEvU2ltL1Rlc3RFbnYucG0NCisrKyBiL3NyYy9QVkUvSEEvU2ltL1Rlc3RFbnYucG0N CkBAIC0xMTgsNCArMTE4LDMxIEBAIHN1YiBnZXRfbWF4X3dvcmtlcnMgew0KICAgICByZXR1cm4g MDsNCiB9DQoNCitzdWIgZ2V0X25vZGVfcnJkX3N0YXRzIHsNCisgICAgbXkgKCRzZWxmLCAkbm9k ZSkgPSBAXzsNCisNCg0KSXQgZ2V0cyBhZGRlZCBpbiB0aGUgbmV4dCBwYXRjaCwgYnV0IChlbHNl KSBpdCdkIGRlZi4gbmVlZCBhICNGSVhNRSBjb21tZW50IF5eDQoNClRoYXQgbWFrZXMgbWUgdGhp bms6IEZvciBhIHBhdGNoL2NvbW1pdCBzZXBhdGF0aW9uIHBlcnNwZWN0aXZlIGl0IGNvdWxkIGJl IG5pY2UNCnRvIHNwbGl0IHRoaXMgb25lIGludG8gdHdvLA0KDQoxLiBhZGQgdXNhZ2UgYWNjb3Vu dGluZyBmb3IgdGhlIHNwZWNpZmljIHJlY292ZXJ5IGNhc2UNCjIuIHVzZSB0aGF0IHRvIGFjdHVh bGx5IGZpbmQgYSBsb3coZXIpLWxvYWRlZCBub2RlIG9uIHJlY292ZXJ5Lg0KDQorICAgIG15ICRz dGF0cyA9IHt9Ow0KKyAgICAkc3RhdHMtPntjcHV9ID0gMDsNCisgICAgJHN0YXRzLT57bWF4Y3B1 fSA9IDA7DQorICAgICRzdGF0cy0+e21lbX0gPSAwOw0KKyAgICAkc3RhdHMtPnttYXhtZW19ID0g MDsNCisNCisgICAgcmV0dXJuICRzdGF0czsNCit9DQorDQorc3ViIGdldF92bV9ycmRfc3RhdHMg ew0KKyAgICBteSAoJHNlbGYsICR2bWlkLCAkcGVyY2VudGlsZSkgPSBAXzsNCisNCisgICAgbXkg JHN0YXRzID0ge307DQorPiArICAgICRzdGF0cy0+e2NwdX0gPSAwOw0KKyAgICAkc3RhdHMtPntt ZW19ID0gMDsNCisgICAgJHN0YXRzLT57bWF4bWVtfSA9IDA7DQorICAgICRzdGF0cy0+e21heGNw dX0gPSAwOw0KKyAgICAkc3RhdHMtPntjcHV9ID0gJHN0YXRzLT57Y3B1fSAqIDEwMDsNCisgICAg JHN0YXRzLT57dG90YWxjcHV9ID0gJHN0YXRzLT57Y3B1fSAqICRzdGF0cy0+e21heGNwdX07DQor DQorICAgIHJldHVybiAkc3RhdHM7DQorfQ0KKw0KIDE7DQoNCg0KDQpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KcHZlLWRldmVsIG1haWxpbmcgbGlzdA0K cHZlLWRldmVsQGxpc3RzLnByb3htb3guY29tPG1haWx0bzpwdmUtZGV2ZWxAbGlzdHMucHJveG1v eC5jb20+DQpodHRwczovL2FudGlwaGlzaGluZy5jZXRzaS5mci9wcm94eS92Mz9pPVprOTJWRUZL YUdRNFVtczRjblpFVVdNVHBmSGFYRlFHUncxX0NuT29PSDAmcj1iSEExZEdWM05XSlFWVWxvYVdO RlVaUG0wZmlpQnZpYWl5X1JEYXYyR1ExVTR1eTZsc0REdjN1QnN6cHZ2V1lRTjVGcUtxRkQ2V1BZ dXBmQVVQMWM5ZyZmPVNsaERiRTl1UzJsYVMySmFaRnBOV3Ztc3hhaTF6bEpQOWxsZ25sNUhJdi00 akFqaThEaDJCUWF3enhJRDVienI2VXYtM0VRZC1lbHVRYnNQZmNVT1RnJnU9aHR0cHMlM0EvL2xp c3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9wdmUtZGV2ZWwmaz1YUktV DQoNCg0K