From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx.groups.io with SMTP id smtpd.web09.2656.1663812956984858934 for ; Wed, 21 Sep 2022 19:15:57 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=eq+ByaBi; spf=pass (domain: intel.com, ip: 192.55.52.88, mailfrom: yi1.li@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1663812956; x=1695348956; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=zVWaiTbnpaJQCE60paEV/pN4+gYI1dtSlPF2j8iEqa4=; b=eq+ByaBij+LVhYgZG72A/o4ohRr8gOfsoSJeHxo/Y5CpF9ayyC6I1w6A QLk2A4Zs53fWBWcfptNBQQNlQ3yYOZk4R4VuJ2qfnGY2MT+XIOo/vFc/X Zhl8KSGYzA+RBU+zp33OHwrjxXX7M/VOQvxVioTiNkZ1rkoRSZNy5YDkE Q4++jYFmgg72SMkbFIdBQoMF1y74BGXyRqE3NoD6AQ7NJAgoLlaQnla3U Pd9LuDkea0bcIVqaaD9XnDSq8MWL13aVfUNyf8ad8GmAc+SIDd0FrCLeq PTbigghq4qHKRxZdSPizfZps/RATDe2ggRZqwJSnQSzUBN4VvvfULG3lr g==; X-IronPort-AV: E=McAfee;i="6500,9779,10477"; a="326492949" X-IronPort-AV: E=Sophos;i="5.93,335,1654585200"; d="scan'208";a="326492949" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Sep 2022 19:15:52 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,335,1654585200"; d="scan'208";a="948404765" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmsmga005.fm.intel.com with ESMTP; 21 Sep 2022 19:15:51 -0700 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Wed, 21 Sep 2022 19:15:52 -0700 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) by ORSMSX611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Wed, 21 Sep 2022 19:15:51 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Wed, 21 Sep 2022 19:15:51 -0700 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.175) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Wed, 21 Sep 2022 19:15:50 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=W2ihIdlHezG25hr0/jKFN/2qg10D0xRnAyfZviycKrwDcWGiCOlKcduFKDbRizw7W8IlI+1NWKLSGg88u/f6qx8AYdE71pb5hBWh16+pM9itkPM2Mp4WMkvwBnuXTJ8TP9oFcKt8Bj93F2R/4PAuyG7BbGhNDK1kEApYpqcBMi1z0IU5qdY0Tsoxr1S8J2X1NV8Ju81uo9t7UTD0yu/s9zljisleCXDmIuRfEsa8vXS2+lPNqPiGJB6LUY83cGF5Sp7WsFBI7GavTKeMTl1KJn5GE6YukAehee80EQ1Q0e8JujCzjmVm36hyj1tHnEbDMVGGcYflO4YqNzy3Wwj1xA== 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=zVWaiTbnpaJQCE60paEV/pN4+gYI1dtSlPF2j8iEqa4=; b=G5jXI7EhIYFHeWTJ2/MZRHDujm0tlbnY//hy4WCKHVCgZshvVYnEFlem1Pa97/qgUvDbUXXC3e9Z9ZKtleRoCJcoIknqBRGXU+LORBncsgUaX1OHxp6zmB8Z70/Xf1q04uJLhw4bGVlGThtsC/1cHh11JnBPEygn4fa2fW9owadCq56zq8uaFK4QoCds5A1V69AEpBAqDn5df3eQ6NoUyvlrCQzMfbrConN0kJhGYEgeEPYcY56MOcwj55luatPCvc5WNCOE69s9fBXwmR89tH07iWQWB1t0T2F3jfdTyBI1ndZILmwDlhC3svhQxwoRorhDK/N19mwBoekPBOm8Wg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from SJ1PR11MB6227.namprd11.prod.outlook.com (2603:10b6:a03:45a::10) by SA2PR11MB5132.namprd11.prod.outlook.com (2603:10b6:806:11a::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.14; Thu, 22 Sep 2022 02:15:47 +0000 Received: from SJ1PR11MB6227.namprd11.prod.outlook.com ([fe80::1d65:f35c:c823:1b51]) by SJ1PR11MB6227.namprd11.prod.outlook.com ([fe80::1d65:f35c:c823:1b51%9]) with mapi id 15.20.5588.011; Thu, 22 Sep 2022 02:15:47 +0000 From: "yi1 li" To: "Kinney, Michael D" , "devel@edk2.groups.io" CC: "Yao, Jiewen" , "Wang, Jian J" , "Lu, Xiaoyu1" , "Jiang, Guomin" Subject: Re: [edk2-devel] [PATCH V2 1/3] CryptoPkg: Add EC support Thread-Topic: [edk2-devel] [PATCH V2 1/3] CryptoPkg: Add EC support Thread-Index: AQHYzXZLD+xvkEQOakOpSaeT6ojkS63qEX6AgACgK5A= Date: Thu, 22 Sep 2022 02:15:46 +0000 Message-ID: References: <9dcccc674996fa3fdcb8858e3609437e66ce82ac.1663735439.git.yi1.li@intel.com> In-Reply-To: Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ef5e4b5d-a754-4f29-d55d-08da9c405c78 x-ms-traffictypediagnostic: SA2PR11MB5132:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: U4u4jnxIkNuRO09idO0wJtI57zgj43HL4Dm1BdA7/RStf3jAb8J1xL5oxWp1c15Pgzgc5hoS809kkLh96UbbO2v4m5jG7O9ANa4LLK4A2E8oQZCtqKf8+xzHyrUDNoDVDxYZjslndedMf2QeA3WCmlovnS37d0hhLBUPUAHiZC/nZLdWULAMidQQL7fbzdzi1+sNOSQIWEXbXhsp84yOmLT81NfoPdF8CJjSK7m8WU2OhTWhW0Z2ek/K7ZE79fnSdXNvTbrcDc7MZOW3vXr8g7uzNe9KgsN6nz8cA3GaUnXMMfHWjXAVZqs3zp5Vwye91SY56Trzrg0wLoPyUz4xpoxpMus2vl9ESJetkLRVV7w5d8+UBye3MHBvsqZ7ojI2QrUVmaIswFXnrbTjP5EJZR2cDOKsNJ7ZyS8AndYqyO+lEGnjiFBD4c6TveAUT0OJeFcfWui8W8nkkGR3B7lD7UDIxA3YfhcD8bIqDoCHBJSeRnLoEmyQ1ylHx+xxCQFr7GBzah5j3csdsqgD1Sl6jb8N3/TfcDWDRihWgTQqrJa8z8NF5O7twlKSJG7wq8N7H7XBbenCXB7SXzyZ0VXF4xdfPJ1z4xYaaq8DxxNQHXWbzxk3C8ox/NWMl7g20trXxa7gE2stj/aglVZGgdVOXNdj7luZRWKjNuzBvjuGLG505v0M1t8NLRktXuePqUS2yZMQjuvSFvlOwfa3rqtpBhQbwsooO0FVTSqD0Vk0jHjkRwQUCi5sl2fJRYq4g2XU7bETh3cEvCsX1Rf0oRcpFU0Nkh2F+0QaVNhWw5LzXeZSAKk2SR8MV/TyLqKP7TlIMEOsL54PHji+zxqfTPVeAA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ1PR11MB6227.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(376002)(136003)(366004)(39860400002)(396003)(346002)(451199015)(478600001)(26005)(52536014)(66556008)(110136005)(54906003)(66446008)(76116006)(66946007)(33656002)(71200400001)(966005)(107886003)(64756008)(7696005)(53546011)(41300700001)(6506007)(86362001)(316002)(55016003)(8936002)(66476007)(4326008)(186003)(82960400001)(38100700002)(83380400001)(122000001)(5660300002)(9686003)(30864003)(19627235002)(38070700005)(8676002)(2906002)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?WGMvTXlOSmpQT0FrMXh1MHVXbU9UWnBEVzB0WWcwOFFMMk4xbmtmSTBLUkRR?= =?utf-8?B?Q1BsUVhGaE5sS2xqWVhvcjlXWUxYcmE0bmJvN2JDY1hlRXdXSnErRU4xVm9X?= =?utf-8?B?QmJzT1h2eWR1ZkxOOE5kQXNvWlZQNHhCVWg2S1RjR21lYVNnb2pmSFBKYy9J?= =?utf-8?B?ZGhIVWdLdTJwSFRhUXRzMjh4UDNhb1FOVE1Kc0ZnMHhXVUtmOFdwdFJ3VHli?= =?utf-8?B?bEF1dFVXVU1pOEJNMWpMeG5sdzIzZGdvanFHcGVPSDZQRG5uRTZBbFozTVhU?= =?utf-8?B?NWlVekR1MTlKWDYyemZ3RVJmOERNaDV3VFlkdGtpcHhKdGV3NHROSTk2U0dx?= =?utf-8?B?dUVQSXN0RW16Mk1qMnhZd3hLT3BvZ0xVTStTQlhaTHdrQWxOR1MxV3JsaVB4?= =?utf-8?B?Zm1kRFk3cC9DUkdrK3k3VUlqcytUYUFpM053blN4NVUyWm5LM2hKZXl5Z0VT?= =?utf-8?B?TVdrWXhQcWkxelVCNnNoNWJRS3VBbWoxVVFmRUFMZk1XQVNRR1B6WFBZbGVs?= =?utf-8?B?YmFCb3JnVlRuVGJKa1orNUhrWjkwNE9mbk5INE41WUJDYWs0alRKWWs5KzhG?= =?utf-8?B?ODRsekxiUHdmeUZLOTdNcVpWM0lGb0ZlQ2lHMm5hLzFDeklvWHdobHJ5NTFO?= =?utf-8?B?UWhwVmNZSjA5M3o0Q01DdURDNWZMRmNVYUFhYzFLZlBya1BZY0dwRmluMGVP?= =?utf-8?B?UUdCeTNUVDI5MFJqRlNlZGpzamNzdittL0U0aXJ3WE9icG0xTVRKYnpQZDMy?= =?utf-8?B?WkNiamEvdnJjNXVVUnE2aHRxU2NEZm9TUE5HVFZRMUp2cFQ1WG9FTGJqdjRr?= =?utf-8?B?U2FUa2NxdktnS1Zjc0lwNlAwYTlmdE1xMkh2eFBJSHBKWklob2ptdFBqdkw5?= =?utf-8?B?SFQ3MEtOY0NWaUxjWnRTYkh6Y3cxbzNFWCtSZ09xbU1QWFUxSGRVUmt3Qmpv?= =?utf-8?B?UU1md3BDZGdKdUFkeVR6NWRPcGwzWUF1cnFqQXBPQ2xQWFNxRmZpNmFwbk16?= =?utf-8?B?TDNGdVR1b0srSFA1bGNnTFFweCtFbnRTdWhFTEpoUGhKY25uVTJJYUlIQ29Z?= =?utf-8?B?R3JRcnFBRUpxRnNYMTluUWo2WGxqMlc0aWFaQ2NHOUpFaEpYeUxSOXNlY0lK?= =?utf-8?B?VzhwKzlVYVhLZ1lPY2VSZ1UyWWpmbW9KSk5ZUnNvMTArbkMwN3QzR3l0Y1JL?= =?utf-8?B?N2crMUFmQzV5SWhwQUZQN3hucFFPaXlvTkl5Rlp0aThxaWR3OWRxK3JNUU5i?= =?utf-8?B?b0ZxZ085bjZoSStsYzJoeUJlU0FwUWE2ZFFaL2l2ZjFLWWszOGhlMjRmc1g0?= =?utf-8?B?R2puOEl4SlRiZC9rajBSRmk5OUJhdTFZeUJxU3FvQ0YyR0NVTkVrUVNxTThW?= =?utf-8?B?cVlEdDJHOFlBOTd0UVluMUlKdzh2VFhwSkJubDRkcWtKTGQ3enVkYkdIRlI2?= =?utf-8?B?SjdYQ0U0OHJyL2JURll5QkJ2N3lvem9yQVZHK20vNE9NUEx3T3NFb0JQRjdq?= =?utf-8?B?MEV3Y0dhVHNndHBFSEMxbTRmUnZxcE10NEY0UWtJQ3BhWHZ6dVpUS3hQdlZ3?= =?utf-8?B?cnUwdmFVdUw3eXFPbCsvVUIxL3l6VmNFVm0waHQ0YUFlaWc4TGliWUFVaW1Z?= =?utf-8?B?S0VCbXpuSnhGN3VpUVlBNTVGOG1CTGdzajZEUFgrRXlyNVh5alpLOStBaUtX?= =?utf-8?B?RTdON1o0ZXBOdGIyZEVqcis1UEhYZHQ0Zyt2OFVaSUlBQytITkUvLzhLYldl?= =?utf-8?B?UGhDTFFHa3R5VnBlNXdSS2JjMlFyTDF5V2dVc2hPS2NheEN0cVBBbVMxdUtK?= =?utf-8?B?b01TbFVvK2k1RHNYZEx6SlJLVy9Nam0rWGNmNVJUeGE3cmppa1dDYTF4eEwx?= =?utf-8?B?emh5TlBVS3pRc0JXUVN6VXJEcnJzUFNPK1hLbmxqRFNacmtXV2NzZkhzSEFQ?= =?utf-8?B?WW53YjdlWC91V21LMVFqS2M1TEt5QmJyZjRTZ0JOS3dybHJyU1ltYWQvNHRv?= =?utf-8?B?c25iV2NkSXZWYWs0Z3hwaG9EbTZndy9xenBhK1JPRm5kTUlwSmN5bkpjc0Iz?= =?utf-8?B?NUprYll4MFZwTW5saEpoUWNFd1lKSENmamtDVDFsb2hQdDF6TnFubXQwckV0?= =?utf-8?Q?HeJQ=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SJ1PR11MB6227.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ef5e4b5d-a754-4f29-d55d-08da9c405c78 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Sep 2022 02:15:46.9140 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 2vMSl/OMKWdvb7OQd42USyVpwAEstR7i7romnBNzYnnwXWTjlKDA2aSJa8Dxc5aLyIqjZNWGis+xcxdylMxagw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB5132 Return-Path: yi1.li@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgTWlrZSwNClRoYW5rcyBmb3IgcmV2aWV3Lg0KDQpFdmVuIFBDRF9DUllQVE9fU0VSVklDRV9G QU1JTFlfRU5BQkxFIGlzIHNldCB0byAwLCBDcnlwdG9FYy5jIHdpbGwgYWxzbyBiZSBjb21waWxl ZCBhbmQgdGhyb3cgYnVpbGQgZXJyb3I6DQoNCmQ6XHdvcmtzcGFjZVx0aWFub2NvcmVcZWRrMlxD cnlwdG9Qa2dcTGlicmFyeVxCYXNlQ3J5cHRMaWJcUGtcQ3J5cHRFYy5jKDc3KTogZXJyb3IgQzIy MjA6IHRoZSBmb2xsb3dpbmcgd2FybmluZyBpcyB0cmVhdGVkIGFzIGFuIGVycm9yDQogICAgICAg IDEgZmlsZShzKSBjb3BpZWQuDQpkOlx3b3Jrc3BhY2VcdGlhbm9jb3JlXGVkazJcQ3J5cHRvUGtn XExpYnJhcnlcQmFzZUNyeXB0TGliXFBrXENyeXB0RWMuYyg3Nyk6IHdhcm5pbmcgQzQwMTM6ICdF Q19HUk9VUF9uZXdfYnlfY3VydmVfbmFtZScgdW5kZWZpbmVkOyBhc3N1bWluZyBleHRlcm4gcmV0 dXJuaW5nIGludA0KZDpcd29ya3NwYWNlXHRpYW5vY29yZVxlZGsyXENyeXB0b1BrZ1xMaWJyYXJ5 XEJhc2VDcnlwdExpYlxQa1xDcnlwdEVjLmMoNzcpOiB3YXJuaW5nIEM0MDQ3OiAncmV0dXJuJzog J3ZvaWQgKicgZGlmZmVycyBpbiBsZXZlbHMgb2YgaW5kaXJlY3Rpb24gZnJvbSAnaW50Jw0KZDpc d29ya3NwYWNlXHRpYW5vY29yZVxlZGsyXENyeXB0b1BrZ1xMaWJyYXJ5XEJhc2VDcnlwdExpYlxQ a1xDcnlwdEVjLmMoMTA1KTogd2FybmluZyBDNDAxMzogJ0VDX0dST1VQX2dldF9jdXJ2ZScgdW5k ZWZpbmVkOyBhc3N1bWluZyBleHRlcm4gcmV0dXJuaW5nIGludA0KDQpJIHRoaW5rIHRoZSByb290 IGNhdXNlIGlzIHRoYXQgd2UgaGF2ZSBlbmFibGVkIGNvbmRpdGlvbmFsIGVjIGluIE9wZW5zc2xM aWIuaW5mIGJlZm9yZSBieSBQY2RPcGVuc3NsRWNFbmFibGVkLA0KaHR0cHM6Ly9naXRodWIuY29t L3RpYW5vY29yZS9lZGsyL2Jsb2IvMmMxN2Q2NzZlNDAyZDc1YTNhNjc0NDk5MzQyZjdkZGFjY2Yz ODdiZC9DcnlwdG9Qa2cvTGlicmFyeS9PcGVuc3NsTGliL09wZW5zc2xMaWIuaW5mI0wyMDItTDIz OA0KIGlmIFBjZE9wZW5zc2xFY0VuYWJsZWQgbm90IHRydWUsIGFsbCBlYyBmaWxlcyB3aWxsIG5v dCBiZSBjb21waWxlZC4NClRoaXMgd2lsbCBzYXZlIDIwMCtrYiBtZW1vcnkgb24gcGxhdGZvcm1z IHdoaWNoIHVzZSBkeGUgZHJpdmVyIGJ1dCBkbyBub3QgbmVlZCBlYyBmZWF0dXJlLg0KDQpTbyBJ IGFkZCB0aGlzIFBDRCB0byBCYXNlQ3J5cHRMaWIuaW5mIGFsc28gdG8gYXZvaWQgYnVpbGQgZXJy b3IsIE5vdCBzdXJlIGlmIHRoZXJlIGlzIGFueSBvdGhlciB3YXksIG90aGVyIGJldHRlciBpZGVh cyBhcmUgd2VsY29tZS4NCg0KVGhhbmtzLA0KWWkNCg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t LS0NCkZyb206IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4g DQpTZW50OiBUaHVyc2RheSwgU2VwdGVtYmVyIDIyLCAyMDIyIDEyOjIyIEFNDQpUbzogZGV2ZWxA ZWRrMi5ncm91cHMuaW87IExpLCBZaTEgPHlpMS5saUBpbnRlbC5jb20+OyBLaW5uZXksIE1pY2hh ZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQpDYzogWWFvLCBKaWV3ZW4gPGppZXdl bi55YW9AaW50ZWwuY29tPjsgV2FuZywgSmlhbiBKIDxqaWFuLmoud2FuZ0BpbnRlbC5jb20+OyBM dSwgWGlhb3l1MSA8eGlhb3l1MS5sdUBpbnRlbC5jb20+OyBKaWFuZywgR3VvbWluIDxndW9taW4u amlhbmdAaW50ZWwuY29tPg0KU3ViamVjdDogUkU6IFtlZGsyLWRldmVsXSBbUEFUQ0ggVjIgMS8z XSBDcnlwdG9Qa2c6IEFkZCBFQyBzdXBwb3J0DQoNCkNvbW1lbnRzIGVtYmVkZGVkIGJlbG93Lg0K DQpNaWtlDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogZGV2ZWxAZWRr Mi5ncm91cHMuaW8gPGRldmVsQGVkazIuZ3JvdXBzLmlvPiBPbiBCZWhhbGYgT2YgeWkxIGxpDQo+ IFNlbnQ6IFR1ZXNkYXksIFNlcHRlbWJlciAyMCwgMjAyMiA5OjU1IFBNDQo+IFRvOiBkZXZlbEBl ZGsyLmdyb3Vwcy5pbw0KPiBDYzogTGksIFlpMSA8eWkxLmxpQGludGVsLmNvbT47IFlhbywgSmll d2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbT47IFdhbmcsIEppYW4gSiA8amlhbi5qLndhbmdAaW50 ZWwuY29tPjsgTHUsIFhpYW95dTENCj4gPHhpYW95dTEubHVAaW50ZWwuY29tPjsgSmlhbmcsIEd1 b21pbiA8Z3VvbWluLmppYW5nQGludGVsLmNvbT4NCj4gU3ViamVjdDogW2VkazItZGV2ZWxdIFtQ QVRDSCBWMiAxLzNdIENyeXB0b1BrZzogQWRkIEVDIHN1cHBvcnQNCj4gDQo+IFJFRjogaHR0cHM6 Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD0zODI4DQo+IA0KPiBUaGlz IHBhdGNoIGlzIHVzZWQgdG8gYWRkIENyeXB0RWMgbGlicmFyeSwgd2hpY2ggaXMgd3JhcHBlZA0K PiBvdmVyIE9wZW5TU0wuDQo+IA0KPiBDYzogSmlld2VuIFlhbyA8amlld2VuLnlhb0BpbnRlbC5j b20+DQo+IENjOiBKaWFuIEogV2FuZyA8amlhbi5qLndhbmdAaW50ZWwuY29tPg0KPiBDYzogWGlh b3l1IEx1IDx4aWFveXUxLmx1QGludGVsLmNvbT4NCj4gQ2M6IEd1b21pbiBKaWFuZyA8Z3VvbWlu LmppYW5nQGludGVsLmNvbT4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IFlpIExpIDx5aTEubGlAaW50 ZWwuY29tPg0KPiAtLS0NCj4gIENyeXB0b1BrZy9JbmNsdWRlL0xpYnJhcnkvQmFzZUNyeXB0TGli LmggICAgICB8IDQyNCArKysrKysrKysrDQo+ICAuLi4vTGlicmFyeS9CYXNlQ3J5cHRMaWIvQmFz ZUNyeXB0TGliLmluZiAgICAgfCAgIDIgKw0KPiAgLi4uL0xpYnJhcnkvQmFzZUNyeXB0TGliL1Bl aUNyeXB0TGliLmluZiAgICAgIHwgICAxICsNCj4gIENyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlw dExpYi9Qay9DcnlwdEVjLmMgICB8IDc2NSArKysrKysrKysrKysrKysrKysNCj4gIC4uLi9MaWJy YXJ5L0Jhc2VDcnlwdExpYi9Qay9DcnlwdEVjTnVsbC5jICAgICB8IDQ5NiArKysrKysrKysrKysN Cj4gIC4uLi9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9TbW1DcnlwdExpYi5pbmYgICAgICB8ICAgMSAr DQo+ICAuLi4vQmFzZUNyeXB0TGliTnVsbC9CYXNlQ3J5cHRMaWJOdWxsLmluZiAgICAgfCAgIDEg Kw0KPiAgLi4uL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9Qay9DcnlwdEVjTnVsbC5jIHwgNDk2 ICsrKysrKysrKysrKw0KPiAgOCBmaWxlcyBjaGFuZ2VkLCAyMTg2IGluc2VydGlvbnMoKykNCj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBDcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvUGsvQ3J5 cHRFYy5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0 TGliL1BrL0NyeXB0RWNOdWxsLmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBDcnlwdG9Qa2cvTGli cmFyeS9CYXNlQ3J5cHRMaWJOdWxsL1BrL0NyeXB0RWNOdWxsLmMNCj4gDQo+IGRpZmYgLS1naXQg YS9DcnlwdG9Qa2cvSW5jbHVkZS9MaWJyYXJ5L0Jhc2VDcnlwdExpYi5oIGIvQ3J5cHRvUGtnL0lu Y2x1ZGUvTGlicmFyeS9CYXNlQ3J5cHRMaWIuaA0KPiBpbmRleCBiMjUzOTIzZGQ4Li5kNzRmYzIx YzFlIDEwMDY0NA0KPiAtLS0gYS9DcnlwdG9Qa2cvSW5jbHVkZS9MaWJyYXJ5L0Jhc2VDcnlwdExp Yi5oDQo+ICsrKyBiL0NyeXB0b1BrZy9JbmNsdWRlL0xpYnJhcnkvQmFzZUNyeXB0TGliLmgNCj4g QEAgLTE0LDYgKzE0LDEzIEBAIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2Ut UGF0ZW50DQo+IA0KPiAgI2luY2x1ZGUgPFVlZmkvVWVmaUJhc2VUeXBlLmg+DQo+IA0KPiArI2Rl ZmluZSBDUllQVE9fTklEX05VTEwgIDB4MDAwMA0KPiArDQo+ICsvLyBLZXkgRXhjaGFuZ2UNCj4g KyNkZWZpbmUgQ1JZUFRPX05JRF9TRUNQMjU2UjEgIDB4MDIwNA0KPiArI2RlZmluZSBDUllQVE9f TklEX1NFQ1AzODRSMSAgMHgwMjA1DQo+ICsjZGVmaW5lIENSWVBUT19OSURfU0VDUDUyMVIxICAw eDAyMDYNCj4gKw0KPiAgLy8vDQo+ICAvLy8gTUQ1IGRpZ2VzdCBzaXplIGluIGJ5dGVzDQo+ICAv Ly8NCj4gQEAgLTI4NTAsNCArMjg1Nyw0MjEgQEAgQmlnTnVtQWRkTW9kICgNCj4gICAgT1VUIFZP SUQgICAgICAgKkJuUmVzDQo+ICAgICk7DQo+IA0KPiArLy8gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KPiArLy8gICAgQmFzaWMgRWxsaXB0aWMgQ3VydmUgUHJpbWl0aXZlcw0KPiArLy8g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiArDQo+ICsvKioNCj4gKyAgSW5pdGlhbGl6 ZSBuZXcgb3BhcXVlIEVjR3JvdXAgb2JqZWN0LiBUaGlzIG9iamVjdCByZXByZXNlbnRzIGFuIEVD IGN1cnZlIGFuZA0KPiArICBhbmQgaXMgdXNlZCBmb3IgY2FsY3VsYXRpb24gd2l0aGluIHRoaXMg Z3JvdXAuIFRoaXMgb2JqZWN0IHNob3VsZCBiZSBmcmVlZA0KPiArICB1c2luZyBFY0dyb3VwRnJl ZSgpIGZ1bmN0aW9uLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENyeXB0b05pZCAgIElkZW50aWZ5 aW5nIG51bWJlciBmb3IgdGhlIEVDQyBjdXJ2ZSAoRGVmaW5lZCBpbg0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICBCYXNlQ3J5cHRMaWIuaCkuDQo+ICsNCj4gKyAgQHJldHZhbCBFY0dyb3Vw IG9iamVjdCAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBOVUxMICAgICAgICAgICAgT24gZmFp bHVyZS4NCj4gKyoqLw0KPiArVk9JRCAqDQo+ICtFRklBUEkNCj4gK0VjR3JvdXBJbml0ICgNCj4g KyAgSU4gVUlOVE4gIENyeXB0b05pZA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgR2V0IEVD IGN1cnZlIHBhcmFtZXRlcnMuIFdoaWxlIGVsbGlwdGljIGN1cnZlIGVxdWF0aW9uIGlzIFleMiBt b2QgUCA9IChYXjMgKyBBWCArIEIpIE1vZCBQLg0KPiArICBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0 IHRoZSBwcm92aWRlZCBCaWcgTnVtYmVyIG9iamVjdHMgIHRvIHRoZSBjb3JyZXNwb25kaW5nDQo+ ICsgIHZhbHVlcy4gVGhlIGNhbGxlciBuZWVkcyB0byBtYWtlIHN1cmUgYWxsIHRoZSAib3V0IiBC aWdOdW1iZXIgcGFyYW1ldGVycw0KPiArICBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgICBFQyBncm91cCBvYmplY3QuDQo+ICsgIEBwYXJh bVtvdXRdIEJuUHJpbWUgICAgR3JvdXAgcHJpbWUgbnVtYmVyLg0KPiArICBAcGFyYW1bb3V0XSBC bkEgICAgICAgIEEgY29lZmZpY2llbnQuDQo+ICsgIEBwYXJhbVtvdXRdIEJuQiAgICAgICAgQiBj b2VmZmljaWVudC4NCj4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgICBCTiBjb250ZXh0Lg0KPiAr DQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFsIEZB TFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4g K0VjR3JvdXBHZXRDdXJ2ZSAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiArICBP VVQgVk9JRCAgICAgICAqQm5QcmltZSwNCj4gKyAgT1VUIFZPSUQgICAgICAgKkJuQSwNCj4gKyAg T1VUIFZPSUQgICAgICAgKkJuQiwNCj4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ICsgICk7 DQo+ICsNCj4gKy8qKg0KPiArICBHZXQgRUMgZ3JvdXAgb3JkZXIuDQo+ICsgIFRoaXMgZnVuY3Rp b24gd2lsbCBzZXQgdGhlIHByb3ZpZGVkIEJpZyBOdW1iZXIgb2JqZWN0IHRvIHRoZSBjb3JyZXNw b25kaW5nDQo+ICsgIHZhbHVlLiBUaGUgY2FsbGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSB0aGF0IHRo ZSAib3V0IiBCaWdOdW1iZXIgcGFyYW1ldGVyDQo+ICsgIGlzIHByb3Blcmx5IGluaXRpYWxpemVk Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ICsg IEBwYXJhbVtvdXRdIEJuT3JkZXIgICBHcm91cCBwcmltZSBudW1iZXIuDQo+ICsNCj4gKyAgQHJl dHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAg ICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNHcm91cEdl dE9yZGVyICgNCj4gKyAgSU4gVk9JRCAgICpFY0dyb3VwLA0KPiArICBPVVQgVk9JRCAgKkJuT3Jk ZXINCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQg RUMgZ3JvdXAgb2JqZWN0IHVzaW5nIEVjR3JvdXBJbml0KCkuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgRWNHcm91cCAgIEVDIGdyb3VwIG9iamVjdCB0byBmcmVlLg0KPiArKiovDQo+ICtWT0lEDQo+ ICtFRklBUEkNCj4gK0VjR3JvdXBGcmVlICgNCj4gKyAgSU4gVk9JRCAgKkVjR3JvdXANCj4gKyAg KTsNCj4gKw0KPiArLyoqDQo+ICsgIEluaXRpYWxpemUgbmV3IG9wYXF1ZSBFQyBQb2ludCBvYmpl Y3QuIFRoaXMgb2JqZWN0IHJlcHJlc2VudHMgYW4gRUMgcG9pbnQNCj4gKyAgd2l0aGluIHRoZSBn aXZlbiBFQyBncm91cCAoY3VydmUpLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVDIEdyb3VwLCBw cm9wZXJseSBpbml0aWFsaXplZCB1c2luZyBFY0dyb3VwSW5pdCgpLg0KPiArDQo+ICsgIEByZXR2 YWwgRUMgUG9pbnQgb2JqZWN0ICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFsIE5VTEwgICAgICAg ICAgICAgT24gZmFpbHVyZS4NCj4gKyoqLw0KPiArVk9JRCAqDQo+ICtFRklBUEkNCj4gK0VjUG9p bnRJbml0ICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXANCj4gKyAgKTsNCj4gKw0KPiAr LyoqDQo+ICsgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgRUMgUG9pbnQgb2JqZWN0IHVzaW5n IEVjUG9pbnRJbml0KCkuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgIEVDIFBvaW50 IHRvIGZyZWUuDQo+ICsgIEBwYXJhbVtpbl0gIENsZWFyICAgICBUUlVFIGlmZiB0aGUgbWVtb3J5 IHNob3VsZCBiZSBjbGVhcmVkLg0KPiArKiovDQo+ICtWT0lEDQo+ICtFRklBUEkNCj4gK0VjUG9p bnREZUluaXQgKA0KPiArICBJTiBWT0lEICAgICAqRWNQb2ludCwNCj4gKyAgSU4gQk9PTEVBTiAg Q2xlYXINCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIEdldCBFQyBwb2ludCBhZmZpbmUgKHgs eSkgY29vcmRpbmF0ZXMuDQo+ICsgIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIHByb3ZpZGVk IEJpZyBOdW1iZXIgb2JqZWN0cyB0byB0aGUgY29ycmVzcG9uZGluZw0KPiArICB2YWx1ZXMuIFRo ZSBjYWxsZXIgbmVlZHMgdG8gbWFrZSBzdXJlIGFsbCB0aGUgIm91dCIgQmlnTnVtYmVyIHBhcmFt ZXRlcnMNCj4gKyAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIEVjR3JvdXAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiArICBAcGFyYW1baW5dICBFY1BvaW50 ICAgIEVDIHBvaW50IG9iamVjdC4NCj4gKyAgQHBhcmFtW291dF0gQm5YICAgICAgICBYIGNvb3Jk aW5hdGUuDQo+ICsgIEBwYXJhbVtvdXRdIEJuWSAgICAgICAgWSBjb29yZGluYXRlLg0KPiArICBA cGFyYW1baW5dICBCbkN0eCAgICAgIEJOIGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdD b250ZXh0KCkuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0JPT0xFQU4N Cj4gK0VGSUFQSQ0KPiArRWNQb2ludEdldEFmZmluZUNvb3JkaW5hdGVzICgNCj4gKyAgSU4gQ09O U1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50LA0KPiArICBP VVQgVk9JRCAgICAgICAqQm5YLA0KPiArICBPVVQgVk9JRCAgICAgICAqQm5ZLA0KPiArICBJTiBW T0lEICAgICAgICAqQm5DdHgNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFNldCBFQyBwb2lu dCBhZmZpbmUgKHgseSkgY29vcmRpbmF0ZXMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNHcm91 cCAgICBFQyBncm91cCBvYmplY3QuDQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICAgRUMgcG9p bnQgb2JqZWN0Lg0KPiArICBAcGFyYW1baW5dICBCblggICAgICAgIFggY29vcmRpbmF0ZS4NCj4g KyAgQHBhcmFtW2luXSAgQm5ZICAgICAgICBZIGNvb3JkaW5hdGUuDQo+ICsgIEBwYXJhbVtpbl0g IEJuQ3R4ICAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4N Cj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZh bCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJ DQo+ICtFY1BvaW50U2V0QWZmaW5lQ29vcmRpbmF0ZXMgKA0KPiArICBJTiBDT05TVCBWT0lEICAq RWNHcm91cCwNCj4gKyAgSU4gVk9JRCAgICAgICAgKkVjUG9pbnQsDQo+ICsgIElOIENPTlNUIFZP SUQgICpCblgsDQo+ICsgIElOIENPTlNUIFZPSUQgICpCblksDQo+ICsgIElOIFZPSUQgICAgICAg ICpCbkN0eA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgRUMgUG9pbnQgYWRkaXRpb24uIEVj UG9pbnRSZXN1bHQgPSBFY1BvaW50QSArIEVjUG9pbnRCLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IEVjR3JvdXAgICAgICAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiArICBAcGFyYW1bb3V0XSBFY1Bv aW50UmVzdWx0ICAgIEVDIHBvaW50IHRvIGhvbGQgdGhlIHJlc3VsdC4gVGhlIHBvaW50IHNob3Vs ZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHByb3Blcmx5IGluaXRpYWxp emVkLg0KPiArICBAcGFyYW1baW5dICBFY1BvaW50QSAgICAgICAgIEVDIFBvaW50Lg0KPiArICBA cGFyYW1baW5dICBFY1BvaW50QiAgICAgICAgIEVDIFBvaW50Lg0KPiArICBAcGFyYW1baW5dICBC bkN0eCAgICAgICAgICAgIEJOIGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0 KCkuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEBy ZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VG SUFQSQ0KPiArRWNQb2ludEFkZCAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiAr ICBPVVQgVk9JRCAgICAgICAqRWNQb2ludFJlc3VsdCwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVj UG9pbnRBLA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNQb2ludEIsDQo+ICsgIElOIFZPSUQgICAg ICAgICpCbkN0eA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVmFyaWFibGUgRUMgcG9pbnQg bXVsdGlwbGljYXRpb24uIEVjUG9pbnRSZXN1bHQgPSBFY1BvaW50ICogQm5QU2NhbGFyLg0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgICAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiAr ICBAcGFyYW1bb3V0XSBFY1BvaW50UmVzdWx0ICAgIEVDIHBvaW50IHRvIGhvbGQgdGhlIHJlc3Vs dC4gVGhlIHBvaW50IHNob3VsZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJl IHByb3Blcmx5IGluaXRpYWxpemVkLg0KPiArICBAcGFyYW1baW5dICBFY1BvaW50ICAgICAgICAg IEVDIFBvaW50Lg0KPiArICBAcGFyYW1baW5dICBCblBTY2FsYXIgICAgICAgIFAgU2NhbGFyLg0K PiArICBAcGFyYW1baW5dICBCbkN0eCAgICAgICAgICAgIEJOIGNvbnRleHQsIGNyZWF0ZWQgd2l0 aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9u IHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ICsqKi8N Cj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNQb2ludE11bCAoDQo+ICsgIElOIENPTlNUIFZP SUQgICpFY0dyb3VwLA0KPiArICBPVVQgVk9JRCAgICAgICAqRWNQb2ludFJlc3VsdCwNCj4gKyAg SU4gQ09OU1QgVk9JRCAgKkVjUG9pbnQsDQo+ICsgIElOIENPTlNUIFZPSUQgICpCblBTY2FsYXIs DQo+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAg Q2FsY3VsYXRlIHRoZSBpbnZlcnNlIG9mIHRoZSBzdXBwbGllZCBFQyBwb2ludC4NCj4gKw0KPiAr ICBAcGFyYW1baW5dICAgICBFY0dyb3VwICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiArICBAcGFyYW1b aW4sb3V0XSBFY1BvaW50ICAgRUMgcG9pbnQgdG8gaW52ZXJ0Lg0KPiArICBAcGFyYW1baW5dICAg ICBCbkN0eCAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4N Cj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZh bCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJ DQo+ICtFY1BvaW50SW52ZXJ0ICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsg IElOIE9VVCBWT0lEICAgICpFY1BvaW50LA0KPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4g KyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrIGlmIHRoZSBzdXBwbGllZCBwb2ludCBpcyBv biBFQyBjdXJ2ZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgRUMgZ3JvdXAgb2Jq ZWN0Lg0KPiArICBAcGFyYW1baW5dICBFY1BvaW50ICAgRUMgcG9pbnQgdG8gY2hlY2suDQo+ICsg IEBwYXJhbVtpbl0gIEJuQ3R4ICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3 Q29udGV4dCgpLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBjdXJ2ZS4NCj4g KyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0K PiArRUZJQVBJDQo+ICtFY1BvaW50SXNPbkN1cnZlICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVj R3JvdXAsDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50LA0KPiArICBJTiBWT0lEICAgICAg ICAqQm5DdHgNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrIGlmIHRoZSBzdXBwbGll ZCBwb2ludCBpcyBhdCBpbmZpbml0eS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAg RUMgZ3JvdXAgb2JqZWN0Lg0KPiArICBAcGFyYW1baW5dICBFY1BvaW50ICAgRUMgcG9pbnQgdG8g Y2hlY2suDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIEF0IGluZmluaXR5Lg0KPiAr ICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ ICtFRklBUEkNCj4gK0VjUG9pbnRJc0F0SW5maW5pdHkgKA0KPiArICBJTiBDT05TVCBWT0lEICAq RWNHcm91cCwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnQNCj4gKyAgKTsNCj4gKw0KPiAr LyoqDQo+ICsgIENoZWNrIGlmIEVDIHBvaW50cyBhcmUgZXF1YWwuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgRWNHcm91cCAgIEVDIGdyb3VwIG9iamVjdC4NCj4gKyAgQHBhcmFtW2luXSAgRWNQb2lu dEEgIEVDIHBvaW50IEEuDQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnRCICBFQyBwb2ludCBCLg0K PiArICBAcGFyYW1baW5dICBCbkN0eCAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051 bU5ld0NvbnRleHQoKS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgQSA9PSBCLg0K PiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtCT09MRUFO DQo+ICtFRklBUEkNCj4gK0VjUG9pbnRFcXVhbCAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY0dy b3VwLA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNQb2ludEEsDQo+ICsgIElOIENPTlNUIFZPSUQg ICpFY1BvaW50QiwNCj4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ICsgICk7DQo+ICsNCj4g Ky8qKg0KPiArICBTZXQgRUMgcG9pbnQgY29tcHJlc3NlZCBjb29yZGluYXRlcy4gUG9pbnRzIGNh biBiZSBkZXNjcmliZWQgaW4gdGVybXMgb2YNCj4gKyAgdGhlaXIgY29tcHJlc3NlZCBjb29yZGlu YXRlcy4gRm9yIGEgcG9pbnQgKHgsIHkpLCBmb3IgYW55IGdpdmVuIHZhbHVlIGZvciB4DQo+ICsg IHN1Y2ggdGhhdCB0aGUgcG9pbnQgaXMgb24gdGhlIGN1cnZlIHRoZXJlIHdpbGwgb25seSBldmVy IGJlIHR3byBwb3NzaWJsZQ0KPiArICB2YWx1ZXMgZm9yIHkuIFRoZXJlZm9yZSwgYSBwb2ludCBj YW4gYmUgc2V0IHVzaW5nIHRoaXMgZnVuY3Rpb24gd2hlcmUgQm5YIGlzDQo+ICsgIHRoZSB4IGNv b3JkaW5hdGUgYW5kIFlCaXQgaXMgYSB2YWx1ZSAwIG9yIDEgdG8gaWRlbnRpZnkgd2hpY2ggb2Yg dGhlIHR3bw0KPiArICBwb3NzaWJsZSB2YWx1ZXMgZm9yIHkgc2hvdWxkIGJlIHVzZWQuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgICBFQyBncm91cCBvYmplY3QuDQo+ICsgIEBwYXJh bVtpbl0gIEVjUG9pbnQgICAgRUMgUG9pbnQuDQo+ICsgIEBwYXJhbVtpbl0gIEJuWCAgICAgICAg WCBjb29yZGluYXRlLg0KPiArICBAcGFyYW1baW5dICBZQml0ICAgICAgIDAgb3IgMSB0byBpZGVu dGlmeSB3aGljaCBZIHZhbHVlIGlzIHVzZWQuDQo+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICAg Qk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gKw0KPiArICBA cmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBGQUxTRSAgICAg ICAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY1BvaW50 U2V0Q29tcHJlc3NlZENvb3JkaW5hdGVzICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAs DQo+ICsgIElOIFZPSUQgICAgICAgICpFY1BvaW50LA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5Y LA0KPiArICBJTiBVSU5UOCAgICAgICBZQml0LA0KPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgN Cj4gKyAgKTsNCj4gKw0KPiArLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiArLy8g ICAgRWxsaXB0aWMgQ3VydmUgRGlmZmllIEhlbGxtYW4gUHJpbWl0aXZlcw0KPiArLy8gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KPiArDQo+ICsvKioNCj4gKyAgQWxsb2NhdGVzIGFuZCBJ bml0aWFsaXplcyBvbmUgRWxsaXB0aWMgQ3VydmUgQ29udGV4dCBmb3Igc3Vic2VxdWVudCB1c2UN Cj4gKyAgd2l0aCB0aGUgTklELg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIE5pZCBjaXBoZXIgTklE DQo+ICsgIEByZXR1cm4gICAgIFBvaW50ZXIgdG8gdGhlIEVsbGlwdGljIEN1cnZlIENvbnRleHQg dGhhdCBoYXMgYmVlbiBpbml0aWFsaXplZC4NCj4gKyAgICAgICAgICAgICAgSWYgdGhlIGFsbG9j YXRpb25zIGZhaWxzLCBFY05ld0J5TmlkKCkgcmV0dXJucyBOVUxMLg0KPiArKiovDQo+ICtWT0lE ICoNCj4gK0VGSUFQSQ0KPiArRWNOZXdCeU5pZCAoDQo+ICsgIElOIFVJTlROICBOaWQNCj4gKyAg KTsNCj4gKw0KPiArLyoqDQo+ICsgIFJlbGVhc2UgdGhlIHNwZWNpZmllZCBFQyBjb250ZXh0Lg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gIEVjQ29udGV4dCAgUG9pbnRlciB0byB0aGUgRUMgY29udGV4 dCB0byBiZSByZWxlYXNlZC4NCj4gKyoqLw0KPiArVk9JRA0KPiArRUZJQVBJDQo+ICtFY0ZyZWUg KA0KPiArICBJTiAgVk9JRCAgKkVjQ29udGV4dA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAg R2VuZXJhdGVzIEVDIGtleSBhbmQgcmV0dXJucyBFQyBwdWJsaWMga2V5IChYLCBZKSwgUGxlYXNl IG5vdGUsIHRoaXMgZnVuY3Rpb24gdXNlcw0KPiArICBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5l cmF0b3IuIFRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmUgUmFuZG9tU2VlZCgpDQo+ICsgIGZ1bmN0 aW9uIHdhcyBwcm9wZXJseSBjYWxsZWQgYmVmb3JlLg0KPiArICBUaGUgRWMgY29udGV4dCBzaG91 bGQgYmUgY29ycmVjdGx5IGluaXRpYWxpemVkIGJ5IEVjTmV3QnlOaWQuDQo+ICsgIFRoaXMgZnVu Y3Rpb24gZ2VuZXJhdGVzIHJhbmRvbSBzZWNyZXQsIGFuZCBjb21wdXRlcyB0aGUgcHVibGljIGtl eSAoWCwgWSksIHdoaWNoIGlzDQo+ICsgIHJldHVybmVkIHZpYSBwYXJhbWV0ZXIgUHVibGljLCBQ dWJsaWNTaXplLg0KPiArICBYIGlzIHRoZSBmaXJzdCBoYWxmIG9mIFB1YmxpYyB3aXRoIHNpemUg YmVpbmcgUHVibGljU2l6ZSAvIDIsDQo+ICsgIFkgaXMgdGhlIHNlY29uZCBoYWxmIG9mIFB1Ymxp YyB3aXRoIHNpemUgYmVpbmcgUHVibGljU2l6ZSAvIDIuDQo+ICsgIEVDIGNvbnRleHQgaXMgdXBk YXRlZCBhY2NvcmRpbmdseS4NCj4gKyAgSWYgdGhlIFB1YmxpYyBidWZmZXIgaXMgdG9vIHNtYWxs IHRvIGhvbGQgdGhlIHB1YmxpYyBYLCBZLCBGQUxTRSBpcyByZXR1cm5lZCBhbmQNCj4gKyAgUHVi bGljU2l6ZSBpcyBzZXQgdG8gdGhlIHJlcXVpcmVkIGJ1ZmZlciBzaXplIHRvIG9idGFpbiB0aGUg cHVibGljIFgsIFkuDQo+ICsgIEZvciBQLTI1NiwgdGhlIFB1YmxpY1NpemUgaXMgNjQuIEZpcnN0 IDMyLWJ5dGUgaXMgWCwgU2Vjb25kIDMyLWJ5dGUgaXMgWS4NCj4gKyAgRm9yIFAtMzg0LCB0aGUg UHVibGljU2l6ZSBpcyA5Ni4gRmlyc3QgNDgtYnl0ZSBpcyBYLCBTZWNvbmQgNDgtYnl0ZSBpcyBZ Lg0KPiArICBGb3IgUC01MjEsIHRoZSBQdWJsaWNTaXplIGlzIDEzMi4gRmlyc3QgNjYtYnl0ZSBp cyBYLCBTZWNvbmQgNjYtYnl0ZSBpcyBZLg0KPiArICBJZiBFY0NvbnRleHQgaXMgTlVMTCwgdGhl biByZXR1cm4gRkFMU0UuDQo+ICsgIElmIFB1YmxpY1NpemUgaXMgTlVMTCwgdGhlbiByZXR1cm4g RkFMU0UuDQo+ICsgIElmIFB1YmxpY1NpemUgaXMgbGFyZ2UgZW5vdWdoIGJ1dCBQdWJsaWMgaXMg TlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgRWNDb250ZXh0 ICAgICAgUG9pbnRlciB0byB0aGUgRUMgY29udGV4dC4NCj4gKyAgQHBhcmFtW291dF0gICAgICBQ dWJsaWNLZXkgICAgICBQb2ludGVyIHRvIHQgYnVmZmVyIHRvIHJlY2VpdmUgZ2VuZXJhdGVkIHB1 YmxpYyBYLFkuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgUHVibGljS2V5U2l6ZSAgT24gaW5wdXQs IHRoZSBzaXplIG9mIFB1YmxpYyBidWZmZXIgaW4gYnl0ZXMuDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT24gb3V0cHV0LCB0aGUgc2l6ZSBvZiBkYXRhIHJldHVybmVkIGlu IFB1YmxpYyBidWZmZXIgaW4gYnl0ZXMuDQo+ICsgIEByZXR2YWwgVFJVRSAgIEVDIHB1YmxpYyBY LFkgZ2VuZXJhdGlvbiBzdWNjZWVkZWQuDQo+ICsgIEByZXR2YWwgRkFMU0UgIEVDIHB1YmxpYyBY LFkgZ2VuZXJhdGlvbiBmYWlsZWQuDQo+ICsgIEByZXR2YWwgRkFMU0UgIFB1YmxpY0tleVNpemUg aXMgbm90IGxhcmdlIGVub3VnaC4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtF Y0dlbmVyYXRlS2V5ICgNCj4gKyAgSU4gT1VUICBWT0lEICAgKkVjQ29udGV4dCwNCj4gKyAgT1VU ICAgICBVSU5UOCAgKlB1YmxpY0tleSwNCj4gKyAgSU4gT1VUICBVSU5UTiAgKlB1YmxpY0tleVNp emUNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIEdldHMgdGhlIHB1YmxpYyBrZXkgY29tcG9u ZW50IGZyb20gdGhlIGVzdGFibGlzaGVkIEVDIGNvbnRleHQuDQo+ICsgIFRoZSBFYyBjb250ZXh0 IHNob3VsZCBiZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgYnkgRWNOZXdCeU5pZCwgYW5kIHN1Y2Nl c3NmdWxseQ0KPiArICBnZW5lcmF0ZSBrZXkgcGFpciBmcm9tIEVjR2VuZXJhdGVLZXkoKS4NCj4g KyAgRm9yIFAtMjU2LCB0aGUgUHVibGljU2l6ZSBpcyA2NC4gRmlyc3QgMzItYnl0ZSBpcyBYLCBT ZWNvbmQgMzItYnl0ZSBpcyBZLg0KPiArICBGb3IgUC0zODQsIHRoZSBQdWJsaWNTaXplIGlzIDk2 LiBGaXJzdCA0OC1ieXRlIGlzIFgsIFNlY29uZCA0OC1ieXRlIGlzIFkuDQo+ICsgIEZvciBQLTUy MSwgdGhlIFB1YmxpY1NpemUgaXMgMTMyLiBGaXJzdCA2Ni1ieXRlIGlzIFgsIFNlY29uZCA2Ni1i eXRlIGlzIFkuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgRWNDb250ZXh0ICAgICAgUG9pbnRlciB0 byBFQyBjb250ZXh0IGJlaW5nIHNldC4NCj4gKyAgQHBhcmFtW291dF0gICAgICBQdWJsaWNLZXkg ICAgICBQb2ludGVyIHRvIHQgYnVmZmVyIHRvIHJlY2VpdmUgZ2VuZXJhdGVkIHB1YmxpYyBYLFku DQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgUHVibGljS2V5U2l6ZSAgT24gaW5wdXQsIHRoZSBzaXpl IG9mIFB1YmxpYyBidWZmZXIgaW4gYnl0ZXMuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT24gb3V0cHV0LCB0aGUgc2l6ZSBvZiBkYXRhIHJldHVybmVkIGluIFB1YmxpYyBi dWZmZXIgaW4gYnl0ZXMuDQo+ICsgIEByZXR2YWwgIFRSVUUgICBFQyBrZXkgY29tcG9uZW50IHdh cyByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsICBGQUxTRSAgSW52YWxpZCBF QyBrZXkgY29tcG9uZW50Lg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0VjR2V0 UHViS2V5ICgNCj4gKyAgSU4gT1VUICBWT0lEICAgKkVjQ29udGV4dCwNCj4gKyAgT1VUICAgICBV SU5UOCAgKlB1YmxpY0tleSwNCj4gKyAgSU4gT1VUICBVSU5UTiAgKlB1YmxpY0tleVNpemUNCj4g KyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIENvbXB1dGVzIGV4Y2hhbmdlZCBjb21tb24ga2V5Lg0K PiArICBHaXZlbiBwZWVyJ3MgcHVibGljIGtleSAoWCwgWSksIHRoaXMgZnVuY3Rpb24gY29tcHV0 ZXMgdGhlIGV4Y2hhbmdlZCBjb21tb24ga2V5LA0KPiArICBiYXNlZCBvbiBpdHMgb3duIGNvbnRl eHQgaW5jbHVkaW5nIHZhbHVlIG9mIGN1cnZlIHBhcmFtZXRlciBhbmQgcmFuZG9tIHNlY3JldC4N Cj4gKyAgWCBpcyB0aGUgZmlyc3QgaGFsZiBvZiBQZWVyUHVibGljIHdpdGggc2l6ZSBiZWluZyBQ ZWVyUHVibGljU2l6ZSAvIDIsDQo+ICsgIFkgaXMgdGhlIHNlY29uZCBoYWxmIG9mIFBlZXJQdWJs aWMgd2l0aCBzaXplIGJlaW5nIFBlZXJQdWJsaWNTaXplIC8gMi4NCj4gKyAgSWYgRWNDb250ZXh0 IGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiArICBJZiBQZWVyUHVibGljIGlzIE5VTEws IHRoZW4gcmV0dXJuIEZBTFNFLg0KPiArICBJZiBQZWVyUHVibGljU2l6ZSBpcyAwLCB0aGVuIHJl dHVybiBGQUxTRS4NCj4gKyAgSWYgS2V5IGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiAr ICBJZiBLZXlTaXplIGlzIG5vdCBsYXJnZSBlbm91Z2gsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiAr ICBGb3IgUC0yNTYsIHRoZSBQZWVyUHVibGljU2l6ZSBpcyA2NC4gRmlyc3QgMzItYnl0ZSBpcyBY LCBTZWNvbmQgMzItYnl0ZSBpcyBZLg0KPiArICBGb3IgUC0zODQsIHRoZSBQZWVyUHVibGljU2l6 ZSBpcyA5Ni4gRmlyc3QgNDgtYnl0ZSBpcyBYLCBTZWNvbmQgNDgtYnl0ZSBpcyBZLg0KPiArICBG b3IgUC01MjEsIHRoZSBQZWVyUHVibGljU2l6ZSBpcyAxMzIuIEZpcnN0IDY2LWJ5dGUgaXMgWCwg U2Vjb25kIDY2LWJ5dGUgaXMgWS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdICBFY0NvbnRleHQgICAg ICAgICAgUG9pbnRlciB0byB0aGUgRUMgY29udGV4dC4NCj4gKyAgQHBhcmFtW2luXSAgICAgICBQ ZWVyUHVibGljICAgICAgICAgUG9pbnRlciB0byB0aGUgcGVlcidzIHB1YmxpYyBYLFkuDQo+ICsg IEBwYXJhbVtpbl0gICAgICAgUGVlclB1YmxpY1NpemUgICAgIFNpemUgb2YgcGVlcidzIHB1Ymxp YyBYLFkgaW4gYnl0ZXMuDQo+ICsgIEBwYXJhbVtpbl0gICAgICAgQ29tcHJlc3NGbGFnICAgICAg IEZsYWcgb2YgUGVlclB1YmxpYyBpcyBjb21wcmVzc2VkIG9yIG5vdC4NCj4gKyAgQHBhcmFtW291 dF0gICAgICBLZXkgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHJlY2Vp dmUgZ2VuZXJhdGVkIGtleS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdICBLZXlTaXplICAgICAgICAg ICAgT24gaW5wdXQsIHRoZSBzaXplIG9mIEtleSBidWZmZXIgaW4gYnl0ZXMuDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIG91dHB1dCwgdGhlIHNpemUgb2YgZGF0 YSByZXR1cm5lZCBpbiBLZXkgYnVmZmVyIGluIGJ5dGVzLg0KPiArICBAcmV0dmFsIFRSVUUgICBF QyBleGNoYW5nZWQga2V5IGdlbmVyYXRpb24gc3VjY2VlZGVkLg0KPiArICBAcmV0dmFsIEZBTFNF ICBFQyBleGNoYW5nZWQga2V5IGdlbmVyYXRpb24gZmFpbGVkLg0KPiArICBAcmV0dmFsIEZBTFNF ICBLZXlTaXplIGlzIG5vdCBsYXJnZSBlbm91Z2guDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VG SUFQSQ0KPiArRWNEaENvbXB1dGVLZXkgKA0KPiArICBJTiBPVVQgIFZPSUQgICAgICAgICAqRWND b250ZXh0LA0KPiArICBJTiAgICAgIENPTlNUIFVJTlQ4ICAqUGVlclB1YmxpYywNCj4gKyAgSU4g ICAgICBVSU5UTiAgICAgICAgUGVlclB1YmxpY1NpemUsDQo+ICsgIElOICAgICAgQ09OU1QgSU5U MzIgICpDb21wcmVzc0ZsYWcsDQo+ICsgIE9VVCAgICAgVUlOVDggICAgICAgICpLZXksDQo+ICsg IElOIE9VVCAgVUlOVE4gICAgICAgICpLZXlTaXplDQo+ICsgICk7DQo+ICsNCj4gICNlbmRpZiAv LyBfX0JBU0VfQ1JZUFRfTElCX0hfXw0KPiBkaWZmIC0tZ2l0IGEvQ3J5cHRvUGtnL0xpYnJhcnkv QmFzZUNyeXB0TGliL0Jhc2VDcnlwdExpYi5pbmYgYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5 cHRMaWIvQmFzZUNyeXB0TGliLmluZg0KPiBpbmRleCA5ZTRiZTJmYjBkLi5hZGU2ZWUzZmRkIDEw MDY0NA0KPiAtLS0gYS9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvQmFzZUNyeXB0TGli LmluZg0KPiArKysgYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvQmFzZUNyeXB0TGli LmluZg0KPiBAQCAtNTIsNiArNTIsOCBAQA0KPiAgICBQay9DcnlwdFRzLmMNCj4gICAgUGsvQ3J5 cHRSc2FQc3MuYw0KPiAgICBQay9DcnlwdFJzYVBzc1NpZ24uYw0KPiArICBQay9DcnlwdEVjTnVs bC5jICAgIHwqfCp8KnwhZ0VmaUNyeXB0b1BrZ1Rva2VuU3BhY2VHdWlkLlBjZE9wZW5zc2xFY0Vu YWJsZWQNCj4gKyAgUGsvQ3J5cHRFYy5jICAgIHwqfCp8KnxnRWZpQ3J5cHRvUGtnVG9rZW5TcGFj ZUd1aWQuUGNkT3BlbnNzbEVjRW5hYmxlZA0KDQpUaGUgdXNlIG9mIHRoZSBQQ0QgdG8gc2VsZWN0 IHRoZSBmaWxlIHNob3VsZCBub3QgYmUgbmVlZGVkIGhlcmUuICBUaGUgDQpFYyBGYW1pbHkgYW5k IGluZGl2aWR1YWwgc2VydmljZSBlbmFibGUvZGlzYWJsZSBmaWVsZHMgaW4gdGhlIA0KUENEX0NS WVBUT19TRVJWSUNFX0ZBTUlMWV9FTkFCTEUgc3RydWN0dXJlZCBQQ0QgYXJlIGFsbCB0aGF0IGlz IG5lZWRlZCB0bw0KZGlzYWJsZSB0aGUgRWMgc2VydmljZXMuDQoNClRoZSBQQ0QgZ0VmaUNyeXB0 b1BrZ1Rva2VuU3BhY2VHdWlkLlBjZE9wZW5zc2xFY0VuYWJsZWQgc2hvdWxkIGJlIHJlbW92ZWQg DQpjb21wbGV0ZWx5IGFzIHBhcnQgb2YgdGhpcyBwYXRjaCBzZXJpZXMuDQoNCj4gICAgUGVtL0Ny eXB0UGVtLmMNCj4gICAgQm4vQ3J5cHRCbi5jDQo+IA0KPiBkaWZmIC0tZ2l0IGEvQ3J5cHRvUGtn L0xpYnJhcnkvQmFzZUNyeXB0TGliL1BlaUNyeXB0TGliLmluZiBiL0NyeXB0b1BrZy9MaWJyYXJ5 L0Jhc2VDcnlwdExpYi9QZWlDcnlwdExpYi5pbmYNCj4gaW5kZXggNjVhZDIzZmI4MS4uMzgzZGYy YjIzYyAxMDA2NDQNCj4gLS0tIGEvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1BlaUNy eXB0TGliLmluZg0KPiArKysgYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvUGVpQ3J5 cHRMaWIuaW5mDQo+IEBAIC01OCw2ICs1OCw3IEBADQo+ICAgIFBrL0NyeXB0VHNOdWxsLmMNCj4g ICAgUGsvQ3J5cHRSc2FQc3MuYw0KPiAgICBQay9DcnlwdFJzYVBzc1NpZ25OdWxsLmMNCj4gKyAg UGsvQ3J5cHRFY051bGwuYw0KPiAgICBQZW0vQ3J5cHRQZW1OdWxsLmMNCj4gICAgUmFuZC9Dcnlw dFJhbmROdWxsLmMNCj4gICAgQm4vQ3J5cHRCbk51bGwuYw0KPiBkaWZmIC0tZ2l0IGEvQ3J5cHRv UGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1BrL0NyeXB0RWMuYyBiL0NyeXB0b1BrZy9MaWJyYXJ5 L0Jhc2VDcnlwdExpYi9Qay9DcnlwdEVjLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5k ZXggMDAwMDAwMDAwMC4uMzk2YzgxOTgzNA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL0NyeXB0 b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9Qay9DcnlwdEVjLmMNCj4gQEAgLTAsMCArMSw3NjUg QEANCj4gKy8qKiBAZmlsZQ0KPiArICBFbGxpcHRpYyBDdXJ2ZSBhbmQgRUNESCBBUEkgaW1wbGVt ZW50YXRpb24gYmFzZWQgb24gT3BlblNTTA0KPiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAyMiwg SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArICBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArDQo+ICsqKi8NCj4gKw0K PiArI2luY2x1ZGUgIkludGVybmFsQ3J5cHRMaWIuaCINCj4gKyNpbmNsdWRlIDxvcGVuc3NsL29i amVjdHMuaD4NCj4gKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+DQo+ICsjaW5jbHVkZSA8b3BlbnNz bC9lYy5oPg0KPiArDQo+ICsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ICsvLyAg ICBCYXNpYyBFbGxpcHRpYyBDdXJ2ZSBQcmltaXRpdmVzDQo+ICsvLyA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQo+ICsNCj4gKy8qKg0KPiArICBSZXR1cm4gdGhlIE5pZCBvZiBjZXJ0YWlu IEVDQyBjdXJ2ZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDcnlwdG9OaWQgICBJZGVudGlmeWlu ZyBudW1iZXIgZm9yIHRoZSBFQ0MgY3VydmUgKERlZmluZWQgaW4NCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgQmFzZUNyeXB0TGliLmgpLg0KPiArDQo+ICsgIEByZXR2YWwgIT0tMSAgICBP biBzdWNjZXNzLg0KPiArICBAcmV0dmFsIC0xICAgICAgRUNDIGN1cnZlIG5vdCBzdXBwb3J0ZWQu DQo+ICsqKi8NCj4gK1NUQVRJQw0KPiArSU5UMzINCj4gK0NyeXB0b05pZFRvT3BlbnNzbE5pZCAo DQo+ICsgIElOIFVJTlROICBDcnlwdG9OaWQNCj4gKyAgKQ0KPiArew0KPiArICBJTlQzMiAgTmlk Ow0KPiArDQo+ICsgIHN3aXRjaCAoQ3J5cHRvTmlkKSB7DQo+ICsgICAgY2FzZSBDUllQVE9fTklE X1NFQ1AyNTZSMToNCj4gKyAgICAgIE5pZCA9IE5JRF9YOV82Ml9wcmltZTI1NnYxOw0KPiArICAg ICAgYnJlYWs7DQo+ICsgICAgY2FzZSBDUllQVE9fTklEX1NFQ1AzODRSMToNCj4gKyAgICAgIE5p ZCA9IE5JRF9zZWNwMzg0cjE7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIENSWVBUT19O SURfU0VDUDUyMVIxOg0KPiArICAgICAgTmlkID0gTklEX3NlY3A1MjFyMTsNCj4gKyAgICAgIGJy ZWFrOw0KPiArICAgIGRlZmF1bHQ6DQo+ICsgICAgICByZXR1cm4gLTE7DQo+ICsgIH0NCj4gKw0K PiArICByZXR1cm4gTmlkOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgSW5pdGlhbGl6ZSBuZXcg b3BhcXVlIEVjR3JvdXAgb2JqZWN0LiBUaGlzIG9iamVjdCByZXByZXNlbnRzIGFuIEVDIGN1cnZl IGFuZA0KPiArICBhbmQgaXMgdXNlZCBmb3IgY2FsY3VsYXRpb24gd2l0aGluIHRoaXMgZ3JvdXAu IFRoaXMgb2JqZWN0IHNob3VsZCBiZSBmcmVlZA0KPiArICB1c2luZyBFY0dyb3VwRnJlZSgpIGZ1 bmN0aW9uLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENyeXB0b05pZCAgIElkZW50aWZ5aW5nIG51 bWJlciBmb3IgdGhlIEVDQyBjdXJ2ZSAoRGVmaW5lZCBpbg0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICBCYXNlQ3J5cHRMaWIuaCkuDQo+ICsNCj4gKyAgQHJldHZhbCBFY0dyb3VwIG9iamVj dCAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBOVUxMICAgICAgICAgICAgT24gZmFpbHVyZS4N Cj4gKyoqLw0KPiArVk9JRCAqDQo+ICtFRklBUEkNCj4gK0VjR3JvdXBJbml0ICgNCj4gKyAgSU4g VUlOVE4gIENyeXB0b05pZA0KPiArICApDQo+ICt7DQo+ICsgIElOVDMyICBOaWQ7DQo+ICsNCj4g KyAgTmlkID0gQ3J5cHRvTmlkVG9PcGVuc3NsTmlkIChDcnlwdG9OaWQpOw0KPiArDQo+ICsgIGlm IChOaWQgPCAwKSB7DQo+ICsgICAgcmV0dXJuIE5VTEw7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1 cm4gRUNfR1JPVVBfbmV3X2J5X2N1cnZlX25hbWUgKE5pZCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICBHZXQgRUMgY3VydmUgcGFyYW1ldGVycy4gV2hpbGUgZWxsaXB0aWMgY3VydmUgZXF1YXRp b24gaXMgWV4yIG1vZCBQID0gKFheMyArIEFYICsgQikgTW9kIFAuDQo+ICsgIFRoaXMgZnVuY3Rp b24gd2lsbCBzZXQgdGhlIHByb3ZpZGVkIEJpZyBOdW1iZXIgb2JqZWN0cyAgdG8gdGhlIGNvcnJl c3BvbmRpbmcNCj4gKyAgdmFsdWVzLiBUaGUgY2FsbGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSBhbGwg dGhlICJvdXQiIEJpZ051bWJlciBwYXJhbWV0ZXJzDQo+ICsgIGFyZSBwcm9wZXJseSBpbml0aWFs aXplZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgIEVDIGdyb3VwIG9iamVjdC4N Cj4gKyAgQHBhcmFtW291dF0gQm5QcmltZSAgICBHcm91cCBwcmltZSBudW1iZXIuDQo+ICsgIEBw YXJhbVtvdXRdIEJuQSAgICAgICAgQSBjb2VmZmljaWVudC4NCj4gKyAgQHBhcmFtW291dF0gQm5C ICAgICAgICBCIGNvZWZmaWNpZW50Li4NCj4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgICBCTiBj b250ZXh0Lg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiAr ICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ ICtFRklBUEkNCj4gK0VjR3JvdXBHZXRDdXJ2ZSAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY0dy b3VwLA0KPiArICBPVVQgVk9JRCAgICAgICAqQm5QcmltZSwNCj4gKyAgT1VUIFZPSUQgICAgICAg KkJuQSwNCj4gKyAgT1VUIFZPSUQgICAgICAgKkJuQiwNCj4gKyAgSU4gVk9JRCAgICAgICAgKkJu Q3R4DQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0dXJuIChCT09MRUFOKUVDX0dST1VQX2dldF9jdXJ2 ZSAoRWNHcm91cCwgQm5QcmltZSwgQm5BLCBCbkIsIEJuQ3R4KTsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIEdldCBFQyBncm91cCBvcmRlci4NCj4gKyAgVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0 aGUgcHJvdmlkZWQgQmlnIE51bWJlciBvYmplY3QgdG8gdGhlIGNvcnJlc3BvbmRpbmcNCj4gKyAg dmFsdWUuIFRoZSBjYWxsZXIgbmVlZHMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlICJvdXQiIEJpZ051 bWJlciBwYXJhbWV0ZXINCj4gKyAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgRWNHcm91cCAgIEVDIGdyb3VwIG9iamVjdC4NCj4gKyAgQHBhcmFtW291dF0g Qm5PcmRlciAgIEdyb3VwIHByaW1lIG51bWJlci4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAg ICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4N Cj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY0dyb3VwR2V0T3JkZXIgKA0KPiAr ICBJTiBWT0lEICAgKkVjR3JvdXAsDQo+ICsgIE9VVCBWT0lEICAqQm5PcmRlcg0KPiArICApDQo+ ICt7DQo+ICsgIHJldHVybiAoQk9PTEVBTilFQ19HUk9VUF9nZXRfb3JkZXIgKEVjR3JvdXAsIEJu T3JkZXIsIE5VTEwpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRnJlZSBwcmV2aW91c2x5IGFs bG9jYXRlZCBFQyBncm91cCBvYmplY3QgdXNpbmcgRWNHcm91cEluaXQoKS4NCj4gKw0KPiArICBA cGFyYW1baW5dICBFY0dyb3VwICAgRUMgZ3JvdXAgb2JqZWN0IHRvIGZyZWUuDQo+ICsqKi8NCj4g K1ZPSUQNCj4gK0VGSUFQSQ0KPiArRWNHcm91cEZyZWUgKA0KPiArICBJTiBWT0lEICAqRWNHcm91 cA0KPiArICApDQo+ICt7DQo+ICsgIEVDX0dST1VQX2ZyZWUgKEVjR3JvdXApOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgSW5pdGlhbGl6ZSBuZXcgb3BhcXVlIEVDIFBvaW50IG9iamVjdC4gVGhp cyBvYmplY3QgcmVwcmVzZW50cyBhbiBFQyBwb2ludA0KPiArICB3aXRoaW4gdGhlIGdpdmVuIEVD IGdyb3VwIChjdXJ2ZSkuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRUMgR3JvdXAsIHByb3Blcmx5 IGluaXRpYWxpemVkIHVzaW5nIEVjR3JvdXBJbml0KCkuDQo+ICsNCj4gKyAgQHJldHZhbCBFQyBQ b2ludCBvYmplY3QgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgTlVMTCAgICAgICAgICAgICBP biBmYWlsdXJlLg0KPiArKiovDQo+ICtWT0lEICoNCj4gK0VGSUFQSQ0KPiArRWNQb2ludEluaXQg KA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cA0KPiArICApDQo+ICt7DQo+ICsgIHJldHVy biBFQ19QT0lOVF9uZXcgKEVjR3JvdXApOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRnJlZSBw cmV2aW91c2x5IGFsbG9jYXRlZCBFQyBQb2ludCBvYmplY3QgdXNpbmcgRWNQb2ludEluaXQoKS4N Cj4gKw0KPiArICBAcGFyYW1baW5dICBFY1BvaW50ICAgRUMgUG9pbnQgdG8gZnJlZS4NCj4gKyAg QHBhcmFtW2luXSAgQ2xlYXIgICAgIFRSVUUgaWZmIHRoZSBtZW1vcnkgc2hvdWxkIGJlIGNsZWFy ZWQuDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0VGSUFQSQ0KPiArRWNQb2ludERlSW5pdCAoDQo+ICsg IElOIFZPSUQgICAgICpFY1BvaW50LA0KPiArICBJTiBCT09MRUFOICBDbGVhcg0KPiArICApDQo+ ICt7DQo+ICsgIGlmIChDbGVhcikgew0KPiArICAgIEVDX1BPSU5UX2NsZWFyX2ZyZWUgKEVjUG9p bnQpOw0KPiArICB9IGVsc2Ugew0KPiArICAgIEVDX1BPSU5UX2ZyZWUgKEVjUG9pbnQpOw0KPiAr ICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBHZXQgRUMgcG9pbnQgYWZmaW5lICh4LHkpIGNv b3JkaW5hdGVzLg0KPiArICBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBwcm92aWRlZCBCaWcg TnVtYmVyIG9iamVjdHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcNCj4gKyAgdmFsdWVzLiBUaGUgY2Fs bGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSBhbGwgdGhlICJvdXQiIEJpZ051bWJlciBwYXJhbWV0ZXJz DQo+ICsgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBF Y0dyb3VwICAgIEVDIGdyb3VwIG9iamVjdC4NCj4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgICBF QyBwb2ludCBvYmplY3QuDQo+ICsgIEBwYXJhbVtvdXRdIEJuWCAgICAgICAgWCBjb29yZGluYXRl Lg0KPiArICBAcGFyYW1bb3V0XSBCblkgICAgICAgIFkgY29vcmRpbmF0ZS4NCj4gKyAgQHBhcmFt W2luXSAgQm5DdHggICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4 dCgpLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBA cmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtF RklBUEkNCj4gK0VjUG9pbnRHZXRBZmZpbmVDb29yZGluYXRlcyAoDQo+ICsgIElOIENPTlNUIFZP SUQgICpFY0dyb3VwLA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNQb2ludCwNCj4gKyAgT1VUIFZP SUQgICAgICAgKkJuWCwNCj4gKyAgT1VUIFZPSUQgICAgICAgKkJuWSwNCj4gKyAgSU4gVk9JRCAg ICAgICAgKkJuQ3R4DQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0dXJuIChCT09MRUFOKUVDX1BPSU5U X2dldF9hZmZpbmVfY29vcmRpbmF0ZXMgKEVjR3JvdXAsIEVjUG9pbnQsIEJuWCwgQm5ZLCBCbkN0 eCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBTZXQgRUMgcG9pbnQgYWZmaW5lICh4LHkpIGNv b3JkaW5hdGVzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgRUMgZ3JvdXAgb2Jq ZWN0Lg0KPiArICBAcGFyYW1baW5dICBFY1BvaW50ICAgIEVDIHBvaW50IG9iamVjdC4NCj4gKyAg QHBhcmFtW2luXSAgQm5YICAgICAgICBYIGNvb3JkaW5hdGUuDQo+ICsgIEBwYXJhbVtpbl0gIEJu WSAgICAgICAgWSBjb29yZGluYXRlLg0KPiArICBAcGFyYW1baW5dICBCbkN0eCAgICAgIEJOIGNv bnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ICsNCj4gKyAgQHJldHZh bCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBP dGhlcndpc2UuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNQb2ludFNldEFm ZmluZUNvb3JkaW5hdGVzICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsgIElO IFZPSUQgICAgICAgICpFY1BvaW50LA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5YLA0KPiArICBJ TiBDT05TVCBWT0lEICAqQm5ZLA0KPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gKyAgKQ0K PiArew0KPiArICByZXR1cm4gKEJPT0xFQU4pRUNfUE9JTlRfc2V0X2FmZmluZV9jb29yZGluYXRl cyAoRWNHcm91cCwgRWNQb2ludCwgQm5YLCBCblksIEJuQ3R4KTsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIEVDIFBvaW50IGFkZGl0aW9uLiBFY1BvaW50UmVzdWx0ID0gRWNQb2ludEEgKyBFY1Bv aW50Qi4NCj4gKw0KPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgICAgICAgIEVDIGdyb3VwIG9i amVjdC4NCj4gKyAgQHBhcmFtW291dF0gRWNQb2ludFJlc3VsdCAgICBFQyBwb2ludCB0byBob2xk IHRoZSByZXN1bHQuIFRoZSBwb2ludCBzaG91bGQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBiZSBwcm9wZXJseSBpbml0aWFsaXplZC4NCj4gKyAgQHBhcmFtW2luXSAgRWNQb2lu dEEgICAgICAgICBFQyBQb2ludC4NCj4gKyAgQHBhcmFtW2luXSAgRWNQb2ludEIgICAgICAgICBF QyBQb2ludC4NCj4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgICAgICAgICBCTiBjb250ZXh0LCBj cmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAg ICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNl Lg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0VjUG9pbnRBZGQgKA0KPiArICBJ TiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gKyAgT1VUIFZPSUQgICAgICAgKkVjUG9pbnRSZXN1 bHQsDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50QSwNCj4gKyAgSU4gQ09OU1QgVk9JRCAg KkVjUG9pbnRCLA0KPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gKyAgKQ0KPiArew0KPiAr ICByZXR1cm4gKEJPT0xFQU4pRUNfUE9JTlRfYWRkIChFY0dyb3VwLCBFY1BvaW50UmVzdWx0LCBF Y1BvaW50QSwgRWNQb2ludEIsIEJuQ3R4KTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFZhcmlh YmxlIEVDIHBvaW50IG11bHRpcGxpY2F0aW9uLiBFY1BvaW50UmVzdWx0ID0gRWNQb2ludCAqIEJu UFNjYWxhci4NCj4gKw0KPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgICAgICAgIEVDIGdyb3Vw IG9iamVjdC4NCj4gKyAgQHBhcmFtW291dF0gRWNQb2ludFJlc3VsdCAgICBFQyBwb2ludCB0byBo b2xkIHRoZSByZXN1bHQuIFRoZSBwb2ludCBzaG91bGQNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBiZSBwcm9wZXJseSBpbml0aWFsaXplZC4NCj4gKyAgQHBhcmFtW2luXSAgRWNQ b2ludCAgICAgICAgICBFQyBQb2ludC4NCj4gKyAgQHBhcmFtW2luXSAgQm5QU2NhbGFyICAgICAg ICBQIFNjYWxhci4NCj4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgICAgICAgICBCTiBjb250ZXh0 LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiArDQo+ICsgIEByZXR2YWwgVFJV RSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3 aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0VjUG9pbnRNdWwgKA0KPiAr ICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gKyAgT1VUIFZPSUQgICAgICAgKkVjUG9pbnRS ZXN1bHQsDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50LA0KPiArICBJTiBDT05TVCBWT0lE ICAqQm5QU2NhbGFyLA0KPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gKyAgKQ0KPiArew0K PiArICByZXR1cm4gKEJPT0xFQU4pRUNfUE9JTlRfbXVsIChFY0dyb3VwLCBFY1BvaW50UmVzdWx0 LCBOVUxMLCBFY1BvaW50LCBCblBTY2FsYXIsIEJuQ3R4KTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSBvZiB0aGUgc3VwcGxpZWQgRUMgcG9pbnQuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgICAgRWNHcm91cCAgIEVDIGdyb3VwIG9iamVjdC4NCj4gKyAgQHBh cmFtW2luLG91dF0gRWNQb2ludCAgIEVDIHBvaW50IHRvIGludmVydC4NCj4gKyAgQHBhcmFtW2lu XSAgICAgQm5DdHggICAgIEJOIGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0 KCkuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEBy ZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VG SUFQSQ0KPiArRWNQb2ludEludmVydCAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0K PiArICBJTiBPVVQgVk9JRCAgICAqRWNQb2ludCwNCj4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4 DQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0dXJuIChCT09MRUFOKUVDX1BPSU5UX2ludmVydCAoRWNH cm91cCwgRWNQb2ludCwgQm5DdHgpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ2hlY2sgaWYg dGhlIHN1cHBsaWVkIHBvaW50IGlzIG9uIEVDIGN1cnZlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IEVjR3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICBF QyBwb2ludCB0byBjaGVjay4NCj4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgIEJOIGNvbnRleHQs IGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVF ICAgICAgICAgIE9uIGN1cnZlLg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNl Lg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0VjUG9pbnRJc09uQ3VydmUgKA0K PiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9p bnQsDQo+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiArICApDQo+ICt7DQo+ICsgIHJldHVy biBFQ19QT0lOVF9pc19vbl9jdXJ2ZSAoRWNHcm91cCwgRWNQb2ludCwgQm5DdHgpID09IDE7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayBpZiB0aGUgc3VwcGxpZWQgcG9pbnQgaXMgYXQg aW5maW5pdHkuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgIEVDIGdyb3VwIG9iamVj dC4NCj4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgIEVDIHBvaW50IHRvIGNoZWNrLg0KPiArDQo+ ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBBdCBpbmZpbml0eS4NCj4gKyAgQHJldHZhbCBGQUxT RSAgICAgICAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtF Y1BvaW50SXNBdEluZmluaXR5ICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsg IElOIENPTlNUIFZPSUQgICpFY1BvaW50DQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0dXJuIEVDX1BP SU5UX2lzX2F0X2luZmluaXR5IChFY0dyb3VwLCBFY1BvaW50KSA9PSAxOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgQ2hlY2sgaWYgRUMgcG9pbnRzIGFyZSBlcXVhbC4NCj4gKw0KPiArICBAcGFy YW1baW5dICBFY0dyb3VwICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiArICBAcGFyYW1baW5dICBFY1Bv aW50QSAgRUMgcG9pbnQgQS4NCj4gKyAgQHBhcmFtW2luXSAgRWNQb2ludEIgIEVDIHBvaW50IEIu DQo+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmln TnVtTmV3Q29udGV4dCgpLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBBID09IEIu DQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0JPT0xF QU4NCj4gK0VGSUFQSQ0KPiArRWNQb2ludEVxdWFsICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVj R3JvdXAsDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50QSwNCj4gKyAgSU4gQ09OU1QgVk9J RCAgKkVjUG9pbnRCLA0KPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gKyAgKQ0KPiArew0K PiArICByZXR1cm4gRUNfUE9JTlRfY21wIChFY0dyb3VwLCBFY1BvaW50QSwgRWNQb2ludEIsIEJu Q3R4KSA9PSAwOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgU2V0IEVDIHBvaW50IGNvbXByZXNz ZWQgY29vcmRpbmF0ZXMuIFBvaW50cyBjYW4gYmUgZGVzY3JpYmVkIGluIHRlcm1zIG9mDQo+ICsg IHRoZWlyIGNvbXByZXNzZWQgY29vcmRpbmF0ZXMuIEZvciBhIHBvaW50ICh4LCB5KSwgZm9yIGFu eSBnaXZlbiB2YWx1ZSBmb3IgeA0KPiArICBzdWNoIHRoYXQgdGhlIHBvaW50IGlzIG9uIHRoZSBj dXJ2ZSB0aGVyZSB3aWxsIG9ubHkgZXZlciBiZSB0d28gcG9zc2libGUNCj4gKyAgdmFsdWVzIGZv ciB5LiBUaGVyZWZvcmUsIGEgcG9pbnQgY2FuIGJlIHNldCB1c2luZyB0aGlzIGZ1bmN0aW9uIHdo ZXJlIEJuWCBpcw0KPiArICB0aGUgeCBjb29yZGluYXRlIGFuZCBZQml0IGlzIGEgdmFsdWUgMCBv ciAxIHRvIGlkZW50aWZ5IHdoaWNoIG9mIHRoZSB0d28NCj4gKyAgcG9zc2libGUgdmFsdWVzIGZv ciB5IHNob3VsZCBiZSB1c2VkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgRUMg Z3JvdXAgb2JqZWN0Lg0KPiArICBAcGFyYW1baW5dICBFY1BvaW50ICAgIEVDIFBvaW50Lg0KPiAr ICBAcGFyYW1baW5dICBCblggICAgICAgIFggY29vcmRpbmF0ZS4NCj4gKyAgQHBhcmFtW2luXSAg WUJpdCAgICAgICAwIG9yIDEgdG8gaWRlbnRpZnkgd2hpY2ggWSB2YWx1ZSBpcyB1c2VkLg0KPiAr ICBAcGFyYW1baW5dICBCbkN0eCAgICAgIEJOIGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1O ZXdDb250ZXh0KCkuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3Mu DQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0JPT0xF QU4NCj4gK0VGSUFQSQ0KPiArRWNQb2ludFNldENvbXByZXNzZWRDb29yZGluYXRlcyAoDQo+ICsg IElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiArICBJTiBWT0lEICAgICAgICAqRWNQb2ludCwN Cj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuWCwNCj4gKyAgSU4gVUlOVDggICAgICAgWUJpdCwNCj4g KyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0dXJuIChCT09M RUFOKUVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzIChFY0dyb3VwLCBFY1BvaW50 LCBCblgsIFlCaXQsIEJuQ3R4KTsNCj4gK30NCj4gKw0KPiArLy8gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KPiArLy8gICAgRWxsaXB0aWMgQ3VydmUgRGlmZmllIEhlbGxtYW4gUHJpbWl0 aXZlcw0KPiArLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiArDQo+ICsvKioNCj4g KyAgQWxsb2NhdGVzIGFuZCBJbml0aWFsaXplcyBvbmUgRWxsaXB0aWMgQ3VydmUgQ29udGV4dCBm b3Igc3Vic2VxdWVudCB1c2UNCj4gKyAgd2l0aCB0aGUgTklELg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIE5pZCAgIElkZW50aWZ5aW5nIG51bWJlciBmb3IgdGhlIEVDQyBjdXJ2ZSAoRGVmaW5lZCBp bg0KPiArICAgICAgICAgICAgICAgICAgICBCYXNlQ3J5cHRMaWIuaCkuDQo+ICsgIEByZXR1cm4g ICAgIFBvaW50ZXIgdG8gdGhlIEVsbGlwdGljIEN1cnZlIENvbnRleHQgdGhhdCBoYXMgYmVlbiBp bml0aWFsaXplZC4NCj4gKyAgICAgICAgICAgICAgSWYgdGhlIGFsbG9jYXRpb25zIGZhaWxzLCBF Y05ld0J5TmlkKCkgcmV0dXJucyBOVUxMLg0KPiArKiovDQo+ICtWT0lEICoNCj4gK0VGSUFQSQ0K PiArRWNOZXdCeU5pZCAoDQo+ICsgIElOIFVJTlROICBOaWQNCj4gKyAgKQ0KPiArew0KPiArICBJ TlQzMiAgT3BlblNzbE5pZDsNCj4gKw0KPiArICBPcGVuU3NsTmlkID0gQ3J5cHRvTmlkVG9PcGVu c3NsTmlkIChOaWQpOw0KPiArICBpZiAoT3BlblNzbE5pZCA8IDApIHsNCj4gKyAgICByZXR1cm4g TlVMTDsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiAoVk9JRCAqKUVDX0tFWV9uZXdfYnlfY3Vy dmVfbmFtZSAoT3BlblNzbE5pZCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZWxlYXNlIHRo ZSBzcGVjaWZpZWQgRUMgY29udGV4dC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBFY0NvbnRleHQg IFBvaW50ZXIgdG8gdGhlIEVDIGNvbnRleHQgdG8gYmUgcmVsZWFzZWQuDQo+ICsqKi8NCj4gK1ZP SUQNCj4gK0VGSUFQSQ0KPiArRWNGcmVlICgNCj4gKyAgSU4gIFZPSUQgICpFY0NvbnRleHQNCj4g KyAgKQ0KPiArew0KPiArICBFQ19LRVlfZnJlZSAoKEVDX0tFWSAqKUVjQ29udGV4dCk7DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICBHZW5lcmF0ZXMgRUMga2V5IGFuZCByZXR1cm5zIEVDIHB1Ymxp YyBrZXkgKFgsIFkpLCBQbGVhc2Ugbm90ZSwgdGhpcyBmdW5jdGlvbiB1c2VzDQo+ICsgIHBzZXVk byByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4gVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSBSYW5k b21TZWVkKCkNCj4gKyAgZnVuY3Rpb24gd2FzIHByb3Blcmx5IGNhbGxlZCBiZWZvcmUuDQo+ICsg IFRoZSBFYyBjb250ZXh0IHNob3VsZCBiZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgYnkgRWNOZXdC eU5pZC4NCj4gKyAgVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgcmFuZG9tIHNlY3JldCwgYW5kIGNv bXB1dGVzIHRoZSBwdWJsaWMga2V5IChYLCBZKSwgd2hpY2ggaXMNCj4gKyAgcmV0dXJuZWQgdmlh IHBhcmFtZXRlciBQdWJsaWMsIFB1YmxpY1NpemUuDQo+ICsgIFggaXMgdGhlIGZpcnN0IGhhbGYg b2YgUHVibGljIHdpdGggc2l6ZSBiZWluZyBQdWJsaWNTaXplIC8gMiwNCj4gKyAgWSBpcyB0aGUg c2Vjb25kIGhhbGYgb2YgUHVibGljIHdpdGggc2l6ZSBiZWluZyBQdWJsaWNTaXplIC8gMi4NCj4g KyAgRUMgY29udGV4dCBpcyB1cGRhdGVkIGFjY29yZGluZ2x5Lg0KPiArICBJZiB0aGUgUHVibGlj IGJ1ZmZlciBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUgcHVibGljIFgsIFksIEZBTFNFIGlzIHJl dHVybmVkIGFuZA0KPiArICBQdWJsaWNTaXplIGlzIHNldCB0byB0aGUgcmVxdWlyZWQgYnVmZmVy IHNpemUgdG8gb2J0YWluIHRoZSBwdWJsaWMgWCwgWS4NCj4gKyAgRm9yIFAtMjU2LCB0aGUgUHVi bGljU2l6ZSBpcyA2NC4gRmlyc3QgMzItYnl0ZSBpcyBYLCBTZWNvbmQgMzItYnl0ZSBpcyBZLg0K PiArICBGb3IgUC0zODQsIHRoZSBQdWJsaWNTaXplIGlzIDk2LiBGaXJzdCA0OC1ieXRlIGlzIFgs IFNlY29uZCA0OC1ieXRlIGlzIFkuDQo+ICsgIEZvciBQLTUyMSwgdGhlIFB1YmxpY1NpemUgaXMg MTMyLiBGaXJzdCA2Ni1ieXRlIGlzIFgsIFNlY29uZCA2Ni1ieXRlIGlzIFkuDQo+ICsgIElmIEVj Q29udGV4dCBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gKyAgSWYgUHVibGljU2l6ZSBp cyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gKyAgSWYgUHVibGljU2l6ZSBpcyBsYXJnZSBl bm91Z2ggYnV0IFB1YmxpYyBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gKyAgQHBhcmFt W2luLCBvdXRdICBFY0NvbnRleHQgICAgICBQb2ludGVyIHRvIHRoZSBFQyBjb250ZXh0Lg0KPiAr ICBAcGFyYW1bb3V0XSAgICAgIFB1YmxpY0tleSAgICAgIFBvaW50ZXIgdG8gdCBidWZmZXIgdG8g cmVjZWl2ZSBnZW5lcmF0ZWQgcHVibGljIFgsWS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdICBQdWJs aWNLZXlTaXplICBPbiBpbnB1dCwgdGhlIHNpemUgb2YgUHVibGljIGJ1ZmZlciBpbiBieXRlcy4N Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBvdXRwdXQsIHRoZSBzaXpl IG9mIGRhdGEgcmV0dXJuZWQgaW4gUHVibGljIGJ1ZmZlciBpbiBieXRlcy4NCj4gKyAgQHJldHZh bCBUUlVFICAgRUMgcHVibGljIFgsWSBnZW5lcmF0aW9uIHN1Y2NlZWRlZC4NCj4gKyAgQHJldHZh bCBGQUxTRSAgRUMgcHVibGljIFgsWSBnZW5lcmF0aW9uIGZhaWxlZC4NCj4gKyAgQHJldHZhbCBG QUxTRSAgUHVibGljS2V5U2l6ZSBpcyBub3QgbGFyZ2UgZW5vdWdoLg0KPiArKiovDQo+ICtCT09M RUFODQo+ICtFRklBUEkNCj4gK0VjR2VuZXJhdGVLZXkgKA0KPiArICBJTiBPVVQgIFZPSUQgICAq RWNDb250ZXh0LA0KPiArICBPVVQgICAgIFVJTlQ4ICAqUHVibGljS2V5LA0KPiArICBJTiBPVVQg IFVJTlROICAqUHVibGljS2V5U2l6ZQ0KPiArICApDQo+ICt7DQo+ICsgIEVDX0tFWSAgICAgICAg ICAqRWNLZXk7DQo+ICsgIENPTlNUIEVDX0dST1VQICAqR3JvdXA7DQo+ICsgIENPTlNUIEVDX1BP SU5UICAqRWNQb2ludDsNCj4gKyAgQk9PTEVBTiAgICAgICAgIFJldFZhbDsNCj4gKyAgQklHTlVN ICAgICAgICAgICpCblg7DQo+ICsgIEJJR05VTSAgICAgICAgICAqQm5ZOw0KPiArICBVSU5UTiAg ICAgICAgICAgSGFsZlNpemU7DQo+ICsgIElOVE4gICAgICAgICAgICBYU2l6ZTsNCj4gKyAgSU5U TiAgICAgICAgICAgIFlTaXplOw0KPiArDQo+ICsgIGlmICgoRWNDb250ZXh0ID09IE5VTEwpIHx8 IChQdWJsaWNLZXlTaXplID09IE5VTEwpKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9 DQo+ICsNCj4gKyAgaWYgKChQdWJsaWNLZXkgPT0gTlVMTCkgJiYgKCpQdWJsaWNLZXlTaXplICE9 IDApKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAgRWNLZXkgICAg PSAoRUNfS0VZICopRWNDb250ZXh0Ow0KPiArICBHcm91cCAgICA9IEVDX0tFWV9nZXQwX2dyb3Vw IChFY0tleSk7DQo+ICsgIEhhbGZTaXplID0gKEVDX0dST1VQX2dldF9kZWdyZWUgKEdyb3VwKSAr IDcpIC8gODsNCj4gKw0KPiArICAvLyBBc3N1bWUgUkFORF9zZWVkIHdhcyBjYWxsZWQNCj4gKyAg aWYgKEVDX0tFWV9nZW5lcmF0ZV9rZXkgKEVjS2V5KSAhPSAxKSB7DQo+ICsgICAgcmV0dXJuIEZB TFNFOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKCpQdWJsaWNLZXlTaXplIDwgSGFsZlNpemUgKiAy KSB7DQo+ICsgICAgKlB1YmxpY0tleVNpemUgPSBIYWxmU2l6ZSAqIDI7DQo+ICsgICAgcmV0dXJu IEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAgKlB1YmxpY0tleVNpemUgPSBIYWxmU2l6ZSAqIDI7 DQo+ICsNCj4gKyAgRWNQb2ludCA9IEVDX0tFWV9nZXQwX3B1YmxpY19rZXkgKEVjS2V5KTsNCj4g KyAgaWYgKEVjUG9pbnQgPT0gTlVMTCkgew0KPiArICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0K PiArDQo+ICsgIFJldFZhbCA9IEZBTFNFOw0KPiArICBCblggICAgPSBCTl9uZXcgKCk7DQo+ICsg IEJuWSAgICA9IEJOX25ldyAoKTsNCj4gKyAgaWYgKChCblggPT0gTlVMTCkgfHwgKEJuWSA9PSBO VUxMKSkgew0KPiArICAgIGdvdG8gZmFpbDsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChFQ19QT0lO VF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzIChHcm91cCwgRWNQb2ludCwgQm5YLCBCblksIE5VTEwp ICE9IDEpIHsNCj4gKyAgICBnb3RvIGZhaWw7DQo+ICsgIH0NCj4gKw0KPiArICBYU2l6ZSA9IEJO X251bV9ieXRlcyAoQm5YKTsNCj4gKyAgWVNpemUgPSBCTl9udW1fYnl0ZXMgKEJuWSk7DQo+ICsg IGlmICgoWFNpemUgPD0gMCkgfHwgKFlTaXplIDw9IDApKSB7DQo+ICsgICAgZ290byBmYWlsOw0K PiArICB9DQo+ICsNCj4gKyAgQVNTRVJUICgoVUlOVE4pWFNpemUgPD0gSGFsZlNpemUgJiYgKFVJ TlROKVlTaXplIDw9IEhhbGZTaXplKTsNCj4gKw0KPiArICBaZXJvTWVtIChQdWJsaWNLZXksICpQ dWJsaWNLZXlTaXplKTsNCj4gKyAgQk5fYm4yYmluIChCblgsICZQdWJsaWNLZXlbMCArIEhhbGZT aXplIC0gWFNpemVdKTsNCj4gKyAgQk5fYm4yYmluIChCblksICZQdWJsaWNLZXlbSGFsZlNpemUg KyBIYWxmU2l6ZSAtIFlTaXplXSk7DQo+ICsNCj4gKyAgUmV0VmFsID0gVFJVRTsNCj4gKw0KPiAr ZmFpbDoNCj4gKyAgQk5fZnJlZSAoQm5YKTsNCj4gKyAgQk5fZnJlZSAoQm5ZKTsNCj4gKyAgcmV0 dXJuIFJldFZhbDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEdldHMgdGhlIHB1YmxpYyBrZXkg Y29tcG9uZW50IGZyb20gdGhlIGVzdGFibGlzaGVkIEVDIGNvbnRleHQuDQo+ICsgIFRoZSBFYyBj b250ZXh0IHNob3VsZCBiZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgYnkgRWNOZXdCeU5pZCwgYW5k IHN1Y2Nlc3NmdWxseQ0KPiArICBnZW5lcmF0ZSBrZXkgcGFpciBmcm9tIEVjR2VuZXJhdGVLZXko KS4NCj4gKyAgRm9yIFAtMjU2LCB0aGUgUHVibGljU2l6ZSBpcyA2NC4gRmlyc3QgMzItYnl0ZSBp cyBYLCBTZWNvbmQgMzItYnl0ZSBpcyBZLg0KPiArICBGb3IgUC0zODQsIHRoZSBQdWJsaWNTaXpl IGlzIDk2LiBGaXJzdCA0OC1ieXRlIGlzIFgsIFNlY29uZCA0OC1ieXRlIGlzIFkuDQo+ICsgIEZv ciBQLTUyMSwgdGhlIFB1YmxpY1NpemUgaXMgMTMyLiBGaXJzdCA2Ni1ieXRlIGlzIFgsIFNlY29u ZCA2Ni1ieXRlIGlzIFkuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgRWNDb250ZXh0ICAgICAgUG9p bnRlciB0byBFQyBjb250ZXh0IGJlaW5nIHNldC4NCj4gKyAgQHBhcmFtW291dF0gICAgICBQdWJs aWNLZXkgICAgICBQb2ludGVyIHRvIHQgYnVmZmVyIHRvIHJlY2VpdmUgZ2VuZXJhdGVkIHB1Ymxp YyBYLFkuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgUHVibGljS2V5U2l6ZSAgT24gaW5wdXQsIHRo ZSBzaXplIG9mIFB1YmxpYyBidWZmZXIgaW4gYnl0ZXMuDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT24gb3V0cHV0LCB0aGUgc2l6ZSBvZiBkYXRhIHJldHVybmVkIGluIFB1 YmxpYyBidWZmZXIgaW4gYnl0ZXMuDQo+ICsgIEByZXR2YWwgIFRSVUUgICBFQyBrZXkgY29tcG9u ZW50IHdhcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsICBGQUxTRSAgSW52 YWxpZCBFQyBrZXkgY29tcG9uZW50Lg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4g K0VjR2V0UHViS2V5ICgNCj4gKyAgSU4gT1VUICBWT0lEICAgKkVjQ29udGV4dCwNCj4gKyAgT1VU ICAgICBVSU5UOCAgKlB1YmxpY0tleSwNCj4gKyAgSU4gT1VUICBVSU5UTiAgKlB1YmxpY0tleVNp emUNCj4gKyAgKQ0KPiArew0KPiArICBFQ19LRVkgICAgICAgICAgKkVjS2V5Ow0KPiArICBDT05T VCBFQ19HUk9VUCAgKkdyb3VwOw0KPiArICBDT05TVCBFQ19QT0lOVCAgKkVjUG9pbnQ7DQo+ICsg IEJJR05VTSAgICAgICAgICAqQm5YOw0KPiArICBCSUdOVU0gICAgICAgICAgKkJuWTsNCj4gKyAg VUlOVE4gICAgICAgICAgIEhhbGZTaXplOw0KPiArICBJTlROICAgICAgICAgICAgWFNpemU7DQo+ ICsgIElOVE4gICAgICAgICAgICBZU2l6ZTsNCj4gKyAgQk9PTEVBTiAgICAgICAgIFJldFZhbDsN Cj4gKw0KPiArICBpZiAoKEVjQ29udGV4dCA9PSBOVUxMKSB8fCAoUHVibGljS2V5U2l6ZSA9PSBO VUxMKSkgew0KPiArICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoUHVi bGljS2V5ID09IE5VTEwpICYmICgqUHVibGljS2V5U2l6ZSAhPSAwKSkgew0KPiArICAgIHJldHVy biBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgIEVjS2V5ICAgID0gKEVDX0tFWSAqKUVjQ29udGV4 dDsNCj4gKyAgR3JvdXAgICAgPSBFQ19LRVlfZ2V0MF9ncm91cCAoRWNLZXkpOw0KPiArICBIYWxm U2l6ZSA9IChFQ19HUk9VUF9nZXRfZGVncmVlIChHcm91cCkgKyA3KSAvIDg7DQo+ICsgIGlmICgq UHVibGljS2V5U2l6ZSA8IEhhbGZTaXplICogMikgew0KPiArICAgICpQdWJsaWNLZXlTaXplID0g SGFsZlNpemUgKiAyOw0KPiArICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgICpQ dWJsaWNLZXlTaXplID0gSGFsZlNpemUgKiAyOw0KPiArDQo+ICsgIEVjUG9pbnQgPSBFQ19LRVlf Z2V0MF9wdWJsaWNfa2V5IChFY0tleSk7DQo+ICsgIGlmIChFY1BvaW50ID09IE5VTEwpIHsNCj4g KyAgICByZXR1cm4gRkFMU0U7DQo+ICsgIH0NCj4gKw0KPiArICBSZXRWYWwgPSBGQUxTRTsNCj4g KyAgQm5YICAgID0gQk5fbmV3ICgpOw0KPiArICBCblkgICAgPSBCTl9uZXcgKCk7DQo+ICsgIGlm ICgoQm5YID09IE5VTEwpIHx8IChCblkgPT0gTlVMTCkpIHsNCj4gKyAgICBnb3RvIGZhaWw7DQo+ ICsgIH0NCj4gKw0KPiArICBpZiAoRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlcyAoR3Jv dXAsIEVjUG9pbnQsIEJuWCwgQm5ZLCBOVUxMKSAhPSAxKSB7DQo+ICsgICAgZ290byBmYWlsOw0K PiArICB9DQo+ICsNCj4gKyAgWFNpemUgPSBCTl9udW1fYnl0ZXMgKEJuWCk7DQo+ICsgIFlTaXpl ID0gQk5fbnVtX2J5dGVzIChCblkpOw0KPiArICBpZiAoKFhTaXplIDw9IDApIHx8IChZU2l6ZSA8 PSAwKSkgew0KPiArICAgIGdvdG8gZmFpbDsNCj4gKyAgfQ0KPiArDQo+ICsgIEFTU0VSVCAoKFVJ TlROKVhTaXplIDw9IEhhbGZTaXplICYmIChVSU5UTilZU2l6ZSA8PSBIYWxmU2l6ZSk7DQo+ICsN Cj4gKyAgaWYgKFB1YmxpY0tleSAhPSBOVUxMKSB7DQo+ICsgICAgWmVyb01lbSAoUHVibGljS2V5 LCAqUHVibGljS2V5U2l6ZSk7DQo+ICsgICAgQk5fYm4yYmluIChCblgsICZQdWJsaWNLZXlbMCAr IEhhbGZTaXplIC0gWFNpemVdKTsNCj4gKyAgICBCTl9ibjJiaW4gKEJuWSwgJlB1YmxpY0tleVtI YWxmU2l6ZSArIEhhbGZTaXplIC0gWVNpemVdKTsNCj4gKyAgfQ0KPiArDQo+ICsgIFJldFZhbCA9 IFRSVUU7DQo+ICsNCj4gK2ZhaWw6DQo+ICsgIEJOX2ZyZWUgKEJuWCk7DQo+ICsgIEJOX2ZyZWUg KEJuWSk7DQo+ICsgIHJldHVybiBSZXRWYWw7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDb21w dXRlcyBleGNoYW5nZWQgY29tbW9uIGtleS4NCj4gKyAgR2l2ZW4gcGVlcidzIHB1YmxpYyBrZXkg KFgsIFkpLCB0aGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSBleGNoYW5nZWQgY29tbW9uIGtleSwN Cj4gKyAgYmFzZWQgb24gaXRzIG93biBjb250ZXh0IGluY2x1ZGluZyB2YWx1ZSBvZiBjdXJ2ZSBw YXJhbWV0ZXIgYW5kIHJhbmRvbSBzZWNyZXQuDQo+ICsgIFggaXMgdGhlIGZpcnN0IGhhbGYgb2Yg UGVlclB1YmxpYyB3aXRoIHNpemUgYmVpbmcgUGVlclB1YmxpY1NpemUgLyAyLA0KPiArICBZIGlz IHRoZSBzZWNvbmQgaGFsZiBvZiBQZWVyUHVibGljIHdpdGggc2l6ZSBiZWluZyBQZWVyUHVibGlj U2l6ZSAvIDIuDQo+ICsgIElmIHB1YmxpYyBrZXkgaXMgY29tcHJlc3NlZCwgdGhlIFBlZXJQdWJs aWMgd2lsbCBvbmx5IGNvbnRhaW4gaGFsZiBrZXkgKFgpLg0KPiArICBJZiBFY0NvbnRleHQgaXMg TlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ICsgIElmIFBlZXJQdWJsaWMgaXMgTlVMTCwgdGhl biByZXR1cm4gRkFMU0UuDQo+ICsgIElmIFBlZXJQdWJsaWNTaXplIGlzIDAsIHRoZW4gcmV0dXJu IEZBTFNFLg0KPiArICBJZiBLZXkgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ICsgIElm IEtleVNpemUgaXMgbm90IGxhcmdlIGVub3VnaCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ICsgIEZv ciBQLTI1NiwgdGhlIFBlZXJQdWJsaWNTaXplIGlzIDY0LiBGaXJzdCAzMi1ieXRlIGlzIFgsIFNl Y29uZCAzMi1ieXRlIGlzIFkuDQo+ICsgIEZvciBQLTM4NCwgdGhlIFBlZXJQdWJsaWNTaXplIGlz IDk2LiBGaXJzdCA0OC1ieXRlIGlzIFgsIFNlY29uZCA0OC1ieXRlIGlzIFkuDQo+ICsgIEZvciBQ LTUyMSwgdGhlIFBlZXJQdWJsaWNTaXplIGlzIDEzMi4gRmlyc3QgNjYtYnl0ZSBpcyBYLCBTZWNv bmQgNjYtYnl0ZSBpcyBZLg0KPiArICBAcGFyYW1baW4sIG91dF0gIEVjQ29udGV4dCAgICAgICAg ICBQb2ludGVyIHRvIHRoZSBFQyBjb250ZXh0Lg0KPiArICBAcGFyYW1baW5dICAgICAgIFBlZXJQ dWJsaWMgICAgICAgICBQb2ludGVyIHRvIHRoZSBwZWVyJ3MgcHVibGljIFgsWS4NCj4gKyAgQHBh cmFtW2luXSAgICAgICBQZWVyUHVibGljU2l6ZSAgICAgU2l6ZSBvZiBwZWVyJ3MgcHVibGljIFgs WSBpbiBieXRlcy4NCj4gKyAgQHBhcmFtW2luXSAgICAgICBDb21wcmVzc0ZsYWcgICAgICAgRmxh ZyBvZiBQZWVyUHVibGljIGlzIGNvbXByZXNzZWQgb3Igbm90Lg0KPiArICBAcGFyYW1bb3V0XSAg ICAgIEtleSAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBidWZmZXIgdG8gcmVjZWl2ZSBn ZW5lcmF0ZWQga2V5Lg0KPiArICBAcGFyYW1baW4sIG91dF0gIEtleVNpemUgICAgICAgICAgICBP biBpbnB1dCwgdGhlIHNpemUgb2YgS2V5IGJ1ZmZlciBpbiBieXRlcy4NCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0LCB0aGUgc2l6ZSBvZiBkYXRhIHJl dHVybmVkIGluIEtleSBidWZmZXIgaW4gYnl0ZXMuDQo+ICsgIEByZXR2YWwgVFJVRSAgIEVDIGV4 Y2hhbmdlZCBrZXkgZ2VuZXJhdGlvbiBzdWNjZWVkZWQuDQo+ICsgIEByZXR2YWwgRkFMU0UgIEVD IGV4Y2hhbmdlZCBrZXkgZ2VuZXJhdGlvbiBmYWlsZWQuDQo+ICsgIEByZXR2YWwgRkFMU0UgIEtl eVNpemUgaXMgbm90IGxhcmdlIGVub3VnaC4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJ DQo+ICtFY0RoQ29tcHV0ZUtleSAoDQo+ICsgIElOIE9VVCAgVk9JRCAgICAgICAgICpFY0NvbnRl eHQsDQo+ICsgIElOICAgICAgQ09OU1QgVUlOVDggICpQZWVyUHVibGljLA0KPiArICBJTiAgICAg IFVJTlROICAgICAgICBQZWVyUHVibGljU2l6ZSwNCj4gKyAgSU4gICAgICBDT05TVCBJTlQzMiAg KkNvbXByZXNzRmxhZywNCj4gKyAgT1VUICAgICBVSU5UOCAgICAgICAgKktleSwNCj4gKyAgSU4g T1VUICBVSU5UTiAgICAgICAgKktleVNpemUNCj4gKyAgKQ0KPiArew0KPiArICBFQ19LRVkgICAg ICAgICAgKkVjS2V5Ow0KPiArICBFQ19LRVkgICAgICAgICAgKlBlZXJFY0tleTsNCj4gKyAgQ09O U1QgRUNfR1JPVVAgICpHcm91cDsNCj4gKyAgQk9PTEVBTiAgICAgICAgIFJldFZhbDsNCj4gKyAg QklHTlVNICAgICAgICAgICpCblg7DQo+ICsgIEJJR05VTSAgICAgICAgICAqQm5ZOw0KPiArICBF Q19QT0lOVCAgICAgICAgKlBvaW50Ow0KPiArICBJTlQzMiAgICAgICAgICAgT3BlblNzbE5pZDsN Cj4gKyAgVUlOVE4gICAgICAgICAgIEhhbGZTaXplOw0KPiArDQo+ICsgIGlmICgoRWNDb250ZXh0 ID09IE5VTEwpIHx8IChQZWVyUHVibGljID09IE5VTEwpIHx8IChLZXlTaXplID09IE5VTEwpKSB7 DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChLZXkgPT0gTlVM TCkgJiYgKCpLZXlTaXplICE9IDApKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ ICsNCj4gKyAgaWYgKFBlZXJQdWJsaWNTaXplID4gSU5UX01BWCkgew0KPiArICAgIHJldHVybiBG QUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgIEVjS2V5ICAgID0gKEVDX0tFWSAqKUVjQ29udGV4dDsN Cj4gKyAgR3JvdXAgICAgPSBFQ19LRVlfZ2V0MF9ncm91cCAoRWNLZXkpOw0KPiArICBIYWxmU2l6 ZSA9IChFQ19HUk9VUF9nZXRfZGVncmVlIChHcm91cCkgKyA3KSAvIDg7DQo+ICsgIGlmICgoQ29t cHJlc3NGbGFnID09IE5VTEwpICYmIChQZWVyUHVibGljU2l6ZSAhPSBIYWxmU2l6ZSAqIDIpKSB7 DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChDb21wcmVzc0Zs YWcgIT0gTlVMTCkgJiYgKFBlZXJQdWJsaWNTaXplICE9IEhhbGZTaXplKSkgew0KPiArICAgIHJl dHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgqS2V5U2l6ZSA8IEhhbGZTaXplKSB7 DQo+ICsgICAgKktleVNpemUgPSBIYWxmU2l6ZTsNCj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ICsg IH0NCj4gKw0KPiArICAqS2V5U2l6ZSA9IEhhbGZTaXplOw0KPiArDQo+ICsgIFJldFZhbCAgICA9 IEZBTFNFOw0KPiArICBQb2ludCAgICAgPSBOVUxMOw0KPiArICBCblggICAgICAgPSBCTl9iaW4y Ym4gKFBlZXJQdWJsaWMsIChJTlQzMilIYWxmU2l6ZSwgTlVMTCk7DQo+ICsgIEJuWSAgICAgICA9 IE5VTEw7DQo+ICsgIFBvaW50ICAgICA9IEVDX1BPSU5UX25ldyAoR3JvdXApOw0KPiArICBQZWVy RWNLZXkgPSBOVUxMOw0KPiArICBpZiAoKEJuWCA9PSBOVUxMKSB8fCAoUG9pbnQgPT0gTlVMTCkp IHsNCj4gKyAgICBnb3RvIGZhaWw7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoQ29tcHJlc3NGbGFn ID09IE5VTEwpIHsNCj4gKyAgICBCblkgPSBCTl9iaW4yYm4gKFBlZXJQdWJsaWMgKyBIYWxmU2l6 ZSwgKElOVDMyKUhhbGZTaXplLCBOVUxMKTsNCj4gKyAgICBpZiAoQm5ZID09IE5VTEwpIHsNCj4g KyAgICAgIGdvdG8gZmFpbDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoRUNfUE9JTlRfc2V0 X2FmZmluZV9jb29yZGluYXRlcyAoR3JvdXAsIFBvaW50LCBCblgsIEJuWSwgTlVMTCkgIT0gMSkg ew0KPiArICAgICAgZ290byBmYWlsOw0KPiArICAgIH0NCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBp ZiAoRUNfUE9JTlRfc2V0X2NvbXByZXNzZWRfY29vcmRpbmF0ZXMgKEdyb3VwLCBQb2ludCwgQm5Y LCAqQ29tcHJlc3NGbGFnLCBOVUxMKSAhPSAxKSB7DQo+ICsgICAgICBnb3RvIGZhaWw7DQo+ICsg ICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgLy8gVmFsaWRhdGUgTklTVCBFQ0RIIHB1YmxpYyBrZXkN Cj4gKyAgT3BlblNzbE5pZCA9IEVDX0dST1VQX2dldF9jdXJ2ZV9uYW1lIChHcm91cCk7DQo+ICsg IFBlZXJFY0tleSAgPSBFQ19LRVlfbmV3X2J5X2N1cnZlX25hbWUgKE9wZW5Tc2xOaWQpOw0KPiAr ICBpZiAoUGVlckVjS2V5ID09IE5VTEwpIHsNCj4gKyAgICBnb3RvIGZhaWw7DQo+ICsgIH0NCj4g Kw0KPiArICBpZiAoRUNfS0VZX3NldF9wdWJsaWNfa2V5IChQZWVyRWNLZXksIFBvaW50KSAhPSAx KSB7DQo+ICsgICAgZ290byBmYWlsOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKEVDX0tFWV9jaGVj a19rZXkgKFBlZXJFY0tleSkgIT0gMSkgew0KPiArICAgIGdvdG8gZmFpbDsNCj4gKyAgfQ0KPiAr DQo+ICsgIGlmIChFQ0RIX2NvbXB1dGVfa2V5IChLZXksICpLZXlTaXplLCBQb2ludCwgRWNLZXks IE5VTEwpIDw9IDApIHsNCj4gKyAgICBnb3RvIGZhaWw7DQo+ICsgIH0NCj4gKw0KPiArICBSZXRW YWwgPSBUUlVFOw0KPiArDQo+ICtmYWlsOg0KPiArICBCTl9mcmVlIChCblgpOw0KPiArICBCTl9m cmVlIChCblkpOw0KPiArICBFQ19QT0lOVF9mcmVlIChQb2ludCk7DQo+ICsgIEVDX0tFWV9mcmVl IChQZWVyRWNLZXkpOw0KPiArICByZXR1cm4gUmV0VmFsOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEv Q3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1BrL0NyeXB0RWNOdWxsLmMgYi9DcnlwdG9Q a2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvUGsvQ3J5cHRFY051bGwuYw0KPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi5kOWYxMDA0ZjZjDQo+IC0tLSAvZGV2L251bGwN Cj4gKysrIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1BrL0NyeXB0RWNOdWxsLmMN Cj4gQEAgLTAsMCArMSw0OTYgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBFbGxpcHRpYyBDdXJ2ZSBh bmQgRUNESCBBUEkgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gT3BlblNTTA0KPiArDQo+ICsgIENv cHlyaWdodCAoYykgMjAyMiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu PEJSPg0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0K PiArDQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZUNyeXB0TGliLmg+DQo+ ICsjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiArDQo+ICsvKioNCj4gKyAgSW5pdGlh bGl6ZSBuZXcgb3BhcXVlIEVjR3JvdXAgb2JqZWN0LiBUaGlzIG9iamVjdCByZXByZXNlbnRzIGFu IEVDIGN1cnZlIGFuZA0KPiArICBhbmQgaXMgdXNlZCBmb3IgY2FsY3VsYXRpb24gd2l0aGluIHRo aXMgZ3JvdXAuIFRoaXMgb2JqZWN0IHNob3VsZCBiZSBmcmVlZA0KPiArICB1c2luZyBFY0dyb3Vw RnJlZSgpIGZ1bmN0aW9uLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENyeXB0b05pZCAgIElkZW50 aWZ5aW5nIG51bWJlciBmb3IgdGhlIEVDQyBjdXJ2ZSAoRGVmaW5lZCBpbg0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICBCYXNlQ3J5cHRMaWIuaCkuDQo+ICsNCj4gKyAgQHJldHZhbCBFY0dy b3VwIG9iamVjdCAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBOVUxMICAgICAgICAgICAgT24g ZmFpbHVyZS4NCj4gKyoqLw0KPiArVk9JRCAqDQo+ICtFRklBUEkNCj4gK0VjR3JvdXBJbml0ICgN Cj4gKyAgSU4gVUlOVE4gIENyeXB0b05pZA0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFM U0UpOw0KPiArICByZXR1cm4gTlVMTDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEdldCBFQyBj dXJ2ZSBwYXJhbWV0ZXJzLiBXaGlsZSBlbGxpcHRpYyBjdXJ2ZSBlcXVhdGlvbiBpcyBZXjIgbW9k IFAgPSAoWF4zICsgQVggKyBCKSBNb2QgUC4NCj4gKyAgVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0 aGUgcHJvdmlkZWQgQmlnIE51bWJlciBvYmplY3RzICB0byB0aGUgY29ycmVzcG9uZGluZw0KPiAr ICB2YWx1ZXMuIFRoZSBjYWxsZXIgbmVlZHMgdG8gbWFrZSBzdXJlIGFsbCB0aGUgIm91dCIgQmln TnVtYmVyIHBhcmFtZXRlcnMNCj4gKyAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiArICBAcGFyYW1b b3V0XSBCblByaW1lICAgIEdyb3VwIHByaW1lIG51bWJlci4NCj4gKyAgQHBhcmFtW291dF0gQm5B ICAgICAgICBBIGNvZWZmaWNpZW50Lg0KPiArICBAcGFyYW1bb3V0XSBCbkIgICAgICAgIEIgY29l ZmZpY2llbnQuLg0KPiArICBAcGFyYW1baW5dICBCbkN0eCAgICAgIEJOIGNvbnRleHQuDQo+ICsN Cj4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRkFM U0UgICAgICAgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiAr RWNHcm91cEdldEN1cnZlICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsgIE9V VCBWT0lEICAgICAgICpCblByaW1lLA0KPiArICBPVVQgVk9JRCAgICAgICAqQm5BLA0KPiArICBP VVQgVk9JRCAgICAgICAqQm5CLA0KPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gKyAgKQ0K PiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgR2V0IEVDIGdyb3VwIG9yZGVyLg0KPiArICBUaGlzIGZ1bmN0aW9uIHdp bGwgc2V0IHRoZSBwcm92aWRlZCBCaWcgTnVtYmVyIG9iamVjdCB0byB0aGUgY29ycmVzcG9uZGlu Zw0KPiArICB2YWx1ZS4gVGhlIGNhbGxlciBuZWVkcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgIm91 dCIgQmlnTnVtYmVyIHBhcmFtZXRlcg0KPiArICBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiArICBAcGFy YW1bb3V0XSBCbk9yZGVyICAgR3JvdXAgcHJpbWUgbnVtYmVyLg0KPiArDQo+ICsgIEByZXR2YWwg VFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3Ro ZXJ3aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0VjR3JvdXBHZXRPcmRl ciAoDQo+ICsgIElOIFZPSUQgICAqRWNHcm91cCwNCj4gKyAgT1VUIFZPSUQgICpCbk9yZGVyDQo+ ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBGQUxTRTsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgRUMgZ3JvdXAg b2JqZWN0IHVzaW5nIEVjR3JvdXBJbml0KCkuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNHcm91 cCAgIEVDIGdyb3VwIG9iamVjdCB0byBmcmVlLg0KPiArKiovDQo+ICtWT0lEDQo+ICtFRklBUEkN Cj4gK0VjR3JvdXBGcmVlICgNCj4gKyAgSU4gVk9JRCAgKkVjR3JvdXANCj4gKyAgKQ0KPiArew0K PiArICBBU1NFUlQgKEZBTFNFKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEluaXRpYWxpemUg bmV3IG9wYXF1ZSBFQyBQb2ludCBvYmplY3QuIFRoaXMgb2JqZWN0IHJlcHJlc2VudHMgYW4gRUMg cG9pbnQNCj4gKyAgd2l0aGluIHRoZSBnaXZlbiBFQyBncm91cCAoY3VydmUpLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIEVDIEdyb3VwLCBwcm9wZXJseSBpbml0aWFsaXplZCB1c2luZyBFY0dyb3Vw SW5pdCgpLg0KPiArDQo+ICsgIEByZXR2YWwgRUMgUG9pbnQgb2JqZWN0ICBPbiBzdWNjZXNzLg0K PiArICBAcmV0dmFsIE5VTEwgICAgICAgICAgICAgT24gZmFpbHVyZS4NCj4gKyoqLw0KPiArVk9J RCAqDQo+ICtFRklBUEkNCj4gK0VjUG9pbnRJbml0ICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVj R3JvdXANCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIE5V TEw7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIEVD IFBvaW50IG9iamVjdCB1c2luZyBFY1BvaW50SW5pdCgpLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IEVjUG9pbnQgICBFQyBQb2ludCB0byBmcmVlLg0KPiArICBAcGFyYW1baW5dICBDbGVhciAgICAg VFJVRSBpZmYgdGhlIG1lbW9yeSBzaG91bGQgYmUgY2xlYXJlZC4NCj4gKyoqLw0KPiArVk9JRA0K PiArRUZJQVBJDQo+ICtFY1BvaW50RGVJbml0ICgNCj4gKyAgSU4gVk9JRCAgICAgKkVjUG9pbnQs DQo+ICsgIElOIEJPT0xFQU4gIENsZWFyDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxT RSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBHZXQgRUMgcG9pbnQgYWZmaW5lICh4LHkpIGNv b3JkaW5hdGVzLg0KPiArICBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBwcm92aWRlZCBCaWcg TnVtYmVyIG9iamVjdHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcNCj4gKyAgdmFsdWVzLiBUaGUgY2Fs bGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSBhbGwgdGhlICJvdXQiIEJpZ051bWJlciBwYXJhbWV0ZXJz DQo+ICsgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBF Y0dyb3VwICAgIEVDIGdyb3VwIG9iamVjdC4NCj4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgICBF QyBwb2ludCBvYmplY3QuDQo+ICsgIEBwYXJhbVtvdXRdIEJuWCAgICAgICAgWCBjb29yZGluYXRl Lg0KPiArICBAcGFyYW1bb3V0XSBCblkgICAgICAgIFkgY29vcmRpbmF0ZS4NCj4gKyAgQHBhcmFt W2luXSAgQm5DdHggICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4 dCgpLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBA cmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtF RklBUEkNCj4gK0VjUG9pbnRHZXRBZmZpbmVDb29yZGluYXRlcyAoDQo+ICsgIElOIENPTlNUIFZP SUQgICpFY0dyb3VwLA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNQb2ludCwNCj4gKyAgT1VUIFZP SUQgICAgICAgKkJuWCwNCj4gKyAgT1VUIFZPSUQgICAgICAgKkJuWSwNCj4gKyAgSU4gVk9JRCAg ICAgICAgKkJuQ3R4DQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJl dHVybiBGQUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFNldCBFQyBwb2ludCBhZmZpbmUg KHgseSkgY29vcmRpbmF0ZXMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgICBFQyBn cm91cCBvYmplY3QuDQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICAgRUMgcG9pbnQgb2JqZWN0 Lg0KPiArICBAcGFyYW1baW5dICBCblggICAgICAgIFggY29vcmRpbmF0ZS4NCj4gKyAgQHBhcmFt W2luXSAgQm5ZICAgICAgICBZIGNvb3JkaW5hdGUuDQo+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAg ICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gKw0KPiAr ICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBGQUxTRSAg ICAgICAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY1Bv aW50U2V0QWZmaW5lQ29vcmRpbmF0ZXMgKA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwN Cj4gKyAgSU4gVk9JRCAgICAgICAgKkVjUG9pbnQsDQo+ICsgIElOIENPTlNUIFZPSUQgICpCblgs DQo+ICsgIElOIENPTlNUIFZPSUQgICpCblksDQo+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0K PiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRkFMU0U7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBFQyBQb2ludCBhZGRpdGlvbi4gRWNQb2ludFJlc3VsdCA9 IEVjUG9pbnRBICsgRWNQb2ludEIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgICAg ICAgICBFQyBncm91cCBvYmplY3QuDQo+ICsgIEBwYXJhbVtvdXRdIEVjUG9pbnRSZXN1bHQgICAg RUMgcG9pbnQgdG8gaG9sZCB0aGUgcmVzdWx0LiBUaGUgcG9pbnQgc2hvdWxkDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuDQo+ICsgIEBw YXJhbVtpbl0gIEVjUG9pbnRBICAgICAgICAgRUMgUG9pbnQuDQo+ICsgIEBwYXJhbVtpbl0gIEVj UG9pbnRCICAgICAgICAgRUMgUG9pbnQuDQo+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICAgICAg ICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gKw0KPiAr ICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBGQUxTRSAg ICAgICAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY1Bv aW50QWRkICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsgIE9VVCBWT0lEICAg ICAgICpFY1BvaW50UmVzdWx0LA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNQb2ludEEsDQo+ICsg IElOIENPTlNUIFZPSUQgICpFY1BvaW50QiwNCj4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBGQUxTRTsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIFZhcmlhYmxlIEVDIHBvaW50IG11bHRpcGxpY2F0aW9uLiBF Y1BvaW50UmVzdWx0ID0gRWNQb2ludCAqIEJuUFNjYWxhci4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBFY0dyb3VwICAgICAgICAgIEVDIGdyb3VwIG9iamVjdC4NCj4gKyAgQHBhcmFtW291dF0gRWNQ b2ludFJlc3VsdCAgICBFQyBwb2ludCB0byBob2xkIHRoZSByZXN1bHQuIFRoZSBwb2ludCBzaG91 bGQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBwcm9wZXJseSBpbml0aWFs aXplZC4NCj4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgICAgICAgICBFQyBQb2ludC4NCj4gKyAg QHBhcmFtW2luXSAgQm5QU2NhbGFyICAgICAgICBQIFNjYWxhci4NCj4gKyAgQHBhcmFtW2luXSAg Qm5DdHggICAgICAgICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4 dCgpLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBA cmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtF RklBUEkNCj4gK0VjUG9pbnRNdWwgKA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4g KyAgT1VUIFZPSUQgICAgICAgKkVjUG9pbnRSZXN1bHQsDQo+ICsgIElOIENPTlNUIFZPSUQgICpF Y1BvaW50LA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5QU2NhbGFyLA0KPiArICBJTiBWT0lEICAg ICAgICAqQm5DdHgNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0 dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ2FsY3VsYXRlIHRoZSBpbnZlcnNl IG9mIHRoZSBzdXBwbGllZCBFQyBwb2ludC4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICBFY0dy b3VwICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiArICBAcGFyYW1baW4sb3V0XSBFY1BvaW50ICAgRUMg cG9pbnQgdG8gaW52ZXJ0Lg0KPiArICBAcGFyYW1baW5dICAgICBCbkN0eCAgICAgQk4gY29udGV4 dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gKw0KPiArICBAcmV0dmFsIFRS VUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVy d2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY1BvaW50SW52ZXJ0ICgN Cj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsgIElOIE9VVCBWT0lEICAgICpFY1Bv aW50LA0KPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gKyAgKQ0KPiArew0KPiArICBBU1NF UlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg Q2hlY2sgaWYgdGhlIHN1cHBsaWVkIHBvaW50IGlzIG9uIEVDIGN1cnZlLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ICsgIEBwYXJhbVtpbl0gIEVj UG9pbnQgICBFQyBwb2ludCB0byBjaGVjay4NCj4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgIEJO IGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ICsNCj4gKyAgQHJl dHZhbCBUUlVFICAgICAgICAgIE9uIGN1cnZlLg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAg T3RoZXJ3aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0VjUG9pbnRJc09u Q3VydmUgKA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gKyAgSU4gQ09OU1QgVk9J RCAgKkVjUG9pbnQsDQo+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiArICApDQo+ICt7DQo+ ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBDaGVjayBpZiB0aGUgc3VwcGxpZWQgcG9pbnQgaXMgYXQgaW5maW5pdHkuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgIEVDIGdyb3VwIG9iamVjdC4NCj4gKyAgQHBhcmFt W2luXSAgRWNQb2ludCAgIEVDIHBvaW50IHRvIGNoZWNrLg0KPiArDQo+ICsgIEByZXR2YWwgVFJV RSAgICAgICAgICBBdCBpbmZpbml0eS4NCj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVy d2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY1BvaW50SXNBdEluZmlu aXR5ICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsgIElOIENPTlNUIFZPSUQg ICpFY1BvaW50DQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVy biBGQUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrIGlmIEVDIHBvaW50cyBhcmUg ZXF1YWwuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgIEVDIGdyb3VwIG9iamVjdC4N Cj4gKyAgQHBhcmFtW2luXSAgRWNQb2ludEEgIEVDIHBvaW50IEEuDQo+ICsgIEBwYXJhbVtpbl0g IEVjUG9pbnRCICBFQyBwb2ludCBCLg0KPiArICBAcGFyYW1baW5dICBCbkN0eCAgICAgQk4gY29u dGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gKw0KPiArICBAcmV0dmFs IFRSVUUgICAgICAgICAgQSA9PSBCLg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3 aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0VjUG9pbnRFcXVhbCAoDQo+ ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNQb2lu dEEsDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50QiwNCj4gKyAgSU4gVk9JRCAgICAgICAg KkJuQ3R4DQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBG QUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFNldCBFQyBwb2ludCBjb21wcmVzc2VkIGNv b3JkaW5hdGVzLiBQb2ludHMgY2FuIGJlIGRlc2NyaWJlZCBpbiB0ZXJtcyBvZg0KPiArICB0aGVp ciBjb21wcmVzc2VkIGNvb3JkaW5hdGVzLiBGb3IgYSBwb2ludCAoeCwgeSksIGZvciBhbnkgZ2l2 ZW4gdmFsdWUgZm9yIHgNCj4gKyAgc3VjaCB0aGF0IHRoZSBwb2ludCBpcyBvbiB0aGUgY3VydmUg dGhlcmUgd2lsbCBvbmx5IGV2ZXIgYmUgdHdvIHBvc3NpYmxlDQo+ICsgIHZhbHVlcyBmb3IgeS4g VGhlcmVmb3JlLCBhIHBvaW50IGNhbiBiZSBzZXQgdXNpbmcgdGhpcyBmdW5jdGlvbiB3aGVyZSBC blggaXMNCj4gKyAgdGhlIHggY29vcmRpbmF0ZSBhbmQgWUJpdCBpcyBhIHZhbHVlIDAgb3IgMSB0 byBpZGVudGlmeSB3aGljaCBvZiB0aGUgdHdvDQo+ICsgIHBvc3NpYmxlIHZhbHVlcyBmb3IgeSBz aG91bGQgYmUgdXNlZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgIEVDIGdyb3Vw IG9iamVjdC4NCj4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgICBFQyBQb2ludC4NCj4gKyAgQHBh cmFtW2luXSAgQm5YICAgICAgICBYIGNvb3JkaW5hdGUuDQo+ICsgIEBwYXJhbVtpbl0gIFlCaXQg ICAgICAgMCBvciAxIHRvIGlkZW50aWZ5IHdoaWNoIFkgdmFsdWUgaXMgdXNlZC4NCj4gKyAgQHBh cmFtW2luXSAgQm5DdHggICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29u dGV4dCgpLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiAr ICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ ICtFRklBUEkNCj4gK0VjUG9pbnRTZXRDb21wcmVzc2VkQ29vcmRpbmF0ZXMgKA0KPiArICBJTiBD T05TVCBWT0lEICAqRWNHcm91cCwNCj4gKyAgSU4gVk9JRCAgICAgICAgKkVjUG9pbnQsDQo+ICsg IElOIENPTlNUIFZPSUQgICpCblgsDQo+ICsgIElOIFVJTlQ4ICAgICAgIFlCaXQsDQo+ICsgIElO IFZPSUQgICAgICAgICpCbkN0eA0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0K PiArICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBBbGxvY2F0ZXMgYW5k IEluaXRpYWxpemVzIG9uZSBFbGxpcHRpYyBDdXJ2ZSBDb250ZXh0IGZvciBzdWJzZXF1ZW50IHVz ZQ0KPiArICB3aXRoIHRoZSBOSUQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgTmlkIGNpcGhlciBO SUQNCj4gKyAgQHJldHVybiAgICAgUG9pbnRlciB0byB0aGUgRWxsaXB0aWMgQ3VydmUgQ29udGV4 dCB0aGF0IGhhcyBiZWVuIGluaXRpYWxpemVkLg0KPiArICAgICAgICAgICAgICBJZiB0aGUgYWxs b2NhdGlvbnMgZmFpbHMsIEVjTmV3QnlOaWQoKSByZXR1cm5zIE5VTEwuDQo+ICsqKi8NCj4gK1ZP SUQgKg0KPiArRUZJQVBJDQo+ICtFY05ld0J5TmlkICgNCj4gKyAgSU4gVUlOVE4gIE5pZA0KPiAr ICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gTlVMTDsNCj4gK30N Cj4gKw0KPiArLyoqDQo+ICsgIFJlbGVhc2UgdGhlIHNwZWNpZmllZCBFQyBjb250ZXh0Lg0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gIEVjQ29udGV4dCAgUG9pbnRlciB0byB0aGUgRUMgY29udGV4dCB0 byBiZSByZWxlYXNlZC4NCj4gKyoqLw0KPiArVk9JRA0KPiArRUZJQVBJDQo+ICtFY0ZyZWUgKA0K PiArICBJTiAgVk9JRCAgKkVjQ29udGV4dA0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFM U0UpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgR2VuZXJhdGVzIEVDIGtleSBhbmQgcmV0dXJu cyBFQyBwdWJsaWMga2V5IChYLCBZKSwgUGxlYXNlIG5vdGUsIHRoaXMgZnVuY3Rpb24gdXNlcw0K PiArICBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuIFRoZSBjYWxsZXIgbXVzdCBtYWtl IHN1cmUgUmFuZG9tU2VlZCgpDQo+ICsgIGZ1bmN0aW9uIHdhcyBwcm9wZXJseSBjYWxsZWQgYmVm b3JlLg0KPiArICBUaGUgRWMgY29udGV4dCBzaG91bGQgYmUgY29ycmVjdGx5IGluaXRpYWxpemVk IGJ5IEVjTmV3QnlOaWQuDQo+ICsgIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHJhbmRvbSBzZWNy ZXQsIGFuZCBjb21wdXRlcyB0aGUgcHVibGljIGtleSAoWCwgWSksIHdoaWNoIGlzDQo+ICsgIHJl dHVybmVkIHZpYSBwYXJhbWV0ZXIgUHVibGljLCBQdWJsaWNTaXplLg0KPiArICBYIGlzIHRoZSBm aXJzdCBoYWxmIG9mIFB1YmxpYyB3aXRoIHNpemUgYmVpbmcgUHVibGljU2l6ZSAvIDIsDQo+ICsg IFkgaXMgdGhlIHNlY29uZCBoYWxmIG9mIFB1YmxpYyB3aXRoIHNpemUgYmVpbmcgUHVibGljU2l6 ZSAvIDIuDQo+ICsgIEVDIGNvbnRleHQgaXMgdXBkYXRlZCBhY2NvcmRpbmdseS4NCj4gKyAgSWYg dGhlIFB1YmxpYyBidWZmZXIgaXMgdG9vIHNtYWxsIHRvIGhvbGQgdGhlIHB1YmxpYyBYLCBZLCBG QUxTRSBpcyByZXR1cm5lZCBhbmQNCj4gKyAgUHVibGljU2l6ZSBpcyBzZXQgdG8gdGhlIHJlcXVp cmVkIGJ1ZmZlciBzaXplIHRvIG9idGFpbiB0aGUgcHVibGljIFgsIFkuDQo+ICsgIEZvciBQLTI1 NiwgdGhlIFB1YmxpY1NpemUgaXMgNjQuIEZpcnN0IDMyLWJ5dGUgaXMgWCwgU2Vjb25kIDMyLWJ5 dGUgaXMgWS4NCj4gKyAgRm9yIFAtMzg0LCB0aGUgUHVibGljU2l6ZSBpcyA5Ni4gRmlyc3QgNDgt Ynl0ZSBpcyBYLCBTZWNvbmQgNDgtYnl0ZSBpcyBZLg0KPiArICBGb3IgUC01MjEsIHRoZSBQdWJs aWNTaXplIGlzIDEzMi4gRmlyc3QgNjYtYnl0ZSBpcyBYLCBTZWNvbmQgNjYtYnl0ZSBpcyBZLg0K PiArICBJZiBFY0NvbnRleHQgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ICsgIElmIFB1 YmxpY1NpemUgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ICsgIElmIFB1YmxpY1NpemUg aXMgbGFyZ2UgZW5vdWdoIGJ1dCBQdWJsaWMgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ ICsgIEBwYXJhbVtpbiwgb3V0XSAgRWNDb250ZXh0ICAgICAgUG9pbnRlciB0byB0aGUgRUMgY29u dGV4dC4NCj4gKyAgQHBhcmFtW291dF0gICAgICBQdWJsaWNLZXkgICAgICBQb2ludGVyIHRvIHQg YnVmZmVyIHRvIHJlY2VpdmUgZ2VuZXJhdGVkIHB1YmxpYyBYLFkuDQo+ICsgIEBwYXJhbVtpbiwg b3V0XSAgUHVibGljS2V5U2l6ZSAgT24gaW5wdXQsIHRoZSBzaXplIG9mIFB1YmxpYyBidWZmZXIg aW4gYnl0ZXMuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0 LCB0aGUgc2l6ZSBvZiBkYXRhIHJldHVybmVkIGluIFB1YmxpYyBidWZmZXIgaW4gYnl0ZXMuDQo+ ICsgIEByZXR2YWwgVFJVRSAgIEVDIHB1YmxpYyBYLFkgZ2VuZXJhdGlvbiBzdWNjZWVkZWQuDQo+ ICsgIEByZXR2YWwgRkFMU0UgIEVDIHB1YmxpYyBYLFkgZ2VuZXJhdGlvbiBmYWlsZWQuDQo+ICsg IEByZXR2YWwgRkFMU0UgIFB1YmxpY0tleVNpemUgaXMgbm90IGxhcmdlIGVub3VnaC4NCj4gKyoq Lw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY0dlbmVyYXRlS2V5ICgNCj4gKyAgSU4gT1VU ICBWT0lEICAgKkVjQ29udGV4dCwNCj4gKyAgT1VUICAgICBVSU5UOCAgKlB1YmxpY0tleSwNCj4g KyAgSU4gT1VUICBVSU5UTiAgKlB1YmxpY0tleVNpemUNCj4gKyAgKQ0KPiArew0KPiArICBBU1NF UlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg R2V0cyB0aGUgcHVibGljIGtleSBjb21wb25lbnQgZnJvbSB0aGUgZXN0YWJsaXNoZWQgRUMgY29u dGV4dC4NCj4gKyAgVGhlIEVjIGNvbnRleHQgc2hvdWxkIGJlIGNvcnJlY3RseSBpbml0aWFsaXpl ZCBieSBFY05ld0J5TmlkLCBhbmQgc3VjY2Vzc2Z1bGx5DQo+ICsgIGdlbmVyYXRlIGtleSBwYWly IGZyb20gRWNHZW5lcmF0ZUtleSgpLg0KPiArICBGb3IgUC0yNTYsIHRoZSBQdWJsaWNTaXplIGlz IDY0LiBGaXJzdCAzMi1ieXRlIGlzIFgsIFNlY29uZCAzMi1ieXRlIGlzIFkuDQo+ICsgIEZvciBQ LTM4NCwgdGhlIFB1YmxpY1NpemUgaXMgOTYuIEZpcnN0IDQ4LWJ5dGUgaXMgWCwgU2Vjb25kIDQ4 LWJ5dGUgaXMgWS4NCj4gKyAgRm9yIFAtNTIxLCB0aGUgUHVibGljU2l6ZSBpcyAxMzIuIEZpcnN0 IDY2LWJ5dGUgaXMgWCwgU2Vjb25kIDY2LWJ5dGUgaXMgWS4NCj4gKyAgQHBhcmFtW2luLCBvdXRd ICBFY0NvbnRleHQgICAgICBQb2ludGVyIHRvIEVDIGNvbnRleHQgYmVpbmcgc2V0Lg0KPiArICBA cGFyYW1bb3V0XSAgICAgIFB1YmxpY0tleSAgICAgIFBvaW50ZXIgdG8gdCBidWZmZXIgdG8gcmVj ZWl2ZSBnZW5lcmF0ZWQgcHVibGljIFgsWS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdICBQdWJsaWNL ZXlTaXplICBPbiBpbnB1dCwgdGhlIHNpemUgb2YgUHVibGljIGJ1ZmZlciBpbiBieXRlcy4NCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBvdXRwdXQsIHRoZSBzaXplIG9m IGRhdGEgcmV0dXJuZWQgaW4gUHVibGljIGJ1ZmZlciBpbiBieXRlcy4NCj4gKyAgQHJldHZhbCAg VFJVRSAgIEVDIGtleSBjb21wb25lbnQgd2FzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQo+ICsg IEByZXR2YWwgIEZBTFNFICBJbnZhbGlkIEVDIGtleSBjb21wb25lbnQuDQo+ICsqKi8NCj4gK0JP T0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNHZXRQdWJLZXkgKA0KPiArICBJTiBPVVQgIFZPSUQgICAq RWNDb250ZXh0LA0KPiArICBPVVQgICAgIFVJTlQ4ICAqUHVibGljS2V5LA0KPiArICBJTiBPVVQg IFVJTlROICAqUHVibGljS2V5U2l6ZQ0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0Up Ow0KPiArICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDb21wdXRlcyBl eGNoYW5nZWQgY29tbW9uIGtleS4NCj4gKyAgR2l2ZW4gcGVlcidzIHB1YmxpYyBrZXkgKFgsIFkp LCB0aGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSBleGNoYW5nZWQgY29tbW9uIGtleSwNCj4gKyAg YmFzZWQgb24gaXRzIG93biBjb250ZXh0IGluY2x1ZGluZyB2YWx1ZSBvZiBjdXJ2ZSBwYXJhbWV0 ZXIgYW5kIHJhbmRvbSBzZWNyZXQuDQo+ICsgIFggaXMgdGhlIGZpcnN0IGhhbGYgb2YgUGVlclB1 YmxpYyB3aXRoIHNpemUgYmVpbmcgUGVlclB1YmxpY1NpemUgLyAyLA0KPiArICBZIGlzIHRoZSBz ZWNvbmQgaGFsZiBvZiBQZWVyUHVibGljIHdpdGggc2l6ZSBiZWluZyBQZWVyUHVibGljU2l6ZSAv IDIuDQo+ICsgIElmIEVjQ29udGV4dCBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gKyAg SWYgUGVlclB1YmxpYyBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gKyAgSWYgUGVlclB1 YmxpY1NpemUgaXMgMCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ICsgIElmIEtleSBpcyBOVUxMLCB0 aGVuIHJldHVybiBGQUxTRS4NCj4gKyAgSWYgS2V5U2l6ZSBpcyBub3QgbGFyZ2UgZW5vdWdoLCB0 aGVuIHJldHVybiBGQUxTRS4NCj4gKyAgRm9yIFAtMjU2LCB0aGUgUGVlclB1YmxpY1NpemUgaXMg NjQuIEZpcnN0IDMyLWJ5dGUgaXMgWCwgU2Vjb25kIDMyLWJ5dGUgaXMgWS4NCj4gKyAgRm9yIFAt Mzg0LCB0aGUgUGVlclB1YmxpY1NpemUgaXMgOTYuIEZpcnN0IDQ4LWJ5dGUgaXMgWCwgU2Vjb25k IDQ4LWJ5dGUgaXMgWS4NCj4gKyAgRm9yIFAtNTIxLCB0aGUgUGVlclB1YmxpY1NpemUgaXMgMTMy LiBGaXJzdCA2Ni1ieXRlIGlzIFgsIFNlY29uZCA2Ni1ieXRlIGlzIFkuDQo+ICsgIEBwYXJhbVtp biwgb3V0XSAgRWNDb250ZXh0ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIEVDIGNvbnRleHQuDQo+ ICsgIEBwYXJhbVtpbl0gICAgICAgUGVlclB1YmxpYyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHBl ZXIncyBwdWJsaWMgWCxZLg0KPiArICBAcGFyYW1baW5dICAgICAgIFBlZXJQdWJsaWNTaXplICAg ICBTaXplIG9mIHBlZXIncyBwdWJsaWMgWCxZIGluIGJ5dGVzLg0KPiArICBAcGFyYW1baW5dICAg ICAgIENvbXByZXNzRmxhZyAgICAgICBGbGFnIG9mIFBlZXJQdWJsaWMgaXMgY29tcHJlc3NlZCBv ciBub3QuDQo+ICsgIEBwYXJhbVtvdXRdICAgICAgS2V5ICAgICAgICAgICAgICAgIFBvaW50ZXIg dG8gdGhlIGJ1ZmZlciB0byByZWNlaXZlIGdlbmVyYXRlZCBrZXkuDQo+ICsgIEBwYXJhbVtpbiwg b3V0XSAgS2V5U2l6ZSAgICAgICAgICAgIE9uIGlucHV0LCB0aGUgc2l6ZSBvZiBLZXkgYnVmZmVy IGluIGJ5dGVzLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBv dXRwdXQsIHRoZSBzaXplIG9mIGRhdGEgcmV0dXJuZWQgaW4gS2V5IGJ1ZmZlciBpbiBieXRlcy4N Cj4gKyAgQHJldHZhbCBUUlVFICAgRUMgZXhjaGFuZ2VkIGtleSBnZW5lcmF0aW9uIHN1Y2NlZWRl ZC4NCj4gKyAgQHJldHZhbCBGQUxTRSAgRUMgZXhjaGFuZ2VkIGtleSBnZW5lcmF0aW9uIGZhaWxl ZC4NCj4gKyAgQHJldHZhbCBGQUxTRSAgS2V5U2l6ZSBpcyBub3QgbGFyZ2UgZW5vdWdoLg0KPiAr KiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0VjRGhDb21wdXRlS2V5ICgNCj4gKyAgSU4g T1VUICBWT0lEICAgICAgICAgKkVjQ29udGV4dCwNCj4gKyAgSU4gICAgICBDT05TVCBVSU5UOCAg KlBlZXJQdWJsaWMsDQo+ICsgIElOICAgICAgVUlOVE4gICAgICAgIFBlZXJQdWJsaWNTaXplLA0K PiArICBJTiAgICAgIENPTlNUIElOVDMyICAqQ29tcHJlc3NGbGFnLA0KPiArICBPVVQgICAgIFVJ TlQ4ICAgICAgICAqS2V5LA0KPiArICBJTiBPVVQgIFVJTlROICAgICAgICAqS2V5U2l6ZQ0KPiAr ICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRkFMU0U7DQo+ICt9 DQo+IGRpZmYgLS1naXQgYS9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvU21tQ3J5cHRM aWIuaW5mIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1NtbUNyeXB0TGliLmluZg0K PiBpbmRleCBjZTZhNzg5ZGZkLi40YmMzMDYzNDg1IDEwMDY0NA0KPiAtLS0gYS9DcnlwdG9Qa2cv TGlicmFyeS9CYXNlQ3J5cHRMaWIvU21tQ3J5cHRMaWIuaW5mDQo+ICsrKyBiL0NyeXB0b1BrZy9M aWJyYXJ5L0Jhc2VDcnlwdExpYi9TbW1DcnlwdExpYi5pbmYNCj4gQEAgLTU5LDYgKzU5LDcgQEAN Cj4gICAgUGsvQ3J5cHRUc051bGwuYw0KPiAgICBQay9DcnlwdFJzYVBzcy5jDQo+ICAgIFBrL0Ny eXB0UnNhUHNzU2lnbk51bGwuYw0KPiArICBQay9DcnlwdEVjTnVsbC5jDQo+ICAgIFBlbS9Dcnlw dFBlbS5jDQo+ICAgIEJuL0NyeXB0Qm5OdWxsLmMNCj4gDQo+IGRpZmYgLS1naXQgYS9DcnlwdG9Q a2cvTGlicmFyeS9CYXNlQ3J5cHRMaWJOdWxsL0Jhc2VDcnlwdExpYk51bGwuaW5mIGIvQ3J5cHRv UGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9CYXNlQ3J5cHRMaWJOdWxsLmluZg0KPiBpbmRl eCAzNTRmM2Q4MGFhLi5lMWE1N2VmMDlmIDEwMDY0NA0KPiAtLS0gYS9DcnlwdG9Qa2cvTGlicmFy eS9CYXNlQ3J5cHRMaWJOdWxsL0Jhc2VDcnlwdExpYk51bGwuaW5mDQo+ICsrKyBiL0NyeXB0b1Br Zy9MaWJyYXJ5L0Jhc2VDcnlwdExpYk51bGwvQmFzZUNyeXB0TGliTnVsbC5pbmYNCj4gQEAgLTQ5 LDYgKzQ5LDcgQEANCj4gICAgUGsvQ3J5cHRYNTA5TnVsbC5jDQo+ICAgIFBrL0NyeXB0QXV0aGVu dGljb2RlTnVsbC5jDQo+ICAgIFBrL0NyeXB0VHNOdWxsLmMNCj4gKyAgUGsvQ3J5cHRFY051bGwu Yw0KPiAgICBQZW0vQ3J5cHRQZW1OdWxsLmMNCj4gICAgUmFuZC9DcnlwdFJhbmROdWxsLmMNCj4g ICAgUGsvQ3J5cHRSc2FQc3NOdWxsLmMNCj4gZGlmZiAtLWdpdCBhL0NyeXB0b1BrZy9MaWJyYXJ5 L0Jhc2VDcnlwdExpYk51bGwvUGsvQ3J5cHRFY051bGwuYyBiL0NyeXB0b1BrZy9MaWJyYXJ5L0Jh c2VDcnlwdExpYk51bGwvUGsvQ3J5cHRFY051bGwuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiBpbmRleCAwMDAwMDAwMDAwLi5kOWYxMDA0ZjZjDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIv Q3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9Qay9DcnlwdEVjTnVsbC5jDQo+IEBA IC0wLDAgKzEsNDk2IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgRWxsaXB0aWMgQ3VydmUgYW5kIEVD REggQVBJIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIE9wZW5TU0wNCj4gKw0KPiArICBDb3B5cmln aHQgKGMpIDIwMjIsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4N Cj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKw0K PiArKiovDQo+ICsNCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VDcnlwdExpYi5oPg0KPiArI2lu Y2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gKw0KPiArLyoqDQo+ICsgIEluaXRpYWxpemUg bmV3IG9wYXF1ZSBFY0dyb3VwIG9iamVjdC4gVGhpcyBvYmplY3QgcmVwcmVzZW50cyBhbiBFQyBj dXJ2ZSBhbmQNCj4gKyAgYW5kIGlzIHVzZWQgZm9yIGNhbGN1bGF0aW9uIHdpdGhpbiB0aGlzIGdy b3VwLiBUaGlzIG9iamVjdCBzaG91bGQgYmUgZnJlZWQNCj4gKyAgdXNpbmcgRWNHcm91cEZyZWUo KSBmdW5jdGlvbi4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDcnlwdG9OaWQgICBJZGVudGlmeWlu ZyBudW1iZXIgZm9yIHRoZSBFQ0MgY3VydmUgKERlZmluZWQgaW4NCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgQmFzZUNyeXB0TGliLmgpLg0KPiArDQo+ICsgIEByZXR2YWwgRWNHcm91cCBv YmplY3QgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgTlVMTCAgICAgICAgICAgIE9uIGZhaWx1 cmUuDQo+ICsqKi8NCj4gK1ZPSUQgKg0KPiArRUZJQVBJDQo+ICtFY0dyb3VwSW5pdCAoDQo+ICsg IElOIFVJTlROICBDcnlwdG9OaWQNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsN Cj4gKyAgcmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBHZXQgRUMgY3VydmUg cGFyYW1ldGVycy4gV2hpbGUgZWxsaXB0aWMgY3VydmUgZXF1YXRpb24gaXMgWV4yIG1vZCBQID0g KFheMyArIEFYICsgQikgTW9kIFAuDQo+ICsgIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIHBy b3ZpZGVkIEJpZyBOdW1iZXIgb2JqZWN0cyAgdG8gdGhlIGNvcnJlc3BvbmRpbmcNCj4gKyAgdmFs dWVzLiBUaGUgY2FsbGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSBhbGwgdGhlICJvdXQiIEJpZ051bWJl ciBwYXJhbWV0ZXJzDQo+ICsgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4NCj4gKw0KPiArICBA cGFyYW1baW5dICBFY0dyb3VwICAgIEVDIGdyb3VwIG9iamVjdC4NCj4gKyAgQHBhcmFtW291dF0g Qm5QcmltZSAgICBHcm91cCBwcmltZSBudW1iZXIuDQo+ICsgIEBwYXJhbVtvdXRdIEJuQSAgICAg ICAgQSBjb2VmZmljaWVudC4NCj4gKyAgQHBhcmFtW291dF0gQm5CICAgICAgICBCIGNvZWZmaWNp ZW50Li4NCj4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgICBCTiBjb250ZXh0Lg0KPiArDQo+ICsg IEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFsIEZBTFNFICAg ICAgICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0VjR3Jv dXBHZXRDdXJ2ZSAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiArICBPVVQgVk9J RCAgICAgICAqQm5QcmltZSwNCj4gKyAgT1VUIFZPSUQgICAgICAgKkJuQSwNCj4gKyAgT1VUIFZP SUQgICAgICAgKkJuQiwNCj4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ICsgICkNCj4gK3sN Cj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBGQUxTRTsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIEdldCBFQyBncm91cCBvcmRlci4NCj4gKyAgVGhpcyBmdW5jdGlvbiB3aWxsIHNl dCB0aGUgcHJvdmlkZWQgQmlnIE51bWJlciBvYmplY3QgdG8gdGhlIGNvcnJlc3BvbmRpbmcNCj4g KyAgdmFsdWUuIFRoZSBjYWxsZXIgbmVlZHMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlICJvdXQiIEJp Z051bWJlciBwYXJhbWV0ZXINCj4gKyAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgRWNHcm91cCAgIEVDIGdyb3VwIG9iamVjdC4NCj4gKyAgQHBhcmFtW291 dF0gQm5PcmRlciAgIEdyb3VwIHByaW1lIG51bWJlci4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUg ICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lz ZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY0dyb3VwR2V0T3JkZXIgKA0K PiArICBJTiBWT0lEICAgKkVjR3JvdXAsDQo+ICsgIE9VVCBWT0lEICAqQm5PcmRlcg0KPiArICAp DQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIEVDIGdyb3VwIG9iamVj dCB1c2luZyBFY0dyb3VwSW5pdCgpLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICBF QyBncm91cCBvYmplY3QgdG8gZnJlZS4NCj4gKyoqLw0KPiArVk9JRA0KPiArRUZJQVBJDQo+ICtF Y0dyb3VwRnJlZSAoDQo+ICsgIElOIFZPSUQgICpFY0dyb3VwDQo+ICsgICkNCj4gK3sNCj4gKyAg QVNTRVJUIChGQUxTRSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBJbml0aWFsaXplIG5ldyBv cGFxdWUgRUMgUG9pbnQgb2JqZWN0LiBUaGlzIG9iamVjdCByZXByZXNlbnRzIGFuIEVDIHBvaW50 DQo+ICsgIHdpdGhpbiB0aGUgZ2l2ZW4gRUMgZ3JvdXAgKGN1cnZlKS4NCj4gKw0KPiArICBAcGFy YW1baW5dICBFQyBHcm91cCwgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXNpbmcgRWNHcm91cEluaXQo KS4NCj4gKw0KPiArICBAcmV0dmFsIEVDIFBvaW50IG9iamVjdCAgT24gc3VjY2Vzcy4NCj4gKyAg QHJldHZhbCBOVUxMICAgICAgICAgICAgIE9uIGZhaWx1cmUuDQo+ICsqKi8NCj4gK1ZPSUQgKg0K PiArRUZJQVBJDQo+ICtFY1BvaW50SW5pdCAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3Vw DQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBOVUxMOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBFQyBQb2lu dCBvYmplY3QgdXNpbmcgRWNQb2ludEluaXQoKS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBFY1Bv aW50ICAgRUMgUG9pbnQgdG8gZnJlZS4NCj4gKyAgQHBhcmFtW2luXSAgQ2xlYXIgICAgIFRSVUUg aWZmIHRoZSBtZW1vcnkgc2hvdWxkIGJlIGNsZWFyZWQuDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0VG SUFQSQ0KPiArRWNQb2ludERlSW5pdCAoDQo+ICsgIElOIFZPSUQgICAgICpFY1BvaW50LA0KPiAr ICBJTiBCT09MRUFOICBDbGVhcg0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgR2V0IEVDIHBvaW50IGFmZmluZSAoeCx5KSBjb29yZGlu YXRlcy4NCj4gKyAgVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgcHJvdmlkZWQgQmlnIE51bWJl ciBvYmplY3RzIHRvIHRoZSBjb3JyZXNwb25kaW5nDQo+ICsgIHZhbHVlcy4gVGhlIGNhbGxlciBu ZWVkcyB0byBtYWtlIHN1cmUgYWxsIHRoZSAib3V0IiBCaWdOdW1iZXIgcGFyYW1ldGVycw0KPiAr ICBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNHcm91 cCAgICBFQyBncm91cCBvYmplY3QuDQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICAgRUMgcG9p bnQgb2JqZWN0Lg0KPiArICBAcGFyYW1bb3V0XSBCblggICAgICAgIFggY29vcmRpbmF0ZS4NCj4g KyAgQHBhcmFtW291dF0gQm5ZICAgICAgICBZIGNvb3JkaW5hdGUuDQo+ICsgIEBwYXJhbVtpbl0g IEJuQ3R4ICAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4N Cj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZh bCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJ DQo+ICtFY1BvaW50R2V0QWZmaW5lQ29vcmRpbmF0ZXMgKA0KPiArICBJTiBDT05TVCBWT0lEICAq RWNHcm91cCwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnQsDQo+ICsgIE9VVCBWT0lEICAg ICAgICpCblgsDQo+ICsgIE9VVCBWT0lEICAgICAgICpCblksDQo+ICsgIElOIFZPSUQgICAgICAg ICpCbkN0eA0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4g RkFMU0U7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBTZXQgRUMgcG9pbnQgYWZmaW5lICh4LHkp IGNvb3JkaW5hdGVzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgRUMgZ3JvdXAg b2JqZWN0Lg0KPiArICBAcGFyYW1baW5dICBFY1BvaW50ICAgIEVDIHBvaW50IG9iamVjdC4NCj4g KyAgQHBhcmFtW2luXSAgQm5YICAgICAgICBYIGNvb3JkaW5hdGUuDQo+ICsgIEBwYXJhbVtpbl0g IEJuWSAgICAgICAgWSBjb29yZGluYXRlLg0KPiArICBAcGFyYW1baW5dICBCbkN0eCAgICAgIEJO IGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ICsNCj4gKyAgQHJl dHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAg ICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNQb2ludFNl dEFmZmluZUNvb3JkaW5hdGVzICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsg IElOIFZPSUQgICAgICAgICpFY1BvaW50LA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5YLA0KPiAr ICBJTiBDT05TVCBWT0lEICAqQm5ZLA0KPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gKyAg KQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0K PiArDQo+ICsvKioNCj4gKyAgRUMgUG9pbnQgYWRkaXRpb24uIEVjUG9pbnRSZXN1bHQgPSBFY1Bv aW50QSArIEVjUG9pbnRCLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgICAgICAg RUMgZ3JvdXAgb2JqZWN0Lg0KPiArICBAcGFyYW1bb3V0XSBFY1BvaW50UmVzdWx0ICAgIEVDIHBv aW50IHRvIGhvbGQgdGhlIHJlc3VsdC4gVGhlIHBvaW50IHNob3VsZA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJlIHByb3Blcmx5IGluaXRpYWxpemVkLg0KPiArICBAcGFyYW1b aW5dICBFY1BvaW50QSAgICAgICAgIEVDIFBvaW50Lg0KPiArICBAcGFyYW1baW5dICBFY1BvaW50 QiAgICAgICAgIEVDIFBvaW50Lg0KPiArICBAcGFyYW1baW5dICBCbkN0eCAgICAgICAgICAgIEJO IGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ICsNCj4gKyAgQHJl dHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAg ICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNQb2ludEFk ZCAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiArICBPVVQgVk9JRCAgICAgICAq RWNQb2ludFJlc3VsdCwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnRBLA0KPiArICBJTiBD T05TVCBWT0lEICAqRWNQb2ludEIsDQo+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiArICAp DQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICBWYXJpYWJsZSBFQyBwb2ludCBtdWx0aXBsaWNhdGlvbi4gRWNQb2lu dFJlc3VsdCA9IEVjUG9pbnQgKiBCblBTY2FsYXIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNH cm91cCAgICAgICAgICBFQyBncm91cCBvYmplY3QuDQo+ICsgIEBwYXJhbVtvdXRdIEVjUG9pbnRS ZXN1bHQgICAgRUMgcG9pbnQgdG8gaG9sZCB0aGUgcmVzdWx0LiBUaGUgcG9pbnQgc2hvdWxkDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQu DQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICAgICAgICAgRUMgUG9pbnQuDQo+ICsgIEBwYXJh bVtpbl0gIEJuUFNjYWxhciAgICAgICAgUCBTY2FsYXIuDQo+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4 ICAgICAgICAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4N Cj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZh bCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJ DQo+ICtFY1BvaW50TXVsICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsgIE9V VCBWT0lEICAgICAgICpFY1BvaW50UmVzdWx0LA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNQb2lu dCwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuUFNjYWxhciwNCj4gKyAgSU4gVk9JRCAgICAgICAg KkJuQ3R4DQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBG QUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSBvZiB0 aGUgc3VwcGxpZWQgRUMgcG9pbnQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgRWNHcm91cCAg IEVDIGdyb3VwIG9iamVjdC4NCj4gKyAgQHBhcmFtW2luLG91dF0gRWNQb2ludCAgIEVDIHBvaW50 IHRvIGludmVydC4NCj4gKyAgQHBhcmFtW2luXSAgICAgQm5DdHggICAgIEJOIGNvbnRleHQsIGNy ZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAg ICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2Uu DQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNQb2ludEludmVydCAoDQo+ICsg IElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiArICBJTiBPVVQgVk9JRCAgICAqRWNQb2ludCwN Cj4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChG QUxTRSk7DQo+ICsgIHJldHVybiBGQUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENoZWNr IGlmIHRoZSBzdXBwbGllZCBwb2ludCBpcyBvbiBFQyBjdXJ2ZS4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBFY0dyb3VwICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiArICBAcGFyYW1baW5dICBFY1BvaW50 ICAgRUMgcG9pbnQgdG8gY2hlY2suDQo+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICBCTiBjb250 ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiArDQo+ICsgIEByZXR2YWwg VFJVRSAgICAgICAgICBPbiBjdXJ2ZS4NCj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVy d2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY1BvaW50SXNPbkN1cnZl ICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ICsgIElOIENPTlNUIFZPSUQgICpF Y1BvaW50LA0KPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gKyAgKQ0KPiArew0KPiArICBB U1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAgQ2hlY2sgaWYgdGhlIHN1cHBsaWVkIHBvaW50IGlzIGF0IGluZmluaXR5Lg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ICsgIEBwYXJhbVtpbl0g IEVjUG9pbnQgICBFQyBwb2ludCB0byBjaGVjay4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAg ICAgICAgQXQgaW5maW5pdHkuDQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2Uu DQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNQb2ludElzQXRJbmZpbml0eSAo DQo+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiArICBJTiBDT05TVCBWT0lEICAqRWNQ b2ludA0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRkFM U0U7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayBpZiBFQyBwb2ludHMgYXJlIGVxdWFs Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ICsg IEBwYXJhbVtpbl0gIEVjUG9pbnRBICBFQyBwb2ludCBBLg0KPiArICBAcGFyYW1baW5dICBFY1Bv aW50QiAgRUMgcG9pbnQgQi4NCj4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgIEJOIGNvbnRleHQs IGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVF ICAgICAgICAgIEEgPT0gQi4NCj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4N Cj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY1BvaW50RXF1YWwgKA0KPiArICBJ TiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnRBLA0K PiArICBJTiBDT05TVCBWT0lEICAqRWNQb2ludEIsDQo+ICsgIElOIFZPSUQgICAgICAgICpCbkN0 eA0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRkFMU0U7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBTZXQgRUMgcG9pbnQgY29tcHJlc3NlZCBjb29yZGlu YXRlcy4gUG9pbnRzIGNhbiBiZSBkZXNjcmliZWQgaW4gdGVybXMgb2YNCj4gKyAgdGhlaXIgY29t cHJlc3NlZCBjb29yZGluYXRlcy4gRm9yIGEgcG9pbnQgKHgsIHkpLCBmb3IgYW55IGdpdmVuIHZh bHVlIGZvciB4DQo+ICsgIHN1Y2ggdGhhdCB0aGUgcG9pbnQgaXMgb24gdGhlIGN1cnZlIHRoZXJl IHdpbGwgb25seSBldmVyIGJlIHR3byBwb3NzaWJsZQ0KPiArICB2YWx1ZXMgZm9yIHkuIFRoZXJl Zm9yZSwgYSBwb2ludCBjYW4gYmUgc2V0IHVzaW5nIHRoaXMgZnVuY3Rpb24gd2hlcmUgQm5YIGlz DQo+ICsgIHRoZSB4IGNvb3JkaW5hdGUgYW5kIFlCaXQgaXMgYSB2YWx1ZSAwIG9yIDEgdG8gaWRl bnRpZnkgd2hpY2ggb2YgdGhlIHR3bw0KPiArICBwb3NzaWJsZSB2YWx1ZXMgZm9yIHkgc2hvdWxk IGJlIHVzZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgICBFQyBncm91cCBvYmpl Y3QuDQo+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICAgRUMgUG9pbnQuDQo+ICsgIEBwYXJhbVtp bl0gIEJuWCAgICAgICAgWCBjb29yZGluYXRlLg0KPiArICBAcGFyYW1baW5dICBZQml0ICAgICAg IDAgb3IgMSB0byBpZGVudGlmeSB3aGljaCBZIHZhbHVlIGlzIHVzZWQuDQo+ICsgIEBwYXJhbVtp bl0gIEJuQ3R4ICAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQo KS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJl dHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJ QVBJDQo+ICtFY1BvaW50U2V0Q29tcHJlc3NlZENvb3JkaW5hdGVzICgNCj4gKyAgSU4gQ09OU1Qg Vk9JRCAgKkVjR3JvdXAsDQo+ICsgIElOIFZPSUQgICAgICAgICpFY1BvaW50LA0KPiArICBJTiBD T05TVCBWT0lEICAqQm5YLA0KPiArICBJTiBVSU5UOCAgICAgICBZQml0LA0KPiArICBJTiBWT0lE ICAgICAgICAqQm5DdHgNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAg cmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQWxsb2NhdGVzIGFuZCBJbml0 aWFsaXplcyBvbmUgRWxsaXB0aWMgQ3VydmUgQ29udGV4dCBmb3Igc3Vic2VxdWVudCB1c2UNCj4g KyAgd2l0aCB0aGUgTklELg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIE5pZCBjaXBoZXIgTklEDQo+ ICsgIEByZXR1cm4gICAgIFBvaW50ZXIgdG8gdGhlIEVsbGlwdGljIEN1cnZlIENvbnRleHQgdGhh dCBoYXMgYmVlbiBpbml0aWFsaXplZC4NCj4gKyAgICAgICAgICAgICAgSWYgdGhlIGFsbG9jYXRp b25zIGZhaWxzLCBFY05ld0J5TmlkKCkgcmV0dXJucyBOVUxMLg0KPiArKiovDQo+ICtWT0lEICoN Cj4gK0VGSUFQSQ0KPiArRWNOZXdCeU5pZCAoDQo+ICsgIElOIFVJTlROICBOaWQNCj4gKyAgKQ0K PiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBSZWxlYXNlIHRoZSBzcGVjaWZpZWQgRUMgY29udGV4dC4NCj4gKw0KPiAr ICBAcGFyYW1baW5dICBFY0NvbnRleHQgIFBvaW50ZXIgdG8gdGhlIEVDIGNvbnRleHQgdG8gYmUg cmVsZWFzZWQuDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0VGSUFQSQ0KPiArRWNGcmVlICgNCj4gKyAg SU4gIFZPSUQgICpFY0NvbnRleHQNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEdlbmVyYXRlcyBFQyBrZXkgYW5kIHJldHVybnMgRUMg cHVibGljIGtleSAoWCwgWSksIFBsZWFzZSBub3RlLCB0aGlzIGZ1bmN0aW9uIHVzZXMNCj4gKyAg cHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiBUaGUgY2FsbGVyIG11c3QgbWFrZSBzdXJl IFJhbmRvbVNlZWQoKQ0KPiArICBmdW5jdGlvbiB3YXMgcHJvcGVybHkgY2FsbGVkIGJlZm9yZS4N Cj4gKyAgVGhlIEVjIGNvbnRleHQgc2hvdWxkIGJlIGNvcnJlY3RseSBpbml0aWFsaXplZCBieSBF Y05ld0J5TmlkLg0KPiArICBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyByYW5kb20gc2VjcmV0LCBh bmQgY29tcHV0ZXMgdGhlIHB1YmxpYyBrZXkgKFgsIFkpLCB3aGljaCBpcw0KPiArICByZXR1cm5l ZCB2aWEgcGFyYW1ldGVyIFB1YmxpYywgUHVibGljU2l6ZS4NCj4gKyAgWCBpcyB0aGUgZmlyc3Qg aGFsZiBvZiBQdWJsaWMgd2l0aCBzaXplIGJlaW5nIFB1YmxpY1NpemUgLyAyLA0KPiArICBZIGlz IHRoZSBzZWNvbmQgaGFsZiBvZiBQdWJsaWMgd2l0aCBzaXplIGJlaW5nIFB1YmxpY1NpemUgLyAy Lg0KPiArICBFQyBjb250ZXh0IGlzIHVwZGF0ZWQgYWNjb3JkaW5nbHkuDQo+ICsgIElmIHRoZSBQ dWJsaWMgYnVmZmVyIGlzIHRvbyBzbWFsbCB0byBob2xkIHRoZSBwdWJsaWMgWCwgWSwgRkFMU0Ug aXMgcmV0dXJuZWQgYW5kDQo+ICsgIFB1YmxpY1NpemUgaXMgc2V0IHRvIHRoZSByZXF1aXJlZCBi dWZmZXIgc2l6ZSB0byBvYnRhaW4gdGhlIHB1YmxpYyBYLCBZLg0KPiArICBGb3IgUC0yNTYsIHRo ZSBQdWJsaWNTaXplIGlzIDY0LiBGaXJzdCAzMi1ieXRlIGlzIFgsIFNlY29uZCAzMi1ieXRlIGlz IFkuDQo+ICsgIEZvciBQLTM4NCwgdGhlIFB1YmxpY1NpemUgaXMgOTYuIEZpcnN0IDQ4LWJ5dGUg aXMgWCwgU2Vjb25kIDQ4LWJ5dGUgaXMgWS4NCj4gKyAgRm9yIFAtNTIxLCB0aGUgUHVibGljU2l6 ZSBpcyAxMzIuIEZpcnN0IDY2LWJ5dGUgaXMgWCwgU2Vjb25kIDY2LWJ5dGUgaXMgWS4NCj4gKyAg SWYgRWNDb250ZXh0IGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiArICBJZiBQdWJsaWNT aXplIGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiArICBJZiBQdWJsaWNTaXplIGlzIGxh cmdlIGVub3VnaCBidXQgUHVibGljIGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiArICBA cGFyYW1baW4sIG91dF0gIEVjQ29udGV4dCAgICAgIFBvaW50ZXIgdG8gdGhlIEVDIGNvbnRleHQu DQo+ICsgIEBwYXJhbVtvdXRdICAgICAgUHVibGljS2V5ICAgICAgUG9pbnRlciB0byB0IGJ1ZmZl ciB0byByZWNlaXZlIGdlbmVyYXRlZCBwdWJsaWMgWCxZLg0KPiArICBAcGFyYW1baW4sIG91dF0g IFB1YmxpY0tleVNpemUgIE9uIGlucHV0LCB0aGUgc2l6ZSBvZiBQdWJsaWMgYnVmZmVyIGluIGJ5 dGVzLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIG91dHB1dCwgdGhl IHNpemUgb2YgZGF0YSByZXR1cm5lZCBpbiBQdWJsaWMgYnVmZmVyIGluIGJ5dGVzLg0KPiArICBA cmV0dmFsIFRSVUUgICBFQyBwdWJsaWMgWCxZIGdlbmVyYXRpb24gc3VjY2VlZGVkLg0KPiArICBA cmV0dmFsIEZBTFNFICBFQyBwdWJsaWMgWCxZIGdlbmVyYXRpb24gZmFpbGVkLg0KPiArICBAcmV0 dmFsIEZBTFNFICBQdWJsaWNLZXlTaXplIGlzIG5vdCBsYXJnZSBlbm91Z2guDQo+ICsqKi8NCj4g K0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArRWNHZW5lcmF0ZUtleSAoDQo+ICsgIElOIE9VVCAgVk9J RCAgICpFY0NvbnRleHQsDQo+ICsgIE9VVCAgICAgVUlOVDggICpQdWJsaWNLZXksDQo+ICsgIElO IE9VVCAgVUlOVE4gICpQdWJsaWNLZXlTaXplDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChG QUxTRSk7DQo+ICsgIHJldHVybiBGQUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEdldHMg dGhlIHB1YmxpYyBrZXkgY29tcG9uZW50IGZyb20gdGhlIGVzdGFibGlzaGVkIEVDIGNvbnRleHQu DQo+ICsgIFRoZSBFYyBjb250ZXh0IHNob3VsZCBiZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgYnkg RWNOZXdCeU5pZCwgYW5kIHN1Y2Nlc3NmdWxseQ0KPiArICBnZW5lcmF0ZSBrZXkgcGFpciBmcm9t IEVjR2VuZXJhdGVLZXkoKS4NCj4gKyAgRm9yIFAtMjU2LCB0aGUgUHVibGljU2l6ZSBpcyA2NC4g Rmlyc3QgMzItYnl0ZSBpcyBYLCBTZWNvbmQgMzItYnl0ZSBpcyBZLg0KPiArICBGb3IgUC0zODQs IHRoZSBQdWJsaWNTaXplIGlzIDk2LiBGaXJzdCA0OC1ieXRlIGlzIFgsIFNlY29uZCA0OC1ieXRl IGlzIFkuDQo+ICsgIEZvciBQLTUyMSwgdGhlIFB1YmxpY1NpemUgaXMgMTMyLiBGaXJzdCA2Ni1i eXRlIGlzIFgsIFNlY29uZCA2Ni1ieXRlIGlzIFkuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgRWND b250ZXh0ICAgICAgUG9pbnRlciB0byBFQyBjb250ZXh0IGJlaW5nIHNldC4NCj4gKyAgQHBhcmFt W291dF0gICAgICBQdWJsaWNLZXkgICAgICBQb2ludGVyIHRvIHQgYnVmZmVyIHRvIHJlY2VpdmUg Z2VuZXJhdGVkIHB1YmxpYyBYLFkuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgUHVibGljS2V5U2l6 ZSAgT24gaW5wdXQsIHRoZSBzaXplIG9mIFB1YmxpYyBidWZmZXIgaW4gYnl0ZXMuDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0LCB0aGUgc2l6ZSBvZiBkYXRh IHJldHVybmVkIGluIFB1YmxpYyBidWZmZXIgaW4gYnl0ZXMuDQo+ICsgIEByZXR2YWwgIFRSVUUg ICBFQyBrZXkgY29tcG9uZW50IHdhcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0 dmFsICBGQUxTRSAgSW52YWxpZCBFQyBrZXkgY29tcG9uZW50Lg0KPiArKiovDQo+ICtCT09MRUFO DQo+ICtFRklBUEkNCj4gK0VjR2V0UHViS2V5ICgNCj4gKyAgSU4gT1VUICBWT0lEICAgKkVjQ29u dGV4dCwNCj4gKyAgT1VUICAgICBVSU5UOCAgKlB1YmxpY0tleSwNCj4gKyAgSU4gT1VUICBVSU5U TiAgKlB1YmxpY0tleVNpemUNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4g KyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ29tcHV0ZXMgZXhjaGFu Z2VkIGNvbW1vbiBrZXkuDQo+ICsgIEdpdmVuIHBlZXIncyBwdWJsaWMga2V5IChYLCBZKSwgdGhp cyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgZXhjaGFuZ2VkIGNvbW1vbiBrZXksDQo+ICsgIGJhc2Vk IG9uIGl0cyBvd24gY29udGV4dCBpbmNsdWRpbmcgdmFsdWUgb2YgY3VydmUgcGFyYW1ldGVyIGFu ZCByYW5kb20gc2VjcmV0Lg0KPiArICBYIGlzIHRoZSBmaXJzdCBoYWxmIG9mIFBlZXJQdWJsaWMg d2l0aCBzaXplIGJlaW5nIFBlZXJQdWJsaWNTaXplIC8gMiwNCj4gKyAgWSBpcyB0aGUgc2Vjb25k IGhhbGYgb2YgUGVlclB1YmxpYyB3aXRoIHNpemUgYmVpbmcgUGVlclB1YmxpY1NpemUgLyAyLg0K PiArICBJZiBFY0NvbnRleHQgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ICsgIElmIFBl ZXJQdWJsaWMgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ICsgIElmIFBlZXJQdWJsaWNT aXplIGlzIDAsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiArICBJZiBLZXkgaXMgTlVMTCwgdGhlbiBy ZXR1cm4gRkFMU0UuDQo+ICsgIElmIEtleVNpemUgaXMgbm90IGxhcmdlIGVub3VnaCwgdGhlbiBy ZXR1cm4gRkFMU0UuDQo+ICsgIEZvciBQLTI1NiwgdGhlIFBlZXJQdWJsaWNTaXplIGlzIDY0LiBG aXJzdCAzMi1ieXRlIGlzIFgsIFNlY29uZCAzMi1ieXRlIGlzIFkuDQo+ICsgIEZvciBQLTM4NCwg dGhlIFBlZXJQdWJsaWNTaXplIGlzIDk2LiBGaXJzdCA0OC1ieXRlIGlzIFgsIFNlY29uZCA0OC1i eXRlIGlzIFkuDQo+ICsgIEZvciBQLTUyMSwgdGhlIFBlZXJQdWJsaWNTaXplIGlzIDEzMi4gRmly c3QgNjYtYnl0ZSBpcyBYLCBTZWNvbmQgNjYtYnl0ZSBpcyBZLg0KPiArICBAcGFyYW1baW4sIG91 dF0gIEVjQ29udGV4dCAgICAgICAgICBQb2ludGVyIHRvIHRoZSBFQyBjb250ZXh0Lg0KPiArICBA cGFyYW1baW5dICAgICAgIFBlZXJQdWJsaWMgICAgICAgICBQb2ludGVyIHRvIHRoZSBwZWVyJ3Mg cHVibGljIFgsWS4NCj4gKyAgQHBhcmFtW2luXSAgICAgICBQZWVyUHVibGljU2l6ZSAgICAgU2l6 ZSBvZiBwZWVyJ3MgcHVibGljIFgsWSBpbiBieXRlcy4NCj4gKyAgQHBhcmFtW2luXSAgICAgICBD b21wcmVzc0ZsYWcgICAgICAgRmxhZyBvZiBQZWVyUHVibGljIGlzIGNvbXByZXNzZWQgb3Igbm90 Lg0KPiArICBAcGFyYW1bb3V0XSAgICAgIEtleSAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRo ZSBidWZmZXIgdG8gcmVjZWl2ZSBnZW5lcmF0ZWQga2V5Lg0KPiArICBAcGFyYW1baW4sIG91dF0g IEtleVNpemUgICAgICAgICAgICBPbiBpbnB1dCwgdGhlIHNpemUgb2YgS2V5IGJ1ZmZlciBpbiBi eXRlcy4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0 LCB0aGUgc2l6ZSBvZiBkYXRhIHJldHVybmVkIGluIEtleSBidWZmZXIgaW4gYnl0ZXMuDQo+ICsg IEByZXR2YWwgVFJVRSAgIEVDIGV4Y2hhbmdlZCBrZXkgZ2VuZXJhdGlvbiBzdWNjZWVkZWQuDQo+ ICsgIEByZXR2YWwgRkFMU0UgIEVDIGV4Y2hhbmdlZCBrZXkgZ2VuZXJhdGlvbiBmYWlsZWQuDQo+ ICsgIEByZXR2YWwgRkFMU0UgIEtleVNpemUgaXMgbm90IGxhcmdlIGVub3VnaC4NCj4gKyoqLw0K PiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtFY0RoQ29tcHV0ZUtleSAoDQo+ICsgIElOIE9VVCAg Vk9JRCAgICAgICAgICpFY0NvbnRleHQsDQo+ICsgIElOICAgICAgQ09OU1QgVUlOVDggICpQZWVy UHVibGljLA0KPiArICBJTiAgICAgIFVJTlROICAgICAgICBQZWVyUHVibGljU2l6ZSwNCj4gKyAg SU4gICAgICBDT05TVCBJTlQzMiAgKkNvbXByZXNzRmxhZywNCj4gKyAgT1VUICAgICBVSU5UOCAg ICAgICAgKktleSwNCj4gKyAgSU4gT1VUICBVSU5UTiAgICAgICAgKktleVNpemUNCj4gKyAgKQ0K PiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiAt LQ0KPiAyLjMxLjEud2luZG93cy4xDQo+IA0KPiANCj4gDQo+IA0KPiANCg0K