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 1mJI0j-0001MC-MC for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Aug 2021 16:13:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mJI0D-0001Cn-8P for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Aug 2021 16:13:17 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mJI0C-0001Cf-Ve for pgsql-hackers@lists.postgresql.org; Thu, 26 Aug 2021 16:13:17 +0000 Received: from [40.107.220.63] (helo=NAM11-CO1-obe.outbound.protection.outlook.com) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mJI09-0000rf-48 for pgsql-hackers@postgresql.org; Thu, 26 Aug 2021 16:13:16 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jhDgzWILFa2zo2cYj+oKepBkJsjZzBPydrdfXe6oHVNvD0UiUhpucjegz6R5ZI7Mg2xfb++KxzdWkyl0GqLf0PP0WeXN3Jqx77bcMturBukohM33yJmjy2jT8hZj/aykB2Jm5waOwtCHJ1wG1sQdft/rdSItvMb3in4JW3lQnhVTZFOAVAEn0G6IYrQX3gWuo/plasKwkcfF1ie18t7f/faFLlavL7q/xKaytC3ZM5vo4mOH4X3PTYoiS9kWFBrIfMwnNZNjlUoMx6tqvfOGMovQFFICcrzubrGITXYjrLfUOmzbs4ia+6ZM4eTi0eSO1URdSNKQ06u+OJQTgztt+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xY6y2Azybh/es+r3anhn80iJjwdl/aGN9LAvd3/ZN5o=; b=elouMtZ9AsYiXq2W3RqD5L7PKfDosm8U/dvYZA2Orv/hfgfHvlndOEdXAhleZLm1iD5+p9pR/P5I7ryfJcbvOImqJNVSYLqeINnFxKWff8PIPPmG4AantERlZk3OQ3RG1uFnDtnwWtAUD2VDrI2kEUvszJC28EpeHDAyrYu/a2JiAjHTnCg3HPigHfU/BRikNsb4RIY0r8YRDhVRWSxwGWm8YM0HhdTFX4CXjpDxEAX2+sInNsvVcrwlAeuAc0eawz/4k3kkuGRsB/rm+Bpr6v6wvZk2qalmlUhXb9zAdBfa1pnaxHFRSshJz0P5jFLERYUlqtxrnyCQTqfVIjrZRQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=vmware.com; dmarc=pass action=none header.from=vmware.com; dkim=pass header.d=vmware.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vmware.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xY6y2Azybh/es+r3anhn80iJjwdl/aGN9LAvd3/ZN5o=; b=I5hZR0p7zmJIVCb6rvZwsoQk/5ijZI7MYZJAJM1EoPZYxgWZQdo2GQzokH3pwVioTC7ok4F23ZmdzLmOQbD98kC0TpffRiRcqK4zz1CqqFsOWYPyq5BXSnEaD62CW1xCiXwWTRl1QSPNk2FiT4YQMlrCxIyldPbbJp+ShbLTFxA= Received: from MWHPR05MB2896.namprd05.prod.outlook.com (2603:10b6:300:65::20) by CO6PR05MB7651.namprd05.prod.outlook.com (2603:10b6:5:340::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4457.10; Thu, 26 Aug 2021 16:13:08 +0000 Received: from MWHPR05MB2896.namprd05.prod.outlook.com ([fe80::b8ad:c0df:fc49:52a]) by MWHPR05MB2896.namprd05.prod.outlook.com ([fe80::b8ad:c0df:fc49:52a%8]) with mapi id 15.20.4457.020; Thu, 26 Aug 2021 16:13:08 +0000 From: Jacob Champion To: "zyu@yugabyte.com" CC: "hlinnaka@iki.fi" , "pgsql-hackers@postgresql.org" , "michael@paquier.xyz" Subject: Re: [PoC] Federated Authn/z with OAUTHBEARER Thread-Topic: [PoC] Federated Authn/z with OAUTHBEARER Thread-Index: AQHXXISc0BUwpEo1NUi6cD0VutaLHasZf38AgAdCaoCAZEa6AIAAPmyAgAAQj4CAARnbgA== Date: Thu, 26 Aug 2021 16:13:08 +0000 Message-ID: <7fbf5de472907856e95b068bfa1f9167b7555e78.camel@vmware.com> References: <2f06a4aef1d5defe4b7aaec01478572e5557d32a.camel@vmware.com> <8a5a35b31c3f25f6b047e77def0445a60399981d.camel@vmware.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.36.5-0ubuntu1 authentication-results: yugabyte.com; dkim=none (message not signed) header.d=none;yugabyte.com; dmarc=none action=none header.from=vmware.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 97ec3cfe-14d1-4bfc-8560-08d968ac64e3 x-ms-traffictypediagnostic: CO6PR05MB7651: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: OsHOh2rmnjzw6C+0wFUybkCRlpy8/vl+FxP7RWe9IDik5J44d3TPsAvIlMX8ygnBYAOcTbmKxSK78vv+MFLqKwBS6iLyTWkg49/pCFomZ75CjjdJ1Epnf35i4Bs8RowbTgz1hY9ItfusCpmguJI7RgJVNMyXvMQEdz9m/VOHOVjRQGaIRN5cnV3Fq3b044cYFCj+KMg3oU+H0PDKNthXF7GRce055tPO9gu/NlEH1FI8dnacqOXMyHiGvk3F5yntMyWU9p15mtv2QXVD7jR1hcDbksLoFWObJ4CQAlgrjAh1my4wc9XuHRt6JgblrqppLigw00Bik69xn+fXy6DCqUOwwtNoWR5QyAvGNnbOFmQxXbuWGMJcKgV49zPd+0xqMQsDCS3FkgPZLsq1Xk04lTdc4+EXvCYFpxgh1nH2mKst3/oi9PtmxbIJchbYs5xjCiep8etrMgbrJDrqxr1fmKaENaI4q+hiWAbqZM9rGTM/sh2Ska9mNKxK83+uXRZCpbEOA/Wm2wajlCbzrBft4D5QgeDH2hzMxXS7FYoootEvRYKvP41lmnFHb9SAE+Secd7UkRvRGlX/7cla/RVyfmHkpQeYBPS40fsNRk3U/2il5GRavwWFJecFmg2yz/2T0K+FqGDK6eNX4EW+CXlogypBLYKd4lSnsxIASf2kvlNZelKAbC4/tTRxnAzGW/VlC/fq5HagL53Mo5zqrCnNh1/Dj8S2dFtPonsA7ypVWU7nHj+2BsLv2Bs4pi/hXrnODhnjVHyPw/iXKH7SJIkAzuXPQIiAV8zPZWaABBMkpBs= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR05MB2896.namprd05.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(376002)(346002)(136003)(366004)(39860400002)(8676002)(36756003)(316002)(38070700005)(64756008)(186003)(2906002)(66556008)(2616005)(66476007)(8936002)(6486002)(86362001)(38100700002)(6512007)(71200400001)(66446008)(83380400001)(66946007)(478600001)(4326008)(54906003)(5660300002)(6916009)(966005)(6506007)(76116006)(122000001)(26005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ajBib1NBVnYxbjNKY1VCNFFvYVNuRFJCVDd3bzQ3czFTZWp3aGZGc1lIYkM4?= =?utf-8?B?cEVxU1Vad00yN09nQTVjSy9Ndmc3WFhHRnFYb2Z0Yi9pYXVDQkNNYnpvdFEy?= =?utf-8?B?YVRTVCtkc1c0alFJeGFGYTZ4NjdBUEttWWtwaG5VMS8rRlFLZ1lybW53dmhB?= =?utf-8?B?QnpNYzdZbm1OeEpxbWQzdW1aWVJMTGNIZFlQOUNDSzcxUHRwWWlBWFBLOUdJ?= =?utf-8?B?WUtJMldDQWdsS25CZDMvVGM4d3cxd2JhbTZkSnJ2L1JQU3VnK2hLVkVaTFo3?= =?utf-8?B?R1p4bzEzbHVwSWF6dldDNHYvM3Jyd0NnYXlpN1lhZkxnL3E2T0oyUDIwdFZE?= =?utf-8?B?MjlnY2ZLYnRMelJBTjlhNldIMTB5MGxPdHpTcm1qcHV2V01pQkNuc2haMkcz?= =?utf-8?B?bjJJemlZczIxWXN3dU02UkdVQ0NrY0MwK01qVU1CemxGU1JFeVNPdGxWZXlD?= =?utf-8?B?WE9uUGhrZHVSL1dHOEY3VHUvN01Sc0ZFRzRoSWVQWWtjZzBZYWpva2p3SEhH?= =?utf-8?B?R25zcDQ4YU1sVGJkWGpDY3B6MHlCcHZIQzE5UmpzUm1EYW9oNm1UQUlLaHZL?= =?utf-8?B?NGRZMTlTMGdkelpPNGxRNStUNVdzQ3poQlhsSFF4bW5RL1ZOckJSVWpMQnRD?= =?utf-8?B?NGVseGFVdmxFbW9zZFUvVFZKakZGQzhzeDZrdDY2ejBHQ3BNSDJiN3NhS2pO?= =?utf-8?B?Y2VHUG9sV1E4UUlHUEZLWDNOOHdYL2NlUDhCVTQ5Zk40OXNJZlVNczJBekJp?= =?utf-8?B?SDB1VXpXVU1oTGJpQzNzdjZwaGNheEVsL2xuUzlXbnpsMHg0WGRzSjcxYSs1?= =?utf-8?B?Sms5SGJIS24rbGpPYjNUM1Q3NjFGK2x4MXZCZmsrbDZObllpOXN2dUtOY0s0?= =?utf-8?B?TlpUdlM0TWY4eTYyUFo5UmNVb05rSU80cklGYWdWdHVnRGJtM3owVytUdXA5?= =?utf-8?B?dHI1SWYrNUtqWmxobWpDMWZtbitLN1ZoaFRlc3JXMGJmaFozUXo3NmdHdWlJ?= =?utf-8?B?R3k2N0tuakJXYU1WRnhlb0tKU3dNNjZLeG5qYklWVzVRZUIwelpHVVFqdUJV?= =?utf-8?B?cVpGVkZGbFQ2cTBIcXNGZllDMi9aT004QlhLbUloMmpubm1RYlB4bm1lcDVP?= =?utf-8?B?MzUvR20vVmFwUU41VFZGaFpTdzJ6M3hVME8xYWRvcUZJSGtFNXg2U29ZL3Rs?= =?utf-8?B?Y3VwTWFWVGtiS0p0R2MwU1NIK1hlODRsQnhRc29BbG9ZQitJQUpzeXFVRFNB?= =?utf-8?B?TzR3NVFqU2NJWk1VVGx2TFlPUko0V0c0aEJ5WExhMEU4U3ViUEhZTy9kOGZy?= =?utf-8?B?eEllcmRJemtpQTZ6S3FVRlZ3MnRNU3VhTS90akR4K25GbVRUU29zOURXUDlX?= =?utf-8?B?Z21oYkdEaTJFS08wZkRSc1dmWlNwcVhwRE1oQ2hIOWUrYjZ1TkNkZEcvbEdn?= =?utf-8?B?OXlvbDY5dmo5VWVMTUFjQWsrRitCZ2tUMEdjclN3ZlA5MTdMdlNRREdyRnFT?= =?utf-8?B?OW5uZzNzVmtBS0Z0emRYL3A4aTRqWGZZeHRRcWZBUlpwekNtMm5hTzJNYWIv?= =?utf-8?B?U0VPUWZaTXVyUmN4UE8vM1RVeC81SG1Wd0VMZXk3SGh2MlA1a00yY1pPcU52?= =?utf-8?B?aWNjR3N6ZytoeHJUazdqRjRmMndyN3J4VnhKYVJRQ1NlWXZ2WWRrWWc4WTY0?= =?utf-8?B?aWhKdFpwZUZBNjNYQmVuL3ViTENPNzJnbnFDQ0NERXh2dERJb1Q3MmFoL3Ja?= =?utf-8?Q?4Ux7GmFTRe53Tfbwh+U1T1QBobKJzNwGYsxF5oP?= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: <4043DEB1A3BB0C4BA6DB9708F24BA334@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: vmware.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR05MB2896.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 97ec3cfe-14d1-4bfc-8560-08d968ac64e3 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Aug 2021 16:13:08.4712 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b39138ca-3cee-4b4a-a4d6-cd83d9dd62f0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: xzxbTHtt02M3SeCPWFJZw8yW2FkmFjQ9PBODMkZtH1JSffYD13B7xT1IW0thw4z2GddS4E6Mwk56Ngs7GI1Oqg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR05MB7651 X-Host-Lookup-Failed: Reverse DNS lookup failed for 40.107.220.63 (deferred) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk T24gV2VkLCAyMDIxLTA4LTI1IGF0IDE1OjI1IC0wNzAwLCBaaGlob25nIFl1IHdyb3RlOg0KPiAN Cj4gSGksDQo+IEZvciB2Mi0wMDAxLWNvbW1vbi1qc29uYXBpLXN1cHBvcnQtRlJPTlRFTkQtY2xp ZW50cy5wYXRjaCA6DQo+IA0KPiArICAgLyogQ2xlYW4gdXAuICovDQo+ICsgICB0ZXJtSnNvbkxl eENvbnRleHQoJmxleCk7IA0KPiANCj4gQXQgdGhlIGVuZCBvZiB0ZXJtSnNvbkxleENvbnRleHQo KSwgZW1wdHkgaXMgY29waWVkIHRvIGxleC4gRm9yIHN0YWNrDQo+IGJhc2VkIEpzb25MZXhDb250 ZXh0LCB0aGUgY29weSBzZWVtcyB1bm5lY2Vzc2FyeS4NCj4gTWF5YmUgaW50cm9kdWNlIGEgYm9v bGVhbiBwYXJhbWV0ZXIgZm9yIHRlcm1Kc29uTGV4Q29udGV4dCgpIHRvDQo+IHNpZ25hbCB0aGF0 IHRoZSBjb3B5IGNhbiBiZSBvbWl0dGVkID8NCg0KRG8geW91IG1lYW4gaGVhcC1iYXNlZD8gaS5l LiBkZXN0cm95SnNvbkxleENvbnRleHQoKSBkb2VzIGFuDQp1bm5lY2Vzc2FyeSBjb3B5IGJlZm9y ZSBmcmVlPyBZZWFoLCBpbiB0aGF0IGNhc2UgaXQncyBub3Qgc3VwZXIgdXNlZnVsLA0KYnV0IEkg dGhpbmsgSSdkIHdhbnQgc29tZSBldmlkZW5jZSB0aGF0IHRoZSBwZXJmb3JtYW5jZSBoaXQgbWF0 dGVycw0KYmVmb3JlIG9wdGltaXppbmcgaXQuDQoNCkFyZSB0aGVyZSBhbnkgb3RoZXIgaW50ZXJu YWwgQVBJcyB0aGF0IHRha2UgYSBib29sZWFuIHBhcmFtZXRlciBsaWtlDQp0aGF0PyBJZiBub3Qs IEkgdGhpbmsgd2UnZCBwcm9iYWJseSBqdXN0IHdhbnQgdG8gcmVtb3ZlIHRoZSBjb3B5DQplbnRp cmVseSBpZiBpdCdzIGEgcHJvYmxlbS4NCg0KPiArI2lmZGVmIEZST05URU5EDQo+ICsgICAgICAg LyogbWFrZSBzdXJlIGluaXRpYWxpemF0aW9uIHN1Y2NlZWRlZCAqLw0KPiArICAgICAgIGlmIChs ZXgtPnN0cnZhbCA9PSBOVUxMKQ0KPiArICAgICAgICAgICByZXR1cm4gSlNPTl9PVVRfT0ZfTUVN T1JZOw0KPiANCj4gU2hvdWxkIFBRRXhwQnVmZmVyQnJva2VuKGxleC0+c3RydmFsKSBiZSB1c2Vk IGZvciB0aGUgY2hlY2sgPw0KDQpJdCBzaG91bGQgYmUgb2theSB0byBjb250aW51ZSBpZiB0aGUg c3RydmFsIGlzIGJyb2tlbiBidXQgbm9uLU5VTEwsDQpzaW5jZSBpdCdzIGFib3V0IHRvIGJlIHJl c2V0LiBUaGF0IGhhcyB0aGUgZnJpbmdlIGJlbmVmaXQgb2YgYWxsb3dpbmcNCnRoZSBmdW5jdGlv biB0byBnbyBhcyBmYXIgYXMgcG9zc2libGUgd2l0aG91dCBmYWlsaW5nLCB0aG91Z2ggdGhhdCdz DQpwcm9iYWJseSBhIHByZXR0eSB3ZWFrIGp1c3RpZmljYXRpb24uDQoNCkluIHByYWN0aWNlLCBk byB5b3UgdGhpbmsgdGhhdCB0aGUgcHJvYmFiaWxpdHkgb2Ygc3VjY2VzcyBpcyBsb3cgZW5vdWdo DQp0aGF0IHdlIHNob3VsZCBqdXN0IHNob3J0LWNpcmN1aXQgYW5kIGJlIGRvbmUgd2l0aCBpdD8N Cg0KT24gV2VkLCAyMDIxLTA4LTI1IGF0IDE2OjI0IC0wNzAwLCBaaGlob25nIFl1IHdyb3RlOg0K PiANCj4gRm9yIHYyLTAwMDItbGlicHEtYWRkLU9BVVRIQkVBUkVSLVNBU0wtbWVjaGFuaXNtLnBh dGNoIDoNCj4gDQo+ICsgICBpX2luaXRfc2Vzc2lvbigmc2Vzc2lvbik7DQo+ICsNCj4gKyAgIGlm ICghY29ubi0+b2F1dGhfY2xpZW50X2lkKQ0KPiArICAgew0KPiArICAgICAgIC8qIFdlIGNhbid0 IHRhbGsgdG8gYSBzZXJ2ZXIgd2l0aG91dCBhIGNsaWVudCBpZGVudGlmaWVyLiAqLw0KPiArICAg ICAgIGFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlicHFfZ2V0dGV4dCgibm8gb2F1dGhfY2xpZW50X2lkIGlz IHNldCBmb3IgdGhlIGNvbm5lY3Rpb24iKSk7DQo+ICsgICAgICAgZ290byBjbGVhbnVwOw0KPiAN Cj4gQ2FuIGNvbm4tPm9hdXRoX2NsaWVudF9pZCBjaGVjayBiZSBwZXJmb3JtZWQgYWhlYWQNCj4g b2YgaV9pbml0X3Nlc3Npb24oKSA/IFRoYXQgd2F5LCBgYGBnb3RvIGNsZWFudXBgYGAgY2FuIGJl IHJlcGxhY2VkDQo+IHdpdGggcmV0dXJuLg0KDQpZZWFoLCBJIHRoaW5rIHRoYXQgbWFrZXMgc2Vu c2UuIEZZSSwgdGhpcyBpcyBwcm9iYWJseSBvbmUgb2YgdGhlDQpmdW5jdGlvbnMgdGhhdCB3aWxs IGJlIHJld3JpdHRlbiBjb21wbGV0ZWx5IG9uY2UgaWRkYXdjIGlzIHJlbW92ZWQuDQoNCj4gKyAg ICAgICBpZiAoIWVycm9yX2NvZGUgfHwgKHN0cmNtcChlcnJvcl9jb2RlLCAiYXV0aG9yaXphdGlv bl9wZW5kaW5nIikNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHN0cmNtcChlcnJv cl9jb2RlLCAic2xvd19kb3duIikpKQ0KPiANCj4gV2hhdCBpZiwgaW4gdGhlIGZ1dHVyZSwgdGhl cmUgaXMgZXJyb3IgY29kZSBkaWZmZXJlbnQgZnJvbSB0aGUgYWJvdmUNCj4gdHdvIHdoaWNoIGRv ZXNuJ3QgcmVwcmVzZW50ICJPQXV0aCB0b2tlbiByZXRyaWV2YWwgZmFpbGVkIiBzY2VuYXJpbyA/ DQoNCldlJ2QgaGF2ZSB0byB1cGRhdGUgb3VyIGNvZGU7IHRoYXQgd291bGQgYmUgYSBicmVha2lu ZyBjaGFuZ2UgdG8gdGhlDQpEZXZpY2UgQXV0aG9yaXphdGlvbiBzcGVjLiBIZXJlJ3Mgd2hhdCBp dCBzYXlzIHRvZGF5IFsxXToNCg0KICAgVGhlICJhdXRob3JpemF0aW9uX3BlbmRpbmciIGFuZCAi c2xvd19kb3duIiBlcnJvciBjb2RlcyBkZWZpbmUNCiAgIHBhcnRpY3VsYXJseSB1bmlxdWUgYmVo YXZpb3IsIGFzIHRoZXkgaW5kaWNhdGUgdGhhdCB0aGUgT0F1dGggY2xpZW50DQogICBzaG91bGQg Y29udGludWUgdG8gcG9sbCB0aGUgdG9rZW4gZW5kcG9pbnQgYnkgcmVwZWF0aW5nIHRoZSB0b2tl bg0KICAgcmVxdWVzdCAoaW1wbGVtZW50aW5nIHRoZSBwcmVjaXNlIGJlaGF2aW9yIGRlZmluZWQg YWJvdmUpLiAgSWYgdGhlDQogICBjbGllbnQgcmVjZWl2ZXMgYW4gZXJyb3IgcmVzcG9uc2Ugd2l0 aCBhbnkgb3RoZXIgZXJyb3IgY29kZSwgaXQgTVVTVA0KICAgc3RvcCBwb2xsaW5nIGFuZCBTSE9V TEQgcmVhY3QgYWNjb3JkaW5nbHksIGZvciBleGFtcGxlLCBieSBkaXNwbGF5aW5nDQogICBhbiBl cnJvciB0byB0aGUgdXNlci4NCg0KPiBGb3IgY2xpZW50X2luaXRpYWxfcmVzcG9uc2UoKSwNCj4g DQo+ICsgICB0b2tlbl9idWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOw0KPiArICAgaWYgKCF0b2tl bl9idWYpDQo+ICsgICAgICAgZ290byBjbGVhbnVwOw0KPiANCj4gSWYgdG9rZW5fYnVmIGlzIE5V TEwsIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbnl0aGluZyB0byBmcmVlLiBXZQ0KPiBjYW4g cmV0dXJuIGRpcmVjdGx5Lg0KDQpUaGF0J3MgdHJ1ZSB0b2RheSwgYnV0IGltcGxlbWVudGF0aW9u cyBoYXZlIGEgaGFiaXQgb2YgY2hhbmdpbmcuIEkNCnBlcnNvbmFsbHkgcHJlZmVyIG5vdCB0byBp bnRyb2R1Y2UgdG9vIG1hbnkgZXhpdCBwb2ludHMgZnJvbSBhIGZ1bmN0aW9uDQp0aGF0J3MgYWxy ZWFkeSB1c2luZyBnb3RvLiBJbiBteSBleHBlcmllbmNlLCB0aGF0IG1ha2VzIGZ1dHVyZQ0KbWFp bnRlbmFuY2UgaGFyZGVyLg0KDQpUaGFua3MgZm9yIHRoZSByZXZpZXdzISBIYXZlIHlvdSBiZWVu IGFibGUgdG8gZ2l2ZSB0aGUgcGF0Y2hzZXQgYSB0cnkNCndpdGggYW4gT0F1dGggZGVwbG95bWVu dD8NCg0KLS1KYWNvYg0KDQpbMV0gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRt bC9yZmM4NjI4I3NlY3Rpb24tMy41DQo=