From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 4B14549F54 for ; Thu, 16 May 2024 15:22:53 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CA0F668D3E1; Thu, 16 May 2024 18:22:51 +0300 (EEST) Received: from mail-pf1-f196.google.com (mail-pf1-f196.google.com [209.85.210.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 08F2668CEC8 for ; Thu, 16 May 2024 18:22:44 +0300 (EEST) Received: by mail-pf1-f196.google.com with SMTP id d2e1a72fcca58-6f4551f2725so310075b3a.1 for ; Thu, 16 May 2024 08:22:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1715872962; x=1716477762; darn=ffmpeg.org; h=message-id:in-reply-to:to:references:date:subject:mime-version:from :from:to:cc:subject:date:message-id:reply-to; bh=SyHqv/P4+Pw+a6LdUXNV2276jHFPnGv7l2BlZf9qdvE=; b=Gadu3KQMse4HgcRFHmemx7v99FpEOk0R9wgxyyXq3iwOl3cWfoF/OCGmEERDznPzP6 LIgL94MJhVjNYhLV61pxrl0Ctoj20/sPRSCO/YVPdOts2WZdYn9CaogZxLriwO6tuayE 16ujjIV9gHcXf7DD8wrocMrm/XShJDJSx0fu/Lvbqgu/mAL035wh+jUtYMRv96WTYX4r BJFoxKB8NPqER5Mrohi+dgIaWjBqO1OtsUECpK4pHqXRjeYI7TXCgrRhyYUxg28hltgx o3WS3zyu9xrs++BWdFXyhc2wMBlsBKWSHmo5YGWQpaLWD8FonStmH5lREzciUGHNJD8y eLkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715872962; x=1716477762; h=message-id:in-reply-to:to:references:date:subject:mime-version:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=SyHqv/P4+Pw+a6LdUXNV2276jHFPnGv7l2BlZf9qdvE=; b=bH4rgXStMVpT657SVUlxBhrQMkEe4wD0SUPAGB2ARDg7bI0iUHZwCnBo7LbWj4fy6D 5YMZaUGpTWMYYGGlkregICU6iZifqmrMbf68JsDVFZqTM9Ae0zhQgJ6YtLZ68vwlKiQJ nHkd/uK8wdX5IpjG352vXuaB4m/aKmRnBIL9HnscCNk4IB2shyR5RkZkYxhCzPVJ1QjW SJqnNIVSE+aYTthP66phpxlIQuAiLORDOJrxhpeCvxiPTEVpHEMJLW+8YebSwEo92Q4A TejuMymI67/QTOuKGFOlz50lUDzz2Z1FVVP1lnd9LHarWsGguLsv+w/Q7cExIc2f3wk+ ehhA== X-Gm-Message-State: AOJu0Yw/xsJ565JojE04RwvHvzow/rnoR1E7odV2629iiipKXXxRSiHS O8bNElOeENwRHJHIP3o8ZBcEUjiv5FotRvdhsRLTNMJSzSuQ5W0ryJZYvmGn X-Google-Smtp-Source: AGHT+IF5JffRM5x/f2wAo7rTwTy+XMSqGaN0SDocFOXKas4jXQb5/grBKo033dy+w848n+4PAN9XYg== X-Received: by 2002:a05:6a20:5504:b0:1a9:8152:5102 with SMTP id adf61e73a8af0-1afde0d54c9mr17944258637.24.1715872961362; Thu, 16 May 2024 08:22:41 -0700 (PDT) Received: from smtpclient.apple ([2804:d55:9507:1500:e056:2c10:8ff4:adbc]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-6f4d2a85f4esm13205497b3a.67.2024.05.16.08.22.39 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 16 May 2024 08:22:40 -0700 (PDT) From: Christian Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.500.171.1.1\)) Date: Thu, 16 May 2024 17:22:26 +0200 References: <20240514150936.39657-1-chris10317h5@gmail.com> <20240514150936.39657-2-chris10317h5@gmail.com> To: FFmpeg development discussions and patches In-Reply-To: Message-Id: <45BCC231-7E46-4AE9-9DC5-41E588E8015E@gmail.com> X-Mailer: Apple Mail (2.3774.500.171.1.1) X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v3 1/2] avcodec: add external enc libvvenc for H266/VVC X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Cgo+IE9uIDE0LiBNYXkgMjAyNCwgYXQgMTg6NDksIEFuZHJlYXMgUmhlaW5oYXJkdCA8YW5kcmVh cy5yaGVpbmhhcmR0QG91dGxvb2suY29tPiB3cm90ZToKPiAKPiBDaHJpc3RpYW4gQmFydG5pazoK Pj4gRnJvbTogVGhvbWFzIFNpZWRlbCA8dGhvbWFzLmZmQHNwaW4tZGlnaXRhbC5jb20+Cj4+IAo+ PiBBZGQgZXh0ZXJuYWwgZW5jb2RlciBWVmVuQyBmb3IgSDI2Ni9WVkMgZW5jb2RpbmcuCj4+IFJl Z2lzdGVyIG5ldyBlbmNvZGVyIGxpYnZ2ZW5jLgo+PiBBZGQgbGlidnZlbmMgdG8gd3JhcCB0aGUg dnZlbmMgaW50ZXJmYWNlLgo+PiBsaWJ2dmVuYyBpbXBsZW1lbnRzIGVuY29kZXIgb3B0aW9uOiBw cmVzZXQscXAscGVyaW9kLHN1YmpvcHQsCj4+IHZ2ZW5jLXBhcmFtcyxsZXZlbGlkYyx0aWVyLgo+ PiBFbmFibGUgZW5jb2RlciBieSBhZGRpbmcgLS1lbmFibGUtbGlidnZlbmMgaW4gY29uZmlndXJl IHN0ZXAuCj4+IAo+PiBDby1hdXRob3JlZC1ieTogQ2hyaXN0aWFuIEJhcnRuaWsgY2hyaXMxMDMx N2g1QGdtYWlsLmNvbQo+PiBTaWduZWQtb2ZmLWJ5OiBDaHJpc3RpYW4gQmFydG5payA8Y2hyaXMx MDMxN2g1QGdtYWlsLmNvbT4KPj4gLS0tCj4+IGNvbmZpZ3VyZSAgICAgICAgICAgICAgfCAgIDQg Kwo+PiBkb2MvZW5jb2RlcnMudGV4aSAgICAgIHwgIDY1ICsrKysrCj4+IGxpYmF2Y29kZWMvTWFr ZWZpbGUgICAgfCAgIDEgKwo+PiBsaWJhdmNvZGVjL2FsbGNvZGVjcy5jIHwgICAxICsKPj4gbGli YXZjb2RlYy9saWJ2dmVuYy5jICB8IDU2NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwo+PiA1IGZpbGVzIGNoYW5nZWQsIDYzNyBpbnNlcnRpb25zKCspCj4+IGNyZWF0 ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2xpYnZ2ZW5jLmMKPj4gCj4+IGRpZmYgLS1naXQgYS9j b25maWd1cmUgYi9jb25maWd1cmUKPj4gaW5kZXggYTkwOWIwNjg5Yy4uNWQ5YTE0ODIxYiAxMDA3 NTUKPj4gLS0tIGEvY29uZmlndXJlCj4+ICsrKyBiL2NvbmZpZ3VyZQo+PiBAQCAtMjkzLDYgKzI5 Myw3IEBAIEV4dGVybmFsIGxpYnJhcnkgc3VwcG9ydDoKPj4gICAtLWVuYWJsZS1saWJ2b3JiaXMg ICAgICAgZW5hYmxlIFZvcmJpcyBlbi9kZWNvZGluZyB2aWEgbGlidm9yYmlzLAo+PiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuYXRpdmUgaW1wbGVtZW50YXRpb24gZXhpc3RzIFtub10KPj4g ICAtLWVuYWJsZS1saWJ2cHggICAgICAgICAgZW5hYmxlIFZQOCBhbmQgVlA5IGRlL2VuY29kaW5n IHZpYSBsaWJ2cHggW25vXQo+PiArICAtLWVuYWJsZS1saWJ2dmVuYyAgICAgICAgZW5hYmxlIEgu MjY2L1ZWQyBlbmNvZGluZyB2aWEgdnZlbmMgW25vXQo+PiAgIC0tZW5hYmxlLWxpYndlYnAgICAg ICAgICBlbmFibGUgV2ViUCBlbmNvZGluZyB2aWEgbGlid2VicCBbbm9dCj4+ICAgLS1lbmFibGUt bGlieDI2NCAgICAgICAgIGVuYWJsZSBILjI2NCBlbmNvZGluZyB2aWEgeDI2NCBbbm9dCj4+ICAg LS1lbmFibGUtbGlieDI2NSAgICAgICAgIGVuYWJsZSBIRVZDIGVuY29kaW5nIHZpYSB4MjY1IFtu b10KPj4gQEAgLTE5NjYsNiArMTk2Nyw3IEBAIEVYVEVSTkFMX0xJQlJBUllfTElTVD0iCj4+ICAg ICBsaWJ2bWFmCj4+ICAgICBsaWJ2b3JiaXMKPj4gICAgIGxpYnZweAo+PiArICAgIGxpYnZ2ZW5j Cj4+ICAgICBsaWJ3ZWJwCj4+ICAgICBsaWJ4ZXZkCj4+ICAgICBsaWJ4ZXZlCj4+IEBAIC0zNTU4 LDYgKzM1NjAsNyBAQCBsaWJ2cHhfdnA4X2RlY29kZXJfZGVwcz0ibGlidnB4Igo+PiBsaWJ2cHhf dnA4X2VuY29kZXJfZGVwcz0ibGlidnB4Igo+PiBsaWJ2cHhfdnA5X2RlY29kZXJfZGVwcz0ibGli dnB4Igo+PiBsaWJ2cHhfdnA5X2VuY29kZXJfZGVwcz0ibGlidnB4Igo+PiArbGlidnZlbmNfZW5j b2Rlcl9kZXBzPSJsaWJ2dmVuYyIKPj4gbGlid2VicF9lbmNvZGVyX2RlcHM9ImxpYndlYnAiCj4+ IGxpYndlYnBfYW5pbV9lbmNvZGVyX2RlcHM9ImxpYndlYnAiCj4+IGxpYngyNjJfZW5jb2Rlcl9k ZXBzPSJsaWJ4MjYyIgo+PiBAQCAtNzAyNSw2ICs3MDI4LDcgQEAgZW5hYmxlZCBsaWJ2cHggICAg ICAgICAgICAmJiB7Cj4+ICAgICAgICAgZGllICJsaWJ2cHggZW5hYmxlZCBidXQgbm8gc3VwcG9y dGVkIGRlY29kZXJzIGZvdW5kIgo+PiAgICAgZmkKPj4gfQo+PiArZW5hYmxlZCBsaWJ2dmVuYyAg ICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGlidnZlbmMgImxpYnZ2ZW5jID49IDEuNi4x IiAidnZlbmMvdnZlbmMuaCIgdnZlbmNfZ2V0X3ZlcnNpb24KPj4gCj4+IGVuYWJsZWQgbGlid2Vi cCAgICAgICAgICAgJiYgewo+PiAgICAgZW5hYmxlZCBsaWJ3ZWJwX2VuY29kZXIgICAgICAmJiBy ZXF1aXJlX3BrZ19jb25maWcgbGlid2VicCAibGlid2VicCA+PSAwLjIuMCIgd2VicC9lbmNvZGUu aCBXZWJQR2V0RW5jb2RlclZlcnNpb24KPj4gZGlmZiAtLWdpdCBhL2RvYy9lbmNvZGVycy50ZXhp IGIvZG9jL2VuY29kZXJzLnRleGkKPj4gaW5kZXggYzgyZjMxNmY5NC4uOTJhYWIxN2M0OSAxMDA2 NDQKPj4gLS0tIGEvZG9jL2VuY29kZXJzLnRleGkKPj4gKysrIGIvZG9jL2VuY29kZXJzLnRleGkK Pj4gQEAgLTIzNzgsNiArMjM3OCw3MSBAQCBJbmRpY2F0ZXMgZnJhbWUgZHVyYXRpb24KPj4gRm9y IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgbGlidnB4IHNlZToKPj4gQHVybHtodHRwOi8vd3d3Lndl Ym1wcm9qZWN0Lm9yZy99Cj4+IAo+PiArQHNlY3Rpb24gbGlidnZlbmMKPj4gKwo+PiArVlZlbkMg SC4yNjYvVlZDIGVuY29kZXIgd3JhcHBlci4KPj4gKwo+PiArVGhpcyBlbmNvZGVyIHJlcXVpcmVz IHRoZSBwcmVzZW5jZSBvZiB0aGUgbGlidnZlbmMgaGVhZGVycyBhbmQgbGlicmFyeQo+PiArZHVy aW5nIGNvbmZpZ3VyYXRpb24uIFlvdSBuZWVkIHRvIGV4cGxpY2l0bHkgY29uZmlndXJlIHRoZSBi dWlsZCB3aXRoCj4+ICtAb3B0aW9uey0tZW5hYmxlLWxpYnZ2ZW5jfS4KPj4gKwo+PiArVGhlIFZW ZW5DIHByb2plY3Qgd2Vic2l0ZSBpcyBhdAo+PiArQHVybHtodHRwczovL2dpdGh1Yi5jb20vZnJh dW5ob2ZlcmhoaS92dmVuY30uCj4+ICsKPj4gK0BzdWJzZWN0aW9uIFN1cHBvcnRlZCBQaXhlbCBG b3JtYXRzCj4+ICsKPj4gK1ZWZW5DIHN1cHBvcnRzIG9ubHkgMTAtYml0IGNvbG9yIHNwYWNlcyBh cyBpbnB1dC4gQnV0IHRoZSBpbnRlcm5hbCAoZW5jb2RlZCkKPj4gK2JpdCBkZXB0aCBjYW4gYmUg c2V0IHRvIDgtYml0IG9yIDEwLWJpdCBhdCBydW50aW1lLgo+PiArCj4+ICtAc3Vic2VjdGlvbiBP cHRpb25zCj4+ICsKPj4gK0B0YWJsZSBAb3B0aW9uCj4+ICtAaXRlbSBiCj4+ICtTZXRzIHRhcmdl dCB2aWRlbyBiaXRyYXRlLgo+PiArCj4+ICtAaXRlbSBnCj4+ICtTZXQgdGhlIEdPUCBzaXplLiBD dXJyZW50bHkgc3VwcG9ydCBmb3IgZz0xIChJbnRyYSBvbmx5KSBvciBkZWZhdWx0Lgo+PiArCj4+ ICtAaXRlbSBwcmVzZXQKPj4gK1NldCB0aGUgVlZlbkMgcHJlc2V0Lgo+PiArCj4+ICtAaXRlbSBs ZXZlbGlkYwo+PiArU2V0IGxldmVsIGlkYy4KPj4gKwo+PiArQGl0ZW0gdGllcgo+PiArU2V0IHZ2 YyB0aWVyLgo+PiArCj4+ICtAaXRlbSBxcAo+PiArU2V0IGNvbnN0YW50IHF1YW50aXphdGlvbiBw YXJhbWV0ZXIuCj4+ICsKPj4gK0BpdGVtIHN1Ym9wdCBAdmFye2Jvb2xlYW59Cj4+ICtTZXQgc3Vi amVjdGl2ZSAocGVyY2VwdHVhbGx5IG1vdGl2YXRlZCkgb3B0aW1pemF0aW9uLiBEZWZhdWx0IGlz IDEgKG9uKS4KPj4gKwo+PiArQGl0ZW0gYml0ZGVwdGg4IEB2YXJ7Ym9vbGVhbn0KPj4gK1NldCA4 Yml0IGNvZGluZyBtb2RlIGluc3RlYWQgb2YgdXNpbmcgMTBiaXQuIERlZmF1bHQgaXMgMCAob2Zm KS4KPj4gKwo+PiArQGl0ZW0gcGVyaW9kCj4+ICtzZXQgKGludHJhKSByZWZyZXNoIHBlcmlvZCBp biBzZWNvbmRzLgo+PiArCj4+ICtAaXRlbSB2dmVuYy1wYXJhbXMKPj4gK1NldCB2dmVuYyBvcHRp b25zIHVzaW5nIGEgbGlzdCBvZiBAdmFye2tleX09QHZhcnt2YWx1ZX0gY291cGxlcyBzZXBhcmF0 ZWQKPj4gK2J5ICI6Ii4gU2VlIEBjb21tYW5ke3Z2ZW5jYXBwIC0tZnVsbGhlbHB9IG9yIEBjb21t YW5ke3Z2ZW5jRkZhcHAgLS1mdWxsaGVscH0gZm9yIGEgbGlzdCBvZiBvcHRpb25zLgo+PiArCj4+ ICtGb3IgZXhhbXBsZSwgdGhlIG9wdGlvbnMgbWlnaHQgYmUgcHJvdmlkZWQgYXM6Cj4+ICsKPj4g K0BleGFtcGxlCj4+ICtpbnRyYXBlcmlvZD02NDpkZWNvZGluZ3JlZnJlc2h0eXBlPWlkcjpwb2Mw aWRyPTE6aW50ZXJuYWxiaXRkZXB0aD04Cj4+ICtAZW5kIGV4YW1wbGUKPj4gKwo+PiArRm9yIGV4 YW1wbGUgdGhlIGVuY29kaW5nIG9wdGlvbnMgZm9yIDItcGFzcyBlbmNvZGluZyBtaWdodCBiZSBw cm92aWRlZCB3aXRoIEBvcHRpb257LXZ2ZW5jLXBhcmFtc306Cj4+ICsKPj4gK0BleGFtcGxlCj4+ ICtmZm1wZWcgLWkgaW5wdXQgLWM6diBsaWJ2dmVuYyAtYiAxTSAtdnZlbmMtcGFyYW1zIHBhc3Nl cz0yOnBhc3M9MTpyY3N0YXRzZmlsZT1zdGF0cy5qc29uIG91dHB1dC5tcDQKPj4gK2ZmbXBlZyAt aSBpbnB1dCAtYzp2IGxpYnZ2ZW5jIC1iIDFNIC12dmVuYy1wYXJhbXMgcGFzc2VzPTI6cGFzcz0y OnJjc3RhdHNmaWxlPXN0YXRzLmpzb24gb3V0cHV0Lm1wNAo+PiArQGVuZCBleGFtcGxlCj4+ICsK Pj4gK0BlbmQgdGFibGUKPj4gKwo+PiBAc2VjdGlvbiBsaWJ3ZWJwCj4+IAo+PiBsaWJ3ZWJwIFdl YlAgSW1hZ2UgZW5jb2RlciB3cmFwcGVyCj4+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL01ha2Vm aWxlIGIvbGliYXZjb2RlYy9NYWtlZmlsZQo+PiBpbmRleCAyNDQzZDJjNmZkLi41ZDczNDkwOTBl IDEwMDY0NAo+PiAtLS0gYS9saWJhdmNvZGVjL01ha2VmaWxlCj4+ICsrKyBiL2xpYmF2Y29kZWMv TWFrZWZpbGUKPj4gQEAgLTExNTMsNiArMTE1Myw3IEBAIE9CSlMtJChDT05GSUdfTElCVlBYX1ZQ OF9ERUNPREVSKSAgICAgICAgICs9IGxpYnZweGRlYy5vCj4+IE9CSlMtJChDT05GSUdfTElCVlBY X1ZQOF9FTkNPREVSKSAgICAgICAgICs9IGxpYnZweGVuYy5vCj4+IE9CSlMtJChDT05GSUdfTElC VlBYX1ZQOV9ERUNPREVSKSAgICAgICAgICs9IGxpYnZweGRlYy5vCj4+IE9CSlMtJChDT05GSUdf TElCVlBYX1ZQOV9FTkNPREVSKSAgICAgICAgICs9IGxpYnZweGVuYy5vCj4+ICtPQkpTLSQoQ09O RklHX0xJQlZWRU5DX0VOQ09ERVIpICAgICAgICAgICArPSBsaWJ2dmVuYy5vCj4+IE9CSlMtJChD T05GSUdfTElCV0VCUF9FTkNPREVSKSAgICAgICAgICAgICs9IGxpYndlYnBlbmNfY29tbW9uLm8g bGlid2VicGVuYy5vCj4+IE9CSlMtJChDT05GSUdfTElCV0VCUF9BTklNX0VOQ09ERVIpICAgICAg ICs9IGxpYndlYnBlbmNfY29tbW9uLm8gbGlid2VicGVuY19hbmltZW5jb2Rlci5vCj4+IE9CSlMt JChDT05GSUdfTElCWDI2Ml9FTkNPREVSKSAgICAgICAgICAgICs9IGxpYngyNjQubwo+PiBkaWZm IC0tZ2l0IGEvbGliYXZjb2RlYy9hbGxjb2RlY3MuYyBiL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMK Pj4gaW5kZXggYjEwMmE4MDY5ZS4uNTlkMzZkYmQ1NiAxMDA2NDQKPj4gLS0tIGEvbGliYXZjb2Rl Yy9hbGxjb2RlY3MuYwo+PiArKysgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCj4+IEBAIC04MDAs NiArODAwLDcgQEAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGlidnB4X3ZwOF9lbmNvZGVyOwo+ PiBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJ2cHhfdnA4X2RlY29kZXI7Cj4+IGV4dGVybiBG RkNvZGVjIGZmX2xpYnZweF92cDlfZW5jb2RlcjsKPj4gZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZf bGlidnB4X3ZwOV9kZWNvZGVyOwo+PiArZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGlidnZlbmNf ZW5jb2RlcjsKPj4gLyogcHJlZmVycmVkIG92ZXIgbGlid2VicCAqLwo+PiBleHRlcm4gY29uc3Qg RkZDb2RlYyBmZl9saWJ3ZWJwX2FuaW1fZW5jb2RlcjsKPj4gZXh0ZXJuIGNvbnN0IEZGQ29kZWMg ZmZfbGlid2VicF9lbmNvZGVyOwo+PiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9saWJ2dmVuYy5j IGIvbGliYXZjb2RlYy9saWJ2dmVuYy5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4 IDAwMDAwMDAwMDAuLjc4ZDRmNTVhMmEKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9saWJhdmNv ZGVjL2xpYnZ2ZW5jLmMKPj4gQEAgLTAsMCArMSw1NjYgQEAKPj4gKy8qCj4+ICsgKiBILjI2NiBl bmNvZGluZyB1c2luZyB0aGUgVlZlbkMgbGlicmFyeQo+PiArICoKPj4gKyAqIENvcHlyaWdodCAo QykgMjAyMiwgVGhvbWFzIFNpZWRlbAo+PiArICoKPj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m IEZGbXBlZy4KPj4gKyAqCj4+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPj4gKyAqIHZlcnNpb24g Mi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u Lgo+PiArICoKPj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAo+PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCj4+ICsgKiBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiArICoKPj4gKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKPj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUKPj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKPj4gKyAqLwo+ PiArCj4+ICsjaW5jbHVkZSAiY29uZmlnX2NvbXBvbmVudHMuaCIKPiAKPiBTZWVtcyB1bm5lZWRl ZC4KPiAKVGhhbmtzLCBJIHdpbGwgcmVtb3ZlIGl0LgoKPj4gKwo+PiArI2luY2x1ZGUgPHZ2ZW5j L3Z2ZW5jLmg+Cj4+ICsjaW5jbHVkZSA8dnZlbmMvdnZlbmNDZmcuaD4KPj4gKyNpbmNsdWRlIDx2 dmVuYy92ZXJzaW9uLmg+Cj4+ICsKPj4gKyNpbmNsdWRlICJhdmNvZGVjLmgiCj4+ICsjaW5jbHVk ZSAiY29kZWNfaW50ZXJuYWwuaCIKPj4gKyNpbmNsdWRlICJlbmNvZGUuaCIKPj4gKyNpbmNsdWRl ICJpbnRlcm5hbC5oIgo+PiArI2luY2x1ZGUgInBhY2tldF9pbnRlcm5hbC5oIgo+PiArI2luY2x1 ZGUgInByb2ZpbGVzLmgiCj4+ICsKPj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZ1dGlsLmgiCj4+ ICsjaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgo+PiArI2luY2x1ZGUgImxpYmF2dXRpbC9waXhk ZXNjLmgiCj4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgo+PiArI2luY2x1ZGUgImxpYmF2 dXRpbC9jb21tb24uaCIKPj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaW1ndXRpbHMuaCIKPj4gKyNp bmNsdWRlICJsaWJhdnV0aWwvZnJhbWUuaCIKPj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvbG9nLmgi Cj4+ICsKPj4gK3R5cGVkZWYgc3RydWN0IFZWZW5DT3B0aW9ucyB7Cj4+ICsgICAgaW50IHByZXNl dDsgICAgICAgICAgICAgICAgIC8vIHByZXNldCAwOiBmYXN0ZXIgIDQ6IHNsb3dlcgo+PiArICAg IGludCBxcDsgICAgICAgICAgICAgICAgICAgICAvLyBxdWFudGl6YXRpb24gcGFyYW1ldGVyIDAt NjMKPj4gKyAgICBpbnQgc3ViamVjdGl2ZU9wdGltaXphdGlvbjsgLy8gcGVyY2VwdHVhbGx5IG1v dGl2YXRlZCBRUCBhZGFwdGF0aW9uLCBYUFNOUiBiYXNlZAo+PiArICAgIGludCBmbGFnOGJpdENv ZGluZzsgICAgICAgICAvLyBlbmNvZGUgaW4gOGJpdCBpbnN0ZWFkIG9mIDEwYml0Cj4+ICsgICAg aW50IGludHJhUmVmcmVzaFNlYzsgICAgICAgIC8vIGludHJhIHBlcmlvZC9yZWZyZXNoIGluIHNl Y29uZHMKPj4gKyAgICBpbnQgbGV2ZWxJZGM7ICAgICAgICAgICAgICAgLy8gdnZjIGxldmVsX2lk Ywo+PiArICAgIGludCB0aWVyOyAgICAgICAgICAgICAgICAgICAvLyB2dmMgdGllcgo+PiArICAg IEFWRGljdGlvbmFyeSAqdnZlbmNfb3B0czsKPj4gK30gVlZlbkNPcHRpb25zOwo+PiArCj4+ICt0 eXBlZGVmIHN0cnVjdCBWVmVuQ0NvbnRleHQgewo+PiArICAgIEFWQ2xhc3MgICAgICAgICAqYXZf Y2xhc3M7Cj4+ICsgICAgVlZlbkNPcHRpb25zICAgIG9wdGlvbnM7ICAgICAgLy8gZW5jb2RlciBv cHRpb25zCj4+ICsgICAgdnZlbmNFbmNvZGVyICAgICp2dmVuY0VuYzsKPj4gKyAgICB2dmVuY0Fj Y2Vzc1VuaXQgKnBBVTsKPj4gKyAgICBib29sICAgICAgICAgICAgZW5jb2RlRG9uZTsKPiAKPiBX ZSBkbyBub3QgdXNlIENhbWVsQ2FzZSBmb3IgdmFyaWFibGUgYW5kIHN0cnVjdCBtZW1iZXIgbmFt ZXMuCj4gClRoYW5rcywgSSB3aWxsIGNoYW5nZSB0aGUgbWVtYmVycy4KCj4+ICt9IFZWZW5DQ29u dGV4dDsKPj4gKwo+PiArCj4+ICtzdGF0aWMgYXZfY29sZCB2b2lkIGZmX3Z2ZW5jX2xvZ19jYWxs YmFjayh2b2lkICpjdHgsIGludCBsZXZlbCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQo+IAo+IFJlbW92 ZSB0aGUgZmZfIHByZWZpeCBmcm9tIHN0YXRpYyBmdW5jdGlvbnMgKHRoaXMgaXMgdGhlIHByZWZp eCBmb3IKPiBub24tc3RhdGljIGZ1bmN0aW9ucykuCj4gClRoYW5rcy4gSSB3YXMgbm90IGF3YXJl IG9mIHRoaXMuCgo+PiArewo+PiArICAgIHZ2ZW5jX2NvbmZpZyBwYXJhbXM7Cj4+ICsgICAgdnZl bmNFbmNvZGVyICp2dmVuY0VuYyA9ICh2dmVuY0VuY29kZXIgKiljdHg7Cj4+ICsgICAgaWYgKHZ2 ZW5jRW5jKXsKPj4gKyAgICAgICAgdnZlbmNfY29uZmlnX2RlZmF1bHQoJnBhcmFtcyk7Cj4+ICsg ICAgICAgIHZ2ZW5jX2dldF9jb25maWcodnZlbmNFbmMsICZwYXJhbXMpOwo+PiArICAgICAgICBp ZiAoKGludClwYXJhbXMubV92ZXJib3NpdHkgPj0gbGV2ZWwpCj4+ICsgICAgICAgICAgICB2ZnBy aW50ZihsZXZlbCA9PSAxID8gc3RkZXJyIDogc3Rkb3V0LCBmbXQsIGFyZ3MpOwo+PiArICAgIH0K Pj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZmZfdnZlbmNfc2V0X3ZlcmJvc2l0b3J5KHZ2ZW5j X2NvbmZpZyogcGFyYW1zICkKPiAKPiBXaGF0J3MgdGhlIHJlYXNvbiBmb3IgdGhlIHNwYWNlIGJl Zm9yZSB0aGUgY2xvc2luZyBwYXJlbnRoZXNlcz8KPiBNb3Jlb3Zlciwgd2UgcHJlZmVyIHRvIHB1 dCB0aGUgKiB0byB0aGUgcGFyYW1ldGVyLCBub3QgdGhlIHR5cGUuCj4gClRoYW5rcywgaXTCtHMg YSB0eXBlLiBJwrRsbCBmaXggaXQuCgo+PiArewo+PiArICAgIHBhcmFtcy0+bV92ZXJib3NpdHkg PSBWVkVOQ19WRVJCT1NFOwo+PiArICAgIGlmIChhdl9sb2dfZ2V0X2xldmVsKCkgPj0gQVZfTE9H X0RFQlVHKQo+IAo+IGF2X2xvZ19nZXRfbGV2ZWwoKSBjYW4gYmUgY2hhbmdlZCBhdCBhbnkgdGlt ZSBieSBzb21lb25lIGVsc2UuIFNvIGJldHRlcgo+IGp1c3QgY2FsbCBpdCBvbmNlIGFuZCBjYWNo ZSB0aGUgdmFsdWUgZm9yIHNpbXBsaWNpdHkgYW5kIGNvbnNpc3RlbmN5Lgo+IApHb29kIHBvaW50 LiBJwrRsbCBjaGFuZ2UgaXQuCgo+PiArICAgICAgICBwYXJhbXMtPm1fdmVyYm9zaXR5ID0gVlZF TkNfREVUQUlMUzsKPj4gKyAgICBlbHNlIGlmIChhdl9sb2dfZ2V0X2xldmVsKCkgPj0gQVZfTE9H X1ZFUkJPU0UpCj4+ICsgICAgICAgIHBhcmFtcy0+bV92ZXJib3NpdHkgPSBWVkVOQ19OT1RJQ0U7 ICAgICAgLy8gb3V0cHV0IHBlciBwaWN0dXJlIGluZm8KPj4gKyAgICBlbHNlIGlmIChhdl9sb2df Z2V0X2xldmVsKCkgPj0gQVZfTE9HX0lORk8pCj4+ICsgICAgICAgIHBhcmFtcy0+bV92ZXJib3Np dHkgPSBWVkVOQ19XQVJOSU5HOyAgICAgLy8gZmZtcGVnIGRlZmF1bHQgZmZtcGVnIGxvZ2xldmVs Cj4+ICsgICAgZWxzZQo+PiArICAgICAgICBwYXJhbXMtPm1fdmVyYm9zaXR5ID0gVlZFTkNfU0lM RU5UOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGZmX3Z2ZW5jX3NldF9waWNfZm9ybWF0KEFW Q29kZWNDb250ZXh0ICphdmN0eCwgdnZlbmNfY29uZmlnKiBwYXJhbXMgKQo+PiArewo+PiArICAg IFZWZW5DQ29udGV4dCAqcyA9KFZWZW5DQ29udGV4dCAqKSBhdmN0eC0+cHJpdl9kYXRhOwo+IAo+ IFRoaXMgY2FzdCBpcyB1bm5lY2Vzc2FyeSBpbiBDLgo+IApUaGFua3MuIEnCtGxsIHJlbW92ZSBp dC4KCj4+ICsKPj4gKyAgICBwYXJhbXMtPm1faW50ZXJuQ2hyb21hRm9ybWF0ID0gVlZFTkNfQ0hS T01BXzQyMDsKPj4gKyAgICBwYXJhbXMtPm1faW5wdXRCaXREZXB0aFswXSAgID0gMTA7Cj4+ICsK Pj4gKyAgICBpZiAoYXZjdHgtPnBpeF9mbXQgIT0gQVZfUElYX0ZNVF9ZVVY0MjBQMTBMRSl7Cj4+ ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLAo+PiArICAgICAgICAgICAgICAg InVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAlcywgY3VycmVudGx5IG9ubHkgc3VwcG9ydCBmb3Ig eXV2NDIwcDEwbGVcbiIsCj4+ICsgICAgICAgICAgICAgICAgYXZfZ2V0X3BpeF9mbXRfbmFtZShh dmN0eC0+cGl4X2ZtdCkpOwo+PiArICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+IAo+ IDEuIFRoaXMgd2hvbGUgYmxvY2sgb2YgY29kZSBpcyBkZWFkOiBGb3IgZW5jb2RlcnMgdGhhdCBz ZXQKPiBBVkNvZGVjLnBpeF9mbXRzLCBpdCBpcyBjaGVja2VkIGdlbmVyaWNhbGx5IHRoYXQgdGhl IHBpeGVsIGZvcm1hdCBzZXQgaXMKPiBvbmUgb2YgdGhlIHBpeGVsIGZvcm1hdHMgaW4gQVZDb2Rl Yy5waXhfZm10cy4KPiAyLiBXaHkgb25seSBMRT8gSXMgdGhpcyBhbHNvIHRydWUgb24gQkUgc3lz dGVtcz8KPiAKSXQgd2FzIGp1c3QgZm9yIGRvdWJsZSBjaGVjay4gSSBjaGFuZ2UgaXQgdG8gQVZf UElYX0ZNVF9ZVVY0MjBQMTAKYW5kIHJlbW92ZSB0aGUgY2hlY2suCgo+PiArICAgIH0KPj4gKwo+ PiArICAgIGlmIChzLT5vcHRpb25zLmZsYWc4Yml0Q29kaW5nKSB7Cj4+ICsjaWYgVlZFTkNfVkVS U0lPTl9NQUpPUiA+IDEgfHwgKFZWRU5DX1ZFUlNJT05fTUFKT1IgPT0gMSAmJiBWVkVOQ19WRVJT SU9OX01JTk9SID4gOSkgfHwgKFZWRU5DX1ZFUlNJT05fTUFKT1IgPT0gMSAmJiBWVkVOQ19WRVJT SU9OX01JTk9SID49IDkgJiYgVlZFTkNfVkVSU0lPTl9QQVRDSCA+PSAxKQo+PiArICAgICAgICAg ICAgcGFyYW1zLT5tX2ludGVybmFsQml0RGVwdGhbMF0gPSA4Owo+PiArI2Vsc2UKPj4gKyAgICAg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLAo+PiArICAgICAgICAgICAgICAgICJ1 bnN1cHBvcnRlZCA4Yml0IGNvZGluZyBtb2RlLiA4Yml0IGNvZGluZyBuZWVkcyBhdCBsZWFzdCB2 dmVuYyB2ZXJzaW9uID49IDEuOS4xICIKPj4gKyAgICAgICAgICAgICAgICAiKGN1cnJlbnQgdmVy c2lvbiAlcylcbiIsIHZ2ZW5jX2dldF92ZXJzaW9uKCkgKTsKPj4gKyAgICAgICAgICAgIHJldHVy biBBVkVSUk9SKEVJTlZBTCk7Cj4+ICsjZW5kaWYKPj4gKyAgICB9Cj4+ICsgICAgcmV0dXJuIDA7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGZmX3Z2ZW5jX3NldF9jb2xvcl9mb3JtYXQoQVZD b2RlY0NvbnRleHQgKmF2Y3R4LCB2dmVuY19jb25maWcqIHBhcmFtcyApCj4+ICt7Cj4+ICsgICAg aWYgKGF2Y3R4LT5jb2xvcl9wcmltYXJpZXMgIT0gQVZDT0xfUFJJX1VOU1BFQ0lGSUVEKQo+PiAr ICAgICAgICBwYXJhbXMtPm1fY29sb3VyUHJpbWFyaWVzID0gKGludCkgYXZjdHgtPmNvbG9yX3By aW1hcmllczsKPj4gKyAgICBpZiAoYXZjdHgtPmNvbG9yc3BhY2UgIT0gQVZDT0xfU1BDX1VOU1BF Q0lGSUVEKQo+PiArICAgICAgICBwYXJhbXMtPm1fbWF0cml4Q29lZmZpY2llbnRzID0gKGludCkg YXZjdHgtPmNvbG9yc3BhY2U7Cj4+ICsgICAgaWYgKGF2Y3R4LT5jb2xvcl90cmMgIT0gQVZDT0xf VFJDX1VOU1BFQ0lGSUVEKSB7Cj4+ICsgICAgICAgIHBhcmFtcy0+bV90cmFuc2ZlckNoYXJhY3Rl cmlzdGljcyA9IChpbnQpIGF2Y3R4LT5jb2xvcl90cmM7Cj4+ICsKPj4gKyAgICAgICAgaWYgKGF2 Y3R4LT5jb2xvcl90cmMgPT0gQVZDT0xfVFJDX1NNUFRFMjA4NCkKPj4gKyAgICAgICAgICAgIHBh cmFtcy0+bV9IZHJNb2RlID0gKGF2Y3R4LT5jb2xvcl9wcmltYXJpZXMgPT0gQVZDT0xfUFJJX0JU MjAyMCkgPwo+PiArICAgICAgICAgICAgICAgIFZWRU5DX0hEUl9QUV9CVDIwMjAgOiBWVkVOQ19I RFJfUFE7Cj4+ICsgICAgICAgIGVsc2UgaWYgKGF2Y3R4LT5jb2xvcl90cmMgPT0gQVZDT0xfVFJD X0JUMjAyMF8xMAo+PiArICAgICAgICAgICAgICAgICB8fCBhdmN0eC0+Y29sb3JfdHJjID09IEFW Q09MX1RSQ19BUklCX1NURF9CNjcpCj4+ICsgICAgICAgICAgICBwYXJhbXMtPm1fSGRyTW9kZSA9 IChhdmN0eC0+Y29sb3JfdHJjID09IEFWQ09MX1RSQ19CVDIwMjBfMTAgfHwKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYXZjdHgtPmNvbG9yX3ByaW1hcmllcyA9PSBBVkNPTF9Q UklfQlQyMDIwIHx8Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2Y3R4LT5j b2xvcnNwYWNlID09IEFWQ09MX1NQQ19CVDIwMjBfTkNMIHx8Cj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGF2Y3R4LT5jb2xvcnNwYWNlID09IEFWQ09MX1NQQ19CVDIwMjBfQ0wp ID8KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVkVOQ19IRFJfSExHX0JUMjAy MCA6IFZWRU5DX0hEUl9ITEc7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgaWYgKHBhcmFtcy0+bV9I ZHJNb2RlID09IFZWRU5DX0hEUl9PRkYKPj4gKyAgICAgICAgJiYgKGF2Y3R4LT5jb2xvcl9wcmlt YXJpZXMgIT0gQVZDT0xfUFJJX1VOU1BFQ0lGSUVECj4+ICsgICAgICAgICAgICB8fCBhdmN0eC0+ Y29sb3JzcGFjZSAhPSBBVkNPTF9TUENfVU5TUEVDSUZJRUQpKSB7Cj4+ICsgICAgICAgIHBhcmFt cy0+bV92dWlQYXJhbWV0ZXJzUHJlc2VudCA9IDE7Cj4+ICsgICAgICAgIHBhcmFtcy0+bV9jb2xv dXJEZXNjcmlwdGlvblByZXNlbnQgPSB0cnVlOwo+PiArICAgIH0KPj4gK30KPj4gKwo+PiArc3Rh dGljIHZvaWQgZmZfdnZlbmNfc2V0X2ZyYW1lcmF0ZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIHZ2 ZW5jX2NvbmZpZyogcGFyYW1zICkKPj4gK3sKPj4gKyAgICBwYXJhbXMtPm1fRnJhbWVSYXRlID0g YXZjdHgtPnRpbWVfYmFzZS5kZW47Cj4+ICsgICAgcGFyYW1zLT5tX0ZyYW1lU2NhbGUgPSBhdmN0 eC0+dGltZV9iYXNlLm51bTsKPj4gKwo+PiArRkZfRElTQUJMRV9ERVBSRUNBVElPTl9XQVJOSU5H Uwo+PiArCj4+ICsjaWYgRkZfQVBJX1RJQ0tTX1BFUl9GUkFNRQo+PiArICAgIGlmIChhdmN0eC0+ dGlja3NfcGVyX2ZyYW1lID09IDEpIHsKPj4gKyNlbmRpZgo+PiArICAgICAgICBwYXJhbXMtPm1f VGlja3NQZXJTZWNvbmQgPSAtMTsgICAvLyBhdXRvIG1vZGUgZm9yIHRpY2tzIHBlciBmcmFtZSA9 IDEKPj4gKyNpZiBGRl9BUElfVElDS1NfUEVSX0ZSQU1FCj4+ICsgICAgfSBlbHNlIHsKPj4gKyAg ICAgICAgcGFyYW1zLT5tX1RpY2tzUGVyU2Vjb25kID0KPj4gKyAgICAgICAgICAgIGNlaWwoKGF2 Y3R4LT50aW1lX2Jhc2UuZGVuIC8gKGRvdWJsZSkgYXZjdHgtPnRpbWVfYmFzZS5udW0pICoKPj4g KyAgICAgICAgICAgICAgICAgKGRvdWJsZSkgYXZjdHgtPnRpY2tzX3Blcl9mcmFtZSk7Cj4+ICsg ICAgfQo+PiArI2VuZGlmCj4+ICtGRl9FTkFCTEVfREVQUkVDQVRJT05fV0FSTklOR1MKPj4gK30K Pj4gKwo+PiArc3RhdGljIGludCBmZl92dmVuY19wYXJzZV92dmVuY19wYXJhbXMoQVZDb2RlY0Nv bnRleHQgKmF2Y3R4LCB2dmVuY19jb25maWcqIHBhcmFtcywgY2hhciogc3RhdHNmaWxlICkKPj4g K3sKPj4gKyAgICBpbnQgcGFyc2VfcmV0LCByZXQ7Cj4+ICsgICAgVlZlbkNDb250ZXh0ICpzOwo+ PiArICAgIEFWRGljdGlvbmFyeUVudHJ5ICplbiA9IE5VTEw7Cj4gCj4gY29uc3QKPiAKPj4gKyAg ICBzID0oVlZlbkNDb250ZXh0ICopIGF2Y3R4LT5wcml2X2RhdGE7Cj4gCj4gQ2FuIGJlIGluaXRp YWxpemVkIGRpcmVjdGx5IGFuZCB3aXRob3V0IHRoZSBjYXN0Lgo+IApUaGFua3MuIEnCtGxsIHJl bW92ZSBpdC4KCj4+ICsgICAgcmV0ID0gMDsKPj4gKwo+PiArICAgIHdoaWxlICgoZW4gPSBhdl9k aWN0X2dldChzLT5vcHRpb25zLnZ2ZW5jX29wdHMsICIiLCBlbiwKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQVZfRElDVF9JR05PUkVfU1VGRklYKSkpIHsKPiAKPiBhdl9kaWN0X2l0 ZXJhdGUoKQoKSSB3YXMgdXNpbmcgbGlieDI2NCxsaWJ4MjY1LGxpYmFvbWVuYyBhcyByZWZlcmVu Y2UgYW5kIGFsaWduZWQgdG8KdGhlIGV4aXN0aW5nIGNvZGUuCkkgd2lsbCBjaGFuZ2UgaXQgdG8g YXZfZGljdF9pdGVyYXRlKCkKCj4gCj4+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RF QlVHLCAidnZlbmNfc2V0X3BhcmFtOiAnJXM6JXMnXG4iLCBlbi0+a2V5LAo+PiArICAgICAgICAg ICAgICAgZW4tPnZhbHVlKTsKPj4gKyAgICAgICAgcGFyc2VfcmV0ID0gdnZlbmNfc2V0X3BhcmFt KHBhcmFtcywgZW4tPmtleSwgZW4tPnZhbHVlKTsKPj4gKyAgICAgICAgc3dpdGNoIChwYXJzZV9y ZXQpIHsKPj4gKyAgICAgICAgY2FzZSBWVkVOQ19QQVJBTV9CQURfTkFNRToKPj4gKyAgICAgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5rbm93biB2dmVuYyBvcHRpb246ICVz LlxuIiwKPj4gKyAgICAgICAgICAgICAgICAgICBlbi0+a2V5KTsKPj4gKyAgICAgICAgICAgIHJl dCA9IEFWRVJST1IoRUlOVkFMKTsKPj4gKyAgICAgICAgICAgIGJyZWFrOwo+PiArICAgICAgICBj YXNlIFZWRU5DX1BBUkFNX0JBRF9WQUxVRToKPj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLAo+PiArICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIHZ2ZW5jIHZhbHVl IGZvciAlczogJXMuXG4iLCBlbi0+a2V5LCBlbi0+dmFsdWUpOwo+PiArICAgICAgICAgICAgcmV0 ID0gQVZFUlJPUihFSU5WQUwpOwo+PiArICAgICAgICAgICAgYnJlYWs7Cj4+ICsgICAgICAgIGRl ZmF1bHQ6Cj4+ICsgICAgICAgICAgICBicmVhazsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAg ICAgIGlmIChtZW1jbXAoZW4tPmtleSwgInJjc3RhdHNmaWxlIiwgMTEpID09IDAgfHwKPj4gKyAg ICAgICAgICAgIG1lbWNtcChlbi0+a2V5LCAiUkNTdGF0c0ZpbGUiLCAxMSkgPT0gMCkgewo+IAo+ IFRoaXMgcHJlc3VtZXMgdGhhdCBlbi0+a2V5IGlzIGF0IGxlYXN0IDExIGJ5dGUgbG9uZyAoYW5k IGl0IHdvdWxkIGFjY2VwdAo+IGtleXMgb25seSBwcmVmaXhlZCBieSByY3N0YXRzZmlsZSk7IHRo aXMgbmVlZCBub3QgYmUgdHJ1ZSBhdCBhbGwuIEhvdwo+IGFib3V0IHVzaW5nIGF2X3N0cmNhc2Vj bXAoKT8KCkdvb2QgcG9pbnQuIEnCtGxsIHJlbW92ZSB0aGUgbWVtY21wLgoKPiAKPj4gKyAgICAg ICAgICAgIHN0cm5jcHkoc3RhdHNmaWxlLCBlbi0+dmFsdWUsIHN0cmxlbihzdGF0c2ZpbGUpKTsK Pj4gKyAgICAgICAgICAgIHN0YXRzZmlsZVtzdHJsZW4oc3RhdHNmaWxlKV0gPSAnXDAnOwo+IAo+ IERpZCB5b3UgdGVzdCB0aGlzIGF0IGFsbD8KPiAxLiBVc2luZyBzdHJsZW4oc3RhdHNmaWxlKSBt ZWFucyB0aGF0IHRoZSBmaWxlbmFtZSBvZiB0aGUgc3RhdHNmaWxlIGlzCj4gYm91bmRlZCBieSBz dHJsZW4oInZ2ZW5jLXJjc3RhdHMuanNvbiIpOyBtb3JlIHByZWNpc2VseSwgZXZlcnkgaXRlcmF0 aW9uCj4gb2YgdGhpcyBjb2RlIGJsb2NrIGNhbiBncm93IHN0cmxlbigpIG9mIHRoZSBidWZmZXIg Ynkgb25lIGFuZCB0aGVyZSBpcwo+IG5vIHJlYWwgYm91bmRzIGNoZWNrLCBzbyB0aGlzIGNvdWxk IGxlYWQgdG8gYSBzdGFjayBidWZmZXIgb3ZlcmZsb3cKPiAod2hlbiB1c2luZyBhIGRpY3Rpb25h cnkgdGhhdCBjb250YWlucyByY3N0YXRzZmlsZSBlbnRyaWVzIG11bHRpcGxlIHRpbWVzKS4KPiAy LiBXZSBoYXZlIGF2X3N0cmxjcHkoKSBmb3IgdGhpcy4KPiAzLiBCdXQgYSBiZXR0ZXIgYXBwcm9h Y2ggaXMgdG8ganVzdCBub3QgY29weSB0aGUgc3RyaW5nIGF0IGFsbCwgYXZvaWRpbmcKPiBhbnkg bGVuZ3RoIHJlc3RyaWN0aW9uIG9uIHRoZSBzdGF0c2ZpbGU6IFVzZSBjb25zdCBjaGFyICoqc3Rh dHNmaWxlCj4gaW5zdGVhZCBvZiB0aGUgY2hhciAqc3RhdHNmaWxlIHBhcmFtZXRlcjsgaW4gZW5j b2RlX2luaXQgYmVsb3cgeW91IGp1c3QKPiBpbml0aWFsaXplIHN0YXRzZmlsZSB2aWEgJ2NvbnN0 IGNoYXIgKnN0YXRzZmlsZSA9ICJ2dmVuYy1yY3N0YXRzLmpzb24iOycuCj4gCj4gVGhlIHR5cGlj YWwgd2F5IHRvIHBhc3MgdGhlIHN0YXRpc3RpY3Mgb2YgYSBmaXJzdCBwYXNzIHRvIGFuIGVuY29k ZXIgaXMKPiB2aWEgYW4gYWxsb2NhdGVkIGJ1ZmZlciwgbm90IHZpYSBhIGZpbGVuYW1lIGZvciB0 aGUgZW5jb2RlciB0byByZWFkCj4gZnJvbS93cml0ZSB0byAoc2VlIEFWQ29kZWNDb250ZXh0LnN0 YXRzX291dCwgc3RhdHNfaW4pLiBJcyB0aGlzIHBvc3NpYmxlCj4gd2l0aCBsaWJ2dmVuYz8KPiAK VGhlIDJwYXNzIGFwcHJvYWNoIHdhcyBxdWl0ZSBzb21lIG9mIGEgaGFjayBieSB1c2luZyB0aGUg dnZlbmMtCnBhcmFtcy4gClRoYW5rcyBmb3IgdGhlIHJldmlldyBhbmQgaGludHMgdG8gaW1wcm92 ZSBpdC4KSSB3aWxsIGNoYW5nZSB0aGUgY29kZSBhbmQgYWxpZ24gdG8geDI2NCBiZWhhdmlvciBi eSB1c2luZyB0aGUKJ3Bhc3Nsb2dmaWxlJy8nc3RhdHMnIG9wdGlvbnMgYW5kIHVzZSAycGFzcyBm bGFncyBBVl9DT0RFQ19GTEFHX1BBU1MxIHwKQVZfQ09ERUNfRkxBR19QQVNTMiBpbnN0ZWFkIG9m IHVzaW5nIHZ2ZW5jLXBhcmFtcy4KSSBhbHNvIHdpbGwgdXNlIHRoZSBkZWZhdWx0IGZmbXBlZyAy cGFzcyBsb2dmaWxlICdmZm1wZWcycGFzcy0wLmxvZycgYXMKZGVmYXVsdCBhcyBsaWJ4MjY0IGlz IHVzaW5nIGl0LgpDdXJyZW50bHkgdGhlcmUgaXMgbm8gd2F5IGluIHZ2ZW5jIHRvIHVzZSBhbiBh bGxvY2F0ZWQgYnVmZmVyIGZvcgp3cml0ZS9yZWFkIHN0YXRpc3RpY3MuCgo+PiArICAgICAgICB9 Cj4+ICsgICAgfQo+PiArICAgIHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQg ZmZfdnZlbmNfc2V0X3JjX21vZGUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCB2dmVuY19jb25maWcq IHBhcmFtcykKPj4gK3sKPj4gKyAgICBpZiAocGFyYW1zLT5tX1JDUGFzcyAhPSAtMSAmJiBwYXJh bXMtPm1fUkNOdW1QYXNzZXMgPT0gMSkKPj4gKyAgICAgICAgcGFyYW1zLT5tX1JDTnVtUGFzc2Vz ID0gMjsgICAgICAgLyogZW5hYmxlIDJwYXNzIG1vZGUgKi8KPiAKPiBXZSBhY3R1YWxseSBoYXZl IEFWX0NPREVDX0ZMQUdfUEFTUzEgYW5kIEFWX0NPREVDX0ZMQUdfUEFTUzIgdGhhdCB5b3UKPiBj b21wbGV0ZWx5IGlnbm9yZS4KPiAKIEnCtGxsIGNoYW5nZSB0aGUgMnBhc3MgYmVoYXZpb3IgYXMg bWVudGlvbmVkIGFib3ZlLgoKPj4gKwo+PiArICAgIGlmKGF2Y3R4LT5yY19tYXhfcmF0ZSkgewo+ PiArI2lmIFZWRU5DX1ZFUlNJT05fTUFKT1IgPiAxIHx8IChWVkVOQ19WRVJTSU9OX01BSk9SID09 IDEgJiYgVlZFTkNfVkVSU0lPTl9NSU5PUiA+IDgpCj4gCj4gTWF5YmUgeW91IHNob3VsZCBtYXAg YWxsIG9mIHRoZSBtYWpvciwgbWlub3IgYW5kIHBhdGNoIHZlcnNpb25zIHRvIG9uZQo+IFZWRU5D X1ZFUlNJT04/Cj4gClRoYW5rcyBJIHdpbGwgdXNlIGEgaW50ZWdlciB2ZXJzaW9uIGZvciBiZXR0 ZXIgcmVhZGFiaWxpdHkuCgo+PiArICAgICAgICBwYXJhbXMtPm1fUkNNYXhCaXRyYXRlID0gYXZj dHgtPnJjX21heF9yYXRlOwo+PiArI2VuZGlmCj4+ICsKPj4gKyNpZiBWVkVOQ19WRVJTSU9OX01B Sk9SID09IDEgJiYgVlZFTkNfVkVSU0lPTl9NSU5PUiA8IDExCj4+ICsgICAgICAgIC8qIHJjX21h eF9yYXRlIHdpdGhvdXQgYSBiaXRfcmF0ZSBlbmFibGVzIGNhcHBlZCBDUUYgbW9kZS4KPj4gKyAg ICAgICAgKFFQICsgc3Viai4gb3B0aW1pemF0aW9uICsgbWF4LiBiaXRyYXRlKSAqLwo+PiArICAg ICAgICBpZighYXZjdHgtPmJpdF9yYXRlKSB7Cj4+ICsgICAgICAgICAgICBhdl9sb2coIGF2Y3R4 LCBBVl9MT0dfRVJST1IsCj4+ICsgICAgICAgICAgICAgICAgIkNhcHBlZCBDb25zdGFudCBRdWFs aXR5IEZhY3RvciBtb2RlIChjYXBwZWQgQ1FGKSBuZWVkcyBhdCAiCj4+ICsgICAgICAgICAgICAg ICAgImxlYXN0IHZ2ZW5jIHZlcnNpb24gPj0gMS4xMS4wIChjdXJyZW50IHZlcnNpb24gJXMpXG4i LAo+PiArICAgICAgICAgICAgICAgIHZ2ZW5jX2dldF92ZXJzaW9uKCkpOwo+PiArICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPj4gKyAgICAgICAgfQo+PiArI2VuZGlmCj4+ICsg ICAgfQo+PiArICAgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGZmX3Z2ZW5j X2luaXRfZXh0cmFkYXRhKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgVlZlbkNDb250ZXh0ICpzKQo+ PiArewo+PiArICAgIGludCByZXQ7Cj4+ICsgICAgaWYgKGF2Y3R4LT5mbGFncyAmIEFWX0NPREVD X0ZMQUdfR0xPQkFMX0hFQURFUikgewo+PiArICAgICAgICByZXQgPSB2dmVuY19nZXRfaGVhZGVy cyhzLT52dmVuY0VuYywgcy0+cEFVKTsKPj4gKyAgICAgICAgaWYgKDAgIT0gcmV0KSB7Cj4+ICsg ICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwKPj4gKyAgICAgICAgICAgICAg ICAgICAiY2Fubm90IGdldCBoZWFkZXJzIChTUFMsUFBTKSBmcm9tIHZ2YyBlbmNvZGVyKHZ2ZW5j KTogJXNcbiIsCj4+ICsgICAgICAgICAgICAgICAgICAgdnZlbmNfZ2V0X2xhc3RfZXJyb3Iocy0+ dnZlbmNFbmMpKTsKPj4gKyAgICAgICAgICAgIHZ2ZW5jX2VuY29kZXJfY2xvc2Uocy0+dnZlbmNF bmMpOwo+PiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPj4gKyAgICAgICAg fQo+PiArCj4+ICsgICAgICAgIGlmIChzLT5wQVUtPnBheWxvYWRVc2VkU2l6ZSA8PSAwKSB7Cj4+ ICsgICAgICAgICAgICB2dmVuY19lbmNvZGVyX2Nsb3NlKHMtPnZ2ZW5jRW5jKTsKPj4gKyAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+PiArICAgICAgICB9Cj4+ICsKPj4g KyAgICAgICAgYXZjdHgtPmV4dHJhZGF0YV9zaXplID0gcy0+cEFVLT5wYXlsb2FkVXNlZFNpemU7 Cj4+ICsgICAgICAgIGF2Y3R4LT5leHRyYWRhdGEgPQo+PiArICAgICAgICAgICAgYXZfbWFsbG9j eihhdmN0eC0+ZXh0cmFkYXRhX3NpemUgKyBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFKTsK Pj4gKyAgICAgICAgaWYgKCFhdmN0eC0+ZXh0cmFkYXRhKSB7Cj4+ICsgICAgICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwKPj4gKyAgICAgICAgICAgICAgICAgICAiQ2Fubm90IGFs bG9jYXRlIFZWQyBoZWFkZXIgb2Ygc2l6ZSAlZC5cbiIsCj4+ICsgICAgICAgICAgICAgICAgICAg YXZjdHgtPmV4dHJhZGF0YV9zaXplKTsKPiAKPiBQb2ludGxlc3MgZXJyb3IgbWVzc2FnZSwgbGlr ZSBzbyBtYW55IG9mIHlvdXIgYWxsb2NhdGlvbiBlcnJvcnMuCj4gClNvcnJ5LCBidXQgSSB3YXMg dXNpbmcgbGlieDI2NSBhcyByZWZlcmVuY2Ugd2hlcmUgYWxsIHRoZXNlIGVycm9yCm1lc3NhZ2Vz IGFyZSBpbXBsZW1lbnRlZCBpbiB0aGUgc2FtZSB3YXkuIApTaG91bGQgSSBqdXN0IHJlbW92ZSB0 aGUgZXJyb3IgbWVzc2FnZXMgYW5kIHJldHVybiBhbiBlcnJvcj8KCj4+ICsgICAgICAgICAgICB2 dmVuY19lbmNvZGVyX2Nsb3NlKHMtPnZ2ZW5jRW5jKTsKPj4gKyAgICAgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7Cj4+ICsgICAgICAgIH0KPj4gKwo+PiArICAgICAgICBtZW1jcHkoYXZj dHgtPmV4dHJhZGF0YSwgcy0+cEFVLT5wYXlsb2FkLCBhdmN0eC0+ZXh0cmFkYXRhX3NpemUpOwo+ PiArICAgICAgICBtZW1zZXQoYXZjdHgtPmV4dHJhZGF0YSArIGF2Y3R4LT5leHRyYWRhdGFfc2l6 ZSwgMCwKPj4gKyAgICAgICAgICAgICAgIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUpOwo+ IAo+IFVubmVjZXNzYXJ5IGdpdmVuIHRoYXQgeW91IHVzZSBhdl9tYWxsb2N6KCkuCj4gCkluZGVl ZC4gScK0bGwgcmVtb3ZlIGl0LgoKPj4gKyAgICB9Cj4+ICsgICAgcmV0dXJuIDA7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBhdl9jb2xkIGludCBmZl92dmVuY19lbmNvZGVfaW5pdChBVkNvZGVjQ29u dGV4dCAqYXZjdHgpCj4+ICt7Cj4+ICsgICAgaW50IHJldDsKPj4gKyAgICBpbnQgZnJhbWVyYXRl LCBxcDsKPj4gKyAgICBWVmVuQ0NvbnRleHQgKnM7Cj4+ICsgICAgdnZlbmNfY29uZmlnIHBhcmFt czsKPj4gKyAgICB2dmVuY1ByZXNldE1vZGUgcHJlc2V0Owo+PiArICAgIGNoYXIgc3RhdHNmaWxl WzEwMjRdID0gInZ2ZW5jLXJjc3RhdHMuanNvbiI7Cj4+ICsKPj4gKyAgICBzID0gKFZWZW5DQ29u dGV4dCAqKSBhdmN0eC0+cHJpdl9kYXRhOwo+PiArICAgIHFwID0gcy0+b3B0aW9ucy5xcDsKPj4g KyAgICBwcmVzZXQgPSAodnZlbmNQcmVzZXRNb2RlKSBzLT5vcHRpb25zLnByZXNldDsKPj4gKwo+ PiArICAgIGlmIChhdmN0eC0+ZmxhZ3MgJiBBVl9DT0RFQ19GTEFHX0lOVEVSTEFDRURfRENUKSB7 Cj4+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLAo+PiArICAgICAgICAgICAg ICAgImZmX3Z2ZW5jX2VuY29kZV9pbml0Ojppbml0KCkgaW50ZXJsYWNlZCBlbmNvZGluZyBub3Qg c3VwcG9ydGVkIHlldFxuIik7Cj4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB Owo+IAo+IFRoaXMgaXMgbm90IGludmFsaWQgZGF0YTsgYW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8g YWRkIHRoZSBuYW1lIG9mIHRoZQo+IGZ1bmN0aW9uIHRvIHRoZSBlcnJvciBtZXNzYWdlLgo+IChB bmQgd2hhdCBkb2VzICJub3Qgc3VwcG9ydGVkIHlldCIgZXZlbiBtZWFuPyBEb2VzIFZWQyBldmVu IGhhdmUKPiBzcGVjaWZpYyBpbnRlcmxhY2VkIGNvZGluZyBtZXRob2RzPyBXaWxsIHRoaXMgZXZl ciBiZSBzdXBwb3J0ZWQ/KQo+IApWVkMgaGFzIGludGVybGFjZXMgc3VwcG9ydCBhcyBIRVZDIGRv ZXMuIFRoZXJlIGFyZSBubyBzcGVjaWFsIHRvb2xzCmJ1dCBvbmx5IHNpZ25hbGl6aW5nIGluIGhp Z2gtbGV2ZWwgc3ludGF4LgpDdXJyZW50bHkgdGhlcmUgaXMgbm8gc3VwcG9ydCBpbiB2dmVuYyB0 byBzaWduYWxpemUgZmllbGRzLCBzbyBJIGFkZGVkCmFuIGVycm9yLgpXaGF0IHdvdWxkIGJlIHRo ZSBiZXN0IHdheSB0byBkbyBpdD8KSnVzdCB0aHJvdyBhIHdhcm5pbmcgb3IgdXNpbmcgYW4gZXJy b3IgYW5kIHJldHVybj8KSSB3b3VsZCBjaGFuZ2UgaXQgdG86CmF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiaW50ZXJsYWNlZCBlbmNvZGluZyBub3Qgc3VwcG9ydGVkXG4iKTsKcmV0dXJuIEFW RVJST1IoRUlOVkFMKTsKCj4+ICsgICAgfQo+PiArCj4+ICsgICAgdnZlbmNfY29uZmlnX2RlZmF1 bHQoJnBhcmFtcyk7Cj4+ICsKPj4gKyAgICBmcmFtZXJhdGUgPSBhdmN0eC0+dGltZV9iYXNlLmRl biAvIGF2Y3R4LT50aW1lX2Jhc2UubnVtOwo+IAo+IFlvdSBhcmUgYXdhcmUgdGhhdCB0aGUgZGl2 aXNpb24gcGVyZm9ybWVkIGhlcmUgaXMgYW4gaW50ZWdlciBkaXZpc2lvbj8KPiBBbmQgYXJlIHlv dSBhd2FyZSB0aGF0IG5vbi1jZnIgY29udGVudCBkb2VzIG5vdCByZWFsbHkgaGF2ZSBhIGZyYW1l cmF0ZT8KPiBBbmQgdGhhdCBmb3IgY2ZyIGNvbnRlbnQsIEFWQ29kZWNDb250ZXh0LmZyYW1lcmF0 ZSBjb250YWlucyB0aGUgZnJhbWVyYXRlPwo+IAogVGhlIGludGVyZmFjZSBjYWxsICd2dmVuY19p bml0X2RlZmF1bHQnIGlzIGV4cGVjdGluZyBhbiBpbnQKZnJhbWVyYXRlIGFuZCBpcyBzZXR0aW5n IHRoZSB0aGUgbnRzYyB0aW1pbmcgZGVwZW5kaW5nICBvbiB0aGUKZnJhbWVyYXRlIGludGVybmFs bHkgKGUuZy4gNTkgaXMgbWFwcGVkIHRvIDYwMDAwLzEwMDEpLiAKVGhlIGNvcnJlY3QgdGltZSBi YXNlIGlzIHNldCBsYXRlciBpbiB0aGUgaW5pdCBjYWxsIGluIGZ1bmN0aW9uCid2dmVuY19zZXRf ZnJhbWVyYXRlJyAKLi4KICAgICdwYXJhbXMtPm1fRnJhbWVSYXRlID0gYXZjdHgtPnRpbWVfYmFz ZS5kZW47JwogICAgJ3BhcmFtcy0+bV9GcmFtZVNjYWxlID0gYXZjdHgtPnRpbWVfYmFzZS5udW07 JwoKQnV0IGluZGVlZCBJIHdhcyBhd2FyZSB0aGF0IEFWQ29kZWNDb250ZXh0LmZyYW1lcmF0ZSBh bmQKQVZDb2RlY0NvbnRleHQudGltZV9iYXNlIGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5LgpJIHdp bGwgY2hhbmdlIGl0LCB0aGFua3MuCgo+PiArICAgIHZ2ZW5jX2luaXRfZGVmYXVsdCgmcGFyYW1z LCBhdmN0eC0+d2lkdGgsIGF2Y3R4LT5oZWlnaHQsIGZyYW1lcmF0ZSwKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgKHFwID49IDApID8gMCA6IGF2Y3R4LT5iaXRfcmF0ZSwgKHFwIDwgMCkgPyAz MiA6IHFwLCBwcmVzZXQpOwo+PiArCj4+ICsgICAgZmZfdnZlbmNfc2V0X3ZlcmJvc2l0b3J5KCZw YXJhbXMpOwo+PiArCj4+ICsgICAgaWYgKGF2Y3R4LT50aHJlYWRfY291bnQgPiAwKQo+PiArICAg ICAgICBwYXJhbXMubV9udW1UaHJlYWRzID0gYXZjdHgtPnRocmVhZF9jb3VudDsKPj4gKwo+PiAr ICAgIC8qIEdPUCBzZXR0aW5ncyAoSURSL0NSQSkgKi8KPj4gKyAgICBpZiAoYXZjdHgtPmZsYWdz ICYgQVZfQ09ERUNfRkxBR19DTE9TRURfR09QKQo+PiArICAgICAgICBwYXJhbXMubV9EZWNvZGlu Z1JlZnJlc2hUeXBlID0gVlZFTkNfRFJUX0lEUjsKPj4gKwo+PiArICAgIGlmIChhdmN0eC0+Z29w X3NpemUgPT0gMSkgewo+PiArICAgICAgICBwYXJhbXMubV9HT1BTaXplID0gMTsKPj4gKyAgICAg ICAgcGFyYW1zLm1fSW50cmFQZXJpb2QgPSAxOwo+PiArICAgIH0gZWxzZSB7Cj4+ICsgICAgICAg IHBhcmFtcy5tX0ludHJhUGVyaW9kU2VjID0gcy0+b3B0aW9ucy5pbnRyYVJlZnJlc2hTZWM7Cj4+ ICsgICAgfQo+PiArCj4+ICsgICAgcGFyYW1zLm1fQWNjZXNzVW5pdERlbGltaXRlciA9IHRydWU7 Cj4+ICsgICAgcGFyYW1zLm1fUkNOdW1QYXNzZXMgPSAxOwo+PiArCj4+ICsgICAgcGFyYW1zLm1f dXNlUGVyY2VwdFFQQSA9IHMtPm9wdGlvbnMuc3ViamVjdGl2ZU9wdGltaXphdGlvbjsKPj4gKyAg ICBwYXJhbXMubV9sZXZlbCAgICAgICAgID0gKHZ2ZW5jTGV2ZWwpIHMtPm9wdGlvbnMubGV2ZWxJ ZGM7Cj4+ICsgICAgcGFyYW1zLm1fbGV2ZWxUaWVyICAgICA9ICh2dmVuY1RpZXIpIHMtPm9wdGlv bnMudGllcjsKPj4gKwo+PiArICAgIGZmX3Z2ZW5jX3NldF9mcmFtZXJhdGUoYXZjdHgsICZwYXJh bXMpOwo+PiArCj4+ICsgICAgcmV0ID0gZmZfdnZlbmNfc2V0X3BpY19mb3JtYXQoYXZjdHgsICZw YXJhbXMpOwo+PiArICAgIGlmKCByZXQgIT0gMCApCj4+ICsgICAgICAgIHJldHVybiByZXQ7Cj4+ ICsKPj4gKyAgICBmZl92dmVuY19zZXRfY29sb3JfZm9ybWF0KGF2Y3R4LCAmcGFyYW1zKTsKPj4g Kwo+PiArICAgIHJldCA9IGZmX3Z2ZW5jX3BhcnNlX3Z2ZW5jX3BhcmFtcyhhdmN0eCwgJnBhcmFt cywgJnN0YXRzZmlsZVswXSk7Cj4+ICsgICAgaWYoIHJldCAhPSAwICkKPj4gKyAgICAgICAgcmV0 dXJuIHJldDsKPj4gKwo+PiArCj4+ICsgICAgcmV0ID0gZmZfdnZlbmNfc2V0X3JjX21vZGUoYXZj dHgsICZwYXJhbXMpOwo+PiArICAgIGlmKCByZXQgIT0gMCApCj4+ICsgICAgICAgIHJldHVybiBy ZXQ7Cj4+ICsKPj4gKyAgICBzLT52dmVuY0VuYyA9IHZ2ZW5jX2VuY29kZXJfY3JlYXRlKCk7Cj4+ ICsgICAgaWYgKE5VTEwgPT0gcy0+dnZlbmNFbmMpIHsKPiAKPiBpZiAoIXMtPnZ2ZW5jRW5jKSBp cyB0aGUgY29tbW9uIGNoZWNrIGhlcmUuCj4gClRoYW5rcy4KCj4+ICsgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiY2Fubm90IGNyZWF0ZSB2dmMgZW5jb2RlciAodnZlbmMpXG4i KTsKPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPj4gKyAgICB9Cj4+ICsKPj4g KyAgICB2dmVuY19zZXRfbXNnX2NhbGxiYWNrKCZwYXJhbXMsIHMtPnZ2ZW5jRW5jLCBmZl92dmVu Y19sb2dfY2FsbGJhY2spOwo+PiArICAgIHJldCA9IHZ2ZW5jX2VuY29kZXJfb3BlbihzLT52dmVu Y0VuYywgJnBhcmFtcyk7Cj4+ICsgICAgaWYgKDAgIT0gcmV0KSB7Cj4+ICsgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiY2Fubm90IG9wZW4gdnZjIGVuY29kZXIgKHZ2ZW5jKTog JXNcbiIsCj4+ICsgICAgICAgICAgICAgICB2dmVuY19nZXRfbGFzdF9lcnJvcihzLT52dmVuY0Vu YykpOwo+PiArICAgICAgICB2dmVuY19lbmNvZGVyX2Nsb3NlKHMtPnZ2ZW5jRW5jKTsKPj4gKyAg ICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICB2dmVu Y19nZXRfY29uZmlnKHMtPnZ2ZW5jRW5jLCAmcGFyYW1zKTsgICAgIC8qIGdldCB0aGUgYWRhcHRl ZCBjb25maWcgKi8KPj4gKwo+PiArICAgIGF2X2xvZyhhdmN0eCwgYXZfbG9nX2dldF9sZXZlbCgp LCAidnZlbmMgdmVyc2lvbjogJXNcbiIsIHZ2ZW5jX2dldF92ZXJzaW9uKCkpOwo+PiArICAgIGF2 X2xvZyhhdmN0eCwgYXZfbG9nX2dldF9sZXZlbCgpLCAiJXNcbiIsCj4+ICsgICAgICAgICAgICB2 dmVuY19nZXRfY29uZmlnX2FzX3N0cmluZygmcGFyYW1zLCBwYXJhbXMubV92ZXJib3NpdHkpKTsK Pj4gKwo+PiArICAgIGlmIChwYXJhbXMubV9SQ051bVBhc3NlcyA9PSAyKSB7Cj4+ICsgICAgICAg IHJldCA9IHZ2ZW5jX2luaXRfcGFzcyhzLT52dmVuY0VuYywgcGFyYW1zLm1fUkNQYXNzIC0gMSwg JnN0YXRzZmlsZVswXSk7Cj4+ICsgICAgICAgIGlmICgwICE9IHJldCkgewo+PiArICAgICAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsCj4+ICsgICAgICAgICAgICAgICAgICAgImNh bm5vdCBpbml0IHBhc3MgJWQgZm9yIHZ2YyBlbmNvZGVyICh2dmVuYyk6ICVzXG4iLAo+PiArICAg ICAgICAgICAgICAgICAgIHBhcmFtcy5tX1JDUGFzcywgdnZlbmNfZ2V0X2xhc3RfZXJyb3Iocy0+ dnZlbmNFbmMpKTsKPj4gKyAgICAgICAgICAgIHZ2ZW5jX2VuY29kZXJfY2xvc2Uocy0+dnZlbmNF bmMpOwo+PiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPj4gKyAgICAgICAg fQo+PiArICAgIH0KPj4gKwo+PiArICAgIHMtPnBBVSA9IHZ2ZW5jX2FjY2Vzc1VuaXRfYWxsb2Mo KTsKPj4gKyAgICBpZiggIXMtPnBBVSApewo+PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19GQVRBTCwgImNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIEFVIHBheWxvYWRcbiIpOwo+IAo+ IDEuIFRoZXJlIGlzIGEgbWVtb3J5IGxlYWsgaGVyZSwgYXMgeW91IGRvbid0IGNsb3NlIHRoZSBl bmNvZGVyLgo+IDIuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGJ5IHNldHRpbmcgdGhlIEZGX0NPREVD X0NBUF9JTklUX0NMRUFOVVAKPiBjYXBfaW50ZXJuYWw7IHRoZW4geW91IHNob3VsZCAoaW4gZmFj dCwgbmVlZCB0bykgcmVtb3ZlIGFsbCB0aGUKPiB2dmVuY19lbmNvZGVyX2Nsb3NlKCkgY2FsbHMu Cj4gKFRoaXMgYWxzbyBmaXhlcyBsZWFrcyBvZiBwQVUgKGl0IGdldHMgbmV2ZXIgZnJlZWQgb24g aW5pdCBlcnJvcnMgYXQgYWxsCj4gYW5kIGxlYWtzIGUuZy4gb24gZmZfdnZlbmNfaW5pdF9leHRy YWRhdGEoKSBlcnJvcnMuKQo+IApUaGFua3MuIEkgd2lsbCByZXR1cm4gYW4gZXJyb3IuCknCtGxs IGFkZCBGRl9DT0RFQ19DQVBfSU5JVF9DTEVBTlVQIGFuZCByZW1vdmUgYWxsIHZ2ZW5jX2VuY29k ZXJfY2xvc2UoKQpjYWxscy4KCj4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4+ ICsgICAgfQo+PiArICAgIHZ2ZW5jX2FjY2Vzc1VuaXRfYWxsb2NfcGF5bG9hZChzLT5wQVUsIGF2 Y3R4LT53aWR0aCAqIGF2Y3R4LT5oZWlnaHQpOwo+PiArICAgIGlmKCAhcy0+cEFVICl7Cj4gCj4g VGhpcyBpcyBhIG5vbnNlbnNlIGNoZWNrOiBzLT5wQVUgaXMgYWxyZWFkeSBzZXQgYW5kIGNhbid0 IGJlIHVuc2V0IGJ5Cj4gdGhlIGNhbGwsIHNvIG9uZSBoYXMgdG8gY2hlY2sgdGhpcyBzb21laG93 IGVsc2UuCj4gClRoYW5rcyBmb3Igc2VlaW5nIHRoaXMuIEl0IGhhdmUgdG8gYmUgCiAgICBpZiAo IXMtPnBBVS0+cGF5bG9hZCl7CknCtGxsIGNoYW5nZSBpdC4KCj4+ICsgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0ZBVEFMLCAiY2Fubm90IGFsbG9jYXRlIHBheWxvYWQgbWVtb3J5IG9mIHNp emUgJWRcbiIsCj4gCj4gQVZfTE9HX0VSUk9SLCBub3QgQVZfTE9HX0ZBVEFMCj4gCj4+ICsgICAg ICAgICAgICAgICAgYXZjdHgtPndpZHRoICogYXZjdHgtPmhlaWdodCApOwo+PiArICAgICAgICBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHJldCA9IGZmX3Z2 ZW5jX2luaXRfZXh0cmFkYXRhKGF2Y3R4LCBzKTsKPj4gKyAgICBpZiggcmV0ICE9IDAgKQo+PiAr ICAgICAgICByZXR1cm4gcmV0Owo+PiArCj4+ICsgICAgcy0+ZW5jb2RlRG9uZSA9IGZhbHNlOwo+ PiArICAgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgYXZfY29sZCBpbnQgZmZfdnZl bmNfZW5jb2RlX2Nsb3NlKEFWQ29kZWNDb250ZXh0ICogYXZjdHgpCj4+ICt7Cj4+ICsgICAgVlZl bkNDb250ZXh0ICpzID0gKFZWZW5DQ29udGV4dCAqKSBhdmN0eC0+cHJpdl9kYXRhOwo+PiArICAg IGlmIChzLT52dmVuY0VuYykgewo+PiArICAgICAgICBpZiAoYXZfbG9nX2dldF9sZXZlbCgpID49 IEFWX0xPR19WRVJCT1NFKQo+PiArICAgICAgICAgICAgdnZlbmNfcHJpbnRfc3VtbWFyeShzLT52 dmVuY0VuYyk7Cj4+ICsKPj4gKyAgICAgICAgaWYgKDAgIT0gdnZlbmNfZW5jb2Rlcl9jbG9zZShz LT52dmVuY0VuYykpIHsKPj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9S LCAiY2Fubm90IGNsb3NlIHZ2ZW5jXG4iKTsKPj4gKyAgICAgICAgICAgIHJldHVybiAtMTsKPiAK PiBZb3Ugc2hvdWxkIGZyZWUgdGhlIGFjY2VzcyB1bml0IGV2ZW4gaWYgdnZlbmNfZW5jb2Rlcl9j bG9zZSgpIHJldHVybmVkCj4gYW4gZXJyb3IuCgpUaGFua3MuIEnCtGxsIG1vdmUgdGhlIHZ2ZW5j X2FjY2Vzc1VuaXRfZnJlZSB0byB0aGUgdG9wIGJlZm9yZQpjYWxsaW5nIHZ2ZW5jX2VuY29kZXJf Y2xvc2UuCgo+IAo+PiArICAgICAgICB9Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgdnZlbmNfYWNj ZXNzVW5pdF9mcmVlKHMtPnBBVSwgdHJ1ZSk7Cj4gCj4gQ2FuIHRoaXMgaGFuZGxlIHRoZSBjYXNl IGluIHdoaWNoIHMtPnBBVSBpcyBOVUxMPwo+IApZZXMsIHRoZSBmdW5jdGlvbiB2dmVuY19hY2Nl c3NVbml0X2ZyZWUgd2lsbCBjaGVjayB0aGlzIGludGVybmFsbHkKYXMgd2VsbC4gSG93ZXZlciBJ IGFkZCBhIG51bGwtY2hlY2sgdG8gbWFrZSBpdCBjbGVhci4KCj4+ICsKPj4gKyAgICByZXR1cm4g MDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGF2X2NvbGQgaW50IGZmX3Z2ZW5jX2VuY29kZV9mcmFt ZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWUGFja2V0ICpwa3QsCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWRnJhbWUgKmZyYW1lLCBpbnQgKmdv dF9wYWNrZXQpCj4+ICt7Cj4+ICsgICAgVlZlbkNDb250ZXh0ICpzID0gKFZWZW5DQ29udGV4dCAq KSBhdmN0eC0+cHJpdl9kYXRhOwo+PiArICAgIHZ2ZW5jWVVWQnVmZmVyICpweXV2YnVmOwo+PiAr ICAgIHZ2ZW5jWVVWQnVmZmVyIHl1dmJ1ZjsKPj4gKyAgICBpbnQgcGljdF90eXBlOwo+PiArICAg IGludCByZXQ7Cj4+ICsKPj4gKyAgICBweXV2YnVmID0gTlVMTDsKPj4gKyAgICBpZiAoZnJhbWUp IHsKPj4gKyAgICAgICAgaWYgKGF2Y3R4LT5waXhfZm10ID09IEFWX1BJWF9GTVRfWVVWNDIwUDEw TEUpIHsKPj4gKyAgICAgICAgICAgIHZ2ZW5jX1lVVkJ1ZmZlcl9kZWZhdWx0KCZ5dXZidWYpOwo+ PiArICAgICAgICAgICAgeXV2YnVmLnBsYW5lc1swXS5wdHIgPSAoaW50MTZfdCAqKSBmcmFtZS0+ ZGF0YVswXTsKPj4gKyAgICAgICAgICAgIHl1dmJ1Zi5wbGFuZXNbMV0ucHRyID0gKGludDE2X3Qg KikgZnJhbWUtPmRhdGFbMV07Cj4+ICsgICAgICAgICAgICB5dXZidWYucGxhbmVzWzJdLnB0ciA9 IChpbnQxNl90ICopIGZyYW1lLT5kYXRhWzJdOwo+PiArCj4+ICsgICAgICAgICAgICB5dXZidWYu cGxhbmVzWzBdLndpZHRoID0gZnJhbWUtPndpZHRoOwo+PiArICAgICAgICAgICAgeXV2YnVmLnBs YW5lc1swXS5oZWlnaHQgPSBmcmFtZS0+aGVpZ2h0Owo+PiArICAgICAgICAgICAgLyogc3RyaWRl IGlzIHVzZWQgaW4gMTZiaXRzYW1wbGVzICgxNmJpdCkgaW4gdnZlbmMsIGZmbXBlZyB1c2VzIHN0 cmlkZSBpbiBieXRlcyAqLwo+PiArICAgICAgICAgICAgeXV2YnVmLnBsYW5lc1swXS5zdHJpZGUg PSBmcmFtZS0+bGluZXNpemVbMF0gPj4gMTsKPj4gKwo+PiArICAgICAgICAgICAgeXV2YnVmLnBs YW5lc1sxXS53aWR0aCA9IGZyYW1lLT53aWR0aCA+PiAxOwo+PiArICAgICAgICAgICAgeXV2YnVm LnBsYW5lc1sxXS5oZWlnaHQgPSBmcmFtZS0+aGVpZ2h0ID4+IDE7Cj4+ICsgICAgICAgICAgICB5 dXZidWYucGxhbmVzWzFdLnN0cmlkZSA9IGZyYW1lLT5saW5lc2l6ZVsxXSA+PiAxOwo+PiArCj4+ ICsgICAgICAgICAgICB5dXZidWYucGxhbmVzWzJdLndpZHRoID0gZnJhbWUtPndpZHRoID4+IDE7 Cj4+ICsgICAgICAgICAgICB5dXZidWYucGxhbmVzWzJdLmhlaWdodCA9IGZyYW1lLT5oZWlnaHQg Pj4gMTsKPj4gKyAgICAgICAgICAgIHl1dmJ1Zi5wbGFuZXNbMl0uc3RyaWRlID0gZnJhbWUtPmxp bmVzaXplWzJdID4+IDE7Cj4+ICsKPj4gKyAgICAgICAgICAgIHl1dmJ1Zi5jdHMgPSBmcmFtZS0+ cHRzOwo+PiArICAgICAgICAgICAgeXV2YnVmLmN0c1ZhbGlkID0gdHJ1ZTsKPj4gKyAgICAgICAg ICAgIHB5dXZidWYgPSAmeXV2YnVmOwo+PiArICAgICAgICB9IGVsc2Ugewo+PiArICAgICAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsCj4+ICsgICAgICAgICAgICAgICAgICAgInVu c3VwcG9ydGVkIGlucHV0IGNvbG9yc3BhY2UhIGlucHV0IG11c3QgYmUgeXV2NDIwcDEwbGUiKTsK Pj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gCj4gQ2hlY2tzIGxpa2Ug dGhlc2UgZG8gbm90IGJlbG9uZyBpbiBhIHNpbmdsZSBlbmNvZGVyOyB0aGV5IGFyZSBzaW1wbHkK PiBhbGxvd2VkIHRvIHByZXN1bWUgdGhhdCBhdmN0eC0+cGl4X2ZtdCBkb2VzIG5vdCBjaGFuZ2Ug ZHVyaW5nIGFuIGVuY29kZQo+IHNlc3Npb24gYW5kIHRoYXQgYWxsIGZyYW1lcyByZWFjaGluZyB0 aGUgZGVjb2RlciBhY3R1YWxseSBoYXZlIHRoaXMKPiBwaXhlbCBmb3JtYXQuCj4gClRoYW5rcywg SSB3aWxsIHJlbW92ZSB0aGUgY2hlY2suCgo+PiArICAgICAgICB9Cj4+ICsgICAgfQo+PiArCj4+ ICsgICAgaWYgKCFzLT5lbmNvZGVEb25lKSB7Cj4+ICsgICAgICAgIHJldCA9IHZ2ZW5jX2VuY29k ZShzLT52dmVuY0VuYywgcHl1dmJ1Ziwgcy0+cEFVLCAmcy0+ZW5jb2RlRG9uZSk7Cj4+ICsgICAg ICAgIGlmIChyZXQgIT0gMCkgewo+PiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJlcnJvciBpbiB2dmVuYzo6ZW5jb2RlIC0gcmV0OiVkXG4iLAo+PiArICAgICAgICAg ICAgICAgICAgIHJldCk7Cj4+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ IAo+IFRoaXMgaXMgbm90IEVJTlZBTC4gSXQgaXMgQVZFUlJPUl9FWFRFUk5BTC4KPiAKVGhhbmtz LiBJwrRsbCBjaGFuZ2UgaXQuCgo+PiArICAgICAgICB9Cj4+ICsgICAgfSBlbHNlIHsKPj4gKyAg ICAgICAgKmdvdF9wYWNrZXQgPSAwOwo+IAo+IFVuZWNlc3Nhcnk6ICpnb3RfcGFja2V0IGlzIGFs cmVhZHkgemVybyBiZWZvcmUgd2UgZW50ZXIgdGhpcyBmdW5jdGlvbi4KPiAKZ29vZCBwb2ludC4g ScK0bGwgcmVtb3ZlIGl0LgoKPj4gKyAgICAgICAgcmV0dXJuIDA7Cj4+ICsgICAgfQo+PiArCj4+ ICsgICAgaWYgKHMtPnBBVS0+cGF5bG9hZFVzZWRTaXplID4gMCkgewo+PiArICAgICAgICByZXQg PSBmZl9nZXRfZW5jb2RlX2J1ZmZlcihhdmN0eCwgcGt0LCBzLT5wQVUtPnBheWxvYWRVc2VkU2l6 ZSwgMCk7Cj4+ICsgICAgICAgIGlmIChyZXQgPCAwKSB7Cj4+ICsgICAgICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19FUlJPUiwgIkVycm9yIGdldHRpbmcgb3V0cHV0IHBhY2tldC5cbiIpOwo+ IAo+IFVubmVjZXNzYXJ5LCBhcyBmZl9nZXRfZW5jb2RlX2J1ZmZlcigpIGFscmVhZHkgZW1pdHMg aXRzIG93biBlcnJvciBtZXNzYWdlcy4KPiAKR29vZCB0byBrbm93LiBJwrRsbCByZW1vdmUgaXQu Cgo+PiArICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAg ICAgIG1lbWNweShwa3QtPmRhdGEsIHMtPnBBVS0+cGF5bG9hZCwgcy0+cEFVLT5wYXlsb2FkVXNl ZFNpemUpOwo+PiArCj4+ICsgICAgICAgIGlmIChzLT5wQVUtPmN0c1ZhbGlkKQo+PiArICAgICAg ICAgICAgcGt0LT5wdHMgPSBzLT5wQVUtPmN0czsKPj4gKyAgICAgICAgaWYgKHMtPnBBVS0+ZHRz VmFsaWQpCj4+ICsgICAgICAgICAgICBwa3QtPmR0cyA9IHMtPnBBVS0+ZHRzOwo+PiArICAgICAg ICBwa3QtPmZsYWdzIHw9IEFWX1BLVF9GTEFHX0tFWSAqIHMtPnBBVS0+cmFwOwo+PiArCj4+ICsg ICAgICAgIHN3aXRjaCAocy0+cEFVLT5zbGljZVR5cGUpIHsKPj4gKyAgICAgICAgY2FzZSBWVkVO Q19JX1NMSUNFOgo+PiArICAgICAgICAgICAgcGljdF90eXBlID0gQVZfUElDVFVSRV9UWVBFX0k7 Cj4+ICsgICAgICAgICAgICBicmVhazsKPj4gKyAgICAgICAgY2FzZSBWVkVOQ19QX1NMSUNFOgo+ PiArICAgICAgICAgICAgcGljdF90eXBlID0gQVZfUElDVFVSRV9UWVBFX1A7Cj4+ICsgICAgICAg ICAgICBicmVhazsKPj4gKyAgICAgICAgY2FzZSBWVkVOQ19CX1NMSUNFOgo+PiArICAgICAgICAg ICAgcGljdF90eXBlID0gQVZfUElDVFVSRV9UWVBFX0I7Cj4+ICsgICAgICAgICAgICBicmVhazsK Pj4gKyAgICAgICAgZGVmYXVsdDoKPj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiVW5rbm93biBwaWN0dXJlIHR5cGUgZW5jb3VudGVyZWQuXG4iKTsKPj4gKyAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAg ICAgICAgZmZfc2lkZV9kYXRhX3NldF9lbmNvZGVyX3N0YXRzKHBrdCwgMCwgTlVMTCwgMCwgcGlj dF90eXBlKTsKPiAKPiBQb2ludGxlc3MgZ2l2ZW4gdGhhdCB5b3UgZG8gbm90IHJlYWxseSBoYXZl IG1lYW5pbmdmdWwgc3RhdGlzdGljcyB0byBzZXQuCj4gCnZ2ZW5jIGN1cnJlbnRseSBvbmx5IHJl dHVybnMgdGhlIHBpY3R1cmUgdHlwZSBhcyBzdGF0aXN0aWNzLgpJIGFkZGVkIHRoaXMgY29kZSB0 byBjYWxsIGFsbCBiYXNpYyBmZm1wZWcgcm91dGluZXMgZHVyaW5nIGFuIGVuY29kaW5nCnN0ZXAu Ckhvd2V2ZXIgYSBwaWN0dXJlIHR5cGUgaXMgYWxzbyBhIHN0YXRpc3RpYyB2YWx1ZS4gClNoYWxs IEkgcmVtb3ZlIHRoaXMgY29kZSBibG9jayBvciBsZWF2ZSBpdCB0byBhZGQgbW9yZSBzdGF0aXN0 aWNzIGluCnVwY29taW5nIHZlcnNpb25zPwoKPj4gKwo+PiArICAgICAgICAqZ290X3BhY2tldCA9 IDE7Cj4+ICsKPj4gKyAgICAgICAgcmV0dXJuIDA7Cj4+ICsgICAgfSBlbHNlIHsKPj4gKyAgICAg ICAgKmdvdF9wYWNrZXQgPSAwOwo+PiArICAgICAgICByZXR1cm4gMDsKPj4gKyAgICB9Cj4+ICsK Pj4gKyAgICByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IGVudW0gQVZQaXhl bEZvcm1hdCBwaXhfZm10c192dmVuY1tdID0gewo+PiArICAgIEFWX1BJWF9GTVRfWVVWNDIwUDEw TEUsCj4+ICsgICAgQVZfUElYX0ZNVF9OT05FCj4+ICt9Owo+PiArCj4+ICsjZGVmaW5lIE9GRlNF VCh4KSBvZmZzZXRvZihWVmVuQ0NvbnRleHQsIHgpCj4+ICsjZGVmaW5lIFZFIEFWX09QVF9GTEFH X1ZJREVPX1BBUkFNIHwgQVZfT1BUX0ZMQUdfRU5DT0RJTkdfUEFSQU0KPj4gK3N0YXRpYyBjb25z dCBBVk9wdGlvbiBsaWJ2dmVuY19vcHRpb25zW10gPSB7Cj4+ICsgICAgeyJwcmVzZXQiLCAic2V0 IGVuY29kaW5nIHByZXNldCgwOiBmYXN0ZXIgLSA0OiBzbG93ZXIiLCBPRkZTRVQoIG9wdGlvbnMu cHJlc2V0KSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IDJ9ICwgMCAsIDQgLCBWRSwgInByZXNl dCJ9LAo+PiArICAgICAgICB7ICJmYXN0ZXIiLCAiMCIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7 Lmk2NCA9IFZWRU5DX0ZBU1RFUn0sIElOVF9NSU4sIElOVF9NQVgsIFZFLCAicHJlc2V0IiB9LAo+ PiArICAgICAgICB7ICJmYXN0IiwgICAiMSIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9 IFZWRU5DX0ZBU1R9LCAgIElOVF9NSU4sIElOVF9NQVgsIFZFLCAicHJlc2V0IiB9LAo+PiArICAg ICAgICB7ICJtZWRpdW0iLCAiMiIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IFZWRU5D X01FRElVTX0sIElOVF9NSU4sIElOVF9NQVgsIFZFLCAicHJlc2V0IiB9LAo+PiArICAgICAgICB7 ICJzbG93IiwgICAiMyIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IFZWRU5DX1NMT1d9 LCAgIElOVF9NSU4sIElOVF9NQVgsIFZFLCAicHJlc2V0IiB9LAo+PiArICAgICAgICB7ICJzbG93 ZXIiLCAiNCIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IFZWRU5DX1NMT1dFUn0sIElO VF9NSU4sIElOVF9NQVgsIFZFLCAicHJlc2V0IiB9LAo+PiArICAgIHsgInFwIiAgICAgLCAic2V0 IHF1YW50aXphdGlvbiIsIE9GRlNFVChvcHRpb25zLnFwKSwgQVZfT1BUX1RZUEVfSU5ULCAgey5p NjQgPSAtMX0sIC0xICwgNjMgLFZFLCAicXBfbW9kZSIgfSwKPiAKPiBUaGUgInFwX21vZGUiIGlz IHVubmVjZXNzYXJ5OiBBVk9wdGlvbi51bml0IGV4aXN0cyB0byBsaW5rCj4gQVZfT1BUX1RZUEVf Q09OU1Qgb3B0aW9ucyB0byB0aGUgYWN0dWFsIG9wdGlvbnMuCj4gClRoYW5rcywgSSB3aWxsIHJl bW92ZSBpdC4KCj4+ICsgICAgeyAicGVyaW9kIiAsICJzZXQgKGludHJhKSByZWZyZXNoIHBlcmlv ZCBpbiBzZWNvbmRzIiwgT0ZGU0VUKG9wdGlvbnMuaW50cmFSZWZyZXNoU2VjKSwgQVZfT1BUX1RZ UEVfSU5ULCAgey5pNjQgPSAxfSwgIDEgLCBJTlRfTUFYICxWRSwiaXJlZnJlc2hzZWMiIH0sCj4g Cj4gV2UgYWN0dWFsbHkgaGF2ZSBBVkNvZGVjQ29udGV4dC5nb3Bfc2l6ZSwgd2hpY2ggaXMgaW4g ZnJhbWVzCgpJIGtub3csIGJ1dCAncGVyaW9kJyBpcyBpbiBzZWNvbmRzIGZvciBjb252ZW5pZW5j ZSBhbmQgbm90IGluCmZyYW1lcy4KSW4gdnZlbmMgR09QIGlzIGEgaGllcmFyY2hpY2FsbHkgZ3Jv dXAgb2YgcGljdHVyZXMgKHNpemUgMTYgb3IgMzIpLgpUaGUgZGVjb2RpbmcgcmVmcmVzaCAod2hp Y2ggeW91IGFyZSBjYWxsaW5nIGdvcCkgaXMgaW5kZXBlbmRlbnQgYW5kIGNhbgpiZSBzZXQgYnkg dXNpbmcgdnZlbmMtcGFyYW1zIGludHJhcGVyaW9kPU4sIHdoZXJlIE49ZnJhbWVzCgo+IAo+PiAr ICAgIHsgInN1YmpvcHQiLCAic2V0IHN1YmplY3RpdmUgKHBlcmNlcHR1YWxseSBtb3RpdmF0ZWQp IG9wdGltaXphdGlvbiIsIE9GRlNFVChvcHRpb25zLnN1YmplY3RpdmVPcHRpbWl6YXRpb24pLCBB Vl9PUFRfVFlQRV9CT09MLCB7Lmk2NCA9IDF9LCAgMCAsIDEsIFZFfSwKPj4gKyAgICB7ICJiaXRk ZXB0aDgiLCAic2V0IDhiaXQgY29kaW5nIG1vZGUiLCBPRkZTRVQob3B0aW9ucy5mbGFnOGJpdENv ZGluZyksIEFWX09QVF9UWVBFX0JPT0wsIHsuaTY0ID0gMH0sICAwICwgMSwgVkV9LAo+IAo+IFdo eSBhcmUgdGhlc2Ugc2VwYXJhdGUgb3B0aW9ucyBhbmQgbm90IHNpbXBseSBwYXJ0IG9mIHZ2ZW5j LXBhcmFtcz8KPiAKVGhlcmUgYXJlIHZ2ZW5jLXBhcmFtcyBvcHRpb25zLiBJdMK0cyBqdXN0IGZv ciBjb252ZW5pZW5jZS4gSXTCtHMKYWxzbyBwb3NzaWJsZSB0byB1c2UgCi12dmVuYy1wYXJhbXMg cXBhPTE6aW50ZXJuYWxiaXRkZXB0aD04CgpTaGFsbCBJIHJlbW92ZSB0aGVzZSBvcHRpb25zPwoK Pj4gKyAgICB7ICJ2dmVuYy1wYXJhbXMiLCAic2V0IHRoZSB2dmVuYyBjb25maWd1cmF0aW9uIHVz aW5nIGEgOi1zZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFsdWUgcGFyYW1ldGVycyIsIE9GRlNFVChv cHRpb25zLnZ2ZW5jX29wdHMpLCBBVl9PUFRfVFlQRV9ESUNULCB7IDAgfSwgMCwgMCwgVkUgfSwK Pj4gKyAgICB7ICJsZXZlbGlkYyIsICJ2dmMgbGV2ZWxfaWRjIiwgT0ZGU0VUKCBvcHRpb25zLmxl dmVsSWRjKSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IDB9LCAwLCAxMDUsIFZFLCAibGV2ZWxp ZGMifSwKPj4gKyAgICAgICAgeyAiMCIsICAgImF1dG8iLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwg ey5pNjQgPSAwfSwgIElOVF9NSU4sIElOVF9NQVgsIFZFLCAibGV2ZWxpZGMifSwKPj4gKyAgICAg ICAgeyAiMSIsICAgIjEiICAgLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSAxNn0sIElO VF9NSU4sIElOVF9NQVgsIFZFLCAibGV2ZWxpZGMifSwKPj4gKyAgICAgICAgeyAiMiIsICAgIjIi ICAgLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSAzMn0sIElOVF9NSU4sIElOVF9NQVgs IFZFLCAibGV2ZWxpZGMifSwKPj4gKyAgICAgICAgeyAiMi4xIiwgIjIuMSIgLCAwLCBBVl9PUFRf VFlQRV9DT05TVCwgey5pNjQgPSAzNX0sIElOVF9NSU4sIElOVF9NQVgsIFZFLCAibGV2ZWxpZGMi fSwKPj4gKyAgICAgICAgeyAiMyIsICAgIjMiICAgLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5p NjQgPSA0OH0sIElOVF9NSU4sIElOVF9NQVgsIFZFLCAibGV2ZWxpZGMifSwKPj4gKyAgICAgICAg eyAiMy4xIiwgIjMuMSIgLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSA1MX0sIElOVF9N SU4sIElOVF9NQVgsIFZFLCAibGV2ZWxpZGMifSwKPj4gKyAgICAgICAgeyAiNCIsICAgIjQiICAg LCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSA2NH0sIElOVF9NSU4sIElOVF9NQVgsIFZF LCAibGV2ZWxpZGMifSwKPj4gKyAgICAgICAgeyAiNC4xIiwgIjQuMSIgLCAwLCBBVl9PUFRfVFlQ RV9DT05TVCwgey5pNjQgPSA2N30sIElOVF9NSU4sIElOVF9NQVgsIFZFLCAibGV2ZWxpZGMifSwK Pj4gKyAgICAgICAgeyAiNSIsICAgIjUiICAgLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQg PSA4MH0sIElOVF9NSU4sIElOVF9NQVgsIFZFLCAibGV2ZWxpZGMifSwKPj4gKyAgICAgICAgeyAi NS4xIiwgIjUuMSIgLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSA4M30sIElOVF9NSU4s IElOVF9NQVgsIFZFLCAibGV2ZWxpZGMifSwKPj4gKyAgICAgICAgeyAiNS4yIiwgIjUuMiIgLCAw LCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSA4Nn0sIElOVF9NSU4sIElOVF9NQVgsIFZFLCAi bGV2ZWxpZGMifSwKPj4gKyAgICAgICAgeyAiNiIsICAgIjYiICAgLCAwLCBBVl9PUFRfVFlQRV9D T05TVCwgey5pNjQgPSA5Nn0sIElOVF9NSU4sIElOVF9NQVgsIFZFLCAibGV2ZWxpZGMifSwKPj4g KyAgICAgICAgeyAiNi4xIiwgIjYuMSIgLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSA5 OX0sIElOVF9NSU4sIElOVF9NQVgsIFZFLCAibGV2ZWxpZGMifSwKPj4gKyAgICAgICAgeyAiNi4y IiwgIjYuMiIgLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSAxMDJ9LCBJTlRfTUlOLCBJ TlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4+ICsgICAgICAgIHsgIjYuMyIsICI2LjMiICwgMCwg QVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gMTA1fSwgSU5UX01JTiwgSU5UX01BWCwgVkUsICJs ZXZlbGlkYyJ9LAo+IAo+IFdlIGhhdmUgYSBnZW5lcmljIGxldmVsIG9wdGlvbiwgc28gdGhlcmUg aXMgbm8gbmVlZCBmb3IgdGhpcyBsaXN0IGFib3ZlLgo+IApUaGFua3MsIEkgd2lsbCBoYXZlIGEg bG9vayBpbnRvIHRoYXQuCgo+PiArICAgIHsgInRpZXIiLCAic2V0IHZ2YyB0aWVyIiwgT0ZGU0VU KCBvcHRpb25zLnRpZXIpLCBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0ID0gMH0sICAwICwgMSAsIFZF LCAidGllciJ9LAo+PiArICAgICAgICB7ICJtYWluIiwgIm1haW4iLCAwLCBBVl9PUFRfVFlQRV9D T05TVCwgey5pNjQgPSAwfSwgSU5UX01JTiwgSU5UX01BWCwgVkUsICJ0aWVyIn0sCj4+ICsgICAg ICAgIHsgImhpZ2giLCAiaGlnaCIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDF9LCBJ TlRfTUlOLCBJTlRfTUFYLCBWRSwgInRpZXIifSwKPj4gKyAgICB7TlVMTH0KPj4gK307Cj4+ICsK Pj4gK3N0YXRpYyBjb25zdCBBVkNsYXNzIGNsYXNzX2xpYnZ2ZW5jID0gewo+PiArICAgIC5jbGFz c19uYW1lID0gImxpYnZ2ZW5jLXZ2YyBlbmNvZGVyIiwKPj4gKyAgICAuaXRlbV9uYW1lICA9IGF2 X2RlZmF1bHRfaXRlbV9uYW1lLAo+PiArICAgIC5vcHRpb24gICAgID0gbGlidnZlbmNfb3B0aW9u cywKPj4gKyAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwKPj4gK307Cj4+ ICsKPj4gK3N0YXRpYyBjb25zdCBGRkNvZGVjRGVmYXVsdCB2dmVuY19kZWZhdWx0c1tdID0gewo+ PiArICAgIHsgImIiLCAiMCIgfSwKPj4gKyAgICB7ICJnIiwgIi0xIiB9LAo+PiArICAgIHsgTlVM TCB9LAo+PiArfTsKPj4gKwo+PiArRkZDb2RlYyBmZl9saWJ2dmVuY19lbmNvZGVyID0gewo+IAo+ IE1pc3NpbmcgY29uc3QKCkl0wrRzIG5vdCBjb25zaXN0ZW50IGFzIHNvbWUgY29kZWNzIGFyZSBj b25zdCBvdGhlciBub3QuCmUuZy4gZmZfbGliYW9tX2F2MV9lbmNvZGVyLCBmZl9saWJ4MjY1X2Vu Y29kZXIKCknCtGxsIGZpeCBpdC4KCj4gCj4+ICsgICAgLnAubmFtZSAgICAgICAgID0gImxpYnZ2 ZW5jIiwKPj4gKyAgICBDT0RFQ19MT05HX05BTUUoIkguMjY2IC8gVlZDIEVuY29kZXIgVlZlbkMi KSwKPj4gKyAgICAucC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCj4+ICsgICAg LnAuaWQgPGh0dHA6Ly9wLmlkLz4gICAgICAgICAgID0gQVZfQ09ERUNfSURfVlZDLAo+PiArICAg IC5wLmNhcGFiaWxpdGllcyA9IEFWX0NPREVDX0NBUF9ERUxBWSB8IEFWX0NPREVDX0NBUF9PVEhF Ul9USFJFQURTLAo+IAo+IFlvdSBjYW4gYWRkIEFWX0NPREVDX0NBUF9EUjEKPiAKVGhhbmtzLiBJ wrRsbCBhZGQgaXQuCgo+PiArICAgIC5wLnByb2ZpbGVzICAgICA9IE5VTExfSUZfQ09ORklHX1NN QUxMKGZmX3Z2Y19wcm9maWxlcyksCj4+ICsgICAgLnAucHJpdl9jbGFzcyAgID0gJmNsYXNzX2xp YnZ2ZW5jLAo+PiArICAgIC5wLndyYXBwZXJfbmFtZSA9ICJsaWJ2dmVuYyIsCj4+ICsgICAgLnBy aXZfZGF0YV9zaXplID0gc2l6ZW9mKFZWZW5DQ29udGV4dCksCj4+ICsgICAgLnAucGl4X2ZtdHMg ICAgID0gcGl4X2ZtdHNfdnZlbmMsCj4+ICsgICAgLmluaXQgICAgICAgICAgID0gZmZfdnZlbmNf ZW5jb2RlX2luaXQsCj4+ICsgICAgRkZfQ09ERUNfRU5DT0RFX0NCKGZmX3Z2ZW5jX2VuY29kZV9m cmFtZSksCj4+ICsgICAgLmNsb3NlICAgICAgICAgID0gZmZfdnZlbmNfZW5jb2RlX2Nsb3NlLAo+ PiArICAgIC5kZWZhdWx0cyAgICAgICAgID0gdnZlbmNfZGVmYXVsdHMsCj4+ICsgICAgLmNhcHNf aW50ZXJuYWwgID0gRkZfQ09ERUNfQ0FQX0FVVE9fVEhSRUFEUywKPj4gK307Cj4gCj4gX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBmZm1wZWctZGV2ZWwg bWFpbGluZyBsaXN0Cj4gZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcgPG1haWx0bzpmZm1wZWctZGV2 ZWxAZmZtcGVnLm9yZz4KPiBodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1w ZWctZGV2ZWwKPiAKPiBUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwK PiBmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIDxtYWlsdG86ZmZtcGVnLWRldmVsLXJl cXVlc3RAZmZtcGVnLm9yZz4gd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGlu ZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUs IG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1 bnN1YnNjcmliZSIuCg==