Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oXkFH-0002lW-Ke for pgsql-hackers@arkaria.postgresql.org; Mon, 12 Sep 2022 14:17:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oXkFG-0008N3-GJ for pgsql-hackers@arkaria.postgresql.org; Mon, 12 Sep 2022 14:17:06 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oXkFF-0008Mu-IV for pgsql-hackers@lists.postgresql.org; Mon, 12 Sep 2022 14:17:06 +0000 Received: from mail-db8eur05on2112.outbound.protection.outlook.com ([40.107.20.112] helo=EUR05-DB8-obe.outbound.protection.outlook.com) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oXkFC-00017j-FB for pgsql-hackers@postgresql.org; Mon, 12 Sep 2022 14:17:04 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LEYClZCzifn4sxLHDyNTFLoXJ1msgahJIVU+ZogUUFgcdhGQZpGjrddyAhvQ80RZjc5R86H8xSEhRPhsmo62D8Yb9yPNBtnZBghFRz67iP4WMja8U7XC6eL+sWkx6BUmdomwIpLVMkT/yCkez514faLB2xLg7IvoSlqtWrha7WFbJ9SM4I0WMsChFJvPzBNJFdpQ3nrUDjoNEKYlrAkyflP5g63VsRYUNxvHgpo5IHS6pQzRaG2fAR1v+yQ3c0I+ifjoH9s0Ol0Ht7ygf7uGMe6/HyU1rHqlfoHWpp5S/lC3cgof0ol6LRaKWbprTkYa7J2QIJyHT4obd4+A0L25hg== 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=6Xp9mXQ4vLIqNI9dJTj3XGrov+eq8KNifxJkaS/KXKg=; b=lUKWy1oAMHW8xLn5KaDRJMZ/2shEDzKbCdUd5LLVurwLtpplO2Z5WKPd13mj+fdfg8phQStBtcx3YIgxr/mNctvsk2jySOcQPiITTJ1r1WBngObpS5auIPWiba29mCDVL7DZW+HwwWJGSO70yGT0TXlqA2Zyo2qU0ljOH0Npilpnv+ETWRkomYPADUcwly9exCTGzZGpHQiImkYZ1IY6jmp9ZKUe/M7UaknQVzAnIE/Wf5GjidqTV+Kfw3PP58dj5DjQzkI5JQ4pXR/rO6JdcncZSyfXggzetHonggfvtu6h7t6f7u5BHeWf8xykanedb4aw6/OC+OPv0f5GIvo4Yg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6Xp9mXQ4vLIqNI9dJTj3XGrov+eq8KNifxJkaS/KXKg=; b=fslbrB/43orKTWx6M6F3XHD2zotBhYYQcw2TMwIzCjBebnPuvMLWyQl8NA3kRfCT6UZeZpZ6jbRlSnUad+rAZ3kh+x74Itnw9/trcFW93MfKQedC4SQCzTFCvctJt8niDRKpww91dJ9ReBCSooJn/paX12c3CHs2K4Iaox+ZFW8= Received: from DBBPR83MB0507.EURPRD83.prod.outlook.com (2603:10a6:10:209::18) by AM7PR83MB0419.EURPRD83.prod.outlook.com (2603:10a6:20b:1b7::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.3; Mon, 12 Sep 2022 14:16:56 +0000 Received: from DBBPR83MB0507.EURPRD83.prod.outlook.com ([fe80::212f:bf8e:c2e:4db8]) by DBBPR83MB0507.EURPRD83.prod.outlook.com ([fe80::212f:bf8e:c2e:4db8%8]) with mapi id 15.20.5632.007; Mon, 12 Sep 2022 14:16:56 +0000 From: Jelte Fennema To: Michael Banck CC: Aleksander Alekseev , "pgsql-hackers@postgresql.org" Subject: Re: [EXTERNAL] Re: Support load balancing in libpq Thread-Topic: [EXTERNAL] Re: Support load balancing in libpq Thread-Index: AQHYhg1Hjv1NBCUG70CFyJcBtaIan63ZsIqAgAKgCz0= Date: Mon, 12 Sep 2022 14:16:56 +0000 Message-ID: References: <631d04f0.7b0a0220.1140d.9a91@mx.google.com> In-Reply-To: <631d04f0.7b0a0220.1140d.9a91@mx.google.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Enabled=True;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SiteId=72f988bf-86f1-41af-91ab-2d7cd011db47;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SetDate=2022-09-12T14:16:55.640Z;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Name=General;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ContentBits=0;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Method=Standard; authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DBBPR83MB0507:EE_|AM7PR83MB0419:EE_ x-ms-office365-filtering-correlation-id: 83cb5142-faa6-4262-5982-08da94c972e4 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 5tXLpY47KGuCqp04gMSf2opbZrObhPRCgBxfUo1QOfX95YD/1MVpHC53BGA9h1caJp1/215woCpPNzKENHY/hZ5DSpt2u121ZLAmkMyCQdjBo/vzDFg7G4tjrzAHL2A8NTHC2hL+0e4uVIE4ybbUmvgVHmjyMU9WaWRDUH+IzFQqfESw5aSmOmd8DRlpN3KkYx9DCSo4ctnIRSGgIiSHNsi5m4X+uXMKbpxtUm67AzeBSXuV3ALnsaQEMtLVLLf7gGTGphDZJk++mmSd/nlVBrRIsTzmqiZ0OSIqX+PDLJpQrkvnKWO+fiysyR6pbM5clSX1Y2Jsn12LsgnCdxIeQwpl216MmtX7B98lO6hjYj7NSoiXV/nNntT2cgNEU03LRzs+4KgGGkFXBQ5lpijv8ZMvxoxZ1VGT0nvKAA5hpOzLuxjOmkUn5ZsyEWHh8TJTlSjvpCXf3CgJftKyPoz+SlmsOP9Nj38DV9GIKrsMoUQDPJZyp04SskxzbPiFVQZVNqptA1ympMusjRHZgcZY1fAnN5FS7sNAd0TSG6/OwlSFriHVnCycHVraZfGBppeHMUpFt/I4Le2iio4LvpQYztI1RD6vqQJmERZfcRAoDZL7+XeROPmSUsGbS4EZ2dkiM+hUMaDOgk4/PHgDyQKrj0uX4zl+9Kt0CKs47VMIc2vytwRJ7qFnIEbOgkKPNrv1d1z9YSvsJKjn9G407K8uq2l0HE7pRAxKpGhJkvbdtounB6ZRwO3JdZlNXIM5aStHI58OeW9zw0haktCth3dbbKWwY7r4CGCBpGdv8FstCaZVRtCTUAHTFTFjCE7GGbm+ x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR83MB0507.EURPRD83.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(136003)(366004)(376002)(346002)(396003)(39860400002)(451199009)(82950400001)(122000001)(38100700002)(66446008)(66476007)(64756008)(8676002)(66946007)(66556008)(76116006)(91956017)(4326008)(316002)(33656002)(38070700005)(86362001)(99936003)(82960400001)(9686003)(26005)(7696005)(71200400001)(83380400001)(6506007)(478600001)(41300700001)(6916009)(10290500003)(54906003)(186003)(8990500004)(55016003)(2906002)(52536014)(8936002)(5660300002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?ehNERxYgWYJsJvZI4E5Cfo8cC8s6nQInQUPKb2VG3qMgEKDxEpQiOvyPVS?= =?iso-8859-1?Q?dY+rj/kV5R1+/GYTdF+WG6mnrqLI5WZCDPBCZeADWi6OcWEaEu+vtjRIHY?= =?iso-8859-1?Q?2IMGyjgJJxuQhV9nl6pI6ZyZW4BYIZevk6CBEIBDUeX1gmdOCBbGf5F9H/?= =?iso-8859-1?Q?IZepdhnyJb/d1egt2FUK9yHfLS0MdxhSmCpPXtQiAhTB4CRN6OStwQrBAH?= =?iso-8859-1?Q?9VumRN0mnenfmLd9zOTt9Gh2lG+q9wW0luyhABT3+Nfm4/fO+zhbRG/UOi?= =?iso-8859-1?Q?TZr+xPbgwhnQ7xoGH7zbxRdFZ+q403y+4XTyitpdD2cZJ/xS2WtKXe0BjQ?= =?iso-8859-1?Q?pDpj6gAzXDtK1rec0TKacFUV7VVBYP2h5eoNvXxto59b01Pvceflu0vP9D?= =?iso-8859-1?Q?/tMAjm7TlvnREUb3+XlmXucmhdiQrD2xFAUp8jlU3K1gS1q8w+huslB99l?= =?iso-8859-1?Q?8241R60EciGq998jdVprsUDjuVaKEOEt9M6jRDvtR+ysU/bkoyfglE/zId?= =?iso-8859-1?Q?69uLJhDFFjpF4Jh/ggKxkfEnUgeLJocDGaYMmbby2OQwg5beCcTv34wOL8?= =?iso-8859-1?Q?WWXwPRgUEXEqyyn92+jBq8mnF0MKq767omPp5MMiPDokecBbCTDQN1+A9B?= =?iso-8859-1?Q?CkrkiLe4K92knAoJLWYw0NI3TCkvutuSrG8TGOWLl5gWyNmf8f1lVmVyeo?= =?iso-8859-1?Q?kuCML4O4pIzRMti16m6dPq6DxweSIXMhrTF0KCD6EemoPJtWu4KYRRx2R+?= =?iso-8859-1?Q?UsrSyD7j/zf7e5j+5e1AFND3K26hiSQutaZRqUs4dyzlWuuivATdKiJOVm?= =?iso-8859-1?Q?aQMLYwynNkz6E5GAY+SG4iVhTK73LAZjhSJMTb/h7Z7oyGo1cIyZdRL0U+?= =?iso-8859-1?Q?Ouyxc04B8HHaaEw2FGjWOQYL6MD6BHb/Iqu2NA0D35xGuFgxY4ruRe09Yg?= =?iso-8859-1?Q?7xzxzIRP6ey3SK59lhRHSrV/MunrsSoeG1l5n1rK9HYzyuKUFOE1dcll9B?= =?iso-8859-1?Q?WazvEEkLq/4JVz2xh5jvfqo2gO3E1Zokta8kyumzhh+mXjya0s4JvEgZ3y?= =?iso-8859-1?Q?TVGh6r4ei6ytmOirgjfjsXjhcxJ9fPcyxQcVqGHTERdqUZkdQOvvNBDYsP?= =?iso-8859-1?Q?pw4wKiKS1EGZ7830jUmhfxeorfJArAbdsnghSGgI/V7Q4tXxQmja8Z95g5?= =?iso-8859-1?Q?4pxvzFsHRpZohudvg+2JcI2n5kIyfOcQ4KtgcJ17mECYipIibKY1/J/Yau?= =?iso-8859-1?Q?gn5UxddfGQyYMvZM/jCNOB6iwhfEstHQHzyH8iRw19uEledGlJys5jt/8o?= =?iso-8859-1?Q?EqwXR9UZP/hICIZV+ZhHlE4HS6IOcJXqE9mqdV1SDi+1Y2VuW5+h0geG7g?= =?iso-8859-1?Q?202Nu27PWipq0Zi/TX4sc6Mvt079sk5kWq4h5bLBUqlAJzqb7EFS/0+13t?= =?iso-8859-1?Q?KrZXlNFj+vazoHUWKH0ezNvIM+DLFwYQoBAtK12NUglUod64reb3sQZZhA?= =?iso-8859-1?Q?6quActplf7ZZ6Sk4aiHV9DEROaAHmBxplD+y8VgINoG5kG36udjR28fZio?= =?iso-8859-1?Q?z2YnagzCXqb+8vPxz8gHIPAY46OhE55XthxgqN9wS3jq6U/Hd8f5GKz0GX?= =?iso-8859-1?Q?6ufo/ZZKdT+xB6hCDe04/h3+i6ItGED7ML?= Content-Type: multipart/mixed; boundary="_002_DBBPR83MB05074E85346C3041109E2353F7449DBBPR83MB0507EURP_" MIME-Version: 1.0 X-OriginatorOrg: microsoft.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR83MB0419 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_DBBPR83MB05074E85346C3041109E2353F7449DBBPR83MB0507EURP_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Attached is an updated patch with the following changes:=0A= 1. rebased (including solved merge conflict)=0A= 2. fixed failing tests in CI=0A= 3. changed the commit message a little bit=0A= 4. addressed the two remarks from Micheal=0A= 5. changed the prng_state from a global to a connection level value for thr= ead-safety=0A= 6. use pg_prng_uint64_range=0A= =0A= > Maybe my imagination is not so great, but what else than hosts could we= =0A= > possibly load-balance? I don't mind calling it load_balance, but I also= =0A= > don't feel very strongly one way or the other and this is clearly=0A= > bikeshed territory.=0A= =0A= I agree, which is why I called it load_balance in my original patch. But I = also=0A= think it's useful to match the naming for the already existing implementati= ons =0A= in the PG ecosystem around this. But like you I don't really feel strongly = either=0A= way. It's a tradeoff between short name and consistency in the ecosystem.= =0A= =0A= > If I understand correctly, you've added DNS-based load balancing on top= =0A= > of just shuffling the provided hostnames.=A0 This makes sense if a=0A= > hostname is backed by more than one IP address in the context of load=0A= > balancing, but it also complicates the patch. So I'm wondering how much= =0A= > shorter the patch would be if you leave that out for now?=0A= =0A= Yes, that's correct and indeed the patch would be simpler without, i.e. all= the=0A= addrinfo changes would become unnecessary. But IMHO the behaviour of =0A= the added option would be very unexpected if it didn't load balance across= =0A= multiple IPs in a DNS record. libpq currently makes no real distinction in = =0A= handling of provided hosts and handling of their resolved IPs. If load bala= ncing=0A= would only apply to the host list that would start making a distinction=0A= between the two.=0A= =0A= Apart from that the load balancing across IPs is one of the main reasons=0A= for my interest in this patch. The reason is that it allows expanding or re= ducing=0A= the number of nodes that are being load balanced across transparently to th= e=0A= application. Which means that there's no need to re-deploy applications wit= h =0A= new connection strings when changing the number hosts.=0A= =0A= > On the other hand, I believe pgJDBC keeps track of which hosts are up or= =0A= > down and only load balances among the ones which are up (maybe=0A= > rechecking after a timeout? I don't remember), is this something you're= =0A= > doing, or did you consider it?=0A= =0A= I don't think it's possible to do this in libpq without huge changes to its= =0A= architecture, since normally a connection will only a PGconn will only=0A= create a single connection. The reason pgJDBC can do this is because=0A= it's actually a connection pooler, so it will open more than one connection= =0A= and can thus keep some global state about the different hosts.=0A= =0A= Jelte= --_002_DBBPR83MB05074E85346C3041109E2353F7449DBBPR83MB0507EURP_ Content-Type: application/octet-stream; name="0001-Support-load-balancing-in-libpq.patch" Content-Description: 0001-Support-load-balancing-in-libpq.patch Content-Disposition: attachment; filename="0001-Support-load-balancing-in-libpq.patch"; size=19832; creation-date="Mon, 12 Sep 2022 14:15:33 GMT"; modification-date="Mon, 12 Sep 2022 14:15:33 GMT" Content-Transfer-Encoding: base64 RnJvbSBkYjhlZTQzYWJkNzQ2Mzg1ODQyMmFmMTdlMGZhZDJjYTY5MzkzODdkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hIDxnaXRodWItdGVjaEBqZWx0ZWYubmw+ CkRhdGU6IE1vbiwgMTIgU2VwIDIwMjIgMDk6NDQ6MDYgKzAyMDAKU3ViamVjdDogW1BBVENIXSBT dXBwb3J0IGxvYWQgYmFsYW5jaW5nIGluIGxpYnBxCgpMb2FkIGJhbGFuY2luZyBjb25uZWN0aW9u cyBhY3Jvc3MgbXVsdGlwbGUgcmVhZCByZXBsaWNhcyBpcyBhIHByZXR0eQpjb21tb24gd2F5IG9m IHNjYWxpbmcgb3V0IHJlYWQgcXVlcmllcy4gVGhlcmUgYXJlIHR3byBtYWluIHdheXMgb2YgZG9p bmcKc28sIGJvdGggd2l0aCB0aGVpciBvd24gYWR2YW50YWdlcyBhbmQgZGlzYWR2YW50YWdlczoK MS4gTG9hZCBiYWxhbmNpbmcgYXQgdGhlIGNsaWVudCBsZXZlbAoyLiBMb2FkIGJhbGFuY2luZyBi eSBjb25uZWN0aW5nIHRvIGFuIGludGVybWVkaWFyeSBsb2FkIGJhbGFuY2VyCgpCb3RoIEpCREMg KEphdmEpIGFuZCBOcGdzcWwgKEMjKSBhbHJlYWR5IHN1cHBvcnQgY2xpZW50IGxldmVsIGxvYWQK YmFsYW5jaW5nIChvcHRpb24gIzEpLiBUaGlzIHBhdGNoIGltcGxlbWVudHMgY2xpZW50IGxldmVs IGxvYWQgYmFsYW5jaW5nCmZvciBsaWJwcSBhcyB3ZWxsLiBUbyBzdGF5IGNvbnNpc3RlbnQgd2l0 aCB0aGUgSkRCQyBhbmQgTnBnc3FsIHBhcnQgb2YKdGhlICBlY29zeXN0ZW0sIGEgc2ltaWxhciBp bXBsZW1lbnRhdGlvbiBhbmQgbmFtZSBmb3IgdGhlIG9wdGlvbiBhcmUKdXNlZC4gSXQgY29udGFp bnMgdHdvIGxldmVscyBvZiBsb2FkIGJhbGFuY2luZzoKMS4gVGhlIGdpdmVuIGhvc3RzIGFyZSBy YW5kb21seSBzaHVmZmxlZCwgYmVmb3JlIHJlc29sdmluZyB0aGVtCiAgICBvbmUtYnktb25lLgoy LiBPbmNlIGEgaG9zdCBpdHMgYWRkcmVzc2VzIGdldCByZXNvbHZlZCwgdGhvc2UgYWRkcmVzc2Vz IGFyZSBzaHVmZmxlZCwKICAgIGJlZm9yZSB0cnlpbmcgdG8gY29ubmVjdCB0byB0aGVtIG9uZS1i eS1vbmUuCi0tLQogLi4uL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0ICAg IHwgICAyICstCiBkb2Mvc3JjL3NnbWwvbGlicHEuc2dtbCAgICAgICAgICAgICAgICAgICAgICAg fCAgMTcgKysKIHNyYy9pbmNsdWRlL2xpYnBxL3BxY29tbS5oICAgICAgICAgICAgICAgICAgICB8 ICAgNiArCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMgICAgICAgICAgICAgfCAy MDggKysrKysrKysrKysrKysrLS0tCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaCAg ICAgICAgICAgICAgfCAgMTEgKy0KIDUgZmlsZXMgY2hhbmdlZCwgMjEwIGluc2VydGlvbnMoKyks IDM0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVj dGVkL3Bvc3RncmVzX2Zkdy5vdXQgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0 Z3Jlc19mZHcub3V0CmluZGV4IDdiZjM1NjAyYjAuLjAwY2M5NGQwOGUgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKKysrIGIvY29udHJp Yi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dApAQCAtOTYyNyw3ICs5NjI3 LDcgQEAgRE8gJGQkCiAgICAgRU5EOwogJGQkOwogRVJST1I6ICBpbnZhbGlkIG9wdGlvbiAicGFz c3dvcmQiCi1ISU5UOiAgVmFsaWQgb3B0aW9ucyBpbiB0aGlzIGNvbnRleHQgYXJlOiBzZXJ2aWNl LCBwYXNzZmlsZSwgY2hhbm5lbF9iaW5kaW5nLCBjb25uZWN0X3RpbWVvdXQsIGRibmFtZSwgaG9z dCwgaG9zdGFkZHIsIHBvcnQsIG9wdGlvbnMsIGFwcGxpY2F0aW9uX25hbWUsIGtlZXBhbGl2ZXMs IGtlZXBhbGl2ZXNfaWRsZSwga2VlcGFsaXZlc19pbnRlcnZhbCwga2VlcGFsaXZlc19jb3VudCwg dGNwX3VzZXJfdGltZW91dCwgc3NsbW9kZSwgc3NsY29tcHJlc3Npb24sIHNzbGNlcnQsIHNzbGtl eSwgc3Nscm9vdGNlcnQsIHNzbGNybCwgc3NsY3JsZGlyLCBzc2xzbmksIHJlcXVpcmVwZWVyLCBz c2xfbWluX3Byb3RvY29sX3ZlcnNpb24sIHNzbF9tYXhfcHJvdG9jb2xfdmVyc2lvbiwgZ3NzZW5j bW9kZSwga3Jic3J2bmFtZSwgZ3NzbGliLCB0YXJnZXRfc2Vzc2lvbl9hdHRycywgdXNlX3JlbW90 ZV9lc3RpbWF0ZSwgZmR3X3N0YXJ0dXBfY29zdCwgZmR3X3R1cGxlX2Nvc3QsIGV4dGVuc2lvbnMs IHVwZGF0YWJsZSwgdHJ1bmNhdGFibGUsIGZldGNoX3NpemUsIGJhdGNoX3NpemUsIGFzeW5jX2Nh cGFibGUsIHBhcmFsbGVsX2NvbW1pdCwga2VlcF9jb25uZWN0aW9ucworSElOVDogIFZhbGlkIG9w dGlvbnMgaW4gdGhpcyBjb250ZXh0IGFyZTogc2VydmljZSwgcGFzc2ZpbGUsIGNoYW5uZWxfYmlu ZGluZywgY29ubmVjdF90aW1lb3V0LCBkYm5hbWUsIGhvc3QsIGhvc3RhZGRyLCBwb3J0LCBvcHRp b25zLCBhcHBsaWNhdGlvbl9uYW1lLCBsb2FkX2JhbGFuY2VfaG9zdHMsIGtlZXBhbGl2ZXMsIGtl ZXBhbGl2ZXNfaWRsZSwga2VlcGFsaXZlc19pbnRlcnZhbCwga2VlcGFsaXZlc19jb3VudCwgdGNw X3VzZXJfdGltZW91dCwgc3NsbW9kZSwgc3NsY29tcHJlc3Npb24sIHNzbGNlcnQsIHNzbGtleSwg c3Nscm9vdGNlcnQsIHNzbGNybCwgc3NsY3JsZGlyLCBzc2xzbmksIHJlcXVpcmVwZWVyLCBzc2xf bWluX3Byb3RvY29sX3ZlcnNpb24sIHNzbF9tYXhfcHJvdG9jb2xfdmVyc2lvbiwgZ3NzZW5jbW9k ZSwga3Jic3J2bmFtZSwgZ3NzbGliLCB0YXJnZXRfc2Vzc2lvbl9hdHRycywgdXNlX3JlbW90ZV9l c3RpbWF0ZSwgZmR3X3N0YXJ0dXBfY29zdCwgZmR3X3R1cGxlX2Nvc3QsIGV4dGVuc2lvbnMsIHVw ZGF0YWJsZSwgdHJ1bmNhdGFibGUsIGZldGNoX3NpemUsIGJhdGNoX3NpemUsIGFzeW5jX2NhcGFi bGUsIHBhcmFsbGVsX2NvbW1pdCwga2VlcF9jb25uZWN0aW9ucwogQ09OVEVYVDogIFNRTCBzdGF0 ZW1lbnQgIkFMVEVSIFNFUlZFUiBsb29wYmFja19ub3B3IE9QVElPTlMgKEFERCBwYXNzd29yZCAn ZHVtbXlwdycpIgogUEwvcGdTUUwgZnVuY3Rpb24gaW5saW5lX2NvZGVfYmxvY2sgbGluZSAzIGF0 IEVYRUNVVEUKIC0tIElmIHdlIGFkZCBhIHBhc3N3b3JkIGZvciBvdXIgdXNlciBtYXBwaW5nIGlu c3RlYWQsIHdlIHNob3VsZCBnZXQgYSBkaWZmZXJlbnQKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9saWJwcS5zZ21sIGIvZG9jL3NyYy9zZ21sL2xpYnBxLnNnbWwKaW5kZXggOGExYTllOTkzMi4u MjZiM2YwYzM2ZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2xpYnBxLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL2xpYnBxLnNnbWwKQEAgLTEzMTYsNiArMTMxNiwyMyBAQCBwb3N0Z3Jlc3FsOi8v JTJGdmFyJTJGbGliJTJGcG9zdGdyZXNxbC9kYm5hbWUKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAg IDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImxpYnBxLWxvYWQtYmFs YW5jZS1ob3N0cyIgeHJlZmxhYmVsPSJsb2FkX2JhbGFuY2VfaG9zdHMiPgorICAgICAgPHRlcm0+ PGxpdGVyYWw+bG9hZF9iYWxhbmNlX2hvc3RzPC9saXRlcmFsPjwvdGVybT4KKyAgICAgIDxsaXN0 aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgQ29udHJvbHMgd2hldGhlciB0aGUgY2xpZW50 IGxvYWQgYmFsYW5jZXMgY29ubmVjdGlvbnMgYWNyb3NzIGhvc3RzIGFuZAorICAgICAgICBhZHJl c3Nlcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMCwgbWVhbmluZyBvZmYsIHRoaXMgbWVhbnMgdGhh dCBob3N0cyBhcmUKKyAgICAgICAgdHJpZWQgaW4gb3JkZXIgdGhleSBhcmUgcHJvdmlkZWQgYW5k IGFkZHJlc3NlcyBhcmUgdHJpZWQgaW4gdGhlIG9yZGVyCisgICAgICAgIHRoZXkgYXJlIHJlY2Vp dmVkIGZyb20gRE5TIG9yIGEgaG9zdHMgZmlsZS4gSWYgdGhpcyB2YWx1ZSBpcyBzZXQgdG8gMSwK KyAgICAgICAgbWVhbmluZyBvbiwgdGhlIGhvc3RzIGFuZCBhZGRyZXNzIHRoYXQgYXJlIHRyaWVk IGluIHJhbmRvbSBvcmRlci4KKyAgICAgICAgU3Vic2VxdWVudCBxdWVyaWVzIG9uY2UgY29ubmVj dGVkIHdpbGwgc3RpbGwgYmUgc2VudCB0byB0aGUgc2FtZSBzZXJ2ZXIuCisgICAgICAgIFNldHRp bmcgdGhpcyB0byAxLCBpcyBtb3N0bHkgdXNlZnVsIHdoZW4gb3BlbmluZyBtdWx0aXBsZSBjb25u ZWN0aW9ucyBhdAorICAgICAgICB0aGUgc2FtZSB0aW1lLCBwb3NzaWJseSBmcm9tIGRpZmZlcmVu dCBtYWNoaW5lcy4gVGhpcyB3YXkgY29ubmVjdGlvbnMKKyAgICAgICAgY2FuIGJlIGxvYWQgYmFs YW5jZWQgYWNyb3NzIG11bHRpcGxlIFBvc3RncmVzIHNlcnZlcnMuCisgICAgICAgPC9wYXJhPgor ICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3Rl bnRyeSBpZD0ibGlicHEta2VlcGFsaXZlcyIgeHJlZmxhYmVsPSJrZWVwYWxpdmVzIj4KICAgICAg IDx0ZXJtPjxsaXRlcmFsPmtlZXBhbGl2ZXM8L2xpdGVyYWw+PC90ZXJtPgogICAgICAgPGxpc3Rp dGVtPgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvcHFjb21tLmggYi9zcmMvaW5jbHVk ZS9saWJwcS9wcWNvbW0uaAppbmRleCBmY2Y2OGRmMzliLi4zOWU5M2IxMzkyIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9saWJwcS9wcWNvbW0uaAorKysgYi9zcmMvaW5jbHVkZS9saWJwcS9wcWNv bW0uaApAQCAtMjcsNiArMjcsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlzb2NrbGVuX3QJc2FsZW47 CiB9IFNvY2tBZGRyOwogCit0eXBlZGVmIHN0cnVjdAoreworCWludAkJCWZhbWlseTsKKwlTb2Nr QWRkcglhZGRyOworfQkJCUFkZHJJbmZvOworCiAvKiBDb25maWd1cmUgdGhlIFVOSVggc29ja2V0 IGxvY2F0aW9uIGZvciB0aGUgd2VsbCBrbm93biBwb3J0LiAqLwogCiAjZGVmaW5lIFVOSVhTT0NL X1BBVEgocGF0aCwgcG9ydCwgc29ja2RpcikgXApkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMv bGlicHEvZmUtY29ubmVjdC5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCmlu ZGV4IDkxN2IxOWUwZTkuLmQ0ZjlkNjE4MGMgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xp YnBxL2ZlLWNvbm5lY3QuYworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMK QEAgLTI0MSw2ICsyNDEsMTAgQEAgc3RhdGljIGNvbnN0IGludGVybmFsUFFjb25uaW5mb09wdGlv biBQUWNvbm5pbmZvT3B0aW9uc1tdID0gewogCQkiRmFsbGJhY2stQXBwbGljYXRpb24tTmFtZSIs ICIiLCA2NCwKIAlvZmZzZXRvZihzdHJ1Y3QgcGdfY29ubiwgZmJhcHBuYW1lKX0sCiAKKwl7Imxv YWRfYmFsYW5jZV9ob3N0cyIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJMb2FkLUJhbGFuY2UiLCAi IiwgMCwJLyogc2hvdWxkIGJlIGp1c3QgJzAnIG9yICcxJyAqLworCW9mZnNldG9mKHN0cnVjdCBw Z19jb25uLCBsb2FkYmFsYW5jZSl9LAorCiAJeyJrZWVwYWxpdmVzIiwgTlVMTCwgTlVMTCwgTlVM TCwKIAkJIlRDUC1LZWVwYWxpdmVzIiwgIiIsIDEsCS8qIHNob3VsZCBiZSBqdXN0ICcwJyBvciAn MScgKi8KIAlvZmZzZXRvZihzdHJ1Y3QgcGdfY29ubiwga2VlcGFsaXZlcyl9LApAQCAtMzc5LDYg KzM4Myw3IEBAIHN0YXRpYyBib29sIGZpbGxQR2Nvbm4oUEdjb25uICpjb25uLCBQUWNvbm5pbmZv T3B0aW9uICpjb25uT3B0aW9ucyk7CiBzdGF0aWMgdm9pZCBmcmVlUEdjb25uKFBHY29ubiAqY29u bik7CiBzdGF0aWMgdm9pZCBjbG9zZVBHY29ubihQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQg cmVsZWFzZV9jb25uX2FkZHJpbmZvKFBHY29ubiAqY29ubik7CitzdGF0aWMgYm9vbCBzdG9yZV9j b25uX2FkZHJpbmZvKFBHY29ubiAqY29ubiwgc3RydWN0IGFkZHJpbmZvICphZGRybGlzdCk7CiBz dGF0aWMgdm9pZCBzZW5kVGVybWluYXRlQ29ubihQR2Nvbm4gKmNvbm4pOwogc3RhdGljIFBRY29u bmluZm9PcHRpb24gKmNvbm5pbmZvX2luaXQoUFFFeHBCdWZmZXIgZXJyb3JNZXNzYWdlKTsKIHN0 YXRpYyBQUWNvbm5pbmZvT3B0aW9uICpwYXJzZV9jb25uZWN0aW9uX3N0cmluZyhjb25zdCBjaGFy ICpjb25uaW5mbywKQEAgLTQyNCw2ICs0MjksNyBAQCBzdGF0aWMgdm9pZCBwZ3Bhc3NmaWxlV2Fy bmluZyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZGVmYXVsdF90aHJlYWRsb2NrKGludCBh Y3F1aXJlKTsKIHN0YXRpYyBib29sIHNzbFZlcmlmeVByb3RvY29sVmVyc2lvbihjb25zdCBjaGFy ICp2ZXJzaW9uKTsKIHN0YXRpYyBib29sIHNzbFZlcmlmeVByb3RvY29sUmFuZ2UoY29uc3QgY2hh ciAqbWluLCBjb25zdCBjaGFyICptYXgpOworc3RhdGljIGludAlsb2FkQmFsYW5jZShQR2Nvbm4g KmNvbm4pOwogCiAKIC8qIGdsb2JhbCB2YXJpYWJsZSBiZWNhdXNlIGZlLWF1dGguYyBuZWVkcyB0 byBhY2Nlc3MgaXQgKi8KQEAgLTEwMDgsNiArMTAxNCwzNSBAQCBwYXJzZV9jb21tYV9zZXBhcmF0 ZWRfbGlzdChjaGFyICoqc3RhcnRwdHIsIGJvb2wgKm1vcmUpCiAJcmV0dXJuIHA7CiB9CiAKKy8q CisgKiBJbml0aWFsaXplcyB0aGUgcHJuZ19zdGF0ZSBmaWVsZCBvZiB0aGUgY29ubmVjdGlvbi4g V2Ugd2FudCBzb21ldGhpbmcKKyAqIHVucHJlZGljdGFibGUsIHNvIGlmIHBvc3NpYmxlLCB1c2Ug aGlnaC1xdWFsaXR5IHJhbmRvbSBiaXRzIGZvciB0aGUKKyAqIHNlZWQuIE90aGVyd2lzZSwgZmFs bCBiYWNrIHRvIGEgc2VlZCBiYXNlZCBvbiB0aW1lc3RhbXAgYW5kIFBJRC4KKyAqLworc3RhdGlj IHZvaWQKK2xpYnBxX3BybmdfaW5pdChQR2Nvbm4gKmNvbm4pCit7CisJaWYgKHVubGlrZWx5KCFw Z19wcm5nX3N0cm9uZ19zZWVkKCZjb25uLT5wcm5nX3N0YXRlKSkpCisJeworCQl1aW50NjQJCXJz ZWVkOworCQl0aW1lX3QJCW5vdyA9IHRpbWUoTlVMTCk7CisKKwkJLyoKKwkJICogU2luY2UgUElE cyBhbmQgdGltZXN0YW1wcyB0ZW5kIHRvIGNoYW5nZSBtb3JlIGZyZXF1ZW50bHkgaW4gdGhlaXIK KwkJICogbGVhc3Qgc2lnbmlmaWNhbnQgYml0cywgc2hpZnQgdGhlIHRpbWVzdGFtcCBsZWZ0IHRv IGFsbG93IGEgbGFyZ2VyCisJCSAqIHRvdGFsIG51bWJlciBvZiBzZWVkcyBpbiBhIGdpdmVuIHRp bWUgcGVyaW9kLiAgU2luY2UgdGhhdCB3b3VsZAorCQkgKiBsZWF2ZSBvbmx5IDIwIGJpdHMgb2Yg dGhlIHRpbWVzdGFtcCB0aGF0IGN5Y2xlIGV2ZXJ5IH4xIHNlY29uZCwKKwkJICogYWxzbyBtaXgg aW4gc29tZSBoaWdoZXIgYml0cy4KKwkJICovCisJCXJzZWVkID0gKCh1aW50NjQpIGdldHBpZCgp KSBeCisJCQkoKHVpbnQ2NCkgbm93IDw8IDEyKSBeCisJCQkoKHVpbnQ2NCkgbm93ID4+IDIwKTsK KworCQlwZ19wcm5nX3NlZWQoJmNvbm4tPnBybmdfc3RhdGUsIHJzZWVkKTsKKwl9Cit9CisKKwog LyoKICAqCQljb25uZWN0T3B0aW9uczIKICAqCkBAIC0xMDIwLDYgKzEwNTUsNyBAQCBzdGF0aWMg Ym9vbAogY29ubmVjdE9wdGlvbnMyKFBHY29ubiAqY29ubikKIHsKIAlpbnQJCQlpOworCWludAkJ CWxvYWRiYWxhbmNlaG9zdHMgPSBsb2FkQmFsYW5jZShjb25uKTsKIAogCS8qCiAJICogQWxsb2Nh dGUgbWVtb3J5IGZvciBkZXRhaWxzIGFib3V0IGVhY2ggaG9zdCB0byB3aGljaCB3ZSBtaWdodCBw b3NzaWJseQpAQCAtMTE2Nyw2ICsxMjAzLDMyIEBAIGNvbm5lY3RPcHRpb25zMihQR2Nvbm4gKmNv bm4pCiAJCX0KIAl9CiAKKwlpZiAobG9hZGJhbGFuY2Vob3N0cyA8IDApCisJeworCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkJCSBsaWJwcV9nZXR0ZXh0 KCJsb2FkYmFsYW5jZSBwYXJhbWV0ZXIgbXVzdCBiZSBhbiBpbnRlZ2VyXG4iKSk7CisJCXJldHVy biBmYWxzZTsKKwl9CisKKwlpZiAobG9hZGJhbGFuY2Vob3N0cykKKwl7CisJCS8qCisJCSAqIFNo dWZmbGUgY29ubmhvc3Qgd2l0aCBhIER1cnN0ZW5mZWxkL0tudXRoIHZlcnNpb24gb2YgdGhlCisJ CSAqIEZpc2hlci1ZYXRlcyBzaHVmZmxlLiBTb3VyY2U6CisJCSAqIGh0dHBzOi8vZW4ud2lraXBl ZGlhLm9yZy93aWtpL0Zpc2hlciVFMiU4MCU5M1lhdGVzX3NodWZmbGUjVGhlX21vZGVybl9hbGdv cml0aG0KKwkJICovCisJCWxpYnBxX3BybmdfaW5pdChjb25uKTsKKwkJZm9yIChpID0gY29ubi0+ bmNvbm5ob3N0IC0gMTsgaSA+IDA7IGktLSkKKwkJeworCQkJaW50CQkJaiA9IHBnX3BybmdfdWlu dDY0X3JhbmdlKCZjb25uLT5wcm5nX3N0YXRlLCAwLCBpKTsKKwkJCXBnX2Nvbm5faG9zdCB0ZW1w ID0gY29ubi0+Y29ubmhvc3Rbal07CisKKwkJCWNvbm4tPmNvbm5ob3N0W2pdID0gY29ubi0+Y29u bmhvc3RbaV07CisJCQljb25uLT5jb25uaG9zdFtpXSA9IHRlbXA7CisJCX0KKwl9CisKKwogCS8q CiAJICogSWYgdXNlciBuYW1lIHdhcyBub3QgZ2l2ZW4sIGZldGNoIGl0LiAgKE1vc3QgbGlrZWx5 LCB0aGUgZmV0Y2ggd2lsbAogCSAqIGZhaWwsIHNpbmNlIHRoZSBvbmx5IHdheSB3ZSBnZXQgaGVy ZSBpcyBpZiBwZ19mZV9nZXRhdXRobmFtZSgpIGZhaWxlZApAQCAtMTc0NSw2ICsxODA3LDI3IEBA IGNvbm5lY3RGYWlsdXJlTWVzc2FnZShQR2Nvbm4gKmNvbm4sIGludCBlcnJvcm5vKQogCQkJCQkJ CSBsaWJwcV9nZXR0ZXh0KCJcdElzIHRoZSBzZXJ2ZXIgcnVubmluZyBvbiB0aGF0IGhvc3QgYW5k IGFjY2VwdGluZyBUQ1AvSVAgY29ubmVjdGlvbnM/XG4iKSk7CiB9CiAKKy8qCisgKiBTaG91bGQg d2UgbG9hZCBiYWxhbmNlIGFjcm9zcyBob3N0cz8gUmV0dXJucyAxIGlmIHllcywgMCBpZiBubywg YW5kIC0xIGlmCisgKiBjb25uLT5sb2FkYmFsYW5jZSBpcyBzZXQgdG8gYSB2YWx1ZSB3aGljaCBp cyBub3QgcGFyc2VhYmxlIGFzIGFuIGludGVnZXIuCisgKi8KK3N0YXRpYyBpbnQKK2xvYWRCYWxh bmNlKFBHY29ubiAqY29ubikKK3sKKwljaGFyCSAgICplcDsKKwlpbnQJCQl2YWw7CisKKwlpZiAo Y29ubi0+bG9hZGJhbGFuY2UgPT0gTlVMTCkKKwl7CisJCXJldHVybiAwOworCX0KKwl2YWwgPSBz dHJ0b2woY29ubi0+bG9hZGJhbGFuY2UsICZlcCwgMTApOworCWlmICgqZXApCisJCXJldHVybiAt MTsKKwlyZXR1cm4gdmFsICE9IDAgPyAxIDogMDsKK30KKworCiAvKgogICogU2hvdWxkIHdlIHVz ZSBrZWVwYWxpdmVzPyAgUmV0dXJucyAxIGlmIHllcywgMCBpZiBubywgYW5kIC0xIGlmCiAgKiBj b25uLT5rZWVwYWxpdmVzIGlzIHNldCB0byBhIHZhbHVlIHdoaWNoIGlzIG5vdCBwYXJzZWFibGUg YXMgYW4KQEAgLTIxMDIsNyArMjE4NSw3IEBAIGNvbm5lY3REQkNvbXBsZXRlKFBHY29ubiAqY29u bikKIAl0aW1lX3QJCWZpbmlzaF90aW1lID0gKCh0aW1lX3QpIC0xKTsKIAlpbnQJCQl0aW1lb3V0 ID0gMDsKIAlpbnQJCQlsYXN0X3doaWNoaG9zdCA9IC0yOwkvKiBjZXJ0YWlubHkgZGlmZmVyZW50 IGZyb20gd2hpY2hob3N0ICovCi0Jc3RydWN0IGFkZHJpbmZvICpsYXN0X2FkZHJfY3VyID0gTlVM TDsKKwlpbnQJCQlsYXN0X3doaWNoYWRkciA9IC0yOwkvKiBjZXJ0YWlubHkgZGlmZmVyZW50IGZy b20gd2hpY2hhZGRyICovCiAKIAlpZiAoY29ubiA9PSBOVUxMIHx8IGNvbm4tPnN0YXR1cyA9PSBD T05ORUNUSU9OX0JBRCkKIAkJcmV0dXJuIDA7CkBAIC0yMTQ2LDExICsyMjI5LDExIEBAIGNvbm5l Y3REQkNvbXBsZXRlKFBHY29ubiAqY29ubikKIAkJaWYgKGZsYWcgIT0gUEdSRVNfUE9MTElOR19P SyAmJgogCQkJdGltZW91dCA+IDAgJiYKIAkJCShjb25uLT53aGljaGhvc3QgIT0gbGFzdF93aGlj aGhvc3QgfHwKLQkJCSBjb25uLT5hZGRyX2N1ciAhPSBsYXN0X2FkZHJfY3VyKSkKKwkJCSBjb25u LT53aGljaGFkZHIgIT0gbGFzdF93aGljaGFkZHIpKQogCQl7CiAJCQlmaW5pc2hfdGltZSA9IHRp bWUoTlVMTCkgKyB0aW1lb3V0OwogCQkJbGFzdF93aGljaGhvc3QgPSBjb25uLT53aGljaGhvc3Q7 Ci0JCQlsYXN0X2FkZHJfY3VyID0gY29ubi0+YWRkcl9jdXI7CisJCQlsYXN0X3doaWNoYWRkciA9 IGNvbm4tPndoaWNoYWRkcjsKIAkJfQogCiAJCS8qCkBAIC0yMjk4LDkgKzIzODEsOSBAQCBrZWVw X2dvaW5nOgkJCQkJCS8qIFdlIHdpbGwgY29tZSBiYWNrIHRvIGhlcmUgdW50aWwgdGhlcmUgaXMK IAkvKiBUaW1lIHRvIGFkdmFuY2UgdG8gbmV4dCBhZGRyZXNzLCBvciBuZXh0IGhvc3QgaWYgbm8g bW9yZSBhZGRyZXNzZXM/ICovCiAJaWYgKGNvbm4tPnRyeV9uZXh0X2FkZHIpCiAJewotCQlpZiAo Y29ubi0+YWRkcl9jdXIgJiYgY29ubi0+YWRkcl9jdXItPmFpX25leHQpCisJCWlmIChjb25uLT53 aGljaGFkZHIgPCBjb25uLT5uYWRkcikKIAkJewotCQkJY29ubi0+YWRkcl9jdXIgPSBjb25uLT5h ZGRyX2N1ci0+YWlfbmV4dDsKKwkJCWNvbm4tPndoaWNoYWRkcisrOwogCQkJcmVzZXRfY29ubmVj dGlvbl9zdGF0ZV9tYWNoaW5lID0gdHJ1ZTsKIAkJfQogCQllbHNlCkBAIC0yMzEzLDYgKzIzOTYs NyBAQCBrZWVwX2dvaW5nOgkJCQkJCS8qIFdlIHdpbGwgY29tZSBiYWNrIHRvIGhlcmUgdW50aWwg dGhlcmUgaXMKIAl7CiAJCXBnX2Nvbm5faG9zdCAqY2g7CiAJCXN0cnVjdCBhZGRyaW5mbyBoaW50 OworCQlzdHJ1Y3QgYWRkcmluZm8gKmFkZHJsaXN0OwogCQlpbnQJCQl0aGlzcG9ydDsKIAkJaW50 CQkJcmV0OwogCQljaGFyCQlwb3J0c3RyW01BWFBHUEFUSF07CkBAIC0yMzUzLDcgKzI0MzcsNyBA QCBrZWVwX2dvaW5nOgkJCQkJCS8qIFdlIHdpbGwgY29tZSBiYWNrIHRvIGhlcmUgdW50aWwgdGhl cmUgaXMKIAkJLyogSW5pdGlhbGl6ZSBoaW50IHN0cnVjdHVyZSAqLwogCQlNZW1TZXQoJmhpbnQs IDAsIHNpemVvZihoaW50KSk7CiAJCWhpbnQuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKLQkJ Y29ubi0+YWRkcmxpc3RfZmFtaWx5ID0gaGludC5haV9mYW1pbHkgPSBBRl9VTlNQRUM7CisJCWhp bnQuYWlfZmFtaWx5ID0gQUZfVU5TUEVDOwogCiAJCS8qIEZpZ3VyZSBvdXQgdGhlIHBvcnQgbnVt YmVyIHdlJ3JlIGdvaW5nIHRvIHVzZS4gKi8KIAkJaWYgKGNoLT5wb3J0ID09IE5VTEwgfHwgY2gt PnBvcnRbMF0gPT0gJ1wwJykKQEAgLTIzNzgsOCArMjQ2Miw4IEBAIGtlZXBfZ29pbmc6CQkJCQkJ LyogV2Ugd2lsbCBjb21lIGJhY2sgdG8gaGVyZSB1bnRpbCB0aGVyZSBpcwogCQl7CiAJCQljYXNl IENIVF9IT1NUX05BTUU6CiAJCQkJcmV0ID0gcGdfZ2V0YWRkcmluZm9fYWxsKGNoLT5ob3N0LCBw b3J0c3RyLCAmaGludCwKLQkJCQkJCQkJCQkgJmNvbm4tPmFkZHJsaXN0KTsKLQkJCQlpZiAocmV0 IHx8ICFjb25uLT5hZGRybGlzdCkKKwkJCQkJCQkJCQkgJmFkZHJsaXN0KTsKKwkJCQlpZiAocmV0 IHx8ICFhZGRybGlzdCkKIAkJCQl7CiAJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5lcnJv ck1lc3NhZ2UsCiAJCQkJCQkJCQkgIGxpYnBxX2dldHRleHQoImNvdWxkIG5vdCB0cmFuc2xhdGUg aG9zdCBuYW1lIFwiJXNcIiB0byBhZGRyZXNzOiAlc1xuIiksCkBAIC0yMzkxLDggKzI0NzUsOCBA QCBrZWVwX2dvaW5nOgkJCQkJCS8qIFdlIHdpbGwgY29tZSBiYWNrIHRvIGhlcmUgdW50aWwgdGhl cmUgaXMKIAkJCWNhc2UgQ0hUX0hPU1RfQUREUkVTUzoKIAkJCQloaW50LmFpX2ZsYWdzID0gQUlf TlVNRVJJQ0hPU1Q7CiAJCQkJcmV0ID0gcGdfZ2V0YWRkcmluZm9fYWxsKGNoLT5ob3N0YWRkciwg cG9ydHN0ciwgJmhpbnQsCi0JCQkJCQkJCQkJICZjb25uLT5hZGRybGlzdCk7Ci0JCQkJaWYgKHJl dCB8fCAhY29ubi0+YWRkcmxpc3QpCisJCQkJCQkJCQkJICZhZGRybGlzdCk7CisJCQkJaWYgKHJl dCB8fCAhYWRkcmxpc3QpCiAJCQkJewogCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJy b3JNZXNzYWdlLAogCQkJCQkJCQkJICBsaWJwcV9nZXR0ZXh0KCJjb3VsZCBub3QgcGFyc2UgbmV0 d29yayBhZGRyZXNzIFwiJXNcIjogJXNcbiIpLApAQCAtMjQwMiw3ICsyNDg2LDcgQEAga2VlcF9n b2luZzoJCQkJCQkvKiBXZSB3aWxsIGNvbWUgYmFjayB0byBoZXJlIHVudGlsIHRoZXJlIGlzCiAJ CQkJYnJlYWs7CiAKIAkJCWNhc2UgQ0hUX1VOSVhfU09DS0VUOgotCQkJCWNvbm4tPmFkZHJsaXN0 X2ZhbWlseSA9IGhpbnQuYWlfZmFtaWx5ID0gQUZfVU5JWDsKKwkJCQloaW50LmFpX2ZhbWlseSA9 IEFGX1VOSVg7CiAJCQkJVU5JWFNPQ0tfUEFUSChwb3J0c3RyLCB0aGlzcG9ydCwgY2gtPmhvc3Qp OwogCQkJCWlmIChzdHJsZW4ocG9ydHN0cikgPj0gVU5JWFNPQ0tfUEFUSF9CVUZMRU4pCiAJCQkJ ewpAQCAtMjQxOCw4ICsyNTAyLDggQEAga2VlcF9nb2luZzoJCQkJCQkvKiBXZSB3aWxsIGNvbWUg YmFjayB0byBoZXJlIHVudGlsIHRoZXJlIGlzCiAJCQkJICogbmFtZSBhcyBhIFVuaXgtZG9tYWlu IHNvY2tldCBwYXRoLgogCQkJCSAqLwogCQkJCXJldCA9IHBnX2dldGFkZHJpbmZvX2FsbChOVUxM LCBwb3J0c3RyLCAmaGludCwKLQkJCQkJCQkJCQkgJmNvbm4tPmFkZHJsaXN0KTsKLQkJCQlpZiAo cmV0IHx8ICFjb25uLT5hZGRybGlzdCkKKwkJCQkJCQkJCQkgJmFkZHJsaXN0KTsKKwkJCQlpZiAo cmV0IHx8ICFhZGRybGlzdCkKIAkJCQl7CiAJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5l cnJvck1lc3NhZ2UsCiAJCQkJCQkJCQkgIGxpYnBxX2dldHRleHQoImNvdWxkIG5vdCB0cmFuc2xh dGUgVW5peC1kb21haW4gc29ja2V0IHBhdGggXCIlc1wiIHRvIGFkZHJlc3M6ICVzXG4iKSwKQEAg LTI0MjksOCArMjUxMywxNSBAQCBrZWVwX2dvaW5nOgkJCQkJCS8qIFdlIHdpbGwgY29tZSBiYWNr IHRvIGhlcmUgdW50aWwgdGhlcmUgaXMKIAkJCQlicmVhazsKIAkJfQogCi0JCS8qIE9LLCBzY2Fu IHRoaXMgYWRkcmxpc3QgZm9yIGEgd29ya2luZyBzZXJ2ZXIgYWRkcmVzcyAqLwotCQljb25uLT5h ZGRyX2N1ciA9IGNvbm4tPmFkZHJsaXN0OworCQlpZiAoIXN0b3JlX2Nvbm5fYWRkcmluZm8oY29u biwgYWRkcmxpc3QpKQorCQl7CisJCQlwZ19mcmVlYWRkcmluZm9fYWxsKGhpbnQuYWlfZmFtaWx5 LCBhZGRybGlzdCk7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdl LAorCQkJCQkJCQkgbGlicHFfZ2V0dGV4dCgib3V0IG9mIG1lbW9yeVxuIikpOworCQkJZ290byBl cnJvcl9yZXR1cm47CisJCX0KKwkJcGdfZnJlZWFkZHJpbmZvX2FsbChoaW50LmFpX2ZhbWlseSwg YWRkcmxpc3QpOworCiAJCXJlc2V0X2Nvbm5lY3Rpb25fc3RhdGVfbWFjaGluZSA9IHRydWU7CiAJ CWNvbm4tPnRyeV9uZXh0X2hvc3QgPSBmYWxzZTsKIAl9CkBAIC0yNDg3LDMwICsyNTc4LDI5IEBA IGtlZXBfZ29pbmc6CQkJCQkJLyogV2Ugd2lsbCBjb21lIGJhY2sgdG8gaGVyZSB1bnRpbCB0aGVy ZSBpcwogCQkJewogCQkJCS8qCiAJCQkJICogVHJ5IHRvIGluaXRpYXRlIGEgY29ubmVjdGlvbiB0 byBvbmUgb2YgdGhlIGFkZHJlc3NlcwotCQkJCSAqIHJldHVybmVkIGJ5IHBnX2dldGFkZHJpbmZv X2FsbCgpLiAgY29ubi0+YWRkcl9jdXIgaXMgdGhlCisJCQkJICogcmV0dXJuZWQgYnkgcGdfZ2V0 YWRkcmluZm9fYWxsKCkuICBjb25uLT53aGljaGFkZHIgaXMgdGhlCiAJCQkJICogbmV4dCBvbmUg dG8gdHJ5LgogCQkJCSAqCiAJCQkJICogVGhlIGV4dHJhIGxldmVsIG9mIGJyYWNlcyBoZXJlIGlz IGhpc3RvcmljYWwuICBJdCdzIG5vdAogCQkJCSAqIHdvcnRoIHJlaW5kZW50aW5nIHRoaXMgd2hv bGUgc3dpdGNoIGNhc2UgdG8gcmVtb3ZlICdlbS4KIAkJCQkgKi8KIAkJCQl7Ci0JCQkJCXN0cnVj dCBhZGRyaW5mbyAqYWRkcl9jdXIgPSBjb25uLT5hZGRyX2N1cjsKIAkJCQkJY2hhcgkJaG9zdF9h ZGRyW05JX01BWEhPU1RdOworCQkJCQlBZGRySW5mbyAgICphZGRyX2N1cjsKIAogCQkJCQkvKgog CQkJCQkgKiBBZHZhbmNlIHRvIG5leHQgcG9zc2libGUgaG9zdCwgaWYgd2UndmUgdHJpZWQgYWxs IG9mCiAJCQkJCSAqIHRoZSBhZGRyZXNzZXMgZm9yIHRoZSBjdXJyZW50IGhvc3QuCiAJCQkJCSAq LwotCQkJCQlpZiAoYWRkcl9jdXIgPT0gTlVMTCkKKwkJCQkJaWYgKGNvbm4tPndoaWNoYWRkciA9 PSBjb25uLT5uYWRkcikKIAkJCQkJewogCQkJCQkJY29ubi0+dHJ5X25leHRfaG9zdCA9IHRydWU7 CiAJCQkJCQlnb3RvIGtlZXBfZ29pbmc7CiAJCQkJCX0KKwkJCQkJYWRkcl9jdXIgPSAmY29ubi0+ YWRkcltjb25uLT53aGljaGFkZHJdOwogCiAJCQkJCS8qIFJlbWVtYmVyIGN1cnJlbnQgYWRkcmVz cyBmb3IgcG9zc2libGUgdXNlIGxhdGVyICovCi0JCQkJCW1lbWNweSgmY29ubi0+cmFkZHIuYWRk ciwgYWRkcl9jdXItPmFpX2FkZHIsCi0JCQkJCQkgICBhZGRyX2N1ci0+YWlfYWRkcmxlbik7Ci0J CQkJCWNvbm4tPnJhZGRyLnNhbGVuID0gYWRkcl9jdXItPmFpX2FkZHJsZW47CisJCQkJCW1lbWNw eSgmY29ubi0+cmFkZHIsICZhZGRyX2N1ci0+YWRkciwgc2l6ZW9mKFNvY2tBZGRyKSk7CiAKIAkJ CQkJLyoKIAkJCQkJICogU2V0IGNvbm5pcCwgdG9vLiAgTm90ZSB3ZSBwdXJwb3NlbHkgaWdub3Jl IHN0cmR1cApAQCAtMjUyNiw3ICsyNjE2LDcgQEAga2VlcF9nb2luZzoJCQkJCQkvKiBXZSB3aWxs IGNvbWUgYmFjayB0byBoZXJlIHVudGlsIHRoZXJlIGlzCiAJCQkJCQljb25uLT5jb25uaXAgPSBz dHJkdXAoaG9zdF9hZGRyKTsKIAogCQkJCQkvKiBUcnkgdG8gY3JlYXRlIHRoZSBzb2NrZXQgKi8K LQkJCQkJY29ubi0+c29jayA9IHNvY2tldChhZGRyX2N1ci0+YWlfZmFtaWx5LCBTT0NLX1NUUkVB TSwgMCk7CisJCQkJCWNvbm4tPnNvY2sgPSBzb2NrZXQoYWRkcl9jdXItPmZhbWlseSwgU09DS19T VFJFQU0sIDApOwogCQkJCQlpZiAoY29ubi0+c29jayA9PSBQR0lOVkFMSURfU09DS0VUKQogCQkJ CQl7CiAJCQkJCQlpbnQJCQllcnJvcm5vID0gU09DS19FUlJOTzsKQEAgLTI1MzcsNyArMjYyNyw3 IEBAIGtlZXBfZ29pbmc6CQkJCQkJLyogV2Ugd2lsbCBjb21lIGJhY2sgdG8gaGVyZSB1bnRpbCB0 aGVyZSBpcwogCQkJCQkJICogY2FzZXMgd2hlcmUgdGhlIGFkZHJlc3MgbGlzdCBpbmNsdWRlcyBi b3RoIElQdjQgYW5kCiAJCQkJCQkgKiBJUHY2IGJ1dCBrZXJuZWwgb25seSBhY2NlcHRzIG9uZSBm YW1pbHkuCiAJCQkJCQkgKi8KLQkJCQkJCWlmIChhZGRyX2N1ci0+YWlfbmV4dCAhPSBOVUxMIHx8 CisJCQkJCQlpZiAoY29ubi0+d2hpY2hhZGRyIDwgY29ubi0+bmFkZHIgfHwKIAkJCQkJCQljb25u LT53aGljaGhvc3QgKyAxIDwgY29ubi0+bmNvbm5ob3N0KQogCQkJCQkJewogCQkJCQkJCWNvbm4t PnRyeV9uZXh0X2FkZHIgPSB0cnVlOwpAQCAtMjU2NCw3ICsyNjU0LDcgQEAga2VlcF9nb2luZzoJ CQkJCQkvKiBXZSB3aWxsIGNvbWUgYmFjayB0byBoZXJlIHVudGlsIHRoZXJlIGlzCiAJCQkJCSAq IFRDUCBzb2NrZXRzLCBub25ibG9jayBtb2RlLCBjbG9zZS1vbi1leGVjLiAgVHJ5IHRoZQogCQkJ CQkgKiBuZXh0IGFkZHJlc3MgaWYgYW55IG9mIHRoaXMgZmFpbHMuCiAJCQkJCSAqLwotCQkJCQlp ZiAoYWRkcl9jdXItPmFpX2ZhbWlseSAhPSBBRl9VTklYKQorCQkJCQlpZiAoYWRkcl9jdXItPmZh bWlseSAhPSBBRl9VTklYKQogCQkJCQl7CiAJCQkJCQlpZiAoIWNvbm5lY3ROb0RlbGF5KGNvbm4p KQogCQkJCQkJewpAQCAtMjU5Myw3ICsyNjgzLDcgQEAga2VlcF9nb2luZzoJCQkJCQkvKiBXZSB3 aWxsIGNvbWUgYmFjayB0byBoZXJlIHVudGlsIHRoZXJlIGlzCiAJCQkJCX0KICNlbmRpZgkJCQkJ CQkvKiBGX1NFVEZEICovCiAKLQkJCQkJaWYgKGFkZHJfY3VyLT5haV9mYW1pbHkgIT0gQUZfVU5J WCkKKwkJCQkJaWYgKGFkZHJfY3VyLT5mYW1pbHkgIT0gQUZfVU5JWCkKIAkJCQkJewogI2lmbmRl ZiBXSU4zMgogCQkJCQkJaW50CQkJb24gPSAxOwpAQCAtMjY4Nyw4ICsyNzc3LDggQEAga2VlcF9n b2luZzoJCQkJCQkvKiBXZSB3aWxsIGNvbWUgYmFjayB0byBoZXJlIHVudGlsIHRoZXJlIGlzCiAJ CQkJCSAqIFN0YXJ0L21ha2UgY29ubmVjdGlvbi4gIFRoaXMgc2hvdWxkIG5vdCBibG9jaywgc2lu Y2Ugd2UKIAkJCQkJICogYXJlIGluIG5vbmJsb2NrIG1vZGUuICBJZiBpdCBkb2VzLCB3ZWxsLCB0 b28gYmFkLgogCQkJCQkgKi8KLQkJCQkJaWYgKGNvbm5lY3QoY29ubi0+c29jaywgYWRkcl9jdXIt PmFpX2FkZHIsCi0JCQkJCQkJCWFkZHJfY3VyLT5haV9hZGRybGVuKSA8IDApCisJCQkJCWlmIChj b25uZWN0KGNvbm4tPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHJfY3VyLT5hZGRyLmFk ZHIsCisJCQkJCQkJCWFkZHJfY3VyLT5hZGRyLnNhbGVuKSA8IDApCiAJCQkJCXsKIAkJCQkJCWlm IChTT0NLX0VSUk5PID09IEVJTlBST0dSRVNTIHx8CiAjaWZkZWYgV0lOMzIKQEAgLTQwOTIsNiAr NDE4Miw2MyBAQCBmcmVlUEdjb25uKFBHY29ubiAqY29ubikKIAlmcmVlKGNvbm4pOwogfQogCisK Ky8qCisgKiBDb3BpZXMgb3ZlciB0aGUgQWRkckluZm9zIGZyb20gYWRkcmxpc3QgdG8gdGhlIFBH Y29ubi4KKyAqLworc3RhdGljIGJvb2wKK3N0b3JlX2Nvbm5fYWRkcmluZm8oUEdjb25uICpjb25u LCBzdHJ1Y3QgYWRkcmluZm8gKmFkZHJsaXN0KQoreworCXN0cnVjdCBhZGRyaW5mbyAqYWkgPSBh ZGRybGlzdDsKKworCWNvbm4tPndoaWNoYWRkciA9IDA7CisKKwljb25uLT5uYWRkciA9IDA7CisJ d2hpbGUgKGFpKQorCXsKKwkJYWkgPSBhaS0+YWlfbmV4dDsKKwkJY29ubi0+bmFkZHIrKzsKKwl9 CisKKwljb25uLT5hZGRyID0gY2FsbG9jKGNvbm4tPm5hZGRyLCBzaXplb2YoQWRkckluZm8pKTsK KwlpZiAoY29ubi0+YWRkciA9PSBOVUxMKQorCXsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWFp ID0gYWRkcmxpc3Q7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBjb25uLT5uYWRkcjsgaSsrKQorCXsK KwkJY29ubi0+YWRkcltpXS5mYW1pbHkgPSBhaS0+YWlfZmFtaWx5OworCisJCW1lbWNweSgmY29u bi0+YWRkcltpXS5hZGRyLmFkZHIsIGFpLT5haV9hZGRyLAorCQkJICAgYWktPmFpX2FkZHJsZW4p OworCQljb25uLT5hZGRyW2ldLmFkZHIuc2FsZW4gPSBhaS0+YWlfYWRkcmxlbjsKKwkJYWkgPSBh aS0+YWlfbmV4dDsKKwl9CisKKwlpZiAobG9hZEJhbGFuY2UoY29ubikpCisJeworCQkvKgorCQkg KiBTaHVmZmxlIGFkZHIgd2l0aCBhIER1cnN0ZW5mZWxkL0tudXRoIHZlcnNpb24gb2YgdGhlIEZp c2hlci1ZYXRlcworCQkgKiBzaHVmZmxlLiBTb3VyY2U6CisJCSAqIGh0dHBzOi8vZW4ud2lraXBl ZGlhLm9yZy93aWtpL0Zpc2hlciVFMiU4MCU5M1lhdGVzX3NodWZmbGUjVGhlX21vZGVybl9hbGdv cml0aG0KKwkJICoKKwkJICogV2UgZG9uJ3QgbmVlZCB0byBpbml0aWFsaXplIGNvbm4tPnBybmdf c3RhdGUgaGVyZSwgYmVjYXVzZSB0aGF0CisJCSAqIGFscmVhZHkgaGFwcGVuZWQgaW4gY29ubmVj dE9wdGlvbnMyLgorCQkgKi8KKwkJZm9yIChpbnQgaSA9IGNvbm4tPm5hZGRyIC0gMTsgaSA+IDA7 IGktLSkKKwkJeworCQkJaW50CQkJaiA9IHBnX3BybmdfdWludDY0X3JhbmdlKCZjb25uLT5wcm5n X3N0YXRlLCAwLCBpKTsKKwkJCUFkZHJJbmZvCXRlbXAgPSBjb25uLT5hZGRyW2pdOworCisJCQlj b25uLT5hZGRyW2pdID0gY29ubi0+YWRkcltpXTsKKwkJCWNvbm4tPmFkZHJbaV0gPSB0ZW1wOwor CQl9CisJfQorCXJldHVybiB0cnVlOworfQorCiAvKgogICogcmVsZWFzZV9jb25uX2FkZHJpbmZv CiAgKgkgLSBGcmVlIGFueSBhZGRyaW5mbyBsaXN0IGluIHRoZSBQR2Nvbm4uCkBAIC00MDk5LDEx ICs0MjQ2LDEwIEBAIGZyZWVQR2Nvbm4oUEdjb25uICpjb25uKQogc3RhdGljIHZvaWQKIHJlbGVh c2VfY29ubl9hZGRyaW5mbyhQR2Nvbm4gKmNvbm4pCiB7Ci0JaWYgKGNvbm4tPmFkZHJsaXN0KQor CWlmIChjb25uLT5hZGRyKQogCXsKLQkJcGdfZnJlZWFkZHJpbmZvX2FsbChjb25uLT5hZGRybGlz dF9mYW1pbHksIGNvbm4tPmFkZHJsaXN0KTsKLQkJY29ubi0+YWRkcmxpc3QgPSBOVUxMOwotCQlj b25uLT5hZGRyX2N1ciA9IE5VTEw7CS8qIGZvciBzYWZldHkgKi8KKwkJZnJlZShjb25uLT5hZGRy KTsKKwkJY29ubi0+YWRkciA9IE5VTEw7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJm YWNlcy9saWJwcS9saWJwcS1pbnQuaCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5o CmluZGV4IGM3NWVkNjNhMmMuLjE0MDNiMzI2NjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2Vz L2xpYnBxL2xpYnBxLWludC5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5o CkBAIC04Miw2ICs4Miw4IEBAIHR5cGVkZWYgc3RydWN0CiAjZW5kaWYKICNlbmRpZgkJCQkJCQkv KiBVU0VfT1BFTlNTTCAqLwogCisjaW5jbHVkZSAiY29tbW9uL3BnX3BybmcuaCIKKwogLyoKICAq IFBPU1RHUkVTIGJhY2tlbmQgZGVwZW5kZW50IENvbnN0YW50cy4KICAqLwpAQCAtMzczLDYgKzM3 NSw3IEBAIHN0cnVjdCBwZ19jb25uCiAJY2hhcgkgICAqcGdwYXNzZmlsZTsJCS8qIHBhdGggdG8g YSBmaWxlIGNvbnRhaW5pbmcgcGFzc3dvcmQocykgKi8KIAljaGFyCSAgICpjaGFubmVsX2JpbmRp bmc7CS8qIGNoYW5uZWwgYmluZGluZyBtb2RlCiAJCQkJCQkJCQkgKiAocmVxdWlyZSxwcmVmZXIs ZGlzYWJsZSkgKi8KKwljaGFyCSAgICpsb2FkYmFsYW5jZTsJLyogbG9hZCBiYWxhbmNlIG92ZXIg aG9zdHMgKi8KIAljaGFyCSAgICprZWVwYWxpdmVzOwkJLyogdXNlIFRDUCBrZWVwYWxpdmVzPyAq LwogCWNoYXIJICAgKmtlZXBhbGl2ZXNfaWRsZTsJLyogdGltZSBiZXR3ZWVuIFRDUCBrZWVwYWxp dmVzICovCiAJY2hhcgkgICAqa2VlcGFsaXZlc19pbnRlcnZhbDsJLyogdGltZSBiZXR3ZWVuIFRD UCBrZWVwYWxpdmUKQEAgLTQ2MSw4ICs0NjQsMTAgQEAgc3RydWN0IHBnX2Nvbm4KIAlQR1Rhcmdl dFNlcnZlclR5cGUgdGFyZ2V0X3NlcnZlcl90eXBlOwkvKiBkZXNpcmVkIHNlc3Npb24gcHJvcGVy dGllcyAqLwogCWJvb2wJCXRyeV9uZXh0X2FkZHI7CS8qIHRpbWUgdG8gYWR2YW5jZSB0byBuZXh0 IGFkZHJlc3MvaG9zdD8gKi8KIAlib29sCQl0cnlfbmV4dF9ob3N0OwkvKiB0aW1lIHRvIGFkdmFu Y2UgdG8gbmV4dCBjb25uaG9zdFtdPyAqLwotCXN0cnVjdCBhZGRyaW5mbyAqYWRkcmxpc3Q7CS8q IGxpc3Qgb2YgYWRkcmVzc2VzIGZvciBjdXJyZW50IGNvbm5ob3N0ICovCi0Jc3RydWN0IGFkZHJp bmZvICphZGRyX2N1cjsJLyogdGhlIG9uZSBjdXJyZW50bHkgYmVpbmcgdHJpZWQgKi8KKwlpbnQJ CQluYWRkcjsJCQkvKiBudW1iZXIgb2YgYWRkcnMgcmV0dXJuZWQgYnkgZ2V0YWRkcmluZm8gKi8K KwlpbnQJCQl3aGljaGFkZHI7CQkvKiB0aGUgYWRkciBjdXJyZW50bHkgYmVpbmcgdHJpZWQgKi8K KwlBZGRySW5mbyAgICphZGRyOwkJCS8qIHRoZSBhcnJheSBvZiBhZGRyZXNzZXMgZm9yIHRoZSBj dXJyZW50bHkKKwkJCQkJCQkJICogdHJpZWQgaG9zdCAqLwogCWludAkJCWFkZHJsaXN0X2ZhbWls eTsJLyogbmVlZGVkIHRvIGtub3cgaG93IHRvIGZyZWUgYWRkcmxpc3QgKi8KIAlib29sCQlzZW5k X2FwcG5hbWU7CS8qIG9rYXkgdG8gc2VuZCBhcHBsaWNhdGlvbl9uYW1lPyAqLwogCkBAIC00Nzcs NiArNDgyLDggQEAgc3RydWN0IHBnX2Nvbm4KIAlQR1ZlcmJvc2l0eSB2ZXJib3NpdHk7CQkvKiBl cnJvci9ub3RpY2UgbWVzc2FnZSB2ZXJib3NpdHkgKi8KIAlQR0NvbnRleHRWaXNpYmlsaXR5IHNo b3dfY29udGV4dDsJLyogd2hldGhlciB0byBzaG93IENPTlRFWFQgZmllbGQgKi8KIAlQR2xvYmpm dW5jcyAqbG9iamZ1bmNzOwkJLyogcHJpdmF0ZSBzdGF0ZSBmb3IgbGFyZ2Utb2JqZWN0IGFjY2Vz cyBmbnMgKi8KKwlwZ19wcm5nX3N0YXRlIHBybmdfc3RhdGU7CS8qIHBybmcgc3RhdGUgZm9yIGxv YWQgYmFsYW5jaW5nIGNvbm5lY3Rpb25zICovCisKIAogCS8qIEJ1ZmZlciBmb3IgZGF0YSByZWNl aXZlZCBmcm9tIGJhY2tlbmQgYW5kIG5vdCB5ZXQgcHJvY2Vzc2VkICovCiAJY2hhcgkgICAqaW5C dWZmZXI7CQkvKiBjdXJyZW50bHkgYWxsb2NhdGVkIGJ1ZmZlciAqLwotLSAKMi4zNC4xCgo= --_002_DBBPR83MB05074E85346C3041109E2353F7449DBBPR83MB0507EURP_--